Remove ext/open62541

b/242562919

Change-Id: I131b0bcd047f2f69d3a0d3ffd7420ea265512aa0
diff --git a/ext/open62541.cmake b/ext/open62541.cmake
deleted file mode 100644
index c829671..0000000
--- a/ext/open62541.cmake
+++ /dev/null
@@ -1,6 +0,0 @@
-# Copyright 2019 NXP
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-
-INCLUDE(open62541_lib.cmake)
diff --git a/ext/open62541/.clang-tidy b/ext/open62541/.clang-tidy
deleted file mode 100644
index 0b5f28c..0000000
--- a/ext/open62541/.clang-tidy
+++ /dev/null
@@ -1,3 +0,0 @@
-Checks:             'cert-*,performance-*,readability-*,-readability-braces-around-statements'
-WarningsAsErrors:   'cert-*,performance-*,readability-*,-readability-braces-around-statements'
-FormatStyle:        file
diff --git a/ext/open62541/.cquery b/ext/open62541/.cquery
deleted file mode 100644
index bf61846..0000000
--- a/ext/open62541/.cquery
+++ /dev/null
@@ -1,8 +0,0 @@
-%clang
-%c -std=c99
-
-# Includes
--I./include
--I./src
--I./deps
--I./plugins
\ No newline at end of file
diff --git a/ext/open62541/.editorconfig b/ext/open62541/.editorconfig
deleted file mode 100644
index cecbf7d..0000000
--- a/ext/open62541/.editorconfig
+++ /dev/null
@@ -1,27 +0,0 @@
-# EditorConfig is awesome: http://EditorConfig.org
-
-# top-most EditorConfig file
-root = true
-
-# Unix-style newlines with a newline ending every file
-[*]
-end_of_line = lf
-insert_final_newline = true
-indent_style = space
-indent_size = 4
-
-# Matches multiple files with brace expansion notation
-# Set default charset
-[*.{js,py}]
-charset = utf-8
-
-# Tab indentation (no size specified)
-[Makefile]
-indent_style = tab
-
-# Matches the exact files either package.json or .travis.yml
-[{package.json,.travis.yml,appveyor.yml}]
-indent_style = space
-indent_size = 2
-
-
diff --git a/ext/open62541/.travis-apt-pin.preferences b/ext/open62541/.travis-apt-pin.preferences
deleted file mode 100644
index 617f645..0000000
--- a/ext/open62541/.travis-apt-pin.preferences
+++ /dev/null
@@ -1,24 +0,0 @@
-Package: clang-3.9
-Pin: release o=Ubuntu
-Pin-Priority: -1
-
-Package: libclang-common-3.9-dev
-Pin: release o=Ubuntu
-Pin-Priority: -1
-
-Package: libclang1-3.9
-Pin: release o=Ubuntu
-Pin-Priority: -1
-
-Package: libllvm3.9v4
-Pin: release o=Ubuntu
-Pin-Priority: -1
-
-Package: clang-tidy-3.9
-Pin: release o=Ubuntu
-Pin-Priority: -1
-
-Package: libfuzzer-3.9-dev
-Pin: release o=Ubuntu
-Pin-Priority: -1
-
diff --git a/ext/open62541/.travis.yml b/ext/open62541/.travis.yml
deleted file mode 100644
index 9f89954..0000000
--- a/ext/open62541/.travis.yml
+++ /dev/null
@@ -1,385 +0,0 @@
-language: c
-sudo: required
-
-env:
-  global:
-    # GITAUTH:
-    - secure: nSunY54Wp5HkQCHHbKwlwpbaKyqRVIu/0EnhaoJSwhM1wqerQV/E5d/2JelO9/tZgbungAO7wk/fjutRMVc7d378RTIPwS8vHpvZfEoGhCFsLoTOlqESzsZFBup2H5t1lpQ23jRHDOxlLdJy2lz5U+zd1YnYgDXqdDFjegsIYdo=
-    - PYTHON=python2
-    # For tag builds we do not have the base branch in TRAVIS_BRANCH, therefore store it in BRANCH_FOR_TAG
-    - BRANCH_FOR_TAG=$(git ls-remote origin | sed -n "\|$TRAVIS_COMMIT\s\+refs/heads/|{s///p}")
-
-
-dist: trusty
-
-# Make sure we have the git tags. Travis uses shallow checkout where git describe does not work
-git:
-  depth: false
-
-matrix:
-  fast_finish: true
-  include:
-#
-# gcc-4.8 (trusty) full host and cross build with tests:
-# doc, cert, cross-mingw32, cross-mingw64, cross-linux32, cross-raspi, linux64,
-# amalgamated, shared, multithread, encryption, discovery, json, test-ns0-full, test-ns0-minimal, debian-package
-    - os: linux
-      compiler: gcc-4.8
-      addons:
-        apt:
-          sources:
-            # see https://github.com/travis-ci/apt-source-whitelist/blob/master/ubuntu.json
-            - ubuntu-toolchain-r-test
-          packages:
-            - mingw-w64
-            - gcc-mingw-w64-i686
-            - gcc-mingw-w64-x86-64
-            - binutils-mingw-w64-i686
-            - g++-multilib
-            # debian packaging
-            - cmake
-            - debhelper
-            - fakeroot
-            # doc
-            - python-sphinx
-            - graphviz
-            - texlive-generic-extra
-            - texlive-fonts-recommended
-            - texlive-latex-extra
-            - latexmk
-            # tests
-            - check
-            - libsubunit-dev
-            - valgrind
-      env:
-        - MINGW=true
-        - DEBIAN=true
-#
-# gcc-8 full host build with tests:
-# doc, cert, linux64,
-# amalgamated, shared, multithread, encryption, discovery, json, test-ns0-full, test-ns0-minimal
-    - os: linux
-      compiler: gcc-8
-      addons:
-        apt:
-          sources:
-            - ubuntu-toolchain-r-test
-          packages:
-            - gcc-8
-            - gcc-8-multilib
-            # doc
-            - python-sphinx
-            - graphviz
-            - texlive-generic-extra
-            - texlive-fonts-recommended
-            - texlive-latex-extra
-            - latexmk
-            # tests
-            - check
-            - libsubunit-dev
-            - valgrind
-#
-# clang-6 full host build with tests:
-# doc, cert, linux64,
-# amalgamated, shared, multithread, encryption, discovery, json, test-ns0-full, test-ns0-minimal
-    - os: linux
-      compiler: clang-6.0
-      addons:
-        apt:
-          sources:
-            - llvm-toolchain-trusty-6.0
-            - ubuntu-toolchain-r-test
-          packages:
-            - clang-6.0
-            - clang-tidy-6.0
-            # doc
-            - python-sphinx
-            - graphviz
-            - texlive-generic-extra
-            - texlive-fonts-recommended
-            - texlive-latex-extra
-            - latexmk
-            # tests
-            - check
-            - libsubunit-dev
-            - valgrind
-#
-# clang-6 python-3 full host build with tests:
-# doc, cert, linux64,
-# amalgamated, shared, multithread, encryption, discovery, json, test-ns0-full, test-ns0-minimal
-    - os: linux
-      compiler: clang-6.0
-      addons:
-        apt:
-          sources:
-            - llvm-toolchain-trusty-6.0
-            - ubuntu-toolchain-r-test
-          packages:
-            - clang-6.0
-            - clang-tidy-6.0
-            # doc
-            - python3-sphinx
-            - graphviz
-            - texlive-generic-extra
-            - texlive-fonts-recommended
-            - texlive-latex-extra
-            - latexmk
-            # tests
-            - check
-            - libsubunit-dev
-            - valgrind
-      env:
-        - PYTHON=python3
-#
-# tcc full host build:
-# doc, cert, linux64,
-# amalgamated, shared, multithread, encryption, discovery, json, test-ns0-full, test-ns0-minimal
-    - os: linux
-      compiler: tcc
-      addons:
-        apt:
-          packages:
-            # doc
-            - python-sphinx
-            - graphviz
-            - texlive-generic-extra
-            - texlive-fonts-recommended
-            - texlive-latex-extra
-            - latexmk
-            # tests
-            - check
-            - libsubunit-dev
-            - valgrind
-#
-# clang-6 python-3 install build and minimal example:
-# linux64, minimal-example
-    - os: linux
-      compiler: clang-6.0
-      addons:
-        apt:
-          sources:
-            - llvm-toolchain-trusty-6.0
-            - ubuntu-toolchain-r-test
-          packages:
-            - clang-6.0
-            - clang-tidy-6.0
-      env:
-        - INSTALL=true
-        - PYTHON=python3
-        - CXX=clang-6.0
-#
-# gcc-4.8 static code analysis
-    - os: linux
-      compiler: gcc
-      addons:
-        apt:
-          packages:
-            - cppcheck
-      env:
-        - ANALYZE=true
-#
-# clang-6 static code analysis
-    - os: linux
-      compiler: clang-6.0
-      addons:
-        apt:
-          sources:
-            - llvm-toolchain-trusty-6.0
-            - ubuntu-toolchain-r-test
-          packages:
-            - check
-            - libsubunit-dev
-            - clang-6.0
-            - clang-tidy-6.0
-      env:
-        - ANALYZE=true
-        - PYTHON=python3
-#
-# clang-format code analysis
-# is allowed to fail (see allow_failures)
-    - os: linux
-      compiler: clang-6.0
-      addons:
-        apt:
-          sources:
-            - llvm-toolchain-trusty-6.0
-            - ubuntu-toolchain-r-test
-          packages:
-            - clang-6.0
-            - clang-tidy-6.0
-            - clang-format-6.0
-      env:
-        - CLANG_FORMAT=true
-#
-# DOCKER build
-    - os: linux
-      compiler: gcc
-      env:
-        - DOCKER=true
-#
-# clang-6 FUZZER build
-    - os: linux
-      compiler: clang-6.0
-      addons:
-        apt:
-          sources:
-            - llvm-toolchain-trusty-6.0
-            - ubuntu-toolchain-r-test
-          packages:
-            - check
-            - libsubunit-dev
-            - clang-6.0
-            - clang-tidy-6.0
-            - libfuzzer-6.0-dev
-      env:
-        - FUZZER=true
-#
-# OSX clang build
-    - os: osx
-      compiler: clang
-      # disable homebrew auto update which takes a lot of time
-      env: HOMEBREW_NO_AUTO_UPDATE=1
-      cache:
-        directories:
-          - $HOME/Library/Caches/Homebrew
-#
-# SONAR gcc-4.9 build
-    - os: linux
-      compiler: gcc-4.9
-      addons:
-        sonarcloud:
-          organization: open62541
-          branches:
-            - master
-            - sonarcloud
-      env:
-        - SONAR=true
-      cache:
-        directories:
-          - '$HOME/.sonar/cache'
-  allow_failures:
-    #
-    # clang-format code analysis
-    - env:
-        - CLANG_FORMAT=true
-
-cache:
-  pip: true
-  apt: true
-  directories:
-    - $HOME/install
-    - $HOME/.cache/pip
-
-# combine all the commands into one single command. See https://github.com/travis-ci/travis-ci/issues/1066
-before_install: |
- set -eE
-
- errorTrap() {
-   last_rv=$?
-
-   if [ $last_rv -ne 0 ] ; then
-      echo ""
-      echo ""
-      echo "----------------- Error -----------------"
-      echo ""
-      echo "---- Check additional output above!! ----"
-      # Wait a bit until the stdout is flushed
-      for i in 1 2 3 4 5 6 7 8 9 10; do echo "."; sleep 1; done
-   fi
-
-   exit $last_rv
- }
- trap errorTrap 0
-
- # set paths for locally installed libs (like liburcu)
- export LOCAL_PKG=$HOME/install
- mkdir -p $LOCAL_PKG/lib
- mkdir -p $LOCAL_PKG/include
- mkdir -p $LOCAL_PKG/bin
- export LIBRARY_PATH=$LOCAL_PKG/lib:$LIBRARY_PATH
- export C_INCLUDE_PATH=$LOCAL_PKG/include:$C_INCLUDE_PATH
- export CPLUS_INCLUDE_PATH=$LOCAL_PKG/include:$CPLUS_INCLUDE_PATH
- export PKG_CONFIG_PATH=$LOCAL_PKG/lib/pkgconfig:$PKG_CONFIG_PATH
- export PATH=$LOCAL_PKG:$LOCAL_PKG/bin:$PATH
- export CMAKE_PREFIX_PATH=$LOCAL_PKG:CMAKE_PREFIX_PATH
- # set local path for python packages
- export PATH=$PATH:$HOME/.local/bin # linux
- export PATH=$PATH:$HOME/Library/Python #OS X
- export PATH=$PATH:$HOME/Library/Python/2.7/bin #OS X
-
- if [ ${TRAVIS_OS_NAME} == "linux" ]; then sh ./tools/travis/travis_linux_before_install.sh; fi
- if [ ${TRAVIS_OS_NAME} == "osx" ]; then sh ./tools/travis/travis_osx_before_install.sh; fi
-
-script: |
- set -eE
-
- errorTrap() {
-   last_rv=$?
-
-   if [ $last_rv -ne 0 ] ; then
-      echo ""
-      echo ""
-      echo "----------------- Error -----------------"
-      echo ""
-      echo "---- Check additional output above!! ----"
-      # Wait a bit until the stdout is flushed
-      for i in 1 2 3 4 5 6 7 8 9 10; do echo "."; sleep 1; done
-   fi
-
-   exit $last_rv
- }
- trap errorTrap 0
-
- if [ ${TRAVIS_OS_NAME} == "linux" ]; then sh ./tools/travis/travis_linux_script.sh; fi
- if [ ${TRAVIS_OS_NAME} == "osx" ]; then sh ./tools/travis/travis_osx_script.sh; fi
-
-after_success: |
- set -eE
-
- errorTrap() {
-   last_rv=$?
-
-   if [ $last_rv -ne 0 ] ; then
-     echo ""
-     echo ""
-     echo "----------------- Error -----------------"
-     echo ""
-     echo "---- Check additional output above!! ----"
-     # Wait a bit until the stdout is flushed
-     for i in 1 2 3 4 5 6 7 8 9 10; do echo "."; sleep 1; done
-   fi
-
-   exit $last_rv
- }
- trap errorTrap 0
-
- if [ ${TRAVIS_OS_NAME} == "linux" ]; then sh ./tools/travis/travis_linux_after_success.sh; fi
- # Sleep to flush travis output
- echo == Build success ==
- sleep 5
-
-after_failure: |
- # Sleep to flush travis output
- echo == Build failed ==
- sleep 5
-
-deploy:
-  provider: releases
-  api_key:
-    # Uses token from user open62541-travis-release (managed by @Pro). Sets GITAUTH
-    secure: dtn6ayBGoWzeVMM6xYpSRZly1XOhS/2jdiwEHd0hYZIr0dNq18CxTiqbGrUwW1JsSiXoHaGSZhUVr06O1P/tfC3Ma6i7ugyun+yXz6FdZiwirjURI8HQe+XwR4Ui3hqgQSOHLMK/xtOkjM28AN1jg9u3//Zep69xJVIGAqNT0bE=
-  file:
-    - open62541-win32.zip
-    - open62541-win64.zip
-    - open62541-linux32.tar.gz
-    - open62541-linux64.tar.gz
-    - open62541-raspberrypi.tar.gz
-    - open62541.c
-    - open62541.h
-    - open62541*.deb
-  file_glob: true
-  skip_cleanup: true
-  on:
-    repo: open62541/open62541
-    tags: true
-    condition: $MINGW=true
diff --git a/ext/open62541/AUTHORS b/ext/open62541/AUTHORS
deleted file mode 100644
index fe23f18..0000000
--- a/ext/open62541/AUTHORS
+++ /dev/null
@@ -1,13 +0,0 @@
-The authors of open62541 are (in alphabetical order)
-
-Bauer, Maximilian
-Ebrahimi, Reza <reza.ebrahimi.dev (at) gmail.com>
-Graube, Markus <markus.graube (at) tu-dresden.de>
-Gruener, Sten <s.gruener (at) plt.rwth-aachen.de>
-Iatrou, Chris Paul <chris_paul.iatrou (at) tu-dresden.de>
-Jeromin, Holger
-Palm, Florian <f.palm (at) plt.rwth-aachen.de>
-Pfrommer, Julius <julius.pfrommer (at) iosb.fraunhofer.edu>
-Profanter, Stefan <profanter (at) fortiss.org>
-Stalder, Thomas <t.stalder (at) bluetimeconcept.ch>
-Urbas, Leon <leon.urbas (at) tu-dresden.de>
diff --git a/ext/open62541/CHANGELOG b/ext/open62541/CHANGELOG
deleted file mode 100644
index 3e05be6..0000000
--- a/ext/open62541/CHANGELOG
+++ /dev/null
@@ -1,126 +0,0 @@
-This changelog reports changes to the public API. Internal refactorings and bug
-fixes are not reported here.
-
-2018-02-05 pro <profanter at fortiss.org>
-
- * Also pass client to monitoredItem/Events callback
-
-   The UA_MonitoredItemHandlingFunction and UA_MonitoredEventHandlingFunction
-   did not include a reference to the corresponding client used for the call of
-   processPublishResponse.
-   This now also allows to get the client context within the monitored item
-   handling function.
-
-   The API changes are detected by the type-matching in the compiler. So there
-   is little risk for bugs due to unaligned implementations.
-
-2017-09-07 jpfr <julius.pfrommer at web.de>
-
- * Make Client Highlevel Interface consistent
-
-   Two methods in the client highlevel interface were not conformant with the
-   API convention that array sizes are given before the array pointer. This
-   changes the signature of UA_Client_writeArrayDimensionsAttribute and
-   UA_Client_readArrayDimensionsAttribute.
-
-   The API changes are detected by the type-matching in the compiler. So there
-   is little risk for bugs due to unaligned implementations.
-
-2017-08-16 jpfr <julius.pfrommer at web.de>
-
- * Default Attribute Values for Node Attributes
-
-   The AddNodes service takes a structure with the attributes of the new node as
-   input. We began checking the consistency of the attributes more closely. You
-   can now use constant global definitions with default values as a starting
-   point. For example UA_VariableAttributes_default for adding a variable node.
-
- * All nodes have a context pointer
-
-   All nodes now carry a context pointer. The context pointer is initially set
-   to a user-defined memory location. The context pointer is passed to all
-   user-visible callbacks involving the node.
-
- * Global and node-type constructor/destructor
-
-   The constructors are fine-grained mechanisms to control the instantiation and
-   deletion of nodes. Constructors receive the node context pointer and can also
-   replace it.
-
-2017-08-13 Infinity95 <mark.giraud at student.kit.edu>
-
- * New/Delete methods for the server configuration
-
-   The default server configuration is no longer a constant global variable.
-   Instead, it is now handled with a pair of new/delete methods. This enables
-   the use of malloced members of the server configuration. With this change,
-   the endpoint descriptions are no longer generated in the server but are
-   created as part of the server configuration. See the example server
-   implementations on how to use the configuration generation. The change is a
-   precursor to the encryption implementation that ties into the generation of
-   endpoint descriptions in the server config.
-
-   The generation of the default server configuration is implemented as a
-   "plugin". So it comes with CC0 licensing and can be freely adjusted by users.
-
-   The TCP port in the default configuration is 4840. This is the recommended
-   port for OPC UA and now used throughout all examples.
-
-2017-07-04 jpfr <julius.pfrommer at web.de>
-
- * Return partially overlapping ranges
-
-   Test the integrity of the range and compute the max index used for every
-   dimension. The standard says in Part 4, Section 7.22:
-
-   When reading a value, the indexes may not speify a range that is within
-   the bounds of the array. The Server shall return a partial result if some
-   elements exist within the range.
-
-2017-07-03 jpfr <julius.pfrommer at web.de>
-
- * Implement asynchronous service calls for the client
-
-   All OPC UA services are asynchronous in nature. So several service calls can
-   be made without waiting for a response first. Responess may come in a
-   different ordering. The client takes a method pointer and a data pointer to
-   perform an asynchronous callback on the request response.
-
-   Synchronous service calls are still supported in the client. Asynchronous
-   responses are processed in the background until the synchronous response (the
-   client is waiting for) returns the control flow back to the user.
-
-2017-06-26 janitza-thbe
-
- * Enable IPv6 in the networklayer plugin
-
-   The server networklayer listens on several sockets for available networks and
-   IP versions. IPv4 connections are still supported.
-
-   The OPC Foundation ANSI C Stack before 2016 does not fully support IPv6. On
-   Windows, the 'localhost' target is resolved to IPv6 by default. Old
-   applications (e.g. the Conformance Testing Tools) need to connect to
-   127.0.0.1 instead of 'localhost' to force IPv4.
-
-2017-06-16 jpfr <julius.pfrommer at web.de>
-
- * Require the AccessLevel bit UA_ACCESSLEVELMASK_READ for reading
-
-   Set the bit by default when adding nodes for a smooth transition to the new
-   API. This will change at a later point with an additional node settings
-   argument for the AddNodes methods.
-
-2017-05-03 pro <profanter at fortiss.org>
-
- * Array dimensions are UInt32 also for the highlevel client read service
-
-2017-04-16 jpfr <julius.pfrommer at web.de>
-
- * Refactor UA_parseEndpointUrl to work with UA_String
-
-   The output hostname and path now point into the original endpointUrl with an
-   appropriate length.
-
-2017-04-14 jpfr <julius.pfrommer at web.de>
-
- * Auto-instantiate only child nodes marked as mandatory (fixes #1004)
diff --git a/ext/open62541/CMakeLists.txt b/ext/open62541/CMakeLists.txt
deleted file mode 100644
index 5af4224..0000000
--- a/ext/open62541/CMakeLists.txt
+++ /dev/null
@@ -1,1292 +0,0 @@
-cmake_minimum_required(VERSION 3.0...3.12)

-project(open62541)

-# set(CMAKE_VERBOSE_MAKEFILE ON)

-if(${CMAKE_VERSION} VERSION_LESS 3.12)

-    cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})

-endif()

-

-string(TOLOWER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_LOWER_CASE)

-

-set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/tools/cmake")

-find_package(PythonInterp REQUIRED)

-find_package(Git)

-include(AssignSourceGroup)

-include(GNUInstallDirs)

-

-# Set when installed via make install

-set(open62541_TOOLS_DIR ${PROJECT_SOURCE_DIR}/tools)

-set(open62541_NODESET_DIR ${PROJECT_SOURCE_DIR}/deps/ua-nodeset)

-

-include(macros_internal)

-include(macros_public)

-

-#############################

-# Compiled binaries folders #

-#############################

-

-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

-set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

-set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

-

-###########

-# Version #

-###########

-

-include(SetGitBasedVersion)

-

-# The version string will be automatically set based on the git describe output.

-# This will automate the version strings. Just create a new tag, and the version will be set correctly.

-set_open62541_version()

-MESSAGE(STATUS "open62541 Version: ${OPEN62541_VER_MAJOR}.${OPEN62541_VER_MINOR}.${OPEN62541_VER_PATCH}${OPEN62541_VER_LABEL}")

-

-#################

-# Build Options #

-#################

-

-# Set default build type.

-if(NOT CMAKE_BUILD_TYPE)

-    message(STATUS "CMAKE_BUILD_TYPE not given; setting to 'Debug'")

-    set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build" FORCE)

-endif()

-

-option(UA_ENABLE_AMALGAMATION "Concatenate the library to a single file open62541.h/.c" OFF)

-set(UA_AMALGAMATION_ARCHITECTURES "" CACHE STRING "List of architectures to include in amalgamation")

-mark_as_advanced(UA_AMALGAMATION_ARCHITECTURES)

-

-# Platform. This is at the beginning in case the architecture changes some UA options

-set(UA_ARCHITECTURE "None" CACHE STRING "Architecture to build open62541 on")

-

-if(UA_ENABLE_AMALGAMATION)

-    if("${UA_AMALGAMATION_ARCHITECTURES}" STREQUAL "")

-        if(NOT "${UA_ARCHITECTURE}" STREQUAL "None")

-            set(UA_AMALGAMATION_ARCHITECTURES "${UA_ARCHITECTURE}")

-        else()

-            # select some default architectures which should be included

-            set(UA_AMALGAMATION_ARCHITECTURES "win32;posix")

-        endif()

-    endif()

-    message(STATUS "Architectures included in amalgamation: ${UA_AMALGAMATION_ARCHITECTURES}")

-endif()

-

-if("${UA_ARCHITECTURE}" STREQUAL "None")

-    if(UNIX)

-        set(UA_ARCHITECTURE "posix" CACHE STRING "" FORCE)

-    elseif(WIN32)

-        set(UA_ARCHITECTURE "win32" CACHE STRING ""  FORCE)

-    endif(UNIX)

-endif()

-

-message(STATUS "The selected architecture is: ${UA_ARCHITECTURE}")

-string(TOUPPER ${UA_ARCHITECTURE} UA_ARCHITECTURE_UPPER)

-add_definitions(-DUA_ARCHITECTURE_${UA_ARCHITECTURE_UPPER})

-

-add_subdirectory(arch)

-

-GET_PROPERTY(architectures GLOBAL PROPERTY UA_ARCHITECTURES)

-list(SORT architectures)

-set_property(CACHE UA_ARCHITECTURE PROPERTY STRINGS None ${architectures})

-

-GET_PROPERTY(ua_architecture_directories_to_include GLOBAL PROPERTY UA_INCLUDE_DIRECTORIES)

-

-GET_PROPERTY(ua_architecture_headers GLOBAL PROPERTY UA_ARCHITECTURE_HEADERS)

-

-GET_PROPERTY(ua_architecture_headers_beginning GLOBAL PROPERTY UA_ARCHITECTURE_HEADERS_BEGINNING)

-

-GET_PROPERTY(ua_architecture_sources GLOBAL PROPERTY UA_ARCHITECTURE_SOURCES)

-

-set(ua_architecture_sources ${ua_architecture_sources}

-    ${PROJECT_SOURCE_DIR}/arch/network_tcp.c

-)

-

-set(ua_architecture_headers ${ua_architecture_headers}

-    ${PROJECT_SOURCE_DIR}/include/open62541/network_tcp.h

-    ${PROJECT_SOURCE_DIR}/include/open62541/architecture_functions.h

-)

-

-if(UA_ENABLE_WEBSOCKET_SERVER)

-    set(ua_architecture_sources ${ua_architecture_sources}

-                                ${PROJECT_SOURCE_DIR}/arch/network_ws.c)

-

-    set(ua_architecture_headers ${ua_architecture_headers}

-                                ${PROJECT_SOURCE_DIR}/include/open62541/network_ws.h)

-endif()

-

-if(${UA_ARCHITECTURE} STREQUAL "None")

-  message(FATAL_ERROR "No architecture was selected. Please select the architecture of your target platform")

-endif(${UA_ARCHITECTURE} STREQUAL "None")

-

-# Create a list of ifdefs for all the architectures.

-# This is needed to enable a default architecture if none is selected through gcc compiler def.

-# Especially if someone is using the amalgamated file on Linux/Windows he should not need to define an architecture.

-set(UA_ARCHITECTURES_NODEF "1 ") #to make it easier to append later the && symbol

-foreach(arch_ ${architectures})

-    string(TOUPPER ${arch_} UA_ARCHITECTURE_UPPER_)

-    set(UA_ARCHITECTURES_NODEF "${UA_ARCHITECTURES_NODEF} && !defined(UA_ARCHITECTURE_${UA_ARCHITECTURE_UPPER_})")

-endforeach(arch_ ${architectures})

-

-# Options

-set(UA_LOGLEVEL 300 CACHE STRING "Level at which logs shall be reported")

-option(UA_ENABLE_HISTORIZING "Enable server and client to provide historical access." OFF)

-option(UA_ENABLE_EXPERIMENTAL_HISTORIZING "Enable client experimental historical access features." OFF)

-option(UA_ENABLE_METHODCALLS "Enable the Method service set" ON)

-option(UA_ENABLE_NODEMANAGEMENT "Enable dynamic addition and removal of nodes at runtime" ON)

-option(UA_ENABLE_SUBSCRIPTIONS "Enable subscriptions support." ON)

-option(UA_ENABLE_SUBSCRIPTIONS_EVENTS "Enable the use of event subscriptions" OFF)

-option(UA_ENABLE_DISCOVERY "Enable Discovery Service (LDS)" ON)

-option(UA_ENABLE_DISCOVERY_MULTICAST "Enable Discovery Service with multicast support (LDS-ME)" OFF)

-option(UA_ENABLE_QUERY "Enable query support." OFF)

-option(UA_ENABLE_COVERAGE "Enable gcov coverage" OFF)

-option(UA_ENABLE_ENCRYPTION "Enable encryption support (uses mbedTLS)" OFF)

-option(UA_ENABLE_MICRO_EMB_DEV_PROFILE "Builds CTT Compliant Micro Embedded Device Server Profile" OFF)

-option(BUILD_SHARED_LIBS "Enable building of shared libraries (dll/so)" OFF)

-option(UA_ENABLE_WEBSOCKET_SERVER "Enable websocket support (uses libwebsockets)" OFF)

-

-# Namespace Zero

-set(UA_NAMESPACE_ZERO "REDUCED" CACHE STRING "Completeness of the generated namespace zero (minimal/reduced/full)")

-SET_PROPERTY(CACHE UA_NAMESPACE_ZERO PROPERTY STRINGS "MINIMAL" "REDUCED" "FULL")

-if(UA_NAMESPACE_ZERO STREQUAL "MINIMAL")

-    set(UA_GENERATED_NAMESPACE_ZERO OFF)

-else()

-    set(UA_GENERATED_NAMESPACE_ZERO ON)

-endif()

-

-if(MSVC AND UA_NAMESPACE_ZERO STREQUAL "FULL")

-    # For the full NS0 we need a stack size of 8MB (as it is default on linux)

-    # See https://github.com/open62541/open62541/issues/1326

-    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:8000000")

-endif()

-

-if(UA_ENABLE_MICRO_EMB_DEV_PROFILE)

-    if(NOT (UA_NAMESPACE_ZERO STREQUAL "FULL"))

-        message(FATAL_ERROR "CTT Compliant Micro Embedded Device Server Profile needs full namespace zero")

-    endif()

-endif()

-

-if(UA_BUILD_FUZZING OR UA_BUILD_OSS_FUZZ OR UA_BUILD_FUZZING_CORPUS)

-    # Force enable options not passed in the build script, to also fuzzy-test this code

-    set(UA_ENABLE_DISCOVERY ON CACHE STRING "" FORCE)

-    set(UA_ENABLE_DISCOVERY_MULTICAST ON CACHE STRING "" FORCE)

-    set(UA_ENABLE_ENCRYPTION ON CACHE STRING "" FORCE)

-    set(UA_ENABLE_HISTORIZING ON CACHE STRING "" FORCE)

-    set(UA_ENABLE_JSON_ENCODING ON CACHE STRING "" FORCE)

-    set(UA_ENABLE_SUBSCRIPTIONS ON CACHE STRING "" FORCE)

-    set(UA_ENABLE_SUBSCRIPTIONS_EVENTS ON CACHE STRING "" FORCE)

-endif()

-

-

-# It should not be possible to enable events without enabling subscriptions and full ns0

-#if((UA_ENABLE_SUBSCRIPTIONS_EVENTS) AND (NOT (UA_ENABLE_SUBSCRIPTIONS AND UA_NAMESPACE_ZERO STREQUAL "FULL")))

-#    message(FATAL_ERROR "Unable to enable events without UA_ENABLE_SUBSCRIPTIONS and full namespace 0")

-#endif()

-

-if(UA_ENABLE_COVERAGE)

-  set(CMAKE_BUILD_TYPE DEBUG)

-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")

-  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage -lgcov")

-  set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")

-endif()

-

-if(UA_ENABLE_DISCOVERY_MULTICAST AND NOT UA_ENABLE_DISCOVERY)

-    MESSAGE(WARNING "UA_ENABLE_DISCOVERY_MULTICAST is enabled, but not UA_ENABLE_DISCOVERY. UA_ENABLE_DISCOVERY_MULTICAST will be set to OFF")

-    SET(UA_ENABLE_DISCOVERY_MULTICAST OFF CACHE BOOL "Enable Discovery Service with multicast support (LDS-ME)" FORCE)

-endif()

-

-# Advanced options

-option(UA_ENABLE_IMMUTABLE_NODES "Nodes in the information model are not edited but copied and replaced" OFF)

-mark_as_advanced(UA_ENABLE_IMMUTABLE_NODES)

-

-set(UA_MULTITHREADING 0 CACHE STRING "Level of multithreading")

-mark_as_advanced(UA_MULTITHREADING)

-if (UA_MULTITHREADING GREATER 100)

-    set(UA_ENABLE_IMMUTABLE_NODES ON)

-endif()

-

-option(UA_ENABLE_CUSTOM_NODESTORE "Do not compile the default Nodestore implementation into the library" OFF)

-mark_as_advanced(UA_ENABLE_CUSTOM_NODESTORE)

-

-option(UA_ENABLE_PUBSUB "Enable publish/subscribe" OFF)

-mark_as_advanced(UA_ENABLE_PUBSUB)

-

-option(UA_ENABLE_DA "Enable data access" ON)

-mark_as_advanced(UA_ENABLE_DA)

-

-option(UA_ENABLE_PUBSUB_ETH_UADP "Enable publish/subscribe UADP over Ethernet" OFF)

-mark_as_advanced(UA_ENABLE_PUBSUB_ETH_UADP)

-if(UA_ENABLE_PUBSUB_ETH_UADP)

-    if (NOT CMAKE_SYSTEM MATCHES "Linux")

-    message(FATAL_ERROR "UADP over Ethernet is only available on Linux.")

-	endif()

-endif()

-

-option(UA_ENABLE_PUBSUB_DELTAFRAMES "Enable sending of delta frames with only the changes" OFF)

-mark_as_advanced(UA_ENABLE_PUBSUB_DELTAFRAMES)

-

-option(UA_ENABLE_PUBSUB_INFORMATIONMODEL "Enable PubSub information model twin" OFF)

-mark_as_advanced(UA_ENABLE_PUBSUB_INFORMATIONMODEL)

-option(UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS "Enable PubSub informationmodel methods" OFF)

-mark_as_advanced(UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS)

-if(UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS)

-    if(NOT UA_ENABLE_PUBSUB_INFORMATIONMODEL)

-        message(FATAL_ERROR "PubSub information model methods cannot be used with disabled PubSub information model.")

-    endif()

-endif()

-if(UA_ENABLE_PUBSUB_INFORMATIONMODEL)

-    if(NOT UA_ENABLE_PUBSUB)

-        message(FATAL_ERROR "PubSub information model representation cannot be used with disabled PubSub function.")

-    endif()

-    if(UA_NAMESPACE_ZERO STREQUAL "MINIMAL")

-        message(FATAL_ERROR "PubSub information model representation cannot be used with MINIMAL namespace zero.")

-    endif()

-endif()

-

-option(UA_ENABLE_PUBSUB_CUSTOM_PUBLISH_HANDLING

-       "Use a custom implementation for the publish callback handling" OFF)

-mark_as_advanced(UA_ENABLE_PUBSUB_CUSTOM_PUBLISH_HANDLING)

-if(UA_ENABLE_PUBSUB_CUSTOM_PUBLISH_INTERRUPT)

-    if(NOT UA_ENABLE_PUBSUB)

-        message(FATAL_ERROR "Custom publish callback handling cannot be used with PubSub function disabled")

-    endif()

-endif()

-

-option(UA_ENABLE_JSON_ENCODING "Enable Json encoding (EXPERIMENTAL)" OFF)

-mark_as_advanced(UA_ENABLE_JSON_ENCODING)

-

-option(UA_ENABLE_STATUSCODE_DESCRIPTIONS "Enable conversion of StatusCode to human-readable error message" ON)

-mark_as_advanced(UA_ENABLE_STATUSCODE_DESCRIPTIONS)

-

-option(UA_ENABLE_TYPEDESCRIPTION "Add the type and member names to the UA_DataType structure" ON)

-mark_as_advanced(UA_ENABLE_TYPEDESCRIPTION)

-

-option(UA_ENABLE_NODESET_COMPILER_DESCRIPTIONS "Set node description attribute for nodeset compiler generated nodes" ON)

-mark_as_advanced(UA_ENABLE_NODESET_COMPILER_DESCRIPTIONS)

-

-option(UA_ENABLE_DETERMINISTIC_RNG "Do not seed the random number generator (e.g. for unit tests)." OFF)

-mark_as_advanced(UA_ENABLE_DETERMINISTIC_RNG)

-

-option(UA_ENABLE_MALLOC_SINGLETON

-       "Use a global variable pointer for malloc (and free, ...) that can be switched at runtime" OFF)

-mark_as_advanced(UA_ENABLE_MALLOC_SINGLETON)

-if(UA_ENABLE_MALLOC_SINGLETON)

-    if(NOT "${UA_ARCHITECTURE}" MATCHES "posix")

-        message(FATAL_ERROR "The singleton malloc is available only for the posix architecture")

-    endif()

-endif()

-

-option(UA_ENABLE_VALGRIND_INTERACTIVE "Enable dumping valgrind every iteration. CAUTION! SLOWDOWN!" OFF)

-mark_as_advanced(UA_ENABLE_VALGRIND_INTERACTIVE)

-

-option(UA_MSVC_FORCE_STATIC_CRT "Force linking with the static C-runtime library when compiling to static library with MSVC" ON)

-mark_as_advanced(UA_MSVC_FORCE_STATIC_CRT)

-

-option(UA_FILE_NS0 "Override the NodeSet xml file used to generate namespace zero")

-mark_as_advanced(UA_FILE_NS0)

-

-# Semaphores/file system may not be available on embedded devices. It can be

-# disabled with the following option

-option(UA_ENABLE_DISCOVERY_SEMAPHORE "Enable Discovery Semaphore support" ON)

-mark_as_advanced(UA_ENABLE_DISCOVERY_SEMAPHORE)

-

-option(UA_ENABLE_UNIT_TESTS_MEMCHECK "Use Valgrind (Linux) or DrMemory (Windows) to detect memory leaks when running the unit tests" OFF)

-mark_as_advanced(UA_ENABLE_UNIT_TESTS_MEMCHECK)

-

-option(UA_ENABLE_UNIT_TEST_FAILURE_HOOKS

-       "Add hooks to force failure modes for additional unit tests. Not for production use!" OFF)

-mark_as_advanced(UA_ENABLE_UNIT_TEST_FAILURE_HOOKS)

-

-set(UA_VALGRIND_INTERACTIVE_INTERVAL 1000 CACHE STRING "The number of iterations to wait before creating the next dump")

-mark_as_advanced(UA_VALGRIND_INTERACTIVE_INTERVAL)

-

-# Build options for debugging

-option(UA_DEBUG "Enable assertions and additional functionality that should not be included in release builds" OFF)

-mark_as_advanced(UA_DEBUG)

-if(CMAKE_BUILD_TYPE STREQUAL "Debug")

-    set(UA_DEBUG ON)

-endif()

-

-option(UA_DEBUG_DUMP_PKGS "Dump every package received by the server as hexdump format" OFF)

-mark_as_advanced(UA_DEBUG_DUMP_PKGS)

-

-option(UA_ENABLE_HARDENING "Enable Hardening measures (e.g. Stack-Protectors and Fortify)" ON)

-mark_as_advanced(UA_ENABLE_HARDENING)

-

-if(CMAKE_VERSION VERSION_GREATER 3.6)

-    set(UA_ENABLE_STATIC_ANALYZER "OFF" CACHE STRING "Enable installed static analyzer during build process (off/minimal/reduced/full)")

-    SET_PROPERTY(CACHE UA_ENABLE_STATIC_ANALYZER PROPERTY STRINGS "OFF" "MINIMAL" "REDUCED" "FULL")

-endif()

-

-# Build Targets

-option(UA_BUILD_EXAMPLES "Build example servers and clients" OFF)

-option(UA_BUILD_TOOLS "Build OPC UA shell tools" OFF)

-option(UA_BUILD_UNIT_TESTS "Build the unit tests" OFF)

-option(UA_BUILD_FUZZING "Build the fuzzing executables" OFF)

-mark_as_advanced(UA_BUILD_FUZZING)

-if(UA_BUILD_FUZZING)

-    # oss-fuzz already defines this by default

-    add_definitions(-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)

-endif()

-

-if(UA_ENABLE_EXPERIMENTAL_HISTORIZING)

-    if(NOT UA_ENABLE_HISTORIZING)

-        message(FATAL_ERROR "UA_ENABLE_EXPERIMENTAL_HISTORIZING cannot be used with disabled UA_ENABLE_HISTORIZING.")

-    endif()

-endif()

-

-option(UA_BUILD_FUZZING_CORPUS "Build the fuzzing corpus" OFF)

-mark_as_advanced(UA_BUILD_FUZZING_CORPUS)

-if(UA_BUILD_FUZZING_CORPUS)

-    add_definitions(-DUA_DEBUG_DUMP_PKGS_FILE)

-    set(UA_ENABLE_TYPEDESCRIPTION ON CACHE STRING "" FORCE)

-    #set(UA_DEBUG_DUMP_PKGS ON CACHE STRING "" FORCE)

-endif()

-

-option(UA_BUILD_OSS_FUZZ "Special build switch used in oss-fuzz" OFF)

-mark_as_advanced(UA_BUILD_OSS_FUZZ)

-

-# Advanced Build Targets

-option(UA_PACK_DEBIAN "Special build switch used in .deb packaging" OFF)

-mark_as_advanced(UA_PACK_DEBIAN)

-

-# Building shared libs (dll, so). This option is written into ua_config.h.

-set(UA_DYNAMIC_LINKING OFF)

-if(BUILD_SHARED_LIBS)

-  set(UA_DYNAMIC_LINKING ON)

-  if (UA_ENABLE_DISCOVERY_MULTICAST)

-      set(MDNSD_DYNAMIC_LINKING ON)

-  endif()

-endif()

-

-# Warn if experimental features are enabled

-if(UA_MULTITHREADING)

-    MESSAGE(WARNING "UA_MULTITHREADING is enabled. The feature is under development and marked as EXPERIMENTAL")

-endif()

-

-########################

-# Linting during build #

-########################

-set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

-include(linting_build)

-

-######################

-# External Libraries #

-######################

-

-list(APPEND open62541_LIBRARIES "")

-

-# Force compilation with as C++

-option(UA_COMPILE_AS_CXX "Force compilation with a C++ compiler" OFF)

-mark_as_advanced(UA_COMPILE_AS_CXX)

-if (UA_COMPILE_AS_CXX)

-    # We need the UINT32_C define

-    add_definitions(-D__STDC_CONSTANT_MACROS)

-endif()

-

-if(UA_ENABLE_ENCRYPTION)

-    # The recommended way is to install mbedtls via the OS package manager. If

-    # that is not possible, manually compile mbedTLS and set the cmake variables

-    # defined in /tools/cmake/FindMbedTLS.cmake.

-    find_package(MbedTLS REQUIRED)

-    list(APPEND open62541_LIBRARIES ${MBEDTLS_LIBRARIES})

-endif()

-

-if(UA_ENABLE_WEBSOCKET_SERVER)

-    # The recommended way is to install libwebsockets via the OS package manager. If

-    # that is not possible, manually compile libwebsockets and set the cmake variables

-    # defined in /tools/cmake/Findlibwebsockets.cmake

-    find_package(libwebsockets REQUIRED)

-    list(APPEND open62541_LIBRARIES ${LIBWEBSOCKETS_LIBRARIES})

-endif()

-

-#####################

-# Compiler Settings #

-#####################

-

-include(CompilerFlags)

-if(NOT UA_COMPILE_AS_CXX AND (CMAKE_COMPILER_IS_GNUCC OR "x${CMAKE_C_COMPILER_ID}" STREQUAL "xClang"))

-    # Compiler

-    add_definitions(-std=c99 -pipe

-                    -Wall -Wextra -Wpedantic

-                    -Wno-static-in-inline # clang doesn't like the use of static inline methods inside static inline methods

-                    -Wno-overlength-strings # may happen in the nodeset compiler when complex values are directly encoded

-                    -Wno-unused-parameter # some methods may require unused arguments to cast to a method pointer

-                    -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls

-                    -Wformat -Wformat-security -Wformat-nonliteral

-                    -Wuninitialized -Winit-self

-                    -Wcast-qual

-                    -Wstrict-overflow

-                    -Wnested-externs

-                    -Wmultichar

-                    -Wundef

-                    -Wc++-compat

-                    -fno-strict-aliasing # fewer compiler assumptions about pointer types

-                    -fexceptions # recommended for multi-threaded C code, also in combination with C++ code

-                    )

-    set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Werror")

-

-    if (NOT MINGW)

-        if(UA_ENABLE_HARDENING)

-            check_cc_flag("-fstack-protector-strong") # more performant stack protector, available since gcc 4.9

-            check_cc_flag("-fstack-clash-protection") # increased reliability of stack overflow detection, available since gcc 8

-            check_cc_flag_untested("-mcet -fcf-protection") # future use (control flow integrity protection)

-        endif()

-

-        # IPO requires too much memory for unit tests

-        # GCC docu recommends to compile all files with the same options, therefore ignore it completely

-        if(NOT UA_BUILD_UNIT_TESTS)

-            # needed to check if IPO is supported (check needs cmake > 3.9)

-            if("${CMAKE_VERSION}" VERSION_GREATER 3.9)

-                cmake_policy(SET CMP0069 NEW) # needed as long as required cmake < 3.9

-                include(CheckIPOSupported)

-                check_ipo_supported(RESULT CC_HAS_IPO) # Inter Procedural Optimization / Link Time Optimization (should be same as -flto)

-                if(CC_HAS_IPO)

-                    set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)

-                endif()

-            endif()

-        endif()

-    endif()

-

-    if(UA_ENABLE_AMALGAMATION)

-        add_definitions(-Wno-unused-function)

-    endif()

-

-    if(UA_PACK_DEBIAN)

-        remove_definitions(-Wno-static-in-inline)

-    endif()

-

-    # Linker

-    set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") # cmake sets -rdynamic by default

-

-    # Debug

-    if(BUILD_TYPE_LOWER_CASE STREQUAL "debug" AND UNIX)

-        if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xClang" AND NOT UA_ENABLE_UNIT_TESTS_MEMCHECK)

-            # Add default sanitizer settings when using clang and Debug build.

-            # This allows e.g. CLion to find memory locations for SegFaults

-            message(STATUS "Sanitizer enabled")

-            set(SANITIZER_FLAGS "-g -fno-omit-frame-pointer -gline-tables-only -fsanitize=address -fsanitize-address-use-after-scope -fsanitize-coverage=trace-pc-guard,trace-cmp -fsanitize=leak -fsanitize=undefined")

-            set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SANITIZER_FLAGS}")

-            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER_FLAGS}")

-        endif()

-    endif()

-

-    if(UA_ENABLE_HARDENING AND ((CMAKE_BUILD_TYPE STREQUAL "Release") OR (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")))

-        check_cc_flag("-D_FORTIFY_SOURCE=2") # run-time buffer overflow detection (needs at least -O1)

-    endif()

-

-    # Strip release builds

-    if(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" OR CMAKE_BUILD_TYPE STREQUAL "Release")

-        add_definitions(-ffunction-sections -fdata-sections -fno-unwind-tables

-                        -fno-asynchronous-unwind-tables -fno-math-errno -fno-ident)

-        # remove stack-protector with MinSizeRel

-        if(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")

-            add_definitions(-fno-stack-protector)

-        endif()

-        if(NOT OS9)

-            set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -s")

-            set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -s")

-        endif()

-        if(APPLE)

-            set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,-dead_strip")

-            set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-dead_strip")

-        else()

-            set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,--gc-sections")

-            set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections")

-        endif()

-        if(NOT WIN32 AND NOT CYGWIN AND NOT APPLE)

-            # these settings reduce the binary size by ~2kb

-            set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,-z,norelro -Wl,--hash-style=gnu -Wl,--build-id=none")

-        endif()

-    endif()

-endif()

-

-

-

-if(APPLE)

-    set(CMAKE_MACOSX_RPATH 1)

-    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_DARWIN_C_SOURCE=1")

-endif()

-

-if(MSVC)

-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /WX /w44996") # Compiler warnings, error on warning

-

-  if(UA_MSVC_FORCE_STATIC_CRT AND NOT BUILD_SHARED_LIBS)

-    set(CompilerFlags CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_C_FLAGS

-        CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE)

-    foreach(CompilerFlag ${CompilerFlags})

-      string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")

-    endforeach()

-  endif()

-endif()

-

-if(UA_BUILD_FUZZING OR UA_BUILD_OSS_FUZZ)

-    add_definitions(-DUA_malloc=UA_memoryManager_malloc)

-    add_definitions(-DUA_free=UA_memoryManager_free)

-    add_definitions(-DUA_calloc=UA_memoryManager_calloc)

-    add_definitions(-DUA_realloc=UA_memoryManager_realloc)

-endif()

-

-#########################

-# Generate Main Library #

-#########################

-

-file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/src_generated")

-configure_file(include/open62541/config.h.in ${PROJECT_BINARY_DIR}/src_generated/open62541/config.h)

-configure_file(open62541.pc.in ${PROJECT_BINARY_DIR}/src_generated/open62541.pc @ONLY)

-

-if(UA_ENABLE_DISCOVERY_MULTICAST)

-    set(MDNSD_LOGLEVEL 300 CACHE STRING "Level at which logs shall be reported" FORCE)

-    configure_file("deps/mdnsd/libmdnsd/mdnsd_config.h.in" "${PROJECT_BINARY_DIR}/src_generated/mdnsd_config.h")

-endif()

-

-set(exported_headers ${exported_headers}

-                     ${PROJECT_BINARY_DIR}/src_generated/open62541/config.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/architecture_base.h

-                     ${ua_architecture_headers_beginning}

-                     )

-

-if(NOT "${UA_AMALGAMATION_ARCHITECTURES}" STREQUAL "")

-    foreach(arch ${UA_AMALGAMATION_ARCHITECTURES})

-        list(APPEND exported_headers ${PROJECT_SOURCE_DIR}/arch/${arch}/ua_architecture.h)

-    endforeach()

-else()

-    list(APPEND exported_headers ${PROJECT_SOURCE_DIR}/arch/${UA_ARCHITECTURE}/ua_architecture.h)

-endif()

-

-

-if(UA_ENABLE_HISTORIZING)

-    # Historizing needs to be included before server_config.h

-    set(historizing_exported_headers

-         ${PROJECT_SOURCE_DIR}/include/open62541/plugin/historydatabase.h)

-endif()

-

-set(exported_headers ${exported_headers}

-                     ${PROJECT_SOURCE_DIR}/deps/ms_stdint.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/architecture_definitions.h

-                     ${PROJECT_BINARY_DIR}/src_generated/open62541/statuscodes.h

-                     ${PROJECT_BINARY_DIR}/src_generated/open62541/nodeids.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/constants.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/types.h

-                     ${PROJECT_BINARY_DIR}/src_generated/open62541/types_generated.h

-                     ${PROJECT_BINARY_DIR}/src_generated/open62541/types_generated_handling.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/util.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/server.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/plugin/log.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/plugin/network.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/plugin/accesscontrol.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/plugin/pki.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/plugin/securitypolicy.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/server_pubsub.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/plugin/pubsub.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/plugin/nodestore.h

-                     ${historizing_exported_headers}

-                     ${PROJECT_SOURCE_DIR}/include/open62541/server_config.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/client_config.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/client.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/client_highlevel.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/client_subscriptions.h

-                     ${PROJECT_SOURCE_DIR}/include/open62541/client_highlevel_async.h)

-

-set(internal_headers ${PROJECT_SOURCE_DIR}/deps/open62541_queue.h

-                     ${PROJECT_SOURCE_DIR}/deps/ziptree.h

-                     ${PROJECT_SOURCE_DIR}/deps/pcg_basic.h

-                     ${PROJECT_SOURCE_DIR}/deps/libc_time.h

-                     ${PROJECT_SOURCE_DIR}/deps/base64.h

-                     ${PROJECT_SOURCE_DIR}/src/ua_util_internal.h

-                     ${PROJECT_SOURCE_DIR}/src/ua_types_encoding_binary.h

-                     ${PROJECT_BINARY_DIR}/src_generated/open62541/types_generated_encoding_binary.h

-                     ${PROJECT_BINARY_DIR}/src_generated/open62541/transport_generated.h

-                     ${PROJECT_BINARY_DIR}/src_generated/open62541/transport_generated_handling.h

-                     ${PROJECT_BINARY_DIR}/src_generated/open62541/transport_generated_encoding_binary.h

-                     ${PROJECT_SOURCE_DIR}/src/ua_connection_internal.h

-                     ${PROJECT_SOURCE_DIR}/src/ua_securechannel.h

-                     ${PROJECT_SOURCE_DIR}/src/ua_workqueue.h

-                     ${PROJECT_SOURCE_DIR}/src/ua_timer.h

-                     ${PROJECT_SOURCE_DIR}/src/server/ua_session.h

-                     ${PROJECT_SOURCE_DIR}/src/server/ua_subscription.h

-                     ${PROJECT_SOURCE_DIR}/src/server/ua_session_manager.h

-                     ${PROJECT_SOURCE_DIR}/src/server/ua_securechannel_manager.h

-                     ${PROJECT_SOURCE_DIR}/src/pubsub/ua_pubsub_networkmessage.h

-                     ${PROJECT_SOURCE_DIR}/src/pubsub/ua_pubsub.h

-                     ${PROJECT_SOURCE_DIR}/src/pubsub/ua_pubsub_manager.h

-                     ${PROJECT_SOURCE_DIR}/src/pubsub/ua_pubsub_ns0.h

-                     ${PROJECT_SOURCE_DIR}/src/server/ua_server_internal.h

-                     ${PROJECT_SOURCE_DIR}/src/server/ua_services.h

-                     ${PROJECT_SOURCE_DIR}/src/client/ua_client_internal.h)

-

-# TODO: make client optional

-set(lib_sources ${PROJECT_SOURCE_DIR}/src/ua_types.c

-                ${PROJECT_SOURCE_DIR}/src/ua_types_encoding_binary.c

-                ${PROJECT_BINARY_DIR}/src_generated/open62541/types_generated.c

-                ${PROJECT_BINARY_DIR}/src_generated/open62541/transport_generated.c

-                ${PROJECT_BINARY_DIR}/src_generated/open62541/statuscodes.c

-                ${PROJECT_SOURCE_DIR}/src/ua_util.c

-                ${PROJECT_SOURCE_DIR}/src/ua_workqueue.c

-                ${PROJECT_SOURCE_DIR}/src/ua_timer.c

-                ${PROJECT_SOURCE_DIR}/src/ua_connection.c

-                ${PROJECT_SOURCE_DIR}/src/ua_securechannel.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_session.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_nodes.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_server.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_server_ns0.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_server_config.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_server_binary.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_server_utils.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_server_discovery.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_securechannel_manager.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_session_manager.c

-                ${PROJECT_SOURCE_DIR}/src/pubsub/ua_pubsub_networkmessage.c

-                ${PROJECT_SOURCE_DIR}/src/pubsub/ua_pubsub.c

-                ${PROJECT_SOURCE_DIR}/src/pubsub/ua_pubsub_manager.c

-                ${PROJECT_SOURCE_DIR}/src/pubsub/ua_pubsub_ns0.c

-                # services

-                ${PROJECT_SOURCE_DIR}/src/server/ua_services_view.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_services_method.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_services_session.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_services_attribute.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_services_discovery.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_services_subscription.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_services_monitoreditem.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_services_securechannel.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_services_nodemanagement.c

-                ${PROJECT_SOURCE_DIR}/src/server/ua_services_discovery_multicast.c

-                # client

-                ${PROJECT_SOURCE_DIR}/src/client/ua_client.c

-                ${PROJECT_SOURCE_DIR}/src/client/ua_client_connect.c

-                ${PROJECT_SOURCE_DIR}/src/client/ua_client_connect_async.c

-                ${PROJECT_SOURCE_DIR}/src/client/ua_client_discovery.c

-                ${PROJECT_SOURCE_DIR}/src/client/ua_client_highlevel.c

-                ${PROJECT_SOURCE_DIR}/src/client/ua_client_subscriptions.c

-                ${PROJECT_SOURCE_DIR}/src/client/ua_client_worker.c

-

-                # dependencies

-                ${PROJECT_SOURCE_DIR}/deps/libc_time.c

-                ${PROJECT_SOURCE_DIR}/deps/pcg_basic.c

-                ${PROJECT_SOURCE_DIR}/deps/base64.c)

-

-set(default_plugin_headers ${PROJECT_SOURCE_DIR}/plugins/include/open62541/plugin/accesscontrol_default.h

-                           ${PROJECT_SOURCE_DIR}/plugins/include/open62541/plugin/pki_default.h

-                           ${PROJECT_SOURCE_DIR}/plugins/include/open62541/plugin/log_stdout.h

-                           ${PROJECT_SOURCE_DIR}/plugins/include/open62541/server_config_default.h

-                           ${PROJECT_SOURCE_DIR}/plugins/include/open62541/client_config_default.h

-                           ${PROJECT_SOURCE_DIR}/plugins/include/open62541/plugin/securitypolicy_default.h

-)

-

-set(default_plugin_sources ${PROJECT_SOURCE_DIR}/plugins/ua_log_stdout.c

-                           ${PROJECT_SOURCE_DIR}/plugins/ua_accesscontrol_default.c

-                           ${PROJECT_SOURCE_DIR}/plugins/ua_pki_default.c

-                           ${PROJECT_SOURCE_DIR}/plugins/ua_nodestore_default.c

-                           ${PROJECT_SOURCE_DIR}/plugins/ua_config_default.c

-                           ${PROJECT_SOURCE_DIR}/plugins/securityPolicies/ua_securitypolicy_none.c

-)

-

-if(UA_GENERATED_NAMESPACE_ZERO)

-    list(APPEND internal_headers ${PROJECT_BINARY_DIR}/src_generated/open62541/namespace0_generated.h)

-    list(APPEND lib_sources ${PROJECT_BINARY_DIR}/src_generated/open62541/namespace0_generated.c)

-endif()

-

-list(APPEND default_plugin_headers

-     ${PROJECT_SOURCE_DIR}/plugins/include/open62541/plugin/securitypolicy_mbedtls_common.h)

-list(APPEND default_plugin_sources

-     ${PROJECT_SOURCE_DIR}/plugins/securityPolicies/securitypolicy_mbedtls_common.c

-     ${PROJECT_SOURCE_DIR}/plugins/securityPolicies/ua_securitypolicy_basic128rsa15.c

-     ${PROJECT_SOURCE_DIR}/plugins/securityPolicies/ua_securitypolicy_basic256.c

-     ${PROJECT_SOURCE_DIR}/plugins/securityPolicies/ua_securitypolicy_basic256sha256.c)

-

-if(UA_ENABLE_HISTORIZING)

-

-    list(APPEND default_plugin_headers

-         ${PROJECT_SOURCE_DIR}/plugins/include/open62541/plugin/historydata/history_data_backend.h

-         ${PROJECT_SOURCE_DIR}/plugins/include/open62541/plugin/historydata/history_data_gathering.h

-         ${PROJECT_SOURCE_DIR}/plugins/include/open62541/plugin/historydata/history_database_default.h

-         ${PROJECT_SOURCE_DIR}/plugins/include/open62541/plugin/historydata/history_data_gathering_default.h

-         ${PROJECT_SOURCE_DIR}/plugins/include/open62541/plugin/historydata/history_data_backend_memory.h

-         )

-    list(APPEND default_plugin_sources

-         ${PROJECT_SOURCE_DIR}/plugins/historydata/ua_history_data_backend_memory.c

-         ${PROJECT_SOURCE_DIR}/plugins/historydata/ua_history_data_gathering_default.c

-         ${PROJECT_SOURCE_DIR}/plugins/historydata/ua_history_database_default.c

-         )

-endif()

-

-if(UA_ENABLE_DISCOVERY)

-    list(INSERT internal_headers 13 ${PROJECT_SOURCE_DIR}/src/server/ua_discovery_manager.h)

-    list(APPEND lib_sources ${PROJECT_SOURCE_DIR}/src/server/ua_discovery_manager.c)

-endif()

-

-if(UA_ENABLE_PUBSUB)

-    list(APPEND default_plugin_headers ${PROJECT_SOURCE_DIR}/plugins/include/open62541/plugin/pubsub_udp.h)

-    list(APPEND default_plugin_sources ${PROJECT_SOURCE_DIR}/plugins/ua_pubsub_udp.c)

-    if(UA_ENABLE_PUBSUB_ETH_UADP)

-        list(APPEND default_plugin_headers ${PROJECT_SOURCE_DIR}/plugins/include/open62541/plugin/pubsub_ethernet.h)

-        list(APPEND default_plugin_sources ${PROJECT_SOURCE_DIR}/plugins/ua_pubsub_ethernet.c)

-    endif()

-endif()

-

-if(UA_ENABLE_JSON_ENCODING)

-    if(UA_ENABLE_PUBSUB)

-        list(APPEND lib_sources ${PROJECT_SOURCE_DIR}/src/pubsub/ua_pubsub_networkmessage_json.c)

-    endif()

-    list(APPEND internal_headers ${PROJECT_SOURCE_DIR}/deps/jsmn/jsmn.h

-                                 ${PROJECT_SOURCE_DIR}/deps/string_escape.h

-                                 ${PROJECT_SOURCE_DIR}/deps/itoa.h

-                                 ${PROJECT_SOURCE_DIR}/deps/atoi.h

-                                 ${PROJECT_SOURCE_DIR}/src/ua_types_encoding_json.h)

-    list(APPEND lib_sources ${PROJECT_SOURCE_DIR}/deps/jsmn/jsmn.c

-                            ${PROJECT_SOURCE_DIR}/deps/string_escape.c

-                            ${PROJECT_SOURCE_DIR}/deps/itoa.c

-                            ${PROJECT_SOURCE_DIR}/deps/atoi.c

-                            ${PROJECT_SOURCE_DIR}/src/ua_types_encoding_json.c)

-endif()

-

-if(UA_ENABLE_CUSTOM_LIBC)

-     list(APPEND lib_sources ${PROJECT_SOURCE_DIR}/deps/musl/floatscan.c

-                             ${PROJECT_SOURCE_DIR}/deps/musl/vfprintf.c)

-endif()

-

-if(UA_ENABLE_SUBSCRIPTIONS)

-    list(APPEND lib_sources ${PROJECT_SOURCE_DIR}/src/server/ua_subscription.c

-                            ${PROJECT_SOURCE_DIR}/src/server/ua_subscription_monitoreditem.c

-                            ${PROJECT_SOURCE_DIR}/src/server/ua_subscription_datachange.c)

-    if(UA_ENABLE_SUBSCRIPTIONS_EVENTS)

-        list(APPEND lib_sources ${PROJECT_SOURCE_DIR}/src/server/ua_subscription_events.c)

-    endif()

-endif()

-

-if(UA_DEBUG_DUMP_PKGS)

-    list(APPEND lib_sources ${PROJECT_SOURCE_DIR}/plugins/ua_debug_dump_pkgs.c)

-endif()

-

-if(UA_ENABLE_DISCOVERY_MULTICAST)

-    # prepend in list, otherwise it complains that winsock2.h has to be included before windows.h

-    set(internal_headers ${PROJECT_BINARY_DIR}/src_generated/mdnsd_config.h

-                         ${PROJECT_SOURCE_DIR}/deps/mdnsd/libmdnsd/1035.h

-                         ${PROJECT_SOURCE_DIR}/deps/mdnsd/libmdnsd/xht.h

-                         ${PROJECT_SOURCE_DIR}/deps/mdnsd/libmdnsd/sdtxt.h

-                         ${PROJECT_SOURCE_DIR}/deps/mdnsd/libmdnsd/mdnsd.h

-                         ${internal_headers} )

-    set(lib_sources ${PROJECT_SOURCE_DIR}/src/server/ua_server_discovery_mdns.c

-        ${PROJECT_SOURCE_DIR}/deps/mdnsd/libmdnsd/1035.c

-        ${PROJECT_SOURCE_DIR}/deps/mdnsd/libmdnsd/xht.c

-        ${PROJECT_SOURCE_DIR}/deps/mdnsd/libmdnsd/sdtxt.c

-        ${PROJECT_SOURCE_DIR}/deps/mdnsd/libmdnsd/mdnsd.c

-        ${lib_sources})

-endif()

-

-if(UA_BUILD_FUZZING OR UA_BUILD_OSS_FUZZ)

-    set(lib_sources

-        ${lib_sources}

-        ${PROJECT_SOURCE_DIR}/tests/fuzz/custom_memory_manager.c)

-endif()

-

-#########################

-# Generate source files #

-#########################

-

-# List of nodeset files combined into NS0 generated file

-set(UA_FILE_NODESETS)

-

-if(UA_NAMESPACE_ZERO STREQUAL "FULL")

-    if(NOT UA_FILE_NS0)

-        set(UA_FILE_NS0 ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml)

-    endif()

-    set(UA_FILE_NODESETS "${UA_FILE_NS0}")

-

-    if(NOT EXISTS "${UA_FILE_NS0}")

-        message(FATAL_ERROR "File ${UA_FILE_NS0} not found. You probably need to initialize the git submodule for deps/ua-nodeset.")

-    endif()

-

-

-    set(UA_FILE_NODEIDS ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/NodeIds.csv)

-    set(UA_FILE_STATUSCODES ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/StatusCode.csv)

-    set(UA_FILE_TYPES_BSD ${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.Types.bsd)

-else()

-    if(NOT UA_FILE_NS0)

-        set(UA_FILE_NS0 ${PROJECT_SOURCE_DIR}/tools/schema/Opc.Ua.NodeSet2.Minimal.xml)

-    endif()

-    set(UA_FILE_NODESETS "${UA_FILE_NS0}")

-

-    set(UA_FILE_DATATYPES ${PROJECT_SOURCE_DIR}/tools/schema/datatypes_minimal.txt)

-    set(UA_FILE_NODEIDS ${PROJECT_SOURCE_DIR}/tools/schema/NodeIds.csv)

-    set(UA_FILE_STATUSCODES ${PROJECT_SOURCE_DIR}/tools/schema/StatusCode.csv)

-    set(UA_FILE_TYPES_BSD ${PROJECT_SOURCE_DIR}/tools/schema/Opc.Ua.Types.bsd)

-

-    if(UA_ENABLE_METHODCALLS)

-        list(APPEND UA_FILE_DATATYPES ${PROJECT_SOURCE_DIR}/tools/schema/datatypes_method.txt)

-    endif()

-

-    if(UA_ENABLE_SUBSCRIPTIONS)

-        list(APPEND UA_FILE_DATATYPES ${PROJECT_SOURCE_DIR}/tools/schema/datatypes_subscriptions.txt)

-    endif()

-

-    if(UA_ENABLE_SUBSCRIPTIONS_EVENTS)

-        list(APPEND UA_FILE_DATATYPES ${PROJECT_SOURCE_DIR}/tools/schema/datatypes_events.txt)

-        list(APPEND UA_FILE_NODESETS ${PROJECT_SOURCE_DIR}/tools/schema/Opc.Ua.NodeSet2.EventsMinimal.xml)

-    endif()

-

-    if(UA_ENABLE_HISTORIZING)

-        list(APPEND UA_FILE_DATATYPES ${PROJECT_SOURCE_DIR}/tools/schema/datatypes_historizing.txt)

-        list(APPEND UA_FILE_NODESETS ${PROJECT_SOURCE_DIR}/tools/schema/Opc.Ua.NodeSet2.HistorizingMinimal.xml)

-    endif()

-

-    if(UA_ENABLE_DISCOVERY)

-        list(APPEND UA_FILE_DATATYPES ${PROJECT_SOURCE_DIR}/tools/schema/datatypes_discovery.txt)

-    endif()

-

-    if(UA_ENABLE_QUERY)

-        list(APPEND UA_FILE_DATATYPES ${PROJECT_SOURCE_DIR}/tools/schema/datatypes_query.txt)

-    endif()

-

-    if(UA_ENABLE_PUBSUB)

-        list(APPEND UA_FILE_DATATYPES ${PROJECT_SOURCE_DIR}/tools/schema/datatypes_pubsub.txt)

-        if(UA_ENABLE_PUBSUB_INFORMATIONMODEL)

-            list(APPEND UA_FILE_NODESETS ${PROJECT_SOURCE_DIR}/tools/schema/Opc.Ua.NodeSet2.PubSubMinimal.xml)

-        endif()

-    endif()

-	if(UA_ENABLE_DA)

-		list(APPEND UA_FILE_DATATYPES ${PROJECT_SOURCE_DIR}/tools/schema/datatypes_dataaccess.txt)

-    endif()

-    if(UA_ENABLE_TYPEDESCRIPTION)

-        list(APPEND UA_FILE_DATATYPES ${PROJECT_SOURCE_DIR}/tools/schema/datatypes_typedescription.txt)

-    endif()

-endif()

-

-# standard-defined data types

-ua_generate_datatypes(

-    BUILTIN

-    NAME "types"

-    TARGET_SUFFIX "types"

-    NAMESPACE_IDX 0

-    FILE_CSV "${UA_FILE_NODEIDS}"

-    FILES_BSD "${UA_FILE_TYPES_BSD}"

-    FILES_SELECTED ${UA_FILE_DATATYPES}

-)

-

-# transport data types

-ua_generate_datatypes(

-    INTERNAL

-    NAME "transport"

-    TARGET_SUFFIX "transport"

-    NAMESPACE_IDX 1

-    FILE_CSV "${UA_FILE_NODEIDS}"

-    FILES_BSD "${UA_FILE_TYPES_BSD}" "${PROJECT_SOURCE_DIR}/tools/schema/Custom.Opc.Ua.Transport.bsd"

-    FILES_SELECTED "${PROJECT_SOURCE_DIR}/tools/schema/datatypes_transport.txt"

-)

-

-# statuscode explanation

-add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/open62541/statuscodes.h

-                          ${PROJECT_BINARY_DIR}/src_generated/open62541/statuscodes.c

-        PRE_BUILD

-        COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/generate_statuscode_descriptions.py

-        ${UA_FILE_STATUSCODES} ${PROJECT_BINARY_DIR}/src_generated/open62541/statuscodes

-        DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/generate_statuscode_descriptions.py

-                ${UA_FILE_STATUSCODES})

-

-# Header containing defines for all NodeIds

-ua_generate_nodeid_header(

-    NAME "nodeids"

-    ID_PREFIX "NS0"

-    TARGET_SUFFIX "ids-ns0"

-    FILE_CSV "${UA_FILE_NODEIDS}"

-)

-

-# we need a custom target to avoid that the generator is called concurrently and

-# thus overwriting files while the other thread is compiling

-add_custom_target(open62541-generator-statuscode DEPENDS

-        ${PROJECT_BINARY_DIR}/src_generated/open62541/nodeids.h

-        ${PROJECT_BINARY_DIR}/src_generated/open62541/statuscodes.h

-        ${PROJECT_BINARY_DIR}/src_generated/open62541/statuscodes.c)

-

-if (UA_ENABLE_AMALGAMATION)

-    # single-file release

-    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/open62541.h

-                       PRE_BUILD

-                       COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py

-                               ${OPEN62541_VER_COMMIT} ${CMAKE_CURRENT_BINARY_DIR}/open62541.h

-                               ${exported_headers} ${default_plugin_headers} ${ua_architecture_headers}

-                       DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py

-                               ${exported_headers} ${default_plugin_headers} ${ua_architecture_headers})

-

-    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/open62541.c

-                       PRE_BUILD

-                       COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py

-                               ${OPEN62541_VER_COMMIT} ${CMAKE_CURRENT_BINARY_DIR}/open62541.c

-                               ${internal_headers} ${lib_sources} ${default_plugin_sources} ${ua_architecture_sources}

-                       DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py ${internal_headers}

-                               ${lib_sources} ${default_plugin_sources} ${ua_architecture_sources} )

-

-    add_custom_target(open62541-amalgamation-source DEPENDS ${PROJECT_BINARY_DIR}/open62541.c)

-    add_custom_target(open62541-amalgamation-header DEPENDS ${PROJECT_BINARY_DIR}/open62541.h)

-

-    add_dependencies(open62541-amalgamation-header open62541-generator-types)

-    add_dependencies(open62541-amalgamation-source open62541-generator-types

-                     open62541-generator-transport open62541-generator-statuscode)

-endif()

-

-ua_generate_nodeset(

-    NAME "ns0"

-    FILE ${UA_FILE_NODESETS}

-    INTERNAL

-    IGNORE "${PROJECT_SOURCE_DIR}/tools/nodeset_compiler/NodeID_NS0_Base.txt"

-    DEPENDS_TARGET "open62541-generator-types"

-)

-

-# stack protector and optimization needs to be disabled for the huge ns0 file, otherwise debian packaging fails due to long build times.

-# We also disable optimization on Appveyor builds, since they take almost an hour otherwise

-if(UA_PACK_DEBIAN OR (NOT "$ENV{APPVEYOR}" STREQUAL "") OR (

-        (CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" OR CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") AND (

-            # List of compilers which have problems with the huge ns0 optimization

-            (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") AND (CMAKE_C_COMPILER_VERSION VERSION_LESS 7.0))

-        )

-   ))

-    set_source_files_properties(${PROJECT_BINARY_DIR}/src_generated/open62541/namespace0_generated.c PROPERTIES COMPILE_FLAGS "-fno-stack-protector -O0")

-endif()

-

-#####################

-# Build the Library #

-#####################

-

-assign_source_group(${lib_sources})

-assign_source_group(${internal_headers})

-assign_source_group(${exported_headers})

-assign_source_group(${default_plugin_sources})

-assign_source_group(${ua_architecture_sources})

-

-if(UA_ENABLE_AMALGAMATION)

-    add_library(open62541-object OBJECT ${PROJECT_BINARY_DIR}/open62541.c ${PROJECT_BINARY_DIR}/open62541.h)

-    target_include_directories(open62541-object PRIVATE ${PROJECT_BINARY_DIR})

-    target_include_directories(open62541-object PRIVATE "${ua_architecture_directories_to_include}")

-    if(UA_ENABLE_ENCRYPTION)

-        target_include_directories(open62541-object PRIVATE ${MBEDTLS_INCLUDE_DIRS})

-    endif()

-

-    # make sure the open62541_amalgamation target builds before so that amalgamation is finished and it is not executed again for open62541-object

-    # and thus may overwrite the amalgamation result during multiprocessor compilation

-    # the header is already a dependency of open62541 target itself

-    add_dependencies(open62541-object

-                     open62541-amalgamation-header

-                     open62541-generator-types

-                     open62541-generator-transport

-                     open62541-generator-statuscode

-                     open62541-amalgamation-source)

-

-    add_library(open62541 $<TARGET_OBJECTS:open62541-object>)

-    # the only directory that needs to be included if open62541 (amalgameted) target from

-    # the build directory is ${PROJECT_BINARY_DIR}, that contains the generated open62541.h

-    target_include_directories(open62541 PUBLIC $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>)

-

-    if(UA_COMPILE_AS_CXX)

-        set_source_files_properties(${PROJECT_BINARY_DIR}/open62541.c PROPERTIES LANGUAGE CXX)

-    endif()

-

-    add_dependencies(open62541-amalgamation-source open62541-generator-namespace)

-    add_dependencies(open62541-amalgamation-header open62541-generator-namespace)

-else()

-    add_library(open62541-object OBJECT ${lib_sources} ${internal_headers} ${exported_headers})

-    add_dependencies(open62541-object

-                     open62541-generator-types

-                     open62541-generator-transport

-                     open62541-generator-statuscode

-                     open62541-generator-namespace

-                     )

-    target_include_directories(open62541-object PRIVATE ${PROJECT_SOURCE_DIR}/src)

-

-    add_library(open62541-plugins OBJECT ${default_plugin_sources} ${ua_architecture_sources} ${exported_headers})

-    add_dependencies(open62541-plugins open62541-generator-types open62541-generator-transport open62541-generator-namespace)

-    target_include_directories(open62541-plugins PRIVATE ${PROJECT_SOURCE_DIR}/plugins)

-    target_include_directories(open62541-plugins PRIVATE ${PROJECT_BINARY_DIR}/src_generated)

-    target_compile_definitions(open62541-plugins PRIVATE -DUA_DYNAMIC_LINKING_EXPORT)

-    set_target_properties(open62541-plugins PROPERTIES FOLDER "open62541/lib")

-

-    add_library(open62541 $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-plugins>)

-

-    if(UA_COMPILE_AS_CXX)

-        set_source_files_properties(${lib_sources} PROPERTIES LANGUAGE CXX)

-        set_source_files_properties(${default_plugin_sources} ${ua_architecture_sources} PROPERTIES LANGUAGE CXX)

-    endif()

-

-    # Declare include directories

-    function(include_directories_private)

-        foreach(_include_dir IN ITEMS ${ARGN})

-            target_include_directories(open62541-object PRIVATE ${_include_dir})

-            target_include_directories(open62541-plugins PRIVATE ${_include_dir})

-        endforeach()

-    endfunction()

-

-    function(include_directories_public)

-        include_directories_private(${ARGN})

-        foreach(_include_dir IN ITEMS ${ARGN})

-            target_include_directories(open62541 PUBLIC $<BUILD_INTERFACE:${_include_dir}>)

-        endforeach()

-    endfunction()

-

-    # Public includes

-    include_directories_public(${ua_architecture_directories_to_include}

-                               "${PROJECT_SOURCE_DIR}/include"

-                               "${PROJECT_SOURCE_DIR}/plugins/include"

-                               "${PROJECT_SOURCE_DIR}/deps"

-                               "${PROJECT_SOURCE_DIR}/src/pubsub"

-                               "${PROJECT_BINARY_DIR}/src_generated")

-

-    # Private includes

-    include_directories_private("${PROJECT_BINARY_DIR}")

-

-    if(UA_ENABLE_ENCRYPTION)

-        include_directories_private(${MBEDTLS_INCLUDE_DIRS})

-    endif()

-

-    # Option-specific includes

-    if(UA_ENABLE_DISCOVERY)

-        include_directories_private("${PROJECT_SOURCE_DIR}/src/client")

-    endif()

-

-endif()

-

-# Ensure that the open62541::open62541 alias can be used inside open62541's build

-add_library(open62541::open62541 ALIAS open62541)

-

-# Export Symbols

-target_compile_definitions(open62541-object PRIVATE -DUA_DYNAMIC_LINKING_EXPORT)

-target_compile_definitions(open62541 PRIVATE -DUA_DYNAMIC_LINKING_EXPORT)

-if (UA_ENABLE_DISCOVERY_MULTICAST)

-    target_compile_definitions(open62541-object PRIVATE -DMDNSD_DYNAMIC_LINKING_EXPORT)

-    target_compile_definitions(open62541 PRIVATE -DMDNSD_DYNAMIC_LINKING_EXPORT)

-endif()

-# Generate properly versioned shared library links on Linux

-SET_TARGET_PROPERTIES(open62541 PROPERTIES SOVERSION "${OPEN62541_VER_MAJOR}" VERSION "${OPEN62541_VER_MAJOR}.${OPEN62541_VER_MINOR}.${OPEN62541_VER_PATCH}")

-

-##################################

-#     Architectures changes      #

-##################################

-

-GET_PROPERTY(ua_architecture_add_definitions GLOBAL PROPERTY UA_ARCHITECTURE_ADD_DEFINITIONS)

-add_definitions(${ua_architecture_add_definitions})

-

-GET_PROPERTY(ua_architecture_remove_definitions GLOBAL PROPERTY UA_ARCHITECTURE_REMOVE_DEFINITIONS)

-if (NOT "${ua_architecture_remove_definitions}" STREQUAL "")

-  string(REPLACE " " ";" ua_architecture_remove_definitions_list ${ua_architecture_remove_definitions})

-  remove_definitions(${ua_architecture_remove_definitions_list})

-endif(NOT "${ua_architecture_remove_definitions}" STREQUAL "")

-

-GET_PROPERTY(ua_architecture_append_to_library GLOBAL PROPERTY UA_ARCHITECTURE_APPEND_TO_LIBRARY)

-list(APPEND open62541_LIBRARIES ${ua_architecture_append_to_library})

-

-target_compile_definitions(open62541 PUBLIC UA_ARCHITECTURE_${UA_ARCHITECTURE_UPPER})

-

-# DLL requires linking to dependencies

-target_link_libraries(open62541 ${open62541_LIBRARIES})

-

-##########################

-# Build Selected Targets #

-##########################

-

-# always include, builds with make doc

-add_subdirectory(doc)

-

-if(UA_BUILD_EXAMPLES)

-    if(UA_ENABLE_AMALGAMATION)

-        # Cannot compile tests with amalgamation. Not prepared for single header include

-        message(FATAL_ERROR "Examples cannot be built with source amalgamation enabled")

-    endif()

-    add_subdirectory(examples)

-endif()

-

-if(UA_BUILD_UNIT_TESTS)

-    if(UA_ENABLE_AMALGAMATION)

-        # Cannot compile tests with amalgamation. Amalgamation uses the default plugins, not the testing plugins

-        message(FATAL_ERROR "Unit tests cannot be generated with source amalgamation enabled")

-    endif()

-    enable_testing()

-    add_subdirectory(tests)

-endif()

-

-if(UA_BUILD_FUZZING OR UA_BUILD_OSS_FUZZ OR UA_BUILD_FUZZING_CORPUS)

-    add_subdirectory(tests/fuzz)

-endif()

-

-if(UA_BUILD_TOOLS)

-    if(UA_ENABLE_JSON_ENCODING)

-        add_subdirectory(tools/ua2json)

-    endif()

-endif()

-

-########################

-# Linting as target    #

-########################

-include(linting_target)

-

-##########################

-# Installation           #

-##########################

-# invoke via `make install`

-# specify install location with `-DCMAKE_INSTALL_PREFIX=xyz`

-# Enable shared library with `-DBUILD_SHARED_LIBS=ON`

-

-set(cmake_configfile_install ${CMAKE_INSTALL_LIBDIR}/cmake/open62541)

-set(open62541_install_tools_dir share/open62541/tools)

-set(open62541_install_nodeset_dir share/open62541/tools/ua-nodeset)

-

-# This list of components allows to define a find_package requirement.

-# E.g.:

-# find_package(open62541 1.0.0 REQUIRED COMPONENTS Events Methods FullNamespace)

-set(open62541_enabled_components "")

-if(UA_NAMESPACE_ZERO STREQUAL "FULL")

-    list(APPEND open62541_enabled_components "FullNamespace")

-endif()

-if(UA_ENABLE_METHODCALLS)

-    list(APPEND open62541_enabled_components "Methods")

-endif()

-if(UA_ENABLE_SUBSCRIPTIONS)

-    list(APPEND open62541_enabled_components "Subscriptions")

-endif()

-if(UA_ENABLE_PUBSUB)

-    list(APPEND open62541_enabled_components "PubSub")

-endif()

-if(UA_ENABLE_ENCRYPTION)

-    list(APPEND open62541_enabled_components "Encryption")

-endif()

-if(UA_ENABLE_AMALGAMATION)

-    list(APPEND open62541_enabled_components "Amalgamation")

-endif()

-if(UA_ENABLE_HISTORIZING)

-    list(APPEND open62541_enabled_components "Historizing")

-endif()

-if(UA_ENABLE_EXPERIMENTAL_HISTORIZING)

-    list(APPEND open62541_enabled_components "ExperimentalHistorizing")

-endif()

-if(UA_ENABLE_SUBSCRIPTIONS_EVENTS)

-    list(APPEND open62541_enabled_components "Events")

-endif()

-if(UA_MULTITHREADING)

-    list(APPEND open62541_enabled_components "Multithreading")

-endif()

-if(UA_ENABLE_DISCOVERY)

-    list(APPEND open62541_enabled_components "Discovery")

-endif()

-if(UA_ENABLE_DISCOVERY_MULTICAST)

-    list(APPEND open62541_enabled_components "DiscoveryMulticast")

-endif()

-

-# export library (either static or shared depending on BUILD_SHARED_LIBS)

-install(TARGETS open62541

-        EXPORT open62541Targets

-        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}

-        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}

-        RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}

-        INCLUDES DESTINATION include)

-

-if(UA_ENABLE_AMALGAMATION)

-# Our default way of installation is the non-amalgamated version.

-# See also https://github.com/open62541/open62541/pull/2292#discussion_r241106424

-install(CODE "MESSAGE(WARNING \"Installation with UA_ENABLE_AMALGAMATION=ON is not recommended.\")")

-endif()

-

-include(CMakePackageConfigHelpers)

-configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/tools/cmake/open62541Config.cmake.in"

-                              "${CMAKE_CURRENT_BINARY_DIR}/open62541Config.cmake"

-                              INSTALL_DESTINATION "${cmake_configfile_install}"

-                              PATH_VARS open62541_install_tools_dir

-                                        open62541_install_nodeset_dir

-                                        open62541_enabled_components

-                              )

-

-set(open62541_VERSION)

-get_target_property(open62541_VERSION open62541 VERSION)

-

-write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/open62541ConfigVersion.cmake"

-                                 VERSION ${open62541_VERSION}

-                                 COMPATIBILITY AnyNewerVersion)

-

-install(EXPORT open62541Targets

-        FILE open62541Targets.cmake

-        DESTINATION "${cmake_configfile_install}"

-        NAMESPACE open62541::)

-

-export(

-    TARGETS open62541

-    NAMESPACE open62541::

-    FILE ${CMAKE_CURRENT_BINARY_DIR}/open62541Targets.cmake

-)

-

-configure_file("${CMAKE_CURRENT_SOURCE_DIR}/tools/cmake/macros_public.cmake" "${CMAKE_CURRENT_BINARY_DIR}/open62541Macros.cmake" COPYONLY)

-

-install(FILES "${CMAKE_CURRENT_BINARY_DIR}/open62541Config.cmake"

-              "${CMAKE_CURRENT_BINARY_DIR}/open62541ConfigVersion.cmake"

-              "${CMAKE_CURRENT_BINARY_DIR}/open62541Macros.cmake"

-        DESTINATION "${cmake_configfile_install}")

-

-if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")

-    install(FILES "${PROJECT_BINARY_DIR}/src_generated/open62541.pc"

-            DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)

-endif()

-

-set(UA_install_tools_dirs "tools/certs"

-    "tools/nodeset_compiler"

-    "tools/schema"

-    "deps/ua-nodeset")

-

-set(UA_install_tools_files "tools/generate_datatypes.py"

-    "tools/generate_nodeid_header.py"

-    "tools/generate_statuscode_descriptions.py")

-

-install(DIRECTORY ${UA_install_tools_dirs} 

-    DESTINATION ${open62541_install_tools_dir} 

-    USE_SOURCE_PERMISSIONS

-    FILES_MATCHING

-    PATTERN "*"

-    PATTERN "*.pyc" EXCLUDE

-    )

-

-install(FILES ${UA_install_tools_files} DESTINATION ${open62541_install_tools_dir})

-

-if(NOT UA_ENABLE_AMALGAMATION)

-    # Recreate the include folder structure from the source also in /usr/lib/include/open62541

-

-    set(FILES_TO_INSTALL

-        ${exported_headers}

-        ${default_plugin_headers}

-        ${ua_architecture_headers})

-

-    set(BASE_PATH_MAIN "${PROJECT_SOURCE_DIR}/include/open62541")

-    set(BASE_PATH_PLUGINS "${PROJECT_SOURCE_DIR}/plugins/include/open62541")

-    set(BASE_PATH_ARCH "${PROJECT_SOURCE_DIR}/arch")

-    set(BASE_PATH_GENERATED "${PROJECT_BINARY_DIR}/src_generated/open62541")

-    set(BASE_PATH_DEPS "${PROJECT_SOURCE_DIR}/deps")

-

-    foreach ( file ${FILES_TO_INSTALL} )

-        # Construct a relative path by replacing any occurence of the absolute path

-        set(full_path ${file})

-        string(REPLACE ${BASE_PATH_MAIN} "" file ${file})

-        string(REPLACE ${BASE_PATH_PLUGINS} "" file ${file})

-        string(REPLACE ${BASE_PATH_ARCH} "" file ${file})

-        string(REPLACE ${BASE_PATH_GENERATED} "" file ${file})

-        string(REPLACE ${BASE_PATH_DEPS} "" file ${file})

-

-        get_filename_component( dir ${file} DIRECTORY )

-        install( FILES ${full_path} DESTINATION include/open62541${dir} )

-    endforeach()

-

-else()

-    # Export amalgamated header open62541.h which is generated due to build of 

-    # open62541-object

-    install(FILES ${PROJECT_BINARY_DIR}/open62541.h DESTINATION include)

-endif()

-

-add_subdirectory(tools/packaging)

-

-##################################

-# Visual studio solution folders #

-##################################

-

-set_property(GLOBAL PROPERTY USE_FOLDERS ON)

-set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "_CmakePredifinedTargets")

-

-set_target_properties(open62541 PROPERTIES FOLDER "open62541/lib")

-set_target_properties(open62541-object PROPERTIES FOLDER "open62541/lib")

-if (UA_ENABLE_AMALGAMATION)

-    set_target_properties(open62541-amalgamation-header PROPERTIES FOLDER "open62541/lib")

-    set_target_properties(open62541-amalgamation-source PROPERTIES FOLDER "open62541/lib")

-endif()

-

-set_target_properties(open62541-generator-namespace PROPERTIES FOLDER "open62541/generators")

-set_target_properties(open62541-generator-statuscode PROPERTIES FOLDER "open62541/generators")

-set_target_properties(open62541-generator-transport PROPERTIES FOLDER "open62541/generators")

-set_target_properties(open62541-generator-types PROPERTIES FOLDER "open62541/generators")

-

diff --git a/ext/open62541/CODE_OF_CONDUCT.md b/ext/open62541/CODE_OF_CONDUCT.md
deleted file mode 100644
index 565a86b..0000000
--- a/ext/open62541/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1,46 +0,0 @@
-# Contributor Covenant Code of Conduct
-
-## Our Pledge
-
-In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
-
-## Our Standards
-
-Examples of behavior that contributes to creating a positive environment include:
-
-- Using welcoming and inclusive language
-- Being respectful of differing viewpoints and experiences
-- Gracefully accepting constructive criticism
-- Focusing on what is best for the community
-- Showing empathy towards other community members
-
-Examples of unacceptable behavior by participants include:
-
-- The use of sexualized language or imagery and unwelcome sexual attention or advances
-- Trolling, insulting/derogatory comments, and personal or political attacks
-- Public or private harassment
-- Publishing others' private information, such as a physical or electronic address, without explicit permission
-- Other conduct which could reasonably be considered inappropriate in a professional setting
-
-## Our Responsibilities
-
-Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
-
-Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
-
-## Scope
-
-This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
-
-## Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at open62541-core@googlegroups.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
-
-Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
-
-## Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
-
-[homepage]: http://contributor-covenant.org
-[version]: http://contributor-covenant.org/version/1/4/
diff --git a/ext/open62541/CONTRIBUTING.md b/ext/open62541/CONTRIBUTING.md
deleted file mode 100644
index 7da2e39..0000000
--- a/ext/open62541/CONTRIBUTING.md
+++ /dev/null
@@ -1,187 +0,0 @@
-# Contributing to open62541
-
-Contributions to open62541 include code, documentation, answering user
-questions, running the project's infrastructure, and advocating for all types of
-open62541 users.
-
-The open62541 project welcomes all contributions from anyone willing to work in
-good faith with other contributors and the community. No contribution is too
-small and all contributions are valued.
-
-This guide explains the process for contributing to the open62541 project's core
-repository and describes what to expect at each step. Thank you for considering
-these point.
-
-Your friendly open62541 community!
-
-## Code of Conduct
-
-The open62541 project has a [Code of Conduct](./CODE_OF_CONDUCT.md) that *all*
-contributors are expected to follow. This code describes the *minimum* behavior
-expectations for all contributors.
-
-## Pull Requests
-
-Everybody can propose a pull request (PR). But only the core-maintainers of the
-project can merge PR.
-
-### Minimal requirements for a PR
-
-The following are the minimal requirements that every PR needs to meet.
-
-- **Pass Continuous Integration (CI)**: Every PR has to pass our CI. This
-  includes compilation with a range of compilers and for a range of target
-  architectures, passing the unit tests and no detected issues with static code
-  analysis tools.
-
-- **Code-Style**: Please consider the
-  [Code-Style](https://github.com/open62541/open62541/wiki/Code-Style)
-  recommendations when formatting your code.
-
-- **Signed CLA**: Every contributor must sign the Contributor License Agreement
-  (CLA) before we can merge his first PR. The signing can be done online. The
-  link automatically appears on the page of the first PR. In addition, the CLA
-  text can be accessed [here](https://cla-assistant.io/open62541/open62541).
-
-## Commit and PR Hygiene
-
-We have very precise rules over how our git commit messages can be formatted.  This leads to **more
-readable messages** that are easy to follow when looking through the **project history**.  But also,
-we use the git commit messages to **generate the change log**.
-
-This convention is identical to the [Conventional Commits](https://www.conventionalcommits.org) specification or the one used by Angular.
-
-### Commit Message Format
-Each commit message consists of a **header**, a **body** and a **footer**.  The header has a special
-format that includes a **type**, a **scope** and a **subject**:
-
-```text
-<type>(<scope>): <subject>
-<BLANK LINE>
-<body>
-<BLANK LINE>
-<footer>
-```
-
-The **header** is mandatory and the **scope** of the header is optional.
-
-Any line of the commit message cannot be longer 100 characters! This allows the message to be easier
-to read on GitHub as well as in various git tools.
-
-The footer should contain a [closing reference to an issue](https://help.github.com/articles/closing-issues-via-commit-messages/) if any.
-
-Samples: (even more [samples](https://github.com/angular/angular/commits/master))
-
-```text
-docs(server): add function documentation
-```
-```text
-fix(core): fix parsing of endpoint url
-
-Parsing of endpoint urls now also supports https
-```
-
-### Revert
-If the commit reverts a previous commit, it should begin with `revert: `, followed by the header of the reverted commit. In the body it should say: `This reverts commit <hash>.`, where the hash is the SHA of the commit being reverted.
-
-### Type
-Must be one of the following:
-
-- **build**: Changes that affect the build system or external dependencies
-- **ci**: Changes to our CI configuration files and scripts (example scopes: travis, appveyor, fuzz)
-- **docs**: Documentation only changes
-- **feat**: A new feature
-- **fix**: A bug fix
-- **perf**: A code change that improves performance
-- **refactor**: A code change that neither fixes a bug nor adds a feature
-- **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
-- **test**: Adding missing tests or correcting existing tests
-
-### Scope
-The scope is optional, but recommended to be used. It should be the name of the component which is affected (as perceived by the person reading the changelog generated from commit messages).
-
-The following is the list of supported scopes:
-
-- **arch**: Changes to specific architecture code in `root/arch`
-- **client**: Changes only affecting client code
-- **core**: Core functionality used by the client and server
-- **encrypt**: Encryption changes
-- **example**: Example code changes
-- **multithread**: Changes specifically for multithreading
-- **nc**: Nodeset compiler
-- **pack**: Packaging setting changes
-- **plugis**: Change to any (optional) plugin
-- **pubsub**: Changes to the pubsub code
-- **server**: Changes only affecting server code
-
-### Subject
-The subject contains a succinct description of the change:
-
-- use the imperative, present tense: "change" not "changed" nor "changes"
-- don't capitalize the first letter
-- no dot (.) at the end
-
-### Body
-Just as in the **subject**, use the imperative, present tense: "change" not "changed" nor "changes".
-The body should include the motivation for the change and contrast this with previous behavior.
-
-### Footer
-The footer should contain any information about **Breaking Changes** and is also the place to
-reference GitHub issues that this commit **Closes**.
-
-**Breaking Changes** should start with the word `BREAKING CHANGE:` with a space or two newlines. The rest of the commit message is then used for this.
-
-## General commit hygiene
-
-We are using the [Conventional Commits](https://www.conventionalcommits.org) specification (see previous section).
-
-These sites explain a core set of good practice rules for preparing a PR:
-
-- https://wiki.openstack.org/wiki/GitCommitMessages
-- https://nvie.com/posts/a-successful-git-branching-model/
-
-The following points will be especially looked at during the review.
-
-- **Separation of Concerns**: Small changes are much easier to review.
-  Typically, small PR are merged much faster. For larger contributions, it might
-  make sense to break them up into a series of PR. For example, a PR with a new
-  feature should not contain other commits with only stylistic improvements to
-  another portion of the code.
-
-- **Feature Commits**: The same holds true for the individual PR as well. Every
-  commit inside the PR should do one thing only. If many changes have been
-  applied at the same time, `git add --patch` can be used to partially stage and
-  commit changes that belong together.
-
-- **Commit Messages**: Good commit messages help in understanding changes.
-  See previous section.
-
-- **Linear Commit History**: Our goal is to maintain a linear commit history
-  where possible. Use the `git rebase` functionality before pushing a PR. Use
-  `git rebase --interactive` to squash bugfix commits.
-
-### Review Process
-
-These labels can be used for the PR title to indicate its status.
-
-- `[WIP]`: The PR is work in progress and at this point simply informative.
-- `[Review]`: The PR is ready from the developers perspective. He requests a review from a core-maintainer.
-- `[Discussion]`: The PR is a contribution to ongoing technical discussions. The PR may be incomplete and is not intended to be merged before the discussion has concluded.
-
-The core-maintainers are busy people. If they take especially long to react,
-feel free to trigger them by additional comments in the PR thread. Again, small
-PR are much faster to review.
-
-It is the job of the developer that posts the PR to rebase the PR on the target
-branch when the two diverge.
-
-### Changes to the public API
-
-The *public* API is the collection of header files in the /include folder.
-
-Changes to the public API are under especially high scrutiny. Public API changes
-are best discussed with the core-maintainers early on. Simply to avoid duplicate
-work when changes to the proposed API become necessary.
-
-You can create a special issue or PR just for the sake of discussing a proposed
-API change. The actual implementation can follow later on.
diff --git a/ext/open62541/CPPLINT.cfg b/ext/open62541/CPPLINT.cfg
deleted file mode 100644
index 598b5f0..0000000
--- a/ext/open62541/CPPLINT.cfg
+++ /dev/null
@@ -1,21 +0,0 @@
-set noparent
-filter=-whitespace/line_length
-filter=-readability/casting
-filter=-legal/copyright
-filter=-build/include_subdir
-filter=-readability/todo
-filter=-runtime/casting
-filter=-runtime/int
-filter=-build/include_what_you_use
-filter=-readability/multiline_comment
-filter=-runtime/printf
-filter=-build/include
-filter=-build/header_guard
-filter=-readability/alt_tokens
-filter=-runtime/indentation_namespace
-filter=-whitespace/comments
-filter=-whitespace/blank_line
-filter=-whitespace/parens
-filter=-readability/braces
-exclude_files=deps/*
-exclude_files=build/*
diff --git a/ext/open62541/Dockerfile b/ext/open62541/Dockerfile
deleted file mode 100644
index 5cf1018..0000000
--- a/ext/open62541/Dockerfile
+++ /dev/null
@@ -1,33 +0,0 @@
-FROM alpine:3.10
-RUN apk add --no-cache cmake gcc git g++ musl-dev mbedtls-dev python py-pip make && rm -rf /var/cache/apk/*
-ADD . /opt/open62541
-
-# Get all the git tags to make sure we detect the correct version with git describe
-WORKDIR /opt/open62541
-RUN git remote add github-upstream https://github.com/open62541/open62541.git
-RUN git fetch --tags github-upstream
-
-WORKDIR /opt/open62541/build
-RUN cmake -DBUILD_SHARED_LIBS=ON \
-		-DCMAKE_BUILD_TYPE=Debug \
-		-DUA_BUILD_EXAMPLES=ON \
-		# Hardening needs to be disabled, otherwise the docker build takes too long and travis fails
-		-DUA_ENABLE_HARDENING=OFF \
-        -DUA_ENABLE_ENCRYPTION=ON \
-        -DUA_ENABLE_SUBSCRIPTIONS=ON \
-        -DUA_ENABLE_SUBSCRIPTIONS_EVENTS=ON \
-		-DUA_NAMESPACE_ZERO=FULL \
-         /opt/open62541
-RUN make -j
-RUN make install
-WORKDIR /opt/open62541
-
-# Generate certificates
-RUN apk add --no-cache python-dev linux-headers openssl && rm -rf /var/cache/apk/*
-RUN pip install netifaces==0.10.9
-RUN mkdir -p /opt/open62541/pki/created
-RUN python /opt/open62541/tools/certs/create_self-signed.py /opt/open62541/pki/created
-
-
-EXPOSE 4840
-CMD ["/opt/open62541/build/bin/examples/server_ctt" , "/opt/open62541/pki/created/server_cert.der", "/opt/open62541/pki/created/server_key.der", "--enableUnencrypted", "--enableAnonymous"]
diff --git a/ext/open62541/FEATURES.md b/ext/open62541/FEATURES.md
deleted file mode 100644
index 07dbfc2..0000000
--- a/ext/open62541/FEATURES.md
+++ /dev/null
@@ -1,110 +0,0 @@
-open62541 Supported Features
-============================
-
-OPC UA Stack
-------------
-
-|                                         |                    |                      |
-| --------------------------------------- |:------------------:| -------------------- |
-| **Encoding**                            |                    |                      |
-| OPC UA Binary                           | :heavy_check_mark: |                      |
-| OPC UA JSON                             |     :new_moon:     | WIP for Release 0.4  |
-| OPC UA XML                              |     :new_moon:     |                      |
-| **Transport**                           |                    |                      |
-| UA-TCP UA-SC UA Binary                  | :heavy_check_mark: |                      |
-| OPC UA HTTPS                            |     :new_moon:     |                      |
-| SOAP-HTTP WS-SC UA Binary               |     :new_moon:     |                      |
-| SOAP-HTTP WS-SC UA XML                  |     :new_moon:     |                      |
-| SOAP-HTTP WS-SC UA XML-UA Binary        |     :new_moon:     |                      |
-| **Encryption**                          |                    |                      |
-| None                                    | :heavy_check_mark: |                      |
-| Basic128Rsa15                           | :heavy_check_mark: | master, Release 0.3  |
-| Basic256                                | :heavy_check_mark: | master, Release 0.3  |
-| Basic256Sha256                          | :heavy_check_mark: | master, Release 0.3  |
-| **Authentication**                      |                    |                      |
-| Anonymous                               | :heavy_check_mark: |                      |
-| User Name Password                      | :heavy_check_mark: |                      |
-| X509 Certificate                        |     :new_moon:     |                      |
-
-OPC UA Server
--------------
-
-| **Service-Set**             | **Service**                     | **Support**          | **Comment**          |
-| --------------------------- | ------------------------------- |:--------------------:| -------------------- |
-| Discovery Service Set       | FindServers()                   |  :heavy_check_mark:  |                      |
-|                             | FindServersOnNetwork()          |     :full_moon:      | master, Release 0.3  |
-|                             | GetEndpoints()                  |  :heavy_check_mark:  |                      |
-|                             | RegisterServer()                |  :heavy_check_mark:  |                      |
-|                             | RegisterServer2()               |     :full_moon:      | master, Release 0.3  |
-| Secure Channel Service Set  | OpenSecureChannel()             |  :heavy_check_mark:  |                      |
-|                             | CloseSecureChannel()            |  :heavy_check_mark:  |                      |
-| Session Service Set         | CreateSession()                 |  :heavy_check_mark:  |                      |
-|                             | CloseSession()                  |  :heavy_check_mark:  |                      |
-|                             | ActivateSession()               |  :heavy_check_mark:  |                      |
-|                             | Cancel()                        |      :new_moon:      |                      |
-| Node Management Service Set | AddNodes()                      |  :heavy_check_mark:  |                      |
-|                             | AddReferences()                 |  :heavy_check_mark:  |                      |
-|                             | DeleteNodes()                   |  :heavy_check_mark:  |                      |
-|                             | DeleteReferences()              |  :heavy_check_mark:  |                      |
-| View Service Set            | Browse()                        |  :heavy_check_mark:  |                      |
-|                             | BrowseNext()                    |  :heavy_check_mark:  |                      |
-|                             | TranslateBrowsePathsToNodeIds() |  :heavy_check_mark:  |                      |
-|                             | RegisterNodes()                 |  :heavy_check_mark:  |                      |
-|                             | UnregisterNodes()               |  :heavy_check_mark:  |                      |
-| Query Service Set           | QueryFirst()                    |      :new_moon:      |                      |
-|                             | QueryNext()                     |      :new_moon:      |                      |
-| Attribute Service Set       | Read()                          |  :heavy_check_mark:  |                      |
-|                             | Write()                         |  :heavy_check_mark:  |                      |
-|                             | HistoryRead()                   | :waning_gibbous_moon: | [WIP](https://github.com/open62541/open62541/pull/1740), Release 0.4 |
-|                             | HistoryUpdate()                 | :waning_gibbous_moon: | [WIP](https://github.com/open62541/open62541/pull/1740), Release 0.4 |
-| Method Service Set          | Call()                          |  :heavy_check_mark:  |                      |
-| MonitoredItems Service Set  | CreateMonitoredItems()          |  :heavy_check_mark:  | See below for Events |
-|                             | DeleteMonitoredItems()          |  :heavy_check_mark:  |                      |
-|                             | ModifyMonitoredItems()          |  :heavy_check_mark:  |                      |
-|                             | SetMonitoringMode()             |  :heavy_check_mark:  |                      |
-|                             | SetTriggering()                 |      :new_moon:      |                      |
-| Subscription Service Set    | CreateSubscription()            |  :heavy_check_mark:  |                      |
-|                             | ModifySubscription()            |  :heavy_check_mark:  |                      |
-|                             | SetPublishingMode()             |  :heavy_check_mark:  |                      |
-|                             | Publish()                       |  :heavy_check_mark:  |                      |
-|                             | Republish()                     |  :heavy_check_mark:  |                      |
-|                             | DeleteSubscriptions()           |  :heavy_check_mark:  |                      |
-|                             | TransferSubscriptions()         |      :new_moon:      |                      |
-
-| **Subscriptions**                       |                    |                      |
-| --------------------------------------- |:------------------:| -------------------- |
-| DataChange MonitoredItems               | :heavy_check_mark: | master, Release 0.3  |
-| DataChange Filters                      | :heavy_check_mark: | master               |
-| Event MonitoredItems                    | :heavy_check_mark: | master               |
-| Event Filters                           |     :new_moon:     |                      |
-
-| **Discovery**                           |                    | See Discovery Service Set |
-| --------------------------------------- |:------------------:| -------------------- |
-| Local Discovery Server                  | :heavy_check_mark: | master, Release 0.3  |
-| Local Discovery Server Multicast Ext.   | :heavy_check_mark: | master, Release 0.3  |
-| Global Discovery Server                 |     :new_moon:     |                      |
-
-OPC UA Client
--------------
-
-- All services are supported
-- Handling of subscriptions in the background
-
-OPC UA PubSub
--------------
-
-|                                                   |                       |                        |
-| ------------------------------------------------- |:---------------------:| ---------------------- |
-| **NetworkMessage decoding/encoding**              |                       |                        |
-| Binary (UADP)                                     |   :heavy_check_mark:  |                        |
-| JSON                                              |       :new_moon:      | WIP                    |
-| **PubSub Transport**                              |                       |                        |
-| UDP/multicast (send and receive)                  |   :heavy_check_mark:  |                        |
-| Ethernet (TSN)                                    | :waning_gibbous_moon: | Defined API to plug in custom networking implementation |
-| MQTT                                              |      :new_moon:       | WIP                    |
-| AMQP                                              |      :new_moon:       |                        |
-| **Publisher Configuration**                       |                       |                        |
-| Configure (server-side) Publisher at runtime      |  :heavy_check_mark:   |                        |
-| Configuration representation in information model |  :heavy_check_mark:   | Runtime configuration changes by editing the information model representation are possible |
-| Security Key Service Model                        |      :new_moon:       |                        |
-| **Subscriber Configuration**                      | :waning_gibbous_moon: | Manual Subscriber only |
diff --git a/ext/open62541/ISSUE_TEMPLATE.md b/ext/open62541/ISSUE_TEMPLATE.md
deleted file mode 100644
index 97ee0a2..0000000
--- a/ext/open62541/ISSUE_TEMPLATE.md
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-!ATTENTION!
-Please read the following page carefully and provide us with all the
-information requested:
-https://github.com/open62541/open62541/wiki/Writing-Good-Issue-Reports
-
-Use Github Markdown to format your text:
-https://help.github.com/articles/basic-writing-and-formatting-syntax/
-
-Fill out the sections and checklist below (add text at the end of each line).
-
-!ATTENTION!
---------------------------------------------------------------------------------
--->
-
-## Description
-
-## Background Information / Reproduction Steps
-
-
-
-Used CMake options:
-
-<!-- 
-
-Include all CMake options here, which you modified or used for your build.
-
-If you are using cmake-gui, go to "Tools > Show my Changes" and paste the content of "Command Line Options"
-
-On the command line use `cmake -L` (or `cmake -LA` if you changed advanced variables)
--->
-
-```bash
-cmake -DUA_NAMESPACE_ZERO=<YOUR_OPTION> <ANY_OTHER_OPTIONS> ..
-```
-
-## Checklist
-
-Please provide the following information:
-
- - [ ] open62541 Version (release number or git tag):
- - [ ] Other OPC UA SDKs used (client or server): 
- - [ ] Operating system:
- - [ ] Logs (with `UA_LOGLEVEL` set as low as necessary) attached
- - [ ] Wireshark network dump attached
- - [ ] Self-contained code example attached
- - [ ] Critical issue
diff --git a/ext/open62541/LICENSE b/ext/open62541/LICENSE
deleted file mode 100644
index 14e2f77..0000000
--- a/ext/open62541/LICENSE
+++ /dev/null
@@ -1,373 +0,0 @@
-Mozilla Public License Version 2.0
-==================================
-
-1. Definitions
---------------
-
-1.1. "Contributor"
-    means each individual or legal entity that creates, contributes to
-    the creation of, or owns Covered Software.
-
-1.2. "Contributor Version"
-    means the combination of the Contributions of others (if any) used
-    by a Contributor and that particular Contributor's Contribution.
-
-1.3. "Contribution"
-    means Covered Software of a particular Contributor.
-
-1.4. "Covered Software"
-    means Source Code Form to which the initial Contributor has attached
-    the notice in Exhibit A, the Executable Form of such Source Code
-    Form, and Modifications of such Source Code Form, in each case
-    including portions thereof.
-
-1.5. "Incompatible With Secondary Licenses"
-    means
-
-    (a) that the initial Contributor has attached the notice described
-        in Exhibit B to the Covered Software; or
-
-    (b) that the Covered Software was made available under the terms of
-        version 1.1 or earlier of the License, but not also under the
-        terms of a Secondary License.
-
-1.6. "Executable Form"
-    means any form of the work other than Source Code Form.
-
-1.7. "Larger Work"
-    means a work that combines Covered Software with other material, in 
-    a separate file or files, that is not Covered Software.
-
-1.8. "License"
-    means this document.
-
-1.9. "Licensable"
-    means having the right to grant, to the maximum extent possible,
-    whether at the time of the initial grant or subsequently, any and
-    all of the rights conveyed by this License.
-
-1.10. "Modifications"
-    means any of the following:
-
-    (a) any file in Source Code Form that results from an addition to,
-        deletion from, or modification of the contents of Covered
-        Software; or
-
-    (b) any new file in Source Code Form that contains any Covered
-        Software.
-
-1.11. "Patent Claims" of a Contributor
-    means any patent claim(s), including without limitation, method,
-    process, and apparatus claims, in any patent Licensable by such
-    Contributor that would be infringed, but for the grant of the
-    License, by the making, using, selling, offering for sale, having
-    made, import, or transfer of either its Contributions or its
-    Contributor Version.
-
-1.12. "Secondary License"
-    means either the GNU General Public License, Version 2.0, the GNU
-    Lesser General Public License, Version 2.1, the GNU Affero General
-    Public License, Version 3.0, or any later versions of those
-    licenses.
-
-1.13. "Source Code Form"
-    means the form of the work preferred for making modifications.
-
-1.14. "You" (or "Your")
-    means an individual or a legal entity exercising rights under this
-    License. For legal entities, "You" includes any entity that
-    controls, is controlled by, or is under common control with You. For
-    purposes of this definition, "control" means (a) the power, direct
-    or indirect, to cause the direction or management of such entity,
-    whether by contract or otherwise, or (b) ownership of more than
-    fifty percent (50%) of the outstanding shares or beneficial
-    ownership of such entity.
-
-2. License Grants and Conditions
---------------------------------
-
-2.1. Grants
-
-Each Contributor hereby grants You a world-wide, royalty-free,
-non-exclusive license:
-
-(a) under intellectual property rights (other than patent or trademark)
-    Licensable by such Contributor to use, reproduce, make available,
-    modify, display, perform, distribute, and otherwise exploit its
-    Contributions, either on an unmodified basis, with Modifications, or
-    as part of a Larger Work; and
-
-(b) under Patent Claims of such Contributor to make, use, sell, offer
-    for sale, have made, import, and otherwise transfer either its
-    Contributions or its Contributor Version.
-
-2.2. Effective Date
-
-The licenses granted in Section 2.1 with respect to any Contribution
-become effective for each Contribution on the date the Contributor first
-distributes such Contribution.
-
-2.3. Limitations on Grant Scope
-
-The licenses granted in this Section 2 are the only rights granted under
-this License. No additional rights or licenses will be implied from the
-distribution or licensing of Covered Software under this License.
-Notwithstanding Section 2.1(b) above, no patent license is granted by a
-Contributor:
-
-(a) for any code that a Contributor has removed from Covered Software;
-    or
-
-(b) for infringements caused by: (i) Your and any other third party's
-    modifications of Covered Software, or (ii) the combination of its
-    Contributions with other software (except as part of its Contributor
-    Version); or
-
-(c) under Patent Claims infringed by Covered Software in the absence of
-    its Contributions.
-
-This License does not grant any rights in the trademarks, service marks,
-or logos of any Contributor (except as may be necessary to comply with
-the notice requirements in Section 3.4).
-
-2.4. Subsequent Licenses
-
-No Contributor makes additional grants as a result of Your choice to
-distribute the Covered Software under a subsequent version of this
-License (see Section 10.2) or under the terms of a Secondary License (if
-permitted under the terms of Section 3.3).
-
-2.5. Representation
-
-Each Contributor represents that the Contributor believes its
-Contributions are its original creation(s) or it has sufficient rights
-to grant the rights to its Contributions conveyed by this License.
-
-2.6. Fair Use
-
-This License is not intended to limit any rights You have under
-applicable copyright doctrines of fair use, fair dealing, or other
-equivalents.
-
-2.7. Conditions
-
-Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
-in Section 2.1.
-
-3. Responsibilities
--------------------
-
-3.1. Distribution of Source Form
-
-All distribution of Covered Software in Source Code Form, including any
-Modifications that You create or to which You contribute, must be under
-the terms of this License. You must inform recipients that the Source
-Code Form of the Covered Software is governed by the terms of this
-License, and how they can obtain a copy of this License. You may not
-attempt to alter or restrict the recipients' rights in the Source Code
-Form.
-
-3.2. Distribution of Executable Form
-
-If You distribute Covered Software in Executable Form then:
-
-(a) such Covered Software must also be made available in Source Code
-    Form, as described in Section 3.1, and You must inform recipients of
-    the Executable Form how they can obtain a copy of such Source Code
-    Form by reasonable means in a timely manner, at a charge no more
-    than the cost of distribution to the recipient; and
-
-(b) You may distribute such Executable Form under the terms of this
-    License, or sublicense it under different terms, provided that the
-    license for the Executable Form does not attempt to limit or alter
-    the recipients' rights in the Source Code Form under this License.
-
-3.3. Distribution of a Larger Work
-
-You may create and distribute a Larger Work under terms of Your choice,
-provided that You also comply with the requirements of this License for
-the Covered Software. If the Larger Work is a combination of Covered
-Software with a work governed by one or more Secondary Licenses, and the
-Covered Software is not Incompatible With Secondary Licenses, this
-License permits You to additionally distribute such Covered Software
-under the terms of such Secondary License(s), so that the recipient of
-the Larger Work may, at their option, further distribute the Covered
-Software under the terms of either this License or such Secondary
-License(s).
-
-3.4. Notices
-
-You may not remove or alter the substance of any license notices
-(including copyright notices, patent notices, disclaimers of warranty,
-or limitations of liability) contained within the Source Code Form of
-the Covered Software, except that You may alter any license notices to
-the extent required to remedy known factual inaccuracies.
-
-3.5. Application of Additional Terms
-
-You may choose to offer, and to charge a fee for, warranty, support,
-indemnity or liability obligations to one or more recipients of Covered
-Software. However, You may do so only on Your own behalf, and not on
-behalf of any Contributor. You must make it absolutely clear that any
-such warranty, support, indemnity, or liability obligation is offered by
-You alone, and You hereby agree to indemnify every Contributor for any
-liability incurred by such Contributor as a result of warranty, support,
-indemnity or liability terms You offer. You may include additional
-disclaimers of warranty and limitations of liability specific to any
-jurisdiction.
-
-4. Inability to Comply Due to Statute or Regulation
----------------------------------------------------
-
-If it is impossible for You to comply with any of the terms of this
-License with respect to some or all of the Covered Software due to
-statute, judicial order, or regulation then You must: (a) comply with
-the terms of this License to the maximum extent possible; and (b)
-describe the limitations and the code they affect. Such description must
-be placed in a text file included with all distributions of the Covered
-Software under this License. Except to the extent prohibited by statute
-or regulation, such description must be sufficiently detailed for a
-recipient of ordinary skill to be able to understand it.
-
-5. Termination
---------------
-
-5.1. The rights granted under this License will terminate automatically
-if You fail to comply with any of its terms. However, if You become
-compliant, then the rights granted under this License from a particular
-Contributor are reinstated (a) provisionally, unless and until such
-Contributor explicitly and finally terminates Your grants, and (b) on an
-ongoing basis, if such Contributor fails to notify You of the
-non-compliance by some reasonable means prior to 60 days after You have
-come back into compliance. Moreover, Your grants from a particular
-Contributor are reinstated on an ongoing basis if such Contributor
-notifies You of the non-compliance by some reasonable means, this is the
-first time You have received notice of non-compliance with this License
-from such Contributor, and You become compliant prior to 30 days after
-Your receipt of the notice.
-
-5.2. If You initiate litigation against any entity by asserting a patent
-infringement claim (excluding declaratory judgment actions,
-counter-claims, and cross-claims) alleging that a Contributor Version
-directly or indirectly infringes any patent, then the rights granted to
-You by any and all Contributors for the Covered Software under Section
-2.1 of this License shall terminate.
-
-5.3. In the event of termination under Sections 5.1 or 5.2 above, all
-end user license agreements (excluding distributors and resellers) which
-have been validly granted by You or Your distributors under this License
-prior to termination shall survive termination.
-
-************************************************************************
-*                                                                      *
-*  6. Disclaimer of Warranty                                           *
-*  -------------------------                                           *
-*                                                                      *
-*  Covered Software is provided under this License on an "as is"       *
-*  basis, without warranty of any kind, either expressed, implied, or  *
-*  statutory, including, without limitation, warranties that the       *
-*  Covered Software is free of defects, merchantable, fit for a        *
-*  particular purpose or non-infringing. The entire risk as to the     *
-*  quality and performance of the Covered Software is with You.        *
-*  Should any Covered Software prove defective in any respect, You     *
-*  (not any Contributor) assume the cost of any necessary servicing,   *
-*  repair, or correction. This disclaimer of warranty constitutes an   *
-*  essential part of this License. No use of any Covered Software is   *
-*  authorized under this License except under this disclaimer.         *
-*                                                                      *
-************************************************************************
-
-************************************************************************
-*                                                                      *
-*  7. Limitation of Liability                                          *
-*  --------------------------                                          *
-*                                                                      *
-*  Under no circumstances and under no legal theory, whether tort      *
-*  (including negligence), contract, or otherwise, shall any           *
-*  Contributor, or anyone who distributes Covered Software as          *
-*  permitted above, be liable to You for any direct, indirect,         *
-*  special, incidental, or consequential damages of any character      *
-*  including, without limitation, damages for lost profits, loss of    *
-*  goodwill, work stoppage, computer failure or malfunction, or any    *
-*  and all other commercial damages or losses, even if such party      *
-*  shall have been informed of the possibility of such damages. This   *
-*  limitation of liability shall not apply to liability for death or   *
-*  personal injury resulting from such party's negligence to the       *
-*  extent applicable law prohibits such limitation. Some               *
-*  jurisdictions do not allow the exclusion or limitation of           *
-*  incidental or consequential damages, so this exclusion and          *
-*  limitation may not apply to You.                                    *
-*                                                                      *
-************************************************************************
-
-8. Litigation
--------------
-
-Any litigation relating to this License may be brought only in the
-courts of a jurisdiction where the defendant maintains its principal
-place of business and such litigation shall be governed by laws of that
-jurisdiction, without reference to its conflict-of-law provisions.
-Nothing in this Section shall prevent a party's ability to bring
-cross-claims or counter-claims.
-
-9. Miscellaneous
-----------------
-
-This License represents the complete agreement concerning the subject
-matter hereof. If any provision of this License is held to be
-unenforceable, such provision shall be reformed only to the extent
-necessary to make it enforceable. Any law or regulation which provides
-that the language of a contract shall be construed against the drafter
-shall not be used to construe this License against a Contributor.
-
-10. Versions of the License
----------------------------
-
-10.1. New Versions
-
-Mozilla Foundation is the license steward. Except as provided in Section
-10.3, no one other than the license steward has the right to modify or
-publish new versions of this License. Each version will be given a
-distinguishing version number.
-
-10.2. Effect of New Versions
-
-You may distribute the Covered Software under the terms of the version
-of the License under which You originally received the Covered Software,
-or under the terms of any subsequent version published by the license
-steward.
-
-10.3. Modified Versions
-
-If you create software not governed by this License, and you want to
-create a new license for such software, you may create and use a
-modified version of this License if you rename the license and remove
-any references to the name of the license steward (except to note that
-such modified license differs from this License).
-
-10.4. Distributing Source Code Form that is Incompatible With Secondary
-Licenses
-
-If You choose to distribute Source Code Form that is Incompatible With
-Secondary Licenses under the terms of this version of the License, the
-notice described in Exhibit B of this License must be attached.
-
-Exhibit A - Source Code Form License Notice
--------------------------------------------
-
-  This Source Code Form is subject to the terms of the Mozilla Public
-  License, v. 2.0. If a copy of the MPL was not distributed with this
-  file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-If it is not possible or desirable to put the notice in a particular
-file, then You may include the notice in a location (such as a LICENSE
-file in a relevant directory) where a recipient would be likely to look
-for such a notice.
-
-You may add additional accurate notices of copyright ownership.
-
-Exhibit B - "Incompatible With Secondary Licenses" Notice
----------------------------------------------------------
-
-  This Source Code Form is "Incompatible With Secondary Licenses", as
-  defined by the Mozilla Public License, v. 2.0.
diff --git a/ext/open62541/LICENSE-CC0 b/ext/open62541/LICENSE-CC0
deleted file mode 100644
index ad7fdad..0000000
--- a/ext/open62541/LICENSE-CC0
+++ /dev/null
@@ -1,110 +0,0 @@
-Creative Commons CCZero 1.0 Universal
-
-Statement of Purpose
-
-The laws of most jurisdictions throughout the world automatically confer
-exclusive Copyright and Related Rights (defined below) upon the creator
-and subsequent owner(s) (each and all, an "owner") of an original work of
-authorship and/or a database (each, a "Work").
-
-Certain owners wish to permanently relinquish those rights to a Work for
-the purpose of contributing to a commons of creative, cultural and
-scientific works ("Commons") that the public can reliably and without fear
-of later claims of infringement build upon, modify, incorporate in other
-works, reuse and redistribute as freely as possible in any form whatsoever
-and for any purposes, including without limitation commercial purposes.
-These owners may contribute to the Commons to promote the ideal of a free
-culture and the further production of creative, cultural and scientific
-works, or to gain reputation or greater distribution for their Work in
-part through the use and efforts of others.
-
-For these and/or other purposes and motivations, and without any
-expectation of additional consideration or compensation, the person
-associating CC0 with a Work (the "Affirmer"), to the extent that he or she
-is an owner of Copyright and Related Rights in the Work, voluntarily
-elects to apply CC0 to the Work and publicly distribute the Work under its
-terms, with knowledge of his or her Copyright and Related Rights in the
-Work and the meaning and intended legal effect of CC0 on those rights.
-
-1. Copyright and Related Rights. A Work made available under CC0 may be
-protected by copyright and related or neighboring rights ("Copyright and
-Related Rights"). Copyright and Related Rights include, but are not
-limited to, the following:
-
-  i. the right to reproduce, adapt, distribute, perform, display,
-     communicate, and translate a Work;
- ii. moral rights retained by the original author(s) and/or performer(s);
-iii. publicity and privacy rights pertaining to a person's image or
-     likeness depicted in a Work;
- iv. rights protecting against unfair competition in regards to a Work,
-     subject to the limitations in paragraph 4(a), below;
-  v. rights protecting the extraction, dissemination, use and reuse of data
-     in a Work;
- vi. database rights (such as those arising under Directive 96/9/EC of the
-     European Parliament and of the Council of 11 March 1996 on the legal
-     protection of databases, and under any national implementation
-     thereof, including any amended or successor version of such
-     directive); and
-vii. other similar, equivalent or corresponding rights throughout the
-     world based on applicable law or treaty, and any national
-     implementations thereof.
-
-2. Waiver. To the greatest extent permitted by, but not in contravention
-of, applicable law, Affirmer hereby overtly, fully, permanently,
-irrevocably and unconditionally waives, abandons, and surrenders all of
-Affirmer's Copyright and Related Rights and associated claims and causes
-of action, whether now known or unknown (including existing as well as
-future claims and causes of action), in the Work (i) in all territories
-worldwide, (ii) for the maximum duration provided by applicable law or
-treaty (including future time extensions), (iii) in any current or future
-medium and for any number of copies, and (iv) for any purpose whatsoever,
-including without limitation commercial, advertising or promotional
-purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
-member of the public at large and to the detriment of Affirmer's heirs and
-successors, fully intending that such Waiver shall not be subject to
-revocation, rescission, cancellation, termination, or any other legal or
-equitable action to disrupt the quiet enjoyment of the Work by the public
-as contemplated by Affirmer's express Statement of Purpose.
-
-3. Public License Fallback. Should any part of the Waiver for any reason
-be judged legally invalid or ineffective under applicable law, then the
-Waiver shall be preserved to the maximum extent permitted taking into
-account Affirmer's express Statement of Purpose. In addition, to the
-extent the Waiver is so judged Affirmer hereby grants to each affected
-person a royalty-free, non transferable, non sublicensable, non exclusive,
-irrevocable and unconditional license to exercise Affirmer's Copyright and
-Related Rights in the Work (i) in all territories worldwide, (ii) for the
-maximum duration provided by applicable law or treaty (including future
-time extensions), (iii) in any current or future medium and for any number
-of copies, and (iv) for any purpose whatsoever, including without
-limitation commercial, advertising or promotional purposes (the
-"License"). The License shall be deemed effective as of the date CC0 was
-applied by Affirmer to the Work. Should any part of the License for any
-reason be judged legally invalid or ineffective under applicable law, such
-partial invalidity or ineffectiveness shall not invalidate the remainder
-of the License, and in such case Affirmer hereby affirms that he or she
-will not (i) exercise any of his or her remaining Copyright and Related
-Rights in the Work or (ii) assert any associated claims and causes of
-action with respect to the Work, in either case contrary to Affirmer's
-express Statement of Purpose.
-
-4. Limitations and Disclaimers.
-
- a. No trademark or patent rights held by Affirmer are waived, abandoned,
-    surrendered, licensed or otherwise affected by this document.
- b. Affirmer offers the Work as-is and makes no representations or
-    warranties of any kind concerning the Work, express, implied,
-    statutory or otherwise, including without limitation warranties of
-    title, merchantability, fitness for a particular purpose, non
-    infringement, or the absence of latent or other defects, accuracy, or
-    the present or absence of errors, whether or not discoverable, all to
-    the greatest extent permissible under applicable law.
- c. Affirmer disclaims responsibility for clearing rights of other persons
-    that may apply to the Work or any use thereof, including without
-    limitation any person's Copyright and Related Rights in the Work.
-    Further, Affirmer disclaims responsibility for obtaining any necessary
-    consents, permissions or other rights required for any use of the
-    Work.
- d. Affirmer understands and acknowledges that Creative Commons is not a
-    party to this document and has no duty or obligation with respect to
-    this CC0 or use of the Work.
diff --git a/ext/open62541/README.md b/ext/open62541/README.md
deleted file mode 100644
index f52d8fc..0000000
--- a/ext/open62541/README.md
+++ /dev/null
@@ -1,240 +0,0 @@
-# open62541
-
-open62541 (<http://open62541.org>) is an open source and free implementation of OPC UA (OPC Unified Architecture) written in the common subset of the C99 and C++98 languages. The library is usable with all major compilers and provides the necessary tools to implement dedicated OPC UA clients and servers, or to integrate OPC UA-based communication into existing applications. open62541 library is platform independent. All platform-specific functionality is implemented via exchangeable plugins. Plugin implementations are provided for the major operating systems.
-
-open62541 is licensed under the Mozilla Public License v2.0. So the *open62541 library can be used in projects that are not open source*. Only changes to the open62541 library itself need to published under the same license. The plugins, as well as the server and client examples are in the public domain (CC0 license). They can be reused under any license and changes do not have to be published.
-
-The library is [available](https://github.com/open62541/open62541/releases) in standard source and binary form. In addition, the single-file source distribution merges the entire library into a single .c and .h file that can be easily added to existing projects. Example server and client implementations can be found in the [/examples](examples/) directory or further down on this page.
-
-## Project Information
-
-Build Status:
-
-[![Build Status](https://img.shields.io/travis/open62541/open62541/master.svg)](https://travis-ci.org/open62541/open62541)
-[![Build Status](https://dev.azure.com/open62541/open62541/_apis/build/status/open62541.open62541?branchName=master)](https://dev.azure.com/open62541/open62541/_build/latest?definitionId=1&branchName=master)
-[![Build Status](https://ci.appveyor.com/api/projects/status/github/open62541/open62541?branch=master&svg=true)](https://ci.appveyor.com/project/open62541/open62541/branch/master)
-[![Build Status](https://img.shields.io/docker/cloud/build/open62541/open62541)](https://cloud.docker.com/u/open62541/repository/docker/open62541/open62541)
-
-Code Quality:
-
-[![Codacy Badge](https://api.codacy.com/project/badge/Grade/68ad08e897624c77a64fc2be66ca7b50)](https://www.codacy.com/app/open62541/open62541?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=open62541/open62541&amp;utm_campaign=Badge_Grade)
-[![Total Alerts](https://img.shields.io/lgtm/alerts/g/open62541/open62541.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/open62541/open62541/alerts)
-[![Coverage Status](https://img.shields.io/coveralls/open62541/open62541/master.svg)](https://coveralls.io/r/open62541/open62541?branch=master)
-[![codecov](https://codecov.io/gh/open62541/open62541/branch/master/graph/badge.svg)](https://codecov.io/gh/open62541/open62541)
-[![Code Quality: Cpp](https://img.shields.io/lgtm/grade/cpp/g/open62541/open62541.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/open62541/open62541/context:cpp)
-
-General Project Info:
-
-[![Open Hub Project Status](https://www.openhub.net/p/open62541/widgets/project_thin_badge.gif)](https://www.openhub.net/p/open62541/)
-[![Overall Downloads](https://img.shields.io/github/downloads/open62541/open62541/total.svg)](https://github.com/open62541/open62541/releases)
-
-### Features and Certification
-
-open62541 implements the OPC UA binary protocol stack as well as a client and server SDK. The final server binaries can be well under 100kb, depending on the selected features and the size of the information model.
-
-- Communication Stack
-  - OPC UA binary protocol
-  - OPC UA JSON encoding
-  - Secure communication with encrypted messages
-  - Exchangeable network layer (plugin) for using custom networking APIs (e.g. on embedded targets)
-  - Support for generating data types from standard XML definitions
-- Server
-  - Support for all OPC UA node types
-  - Access control for individual nodes
-  - Support for generating server-side information models from standard XML definitions (nodesets)
-  - Support for adding and removing nodes and references also at runtime.
-  - Support for inheritance and instantiation of object- and variable-types (custom constructor/destructor, instantiation of child nodes)
-  - Support for subscriptions/monitoreditems (data change notifications and events)
-- Client
-  - All OPC UA services supported
-  - Asynchronous service requests
-  - Background handling of subscriptions
-- Publish/Subscribe
-  - UADP Binary protocol with UDP-multicast or Ethernet communication
-  - PubSub JSON encoding
-
-open62541 is currently self-certifying. That is, the Conformance Testing Tools (CTT) of the OPC Foundation are regularly applied. But the SDK has not started an official certification so far.
-The CTT configuration and results are tracked at https://github.com/open62541/open62541-ctt. The OPC UA profiles under regular test in the CTT are currently:
-
-- Micro Embedded Device Server
-- Method Server Facet
-
-The goal for the upcoming 0.4 release is to support the *Embedded UA Server* profile in the CTT.
-See the page on [open62541 Features](FEATURES.md) for an in-depth look at the support for the conformance units that make up the OPC UA profiles.
-  
-### Dependencies
-
-On most systems, open62541 requires the C standard library only. For dependencies during the build process, see the following list and the [build documentation](https://open62541.org/doc/current/building.html) for details.
-
-- Core Library: The core library has no dependencies besides the C99 standard headers.
-- Default Plugins: The default plugins use the POSIX interfaces for networking and accessing the system clock. Ports to different (embedded) architectures are achieved by customizing the plugins.
-- Building and Code Generation: The build environment is generated via CMake. Some code is auto-generated from XML definitions that are part of the OPC UA standard. The code generation scripts run with both Python 2 and 3.
-
-### Code Quality
-
-We emphasize code quality. The following quality metrics are continuously checked and are ensured to hold before an official release is made:
-
-- Zero errors indicated by the Compliance Testing Tool (CTT) of the OPC Foundation for the supported features
-- Zero compiler warnings from GCC/Clang/MSVC with very strict compilation flags
-- Zero issues indicated by unit tests (more than 80% coverage)
-- Zero issues indicated by clang-analyzer, clang-tidy, cpp-check and the Codacy static code analysis tools
-- Zero unresolved issues from fuzzing the library in Google's oss-fuzz infrastructure
-- Zero issues indicated by Valgrind (Linux), DrMemory (Windows) and Clang AddressSanitizer / MemorySanitizer for the CTT tests, unit tests and fuzzing
-
-### Documentation and Support
-
-A general introduction to OPC UA and the open62541 documentation can be found at http://open62541.org/doc/current.
-Past releases of the library can be downloaded at https://github.com/open62541/open62541/releases.
-To use the latest improvements, download a nightly build of the *single-file distribution* (the entire library merged into a single source and header file) from http://open62541.org/releases. Nightly builds of MSVC binaries of the library are available [here](https://ci.appveyor.com/project/open62541/open62541/build/artifacts).
-
-For individual discussion and support, use the following channels:
-
-- the [mailing list](https://groups.google.com/d/forum/open62541)
-- our [IRC channel](http://webchat.freenode.net/?channels=%23open62541)
-- the [bugtracker](https://github.com/open62541/open62541/issues)
-
-We want to foster an open and welcoming community. Please take our [code of conduct](CODE_OF_CONDUCT.md) into regard.
-
-Jointly with the overall open62541 community, the core maintainers steer the long-term development. The current core maintainers are (as of April 2018, in alphabetical order):
-
-- Chris-Paul Iatrou (Dresden University of Technology, Chair for Process Control Systems Engineering)
-- Florian Palm (RWTH Aachen University, Chair of Process Control Engineering)
-- Julius Pfrommer (Fraunhofer IOSB, Karlsruhe)
-- Stefan Profanter (fortiss, Munich)
-
-## Support & Development
-
-### Commercial Support
-
-The open62541 community handles support requests for the open source library and its development. Custom development and individual support is provided by commercial partners that are affiliated with open62541:
-
-- [Kalycito Infotech, Tamil Nadu, INDIA](https://www.kalycito.com/landing/open62541-commercial-partner) for embedded and realtime IIoT applications (Contact: enterprise.services@kalycito.com)
-- [basysKom GmbH, Darmstadt, Germany](https://www.basyskom.com/) Software Engineering for Embedded Systems. (Contact: info@basysKom.com) 
-
-For custom development that shall eventually become part of the open62541 library, please keep one of the core maintainers in the loop. Again, please note that all changes to files that are already licensed under the MPLv2 automatically become MPLv2 as well. Static linking of the open62541 library with code under a different license is possible. All architecture-specific code is implemented in the form of exchangeable plugins under a very permissible CC0 license.
-
-### Development
-
-As an open source project, new contributors are encouraged to help improve open62541. The following are good starting points for new contributors:
-
-- [Report bugs](https://github.com/open62541/open62541/issues)
-- Improve the [documentation](http://open62541.org/doc/current)
-- Work on issues marked as "[good first issue](https://github.com/open62541/open62541/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)"
-
-### Success Stories and Users of open62541
-
-A list of projects and companies using our open62541 stack can be found in our Wiki:
-
-https://github.com/open62541/open62541/wiki/References-to-open62541
-
-## Installation and code usage
-
-For every release, we provide some pre-packed release packages which you can directly use in your compile infrastructure.
-
-Have a look at the [release page](https://github.com/open62541/open62541/releases) and the corresponding attached assets.
-
-A more detailed explanation on how to install the open62541 SDK is given in our [documentation](https://open62541.org/doc/current/installing.html).
-
-You can not directly download a .zip package from the main branches using the Github UI, since then some of the submodules and version strings are missing.
-Therefore you have three options to install and use this stack:
-
-- **Recommended:** Use any of the prepared packages attached to every release or in the package repository of your distro (if available).  
-  Please check the install guide for more info.
-  
-- Download a .zip package of special `pack/` branches.  
-  These pack branches are up-to-date with the corresponding base branches, but already have the submodules in-place and the version string set correctly.  
-  Here are some direct download links for the current pack branches:  
-  - [pack/master.zip](https://github.com/open62541/open62541/archive/pack/master.zip)
-  - [pack/1.0.zip](https://github.com/open62541/open62541/archive/pack/1.0.zip)
-   
-- Clone this repository and initialize all the submodules using `git submodule update --init --recursive`. Then either use `make install` or setup your CMake project correspondingly.
-
-## Examples
-
-A complete list of examples can be found in the [examples directory](https://github.com/open62541/open62541/tree/master/examples).
-
-To build the examples, we recommend to install the open62541 project as mentioned in previous section.
-
-### Example Server Implementation
-
-The following simple server example can be built using gcc, after you installed open62541 on your system.
-
-Using the GCC compiler, just run ```gcc -std=c99 -lopen62541 -DUA_ARCHITECTURE_POSIX <server.c> -o server``` (under Windows you may need to add ``` -lws2_32``` 
-and change `-DUA_ARCHITECTURE_POSIX` to `-DUA_ARCHITECTURE_WIN32`).
-```c
-#include <signal.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-UA_Boolean running = true;
-void signalHandler(int sig) {
-    running = false;
-}
-
-int main(int argc, char** argv)
-{
-    signal(SIGINT, signalHandler); /* catch ctrl-c */
-
-    /* Create a server listening on port 4840 */
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    /* Add a variable node */
-    /* 1) Define the node attributes */
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    attr.displayName = UA_LOCALIZEDTEXT("en-US", "the answer");
-    UA_Int32 myInteger = 42;
-    UA_Variant_setScalar(&attr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-
-    /* 2) Define where the node shall be added with which browsename */
-    UA_NodeId newNodeId = UA_NODEID_STRING(1, "the.answer");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_NodeId variableType = UA_NODEID_NULL; /* take the default variable type */
-    UA_QualifiedName browseName = UA_QUALIFIEDNAME(1, "the answer");
-
-    /* 3) Add the node */
-    UA_Server_addVariableNode(server, newNodeId, parentNodeId, parentReferenceNodeId,
-                              browseName, variableType, attr, NULL, NULL);
-
-    /* Run the server loop */
-    UA_StatusCode status = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return status;
-}
-```
-
-### Example Client Implementation
-```c
-#include <stdio.h>
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-
-int main(int argc, char *argv[])
-{
-    /* Create a client and connect */
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_StatusCode status = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    if(status != UA_STATUSCODE_GOOD) {
-        UA_Client_delete(client);
-        return status;
-    }
-
-    /* Read the value attribute of the node. UA_Client_readValueAttribute is a
-     * wrapper for the raw read service available as UA_Client_Service_read. */
-    UA_Variant value; /* Variants can hold scalar values and arrays of any type */
-    UA_Variant_init(&value);
-    status = UA_Client_readValueAttribute(client, UA_NODEID_STRING(1, "the.answer"), &value);
-    if(status == UA_STATUSCODE_GOOD &&
-       UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_INT32])) {
-        printf("the value is: %i\n", *(UA_Int32*)value.data);
-    }
-
-    /* Clean up */
-    UA_Variant_deleteMembers(&value);
-    UA_Client_delete(client); /* Disconnects the client internally */
-    return status;
-}
-```
diff --git a/ext/open62541/TinyDockerfile b/ext/open62541/TinyDockerfile
deleted file mode 100644
index 661cbfc..0000000
--- a/ext/open62541/TinyDockerfile
+++ /dev/null
@@ -1,11 +0,0 @@
-FROM alpine:3.5
-ADD . /tmp/open62541
-WORKDIR /tmp/open62541/build
-RUN apk add --no-cache cmake gcc g++ musl-dev python make && rm -rf /var/cache/apk/* && \
-    cmake -DUA_ENABLE_AMALGAMATION=true \
-          -DBUILD_SHARED_LIBS=true /tmp/open62541 && \
-    make && \
-    cp *.h /usr/include/ && \
-    cp bin/*.so /usr/lib && \
-    make clean && \
-    apk del cmake gcc g++ musl-dev python make
diff --git a/ext/open62541/appveyor.yml b/ext/open62541/appveyor.yml
deleted file mode 100644
index 5f065f3..0000000
--- a/ext/open62541/appveyor.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-version: '{build}'
-
-clone_folder: c:\projects\open62541
-
-# Do not set clone depth, we need all the tags to automatically detect the version based on git describe
-# clone_depth: 20
-
-# Avoid building branch if it is part of a PR and built anyways
-skip_branch_with_pr: true
-
-# Fast finish (stop other builds if one fails) to speed up appveyor builds
-# matrix:
-#  fast_finish: true
-
-environment:
-    global:
-        APPVEYOR_CACHE_ENTRY_ZIP_ARGS: -t7z -m0=lzma -mx=9
-
-    matrix:
-        - CC_NAME: Visual Studio 9 2008
-          CC_SHORTNAME: vs2008
-          GENERATOR: Visual Studio 9 2008
-          FORCE_CXX: ON
-        - CC_NAME: Visual Studio 12 2013
-          CC_SHORTNAME: vs2013
-          GENERATOR: Visual Studio 12 2013
-          FORCE_CXX: OFF
-
-cache:
-  - C:\ProgramData\chocolatey\bin -> tools/appveyor/install.ps1
-  - C:\ProgramData\chocolatey\lib -> tools/appveyor/install.ps1
-  - C:\tools\vcpkg\installed -> tools/appveyor/install.ps1
-  #- 'c:\miktex'
-
-init:
-  - git config --global core.autocrlf input # Attempt to ensure we don't try to convert line endings to Win32 CRLF as this will cause build to fail
-
-install:
-- set PATH=C:\Users\appveyor\AppData\Roaming\Python\Scripts;%PATH%
-- ps: '& "./tools/appveyor/install.ps1"'
-
-build_script:
-- ps: '& "./tools/appveyor/build.ps1"'
-
-after_build:
-  # Only push artifact if make install is defined
-  - appveyor PushArtifact %APPVEYOR_BUILD_FOLDER%\open62541-%CC_SHORTNAME%-static.zip
-  - appveyor PushArtifact %APPVEYOR_BUILD_FOLDER%\open62541-%CC_SHORTNAME%-dynamic.zip
diff --git a/ext/open62541/arch/CMakeLists.txt b/ext/open62541/arch/CMakeLists.txt
deleted file mode 100644
index 711f65f..0000000
--- a/ext/open62541/arch/CMakeLists.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-SET(SOURCE_GROUP ${SOURCE_GROUP}\\arch)

-

-ua_include_directories(${CMAKE_CURRENT_SOURCE_DIR}) #to have access to ua_network_tcp.h

-

-add_subdirectory(posix)

-add_subdirectory(win32)

-add_subdirectory(freertosLWIP)

-add_subdirectory(vxworks)

-add_subdirectory(eCos)

-add_subdirectory(wec7)

-

-SET(UA_ARCH_EXTRA_INCLUDES "" CACHE STRING "Folders to include from the architecture")

-mark_as_advanced(UA_ARCH_EXTRA_INCLUDES)

-ua_include_directories(${UA_ARCH_EXTRA_INCLUDES})

-

-SET(UA_ARCH_REMOVE_FLAGS "" CACHE STRING "Flags to be removed from compilation that depends on the architecure")

-mark_as_advanced(UA_ARCH_REMOVE_FLAGS)

-ua_architecture_remove_definitions(${UA_ARCH_REMOVE_FLAGS})

-

-SET(UA_ARCH_ADD_FLAGS "" CACHE STRING "Flags to be added to compilation that depends on the architecure")

-mark_as_advanced(UA_ARCH_ADD_FLAGS)

-ua_architecture_add_definitions(${UA_ARCH_ADD_FLAGS})

-

-SET(UA_ARCH_LINKER_FLAGS "" CACHE STRING "Linker Flags to be added to compilation that depends on the architecure")

-mark_as_advanced(UA_ARCH_LINKER_FLAGS)

-ua_architecture_append_to_library(${UA_ARCH_LINKER_FLAGS})

diff --git a/ext/open62541/arch/Readme.md b/ext/open62541/arch/Readme.md
deleted file mode 100644
index db1ed46..0000000
--- a/ext/open62541/arch/Readme.md
+++ /dev/null
@@ -1,121 +0,0 @@
-# open62541 Architectures 
-
-The `arch` folder contains all the architecture-specific code for a given operating system.
-
-The list of supported architectures is also available as a CMake option.
-
-## Adding new architectures
-
-To port to a new architecture you should follow these steps:
-
-1. Create a folder with your architecture, let's call it new_arch
-
-2. In the CMakeLists.txt file located next to this file, add `add_subdirectory(new_arch)` at the end of it
-
-3. Create a CMakeLists.txt file in the new_arch folder
-
-4. Use the following template for it (remember that when you see new_arch you should replace with the name of your architecture)
-    ```C
-    # ---------------------------------------------------
-    # ---- Beginning of the CMakeLists.txt template -----
-    # ---------------------------------------------------
-    
-    SET(SOURCE_GROUP ${SOURCE_GROUP}\\new_arch)
-    
-    ua_add_architecture("new_arch")
-    
-    if("${UA_ARCHITECTURE}" STREQUAL "new_arch")
-    
-        ua_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-        ua_add_architecture_file(${CMAKE_CURRENT_SOURCE_DIR}/ua_clock.c)
-        
-        #
-        # Add here below all the things that are specific for your architecture
-        #
-        
-        #You can use the following available CMake functions:
-         
-        #ua_include_directories() include some directories specific to your architecture when compiling the open62541 stack
-        #ua_architecture_remove_definitions() remove compiler flags from the general ../../CMakeLists.txt file that won't work with your architecture
-        #ua_architecture_add_definitions() add compiler flags that your architecture needs
-        #ua_architecture_append_to_library() add libraries to be linked to the open62541 that are needed by your architecture
-        #ua_add_architecture_header() add header files to compilation (Don't add the file ua_architecture.h)
-        #ua_add_architecture_file() add .c files to compilation    
-        
-    endif()
-    
-    # ---------------------------------------------------
-    # ---- End of the CMakeLists.txt template -----
-    # ---------------------------------------------------
-    ```
-5. Create a ua_clock.c file that implements the following functions defined in open62541/types.h:
-
-   * UA_DateTime UA_DateTime_now(void);
-   
-   * UA_Int64 UA_DateTime_localTimeUtcOffset(void);
-   
-   * UA_DateTime UA_DateTime_nowMonotonic(void);
-
-6. Create a file in the folder new_arch called ua_architecture.h
-
-7. Use the following template for it:  
-
-   * Change YEAR, YOUR_NAME and YOUR_COMPANY in the header
-   
-   * Change NEW_ARCH at the beginning in PLUGINS_ARCH_NEW_ARCH_UA_ARCHITECTURE_H_ for your own name in uppercase  
-   
-    ```C
-    /* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
-     * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
-     *
-     *    Copyright YEAR (c) YOUR_NAME, YOUR_COMPANY
-     */
-    
-    #ifndef PLUGINS_ARCH_NEW_ARCH_UA_ARCHITECTURE_H_
-    #define PLUGINS_ARCH_NEW_ARCH_UA_ARCHITECTURE_H_
-    
-    /*
-    * Define and include all that's needed for your architecture
-    */
-    
-    /*
-    * Define OPTVAL_TYPE for non windows systems. In doubt, use int //TODO: Is this really necessary
-    */
-    
-    /*
-    * Define the following network options
-    */
-    
-    
-    //#define UA_IPV6 1 //or 0
-    //#define UA_SOCKET
-    //#define UA_INVALID_SOCKET
-    //#define UA_ERRNO  
-    //#define UA_INTERRUPTED
-    //#define UA_AGAIN
-    //#define UA_EAGAIN
-    //#define UA_WOULDBLOCK
-    //#define UA_ERR_CONNECTION_PROGRESS
-    //#define UA_INTERRUPTED
-    
-    /*
-    * Define the ua_getnameinfo if your architecture supports it
-    */
-    
-    /*
-    * Use #define for the functions defined in ua_architecture_functions.h
-    * or implement them in a ua_architecture_functions.c file and 
-    * put it in your new_arch folder and add it in the CMakeLists.txt file 
-    * using ua_add_architecture_file(${CMAKE_CURRENT_SOURCE_DIR}/ua_architecture_functions.c)
-    */ 
-    
-    /*
-    * Define UA_LOG_SOCKET_ERRNO_WRAP(LOG) which prints the string error given a char* errno_str variable
-    * Do the same for UA_LOG_SOCKET_ERRNO_GAI_WRAP(LOG) for errors related to getaddrinfo
-    */
-    
-    #include <open62541/architecture_functions.h>
-    
-    #endif /* PLUGINS_ARCH_NEW_ARCH_UA_ARCHITECTURE_H_ */
-    
-    ```
diff --git a/ext/open62541/arch/common/ua_freeRTOS.h b/ext/open62541/arch/common/ua_freeRTOS.h
deleted file mode 100644
index 1cf4fd8..0000000
--- a/ext/open62541/arch/common/ua_freeRTOS.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2018 (c) Jose Cabral, fortiss GmbH
- */
-
-#ifndef ARCH_COMMON_FREERTOS62541_H_
-#define ARCH_COMMON_FREERTOS62541_H_
-
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef BYTE_ORDER
-# undef BYTE_ORDER
-#endif
-
-#define UA_sleep_ms(X) vTaskDelay(pdMS_TO_TICKS(X))
-
-#ifdef OPEN62541_FEERTOS_USE_OWN_MEM
-# define UA_free vPortFree
-# define UA_malloc pvPortMalloc
-# define UA_calloc pvPortCalloc
-# define UA_realloc pvPortRealloc
-#else
-# define UA_free free
-# define UA_malloc malloc
-# define UA_calloc calloc
-# define UA_realloc realloc
-#endif
-
-#ifdef UA_ENABLE_DISCOVERY_SEMAPHORE
-# ifndef UA_fileExists
-#  define UA_fileExists(X) (0) //file managing is not part of freeRTOS. If the system provides it, please define it before
-# endif // UA_fileExists
-#endif
-
-// No log colors on freeRTOS
-// #define UA_ENABLE_LOG_COLORS
-
-#include <stdio.h>
-#define UA_snprintf snprintf
-
-#define UA_LOG_SOCKET_ERRNO_WRAP(LOG) { \
-    char *errno_str = ""; \
-    LOG; \
-}
-
-#endif /* ARCH_COMMON_FREERTOS62541_H_ */
diff --git a/ext/open62541/arch/common/ua_lwip.h b/ext/open62541/arch/common/ua_lwip.h
deleted file mode 100644
index ca611fe..0000000
--- a/ext/open62541/arch/common/ua_lwip.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2018 (c) Jose Cabral, fortiss GmbH
- */
-
-#ifndef ARCH_COMMON_LWIP62541_H_
-#define ARCH_COMMON_LWIP62541_H_
-
-/*
- * Needed flags to be set before including this file. Normally done in lwipopts.h
- * #define LWIP_COMPAT_SOCKETS 0 // Don't do name define-transformation in networking function names.
- * #define LWIP_SOCKET 1 // Enable Socket API (normally already set)
- * #define LWIP_DNS 1 // enable the lwip_getaddrinfo function, struct addrinfo and more.
- * #define SO_REUSE 1 // Allows to set the socket as reusable
- * #define LWIP_TIMEVAL_PRIVATE 0 // This is optional. Set this flag if you get a compilation error about redefinition of struct timeval
- *
- * Why not define these here? This stack is used as middleware so other code might use this header file with other flags (specially LWIP_COMPAT_SOCKETS)
- */
-#include <lwip/tcpip.h>
-#include <lwip/netdb.h>
-#include <lwip/init.h>
-#include <lwip/sockets.h>
-
-#define OPTVAL_TYPE int
-
-#define UA_fd_set(fd, fds) FD_SET((unsigned int)fd, fds)
-#define UA_fd_isset(fd, fds) FD_ISSET((unsigned int)fd, fds)
-
-#define UA_IPV6 LWIP_IPV6
-#define UA_SOCKET int
-#define UA_INVALID_SOCKET -1
-#define UA_ERRNO errno
-#define UA_INTERRUPTED EINTR
-#define UA_AGAIN EAGAIN
-#define UA_EAGAIN EAGAIN
-#define UA_WOULDBLOCK EWOULDBLOCK
-#define UA_ERR_CONNECTION_PROGRESS EINPROGRESS
-
-#define UA_send lwip_send
-#define UA_recv lwip_recv
-#define UA_sendto lwip_sendto
-#define UA_recvfrom lwip_recvfrom
-#define UA_htonl lwip_htonl
-#define UA_ntohl lwip_ntohl
-#define UA_close lwip_close
-#define UA_select lwip_select
-#define UA_shutdown lwip_shutdown
-#define UA_socket lwip_socket
-#define UA_bind lwip_bind
-#define UA_listen lwip_listen
-#define UA_accept lwip_accept
-#define UA_connect lwip_connect
-#define UA_getsockopt lwip_getsockopt
-#define UA_setsockopt lwip_setsockopt
-#define UA_freeaddrinfo lwip_freeaddrinfo
-#define UA_gethostname gethostname_lwip
-#define UA_getsockname lwip_getsockname
-#define UA_getaddrinfo lwip_getaddrinfo
-
-#if UA_IPV6
-# define UA_inet_pton(af, src, dst) \
-    (((af) == AF_INET6) ? ip6addr_aton((src),(ip6_addr_t*)(dst)) \
-     : (((af) == AF_INET) ? ip4addr_aton((src),(ip4_addr_t*)(dst)) : 0))
-#else
-# define UA_inet_pton(af, src, dst) \
-     (((af) == AF_INET) ? ip4addr_aton((src),(ip4_addr_t*)(dst)) : 0)
-#endif
-
-#if UA_IPV6
-# define UA_if_nametoindex lwip_if_nametoindex
-
-# if LWIP_VERSION_IS_RELEASE //lwip_if_nametoindex is not yet released
-unsigned int lwip_if_nametoindex(const char *ifname);
-# endif
-#endif
-
-int gethostname_lwip(char* name, size_t len); //gethostname is not present in LwIP. We implement here a dummy. See ../freertosLWIP/ua_architecture_functions.c
-
-#define UA_LOG_SOCKET_ERRNO_GAI_WRAP UA_LOG_SOCKET_ERRNO_WRAP
-
-#endif /* ARCH_COMMON_LWIP62541_H_ */
diff --git a/ext/open62541/arch/eCos/CMakeLists.txt b/ext/open62541/arch/eCos/CMakeLists.txt
deleted file mode 100644
index 4c91e44..0000000
--- a/ext/open62541/arch/eCos/CMakeLists.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-SET(SOURCE_GROUP ${SOURCE_GROUP}\\eCos)

-

-ua_add_architecture("eCos")

-

-

-list (FIND UA_AMALGAMATION_ARCHITECTURES "eCos" _index)

-if (${_index} GREATER -1 OR "${UA_ARCHITECTURE}" STREQUAL "eCos")

-

-    ua_add_architecture_file(${CMAKE_CURRENT_SOURCE_DIR}/ua_clock.c)

-    ua_add_architecture_file(${CMAKE_CURRENT_SOURCE_DIR}/ua_architecture_functions.c)

-

-    if("${UA_ARCHITECTURE}" STREQUAL "eCos")

-

-        ua_include_directories(${CMAKE_CURRENT_SOURCE_DIR})

-        

-        set(UA_ECOS_HOSTNAME "eCos-host" CACHE STRING "Define a custom hostname/ip for the endpoint.")

-        ua_architecture_add_definitions(-DUA_ECOS_HOSTNAME="${UA_ECOS_HOSTNAME}")

-    endif()

-

-endif()

diff --git a/ext/open62541/arch/eCos/ua_architecture.h b/ext/open62541/arch/eCos/ua_architecture.h
deleted file mode 100644
index 649d80c..0000000
--- a/ext/open62541/arch/eCos/ua_architecture.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2016-2017 (c) Julius Pfrommer, Fraunhofer IOSB
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-#ifdef UA_ARCHITECTURE_ECOS
-
-#ifndef PLUGINS_ARCH_ECOS_UA_ARCHITECTURE_H_
-#define PLUGINS_ARCH_ECOS_UA_ARCHITECTURE_H_
-
-#include <pkgconf/system.h>
-#include <cyg/kernel/kapi.h>
-#include <cyg/io/io.h>
-
-#include <network.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <netinet/tcp.h>
-#include <stdlib.h>
-
-#define UA_sleep_ms(X) cyg_thread_delay(1 + ((1000 * X * CYGNUM_HAL_RTC_DENOMINATOR) / (CYGNUM_HAL_RTC_NUMERATOR / 1000)));
-
-#define OPTVAL_TYPE int
-
-#define UA_fd_set(fd, fds) FD_SET((unsigned int)fd, fds)
-#define UA_fd_isset(fd, fds) FD_ISSET((unsigned int)fd, fds)
-
-#define UA_access(x,y) 0
-
-#define UA_IPV6 1
-#define UA_SOCKET int
-#define UA_INVALID_SOCKET -1
-#define UA_ERRNO errno
-#define UA_INTERRUPTED EINTR
-#define UA_AGAIN EAGAIN
-#define UA_EAGAIN EAGAIN
-#define UA_WOULDBLOCK EWOULDBLOCK
-#define UA_ERR_CONNECTION_PROGRESS EINPROGRESS
-
-#define UA_getnameinfo getnameinfo
-#define UA_send send
-#define UA_recv recv
-#define UA_sendto sendto
-#define UA_recvfrom recvfrom
-#define UA_htonl htonl
-#define UA_ntohl ntohl
-#define UA_close close
-#define UA_select select
-#define UA_shutdown shutdown
-#define UA_socket socket
-#define UA_bind bind
-#define UA_listen listen
-#define UA_accept accept
-#define UA_connect connect
-#define UA_getaddrinfo getaddrinfo
-#define UA_getsockopt getsockopt
-#define UA_setsockopt setsockopt
-#define UA_freeaddrinfo freeaddrinfo
-#define UA_gethostname gethostname_ecos
-#define UA_getsockname getsockname
-#define UA_inet_pton(af,src,dst) inet_pton(af, src, (char*) dst)
-#if UA_IPV6
-# define UA_if_nametoindex if_nametoindex
-#endif
-
-int gethostname_ecos(char* name, size_t len);
-
-#define UA_free free
-#define UA_malloc malloc
-#define UA_calloc calloc
-#define UA_realloc realloc
-
-#define UA_snprintf snprintf
-
-#define UA_LOG_SOCKET_ERRNO_WRAP(LOG) { \
-    char *errno_str = strerror(errno); \
-    LOG; \
-}
-#define UA_LOG_SOCKET_ERRNO_GAI_WRAP(LOG) { \
-    const char *errno_str = gai_strerror(errno); \
-    LOG; \
-}
-
-#if UA_MULTITHREADING >= 100
-#error Multithreading unsupported
-#else
-#define UA_LOCK_TYPE_NAME
-#define UA_LOCK_TYPE(mutexName)
-#define UA_LOCK_TYPE_POINTER(mutexName)
-#define UA_LOCK_INIT(mutexName)
-#define UA_LOCK_DESTROY(mutexName)
-#define UA_LOCK(mutexName)
-#define UA_UNLOCK(mutexName)
-#define UA_LOCK_ASSERT(mutexName, num)
-#endif
-
-#include <open62541/architecture_functions.h>
-
-#endif /* PLUGINS_ARCH_ECOS_UA_ARCHITECTURE_H_ */
-
-#endif /* UA_ARCHITECTURE_ECOS */
diff --git a/ext/open62541/arch/eCos/ua_architecture_functions.c b/ext/open62541/arch/eCos/ua_architecture_functions.c
deleted file mode 100644
index 6f9961b..0000000
--- a/ext/open62541/arch/eCos/ua_architecture_functions.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2018 (c) Jose Cabral, fortiss GmbH
- */
-
-#ifdef UA_ARCHITECTURE_ECOS
-
-#include <open62541/types.h>
-
-unsigned int UA_socket_set_blocking(UA_SOCKET sockfd){
-  int on = 0;
-  if(ioctl(sockfd, FIONBIO, &on) < 0)
-    return UA_STATUSCODE_BADINTERNALERROR;
-  return UA_STATUSCODE_GOOD;
-}
-
-unsigned int UA_socket_set_nonblocking(UA_SOCKET sockfd){
-  int on = 1;
-  if(ioctl(sockfd, FIONBIO, &on) < 0)
-    return UA_STATUSCODE_BADINTERNALERROR;
-  return UA_STATUSCODE_GOOD;
-}
-
-void UA_initialize_architecture_network(void){
-  return;
-}
-
-void UA_deinitialize_architecture_network(void){
-  return;
-}
-
-int gethostname_ecos(char* name, size_t len){
-  if(strlen(UA_ECOS_HOSTNAME) > (len))
-    return -1;
-  strcpy(name, UA_ECOS_HOSTNAME);
-  return 0;
-}
-
-#endif /* UA_ARCHITECTURE_ECOS */
diff --git a/ext/open62541/arch/eCos/ua_clock.c b/ext/open62541/arch/eCos/ua_clock.c
deleted file mode 100644
index 6a2cb5c..0000000
--- a/ext/open62541/arch/eCos/ua_clock.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. 
- *
- *    Copyright 2018 (c) Jose Cabral, fortiss GmbH
- */
-
-#ifdef UA_ARCHITECTURE_ECOS
-
-#include <open62541/types.h>
-
-UA_DateTime UA_DateTime_now(void) {
-  return UA_DateTime_nowMonotonic();
-}
-
-/* Credit to https://stackoverflow.com/questions/13804095/get-the-time-zone-gmt-offset-in-c */
-UA_Int64 UA_DateTime_localTimeUtcOffset(void){
-  time_t gmt, rawtime = time(NULL);
-  struct tm *ptm;
-  struct tm gbuf;
-  ptm = gmtime_r(&rawtime, &gbuf);
-  // Request that mktime() looksup dst in timezone database
-  ptm->tm_isdst = -1;
-  gmt = mktime(ptm);
-  return (UA_Int64) (difftime(rawtime, gmt) * UA_DATETIME_SEC);
-}
-
-UA_DateTime UA_DateTime_nowMonotonic(void) {
-
-  cyg_tick_count_t TaskTime = cyg_current_time();
-
-  UA_DateTimeStruct UATime;
-  UATime.milliSec = (UA_UInt16) TaskTime;
-  struct timespec ts;
-  ts.tv_sec = UATime.milliSec / 1000;
-  ts.tv_nsec = (UATime.milliSec % 1000) * 1000000;
-  return (ts.tv_sec * UA_DATETIME_SEC) + (ts.tv_nsec / 100) + UA_DATETIME_UNIX_EPOCH;
-}
-
-#endif /* UA_ARCHITECTURE_ECOS */
diff --git a/ext/open62541/arch/freertosLWIP/CMakeLists.txt b/ext/open62541/arch/freertosLWIP/CMakeLists.txt
deleted file mode 100644
index 00a50e0..0000000
--- a/ext/open62541/arch/freertosLWIP/CMakeLists.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-SET(SOURCE_GROUP ${SOURCE_GROUP}\\freertosLWIP)

-

-ua_add_architecture("freertosLWIP")

-

-list (FIND UA_AMALGAMATION_ARCHITECTURES "freertosLWIP" _index)

-if (${_index} GREATER -1 OR "${UA_ARCHITECTURE}" STREQUAL "freertosLWIP")

-

-    ua_add_architecture_file(${CMAKE_CURRENT_SOURCE_DIR}/ua_clock.c)

-    ua_add_architecture_file(${CMAKE_CURRENT_SOURCE_DIR}/ua_architecture_functions.c)

-

-    if("${UA_ARCHITECTURE}" STREQUAL "freertosLWIP")

-        ua_include_directories(${CMAKE_CURRENT_SOURCE_DIR})

-        ua_include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../common)

-        set(UA_ARCH_FREERTOS_USE_OWN_MEMORY_FUNCTIONS OFF CACHE BOOL "Enable free/malloc/etc from own implementation")

-        if(UA_ARCH_FREERTOS_USE_OWN_MEMORY_FUNCTIONS)

-          ua_architecture_add_definitions("-DOPEN62541_FEERTOS_USE_OWN_MEM")

-        endif(UA_ARCH_FREERTOS_USE_OWN_MEMORY_FUNCTIONS)

-        ua_add_architecture_header_beginning(${CMAKE_CURRENT_SOURCE_DIR}/../common/ua_freeRTOS.h

-                                             ${CMAKE_CURRENT_SOURCE_DIR}/../common/ua_lwip.h

-                                             )

-    endif()

-endif()

diff --git a/ext/open62541/arch/freertosLWIP/ua_architecture.h b/ext/open62541/arch/freertosLWIP/ua_architecture.h
deleted file mode 100644
index 3b2d068..0000000
--- a/ext/open62541/arch/freertosLWIP/ua_architecture.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2016-2017 (c) Julius Pfrommer, Fraunhofer IOSB
- *    Copyright 2017-2018 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2018 (c) Jose Cabral, fortiss GmbH
- */
-
-#ifdef UA_ARCHITECTURE_FREERTOSLWIP
-
-#ifndef PLUGINS_ARCH_FREERTOSLWIP_UA_ARCHITECTURE_H_
-#define PLUGINS_ARCH_FREERTOSLWIP_UA_ARCHITECTURE_H_
-
-#include "ua_lwip.h"
-#include "ua_freeRTOS.h"
-
-#if UA_MULTITHREADING >= 100
-#error Multithreading unsupported
-#else
-#define UA_LOCK_TYPE_NAME
-#define UA_LOCK_TYPE(mutexName)
-#define UA_LOCK_TYPE_POINTER(mutexName)
-#define UA_LOCK_INIT(mutexName)
-#define UA_LOCK_DESTROY(mutexName)
-#define UA_LOCK(mutexName)
-#define UA_UNLOCK(mutexName)
-#define UA_LOCK_ASSERT(mutexName, num)
-#endif
-
-#include <open62541/architecture_functions.h>
-
-#endif /* PLUGINS_ARCH_FREERTOSLWIP_UA_ARCHITECTURE_H_ */
-
-#endif /* UA_ARCHITECTURE_FREERTOSLWIP */
diff --git a/ext/open62541/arch/freertosLWIP/ua_architecture_functions.c b/ext/open62541/arch/freertosLWIP/ua_architecture_functions.c
deleted file mode 100644
index 37e1d93..0000000
--- a/ext/open62541/arch/freertosLWIP/ua_architecture_functions.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2018 (c) Jose Cabral, fortiss GmbH
- *    Copyright 2018 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifdef UA_ARCHITECTURE_FREERTOSLWIP
-
-#include <open62541/types.h>
-
-unsigned int UA_socket_set_blocking(UA_SOCKET sockfd){
-  int on = 0;
-  if(lwip_ioctl(sockfd, FIONBIO, &on) < 0)
-    return UA_STATUSCODE_BADINTERNALERROR;
-  return UA_STATUSCODE_GOOD;
-}
-
-unsigned int UA_socket_set_nonblocking(UA_SOCKET sockfd){
-  int on = 1;
-  if(lwip_ioctl(sockfd, FIONBIO, &on) < 0)
-    return UA_STATUSCODE_BADINTERNALERROR;
-  return UA_STATUSCODE_GOOD;
-}
-
-int gethostname_lwip(char* name, size_t len){
-  // use UA_ServerConfig_set_customHostname to set your hostname as the IP
-  return -1;
-}
-
-void UA_initialize_architecture_network(void){
-  return;
-}
-
-void UA_deinitialize_architecture_network(void){
-  return;
-}
-
-#if UA_IPV6
-# if LWIP_VERSION_IS_RELEASE //lwip_if_nametoindex is not yet released
-unsigned int lwip_if_nametoindex(const char *ifname){
-  return 1; //TODO: assume for now that it only has one interface
-}
-# endif //LWIP_VERSION_IS_RELEASE
-#endif //UA_IPV6
-
-#endif /* UA_ARCHITECTURE_FREERTOSLWIP */
diff --git a/ext/open62541/arch/freertosLWIP/ua_clock.c b/ext/open62541/arch/freertosLWIP/ua_clock.c
deleted file mode 100644
index 0d4fe9f..0000000
--- a/ext/open62541/arch/freertosLWIP/ua_clock.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. 
- *
- *    Copyright 2016-2017 (c) Julius Pfrommer, Fraunhofer IOSB
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Thomas Stalder
- */
-
-#ifdef UA_ARCHITECTURE_FREERTOSLWIP
-
-#include <open62541/types.h>
-#include <task.h>
-
-/* The current time in UTC time */
-UA_DateTime UA_DateTime_now(void) {
-  UA_DateTime microSeconds = ((UA_DateTime)xTaskGetTickCount()) * (1000000 / configTICK_RATE_HZ);
-  return ((microSeconds / 1000000) * UA_DATETIME_SEC) + ((microSeconds % 1000000) * UA_DATETIME_USEC) + UA_DATETIME_UNIX_EPOCH;
-}
-
-/* Offset between local time and UTC time */
-UA_Int64 UA_DateTime_localTimeUtcOffset(void) {
-  return 0; //TODO: this is set to zero since UA_DateTime_now() is just the local time, and not UTC.
-}
-
-/* CPU clock invariant to system time changes. Use only to measure durations,
- * not absolute time. */
-UA_DateTime UA_DateTime_nowMonotonic(void) {
-  return (((UA_DateTime)xTaskGetTickCount()) * 1000 / configTICK_RATE_HZ) * UA_DATETIME_MSEC;
-}
-
-#endif /* UA_ARCHITECTURE_FREERTOSLWIP */
diff --git a/ext/open62541/arch/network_tcp.c b/ext/open62541/arch/network_tcp.c
deleted file mode 100644
index 05cc479..0000000
--- a/ext/open62541/arch/network_tcp.c
+++ /dev/null
@@ -1,1034 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2016-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) frax2222
- *    Copyright 2017 (c) Jose Cabral
- *    Copyright 2017 (c) Thomas Stalder, Blue Time Concept SA
- */
-
-#define UA_INTERNAL
-
-#include <open62541/network_tcp.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/util.h>
-
-#include "open62541_queue.h"
-
-#include <string.h>  // memset
-
-#ifndef MSG_NOSIGNAL
-#define MSG_NOSIGNAL 0
-#endif
-
-/****************************/
-/* Generic Socket Functions */
-/****************************/
-
-static UA_StatusCode
-connection_getsendbuffer(UA_Connection *connection,
-                         size_t length, UA_ByteString *buf) {
-    if(length > connection->config.sendBufferSize)
-        return UA_STATUSCODE_BADCOMMUNICATIONERROR;
-    return UA_ByteString_allocBuffer(buf, length);
-}
-
-static void
-connection_releasesendbuffer(UA_Connection *connection,
-                             UA_ByteString *buf) {
-    UA_ByteString_deleteMembers(buf);
-}
-
-static void
-connection_releaserecvbuffer(UA_Connection *connection,
-                             UA_ByteString *buf) {
-    UA_ByteString_deleteMembers(buf);
-}
-
-static UA_StatusCode
-connection_write(UA_Connection *connection, UA_ByteString *buf) {
-    if(connection->state == UA_CONNECTION_CLOSED) {
-        UA_ByteString_deleteMembers(buf);
-        return UA_STATUSCODE_BADCONNECTIONCLOSED;
-    }
-
-    /* Prevent OS signals when sending to a closed socket */
-    int flags = 0;
-    flags |= MSG_NOSIGNAL;
-
-    /* Send the full buffer. This may require several calls to send */
-    size_t nWritten = 0;
-    do {
-        ssize_t n = 0;
-        do {
-            size_t bytes_to_send = buf->length - nWritten;
-            n = UA_send(connection->sockfd,
-                     (const char*)buf->data + nWritten,
-                     bytes_to_send, flags);
-            if(n < 0 && UA_ERRNO != UA_INTERRUPTED && UA_ERRNO != UA_AGAIN) {
-                connection->close(connection);
-                UA_ByteString_deleteMembers(buf);
-                return UA_STATUSCODE_BADCONNECTIONCLOSED;
-            }
-        } while(n < 0);
-        nWritten += (size_t)n;
-    } while(nWritten < buf->length);
-
-    /* Free the buffer */
-    UA_ByteString_deleteMembers(buf);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-connection_recv(UA_Connection *connection, UA_ByteString *response,
-                UA_UInt32 timeout) {
-    if(connection->state == UA_CONNECTION_CLOSED)
-        return UA_STATUSCODE_BADCONNECTIONCLOSED;
-
-    /* Listen on the socket for the given timeout until a message arrives */
-    if(timeout > 0) {
-        fd_set fdset;
-        FD_ZERO(&fdset);
-        UA_fd_set(connection->sockfd, &fdset);
-        UA_UInt32 timeout_usec = timeout * 1000;
-        struct timeval tmptv = {(long int)(timeout_usec / 1000000),
-                                (int)(timeout_usec % 1000000)};
-        int resultsize = UA_select(connection->sockfd+1, &fdset, NULL,
-                                NULL, &tmptv);
-
-        /* No result */
-        if(resultsize == 0)
-            return UA_STATUSCODE_GOODNONCRITICALTIMEOUT;
-
-        if(resultsize == -1) {
-            /* The call to select was interrupted manually. Act as if it timed
-             * out */
-            if(UA_ERRNO == EINTR)
-                return UA_STATUSCODE_GOODNONCRITICALTIMEOUT;
-
-            /* The error cannot be recovered. Close the connection. */
-            connection->close(connection);
-            return UA_STATUSCODE_BADCONNECTIONCLOSED;
-        }
-    }
-
-    response->data = (UA_Byte*)UA_malloc(connection->config.recvBufferSize);
-    if(!response->data) {
-        response->length = 0;
-        return UA_STATUSCODE_BADOUTOFMEMORY; /* not enough memory retry */
-    }
-
-#ifdef _WIN32
-    // windows requires int parameter for length
-    int offset = (int)connection->incompleteChunk.length;
-    int remaining = connection->config.recvBufferSize - offset;
-#else
-    size_t offset = connection->incompleteChunk.length;
-    size_t remaining = connection->config.recvBufferSize - offset;
-#endif
-
-    /* Get the received packet(s) */
-    ssize_t ret = UA_recv(connection->sockfd, (char*)&response->data[offset],
-                          remaining, 0);
-
-    /* The remote side closed the connection */
-    if(ret == 0) {
-        UA_ByteString_deleteMembers(response);
-        connection->close(connection);
-        return UA_STATUSCODE_BADCONNECTIONCLOSED;
-    }
-
-    /* Error case */
-    if(ret < 0) {
-        UA_ByteString_deleteMembers(response);
-        if(UA_ERRNO == UA_INTERRUPTED || (timeout > 0) ?
-           false : (UA_ERRNO == UA_EAGAIN || UA_ERRNO == UA_WOULDBLOCK))
-            return UA_STATUSCODE_GOOD; /* statuscode_good but no data -> retry */
-        connection->close(connection);
-        return UA_STATUSCODE_BADCONNECTIONCLOSED;
-    }
-
-    /* Preprend the last incompleteChunk into the buffer */
-    if (connection->incompleteChunk.length > 0) {
-        memcpy(response->data, connection->incompleteChunk.data,
-               connection->incompleteChunk.length);
-        UA_ByteString_deleteMembers(&connection->incompleteChunk);
-    }
-
-    /* Set the length of the received buffer */
-    response->length = offset + (size_t)ret;
-    return UA_STATUSCODE_GOOD;
-}
-
-
-/***************************/
-/* Server NetworkLayer TCP */
-/***************************/
-
-#define MAXBACKLOG     100
-#define NOHELLOTIMEOUT 120000 /* timeout in ms before close the connection
-                               * if server does not receive Hello Message */
-
-typedef struct ConnectionEntry {
-    UA_Connection connection;
-    LIST_ENTRY(ConnectionEntry) pointers;
-} ConnectionEntry;
-
-typedef struct {
-    const UA_Logger *logger;
-    UA_UInt16 port;
-    UA_SOCKET serverSockets[FD_SETSIZE];
-    UA_UInt16 serverSocketsSize;
-    LIST_HEAD(, ConnectionEntry) connections;
-} ServerNetworkLayerTCP;
-
-static void
-ServerNetworkLayerTCP_freeConnection(UA_Connection *connection) {
-    UA_Connection_deleteMembers(connection);
-    UA_free(connection);
-}
-
-/* This performs only 'shutdown'. 'close' is called when the shutdown
- * socket is returned from select. */
-static void
-ServerNetworkLayerTCP_close(UA_Connection *connection) {
-    if (connection->state == UA_CONNECTION_CLOSED)
-        return;
-    UA_shutdown((UA_SOCKET)connection->sockfd, 2);
-    connection->state = UA_CONNECTION_CLOSED;
-}
-
-static UA_StatusCode
-ServerNetworkLayerTCP_add(UA_ServerNetworkLayer *nl, ServerNetworkLayerTCP *layer,
-                          UA_Int32 newsockfd, struct sockaddr_storage *remote) {
-    /* Set nonblocking */
-    UA_socket_set_nonblocking(newsockfd);//TODO: check return value
-
-    /* Do not merge packets on the socket (disable Nagle's algorithm) */
-    int dummy = 1;
-    if(UA_setsockopt(newsockfd, IPPROTO_TCP, TCP_NODELAY,
-               (const char *)&dummy, sizeof(dummy)) < 0) {
-        UA_LOG_SOCKET_ERRNO_WRAP(
-                UA_LOG_ERROR(layer->logger, UA_LOGCATEGORY_NETWORK,
-                             "Cannot set socket option TCP_NODELAY. Error: %s",
-                             errno_str));
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-
-#if defined(UA_getnameinfo)
-    /* Get the peer name for logging */
-    char remote_name[100];
-    int res = UA_getnameinfo((struct sockaddr*)remote,
-                          sizeof(struct sockaddr_storage),
-                          remote_name, sizeof(remote_name),
-                          NULL, 0, NI_NUMERICHOST);
-    if(res == 0) {
-        UA_LOG_INFO(layer->logger, UA_LOGCATEGORY_NETWORK,
-                    "Connection %i | New connection over TCP from %s",
-                    (int)newsockfd, remote_name);
-    } else {
-        UA_LOG_SOCKET_ERRNO_WRAP(UA_LOG_WARNING(layer->logger, UA_LOGCATEGORY_NETWORK,
-                                                "Connection %i | New connection over TCP, "
-                                                "getnameinfo failed with error: %s",
-                                                (int)newsockfd, errno_str));
-    }
-#else
-    UA_LOG_INFO(layer->logger, UA_LOGCATEGORY_NETWORK,
-                "Connection %i | New connection over TCP",
-                (int)newsockfd);
-#endif
-    /* Allocate and initialize the connection */
-    ConnectionEntry *e = (ConnectionEntry*)UA_malloc(sizeof(ConnectionEntry));
-    if(!e){
-        UA_close(newsockfd);
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-
-    UA_Connection *c = &e->connection;
-    memset(c, 0, sizeof(UA_Connection));
-    c->sockfd = newsockfd;
-    c->handle = layer;
-    c->config = nl->localConnectionConfig;
-    c->send = connection_write;
-    c->close = ServerNetworkLayerTCP_close;
-    c->free = ServerNetworkLayerTCP_freeConnection;
-    c->getSendBuffer = connection_getsendbuffer;
-    c->releaseSendBuffer = connection_releasesendbuffer;
-    c->releaseRecvBuffer = connection_releaserecvbuffer;
-    c->state = UA_CONNECTION_OPENING;
-    c->openingDate = UA_DateTime_nowMonotonic();
-
-    /* Add to the linked list */
-    LIST_INSERT_HEAD(&layer->connections, e, pointers);
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-addServerSocket(ServerNetworkLayerTCP *layer, struct addrinfo *ai) {
-    /* Create the server socket */
-    UA_SOCKET newsock = UA_socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
-    if(newsock == UA_INVALID_SOCKET)
-    {
-        UA_LOG_WARNING(layer->logger, UA_LOGCATEGORY_NETWORK,
-                       "Error opening the server socket");
-        return;
-    }
-
-    /* Some Linux distributions have net.ipv6.bindv6only not activated. So
-     * sockets can double-bind to IPv4 and IPv6. This leads to problems. Use
-     * AF_INET6 sockets only for IPv6. */
-
-    int optval = 1;
-#if UA_IPV6
-    if(ai->ai_family == AF_INET6 &&
-       UA_setsockopt(newsock, IPPROTO_IPV6, IPV6_V6ONLY,
-                  (const char*)&optval, sizeof(optval)) == -1) {
-        UA_LOG_WARNING(layer->logger, UA_LOGCATEGORY_NETWORK,
-                       "Could not set an IPv6 socket to IPv6 only");
-        UA_close(newsock);
-        return;
-    }
-#endif
-    if(UA_setsockopt(newsock, SOL_SOCKET, SO_REUSEADDR,
-                  (const char *)&optval, sizeof(optval)) == -1) {
-        UA_LOG_WARNING(layer->logger, UA_LOGCATEGORY_NETWORK,
-                       "Could not make the socket reusable");
-        UA_close(newsock);
-        return;
-    }
-
-
-    if(UA_socket_set_nonblocking(newsock) != UA_STATUSCODE_GOOD) {
-        UA_LOG_WARNING(layer->logger, UA_LOGCATEGORY_NETWORK,
-                       "Could not set the server socket to nonblocking");
-        UA_close(newsock);
-        return;
-    }
-
-    /* Bind socket to address */
-    if(UA_bind(newsock, ai->ai_addr, (socklen_t)ai->ai_addrlen) < 0) {
-        UA_LOG_SOCKET_ERRNO_WRAP(
-            UA_LOG_WARNING(layer->logger, UA_LOGCATEGORY_NETWORK,
-                           "Error binding a server socket: %s", errno_str));
-        UA_close(newsock);
-        return;
-    }
-
-    /* Start listening */
-    if(UA_listen(newsock, MAXBACKLOG) < 0) {
-        UA_LOG_SOCKET_ERRNO_WRAP(
-                UA_LOG_WARNING(layer->logger, UA_LOGCATEGORY_NETWORK,
-                       "Error listening on server socket: %s", errno_str));
-        UA_close(newsock);
-        return;
-    }
-
-    if (layer->port == 0) {
-        /* Port was automatically chosen. Read it from the OS */
-        struct sockaddr_in returned_addr;
-        memset(&returned_addr, 0, sizeof(returned_addr));
-        socklen_t len = sizeof(returned_addr);
-        UA_getsockname(newsock, (struct sockaddr *)&returned_addr, &len);
-        layer->port = ntohs(returned_addr.sin_port);
-    }
-
-    layer->serverSockets[layer->serverSocketsSize] = newsock;
-    layer->serverSocketsSize++;
-}
-
-static UA_StatusCode
-ServerNetworkLayerTCP_start(UA_ServerNetworkLayer *nl, const UA_String *customHostname) {
-  UA_initialize_architecture_network();
-
-    ServerNetworkLayerTCP *layer = (ServerNetworkLayerTCP *)nl->handle;
-
-    /* Get addrinfo of the server and create server sockets */
-    char portno[6];
-    UA_snprintf(portno, 6, "%d", layer->port);
-    struct addrinfo hints, *res;
-    memset(&hints, 0, sizeof hints);
-    hints.ai_family = AF_UNSPEC;
-    hints.ai_socktype = SOCK_STREAM;
-    hints.ai_flags = AI_PASSIVE;
-    hints.ai_protocol = IPPROTO_TCP;
-    if(UA_getaddrinfo(NULL, portno, &hints, &res) != 0)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* There might be serveral addrinfos (for different network cards,
-     * IPv4/IPv6). Add a server socket for all of them. */
-    struct addrinfo *ai = res;
-    for(layer->serverSocketsSize = 0;
-        layer->serverSocketsSize < FD_SETSIZE && ai != NULL;
-        ai = ai->ai_next)
-        addServerSocket(layer, ai);
-    UA_freeaddrinfo(res);
-
-    /* Get the discovery url from the hostname */
-    UA_String du = UA_STRING_NULL;
-    char discoveryUrlBuffer[256];
-    if (customHostname->length) {
-        du.length = (size_t)UA_snprintf(discoveryUrlBuffer, 255, "opc.tcp://%.*s:%d/",
-                                        (int)customHostname->length,
-                                        customHostname->data,
-                                        layer->port);
-        du.data = (UA_Byte*)discoveryUrlBuffer;
-    }else{
-        char hostnameBuffer[256];
-        if(UA_gethostname(hostnameBuffer, 255) == 0) {
-            du.length = (size_t)UA_snprintf(discoveryUrlBuffer, 255, "opc.tcp://%s:%d/",
-                                            hostnameBuffer, layer->port);
-            du.data = (UA_Byte*)discoveryUrlBuffer;
-        } else {
-            UA_LOG_ERROR(layer->logger, UA_LOGCATEGORY_NETWORK, "Could not get the hostname");
-            return UA_STATUSCODE_BADINTERNALERROR;
-        }
-    }
-    UA_String_copy(&du, &nl->discoveryUrl);
-
-    UA_LOG_INFO(layer->logger, UA_LOGCATEGORY_NETWORK,
-                "TCP network layer listening on %.*s",
-                (int)nl->discoveryUrl.length, nl->discoveryUrl.data);
-    return UA_STATUSCODE_GOOD;
-}
-
-/* After every select, reset the sockets to listen on */
-static UA_Int32
-setFDSet(ServerNetworkLayerTCP *layer, fd_set *fdset) {
-    FD_ZERO(fdset);
-    UA_Int32 highestfd = 0;
-    for(UA_UInt16 i = 0; i < layer->serverSocketsSize; i++) {
-        UA_fd_set(layer->serverSockets[i], fdset);
-        if((UA_Int32)layer->serverSockets[i] > highestfd)
-            highestfd = (UA_Int32)layer->serverSockets[i];
-    }
-
-    ConnectionEntry *e;
-    LIST_FOREACH(e, &layer->connections, pointers) {
-        UA_fd_set(e->connection.sockfd, fdset);
-        if((UA_Int32)e->connection.sockfd > highestfd)
-            highestfd = (UA_Int32)e->connection.sockfd;
-    }
-
-    return highestfd;
-}
-
-static UA_StatusCode
-ServerNetworkLayerTCP_listen(UA_ServerNetworkLayer *nl, UA_Server *server,
-                             UA_UInt16 timeout) {
-    /* Every open socket can generate two jobs */
-    ServerNetworkLayerTCP *layer = (ServerNetworkLayerTCP *)nl->handle;
-
-    if (layer->serverSocketsSize == 0)
-        return UA_STATUSCODE_GOOD;
-
-    /* Listen on open sockets (including the server) */
-    fd_set fdset, errset;
-    UA_Int32 highestfd = setFDSet(layer, &fdset);
-    setFDSet(layer, &errset);
-    struct timeval tmptv = {0, timeout * 1000};
-    if (UA_select(highestfd+1, &fdset, NULL, &errset, &tmptv) < 0) {
-        UA_LOG_SOCKET_ERRNO_WRAP(
-            UA_LOG_DEBUG(layer->logger, UA_LOGCATEGORY_NETWORK,
-                           "Socket select failed with %s", errno_str));
-        // we will retry, so do not return bad
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* Accept new connections via the server sockets */
-    for(UA_UInt16 i = 0; i < layer->serverSocketsSize; i++) {
-        if(!UA_fd_isset(layer->serverSockets[i], &fdset))
-            continue;
-
-        struct sockaddr_storage remote;
-        socklen_t remote_size = sizeof(remote);
-        UA_SOCKET newsockfd = UA_accept((UA_SOCKET)layer->serverSockets[i],
-                                  (struct sockaddr*)&remote, &remote_size);
-        if(newsockfd == UA_INVALID_SOCKET)
-            continue;
-
-        UA_LOG_TRACE(layer->logger, UA_LOGCATEGORY_NETWORK,
-                    "Connection %i | New TCP connection on server socket %i",
-                    (int)newsockfd, (int)(layer->serverSockets[i]));
-
-        ServerNetworkLayerTCP_add(nl, layer, (UA_Int32)newsockfd, &remote);
-    }
-
-    /* Read from established sockets */
-    ConnectionEntry *e, *e_tmp;
-    UA_DateTime now = UA_DateTime_nowMonotonic();
-    LIST_FOREACH_SAFE(e, &layer->connections, pointers, e_tmp) {
-        if ((e->connection.state == UA_CONNECTION_OPENING) &&
-            (now > (e->connection.openingDate + (NOHELLOTIMEOUT * UA_DATETIME_MSEC)))){
-            UA_LOG_INFO(layer->logger, UA_LOGCATEGORY_NETWORK,
-                        "Connection %i | Closed by the server (no Hello Message)",
-                         (int)(e->connection.sockfd));
-            LIST_REMOVE(e, pointers);
-            UA_close(e->connection.sockfd);
-            UA_Server_removeConnection(server, &e->connection);
-            continue;
-        }
-
-        if(!UA_fd_isset(e->connection.sockfd, &errset) &&
-           !UA_fd_isset(e->connection.sockfd, &fdset))
-          continue;
-
-        UA_LOG_TRACE(layer->logger, UA_LOGCATEGORY_NETWORK,
-                    "Connection %i | Activity on the socket",
-                    (int)(e->connection.sockfd));
-
-        UA_ByteString buf = UA_BYTESTRING_NULL;
-        UA_StatusCode retval = connection_recv(&e->connection, &buf, 0);
-
-        if(retval == UA_STATUSCODE_GOOD) {
-            /* Process packets */
-            UA_Server_processBinaryMessage(server, &e->connection, &buf);
-            connection_releaserecvbuffer(&e->connection, &buf);
-        } else if(retval == UA_STATUSCODE_BADCONNECTIONCLOSED) {
-            /* The socket is shutdown but not closed */
-            UA_LOG_INFO(layer->logger, UA_LOGCATEGORY_NETWORK,
-                        "Connection %i | Closed",
-                        (int)(e->connection.sockfd));
-            LIST_REMOVE(e, pointers);
-            UA_close(e->connection.sockfd);
-            UA_Server_removeConnection(server, &e->connection);
-        }
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-ServerNetworkLayerTCP_stop(UA_ServerNetworkLayer *nl, UA_Server *server) {
-    ServerNetworkLayerTCP *layer = (ServerNetworkLayerTCP *)nl->handle;
-    UA_LOG_INFO(layer->logger, UA_LOGCATEGORY_NETWORK,
-                "Shutting down the TCP network layer");
-
-    /* Close the server sockets */
-    for(UA_UInt16 i = 0; i < layer->serverSocketsSize; i++) {
-        UA_shutdown(layer->serverSockets[i], 2);
-        UA_close(layer->serverSockets[i]);
-    }
-    layer->serverSocketsSize = 0;
-
-    /* Close open connections */
-    ConnectionEntry *e;
-    LIST_FOREACH(e, &layer->connections, pointers)
-        ServerNetworkLayerTCP_close(&e->connection);
-
-    /* Run recv on client sockets. This picks up the closed sockets and frees
-     * the connection. */
-    ServerNetworkLayerTCP_listen(nl, server, 0);
-
-    UA_deinitialize_architecture_network();
-}
-
-/* run only when the server is stopped */
-static void
-ServerNetworkLayerTCP_deleteMembers(UA_ServerNetworkLayer *nl) {
-    ServerNetworkLayerTCP *layer = (ServerNetworkLayerTCP *)nl->handle;
-    UA_String_deleteMembers(&nl->discoveryUrl);
-
-    /* Hard-close and remove remaining connections. The server is no longer
-     * running. So this is safe. */
-    ConnectionEntry *e, *e_tmp;
-    LIST_FOREACH_SAFE(e, &layer->connections, pointers, e_tmp) {
-        LIST_REMOVE(e, pointers);
-        UA_close(e->connection.sockfd);
-        UA_free(e);
-    }
-
-    /* Free the layer */
-    UA_free(layer);
-}
-
-UA_ServerNetworkLayer
-UA_ServerNetworkLayerTCP(UA_ConnectionConfig config, UA_UInt16 port,
-                         UA_Logger *logger) {
-    UA_ServerNetworkLayer nl;
-    memset(&nl, 0, sizeof(UA_ServerNetworkLayer));
-    nl.deleteMembers = ServerNetworkLayerTCP_deleteMembers;
-    nl.localConnectionConfig = config;
-    nl.start = ServerNetworkLayerTCP_start;
-    nl.listen = ServerNetworkLayerTCP_listen;
-    nl.stop = ServerNetworkLayerTCP_stop;
-    nl.handle = NULL;
-
-    ServerNetworkLayerTCP *layer = (ServerNetworkLayerTCP*)
-        UA_calloc(1,sizeof(ServerNetworkLayerTCP));
-    if(!layer)
-        return nl;
-    nl.handle = layer;
-
-    layer->logger = logger;
-    layer->port = port;
-
-    return nl;
-}
-
-typedef struct TCPClientConnection {
-    struct addrinfo hints, *server;
-    UA_DateTime connStart;
-    char* endpointURL;
-    UA_UInt32 timeout;
-} TCPClientConnection;
-
-/***************************/
-/* Client NetworkLayer TCP */
-/***************************/
-
-static void
-ClientNetworkLayerTCP_close(UA_Connection *connection) {
-    if (connection->state == UA_CONNECTION_CLOSED)
-        return;
-
-    if(connection->sockfd != UA_INVALID_SOCKET) {
-        UA_shutdown(connection->sockfd, 2);
-        UA_close(connection->sockfd);
-    }
-    connection->state = UA_CONNECTION_CLOSED;
-}
-
-static void
-ClientNetworkLayerTCP_free(UA_Connection *connection) {
-    if(connection->handle) {
-        TCPClientConnection *tcpConnection = (TCPClientConnection *)connection->handle;
-        if(tcpConnection->server)
-            UA_freeaddrinfo(tcpConnection->server);
-        UA_free(tcpConnection);
-        connection->handle = NULL;
-    }
-}
-
-UA_StatusCode UA_ClientConnectionTCP_poll(UA_Client *client, void *data) {
-    UA_Connection *connection = (UA_Connection*) data;
-
-    if (connection->state == UA_CONNECTION_CLOSED)
-        return UA_STATUSCODE_BADDISCONNECT;
-
-    TCPClientConnection *tcpConnection =
-                    (TCPClientConnection*) connection->handle;
-
-    UA_DateTime connStart = UA_DateTime_nowMonotonic();
-    UA_SOCKET clientsockfd = connection->sockfd;
-
-    UA_ClientConfig *config = UA_Client_getConfig(client);
-
-    if (connection->state == UA_CONNECTION_ESTABLISHED) {
-            UA_Client_removeRepeatedCallback(client, connection->connectCallbackID);
-            connection->connectCallbackID = 0;
-            return UA_STATUSCODE_GOOD;
-    }
-    if ((UA_Double) (UA_DateTime_nowMonotonic() - tcpConnection->connStart)
-                    > tcpConnection->timeout* UA_DATETIME_MSEC ) {
-            // connection timeout
-            ClientNetworkLayerTCP_close(connection);
-            UA_LOG_WARNING(&config->logger, UA_LOGCATEGORY_NETWORK,
-                            "Timed out");
-            return UA_STATUSCODE_BADDISCONNECT;
-
-    }
-    /* On linux connect may immediately return with ECONNREFUSED but we still want to try to connect */
-    /* Thus use a loop and retry until timeout is reached */
-
-    /* Get a socket */
-    if(clientsockfd <= 0) {
-        clientsockfd = UA_socket(tcpConnection->server->ai_family,
-                                 tcpConnection->server->ai_socktype,
-                                 tcpConnection->server->ai_protocol);
-        connection->sockfd = (UA_Int32)clientsockfd; /* cast for win32 */
-    }
-
-    if(clientsockfd == UA_INVALID_SOCKET) {
-        UA_LOG_WARNING(&config->logger, UA_LOGCATEGORY_NETWORK,
-                       "Could not create client socket: %s", strerror(UA_ERRNO));
-        ClientNetworkLayerTCP_close(connection);
-        return UA_STATUSCODE_BADDISCONNECT;
-    }
-
-    /* Non blocking connect to be able to timeout */
-    if(UA_socket_set_nonblocking(clientsockfd) != UA_STATUSCODE_GOOD) {
-        UA_LOG_WARNING(&config->logger, UA_LOGCATEGORY_NETWORK,
-                       "Could not set the client socket to nonblocking");
-        ClientNetworkLayerTCP_close(connection);
-        return UA_STATUSCODE_BADDISCONNECT;
-    }
-
-    /* Non blocking connect */
-    int error = UA_connect(clientsockfd, tcpConnection->server->ai_addr,
-                    tcpConnection->server->ai_addrlen);
-
-    if ((error == -1) && (UA_ERRNO != UA_ERR_CONNECTION_PROGRESS)) {
-            ClientNetworkLayerTCP_close(connection);
-            UA_LOG_WARNING(&config->logger, UA_LOGCATEGORY_NETWORK,
-                           "Connection to  failed with error: %s", strerror(UA_ERRNO));
-            return UA_STATUSCODE_BADDISCONNECT;
-    }
-
-    /* Use select to wait and check if connected */
-    if (error == -1 && (UA_ERRNO == UA_ERR_CONNECTION_PROGRESS)) {
-        /* connection in progress. Wait until connected using select */
-
-        UA_UInt32 timeSinceStart = (UA_UInt32)
-            ((UA_Double) (UA_DateTime_nowMonotonic() - connStart) / UA_DATETIME_MSEC);
-#ifdef _OS9000
-        /* OS-9 can't use select for checking write sockets.
-         * Therefore, we need to use connect until success or failed
-         */
-        UA_UInt32 timeout_usec = (tcpConnection->timeout - timeSinceStart)
-                        * 1000;
-        int resultsize = 0;
-        do {
-            u_int32 time = 0x80000001;
-            signal_code sig;
-
-            timeout_usec -= 1000000/256;    // Sleep 1/256 second
-            if (timeout_usec < 0)
-                break;
-
-            _os_sleep(&time,&sig);
-            error = connect(clientsockfd, tcpConnection->server->ai_addr,
-                        tcpConnection->server->ai_addrlen);
-            if ((error == -1 && UA_ERRNO == EISCONN) || (error == 0))
-                resultsize = 1;
-            if (error == -1 && UA_ERRNO != EALREADY && UA_ERRNO != EINPROGRESS)
-                break;
-        }
-        while(resultsize == 0);
-#else
-        fd_set fdset;
-        FD_ZERO(&fdset);
-        UA_fd_set(clientsockfd, &fdset);
-        UA_UInt32 timeout_usec = (tcpConnection->timeout - timeSinceStart)
-                        * 1000;
-        struct timeval tmptv = { (long int) (timeout_usec / 1000000),
-                        (int) (timeout_usec % 1000000) };
-
-        int resultsize = UA_select((UA_Int32) (clientsockfd + 1), NULL, &fdset,
-        NULL, &tmptv);
-#endif
-        if (resultsize == 1) {
-            /* Windows does not have any getsockopt equivalent and it is not needed there */
-#ifdef _WIN32
-            connection->sockfd = clientsockfd;
-            connection->state = UA_CONNECTION_ESTABLISHED;
-            return UA_STATUSCODE_GOOD;
-#else
-            OPTVAL_TYPE so_error;
-            socklen_t len = sizeof so_error;
-
-            int ret = UA_getsockopt(clientsockfd, SOL_SOCKET, SO_ERROR, &so_error,
-                            &len);
-
-            if (ret != 0 || so_error != 0) {
-                /* on connection refused we should still try to connect */
-                /* connection refused happens on localhost or local ip without timeout */
-                if (so_error != ECONNREFUSED) {
-                        // general error
-                        ClientNetworkLayerTCP_close(connection);
-                        UA_LOG_WARNING(&config->logger, UA_LOGCATEGORY_NETWORK,
-                                        "Connection to failed with error: %s",
-                                        strerror(ret == 0 ? so_error : UA_ERRNO));
-                        return UA_STATUSCODE_BADDISCONNECT;
-                }
-                /* wait until we try a again. Do not make this too small, otherwise the
-                 * timeout is somehow wrong */
-
-            } else {
-                connection->state = UA_CONNECTION_ESTABLISHED;
-                return UA_STATUSCODE_GOOD;
-            }
-#endif
-        }
-    } else {
-        connection->state = UA_CONNECTION_ESTABLISHED;
-        return UA_STATUSCODE_GOOD;
-    }
-
-#ifdef SO_NOSIGPIPE
-    int val = 1;
-    int sso_result = setsockopt(connection->sockfd, SOL_SOCKET,
-                    SO_NOSIGPIPE, (void*)&val, sizeof(val));
-    if(sso_result < 0)
-    UA_LOG_WARNING(&config->logger, UA_LOGCATEGORY_NETWORK,
-                    "Couldn't set SO_NOSIGPIPE");
-#endif
-
-    return UA_STATUSCODE_GOOD;
-
-}
-
-UA_Connection
-UA_ClientConnectionTCP_init(UA_ConnectionConfig config, const UA_String endpointUrl,
-                            UA_UInt32 timeout, UA_Logger *logger) {
-    UA_Connection connection;
-    memset(&connection, 0, sizeof(UA_Connection));
-
-    connection.state = UA_CONNECTION_OPENING;
-    connection.config = config;
-    connection.send = connection_write;
-    connection.recv = connection_recv;
-    connection.close = ClientNetworkLayerTCP_close;
-    connection.free = ClientNetworkLayerTCP_free;
-    connection.getSendBuffer = connection_getsendbuffer;
-    connection.releaseSendBuffer = connection_releasesendbuffer;
-    connection.releaseRecvBuffer = connection_releaserecvbuffer;
-
-    TCPClientConnection *tcpClientConnection = (TCPClientConnection*) UA_malloc(
-                    sizeof(TCPClientConnection));
-    memset(tcpClientConnection, 0, sizeof(TCPClientConnection));
-    connection.handle = (void*) tcpClientConnection;
-    tcpClientConnection->timeout = timeout;
-    UA_String hostnameString = UA_STRING_NULL;
-    UA_String pathString = UA_STRING_NULL;
-    UA_UInt16 port = 0;
-    char hostname[512];
-    tcpClientConnection->connStart = UA_DateTime_nowMonotonic();
-
-    UA_StatusCode parse_retval = UA_parseEndpointUrl(&endpointUrl,
-                    &hostnameString, &port, &pathString);
-    if (parse_retval != UA_STATUSCODE_GOOD || hostnameString.length > 511) {
-            UA_LOG_WARNING(logger, UA_LOGCATEGORY_NETWORK,
-                           "Server url is invalid: %.*s",
-                           (int)endpointUrl.length, endpointUrl.data);
-            connection.state = UA_CONNECTION_CLOSED;
-            return connection;
-    }
-    memcpy(hostname, hostnameString.data, hostnameString.length);
-    hostname[hostnameString.length] = 0;
-
-    if (port == 0) {
-            port = 4840;
-            UA_LOG_INFO(logger, UA_LOGCATEGORY_NETWORK,
-                            "No port defined, using default port %d", port);
-    }
-
-    memset(&tcpClientConnection->hints, 0, sizeof(tcpClientConnection->hints));
-    tcpClientConnection->hints.ai_family = AF_UNSPEC;
-    tcpClientConnection->hints.ai_socktype = SOCK_STREAM;
-    char portStr[6];
-    UA_snprintf(portStr, 6, "%d", port);
-    int error = UA_getaddrinfo(hostname, portStr, &tcpClientConnection->hints,
-                    &tcpClientConnection->server);
-    if (error != 0 || !tcpClientConnection->server) {
-      UA_LOG_SOCKET_ERRNO_GAI_WRAP(UA_LOG_WARNING(logger, UA_LOGCATEGORY_NETWORK,
-                                                 "DNS lookup of %s failed with error %s", hostname, errno_str));
-      connection.state = UA_CONNECTION_CLOSED;
-      return connection;
-    }
-    return connection;
-}
-
-UA_Connection
-UA_ClientConnectionTCP(UA_ConnectionConfig config, const UA_String endpointUrl,
-                       UA_UInt32 timeout, UA_Logger *logger) {
-    UA_initialize_architecture_network();
-
-    UA_Connection connection;
-    memset(&connection, 0, sizeof(UA_Connection));
-    connection.state = UA_CONNECTION_CLOSED;
-    connection.config = config;
-    connection.send = connection_write;
-    connection.recv = connection_recv;
-    connection.close = ClientNetworkLayerTCP_close;
-    connection.free = ClientNetworkLayerTCP_free;
-    connection.getSendBuffer = connection_getsendbuffer;
-    connection.releaseSendBuffer = connection_releasesendbuffer;
-    connection.releaseRecvBuffer = connection_releaserecvbuffer;
-    connection.handle = NULL;
-
-    UA_String hostnameString = UA_STRING_NULL;
-    UA_String pathString = UA_STRING_NULL;
-    UA_UInt16 port = 0;
-    char hostname[512];
-
-    UA_StatusCode parse_retval =
-        UA_parseEndpointUrl(&endpointUrl, &hostnameString, &port, &pathString);
-    if(parse_retval != UA_STATUSCODE_GOOD || hostnameString.length > 511) {
-        UA_LOG_WARNING(logger, UA_LOGCATEGORY_NETWORK,
-                       "Server url is invalid: %.*s",
-                       (int)endpointUrl.length, endpointUrl.data);
-        return connection;
-    }
-    memcpy(hostname, hostnameString.data, hostnameString.length);
-    hostname[hostnameString.length] = 0;
-
-    if(port == 0) {
-        port = 4840;
-        UA_LOG_INFO(logger, UA_LOGCATEGORY_NETWORK,
-                    "No port defined, using default port %d", port);
-    }
-
-    struct addrinfo hints, *server;
-    memset(&hints, 0, sizeof(hints));
-    hints.ai_family = AF_UNSPEC;
-    hints.ai_socktype = SOCK_STREAM;
-    hints.ai_protocol = IPPROTO_TCP;
-    char portStr[6];
-    UA_snprintf(portStr, 6, "%d", port);
-    int error = UA_getaddrinfo(hostname, portStr, &hints, &server);
-    if(error != 0 || !server) {
-        UA_LOG_SOCKET_ERRNO_GAI_WRAP(UA_LOG_WARNING(logger, UA_LOGCATEGORY_NETWORK,
-                                              "DNS lookup of %s failed with error %s", hostname, errno_str));
-        return connection;
-    }
-
-    UA_Boolean connected = false;
-    UA_DateTime dtTimeout = timeout * UA_DATETIME_MSEC;
-    UA_DateTime connStart = UA_DateTime_nowMonotonic();
-    UA_SOCKET clientsockfd;
-
-    /* On linux connect may immediately return with ECONNREFUSED but we still
-     * want to try to connect. So use a loop and retry until timeout is
-     * reached. */
-    do {
-        /* Get a socket */
-        clientsockfd = UA_socket(server->ai_family,
-                              server->ai_socktype,
-                              server->ai_protocol);
-        if(clientsockfd == UA_INVALID_SOCKET) {
-            UA_LOG_SOCKET_ERRNO_WRAP(UA_LOG_WARNING(logger, UA_LOGCATEGORY_NETWORK,
-                                                    "Could not create client socket: %s", errno_str));
-            UA_freeaddrinfo(server);
-            return connection;
-        }
-
-        connection.state = UA_CONNECTION_OPENING;
-
-        /* Connect to the server */
-        connection.sockfd = clientsockfd;
-
-        /* Non blocking connect to be able to timeout */
-        if (UA_socket_set_nonblocking(clientsockfd) != UA_STATUSCODE_GOOD) {
-            UA_LOG_WARNING(logger, UA_LOGCATEGORY_NETWORK,
-                           "Could not set the client socket to nonblocking");
-            ClientNetworkLayerTCP_close(&connection);
-            UA_freeaddrinfo(server);
-            return connection;
-        }
-
-        /* Non blocking connect */
-        error = UA_connect(clientsockfd, server->ai_addr, (socklen_t)server->ai_addrlen);
-
-        if ((error == -1) && (UA_ERRNO != UA_ERR_CONNECTION_PROGRESS)) {
-            ClientNetworkLayerTCP_close(&connection);
-            UA_LOG_SOCKET_ERRNO_WRAP(
-                    UA_LOG_WARNING(logger, UA_LOGCATEGORY_NETWORK,
-                                   "Connection to %.*s failed with error: %s",
-                                   (int)endpointUrl.length, endpointUrl.data, errno_str));
-            UA_freeaddrinfo(server);
-            return connection;
-        }
-
-        /* Use select to wait and check if connected */
-        if (error == -1 && (UA_ERRNO == UA_ERR_CONNECTION_PROGRESS)) {
-            /* connection in progress. Wait until connected using select */
-            UA_DateTime timeSinceStart = UA_DateTime_nowMonotonic() - connStart;
-            if(timeSinceStart > dtTimeout)
-                break;
-
-#ifdef _OS9000
-            /* OS-9 can't use select for checking write sockets.
-             * Therefore, we need to use connect until success or failed
-             */
-            UA_DateTime timeout_usec = (dtTimeout - timeSinceStart) / UA_DATETIME_USEC;
-            int resultsize = 0;
-            do {
-                u_int32 time = 0x80000001;
-                signal_code sig;
-
-                timeout_usec -= 1000000/256;    // Sleep 1/256 second
-                if (timeout_usec < 0)
-                    break;
-
-                _os_sleep(&time,&sig);
-                error = connect(clientsockfd, server->ai_addr, server->ai_addrlen);
-                if ((error == -1 && UA_ERRNO == EISCONN) || (error == 0))
-                    resultsize = 1;
-                if (error == -1 && UA_ERRNO != EALREADY && UA_ERRNO != EINPROGRESS)
-                    break;
-            }
-            while(resultsize == 0);
-#else
-            fd_set fdset;
-            FD_ZERO(&fdset);
-            UA_fd_set(clientsockfd, &fdset);
-            UA_DateTime timeout_usec = (dtTimeout - timeSinceStart) / UA_DATETIME_USEC;
-            struct timeval tmptv = {(long int) (timeout_usec / 1000000),
-                                    (int) (timeout_usec % 1000000)};
-
-            int resultsize = UA_select((UA_Int32)(clientsockfd + 1), NULL, &fdset, NULL, &tmptv);
-#endif
-
-            if(resultsize == 1) {
-#ifdef _WIN32
-                /* Windows does not have any getsockopt equivalent and it is not
-                 * needed there */
-                connected = true;
-                break;
-#else
-                OPTVAL_TYPE so_error;
-                socklen_t len = sizeof so_error;
-
-                int ret = UA_getsockopt(clientsockfd, SOL_SOCKET, SO_ERROR, &so_error, &len);
-
-                if (ret != 0 || so_error != 0) {
-                    /* on connection refused we should still try to connect */
-                    /* connection refused happens on localhost or local ip without timeout */
-                    if (so_error != ECONNREFUSED) {
-                        ClientNetworkLayerTCP_close(&connection);
-                        UA_LOG_WARNING(logger, UA_LOGCATEGORY_NETWORK,
-                                       "Connection to %.*s failed with error: %s",
-                                       (int)endpointUrl.length, endpointUrl.data,
-                                       strerror(ret == 0 ? so_error : UA_ERRNO));
-                        UA_freeaddrinfo(server);
-                        return connection;
-                    }
-                    /* wait until we try a again. Do not make this too small, otherwise the
-                     * timeout is somehow wrong */
-                    UA_sleep_ms(100);
-                } else {
-                    connected = true;
-                    break;
-                }
-#endif
-            }
-        } else {
-            connected = true;
-            break;
-        }
-        ClientNetworkLayerTCP_close(&connection);
-
-    } while ((UA_DateTime_nowMonotonic() - connStart) < dtTimeout);
-
-    UA_freeaddrinfo(server);
-
-    if(!connected) {
-        /* connection timeout */
-        if (connection.state != UA_CONNECTION_CLOSED)
-            ClientNetworkLayerTCP_close(&connection);
-        UA_LOG_WARNING(logger, UA_LOGCATEGORY_NETWORK,
-                       "Trying to connect to %.*s timed out",
-                       (int)endpointUrl.length, endpointUrl.data);
-        return connection;
-    }
-
-
-    /* We are connected. Reset socket to blocking */
-    if(UA_socket_set_blocking(clientsockfd) != UA_STATUSCODE_GOOD) {
-        UA_LOG_WARNING(logger, UA_LOGCATEGORY_NETWORK,
-                       "Could not set the client socket to blocking");
-        ClientNetworkLayerTCP_close(&connection);
-        return connection;
-    }
-
-#ifdef SO_NOSIGPIPE
-    int val = 1;
-    int sso_result = UA_setsockopt(connection.sockfd, SOL_SOCKET,
-                                SO_NOSIGPIPE, (void*)&val, sizeof(val));
-    if(sso_result < 0)
-        UA_LOG_WARNING(logger, UA_LOGCATEGORY_NETWORK,
-                       "Couldn't set SO_NOSIGPIPE");
-#endif
-
-    return connection;
-}
diff --git a/ext/open62541/arch/network_ws.c b/ext/open62541/arch/network_ws.c
deleted file mode 100644
index 4c0f31b..0000000
--- a/ext/open62541/arch/network_ws.c
+++ /dev/null
@@ -1,309 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    relies heavily on concepts from libwebsockets minimal examples
- *    Copyright 2019 (c) Matthias Konnerth
- *    Copyright 2019 (c) Michael Derfler
- */
-
-#define UA_INTERNAL
-
-#include <open62541/network_ws.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/util.h>
-#include "open62541_queue.h"
-#include <libwebsockets.h>
-#include <string.h>
-
-struct BufferEntry {
-    UA_ByteString msg;
-    SIMPLEQ_ENTRY(BufferEntry) next;
-};
-
-typedef struct BufferEntry BufferEntry;
-
-struct ConnectionUserData {
-    struct lws *wsi;
-    SIMPLEQ_HEAD(, BufferEntry) messages;
-};
-
-typedef struct ConnectionUserData ConnectionUserData;
-
-//one of these is created for each client connecting to us
-struct SessionData {
-    UA_Connection *connection;
-};
-
-// one of these is created for each vhost our protocol is used with
-struct VHostData {
-    struct lws_context *context;
-};
-
-typedef struct {
-    const UA_Logger *logger;
-    UA_UInt16 port;
-    struct lws_context *context;
-    UA_Server *server;
-    UA_ConnectionConfig config;
-} ServerNetworkLayerWS;
-
-static UA_StatusCode
-connection_getsendbuffer(UA_Connection *connection, size_t length, UA_ByteString *buf) {
-    if(length > connection->config.sendBufferSize)
-        return UA_STATUSCODE_BADCOMMUNICATIONERROR;
-    return UA_ByteString_allocBuffer(buf, length);
-}
-
-static void
-connection_releasesendbuffer(UA_Connection *connection, UA_ByteString *buf) {
-    UA_ByteString_deleteMembers(buf);
-}
-
-static void
-connection_releaserecvbuffer(UA_Connection *connection, UA_ByteString *buf) {
-    UA_ByteString_deleteMembers(buf);
-}
-
-static UA_StatusCode
-connection_send(UA_Connection *connection, UA_ByteString *buf) {
-    ConnectionUserData *buffer = (ConnectionUserData *)connection->handle;
-    if(connection->state == UA_CONNECTION_CLOSED) {
-        UA_ByteString_deleteMembers(buf);
-        return UA_STATUSCODE_BADCONNECTIONCLOSED;
-    }
-
-    BufferEntry *entry = (BufferEntry *)malloc(sizeof(BufferEntry));
-    entry->msg.length = buf->length;
-    entry->msg.data = (UA_Byte *)malloc(LWS_PRE + buf->length);
-    memcpy(entry->msg.data + LWS_PRE, buf->data, buf->length);
-    UA_ByteString_deleteMembers(buf);
-    SIMPLEQ_INSERT_TAIL(&buffer->messages, entry, next);
-    lws_callback_on_writable(buffer->wsi);
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-ServerNetworkLayerWS_close(UA_Connection *connection) {
-    if(connection->state == UA_CONNECTION_CLOSED)
-        return;
-    connection->state = UA_CONNECTION_CLOSED;
-}
-
-static void
-freeConnection(UA_Connection *connection) {
-    if(connection->handle) {
-        UA_free(connection->handle);
-    }
-    UA_Connection_deleteMembers(connection);
-    UA_free(connection);
-}
-
-static int
-callback_opcua(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in,
-               size_t len) {
-    struct SessionData *pss = (struct SessionData *)user;
-    struct VHostData *vhd =
-        (struct VHostData *)lws_protocol_vh_priv_get(lws_get_vhost(wsi),
-                                                                   lws_get_protocol(wsi));
-
-    switch(reason) {
-        case LWS_CALLBACK_PROTOCOL_INIT:
-            vhd = (struct VHostData *)lws_protocol_vh_priv_zalloc(
-                lws_get_vhost(wsi), lws_get_protocol(wsi),
-                sizeof(struct VHostData));
-            vhd->context = lws_get_context(wsi);
-            break;
-
-        case LWS_CALLBACK_ESTABLISHED:
-            if(!wsi)
-                break;
-            ServerNetworkLayerWS *layer = (ServerNetworkLayerWS*)lws_context_user(vhd->context);
-            UA_Connection *c = (UA_Connection *)malloc(sizeof(UA_Connection));
-            ConnectionUserData *buffer =
-                (ConnectionUserData *)malloc(sizeof(ConnectionUserData));
-            SIMPLEQ_INIT(&buffer->messages);
-            buffer->wsi = wsi;
-            memset(c, 0, sizeof(UA_Connection));
-            c->sockfd = 0;
-            c->handle = buffer;
-            c->config = layer->config;
-            c->send = connection_send;
-            c->close = ServerNetworkLayerWS_close;
-            c->free = freeConnection;
-            c->getSendBuffer = connection_getsendbuffer;
-            c->releaseSendBuffer = connection_releasesendbuffer;
-            c->releaseRecvBuffer = connection_releaserecvbuffer;
-            // stack sets the connection to established
-            c->state = UA_CONNECTION_OPENING;
-            c->openingDate = UA_DateTime_nowMonotonic();
-            pss->connection = c;
-            break;
-
-        case LWS_CALLBACK_CLOSED:
-            // notify server
-            if(!pss->connection->state != UA_CONNECTION_CLOSED) {
-                pss->connection->state = UA_CONNECTION_CLOSED;
-            }
-
-            layer = (ServerNetworkLayerWS*)lws_context_user(vhd->context);
-            if(layer && layer->server)
-            {
-                UA_Server_removeConnection(layer->server, pss->connection);
-            }
-            
-            break;
-
-        case LWS_CALLBACK_SERVER_WRITEABLE:
-            if(!pss->connection)
-                break;
-
-            ConnectionUserData *b = (ConnectionUserData *)pss->connection->handle;
-            do {
-
-                BufferEntry *entry = SIMPLEQ_FIRST(&b->messages);
-                if(!entry)
-                    break;
-
-                int m = lws_write(wsi, entry->msg.data + LWS_PRE, entry->msg.length,
-                                  LWS_WRITE_BINARY);
-                if(m < (int)entry->msg.length) {
-                    lwsl_err("ERROR %d writing to ws\n", m);
-                    return -1;
-                }
-                UA_ByteString_deleteMembers(&entry->msg);
-                UA_free(entry);
-                SIMPLEQ_REMOVE_HEAD(&b->messages, next);
-            } while(!lws_send_pipe_choked(wsi));
-
-            // process remaining messages
-            if(SIMPLEQ_FIRST(&b->messages)) {
-                lws_callback_on_writable(wsi);
-            }
-            break;
-
-        case LWS_CALLBACK_RECEIVE:
-            if(!vhd->context)
-                break;
-            layer =
-                (ServerNetworkLayerWS *)lws_context_user(vhd->context);
-            if(!layer->server)
-                break;
-
-            UA_ByteString message = {len, (UA_Byte *)in};
-            UA_Server_processBinaryMessage(layer->server, pss->connection, &message);
-            break;
-
-        default:
-            break;
-    }
-
-    return 0;
-}
-
-static struct lws_protocols protocols[] = {
-    {"http", lws_callback_http_dummy, 0, 0, 0, NULL, 0},
-    {"opcua", callback_opcua, sizeof(struct SessionData), 0, 0, NULL, 0},
-    {NULL, NULL, 0, 0, 0, NULL, 0}
-};
-
-// make the opcua protocol callback the default one
-const struct lws_protocol_vhost_options pvo_opt = {NULL, NULL, "default", "1"};
-const struct lws_protocol_vhost_options pvo = {NULL, &pvo_opt, "opcua", ""};
-
-static UA_StatusCode
-ServerNetworkLayerWS_start(UA_ServerNetworkLayer *nl, const UA_String *customHostname) {
-    UA_initialize_architecture_network();
-
-    ServerNetworkLayerWS *layer = (ServerNetworkLayerWS *)nl->handle;
-
-    /* Get the discovery url from the hostname */
-    UA_String du = UA_STRING_NULL;
-    char discoveryUrlBuffer[256];
-    char hostnameBuffer[256];
-    if(customHostname->length) {
-        du.length = (size_t)UA_snprintf(discoveryUrlBuffer, 255, "ws://%.*s:%d/",
-                                        (int)customHostname->length, customHostname->data,
-                                        layer->port);
-        du.data = (UA_Byte *)discoveryUrlBuffer;
-    } else {
-        if(UA_gethostname(hostnameBuffer, 255) == 0) {
-            du.length = (size_t)UA_snprintf(discoveryUrlBuffer, 255, "ws://%s:%d/",
-                                            hostnameBuffer, layer->port);
-            du.data = (UA_Byte *)discoveryUrlBuffer;
-        } else {
-            UA_LOG_ERROR(layer->logger, UA_LOGCATEGORY_NETWORK,
-                         "Could not get the hostname");
-        }
-    }
-    UA_String_copy(&du, &nl->discoveryUrl);
-
-    UA_LOG_INFO(layer->logger, UA_LOGCATEGORY_NETWORK,
-                "Websocket network layer listening on %.*s", (int)nl->discoveryUrl.length,
-                nl->discoveryUrl.data);
-
-    struct lws_context_creation_info info;
-    int logLevel = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE;
-    lws_set_log_level(logLevel, NULL);
-    memset(&info, 0, sizeof info);
-    info.port = layer->port;
-    info.protocols = protocols;
-    info.vhost_name = (char *)du.data;
-    info.ws_ping_pong_interval = 10;
-    info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE;
-    info.pvo = &pvo;
-    info.user = layer;
-
-    struct lws_context *context = lws_create_context(&info);
-    if(!context) {
-        UA_LOG_ERROR(layer->logger, UA_LOGCATEGORY_NETWORK, "lws init failed");
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-    layer->context = context;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-ServerNetworkLayerWS_listen(UA_ServerNetworkLayer *nl, UA_Server *server,
-                            UA_UInt16 timeout) {
-    ServerNetworkLayerWS *layer = (ServerNetworkLayerWS *)nl->handle;
-    layer->server = server;
-    // set timeout to zero to return immediately if nothing to do
-    lws_service(layer->context, 0);
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-ServerNetworkLayerWS_stop(UA_ServerNetworkLayer *nl, UA_Server *server) {
-    ServerNetworkLayerWS *layer = (ServerNetworkLayerWS *)nl->handle;
-    UA_LOG_INFO(layer->logger, UA_LOGCATEGORY_NETWORK,
-                "Shutting down the WS network layer");
-    lws_context_destroy(layer->context);
-    UA_deinitialize_architecture_network();
-}
-
-static void
-ServerNetworkLayerWS_deleteMembers(UA_ServerNetworkLayer *nl) {
-    UA_free(nl->handle);
-    UA_String_deleteMembers(&nl->discoveryUrl);
-}
-
-UA_ServerNetworkLayer
-UA_ServerNetworkLayerWS(UA_ConnectionConfig config, UA_UInt16 port, UA_Logger *logger) {
-    UA_ServerNetworkLayer nl;
-    memset(&nl, 0, sizeof(UA_ServerNetworkLayer));
-    nl.deleteMembers = ServerNetworkLayerWS_deleteMembers;
-    nl.localConnectionConfig = config;
-    nl.start = ServerNetworkLayerWS_start;
-    nl.listen = ServerNetworkLayerWS_listen;
-    nl.stop = ServerNetworkLayerWS_stop;
-
-    ServerNetworkLayerWS *layer =
-        (ServerNetworkLayerWS *)UA_calloc(1, sizeof(ServerNetworkLayerWS));
-    if(!layer)
-        return nl;
-    nl.handle = layer;
-    layer->logger = logger;
-    layer->port = port;
-    layer->config = config;
-    return nl;
-}
diff --git a/ext/open62541/arch/posix/CMakeLists.txt b/ext/open62541/arch/posix/CMakeLists.txt
deleted file mode 100644
index 71fbd8d..0000000
--- a/ext/open62541/arch/posix/CMakeLists.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-SET(SOURCE_GROUP ${SOURCE_GROUP}\\posix)

-

-ua_add_architecture("posix")

-

-list (FIND UA_AMALGAMATION_ARCHITECTURES "posix" _index)

-if (${_index} GREATER -1 OR "${UA_ARCHITECTURE}" STREQUAL "posix")

-

-    ua_add_architecture_file(${CMAKE_CURRENT_SOURCE_DIR}/ua_clock.c)

-    ua_add_architecture_file(${CMAKE_CURRENT_SOURCE_DIR}/ua_architecture_functions.c)

-

-

-    if("${UA_ARCHITECTURE}" STREQUAL "posix")

-        if(NOT CYGWIN AND NOT QNXNTO AND (NOT ${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD"))

-            ua_architecture_add_definitions(-Wshadow -Wconversion -fvisibility=hidden -fPIC)

-        endif()

-

-        if(QNXNTO)

-          ua_architecture_append_to_library(socket c stdc++)

-        elseif(OS9)

-          ua_architecture_append_to_library(netdb ndblib socket)

-        else()

-          ua_architecture_append_to_library(m)

-          #TODO - Error on first make run if pthread is included conditional?

-          ua_architecture_append_to_library(pthread)

-          if(UA_MULTITHREADING OR UA_BUILD_UNIT_TESTS)

-            ua_architecture_append_to_library(pthread)

-          endif()

-          if(NOT APPLE AND (NOT ${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD"))

-            ua_architecture_append_to_library(rt)

-          endif()

-        endif()

-

-    endif()

-

-

-endif()

diff --git a/ext/open62541/arch/posix/ua_architecture.h b/ext/open62541/arch/posix/ua_architecture.h
deleted file mode 100644
index 0d41441..0000000
--- a/ext/open62541/arch/posix/ua_architecture.h
+++ /dev/null
@@ -1,292 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2016-2017 (c) Julius Pfrommer, Fraunhofer IOSB
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifdef UA_ARCHITECTURE_POSIX
-
-#ifndef PLUGINS_ARCH_POSIX_UA_ARCHITECTURE_H_
-#define PLUGINS_ARCH_POSIX_UA_ARCHITECTURE_H_
-
-#include <open62541/architecture_base.h>
-
-/* Enable POSIX features */
-#if !defined(_XOPEN_SOURCE)
-# define _XOPEN_SOURCE 600
-#endif
-#ifndef _DEFAULT_SOURCE
-# define _DEFAULT_SOURCE
-#endif
-/* On older systems we need to define _BSD_SOURCE.
- * _DEFAULT_SOURCE is an alias for that. */
-#ifndef _BSD_SOURCE
-# define _BSD_SOURCE
-#endif
-
-#include <errno.h>
-#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <sys/ioctl.h>
-#include <sys/select.h>
-#include <sys/types.h>
-#include <net/if.h>
-#ifndef UA_sleep_ms
-# include <unistd.h>
-# define UA_sleep_ms(X) usleep(X * 1000)
-#endif
-
-#define OPTVAL_TYPE int
-
-#include <fcntl.h>
-#include <unistd.h> // read, write, close
-
-#ifdef __QNX__
-# include <sys/socket.h>
-#endif
-#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
-# include <sys/param.h>
-# if defined(BSD)
-#  include<sys/socket.h>
-# endif
-#endif
-#if !defined(__CYGWIN__)
-# include <netinet/tcp.h>
-#endif
-
-/* unsigned int for windows and workaround to a glibc bug */
-/* Additionally if GNU_LIBRARY is not defined, it may be using
- * musl libc (e.g. Docker Alpine) */
-#if  defined(__OpenBSD__) || \
-    (defined(__GNU_LIBRARY__) && (__GNU_LIBRARY__ <= 6) && \
-     (__GLIBC__ <= 2) && (__GLIBC_MINOR__ < 16) || \
-    !defined(__GNU_LIBRARY__))
-# define UA_fd_set(fd, fds) FD_SET((unsigned int)fd, fds)
-# define UA_fd_isset(fd, fds) FD_ISSET((unsigned int)fd, fds)
-#else
-# define UA_fd_set(fd, fds) FD_SET(fd, fds)
-# define UA_fd_isset(fd, fds) FD_ISSET(fd, fds)
-#endif
-
-#define UA_access access
-
-#define UA_IPV6 1
-#define UA_SOCKET int
-#define UA_INVALID_SOCKET -1
-#define UA_ERRNO errno
-#define UA_INTERRUPTED EINTR
-#define UA_AGAIN EAGAIN
-#define UA_EAGAIN EAGAIN
-#define UA_WOULDBLOCK EWOULDBLOCK
-#define UA_ERR_CONNECTION_PROGRESS EINPROGRESS
-
-#define UA_ENABLE_LOG_COLORS
-
-#define UA_getnameinfo getnameinfo
-#define UA_send send
-#define UA_recv recv
-#define UA_sendto sendto
-#define UA_recvfrom recvfrom
-#define UA_htonl htonl
-#define UA_ntohl ntohl
-#define UA_close close
-#define UA_select select
-#define UA_shutdown shutdown
-#define UA_socket socket
-#define UA_bind bind
-#define UA_listen listen
-#define UA_accept accept
-#define UA_connect connect
-#define UA_getaddrinfo getaddrinfo
-#define UA_getsockopt getsockopt
-#define UA_setsockopt setsockopt
-#define UA_freeaddrinfo freeaddrinfo
-#define UA_gethostname gethostname
-#define UA_getsockname getsockname
-#define UA_inet_pton inet_pton
-#if UA_IPV6
-# define UA_if_nametoindex if_nametoindex
-#endif
-
-#ifdef UA_ENABLE_MALLOC_SINGLETON
-extern void * (*UA_globalMalloc)(size_t size);
-extern void (*UA_globalFree)(void *ptr);
-extern void * (*UA_globalCalloc)(size_t nelem, size_t elsize);
-extern void * (*UA_globalRealloc)(void *ptr, size_t size);
-# define UA_free(ptr) UA_globalFree(ptr)
-# define UA_malloc(size) UA_globalMalloc(size)
-# define UA_calloc(num, size) UA_globalCalloc(num, size)
-# define UA_realloc(ptr, size) UA_globalRealloc(ptr, size)
-#endif
-
-#include <stdlib.h>
-#ifndef UA_free
-# define UA_free free
-#endif
-#ifndef UA_malloc
-# define UA_malloc malloc
-#endif
-#ifndef UA_calloc
-# define UA_calloc calloc
-#endif
-#ifndef UA_realloc
-# define UA_realloc realloc
-#endif
-
-#include <stdio.h>
-#define UA_snprintf snprintf
-
-#define UA_LOG_SOCKET_ERRNO_WRAP(LOG) { \
-    char *errno_str = strerror(errno); \
-    LOG; \
-}
-#define UA_LOG_SOCKET_ERRNO_GAI_WRAP(LOG) { \
-    const char *errno_str = gai_strerror(errno); \
-    LOG; \
-}
-
-#if UA_MULTITHREADING >= 100
-#include <pthread.h>
-#define UA_LOCK_TYPE_NAME pthread_mutex_t
-#define UA_LOCK_TYPE(mutexName) pthread_mutex_t mutexName; \
-                                        pthread_mutexattr_t mutexName##_attr; \
-                                        int mutexName##Counter;
-#define UA_LOCK_INIT(mutexName) pthread_mutexattr_init(&mutexName##_attr); \
-                                        pthread_mutexattr_settype(&mutexName##_attr, PTHREAD_MUTEX_RECURSIVE); \
-                                        pthread_mutex_init(&mutexName, &mutexName##_attr); \
-                                        mutexName##Counter = 0;
-#define UA_LOCK_DESTROY(mutexName) pthread_mutex_destroy(&mutexName); \
-                                   pthread_mutexattr_destroy(&mutexName##_attr);
-
-#define UA_LOCK(mutexName) pthread_mutex_lock(&mutexName); \
-                           UA_assert(++(mutexName##Counter) == 1); \
-
-#define UA_UNLOCK(mutexName) UA_assert(--(mutexName##Counter) == 0); \
-                             pthread_mutex_unlock(&mutexName);
-#define UA_LOCK_ASSERT(mutexName, num) UA_assert(mutexName##Counter == num);
-#else
-#define UA_LOCK_TYPE_NAME
-#define UA_LOCK_TYPE(mutexName)
-#define UA_LOCK_INIT(mutexName)
-#define UA_LOCK_DESTROY(mutexName)
-#define UA_LOCK(mutexName)
-#define UA_UNLOCK(mutexName)
-#define UA_LOCK_ASSERT(mutexName, num)
-#endif
-
-#include <open62541/architecture_functions.h>
-
-#if defined(__APPLE__)  && defined(_SYS_QUEUE_H_)
-//  in some compilers there's already a _SYS_QUEUE_H_ which is included first and doesn't have all functions
-
-#undef SLIST_HEAD
-#undef SLIST_HEAD_INITIALIZER
-#undef SLIST_ENTRY
-#undef SLIST_FIRST
-#undef SLIST_END
-#undef SLIST_EMPTY
-#undef SLIST_NEXT
-#undef SLIST_FOREACH
-#undef SLIST_FOREACH_SAFE
-#undef SLIST_INIT
-#undef SLIST_INSERT_AFTER
-#undef SLIST_INSERT_HEAD
-#undef SLIST_REMOVE_AFTER
-#undef SLIST_REMOVE_HEAD
-#undef SLIST_REMOVE
-#undef LIST_HEAD
-#undef LIST_HEAD_INITIALIZER
-#undef LIST_ENTRY
-#undef LIST_FIRST
-#undef LIST_END
-#undef LIST_EMPTY
-#undef LIST_NEXT
-#undef LIST_FOREACH
-#undef LIST_FOREACH_SAFE
-#undef LIST_INIT
-#undef LIST_INSERT_AFTER
-#undef LIST_INSERT_BEFORE
-#undef LIST_INSERT_HEAD
-#undef LIST_REMOVE
-#undef LIST_REPLACE
-#undef SIMPLEQ_HEAD
-#undef SIMPLEQ_HEAD_INITIALIZER
-#undef SIMPLEQ_ENTRY
-#undef SIMPLEQ_FIRST
-#undef SIMPLEQ_END
-#undef SIMPLEQ_EMPTY
-#undef SIMPLEQ_NEXT
-#undef SIMPLEQ_FOREACH
-#undef SIMPLEQ_FOREACH_SAFE
-#undef SIMPLEQ_INIT
-#undef SIMPLEQ_INSERT_HEAD
-#undef SIMPLEQ_INSERT_TAIL
-#undef SIMPLEQ_INSERT_AFTER
-#undef SIMPLEQ_REMOVE_HEAD
-#undef SIMPLEQ_REMOVE_AFTER
-#undef XSIMPLEQ_HEAD
-#undef XSIMPLEQ_ENTRY
-#undef XSIMPLEQ_XOR
-#undef XSIMPLEQ_FIRST
-#undef XSIMPLEQ_END
-#undef XSIMPLEQ_EMPTY
-#undef XSIMPLEQ_NEXT
-#undef XSIMPLEQ_FOREACH
-#undef XSIMPLEQ_FOREACH_SAFE
-#undef XSIMPLEQ_INIT
-#undef XSIMPLEQ_INSERT_HEAD
-#undef XSIMPLEQ_INSERT_TAIL
-#undef XSIMPLEQ_INSERT_AFTER
-#undef XSIMPLEQ_REMOVE_HEAD
-#undef XSIMPLEQ_REMOVE_AFTER
-#undef TAILQ_HEAD
-#undef TAILQ_HEAD_INITIALIZER
-#undef TAILQ_ENTRY
-#undef TAILQ_FIRST
-#undef TAILQ_END
-#undef TAILQ_NEXT
-#undef TAILQ_LAST
-#undef TAILQ_PREV
-#undef TAILQ_EMPTY
-#undef TAILQ_FOREACH
-#undef TAILQ_FOREACH_SAFE
-#undef TAILQ_FOREACH_REVERSE
-#undef TAILQ_FOREACH_REVERSE_SAFE
-#undef TAILQ_INIT
-#undef TAILQ_INSERT_HEAD
-#undef TAILQ_INSERT_TAIL
-#undef TAILQ_INSERT_AFTER
-#undef TAILQ_INSERT_BEFORE
-#undef TAILQ_REMOVE
-#undef TAILQ_REPLACE
-#undef CIRCLEQ_HEAD
-#undef CIRCLEQ_HEAD_INITIALIZER
-#undef CIRCLEQ_ENTRY
-#undef CIRCLEQ_FIRST
-#undef CIRCLEQ_LAST
-#undef CIRCLEQ_END
-#undef CIRCLEQ_NEXT
-#undef CIRCLEQ_PREV
-#undef CIRCLEQ_EMPTY
-#undef CIRCLEQ_FOREACH
-#undef CIRCLEQ_FOREACH_SAFE
-#undef CIRCLEQ_FOREACH_REVERSE
-#undef CIRCLEQ_FOREACH_REVERSE_SAFE
-#undef CIRCLEQ_INIT
-#undef CIRCLEQ_INSERT_AFTER
-#undef CIRCLEQ_INSERT_BEFORE
-#undef CIRCLEQ_INSERT_HEAD
-#undef CIRCLEQ_INSERT_TAIL
-#undef CIRCLEQ_REMOVE
-#undef CIRCLEQ_REPLACE
-
-#undef _SYS_QUEUE_H_
-
-#endif /* defined(__APPLE__)  && defined(_SYS_QUEUE_H_) */
-
-
-#endif /* PLUGINS_ARCH_POSIX_UA_ARCHITECTURE_H_ */
-
-#endif /* UA_ARCHITECTURE_POSIX */
diff --git a/ext/open62541/arch/posix/ua_architecture_functions.c b/ext/open62541/arch/posix/ua_architecture_functions.c
deleted file mode 100644
index 14e5237..0000000
--- a/ext/open62541/arch/posix/ua_architecture_functions.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2018 (c) Jose Cabral, fortiss GmbH
- */
-
-#ifdef UA_ARCHITECTURE_POSIX
-
-#include <open62541/types.h>
-
-/* Global malloc singletons */
-#ifdef UA_ENABLE_MALLOC_SINGLETON
-void * (*UA_globalMalloc)(size_t size) = malloc;
-void (*UA_globalFree)(void *ptr) = free;
-void * (*UA_globalCalloc)(size_t nelem, size_t elsize) = calloc;
-void * (*UA_globalRealloc)(void *ptr, size_t size) = realloc;
-#endif
-
-unsigned int UA_socket_set_blocking(UA_SOCKET sockfd){
-  int opts = fcntl(sockfd, F_GETFL);
-  if(opts < 0 || fcntl(sockfd, F_SETFL, opts & (~O_NONBLOCK)) < 0)
-      return UA_STATUSCODE_BADINTERNALERROR;
-  return UA_STATUSCODE_GOOD;
-}
-
-unsigned int UA_socket_set_nonblocking(UA_SOCKET sockfd){
-  int opts = fcntl(sockfd, F_GETFL);
-  if(opts < 0 || fcntl(sockfd, F_SETFL, opts | O_NONBLOCK) < 0)
-    return UA_STATUSCODE_BADINTERNALERROR;
-  return UA_STATUSCODE_GOOD;
-}
-
-void UA_initialize_architecture_network(void){
-}
-
-void UA_deinitialize_architecture_network(void){
-}
-
-#endif /* UA_ARCHITECTURE_POSIX */
diff --git a/ext/open62541/arch/posix/ua_clock.c b/ext/open62541/arch/posix/ua_clock.c
deleted file mode 100644
index e055fae..0000000
--- a/ext/open62541/arch/posix/ua_clock.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. 
- *
- *    Copyright 2016-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Thomas Stalder, Blue Time Concept SA
- */
-
-#ifdef UA_ARCHITECTURE_POSIX
-
-#include <open62541/types.h>
-
-#include <time.h>
-
-#include <sys/time.h>
-
-#if defined(__APPLE__) || defined(__MACH__)
-# include <mach/clock.h>
-# include <mach/mach.h>
-#endif
-
-UA_DateTime UA_DateTime_now(void) {
-    struct timeval tv;
-    gettimeofday(&tv, NULL);
-    return (tv.tv_sec * UA_DATETIME_SEC) + (tv.tv_usec * UA_DATETIME_USEC) + UA_DATETIME_UNIX_EPOCH;
-}
-
-/* Credit to https://stackoverflow.com/questions/13804095/get-the-time-zone-gmt-offset-in-c */
-UA_Int64 UA_DateTime_localTimeUtcOffset(void) {
-    time_t gmt, rawtime = time(NULL);
-    struct tm *ptm;
-    struct tm gbuf;
-    ptm = gmtime_r(&rawtime, &gbuf);
-    // Request that mktime() looksup dst in timezone database
-    ptm->tm_isdst = -1;
-    gmt = mktime(ptm);
-    return (UA_Int64) (difftime(rawtime, gmt) * UA_DATETIME_SEC);
-}
-
-UA_DateTime UA_DateTime_nowMonotonic(void) {
-#if defined(__APPLE__) || defined(__MACH__)
-    /* OS X does not have clock_gettime, use clock_get_time */
-    clock_serv_t cclock;
-    mach_timespec_t mts;
-    host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &cclock);
-    clock_get_time(cclock, &mts);
-    mach_port_deallocate(mach_task_self(), cclock);
-    return (mts.tv_sec * UA_DATETIME_SEC) + (mts.tv_nsec / 100);
-#elif !defined(CLOCK_MONOTONIC_RAW)
-    struct timespec ts;
-    clock_gettime(CLOCK_MONOTONIC, &ts);
-    return (ts.tv_sec * UA_DATETIME_SEC) + (ts.tv_nsec / 100);
-#else
-    struct timespec ts;
-    clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
-    return (ts.tv_sec * UA_DATETIME_SEC) + (ts.tv_nsec / 100);
-#endif
-}
-
-#endif /* UA_ARCHITECTURE_POSIX */
diff --git a/ext/open62541/arch/vxworks/CMakeLists.txt b/ext/open62541/arch/vxworks/CMakeLists.txt
deleted file mode 100644
index 863fcfb..0000000
--- a/ext/open62541/arch/vxworks/CMakeLists.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-SET(SOURCE_GROUP ${SOURCE_GROUP}\\vxworks)

-

-ua_add_architecture("vxworks")

-

-list (FIND UA_AMALGAMATION_ARCHITECTURES "vxworks" _index)

-if (${_index} GREATER -1 OR "${UA_ARCHITECTURE}" STREQUAL "vxworks")

-

-    ua_add_architecture_file(${CMAKE_CURRENT_SOURCE_DIR}/ua_clock.c)

-    ua_add_architecture_file(${CMAKE_CURRENT_SOURCE_DIR}/ua_architecture_functions.c)

-

-    if("${UA_ARCHITECTURE}" STREQUAL "vxworks")

-

-        ua_include_directories(${CMAKE_CURRENT_SOURCE_DIR})

-

-    endif()

-

-endif()

diff --git a/ext/open62541/arch/vxworks/ua_architecture.h b/ext/open62541/arch/vxworks/ua_architecture.h
deleted file mode 100644
index d899c6f..0000000
--- a/ext/open62541/arch/vxworks/ua_architecture.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2016-2017 (c) Julius Pfrommer, Fraunhofer IOSB
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifdef UA_ARCHITECTURE_VXWORKS
-
-#ifndef PLUGINS_ARCH_VXWORKS_UA_ARCHITECTURE_H_
-#define PLUGINS_ARCH_VXWORKS_UA_ARCHITECTURE_H_
-
-#include <open62541/architecture_base.h>
-
-#include <errno.h>
-#include <time.h>
-
-#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <sys/ioctl.h>
-
-#include <hostLib.h>
-#include <selectLib.h>
-
-#define UA_sleep_ms(X)                            \
- {                                                \
- struct timespec timeToSleep;                     \
-   timeToSleep.tv_sec = X / 1000;                 \
-   timeToSleep.tv_nsec = 1000000 * (X % 1000);    \
-   nanosleep(&timeToSleep, NULL);                 \
- }
-
-#ifdef UINT32_C
-# undef UINT32_C
-#endif
-
-#define UINT32_C(x) ((x) + (UINT32_MAX - UINT32_MAX))
-
-#ifdef UA_BINARY_OVERLAYABLE_FLOAT
-# undef UA_BINARY_OVERLAYABLE_FLOAT
-#endif
-#define UA_BINARY_OVERLAYABLE_FLOAT 1
-
-#define OPTVAL_TYPE int
-
-#include <fcntl.h>
-#include <unistd.h> // read, write, close
-#include <netinet/tcp.h>
-
-#define UA_fd_set(fd, fds) FD_SET((unsigned int)fd, fds)
-#define UA_fd_isset(fd, fds) FD_ISSET((unsigned int)fd, fds)
-
-#define UA_access access
-
-#define UA_IPV6 1
-#define UA_SOCKET int
-#define UA_INVALID_SOCKET -1
-#define UA_ERRNO errno
-#define UA_INTERRUPTED EINTR
-#define UA_AGAIN EAGAIN
-#define UA_EAGAIN EAGAIN
-#define UA_WOULDBLOCK EWOULDBLOCK
-#define UA_ERR_CONNECTION_PROGRESS EINPROGRESS
-
-#define UA_ENABLE_LOG_COLORS
-
-#define UA_getnameinfo getnameinfo
-#define UA_send send
-#define UA_recv recv
-#define UA_sendto sendto
-#define UA_recvfrom recvfrom
-#define UA_htonl htonl
-#define UA_ntohl ntohl
-#define UA_close close
-#define UA_select select
-#define UA_shutdown shutdown
-#define UA_socket socket
-#define UA_bind bind
-#define UA_listen listen
-#define UA_accept accept
-#define UA_connect connect
-#define UA_getaddrinfo getaddrinfo
-#define UA_getsockopt getsockopt
-#define UA_setsockopt setsockopt
-#define UA_freeaddrinfo freeaddrinfo
-#define UA_gethostname gethostname
-#define UA_getsockname getsockname
-#define UA_inet_pton inet_pton
-#if UA_IPV6
-# define UA_if_nametoindex if_nametoindex
-#endif
-
-#include <stdlib.h>
-#define UA_free free
-#define UA_malloc malloc
-#define UA_calloc calloc
-#define UA_realloc realloc
-
-#include <stdio.h>
-#define UA_snprintf snprintf
-
-#define UA_LOG_SOCKET_ERRNO_WRAP(LOG) { \
-    char *errno_str = strerror(errno); \
-    LOG; \
-}
-#define UA_LOG_SOCKET_ERRNO_GAI_WRAP(LOG) { \
-    char *errno_str = gai_strerror(errno); \
-    LOG; \
-}
-
-#if UA_MULTITHREADING >= 100
-#error Multithreading unsupported
-#else
-#define UA_LOCK_TYPE_NAME
-#define UA_LOCK_TYPE(mutexName)
-#define UA_LOCK_TYPE_POINTER(mutexName)
-#define UA_LOCK_INIT(mutexName)
-#define UA_LOCK_DESTROY(mutexName)
-#define UA_LOCK(mutexName)
-#define UA_UNLOCK(mutexName)
-#define UA_LOCK_ASSERT(mutexName, num)
-#endif
-
-#include <open62541/architecture_functions.h>
-
-#endif /* PLUGINS_ARCH_VXWORKS_UA_ARCHITECTURE_H_ */
-
-#endif /* UA_ARCHITECTURE_VXWORKS */
diff --git a/ext/open62541/arch/vxworks/ua_architecture_functions.c b/ext/open62541/arch/vxworks/ua_architecture_functions.c
deleted file mode 100644
index 8fb7bdd..0000000
--- a/ext/open62541/arch/vxworks/ua_architecture_functions.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2018 (c) Jose Cabral, fortiss GmbH
- */
-
-#ifdef UA_ARCHITECTURE_VXWORKS
-
-#include <open62541/types.h>
-
-unsigned int UA_socket_set_blocking(UA_SOCKET sockfd){
-  int on = FALSE;
-  if(ioctl(sockfd, FIONBIO, &on) < 0)
-    return UA_STATUSCODE_BADINTERNALERROR;
-  return UA_STATUSCODE_GOOD;
-}
-
-unsigned int UA_socket_set_nonblocking(UA_SOCKET sockfd){
-  int on = TRUE;
-  if(ioctl(sockfd, FIONBIO, &on) < 0)
-    return UA_STATUSCODE_BADINTERNALERROR;
-  return UA_STATUSCODE_GOOD;
-}
-
-void UA_initialize_architecture_network(void){
-  return;
-}
-
-void UA_deinitialize_architecture_network(void){
-  return;
-}
-
-#endif /* UA_ARCHITECTURE_VXWORKS */
diff --git a/ext/open62541/arch/vxworks/ua_clock.c b/ext/open62541/arch/vxworks/ua_clock.c
deleted file mode 100644
index efb9fe8..0000000
--- a/ext/open62541/arch/vxworks/ua_clock.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. 
- *
- *    Copyright 2016-2017 (c) Julius Pfrommer, Fraunhofer IOSB
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Thomas Stalder
- */
-
-#ifdef UA_ARCHITECTURE_VXWORKS
-
-#ifndef _DEFAULT_SOURCE
-# define _DEFAULT_SOURCE
-#endif
-/* On older systems we need to define _BSD_SOURCE.
- * _DEFAULT_SOURCE is an alias for that. */
-#ifndef _BSD_SOURCE
-# define _BSD_SOURCE
-#endif
-
-#include <time.h>
-#include <sys/time.h>
-
-#include <open62541/types.h>
-
-UA_DateTime UA_DateTime_now(void){
-  struct timeval tv;
-  gettimeofday(&tv, NULL);
-  return (tv.tv_sec * UA_DATETIME_SEC) + (tv.tv_usec * UA_DATETIME_USEC) + UA_DATETIME_UNIX_EPOCH;
-}
-
-/* Credit to https://stackoverflow.com/questions/13804095/get-the-time-zone-gmt-offset-in-c */
-UA_Int64 UA_DateTime_localTimeUtcOffset(void){
-  time_t gmt, rawtime = time(NULL);
-
-  struct tm *ptm;
-  struct tm gbuf;
-  ptm = gmtime_r(&rawtime, &gbuf);
-  // Request that mktime() looksup dst in timezone database
-  ptm->tm_isdst = -1;
-  gmt = mktime(ptm);
-
-  return (UA_Int64) (difftime(rawtime, gmt) * UA_DATETIME_SEC);
-}
-
-UA_DateTime UA_DateTime_nowMonotonic(void) {
-  struct timespec ts;
-#if !defined(CLOCK_MONOTONIC_RAW)
-  clock_gettime(CLOCK_MONOTONIC, &ts);
-#else
-  clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
-#endif
-  return (ts.tv_sec * UA_DATETIME_SEC) + (ts.tv_nsec / 100);
-}
-
-#endif /* UA_ARCHITECTURE_VXWORKS */
-
diff --git a/ext/open62541/arch/wec7/CMakeLists.txt b/ext/open62541/arch/wec7/CMakeLists.txt
deleted file mode 100644
index f83bcfc..0000000
--- a/ext/open62541/arch/wec7/CMakeLists.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-SET(SOURCE_GROUP ${SOURCE_GROUP}\\wec7)

-

-ua_add_architecture("wec7")

-

-list (FIND UA_AMALGAMATION_ARCHITECTURES "wec7" _index)

-if (${_index} GREATER -1 OR "${UA_ARCHITECTURE}" STREQUAL "wec7")

-

-    ua_add_architecture_file(${CMAKE_CURRENT_SOURCE_DIR}/ua_clock.c)

-    ua_add_architecture_file(${CMAKE_CURRENT_SOURCE_DIR}/ua_architecture_functions.c)

-

-    if("${UA_ARCHITECTURE}" STREQUAL "wec7")

-        ua_architecture_append_to_library(ws2)

-        ua_include_directories(${CMAKE_CURRENT_SOURCE_DIR})

-

-    endif()

-

-endif()

diff --git a/ext/open62541/arch/wec7/ua_architecture.h b/ext/open62541/arch/wec7/ua_architecture.h
deleted file mode 100644
index 558a8a2..0000000
--- a/ext/open62541/arch/wec7/ua_architecture.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2018 (c) Stephan Kantelberg
- */
-
-#ifdef UA_ARCHITECTURE_WEC7
-
-#ifndef PLUGINS_ARCH_WEC7_UA_ARCHITECTURE_H_
-#define PLUGINS_ARCH_WEC7_UA_ARCHITECTURE_H_
-
-#include <open62541/architecture_base.h>
-
-#ifndef _BSD_SOURCE
-# define _BSD_SOURCE
-#endif
-
-/* Disable some security warnings on MSVC */
-#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
-# define _CRT_SECURE_NO_WARNINGS
-#endif
-
-#include "stdint.h"
-#ifdef UNDER_CE
-#define MAX_STRERROR 31
-static char *errorStrings[]= {"Error 0","","No such file or directory","","","","","Arg list too long",
-                              "Exec format error","Bad file number","","","Not enough core","Permission denied","","",
-                              "","File exists","Cross-device link","","","","Invalid argument","","Too many open files",
-                              "","","","No space left on device","","","","","Math argument","Result too large","",
-                              "Resource deadlock would occur", "Unknown error under wince"};
-
-char *strerror(int errnum);
-#endif
-
-#include <stdlib.h>
-#if defined(_WIN32)
-# include <malloc.h>
-#endif
-
-#include <stdio.h>
-#include <errno.h>
-#include <winsock2.h>
-#include <windows.h>
-#include <ws2tcpip.h>
-
-#ifdef _MSC_VER
-# ifndef UNDER_CE
-#  include <io.h> //access
-#  define UA_access _access
-# endif
-#else
-# include <unistd.h> //access and tests
-# define UA_access access
-#endif
-
-#define ssize_t int
-#define OPTVAL_TYPE char
-#ifndef UA_sleep_ms
-# define UA_sleep_ms(X) Sleep(X)
-#endif
-
-// Windows does not support ansi colors
-// #define UA_ENABLE_LOG_COLORS
-
-#if defined(__MINGW32__) //mingw defines SOCKET as long long unsigned int, giving errors in logging and when comparing with UA_Int32
-# define UA_SOCKET int
-# define UA_INVALID_SOCKET -1
-#else
-# define UA_SOCKET SOCKET
-# define UA_INVALID_SOCKET INVALID_SOCKET
-#endif
-#define UA_ERRNO WSAGetLastError()
-#define UA_INTERRUPTED WSAEINTR
-#define UA_AGAIN WSAEWOULDBLOCK
-#define UA_EAGAIN EAGAIN
-#define UA_WOULDBLOCK WSAEWOULDBLOCK
-#define UA_ERR_CONNECTION_PROGRESS WSAEWOULDBLOCK
-
-#define UA_fd_set(fd, fds) FD_SET((UA_SOCKET)fd, fds)
-#define UA_fd_isset(fd, fds) FD_ISSET((UA_SOCKET)fd, fds)
-
-#ifdef UNDER_CE
-#define UA_ERRNO WSAGetLastError()
-#endif
-
-#define UA_getnameinfo getnameinfo
-#define UA_send(sockfd, buf, len, flags) send(sockfd, buf, (int)(len), flags)
-#define UA_recv recv
-#define UA_sendto(sockfd, buf, len, flags, dest_addr, addrlen) sendto(sockfd, (const char*)(buf), (int)(len), flags, dest_addr, (int) (addrlen))
-#define UA_recvfrom(sockfd, buf, len, flags, src_addr, addrlen) recvfrom(sockfd, (char*)(buf), (int)(len), flags, src_addr, addrlen)
-#define UA_htonl htonl
-#define UA_ntohl ntohl
-#define UA_close closesocket
-#define UA_select(nfds, readfds, writefds, exceptfds, timeout) select((int)(nfds), readfds, writefds, exceptfds, timeout)
-#define UA_shutdown shutdown
-#define UA_socket socket
-#define UA_bind bind
-#define UA_listen listen
-#define UA_accept accept
-#define UA_connect(sockfd, addr, addrlen) connect(sockfd, addr, (int)(addrlen))
-#define UA_getaddrinfo getaddrinfo
-#define UA_getsockopt getsockopt
-#define UA_setsockopt(sockfd, level, optname, optval, optlen) setsockopt(sockfd, level, optname, (const char*) (optval), optlen)
-#define UA_freeaddrinfo freeaddrinfo
-#define UA_gethostname gethostname
-#define UA_getsockname getsockname
-#define UA_inet_pton InetPton
-
-#ifdef maxStringLength //defined in mingw64
-# undef maxStringLength
-#endif
-
-#ifndef UA_free
-#define UA_free free
-#endif
-#ifndef UA_malloc
-#define UA_malloc malloc
-#endif
-#ifndef UA_calloc
-#define UA_calloc calloc
-#endif
-#ifndef UA_realloc
-#define UA_realloc realloc
-#endif
-
-#define UA_snprintf(source, size, string, ...) _snprintf_s(source, size, _TRUNCATE, string, __VA_ARGS__)
-
-#define UA_LOG_SOCKET_ERRNO_WRAP(LOG) { \
-    LPVOID errno_str = NULL; \
-    FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, \
-    NULL, WSAGetLastError(), \
-    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), \
-    (LPWSTR)&errno_str, \
-    0, NULL); \
-    LOG; \
-    LocalFree(errno_str); \
-}
-#define UA_LOG_SOCKET_ERRNO_GAI_WRAP UA_LOG_SOCKET_ERRNO_WRAP
-
-#if UA_MULTITHREADING >= 100
-#error Multithreading unsupported
-#else
-#define UA_LOCK_TYPE_NAME
-#define UA_LOCK_TYPE(mutexName)
-#define UA_LOCK_TYPE_POINTER(mutexName)
-#define UA_LOCK_INIT(mutexName)
-#define UA_LOCK_DESTROY(mutexName)
-#define UA_LOCK(mutexName)
-#define UA_UNLOCK(mutexName)
-#endif
-
-#include <open62541/architecture_functions.h>
-
-/* Fix redefinition of SLIST_ENTRY on mingw winnt.h */
-#if !defined(_SYS_QUEUE_H_) && defined(SLIST_ENTRY)
-# undef SLIST_ENTRY
-#endif
-
-#endif /* PLUGINS_ARCH_WEC7_UA_ARCHITECTURE_H_ */
-
-#endif /* UA_ARCHITECTURE_WEC7 */
diff --git a/ext/open62541/arch/wec7/ua_architecture_functions.c b/ext/open62541/arch/wec7/ua_architecture_functions.c
deleted file mode 100644
index 779bc67..0000000
--- a/ext/open62541/arch/wec7/ua_architecture_functions.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2018 (c) Stephan Kantelberg
- */
-
-#ifdef UA_ARCHITECTURE_WEC7
-
-#include <open62541/types.h>
-
-#undef UA_fileExists
-UA_Boolean UA_fileExists(const char* path) {
-  FILE *fp = fopen(path,"rb");
-  UA_Boolean exists = (fp==NULL);
-  if(fp)
-      fclose(fp);
-  return exists;
-}
-
-unsigned int UA_socket_set_blocking(UA_SOCKET sockfd){
-  u_long iMode = 0;
-  if(ioctlsocket(sockfd, FIONBIO, &iMode) != NO_ERROR)
-    return UA_STATUSCODE_BADINTERNALERROR;
-  return UA_STATUSCODE_GOOD;;
-}
-
-#ifdef UNDER_CE
-char *strerror(int errnum)
-{
-    if (errnum > MAX_STRERROR)
-        return errorStrings[MAX_STRERROR];
-    else
-        return errorStrings[errnum];
-}
-#endif
-
-unsigned int UA_socket_set_nonblocking(UA_SOCKET sockfd){
-  u_long iMode = 1;
-  if(ioctlsocket(sockfd, FIONBIO, &iMode) != NO_ERROR)
-    return UA_STATUSCODE_BADINTERNALERROR;
-  return UA_STATUSCODE_GOOD;;
-}
-
-void UA_initialize_architecture_network(void){
-  WSADATA wsaData;
-  WSAStartup(MAKEWORD(2, 2), &wsaData);
-}
-
-void UA_deinitialize_architecture_network(void){
-  WSACleanup();
-}
-
-#endif /* UA_ARCHITECTURE_WEC7 */
diff --git a/ext/open62541/arch/wec7/ua_clock.c b/ext/open62541/arch/wec7/ua_clock.c
deleted file mode 100644
index 4f81c54..0000000
--- a/ext/open62541/arch/wec7/ua_clock.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2018 (c) Stephan Kantelberg
- */
-
-#ifdef UA_ARCHITECTURE_WEC7
-
-#ifndef _BSD_SOURCE
-# define _BSD_SOURCE
-#endif
-
-#include <open62541/types.h>
-#include <time.h>
-/* Backup definition of SLIST_ENTRY on mingw winnt.h */
-# ifdef SLIST_ENTRY
-#  pragma push_macro("SLIST_ENTRY")
-#  undef SLIST_ENTRY
-#  define POP_SLIST_ENTRY
-# endif
-# include <windows.h>
-/* restore definition */
-# ifdef POP_SLIST_ENTRY
-#  undef SLIST_ENTRY
-#  undef POP_SLIST_ENTRY
-#  pragma pop_macro("SLIST_ENTRY")
-# endif
-
-UA_DateTime UA_DateTime_now(void) {
-    /* Windows filetime has the same definition as UA_DateTime */
-    FILETIME ft;
-    SYSTEMTIME st;
-    GetSystemTime(&st);
-    SystemTimeToFileTime(&st, &ft);
-    ULARGE_INTEGER ul;
-    ul.LowPart = ft.dwLowDateTime;
-    ul.HighPart = ft.dwHighDateTime;
-    return (UA_DateTime)ul.QuadPart;
-}
-
-UA_Int64 UA_DateTime_localTimeUtcOffset(void) {
-    return 0;
-}
-
-UA_DateTime UA_DateTime_nowMonotonic(void) {
-    LARGE_INTEGER freq, ticks;
-    QueryPerformanceFrequency(&freq);
-    QueryPerformanceCounter(&ticks);
-    UA_Double ticks2dt = UA_DATETIME_SEC / (UA_Double)freq.QuadPart;
-    return (UA_DateTime)(ticks.QuadPart * ticks2dt);
-}
-
-#endif /* UA_ARCHITECTURE_WEC7 */
diff --git a/ext/open62541/arch/win32/CMakeLists.txt b/ext/open62541/arch/win32/CMakeLists.txt
deleted file mode 100644
index 8504731..0000000
--- a/ext/open62541/arch/win32/CMakeLists.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-SET(SOURCE_GROUP ${SOURCE_GROUP}\\win32)

-

-ua_add_architecture("win32")

-

-list (FIND UA_AMALGAMATION_ARCHITECTURES "win32" _index)

-if (${_index} GREATER -1 OR "${UA_ARCHITECTURE}" STREQUAL "win32")

-

-    ua_add_architecture_file(${CMAKE_CURRENT_SOURCE_DIR}/ua_clock.c)

-    ua_add_architecture_file(${CMAKE_CURRENT_SOURCE_DIR}/ua_architecture_functions.c)

-

-    if("${UA_ARCHITECTURE}" STREQUAL "win32")

-        ua_architecture_append_to_library(ws2_32)

-        ua_architecture_append_to_library(iphlpapi)

-	#append iphlpapi permanently. Problem: PUBSUB Flag is configured after execution.        

-	#if(UA_ENABLE_DISCOVERY_MULTICAST OR UA_ENABLE_PUBSUB)

-        #    ua_architecture_append_to_library(iphlpapi)

-        #endif()

-    endif()

-

-    ua_include_directories(${CMAKE_CURRENT_SOURCE_DIR})

-

-endif()

diff --git a/ext/open62541/arch/win32/ua_architecture.h b/ext/open62541/arch/win32/ua_architecture.h
deleted file mode 100644
index 1f1e82a..0000000
--- a/ext/open62541/arch/win32/ua_architecture.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2016-2017 (c) Julius Pfrommer, Fraunhofer IOSB
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifdef UA_ARCHITECTURE_WIN32
-
-#ifndef PLUGINS_ARCH_WIN32_UA_ARCHITECTURE_H_
-#define PLUGINS_ARCH_WIN32_UA_ARCHITECTURE_H_
-
-#include <open62541/architecture_base.h>
-
-#ifndef _BSD_SOURCE
-# define _BSD_SOURCE
-#endif
-
-/* Disable some security warnings on MSVC */
-#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
-# define _CRT_SECURE_NO_WARNINGS
-#endif
-
-/* Assume that Windows versions are newer than Windows XP */
-#if defined(__MINGW32__) && (!defined(WINVER) || WINVER < 0x501)
-# undef WINVER
-# undef _WIN32_WINDOWS
-# undef _WIN32_WINNT
-# define WINVER 0x0600
-# define _WIN32_WINDOWS 0x0600
-# define _WIN32_WINNT 0x0600 //windows vista version, which included InepPton
-#endif
-
-#include <stdlib.h>
-#if defined(_WIN32) && !defined(__clang__)
-# include <malloc.h>
-#endif
-
-#include <stdio.h>
-#include <errno.h>
-#include <winsock2.h>
-#include <windows.h>
-#include <ws2tcpip.h>
-
-#if defined (_MSC_VER) || defined(__clang__)
-# ifndef UNDER_CE
-#  include <io.h> //access
-#  define UA_access _access
-# endif
-#else
-# include <unistd.h> //access and tests
-# define UA_access access
-#endif
-
-#define ssize_t int
-#define OPTVAL_TYPE char
-#ifndef UA_sleep_ms
-# define UA_sleep_ms(X) Sleep(X)
-#endif
-
-// Windows does not support ansi colors
-// #define UA_ENABLE_LOG_COLORS
-
-#define UA_IPV6 1
-
-#if defined(__MINGW32__) && !defined(__clang__) //mingw defines SOCKET as long long unsigned int, giving errors in logging and when comparing with UA_Int32
-# define UA_SOCKET int
-# define UA_INVALID_SOCKET -1
-#else
-# define UA_SOCKET SOCKET
-# define UA_INVALID_SOCKET INVALID_SOCKET
-#endif
-#define UA_ERRNO WSAGetLastError()
-#define UA_INTERRUPTED WSAEINTR
-#define UA_AGAIN WSAEWOULDBLOCK
-#define UA_EAGAIN EAGAIN
-#define UA_WOULDBLOCK WSAEWOULDBLOCK
-#define UA_ERR_CONNECTION_PROGRESS WSAEWOULDBLOCK
-
-#define UA_fd_set(fd, fds) FD_SET((UA_SOCKET)fd, fds)
-#define UA_fd_isset(fd, fds) FD_ISSET((UA_SOCKET)fd, fds)
-
-#ifdef UNDER_CE
-# define errno
-#endif
-
-#define UA_getnameinfo getnameinfo
-#define UA_send(sockfd, buf, len, flags) send(sockfd, buf, (int)(len), flags)
-#define UA_recv(sockfd, buf, len, flags) recv(sockfd, buf, (int)(len), flags)
-#define UA_sendto(sockfd, buf, len, flags, dest_addr, addrlen) sendto(sockfd, (const char*)(buf), (int)(len), flags, dest_addr, (int) (addrlen))
-#define UA_recvfrom(sockfd, buf, len, flags, src_addr, addrlen) recvfrom(sockfd, (char*)(buf), (int)(len), flags, src_addr, addrlen)
-#define UA_htonl htonl
-#define UA_ntohl ntohl
-#define UA_close closesocket
-#define UA_select(nfds, readfds, writefds, exceptfds, timeout) select((int)(nfds), readfds, writefds, exceptfds, timeout)
-#define UA_shutdown shutdown
-#define UA_socket socket
-#define UA_bind bind
-#define UA_listen listen
-#define UA_accept accept
-#define UA_connect(sockfd, addr, addrlen) connect(sockfd, addr, (int)(addrlen))
-#define UA_getaddrinfo getaddrinfo
-#define UA_getsockopt getsockopt
-#define UA_setsockopt(sockfd, level, optname, optval, optlen) setsockopt(sockfd, level, optname, (const char*) (optval), optlen)
-#define UA_freeaddrinfo freeaddrinfo
-#define UA_gethostname gethostname
-#define UA_getsockname getsockname
-#define UA_inet_pton InetPton
-
-#if UA_IPV6
-# include <iphlpapi.h>
-# define UA_if_nametoindex if_nametoindex
-#endif
-
-#ifdef maxStringLength //defined in mingw64
-# undef maxStringLength
-#endif
-
-#ifndef UA_free
-#define UA_free free
-#endif
-#ifndef UA_malloc
-#define UA_malloc malloc
-#endif
-#ifndef UA_calloc
-#define UA_calloc calloc
-#endif
-#ifndef UA_realloc
-#define UA_realloc realloc
-#endif
-
-/* 3rd Argument is the string */
-#define UA_snprintf(source, size, ...) _snprintf_s(source, size, _TRUNCATE, __VA_ARGS__)
-
-#define UA_LOG_SOCKET_ERRNO_WRAP(LOG) { \
-    char *errno_str = NULL; \
-    FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, \
-    NULL, WSAGetLastError(), \
-    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), \
-    (LPSTR)&errno_str, 0, NULL); \
-    LOG; \
-    LocalFree(errno_str); \
-}
-#define UA_LOG_SOCKET_ERRNO_GAI_WRAP UA_LOG_SOCKET_ERRNO_WRAP
-
-#if UA_MULTITHREADING >= 100
-#define UA_LOCK_TYPE_NAME CRITICAL_SECTION
-#define UA_LOCK_TYPE(mutexName) CRITICAL_SECTION mutexName; \
-                                int mutexName##Counter;
-#define UA_LOCK_INIT(mutexName) InitializeCriticalSection(&mutexName); \
-                                mutexName##Counter = 0;;
-#define UA_LOCK_DESTROY(mutexName) DeleteCriticalSection(&mutexName);
-#define UA_LOCK(mutexName) EnterCriticalSection(&mutexName); \
-                           UA_assert(++(mutexName##Counter) == 1);
-#define UA_UNLOCK(mutexName) UA_assert(--(mutexName##Counter) == 0); \
-                             LeaveCriticalSection(&mutexName);
-#define UA_LOCK_ASSERT(mutexName, num) UA_assert(mutexName##Counter == num);
-#else
-#define UA_LOCK_TYPE_NAME
-#define UA_LOCK_TYPE(mutexName)
-#define UA_LOCK_TYPE_POINTER(mutexName)
-#define UA_LOCK_INIT(mutexName)
-#define UA_LOCK_DESTROY(mutexName)
-#define UA_LOCK(mutexName)
-#define UA_UNLOCK(mutexName)
-#define UA_LOCK_ASSERT(mutexName, num)
-#endif
-
-#include <open62541/architecture_functions.h>
-
-/* Fix redefinition of SLIST_ENTRY on mingw winnt.h */
-#if !defined(_SYS_QUEUE_H_) && defined(SLIST_ENTRY)
-# undef SLIST_ENTRY
-#endif
-
-#endif /* PLUGINS_ARCH_WIN32_UA_ARCHITECTURE_H_ */
-
-#endif /* UA_ARCHITECTURE_WIN32 */
diff --git a/ext/open62541/arch/win32/ua_architecture_functions.c b/ext/open62541/arch/win32/ua_architecture_functions.c
deleted file mode 100644
index cf54e9e..0000000
--- a/ext/open62541/arch/win32/ua_architecture_functions.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2018 (c) Jose Cabral, fortiss GmbH
- */
-
-#ifdef UA_ARCHITECTURE_WIN32
-
-#include <open62541/types.h>
-
-unsigned int UA_socket_set_blocking(UA_SOCKET sockfd){
-  u_long iMode = 0;
-  if(ioctlsocket(sockfd, FIONBIO, &iMode) != NO_ERROR)
-    return UA_STATUSCODE_BADINTERNALERROR;
-  return UA_STATUSCODE_GOOD;;
-}
-
-unsigned int UA_socket_set_nonblocking(UA_SOCKET sockfd){
-  u_long iMode = 1;
-  if(ioctlsocket(sockfd, FIONBIO, &iMode) != NO_ERROR)
-    return UA_STATUSCODE_BADINTERNALERROR;
-  return UA_STATUSCODE_GOOD;;
-}
-
-void UA_initialize_architecture_network(void){
-  WSADATA wsaData;
-  WSAStartup(MAKEWORD(2, 2), &wsaData);
-}
-
-void UA_deinitialize_architecture_network(void){
-  WSACleanup();
-}
-
-#endif /* UA_ARCHITECTURE_WIN32 */
diff --git a/ext/open62541/arch/win32/ua_clock.c b/ext/open62541/arch/win32/ua_clock.c
deleted file mode 100644
index 600c3dd..0000000
--- a/ext/open62541/arch/win32/ua_clock.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. 
- *
- *    Copyright 2016-2017 (c) Julius Pfrommer, Fraunhofer IOSB
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Thomas Stalder
- */
-
-#ifdef UA_ARCHITECTURE_WIN32
-
-#ifndef _BSD_SOURCE
-# define _BSD_SOURCE
-#endif
-
-#include <open62541/types.h>
-
-#include <time.h>
-/* Backup definition of SLIST_ENTRY on mingw winnt.h */
-# ifdef SLIST_ENTRY
-#  pragma push_macro("SLIST_ENTRY")
-#  undef SLIST_ENTRY
-#  define POP_SLIST_ENTRY
-# endif
-# include <windows.h>
-/* restore definition */
-# ifdef POP_SLIST_ENTRY
-#  undef SLIST_ENTRY
-#  undef POP_SLIST_ENTRY
-#  pragma pop_macro("SLIST_ENTRY")
-# endif
-
-UA_DateTime UA_DateTime_now(void) {
-    /* Windows filetime has the same definition as UA_DateTime */
-    FILETIME ft;
-    SYSTEMTIME st;
-    GetSystemTime(&st);
-    SystemTimeToFileTime(&st, &ft);
-    ULARGE_INTEGER ul;
-    ul.LowPart = ft.dwLowDateTime;
-    ul.HighPart = ft.dwHighDateTime;
-    return (UA_DateTime)ul.QuadPart;
-}
-
-/* Credit to https://stackoverflow.com/questions/13804095/get-the-time-zone-gmt-offset-in-c */
-UA_Int64 UA_DateTime_localTimeUtcOffset(void) {
-    time_t gmt, rawtime = time(NULL);
-
-    struct tm ptm;
-    gmtime_s(&ptm, &rawtime);
-    // Request that mktime() looksup dst in timezone database
-    ptm.tm_isdst = -1;
-    gmt = mktime(&ptm);
-
-    return (UA_Int64) (difftime(rawtime, gmt) * UA_DATETIME_SEC);
-}
-
-UA_DateTime UA_DateTime_nowMonotonic(void) {
-    LARGE_INTEGER freq, ticks;
-    QueryPerformanceFrequency(&freq);
-    QueryPerformanceCounter(&ticks);
-    UA_Double ticks2dt = UA_DATETIME_SEC / (UA_Double)freq.QuadPart;
-    return (UA_DateTime)(ticks.QuadPart * ticks2dt);
-}
-
-#endif /* UA_ARCHITECTURE_WIN32 */
diff --git a/ext/open62541/azure-pipelines.yml b/ext/open62541/azure-pipelines.yml
deleted file mode 100644
index 079f69a..0000000
--- a/ext/open62541/azure-pipelines.yml
+++ /dev/null
@@ -1,99 +0,0 @@
-# Docs see here:
-# https://aka.ms/yaml
-
-
-variables:
-  vcpkg_cache: C:/vcpkg/installed
-
-jobs:
-- job: 'win_vs2017'
-  displayName: 'Windows (VS2017)'
-  pool:
-    vmImage: 'vs2017-win2016'
-  variables:
-    CC_NAME: Visual Studio 15 2017
-    CC_SHORTNAME: VS2017
-    GENERATOR: Visual Studio 15 2017
-    FORCE_CXX: OFF
-  steps:
-  - checkout: self
-    submodules: recursive
-
-  - task: CacheBeta@0
-    inputs:
-      key: $(Build.SourcesDirectory)/tools/azure-devops/install.ps1
-      path: $(vcpkg_cache)
-    displayName: Cache vcpkg
-
-  - powershell: ./tools/azure-devops/install.ps1
-    displayName: Install Requirements
-  - powershell: ./tools/azure-devops/build.ps1
-    displayName: "Build: $(CC_NAME)"
-
-  - task: PublishBuildArtifacts@1
-    inputs:
-        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
-        ArtifactName: open62541-$(CC_SHORTNAME)
-        # publishing artifacts from PRs from a fork is currently blocked
-    condition: succeeded()
-    displayName: "Publish Artifact: open62541-$(CC_SHORTNAME)"
-
-
-- job: 'win_msys64'
-  displayName: 'Windows (msys64)'
-  pool:
-    vmImage: 'windows-latest'
-  variables:
-    CC_NAME: MinGW Makefiles
-    CC_SHORTNAME: mingw
-    GENERATOR: MinGW Makefiles
-    FORCE_CXX: OFF
-    MSYS2_ROOT: C:/msys64
-  steps:
-  - checkout: self
-    submodules: recursive
-
-  - powershell: ./tools/azure-devops/install.ps1
-    displayName: Install Requirements
-  - powershell: ./tools/azure-devops/build.ps1
-    displayName: "Build: $(CC_NAME)"
-    errorActionPreference: continue # If set to Stop, we only get a truncated exception message. Error is handled by checking exit code
-
-
-  - task: PublishBuildArtifacts@1
-    inputs:
-        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
-        ArtifactName: open62541-$(CC_SHORTNAME)
-        # publishing artifacts from PRs from a fork is currently blocked
-    condition: succeeded()
-    displayName: "Publish Artifact: open62541-$(CC_SHORTNAME)"
-
-
-
-- job: 'win_clang'
-  displayName: 'Windows (clang)'
-  pool:
-    vmImage: 'windows-latest'
-  variables:
-    CC_NAME: Clang
-    CC_SHORTNAME: clang-mingw
-    GENERATOR: MinGW Makefiles
-    FORCE_CXX: OFF
-    MSYS2_ROOT: C:/msys64
-  steps:
-  - checkout: self
-    submodules: recursive
-
-  - powershell: ./tools/azure-devops/install.ps1
-    displayName: Install Requirements
-  - powershell: ./tools/azure-devops/build.ps1
-    displayName: "Build: $(CC_NAME)"
-    errorActionPreference: continue # If set to Stop, we only get a truncated exception message. Error is handled by checking exit code
-
-  - task: PublishBuildArtifacts@1
-    inputs:
-        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
-        ArtifactName: open62541-$(CC_SHORTNAME)
-        # publishing artifacts from PRs from a fork is currently blocked
-    condition: succeeded()
-    displayName: "Publish Artifact: open62541-$(CC_SHORTNAME)"
diff --git a/ext/open62541/cppcheck-suppressions.txt b/ext/open62541/cppcheck-suppressions.txt
deleted file mode 100644
index cdadc90..0000000
--- a/ext/open62541/cppcheck-suppressions.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-missingIncludeSystem

-unusedFunction

-*:build

diff --git a/ext/open62541/debian/changelog b/ext/open62541/debian/changelog
deleted file mode 100644
index 10af1da..0000000
--- a/ext/open62541/debian/changelog
+++ /dev/null
@@ -1,5 +0,0 @@
-open62541 (1.0) UNRELEASED; urgency=low
-
-  * Initial Release.
-
- -- open62541 Team <open62541-core@googlegroups.com>  Fri, 19 Jul 2019 10:51:28 +0100
diff --git a/ext/open62541/debian/compat b/ext/open62541/debian/compat
deleted file mode 100644
index 7f8f011..0000000
--- a/ext/open62541/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-7
diff --git a/ext/open62541/debian/control-template b/ext/open62541/debian/control-template
deleted file mode 100644
index 648c6f0..0000000
--- a/ext/open62541/debian/control-template
+++ /dev/null
@@ -1,36 +0,0 @@
-Source: open62541
-Priority: optional
-Maintainer: open62541 Team <open62541-core@googlegroups.com>
-Build-Depends: debhelper (>= 7.0.50~),
- cmake (>= 2.8),
- git,
- graphviz,
- python (>= 2.7),
-Standards-Version: 4.1.2
-Section: libs
-Homepage: https://open62541.org/
-Vcs-Git: https://github.com/open62541/open62541.git
-Vcs-Browser: https://github.com/open62541/open62541
-
-Package: libopen62541-<soname>-dev
-Section: libdevel
-Architecture: any
-Multi-Arch: same
-Depends: libopen62541-<soname> (= ${binary:Version}), ${misc:Depends}, python
-Description: Development header files for open62541
- open62541 is an open source C (C99) implementation of the OPC UA standard
-
-Package: libopen62541-<soname>
-Architecture: any
-Multi-Arch: same
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Description: Open source implementation of OPC UA (OPC Unified Architecture) aka IEC 62541
- open62541 is an open source C (C99) implementation of the OPC UA standard
-
-Package: libopen62541-<soname>-dbg
-Section: debug
-Architecture: any
-Priority: extra
-Depends: libopen62541-<soname> (= ${binary:Version}), ${misc:Depends}
-Description: Debugging symbols for open62541
- open62541 is an open source C (C99) implementation of the OPC UA standard
diff --git a/ext/open62541/debian/copyright b/ext/open62541/debian/copyright
deleted file mode 100644
index fe89b57..0000000
--- a/ext/open62541/debian/copyright
+++ /dev/null
@@ -1,388 +0,0 @@
-Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Upstream-Name: open62541
-Upstream-Contact: open62541 Team <open62541-core@googlegroups.com>
-Source: https://open62541.org/
-
-Files: *
-Copyright: 2019 open62541 Team <open62541-core@googlegroups.com>
-License: MPL-2.0
-
-Files: debian/*
-Copyright: 2019 open62541 Team <open62541-core@googlegroups.com>
-License: MPL-2.0
-
-License: MPL-2.0
- Mozilla Public License Version 2.0
- ==================================
-
- 1. Definitions
- --------------
-
- 1.1. "Contributor"
-     means each individual or legal entity that creates, contributes to
-     the creation of, or owns Covered Software.
-
- 1.2. "Contributor Version"
-     means the combination of the Contributions of others (if any) used
-     by a Contributor and that particular Contributor's Contribution.
-
- 1.3. "Contribution"
-     means Covered Software of a particular Contributor.
-
- 1.4. "Covered Software"
-     means Source Code Form to which the initial Contributor has attached
-     the notice in Exhibit A, the Executable Form of such Source Code
-     Form, and Modifications of such Source Code Form, in each case
-     including portions thereof.
-
- 1.5. "Incompatible With Secondary Licenses"
-     means
-
-     (a) that the initial Contributor has attached the notice described
-         in Exhibit B to the Covered Software; or
-
-     (b) that the Covered Software was made available under the terms of
-         version 1.1 or earlier of the License, but not also under the
-         terms of a Secondary License.
-
- 1.6. "Executable Form"
-     means any form of the work other than Source Code Form.
-
- 1.7. "Larger Work"
-     means a work that combines Covered Software with other material, in
-     a separate file or files, that is not Covered Software.
-
- 1.8. "License"
-     means this document.
-
- 1.9. "Licensable"
-     means having the right to grant, to the maximum extent possible,
-     whether at the time of the initial grant or subsequently, any and
-     all of the rights conveyed by this License.
-
- 1.10. "Modifications"
-     means any of the following:
-
-     (a) any file in Source Code Form that results from an addition to,
-         deletion from, or modification of the contents of Covered
-         Software; or
-
-     (b) any new file in Source Code Form that contains any Covered
-         Software.
-
- 1.11. "Patent Claims" of a Contributor
-     means any patent claim(s), including without limitation, method,
-     process, and apparatus claims, in any patent Licensable by such
-     Contributor that would be infringed, but for the grant of the
-     License, by the making, using, selling, offering for sale, having
-     made, import, or transfer of either its Contributions or its
-     Contributor Version.
-
- 1.12. "Secondary License"
-     means either the GNU General Public License, Version 2.0, the GNU
-     Lesser General Public License, Version 2.1, the GNU Affero General
-     Public License, Version 3.0, or any later versions of those
-     licenses.
-
- 1.13. "Source Code Form"
-     means the form of the work preferred for making modifications.
-
- 1.14. "You" (or "Your")
-     means an individual or a legal entity exercising rights under this
-     License. For legal entities, "You" includes any entity that
-     controls, is controlled by, or is under common control with You. For
-     purposes of this definition, "control" means (a) the power, direct
-     or indirect, to cause the direction or management of such entity,
-     whether by contract or otherwise, or (b) ownership of more than
-     fifty percent (50%) of the outstanding shares or beneficial
-     ownership of such entity.
-
- 2. License Grants and Conditions
- --------------------------------
-
- 2.1. Grants
-
- Each Contributor hereby grants You a world-wide, royalty-free,
- non-exclusive license:
-
- (a) under intellectual property rights (other than patent or trademark)
-     Licensable by such Contributor to use, reproduce, make available,
-     modify, display, perform, distribute, and otherwise exploit its
-     Contributions, either on an unmodified basis, with Modifications, or
-     as part of a Larger Work; and
-
- (b) under Patent Claims of such Contributor to make, use, sell, offer
-     for sale, have made, import, and otherwise transfer either its
-     Contributions or its Contributor Version.
-
- 2.2. Effective Date
-
- The licenses granted in Section 2.1 with respect to any Contribution
- become effective for each Contribution on the date the Contributor first
- distributes such Contribution.
-
- 2.3. Limitations on Grant Scope
-
- The licenses granted in this Section 2 are the only rights granted under
- this License. No additional rights or licenses will be implied from the
- distribution or licensing of Covered Software under this License.
- Notwithstanding Section 2.1(b) above, no patent license is granted by a
- Contributor:
-
- (a) for any code that a Contributor has removed from Covered Software;
-     or
-
- (b) for infringements caused by: (i) Your and any other third party's
-     modifications of Covered Software, or (ii) the combination of its
-     Contributions with other software (except as part of its Contributor
-     Version); or
-
- (c) under Patent Claims infringed by Covered Software in the absence of
-     its Contributions.
-
- This License does not grant any rights in the trademarks, service marks,
- or logos of any Contributor (except as may be necessary to comply with
- the notice requirements in Section 3.4).
-
- 2.4. Subsequent Licenses
-
- No Contributor makes additional grants as a result of Your choice to
- distribute the Covered Software under a subsequent version of this
- License (see Section 10.2) or under the terms of a Secondary License (if
- permitted under the terms of Section 3.3).
-
- 2.5. Representation
-
- Each Contributor represents that the Contributor believes its
- Contributions are its original creation(s) or it has sufficient rights
- to grant the rights to its Contributions conveyed by this License.
-
- 2.6. Fair Use
-
- This License is not intended to limit any rights You have under
- applicable copyright doctrines of fair use, fair dealing, or other
- equivalents.
-
- 2.7. Conditions
-
- Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
- in Section 2.1.
-
- 3. Responsibilities
- -------------------
-
- 3.1. Distribution of Source Form
-
- All distribution of Covered Software in Source Code Form, including any
- Modifications that You create or to which You contribute, must be under
- the terms of this License. You must inform recipients that the Source
- Code Form of the Covered Software is governed by the terms of this
- License, and how they can obtain a copy of this License. You may not
- attempt to alter or restrict the recipients' rights in the Source Code
- Form.
-
- 3.2. Distribution of Executable Form
-
- If You distribute Covered Software in Executable Form then:
-
- (a) such Covered Software must also be made available in Source Code
-     Form, as described in Section 3.1, and You must inform recipients of
-     the Executable Form how they can obtain a copy of such Source Code
-     Form by reasonable means in a timely manner, at a charge no more
-     than the cost of distribution to the recipient; and
-
- (b) You may distribute such Executable Form under the terms of this
-     License, or sublicense it under different terms, provided that the
-     license for the Executable Form does not attempt to limit or alter
-     the recipients' rights in the Source Code Form under this License.
-
- 3.3. Distribution of a Larger Work
-
- You may create and distribute a Larger Work under terms of Your choice,
- provided that You also comply with the requirements of this License for
- the Covered Software. If the Larger Work is a combination of Covered
- Software with a work governed by one or more Secondary Licenses, and the
- Covered Software is not Incompatible With Secondary Licenses, this
- License permits You to additionally distribute such Covered Software
- under the terms of such Secondary License(s), so that the recipient of
- the Larger Work may, at their option, further distribute the Covered
- Software under the terms of either this License or such Secondary
- License(s).
-
- 3.4. Notices
-
- You may not remove or alter the substance of any license notices
- (including copyright notices, patent notices, disclaimers of warranty,
- or limitations of liability) contained within the Source Code Form of
- the Covered Software, except that You may alter any license notices to
- the extent required to remedy known factual inaccuracies.
-
- 3.5. Application of Additional Terms
-
- You may choose to offer, and to charge a fee for, warranty, support,
- indemnity or liability obligations to one or more recipients of Covered
- Software. However, You may do so only on Your own behalf, and not on
- behalf of any Contributor. You must make it absolutely clear that any
- such warranty, support, indemnity, or liability obligation is offered by
- You alone, and You hereby agree to indemnify every Contributor for any
- liability incurred by such Contributor as a result of warranty, support,
- indemnity or liability terms You offer. You may include additional
- disclaimers of warranty and limitations of liability specific to any
- jurisdiction.
-
- 4. Inability to Comply Due to Statute or Regulation
- ---------------------------------------------------
-
- If it is impossible for You to comply with any of the terms of this
- License with respect to some or all of the Covered Software due to
- statute, judicial order, or regulation then You must: (a) comply with
- the terms of this License to the maximum extent possible; and (b)
- describe the limitations and the code they affect. Such description must
- be placed in a text file included with all distributions of the Covered
- Software under this License. Except to the extent prohibited by statute
- or regulation, such description must be sufficiently detailed for a
- recipient of ordinary skill to be able to understand it.
-
- 5. Termination
- --------------
-
- 5.1. The rights granted under this License will terminate automatically
- if You fail to comply with any of its terms. However, if You become
- compliant, then the rights granted under this License from a particular
- Contributor are reinstated (a) provisionally, unless and until such
- Contributor explicitly and finally terminates Your grants, and (b) on an
- ongoing basis, if such Contributor fails to notify You of the
- non-compliance by some reasonable means prior to 60 days after You have
- come back into compliance. Moreover, Your grants from a particular
- Contributor are reinstated on an ongoing basis if such Contributor
- notifies You of the non-compliance by some reasonable means, this is the
- first time You have received notice of non-compliance with this License
- from such Contributor, and You become compliant prior to 30 days after
- Your receipt of the notice.
-
- 5.2. If You initiate litigation against any entity by asserting a patent
- infringement claim (excluding declaratory judgment actions,
- counter-claims, and cross-claims) alleging that a Contributor Version
- directly or indirectly infringes any patent, then the rights granted to
- You by any and all Contributors for the Covered Software under Section
- 2.1 of this License shall terminate.
-
- 5.3. In the event of termination under Sections 5.1 or 5.2 above, all
- end user license agreements (excluding distributors and resellers) which
- have been validly granted by You or Your distributors under this License
- prior to termination shall survive termination.
-
- ************************************************************************
- *                                                                      *
- *  6. Disclaimer of Warranty                                           *
- *  -------------------------                                           *
- *                                                                      *
- *  Covered Software is provided under this License on an "as is"       *
- *  basis, without warranty of any kind, either expressed, implied, or  *
- *  statutory, including, without limitation, warranties that the       *
- *  Covered Software is free of defects, merchantable, fit for a        *
- *  particular purpose or non-infringing. The entire risk as to the     *
- *  quality and performance of the Covered Software is with You.        *
- *  Should any Covered Software prove defective in any respect, You     *
- *  (not any Contributor) assume the cost of any necessary servicing,   *
- *  repair, or correction. This disclaimer of warranty constitutes an   *
- *  essential part of this License. No use of any Covered Software is   *
- *  authorized under this License except under this disclaimer.         *
- *                                                                      *
- ************************************************************************
-
- ************************************************************************
- *                                                                      *
- *  7. Limitation of Liability                                          *
- *  --------------------------                                          *
- *                                                                      *
- *  Under no circumstances and under no legal theory, whether tort      *
- *  (including negligence), contract, or otherwise, shall any           *
- *  Contributor, or anyone who distributes Covered Software as          *
- *  permitted above, be liable to You for any direct, indirect,         *
- *  special, incidental, or consequential damages of any character      *
- *  including, without limitation, damages for lost profits, loss of    *
- *  goodwill, work stoppage, computer failure or malfunction, or any    *
- *  and all other commercial damages or losses, even if such party      *
- *  shall have been informed of the possibility of such damages. This   *
- *  limitation of liability shall not apply to liability for death or   *
- *  personal injury resulting from such party's negligence to the       *
- *  extent applicable law prohibits such limitation. Some               *
- *  jurisdictions do not allow the exclusion or limitation of           *
- *  incidental or consequential damages, so this exclusion and          *
- *  limitation may not apply to You.                                    *
- *                                                                      *
- ************************************************************************
-
- 8. Litigation
- -------------
-
- Any litigation relating to this License may be brought only in the
- courts of a jurisdiction where the defendant maintains its principal
- place of business and such litigation shall be governed by laws of that
- jurisdiction, without reference to its conflict-of-law provisions.
- Nothing in this Section shall prevent a party's ability to bring
- cross-claims or counter-claims.
-
- 9. Miscellaneous
- ----------------
-
- This License represents the complete agreement concerning the subject
- matter hereof. If any provision of this License is held to be
- unenforceable, such provision shall be reformed only to the extent
- necessary to make it enforceable. Any law or regulation which provides
- that the language of a contract shall be construed against the drafter
- shall not be used to construe this License against a Contributor.
-
- 10. Versions of the License
- ---------------------------
-
- 10.1. New Versions
-
- Mozilla Foundation is the license steward. Except as provided in Section
- 10.3, no one other than the license steward has the right to modify or
- publish new versions of this License. Each version will be given a
- distinguishing version number.
-
- 10.2. Effect of New Versions
-
- You may distribute the Covered Software under the terms of the version
- of the License under which You originally received the Covered Software,
- or under the terms of any subsequent version published by the license
- steward.
-
- 10.3. Modified Versions
-
- If you create software not governed by this License, and you want to
- create a new license for such software, you may create and use a
- modified version of this License if you rename the license and remove
- any references to the name of the license steward (except to note that
- such modified license differs from this License).
-
- 10.4. Distributing Source Code Form that is Incompatible With Secondary
- Licenses
-
- If You choose to distribute Source Code Form that is Incompatible With
- Secondary Licenses under the terms of this version of the License, the
- notice described in Exhibit B of this License must be attached.
-
- Exhibit A - Source Code Form License Notice
- -------------------------------------------
-
-   This Source Code Form is subject to the terms of the Mozilla Public
-   License, v. 2.0. If a copy of the MPL was not distributed with this
-   file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
- If it is not possible or desirable to put the notice in a particular
- file, then You may include the notice in a location (such as a LICENSE
- file in a relevant directory) where a recipient would be likely to look
- for such a notice.
-
- You may add additional accurate notices of copyright ownership.
-
- Exhibit B - "Incompatible With Secondary Licenses" Notice
- ---------------------------------------------------------
-
-   This Source Code Form is "Incompatible With Secondary Licenses", as
-   defined by the Mozilla Public License, v. 2.0.
-
diff --git a/ext/open62541/debian/libopen62541-dev.install-template b/ext/open62541/debian/libopen62541-dev.install-template
deleted file mode 100644
index e5fb818..0000000
--- a/ext/open62541/debian/libopen62541-dev.install-template
+++ /dev/null
@@ -1,5 +0,0 @@
-usr/include
-usr/lib/*/{*.a,*.so}
-usr/lib/*/cmake/open62541/*
-usr/lib/*/pkgconfig/open62541.pc
-usr/share/open62541/*
diff --git a/ext/open62541/debian/libopen62541.install-template b/ext/open62541/debian/libopen62541.install-template
deleted file mode 100644
index 3de3b10..0000000
--- a/ext/open62541/debian/libopen62541.install-template
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib/*/*.so.*
diff --git a/ext/open62541/debian/rules-template b/ext/open62541/debian/rules-template
deleted file mode 100644
index e455ae7..0000000
--- a/ext/open62541/debian/rules-template
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/make -f
-
-export DH_VERBOSE = 1
-
-export DEB_BUILD_OPTIONS=parallel=4
-
-override_dh_auto_configure:
-	dh_auto_configure -- -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUA_NAMESPACE_ZERO=FULL -DUA_ENABLE_AMALGAMATION=OFF -DUA_PACK_DEBIAN=ON
-
-override_dh_auto_test:
-	dh_auto_test -- ARGS+=--output-on-failure
-
-override_dh_strip:
-	dh_strip --dbg-package=libopen62541-<soname>-dbg
-
-%:
-	dh $@ --buildsystem=cmake --parallel
-
-
diff --git a/ext/open62541/debian/source/format b/ext/open62541/debian/source/format
deleted file mode 100644
index 89ae9db..0000000
--- a/ext/open62541/debian/source/format
+++ /dev/null
@@ -1 +0,0 @@
-3.0 (native)
diff --git a/ext/open62541/deps/atoi.c b/ext/open62541/deps/atoi.c
deleted file mode 100644
index 8911c5d..0000000
--- a/ext/open62541/deps/atoi.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Originally released by the musl project (http://www.musl-libc.org/) under the
- * MIT license. Taken and adapted from the file src/stdlib/atoi.c 
-
-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.
- */
-
-#include "atoi.h"
-
-UA_StatusCode atoiUnsigned(const char *s, size_t size, UA_UInt64 *result){
-    if(size < 1){   
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-    
-    size_t i = 0; 
-    UA_UInt64 n = 0;
-    
-    while ( i < size) {
-        /*isDigit*/
-        if ( s[i] >= '0' && s[i] <= '9' )
-        {
-          n *= 10;
-          n = (n + (UA_UInt64)(s[i] - '0'));
-          i++;
-        }else{
-            return UA_STATUSCODE_BADDECODINGERROR;
-        }
-    }
-    
-    *result = n;
-    return UA_STATUSCODE_GOOD;
-   }
-
-UA_StatusCode atoiSigned(const char *s, size_t size, UA_Int64 *result){
-    if(size < 1){   
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-    
-    size_t i = 0; 
-    UA_Int64 n = 0;
-    UA_Boolean neg = 0; 
-    
-    if(*s == '-'){
-        neg = 1;
-        i++;
-    }
-    while ( i < size) {
-        if ( s[i] >= '0' && s[i] <= '9' )
-        {
-          n *= 10;
-          n = (n + (s[i] - '0'));
-          i++;
-        }else{
-            return UA_STATUSCODE_BADDECODINGERROR;
-        }
-    }
-    
-    if (neg){
-       n *= -1;
-    }
-    
-    *result = n;
-    return UA_STATUSCODE_GOOD;
-   }
diff --git a/ext/open62541/deps/atoi.h b/ext/open62541/deps/atoi.h
deleted file mode 100644
index e624ecd..0000000
--- a/ext/open62541/deps/atoi.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef ATOI_H
-#define ATOI_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <open62541/types.h>
-
-UA_StatusCode atoiUnsigned(const char *s, size_t size, UA_UInt64 *result);
-UA_StatusCode atoiSigned(const char *s, size_t size, UA_Int64 *result);
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ATOI_H */
-
diff --git a/ext/open62541/deps/base64.c b/ext/open62541/deps/base64.c
deleted file mode 100644
index 2eb32cd..0000000
--- a/ext/open62541/deps/base64.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Base64 encoding: Copyright (c) 2005-2011, Jouni Malinen <j@w1.fi>
- * This software may be distributed under the terms of the BSD license.
- *
- * Base64 decoding: Copyright (c) 2016, polfosol
- * Posted at https://stackoverflow.com/a/37109258 under the CC-BY-SA Creative
- * Commons license.
- */
-
-#include "base64.h"
-#include <open62541/types.h>
-
-static const unsigned char base64_table[65] =
-	"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-unsigned char *
-UA_base64(const unsigned char *src, size_t len, size_t *out_len) {
-    if(len == 0) {
-        *out_len = 0;
-        return (unsigned char*)UA_EMPTY_ARRAY_SENTINEL;
-    }
-
-	size_t olen = 4*((len + 2) / 3); /* 3-byte blocks to 4-byte */
-	if(olen < len)
-		return NULL; /* integer overflow */
-
-	unsigned char *out = (unsigned char*)UA_malloc(olen);
-	if(!out)
-		return NULL;
-
-	const unsigned char *end = src + len;
-	const unsigned char *in = src;
-	unsigned char *pos = out;
-	while(end - in >= 3) {
-		*pos++ = base64_table[in[0] >> 2];
-		*pos++ = base64_table[((in[0] & 0x03) << 4) | (in[1] >> 4)];
-		*pos++ = base64_table[((in[1] & 0x0f) << 2) | (in[2] >> 6)];
-		*pos++ = base64_table[in[2] & 0x3f];
-		in += 3;
-	}
-
-	if(end - in) {
-		*pos++ = base64_table[in[0] >> 2];
-		if(end - in == 1) {
-			*pos++ = base64_table[(in[0] & 0x03) << 4];
-			*pos++ = '=';
-		} else {
-			*pos++ = base64_table[((in[0] & 0x03) << 4) | (in[1] >> 4)];
-			*pos++ = base64_table[(in[1] & 0x0f) << 2];
-		}
-		*pos++ = '=';
-	}
-
-    *out_len = (size_t)(pos - out);
-	return out;
-}
-
-static const uint32_t from_b64[256] = {
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  62, 63, 62, 62, 63,
-    52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0,  0,  0,  0,  0,  0,
-    0,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12, 13, 14,
-    15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0,  0,  0,  0,  63,
-    0,  26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
-    41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51};
-
-unsigned char *
-UA_unbase64(const unsigned char *src, size_t len, size_t *out_len) {
-    if(len == 0) {
-        *out_len = 0;
-        return (unsigned char*)UA_EMPTY_ARRAY_SENTINEL;
-    }
-
-    const unsigned char *p = src;
-    size_t pad1 = len % 4 || p[len - 1] == '=';
-    size_t pad2 = pad1 && (len % 4 > 2 || p[len - 2] != '=');
-    const size_t last = (len - pad1) / 4 << 2;
-
-    unsigned char *str = (unsigned char*)UA_malloc(last / 4 * 3 + pad1 + pad2);
-    if(!str)
-        return NULL;
-
-    unsigned char *pos = str;
-    for(size_t i = 0; i < last; i += 4) {
-        uint32_t n = from_b64[p[i]] << 18 | from_b64[p[i + 1]] << 12 |
-                     from_b64[p[i + 2]] << 6 | from_b64[p[i + 3]];
-        *pos++ = (unsigned char)(n >> 16);
-        *pos++ = (unsigned char)(n >> 8 & 0xFF);
-        *pos++ = (unsigned char)(n & 0xFF);
-    }
-
-    if(pad1) {
-        uint32_t n = from_b64[p[last]] << 18 | from_b64[p[last + 1]] << 12;
-        *pos++ = (unsigned char)(n >> 16);
-        if(pad2) {
-            n |= from_b64[p[last + 2]] << 6;
-            *pos++ = (unsigned char)(n >> 8 & 0xFF);
-        }
-    }
-
-    *out_len = (uintptr_t)(pos - str);
-    return str;
-}
diff --git a/ext/open62541/deps/base64.h b/ext/open62541/deps/base64.h
deleted file mode 100644
index 33de7b4..0000000
--- a/ext/open62541/deps/base64.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef UA_BASE64_H_
-#define UA_BASE64_H_
-
-#include <open62541/config.h>
-
-_UA_BEGIN_DECLS
-
-#include <stddef.h>
-
-/**
- * base64_encode - Base64 encode
- * @src: Data to be encoded
- * @len: Length of the data to be encoded
- * @out_len: Pointer to output length variable
- * Returns: Allocated buffer of out_len bytes of encoded data,
- * or %NULL on failure. The output is NOT Null-terminated. */
-unsigned char *
-UA_base64(const unsigned char *src, size_t len, size_t *out_len);
-
-/**
- * base64_decode - Base64 decode
- * @src: Data to be decoded
- * @len: Length of the data to be decoded
- * @out_len: Pointer to output length variable
- * Returns: Allocated buffer of out_len bytes of decoded data,
- * or %NULL on failure. */
-unsigned char *
-UA_unbase64(const unsigned char *src, size_t len, size_t *out_len);
-
-_UA_END_DECLS
-
-#endif /* UA_BASE64_H_ */
diff --git a/ext/open62541/deps/itoa.c b/ext/open62541/deps/itoa.c
deleted file mode 100644
index 40a2af6..0000000
--- a/ext/open62541/deps/itoa.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright 2017 Techie Delight
- * 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.
- */
-
-/* Originally released by techiedelight.com 
- * (http://www.techiedelight.com/implement-itoa-function-in-c/) under the
- * MIT license. */
-
-#include "itoa.h"
-
-static void swap(char *x, char *y) {
-    char t = *x;
-    *x = *y;
-    *y = t;
-}
-
-/* function to reverse buffer */
-static char* reverse(char *buffer, UA_UInt16 i, UA_UInt16 j) {
-    while (i < j)
-        swap(&buffer[i++], &buffer[j--]);
-
-    return buffer;
-}
-
-/* adapted from http://www.techiedelight.com/implement-itoa-function-in-c/ to use UA_... types */
-UA_UInt16 itoaUnsigned(UA_UInt64 value, char* buffer, UA_Byte base) {
-    /* consider absolute value of number */
-    UA_UInt64 n = value;
-
-    UA_UInt16 i = 0;
-    while (n) {
-        UA_UInt64 r = n % base;
-
-        if (r >= 10)
-            buffer[i++] = (char)(65 + (r - 10));
-        else
-            buffer[i++] = (char)(48 + r);
-
-        n = n / base;
-    }
-    /* if number is 0 */
-    if (i == 0)
-        buffer[i++] = '0';
-
-    buffer[i] = '\0'; /* null terminate string */
-    i--;
-    /* reverse the string */
-    reverse(buffer, 0, i);
-    i++;
-    return i;
-}
-
-/* adapted from http://www.techiedelight.com/implement-itoa-function-in-c/ to use UA_... types */
-UA_UInt16 itoaSigned(UA_Int64 value, char* buffer) {
-    /* consider absolute value of number */
-    UA_UInt64 n = (UA_UInt64)value;
-
-    if(value < 0){
-        n = (UA_UInt64)-value;
-    }
-    
-    UA_UInt16 i = 0;
-    while (n) {
-        UA_UInt64 r = n % 10;
-
-        if (r >= 10)
-            buffer[i++] = (char)(65 + (r - 10));
-        else
-            buffer[i++] = (char)(48 + r);
-
-        n = n / 10;
-    }
-
-    /* if number is 0 */
-    if (i == 0)
-        buffer[i++] = '0';
-
-    if (value < 0)
-        buffer[i++] = '-';
-
-    buffer[i] = '\0'; /* null terminate string */
-    i--;
-    /* reverse the string and return it */
-    reverse(buffer, 0, i);
-    i++;
-    return i;
-}
-
diff --git a/ext/open62541/deps/itoa.h b/ext/open62541/deps/itoa.h
deleted file mode 100644
index 1e899f0..0000000
--- a/ext/open62541/deps/itoa.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2017 Techie Delight
- * 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.
- */
-
-#ifndef ITOA_H
-#define ITOA_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <open62541/types.h>
-
-UA_UInt16 itoaUnsigned(UA_UInt64 value, char* buffer, UA_Byte base);
-UA_UInt16 itoaSigned(UA_Int64 value, char* buffer);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ITOA_H */
-
diff --git a/ext/open62541/deps/jsmn/jsmn.c b/ext/open62541/deps/jsmn/jsmn.c
deleted file mode 100644
index 8a187e7..0000000
--- a/ext/open62541/deps/jsmn/jsmn.c
+++ /dev/null
@@ -1,316 +0,0 @@
-#include "jsmn.h"
-
-#define JSMN_STRICT
-
-/**
- * Allocates a fresh unused token from the token pull.
- */
-static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser,
-		jsmntok_t *tokens, size_t num_tokens) {
-	jsmntok_t *tok;
-	if (parser->toknext >= num_tokens) {
-		return NULL;
-	}
-	tok = &tokens[parser->toknext++];
-	tok->start = tok->end = -1;
-	tok->size = 0;
-#ifdef JSMN_PARENT_LINKS
-	tok->parent = -1;
-#endif
-	return tok;
-}
-
-/**
- * Fills token type and boundaries.
- */
-static void jsmn_fill_token(jsmntok_t *token, jsmntype_t type,
-                            int start, int end) {
-	token->type = type;
-	token->start = start;
-	token->end = end;
-	token->size = 0;
-}
-
-/**
- * Fills next available token with JSON primitive.
- */
-static int jsmn_parse_primitive(jsmn_parser *parser, const char *js,
-		size_t len, jsmntok_t *tokens, size_t num_tokens) {
-	jsmntok_t *token;
-	int start;
-
-	start = (int)parser->pos;
-
-	for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
-		switch (js[parser->pos]) {
-#ifndef JSMN_STRICT
-			/* In strict mode primitive must be followed by "," or "}" or "]" */
-			case ':':
-#endif
-			case '\t' : case '\r' : case '\n' : case ' ' :
-			case ','  : case ']'  : case '}' :
-				goto found;
-		}
-		if (js[parser->pos] < 32 || js[parser->pos] >= 127) {
-			parser->pos = (unsigned int)start;
-			return JSMN_ERROR_INVAL;
-		}
-	}
-#ifdef JSMN_STRICT
-	/* In strict mode primitive must be followed by a comma/object/array */
-	parser->pos = (unsigned int)start;
-	return JSMN_ERROR_PART;
-#endif
-
-found:
-	if (tokens == NULL) {
-		parser->pos--;
-		return 0;
-	}
-	token = jsmn_alloc_token(parser, tokens, num_tokens);
-	if (token == NULL) {
-		parser->pos = (unsigned int)start;
-		return JSMN_ERROR_NOMEM;
-	}
-	jsmn_fill_token(token, JSMN_PRIMITIVE, start, (int)parser->pos);
-#ifdef JSMN_PARENT_LINKS
-	token->parent = parser->toksuper;
-#endif
-	parser->pos--;
-	return 0;
-}
-
-/**
- * Fills next token with JSON string.
- */
-static int jsmn_parse_string(jsmn_parser *parser, const char *js,
-		size_t len, jsmntok_t *tokens, size_t num_tokens) {
-	jsmntok_t *token;
-
-	unsigned int start = parser->pos;
-
-	parser->pos++;
-
-	/* Skip starting quote */
-	for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
-		char c = js[parser->pos];
-
-		/* Quote: end of string */
-		if (c == '\"') {
-			if (tokens == NULL) {
-				return 0;
-			}
-			token = jsmn_alloc_token(parser, tokens, num_tokens);
-			if (token == NULL) {
-				parser->pos = start;
-				return JSMN_ERROR_NOMEM;
-			}
-			jsmn_fill_token(token, JSMN_STRING, (int)(start+1), (int)parser->pos);
-#ifdef JSMN_PARENT_LINKS
-			token->parent = parser->toksuper;
-#endif
-			return 0;
-		}
-
-		/* Backslash: Quoted symbol expected */
-		if (c == '\\' && parser->pos + 1 < len) {
-			int i;
-			parser->pos++;
-			switch (js[parser->pos]) {
-				/* Allowed escaped symbols */
-				case '\"': case '/' : case '\\' : case 'b' :
-				case 'f' : case 'r' : case 'n'  : case 't' :
-					break;
-				/* Allows escaped symbol \uXXXX */
-				case 'u':
-					parser->pos++;
-					for(i = 0; i < 4 && parser->pos < len && js[parser->pos] != '\0'; i++) {
-						/* If it isn't a hex character we have an error */
-						if(!((js[parser->pos] >= 48 && js[parser->pos] <= 57) || /* 0-9 */
-									(js[parser->pos] >= 65 && js[parser->pos] <= 70) || /* A-F */
-									(js[parser->pos] >= 97 && js[parser->pos] <= 102))) { /* a-f */
-							parser->pos = start;
-							return JSMN_ERROR_INVAL;
-						}
-						parser->pos++;
-					}
-					parser->pos--;
-					break;
-				/* Unexpected symbol */
-				default:
-					parser->pos = start;
-					return JSMN_ERROR_INVAL;
-			}
-		}
-	}
-	parser->pos = start;
-	return JSMN_ERROR_PART;
-}
-
-/**
- * Parse JSON string and fill tokens.
- */
-int jsmn_parse(jsmn_parser *parser, const char *js, size_t len,
-		jsmntok_t *tokens, unsigned int num_tokens) {
-	int r;
-	int i;
-	jsmntok_t *token;
-	unsigned int count = parser->toknext;
-
-	for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
-		char c;
-		jsmntype_t type;
-
-		c = js[parser->pos];
-		switch (c) {
-			case '{': case '[':
-				count++;
-				if (tokens == NULL) {
-					break;
-				}
-				token = jsmn_alloc_token(parser, tokens, num_tokens);
-				if (token == NULL)
-					return JSMN_ERROR_NOMEM;
-				if (parser->toksuper != -1) {
-					tokens[parser->toksuper].size++;
-#ifdef JSMN_PARENT_LINKS
-					token->parent = parser->toksuper;
-#endif
-				}
-				token->type = (c == '{' ? JSMN_OBJECT : JSMN_ARRAY);
-				token->start = (int)parser->pos;
-				parser->toksuper = (int)parser->toknext - 1;
-				break;
-			case '}': case ']':
-				if (tokens == NULL)
-					break;
-				type = (c == '}' ? JSMN_OBJECT : JSMN_ARRAY);
-#ifdef JSMN_PARENT_LINKS
-				if (parser->toknext < 1) {
-					return JSMN_ERROR_INVAL;
-				}
-				token = &tokens[parser->toknext - 1];
-				for (;;) {
-					if (token->start != -1 && token->end == -1) {
-						if (token->type != type) {
-							return JSMN_ERROR_INVAL;
-						}
-						token->end = parser->pos + 1;
-						parser->toksuper = token->parent;
-						break;
-					}
-					if (token->parent == -1) {
-						if(token->type != type || parser->toksuper == -1) {
-							return JSMN_ERROR_INVAL;
-						}
-						break;
-					}
-					token = &tokens[token->parent];
-				}
-#else
-				for (i = (int)parser->toknext - 1; i >= 0; i--) {
-					token = &tokens[i];
-					if (token->start != -1 && token->end == -1) {
-						if (token->type != type) {
-							return JSMN_ERROR_INVAL;
-						}
-						parser->toksuper = -1;
-						token->end = (int)parser->pos + 1;
-						break;
-					}
-				}
-				/* Error if unmatched closing bracket */
-				if (i == -1) return JSMN_ERROR_INVAL;
-				for (; i >= 0; i--) {
-					token = &tokens[i];
-					if (token->start != -1 && token->end == -1) {
-						parser->toksuper = i;
-						break;
-					}
-				}
-#endif
-				break;
-			case '\"':
-				r = jsmn_parse_string(parser, js, len, tokens, num_tokens);
-				if (r < 0) return r;
-				count++;
-				if (parser->toksuper != -1 && tokens != NULL)
-					tokens[parser->toksuper].size++;
-				break;
-			case '\t' : case '\r' : case '\n' : case ' ':
-				break;
-			case ':':
-				parser->toksuper = (int)parser->toknext - 1;
-				break;
-			case ',':
-				if (tokens != NULL && parser->toksuper != -1 &&
-						tokens[parser->toksuper].type != JSMN_ARRAY &&
-						tokens[parser->toksuper].type != JSMN_OBJECT) {
-#ifdef JSMN_PARENT_LINKS
-					parser->toksuper = tokens[parser->toksuper].parent;
-#else
-					for (i = (int)parser->toknext - 1; i >= 0; i--) {
-						if (tokens[i].type == JSMN_ARRAY || tokens[i].type == JSMN_OBJECT) {
-							if (tokens[i].start != -1 && tokens[i].end == -1) {
-								parser->toksuper = i;
-								break;
-							}
-						}
-					}
-#endif
-				}
-				break;
-#ifdef JSMN_STRICT
-			/* In strict mode primitives are: numbers and booleans */
-			case '-': case '0': case '1' : case '2': case '3' : case '4':
-			case '5': case '6': case '7' : case '8': case '9':
-			case 't': case 'f': case 'n' :
-				/* And they must not be keys of the object */
-				if (tokens != NULL && parser->toksuper != -1) {
-					jsmntok_t *t = &tokens[parser->toksuper];
-					if (t->type == JSMN_OBJECT ||
-							(t->type == JSMN_STRING && t->size != 0)) {
-						return JSMN_ERROR_INVAL;
-					}
-				}
-#else
-			/* In non-strict mode every unquoted value is a primitive */
-			default:
-#endif
-				r = jsmn_parse_primitive(parser, js, len, tokens, num_tokens);
-				if (r < 0) return r;
-				count++;
-				if (parser->toksuper != -1 && tokens != NULL)
-					tokens[parser->toksuper].size++;
-				break;
-
-#ifdef JSMN_STRICT
-			/* Unexpected char in strict mode */
-			default:
-				return JSMN_ERROR_INVAL;
-#endif
-		}
-	}
-
-	if (tokens != NULL) {
-		for (i = (int)parser->toknext - 1; i >= 0; i--) {
-			/* Unmatched opened object or array */
-			if (tokens[i].start != -1 && tokens[i].end == -1) {
-				return JSMN_ERROR_PART;
-			}
-		}
-	}
-
-	return (int)count;
-}
-
-/**
- * Creates a new parser based over a given  buffer with an array of tokens
- * available.
- */
-void jsmn_init(jsmn_parser *parser) {
-	parser->pos = 0;
-	parser->toknext = 0;
-	parser->toksuper = -1;
-}
-
diff --git a/ext/open62541/deps/jsmn/jsmn.h b/ext/open62541/deps/jsmn/jsmn.h
deleted file mode 100644
index 055687f..0000000
--- a/ext/open62541/deps/jsmn/jsmn.h
+++ /dev/null
@@ -1,77 +0,0 @@
-#ifndef __JSMN_H_
-#define __JSMN_H_
-
-#include <stddef.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * JSON type identifier. Basic types are:
- * 	o Object
- * 	o Array
- * 	o String
- * 	o Other primitive: number, boolean (true/false) or null
- */
-typedef enum {
-	JSMN_UNDEFINED = 0,
-	JSMN_OBJECT = 1,
-	JSMN_ARRAY = 2,
-	JSMN_STRING = 3,
-	JSMN_PRIMITIVE = 4,
-        JSMN_PROCESSED = 5
-} jsmntype_t;
-
-enum jsmnerr {
-	/* Not enough tokens were provided */
-	JSMN_ERROR_NOMEM = -1,
-	/* Invalid character inside JSON string */
-	JSMN_ERROR_INVAL = -2,
-	/* The string is not a full JSON packet, more bytes expected */
-	JSMN_ERROR_PART = -3
-};
-
-/**
- * JSON token description.
- * type		type (object, array, string etc.)
- * start	start position in JSON data string
- * end		end position in JSON data string
- */
-typedef struct {
-	jsmntype_t type;
-	int start;
-	int end;
-	int size;
-#ifdef JSMN_PARENT_LINKS
-	int parent;
-#endif
-} jsmntok_t;
-
-/**
- * JSON parser. Contains an array of token blocks available. Also stores
- * the string being parsed now and current position in that string
- */
-typedef struct {
-	unsigned int pos; /* offset in the JSON string */
-	unsigned int toknext; /* next token to allocate */
-	int toksuper; /* superior token node, e.g parent object or array */
-} jsmn_parser;
-
-/**
- * Create JSON parser over an array of tokens
- */
-void jsmn_init(jsmn_parser *parser);
-
-/**
- * Run JSON parser. It parses a JSON data string into and array of tokens, each describing
- * a single JSON object.
- */
-int jsmn_parse(jsmn_parser *parser, const char *js, size_t len,
-		jsmntok_t *tokens, unsigned int num_tokens);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __JSMN_H_ */
diff --git a/ext/open62541/deps/libc_time.c b/ext/open62541/deps/libc_time.c
deleted file mode 100644
index a1aa7e9..0000000
--- a/ext/open62541/deps/libc_time.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/* Originally released by the musl project (http://www.musl-libc.org/) under the
- * MIT license. Taken from the file /src/time/__secs_to_tm.c */
-
-#include <limits.h>
-#include "libc_time.h"
-
-/* 2000-03-01 (mod 400 year, immediately after feb29 */
-#define LEAPOCH (946684800LL + 86400*(31+29))
-
-#define DAYS_PER_400Y (365*400 + 97)
-#define DAYS_PER_100Y (365*100 + 24)
-#define DAYS_PER_4Y   (365*4   + 1)
-
-int __secs_to_tm(long long t, struct mytm *tm) {
-    long long days, secs, years;
-    int remdays, remsecs, remyears;
-    int qc_cycles, c_cycles, q_cycles;
-    int months;
-    int wday, yday, leap;
-    static const char days_in_month[] = {31,30,31,30,31,31,30,31,30,31,31,29};
-
-    /* Reject time_t values whose year would overflow int */
-    if (t < INT_MIN * 31622400LL || t > INT_MAX * 31622400LL)
-        return -1;
-
-    secs = t - LEAPOCH;
-    days = secs / 86400LL;
-    remsecs = (int)(secs % 86400);
-    if (remsecs < 0) {
-        remsecs += 86400;
-        --days;
-    }
-
-    wday = (int)((3+days)%7);
-    if (wday < 0) wday += 7;
-
-    qc_cycles = (int)(days / DAYS_PER_400Y);
-    remdays = (int)(days % DAYS_PER_400Y);
-    if (remdays < 0) {
-        remdays += DAYS_PER_400Y;
-        --qc_cycles;
-    }
-
-    c_cycles = remdays / DAYS_PER_100Y;
-    if (c_cycles == 4) --c_cycles;
-    remdays -= c_cycles * DAYS_PER_100Y;
-
-    q_cycles = remdays / DAYS_PER_4Y;
-    if (q_cycles == 25) --q_cycles;
-    remdays -= q_cycles * DAYS_PER_4Y;
-
-    remyears = remdays / 365;
-    if (remyears == 4) --remyears;
-    remdays -= remyears * 365;
-
-    leap = !remyears && (q_cycles || !c_cycles);
-    yday = remdays + 31 + 28 + leap;
-    if (yday >= 365+leap) yday -= 365+leap;
-
-    years = remyears + 4*q_cycles + 100*c_cycles + 400LL*qc_cycles;
-
-    for (months=0; days_in_month[months] <= remdays; ++months)
-        remdays -= days_in_month[months];
-
-    if (years+100 > INT_MAX || years+100 < INT_MIN)
-        return -1;
-
-    tm->tm_year = (int)(years + 100);
-    tm->tm_mon = months + 2;
-    if (tm->tm_mon >= 12) {
-        tm->tm_mon -=12;
-        ++tm->tm_year;
-    }
-    tm->tm_mday = remdays + 1;
-    tm->tm_wday = wday;
-    tm->tm_yday = yday;
-
-    tm->tm_hour = remsecs / 3600;
-    tm->tm_min = remsecs / 60 % 60;
-    tm->tm_sec = remsecs % 60;
-
-    return 0;
-}
-
-int __month_to_secs(int month, int is_leap) {
-    static const int secs_through_month[] =
-        {0, 31*86400, 59*86400, 90*86400,
-         120*86400, 151*86400, 181*86400, 212*86400,
-         243*86400, 273*86400, 304*86400, 334*86400 };
-    int t = secs_through_month[month];
-    if (is_leap && month >= 2)
-        t+=86400;
-    return t;
-}
-
-long long __year_to_secs(long long year, int *is_leap) {
-    if (year-(int)2ULL <= 136) {
-        long long y = (int)year;
-        long long leaps = (y-68)>>2;
-        if (!((y-8)&3)) {
-            leaps--;
-            if (is_leap) *is_leap = 1;
-        } else if (is_leap) *is_leap = 0;
-        return 31536000*(y-70) + 86400*leaps;
-    }
-
-    int cycles, centuries, leaps, rem;
-
-    //if (!is_leap) is_leap = &(int){0};
-    int is_leap_val = 0;
-    if (!is_leap) {
-        is_leap = &is_leap_val;
-    }
-    cycles = (int)((year-100) / 400);
-    rem = (int)((year-100) % 400);
-    /* Comparison is always false because rem >= 0.
-    if (rem < 0) {
-        cycles--;
-        rem += 400;
-    } */
-    if (!rem) {
-        *is_leap = 1;
-        centuries = 0;
-        leaps = 0;
-    } else {
-        if (rem >= 200) {
-            if (rem >= 300) centuries = 3, rem -= 300;
-            else centuries = 2, rem -= 200;
-        } else {
-            if (rem >= 100) centuries = 1, rem -= 100;
-            else centuries = 0;
-        }
-        if (!rem) {
-            *is_leap = 0;
-            leaps = 0;
-        } else {
-            leaps = (rem / (int)4U);
-            rem %= (int)4U;
-            *is_leap = !rem;
-        }
-    }
-
-    leaps += 97*cycles + 24*centuries - *is_leap;
-
-    return (year-100) * 31536000LL + leaps * 86400LL + 946684800 + 86400;
-}
-
-long long __tm_to_secs(const struct mytm *tm) {
-    int is_leap;
-    long long year = tm->tm_year;
-    int month = tm->tm_mon;
-    if (month >= 12 || month < 0) {
-        int adj = month / 12;
-        month %= 12;
-        if (month < 0) {
-            adj--;
-            month += 12;
-        }
-        year += adj;
-    }
-    long long t = __year_to_secs(year, &is_leap);
-    t += __month_to_secs(month, is_leap);
-    t += 86400LL * (tm->tm_mday-1);
-    t += 3600LL * tm->tm_hour;
-    t += 60LL * tm->tm_min;
-    t += tm->tm_sec;
-    return t;
-}
diff --git a/ext/open62541/deps/libc_time.h b/ext/open62541/deps/libc_time.h
deleted file mode 100644
index ba53d46..0000000
--- a/ext/open62541/deps/libc_time.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef LIBC_TIME_H_
-#define LIBC_TIME_H_
-
-struct mytm {
-    int tm_sec;
-    int tm_min;
-    int tm_hour;
-    int tm_mday;
-    int tm_mon;
-    int tm_year;
-    int tm_wday;
-    int tm_yday;
-};
-
-int __secs_to_tm(long long t, struct mytm *tm);
-int __month_to_secs(int month, int is_leap);
-long long __year_to_secs(long long year, int *is_leap);
-long long __tm_to_secs(const struct mytm *tm);
-
-#endif /* LIBC_TIME_H_ */
diff --git a/ext/open62541/deps/ms_stdint.h b/ext/open62541/deps/ms_stdint.h
deleted file mode 100644
index 4ab6722..0000000
--- a/ext/open62541/deps/ms_stdint.h
+++ /dev/null
@@ -1,257 +0,0 @@
-// ISO C9x  compliant stdint.h for Microsoft Visual Studio
-// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 
-// 
-//  Copyright (c) 2006-2013 Alexander Chemeris
-// 
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-// 
-//   1. Redistributions of source code must retain the above copyright notice,
-//      this list of conditions and the following disclaimer.
-// 
-//   2. Redistributions in binary form must reproduce the above copyright
-//      notice, this list of conditions and the following disclaimer in the
-//      documentation and/or other materials provided with the distribution.
-// 
-//   3. Neither the name of the product nor the names of its contributors may
-//      be used to endorse or promote products derived from this software
-//      without specific prior written permission.
-// 
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// 
-///////////////////////////////////////////////////////////////////////////////
-
-#if !defined(_MSC_VER) || _MSC_VER >= 1600 // [
-#include <stdint.h>
-#else
-
-#ifndef _MSC_STDINT_H_ // [
-#define _MSC_STDINT_H_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif
-
-#include <limits.h>
-
-// For Visual Studio 6 in C++ mode and for many Visual Studio versions when
-// compiling for ARM we should wrap <wchar.h> include with 'extern "C++" {}'
-// or compiler give many errors like this:
-//   error C2733: second C linkage of overloaded function 'wmemchr' not allowed
-#ifndef UNDER_CE
-#ifdef __cplusplus
-extern "C" {
-#endif
-#  include <wchar.h>
-#ifdef __cplusplus
-}
-#endif
-#endif
-
-// Define _W64 macros to mark types changing their size, like intptr_t.
-#ifndef _W64
-#  if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
-#     define _W64 __w64
-#  else
-#     define _W64
-#  endif
-#endif
-
-
-// 7.18.1 Integer types
-
-// 7.18.1.1 Exact-width integer types
-
-// Visual Studio 6 and Embedded Visual C++ 4 doesn't
-// realize that, e.g. char has the same size as __int8
-// so we give up on __intX for them.
-#if (_MSC_VER < 1300)
-   typedef signed char       int8_t;
-   typedef signed short      int16_t;
-   typedef signed int        int32_t;
-   typedef unsigned char     uint8_t;
-   typedef unsigned short    uint16_t;
-   typedef unsigned int      uint32_t;
-#else
-   typedef signed __int8     int8_t;
-   typedef signed __int16    int16_t;
-   typedef signed __int32    int32_t;
-   typedef unsigned __int8   uint8_t;
-   typedef unsigned __int16  uint16_t;
-   typedef unsigned __int32  uint32_t;
-#endif
-typedef signed __int64       int64_t;
-typedef unsigned __int64     uint64_t;
-
-
-// 7.18.1.2 Minimum-width integer types
-typedef int8_t    int_least8_t;
-typedef int16_t   int_least16_t;
-typedef int32_t   int_least32_t;
-typedef int64_t   int_least64_t;
-typedef uint8_t   uint_least8_t;
-typedef uint16_t  uint_least16_t;
-typedef uint32_t  uint_least32_t;
-typedef uint64_t  uint_least64_t;
-
-// 7.18.1.3 Fastest minimum-width integer types
-typedef int8_t    int_fast8_t;
-typedef int16_t   int_fast16_t;
-typedef int32_t   int_fast32_t;
-typedef int64_t   int_fast64_t;
-typedef uint8_t   uint_fast8_t;
-typedef uint16_t  uint_fast16_t;
-typedef uint32_t  uint_fast32_t;
-typedef uint64_t  uint_fast64_t;
-
-// 7.18.1.4 Integer types capable of holding object pointers
-#ifdef _WIN64 // [
-   typedef signed __int64    intptr_t;
-   typedef unsigned __int64  uintptr_t;
-#else // _WIN64 ][
-   typedef _W64 signed int   intptr_t;
-   typedef _W64 unsigned int uintptr_t;
-#endif // _WIN64 ]
-
-// 7.18.1.5 Greatest-width integer types
-typedef int64_t   intmax_t;
-typedef uint64_t  uintmax_t;
-
-
-// 7.18.2 Limits of specified-width integer types
-
-#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [   See footnote 220 at page 257 and footnote 221 at page 259
-
-// 7.18.2.1 Limits of exact-width integer types
-#define INT8_MIN     ((int8_t)_I8_MIN)
-#define INT8_MAX     _I8_MAX
-#define INT16_MIN    ((int16_t)_I16_MIN)
-#define INT16_MAX    _I16_MAX
-#define INT32_MIN    ((int32_t)_I32_MIN)
-#define INT32_MAX    _I32_MAX
-#define INT64_MIN    ((int64_t)_I64_MIN)
-#define INT64_MAX    _I64_MAX
-#define UINT8_MAX    _UI8_MAX
-#define UINT16_MAX   _UI16_MAX
-#define UINT32_MAX   _UI32_MAX
-#define UINT64_MAX   _UI64_MAX
-
-// 7.18.2.2 Limits of minimum-width integer types
-#define INT_LEAST8_MIN    INT8_MIN
-#define INT_LEAST8_MAX    INT8_MAX
-#define INT_LEAST16_MIN   INT16_MIN
-#define INT_LEAST16_MAX   INT16_MAX
-#define INT_LEAST32_MIN   INT32_MIN
-#define INT_LEAST32_MAX   INT32_MAX
-#define INT_LEAST64_MIN   INT64_MIN
-#define INT_LEAST64_MAX   INT64_MAX
-#define UINT_LEAST8_MAX   UINT8_MAX
-#define UINT_LEAST16_MAX  UINT16_MAX
-#define UINT_LEAST32_MAX  UINT32_MAX
-#define UINT_LEAST64_MAX  UINT64_MAX
-
-// 7.18.2.3 Limits of fastest minimum-width integer types
-#define INT_FAST8_MIN    INT8_MIN
-#define INT_FAST8_MAX    INT8_MAX
-#define INT_FAST16_MIN   INT16_MIN
-#define INT_FAST16_MAX   INT16_MAX
-#define INT_FAST32_MIN   INT32_MIN
-#define INT_FAST32_MAX   INT32_MAX
-#define INT_FAST64_MIN   INT64_MIN
-#define INT_FAST64_MAX   INT64_MAX
-#define UINT_FAST8_MAX   UINT8_MAX
-#define UINT_FAST16_MAX  UINT16_MAX
-#define UINT_FAST32_MAX  UINT32_MAX
-#define UINT_FAST64_MAX  UINT64_MAX
-
-// 7.18.2.4 Limits of integer types capable of holding object pointers
-#ifdef _WIN64 // [
-#  define INTPTR_MIN   INT64_MIN
-#  define INTPTR_MAX   INT64_MAX
-#  define UINTPTR_MAX  UINT64_MAX
-#else // _WIN64 ][
-#  define INTPTR_MIN   INT32_MIN
-#  define INTPTR_MAX   INT32_MAX
-#  define UINTPTR_MAX  UINT32_MAX
-#endif // _WIN64 ]
-
-// 7.18.2.5 Limits of greatest-width integer types
-#define INTMAX_MIN   INT64_MIN
-#define INTMAX_MAX   INT64_MAX
-#define UINTMAX_MAX  UINT64_MAX
-
-// 7.18.3 Limits of other integer types
-
-#ifdef _WIN64 // [
-#  define PTRDIFF_MIN  _I64_MIN
-#  define PTRDIFF_MAX  _I64_MAX
-#else  // _WIN64 ][
-#  define PTRDIFF_MIN  _I32_MIN
-#  define PTRDIFF_MAX  _I32_MAX
-#endif  // _WIN64 ]
-
-#define SIG_ATOMIC_MIN  INT_MIN
-#define SIG_ATOMIC_MAX  INT_MAX
-
-#ifndef SIZE_MAX // [
-#  ifdef _WIN64 // [
-#     define SIZE_MAX  _UI64_MAX
-#  else // _WIN64 ][
-#     define SIZE_MAX  _UI32_MAX
-#  endif // _WIN64 ]
-#endif // SIZE_MAX ]
-
-// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
-#ifndef WCHAR_MIN // [
-#  define WCHAR_MIN  0
-#endif  // WCHAR_MIN ]
-#ifndef WCHAR_MAX // [
-#  define WCHAR_MAX  _UI16_MAX
-#endif  // WCHAR_MAX ]
-
-#define WINT_MIN  0
-#define WINT_MAX  _UI16_MAX
-
-#endif // __STDC_LIMIT_MACROS ]
-
-
-// 7.18.4 Limits of other integer types
-
-#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [   See footnote 224 at page 260
-
-// 7.18.4.1 Macros for minimum-width integer constants
-
-#define INT8_C(val)  val##i8
-#define INT16_C(val) val##i16
-#define INT32_C(val) val##i32
-#define INT64_C(val) val##i64
-
-#define UINT8_C(val)  val##ui8
-#define UINT16_C(val) val##ui16
-#define UINT32_C(val) val##ui32
-#define UINT64_C(val) val##ui64
-
-// 7.18.4.2 Macros for greatest-width integer constants
-// These #ifndef's are needed to prevent collisions with <boost/cstdint.hpp>.
-// Check out Issue 9 for the details.
-#ifndef INTMAX_C //   [
-#  define INTMAX_C   INT64_C
-#endif // INTMAX_C    ]
-#ifndef UINTMAX_C //  [
-#  define UINTMAX_C  UINT64_C
-#endif // UINTMAX_C   ]
-
-#endif // __STDC_CONSTANT_MACROS ]
-
-#endif // _MSC_STDINT_H_ ]
-
-#endif // !defined(_MSC_VER) || _MSC_VER >= 1600 ]
diff --git a/ext/open62541/deps/musl/floatscan.c b/ext/open62541/deps/musl/floatscan.c
deleted file mode 100644
index 6484c06..0000000
--- a/ext/open62541/deps/musl/floatscan.c
+++ /dev/null
@@ -1,719 +0,0 @@
-/* Originally released by the musl project (http://www.musl-libc.org/) under the
- * MIT license. Taken from the file src/internal/floatscan.c*/
-
-#include <stdint.h>
-#include <math.h>
-#include <limits.h>
-#include <errno.h>
-#include <ctype.h>
-
-#include "floatscan.h"
-#include "vfprintf.h"
-int shgetc(char* input, int *index);
-void shunget(int *index);
-int shlim(int a, int b);
-
-int shgetc(char* input, int *index){
-    int res = input[*index];
-    (*index)++;
-    return res;
-}
-
-void shunget(int *index){
-    (*index)--;
-}
-int shlim(int a, int b){
-    return '0';
-}
-
-
-#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
-long double fmodl(long double x, long double y)
-{
-	return fmod(x, y);
-}
-#elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
-long double fmodl(long double x, long double y)
-{
-	union ldshape ux = {x}, uy = {y};
-	int ex = ux.i.se & 0x7fff;
-	int ey = uy.i.se & 0x7fff;
-	int sx = ux.i.se & 0x8000;
-
-	if (y == 0 || isnan(y) || ex == 0x7fff)
-		return (x*y)/(x*y);
-	ux.i.se = (uint16_t)ex;
-	uy.i.se = (uint16_t)ey;
-	if (ux.f <= uy.f) {
-		if (ux.f == uy.f)
-			return 0*x;
-		return x;
-	}
-
-	/* normalize x and y */
-	if (!ex) {
-		ux.f *= 0x1p120f;
-		ex = ux.i.se - 120;
-	}
-	if (!ey) {
-		uy.f *= 0x1p120f;
-		ey = uy.i.se - 120;
-	}
-
-	/* x mod y */
-#if LDBL_MANT_DIG == 64
-	uint64_t i, mx, my;
-	mx = ux.i.m;
-	my = uy.i.m;
-	for (; ex > ey; ex--) {
-		i = mx - my;
-		if (mx >= my) {
-			if (i == 0)
-				return 0*x;
-			mx = 2*i;
-		} else if (2*mx < mx) {
-			mx = 2*mx - my;
-		} else {
-			mx = 2*mx;
-		}
-	}
-	i = mx - my;
-	if (mx >= my) {
-		if (i == 0)
-			return 0*x;
-		mx = i;
-	}
-	for (; mx >> 63 == 0; mx *= 2, ex--);
-	ux.i.m = mx;
-#elif LDBL_MANT_DIG == 113
-	uint64_t hi, lo, xhi, xlo, yhi, ylo;
-	xhi = (ux.i2.hi & -1ULL>>16) | 1ULL<<48;
-	yhi = (uy.i2.hi & -1ULL>>16) | 1ULL<<48;
-	xlo = ux.i2.lo;
-	ylo = uy.i2.lo;
-	for (; ex > ey; ex--) {
-		hi = xhi - yhi;
-		lo = xlo - ylo;
-		if (xlo < ylo)
-			hi -= 1;
-		if (hi >> 63 == 0) {
-			if ((hi|lo) == 0)
-				return 0*x;
-			xhi = 2*hi + (lo>>63);
-			xlo = 2*lo;
-		} else {
-			xhi = 2*xhi + (xlo>>63);
-			xlo = 2*xlo;
-		}
-	}
-	hi = xhi - yhi;
-	lo = xlo - ylo;
-	if (xlo < ylo)
-		hi -= 1;
-	if (hi >> 63 == 0) {
-		if ((hi|lo) == 0)
-			return 0*x;
-		xhi = hi;
-		xlo = lo;
-	}
-	for (; xhi >> 48 == 0; xhi = 2*xhi + (xlo>>63), xlo = 2*xlo, ex--);
-	ux.i2.hi = xhi;
-	ux.i2.lo = xlo;
-#endif
-
-	/* scale result */
-	if (ex <= 0) {
-		ux.i.se = (uint16_t)((ex+120)|sx);
-		ux.f *= (uint16_t)(0x1p-120f);
-	} else
-		ux.i.se = (uint16_t)(ex|sx);
-	return ux.f;
-}
-#endif
-
-
-#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
-long double copysignl(long double x, long double y)
-{
-	return copysign(x, y);
-}
-#elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
-long double copysignl(long double x, long double y)
-{
-	union ldshape ux = {x}, uy = {y};
-	ux.i.se &= 0x7fff;
-	ux.i.se = (uint16_t)(ux.i.se | (uy.i.se & 0x8000));
-	return ux.f;
-}
-#endif
-
-double scalbn(double x, int n)
-{
-	union {double f; uint64_t i;} u;
-	double_t y = x;
-
-	if (n > 1023) {
-		y *= 0x1p1023;
-		n -= 1023;
-		if (n > 1023) {
-			y *= 0x1p1023;
-			n -= 1023;
-			if (n > 1023)
-				n = 1023;
-		}
-	} else if (n < -1022) {
-		/* make sure final n < -53 to avoid double
-		   rounding in the subnormal range */
-		y *= 0x1p-1022 * 0x1p53;
-		n += 1022 - 53;
-		if (n < -1022) {
-			y *= 0x1p-1022 * 0x1p53;
-			n += 1022 - 53;
-			if (n < -1022)
-				n = -1022;
-		}
-	}
-	u.i = (uint64_t)(0x3ff+n)<<52;
-	x = y * u.f;
-	return x;
-}
-
-#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
-
-#define LD_B1B_DIG 2
-#define LD_B1B_MAX 9007199, 254740991
-#define KMAX 128
-
-#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384
-
-#define LD_B1B_DIG 3
-#define LD_B1B_MAX 18, 446744073, 709551615
-#define KMAX 2048
-
-#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
-
-#define LD_B1B_DIG 4
-#define LD_B1B_MAX 10384593, 717069655, 257060992, 658440191
-#define KMAX 2048
-
-#else
-#error Unsupported long double representation
-#endif
-
-#define MASK (KMAX-1)
-
-#define CONCAT2(x,y) x ## y
-#define CONCAT(x,y) CONCAT2(x,y)
-
-
-#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
-long double scalbnl(long double x, int n)
-{
-	return scalbn(x, n);
-}
-#elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
-long double scalbnl(long double x, int n)
-{
-	union ldshape u;
-
-	if (n > 16383) {
-		x *= 0x1p16383L;
-		n -= 16383;
-		if (n > 16383) {
-			x *= 0x1p16383L;
-			n -= 16383;
-			if (n > 16383)
-				n = 16383;
-		}
-	} else if (n < -16382) {
-		x *= 0x1p-16382L * 0x1p113L;
-		n += 16382 - 113;
-		if (n < -16382) {
-			x *= 0x1p-16382L * 0x1p113L;
-			n += 16382 - 113;
-			if (n < -16382)
-				n = -16382;
-		}
-	}
-	u.f = 1.0;
-	u.i.se = (uint16_t)(0x3fff + n);
-	return x * u.f;
-}
-#endif
-
-static long long scanexp(char* input, int *index, int pok)
-{
-	int c;
-	int x;
-	long long y;
-	int neg = 0;
-	
-	c = shgetc(input, index);
-	if (c=='+' || c=='-') {
-		neg = (c=='-');
-		c = shgetc(input, index);
-		if ((unsigned)(c-'0')>=10U && pok) shunget(index);
-	}
-	if ((unsigned)(c-'0')>=10U) {
-		shunget(index);
-		return LLONG_MIN;
-	}
-	for (x=0; (unsigned)(c-'0')<10U && x<INT_MAX/10; c = shgetc(input, index))
-		x = 10*x + c-'0';
-	for (y=x; (unsigned)(c-'0')<10U && y<LLONG_MAX/100; c = shgetc(input, index))
-		y = 10*y + c-'0';
-	for (; (unsigned)(c-'0')<10U; c = shgetc(input, index));
-	shunget(index);
-	return neg ? -y : y;
-}
-
-
-static long double decfloat(char *input, int *index, int c, int bits, int emin, int sign, int pok)
-{
-	uint32_t x[KMAX];
-	static const uint32_t th[] = { LD_B1B_MAX };
-	int i, j, k, a, z;
-	long long lrp=0, dc=0;
-	long long e10=0;
-	int lnz = 0;
-	int gotdig = 0, gotrad = 0;
-	int rp;
-	int e2;
-	int emax = -emin-bits+3;
-	int denormal = 0;
-	long double y;
-	long double frac=0;
-	long double bias=0;
-	static const int p10s[] = { 10, 100, 1000, 10000,
-		100000, 1000000, 10000000, 100000000 };
-
-	j=0;
-	k=0;
-
-	/* Don't let leading zeros consume buffer space */
-	for (; c=='0'; c = shgetc(input, index)) gotdig=1;
-	if (c=='.') {
-		gotrad = 1;
-		for (c = shgetc(input, index); c=='0'; c = shgetc(input, index)) gotdig=1, lrp--;
-	}
-
-	x[0] = 0;
-	for (; (unsigned)(c-'0')<10U || c=='.'; c = shgetc(input, index)) {
-		if (c == '.') {
-			if (gotrad) break;
-			gotrad = 1;
-			lrp = dc;
-		} else if (k < KMAX-3) {
-			dc++;
-			if (c!='0') lnz = (int)dc;
-			if (j) x[k] = (x[k]*10 + (uint32_t)(c-'0'));
-			else x[k] = (uint32_t)(c-'0');
-			if (++j==9) {
-				k++;
-				j=0;
-			}
-			gotdig=1;
-		} else {
-			dc++;
-			if (c!='0') {
-				lnz = (KMAX-4)*9;
-				x[KMAX-4] |= 1;
-			}
-		}
-	}
-	if (!gotrad) lrp=dc;
-
-	if (gotdig && (c|32)=='e') {
-		e10 = scanexp(input, index, pok);
-		if (e10 == LLONG_MIN) {
-			if (pok) {
-				shunget(index);
-			} else {
-				//shlim(f, 0);
-				return 0;
-			}
-			e10 = 0;
-		}
-		lrp += e10;
-	} else if (c>=0) {
-		shunget(index);
-	}
-	if (!gotdig) {
-		errno = EINVAL;
-		//shlim(f, 0);
-		return 0;
-	}
-
-	/* Handle zero specially to avoid nasty special cases later */
-	if (!x[0]) return sign * 0.0;
-
-	/* Optimize small integers (w/no exponent) and over/under-flow */
-	if (lrp==dc && dc<10 && (bits>30 || x[0]>>bits==0))
-		return sign * (long double)x[0];
-	if (lrp > -emin/2) {
-		errno = ERANGE;
-		return sign * LDBL_MAX * LDBL_MAX;
-	}
-	if (lrp < emin-2*LDBL_MANT_DIG) {
-		errno = ERANGE;
-		return sign * LDBL_MIN * LDBL_MIN;
-	}
-
-	/* Align incomplete final B1B digit */
-	if (j) {
-		for (; j<9; j++) x[k]*=10;
-		k++;
-		//j=0;
-	}
-
-	a = 0;
-	z = k;
-	e2 = 0;
-	rp = (int)lrp;
-
-	/* Optimize small to mid-size integers (even in exp. notation) */
-	if (lnz<9 && lnz<=rp && rp < 18) {
-		if (rp == 9) return sign * (long double)x[0];
-		if (rp < 9) return sign * (long double)x[0] / p10s[8-rp];
-		int bitlim = bits-3*(int)(rp-9);
-		if (bitlim>30 || x[0]>>bitlim==0)
-			return sign * (long double)x[0] * p10s[rp-10];
-	}
-
-	/* Drop trailing zeros */
-	for (; !x[z-1]; z--);
-
-	/* Align radix point to B1B digit boundary */
-	if (rp % 9) {
-		int rpm9 = rp>=0 ? rp%9 : rp%9+9;
-		int p10 = p10s[8-rpm9];
-		uint32_t carry = 0;
-		for (k=a; k!=z; k++) {
-			uint32_t tmp = (x[k] % (uint32_t)p10);
-			x[k] = x[k]/(uint32_t)p10 + carry;
-			carry = 1000000000/(uint32_t)p10 * tmp;
-			if (k==a && !x[k]) {
-				a = ((a+1) & MASK);
-				rp -= 9;
-			}
-		}
-		if (carry) x[z++] = carry;
-		rp += 9-rpm9;
-	}
-
-	/* Upscale until desired number of bits are left of radix point */
-	while (rp < 9*LD_B1B_DIG || (rp == 9*LD_B1B_DIG && x[a]<th[0])) {
-		uint32_t carry = 0;
-		e2 -= 29;
-		for (k=((z-1) & MASK); ; k=((k-1) & MASK)) {
-			uint64_t tmp = ((uint64_t)x[k] << 29) + carry;
-			if (tmp > 1000000000) {
-				carry = (uint32_t)(tmp / 1000000000);
-				x[k] = (uint32_t)(tmp % 1000000000);
-			} else {
-				carry = 0;
-				x[k] = (uint32_t)tmp;
-			}
-			if (k==((z-1) & MASK) && k!=a && !x[k]) z = k;
-			if (k==a) break;
-		}
-		if (carry) {
-			rp += 9;
-			a = ((a-1) & MASK);
-			if (a == z) {
-				z = ((z-1) & MASK);
-				x[(z-1) & MASK] |= x[z];
-			}
-			x[a] = carry;
-		}
-	}
-
-	/* Downscale until exactly number of bits are left of radix point */
-	for (;;) {
-		uint32_t carry = 0;
-		int sh = 1;
-		for (i=0; i<LD_B1B_DIG; i++) {
-			k = ((a+i) & MASK);
-			if (k == z || x[k] < th[i]) {
-				i=LD_B1B_DIG;
-				break;
-			}
-			if (x[(a+i) & MASK] > th[i]) break;
-		}
-		if (i==LD_B1B_DIG && rp==9*LD_B1B_DIG) break;
-		/* FIXME: find a way to compute optimal sh */
-		if (rp > 9+9*LD_B1B_DIG) sh = 9;
-		e2 += sh;
-		for (k=a; k!=z; k=((k+1) & MASK)) {
-			uint32_t tmp = (x[k] & (uint32_t)((1<<sh)-1));
-			x[k] = (x[k]>>sh) + carry;
-			carry = ((uint32_t)(1000000000>>sh) * tmp);
-			if (k==a && !x[k]) {
-				a = ((a+1) & MASK);
-				i--;
-				rp -= 9;
-			}
-		}
-		if (carry) {
-			if (((z+1) & MASK) != a) {
-				x[z] = carry;
-				z = ((z+1) & MASK);
-			} else x[(z-1) & MASK] |= 1;
-		}
-	}
-
-	/* Assemble desired bits into floating point variable */
-	for (y=i=0; i<LD_B1B_DIG; i++) {
-		if (((a+i) & MASK)==z) x[(z=((z+1) & MASK))-1] = 0;
-		y = 1000000000.0L * y + x[(a+i) & MASK];
-	}
-
-	y *= sign;
-
-	/* Limit precision for denormal results */
-	if (bits > LDBL_MANT_DIG+e2-emin) {
-		bits = LDBL_MANT_DIG+e2-emin;
-		if (bits<0) bits=0;
-		denormal = 1;
-	}
-
-	/* Calculate bias term to force rounding, move out lower bits */
-	if (bits < LDBL_MANT_DIG) {
-		bias = copysignl(scalbn(1, 2*LDBL_MANT_DIG-bits-1), y);
-		frac = fmodl(y, scalbn(1, LDBL_MANT_DIG-bits));
-		y -= frac;
-		y += bias;
-	}
-
-	/* Process tail of decimal input so it can affect rounding */
-	if (((a+i) & MASK) != z) {
-		uint32_t t = x[(a+i) & MASK];
-		if (t < 500000000 && (t || ((a+i+1) & MASK) != z))
-			frac += 0.25*sign;
-		else if (t > 500000000)
-			frac += 0.75*sign;
-		else if (t == 500000000) {
-			if (((a+i+1) & MASK) == z)
-				frac += 0.5*sign;
-			else
-				frac += 0.75*sign;
-		}
-		//if (LDBL_MANT_DIG-bits >= 2 && !fmodl(frac, 1)) implicit conversion turns floating-point number into integer:
-                if (LDBL_MANT_DIG-bits >= 2 && !((_Bool)fmodl(frac, 1)))
-			frac++;
-	}
-
-	y += frac;
-	y -= bias;
-
-	if (((e2+LDBL_MANT_DIG) & INT_MAX) > emax-5) {
-		if (fabs((double)y) >= CONCAT(0x1p, LDBL_MANT_DIG)) {
-			if (denormal && bits==LDBL_MANT_DIG+e2-emin)
-				denormal = 0;
-			y *= 0.5;
-			e2++;
-		}
-                //if (e2+LDBL_MANT_DIG>emax || (denormal && frac)) implicit conversion turns floating-point number into integer:
-		if (e2+LDBL_MANT_DIG>emax || ((_Bool)denormal && (_Bool)frac))
-			errno = ERANGE;
-	}
-
-	return scalbnl(y, e2);
-}
-
-static long double hexfloat(char *input, int *index, int bits, int emin, int sign, int pok)
-{
-	uint32_t x = 0;
-	long double y = 0;
-	long double scale = 1;
-	long double bias = 0;
-	int gottail = 0, gotrad = 0, gotdig = 0;
-	long long rp = 0;
-	long long dc = 0;
-	long long e2 = 0;
-	int d;
-	int c;
-
-	c = shgetc(input, index);
-
-	/* Skip leading zeros */
-	for (; c=='0'; c = shgetc(input, index)) gotdig = 1;
-
-	if (c=='.') {
-		gotrad = 1;
-		c = shgetc(input, index);
-		/* Count zeros after the radix point before significand */
-		for (rp=0; c=='0'; c = shgetc(input, index), rp--) gotdig = 1;
-	}
-
-	for (; (unsigned)(c-'0')<10U || (unsigned)((c|32)-'a')<6U || c=='.'; c = shgetc(input, index)) {
-		if (c=='.') {
-			if (gotrad) break;
-			rp = dc;
-			gotrad = 1;
-		} else {
-			gotdig = 1;
-			if (c > '9') d = (c|32)+10-'a';
-			else d = c-'0';
-			if (dc<8) {
-				x = (x*16 + (uint32_t)d);
-			} else if (dc < LDBL_MANT_DIG/4+1) {
-				y += d*(scale/=16);
-			} else if (d && !gottail) {
-				y += 0.5*scale;
-				gottail = 1;
-			}
-			dc++;
-		}
-	}
-	if (!gotdig) {
-		shunget(index);
-		if (pok) {
-			shunget(index);
-			if (gotrad) shunget(index);
-		} else {
-			//shlim(f, 0);
-		}
-		return sign * 0.0;
-	}
-	if (!gotrad) rp = dc;
-	while (dc<8) x *= 16, dc++;
-	if ((c|32)=='p') {
-		e2 = scanexp(input, index, pok);
-		if (e2 == LLONG_MIN) {
-			if (pok) {
-				shunget(index);
-			} else {
-				//shlim(f, 0);
-				return 0;
-			}
-			e2 = 0;
-		}
-	} else {
-		shunget(index);
-	}
-	e2 += 4*rp - 32;
-
-	if (!x) return sign * 0.0;
-	if (e2 > -emin) {
-		errno = ERANGE;
-		return sign * LDBL_MAX * LDBL_MAX;
-	}
-	if (e2 < emin-2*LDBL_MANT_DIG) {
-		errno = ERANGE;
-		return sign * LDBL_MIN * LDBL_MIN;
-	}
-
-	while (x < 0x80000000) {
-		if (y>=0.5) {
-			x += x + 1;
-			y += y - 1;
-		} else {
-			x += x;
-			y += y;
-		}
-		e2--;
-	}
-
-	if (bits > 32+e2-emin) {
-		bits =(int)(32+e2-emin);
-		if (bits<0) bits=0;
-	}
-
-	if (bits < LDBL_MANT_DIG)
-		bias = copysignl(scalbn(1, 32+LDBL_MANT_DIG-bits-1), sign);
-
-	if (bits<32 && (_Bool)y && !(x&1)) x++, y=0;
-
-	y = bias + sign*(long double)x + sign*y;
-	y -= bias;
-
-	if (!((_Bool)y)) errno = ERANGE;
-
-	return scalbnl(y, (int)e2);
-}
-
-long double __floatscan(char* input, int prec, int pok)
-{
-    int index = 0;
-	int sign = 1;
-	//size_t i;
-        int i;
-	int bits;
-	int emin;
-	int c;
-
-	switch (prec) {
-	case 0:
-		bits = FLT_MANT_DIG;
-		emin = FLT_MIN_EXP-bits;
-		break;
-	case 1:
-		bits = DBL_MANT_DIG;
-		emin = DBL_MIN_EXP-bits;
-		break;
-	case 2:
-		bits = LDBL_MANT_DIG;
-		emin = LDBL_MIN_EXP-bits;
-		break;
-	default:
-		return 0;
-	}
-
-	while (isspace((c=shgetc(input, &index))));
-
-	if (c=='+' || c=='-') {
-		sign -= 2*(c=='-');
-		c = shgetc(input, &index);
-	}
-
-	for (i=0; i<8 && (c|32)=="infinity"[i]; i++)
-		if (i<7) c = shgetc(input, &index);
-	if (i==3 || i==8 || (i>3 && pok)) {
-		if (i!=8) {
-			shunget(&index);
-			if (pok) for (; i>3; i--) shunget(&index);
-		}
-		return ((float)sign * INFINITY);
-	}
-	if (!i) for (i=0; i<3 && (c|32)=="nan"[i]; i++)
-		if (i<2) c = shgetc(input, &index);
-	if (i==3) {
-		if (shgetc(input, &index) != '(') {
-			shunget(&index);
-			return NAN;
-		}
-		for (i=1; ; i++) {
-			c = shgetc(input, &index);
-			if ((unsigned)(c-'0')<10U || (unsigned)(c-'A')<26U || (unsigned)(c-'a')<26U || c=='_')
-				continue;
-			if (c==')') return NAN;
-			shunget(&index);
-			if (!pok) {
-				errno = EINVAL;
-				//shlim(0, 0);
-				return 0;
-			}
-			while (i--) shunget(&index);
-			return NAN;
-		}
-		return NAN;
-	}
-
-	if (i) {
-		shunget(&index);
-		errno = EINVAL;
-		//shlim(0, 0);
-		return 0;
-	}
-
-	if (c=='0') {
-		c = shgetc(input, &index);
-		if ((c|32) == 'x')
-			return hexfloat(input, &index, bits, emin, sign, pok);
-		shunget(&index);
-		c = '0';
-	}
-
-	return decfloat(input, &index, c, bits, emin, sign, pok);
-}
diff --git a/ext/open62541/deps/musl/floatscan.h b/ext/open62541/deps/musl/floatscan.h
deleted file mode 100644
index 1f8553d..0000000
--- a/ext/open62541/deps/musl/floatscan.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef FLOATSCAN_H
-#define FLOATSCAN_H
-
-//#include <stdio.h>
-
-#define FLT_MANT_DIG 24
-#define FLT_MIN_EXP (-125)
-#define FLT_MAX_EXP 128
-#define FLT_HAS_SUBNORM 1
-
-#define DBL_MANT_DIG 53
-#define DBL_MIN_EXP (-1021)
-#define DBL_MAX_EXP 1024
-#define DBL_HAS_SUBNORM 1
-
-long double __floatscan(char*, int, int);
-
-#endif
diff --git a/ext/open62541/deps/musl/vfprintf.c b/ext/open62541/deps/musl/vfprintf.c
deleted file mode 100644
index 688be16..0000000
--- a/ext/open62541/deps/musl/vfprintf.c
+++ /dev/null
@@ -1,514 +0,0 @@
-/* Originally released by the musl project (http://www.musl-libc.org/) under the
- * MIT license. Taken from the file src/stdio/vfprintf.c */
-
-#include <ctype.h>
-#include "floatscan.h"
-#include "vfprintf.h"
-//int isdigit(int);
-//#define isdigit(a) (0 ? isdigit(a) : ((unsigned)(a)-'0') < 10)
-
-long double frexpl(long double x, int *e);
-//#include <math.h>
-#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
-long double frexpl(long double x, int *e)
-{
-	return frexp(x, e);
-}
-#elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
-long double frexpl(long double x, int *e)
-{
-	union ldshape u = {x};
-	int ee = u.i.se & 0x7fff;
-
-	if (!ee) {
-		if ((_Bool)x) {
-			x = frexpl(x*0x1p120, e);
-			*e -= 120;
-		} else *e = 0;
-		return x;
-	} else if (ee == 0x7fff) {
-		return x;
-	}
-
-	*e = ee - 0x3ffe;
-	u.i.se &= 0x8000;
-	u.i.se |= 0x3ffe;
-	return u.f;
-}
-#endif
-
-int __signbitl(long double x);
-#if (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
-int __signbitl(long double x)
-{
-	union ldshape u = {x};
-	return u.i.se >> 15;
-}
-#elif LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
-int __signbitl(long double x)
-{
-	return __signbit(x);
-}
-#endif
-
-static __inline unsigned __FLOAT_BITS(float __f)
-{
-	union {float __f; unsigned __i;} __u;
-	__u.__f = __f;
-	return __u.__i;
-}
-static __inline unsigned long long __DOUBLE_BITS(double __f)
-{
-	union {double __f; unsigned long long __i;} __u;
-	__u.__f = __f;
-	return __u.__i;
-}
-
-#define signbit(x) ( \
-	sizeof(x) == sizeof(float) ? (int)(__FLOAT_BITS((float)x)>>31) : \
-	sizeof(x) == sizeof(double) ? (int)(__DOUBLE_BITS((double)x)>>63) : \
-	__signbitl(x) )
-
-#define FP_NAN       0
-#define FP_INFINITE  1
-#define FP_ZERO      2
-#define FP_SUBNORMAL 3
-#define FP_NORMAL    4
-
-
-int __fpclassifyl(long double x);
-#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
-int __fpclassifyl(long double x)
-{
-	return __fpclassify(x);
-}
-#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384
-int __fpclassifyl(long double x)
-{
-	union ldshape u = {x};
-	int e = u.i.se & 0x7fff;
-	int msb = (int)(u.i.m>>63);
-	if (!e && !msb)
-		return u.i.m ? FP_SUBNORMAL : FP_ZERO;
-	if (!msb)
-		return FP_NAN;
-	if (e == 0x7fff)
-		return u.i.m << 1 ? FP_NAN : FP_INFINITE;
-	return FP_NORMAL;
-}
-#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
-int __fpclassifyl(long double x)
-{
-	union ldshape u = {x};
-	int e = u.i.se & 0x7fff;
-	u.i.se = 0;
-	if (!e)
-		return u.i2.lo | u.i2.hi ? FP_SUBNORMAL : FP_ZERO;
-	if (e == 0x7fff)
-		return u.i2.lo | u.i2.hi ? FP_NAN : FP_INFINITE;
-	return FP_NORMAL;
-}
-#endif
-
-#define isfinite(x) ( \
-	sizeof(x) == sizeof(float) ? (__FLOAT_BITS((float)x) & 0x7fffffff) < 0x7f800000 : \
-	sizeof(x) == sizeof(double) ? (__DOUBLE_BITS((double)x) & -1ULL>>1) < 0x7ffULL<<52 : \
-	__fpclassifyl(x) > FP_INFINITE)
-
-#include "vfprintf.h"
-/* Some useful macros */
-
-#define MAX(a,b) ((a)>(b) ? (a) : (b))
-#define MIN(a,b) ((a)<(b) ? (a) : (b))
-
-/* Convenient bit representation for modifier flags, which all fall
- * within 31 codepoints of the space character. */
-
-#define ALT_FORM   (1U<<('#'-' '))
-#define ZERO_PAD   (1U<<('0'-' '))
-#define LEFT_ADJ   (1U<<('-'-' '))
-#define PAD_POS    (1U<<(' '-' '))
-#define MARK_POS   (1U<<('+'-' '))
-#define GROUPED    (1U<<('\''-' '))
-
-#define FLAGMASK (ALT_FORM|ZERO_PAD|LEFT_ADJ|PAD_POS|MARK_POS|GROUPED)
-
-/* State machine to accept length modifiers + conversion specifiers.
- * Result is 0 on failure, or an argument type to pop on success. */
-
-enum {
-	BARE, LPRE, LLPRE, HPRE, HHPRE, BIGLPRE,
-	ZTPRE, JPRE,
-	STOP,
-	PTR, INT, UINT, ULLONG,
-	LONG, ULONG,
-	SHORT, USHORT, CHAR, UCHAR,
-	LLONG, SIZET, IMAX, UMAX, PDIFF, UIPTR,
-	DBL, LDBL,
-	NOARG,
-	MAXSTATE
-};
-
-#define S(x) [(x)-'A']
-/*
-static const unsigned char states[]['z'-'A'+1] = {
-	{ // 0: bare types 
-		S('d') = INT, S('i') = INT,
-		S('o') = UINT, S('u') = UINT, S('x') = UINT, S('X') = UINT,
-		S('e') = DBL, S('f') = DBL, S('g') = DBL, S('a') = DBL,
-		S('E') = DBL, S('F') = DBL, S('G') = DBL, S('A') = DBL,
-		S('c') = CHAR, S('C') = INT,
-		S('s') = PTR, S('S') = PTR, S('p') = UIPTR, S('n') = PTR,
-		S('m') = NOARG,
-		S('l') = LPRE, S('h') = HPRE, S('L') = BIGLPRE,
-		S('z') = ZTPRE, S('j') = JPRE, S('t') = ZTPRE,
-	}, { // 1: l-prefixed 
-		S('d') = LONG, S('i') = LONG,
-		S('o') = ULONG, S('u') = ULONG, S('x') = ULONG, S('X') = ULONG,
-		S('e') = DBL, S('f') = DBL, S('g') = DBL, S('a') = DBL,
-		S('E') = DBL, S('F') = DBL, S('G') = DBL, S('A') = DBL,
-		S('c') = INT, S('s') = PTR, S('n') = PTR,
-		S('l') = LLPRE,
-	}, { // 2: ll-prefixed 
-		S('d') = LLONG, S('i') = LLONG,
-		S('o') = ULLONG, S('u') = ULLONG,
-		S('x') = ULLONG, S('X') = ULLONG,
-		S('n') = PTR,
-	}, { //3: h-prefixed 
-		S('d') = SHORT, S('i') = SHORT,
-		S('o') = USHORT, S('u') = USHORT,
-		S('x') = USHORT, S('X') = USHORT,
-		S('n') = PTR,
-		S('h') = HHPRE,
-	}, { // 4: hh-prefixed 
-		S('d') = CHAR, S('i') = CHAR,
-		S('o') = UCHAR, S('u') = UCHAR,
-		S('x') = UCHAR, S('X') = UCHAR,
-		S('n') = PTR,
-	}, { // 5: L-prefixed 
-		S('e') = LDBL, S('f') = LDBL, S('g') = LDBL, S('a') = LDBL,
-		S('E') = LDBL, S('F') = LDBL, S('G') = LDBL, S('A') = LDBL,
-		S('n') = PTR,
-	}, { // 6: z- or t-prefixed (assumed to be same size) 
-		S('d') = PDIFF, S('i') = PDIFF,
-		S('o') = SIZET, S('u') = SIZET,
-		S('x') = SIZET, S('X') = SIZET,
-		S('n') = PTR,
-	}, { //7: j-prefixed 
-		S('d') = IMAX, S('i') = IMAX,
-		S('o') = UMAX, S('u') = UMAX,
-		S('x') = UMAX, S('X') = UMAX,
-		S('n') = PTR,
-	}
-};
-*/
-#define OOB(x) ((unsigned)(x)-'A' > 'z'-'A')
-
-
-
-static void out(char **sp, const char *s, size_t l)
-{
-	//if (!(f->flags & F_ERR)) __fwritex((void *)s, l, f);
-        while (l--) {
-                **sp = *s;
-                (*sp)++;
-                s++;
-        }
-}
-
-static void pad(char **sp, char c, int w, int l, int fl)
-{
-	char pad[256];
-	if ((unsigned int)fl & (LEFT_ADJ | ZERO_PAD) || l >= w) return;
-	l = w - l;
-	memset(pad, c, (long unsigned int)l>sizeof pad ? sizeof pad : (long unsigned int)l);
-	for (; (long unsigned int)l >= sizeof pad; l = l - (int)(sizeof pad))
-		out(sp, pad, sizeof pad);
-	out(sp, pad, (size_t)l);
-}
-
-static const char xdigits[17] = {"0123456789ABCDEF"};
-
-/*
-static char *fmt_x(uintmax_t x, char *s, int lower)
-{
-	for (; x; x>>=4) *--s = xdigits[(x&15)]|lower;
-	return s;
-}
-
-static char *fmt_o(uintmax_t x, char *s)
-{
-	for (; x; x>>=3) *--s = '0' + (x&7);
-	return s;
-}
-*/
-static char *fmt_u(uintmax_t x, char *s)
-{
-	unsigned long y;
-	for (   ; x>ULONG_MAX; x/=10) *--s = (char)('0' + x%10);
-	for (y=x;           y; y/=10) *--s = (char)('0' + y%10);
-	return s;
-}
-
-/* Do not override this check. The floating point printing code below
- * depends on the float.h constants being right. If they are wrong, it
- * may overflow the stack. */
-#if LDBL_MANT_DIG == 53
-typedef char compiler_defines_long_double_incorrectly[9-(int)sizeof(long double)];
-#endif
-
-
-/*
- * w = string width, p = precision, fl = flags, t = type. "%20.5g gives w=20, p=5, fl=0, t='g'
- */
-int fmt_fp(char *output, long double y, int w, int p, int fl, int t)
-{
-    char* sp = output;
-	uint32_t big[(LDBL_MANT_DIG+28)/29 + 1          // mantissa expansion
-		+ (LDBL_MAX_EXP+LDBL_MANT_DIG+28+8)/9]; // exponent expansion
-	uint32_t *a, *d, *r, *z;
-	int e2=0, e, i, j, l;
-	char buf[9+LDBL_MANT_DIG/4], *s;
-	const char *prefix="-0X+0X 0X-0x+0x 0x";
-	int pl;
-	char ebuf0[3*sizeof(int)], *ebuf=&ebuf0[3*sizeof(int)], *estr = NULL;
-
-	pl=1;
-	if (signbit(y)) {
-		y=-y;
-	} else if ((unsigned int)fl & MARK_POS) {
-		prefix+=3;
-	} else if ((unsigned int)fl & PAD_POS) {
-		prefix+=6;
-	} else prefix++, pl=0;
-
-	if (!isfinite(y)) {
-		s = (t&32)?"inf":"INF";
-		if (y!=y) s=(t&32)?"nan":"NAN";
-		pad(&sp, ' ', w, 3+pl, (int)((unsigned int)fl &~ ZERO_PAD));
-		out(&sp, prefix, (size_t)pl);
-		out(&sp, s, 3);
-		pad(&sp, ' ', w, 3+pl, (int)((unsigned int)fl^LEFT_ADJ));
-		return MAX(w, 3+pl);
-	}
-
-	y = frexpl(y, &e2) * 2;
-	if ((_Bool)y) e2--;
-
-	if ((t|32)=='a') {
-		long double round = 8.0;
-		int re;
-
-		if (t&32) prefix += 9;
-		pl += 2;
-
-		if (p<0 || p>=LDBL_MANT_DIG/4-1) re=0;
-		else re=LDBL_MANT_DIG/4-1-p;
-
-		if (re) {
-			while (re--) round*=16;
-			if (*prefix=='-') {
-				y=-y;
-				y-=round;
-				y+=round;
-				y=-y;
-			} else {
-				y+=round;
-				y-=round;
-			}
-		}
-
-		estr=fmt_u((uintmax_t )(e2<0 ? -e2 : e2), ebuf);
-		if (estr==ebuf) *--estr='0';
-		*--estr = (e2<0 ? '-' : '+');
-		*--estr = (char)(t+('p'-'a'));
-
-		s=buf;
-		do {
-			int x=(int)y;
-			*s++=(char)(xdigits[x]|(t&32));
-			y=16*(y-x);
-			if (s-buf==1 && ((_Bool)y||p>0||((unsigned int)fl&ALT_FORM))) *s++='.';
-		} while ((_Bool)y);
-
-		if (p > INT_MAX-2-(ebuf-estr)-pl)
-			return -1;
-		if (p && s-buf-2 < p)
-			l = (int)((p+2) + (ebuf-estr));
-		else
-			l = (int)((s-buf) + (ebuf-estr));
-
-		pad(&sp, ' ', w, pl+l, fl);
-		out(&sp, prefix, (size_t)pl);
-		pad(&sp, '0', w, pl+l, (int)((unsigned int)fl^ZERO_PAD));
-		out(&sp, buf, (size_t)(s-buf));
-		pad(&sp, '0', (int)(l-(ebuf-estr)-(s-buf)), 0, 0);
-		out(&sp, estr, (size_t)(ebuf-estr));
-		pad(&sp, ' ', w, pl+l, (int)((unsigned int)fl^LEFT_ADJ));
-		return MAX(w, pl+l);
-	}
-	if (p<0) p=6;
-
-	if ((_Bool)y) y *= 0x1p28, e2-=28;
-
-	if (e2<0) a=r=z=big;
-	else a=r=z=big+sizeof(big)/sizeof(*big) - LDBL_MANT_DIG - 1;
-
-	do {
-		*z = (uint32_t)y;
-		y = 1000000000*(y-*z++);
-	} while ((_Bool)y);
-
-	while (e2>0) {
-		uint32_t carry=0;
-		int sh=MIN(29,e2);
-		for (d=z-1; d>=a; d--) {
-			uint64_t x = ((uint64_t)*d<<sh)+carry;
-			*d = (uint32_t)(x % 1000000000);
-			carry = (uint32_t)(x / 1000000000);
-		}
-		if (carry) *--a = carry;
-		while (z>a && !z[-1]) z--;
-		e2-=sh;
-	}
-	while (e2<0) {
-		uint32_t carry=0, *b;
-		int sh=MIN(9,-e2), need=(int)(1+((unsigned int)p+LDBL_MANT_DIG/3U+8)/9);
-		for (d=a; d<z; d++) {
-			uint32_t rm = (*d & (uint32_t)((1<<sh)-1));
-			*d = (*d>>sh) + carry;
-			carry = ((uint32_t)(1000000000>>sh) * rm);
-		}
-		if (!*a) a++;
-		if (carry) *z++ = carry;
-		/* Avoid (slow!) computation past requested precision */
-		b = (t|32)=='f' ? r : a;
-		if (z-b > need) z = b+need;
-		e2+=sh;
-	}
-
-	if (a<z) for (i=10, e=(int)(9*(r-a)); *a>=(unsigned)i; i*=10, e++);
-	else e=0;
-
-	/* Perform rounding: j is precision after the radix (possibly neg) */
-	j = p - ((t|32)!='f')*e - ((t|32)=='g' && p);
-	if (j < 9*(z-r-1)) {
-		uint32_t x;
-		/* We avoid C's broken division of negative numbers */
-		d = r + 1 + ((j+9*LDBL_MAX_EXP)/9 - LDBL_MAX_EXP);
-		j += 9*LDBL_MAX_EXP;
-		j %= 9;
-		for (i=10, j++; j<9; i*=10, j++);
-		x = (*d % (uint32_t)i);
-		/* Are there any significant digits past j? */
-		if (x || d+1!=z) {
-			long double round = 2/LDBL_EPSILON;
-			long double small;
-			if ((*d/(uint32_t)(i) & 1) || (i==1000000000 && d>a && (d[-1]&1)))
-				round += 2;
-			if (x<(unsigned)i/2) small=0x0.8p0;
-			else if (x==(unsigned)i/2 && d+1==z) small=0x1.0p0;
-			else small=0x1.8p0;
-			if (pl && *prefix=='-') round*=-1, small*=-1;
-			*d -= x;
-			/* Decide whether to round by probing round+small */
-			if (round+small != round) {
-				*d = *d + (uint32_t)i;
-				while (*d > 999999999) {
-					*d--=0;
-					if (d<a) *--a=0;
-					(*d)++;
-				}
-				for (i=10, e=(int)(9*(r-a)); *a>=(unsigned)i; i*=10, e++);
-			}
-		}
-		if (z>d+1) z=d+1;
-	}
-	for (; z>a && !z[-1]; z--);
-	
-	if ((t|32)=='g') {
-		if (!p) p++;
-		if (p>e && e>=-4) {
-			t--;
-			p-=e+1;
-		} else {
-			t-=2;
-			p--;
-		}
-		if (!((uint32_t)fl&ALT_FORM)) {
-			/* Count trailing zeros in last place */
-			if (z>a && z[-1]) for (i=10, j=0; (z[-1]%(uint32_t)i)==0; i*=10, j++);
-			else j=9;
-			if ((t|32)=='f')
-				p = (int)MIN(p,MAX(0,9*(z-r-1)-j));
-			else
-				p = (int)MIN(p,MAX(0,9*(z-r-1)+e-j));
-		}
-	}
-	if (p > INT_MAX-1-(p || ((unsigned int)fl&ALT_FORM)))
-		return -1;
-	l = 1 + p + (p || ((unsigned int)fl&ALT_FORM));
-	if ((t|32)=='f') {
-		if (e > INT_MAX-l) return -1;
-		if (e>0) l+=e;
-	} else {
-		estr=fmt_u((uintmax_t)(e<0 ? -e : e), ebuf);
-		while(ebuf-estr<2) *--estr='0';
-		*--estr = (e<0 ? '-' : '+');
-		*--estr = (char)t;
-		if (ebuf-estr > INT_MAX-l) return -1;
-		l += (int)(ebuf-estr);
-	}
-
-	if (l > INT_MAX-pl) return -1;
-	pad(&sp, ' ', w, pl+l, fl);
-	out(&sp, prefix, (size_t)pl);
-	pad(&sp, '0', w, pl+l, (int)((unsigned int)fl^ZERO_PAD));
-
-	if ((t|32)=='f') {
-		if (a>r) a=r;
-		for (d=a; d<=r; d++) {
-			s = fmt_u(*d, buf+9); //@@@
-			if (d!=a) while (s>buf) *--s='0';
-			else if (s==buf+9) *--s='0';
-			out(&sp, s, (size_t)(buf+9-s));
-		}
-		if (p || ((unsigned int)fl&ALT_FORM)) out(&sp, ".", 1);
-		for (; d<z && p>0; d++, p-=9) {
-			s = fmt_u(*d, buf+9); //@@@
-			while (s>buf) *--s='0';
-			out(&sp, s, (size_t)(MIN(9,p)));
-		}
-		pad(&sp, '0', p+9, 9, 0);
-	} else {
-		if (z<=a) z=a+1;
-		for (d=a; d<z && p>=0; d++) {
-			s = fmt_u(*d, buf+9); //@@@
-			if (s==buf+9) *--s='0';
-			if (d!=a) while (s>buf) *--s='0';
-			else {
-				out(&sp, s++, 1);
-				if (p>0||((unsigned int)fl&ALT_FORM)) out(&sp, ".", 1);
-			}
-			out(&sp, s, (size_t)(MIN(buf+9-s, p)));
-			p -= (int)(buf+9-s);
-		}
-		pad(&sp, '0', p+18, 18, 0);
-		out(&sp, estr, (size_t)(ebuf-estr));
-	}
-
-	pad(&sp, ' ', w, pl+l, (int)((unsigned int)fl^LEFT_ADJ));
-
-	return MAX(w, pl+l);
-}
-
-/*
-static int getint(char **s) {
-	int i;
-	for (i=0; isdigit(**s); (*s)++) {
-		if (i > INT_MAX/10U || **s-'0' > INT_MAX-10*i) i = -1;
-		else i = 10*i + (**s-'0');
-	}
-	return i;
-}
-*/
diff --git a/ext/open62541/deps/musl/vfprintf.h b/ext/open62541/deps/musl/vfprintf.h
deleted file mode 100644
index 2a3172b..0000000
--- a/ext/open62541/deps/musl/vfprintf.h
+++ /dev/null
@@ -1,69 +0,0 @@
-#ifndef VFPRINTF_H
-#define VFPRINTF_H
-
-#include <limits.h>
-#include <string.h>
-//#include <stdarg.h>
-//#include <stddef.h>
-//#include <wchar.h>
-#include <inttypes.h>
-#include <endian.h>
-
-
-//#include <stdio.h>
-
-//#include <float.h>
-#define LDBL_TRUE_MIN 3.6451995318824746025e-4951L
-#define LDBL_MIN     3.3621031431120935063e-4932L
-#define LDBL_MAX     1.1897314953572317650e+4932L
-#define LDBL_EPSILON 1.0842021724855044340e-19L
-
-#define LDBL_MANT_DIG 64
-#define LDBL_MIN_EXP (-16381)
-#define LDBL_MAX_EXP 16384
-//libm.h
-#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
-#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 && __BYTE_ORDER == __LITTLE_ENDIAN
-union ldshape {
-	long double f;
-	struct {
-		uint64_t m;
-		uint16_t se;
-	} i;
-};
-#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384 && __BYTE_ORDER == __LITTLE_ENDIAN
-union ldshape {
-	long double f;
-	struct {
-		uint64_t lo;
-		uint32_t mid;
-		uint16_t top;
-		uint16_t se;
-	} i;
-	struct {
-		uint64_t lo;
-		uint64_t hi;
-	} i2;
-};
-#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384 && __BYTE_ORDER == __BIG_ENDIAN
-union ldshape {
-	long double f;
-	struct {
-		uint16_t se;
-		uint16_t top;
-		uint32_t mid;
-		uint64_t lo;
-	} i;
-	struct {
-		uint64_t hi;
-		uint64_t lo;
-	} i2;
-};
-#else
-#error Unsupported long double representation
-#endif
-
-
-int fmt_fp(char*, long double, int, int, int, int);
-
-#endif
diff --git a/ext/open62541/deps/open62541_queue.h b/ext/open62541/deps/open62541_queue.h
deleted file mode 100644
index ed2962f..0000000
--- a/ext/open62541/deps/open62541_queue.h
+++ /dev/null
@@ -1,648 +0,0 @@
-/*	$OpenBSD: queue.h,v 1.38 2013/07/03 15:05:21 fgsch Exp $	*/
-/*	$NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $	*/
-
-/*
- * Copyright (c) 1991, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)queue.h	8.5 (Berkeley) 8/20/94
- */
-
-#ifndef	_SYS_QUEUE_H_
-#define	_SYS_QUEUE_H_
-
-/*
- * This file defines five types of data structures: singly-linked lists, 
- * lists, simple queues, tail queues, and circular queues.
- *
- *
- * A singly-linked list is headed by a single forward pointer. The elements
- * are singly linked for minimum space and pointer manipulation overhead at
- * the expense of O(n) removal for arbitrary elements. New elements can be
- * added to the list after an existing element or at the head of the list.
- * Elements being removed from the head of the list should use the explicit
- * macro for this purpose for optimum efficiency. A singly-linked list may
- * only be traversed in the forward direction.  Singly-linked lists are ideal
- * for applications with large datasets and few or no removals or for
- * implementing a LIFO queue.
- *
- * A list is headed by a single forward pointer (or an array of forward
- * pointers for a hash table header). The elements are doubly linked
- * so that an arbitrary element can be removed without a need to
- * traverse the list. New elements can be added to the list before
- * or after an existing element or at the head of the list. A list
- * may only be traversed in the forward direction.
- *
- * A simple queue is headed by a pair of pointers, one the head of the
- * list and the other to the tail of the list. The elements are singly
- * linked to save space, so elements can only be removed from the
- * head of the list. New elements can be added to the list before or after
- * an existing element, at the head of the list, or at the end of the
- * list. A simple queue may only be traversed in the forward direction.
- *
- * A tail queue is headed by a pair of pointers, one to the head of the
- * list and the other to the tail of the list. The elements are doubly
- * linked so that an arbitrary element can be removed without a need to
- * traverse the list. New elements can be added to the list before or
- * after an existing element, at the head of the list, or at the end of
- * the list. A tail queue may be traversed in either direction.
- *
- * A circle queue is headed by a pair of pointers, one to the head of the
- * list and the other to the tail of the list. The elements are doubly
- * linked so that an arbitrary element can be removed without a need to
- * traverse the list. New elements can be added to the list before or after
- * an existing element, at the head of the list, or at the end of the list.
- * A circle queue may be traversed in either direction, but has a more
- * complex end of list detection.
- *
- * For details on the use of these macros, see the queue(3) manual page.
- */
-
-#if defined(QUEUE_MACRO_DEBUG) || (defined(_KERNEL) && defined(DIAGNOSTIC))
-#define _Q_INVALIDATE(a) (a) = ((void *)-1)
-#else
-#define _Q_INVALIDATE(a)
-#endif
-
-/*
- * Singly-linked List definitions.
- */
-#define SLIST_HEAD(name, type)						\
-struct name {								\
-    struct type *slh_first;	/* first element */			\
-}
- 
-#define	SLIST_HEAD_INITIALIZER(head)					\
-    { NULL }
-
-#define SLIST_ENTRY(type)						\
-struct {								\
-    struct type *sle_next;	/* next element */			\
-}
- 
-/*
- * Singly-linked List access methods.
- */
-#define	SLIST_FIRST(head)	((head)->slh_first)
-#define	SLIST_END(head)		NULL
-#define	SLIST_EMPTY(head)	(SLIST_FIRST(head) == SLIST_END(head))
-#define	SLIST_NEXT(elm, field)	((elm)->field.sle_next)
-
-#define	SLIST_FOREACH(var, head, field)					\
-    for((var) = SLIST_FIRST(head);					\
-        (var) != SLIST_END(head);					\
-        (var) = SLIST_NEXT(var, field))
-
-#define	SLIST_FOREACH_SAFE(var, head, field, tvar)			\
-    for ((var) = SLIST_FIRST(head);				\
-        (var) && ((tvar) = SLIST_NEXT(var, field), 1);		\
-        (var) = (tvar))
-
-/*
- * Singly-linked List functions.
- */
-#define	SLIST_INIT(head) {						\
-    SLIST_FIRST(head) = SLIST_END(head);				\
-}
-
-#define	SLIST_INSERT_AFTER(slistelm, elm, field) do {			\
-    (elm)->field.sle_next = (slistelm)->field.sle_next;		\
-    (slistelm)->field.sle_next = (elm);				\
-} while (0)
-
-#define	SLIST_INSERT_HEAD(head, elm, field) do {			\
-    (elm)->field.sle_next = (head)->slh_first;			\
-    (head)->slh_first = (elm);					\
-} while (0)
-
-#define	SLIST_REMOVE_AFTER(elm, field) do {				\
-    (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next;	\
-} while (0)
-
-#define	SLIST_REMOVE_HEAD(head, field) do {				\
-    (head)->slh_first = (head)->slh_first->field.sle_next;		\
-} while (0)
-
-#define SLIST_REMOVE(head, elm, type, field) do {			\
-    if ((head)->slh_first == (elm)) {				\
-        SLIST_REMOVE_HEAD((head), field);			\
-    } else {							\
-        struct type *curelm = (head)->slh_first;		\
-                                    \
-        while (curelm->field.sle_next != (elm))			\
-            curelm = curelm->field.sle_next;		\
-        curelm->field.sle_next =				\
-            curelm->field.sle_next->field.sle_next;		\
-        _Q_INVALIDATE((elm)->field.sle_next);			\
-    }								\
-} while (0)
-
-/*
- * List definitions.
- */
-#define LIST_HEAD(name, type)						\
-struct name {								\
-    struct type *lh_first;	/* first element */			\
-}
-
-#define LIST_HEAD_INITIALIZER(head)					\
-    { NULL }
-
-#define LIST_ENTRY(type)						\
-struct {								\
-    struct type *le_next;	/* next element */			\
-    struct type **le_prev;	/* address of previous next element */	\
-}
-
-/*
- * List access methods
- */
-#define	LIST_FIRST(head)		((head)->lh_first)
-#define	LIST_END(head)			NULL
-#define	LIST_EMPTY(head)		(LIST_FIRST(head) == LIST_END(head))
-#define	LIST_NEXT(elm, field)		((elm)->field.le_next)
-
-#define LIST_FOREACH(var, head, field)					\
-    for((var) = LIST_FIRST(head);					\
-        (var)!= LIST_END(head);					\
-        (var) = LIST_NEXT(var, field))
-
-#define	LIST_FOREACH_SAFE(var, head, field, tvar)			\
-    for ((var) = LIST_FIRST(head);				\
-        (var) && ((tvar) = LIST_NEXT(var, field), 1);		\
-        (var) = (tvar))
-
-/*
- * List functions.
- */
-#define	LIST_INIT(head) do {						\
-    LIST_FIRST(head) = LIST_END(head);				\
-} while (0)
-
-#define LIST_INSERT_AFTER(listelm, elm, field) do {			\
-    if (((elm)->field.le_next = (listelm)->field.le_next) != NULL)	\
-        (listelm)->field.le_next->field.le_prev =		\
-            &(elm)->field.le_next;				\
-    (listelm)->field.le_next = (elm);				\
-    (elm)->field.le_prev = &(listelm)->field.le_next;		\
-} while (0)
-
-#define	LIST_INSERT_BEFORE(listelm, elm, field) do {			\
-    (elm)->field.le_prev = (listelm)->field.le_prev;		\
-    (elm)->field.le_next = (listelm);				\
-    *(listelm)->field.le_prev = (elm);				\
-    (listelm)->field.le_prev = &(elm)->field.le_next;		\
-} while (0)
-
-#define LIST_INSERT_HEAD(head, elm, field) do {				\
-    if (((elm)->field.le_next = (head)->lh_first) != NULL)		\
-        (head)->lh_first->field.le_prev = &(elm)->field.le_next;\
-    (head)->lh_first = (elm);					\
-    (elm)->field.le_prev = &(head)->lh_first;			\
-} while (0)
-
-#define LIST_REMOVE(elm, field) do {					\
-    if ((elm)->field.le_next != NULL)				\
-        (elm)->field.le_next->field.le_prev =			\
-            (elm)->field.le_prev;				\
-    *(elm)->field.le_prev = (elm)->field.le_next;			\
-    _Q_INVALIDATE((elm)->field.le_prev);				\
-    _Q_INVALIDATE((elm)->field.le_next);				\
-} while (0)
-
-#define LIST_REPLACE(elm, elm2, field) do {				\
-    if (((elm2)->field.le_next = (elm)->field.le_next) != NULL)	\
-        (elm2)->field.le_next->field.le_prev =			\
-            &(elm2)->field.le_next;				\
-    (elm2)->field.le_prev = (elm)->field.le_prev;			\
-    *(elm2)->field.le_prev = (elm2);				\
-    _Q_INVALIDATE((elm)->field.le_prev);				\
-    _Q_INVALIDATE((elm)->field.le_next);				\
-} while (0)
-
-/*
- * Simple queue definitions.
- */
-#define SIMPLEQ_HEAD(name, type)					\
-struct name {								\
-    struct type *sqh_first;	/* first element */			\
-    struct type **sqh_last;	/* addr of last next element */		\
-}
-
-#define SIMPLEQ_HEAD_INITIALIZER(head)					\
-    { NULL, &(head).sqh_first }
-
-#define SIMPLEQ_ENTRY(type)						\
-struct {								\
-    struct type *sqe_next;	/* next element */			\
-}
-
-/*
- * Simple queue access methods.
- */
-#define	SIMPLEQ_FIRST(head)	    ((head)->sqh_first)
-#define	SIMPLEQ_END(head)	    NULL
-#define	SIMPLEQ_EMPTY(head)	    (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head))
-#define	SIMPLEQ_NEXT(elm, field)    ((elm)->field.sqe_next)
-
-#define SIMPLEQ_FOREACH(var, head, field)				\
-    for((var) = SIMPLEQ_FIRST(head);				\
-        (var) != SIMPLEQ_END(head);					\
-        (var) = SIMPLEQ_NEXT(var, field))
-
-#define	SIMPLEQ_FOREACH_SAFE(var, head, field, tvar)			\
-    for ((var) = SIMPLEQ_FIRST(head);				\
-        (var) && ((tvar) = SIMPLEQ_NEXT(var, field), 1);		\
-        (var) = (tvar))
-
-/*
- * Simple queue functions.
- */
-#define	SIMPLEQ_INIT(head) do {						\
-    (head)->sqh_first = NULL;					\
-    (head)->sqh_last = &(head)->sqh_first;				\
-} while (0)
-
-#define SIMPLEQ_INSERT_HEAD(head, elm, field) do {			\
-    if (((elm)->field.sqe_next = (head)->sqh_first) == NULL)	\
-        (head)->sqh_last = &(elm)->field.sqe_next;		\
-    (head)->sqh_first = (elm);					\
-} while (0)
-
-#define SIMPLEQ_INSERT_TAIL(head, elm, field) do {			\
-    (elm)->field.sqe_next = NULL;					\
-    *(head)->sqh_last = (elm);					\
-    (head)->sqh_last = &(elm)->field.sqe_next;			\
-} while (0)
-
-#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do {		\
-    if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\
-        (head)->sqh_last = &(elm)->field.sqe_next;		\
-    (listelm)->field.sqe_next = (elm);				\
-} while (0)
-
-#define SIMPLEQ_REMOVE_HEAD(head, field) do {			\
-    if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \
-        (head)->sqh_last = &(head)->sqh_first;			\
-} while (0)
-
-#define SIMPLEQ_REMOVE_AFTER(head, elm, field) do {			\
-    if (((elm)->field.sqe_next = (elm)->field.sqe_next->field.sqe_next) \
-        == NULL)							\
-        (head)->sqh_last = &(elm)->field.sqe_next;		\
-} while (0)
-
-/*
- * XOR Simple queue definitions.
- */
-#define XSIMPLEQ_HEAD(name, type)					\
-struct name {								\
-    struct type *sqx_first;	/* first element */			\
-    struct type **sqx_last;	/* addr of last next element */		\
-    unsigned long sqx_cookie;					\
-}
-
-#define XSIMPLEQ_ENTRY(type)						\
-struct {								\
-    struct type *sqx_next;	/* next element */			\
-}
-
-/*
- * XOR Simple queue access methods.
- */
-#define XSIMPLEQ_XOR(head, ptr)	    ((__typeof(ptr))((head)->sqx_cookie ^ \
-                    (unsigned long)(ptr)))
-#define	XSIMPLEQ_FIRST(head)	    XSIMPLEQ_XOR(head, ((head)->sqx_first))
-#define	XSIMPLEQ_END(head)	    NULL
-#define	XSIMPLEQ_EMPTY(head)	    (XSIMPLEQ_FIRST(head) == XSIMPLEQ_END(head))
-#define	XSIMPLEQ_NEXT(head, elm, field)    XSIMPLEQ_XOR(head, ((elm)->field.sqx_next))
-
-
-#define XSIMPLEQ_FOREACH(var, head, field)				\
-    for ((var) = XSIMPLEQ_FIRST(head);				\
-        (var) != XSIMPLEQ_END(head);				\
-        (var) = XSIMPLEQ_NEXT(head, var, field))
-
-#define	XSIMPLEQ_FOREACH_SAFE(var, head, field, tvar)			\
-    for ((var) = XSIMPLEQ_FIRST(head);				\
-        (var) && ((tvar) = XSIMPLEQ_NEXT(head, var, field), 1);	\
-        (var) = (tvar))
-
-/*
- * XOR Simple queue functions.
- */
-#define	XSIMPLEQ_INIT(head) do {					\
-    arc4random_buf(&(head)->sqx_cookie, sizeof((head)->sqx_cookie)); \
-    (head)->sqx_first = XSIMPLEQ_XOR(head, NULL);			\
-    (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first);	\
-} while (0)
-
-#define XSIMPLEQ_INSERT_HEAD(head, elm, field) do {			\
-    if (((elm)->field.sqx_next = (head)->sqx_first) ==		\
-        XSIMPLEQ_XOR(head, NULL))					\
-        (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \
-    (head)->sqx_first = XSIMPLEQ_XOR(head, (elm));			\
-} while (0)
-
-#define XSIMPLEQ_INSERT_TAIL(head, elm, field) do {			\
-    (elm)->field.sqx_next = XSIMPLEQ_XOR(head, NULL);		\
-    *(XSIMPLEQ_XOR(head, (head)->sqx_last)) = XSIMPLEQ_XOR(head, (elm)); \
-    (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next);	\
-} while (0)
-
-#define XSIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do {		\
-    if (((elm)->field.sqx_next = (listelm)->field.sqx_next) ==	\
-        XSIMPLEQ_XOR(head, NULL))					\
-        (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \
-    (listelm)->field.sqx_next = XSIMPLEQ_XOR(head, (elm));		\
-} while (0)
-
-#define XSIMPLEQ_REMOVE_HEAD(head, field) do {				\
-    if (((head)->sqx_first = XSIMPLEQ_XOR(head,			\
-        (head)->sqx_first)->field.sqx_next) == XSIMPLEQ_XOR(head, NULL)) \
-        (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first); \
-} while (0)
-
-#define XSIMPLEQ_REMOVE_AFTER(head, elm, field) do {			\
-    if (((elm)->field.sqx_next = XSIMPLEQ_XOR(head,			\
-        (elm)->field.sqx_next)->field.sqx_next)			\
-        == XSIMPLEQ_XOR(head, NULL))				\
-        (head)->sqx_last = 					\
-            XSIMPLEQ_XOR(head, &(elm)->field.sqx_next);		\
-} while (0)
-
-            
-/*
- * Tail queue definitions.
- */
-#define TAILQ_HEAD(name, type)						\
-struct name {								\
-    struct type *tqh_first;	/* first element */			\
-    struct type **tqh_last;	/* addr of last next element */		\
-}
-
-#define TAILQ_HEAD_INITIALIZER(head)					\
-    { NULL, &(head).tqh_first }
-
-#define TAILQ_ENTRY(type)						\
-struct {								\
-    struct type *tqe_next;	/* next element */			\
-    struct type **tqe_prev;	/* address of previous next element */	\
-}
-
-/* 
- * tail queue access methods 
- */
-#define	TAILQ_FIRST(head)		((head)->tqh_first)
-#define	TAILQ_END(head)			NULL
-#define	TAILQ_NEXT(elm, field)		((elm)->field.tqe_next)
-#define TAILQ_LAST(head, headname)					\
-    (*(((struct headname *)((head)->tqh_last))->tqh_last))
-/* XXX */
-#define TAILQ_PREV(elm, headname, field)				\
-    (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
-#define	TAILQ_EMPTY(head)						\
-    (TAILQ_FIRST(head) == TAILQ_END(head))
-
-#define TAILQ_FOREACH(var, head, field)					\
-    for((var) = TAILQ_FIRST(head);					\
-        (var) != TAILQ_END(head);					\
-        (var) = TAILQ_NEXT(var, field))
-
-#define	TAILQ_FOREACH_SAFE(var, head, field, tvar)			\
-    for ((var) = TAILQ_FIRST(head);					\
-        (var) != TAILQ_END(head) &&					\
-        ((tvar) = TAILQ_NEXT(var, field), 1);			\
-        (var) = (tvar))
-
-
-#define TAILQ_FOREACH_REVERSE(var, head, headname, field)		\
-    for((var) = TAILQ_LAST(head, headname);				\
-        (var) != TAILQ_END(head);					\
-        (var) = TAILQ_PREV(var, headname, field))
-
-#define	TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar)	\
-    for ((var) = TAILQ_LAST(head, headname);			\
-        (var) != TAILQ_END(head) &&					\
-        ((tvar) = TAILQ_PREV(var, headname, field), 1);		\
-        (var) = (tvar))
-
-/*
- * Tail queue functions.
- */
-#define	TAILQ_INIT(head) do {						\
-    (head)->tqh_first = NULL;					\
-    (head)->tqh_last = &(head)->tqh_first;				\
-} while (0)
-
-#define TAILQ_INSERT_HEAD(head, elm, field) do {			\
-    if (((elm)->field.tqe_next = (head)->tqh_first) != NULL)	\
-        (head)->tqh_first->field.tqe_prev =			\
-            &(elm)->field.tqe_next;				\
-    else								\
-        (head)->tqh_last = &(elm)->field.tqe_next;		\
-    (head)->tqh_first = (elm);					\
-    (elm)->field.tqe_prev = &(head)->tqh_first;			\
-} while (0)
-
-#define TAILQ_INSERT_TAIL(head, elm, field) do {			\
-    (elm)->field.tqe_next = NULL;					\
-    (elm)->field.tqe_prev = (head)->tqh_last;			\
-    *(head)->tqh_last = (elm);					\
-    (head)->tqh_last = &(elm)->field.tqe_next;			\
-} while (0)
-
-#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do {		\
-    if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\
-        (elm)->field.tqe_next->field.tqe_prev =			\
-            &(elm)->field.tqe_next;				\
-    else								\
-        (head)->tqh_last = &(elm)->field.tqe_next;		\
-    (listelm)->field.tqe_next = (elm);				\
-    (elm)->field.tqe_prev = &(listelm)->field.tqe_next;		\
-} while (0)
-
-#define	TAILQ_INSERT_BEFORE(listelm, elm, field) do {			\
-    (elm)->field.tqe_prev = (listelm)->field.tqe_prev;		\
-    (elm)->field.tqe_next = (listelm);				\
-    *(listelm)->field.tqe_prev = (elm);				\
-    (listelm)->field.tqe_prev = &(elm)->field.tqe_next;		\
-} while (0)
-
-#define TAILQ_REMOVE(head, elm, field) do {				\
-    if (((elm)->field.tqe_next) != NULL)				\
-        (elm)->field.tqe_next->field.tqe_prev =			\
-            (elm)->field.tqe_prev;				\
-    else								\
-        (head)->tqh_last = (elm)->field.tqe_prev;		\
-    *(elm)->field.tqe_prev = (elm)->field.tqe_next;			\
-    _Q_INVALIDATE((elm)->field.tqe_prev);				\
-    _Q_INVALIDATE((elm)->field.tqe_next);				\
-} while (0)
-
-#define TAILQ_REPLACE(head, elm, elm2, field) do {			\
-    if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL)	\
-        (elm2)->field.tqe_next->field.tqe_prev =		\
-            &(elm2)->field.tqe_next;				\
-    else								\
-        (head)->tqh_last = &(elm2)->field.tqe_next;		\
-    (elm2)->field.tqe_prev = (elm)->field.tqe_prev;			\
-    *(elm2)->field.tqe_prev = (elm2);				\
-    _Q_INVALIDATE((elm)->field.tqe_prev);				\
-    _Q_INVALIDATE((elm)->field.tqe_next);				\
-} while (0)
-
-/*
- * Circular queue definitions.
- */
-#define CIRCLEQ_HEAD(name, type)					\
-struct name {								\
-    struct type *cqh_first;		/* first element */		\
-    struct type *cqh_last;		/* last element */		\
-}
-
-#define CIRCLEQ_HEAD_INITIALIZER(head)					\
-    { CIRCLEQ_END(&head), CIRCLEQ_END(&head) }
-
-#define CIRCLEQ_ENTRY(type)						\
-struct {								\
-    struct type *cqe_next;		/* next element */		\
-    struct type *cqe_prev;		/* previous element */		\
-}
-
-/*
- * Circular queue access methods 
- */
-#define	CIRCLEQ_FIRST(head)		((head)->cqh_first)
-#define	CIRCLEQ_LAST(head)		((head)->cqh_last)
-#define	CIRCLEQ_END(head)		((void *)(head))
-#define	CIRCLEQ_NEXT(elm, field)	((elm)->field.cqe_next)
-#define	CIRCLEQ_PREV(elm, field)	((elm)->field.cqe_prev)
-#define	CIRCLEQ_EMPTY(head)						\
-    (CIRCLEQ_FIRST(head) == CIRCLEQ_END(head))
-
-#define CIRCLEQ_FOREACH(var, head, field)				\
-    for((var) = CIRCLEQ_FIRST(head);				\
-        (var) != CIRCLEQ_END(head);					\
-        (var) = CIRCLEQ_NEXT(var, field))
-
-#define	CIRCLEQ_FOREACH_SAFE(var, head, field, tvar)			\
-    for ((var) = CIRCLEQ_FIRST(head);				\
-        (var) != CIRCLEQ_END(head) &&				\
-        ((tvar) = CIRCLEQ_NEXT(var, field), 1);			\
-        (var) = (tvar))
-
-#define CIRCLEQ_FOREACH_REVERSE(var, head, field)			\
-    for((var) = CIRCLEQ_LAST(head);					\
-        (var) != CIRCLEQ_END(head);					\
-        (var) = CIRCLEQ_PREV(var, field))
-
-#define	CIRCLEQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar)	\
-    for ((var) = CIRCLEQ_LAST(head, headname);			\
-        (var) != CIRCLEQ_END(head) && 				\
-        ((tvar) = CIRCLEQ_PREV(var, headname, field), 1);		\
-        (var) = (tvar))
-
-/*
- * Circular queue functions.
- */
-#define	CIRCLEQ_INIT(head) do {						\
-    (head)->cqh_first = CIRCLEQ_END(head);				\
-    (head)->cqh_last = CIRCLEQ_END(head);				\
-} while (0)
-
-#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do {		\
-    (elm)->field.cqe_next = (listelm)->field.cqe_next;		\
-    (elm)->field.cqe_prev = (listelm);				\
-    if ((listelm)->field.cqe_next == CIRCLEQ_END(head))		\
-        (head)->cqh_last = (elm);				\
-    else								\
-        (listelm)->field.cqe_next->field.cqe_prev = (elm);	\
-    (listelm)->field.cqe_next = (elm);				\
-} while (0)
-
-#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do {		\
-    (elm)->field.cqe_next = (listelm);				\
-    (elm)->field.cqe_prev = (listelm)->field.cqe_prev;		\
-    if ((listelm)->field.cqe_prev == CIRCLEQ_END(head))		\
-        (head)->cqh_first = (elm);				\
-    else								\
-        (listelm)->field.cqe_prev->field.cqe_next = (elm);	\
-    (listelm)->field.cqe_prev = (elm);				\
-} while (0)
-
-#define CIRCLEQ_INSERT_HEAD(head, elm, field) do {			\
-    (elm)->field.cqe_next = (head)->cqh_first;			\
-    (elm)->field.cqe_prev = CIRCLEQ_END(head);			\
-    if ((head)->cqh_last == CIRCLEQ_END(head))			\
-        (head)->cqh_last = (elm);				\
-    else								\
-        (head)->cqh_first->field.cqe_prev = (elm);		\
-    (head)->cqh_first = (elm);					\
-} while (0)
-
-#define CIRCLEQ_INSERT_TAIL(head, elm, field) do {			\
-    (elm)->field.cqe_next = CIRCLEQ_END(head);			\
-    (elm)->field.cqe_prev = (head)->cqh_last;			\
-    if ((head)->cqh_first == CIRCLEQ_END(head))			\
-        (head)->cqh_first = (elm);				\
-    else								\
-        (head)->cqh_last->field.cqe_next = (elm);		\
-    (head)->cqh_last = (elm);					\
-} while (0)
-
-#define	CIRCLEQ_REMOVE(head, elm, field) do {				\
-    if ((elm)->field.cqe_next == CIRCLEQ_END(head))			\
-        (head)->cqh_last = (elm)->field.cqe_prev;		\
-    else								\
-        (elm)->field.cqe_next->field.cqe_prev =			\
-            (elm)->field.cqe_prev;				\
-    if ((elm)->field.cqe_prev == CIRCLEQ_END(head))			\
-        (head)->cqh_first = (elm)->field.cqe_next;		\
-    else								\
-        (elm)->field.cqe_prev->field.cqe_next =			\
-            (elm)->field.cqe_next;				\
-    _Q_INVALIDATE((elm)->field.cqe_prev);				\
-    _Q_INVALIDATE((elm)->field.cqe_next);				\
-} while (0)
-
-#define CIRCLEQ_REPLACE(head, elm, elm2, field) do {			\
-    if (((elm2)->field.cqe_next = (elm)->field.cqe_next) ==		\
-        CIRCLEQ_END(head))						\
-        (head)->cqh_last = (elm2);				\
-    else								\
-        (elm2)->field.cqe_next->field.cqe_prev = (elm2);	\
-    if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) ==		\
-        CIRCLEQ_END(head))						\
-        (head)->cqh_first = (elm2);				\
-    else								\
-        (elm2)->field.cqe_prev->field.cqe_next = (elm2);	\
-    _Q_INVALIDATE((elm)->field.cqe_prev);				\
-    _Q_INVALIDATE((elm)->field.cqe_next);				\
-} while (0)
-
-#endif	/* !_SYS_QUEUE_H_ */
diff --git a/ext/open62541/deps/pcg_basic.c b/ext/open62541/deps/pcg_basic.c
deleted file mode 100644
index 53b0247..0000000
--- a/ext/open62541/deps/pcg_basic.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * PCG Random Number Generation for C.
- *
- * Copyright 2014 Melissa O'Neill <oneill@pcg-random.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * For additional information about the PCG random number generation scheme,
- * including its license and other licensing options, visit
- *
- *       http://www.pcg-random.org
- */
-
-#include "pcg_basic.h"
-
-void pcg32_srandom_r(pcg32_random_t* rng, uint64_t initial_state, uint64_t initseq) {
-    rng->state = 0U;
-    rng->inc = (initseq << 1u) | 1u;
-    pcg32_random_r(rng);
-    rng->state += initial_state;
-    pcg32_random_r(rng);
-}
-
-uint32_t pcg32_random_r(pcg32_random_t* rng) {
-    uint64_t oldstate = rng->state;
-    rng->state = oldstate * 6364136223846793005ULL + rng->inc;
-    uint32_t xorshifted = (uint32_t)(((oldstate >> 18u) ^ oldstate) >> 27u);
-    uint32_t rot = (uint32_t)(oldstate >> 59u);
-    return (xorshifted >> rot) | (xorshifted << ((~rot + 1u) & 31)); /* was (xorshifted >> rot) | (xorshifted << ((-rot) & 31)) */
-}
diff --git a/ext/open62541/deps/pcg_basic.h b/ext/open62541/deps/pcg_basic.h
deleted file mode 100644
index 4f7bcc2..0000000
--- a/ext/open62541/deps/pcg_basic.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * PCG Random Number Generation for C.
- *
- * Copyright 2014 Melissa O'Neill <oneill@pcg-random.org>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * For additional information about the PCG random number generation scheme,
- * including its license and other licensing options, visit
- *
- *     http://www.pcg-random.org
- */
-
-#ifndef PCG_BASIC_H_
-#define PCG_BASIC_H_
-
-#include <open62541/config.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct pcg_state_setseq_64 {
-    uint64_t state;  /* RNG state.  All values are possible. */
-    uint64_t inc;    /* Controls which RNG sequence (stream) is selected. Must
-                      * *always* be odd. */
-} pcg32_random_t;
-
-#define PCG32_INITIALIZER { 0x853c49e6748fea9bULL, 0xda3e39cb94b95bdbULL }
-
-void pcg32_srandom_r(pcg32_random_t* rng, uint64_t initial_state, uint64_t initseq);
-uint32_t pcg32_random_r(pcg32_random_t* rng);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* PCG_BASIC_H_ */
diff --git a/ext/open62541/deps/string_escape.c b/ext/open62541/deps/string_escape.c
deleted file mode 100644
index 51d320c..0000000
--- a/ext/open62541/deps/string_escape.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright (c) 2009-2016 Petri Lehtinen <petri@digip.org>
- *
- * Jansson is free software; you can redistribute it and/or modify
- * it under the terms of the MIT license.
-
-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.
- */
-
-/*escaping from https://github.com/akheron/jansson dump.c */
-
-#include "string_escape.h"
-
-
-
-size_t utf8_check_first(char byte)
-{
-    unsigned char u = (unsigned char)byte;
-
-    if(u < 0x80)
-        return 1;
-
-    if(0x80 <= u && u <= 0xBF) {
-        /* second, third or fourth byte of a multi-byte
-           sequence, i.e. a "continuation byte" */
-        return 0;
-    }
-    else if(u == 0xC0 || u == 0xC1) {
-        /* overlong encoding of an ASCII byte */
-        return 0;
-    }
-    else if(0xC2 <= u && u <= 0xDF) {
-        /* 2-byte sequence */
-        return 2;
-    }
-
-    else if(0xE0 <= u && u <= 0xEF) {
-        /* 3-byte sequence */
-        return 3;
-    }
-    else if(0xF0 <= u && u <= 0xF4) {
-        /* 4-byte sequence */
-        return 4;
-    }
-    else { /* u >= 0xF5 */
-        /* Restricted (start of 4-, 5- or 6-byte sequence) or invalid
-           UTF-8 */
-        return 0;
-    }
-}
-
-size_t utf8_check_full(const char *buffer, size_t size, int32_t *codepoint)
-{
-    size_t i;
-    int32_t value = 0;
-    unsigned char u = (unsigned char)buffer[0];
-
-    if(size == 2)
-    {
-        value = u & 0x1F;
-    }
-    else if(size == 3)
-    {
-        value = u & 0xF;
-    }
-    else if(size == 4)
-    {
-        value = u & 0x7;
-    }
-    else
-        return 0;
-
-    for(i = 1; i < size; i++)
-    {
-        u = (unsigned char)buffer[i];
-
-        if(u < 0x80 || u > 0xBF) {
-            /* not a continuation byte */
-            return 0;
-        }
-
-        value = (value << 6) + (u & 0x3F);
-    }
-
-    if(value > 0x10FFFF) {
-        /* not in Unicode range */
-        return 0;
-    }
-
-    else if(0xD800 <= value && value <= 0xDFFF) {
-        /* invalid code point (UTF-16 surrogate halves) */
-        return 0;
-    }
-
-    else if((size == 2 && value < 0x80) ||
-            (size == 3 && value < 0x800) ||
-            (size == 4 && value < 0x10000)) {
-        /* overlong encoding */
-        return 0;
-    }
-
-    if(codepoint)
-        *codepoint = value;
-
-    return 1;
-}
-
-const char *utf8_iterate(const char *buffer, size_t bufsize, int32_t *codepoint)
-{
-    size_t count;
-    int32_t value;
-
-    if(!bufsize)
-        return buffer;
-
-    count = utf8_check_first(buffer[0]);
-    if(count <= 0)
-        return NULL;
-
-    if(count == 1)
-        value = (unsigned char)buffer[0];
-    else
-    {
-        if(count > bufsize || !utf8_check_full(buffer, count, &value))
-            return NULL;
-    }
-
-    if(codepoint)
-        *codepoint = value;
-
-    return buffer + count;
-}
-
-/* String unescape functions */
-int utf8_encode(int32_t codepoint, char *buffer, size_t *size)
-{
-    if(codepoint < 0)
-        return -1;
-    else if(codepoint < 0x80)
-    {
-        buffer[0] = (char)codepoint;
-        *size = 1;
-    }
-    else if(codepoint < 0x800)
-    {
-        buffer[0] = (char)(0xC0 + ((codepoint & 0x7C0) >> 6));
-        buffer[1] = (char)(0x80 + ((codepoint & 0x03F)));
-        *size = 2;
-    }
-    else if(codepoint < 0x10000)
-    {
-        buffer[0] = (char)(0xE0 + ((codepoint & 0xF000) >> 12));
-        buffer[1] = (char)(0x80 + ((codepoint & 0x0FC0) >> 6));
-        buffer[2] = (char)(0x80 + ((codepoint & 0x003F)));
-        *size = 3;
-    }
-    else if(codepoint <= 0x10FFFF)
-    {
-        buffer[0] = (char)(0xF0 + ((codepoint & 0x1C0000) >> 18));
-        buffer[1] = (char)(0x80 + ((codepoint & 0x03F000) >> 12));
-        buffer[2] = (char)(0x80 + ((codepoint & 0x000FC0) >> 6));
-        buffer[3] = (char)(0x80 + ((codepoint & 0x00003F)));
-        *size = 4;
-    }
-    else
-        return -1;
-
-    return 0;
-}
-
-/* assumes that str points to 'u' plus at least 4 valid hex digits */
-int32_t decode_unicode_escape(const char *str) {
-    int i;
-    int32_t value = 0;
-
-    for(i = 1; i <= 4; i++) {
-        char c = str[i];
-        value <<= 4;
-        if(l_isdigit(c))
-            value += c - '0';
-        else if(l_islower(c))
-            value += c - 'a' + 10;
-        else if(l_isupper(c))
-            value += c - 'A' + 10;
-        else
-            return -1;
-    }
-
-    return value;
-}
diff --git a/ext/open62541/deps/string_escape.h b/ext/open62541/deps/string_escape.h
deleted file mode 100644
index 8eba9da..0000000
--- a/ext/open62541/deps/string_escape.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2009-2016 Petri Lehtinen <petri@digip.org>
- *
- * Jansson is free software; you can redistribute it and/or modify
- * it under the terms of the MIT license.
- */
-
-#ifndef STRING_ESCAPE_H
-#define STRING_ESCAPE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <open62541/architecture_definitions.h>
-#include <string.h>
-    
-/* Locale independent versions of isxxx() functions */
-#define l_isupper(c)  ('A' <= (c) && (c) <= 'Z')
-#define l_islower(c)  ('a' <= (c) && (c) <= 'z')
-#define l_isalpha(c)  (l_isupper(c) || l_islower(c))
-#define l_isdigit(c)  ('0' <= (c) && (c) <= '9')
-#define l_isxdigit(c) (l_isdigit(c) || ('A' <= (c) && (c) <= 'F') || ('a' <= (c) && (c) <= 'f'))
-
-int utf8_encode(int32_t codepoint, char *buffer, size_t *size);
-size_t utf8_check_first(char byte);
-size_t utf8_check_full(const char *buffer, size_t size, int32_t *codepoint);
-const char *utf8_iterate(const char *buffer, size_t size, int32_t *codepoint);
-int utf8_check_string(const char *string, size_t length);
-int32_t decode_unicode_escape(const char *str);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* STRING_ESCAPE_H */
-
diff --git a/ext/open62541/deps/ziptree.h b/ext/open62541/deps/ziptree.h
deleted file mode 100644
index 30eb387..0000000
--- a/ext/open62541/deps/ziptree.h
+++ /dev/null
@@ -1,239 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2018 (c) Julius Pfrommer
- */
-
-#ifndef	ZIPTREE_H_
-#define	ZIPTREE_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Reusable zip tree implementation. The style is inspired by the BSD
- * sys/queue.h linked list definition.
- *
- * Zip trees were developed in: Tarjan, R. E., Levy, C. C., and Timmel, S. "Zip
- * Trees." arXiv preprint arXiv:1806.06726 (2018).
- *
- * The ZIP_ENTRY definitions are to be contained in the tree entries themselves.
- * Use ZIP_PROTTYPE to define the signature of the zip tree and ZIP_IMPL (in a
- * .c compilation unit) for the method implementations.
- *
- * Zip trees are a probabilistic data structure. Entries are assigned a
- * (nonzero) rank k with probability 1/2^{k+1}. This header file does not assume
- * a specific random number generator. So the rank must be given when an entry
- * is inserted. A fast way (with a single call to a pseudo random generator) to
- * compute the rank is with ZIP_FFS32(random()). The ZIP_FFS32 returns the least
- * significant nonzero bit of a 32bit number. */
-
-#define ZIP_HEAD(name, type)                    \
-struct name {                                   \
-    struct type *zip_root;                      \
-}
-
-#define ZIP_INIT(head) do { (head)->zip_root = NULL; } while (0)
-#define ZIP_ROOT(head) (head)->zip_root
-#define ZIP_EMPTY(head) (ZIP_ROOT(head) == NULL)
-
-#define ZIP_ENTRY(type)                         \
-struct {                                        \
-    struct type *zip_left;                      \
-    struct type *zip_right;                     \
-    unsigned char rank;                         \
-}
-
-#define ZIP_LEFT(elm, field) (elm)->field.zip_left
-#define ZIP_RIGHT(elm, field) (elm)->field.zip_right
-#define ZIP_RANK(elm, field) (elm)->field.rank
-
-/* Shortcuts */
-#define ZIP_INSERT(name, head, elm, rank) name##_ZIP_INSERT(head, elm, rank)
-#define ZIP_REMOVE(name, head, elm) name##_ZIP_REMOVE(head, elm)
-#define ZIP_FIND(name, head, key) name##_ZIP_FIND(head, key)
-#define ZIP_MIN(name, head) name##_ZIP_MIN(head)
-#define ZIP_MAX(name, head) name##_ZIP_MAX(head)
-#define ZIP_ITER(name, head, cb, d) name##_ZIP_ITER(head, cb, d)
-
-/* Zip tree method prototypes */
-#define ZIP_PROTTYPE(name, type, keytype)                               \
-void name##_ZIP_INSERT(struct name *head, struct type *elm, unsigned char rank); \
-void name##_ZIP_REMOVE(struct name *head, struct type *elm);            \
-struct type *name##_ZIP_FIND(struct name *head, const keytype *key);    \
-struct type *name##_ZIP_MIN(struct name *head);                         \
-struct type *name##_ZIP_MAX(struct name *head);                         \
-typedef void (*name##_cb)(struct type *elm, void *data);                \
-void name##_ZIP_ITER(struct name *head, name##_cb cb, void *data);      \
-
-/* The comparison method "cmp" defined for every zip tree has the signature
- *
- *   enum ZIP_CMP cmpDateTime(const keytype *a, const keytype *b);
- *
- * The entries need an absolute ordering. So ZIP_CMP_EQ must only be returned if
- * a and b point to the same memory. (E.g. assured by unique identifiers.) */
-enum ZIP_CMP {
-    ZIP_CMP_LESS = -1,
-    ZIP_CMP_EQ = 0,
-    ZIP_CMP_MORE = 1
-};
-
-/* Find the position of the first bit in an unsigned 32bit integer */
-#ifdef _MSC_VER
-static __inline
-#else
-static inline
-#endif
-unsigned char
-ZIP_FFS32(unsigned int v) {
-    unsigned int t = 1;
-    unsigned char r = 1;
-    if(v == 0) return 0;
-    while((v & t) == 0) {
-        t = t << 1; r++;
-    }
-    return r;
-}
-
-/* Zip tree method implementations */
-#define ZIP_IMPL(name, type, field, keytype, keyfield, cmp)             \
-static struct type *                                                    \
-__##name##_ZIP_INSERT(struct type *root, struct type *elm) {            \
-    if(!root) {                                                         \
-        ZIP_LEFT(elm, field) = NULL;                                    \
-        ZIP_RIGHT(elm, field) = NULL;                                   \
-        return elm;                                                     \
-    }                                                                   \
-    if((cmp)(&(elm)->keyfield, &(root)->keyfield) == ZIP_CMP_LESS) {    \
-        if(__##name##_ZIP_INSERT(ZIP_LEFT(root, field), elm) == elm) {  \
-            if(ZIP_RANK(elm, field) < ZIP_RANK(root, field)) {          \
-                ZIP_LEFT(root, field) = elm;                            \
-            } else {                                                    \
-                ZIP_LEFT(root, field) = ZIP_RIGHT(elm, field);          \
-                ZIP_RIGHT(elm, field) = root;                           \
-                return elm;                                             \
-            }                                                           \
-        }                                                               \
-    } else {                                                            \
-        if(__##name##_ZIP_INSERT(ZIP_RIGHT(root, field), elm) == elm) { \
-            if(ZIP_RANK(elm, field) <= ZIP_RANK(root, field)) {         \
-                ZIP_RIGHT(root, field) = elm;                           \
-            } else {                                                    \
-                ZIP_RIGHT(root, field) = ZIP_LEFT(elm, field);          \
-                ZIP_LEFT(elm, field) = root;                            \
-                return elm;                                             \
-            }                                                           \
-        }                                                               \
-    }                                                                   \
-    return root;                                                        \
-}                                                                       \
-                                                                        \
-void                                                                    \
-name##_ZIP_INSERT(struct name *head, struct type *elm,                  \
-                  unsigned char rank) {                                 \
-    ZIP_RANK(elm, field) = rank;                                        \
-    ZIP_ROOT(head) = __##name##_ZIP_INSERT(ZIP_ROOT(head), elm);        \
-}                                                                       \
-                                                                        \
-static struct type *                                                    \
-__##name##ZIP(struct type *x, struct type *y) {                         \
-    if(!x) return y;                                                    \
-    if(!y) return x;                                                    \
-    if(ZIP_RANK(x, field) < ZIP_RANK(y, field)) {                       \
-        ZIP_LEFT(y, field) = __##name##ZIP(x, ZIP_LEFT(y, field));      \
-        return y;                                                       \
-    }                                                                   \
-    ZIP_RIGHT(x, field) = __##name##ZIP(ZIP_RIGHT(x, field), y);        \
-    return x;                                                           \
-}                                                                       \
-                                                                        \
-static struct type *                                                    \
-__##name##_ZIP_REMOVE(struct type *root, struct type *elm) {            \
-    if(root == elm)                                                     \
-        return __##name##ZIP(ZIP_LEFT(root, field),                     \
-                             ZIP_RIGHT(root, field));                   \
-    enum ZIP_CMP eq = (cmp)(&(elm)->keyfield, &(root)->keyfield);       \
-    if(eq == ZIP_CMP_LESS) {                                            \
-        struct type *left = ZIP_LEFT(root, field);                      \
-        if(elm == left)                                                 \
-            ZIP_LEFT(root, field) =                                     \
-                __##name##ZIP(ZIP_LEFT(left, field),                    \
-                              ZIP_RIGHT(left, field));                  \
-        else                                                            \
-            __##name##_ZIP_REMOVE(left, elm);                           \
-    } else {                                                            \
-        struct type *right = ZIP_RIGHT(root, field);                    \
-        if(elm == right)                                                \
-            ZIP_RIGHT(root, field) =                                    \
-                __##name##ZIP(ZIP_LEFT(right, field),                   \
-                              ZIP_RIGHT(right, field));                 \
-        else                                                            \
-            __##name##_ZIP_REMOVE(right, elm);                          \
-    }                                                                   \
-    return root;                                                        \
-}                                                                       \
-                                                                        \
-void                                                                    \
-name##_ZIP_REMOVE(struct name *head, struct type *elm) {                \
-    ZIP_ROOT(head) = __##name##_ZIP_REMOVE(ZIP_ROOT(head), elm);        \
-}                                                                       \
-                                                                        \
-static struct type *                                                    \
-__##name##_ZIP_FIND(struct type *root, const keytype *key) {            \
-    if(!root)                                                           \
-        return NULL;                                                    \
-    enum ZIP_CMP eq = (cmp)(key, &(root)->keyfield);                    \
-    if(eq == ZIP_CMP_EQ) {                                              \
-        return root;                                                    \
-    }                                                                   \
-    if(eq == ZIP_CMP_LESS) {                                            \
-        return __##name##_ZIP_FIND(ZIP_LEFT(root, field), key);         \
-    }                                                                   \
-    return __##name##_ZIP_FIND(ZIP_RIGHT(root, field), key);            \
-}                                                                       \
-                                                                        \
-struct type *                                                           \
-name##_ZIP_FIND(struct name *head, const keytype *key) {                \
-    return __##name##_ZIP_FIND(ZIP_ROOT(head), key);                    \
-}                                                                       \
-                                                                        \
-struct type *                                                           \
-name##_ZIP_MIN(struct name *head) {                                     \
-    struct type *cur = ZIP_ROOT(head);                                  \
-    if(!cur) return NULL;                                               \
-    while(ZIP_LEFT(cur, field)) {                                       \
-        cur = ZIP_LEFT(cur, field);                                     \
-    }                                                                   \
-    return cur;                                                         \
-}                                                                       \
-                                                                        \
-struct type *                                                           \
-name##_ZIP_MAX(struct name *head) {                                     \
-    struct type *cur = ZIP_ROOT(head);                                  \
-    if(!cur) return NULL;                                               \
-    while(ZIP_RIGHT(cur, field)) {                                      \
-        cur = ZIP_RIGHT(cur, field);                                    \
-    }                                                                   \
-    return cur;                                                         \
-}                                                                       \
-                                                                        \
-static void                                                             \
-__##name##_ZIP_ITER(struct type *elm, name##_cb cb, void *data) {       \
-    if(!elm)                                                            \
-        return;                                                         \
-    __##name##_ZIP_ITER(ZIP_LEFT(elm, field), cb, data);                \
-    __##name##_ZIP_ITER(ZIP_RIGHT(elm, field), cb, data);               \
-    cb(elm, data);                                                      \
-}                                                                       \
-                                                                        \
-void                                                                    \
-name##_ZIP_ITER(struct name *head, name##_cb cb, void *data) {          \
-    __##name##_ZIP_ITER(ZIP_ROOT(head), cb, data);                      \
-}
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* ZIPTREE_H_ */
diff --git a/ext/open62541/doc/CMakeLists.txt b/ext/open62541/doc/CMakeLists.txt
deleted file mode 100644
index 4cd3810..0000000
--- a/ext/open62541/doc/CMakeLists.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-find_package(Sphinx)

-find_package(LATEX)

-

-set(DOC_LATEX_DIR ${PROJECT_BINARY_DIR}/doc_latex)

-set(DOC_HTML_DIR ${PROJECT_BINARY_DIR}/doc)

-set(DOC_SRC_DIR ${PROJECT_BINARY_DIR}/doc_src)

-

-make_directory(${DOC_SRC_DIR})

-

-# Copy all files from /doc dir to the /doc_src dir. doc_src is used to compile the documentation.

-# Use custom copy command to make sure files are correctly updated when they are changed.

-file(GLOB DOC_SRC "${PROJECT_SOURCE_DIR}/doc/*")

-list(REMOVE_ITEM DOC_SRC "${PROJECT_SOURCE_DIR}/doc/conf.py")

-list(REMOVE_ITEM DOC_SRC "${PROJECT_SOURCE_DIR}/doc/CMakeLists.txt")

-string(REPLACE "${PROJECT_SOURCE_DIR}/doc" "${DOC_SRC_DIR}" DOC_TARGET "${DOC_SRC}")

-file(COPY ${DOC_SRC} DESTINATION ${DOC_SRC_DIR})

-

-configure_file("${PROJECT_SOURCE_DIR}/doc/conf.py" "${DOC_SRC_DIR}/conf.py")

-

-

-list(APPEND GENERATED_RST "")

-

-macro(generate_rst in out)

-    add_custom_command(OUTPUT ${out}

-                       DEPENDS ${PROJECT_SOURCE_DIR}/tools/c2rst.py ${in}

-                       PRE_BUILD

-                       COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/c2rst.py ${in} ${out})

-    list(APPEND GENERATED_RST "${out}")

-endmacro()

-

-

-# Doc from headers

-generate_rst(${PROJECT_SOURCE_DIR}/include/open62541/types.h ${DOC_SRC_DIR}/types.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/include/open62541/constants.h ${DOC_SRC_DIR}/constants.rst)

-generate_rst(${PROJECT_BINARY_DIR}/src_generated/open62541/statuscodes.h ${DOC_SRC_DIR}/statuscodes.rst)

-generate_rst(${PROJECT_BINARY_DIR}/src_generated/open62541/types_generated.h ${DOC_SRC_DIR}/types_generated.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/include/open62541/server_config.h ${DOC_SRC_DIR}/server_config.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/include/open62541/server.h ${DOC_SRC_DIR}/server.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/include/open62541/client_config.h ${DOC_SRC_DIR}/client_config.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/include/open62541/client_subscriptions.h ${DOC_SRC_DIR}/client_subscriptions.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/include/open62541/client.h ${DOC_SRC_DIR}/client.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/include/open62541/client_highlevel.h ${DOC_SRC_DIR}/client_highlevel.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/include/open62541/plugin/log.h ${DOC_SRC_DIR}/plugin_log.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/include/open62541/plugin/network.h ${DOC_SRC_DIR}/plugin_network.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/include/open62541/plugin/accesscontrol.h ${DOC_SRC_DIR}/plugin_accesscontrol.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/src/server/ua_services.h ${DOC_SRC_DIR}/services.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/include/open62541/plugin/nodestore.h ${DOC_SRC_DIR}/nodestore.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/include/open62541/plugin/pubsub.h ${DOC_SRC_DIR}/plugin_pubsub_connection.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/include/open62541/server_pubsub.h ${DOC_SRC_DIR}/pubsub.rst)

-

-# Doc from tutorial code

-generate_rst(${PROJECT_SOURCE_DIR}/examples/tutorial_datatypes.c ${DOC_SRC_DIR}/tutorial_datatypes.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/examples/tutorial_server_firststeps.c ${DOC_SRC_DIR}/tutorial_server_firststeps.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/examples/tutorial_server_variable.c ${DOC_SRC_DIR}/tutorial_server_variable.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/examples/tutorial_server_variabletype.c ${DOC_SRC_DIR}/tutorial_server_variabletype.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/examples/tutorial_server_datasource.c ${DOC_SRC_DIR}/tutorial_server_datasource.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/examples/tutorial_server_events.c ${DOC_SRC_DIR}/tutorial_server_events.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/examples/tutorial_server_monitoreditems.c ${DOC_SRC_DIR}/tutorial_server_monitoreditems.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/examples/tutorial_server_object.c ${DOC_SRC_DIR}/tutorial_server_object.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/examples/tutorial_server_method.c ${DOC_SRC_DIR}/tutorial_server_method.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/examples/tutorial_client_firststeps.c ${DOC_SRC_DIR}/tutorial_client_firststeps.rst)

-generate_rst(${PROJECT_SOURCE_DIR}/examples/pubsub/tutorial_pubsub_publish.c ${DOC_SRC_DIR}/tutorial_pubsub_publish.rst)

-

-

-# Doc targets

-

-add_custom_target(doc_latex ${SPHINX_EXECUTABLE}

-                  -b latex "${DOC_SRC_DIR}" "${DOC_LATEX_DIR}"

-                  DEPENDS ${GENERATED_RST} ${DOC_TARGET}

-                  COMMENT "Building LaTeX sources for documentation with Sphinx")

-add_dependencies(doc_latex open62541)

-

-add_custom_target(doc_pdf ${PDFLATEX_COMPILER} -interaction=batchmode "open62541.tex"

-                  WORKING_DIRECTORY ${DOC_LATEX_DIR}

-                  # compile it twice so that the contents pages are correct

-                  COMMAND ${PDFLATEX_COMPILER} -interaction=batchmode "open62541.tex"

-                  DEPENDS ${PDFLATEX_COMPILER}

-                  COMMENT "Generating PDF documentation from LaTeX sources")

-add_dependencies(doc_pdf doc_latex)

-

-add_custom_target(doc ${SPHINX_EXECUTABLE}

-                  -b html "${DOC_SRC_DIR}" "${DOC_HTML_DIR}"

-                  DEPENDS ${GENERATED_RST} ${DOC_TARGET}

-                  COMMENT "Building HTML documentation with Sphinx")

-add_dependencies(doc open62541)

-

-set_target_properties(doc doc_latex doc_pdf PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD TRUE)

-set_target_properties(doc doc_latex doc_pdf PROPERTIES FOLDER "open62541/doc")

diff --git a/ext/open62541/doc/building.rst b/ext/open62541/doc/building.rst
deleted file mode 100644
index 4c09ff9..0000000
--- a/ext/open62541/doc/building.rst
+++ /dev/null
@@ -1,299 +0,0 @@
-.. _building:
-
-Building open62541
-==================
-
-open62541 uses CMake to build the library and binaries. The library version is automatically
-detected using ``git describe``. This command returns a valid version string based on the current tag.
-If you did not directly clone the sources, but use the tar or zip package from a release, you need
-to manually specify the version. In that case use e.g. ``cmake -DOPEN62541_VERSION=v1.0.3``.
-
-Building the Examples
----------------------
-
-Using the GCC compiler, the following calls build the examples on Linux.
-
-.. code-block:: bash
-
-   cp /path-to/open62541.* . # copy single-file distribution to the local directory
-   cp /path-to/examples/tutorial_server_variable.c . # copy the example server
-   gcc -std=c99 -DUA_ARCHITECTURE_POSIX open62541.c tutorial_server_variable.c -o server
-
-Building the Library
---------------------
-
-Building with CMake on Ubuntu or Debian
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: bash
-
-   sudo apt-get install git build-essential gcc pkg-config cmake python
-
-   # enable additional features
-   sudo apt-get install cmake-curses-gui # for the ccmake graphical interface
-   sudo apt-get install libmbedtls-dev # for encryption support
-   sudo apt-get install check libsubunit-dev # for unit tests
-   sudo apt-get install python-sphinx graphviz # for documentation generation
-   sudo apt-get install python-sphinx-rtd-theme # documentation style
-
-   cd open62541
-   mkdir build
-   cd build
-   cmake ..
-   make
-
-   # select additional features
-   ccmake ..
-   make
-
-   # build documentation
-   make doc # html documentation
-   make doc_pdf # pdf documentation (requires LaTeX)
-
-Building with CMake on Windows
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Here we explain the build process for Visual Studio (2013 or newer). To build
-with MinGW, just replace the compiler selection in the call to CMake.
-
-- Download and install
-
-  - Python 2.7.x (Python 3.x works as well): https://python.org/downloads
-  - CMake: http://www.cmake.org/cmake/resources/software.html
-  - Microsoft Visual Studio: https://www.visualstudio.com/products/visual-studio-community-vs
-
-- Download the open62541 sources (using git or as a zipfile from github)
-- Open a command shell (cmd) and run
-
-.. code-block:: bat
-
-   cd <path-to>\open62541
-   mkdir build
-   cd build
-   <path-to>\cmake.exe .. -G "Visual Studio 14 2015"
-   :: You can use use cmake-gui for a graphical user-interface to select features
-
-- Then open :file:`build\open62541.sln` in Visual Studio 2015 and build as usual
-
-Building on OS X
-^^^^^^^^^^^^^^^^
-
-- Download and install
-
-  - Xcode: https://itunes.apple.com/us/app/xcode/id497799835?ls=1&mt=12
-  - Homebrew: http://brew.sh/
-  - Pip (a package manager for python, may be preinstalled): ``sudo easy_install pip``
-
-- Run the following in a shell
-
-.. code-block:: bash
-
-   brew install cmake
-   pip install sphinx # for documentation generation
-   pip install sphinx_rtd_theme # documentation style
-   brew install graphviz # for graphics in the documentation
-   brew install check # for unit tests
-
-Follow Ubuntu instructions without the ``apt-get`` commands as these are taken care of by the above packages.
-
-Building on OpenBSD
-^^^^^^^^^^^^^^^^^^^
-The procedure below works on OpenBSD 5.8 with gcc version 4.8.4, cmake version 3.2.3 and Python version 2.7.10.
-
-- Install a recent gcc, python and cmake:
-
-.. code-block:: bash
-   
-   pkg_add gcc python cmake
-
-- Tell the system to actually use the recent gcc (it gets installed as egcc on OpenBSD): 
-
-.. code-block:: bash
-   
-   export CC=egcc CXX=eg++
-
-- Now procede as described for Ubuntu/Debian:
-
-.. code-block:: bash
-
-   cd open62541
-   mkdir build
-   cd build
-   cmake ..
-   make
-
-
-.. _build_options:
-
-Build Options
--------------
-
-The open62541 project uses CMake to manage the build options, for code
-generation and to generate build projects for the different systems and IDEs.
-The tools *ccmake* or *cmake-gui* can be used to graphically set the build
-options.
-
-Most options can be changed manually in :file:`ua_config.h` (:file:`open62541.h`
-for the single-file release) after the code generation. But usually there is no
-need to adjust them.
-
-Main Build Options
-^^^^^^^^^^^^^^^^^^
-
-**CMAKE_BUILD_TYPE**
-  - ``RelWithDebInfo`` -O2 optimization with debug symbols
-  - ``Release`` -O2 optimization without debug symbols
-  - ``Debug`` -O0 optimization with debug symbols
-  - ``MinSizeRel`` -Os optimization without debug symbols
-
-**UA_LOGLEVEL**
-   The SDK logs events of the level defined in ``UA_LOGLEVEL`` and above only.
-   The logging event levels are as follows:
-
-     - 600: Fatal
-     - 500: Error
-     - 400: Warning
-     - 300: Info
-     - 200: Debug
-     - 100: Trace
-
-Select build artefacts
-^^^^^^^^^^^^^^^^^^^^^^
-
-By default only the main library shared object libopen62541.so (open62541.dll)
-or static linking archive open62541.a (open62541.lib) is built. Additional
-artifacts can be specified by the following options:
-
-**UA_BUILD_EXAMPLES**
-   Compile example servers and clients from :file:`examples/*.c`.
-
-**UA_BUILD_UNIT_TESTS**
-   Compile unit tests. The tests can be executed with ``make test``
-
-**UA_BUILD_SELFSIGNED_CERTIFICATE**
-   Generate a self-signed certificate for the server (openSSL required)
-
-Detailed SDK Features
-^^^^^^^^^^^^^^^^^^^^^
-
-**UA_ENABLE_SUBSCRIPTIONS**
-   Enable subscriptions
-
-**UA_ENABLE_SUBSCRIPTIONS_EVENTS (EXPERIMENTAL)**
-    Enable the use of events for subscriptions. This is a new feature and currently marked as EXPERIMENTAL.
-
-**UA_ENABLE_METHODCALLS**
-   Enable the Method service set
-
-**UA_ENABLE_NODEMANAGEMENT**
-   Enable dynamic addition and removal of nodes at runtime
-
-**UA_ENABLE_AMALGAMATION**
-   Compile a single-file release into the files :file:`open62541.c` and :file:`open62541.h`. Not receommended for installation.
-
-**UA_MULTITHREADING (EXPERIMENTAL)**
-   Enable multi-threading support. This is a new feature and currently marked as EXPERIMENTAL.
-   The supported levels are as follows:
-
-        - 0: Multithreading support disabled.
-        - 100: Functions marked with the UA_THREADSAFE-macro are protected with a lock-based enhancement using mutexes.
-        Multiple threads are allowed to call these functions of the SDK at the same time without causing race conditions.
-        - 200: Work is distributed to a number of worker threads. Those worker threads are created within the SDK.
-
-**UA_ENABLE_IMMUTABLE_NODES**
-   Nodes in the information model are not edited but copied and replaced. The
-   replacement is done with atomic operations so that the information model is
-   always consistent and can be accessed from an interrupt or parallel thread
-   (depends on the node storage plugin implementation). This feature is a
-   prerequisite for ``UA_MULTITHREADING``.
-
-**UA_ENABLE_COVERAGE**
-   Measure the coverage of unit tests
-**UA_ENABLE_DISCOVERY**
-   Enable Discovery Service (LDS)
-**UA_ENABLE_DISCOVERY_MULTICAST**
-   Enable Discovery Service with multicast support (LDS-ME)
-**UA_ENABLE_DISCOVERY_SEMAPHORE**
-   Enable Discovery Semaphore support
-
-**UA_NAMESPACE_ZERO**
-
-   Namespace zero contains the standard-defined nodes. The full namespace zero
-   may not be required for all applications. The selectable options are as follows:
-
-   - ``MINIMAL``: A barebones namespace zero that is compatible with most
-     clients. But this namespace 0 is so small that it does not pass the CTT
-     (Conformance Testing Tools of the OPC Foundation).
-   - ``REDUCED``: Small namespace zero that passes the CTT.
-   - ``FULL``: Full namespace zero generated from the official XML definitions.
-
-   The advanced build option ``UA_FILE_NS0`` can be used to override the XML
-   file used for namespace zero generation.
-
-Some options are marked as advanced. The advanced options need to be toggled to
-be visible in the cmake GUIs.
-
-**UA_ENABLE_TYPEDESCRIPTION**
-   Add the type and member names to the UA_DataType structure. Enabled by default.
-
-**UA_ENABLE_STATUSCODE_DESCRIPTIONS**
-   Compile the human-readable name of the StatusCodes into the binary. Enabled by default.
-**UA_ENABLE_FULL_NS0**
-   Use the full NS0 instead of a minimal Namespace 0 nodeset
-   ``UA_FILE_NS0`` is used to specify the file for NS0 generation from namespace0 folder. Default value is ``Opc.Ua.NodeSet2.xml``
-
-Debug Build Options
-^^^^^^^^^^^^^^^^^^^
-
-This group contains build options mainly useful for development of the library itself.
-
-**UA_DEBUG**
-   Enable assertions and additional definitions not intended for production builds
-
-**UA_DEBUG_DUMP_PKGS**
-   Dump every package received by the server as hexdump format
-
-Building a shared library
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
-open62541 is small enough that most users will want to statically link the
-library into their programs. If a shared library (.dll, .so) is required, this
-can be enabled in CMake with the ``BUILD_SHARED_LIBS`` option. Note that this
-option modifies the :file:`ua_config.h` file that is also included in
-:file:`open62541.h` for the single-file distribution.
-
-
-Minimizing the binary size
-^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The size of the generated binary can be reduced considerably by adjusting the
-build configuration. With open2541, it is possible to configure minimal servers
-that require less than 100kB of RAM and ROM.
-
-The following options influence the ROM requirements:
-
-First, in CMake, the build type can be set to ``CMAKE_BUILD_TYPE=MinSizeRel``.
-This sets the compiler flags to minimize the binary size. The build type also
-strips out debug information. Second, the binary size can be reduced by removing
-features via the build-flags described above.
-
-Second, setting ``UA_NAMESPACE_ZERO`` to ``MINIMAL`` reduces the size of the
-builtin information model. Setting this option can reduce the binary size by
-half in some cases.
-
-Third, some features might not be needed and can be disabled to reduce the
-binary footprint. Examples for this are Subscriptions or encrypted
-communication.
-
-Last, logging messages take up a lot of space in the binary and might not be
-needed in embedded scenarios. Setting ``UA_LOGLEVEL`` to a value above 600
-(``FATAL``) disables all logging. In addition, the feature-flags
-``UA_ENABLE_TYPEDESCRIPTION`` and ``UA_ENABLE_STATUSCODE_DESCRIPTIONS`` add static
-information to the binary that is only used for human-readable logging and
-debugging.
-
-The RAM requirements of a server are mostly due to the following settings:
-
-- The size of the information model
-- The number of connected clients
-- The configured maximum message size that is preallocated
diff --git a/ext/open62541/doc/conf.py b/ext/open62541/doc/conf.py
deleted file mode 100644
index e2bf275..0000000
--- a/ext/open62541/doc/conf.py
+++ /dev/null
@@ -1,292 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this 
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# -*- coding: utf-8 -*-
-#
-# open62541 documentation build configuration file, created by
-# sphinx-quickstart on Sat May 23 19:39:37 2015.
-#
-# This file is execfile()d with the current directory set to its
-# containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-import sys
-import os
-import shlex
-import sphinx_rtd_theme
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-#sys.path.insert(0, os.path.abspath('.'))
-
-# -- General configuration ------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = ['sphinx.ext.graphviz']
-
-numfig = True
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# The suffix(es) of source filenames.
-# You can specify multiple suffix as a list of string:
-# source_suffix = ['.rst', '.md']
-source_suffix = '.rst'
-
-# The encoding of source files.
-#source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = 'toc'
-
-# General information about the project.
-project = u'open62541'
-copyright = u'2016, The open62541 authors'
-author = u'The open62541 authors'
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
-version = "${OPEN62541_VER_MAJOR}.${OPEN62541_VER_MINOR}"
-# The full version, including alpha/beta/rc tags.
-release = "${OPEN62541_VER_MAJOR}.${OPEN62541_VER_MINOR}.${OPEN62541_VER_PATCH}${OPEN62541_VER_LABEL}"
-# The full version, including alpha/beta/rc tags.
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#
-# This is also used if you do content translation via gettext catalogs.
-# Usually you set "language" from the command line for these cases.
-language = "en"
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#today = ''
-# Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-exclude_patterns = ["client_config.rst", "server_config.rst"]
-
-# The reST default role (used for this markup: `text`) to use for all
-# documents.
-#default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-#add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-#show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-# A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
-
-# If true, keep warnings as "system message" paragraphs in the built documents.
-#keep_warnings = False
-
-# If true, `todo` and `todoList` produce output, else they produce nothing.
-todo_include_todos = False
-
-
-# -- Options for HTML output ----------------------------------------------
-
-# The theme to use for HTML and HTML Help pages.  See the documentation for
-# a list of builtin themes.
-html_theme = 'sphinx_rtd_theme'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further.  For a list of options available for each theme, see the
-# documentation.
-#html_theme_options = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
-
-# The name for this set of Sphinx documents.  If None, it defaults to
-# "<project> v<release> documentation".
-#html_title = None
-
-# A shorter title for the navigation bar.  Default is the same as html_title.
-#html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-html_logo = "open62541_html.png"
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-#html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['.']
-
-# Add any extra paths that contain custom files (such as robots.txt or
-# .htaccess) here, relative to this directory. These files are copied
-# directly to the root of the documentation.
-#html_extra_path = []
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-#html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-#html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-#html_additional_pages = {}
-
-# If false, no module index is generated.
-#html_domain_indices = True
-
-# If false, no index is generated.
-#html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-#html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-#html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it.  The value of this option must be the
-# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = None
-
-# Language to be used for generating the HTML full-text search index.
-# Sphinx supports the following languages:
-#   'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
-#   'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
-#html_search_language = 'en'
-
-# A dictionary with options for the search language support, empty by default.
-# Now only 'ja' uses this config value
-#html_search_options = {'type': 'default'}
-
-# The name of a javascript file (relative to the configuration directory) that
-# implements a search results scorer. If empty, the default will be used.
-#html_search_scorer = 'scorer.js'
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'doc/open62541doc'
-
-# -- Options for LaTeX output ---------------------------------------------
-
-latex_elements = {
-# The paper size ('letterpaper' or 'a4paper').
-'papersize': 'a4paper',
-
-# The font size ('10pt', '11pt' or '12pt').
-#'pointsize': '10pt',
-
-# Additional stuff for the LaTeX preamble.
-#'preamble': '',
-
-# Latex figure (float) alignment
-#'figure_align': 'htbp',
-}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title,
-#  author, documentclass [howto, manual, or own class]).
-latex_documents = [
-  (master_doc, 'open62541.tex', u'open62541 Documentation',
-   u'The open62541 authors', 'manual'),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-latex_logo = "open62541.png"
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#latex_use_parts = False
-
-# If true, show page references after internal links.
-#latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-#latex_show_urls = False
-
-# Documents to append as an appendix to all manuals.
-#latex_appendices = []
-
-# If false, no module index is generated.
-#latex_domain_indices = True
-
-
-# -- Options for manual page output ---------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
-    (master_doc, 'open62541', u'open62541 Documentation',
-     [author], 1)
-]
-
-# If true, show URL addresses after external links.
-#man_show_urls = False
-
-
-# -- Options for Texinfo output -------------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-#  dir menu entry, description, category)
-texinfo_documents = [
-  (master_doc, 'open62541', u'open62541 Documentation',
-   author, 'open62541', 'One line description of project.',
-   'Miscellaneous'),
-]
-
-# Documents to append as an appendix to all manuals.
-#texinfo_appendices = []
-
-# If false, no module index is generated.
-#texinfo_domain_indices = True
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-#texinfo_show_urls = 'footnote'
-
-# If true, do not generate a @detailmenu in the "Top" node's menu.
-#texinfo_no_detailmenu = False
diff --git a/ext/open62541/doc/index.rst b/ext/open62541/doc/index.rst
deleted file mode 100644
index 98b1816..0000000
--- a/ext/open62541/doc/index.rst
+++ /dev/null
@@ -1,107 +0,0 @@
-Introduction
-============
-
-open62541 (http://open62541.org) is an open source and free implementation of
-OPC UA (OPC Unified Architecture) written in the common subset of the C99 and
-C++98 languages. The library is usable with all major compilers and provides the
-necessary tools to implement dedicated OPC UA clients and servers, or to
-integrate OPC UA-based communication into existing applications. open62541
-library is platform independent. All platform-specific functionality is
-implemented via exchangeable plugins. Plugin implementations are provided for
-the major operating systems.
-
-open62541 is licensed under the Mozilla Public License v2.0. So the *open62541
-library can be used in projects that are not open source*. Only changes to the
-open62541 library itself need to published under the same license. The plugins,
-as well as the server and client examples are in the public domain (CC0
-license). They can be reused under any license and changes do not have to be
-published.
-
-OPC Unified Architecture
-------------------------
-
-`OPC UA <http://en.wikipedia.org/wiki/OPC_Unified_Architecture>`_ is a protocol
-for industrial communication and has been standardized in the IEC 62541 series.
-At its core, OPC UA defines
-
-- an asynchronous :ref:`protocol<protocol>` (built upon TCP, HTTP or SOAP) that
-  defines the exchange of messages via sessions, (on top of) secure
-  communication channels, (on top of) raw connections,
-- a :ref:`type system<types>` for protocol messages with a binary and XML-based
-  encoding scheme,
-- a meta-model for :ref:`information modeling<information-modelling>`, that
-  combines object-orientation with semantic triple-relations, and
-- a set of 37 standard :ref:`services<services>` to interact with server-side
-  information models. The signature of each service is defined as a request and
-  response message in the protocol type system.
-
-The standard itself can be purchased from IEC or downloaded for free on the
-website of the OPC Foundation at https://opcfoundation.org/ (you need to
-register with a valid email).
-
-The OPC Foundation drives the continuous improvement of the standard and the
-development of companion specifications. Companion specifications translate
-established concepts and reusable components from an application domain into OPC
-UA. They are created jointly with an established industry council or
-standardization body from the application domain. Furthermore, the OPC
-Foundation organizes events for the dissemination of the standard and provides
-the infrastructure and tools for compliance certification.
-
-open62541 Features
-------------------
-
-open62541 implements the OPC UA binary protocol stack as well as a client and
-server SDK. It currently supports the Micro Embedded Device Server Profile plus
-some additional features. Server binaries can be well under 100kb in size,
-depending on the contained information model.
-
-- Communication Stack
-
-  - OPC UA binary protocol
-  - Chunking (splitting of large messages)
-  - Exchangeable network layer (plugin) for using custom networking APIs (e.g. on embedded targets)
-  - Encrypted communication
-  - Asynchronous service requests in the client
-
-- Information model
-
-  - Support for all OPC UA node types (including method nodes)
-  - Support for adding and removing nodes and references also at runtime.
-  - Support for inheritance and instantiation of object- and variable-types (custom constructor/destructor, instantiation of child nodes)
-  - Access control for individual nodes
-
-- Subscriptions
-
-  - Support for subscriptions/monitoreditems for data change notifications
-  - Very low resource consumption for each monitored value (event-based server architecture)
-
-- Code-Generation
-
-  - Support for generating data types from standard XML definitions
-  - Support for generating server-side information models (nodesets) from standard XML definitions
-
-Features on the roadmap for the 0.3 release series but missing in the initial v0.3 release are:
-
-- Encrypted communication in the client
-- Events (notifications emitted by objects, data change notifications are implemented)
-- Event-loop (background tasks) in the client
-
-Getting Help
-------------
-
-For discussion and help besides this documentation, you can reach the open62541 community via
-
-- the `mailing list <https://groups.google.com/d/forum/open62541>`_
-- our `IRC channel <http://webchat.freenode.net/?channels=%23open62541>`_
-- the `bugtracker <https://github.com/open62541/open62541/issues>`_
-
-Contributing
-------------
-
-As an open source project, we invite new contributors to help improve open62541.
-Issue reports, bugfixes and new features are very welcome. The following are
-good starting points for new contributors:
-
-- `Report bugs <https://github.com/open62541/open62541/issues>`_
-- Improve the `documentation <http://open62541.org/doc/current>`_
-- Work on issues marked as `good first issue <https://github.com/open62541/open62541/labels/good%20first%20issue>`_
diff --git a/ext/open62541/doc/installing.rst b/ext/open62541/doc/installing.rst
deleted file mode 100644
index 93c2ab6..0000000
--- a/ext/open62541/doc/installing.rst
+++ /dev/null
@@ -1,106 +0,0 @@
-.. _installing:
-
-Installing open62541
-====================
-
-Manual installation
--------------------
-
-You can install open62541 using the well known `make install` command.
-This allows you to use pre-built libraries and headers for your own project.
-
-To override the default installation directory use ``cmake -DCMAKE_INSTALL_PREFIX=/some/path``.
-Based on the SDK Features you selected, as described in :ref:`build_options`, these features will also
-be included in the installation. Thus we recommend to enable as many non-experimental features as possible
-for the installed binary.
-
-The recommended cmake options for a default installation are:
-
-.. code-block:: bash
-
-   git submodule update --init --recursive
-   mkdir build && cd build
-   cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUA_NAMESPACE_ZERO=FULL ..
-   make
-   sudo make install
-
-This will enable the following features in 0.4:
-
- * Discovery
- * FullNamespace
- * Methods
- * Subscriptions
-
-The following features are not enabled and can be optionally enabled using the build options as described in :ref:`build_options`:
-
- * Amalgamation
- * DiscoveryMulticast
- * Encryption
- * Multithreading
- * Subscriptions
-
-.. important::
-   We strongly recommend to not use ``UA_ENABLE_AMALGAMATION=ON`` for your installation. This will only generate a single ``open62541.h`` header file instead of the single header files.
-   We encourage our users to use the non-amalgamated version to reduce the header size and simplify dependency management.
-
-
-In your own CMake project you can then include the open62541 library using:
-
-.. code-block:: cmake
-
-   # optionally you can also specify a specific version
-   # e.g. find_package(open62541 1.0.0)
-   find_package(open62541 REQUIRED COMPONENTS Events FullNamespace)
-   add_executable(main main.cpp)
-   target_link_libraries(main open62541::open62541)
-
-
-A full list of enabled features during build time is stored in the CMake Variable ``open62541_COMPONENTS_ALL``
-
-
-Prebuilt packages
------------------
-
-Pack branches
-^^^^^^^^^^^^^
-
-Github allows you to download a specific branch as .zip package. Just using this .zip package for open62541 will likely fail:
-
- * CMake uses ``git describe --tags`` to automatically detect the version string. The .zip package does not include any git information
- * Specific options during the build stack require additional git submodules which are not inlined in the .zip
-
-Therefore we provide packaging branches. They have the prefix `pack/` and are automatically updated to match the referenced branch.
-
-Here are some examples:
-
- * `pack/master.zip <https://github.com/open62541/open62541/archive/pack/master.zip>`_
- * `pack/1.0.zip <https://github.com/open62541/open62541/archive/pack/1.0.zip>`_
-
-These pack branches have inlined submodules and the version string is hardcoded. If you need to build from source but do not want to use git,
-use these specific pack versions.
-
-Prebuild binaries
-^^^^^^^^^^^^^^^^^
-
-You can always find prebuild binaries for every release on our `Github Release Page <https://github.com/open62541/open62541/releases>`_.
-
-
-Nightly single file releases for Linux and Windows of the last 50 commits can be found here: https://open62541.org/releases/
-
-
-OS Specific packages
-^^^^^^^^^^^^^^^^^^^^
-
-Debian packages can be found in our official PPA:
-
- * Daily Builds (based on master branch): https://launchpad.net/~open62541-team/+archive/ubuntu/daily
- * Release Builds (starting with Version 0.4): https://launchpad.net/~open62541-team/+archive/ubuntu/ppa
-
-Install them with:
-
-
-.. code-block:: bash
-
-    sudo add-apt-repository ppa:open62541-team/ppa
-    sudo apt-get update
-    sudo apt-get install libopen62541-dev
diff --git a/ext/open62541/doc/internal.rst b/ext/open62541/doc/internal.rst
deleted file mode 100644
index 80ba052..0000000
--- a/ext/open62541/doc/internal.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-Internals
-=========
-
-.. toctree::
-
-   statuscodes
-   plugin_network
-   plugin_accesscontrol
-   plugin_log
-   plugin_pubsub_connection
-   pubsub
diff --git a/ext/open62541/doc/nodeset_compiler.rst b/ext/open62541/doc/nodeset_compiler.rst
deleted file mode 100644
index dd752cc..0000000
--- a/ext/open62541/doc/nodeset_compiler.rst
+++ /dev/null
@@ -1,478 +0,0 @@
-XML Nodeset Compiler
---------------------
-
-When writing an application, it is more comfortable to create information models using some GUI tools. Most tools can export data according the OPC UA Nodeset XML schema. open62541 contains a python based nodeset compiler that can transform these information model definitions into a working server.
-
-Note that the nodeset compiler you can find in the *tools/nodeset_compiler* subfolder is *not* an XML transformation tool but a compiler. That means that it will create an internal representation when parsing the XML files and attempt to understand and verify the correctness of this representation in order to generate C Code.
-
-Getting started
-...............
-
-We take the following information model snippet as the starting point of the following tutorial. A more detailed tutorial on how to create your own information model and NodeSet2.xml can be found in this blog post: https://opcua.rocks/custom-information-models/
-
-.. code-block:: xml
-
-    <UANodeSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-               xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd"
-               xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd"
-               xmlns:s1="http://yourorganisation.org/example_nodeset/"
-               xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-        <NamespaceUris>
-            <Uri>http://yourorganisation.org/example_nodeset/</Uri>
-        </NamespaceUris>
-        <Aliases>
-            <Alias Alias="Boolean">i=1</Alias>
-            <Alias Alias="UInt32">i=7</Alias>
-            <Alias Alias="String">i=12</Alias>
-            <Alias Alias="HasModellingRule">i=37</Alias>
-            <Alias Alias="HasTypeDefinition">i=40</Alias>
-            <Alias Alias="HasSubtype">i=45</Alias>
-            <Alias Alias="HasProperty">i=46</Alias>
-            <Alias Alias="HasComponent">i=47</Alias>
-            <Alias Alias="Argument">i=296</Alias>
-        </Aliases>
-        <Extensions>
-            <Extension>
-                <ModelInfo Tool="UaModeler" Hash="Zs8w1AQI71W8P/GOk3k/xQ=="
-                           Version="1.3.4"/>
-            </Extension>
-        </Extensions>
-        <UAReferenceType NodeId="ns=1;i=4001" BrowseName="1:providesInputTo">
-            <DisplayName>providesInputTo</DisplayName>
-            <References>
-                <Reference ReferenceType="HasSubtype" IsForward="false">
-                    i=33
-                </Reference>
-            </References>
-            <InverseName Locale="en-US">inputProcidedBy</InverseName>
-        </UAReferenceType>
-        <UAObjectType IsAbstract="true" NodeId="ns=1;i=1001"
-                      BrowseName="1:FieldDevice">
-            <DisplayName>FieldDevice</DisplayName>
-            <References>
-                <Reference ReferenceType="HasSubtype" IsForward="false">
-                    i=58
-                </Reference>
-                <Reference ReferenceType="HasComponent">ns=1;i=6001</Reference>
-                <Reference ReferenceType="HasComponent">ns=1;i=6002</Reference>
-            </References>
-        </UAObjectType>
-        <UAVariable DataType="String" ParentNodeId="ns=1;i=1001"
-                    NodeId="ns=1;i=6001" BrowseName="1:ManufacturerName"
-                    UserAccessLevel="3" AccessLevel="3">
-            <DisplayName>ManufacturerName</DisplayName>
-            <References>
-                <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-                <Reference ReferenceType="HasModellingRule">i=78</Reference>
-                <Reference ReferenceType="HasComponent" IsForward="false">
-                    ns=1;i=1001
-                </Reference>
-            </References>
-        </UAVariable>
-        <UAVariable DataType="String" ParentNodeId="ns=1;i=1001"
-                    NodeId="ns=1;i=6002" BrowseName="1:ModelName"
-                    UserAccessLevel="3" AccessLevel="3">
-            <DisplayName>ModelName</DisplayName>
-            <References>
-                <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-                <Reference ReferenceType="HasModellingRule">i=78</Reference>
-                <Reference ReferenceType="HasComponent" IsForward="false">
-                    ns=1;i=1001
-                </Reference>
-            </References>
-        </UAVariable>
-        <UAObjectType NodeId="ns=1;i=1002" BrowseName="1:Pump">
-            <DisplayName>Pump</DisplayName>
-            <References>
-                <Reference ReferenceType="HasComponent">ns=1;i=6003</Reference>
-                <Reference ReferenceType="HasComponent">ns=1;i=6004</Reference>
-                <Reference ReferenceType="HasSubtype" IsForward="false">
-                    ns=1;i=1001
-                </Reference>
-                <Reference ReferenceType="HasComponent">ns=1;i=7001</Reference>
-                <Reference ReferenceType="HasComponent">ns=1;i=7002</Reference>
-            </References>
-        </UAObjectType>
-        <UAVariable DataType="Boolean" ParentNodeId="ns=1;i=1002"
-                    NodeId="ns=1;i=6003" BrowseName="1:isOn" UserAccessLevel="3"
-                    AccessLevel="3">
-            <DisplayName>isOn</DisplayName>
-            <References>
-                <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-                <Reference ReferenceType="HasModellingRule">i=78</Reference>
-                <Reference ReferenceType="HasComponent" IsForward="false">
-                    ns=1;i=1002
-                </Reference>
-            </References>
-        </UAVariable>
-        <UAVariable DataType="UInt32" ParentNodeId="ns=1;i=1002"
-                    NodeId="ns=1;i=6004" BrowseName="1:MotorRPM"
-                    UserAccessLevel="3" AccessLevel="3">
-            <DisplayName>MotorRPM</DisplayName>
-            <References>
-                <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-                <Reference ReferenceType="HasModellingRule">i=78</Reference>
-                <Reference ReferenceType="HasComponent" IsForward="false">
-                    ns=1;i=1002
-                </Reference>
-            </References>
-        </UAVariable>
-        <UAMethod ParentNodeId="ns=1;i=1002" NodeId="ns=1;i=7001"
-                  BrowseName="1:startPump">
-            <DisplayName>startPump</DisplayName>
-            <References>
-                <Reference ReferenceType="HasModellingRule">i=78</Reference>
-                <Reference ReferenceType="HasProperty">ns=1;i=6005</Reference>
-                <Reference ReferenceType="HasComponent" IsForward="false">
-                    ns=1;i=1002
-                </Reference>
-            </References>
-        </UAMethod>
-        <UAVariable DataType="Argument" ParentNodeId="ns=1;i=7001" ValueRank="1"
-                    NodeId="ns=1;i=6005" ArrayDimensions="1"
-                    BrowseName="OutputArguments">
-            <DisplayName>OutputArguments</DisplayName>
-            <References>
-                <Reference ReferenceType="HasModellingRule">i=78</Reference>
-                <Reference ReferenceType="HasProperty"
-                           IsForward="false">ns=1;i=7001</Reference>
-                <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-            </References>
-            <Value>
-                <ListOfExtensionObject>
-                    <ExtensionObject>
-                        <TypeId>
-                            <Identifier>i=297</Identifier>
-                        </TypeId>
-                        <Body>
-                            <Argument>
-                                <Name>started</Name>
-                                <DataType>
-                                    <Identifier>i=1</Identifier>
-                                </DataType>
-                                <ValueRank>-1</ValueRank>
-                                <ArrayDimensions></ArrayDimensions>
-                                <Description/>
-                            </Argument>
-                        </Body>
-                    </ExtensionObject>
-                </ListOfExtensionObject>
-            </Value>
-        </UAVariable>
-        <UAMethod ParentNodeId="ns=1;i=1002" NodeId="ns=1;i=7002"
-                  BrowseName="1:stopPump">
-            <DisplayName>stopPump</DisplayName>
-            <References>
-                <Reference ReferenceType="HasModellingRule">i=78</Reference>
-                <Reference ReferenceType="HasProperty">ns=1;i=6006</Reference>
-                <Reference ReferenceType="HasComponent"
-                           IsForward="false">ns=1;i=1002</Reference>
-            </References>
-        </UAMethod>
-        <UAVariable DataType="Argument" ParentNodeId="ns=1;i=7002" ValueRank="1"
-                    NodeId="ns=1;i=6006" ArrayDimensions="1"
-                    BrowseName="OutputArguments">
-            <DisplayName>OutputArguments</DisplayName>
-            <References>
-                <Reference ReferenceType="HasModellingRule">i=78</Reference>
-                <Reference ReferenceType="HasProperty" IsForward="false">
-                    ns=1;i=7002
-                </Reference>
-                <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-            </References>
-            <Value>
-                <ListOfExtensionObject>
-                    <ExtensionObject>
-                        <TypeId>
-                            <Identifier>i=297</Identifier>
-                        </TypeId>
-                        <Body>
-                            <Argument>
-                                <Name>stopped</Name>
-                                <DataType>
-                                    <Identifier>i=1</Identifier>
-                                </DataType>
-                                <ValueRank>-1</ValueRank>
-                                <ArrayDimensions></ArrayDimensions>
-                                <Description/>
-                            </Argument>
-                        </Body>
-                    </ExtensionObject>
-                </ListOfExtensionObject>
-            </Value>
-        </UAVariable>
-    </UANodeSet>
-
-Take the previous snippet and save it to a file ``myNS.xml``. To compile this nodeset into the corresponding C code, which can then be used by the open62541 stack, the nodeset compiler needs some arguments when you call it. The output of the help command gives you the following info:
-
-.. code-block:: bash
-
-    $ python ./nodeset_compiler.py -h
-    usage: nodeset_compiler.py [-h] [-e <existingNodeSetXML>] [-x <nodeSetXML>]
-                               [--internal-headers]
-                               [-b <blacklistFile>] [-i <ignoreFile>]
-                               [-t <typesArray>]
-                               [-v]
-                               <outputFile>
-
-    positional arguments:
-      <outputFile>          The path/basename for the <output file>.c and <output
-                            file>.h files to be generated. This will also be the
-                            function name used in the header and c-file.
-
-    optional arguments:
-      -h, --help            show this help message and exit
-      -e <existingNodeSetXML>, --existing <existingNodeSetXML>
-                            NodeSet XML files with nodes that are already present
-                            on the server.
-      -x <nodeSetXML>, --xml <nodeSetXML>
-                            NodeSet XML files with nodes that shall be generated.
-      --internal-headers    Include internal headers instead of amalgamated header
-      -b <blacklistFile>, --blacklist <blacklistFile>
-                            Loads a list of NodeIDs stored in blacklistFile (one
-                            NodeID per line). Any of the nodeIds encountered in
-                            this file will be removed from the nodeset prior to
-                            compilation. Any references to these nodes will also
-                            be removed
-      -i <ignoreFile>, --ignore <ignoreFile>
-                            Loads a list of NodeIDs stored in ignoreFile (one
-                            NodeID per line). Any of the nodeIds encountered in
-                            this file will be kept in the nodestore but not
-                            printed in the generated code
-      -t <typesArray>, --types-array <typesArray>
-                            Types array for the given namespace. Can be used
-                            mutliple times to define (in the same order as the
-                            .xml files, first for --existing, then --xml) the type
-                            arrays
-      --max-string-length MAX_STRING_LENGTH
-                            Maximum allowed length of a string literal. If longer,
-                            it will be set to an empty string
-      -v, --verbose         Make the script more verbose. Can be applied up to 4
-                            times
-
-So the resulting call looks like this:
-
-.. code-block:: bash
-
-    $ python ./nodeset_compiler.py --types-array=UA_TYPES --existing ../../deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml --xml myNS.xml myNS
-
-And the output of the command:
-
-.. code-block:: bash
-
-    INFO:__main__:Preprocessing (existing) ../../deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml
-    INFO:__main__:Preprocessing myNS.xml
-    INFO:__main__:Generating Code
-    INFO:__main__:NodeSet generation code successfully printed
-
-The first argument ``--types-array=UA_TYPES`` defines the name of the global array in open62541 which contains the corresponding types used within the nodeset in ``NodeSet2.xml``. If you do not define your own datatypes, you can always use the ``UA_TYPES`` value. More on that later in this tutorial.
-The next argument ``--existing ../../deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml`` points to the XML definition of the standard-defined namespace 0 (NS0). Namespace 0 is assumed to be loaded beforehand and provides definitions for data type, reference types, and so. Since we reference nodes from NS0 in our myNS.xml we need to tell the nodeset compiler that it should also load that nodeset, but not compile it into the output.
-Note that you may need to initialize the git submodule to get the ``deps/ua-nodeset`` folder (``git submodule update --init``) or download the full ``NodeSet2.xml`` manually.
-The argument ``--xml myNS.xml`` points to the user-defined information model, whose nodes will be added to the abstract syntax tree. The script will then create the files ``myNS.c`` and ``myNS.h`` (indicated by the last argument ``myNS``) containing the C code necessary to instantiate those namespaces.
-
-Although it is possible to run the compiler this way, it is highly discouraged. If you care to examine the CMakeLists.txt (examples/nodeset/CMakeLists.txt), you will find out that the file ``server_nodeset.xml`` is compiled using the following function::
-
-    ua_generate_nodeset(
-        NAME "example"
-        FILE "${PROJECT_SOURCE_DIR}/examples/nodeset/server_nodeset.xml"
-        DEPENDS_TYPES "UA_TYPES"
-        DEPENDS_NS    "${UA_FILE_NS0}"
-    )
-
-If you look into the files generated by the nodeset compiler, you will see that it generated a method called ``extern UA_StatusCode myNS(UA_Server *server);``. You need to include the header and source file and then call the ``myNS(server)`` method right after creating the server instance with ``UA_Server_new``. This will automatically add all the nodes to the server and return ``UA_STATUSCODE_GOOD`` if there weren't any errors. Additionally you need to compile the open62541 stack with the full NS0 by setting ``UA_NAMESPACE_ZERO=FULL`` in CMake. Otherwise the stack uses a subset where many nodes are not included and thus adding a custom nodeset may fail.
-
-This is how you can use the nodeset compiler to compile simple NodeSet XMLs to be used by the open62541 stack.
-
-For your convenience and for simpler use we also provide a CMake function which simplifies the use of the ``ua_generate_datatypes`` and ``ua_generate_nodeset`` function even more.
-It is highly recommended to use this function: ``ua_generate_nodeset_and_datatypes``. It uses some best practice settings and you only need to pass a name, the namespace index ``NAMESPACE_IDX`` (as described above) and the nodeset files.
-Passing the .csv and .bsd files is optional and if not given, generating datatypes for that noteset will be skipped. You can also define dependencies between nodesets using the ``DEPENDS`` argument.
-
-Here are some examples for the ``DI`` and ``PLCOpen`` nodesets::
-
-    # Generate types and namespace for DI
-    ua_generate_nodeset_and_datatypes(
-        NAME "di"
-        FILE_CSV "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/OpcUaDiModel.csv"
-        FILE_BSD "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.Types.bsd"
-        NAMESPACE_IDX 2
-        FILE_NS "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml"
-    )
-
-    # generate PLCopen namespace which is using DI
-    ua_generate_nodeset_and_datatypes(
-        NAME "plc"
-        # PLCopen does not define custom types. Only generate the nodeset
-        FILE_NS "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/PLCopen/Opc.Ua.Plc.NodeSet2.xml"
-        # PLCopen depends on the di nodeset, which must be generated before
-        DEPENDS "di"
-    )
-
-Creating object instances
-.........................
-
-One of the key benefits of defining object types is being able to create object instances fairly easily. Object instantiation is handled automatically when the typedefinition NodeId points to a valid ObjectType node. All Attributes and Methods contained in the objectType definition will be instantiated along with the object node.
-
-While variables are copied from the objetType definition (allowing the user for example to attach new dataSources to them), methods are always only linked. This paradigm is identical to languages like C++: The method called is always the same piece of code, but the first argument is a pointer to an object. Likewise, in OPC UA, only one methodCallback can be attached to a specific methodNode. If that methodNode is called, the parent objectId will be passed to the method - it is the methods job to derefence which object instance it belongs to in that moment.
-
-Let's look at an example that will create a pump instance given the newly defined objectType from myNS.xml:
-
-.. code-block:: c
-
-    /* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
-     * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-    #include <signal.h>
-    #include <stdio.h>
-    #include "open62541.h"
-
-    /* Files myNS.h and myNS.c are created from myNS.xml */
-    #include "myNS.h"
-
-    UA_Boolean running = true;
-
-    static void stopHandler(int sign) {
-        UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-        running = false;
-    }
-
-    int main(int argc, char **argv) {
-        signal(SIGINT, stopHandler);
-        signal(SIGTERM, stopHandler);
-
-        UA_ServerConfig *config = UA_ServerConfig_new_default();
-        UA_Server *server = UA_Server_new(config);
-
-        UA_StatusCode retval;
-        /* create nodes from nodeset */
-        if (myNS(server) != UA_STATUSCODE_GOOD) {
-            UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Could not add the example nodeset. "
-                "Check previous output for any error.");
-            retval = UA_STATUSCODE_BADUNEXPECTEDERROR;
-        } else {
-
-
-            UA_NodeId createdNodeId;
-            UA_ObjectAttributes object_attr = UA_ObjectAttributes_default;
-
-            object_attr.description = UA_LOCALIZEDTEXT("en-US", "A pump!");
-            object_attr.displayName = UA_LOCALIZEDTEXT("en-US", "Pump1");
-
-            // we assume that the myNS nodeset was added in namespace 2.
-            // You should always use UA_Server_addNamespace to check what the
-            // namespace index is for a given namespace URI. UA_Server_addNamespace
-            // will just return the index if it is already added.
-            UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, 0),
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                    UA_QUALIFIEDNAME(1, "Pump1"),
-                                    UA_NODEID_NUMERIC(2, 1002),
-                                    object_attr, NULL, &createdNodeId);
-
-
-            retval = UA_Server_run(server, &running);
-        }
-        UA_Server_delete(server);
-        UA_ServerConfig_delete(config);
-        return (int) retval;
-    }
-
-Make sure you have updated the headers and libs in your project, then recompile and run the server. Make especially sure you have added ``myNS.h`` to your include folder.
-
-As you can see instantiating an object is not much different from creating an object node. The main difference is that you *must* use an objectType node as typeDefinition.
-
-If you start the server and inspect the nodes with UA Expert, you will find the pump in the objects folder, which look like this :numref:`nodeset-compiler-pump`.
-
-.. _nodeset-compiler-pump:
-
-.. figure:: nodeset_compiler_pump.png
-   :alt: Instantiated Pump Object with inherited children
-
-   Instantiated Pump Object with inherited children
-
-As you can see the pump has inherited it's parents attributes (ManufacturerName and ModelName). Methods, in contrast to objects and variables, are never cloned but instead only linked. The reason is that you will quite propably attach a method callback to a central method, not each object. Objects are instantiated if they are *below* the object you are creating, so any object (like an object called associatedServer of ServerType) that is part of pump will be instantiated as well. Objects *above* you object are never instantiated, so the same ServerType object in Fielddevices would have been ommitted (the reason is that the recursive instantiation function protects itself from infinite recursions, which are hard to track when first ascending, then redescending into a tree).
-
-
-Combination of multiple nodesets
-................................
-
-In previous section you have seen how you can use the nodeset compiler with one single nodeset which depends on the default nodeset (NS0) ``Opc.Ua.NodeSet2.xml``. The nodeset compiler also supports nodesets which depend on more than one nodeset. We will show this use-case with the PLCopen nodeset. The PLCopen nodeset ``Opc.Ua.Plc.NodeSet2.xml`` depends on the DI nodeset ``Opc.Ua.Di.NodeSet2.xml`` which then depends on NS0. This example is also shown in ``examples/nodeset/CMakeLists.txt``.
-
-This DI nodeset makes use of some additional data types in ``deps/ua-nodeset/DI/Opc.Ua.Di.Types.bsd``. Since we also need these types within the generated code, we first need to compile the types into C code. The generated code is mainly a definition of the binary representation of the types required for encoding and decoding. The generation can be done using the ``ua_generate_datatypes`` CMake function, which uses the ``tools/generate_datatypes.py`` script::
-
-    ua_generate_datatypes(
-        NAME "ua_types_di"
-        TARGET_SUFFIX "types-di"
-        NAMESPACE_IDX 2
-        FILE_CSV "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/OpcUaDiModel.csv"
-        FILES_BSD "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.Types.bsd"
-    )
-
-The ``NAMESPACE_IDX`` parameter indicates the namespace index of the generated node IDs for the type definitions. Currently we need to rely that the namespace is also added at this position in the final server. There is no automatic inferring yet (pull requests are warmly welcome).
-The CSV and BSD files contain the metadata and definition for the types. ``TARGET_SUFFIX`` is used to create a new target with the name ``open62541-generator-TARGET_SUFFIX``.
-
-Now you can compile the DI nodeset XML using the following command::
-
-    ua_generate_nodeset(
-        NAME "di"
-        FILE "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml"
-        TYPES_ARRAY "UA_TYPES_DI"
-        INTERNAL
-        DEPENDS_TYPES "UA_TYPES"
-        DEPENDS_NS    "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml"
-        DEPENDS_TARGET "open62541-generator-types-di"
-    )
-
-There are now two new arguments: ``INTERNAL`` indicates that internal headers (and non public API) should be included within the generated source code. This is currently required for nodesets which use structures as data values, and will probably be fixed in the future.
-The ``DEPENDS_TYPES`` types array argument is matched with the nodesets in the same order as they appear on the ``DEPENDS_TARGET`` parameter. It tells the nodeset compiler which types array it should use: ``UA_TYPES`` for ``Opc.Ua.NodeSet2.xml`` and ``UA_TYPES_DI`` for ``Opc.Ua.Di.NodeSet2.xml``. This is the type array generated by the ``generate_datatypes.py`` script. The rest is similar to the example in previous section: ``Opc.Ua.NodeSet2.xml`` is assumed to exist already and only needs to be loaded for consistency checks, ``Opc.Ua.Di.NodeSet2.xml`` will be generated in the output file ``ua_namespace_di.c/.h``
-
-Next we can generate the PLCopen nodeset. Since it doesn't require any additional datatype definitions, we can immediately start with the nodeset compiler command::
-
-    ua_generate_nodeset(
-        NAME "plc"
-        FILE "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/PLCopen/Opc.Ua.Plc.NodeSet2.xml"
-        INTERNAL
-        DEPENDS_TYPES
-            "UA_TYPES" "UA_TYPES_DI"
-        DEPENDS_NS
-            "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml"
-            "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml"
-        DEPENDS_TARGET "open62541-generator-ns-di"
-    )
-
-This call is quite similar to the compilation of the DI nodeset. As you can see, we do not define any specific types array for the PLCopen nodeset. Since the PLCopen nodeset depends on the NS0 and DI nodeset, we need to tell the nodeset compiler that these two nodesets should be seen as already existing. Make sure that the order is the same as in your XML file, e.g., in this case the order indicated in ``Opc.Ua.Plc.NodeSet2.xml -> UANodeSet -> Models -> Model``.
-
-As a result of the previous scripts you will have multiple source files:
-
-* ua_types_di_generated.c
-* ua_types_di_generated.h
-* ua_types_di_generated_encoding_binary.h
-* ua_types_di_generated_handling.h
-* ua_namespace_di.c
-* ua_namespace_di.h
-* ua_namespace_plc.c
-* ua_namespace_plc.h
-
-Finally you need to include all these files in your build process and call the corresponding initialization methods for the nodesets. An example application could look like this:
-
-.. code-block:: c
-
-    UA_ServerConfig *config = UA_ServerConfig_new_default();
-    UA_Server *server = UA_Server_new(config);
-
-    /* create nodes from nodeset */
-    UA_StatusCode retval = ua_namespace_di(server);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Adding the DI namespace failed. Please check previous error output.");
-        UA_Server_delete(server);
-        UA_ServerConfig_delete(config);
-        return (int)UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-    retval |= ua_namespace_plc(server);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Adding the PLCopen namespace failed. Please check previous error output.");
-        UA_Server_delete(server);
-        UA_ServerConfig_delete(config);
-        return (int)UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-
-    retval = UA_Server_run(server, &running);
diff --git a/ext/open62541/doc/nodeset_compiler_pump.png b/ext/open62541/doc/nodeset_compiler_pump.png
deleted file mode 100644
index 58ccc5c..0000000
--- a/ext/open62541/doc/nodeset_compiler_pump.png
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/doc/open62541.png b/ext/open62541/doc/open62541.png
deleted file mode 100644
index 41b12a6..0000000
--- a/ext/open62541/doc/open62541.png
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/doc/open62541_html.png b/ext/open62541/doc/open62541_html.png
deleted file mode 100644
index 5e3e732..0000000
--- a/ext/open62541/doc/open62541_html.png
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/doc/protocol.rst b/ext/open62541/doc/protocol.rst
deleted file mode 100644
index 135580d..0000000
--- a/ext/open62541/doc/protocol.rst
+++ /dev/null
@@ -1,136 +0,0 @@
-.. _protocol:
-
-Protocol
-========
-
-In this section, we give an overview on the OPC UA binary protocol. We focus on
-binary since that is what has been implemented in open62541. The TCP-based
-binary protocol is by far the most common transport layer for OPC UA. The
-general concepts also translate to HTTP and SOAP-based communication defined in
-the standard. Communication in OPC UA is best understood by starting with the
-following key principles:
-
-Request / Response
-  All communication is based on the Request/Response pattern. Only clients can
-  send a request to a server. And servers can only send responses to a request.
-  Usually, the server is hosted on the (physical) device, such as a sensor or a
-  machine tool.
-
-Asynchronous Responses
-  A server does not have to immediately respond to requests and responses may be
-  sent in a different order. This keeps the server responsive when it takes time
-  until a specific request has been processed (e.g. a method call or when
-  reading from a sensor with delay). Furthermore, Subscriptions (aka
-  push-notifications) are implemented via special requests where the response is
-  delayed until a notification is generated.
-
-Establishing a Connection
--------------------------
-
-A client-server connection in OPC UA consists of three nested levels: The raw
-connection, a SecureChannel and the Session. For full details, see Part 6 of the
-OPC UA standard.
-
-Raw Connection
-  The raw connection is created by opening a TCP connection to the corresponding
-  hostname and port and an initial HEL/ACK handshake. The handshake establishes
-  the basic settings of the connection, such as the maximum message length.
-
-SecureChannel
-  SecureChannels are created on top of the raw TCP connection. A SecureChannel
-  is established with an *OpenSecureChannel* request and response message pair.
-  **Attention!** Even though a SecureChannel is mandatory, encryption might
-  still be disabled. The *SecurityMode* of a SecureChannel can be either
-  ``None``, ``Sign``, or ``SignAndEncrypt``. As of version 0.2 of open62541,
-  message signing and encryption is still under ongoing development.
-
-  With message signing or encryption enabled, the *OpenSecureChannel* messages
-  are encrypted using an asymmetric encryption algorithm (public-key
-  cryptography) [#key-mgmnt]_. As part of the *OpenSecureChannel* messages,
-  client and server establish a common secret over an initially unsecure
-  channel. For subsequent messages, the common secret is used for symmetric
-  encryption, which has the advantage of being much faster.
-
-  Different *SecurityPolicies* -- defined in part 7 of the OPC UA standard --
-  specify the algorithms for asymmetric and symmetric encryption, encryption key
-  lengths, hash functions for message signing, and so on. Example
-  SecurityPolicies are ``None`` for transmission of cleartext and
-  ``Basic256Sha256`` which mandates a variant of RSA with SHA256 certificate
-  hashing for asymmetric encryption and AES256 for symmetric encryption.
-
-  The possible SecurityPolicies of a server are described with a list of
-  *Endpoints*. An endpoint jointly defines the SecurityMode, SecurityPolicy and
-  means for authenticating a session (discussed in the next section) in order to
-  connect to a certain server. The *GetEndpoints* service returns a list of
-  available endpoints. This service can usually be invoked without a session and
-  from an unencrypted SecureChannel. This allows clients to first discover
-  available endpoints and then use an appropriate SecurityPolicy that might be
-  required to open a session.
-
-Session
-  Sessions are created on top of a SecureChannel. This ensures that users may
-  authenticate without sending their credentials, such as username and password,
-  in cleartext. Currently defined authentication mechanisms are anonymous login,
-  username/password, Kerberos and x509 certificates. The latter requires that
-  the request message is accompanied by a signature to prove that the sender is
-  in possession of the private key with which the certificate was created.
-
-  There are two message exchanges required to establish a session:
-  *CreateSession* and *ActicateSession*. The ActivateSession service can be used
-  to switch an existing session to a different SecureChannel. This is important,
-  for example when the connection broke down and the existing session is
-  reused with a new SecureChannel.
-
-.. [#key-mgmnt] This entails that the client and server exchange so-called
-   public keys. The public keys might come with a certificate from a key-signing
-   authority or be verified against an external key repository. But we will not
-   discuss certificate management in detail in this section.
-
-Structure of a protocol message
--------------------------------
-
-For the following introduction to the structure of OPC UA protocol messages,
-consider the example OPC UA binary conversation, recorded and displayed with the
-`Wireshark <https://www.wireshark.org/>`_ tool, shown in :numref:`ua-wireshark`.
-
-.. _ua-wireshark:
-
-.. figure:: ua-wireshark.png
-   :figwidth: 100 %
-   :alt: OPC UA conversation in Wireshark
-
-   OPC UA conversation displayed in Wireshark
-
-The top part of the Wireshark window shows the messages from the conversation in
-order. The green line contains the applied filter. Here, we want to see the OPC
-UA protocol messages only. The first messages (from TCP packets 49 to 56) show
-the client opening an unencrypted SecureChannel and retrieving the server's
-endpoints. Then, starting with packet 63, a new connection and SecureChannel are
-created in conformance with one of the endpoints. On top of this SecureChannel,
-the client can then create and activate a session. The following *ReadRequest*
-message is selected and covered in more detail in the bottom windows.
-
-The bottom left window shows the structure of the selected *ReadRequest*
-message. The purpose of the message is invoking the *Read* :ref:`service
-<services>`. The message is structured into a header and a message body. Note
-that we do not consider encryption or signing of messages here.
-
-Message Header
-  As stated before, OPC UA defines an asynchronous protocol. So responses may be
-  out of order. The message header contains some basic information, such as the
-  length of the message, as well as necessary information to relate messages to
-  a SecureChannel and each request to the corresponding response. "Chunking"
-  refers to the splitting and reassembling of messages that are longer than the
-  maximum network packet size.
-
-Message Body
-  Every OPC UA :ref:`service <services>` has a signature in the form of a
-  request and response data structure. These are defined according to the OPC UA
-  protocol :ref:`type system <types>`. See especially the :ref:`auto-generated
-  type definitions<generated-types>` for the data types corresponding to service
-  requests and responses. The message body begins with the identifier of the
-  following data type. Then, the main payload of the message follows.
-
-The bottom right window shows the binary payload of the selected *ReadRequest*
-message. The message header is highlighted in light-grey. The message body in
-blue highlighting shows the encoded *ReadRequest* data structure.
diff --git a/ext/open62541/doc/toc.rst b/ext/open62541/doc/toc.rst
deleted file mode 100644
index 47b6b60..0000000
--- a/ext/open62541/doc/toc.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-open62541 Documentation
-#######################
-
-.. toctree::
-
-   index
-   building
-   installing
-   tutorials
-   protocol
-   types
-   services
-   nodestore
-   server
-   client
-   constants
-   nodeset_compiler
-   internal
diff --git a/ext/open62541/doc/tutorials.rst b/ext/open62541/doc/tutorials.rst
deleted file mode 100644
index 6c6a51f..0000000
--- a/ext/open62541/doc/tutorials.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-.. _tutorials:
-
-Tutorials
-=========
-
-.. toctree::
-
-   tutorial_datatypes.rst
-   tutorial_server_firststeps.rst
-   tutorial_server_variable.rst
-   tutorial_server_datasource.rst
-   tutorial_server_variabletype.rst
-   tutorial_server_object.rst
-   tutorial_server_method.rst
-   tutorial_server_monitoreditems.rst
-   tutorial_server_events.rst
-   tutorial_client_firststeps.rst
-   tutorial_pubsub_publish.rst
diff --git a/ext/open62541/doc/ua-wireshark-pubsub.png b/ext/open62541/doc/ua-wireshark-pubsub.png
deleted file mode 100644
index 675c80d..0000000
--- a/ext/open62541/doc/ua-wireshark-pubsub.png
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/doc/ua-wireshark.png b/ext/open62541/doc/ua-wireshark.png
deleted file mode 100644
index a2af94f..0000000
--- a/ext/open62541/doc/ua-wireshark.png
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/examples/CMakeLists.txt b/ext/open62541/examples/CMakeLists.txt
deleted file mode 100644
index 9f6a6e4..0000000
--- a/ext/open62541/examples/CMakeLists.txt
+++ /dev/null
@@ -1,193 +0,0 @@
-cmake_minimum_required(VERSION 3.0...3.12)

-project(open62541-examples)

-if(${CMAKE_VERSION} VERSION_LESS 3.12)

-    cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})

-endif()

-# This examples folder can also be built standalone.

-# First install open62541 using `make install` then

-# copy this folder to any other location and call CMake directly:

-#

-# cp -r open62541/examples $HOME/open62541_examples

-# cd $HOME/open62541_examples

-# mkdir build && cd build

-# cmake -DUA_NAMESPACE_ZERO=FULL ..

-# make -j

-

-if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)

-    # Examples are built standalone. Find installed open62541

-

-    if(UA_NAMESPACE_ZERO STREQUAL "FULL")

-        find_package(open62541 REQUIRED COMPONENTS FullNamespace)

-    else()

-        find_package(open62541 REQUIRED)

-    endif()

-

-    if(NOT UA_TOOLS_DIR)

-        set(UA_TOOLS_DIR ${open62541_TOOLS_DIR})

-    endif()

-

-    if(NOT UA_NODESET_DIR)

-        set(UA_NODESET_DIR ${open62541_NODESET_DIR})

-    endif()

-

-    function(assign_source_group)

-        # define empty function. We don't need it in standalone

-    endfunction(assign_source_group)

-

-    include_directories(${PROJECT_BINARY_DIR}/src_generated)

-endif()

-

-# Required for common.h header file used in examples

-include_directories(${CMAKE_CURRENT_LIST_DIR})

-

-if(UA_ENABLE_AMALGAMATION)

-    add_definitions(-DUA_ENABLE_AMALGAMATION)

-endif()

-

-#############################

-# Compiled binaries folders #

-#############################

-

-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/examples)

-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/bin/examples)

-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/bin/examples)

-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR}/bin/examples)

-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR}/bin/examples)

-

-macro(add_example EXAMPLE_NAME EXAMPLE_SOURCE)

-  add_executable(${EXAMPLE_NAME} ${STATIC_OBJECTS} ${EXAMPLE_SOURCE} ${ARGN} ${PROJECT_SOURCE_DIR}/common.h)

-  target_link_libraries(${EXAMPLE_NAME} open62541::open62541)

-  assign_source_group(${EXAMPLE_SOURCE})

-  set_target_properties(${EXAMPLE_NAME} PROPERTIES FOLDER "open62541/examples")

-  set_target_properties(${EXAMPLE_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/bin")

-  if(UA_COMPILE_AS_CXX)

-      set_source_files_properties(${EXAMPLE_SOURCE} PROPERTIES LANGUAGE CXX)

-  endif()

-endmacro()

-

-#############

-# Tutorials #

-#############

-

-add_example(tutorial_datatypes tutorial_datatypes.c)

-

-add_example(tutorial_server_firststeps tutorial_server_firststeps.c)

-

-add_example(tutorial_server_variable tutorial_server_variable.c)

-

-add_example(tutorial_server_datasource tutorial_server_datasource.c)

-

-if(UA_ENABLE_SUBSCRIPTIONS)

-    add_example(tutorial_server_monitoreditems tutorial_server_monitoreditems.c)

-endif()

-

-add_example(tutorial_server_variabletype tutorial_server_variabletype.c)

-

-add_example(tutorial_server_object tutorial_server_object.c)

-

-if(UA_ENABLE_METHODCALLS)

-    add_example(tutorial_server_method tutorial_server_method.c)

-endif()

-

-add_example(tutorial_client_firststeps tutorial_client_firststeps.c)

-

-add_example(tutorial_client_events tutorial_client_events.c)

-

-if(UA_ENABLE_SUBSCRIPTIONS_EVENTS)

-    add_example(tutorial_server_events tutorial_server_events.c)

-endif()

-

-##################

-# Example Server #

-##################

-

-add_example(server_ctt server_ctt.c)

-

-install(PROGRAMS $<TARGET_FILE:server_ctt>

-        DESTINATION bin

-        RENAME ua_server_ctt.exe)

-

-##################

-# Example Client #

-##################

-

-add_example(client client.c)

-

-add_example(client_connect client_connect.c)

-

-if(UA_ENABLE_HISTORIZING)

-    add_example(client_historical client_historical.c)

-endif()

-

-install(PROGRAMS $<TARGET_FILE:client>

-        DESTINATION bin

-        RENAME ua_client)

-

-add_example(client_async client_async.c)

-

-add_example(client_connect_loop client_connect_loop.c)

-

-add_example(client_connectivitycheck_loop client_connectivitycheck_loop.c)

-

-if(UA_ENABLE_SUBSCRIPTIONS)

-    add_example(client_subscription_loop client_subscription_loop.c)

-endif()

-

-####################

-# Feature Examples #

-####################

-

-add_example(server_mainloop server_mainloop.c)

-

-add_example(server_instantiation server_instantiation.c)

-

-add_example(server_repeated_job server_repeated_job.c)

-

-add_example(server_inheritance server_inheritance.c)

-

-if(UA_ENABLE_HISTORIZING)

-    add_example(tutorial_server_historicaldata tutorial_server_historicaldata.c)

-endif()

-

-if(UA_ENABLE_ENCRYPTION)

-    add_example(server_encryption encryption/server_encryption.c)

-    add_example(client_encryption encryption/client_encryption.c)

-    target_include_directories(server_encryption PRIVATE "${PROJECT_SOURCE_DIR}/examples")

-    target_include_directories(client_encryption PRIVATE "${PROJECT_SOURCE_DIR}/examples")

-endif()

-

-add_example(custom_datatype_client custom_datatype/client_types_custom.c)

-add_example(custom_datatype_server custom_datatype/server_types_custom.c)

-

-if(UA_ENABLE_NODEMANAGEMENT)

-    add_example(access_control_server access_control/server_access_control.c)

-    add_example(access_control_client access_control/client_access_control.c)

-    if(UA_ENABLE_ENCRYPTION)

-    add_example(access_control_client_encrypt access_control_encrypt/client_access_control_encrypt.c)

-    endif()

-endif()

-

-if(UA_ENABLE_DISCOVERY_MULTICAST)

-    add_example(discovery_server_lds discovery/server_lds.c)

-    add_example(discovery_server_register discovery/server_register.c)

-    add_example(discovery_client_find_servers discovery/client_find_servers.c)

-    add_example(discovery_server_multicast discovery/server_multicast.c)

-endif()

-

-add_subdirectory(nodeset)

-

-####################

-#  Example PubSub  #

-####################

-

-if(UA_ENABLE_PUBSUB)

-    add_example(tutorial_pubsub_connection pubsub/tutorial_pubsub_connection.c)

-    add_example(tutorial_pubsub_publish pubsub/tutorial_pubsub_publish.c)

-	add_example(server_pubsub_publisher_iop pubsub/server_pubsub_publisher_iop.c)

-    if(UA_ENABLE_AMALGAMATION)

-        message(WARNING "PubSub subscriber tutorial (preview) can not be used with AMALGAMATION. Skipping tutorial_pubsub_subscribe.")

-    else(NOT UA_ENABLE_AMALGAMATION)

-        add_example(tutorial_pubsub_subscribe pubsub/tutorial_pubsub_subscribe.c)

-        add_example(pubsub_subscribe_standalone pubsub/pubsub_subscribe_standalone.c)

-    endif()

-endif()

diff --git a/ext/open62541/examples/access_control/client_access_control.c b/ext/open62541/examples/access_control/client_access_control.c
deleted file mode 100644
index 2a0c37f..0000000
--- a/ext/open62541/examples/access_control/client_access_control.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-/**
- * Using access_control_server
- */
-
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-
-#include <stdlib.h>
-
-int main(void) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    UA_StatusCode retval = UA_Client_connect_username(client, "opc.tcp://localhost:4840", "paula", "paula123");
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Client_delete(client);
-        return EXIT_FAILURE;
-    }
-
-    UA_NodeId newVariableIdRequest = UA_NODEID_NUMERIC(1, 1001);
-    UA_NodeId newVariableId = UA_NODEID_NULL;
-
-    UA_VariableAttributes newVariableAttributes = UA_VariableAttributes_default;
-
-    newVariableAttributes.accessLevel = UA_ACCESSLEVELMASK_READ;
-    newVariableAttributes.description = UA_LOCALIZEDTEXT_ALLOC("en-US", "NewVariable desc");
-    newVariableAttributes.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", "NewVariable");
-    newVariableAttributes.dataType = UA_TYPES[UA_TYPES_UINT32].typeId;
-    UA_UInt32 value = 50;
-    UA_Variant_setScalarCopy(&newVariableAttributes.value, &value, &UA_TYPES[UA_TYPES_UINT32]);
-
-    UA_StatusCode retCode;
-
-    retCode = UA_Client_addVariableNode(client, newVariableIdRequest,
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                            UA_QUALIFIEDNAME(1, "newVariable"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                            newVariableAttributes, &newVariableId);
-
-    printf("addVariable returned: %s\n", UA_StatusCode_name(retCode));
-
-    UA_ExpandedNodeId extNodeId = UA_EXPANDEDNODEID_NUMERIC(0, 0);
-    extNodeId.nodeId = newVariableId;
-
-    retCode = UA_Client_addReference(client, UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), UA_TRUE,
-                            UA_STRING_NULL, extNodeId, UA_NODECLASS_VARIABLE);
-
-    printf("addReference returned: %s\n", UA_StatusCode_name(retCode));
-
-    retCode = UA_Client_deleteReference(client, UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), UA_TRUE, extNodeId,
-                            UA_TRUE);
-
-    printf("deleteReference returned: %s\n", UA_StatusCode_name(retCode));
-
-    retCode = UA_Client_deleteNode(client, newVariableId, UA_TRUE);
-    printf("deleteNode returned: %s\n", UA_StatusCode_name(retCode));
-
-    /* Clean up */
-    UA_VariableAttributes_clear(&newVariableAttributes);
-    UA_Client_delete(client); /* Disconnects the client internally */
-    return EXIT_SUCCESS;
-}
diff --git a/ext/open62541/examples/access_control/server_access_control.c b/ext/open62541/examples/access_control/server_access_control.c
deleted file mode 100644
index 1c4b450..0000000
--- a/ext/open62541/examples/access_control/server_access_control.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/plugin/accesscontrol_default.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-static UA_Boolean
-allowAddNode(UA_Server *server, UA_AccessControl *ac,
-             const UA_NodeId *sessionId, void *sessionContext,
-             const UA_AddNodesItem *item) {
-    printf("Called allowAddNode\n");
-    return UA_TRUE;
-}
-
-static UA_Boolean
-allowAddReference(UA_Server *server, UA_AccessControl *ac,
-                  const UA_NodeId *sessionId, void *sessionContext,
-                  const UA_AddReferencesItem *item) {
-    printf("Called allowAddReference\n");
-    return UA_TRUE;
-}
-
-static UA_Boolean
-allowDeleteNode(UA_Server *server, UA_AccessControl *ac,
-                const UA_NodeId *sessionId, void *sessionContext,
-                const UA_DeleteNodesItem *item) {
-    printf("Called allowDeleteNode\n");
-    return UA_FALSE; // Do not allow deletion from client
-}
-
-static UA_Boolean
-allowDeleteReference(UA_Server *server, UA_AccessControl *ac,
-                     const UA_NodeId *sessionId, void *sessionContext,
-                     const UA_DeleteReferencesItem *item) {
-    printf("Called allowDeleteReference\n");
-    return UA_TRUE;
-}
-
-UA_Boolean running = true;
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-static UA_UsernamePasswordLogin logins[2] = {
-    {UA_STRING_STATIC("peter"), UA_STRING_STATIC("peter123")},
-    {UA_STRING_STATIC("paula"), UA_STRING_STATIC("paula123")}
-};
-
-int main(void) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    /* Disable anonymous logins, enable two user/password logins */
-    config->accessControl.deleteMembers(&config->accessControl);
-    UA_StatusCode retval = UA_AccessControl_default(config, false,
-             &config->securityPolicies[config->securityPoliciesSize-1].policyUri, 2, logins);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    /* Set accessControl functions for nodeManagement */
-    config->accessControl.allowAddNode = allowAddNode;
-    config->accessControl.allowAddReference = allowAddReference;
-    config->accessControl.allowDeleteNode = allowDeleteNode;
-    config->accessControl.allowDeleteReference = allowDeleteReference;
-
-    retval = UA_Server_run(server, &running);
-
- cleanup:
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/access_control_encrypt/client_access_control_encrypt.c b/ext/open62541/examples/access_control_encrypt/client_access_control_encrypt.c
deleted file mode 100644
index 45c3307..0000000
--- a/ext/open62541/examples/access_control_encrypt/client_access_control_encrypt.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- * Copyright (c) 2019 Kalycito Infotech Private Limited
- *
- */
-
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/plugin/securitypolicy.h>
-
-#include <stdlib.h>
-#include "common.h"
-
-#define MIN_ARGS 4
-
-int main(int argc, char* argv[]) {
-    if(argc < MIN_ARGS) {
-        UA_LOG_FATAL(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                     "Arguments are missing. The required arguments are "
-                     "<opc.tcp://host:port> "
-                     "<client-certificate.der> <client-private-key.der> "
-                     "[<trustlist1.crl>, ...]");
-        return EXIT_FAILURE;
-    }
-
-    const char *endpointUrl = argv[1];
-
-    /* Load certificate and private key */
-    UA_ByteString certificate = loadFile(argv[2]);
-    UA_ByteString privateKey  = loadFile(argv[3]);
-
-    /* Load the trustList. Load revocationList is not supported now */
-    size_t trustListSize = 0;
-    if(argc > MIN_ARGS)
-        trustListSize = (size_t)argc-MIN_ARGS;
-    UA_STACKARRAY(UA_ByteString, trustList, trustListSize);
-    for(size_t trustListCount = 0; trustListCount < trustListSize; trustListCount++)
-        trustList[trustListCount] = loadFile(argv[trustListCount+4]);
-
-    UA_ByteString *revocationList = NULL;
-    size_t revocationListSize = 0;
-
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig *config = UA_Client_getConfig(client);
-    config->securityMode = UA_MESSAGESECURITYMODE_SIGNANDENCRYPT;
-    UA_ClientConfig_setDefaultEncryption(config, certificate, privateKey,
-                                         trustList, trustListSize,
-                                         revocationList, revocationListSize);
-
-    UA_ByteString_clear(&certificate);
-    UA_ByteString_clear(&privateKey);
-    for(size_t deleteCount = 0; deleteCount < trustListSize; deleteCount++) {
-        UA_ByteString_clear(&trustList[deleteCount]);
-    }
-
-    UA_StatusCode retval = UA_Client_connect_username(client, endpointUrl, "paula", "paula123");
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Client_delete(client);
-        return EXIT_FAILURE;
-    }
-
-    UA_NodeId newVariableIdRequest = UA_NODEID_NUMERIC(1, 1001);
-    UA_NodeId newVariableId = UA_NODEID_NULL;
-
-    UA_VariableAttributes newVariableAttributes = UA_VariableAttributes_default;
-
-    newVariableAttributes.accessLevel = UA_ACCESSLEVELMASK_READ;
-    newVariableAttributes.description = UA_LOCALIZEDTEXT_ALLOC("en-US", "NewVariable desc");
-    newVariableAttributes.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", "NewVariable");
-    newVariableAttributes.dataType = UA_TYPES[UA_TYPES_UINT32].typeId;
-    UA_UInt32 value = 50;
-    UA_Variant_setScalarCopy(&newVariableAttributes.value, &value, &UA_TYPES[UA_TYPES_UINT32]);
-
-    UA_StatusCode retCode;
-
-    retCode = UA_Client_addVariableNode(client, newVariableIdRequest,
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                            UA_QUALIFIEDNAME(1, "newVariable"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                            newVariableAttributes, &newVariableId);
-
-    printf("addVariable returned: %s\n", UA_StatusCode_name(retCode));
-
-    UA_ExpandedNodeId extNodeId = UA_EXPANDEDNODEID_NUMERIC(0, 0);
-    extNodeId.nodeId = newVariableId;
-
-    retCode = UA_Client_addReference(client, UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), UA_TRUE,
-                                     UA_STRING_NULL, extNodeId, UA_NODECLASS_VARIABLE);
-
-    printf("addReference returned: %s\n", UA_StatusCode_name(retCode));
-
-    retCode = UA_Client_deleteReference(client, UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                        UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), UA_TRUE, extNodeId,
-                                        UA_TRUE);
-
-    printf("deleteReference returned: %s\n", UA_StatusCode_name(retCode));
-
-    retCode = UA_Client_deleteNode(client, newVariableId, UA_TRUE);
-    printf("deleteNode returned: %s\n", UA_StatusCode_name(retCode));
-
-    /* Clean up */
-    UA_VariableAttributes_clear(&newVariableAttributes);
-    UA_Client_delete(client); /* Disconnects the client internally */
-    return EXIT_SUCCESS;
-}
diff --git a/ext/open62541/examples/client.c b/ext/open62541/examples/client.c
deleted file mode 100644
index f33cf8b..0000000
--- a/ext/open62541/examples/client.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <open62541/client_subscriptions.h>
-#include <open62541/plugin/log_stdout.h>
-
-#include <stdlib.h>
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-static void
-handler_TheAnswerChanged(UA_Client *client, UA_UInt32 subId, void *subContext,
-                         UA_UInt32 monId, void *monContext, UA_DataValue *value) {
-    printf("The Answer has changed!\n");
-}
-#endif
-
-static UA_StatusCode
-nodeIter(UA_NodeId childId, UA_Boolean isInverse, UA_NodeId referenceTypeId, void *handle) {
-    if(isInverse)
-        return UA_STATUSCODE_GOOD;
-    UA_NodeId *parent = (UA_NodeId *)handle;
-    printf("%d, %d --- %d ---> NodeId %d, %d\n",
-           parent->namespaceIndex, parent->identifier.numeric,
-           referenceTypeId.identifier.numeric, childId.namespaceIndex,
-           childId.identifier.numeric);
-    return UA_STATUSCODE_GOOD;
-}
-
-int main(int argc, char *argv[]) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    /* Listing endpoints */
-    UA_EndpointDescription* endpointArray = NULL;
-    size_t endpointArraySize = 0;
-    UA_StatusCode retval = UA_Client_getEndpoints(client, "opc.tcp://localhost:4840",
-                                                  &endpointArraySize, &endpointArray);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Array_delete(endpointArray, endpointArraySize, &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
-        UA_Client_delete(client);
-        return EXIT_FAILURE;
-    }
-    printf("%i endpoints found\n", (int)endpointArraySize);
-    for(size_t i=0;i<endpointArraySize;i++) {
-        printf("URL of endpoint %i is %.*s\n", (int)i,
-               (int)endpointArray[i].endpointUrl.length,
-               endpointArray[i].endpointUrl.data);
-    }
-    UA_Array_delete(endpointArray,endpointArraySize, &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
-
-    /* Connect to a server */
-    /* anonymous connect would be: retval = UA_Client_connect(client, "opc.tcp://localhost:4840"); */
-    retval = UA_Client_connect_username(client, "opc.tcp://localhost:4840", "user1", "password");
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Client_delete(client);
-        return EXIT_FAILURE;
-    }
-
-    /* Browse some objects */
-    printf("Browsing nodes in objects folder:\n");
-    UA_BrowseRequest bReq;
-    UA_BrowseRequest_init(&bReq);
-    bReq.requestedMaxReferencesPerNode = 0;
-    bReq.nodesToBrowse = UA_BrowseDescription_new();
-    bReq.nodesToBrowseSize = 1;
-    bReq.nodesToBrowse[0].nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER); /* browse objects folder */
-    bReq.nodesToBrowse[0].resultMask = UA_BROWSERESULTMASK_ALL; /* return everything */
-    UA_BrowseResponse bResp = UA_Client_Service_browse(client, bReq);
-    printf("%-9s %-16s %-16s %-16s\n", "NAMESPACE", "NODEID", "BROWSE NAME", "DISPLAY NAME");
-    for(size_t i = 0; i < bResp.resultsSize; ++i) {
-        for(size_t j = 0; j < bResp.results[i].referencesSize; ++j) {
-            UA_ReferenceDescription *ref = &(bResp.results[i].references[j]);
-            if(ref->nodeId.nodeId.identifierType == UA_NODEIDTYPE_NUMERIC) {
-                printf("%-9d %-16d %-16.*s %-16.*s\n", ref->nodeId.nodeId.namespaceIndex,
-                       ref->nodeId.nodeId.identifier.numeric, (int)ref->browseName.name.length,
-                       ref->browseName.name.data, (int)ref->displayName.text.length,
-                       ref->displayName.text.data);
-            } else if(ref->nodeId.nodeId.identifierType == UA_NODEIDTYPE_STRING) {
-                printf("%-9d %-16.*s %-16.*s %-16.*s\n", ref->nodeId.nodeId.namespaceIndex,
-                       (int)ref->nodeId.nodeId.identifier.string.length,
-                       ref->nodeId.nodeId.identifier.string.data,
-                       (int)ref->browseName.name.length, ref->browseName.name.data,
-                       (int)ref->displayName.text.length, ref->displayName.text.data);
-            }
-            /* TODO: distinguish further types */
-        }
-    }
-    UA_BrowseRequest_clear(&bReq);
-    UA_BrowseResponse_clear(&bResp);
-
-    /* Same thing, this time using the node iterator... */
-    UA_NodeId *parent = UA_NodeId_new();
-    *parent = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_Client_forEachChildNodeCall(client, UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                   nodeIter, (void *) parent);
-    UA_NodeId_delete(parent);
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    /* Create a subscription */
-    UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();
-    UA_CreateSubscriptionResponse response = UA_Client_Subscriptions_create(client, request,
-                                                                            NULL, NULL, NULL);
-
-    UA_UInt32 subId = response.subscriptionId;
-    if(response.responseHeader.serviceResult == UA_STATUSCODE_GOOD)
-        printf("Create subscription succeeded, id %u\n", subId);
-
-    UA_MonitoredItemCreateRequest monRequest =
-        UA_MonitoredItemCreateRequest_default(UA_NODEID_STRING(1, "the.answer"));
-
-    UA_MonitoredItemCreateResult monResponse =
-    UA_Client_MonitoredItems_createDataChange(client, response.subscriptionId,
-                                              UA_TIMESTAMPSTORETURN_BOTH,
-                                              monRequest, NULL, handler_TheAnswerChanged, NULL);
-    if(monResponse.statusCode == UA_STATUSCODE_GOOD)
-        printf("Monitoring 'the.answer', id %u\n", monResponse.monitoredItemId);
-
-
-    /* The first publish request should return the initial value of the variable */
-    UA_Client_run_iterate(client, 1000);
-#endif
-
-    /* Read attribute */
-    UA_Int32 value = 0;
-    printf("\nReading the value of node (1, \"the.answer\"):\n");
-    UA_Variant *val = UA_Variant_new();
-    retval = UA_Client_readValueAttribute(client, UA_NODEID_STRING(1, "the.answer"), val);
-    if(retval == UA_STATUSCODE_GOOD && UA_Variant_isScalar(val) &&
-       val->type == &UA_TYPES[UA_TYPES_INT32]) {
-            value = *(UA_Int32*)val->data;
-            printf("the value is: %i\n", value);
-    }
-    UA_Variant_delete(val);
-
-    /* Write node attribute */
-    value++;
-    printf("\nWriting a value of node (1, \"the.answer\"):\n");
-    UA_WriteRequest wReq;
-    UA_WriteRequest_init(&wReq);
-    wReq.nodesToWrite = UA_WriteValue_new();
-    wReq.nodesToWriteSize = 1;
-    wReq.nodesToWrite[0].nodeId = UA_NODEID_STRING_ALLOC(1, "the.answer");
-    wReq.nodesToWrite[0].attributeId = UA_ATTRIBUTEID_VALUE;
-    wReq.nodesToWrite[0].value.hasValue = true;
-    wReq.nodesToWrite[0].value.value.type = &UA_TYPES[UA_TYPES_INT32];
-    wReq.nodesToWrite[0].value.value.storageType = UA_VARIANT_DATA_NODELETE; /* do not free the integer on deletion */
-    wReq.nodesToWrite[0].value.value.data = &value;
-    UA_WriteResponse wResp = UA_Client_Service_write(client, wReq);
-    if(wResp.responseHeader.serviceResult == UA_STATUSCODE_GOOD)
-            printf("the new value is: %i\n", value);
-    UA_WriteRequest_clear(&wReq);
-    UA_WriteResponse_clear(&wResp);
-
-    /* Write node attribute (using the highlevel API) */
-    value++;
-    UA_Variant *myVariant = UA_Variant_new();
-    UA_Variant_setScalarCopy(myVariant, &value, &UA_TYPES[UA_TYPES_INT32]);
-    UA_Client_writeValueAttribute(client, UA_NODEID_STRING(1, "the.answer"), myVariant);
-    UA_Variant_delete(myVariant);
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    /* Take another look at the.answer */
-    UA_Client_run_iterate(client, 100);
-    /* Delete the subscription */
-    if(UA_Client_Subscriptions_deleteSingle(client, subId) == UA_STATUSCODE_GOOD)
-        printf("Subscription removed\n");
-#endif
-
-#ifdef UA_ENABLE_METHODCALLS
-    /* Call a remote method */
-    UA_Variant input;
-    UA_String argString = UA_STRING("Hello Server");
-    UA_Variant_init(&input);
-    UA_Variant_setScalarCopy(&input, &argString, &UA_TYPES[UA_TYPES_STRING]);
-    size_t outputSize;
-    UA_Variant *output;
-    retval = UA_Client_call(client, UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(1, 62541), 1, &input, &outputSize, &output);
-    if(retval == UA_STATUSCODE_GOOD) {
-        printf("Method call was successful, and %lu returned values available.\n",
-               (unsigned long)outputSize);
-        UA_Array_delete(output, outputSize, &UA_TYPES[UA_TYPES_VARIANT]);
-    } else {
-        printf("Method call was unsuccessful, and %x returned values available.\n", retval);
-    }
-    UA_Variant_clear(&input);
-#endif
-
-#ifdef UA_ENABLE_NODEMANAGEMENT
-    /* Add new nodes*/
-    /* New ReferenceType */
-    UA_NodeId ref_id;
-    UA_ReferenceTypeAttributes ref_attr = UA_ReferenceTypeAttributes_default;
-    ref_attr.displayName = UA_LOCALIZEDTEXT("en-US", "NewReference");
-    ref_attr.description = UA_LOCALIZEDTEXT("en-US", "References something that might or might not exist");
-    ref_attr.inverseName = UA_LOCALIZEDTEXT("en-US", "IsNewlyReferencedBy");
-    retval = UA_Client_addReferenceTypeNode(client,
-                                            UA_NODEID_NUMERIC(1, 12133),
-                                            UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                            UA_QUALIFIEDNAME(1, "NewReference"),
-                                            ref_attr, &ref_id);
-    if(retval == UA_STATUSCODE_GOOD )
-        printf("Created 'NewReference' with numeric NodeID %u\n", ref_id.identifier.numeric);
-
-    /* New ObjectType */
-    UA_NodeId objt_id;
-    UA_ObjectTypeAttributes objt_attr = UA_ObjectTypeAttributes_default;
-    objt_attr.displayName = UA_LOCALIZEDTEXT("en-US", "TheNewObjectType");
-    objt_attr.description = UA_LOCALIZEDTEXT("en-US", "Put innovative description here");
-    retval = UA_Client_addObjectTypeNode(client,
-                                         UA_NODEID_NUMERIC(1, 12134),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                         UA_QUALIFIEDNAME(1, "NewObjectType"),
-                                         objt_attr, &objt_id);
-    if(retval == UA_STATUSCODE_GOOD)
-        printf("Created 'NewObjectType' with numeric NodeID %u\n", objt_id.identifier.numeric);
-
-    /* New Object */
-    UA_NodeId obj_id;
-    UA_ObjectAttributes obj_attr = UA_ObjectAttributes_default;
-    obj_attr.displayName = UA_LOCALIZEDTEXT("en-US", "TheNewGreatNode");
-    obj_attr.description = UA_LOCALIZEDTEXT("de-DE", "Hier koennte Ihre Webung stehen!");
-    retval = UA_Client_addObjectNode(client,
-                                     UA_NODEID_NUMERIC(1, 0),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                     UA_QUALIFIEDNAME(1, "TheGreatNode"),
-                                     UA_NODEID_NUMERIC(1, 12134),
-                                     obj_attr, &obj_id);
-    if(retval == UA_STATUSCODE_GOOD )
-        printf("Created 'NewObject' with numeric NodeID %u\n", obj_id.identifier.numeric);
-
-    /* New Integer Variable */
-    UA_NodeId var_id;
-    UA_VariableAttributes var_attr = UA_VariableAttributes_default;
-    var_attr.displayName = UA_LOCALIZEDTEXT("en-US", "TheNewVariableNode");
-    var_attr.description =
-        UA_LOCALIZEDTEXT("en-US", "This integer is just amazing - it has digits and everything.");
-    UA_Int32 int_value = 1234;
-    /* This does not copy the value */
-    UA_Variant_setScalar(&var_attr.value, &int_value, &UA_TYPES[UA_TYPES_INT32]);
-    var_attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    retval = UA_Client_addVariableNode(client,
-                                       UA_NODEID_NUMERIC(1, 0), // Assign new/random NodeID
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                       UA_QUALIFIEDNAME(0, "VariableNode"),
-                                       UA_NODEID_NULL, // no variable type
-                                       var_attr, &var_id);
-    if(retval == UA_STATUSCODE_GOOD )
-        printf("Created 'NewVariable' with numeric NodeID %u\n", var_id.identifier.numeric);
-#endif
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-    return EXIT_SUCCESS;
-}
diff --git a/ext/open62541/examples/client_async.c b/ext/open62541/examples/client_async.c
deleted file mode 100644
index acceff6..0000000
--- a/ext/open62541/examples/client_async.c
+++ /dev/null
@@ -1,205 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel_async.h>
-#include <open62541/client_subscriptions.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server_config_default.h>
-
-#include <stdlib.h>
-
-#define NODES_EXIST
-/* async connection callback, it only gets called after the completion of the whole
- * connection process*/
-static void
-onConnect(UA_Client *client, void *userdata, UA_UInt32 requestId,
-          void *status) {
-    printf("Async connect returned with status code %s\n",
-           UA_StatusCode_name(*(UA_StatusCode *) status));
-}
-
-static
-void
-fileBrowsed(UA_Client *client, void *userdata, UA_UInt32 requestId,
-            UA_BrowseResponse *response) {
-    printf("%-50s%i\n", "Received BrowseResponse for request ", requestId);
-    UA_String us = *(UA_String *) userdata;
-    printf("---%.*s passed safely \n", (int) us.length, us.data);
-}
-
-/*high-level function callbacks*/
-static
-void
-readValueAttributeCallback(UA_Client *client, void *userdata,
-                           UA_UInt32 requestId, UA_Variant *var) {
-    printf("%-50s%i\n", "Read value attribute for request", requestId);
-
-    if(UA_Variant_hasScalarType(var, &UA_TYPES[UA_TYPES_INT32])) {
-        UA_Int32 int_val = *(UA_Int32*) var->data;
-        printf("---%-40s%-8i\n",
-               "Reading the value of node (1, \"the.answer\"):", int_val);
-    }
-
-    /*more type distinctions possible*/
-    return;
-}
-
-static
-void
-attrWritten(UA_Client *client, void *userdata, UA_UInt32 requestId,
-            UA_WriteResponse *response) {
-    /*assuming no data to be retrieved by writing attributes*/
-    printf("%-50s%i\n", "Wrote value attribute for request ", requestId);
-    UA_WriteResponse_clear(response);
-}
-
-#ifdef NODES_EXIST
-#ifdef UA_ENABLE_METHODCALLS
-static void
-methodCalled(UA_Client *client, void *userdata, UA_UInt32 requestId,
-             UA_CallResponse *response) {
-
-    printf("%-50s%i\n", "Called method for request ", requestId);
-    size_t outputSize;
-    UA_Variant *output;
-    UA_StatusCode retval = response->responseHeader.serviceResult;
-    if(retval == UA_STATUSCODE_GOOD) {
-        if(response->resultsSize == 1)
-            retval = response->results[0].statusCode;
-        else
-            retval = UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_CallResponse_clear(response);
-    }
-
-    /* Move the output arguments */
-    output = response->results[0].outputArguments;
-    outputSize = response->results[0].outputArgumentsSize;
-    response->results[0].outputArguments = NULL;
-    response->results[0].outputArgumentsSize = 0;
-
-    if(retval == UA_STATUSCODE_GOOD) {
-        printf("---Method call was successful, returned %lu values.\n",
-               (unsigned long) outputSize);
-        UA_Array_delete(output, outputSize, &UA_TYPES[UA_TYPES_VARIANT]);
-    } else {
-        printf("---Method call was unsuccessful, returned %x values.\n",
-                retval);
-    }
-    UA_CallResponse_clear(response);
-}
-
-static void
-translateCalled(UA_Client *client, void *userdata, UA_UInt32 requestId,
-                UA_TranslateBrowsePathsToNodeIdsResponse *response) {
-    printf("%-50s%i\n", "Translated path for request ", requestId);
-
-    if(response->results[0].targetsSize == 1)
-        return;
-    UA_TranslateBrowsePathsToNodeIdsResponse_clear(response);
-}
-#endif /* UA_ENABLE_METHODCALLS */
-#endif
-
-int
-main(int argc, char *argv[]) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_UInt32 reqId = 0;
-    UA_String userdata = UA_STRING("userdata");
-
-    UA_BrowseRequest bReq;
-    UA_BrowseRequest_init(&bReq);
-    bReq.requestedMaxReferencesPerNode = 0;
-    bReq.nodesToBrowse = UA_BrowseDescription_new();
-    bReq.nodesToBrowseSize = 1;
-    bReq.nodesToBrowse[0].nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    bReq.nodesToBrowse[0].resultMask = UA_BROWSERESULTMASK_ALL; /* return everything */
-
-    UA_Client_connect_async(client, "opc.tcp://localhost:4840", onConnect, NULL);
-
-    /*Windows needs time to response*/
-    UA_sleep_ms(100);
-
-    /* What happens if client tries to send request before connected? */
-    UA_Client_sendAsyncBrowseRequest(client, &bReq, fileBrowsed, &userdata, &reqId);
-
-    UA_DateTime startTime = UA_DateTime_nowMonotonic();
-    do {
-        /*TODO: fix memory-related bugs if condition not checked*/
-        if(UA_Client_getState(client) == UA_CLIENTSTATE_SESSION) {
-            /* If not connected requests are not sent */
-            UA_Client_sendAsyncBrowseRequest(client, &bReq, fileBrowsed, &userdata, &reqId);
-        }
-        /* Requests are processed */
-        UA_BrowseRequest_clear(&bReq);
-        UA_Client_run_iterate(client, 0);
-        UA_sleep_ms(100);
-
-        /* Break loop if server cannot be connected within 2s -- prevents build timeout */
-        if(UA_DateTime_nowMonotonic() - startTime > 2000 * UA_DATETIME_MSEC)
-            break;
-    } while(reqId < 10);
-
-    /* Demo: high-level functions */
-    UA_Int32 value = 0;
-    UA_Variant myVariant;
-    UA_Variant_init(&myVariant);
-
-    UA_Variant input;
-    UA_Variant_init(&input);
-
-    for(UA_UInt16 i = 0; i < 5; i++) {
-        if(UA_Client_getState(client) == UA_CLIENTSTATE_SESSION) {
-            /* writing and reading value 1 to 5 */
-            UA_Variant_setScalarCopy(&myVariant, &value, &UA_TYPES[UA_TYPES_INT32]);
-            value++;
-            UA_Client_writeValueAttribute_async(client,
-                                                UA_NODEID_STRING(1, "the.answer"),
-                                                &myVariant, attrWritten, NULL,
-                                                &reqId);
-            UA_Variant_clear(&myVariant);
-
-            UA_Client_readValueAttribute_async(client,
-                                               UA_NODEID_STRING(1, "the.answer"),
-                                               readValueAttributeCallback, NULL,
-                                               &reqId);
-
-//TODO: check the existance of the nodes inside these functions (otherwise seg faults)
-#ifdef NODES_EXIST
-#ifdef UA_ENABLE_METHODCALLS
-            UA_String stringValue = UA_String_fromChars("World");
-            UA_Variant_setScalar(&input, &stringValue, &UA_TYPES[UA_TYPES_STRING]);
-
-            UA_Client_call_async(client,
-                                 UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                 UA_NODEID_NUMERIC(1, 62541), 1, &input,
-                                 methodCalled, NULL, &reqId);
-            UA_String_clear(&stringValue);
-
-    #define pathSize 3
-            char *paths[pathSize] = { "Server", "ServerStatus", "State" };
-            UA_UInt32 ids[pathSize] = { UA_NS0ID_ORGANIZES,
-            UA_NS0ID_HASCOMPONENT, UA_NS0ID_HASCOMPONENT };
-
-            UA_Cient_translateBrowsePathsToNodeIds_async(client, paths, ids, pathSize,
-                                                         translateCalled, NULL, &reqId);
-#endif /* UA_ENABLE_METHODCALLS */
-#endif
-            /* How often UA_Client_run_iterate is called depends on the number of request sent */
-            UA_Client_run_iterate(client, 0);
-            UA_Client_run_iterate(client, 0);
-        }
-    }
-    UA_Client_run_iterate(client, 0);
-
-    /* Async disconnect kills unprocessed requests */
-    // UA_Client_disconnect_async (client, &reqId); //can only be used when connected = true
-    // UA_Client_run_iterate (client, &timedOut);
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-
-    return EXIT_SUCCESS;
-}
diff --git a/ext/open62541/examples/client_connect.c b/ext/open62541/examples/client_connect.c
deleted file mode 100644
index 40bccba..0000000
--- a/ext/open62541/examples/client_connect.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <open62541/client_subscriptions.h>
-#include <open62541/plugin/log_stdout.h>
-
-#include "common.h"
-
-static void usage(void) {
-    printf("Usage: client [-username name] [-password password] ");
-#ifdef UA_ENABLE_ENCRYPTION
-    printf("[-cert certfile.der] [-key keyfile.der] "
-           "[-securityMode <0-3>] [-securityPolicy policyUri] ");
-#endif
-    printf("opc.tcp://<host>:<port>\n");
-}
-
-int main(int argc, char *argv[]) {
-    UA_String securityPolicyUri = UA_STRING_NULL;
-    UA_MessageSecurityMode securityMode = UA_MESSAGESECURITYMODE_INVALID; /* allow everything */
-    char *serverurl = NULL;
-    char *username = NULL;
-    char *password = NULL;
-#ifdef UA_ENABLE_ENCRYPTION
-    char *certfile = NULL;
-    char *keyfile = NULL;
-#endif
-
-    /* At least one argument is required for the server uri */
-    if(argc <= 1) {
-        usage();
-        return EXIT_FAILURE;
-    }
-
-    /* Parse the arguments */
-    for(int argpos = 1; argpos < argc; argpos++) {
-        if(strcmp(argv[argpos], "--help") == 0 ||
-           strcmp(argv[argpos], "-h") == 0) {
-            usage();
-            return EXIT_SUCCESS;
-        }
-
-        if(argpos + 1 == argc) {
-            serverurl = argv[argpos];
-            continue;
-        }
-
-        if(strcmp(argv[argpos], "-username") == 0) {
-            argpos++;
-            username = argv[argpos];
-            continue;
-        }
-
-        if(strcmp(argv[argpos], "-password") == 0) {
-            argpos++;
-            password = argv[argpos];
-            continue;
-        }
-
-#ifdef UA_ENABLE_ENCRYPTION
-        if(strcmp(argv[argpos], "-cert") == 0) {
-            argpos++;
-            certfile = argv[argpos];
-            continue;
-        }
-
-        if(strcmp(argv[argpos], "-key") == 0) {
-            argpos++;
-            keyfile = argv[argpos];
-            continue;
-        }
-
-        if(strcmp(argv[argpos], "-securityMode") == 0) {
-            argpos++;
-            if(sscanf(argv[argpos], "%i", (int*)&securityMode) != 1) {
-                usage();
-                return EXIT_FAILURE;
-            }
-            continue;
-        }
-
-        if(strcmp(argv[argpos], "-securityPolicy") == 0) {
-            argpos++;
-            securityPolicyUri = UA_STRING(argv[argpos]);
-            continue;
-        }
-#endif
-
-        usage();
-        return EXIT_FAILURE;
-    }
-
-    /* Create the server and set its config */
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig *cc = UA_Client_getConfig(client);
-
-#ifdef UA_ENABLE_ENCRYPTION
-    if(certfile) {
-        UA_ByteString certificate = loadFile(certfile);
-        UA_ByteString privateKey  = loadFile(keyfile);
-        UA_ClientConfig_setDefaultEncryption(cc, certificate, privateKey,
-                                             NULL, 0, NULL, 0);
-        UA_ByteString_deleteMembers(&certificate);
-        UA_ByteString_deleteMembers(&privateKey);
-    } else {
-        UA_ClientConfig_setDefault(cc);
-    }
-#else
-    UA_ClientConfig_setDefault(cc);
-#endif
-
-    cc->securityMode = securityMode;
-    cc->securityPolicyUri = securityPolicyUri;
-
-    /* Connect to the server */
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(username)
-        retval = UA_Client_connect_username(client, serverurl, username, password);
-    else
-        retval = UA_Client_connect(client, serverurl);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Client_delete(client);
-        return EXIT_FAILURE;
-    }
-
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "Connected!");
-
-    /* Read the server-time */
-    UA_Variant value;
-    UA_Variant_init(&value);
-    UA_Client_readValueAttribute(client,
-              UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME),
-              &value);
-    if(UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_DATETIME])) {
-        UA_DateTimeStruct dts = UA_DateTime_toStruct(*(UA_DateTime *)value.data);
-        UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                    "The server date is: %02u-%02u-%04u %02u:%02u:%02u.%03u",
-                    dts.day, dts.month, dts.year, dts.hour, dts.min, dts.sec, dts.milliSec);
-    }
-    UA_Variant_clear(&value);
-
-    /* Clean up */
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/client_connect_loop.c b/ext/open62541/examples/client_connect_loop.c
deleted file mode 100644
index 75b822d..0000000
--- a/ext/open62541/examples/client_connect_loop.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-/**
- * Client disconnect handling
- * --------------------------
- * This example shows you how to handle a client disconnect, e.g., if the server
- * is shut down while the client is connected. You just need to call connect
- * again and the client will automatically reconnect.
- *
- * This example is very similar to the tutorial_client_firststeps.c. */
-
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <open62541/plugin/log_stdout.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-UA_Boolean running = true;
-
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_CLIENT, "Received Ctrl-C");
-    running = 0;
-}
-
-int main(void) {
-    signal(SIGINT, stopHandler); /* catches ctrl-c */
-
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig *cc = UA_Client_getConfig(client);
-    UA_ClientConfig_setDefault(cc);
-
-    /* default timeout is 5 seconds. Set it to 1 second here for demo */
-    cc->timeout = 1000;
-
-    /* Read the value attribute of the node. UA_Client_readValueAttribute is a
-     * wrapper for the raw read service available as UA_Client_Service_read. */
-    UA_Variant value; /* Variants can hold scalar values and arrays of any type */
-    UA_Variant_init(&value);
-
-    /* Endless loop reading the server time */
-    while(running) {
-        /* if already connected, this will return GOOD and do nothing */
-        /* if the connection is closed/errored, the connection will be reset and then reconnected */
-        /* Alternatively you can also use UA_Client_getState to get the current state */
-        UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_CLIENT, "Not connected. Retrying to connect in 1 second");
-            /* The connect may timeout after 1 second (see above) or it may fail immediately on network errors */
-            /* E.g. name resolution errors or unreachable network. Thus there should be a small sleep here */
-            UA_sleep_ms(1000);
-            continue;
-        }
-
-        /* NodeId of the variable holding the current time */
-        const UA_NodeId nodeId =
-                UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME);
-
-        retval = UA_Client_readValueAttribute(client, nodeId, &value);
-        if(retval == UA_STATUSCODE_BADCONNECTIONCLOSED) {
-            UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_CLIENT,
-                         "Connection was closed. Reconnecting ...");
-            continue;
-        }
-        if(retval == UA_STATUSCODE_GOOD &&
-           UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_DATETIME])) {
-            UA_DateTime raw_date = *(UA_DateTime *) value.data;
-            UA_DateTimeStruct dts = UA_DateTime_toStruct(raw_date);
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                        "date is: %02u-%02u-%04u %02u:%02u:%02u.%03u",
-                        dts.day, dts.month, dts.year, dts.hour, dts.min, dts.sec, dts.milliSec);
-        }
-        UA_Variant_clear(&value);
-        UA_sleep_ms(1000);
-    };
-
-    /* Clean up */
-    UA_Variant_clear(&value);
-    UA_Client_delete(client); /* Disconnects the client internally */
-    return EXIT_SUCCESS;
-}
diff --git a/ext/open62541/examples/client_connectivitycheck_loop.c b/ext/open62541/examples/client_connectivitycheck_loop.c
deleted file mode 100644
index 676b458..0000000
--- a/ext/open62541/examples/client_connectivitycheck_loop.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include <open62541/plugin/log_stdout.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-UA_Boolean running = true;
-
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "Received Ctrl-C");
-    running = 0;
-}
-
-static void
-inactivityCallback (UA_Client *client) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "Server Inactivity");
-}
-
-int main(void) {
-    signal(SIGINT, stopHandler); /* catches ctrl-c */
-
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig *cc = UA_Client_getConfig(client);
-    UA_ClientConfig_setDefault(cc);
-
-    cc->inactivityCallback = inactivityCallback; /* Set stateCallback */
-    cc->connectivityCheckInterval = 2000; /* Perform a connectivity check every 2 seconds */
-
-    /* Endless loop runAsync */
-    while (running) {
-        /* if already connected, this will return GOOD and do nothing */
-        /* if the connection is closed/errored, the connection will be reset and then reconnected */
-        /* Alternatively you can also use UA_Client_getState to get the current state */
-        UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                         "Not connected. Retrying to connect in 1 second");
-            /* The connect may timeout after 1 second (see above) or it may fail immediately on network errors */
-            /* E.g. name resolution errors or unreachable network. Thus there should be a small sleep here */
-            UA_sleep_ms(1000);
-            continue;
-        }
-
-        UA_Client_run_iterate(client, 1000);
-    };
-
-    /* Clean up */
-    UA_Client_delete(client); /* Disconnects the client internally */
-    return EXIT_SUCCESS;
-}
diff --git a/ext/open62541/examples/client_historical.c b/ext/open62541/examples/client_historical.c
deleted file mode 100644
index 0bf594d..0000000
--- a/ext/open62541/examples/client_historical.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#ifdef UA_ENABLE_EXPERIMENTAL_HISTORIZING
-static void
-printUpdateType(UA_HistoryUpdateType type) {
-    switch (type) {
-    case UA_HISTORYUPDATETYPE_INSERT:
-        printf("Insert\n");
-        return;
-    case UA_HISTORYUPDATETYPE_REPLACE:
-        printf("Replace\n");
-        return;
-    case UA_HISTORYUPDATETYPE_UPDATE:
-        printf("Update\n");
-        return;
-    case UA_HISTORYUPDATETYPE_DELETE:
-        printf("Delete\n");
-        return;
-    default:
-        printf("Unknown\n");
-        return;
-    }
-}
-#endif
-
-static void
-printTimestamp(char *name, UA_DateTime date) {
-    UA_DateTimeStruct dts = UA_DateTime_toStruct(date);
-    if (name)
-        printf("%s: %02u-%02u-%04u %02u:%02u:%02u.%03u, ", name,
-               dts.day, dts.month, dts.year, dts.hour, dts.min, dts.sec, dts.milliSec);
-    else
-        printf("%02u-%02u-%04u %02u:%02u:%02u.%03u, ",
-               dts.day, dts.month, dts.year, dts.hour, dts.min, dts.sec, dts.milliSec);
-}
-
-static void
-printDataValue(UA_DataValue *value) {
-    /* Print status and timestamps */
-    if (value->hasServerTimestamp)
-        printTimestamp("ServerTime", value->serverTimestamp);
-
-    if (value->hasSourceTimestamp)
-        printTimestamp("SourceTime", value->sourceTimestamp);
-
-    if (value->hasStatus)
-        printf("Status 0x%08x, ", value->status);
-
-    if (value->value.type == &UA_TYPES[UA_TYPES_UINT32]) {
-        UA_UInt32 hrValue = *(UA_UInt32 *)value->value.data;
-        printf("Uint32Value %u\n", hrValue);
-    }
-
-    if (value->value.type == &UA_TYPES[UA_TYPES_DOUBLE]) {
-        UA_Double hrValue = *(UA_Double *)value->value.data;
-        printf("DoubleValue %f\n", hrValue);
-    }
-}
-
-static UA_Boolean
-readRaw(const UA_HistoryData *data) {
-    printf("readRaw Value count: %lu\n", (long unsigned)data->dataValuesSize);
-
-    /* Iterate over all values */
-    for (UA_UInt32 i = 0; i < data->dataValuesSize; ++i)
-    {
-        printDataValue(&data->dataValues[i]);
-    }
-
-    /* We want more data! */
-    return true;
-}
-
-#ifdef UA_ENABLE_EXPERIMENTAL_HISTORIZING
-static UA_Boolean
-readRawModified(const UA_HistoryModifiedData *data) {
-    printf("readRawModified Value count: %lu\n", (long unsigned)data->dataValuesSize);
-
-    /* Iterate over all values */
-    for (size_t i = 0; i < data->dataValuesSize; ++i) {
-        printDataValue(&data->dataValues[i]);
-    }
-    printf("Modificaton Value count: %lu\n", data->modificationInfosSize);
-    for (size_t j = 0; j < data->modificationInfosSize; ++j) {
-        if (data->modificationInfos[j].userName.data)
-            printf("Username: %s, ", data->modificationInfos[j].userName.data);
-
-        printTimestamp("Modtime", data->modificationInfos[j].modificationTime);
-        printUpdateType(data->modificationInfos[j].updateType);
-    }
-
-    /* We want more data! */
-    return true;
-}
-
-static UA_Boolean
-readEvents(const UA_HistoryEvent *data) {
-    printf("readEvent Value count: %lu\n", (long unsigned)data->eventsSize);
-    for (size_t i = 0; i < data->eventsSize; ++i) {
-        printf("Processing event: %lu\n", (long unsigned)i);
-        for (size_t j = 0; j < data->events[i].eventFieldsSize; ++j) {
-             printf("Processing %lu: %s\n", (long unsigned)j, data->events[i].eventFields[j].type->typeName);
-        }
-    }
-    return true;
-}
-#endif
-
-static UA_Boolean
-readHist(UA_Client *client, const UA_NodeId *nodeId,
-         UA_Boolean moreDataAvailable,
-         const UA_ExtensionObject *data, void *unused) {
-    printf("\nRead historical callback:\n");
-    printf("\tHas more data:\t%d\n\n", moreDataAvailable);
-    if (data->content.decoded.type == &UA_TYPES[UA_TYPES_HISTORYDATA]) {
-        return readRaw((UA_HistoryData*)data->content.decoded.data);
-    }
-#ifdef UA_ENABLE_EXPERIMENTAL_HISTORIZING
-    if (data->content.decoded.type == &UA_TYPES[UA_TYPES_HISTORYMODIFIEDDATA]) {
-        return readRawModified((UA_HistoryModifiedData*)data->content.decoded.data);
-    }
-    if (data->content.decoded.type == &UA_TYPES[UA_TYPES_HISTORYEVENT]) {
-        return readEvents((UA_HistoryEvent*)data->content.decoded.data);
-    }
-#endif
-    return true;
-}
-
-int main(int argc, char *argv[]) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    /* Connect to the Unified Automation demo server */
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:53530/OPCUA/SimulationServer");
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Client_delete(client);
-        return EXIT_FAILURE;
-    }
-
-    /* Read historical values (uint32) */
-    printf("\nStart historical read (1, \"myUintValue\"):\n");
-    UA_NodeId node = UA_NODEID_STRING(2, "MyLevel");
-    retval = UA_Client_HistoryRead_raw(client, &node, readHist,
-                                       UA_DateTime_fromUnixTime(0), UA_DateTime_now(), UA_STRING_NULL, false, 10, UA_TIMESTAMPSTORETURN_BOTH, (void *)UA_FALSE);
-
-    if (retval != UA_STATUSCODE_GOOD) {
-        printf("Failed. %s\n", UA_StatusCode_name(retval));
-    }
-
-#ifdef UA_ENABLE_EXPERIMENTAL_HISTORIZING
-    printf("\nStart historical modified read (1, \"myUintValue\"):\n");
-    retval = UA_Client_HistoryRead_modified(client, &node, readHist,
-                                       UA_DateTime_fromUnixTime(0), UA_DateTime_now(), UA_STRING_NULL, false, 10, UA_TIMESTAMPSTORETURN_BOTH, (void *)UA_FALSE);
-
-    if (retval != UA_STATUSCODE_GOOD) {
-        printf("Failed. %s\n", UA_StatusCode_name(retval));
-    }
-
-    printf("\nStart historical event read (1, \"myUintValue\"):\n");
-    UA_EventFilter filter;
-    UA_EventFilter_init(&filter);
-    UA_NodeId eventNode = UA_NODEID_NUMERIC(0, 2253);
-    retval = UA_Client_HistoryRead_events(client, &eventNode, readHist,
-                                       UA_DateTime_fromUnixTime(0), UA_DateTime_now(), UA_STRING_NULL, filter, 10, UA_TIMESTAMPSTORETURN_BOTH, (void *)UA_FALSE);
-
-    if (retval != UA_STATUSCODE_GOOD) {
-        printf("Failed. %s\n", UA_StatusCode_name(retval));
-    }
-#endif
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/client_subscription_loop.c b/ext/open62541/examples/client_subscription_loop.c
deleted file mode 100644
index b3cfd15..0000000
--- a/ext/open62541/examples/client_subscription_loop.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-/**
- * Client disconnect handling
- * --------------------------
- * This example shows you how to handle a client disconnect, e.g., if the server
- * is shut down while the client is connected. You just need to call connect
- * again and the client will automatically reconnect.
- *
- * This example is very similar to the tutorial_client_firststeps.c. */
-
-#include <open62541/client_config_default.h>
-#include <open62541/client_subscriptions.h>
-#include <open62541/plugin/log_stdout.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-UA_Boolean running = true;
-
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "Received Ctrl-C");
-    running = 0;
-}
-
-static void
-handler_currentTimeChanged(UA_Client *client, UA_UInt32 subId, void *subContext,
-                           UA_UInt32 monId, void *monContext, UA_DataValue *value) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "currentTime has changed!");
-    if(UA_Variant_hasScalarType(&value->value, &UA_TYPES[UA_TYPES_DATETIME])) {
-        UA_DateTime raw_date = *(UA_DateTime *) value->value.data;
-        UA_DateTimeStruct dts = UA_DateTime_toStruct(raw_date);
-        UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                    "date is: %02u-%02u-%04u %02u:%02u:%02u.%03u",
-                    dts.day, dts.month, dts.year, dts.hour, dts.min, dts.sec, dts.milliSec);
-    }
-}
-
-static void
-deleteSubscriptionCallback(UA_Client *client, UA_UInt32 subscriptionId, void *subscriptionContext) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                "Subscription Id %u was deleted", subscriptionId);
-}
-
-static void
-subscriptionInactivityCallback (UA_Client *client, UA_UInt32 subId, void *subContext) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "Inactivity for subscription %u", subId);
-}
-
-static void
-stateCallback (UA_Client *client, UA_ClientState clientState) {
-    switch(clientState) {
-        case UA_CLIENTSTATE_DISCONNECTED:
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "The client is disconnected");
-        break;
-        case UA_CLIENTSTATE_WAITING_FOR_ACK:
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "Waiting for ack");
-        break;
-        case UA_CLIENTSTATE_CONNECTED:
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                        "A TCP connection to the server is open");
-        break;
-        case UA_CLIENTSTATE_SECURECHANNEL:
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                        "A SecureChannel to the server is open");
-        break;
-        case UA_CLIENTSTATE_SESSION:{
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "A session with the server is open");
-            /* A new session was created. We need to create the subscription. */
-            /* Create a subscription */
-            UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();
-            UA_CreateSubscriptionResponse response = UA_Client_Subscriptions_create(client, request,
-                                                                                    NULL, NULL, deleteSubscriptionCallback);
-
-            if(response.responseHeader.serviceResult == UA_STATUSCODE_GOOD)
-                UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                            "Create subscription succeeded, id %u", response.subscriptionId);
-            else
-                return;
-
-            /* Add a MonitoredItem */
-            UA_MonitoredItemCreateRequest monRequest =
-                UA_MonitoredItemCreateRequest_default(UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME));
-
-            UA_MonitoredItemCreateResult monResponse =
-                UA_Client_MonitoredItems_createDataChange(client, response.subscriptionId,
-                                                          UA_TIMESTAMPSTORETURN_BOTH,
-                                                          monRequest, NULL, handler_currentTimeChanged, NULL);
-            if(monResponse.statusCode == UA_STATUSCODE_GOOD)
-                UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                            "Monitoring UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME', id %u",
-                            monResponse.monitoredItemId);
-        }
-        break;
-        case UA_CLIENTSTATE_SESSION_RENEWED:
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                        "A session with the server is open (renewed)");
-            /* The session was renewed. We don't need to recreate the subscription. */
-        break;
-        case UA_CLIENTSTATE_SESSION_DISCONNECTED:
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "Session disconnected");
-        break;
-    }
-    return;
-}
-
-int
-main(void) {
-    signal(SIGINT, stopHandler); /* catches ctrl-c */
-
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig *cc = UA_Client_getConfig(client);
-    UA_ClientConfig_setDefault(cc);
-
-    /* Set stateCallback */
-    cc->stateCallback = stateCallback;
-    cc->subscriptionInactivityCallback = subscriptionInactivityCallback;
-
-    /* Endless loop runAsync */
-    while(running) {
-        /* if already connected, this will return GOOD and do nothing */
-        /* if the connection is closed/errored, the connection will be reset and then reconnected */
-        /* Alternatively you can also use UA_Client_getState to get the current state */
-        UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                         "Not connected. Retrying to connect in 1 second");
-            /* The connect may timeout after 1 second (see above) or it may fail immediately on network errors */
-            /* E.g. name resolution errors or unreachable network. Thus there should be a small sleep here */
-            UA_sleep_ms(1000);
-            continue;
-        }
-
-        UA_Client_run_iterate(client, 1000);
-    };
-
-    /* Clean up */
-    UA_Client_delete(client); /* Disconnects the client internally */
-    return EXIT_SUCCESS;
-}
diff --git a/ext/open62541/examples/common.h b/ext/open62541/examples/common.h
deleted file mode 100644
index 820ffce..0000000
--- a/ext/open62541/examples/common.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/types.h>
-#include <open62541/types_generated_handling.h>
-
-/* loadFile parses the certificate file.
- *
- * @param  path               specifies the file name given in argv[]
- * @return Returns the file content after parsing */
-static UA_INLINE UA_ByteString
-loadFile(const char *const path) {
-    UA_ByteString fileContents = UA_STRING_NULL;
-
-    /* Open the file */
-    FILE *fp = fopen(path, "rb");
-    if(!fp) {
-        errno = 0; /* We read errno also from the tcp layer... */
-        return fileContents;
-    }
-
-    /* Get the file length, allocate the data and read */
-    fseek(fp, 0, SEEK_END);
-    fileContents.length = (size_t)ftell(fp);
-    fileContents.data = (UA_Byte *)UA_malloc(fileContents.length * sizeof(UA_Byte));
-    if(fileContents.data) {
-        fseek(fp, 0, SEEK_SET);
-        size_t read = fread(fileContents.data, sizeof(UA_Byte), fileContents.length, fp);
-        if(read != fileContents.length)
-            UA_ByteString_clear(&fileContents);
-    } else {
-        fileContents.length = 0;
-    }
-    fclose(fp);
-
-    return fileContents;
-}
diff --git a/ext/open62541/examples/custom_datatype/client_types_custom.c b/ext/open62541/examples/custom_datatype/client_types_custom.c
deleted file mode 100644
index 2aed9a1..0000000
--- a/ext/open62541/examples/custom_datatype/client_types_custom.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-
-#include <stdlib.h>
-
-#include "custom_datatype.h"
-
-int main(void) {
-    /* Make your custom datatype known to the stack */
-    UA_DataType types[1];
-    types[0] = PointType;
-
-    /* Attention! Here the custom datatypes are allocated on the stack. So they
-     * cannot be accessed from parallel (worker) threads. */
-    UA_DataTypeArray customDataTypes = {NULL, 1, types};
-
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig *cc = UA_Client_getConfig(client);
-    UA_ClientConfig_setDefault(cc);
-    cc->customDataTypes = &customDataTypes;
-
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Client_delete(client);
-        return (int)retval;
-    }
-    
-    UA_Variant value; /* Variants can hold scalar values and arrays of any type */
-    UA_Variant_init(&value);
-    
-     UA_NodeId nodeId =
-        UA_NODEID_STRING(1, "3D.Point");
-
-    retval = UA_Client_readValueAttribute(client, nodeId, &value);
-            
-    if(retval == UA_STATUSCODE_GOOD) {
-        Point *p = (Point *)value.data;
-        printf("Point = %f, %f, %f \n", p->x, p->y, p->z);
-    }
-
-    /* Clean up */
-    UA_Variant_clear(&value);
-    UA_Client_delete(client); /* Disconnects the client internally */
-    return EXIT_SUCCESS;
-}
diff --git a/ext/open62541/examples/custom_datatype/custom_datatype.h b/ext/open62541/examples/custom_datatype/custom_datatype.h
deleted file mode 100644
index e28ba16..0000000
--- a/ext/open62541/examples/custom_datatype/custom_datatype.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-typedef struct {
-    UA_Float x;
-    UA_Float y;
-    UA_Float z;
-} Point;
-
-/* The datatype description for the Point datatype */
-#define Point_padding_y offsetof(Point,y) - offsetof(Point,x) - sizeof(UA_Float)
-#define Point_padding_z offsetof(Point,z) - offsetof(Point,y) - sizeof(UA_Float)
-
-static UA_DataTypeMember Point_members[3] = {
-        /* x */
-        {
-                UA_TYPENAME("x") /* .memberName */
-                UA_TYPES_FLOAT,  /* .memberTypeIndex, points into UA_TYPES since namespaceZero is true */
-                0,               /* .padding */
-                true,            /* .namespaceZero, see .memberTypeIndex */
-                false            /* .isArray */
-        },
-
-        /* y */
-        {
-                UA_TYPENAME("y")
-                UA_TYPES_FLOAT, Point_padding_y, true, false
-        },
-
-        /* z */
-        {
-                UA_TYPENAME("z")
-                UA_TYPES_FLOAT, Point_padding_z, true, false
-        }
-};
-
-static const UA_DataType PointType = {
-        UA_TYPENAME("Point")             /* .typeName */
-        {1, UA_NODEIDTYPE_NUMERIC, {4242}}, /* .typeId */
-        sizeof(Point),                   /* .memSize */
-        0,                               /* .typeIndex, in the array of custom types */
-        UA_DATATYPEKIND_STRUCTURE,       /* .typeKind */
-        true,                            /* .pointerFree */
-        false,                           /* .overlayable (depends on endianness and
-                                         the absence of padding) */
-        3,                               /* .membersSize */
-        0,                               /* .binaryEncodingId, the numeric
-                                         identifier used on the wire (the
-                                         namespaceindex is from .typeId) */
-        Point_members
-};
diff --git a/ext/open62541/examples/custom_datatype/server_types_custom.c b/ext/open62541/examples/custom_datatype/server_types_custom.c
deleted file mode 100644
index 2be51aa..0000000
--- a/ext/open62541/examples/custom_datatype/server_types_custom.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-#include "custom_datatype.h"
-
-UA_Boolean running = true;
-
-static void stopHandler(int sig) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "received ctrl-c");
-    running = false;
-}
-
-static void
-add3PointDataType(UA_Server *server) {
-    UA_VariableTypeAttributes dattr = UA_VariableTypeAttributes_default;
-    dattr.description = UA_LOCALIZEDTEXT("en-US", "3D Point");
-    dattr.displayName = UA_LOCALIZEDTEXT("en-US", "3D Point");
-    dattr.dataType = PointType.typeId;
-    dattr.valueRank = UA_VALUERANK_SCALAR;
-
-    Point p;
-    p.x = 0.0;
-    p.y = 0.0;
-    p.z = 0.0;
-    UA_Variant_setScalar(&dattr.value, &p, &PointType);
-
-    UA_Server_addVariableTypeNode(server, PointType.typeId,
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                  UA_QUALIFIEDNAME(1, "3D.Point"),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                  dattr, NULL, NULL);
-
-}
-
-static void
-add3DPointVariable(UA_Server *server) {
-    Point p;
-    p.x = 3.0;
-    p.y = 4.0;
-    p.z = 5.0;
-    UA_VariableAttributes vattr = UA_VariableAttributes_default;
-    vattr.description = UA_LOCALIZEDTEXT("en-US", "3D Point");
-    vattr.displayName = UA_LOCALIZEDTEXT("en-US", "3D Point");
-    vattr.dataType = PointType.typeId;
-    vattr.valueRank = UA_VALUERANK_SCALAR;
-    UA_Variant_setScalar(&vattr.value, &p, &PointType);
-
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "3D.Point"),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                              UA_QUALIFIEDNAME(1, "3D.Point"),
-                              PointType.typeId, vattr, NULL, NULL);
-}
-
-int main(void) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    /* Make your custom datatype known to the stack */
-    UA_DataType *types = (UA_DataType*)UA_malloc(sizeof(UA_DataType));
-    UA_DataTypeMember *members = (UA_DataTypeMember*)UA_malloc(sizeof(UA_DataTypeMember) * 3);
-    members[0] = Point_members[0];
-    members[1] = Point_members[1];
-    members[2] = Point_members[2];
-    types[0] = PointType;
-    types[0].members = members;
-
-    /* Attention! Here the custom datatypes are allocated on the stack. So they
-     * cannot be accessed from parallel (worker) threads. */
-    UA_DataTypeArray customDataTypes = {config->customDataTypes, 1, types};
-    config->customDataTypes = &customDataTypes;
-
-    add3PointDataType(server);
-    add3DPointVariable(server);
-
-    UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    UA_free(members);
-    UA_free(types);
-    return EXIT_SUCCESS;
-}
diff --git a/ext/open62541/examples/discovery/client_find_servers.c b/ext/open62541/examples/discovery/client_find_servers.c
deleted file mode 100644
index 40a50a8..0000000
--- a/ext/open62541/examples/discovery/client_find_servers.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-/**
- * This client requests all the available servers from the discovery server (see server_lds.c)
- * and then calls GetEndpoints on the returned list of servers.
- */
-
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <open62541/plugin/log_stdout.h>
-
-#include <stdlib.h>
-
-#define DISCOVERY_SERVER_ENDPOINT "opc.tcp://localhost:4840"
-
-int main(void) {
-
-    /*
-     * Example for calling FindServersOnNetwork
-     */
-
-    {
-        UA_ServerOnNetwork *serverOnNetwork = NULL;
-        size_t serverOnNetworkSize = 0;
-
-        UA_Client *client = UA_Client_new();
-        UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-        UA_StatusCode retval = UA_Client_findServersOnNetwork(client, DISCOVERY_SERVER_ENDPOINT, 0, 0,
-                                                              0, NULL, &serverOnNetworkSize, &serverOnNetwork);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                         "Could not call FindServersOnNetwork service. "
-                         "Is the discovery server started? StatusCode %s",
-                         UA_StatusCode_name(retval));
-            UA_Client_delete(client);
-            return EXIT_FAILURE;
-        }
-
-        // output all the returned/registered servers
-        for(size_t i = 0; i < serverOnNetworkSize; i++) {
-            UA_ServerOnNetwork *server = &serverOnNetwork[i];
-            printf("Server[%lu]: %.*s", (unsigned long) i,
-                   (int) server->serverName.length, server->serverName.data);
-            printf("\n\tRecordID: %d", server->recordId);
-            printf("\n\tDiscovery URL: %.*s", (int) server->discoveryUrl.length,
-                   server->discoveryUrl.data);
-            printf("\n\tCapabilities: ");
-            for(size_t j = 0; j < server->serverCapabilitiesSize; j++) {
-                printf("%.*s,", (int) server->serverCapabilities[j].length,
-                       server->serverCapabilities[j].data);
-            }
-            printf("\n\n");
-        }
-
-        UA_Array_delete(serverOnNetwork, serverOnNetworkSize,
-                        &UA_TYPES[UA_TYPES_SERVERONNETWORK]);
-    }
-
-    /* Example for calling FindServers */
-    UA_ApplicationDescription *applicationDescriptionArray = NULL;
-    size_t applicationDescriptionArraySize = 0;
-
-    UA_StatusCode retval;
-    {
-        UA_Client *client = UA_Client_new();
-        UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-        retval = UA_Client_findServers(client, DISCOVERY_SERVER_ENDPOINT, 0, NULL, 0, NULL,
-                                       &applicationDescriptionArraySize, &applicationDescriptionArray);
-        UA_Client_delete(client);
-    }
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Could not call FindServers service. "
-                "Is the discovery server started? StatusCode %s", UA_StatusCode_name(retval));
-        return EXIT_FAILURE;
-    }
-
-    // output all the returned/registered servers
-    for(size_t i = 0; i < applicationDescriptionArraySize; i++) {
-        UA_ApplicationDescription *description = &applicationDescriptionArray[i];
-        printf("Server[%lu]: %.*s", (unsigned long) i, (int) description->applicationUri.length,
-               description->applicationUri.data);
-        printf("\n\tName: %.*s", (int) description->applicationName.text.length,
-               description->applicationName.text.data);
-        printf("\n\tApplication URI: %.*s", (int) description->applicationUri.length,
-               description->applicationUri.data);
-        printf("\n\tProduct URI: %.*s", (int) description->productUri.length,
-               description->productUri.data);
-        printf("\n\tType: ");
-        switch(description->applicationType) {
-            case UA_APPLICATIONTYPE_SERVER:
-                printf("Server");
-                break;
-            case UA_APPLICATIONTYPE_CLIENT:
-                printf("Client");
-                break;
-            case UA_APPLICATIONTYPE_CLIENTANDSERVER:
-                printf("Client and Server");
-                break;
-            case UA_APPLICATIONTYPE_DISCOVERYSERVER:
-                printf("Discovery Server");
-                break;
-            default:
-                printf("Unknown");
-        }
-        printf("\n\tDiscovery URLs:");
-        for(size_t j = 0; j < description->discoveryUrlsSize; j++) {
-            printf("\n\t\t[%lu]: %.*s", (unsigned long) j,
-                   (int) description->discoveryUrls[j].length,
-                   description->discoveryUrls[j].data);
-        }
-        printf("\n\n");
-    }
-
-
-    /*
-     * Now that we have the list of available servers, call get endpoints on all of them
-     */
-
-    printf("-------- Server Endpoints --------\n");
-
-    for(size_t i = 0; i < applicationDescriptionArraySize; i++) {
-        UA_ApplicationDescription *description = &applicationDescriptionArray[i];
-        if(description->discoveryUrlsSize == 0) {
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_CLIENT,
-                        "[GetEndpoints] Server %.*s did not provide any discovery urls. Skipping.",
-                        (int)description->applicationUri.length, description->applicationUri.data);
-            continue;
-        }
-
-        printf("\nEndpoints for Server[%lu]: %.*s\n", (unsigned long) i,
-               (int) description->applicationUri.length, description->applicationUri.data);
-
-        UA_Client *client = UA_Client_new();
-        UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-        char *discoveryUrl = (char *) UA_malloc(sizeof(char) * description->discoveryUrls[0].length + 1);
-        memcpy(discoveryUrl, description->discoveryUrls[0].data, description->discoveryUrls[0].length);
-        discoveryUrl[description->discoveryUrls[0].length] = '\0';
-
-        UA_EndpointDescription *endpointArray = NULL;
-        size_t endpointArraySize = 0;
-        //TODO: adapt to the new async getEndpoint
-        retval = UA_Client_getEndpoints(client, discoveryUrl, &endpointArraySize, &endpointArray);
-        UA_free(discoveryUrl);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_Client_disconnect(client);
-            UA_Client_delete(client);
-            break;
-        }
-
-        for(size_t j = 0; j < endpointArraySize; j++) {
-            UA_EndpointDescription *endpoint = &endpointArray[j];
-            printf("\n\tEndpoint[%lu]:", (unsigned long) j);
-            printf("\n\t\tEndpoint URL: %.*s", (int) endpoint->endpointUrl.length, endpoint->endpointUrl.data);
-            printf("\n\t\tTransport profile URI: %.*s", (int) endpoint->transportProfileUri.length,
-                   endpoint->transportProfileUri.data);
-            printf("\n\t\tSecurity Mode: ");
-            switch(endpoint->securityMode) {
-            case UA_MESSAGESECURITYMODE_INVALID:
-                printf("Invalid");
-                break;
-            case UA_MESSAGESECURITYMODE_NONE:
-                printf("None");
-                break;
-            case UA_MESSAGESECURITYMODE_SIGN:
-                printf("Sign");
-                break;
-            case UA_MESSAGESECURITYMODE_SIGNANDENCRYPT:
-                printf("Sign and Encrypt");
-                break;
-            default:
-                printf("No valid security mode");
-                break;
-            }
-            printf("\n\t\tSecurity profile URI: %.*s", (int) endpoint->securityPolicyUri.length,
-                   endpoint->securityPolicyUri.data);
-            printf("\n\t\tSecurity Level: %d", endpoint->securityLevel);
-        }
-
-        UA_Array_delete(endpointArray, endpointArraySize, &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
-        UA_Client_delete(client);
-    }
-
-    printf("\n");
-
-    UA_Array_delete(applicationDescriptionArray, applicationDescriptionArraySize,
-                    &UA_TYPES[UA_TYPES_APPLICATIONDESCRIPTION]);
-
-    return EXIT_SUCCESS;
-}
diff --git a/ext/open62541/examples/discovery/server_lds.c b/ext/open62541/examples/discovery/server_lds.c
deleted file mode 100644
index ca995e8..0000000
--- a/ext/open62541/examples/discovery/server_lds.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-/*
- * Server representing a local discovery server as a central instance.
- * Any other server can register with this server (see server_register.c). Clients can then call the
- * find servers service to get all registered servers (see client_find_servers.c).
- */
-
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-UA_Boolean running = true;
-static void stopHandler(int sig) {
-    running = false;
-}
-
-int main(void) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    // This is an LDS server only. Set the application type to DISCOVERYSERVER.
-    // NOTE: This will cause UaExpert to not show this instance in the server list.
-    // See also: https://forum.unified-automation.com/topic1987.html
-    config->applicationDescription.applicationType = UA_APPLICATIONTYPE_DISCOVERYSERVER;
-    UA_String_clear(&config->applicationDescription.applicationUri);
-    config->applicationDescription.applicationUri =
-            UA_String_fromChars("urn:open62541.example.local_discovery_server");
-
-    // Enable the mDNS announce and response functionality
-    config->discovery.mdnsEnable = true;
-
-    config->discovery.mdns.mdnsServerName = UA_String_fromChars("LDS");
-
-    // See http://www.opcfoundation.org/UA/schemas/1.03/ServerCapabilities.csv
-    // For a LDS server, you should only indicate the LDS capability.
-    // If this instance is an LDS and at the same time a normal OPC UA server, you also have to indicate
-    // the additional capabilities.
-    // NOTE: UaExpert does not show LDS-only servers in the list.
-    // See also: https://forum.unified-automation.com/topic1987.html
-
-    // E.g. here we only set LDS, and you will not see it in UaExpert
-    config->discovery.mdns.serverCapabilitiesSize = 1;
-    UA_String *caps = (UA_String *) UA_Array_new(1, &UA_TYPES[UA_TYPES_STRING]);
-    caps[0] = UA_String_fromChars("LDS");
-    config->discovery.mdns.serverCapabilities = caps;
-
-    /* timeout in seconds when to automatically remove a registered server from
-     * the list, if it doesn't re-register within the given time frame. A value
-     * of 0 disables automatic removal. Default is 60 Minutes (60*60). Must be
-     * bigger than 10 seconds, because cleanup is only triggered approximately
-     * every 10 seconds. The server will still be removed depending on the
-     * state of the semaphore file. */
-    // config->discoveryCleanupTimeout = 60*60;
-
-    UA_StatusCode retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/discovery/server_multicast.c b/ext/open62541/examples/discovery/server_multicast.c
deleted file mode 100644
index 44ef225..0000000
--- a/ext/open62541/examples/discovery/server_multicast.c
+++ /dev/null
@@ -1,351 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-/*
- * A simple server instance which registers with the discovery server.
- * Compared to server_register.c this example waits until the LDS server announces
- * itself through mDNS. Therefore the LDS server needs to support multicast extension
- * (i.e., LDS-ME).
- */
-
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-const UA_ByteString UA_SECURITY_POLICY_BASIC128_URI =
-    {56, (UA_Byte *)"http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15"};
-
-UA_Boolean running = true;
-
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-char *discovery_url = NULL;
-
-static void
-serverOnNetworkCallback(const UA_ServerOnNetwork *serverOnNetwork, UA_Boolean isServerAnnounce,
-                        UA_Boolean isTxtReceived, void *data) {
-
-    if(discovery_url != NULL || !isServerAnnounce) {
-        UA_LOG_DEBUG(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "serverOnNetworkCallback called, but discovery URL "
-                     "already initialized or is not announcing. Ignoring.");
-        return; // we already have everything we need or we only want server announces
-    }
-
-    if(!isTxtReceived)
-        return; // we wait until the corresponding TXT record is announced.
-                // Problem: how to handle if a Server does not announce the
-                // optional TXT?
-
-    // here you can filter for a specific LDS server, e.g. call FindServers on
-    // the serverOnNetwork to make sure you are registering with the correct
-    // LDS. We will ignore this for now
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Another server announced itself on %.*s",
-                (int)serverOnNetwork->discoveryUrl.length, serverOnNetwork->discoveryUrl.data);
-
-    if(discovery_url != NULL)
-        UA_free(discovery_url);
-    discovery_url = (char*)UA_malloc(serverOnNetwork->discoveryUrl.length + 1);
-    memcpy(discovery_url, serverOnNetwork->discoveryUrl.data, serverOnNetwork->discoveryUrl.length);
-    discovery_url[serverOnNetwork->discoveryUrl.length] = 0;
-}
-
-/*
- * Get the endpoint from the server, where we can call RegisterServer2 (or RegisterServer).
- * This is normally the endpoint with highest supported encryption mode.
- *
- * @param discoveryServerUrl The discovery url from the remote server
- * @return The endpoint description (which needs to be freed) or NULL
- */
-static
-UA_EndpointDescription *getRegisterEndpointFromServer(const char *discoveryServerUrl) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_EndpointDescription *endpointArray = NULL;
-    size_t endpointArraySize = 0;
-    UA_StatusCode retval = UA_Client_getEndpoints(client, discoveryServerUrl,
-                                                  &endpointArraySize, &endpointArray);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Array_delete(endpointArray, endpointArraySize,
-                        &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "GetEndpoints failed with %s", UA_StatusCode_name(retval));
-        UA_Client_delete(client);
-        return NULL;
-    }
-
-    UA_LOG_DEBUG(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Server has %lu endpoints", (unsigned long)endpointArraySize);
-    UA_EndpointDescription *foundEndpoint = NULL;
-    for(size_t i = 0; i < endpointArraySize; i++) {
-        UA_LOG_DEBUG(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "\tURL = %.*s, SecurityMode = %s",
-                     (int) endpointArray[i].endpointUrl.length,
-                     endpointArray[i].endpointUrl.data,
-                     endpointArray[i].securityMode == UA_MESSAGESECURITYMODE_NONE ? "None" :
-                     endpointArray[i].securityMode == UA_MESSAGESECURITYMODE_SIGN ? "Sign" :
-                     endpointArray[i].securityMode == UA_MESSAGESECURITYMODE_SIGNANDENCRYPT ? "SignAndEncrypt" :
-                     "Invalid"
-        );
-        // find the endpoint with highest supported security mode
-        if((UA_String_equal(&endpointArray[i].securityPolicyUri, &UA_SECURITY_POLICY_NONE_URI) ||
-            UA_String_equal(&endpointArray[i].securityPolicyUri, &UA_SECURITY_POLICY_BASIC128_URI)) && (
-            foundEndpoint == NULL || foundEndpoint->securityMode < endpointArray[i].securityMode))
-            foundEndpoint = &endpointArray[i];
-    }
-    UA_EndpointDescription *returnEndpoint = NULL;
-    if(foundEndpoint != NULL) {
-        returnEndpoint = UA_EndpointDescription_new();
-        UA_EndpointDescription_copy(foundEndpoint, returnEndpoint);
-    }
-    UA_Array_delete(endpointArray, endpointArraySize,
-                    &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
-    UA_Client_delete(client);
-    return returnEndpoint;
-}
-
-#ifdef UA_ENABLE_ENCRYPTION
-/* loadFile parses the certificate file.
- *
- * @param  path               specifies the file name given in argv[]
- * @return Returns the file content after parsing */
-static UA_ByteString loadFile(const char *const path) {
-    UA_ByteString fileContents = UA_BYTESTRING_NULL;
-    if(path == NULL)
-        return fileContents;
-
-    /* Open the file */
-    FILE *fp = fopen(path, "rb");
-    if(!fp) {
-        errno = 0; /* We read errno also from the tcp layer */
-        return fileContents;
-    }
-
-    /* Get the file length, allocate the data and read */
-    fseek(fp, 0, SEEK_END);
-    fileContents.length = (size_t) ftell(fp);
-    fileContents.data = (UA_Byte *) UA_malloc(fileContents.length * sizeof(UA_Byte));
-    if(fileContents.data) {
-        fseek(fp, 0, SEEK_SET);
-        size_t read = fread(fileContents.data, sizeof(UA_Byte), fileContents.length, fp);
-        if(read != fileContents.length)
-            UA_ByteString_clear(&fileContents);
-    } else {
-        fileContents.length = 0;
-    }
-
-    fclose(fp);
-    return fileContents;
-}
-#endif
-
-/**
- * Initialize a client instance which is used for calling the registerServer service.
- * If the given endpoint has securityMode NONE, a client with default configuration
- * is returned.
- * If it is using SignAndEncrypt, the client certificates must be provided as a
- * command line argument and then the client is initialized using these certificates.
- * @param endpointRegister The remote endpoint where this server should register
- * @param argc from the main method
- * @param argv from the main method
- * @return NULL or the initialized non-connected client
- */
-static
-UA_Client *getRegisterClient(UA_EndpointDescription *endpointRegister, int argc, char **argv) {
-    if(endpointRegister->securityMode == UA_MESSAGESECURITYMODE_NONE) {
-        UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Using LDS endpoint with security None");
-        UA_Client *client = UA_Client_new();
-        UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-        return client;
-    }
-#ifdef UA_ENABLE_ENCRYPTION
-    if(endpointRegister->securityMode == UA_MESSAGESECURITYMODE_SIGN) {
-        UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                    "LDS endpoint which only supports Sign is currently not supported");
-        return NULL;
-    }
-
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                "Using LDS endpoint with security SignAndEncrypt");
-
-    UA_ByteString certificate = UA_BYTESTRING_NULL;
-    UA_ByteString privateKey = UA_BYTESTRING_NULL;
-    UA_ByteString *trustList = NULL;
-    size_t trustListSize = 0;
-    UA_ByteString *revocationList = NULL;
-    size_t revocationListSize = 0;
-
-
-    if(argc < 3) {
-        UA_LOG_FATAL(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                     "The Certificate and key is missing."
-                         "The required arguments are "
-                         "<client-certificate.der> <client-private-key.der> "
-                         "[<trustlist1.crl>, ...]");
-        return NULL;
-    }
-    certificate = loadFile(argv[1]);
-    privateKey = loadFile(argv[2]);
-
-    /* Load the trustList. Load revocationList is not supported now */
-    if(argc > 3) {
-        trustListSize = (size_t) argc - 3;
-        UA_StatusCode retval = UA_ByteString_allocBuffer(trustList, trustListSize);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_ByteString_clear(&certificate);
-            UA_ByteString_clear(&privateKey);
-            return NULL;
-        }
-
-        for(size_t trustListCount = 0; trustListCount < trustListSize; trustListCount++) {
-            trustList[trustListCount] = loadFile(argv[trustListCount + 3]);
-        }
-    }
-
-    /* Secure client initialization */
-    UA_Client *clientRegister = UA_Client_new();
-    UA_ClientConfig *cc = UA_Client_getConfig(clientRegister);
-    UA_ClientConfig_setDefaultEncryption(cc, certificate, privateKey,
-                                         trustList, trustListSize,
-                                         revocationList, revocationListSize);
-    cc->securityMode = UA_MESSAGESECURITYMODE_SIGNANDENCRYPT;
-
-    UA_ByteString_clear(&certificate);
-    UA_ByteString_clear(&privateKey);
-    for(size_t deleteCount = 0; deleteCount < trustListSize; deleteCount++)
-        UA_ByteString_clear(&trustList[deleteCount]);
-
-    return clientRegister;
-#else
-    return NULL;
-#endif
-}
-
-int main(int argc, char **argv) {
-    signal(SIGINT, stopHandler); /* catches ctrl-c */
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    // use port 0 to dynamically assign port
-    UA_ServerConfig_setMinimal(config, 0, NULL);
-
-    // An LDS server normally has the application type to DISCOVERYSERVER.
-    // Since this instance implements LDS and other OPC UA services, we set the type to SERVER.
-    // NOTE: Using DISCOVERYSERVER will cause UaExpert to not show this instance in the server list.
-    // See also: https://forum.unified-automation.com/topic1987.html
-
-    config->applicationDescription.applicationType = UA_APPLICATIONTYPE_SERVER;
-    UA_String_clear(&config->applicationDescription.applicationUri);
-    config->applicationDescription.applicationUri =
-        UA_String_fromChars("urn:open62541.example.server_multicast");
-
-    // Enable the mDNS announce and response functionality
-    config->discovery.mdnsEnable = true;
-
-    config->discovery.mdns.mdnsServerName = UA_String_fromChars("Sample Multicast Server");
-
-    //setting custom outbound interface
-    config->discovery.mdnsInterfaceIP = UA_String_fromChars("42.42.42.42"); //this line will produce an error and set the interface to 0.0.0.0
-
-    // See http://www.opcfoundation.org/UA/schemas/1.03/ServerCapabilities.csv
-    // For a LDS server, you should only indicate the LDS capability.
-    // If this instance is an LDS and at the same time a normal OPC UA server, you also have to indicate
-    // the additional capabilities.
-    // NOTE: UaExpert does not show LDS-only servers in the list.
-    // See also: https://forum.unified-automation.com/topic1987.html
-
-    config->discovery.mdns.serverCapabilitiesSize = 2;
-    UA_String *caps = (UA_String *) UA_Array_new(2, &UA_TYPES[UA_TYPES_STRING]);
-    caps[0] = UA_String_fromChars("LDS");
-    caps[1] = UA_String_fromChars("NA");
-    config->discovery.mdns.serverCapabilities = caps;
-
-    // Start the server and call iterate to wait for the multicast discovery of the LDS
-    UA_StatusCode retval = UA_Server_run_startup(server);
-
-    // callback which is called when a new server is detected through mDNS
-    // needs to be set after UA_Server_run_startup or UA_Server_run
-    UA_Server_setServerOnNetworkCallback(server, serverOnNetworkCallback, NULL);
-
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "Could not start the server. StatusCode %s",
-                     UA_StatusCode_name(retval));
-        UA_Server_delete(server);
-        UA_free(discovery_url);
-        return EXIT_FAILURE;
-    }
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                "Server started. Waiting for announce of LDS Server.");
-    while (running && discovery_url == NULL)
-        UA_Server_run_iterate(server, true);
-    if(!running) {
-        UA_Server_delete(server);
-        UA_free(discovery_url);
-        return EXIT_FAILURE;
-    }
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "LDS-ME server found on %s", discovery_url);
-
-    /* Check if the server supports sign and encrypt. OPC Foundation LDS
-     * requires an encrypted session for RegisterServer call, our server
-     * currently uses encrpytion optionally */
-    UA_EndpointDescription *endpointRegister = getRegisterEndpointFromServer(discovery_url);
-    UA_free(discovery_url);
-    if(endpointRegister == NULL || endpointRegister->securityMode == UA_MESSAGESECURITYMODE_INVALID) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "Could not find any suitable endpoints on discovery server");
-        UA_Server_delete(server);
-        return EXIT_FAILURE;
-    }
-
-    UA_Client *clientRegister = getRegisterClient(endpointRegister, argc, argv);
-    if(!clientRegister) {
-        UA_LOG_FATAL(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                     "Could not create the client for remote registering");
-        UA_Server_delete(server);
-        return EXIT_FAILURE;
-    }
-
-    /* Connect the client */
-    char *endpointUrl = (char*)UA_malloc(endpointRegister->endpointUrl.length + 1);
-    memcpy(endpointUrl, endpointRegister->endpointUrl.data, endpointRegister->endpointUrl.length);
-    endpointUrl[endpointRegister->endpointUrl.length] = 0;
-    UA_EndpointDescription_delete(endpointRegister);
-    retval = UA_Server_addPeriodicServerRegisterCallback(server, clientRegister, endpointUrl,
-                                                         10 * 60 * 1000, 500, NULL);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "Could not create periodic job for server register. StatusCode %s",
-                     UA_StatusCode_name(retval));
-        UA_free(endpointUrl);
-        UA_Client_disconnect(clientRegister);
-        UA_Client_delete(clientRegister);
-        UA_Server_delete(server);
-        return EXIT_FAILURE;
-    }
-
-    while (running)
-        UA_Server_run_iterate(server, true);
-
-    UA_Server_run_shutdown(server);
-
-    // UNregister the server from the discovery server.
-    retval = UA_Server_unregister_discovery(server, clientRegister);
-    if(retval != UA_STATUSCODE_GOOD)
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "Could not unregister server from discovery server. "
-                     "StatusCode %s", UA_StatusCode_name(retval));
-
-    UA_free(endpointUrl);
-    UA_Client_disconnect(clientRegister);
-    UA_Client_delete(clientRegister);
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/discovery/server_register.c b/ext/open62541/examples/discovery/server_register.c
deleted file mode 100644
index 033e3dc..0000000
--- a/ext/open62541/examples/discovery/server_register.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-/*
- * A simple server instance which registers with the discovery server (see server_lds.c).
- * Before shutdown it has to unregister itself.
- */
-
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-#define DISCOVERY_SERVER_ENDPOINT "opc.tcp://localhost:4840"
-
-UA_Boolean running = true;
-
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-static UA_StatusCode
-readInteger(UA_Server *server, const UA_NodeId *sessionId,
-            void *sessionContext, const UA_NodeId *nodeId,
-            void *nodeContext, UA_Boolean includeSourceTimeStamp,
-            const UA_NumericRange *range, UA_DataValue *value) {
-    UA_Int32 *myInteger = (UA_Int32*)nodeContext;
-    value->hasValue = true;
-    UA_Variant_setScalarCopy(&value->value, myInteger, &UA_TYPES[UA_TYPES_INT32]);
-
-    // we know the nodeid is a string
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "Node read %.*s",
-                (int)nodeId->identifier.string.length,
-                nodeId->identifier.string.data);
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                "read value %i", *(UA_UInt32 *)myInteger);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-writeInteger(UA_Server *server, const UA_NodeId *sessionId,
-             void *sessionContext, const UA_NodeId *nodeId,
-             void *nodeContext, const UA_NumericRange *range,
-             const UA_DataValue *value) {
-    UA_Int32 *myInteger = (UA_Int32*)nodeContext;
-    if(value->hasValue && UA_Variant_isScalar(&value->value) &&
-       value->value.type == &UA_TYPES[UA_TYPES_INT32] && value->value.data)
-        *myInteger = *(UA_Int32 *)value->value.data;
-
-    // we know the nodeid is a string
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "Node written %.*s",
-                (int)nodeId->identifier.string.length,
-                nodeId->identifier.string.data);
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                "written value %i", *(UA_UInt32 *)myInteger);
-    return UA_STATUSCODE_GOOD;
-}
-
-int main(int argc, char **argv) {
-    signal(SIGINT, stopHandler); /* catches ctrl-c */
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    // use port 0 to dynamically assign port
-    UA_ServerConfig_setMinimal(config, 0, NULL);
-
-    UA_String_clear(&config->applicationDescription.applicationUri);
-    config->applicationDescription.applicationUri =
-        UA_String_fromChars("urn:open62541.example.server_register");
-    config->discovery.mdns.mdnsServerName = UA_String_fromChars("Sample Server");
-    // See http://www.opcfoundation.org/UA/schemas/1.03/ServerCapabilities.csv
-    //config.serverCapabilitiesSize = 1;
-    //UA_String caps = UA_String_fromChars("LDS");
-    //config.serverCapabilities = &caps;
-
-    /* add a variable node to the address space */
-    UA_Int32 myInteger = 42;
-    UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "the.answer");
-    UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "the answer");
-    UA_DataSource dateDataSource;
-    dateDataSource.read = readInteger;
-    dateDataSource.write = writeInteger;
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    attr.description = UA_LOCALIZEDTEXT("en-US", "the answer");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US", "the answer");
-
-    UA_Server_addDataSourceVariableNode(server, myIntegerNodeId,
-                                        UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                        UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                        myIntegerName, UA_NODEID_NULL, attr, dateDataSource,
-                                        &myInteger, NULL);
-
-    UA_Client *clientRegister = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(clientRegister));
-
-    // periodic server register after 10 Minutes, delay first register for 500ms
-    UA_StatusCode retval =
-        UA_Server_addPeriodicServerRegisterCallback(server, clientRegister, DISCOVERY_SERVER_ENDPOINT,
-                                                    10 * 60 * 1000, 500, NULL);
-    // UA_StatusCode retval = UA_Server_addPeriodicServerRegisterJob(server,
-    // "opc.tcp://localhost:4840", 10*60*1000, 500, NULL);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "Could not create periodic job for server register. StatusCode %s",
-                     UA_StatusCode_name(retval));
-        UA_Client_disconnect(clientRegister);
-        UA_Client_delete(clientRegister);
-        UA_Server_delete(server);
-        UA_Server_delete(server);
-        return EXIT_FAILURE;
-    }
-
-    retval = UA_Server_run(server, &running);
-
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "Could not start the server. StatusCode %s",
-                     UA_StatusCode_name(retval));
-        UA_Client_disconnect(clientRegister);
-        UA_Client_delete(clientRegister);
-        UA_Server_delete(server);
-        return EXIT_FAILURE;
-    }
-
-    // Unregister the server from the discovery server.
-    retval = UA_Server_unregister_discovery(server, clientRegister);
-    //retval = UA_Server_unregister_discovery(server, "opc.tcp://localhost:4840" );
-    if(retval != UA_STATUSCODE_GOOD)
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "Could not unregister server from discovery server. StatusCode %s",
-                     UA_StatusCode_name(retval));
-
-    UA_Client_disconnect(clientRegister);
-    UA_Client_delete(clientRegister);
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;;
-}
diff --git a/ext/open62541/examples/encryption/client_encryption.c b/ext/open62541/examples/encryption/client_encryption.c
deleted file mode 100644
index c27ceaa..0000000
--- a/ext/open62541/examples/encryption/client_encryption.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/plugin/securitypolicy.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <stdlib.h>
-
-#include "common.h"
-
-#define MIN_ARGS 4
-
-int main(int argc, char* argv[]) {
-    if(argc < MIN_ARGS) {
-        UA_LOG_FATAL(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                     "Arguments are missing. The required arguments are "
-                     "<opc.tcp://host:port> "
-                     "<client-certificate.der> <client-private-key.der> "
-                     "[<trustlist1.crl>, ...]");
-        return EXIT_FAILURE;
-    }
-
-    const char *endpointUrl = argv[1];
-
-    /* Load certificate and private key */
-    UA_ByteString certificate = loadFile(argv[2]);
-    UA_ByteString privateKey  = loadFile(argv[3]);
-
-    /* Load the trustList. Load revocationList is not supported now */
-    size_t trustListSize = 0;
-    if(argc > MIN_ARGS)
-        trustListSize = (size_t)argc-MIN_ARGS;
-    UA_STACKARRAY(UA_ByteString, trustList, trustListSize);
-    for(size_t trustListCount = 0; trustListCount < trustListSize; trustListCount++)
-        trustList[trustListCount] = loadFile(argv[trustListCount+4]);
-
-    UA_ByteString *revocationList = NULL;
-    size_t revocationListSize = 0;
-
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig *cc = UA_Client_getConfig(client);
-    cc->securityMode = UA_MESSAGESECURITYMODE_SIGNANDENCRYPT;
-    UA_ClientConfig_setDefaultEncryption(cc, certificate, privateKey,
-                                         trustList, trustListSize,
-                                         revocationList, revocationListSize);
-
-    UA_ByteString_clear(&certificate);
-    UA_ByteString_clear(&privateKey);
-    for(size_t deleteCount = 0; deleteCount < trustListSize; deleteCount++) {
-        UA_ByteString_clear(&trustList[deleteCount]);
-    }
-
-    /* Secure client connect */
-    cc->securityMode = UA_MESSAGESECURITYMODE_SIGNANDENCRYPT; /* require encryption */
-    UA_StatusCode retval = UA_Client_connect(client, endpointUrl);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Client_delete(client);
-        return EXIT_FAILURE;
-    }
-
-    UA_Variant value;
-    UA_Variant_init(&value);
-
-    /* NodeId of the variable holding the current time */
-    const UA_NodeId nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME);
-    retval = UA_Client_readValueAttribute(client, nodeId, &value);
-
-    if(retval == UA_STATUSCODE_GOOD &&
-       UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_DATETIME])) {
-        UA_DateTime raw_date  = *(UA_DateTime *) value.data;
-        UA_DateTimeStruct dts = UA_DateTime_toStruct(raw_date);
-        UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "date is: %u-%u-%u %u:%u:%u.%03u\n",
-                    dts.day, dts.month, dts.year, dts.hour, dts.min, dts.sec, dts.milliSec);
-    }
-
-    /* Clean up */
-    UA_Variant_clear(&value);
-    UA_Client_delete(client);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/encryption/server_encryption.c b/ext/open62541/examples/encryption/server_encryption.c
deleted file mode 100644
index 8b40d29..0000000
--- a/ext/open62541/examples/encryption/server_encryption.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2019 (c) Kalycito Infotech Private Limited
- *
- */
-
-#include <open62541/client_highlevel.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/plugin/securitypolicy.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-#include "common.h"
-
-UA_Boolean running = true;
-static void stopHandler(int sig) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "received ctrl-c");
-    running = false;
-}
-
-int main(int argc, char* argv[]) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    if(argc < 3) {
-        UA_LOG_FATAL(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                     "Missing arguments. Arguments are "
-                     "<server-certificate.der> <private-key.der> "
-                     "[<trustlist1.crl>, ...]");
-        return EXIT_FAILURE;
-    }
-
-    /* Load certificate and private key */
-    UA_ByteString certificate = loadFile(argv[1]);
-    UA_ByteString privateKey = loadFile(argv[2]);
-
-    /* Load the trustlist */
-    size_t trustListSize = 0;
-    if(argc > 3)
-        trustListSize = (size_t)argc-3;
-    UA_STACKARRAY(UA_ByteString, trustList, trustListSize);
-    for(size_t i = 0; i < trustListSize; i++)
-        trustList[i] = loadFile(argv[i+3]);
-
-    /* Loading of a issuer list, not used in this application */
-    size_t issuerListSize = 0;
-    UA_ByteString *issuerList = NULL;
-
-    /* Loading of a revocation list currently unsupported */
-    UA_ByteString *revocationList = NULL;
-    size_t revocationListSize = 0;
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-
-    UA_StatusCode retval =
-        UA_ServerConfig_setDefaultWithSecurityPolicies(config, 4840,
-                                                       &certificate, &privateKey,
-                                                       trustList, trustListSize,
-                                                       issuerList, issuerListSize,
-                                                       revocationList, revocationListSize);
-    UA_ByteString_clear(&certificate);
-    UA_ByteString_clear(&privateKey);
-    for(size_t i = 0; i < trustListSize; i++)
-        UA_ByteString_clear(&trustList[i]);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    retval = UA_Server_run(server, &running);
-
- cleanup:
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/nodeset/CMakeLists.txt b/ext/open62541/examples/nodeset/CMakeLists.txt
deleted file mode 100644
index 1c2becf..0000000
--- a/ext/open62541/examples/nodeset/CMakeLists.txt
+++ /dev/null
@@ -1,134 +0,0 @@
-####################

-# Nodeset Examples #

-####################

-

-###################

-# Custom XML      #

-###################

-

-set(FILE_CSV_DIRPREFIX ${PROJECT_SOURCE_DIR}/nodeset)

-set(FILE_BSD_DIRPREFIX ${PROJECT_SOURCE_DIR}/nodeset)

-set(FILE_NS_DIRPREFIX ${PROJECT_SOURCE_DIR}/nodeset)

-

-if(NOT CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)

-    # needed or cmake doesn't recognize dependencies of generated files

-    set(PROJECT_BINARY_DIR ${CMAKE_BINARY_DIR})

-endif()

-

-# generate namespace from XML file

-if(NOT CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)

-    ua_generate_nodeset_and_datatypes(

-        NAME "example"

-        FILE_NS "${FILE_NS_DIRPREFIX}/server_nodeset.xml"

-        DEPENDS "${CMAKE_SOURCE_DIR}/tools/schema/Opc.Ua.NodeSet2.Minimal.xml"

-    )

-else()

-    # standalone examples build expects already installed Opc.Ua.NodeSet2.Minimal.xml

-    ua_generate_nodeset_and_datatypes(

-        NAME "example"

-        FILE_NS "${FILE_NS_DIRPREFIX}/server_nodeset.xml"

-    )

-endif()

-

-# The .csv file can be created from within UaModeler or manually

-ua_generate_nodeid_header(

-    NAME "example_nodeids"

-    ID_PREFIX "EXAMPLE_NS"

-    TARGET_SUFFIX "ids_example"

-    FILE_CSV "${FILE_CSV_DIRPREFIX}/server_nodeset.csv"

-)

-

-add_example(server_nodeset server_nodeset.c

-            ${UA_NODESET_EXAMPLE_SOURCES}

-            ${PROJECT_BINARY_DIR}/src_generated/open62541/example_nodeids.h)

-

-if(UA_NAMESPACE_ZERO STREQUAL "FULL")

-    ua_generate_nodeset_and_datatypes(

-        NAME "testnodeset"

-        FILE_CSV "${FILE_CSV_DIRPREFIX}/testnodeset.csv"

-        FILE_BSD "${FILE_BSD_DIRPREFIX}/testtypes.bsd"

-        NAMESPACE_IDX 2

-        FILE_NS "${FILE_NS_DIRPREFIX}/testnodeset.xml"

-        INTERNAL

-    )

-    add_example(server_testnodeset server_testnodeset.c

-                ${UA_NODESET_TESTNODESET_SOURCES}

-                ${UA_TYPES_TESTNODESET_SOURCES})

-    add_dependencies(server_testnodeset open62541-generator-ns-testnodeset)

-endif()

-

-

-###################

-# PLCopen Nodeset #

-###################

-

-if(NOT CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)

-    set(FILE_CSV_DIRPREFIX ${CMAKE_SOURCE_DIR}/deps/ua-nodeset)

-    set(FILE_BSD_PLCOPEN_DIRPREFIX ${CMAKE_SOURCE_DIR}/deps/ua-nodeset)

-    set(FILE_BSD_POWERLINK_DIRPREFIX ${PROJECT_SOURCE_DIR}/nodeset)

-    set(FILE_NS_DIRPREFIX ${CMAKE_SOURCE_DIR}/deps/ua-nodeset)

-else()

-    set(FILE_CSV_DIRPREFIX ${UA_NODESET_DIR})

-    set(FILE_BSD_PLCOPEN_DIRPREFIX ${UA_NODESET_DIR})

-    set(FILE_BSD_POWERLINK_DIRPREFIX ${PROJECT_SOURCE_DIR}/nodeset)

-    set(FILE_NS_DIRPREFIX ${UA_NODESET_DIR})

-endif()

-

-# PLCopen requires the full ns0 as basis

-if(UA_NAMESPACE_ZERO STREQUAL "FULL")

-

-    # Generate types and namespace for DI

-    ua_generate_nodeset_and_datatypes(

-        NAME "di"

-        FILE_CSV "${FILE_CSV_DIRPREFIX}/DI/OpcUaDiModel.csv"

-        FILE_BSD "${FILE_BSD_PLCOPEN_DIRPREFIX}/DI/Opc.Ua.Di.Types.bsd"

-        NAMESPACE_IDX 2

-        FILE_NS "${FILE_NS_DIRPREFIX}/DI/Opc.Ua.Di.NodeSet2.xml"

-        INTERNAL

-    )

-

-    # generate PLCopen namespace which is using DI

-    ua_generate_nodeset_and_datatypes(

-        NAME "plc"

-        # PLCopen does not define custom types. Only generate the nodeset

-        FILE_NS "${FILE_NS_DIRPREFIX}/PLCopen/Opc.Ua.Plc.NodeSet2.xml"

-        # PLCopen depends on the di nodeset, which must be generated before

-        DEPENDS "di"

-        INTERNAL

-    )

-

-    add_example(server_nodeset_plcopen server_nodeset_plcopen.c

-                ${UA_NODESET_DI_SOURCES}

-                ${UA_NODESET_PLC_SOURCES}

-                ${UA_TYPES_DI_SOURCES}

-                ${UA_TYPES_PLC_SOURCES})

-    add_dependencies(server_nodeset_plcopen open62541-generator-ns-plc)

-    

-

-endif()

-

-# POWERLINK requires the full ns0 as basis

-

-if(UA_NAMESPACE_ZERO STREQUAL "FULL")

-

-    # generate powerlink namespace which is using DI

-    ua_generate_nodeset_and_datatypes(

-        NAME "powerlink"

-        FILE_CSV "${FILE_CSV_DIRPREFIX}/POWERLINK/Opc.Ua.POWERLINK.NodeIds.csv"

-        FILE_BSD "${FILE_BSD_POWERLINK_DIRPREFIX}/Opc.Ua.POWERLINK.NodeSet2.bsd"

-        NAMESPACE_IDX 3

-        FILE_NS "${FILE_NS_DIRPREFIX}/POWERLINK/Opc.Ua.POWERLINK.NodeSet2.xml"

-        # POWERLINK depends on the di nodeset, which must be generated before

-        DEPENDS "di"

-        INTERNAL

-    )

-

-    add_example(server_nodeset_powerlink server_nodeset_powerlink.c

-                ${UA_NODESET_DI_SOURCES}

-                ${UA_NODESET_POWERLINK_SOURCES}

-                ${UA_TYPES_DI_SOURCES}

-                ${UA_TYPES_POWERLINK_SOURCES})

-    add_dependencies(server_nodeset_powerlink open62541-generator-ns-powerlink)

-    

-

-endif()

diff --git a/ext/open62541/examples/nodeset/Opc.Ua.POWERLINK.NodeSet2.bsd b/ext/open62541/examples/nodeset/Opc.Ua.POWERLINK.NodeSet2.bsd
deleted file mode 100644
index 7134198..0000000
--- a/ext/open62541/examples/nodeset/Opc.Ua.POWERLINK.NodeSet2.bsd
+++ /dev/null
@@ -1,58 +0,0 @@
-<opc:TypeDictionary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://opcfoundation.org/UA/POWERLINK/" DefaultByteOrder="LittleEndian" xmlns:opc="http://opcfoundation.org/BinarySchema/" xmlns:ua="http://opcfoundation.org/UA/" TargetNamespace="http://opcfoundation.org/UA/POWERLINK/">
-    <opc:Import Namespace="http://opcfoundation.org/UA/"/>
-    <opc:StructuredType BaseType="ua:ExtensionObject" Name="ErrorRegisterBits">
-        <opc:Documentation>Represents the values of the POWERLINK ErrorRegister </opc:Documentation>
-        <opc:Field TypeName="opc:ByteString" Name="Value"/>
-        <opc:Field TypeName="opc:ByteString" Name="ValidBits"/>
-    </opc:StructuredType>
-    <opc:StructuredType BaseType="ua:ExtensionObject" Name="PowerlinkAttribute">
-        <opc:Documentation>Represents the POWERLINK entry attributes</opc:Documentation>
-        <opc:Field TypeName="opc:ByteString" Name="Value"/>
-        <opc:Field TypeName="opc:ByteString" Name="ValidBits"/>
-    </opc:StructuredType>
-    <opc:StructuredType BaseType="ua:ExtensionObject" Name="PowerlinkErrorEntryDataType">
-        <opc:Documentation>Represents the entries of the POWERLINK Object ERR_History_ADOM (Object 1003h, SubIndex 1..254)</opc:Documentation>
-        <opc:Field TypeName="opc:UInt16" Name="entryType"/>
-        <opc:Field TypeName="opc:UInt16" Name="errorCode"/>
-        <opc:Field TypeName="opc:UInt64" Name="timeStamp"/>
-        <opc:Field TypeName="opc:UInt64" Name="additionalInformation"/>
-    </opc:StructuredType>
-    <opc:StructuredType BaseType="ua:ExtensionObject" Name="PowerlinkIpAddressDataType">
-        <opc:Documentation>Structure DataType PowerlinkIpAddressDataType to represent POWERLINK Objects of the POWERLINK data type IP_ADDRESS</opc:Documentation>
-        <opc:Field TypeName="opc:Byte" Name="b1"/>
-        <opc:Field TypeName="opc:Byte" Name="b2"/>
-        <opc:Field TypeName="opc:Byte" Name="b3"/>
-        <opc:Field TypeName="opc:Byte" Name="b4"/>
-    </opc:StructuredType>
-    <opc:StructuredType BaseType="ua:ExtensionObject" Name="PowerlinkPDOMappingEntryDataType">
-        <opc:Documentation>Structure DataType PowerlinkPDOMappingEntryDataType to represent the entries of POWERLINK Objects like PDO_RxCommParam_00h_REC</opc:Documentation>
-        <opc:Field TypeName="opc:UInt16" Name="length"/>
-        <opc:Field TypeName="opc:UInt16" Name="offset"/>
-        <opc:Field TypeName="opc:Byte" Name="reserved"/>
-        <opc:Field TypeName="opc:Byte" Name="subIndex"/>
-        <opc:Field TypeName="opc:UInt16" Name="index"/>
-    </opc:StructuredType>
-    <opc:EnumeratedType LengthInBits="32" Name="PowerlinkNMTResetCmdEnumeration">
-        <opc:Documentation>This DataType is an Enumeration that represents the NMT reset commands for POWERLINK</opc:Documentation>
-        <opc:EnumeratedValue Name="NMTResetNode" Value="40"/>
-        <opc:EnumeratedValue Name="NMTResetCommunication" Value="41"/>
-        <opc:EnumeratedValue Name="NMTResetConfiguration" Value="42"/>
-        <opc:EnumeratedValue Name="NMTSwReset" Value="43"/>
-        <opc:EnumeratedValue Name="NMTInvalidService" Value="255"/>
-    </opc:EnumeratedType>
-    <opc:EnumeratedType LengthInBits="32" Name="PowerlinkNMTStateEnumeration">
-        <opc:Documentation>This DataType is an enumeration that represents the NMT State</opc:Documentation>
-        <opc:EnumeratedValue Name="NMT_GS_OFF " Value="0"/>
-        <opc:EnumeratedValue Name="NMT_GS_INITIALISING" Value="25"/>
-        <opc:EnumeratedValue Name="NMT_GS_RESET_APPLICATION" Value="41"/>
-        <opc:EnumeratedValue Name="NMT_GS_RESET_COMMUNICATION" Value="57"/>
-        <opc:EnumeratedValue Name="NMT_GS_RESET_CONFIGURATION" Value="121"/>
-        <opc:EnumeratedValue Name="NMT_XS_NOT_ACTIVE" Value="28"/>
-        <opc:EnumeratedValue Name="NMT_XS_PRE_OPERATIONAL_1" Value="29"/>
-        <opc:EnumeratedValue Name="NMT_XS_PRE_OPERATIONAL_2" Value="93"/>
-        <opc:EnumeratedValue Name="NMT_XS_READY_TO_OPERATE" Value="109"/>
-        <opc:EnumeratedValue Name="NMT_XS_OPERATIONAL" Value="253"/>
-        <opc:EnumeratedValue Name="NMT_CS_STOPPED" Value="77"/>
-        <opc:EnumeratedValue Name="NMT_XS_BASIC_ETHERNET" Value="30"/>
-    </opc:EnumeratedType>
-</opc:TypeDictionary>
diff --git a/ext/open62541/examples/nodeset/server_nodeset.c b/ext/open62541/examples/nodeset/server_nodeset.c
deleted file mode 100644
index a85d4b7..0000000
--- a/ext/open62541/examples/nodeset/server_nodeset.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-/* Files example_namespace.h and example_namespace.c are created from server_nodeset.xml in the
- * /src_generated directory by CMake */
-#include "open62541/example_nodeids.h"
-#include "open62541/namespace_example_generated.h"
-
-#include <signal.h>
-#include <stdlib.h>
-
-UA_Boolean running = true;
-
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-int main(int argc, char** argv) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-    
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    UA_StatusCode retval;
-    /* create nodes from nodeset */
-    if(namespace_example_generated(server) != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Could not add the example nodeset. "
-        "Check previous output for any error.");
-        retval = UA_STATUSCODE_BADUNEXPECTEDERROR;
-    } else {
-
-        // Do some additional stuff with the nodes
-
-        // this will just get the namespace index, since it is already added to the server
-        UA_UInt16 nsIdx = UA_Server_addNamespace(server, "http://yourorganisation.org/test/");
-
-        UA_NodeId testInstanceId = UA_NODEID_NUMERIC(nsIdx, UA_EXAMPLE_NSID_TESTINSTANCE);
-
-        UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "The testInstance has ns=%d;id=%d",
-                    testInstanceId.namespaceIndex, testInstanceId.identifier.numeric);
-
-        retval = UA_Server_run(server, &running);
-    }
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/nodeset/server_nodeset.csv b/ext/open62541/examples/nodeset/server_nodeset.csv
deleted file mode 100644
index 8d7ac48..0000000
--- a/ext/open62541/examples/nodeset/server_nodeset.csv
+++ /dev/null
@@ -1,5 +0,0 @@
-testType,1001,ObjectType
-testInstance,5001,Object
-testFolder,5002,Object
-testType_Var1,6001,Variable
-testInstance_Var1,6002,Variable
diff --git a/ext/open62541/examples/nodeset/server_nodeset.xml b/ext/open62541/examples/nodeset/server_nodeset.xml
deleted file mode 100644
index eb6eb32..0000000
--- a/ext/open62541/examples/nodeset/server_nodeset.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<UANodeSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" xmlns:s1="http://yourorganisation.org/test/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-    <NamespaceUris>
-        <Uri>http://yourorganisation.org/test/</Uri>
-    </NamespaceUris>
-    <Aliases>
-        <Alias Alias="Double">i=11</Alias>
-        <Alias Alias="Organizes">i=35</Alias>
-        <Alias Alias="HasModellingRule">i=37</Alias>
-        <Alias Alias="HasTypeDefinition">i=40</Alias>
-        <Alias Alias="HasSubtype">i=45</Alias>
-        <Alias Alias="HasComponent">i=47</Alias>
-    </Aliases>
-    <!-- Following object has only references to nodes defined after itself -->
-    <UAObject NodeId="ns=1;i=5001" BrowseName="1:testInstance">
-        <DisplayName>testInstance</DisplayName>
-        <References>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5002</Reference>
-            <Reference ReferenceType="HasTypeDefinition">ns=1;i=1001</Reference>
-            <Reference ReferenceType="HasComponent">ns=1;i=6002</Reference>
-        </References>
-    </UAObject>
-    <UAObject NodeId="ns=1;i=5002" BrowseName="1:testFolder">
-        <DisplayName>testFolder</DisplayName>
-        <References>
-            <Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
-            <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
-        </References>
-    </UAObject>
-    <UAObjectType NodeId="ns=1;i=1001" BrowseName="1:testType">
-        <DisplayName>testType</DisplayName>
-        <References>
-            <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-            <Reference ReferenceType="HasComponent">ns=1;i=6001</Reference>
-        </References>
-    </UAObjectType>
-    <UAVariable DataType="Double" ParentNodeId="ns=1;i=1001" NodeId="ns=1;i=6001" BrowseName="1:Var1" UserAccessLevel="3" AccessLevel="3">
-        <DisplayName>Var1</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="HasModellingRule">i=78</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=1001</Reference>
-        </References>
-        <Value>
-            <uax:Double>42.0</uax:Double>
-        </Value>
-    </UAVariable>
-    <UAVariable ParentNodeId="ns=1;i=5001" NodeId="ns=1;i=6002" BrowseName="1:Var1" DataType="i=7" UserAccessLevel="3" AccessLevel="3">
-        <DisplayName>Var2</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=5001</Reference>
-        </References>
-        <Value>
-            <ListOfUInt32 xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-                <uax:UInt32>1</uax:UInt32>
-                <uax:UInt32>2</uax:UInt32>
-                <uax:UInt32>3</uax:UInt32>
-            </ListOfUInt32>
-        </Value>
-    </UAVariable>
-</UANodeSet>
diff --git a/ext/open62541/examples/nodeset/server_nodeset_plcopen.c b/ext/open62541/examples/nodeset/server_nodeset_plcopen.c
deleted file mode 100644
index 1aa76be..0000000
--- a/ext/open62541/examples/nodeset/server_nodeset_plcopen.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#ifdef UA_ENABLE_AMALGAMATION
-#include "open62541.h"
-#else
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-#endif
-
-#include "open62541/namespace_di_generated.h"
-#include "open62541/namespace_plc_generated.h"
-
-#include <signal.h>
-#include <stdlib.h>
-
-UA_Boolean running = true;
-
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-int main(int argc, char** argv) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    /* create nodes from nodeset */
-    UA_StatusCode retval = namespace_di_generated(server);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Adding the DI namespace failed. Please check previous error output.");
-        UA_Server_delete(server);
-        return EXIT_FAILURE;
-    }
-    retval |= namespace_plc_generated(server);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Adding the PLCopen namespace failed. Please check previous error output.");
-        UA_Server_delete(server);
-        return EXIT_FAILURE;
-    }
-
-    retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/nodeset/server_nodeset_powerlink.c b/ext/open62541/examples/nodeset/server_nodeset_powerlink.c
deleted file mode 100644
index ae1de7b..0000000
--- a/ext/open62541/examples/nodeset/server_nodeset_powerlink.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#ifdef UA_ENABLE_AMALGAMATION
-#include "open62541.h"
-#else
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-#endif
-
-#include "open62541/namespace_di_generated.h"
-#include "open62541/namespace_powerlink_generated.h"
-
-#include <signal.h>
-#include <stdlib.h>
-
-UA_Boolean running = true;
-
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-int main(int argc, char** argv) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    /* create nodes from nodeset */
-    UA_StatusCode retval = namespace_di_generated(server);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Adding the DI namespace failed. Please check previous error output.");
-        UA_Server_delete(server);
-        return EXIT_FAILURE;
-    }
-    retval |= namespace_powerlink_generated(server);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Adding the Powerlink namespace failed. Please check previous error output.");
-        UA_Server_delete(server);
-        return EXIT_FAILURE;
-    }
-
-    retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/nodeset/server_testnodeset.c b/ext/open62541/examples/nodeset/server_testnodeset.c
deleted file mode 100644
index e05966a..0000000
--- a/ext/open62541/examples/nodeset/server_testnodeset.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- */
-
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include "open62541/namespace_testnodeset_generated.h"
-
-#include <signal.h>
-#include <stdlib.h>
-
-UA_Boolean running = true;
-
-UA_DataTypeArray customTypesArray = { NULL, UA_TYPES_TESTNODESET_COUNT, UA_TYPES_TESTNODESET};
-
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-int main(int argc, char **argv)
-{
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    config->customDataTypes = &customTypesArray;
-
-    UA_StatusCode retval;
-    /* create nodes from nodeset */
-    if(namespace_testnodeset_generated(server) != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "Could not add the example nodeset. "
-                     "Check previous output for any error.");
-        retval = UA_STATUSCODE_BADUNEXPECTEDERROR;
-    } else {
-        UA_Variant out;
-        UA_Variant_init(&out);
-        UA_Server_readValue(server, UA_NODEID_NUMERIC(2, 10002), &out);
-        UA_Point *p = (UA_Point *)out.data;
-        printf("point 2d x: %f y: %f \n", p->x, p->y);
-        retval = UA_Server_run(server, &running);
-    }
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/nodeset/testnodeset.csv b/ext/open62541/examples/nodeset/testnodeset.csv
deleted file mode 100644
index 52ef85c..0000000
--- a/ext/open62541/examples/nodeset/testnodeset.csv
+++ /dev/null
@@ -1,19 +0,0 @@
-Structs,5001,Object
-Point_Encoding_DefaultBinary,5002,Object
-NestedPoint_Encoding_DefaultBinary,5003,Object
-PointWithArray_Encoding_DefaultBinary,5004,Object
-BaseDataTypes,5100,Object
-BaseDataTypes_Double,5101,Variable
-BaseDataTypes_Uint32,5102,Variable
-Point,10001,DataType
-Structs_PointA,10002,Variable
-Structs_PointC_Array,10004,Variable
-Structs_PointB,10005,Variable
-Structs_InputArguments,11493,Variable
-Structs_StaticNodeIdTypes,15962,Variable
-Structs_StaticNodeIdTypes,15963,Variable
-BaseDataTypes_String1_scalar,16001,Variable
-BaseDataTypes_ByteString_Scalar,16002,Variable
-PointWithArray,3003,DataType
-NestedPoint,10008,DataType
-PointWithPointArray,3004,DataType
diff --git a/ext/open62541/examples/nodeset/testnodeset.xml b/ext/open62541/examples/nodeset/testnodeset.xml
deleted file mode 100644
index 36dbeb3..0000000
--- a/ext/open62541/examples/nodeset/testnodeset.xml
+++ /dev/null
@@ -1,556 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-->A more complete example can be found in tools/test/nodeset_compiler<-->
-<UANodeSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" xmlns:s1="http://yourorganisation.org/test/Types.xsd" xmlns:ua="http://unifiedautomation.com/Configuration/NodeSet.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-    <NamespaceUris>
-        <Uri>http://yourorganisation.org/test/</Uri>
-    </NamespaceUris>
-    <Aliases>
-        <Alias Alias="Int32">i=6</Alias>
-        <Alias Alias="UInt32">i=7</Alias>
-        <Alias Alias="Double">i=11</Alias>
-        <Alias Alias="Organizes">i=35</Alias>
-        <Alias Alias="HasModellingRule">i=37</Alias>
-        <Alias Alias="HasEncoding">i=38</Alias>
-        <Alias Alias="HasTypeDefinition">i=40</Alias>
-        <Alias Alias="HasSubtype">i=45</Alias>
-        <Alias Alias="HasComponent">i=47</Alias>
-        <Alias Alias="IdType">i=256</Alias>
-        <Alias Alias="Argument">i=296</Alias>
-        <Alias Alias="Point3D">ns=1;i=3002</Alias>
-        <Alias Alias="Point">ns=1;i=10001</Alias>
-    </Aliases>
-    <Extensions>
-        <Extension>
-            <ua:ModelInfo Tool="UaModeler" Hash="NY/CbF6sk/OjLXFpjvfTAA==" Version="1.6.2"/>
-        </Extension>
-    </Extensions>
-    <!-->Struct with builtin members<-->
-    <UADataType NodeId="ns=1;i=10001" BrowseName="1:Point">
-        <DisplayName>Point</DisplayName>
-        <References>
-            <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-        </References>
-        <Definition Name="1:Point">
-            <Field DataType="Double" Name="x"/>
-            <Field DataType="Double" Name="y"/>
-        </Definition>
-    </UADataType>
-    <UAVariable NodeId="ns=1;i=12213" BrowseName="1:Point" ParentNodeId="ns=1;i=7617" DataType="String">
-        <DisplayName>Point</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=69</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=7617</Reference>
-        </References>
-        <Value>
-            <String xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">Point</String>
-        </Value>
-    </UAVariable>
-    <UAVariable NodeId="ns=1;i=12214" BrowseName="1:NestedPoint" ParentNodeId="ns=1;i=7617" DataType="String">
-        <DisplayName>NestedPoint</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=69</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=7617</Reference>
-        </References>
-        <Value>
-            <String xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">NestedPoint</String>
-        </Value>
-    </UAVariable>
-    <UAVariable NodeId="ns=1;i=12215" BrowseName="1:PointWithArray" ParentNodeId="ns=1;i=7617" DataType="String">
-        <DisplayName>PointWithArray</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=69</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=7617</Reference>
-        </References>
-        <Value>
-            <String xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">PointWithArray</String>
-        </Value>
-    </UAVariable>
-    <UAVariable NodeId="ns=1;i=7617" BrowseName="1:Opc.Ua.Testnodeset" SymbolicName="OpcUa_BinarySchema" DataType="ByteString">
-        <DisplayName>Opc.Ua.Testnodeset</DisplayName>
-        <References>
-            <Reference ReferenceType="HasComponent" IsForward="false">i=93</Reference>
-            <Reference ReferenceType="HasTypeDefinition">i=72</Reference>
-        </References>
-        <Value>
-        <!-- This is the Base64 Encoded content of testtypes.bsd -->
-        <ByteString xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">PG9wYzpUeXBlRGljdGlvbmFyeQogIHhtbG5zOm9wYz0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL0JpbmFyeVNjaGVtYS8iCiAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VBLyIKICB4bWxuczp0bnM9Imh0dHA6Ly95b3Vyb3JnYW5pc2F0aW9uLm9yZy90ZXN0LyIKICBEZWZhdWx0Qnl0ZU9yZGVyPSJMaXR0bGVFbmRpYW4iCiAgVGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8veW91cm9yZ2FuaXNhdGlvbi5vcmcvdGVzdC8iCj4KICA8b3BjOkltcG9ydCBOYW1lc3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9yZy9VQS8iIExvY2F0aW9uPSJPcGMuVWEuQmluYXJ5U2NoZW1hLmJzZCIvPgoKICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlBvaW50IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4KICAgIDxvcGM6RmllbGQgTmFtZT0ieCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+CiAgICA8b3BjOkZpZWxkIE5hbWU9InkiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPgogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPgoKICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5lc3RlZFBvaW50IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4KICAgIDxvcGM6RmllbGQgTmFtZT0ieCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+CiAgICA8b3BjOkZpZWxkIE5hbWU9InkiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPgogICAgPG9wYzpGaWVsZCBOYW1lPSJwb2ludDEiIFR5cGVOYW1lPSJ0bnM6UG9pbnQiIC8+CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+CgogICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlBvaW50V2l0aEFycmF5IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4KICAgIDxvcGM6RmllbGQgTmFtZT0ieCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+CiAgICA8b3BjOkZpZWxkIE5hbWU9InkiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPgogICAgPG9wYzpGaWVsZCBOYW1lPSJ6IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4KICAgIDxvcGM6RmllbGQgTmFtZT0iYXJyYXkxU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+CiAgICA8b3BjOkZpZWxkIE5hbWU9ImFycmF5MSIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIExlbmd0aEZpZWxkPSJhcnJheTFTaXplIiAvPgogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPgoKPC9vcGM6VHlwZURpY3Rpb25hcnk+</ByteString>
-        </Value>
-    </UAVariable>    
-    <UADataType NodeId="ns=1;i=10008" BrowseName="1:NestedPoint">
-        <DisplayName>NestedPoint</DisplayName>
-        <References>
-            <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-            <!--<Reference ReferenceType="HasDescription">ns=1;i=12213</Reference><-->
-        </References>
-        <Definition Name="1:Point">
-            <Field DataType="Double" Name="x"/>
-            <Field DataType="Double" Name="y"/>
-            <Field DataType="ns=1;i=10001" Name="Point1" />
-        </Definition>
-    </UADataType>
-    <UAObject SymbolicName="DefaultBinary" NodeId="ns=1;i=5002" BrowseName="Default Binary">
-        <DisplayName>Default Binary</DisplayName>
-        <References>
-            <Reference ReferenceType="HasEncoding" IsForward="false">ns=1;i=10001</Reference>
-            <Reference ReferenceType="HasTypeDefinition">i=76</Reference>
-            <Reference ReferenceType="HasDescription">ns=1;i=12213</Reference>
-        </References>
-    </UAObject>
-     <UAObject SymbolicName="DefaultBinary" NodeId="ns=1;i=5003" BrowseName="Default Binary">
-        <DisplayName>Default Binary</DisplayName>
-        <References>
-            <Reference ReferenceType="HasEncoding" IsForward="false">ns=1;i=10008</Reference>
-            <Reference ReferenceType="HasTypeDefinition">i=76</Reference>
-            <Reference ReferenceType="HasDescription">ns=1;i=12214</Reference>
-        </References>
-    </UAObject>
-    <UAObject SymbolicName="DefaultBinary" NodeId="ns=1;i=5004" BrowseName="Default Binary">
-        <DisplayName>Default Binary</DisplayName>
-        <References>
-            <Reference ReferenceType="HasEncoding" IsForward="false">ns=1;i=3003</Reference>
-            <Reference ReferenceType="HasTypeDefinition">i=76</Reference>
-            <Reference ReferenceType="HasDescription">ns=1;i=12215</Reference>
-        </References>
-    </UAObject>    
-    <UAObject NodeId="ns=1;i=5100" BrowseName="1:BuiltinTypes">
-        <DisplayName>BuiltinTypes</DisplayName>
-        <References>
-            <Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
-            <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
-        </References>
-    </UAObject>
-    <UAVariable DataType="ByteString" NodeId="ns=1;i=16002" BrowseName="1:ByteString_scalar_init" AccessLevel="3">
-        <DisplayName>ByteString_scalar_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>
-        <Value>
-            <ByteString>SGVsbG9Xb3JsZA==</ByteString>
-        </Value>
-    </UAVariable>
-    <!--ValueRank>
-    OPC UA spec part 3, NodeClass Variable
-    -3: Scalar or 1-dim
-    -2: Any, value can be a scalar or an array with any number of dimensions
-    -1: scalar
-     0: value is array with one or more dimensions
-     1: array with one dimension
-     n>1: array with with the specified numbers of dimensions
-    <-->
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8001" BrowseName="1:Int32_scalar_noInit_withoutValueRank" AccessLevel="3">
-        <DisplayName>Int32_scalar_noInit_withoutValueRank</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>        
-    </UAVariable>
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8002" BrowseName="1:Int32_scalar_Init_ValueRank=-3" AccessLevel="3" ValueRank="-3">
-        <DisplayName>Int32_scalar_Init_ValueRank=-3</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>
-        <Value>            
-            <Int32>1</Int32>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8003" BrowseName="1:Int32_1dim_Init_ValueRank=-3" AccessLevel="3" ValueRank="-3">
-        <DisplayName>Int32_1dim_Init_ValueRank=-3</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>
-        <Value>
-            <ListOfInt32>
-                <Int32>1</Int32>
-                <Int32>2</Int32>
-            </ListOfInt32>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8004" BrowseName="1:Int32_scalar_noInit_ValueRank=-2" AccessLevel="3" ValueRank="-2">
-        <DisplayName>Int32_scalar_noInit_ValueRank=-2</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>        
-    </UAVariable>
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8005" BrowseName="1:Int32_scalar_noInit_ValueRank=-1" AccessLevel="3" ValueRank="-1">
-        <DisplayName>Int32_scalar_noInit_ValueRank=-1</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>
-        <Value>
-            <ListOfInt32>
-                <Int32>1</Int32>
-                <Int32>2</Int32>
-            </ListOfInt32>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8006" BrowseName="1:Int32_OneOrMoreDim_noInit_ValueRank=0" AccessLevel="3" ValueRank="0">
-        <DisplayName>Int32_scalar_noInit_ValueRank=0</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>        
-    </UAVariable>
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8007" BrowseName="1:Int32_1dim_noInit_ValueRank=1" AccessLevel="3" ValueRank="1">
-        <DisplayName>Int32_1dim_noInit_ValueRank=1</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>        
-    </UAVariable>
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8008" BrowseName="1:Int32_2dim_noInit_ValueRank=2" AccessLevel="3" ValueRank="2">
-        <DisplayName>Int32_2dim_noInit_ValueRank=2</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>        
-    </UAVariable>
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8009" BrowseName="1:Int32_3dim_noInit_ValueRank=2" AccessLevel="3" ValueRank="3">
-        <DisplayName>Int32_3dim_noInit_ValueRank=2</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>        
-    </UAVariable>
-    <UAVariable DataType="String" NodeId="ns=1;i=16001" BrowseName="1:String_scalar_init" AccessLevel="3">
-        <DisplayName>String_scalar_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>
-        <Value>
-            <uax:String>Hello World</uax:String>
-        </Value>
-    </UAVariable>
-    <UAObject NodeId="ns=1;i=5001" BrowseName="1:NotBuiltinTypes">
-        <DisplayName>NotBuiltinTypes</DisplayName>
-        <References>            
-            <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
-        </References>
-    </UAObject>   
-    <UAVariable DataType="Argument" NodeId="ns=1;i=11493" BrowseName="InputArguments_scalar_init">
-        <DisplayName>InputArguments_scalar_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=5100</Reference>
-        </References>
-        <Value>
-            <uax:ExtensionObject>
-                <uax:TypeId>
-                    <uax:Identifier>i=297</uax:Identifier>
-                </uax:TypeId>
-                <uax:Body>
-                    <Argument xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-                        <Name>argName</Name>
-                        <DataType>
-                            <Identifier>i=1</Identifier>
-                        </DataType>
-                        <ValueRank>-1</ValueRank>                        
-                        <ArrayDimensions>0</ArrayDimensions>
-                        <Description>
-                            <Locale>en</Locale>
-                            <Text>myDescritipon</Text>
-                        </Description>
-                    </Argument>
-                </uax:Body>
-            </uax:ExtensionObject>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="Point" ParentNodeId="ns=1;i=5001" NodeId="ns=1;i=10002" BrowseName="1:Point_scalar_init" AccessLevel="3">
-        <DisplayName>Point_scalar_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=5001</Reference>            
-        </References>
-        <Value>
-            <uax:ExtensionObject>
-                <uax:TypeId>
-                    <uax:Identifier>ns=1;i=10001</uax:Identifier>
-                </uax:TypeId>
-                <uax:Body>
-                    <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                        <x>1</x>
-                        <y>2</y>
-                    </Point>
-                </uax:Body>
-            </uax:ExtensionObject>
-        </Value>
-    </UAVariable>
-    <!-->uninitialized scalar point<-->
-    <UAVariable DataType="Point" ParentNodeId="ns=1;i=5001" ValueRank="-1" NodeId="ns=1;i=10005" BrowseName="1:Point_scalar_noInit" AccessLevel="3">
-        <DisplayName>Point_scalar_noInit</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=5001</Reference>
-        </References>
-    </UAVariable>
-    <UAVariable DataType="Point" ParentNodeId="ns=1;i=5001" ValueRank="1" NodeId="ns=1;i=10007" BrowseName="1:Point_1dim_noInit" AccessLevel="3">
-        <DisplayName>Point_1dim_noInit</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=5001</Reference>
-        </References>
-    </UAVariable>
-    <UAVariable DataType="Point" ParentNodeId="ns=1;i=5001" ValueRank="1" NodeId="ns=1;i=10004" ArrayDimensions="4" BrowseName="1:Point_1dim_init" AccessLevel="3">
-        <DisplayName>Point_1dim_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=5001</Reference>
-        </References>
-        <Value>
-            <uax:ListOfExtensionObject>
-                <uax:ExtensionObject>
-                    <uax:TypeId>
-                        <uax:Identifier>i=0</uax:Identifier>
-                    </uax:TypeId>
-                    <uax:Body>
-                        <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                            <x>1</x>
-                            <y>2</y>
-                        </Point>
-                    </uax:Body>
-                </uax:ExtensionObject>
-                <uax:ExtensionObject>
-                    <uax:TypeId>
-                        <uax:Identifier>i=0</uax:Identifier>
-                    </uax:TypeId>
-                    <uax:Body>
-                        <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                            <x>3</x>
-                            <y>4</y>
-                        </Point>
-                    </uax:Body>
-                </uax:ExtensionObject>
-                <uax:ExtensionObject>
-                    <uax:TypeId>
-                        <uax:Identifier>i=0</uax:Identifier>
-                    </uax:TypeId>
-                    <uax:Body>
-                        <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                            <x>5</x>
-                            <y>6</y>
-                        </Point>
-                    </uax:Body>
-                </uax:ExtensionObject>
-                <uax:ExtensionObject>
-                    <uax:TypeId>
-                        <uax:Identifier>i=0</uax:Identifier>
-                    </uax:TypeId>
-                    <uax:Body>
-                        <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                            <x>7</x>
-                            <y>8</y>
-                        </Point>
-                    </uax:Body>
-                </uax:ExtensionObject>
-            </uax:ListOfExtensionObject>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="Point" ParentNodeId="ns=1;i=5001" ValueRank="2" NodeId="ns=1;i=10006" ArrayDimensions="2,2" BrowseName="1:Point_2dim_init" AccessLevel="3">
-        <DisplayName>Point_2dim_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=5001</Reference>
-        </References>
-        <Value>
-            <uax:ListOfExtensionObject>
-                <uax:ExtensionObject>
-                    <uax:TypeId>
-                        <uax:Identifier>ns=1;i=10001</uax:Identifier>
-                    </uax:TypeId>
-                    <uax:Body>
-                        <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                            <x>1</x>
-                            <y>2</y>
-                        </Point>
-                    </uax:Body>
-                </uax:ExtensionObject>
-                <uax:ExtensionObject>
-                    <uax:TypeId>
-                        <uax:Identifier>ns=1;i=10001</uax:Identifier>
-                    </uax:TypeId>
-                    <uax:Body>
-                        <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                            <x>3</x>
-                            <y>4</y>
-                        </Point>
-                    </uax:Body>
-                </uax:ExtensionObject>
-                <uax:ExtensionObject>
-                    <uax:TypeId>
-                        <uax:Identifier>ns=1;i=10001</uax:Identifier>
-                    </uax:TypeId>
-                    <uax:Body>
-                        <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                            <x>5</x>
-                            <y>6</y>
-                        </Point>
-                    </uax:Body>
-                </uax:ExtensionObject>
-                <uax:ExtensionObject>
-                    <uax:TypeId>
-                        <uax:Identifier>ns=1;i=10001</uax:Identifier>
-                    </uax:TypeId>
-                    <uax:Body>
-                        <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                            <x>7</x>
-                            <y>8</y>
-                        </Point>
-                    </uax:Body>
-                </uax:ExtensionObject>
-            </uax:ListOfExtensionObject>
-        </Value>
-    </UAVariable>    
-    <UAVariable DataType="Double" ParentNodeId="ns=1;i=5100" NodeId="ns=1;i=5101" BrowseName="1:Double_init" AccessLevel="3">
-        <DisplayName>Double_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="HasModellingRule">i=78</Reference>
-        </References>
-        <Value>
-            <uax:Double>42</uax:Double>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="UInt32" ParentNodeId="ns=1;i=5100" ValueRank="1" NodeId="ns=1;i=5102" ArrayDimensions="3" BrowseName="1:UInt32_init" AccessLevel="3">
-        <DisplayName>UInt32_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-        </References>
-        <Value>
-            <uax:ListOfUInt32>
-                <uax:UInt32>1</uax:UInt32>
-                <uax:UInt32>2</uax:UInt32>
-                <uax:UInt32>3</uax:UInt32>
-            </uax:ListOfUInt32>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="IdType" ParentNodeId="ns=1;i=5001" ValueRank="1" NodeId="ns=1;i=15962" ArrayDimensions="7" BrowseName="Enum_1dim_init">
-        <DisplayName>Enum_init</DisplayName>
-        <Description>A list of IdTypes for nodes which are the same in every server that exposes them.</Description>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-        </References>
-        <Value>
-            <uax:ListOfInt32>
-                <uax:Int32>0</uax:Int32>
-                <uax:Int32>1</uax:Int32>
-                <uax:Int32>3</uax:Int32>
-                <uax:Int32>4</uax:Int32>
-                <uax:Int32>5</uax:Int32>
-                <uax:Int32>6</uax:Int32>
-                <uax:Int32>7</uax:Int32>
-            </uax:ListOfInt32>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="IdType" ParentNodeId="ns=1;i=5001" NodeId="ns=1;i=15963" BrowseName="Enum_scalar_noInit">
-        <DisplayName>Enum_scalar_noInit</DisplayName>
-        <Description>A list of IdTypes for nodes which are the same in every server that exposes them.</Description>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-        </References>
-    </UAVariable>
-    <UAVariable DataType="i=307" NodeId="ns=1;i=16003" BrowseName="1:ApplicationTye_1dim_noInit" UserAccessLevel="3" AccessLevel="3" ValueRank="1">
-        <DisplayName>ApplicationTye_1dim_noInit</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>
-        <Value>
-            <ListOfInt32 xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-                <Int32>0</Int32>
-                <Int32>1</Int32>
-                <Int32>2</Int32>
-                <Int32>3</Int32>
-            </ListOfInt32>
-        </Value>
-    </UAVariable>
-    
-    <UAVariable DataType="Int32" ValueRank="2" NodeId="ns=1;i=6003" ArrayDimensions="3,2" BrowseName="1:Int32_2dim_init" AccessLevel="3">
-        <DisplayName>Int32_2dim_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>
-        <Value>
-            <uax:ListOfInt32>
-                <uax:Int32>11</uax:Int32>
-                <uax:Int32>21</uax:Int32>
-                <uax:Int32>31</uax:Int32>
-                <uax:Int32>12</uax:Int32>
-                <uax:Int32>22</uax:Int32>
-                <uax:Int32>32</uax:Int32>
-            </uax:ListOfInt32>
-        </Value>
-    </UAVariable>
-    <UADataType NodeId="ns=1;i=3003" BrowseName="1:PointWithArray">
-        <DisplayName>PointWithArray</DisplayName>
-        <References>
-            <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-        </References>
-        <Definition Name="1:PointWithArray">
-            <Field DataType="Double" Name="x"/>
-            <Field DataType="Double" Name="y"/>
-            <Field DataType="Double" Name="z"/>
-            <Field DataType="Int32" Name="array1Size"/>
-            <Field DataType="Double" ValueRank="1" Name="array1"/>
-        </Definition>
-    </UADataType>
-    <UADataType NodeId="ns=1;i=3004" BrowseName="1:PointWithPointArray">
-        <DisplayName>PointWithPointArray</DisplayName>
-        <References>
-            <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-        </References>
-        <Definition Name="1:PointWithPointArray">
-            <Field DataType="Double" Name="x"/>
-            <Field DataType="Double" Name="y"/>
-            <Field DataType="Double" Name="z"/>
-            <Field DataType="Int32" Name="array1Size"/>
-            <Field DataType="Double" ValueRank="1" Name="array1"/>
-        </Definition>
-    </UADataType>
-    <UAVariable DataType="ns=1;i=3004" NodeId="ns=1;i=6010" BrowseName="1:PointWithPointArray_scalar_noInit" UserAccessLevel="3" AccessLevel="3">
-        <DisplayName>PointWithArray_scalar_noInit</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5001</Reference>
-        </References>        
-    </UAVariable>
-    <UAVariable DataType="ns=1;i=3003" NodeId="ns=1;i=6008" BrowseName="1:PointWithArray_scalar_noInit" UserAccessLevel="3" AccessLevel="3">
-        <DisplayName>PointWithArray_scalar_noInit</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5001</Reference>
-        </References>
-        <Value>
-            <uax:ExtensionObject>
-                <uax:TypeId>
-                    <uax:Identifier>ns=1;i=3003</uax:Identifier>
-                </uax:TypeId>
-                <uax:Body>
-                    <PointWithArray xmlns="http://yourorganisation.org/exported2/Types.xsd">
-                        <x>1.1</x>
-                        <y>2.2</y>
-                        <z>3.3</z>
-                        <array1Size>2</array1Size>
-                        <array1>                        
-                            <Double>11.1</Double>
-                            <Double>12.1</Double>
-                        </array1>
-                    </PointWithArray>
-                </uax:Body>
-            </uax:ExtensionObject>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="ns=1;i=10008" NodeId="ns=1;i=6009" BrowseName="1:NestedPoint_scalar_noInit" UserAccessLevel="3" AccessLevel="3">
-        <DisplayName>NestedPoint_scalar_noInit</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5001</Reference>
-        </References>
-    </UAVariable>
-</UANodeSet>
diff --git a/ext/open62541/examples/nodeset/testtypes.bsd b/ext/open62541/examples/nodeset/testtypes.bsd
deleted file mode 100644
index 8f6c97d..0000000
--- a/ext/open62541/examples/nodeset/testtypes.bsd
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!--
- * Copyright (c) 2005-2018 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/
--->
-
-<opc:TypeDictionary
-  xmlns:opc="http://opcfoundation.org/BinarySchema/"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xmlns:ua="http://opcfoundation.org/UA/"
-  xmlns:tns="http://yourorganisation.org/test/"
-  DefaultByteOrder="LittleEndian"
-  TargetNamespace="http://yourorganisation.org/test/"
->
-  <opc:Import Namespace="http://opcfoundation.org/UA/" Location="Opc.Ua.BinarySchema.bsd"/>
-
-  <opc:StructuredType Name="Point" BaseType="ua:ExtensionObject">
-    <opc:Field Name="x" TypeName="opc:Double" />
-    <opc:Field Name="y" TypeName="opc:Double" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="NestedPoint" BaseType="ua:ExtensionObject">
-    <opc:Field Name="x" TypeName="opc:Double" />
-    <opc:Field Name="y" TypeName="opc:Double" />
-    <opc:Field Name="point1" TypeName="tns:Point" />
-  </opc:StructuredType>
-
-   <opc:StructuredType Name="PointWithArray" BaseType="ua:ExtensionObject">
-    <opc:Field Name="x" TypeName="opc:Double" />
-    <opc:Field Name="y" TypeName="opc:Double" />
-    <opc:Field Name="z" TypeName="opc:Double" />
-    <opc:Field Name="NoOfArrayDimensions" TypeName="opc:Int32" />
-    <opc:Field Name="array1" TypeName="opc:Double" LengthField="NoOfArrayDimensions" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="PointWithPointArray" BaseType="ua:ExtensionObject">
-    <opc:Field Name="x" TypeName="opc:Double" />
-    <opc:Field Name="y" TypeName="opc:Double" />
-    <opc:Field Name="z" TypeName="opc:Double" />
-    <opc:Field Name="NoOfArrayDimensions" TypeName="opc:Int32" />
-    <opc:Field Name="array1" TypeName="tns:Point" LengthField="NoOfArrayDimensions" />
-  </opc:StructuredType>
-
-</opc:TypeDictionary>
diff --git a/ext/open62541/examples/pubsub/pubsub_subscribe_standalone.c b/ext/open62541/examples/pubsub/pubsub_subscribe_standalone.c
deleted file mode 100644
index d8aac23..0000000
--- a/ext/open62541/examples/pubsub/pubsub_subscribe_standalone.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- */
-
-/**
- * IMPORTANT ANNOUNCEMENT
- * The PubSub subscriber API is currently not finished. This examples can be used to receive
- * and print the values, which are published by the tutorial_pubsub_publish example.
- * The following code uses internal API which will be later replaced by the higher-level
- * PubSub subscriber API.
- */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/plugin/pubsub.h>
-#include <open62541/plugin/pubsub_udp.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include "ua_pubsub_networkmessage.h"
-
-#include <signal.h>
-
-#ifdef UA_ENABLE_PUBSUB_ETH_UADP
-#include <open62541/plugin/pubsub_ethernet.h>
-#endif
-
-UA_Boolean running = true;
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                "received ctrl-c");
-    running = false;
-}
-
-static UA_StatusCode
-subscriberListen(UA_PubSubChannel *psc) {
-    UA_ByteString buffer;
-    UA_StatusCode retval = UA_ByteString_allocBuffer(&buffer, 512);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "Message buffer allocation failed!");
-        return retval;
-    }
-
-    /* Receive the message. Blocks for 100ms */
-    retval = psc->receive(psc, &buffer, NULL, 100);
-    if(retval != UA_STATUSCODE_GOOD || buffer.length == 0) {
-        /* Workaround!! Reset buffer length. Receive can set the length to zero.
-         * Then the buffer is not deleted because no memory allocation is
-         * assumed.
-         * TODO: Return an error code in 'receive' instead of setting the buf
-         * length to zero. */
-        buffer.length = 512;
-        UA_ByteString_clear(&buffer);
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* Decode the message */
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                "Message length: %lu", (unsigned long) buffer.length);
-    UA_NetworkMessage networkMessage;
-    memset(&networkMessage, 0, sizeof(UA_NetworkMessage));
-    size_t currentPosition = 0;
-    UA_NetworkMessage_decodeBinary(&buffer, &currentPosition, &networkMessage);
-    UA_ByteString_clear(&buffer);
-
-    /* Is this the correct message type? */
-    if(networkMessage.networkMessageType != UA_NETWORKMESSAGE_DATASET)
-        goto cleanup;
-
-    /* At least one DataSetMessage in the NetworkMessage? */
-    if(networkMessage.payloadHeaderEnabled &&
-       networkMessage.payloadHeader.dataSetPayloadHeader.count < 1)
-        goto cleanup;
-
-    /* Is this a KeyFrame-DataSetMessage? */
-    for(size_t j = 0; j < networkMessage.payloadHeader.dataSetPayloadHeader.count; j++) {
-        UA_DataSetMessage *dsm = &networkMessage.payload.dataSetPayload.dataSetMessages[j];
-        if(dsm->header.dataSetMessageType != UA_DATASETMESSAGE_DATAKEYFRAME)
-            continue;
-
-        /* Loop over the fields and print well-known content types */
-        for(int i = 0; i < dsm->data.keyFrameData.fieldCount; i++) {
-            const UA_DataType *currentType = dsm->data.keyFrameData.dataSetFields[i].value.type;
-            if(currentType == &UA_TYPES[UA_TYPES_BYTE]) {
-                UA_Byte value = *(UA_Byte *)dsm->data.keyFrameData.dataSetFields[i].value.data;
-                UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                            "Message content: [Byte] \tReceived data: %i", value);
-            } else if (currentType == &UA_TYPES[UA_TYPES_DATETIME]) {
-                UA_DateTime value = *(UA_DateTime *)dsm->data.keyFrameData.dataSetFields[i].value.data;
-                UA_DateTimeStruct receivedTime = UA_DateTime_toStruct(value);
-                UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                            "Message content: [DateTime] \t"
-                            "Received date: %02i-%02i-%02i Received time: %02i:%02i:%02i",
-                            receivedTime.year, receivedTime.month, receivedTime.day,
-                            receivedTime.hour, receivedTime.min, receivedTime.sec);
-            }
-        }
-    }
-
-    cleanup:
-    UA_NetworkMessage_clear(&networkMessage);
-    return retval;
-}
-
-int main(int argc, char **argv) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_PubSubTransportLayer udpLayer = UA_PubSubTransportLayerUDPMP();
-
-    UA_PubSubConnectionConfig connectionConfig;
-    memset(&connectionConfig, 0, sizeof(connectionConfig));
-    connectionConfig.name = UA_STRING("UADP Connection 1");
-    connectionConfig.transportProfileUri =
-        UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-    connectionConfig.enabled = UA_TRUE;
-
-    UA_NetworkAddressUrlDataType networkAddressUrl =
-        {UA_STRING_NULL , UA_STRING("opc.udp://224.0.0.22:4840/")};
-    UA_Variant_setScalar(&connectionConfig.address, &networkAddressUrl,
-                         &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-
-    UA_PubSubChannel *psc =
-        udpLayer.createPubSubChannel(&connectionConfig);
-    psc->regist(psc, NULL, NULL);
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    while(running && retval == UA_STATUSCODE_GOOD)
-        retval = subscriberListen(psc);
-
-    psc->close(psc);
-        
-    return 0;
-}
diff --git a/ext/open62541/examples/pubsub/server_pubsub_publisher_iop.c b/ext/open62541/examples/pubsub/server_pubsub_publisher_iop.c
deleted file mode 100644
index 1bbba60..0000000
--- a/ext/open62541/examples/pubsub/server_pubsub_publisher_iop.c
+++ /dev/null
@@ -1,884 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/plugin/pubsub_udp.h>
-#ifdef UA_ENABLE_PUBSUB_ETH_UADP
-#include <open62541/plugin/pubsub_ethernet.h>
-#endif
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-#define Publisher_ID 60
-
-static void addPublisher1(UA_Server *server, UA_NodeId publishedDataSetId);
-static void addPublisher2(UA_Server *server, UA_NodeId publishedDataSetId);
-
-static UA_NodeId ds1BoolToggleId;
-static int ds1BoolToggleCount = 0;
-static UA_Boolean ds1BoolToggleVal = false;
-static UA_NodeId ds1Int32Id;
-static UA_Int32 ds1Int32Val = 0;
-static UA_NodeId ds1Int32FastId;
-static UA_Int32 ds1Int32FastVal = 0;
-static UA_NodeId ds1DateTimeId;
-
-static UA_NodeId ds2BoolToggleId;
-static UA_Boolean ds2BoolToggleVal = false;
-static UA_NodeId ds2ByteId;
-static UA_Byte ds2ByteVal = 0;
-static UA_NodeId ds2Int16Id;
-static UA_Int16 ds2Int16Val = 0;
-static UA_NodeId ds2Int32Id;
-static UA_Int32 ds2Int32Val = 0;
-static UA_NodeId ds2Int64Id;
-static UA_Int64 ds2Int64Val = 0;
-static UA_NodeId ds2SByteId;
-static UA_SByte ds2SByteVal = 0;
-static UA_NodeId ds2UInt16Id;
-static UA_UInt16 ds2UInt16Val = 0;
-static UA_NodeId ds2UInt32Id;
-static UA_UInt32 ds2UInt32Val = 0;
-static UA_NodeId ds2UInt64Id;
-static UA_UInt64 ds2UInt64Val = 0;
-static UA_NodeId ds2FloatId;
-static UA_Float ds2FloatVal = 0;
-static UA_NodeId ds2DoubleId;
-static UA_Double ds2DoubleVal = 0;
-static UA_String *ds2StringArray = NULL;
-static size_t ds2StringArrayLen = 0;
-static size_t ds2StringIndex = 0;
-static UA_NodeId ds2StringId;
-static UA_NodeId ds2ByteStringId;
-static UA_NodeId ds2GuidId;
-static UA_NodeId ds2DateTimeId;
-static UA_NodeId ds2UInt32ArrId;
-static UA_UInt32 ds2UInt32ArrValue[10] = { 0, 10, 20, 30, 40, 50, 60, 70, 80, 90 };
-
-UA_NodeId connectionIdent;
-
-void
-timerCallback(UA_Server *server, void *data);
-
-static void
-addPubSubConnection(UA_Server *server, UA_String *transportProfile,
-    UA_NetworkAddressUrlDataType *networkAddressUrl) {
-    /* Details about the connection configuration and handling are located
-    * in the pubsub connection tutorial */
-    UA_PubSubConnectionConfig connectionConfig;
-    memset(&connectionConfig, 0, sizeof(connectionConfig));
-    connectionConfig.name = UA_STRING("UADP Connection 1");
-    connectionConfig.transportProfileUri = *transportProfile;
-    connectionConfig.enabled = UA_TRUE;
-    UA_Variant_setScalar(&connectionConfig.address, networkAddressUrl,
-        &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-    connectionConfig.publisherId.numeric = Publisher_ID;
-    UA_Server_addPubSubConnection(server, &connectionConfig, &connectionIdent);
-}
-
-static void addPublisher1(UA_Server *server, UA_NodeId publishedDataSetId) {
-    UA_NodeId folderId;
-    UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-    oAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Publisher 1");
-    UA_Server_addObjectNode(server, UA_NODEID_NULL,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-        UA_QUALIFIEDNAME(1, "Publisher 1"), UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-        oAttr, NULL, &folderId);
-
-    UA_NodeId_init(&ds1BoolToggleId);
-    UA_VariableAttributes boolToggleAttr = UA_VariableAttributes_default;
-    boolToggleAttr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_BOOLEAN].typeId, &boolToggleAttr.dataType);
-    UA_Variant_setScalar(&boolToggleAttr.value, &ds1BoolToggleVal, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    boolToggleAttr.displayName = UA_LOCALIZEDTEXT("en-US", "BoolToggle");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher1.BoolToggle"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "BoolToggle"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), boolToggleAttr, NULL, &ds1BoolToggleId);
-
-    UA_NodeId_init(&ds1Int32Id);
-    UA_VariableAttributes int32Attr = UA_VariableAttributes_default;
-    int32Attr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_INT32].typeId, &int32Attr.dataType);
-    int32Attr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&int32Attr.value, &ds1Int32Val, &UA_TYPES[UA_TYPES_INT32]);
-    int32Attr.displayName = UA_LOCALIZEDTEXT("en-US", "Int32");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher1.Int32"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "Int32"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), int32Attr, NULL, &ds1Int32Id);
-
-    UA_NodeId_init(&ds1Int32FastId);
-    UA_VariableAttributes int32FastAttr = UA_VariableAttributes_default;
-    int32FastAttr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_INT32].typeId, &int32FastAttr.dataType);
-    int32FastAttr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&int32FastAttr.value, &ds1Int32FastVal, &UA_TYPES[UA_TYPES_INT32]);
-    int32FastAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Int32Fast");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher1.Int32Fast"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "Int32Fast"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), int32FastAttr, NULL, &ds1Int32FastId);
-
-    UA_NodeId_init(&ds1DateTimeId);
-    UA_VariableAttributes dateTimeAttr = UA_VariableAttributes_default;
-    dateTimeAttr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_DATETIME].typeId, &dateTimeAttr.dataType);
-    dateTimeAttr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_DateTime dateTimeVal = UA_DateTime_now();
-    UA_Variant_setScalar(&dateTimeAttr.value, &dateTimeVal, &UA_TYPES[UA_TYPES_DATETIME]);
-    dateTimeAttr.displayName = UA_LOCALIZEDTEXT("en-US", "DateTime");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher1.DateTime"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "DateTime"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), dateTimeAttr, NULL, &ds1DateTimeId);
-
-    if (!UA_NodeId_equal(&publishedDataSetId, &UA_NODEID_NULL))
-    {
-        // Create and add fields to the PublishedDataSet
-        UA_DataSetFieldConfig boolToggleConfig;
-        memset(&boolToggleConfig, 0, sizeof(UA_DataSetFieldConfig));
-        boolToggleConfig.field.variable.fieldNameAlias = UA_STRING("BoolToggle");
-        boolToggleConfig.field.variable.promotedField = false;
-        boolToggleConfig.field.variable.publishParameters.publishedVariable = ds1BoolToggleId;
-        boolToggleConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig int32Config;
-        memset(&int32Config, 0, sizeof(UA_DataSetFieldConfig));
-        int32Config.field.variable.fieldNameAlias = UA_STRING("Int32");
-        int32Config.field.variable.promotedField = false;
-        int32Config.field.variable.publishParameters.publishedVariable = ds1Int32Id;
-        int32Config.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig int32FastConfig;
-        memset(&int32FastConfig, 0, sizeof(UA_DataSetFieldConfig));
-        int32FastConfig.field.variable.fieldNameAlias = UA_STRING("Int32Fast");
-        int32FastConfig.field.variable.promotedField = false;
-        int32FastConfig.field.variable.publishParameters.publishedVariable = ds1Int32FastId;
-        int32FastConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig dateTimeConfig;
-        memset(&dateTimeConfig, 0, sizeof(UA_DataSetFieldConfig));
-        dateTimeConfig.field.variable.fieldNameAlias = UA_STRING("DateTime");
-        dateTimeConfig.field.variable.promotedField = false;
-        dateTimeConfig.field.variable.publishParameters.publishedVariable = ds1DateTimeId;
-        dateTimeConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_NodeId f1, f2, f3, f4;
-        // add fields in reverse order, because all fields are added to the beginning of the list
-        UA_Server_addDataSetField(server, publishedDataSetId, &dateTimeConfig, &f4);
-        UA_Server_addDataSetField(server, publishedDataSetId, &int32FastConfig, &f3);
-        UA_Server_addDataSetField(server, publishedDataSetId, &int32Config, &f2);
-        UA_Server_addDataSetField(server, publishedDataSetId, &boolToggleConfig, &f1);
-    }
-}
-
-static void addPublisher2(UA_Server *server, UA_NodeId publishedDataSetId) {
-    UA_NodeId folderId;
-    UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-    oAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Publisher 2");
-    UA_Server_addObjectNode(server, UA_NODEID_NULL,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-        UA_QUALIFIEDNAME(1, "Publisher 2"), UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-        oAttr, NULL, &folderId);
-
-    UA_NodeId_init(&ds2BoolToggleId);
-    UA_VariableAttributes boolToggleAttr = UA_VariableAttributes_default;
-    boolToggleAttr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_BOOLEAN].typeId, &boolToggleAttr.dataType);
-    UA_Variant_setScalar(&boolToggleAttr.value, &ds2BoolToggleVal, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    boolToggleAttr.displayName = UA_LOCALIZEDTEXT("en-US", "BoolToggle");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher2.BoolToggle"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "BoolToggle"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), boolToggleAttr, NULL, &ds2BoolToggleId);
-
-    UA_NodeId_init(&ds2ByteId);
-    UA_VariableAttributes byteAttr = UA_VariableAttributes_default;
-    byteAttr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_BYTE].typeId, &byteAttr.dataType);
-    byteAttr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&byteAttr.value, &ds2ByteVal, &UA_TYPES[UA_TYPES_BYTE]);
-    byteAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Byte");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher2.Byte"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "Byte"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), byteAttr, NULL, &ds2ByteId);
-
-    UA_NodeId_init(&ds2Int16Id);
-    UA_VariableAttributes int16Attr = UA_VariableAttributes_default;
-    int16Attr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_INT16].typeId, &int16Attr.dataType);
-    int16Attr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&int16Attr.value, &ds2Int16Val, &UA_TYPES[UA_TYPES_INT16]);
-    int16Attr.displayName = UA_LOCALIZEDTEXT("en-US", "Int16");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher2.Int16"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "Int16"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), int16Attr, NULL, &ds2Int16Id);
-
-    UA_NodeId_init(&ds2Int32Id);
-    UA_VariableAttributes int32Attr = UA_VariableAttributes_default;
-    int32Attr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_INT32].typeId, &int32Attr.dataType);
-    int32Attr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&int32Attr.value, &ds2Int32Val, &UA_TYPES[UA_TYPES_INT32]);
-    int32Attr.displayName = UA_LOCALIZEDTEXT("en-US", "Int32");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher2.Int32"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "Int32"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), int32Attr, NULL, &ds2Int32Id);
-
-    UA_NodeId_init(&ds2Int64Id);
-    UA_VariableAttributes int64Attr = UA_VariableAttributes_default;
-    int64Attr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_INT64].typeId, &int64Attr.dataType);
-    int64Attr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&int64Attr.value, &ds2Int64Val, &UA_TYPES[UA_TYPES_INT64]);
-    int64Attr.displayName = UA_LOCALIZEDTEXT("en-US", "Int64");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher2.Int64"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "Int64"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), int64Attr, NULL, &ds2Int64Id);
-
-    UA_NodeId_init(&ds2SByteId);
-    UA_VariableAttributes sbyteAttr = UA_VariableAttributes_default;
-    sbyteAttr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_SBYTE].typeId, &sbyteAttr.dataType);
-    sbyteAttr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&sbyteAttr.value, &ds2SByteVal, &UA_TYPES[UA_TYPES_SBYTE]);
-    sbyteAttr.displayName = UA_LOCALIZEDTEXT("en-US", "SByte");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher2.SByte"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "SByte"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), sbyteAttr, NULL, &ds2SByteId);
-
-    UA_NodeId_init(&ds2UInt16Id);
-    UA_VariableAttributes uint16Attr = UA_VariableAttributes_default;
-    uint16Attr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_UINT16].typeId, &uint16Attr.dataType);
-    uint16Attr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&uint16Attr.value, &ds2UInt16Val, &UA_TYPES[UA_TYPES_UINT16]);
-    uint16Attr.displayName = UA_LOCALIZEDTEXT("en-US", "UInt16");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher2.UInt16"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "UInt16"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), uint16Attr, NULL, &ds2UInt16Id);
-
-    UA_NodeId_init(&ds2UInt32Id);
-    UA_VariableAttributes uint32Attr = UA_VariableAttributes_default;
-    uint32Attr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_UINT32].typeId, &uint32Attr.dataType);
-    uint32Attr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&uint32Attr.value, &ds2UInt32Val, &UA_TYPES[UA_TYPES_UINT32]);
-    uint32Attr.displayName = UA_LOCALIZEDTEXT("en-US", "UInt32");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher2.UInt32"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "UInt32"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), uint32Attr, NULL, &ds2UInt32Id);
-
-    UA_NodeId_init(&ds2UInt64Id);
-    UA_VariableAttributes uint64Attr = UA_VariableAttributes_default;
-    uint64Attr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_UINT64].typeId, &uint64Attr.dataType);
-    uint64Attr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&uint64Attr.value, &ds2UInt64Val, &UA_TYPES[UA_TYPES_UINT64]);
-    uint64Attr.displayName = UA_LOCALIZEDTEXT("en-US", "UInt64");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher2.UInt64"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "UInt64"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), uint64Attr, NULL, &ds2UInt64Id);
-
-    UA_NodeId_init(&ds2FloatId);
-    UA_VariableAttributes floatAttr = UA_VariableAttributes_default;
-    floatAttr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_FLOAT].typeId, &floatAttr.dataType);
-    floatAttr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&floatAttr.value, &ds2FloatVal, &UA_TYPES[UA_TYPES_FLOAT]);
-    floatAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Float");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher2.Float"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "Float"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), floatAttr, NULL, &ds2FloatId);
-
-    UA_NodeId_init(&ds2DoubleId);
-    UA_VariableAttributes doubleAttr = UA_VariableAttributes_default;
-    doubleAttr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_DOUBLE].typeId, &doubleAttr.dataType);
-    doubleAttr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&doubleAttr.value, &ds2DoubleVal, &UA_TYPES[UA_TYPES_DOUBLE]);
-    doubleAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Double");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher2.Double"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "Double"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), doubleAttr, NULL, &ds2DoubleId);
-
-    ds2StringArrayLen = 26;
-    ds2StringArray = (UA_String*)UA_Array_new(ds2StringArrayLen, &UA_TYPES[UA_TYPES_STRING]);
-    ds2StringArray[0] = UA_STRING_ALLOC("Alpha");
-    ds2StringArray[1] = UA_STRING_ALLOC("Bravo");
-    ds2StringArray[2] = UA_STRING_ALLOC("Charlie");
-    ds2StringArray[3] = UA_STRING_ALLOC("Delta");
-    ds2StringArray[4] = UA_STRING_ALLOC("Echo");
-    ds2StringArray[5] = UA_STRING_ALLOC("Foxtrot");
-    ds2StringArray[6] = UA_STRING_ALLOC("Golf");
-    ds2StringArray[7] = UA_STRING_ALLOC("Hotel");
-    ds2StringArray[8] = UA_STRING_ALLOC("India");
-    ds2StringArray[9] = UA_STRING_ALLOC("Juliet");
-    ds2StringArray[10] = UA_STRING_ALLOC("Kilo");
-    ds2StringArray[11] = UA_STRING_ALLOC("Lima");
-    ds2StringArray[12] = UA_STRING_ALLOC("Mike");
-    ds2StringArray[13] = UA_STRING_ALLOC("November");
-    ds2StringArray[14] = UA_STRING_ALLOC("Oscar");
-    ds2StringArray[15] = UA_STRING_ALLOC("Papa");
-    ds2StringArray[16] = UA_STRING_ALLOC("Quebec");
-    ds2StringArray[17] = UA_STRING_ALLOC("Romeo");
-    ds2StringArray[18] = UA_STRING_ALLOC("Sierra");
-    ds2StringArray[19] = UA_STRING_ALLOC("Tango");
-    ds2StringArray[20] = UA_STRING_ALLOC("Uniform");
-    ds2StringArray[21] = UA_STRING_ALLOC("Victor");
-    ds2StringArray[22] = UA_STRING_ALLOC("Whiskey");
-    ds2StringArray[23] = UA_STRING_ALLOC("X-ray");
-    ds2StringArray[24] = UA_STRING_ALLOC("Yankee");
-    ds2StringArray[25] = UA_STRING_ALLOC("Zulu");
-
-    UA_String stringVal;
-    UA_String_init(&stringVal);
-
-    UA_NodeId_init(&ds2StringId);
-    UA_VariableAttributes stringAttr = UA_VariableAttributes_default;
-    stringAttr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_STRING].typeId, &stringAttr.dataType);
-    stringAttr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&stringAttr.value, &stringVal, &UA_TYPES[UA_TYPES_STRING]);
-    stringAttr.displayName = UA_LOCALIZEDTEXT("en-US", "String");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher2.String"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "String"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), stringAttr, NULL, &ds2StringId);
-
-    UA_Byte data[] = { 0x00 };
-    UA_ByteString byteStringVal = { 1, data };
-
-    UA_NodeId_init(&ds2ByteStringId);
-    UA_VariableAttributes byteStringAttr = UA_VariableAttributes_default;
-    byteStringAttr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_BYTESTRING].typeId, &byteStringAttr.dataType);
-    byteStringAttr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&byteStringAttr.value, &byteStringVal, &UA_TYPES[UA_TYPES_BYTESTRING]);
-    byteStringAttr.displayName = UA_LOCALIZEDTEXT("en-US", "ByteString");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher2.ByteString"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "ByteString"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), byteStringAttr, NULL, &ds2ByteStringId);
-
-    UA_Guid guidVal = UA_Guid_random();
-    UA_NodeId_init(&ds2GuidId);
-    UA_VariableAttributes guidAttr = UA_VariableAttributes_default;
-    guidAttr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_GUID].typeId, &guidAttr.dataType);
-    guidAttr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&guidAttr.value, &guidVal, &UA_TYPES[UA_TYPES_GUID]);
-    guidAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Guid");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher2.Guid"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "Guid"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), guidAttr, NULL, &ds2GuidId);
-
-    UA_NodeId_init(&ds2DateTimeId);
-    UA_VariableAttributes dateTimeAttr = UA_VariableAttributes_default;
-    dateTimeAttr.valueRank = -1;
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_DATETIME].typeId, &dateTimeAttr.dataType);
-    dateTimeAttr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-    UA_DateTime dateTimeVal = UA_DateTime_now();
-    UA_Variant_setScalar(&dateTimeAttr.value, &dateTimeVal, &UA_TYPES[UA_TYPES_DATETIME]);
-    dateTimeAttr.displayName = UA_LOCALIZEDTEXT("en-US", "DateTime");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher2.DateTime"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "DateTime"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), dateTimeAttr, NULL, &ds2DateTimeId);
-
-    // UInt32Array
-    UA_NodeId_init(&ds2UInt32ArrId);
-    UA_VariableAttributes uint32ArrAttr = UA_VariableAttributes_default;
-    uint32ArrAttr.valueRank = 1;    // 1-dimensional array
-    uint32ArrAttr.arrayDimensionsSize = 1;
-    UA_UInt32 arrayDims[1] = { 10 };
-    uint32ArrAttr.arrayDimensions = arrayDims;
-
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_UINT32].typeId, &uint32ArrAttr.dataType);
-    uint32ArrAttr.accessLevel = UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE;
-
-    UA_Variant_setArray(&uint32ArrAttr.value, ds2UInt32ArrValue, 10, &UA_TYPES[UA_TYPES_UINT32]);
-    uint32ArrAttr.displayName = UA_LOCALIZEDTEXT("en-US", "UInt32Array");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "Publisher2.UInt32Array"), folderId,
-        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-        UA_QUALIFIEDNAME(1, "UInt32Array"),
-        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), uint32ArrAttr, NULL, &ds2UInt32ArrId);
-
-    if (!UA_NodeId_equal(&publishedDataSetId, &UA_NODEID_NULL))
-    {
-        // Create and add fields to the PublishedDataSet
-        UA_DataSetFieldConfig boolToggleConfig;
-        memset(&boolToggleConfig, 0, sizeof(UA_DataSetFieldConfig));
-        boolToggleConfig.field.variable.fieldNameAlias = UA_STRING("BoolToggle");
-        boolToggleConfig.field.variable.promotedField = false;
-        boolToggleConfig.field.variable.publishParameters.publishedVariable = ds2BoolToggleId;
-        boolToggleConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig byteConfig;
-        memset(&byteConfig, 0, sizeof(UA_DataSetFieldConfig));
-        byteConfig.field.variable.fieldNameAlias = UA_STRING("Byte");
-        byteConfig.field.variable.promotedField = false;
-        byteConfig.field.variable.publishParameters.publishedVariable = ds2ByteId;
-        byteConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig int16Config;
-        memset(&int16Config, 0, sizeof(UA_DataSetFieldConfig));
-        int16Config.field.variable.fieldNameAlias = UA_STRING("Int16");
-        int16Config.field.variable.promotedField = false;
-        int16Config.field.variable.publishParameters.publishedVariable = ds2Int16Id;
-        int16Config.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig int32Config;
-        memset(&int32Config, 0, sizeof(UA_DataSetFieldConfig));
-        int32Config.field.variable.fieldNameAlias = UA_STRING("Int32");
-        int32Config.field.variable.promotedField = false;
-        int32Config.field.variable.publishParameters.publishedVariable = ds2Int32Id;
-        int32Config.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig int64Config;
-        memset(&int64Config, 0, sizeof(UA_DataSetFieldConfig));
-        int64Config.field.variable.fieldNameAlias = UA_STRING("Int64");
-        int64Config.field.variable.promotedField = false;
-        int64Config.field.variable.publishParameters.publishedVariable = ds2Int64Id;
-        int64Config.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig sbyteConfig;
-        memset(&sbyteConfig, 0, sizeof(UA_DataSetFieldConfig));
-        sbyteConfig.field.variable.fieldNameAlias = UA_STRING("SByte");
-        sbyteConfig.field.variable.promotedField = false;
-        sbyteConfig.field.variable.publishParameters.publishedVariable = ds2SByteId;
-        sbyteConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig uint16Config;
-        memset(&uint16Config, 0, sizeof(UA_DataSetFieldConfig));
-        uint16Config.field.variable.fieldNameAlias = UA_STRING("UInt16");
-        uint16Config.field.variable.promotedField = false;
-        uint16Config.field.variable.publishParameters.publishedVariable = ds2UInt16Id;
-        uint16Config.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig uint32Config;
-        memset(&uint32Config, 0, sizeof(UA_DataSetFieldConfig));
-        uint32Config.field.variable.fieldNameAlias = UA_STRING("UInt32");
-        uint32Config.field.variable.promotedField = false;
-        uint32Config.field.variable.publishParameters.publishedVariable = ds2UInt32Id;
-        uint32Config.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig uint64Config;
-        memset(&uint64Config, 0, sizeof(UA_DataSetFieldConfig));
-        uint64Config.field.variable.fieldNameAlias = UA_STRING("UInt64");
-        uint64Config.field.variable.promotedField = false;
-        uint64Config.field.variable.publishParameters.publishedVariable = ds2UInt64Id;
-        uint64Config.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig floatConfig;
-        memset(&floatConfig, 0, sizeof(UA_DataSetFieldConfig));
-        floatConfig.field.variable.fieldNameAlias = UA_STRING("Float");
-        floatConfig.field.variable.promotedField = false;
-        floatConfig.field.variable.publishParameters.publishedVariable = ds2FloatId;
-        floatConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig doubleConfig;
-        memset(&doubleConfig, 0, sizeof(UA_DataSetFieldConfig));
-        doubleConfig.field.variable.fieldNameAlias = UA_STRING("Double");
-        doubleConfig.field.variable.promotedField = false;
-        doubleConfig.field.variable.publishParameters.publishedVariable = ds2DoubleId;
-        doubleConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig stringConfig;
-        memset(&stringConfig, 0, sizeof(UA_DataSetFieldConfig));
-        stringConfig.field.variable.fieldNameAlias = UA_STRING("String");
-        stringConfig.field.variable.promotedField = false;
-        stringConfig.field.variable.publishParameters.publishedVariable = ds2StringId;
-        stringConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig byteStringConfig;
-        memset(&byteStringConfig, 0, sizeof(UA_DataSetFieldConfig));
-        byteStringConfig.field.variable.fieldNameAlias = UA_STRING("ByteString");
-        byteStringConfig.field.variable.promotedField = false;
-        byteStringConfig.field.variable.publishParameters.publishedVariable = ds2ByteStringId;
-        byteStringConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig guidConfig;
-        memset(&guidConfig, 0, sizeof(UA_DataSetFieldConfig));
-        guidConfig.field.variable.fieldNameAlias = UA_STRING("Guid");
-        guidConfig.field.variable.promotedField = false;
-        guidConfig.field.variable.publishParameters.publishedVariable = ds2GuidId;
-        guidConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig dateTimeConfig;
-        memset(&dateTimeConfig, 0, sizeof(UA_DataSetFieldConfig));
-        dateTimeConfig.field.variable.fieldNameAlias = UA_STRING("DateTime");
-        dateTimeConfig.field.variable.promotedField = false;
-        dateTimeConfig.field.variable.publishParameters.publishedVariable = ds2DateTimeId;
-        dateTimeConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataSetFieldConfig uint32ArrConfig;
-        memset(&uint32ArrConfig, 0, sizeof(UA_DataSetFieldConfig));
-        uint32ArrConfig.field.variable.fieldNameAlias = UA_STRING("UInt32Array");
-        uint32ArrConfig.field.variable.promotedField = false;
-        uint32ArrConfig.field.variable.publishParameters.publishedVariable = ds2UInt32ArrId;
-        uint32ArrConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_NodeId f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16;
-        // add fields in reverse order, because all fields are added to the beginning of the list
-        UA_Server_addDataSetField(server, publishedDataSetId, &uint32ArrConfig, &f16);
-        UA_Server_addDataSetField(server, publishedDataSetId, &dateTimeConfig, &f15);
-        UA_Server_addDataSetField(server, publishedDataSetId, &guidConfig, &f14);
-        UA_Server_addDataSetField(server, publishedDataSetId, &byteStringConfig, &f13);
-        UA_Server_addDataSetField(server, publishedDataSetId, &stringConfig, &f12);
-        UA_Server_addDataSetField(server, publishedDataSetId, &doubleConfig, &f11);
-        UA_Server_addDataSetField(server, publishedDataSetId, &floatConfig, &f10);
-        UA_Server_addDataSetField(server, publishedDataSetId, &uint64Config, &f9);
-        UA_Server_addDataSetField(server, publishedDataSetId, &uint32Config, &f8);
-        UA_Server_addDataSetField(server, publishedDataSetId, &uint16Config, &f7);
-        UA_Server_addDataSetField(server, publishedDataSetId, &sbyteConfig, &f6);
-        UA_Server_addDataSetField(server, publishedDataSetId, &int64Config, &f5);
-        UA_Server_addDataSetField(server, publishedDataSetId, &int32Config, &f4);
-        UA_Server_addDataSetField(server, publishedDataSetId, &int16Config, &f3);
-        UA_Server_addDataSetField(server, publishedDataSetId, &byteConfig, &f2);
-        UA_Server_addDataSetField(server, publishedDataSetId, &boolToggleConfig, &f1);
-    }
-}
-
-void
-timerCallback(UA_Server *server, void *data) {
-    // DataSet 1
-    // BoolToggle
-    ds1BoolToggleCount++;
-    UA_Variant tmpVari;
-    if (ds1BoolToggleCount >= 3) {
-        if (ds1BoolToggleVal) {
-            ds1BoolToggleVal = false;
-        }
-        else {
-            ds1BoolToggleVal = true;
-        }
-
-        // neuen Wert schreiben
-        UA_Variant_init(&tmpVari);
-
-        UA_Variant_setScalar(&tmpVari, &ds1BoolToggleVal, &UA_TYPES[UA_TYPES_BOOLEAN]);
-        UA_Server_writeValue(server, ds1BoolToggleId, tmpVari);
-        //UA_Variant_clear(&tmpVari);
-        ds1BoolToggleCount = 0;
-    }
-
-    // Int32
-    UA_Variant_init(&tmpVari);
-    ds1Int32Val++;
-    if (ds1Int32Val > 10000) {
-        ds1Int32Val = 0;
-    }
-    UA_Variant_setScalar(&tmpVari, &ds1Int32Val, &UA_TYPES[UA_TYPES_INT32]);
-    UA_Server_writeValue(server, ds1Int32Id, tmpVari);
-    //UA_Variant_clear(&tmpVari);
-
-    // Int32Fast
-    UA_Variant_init(&tmpVari);
-    ds1Int32FastVal += 100;
-    if (ds1Int32FastVal > 10000) {
-        ds1Int32FastVal = 0;
-    }
-    UA_Variant_setScalar(&tmpVari, &ds1Int32FastVal, &UA_TYPES[UA_TYPES_INT32]);
-    UA_Server_writeValue(server, ds1Int32FastId, tmpVari);
-    //UA_Variant_clear(&tmpVari);
-
-    // DateTime
-    UA_Variant_init(&tmpVari);
-    UA_DateTime tmpTime = UA_DateTime_now();
-    UA_Variant_setScalar(&tmpVari, &tmpTime, &UA_TYPES[UA_TYPES_DATETIME]);
-    UA_Server_writeValue(server, ds1DateTimeId, tmpVari);
-
-    // DataSet 2
-    UA_Server_writeValue(server, ds2DateTimeId, tmpVari);
-    //UA_Variant_clear(&tmpVari);
-
-    // BoolToggle
-    if (ds2BoolToggleVal)
-    {
-        ds2BoolToggleVal = false;
-    }
-    else
-    {
-        ds2BoolToggleVal = true;
-    }
-
-    // neuen Wert schreiben 
-    UA_Variant_init(&tmpVari);
-
-    UA_Variant_setScalar(&tmpVari, &ds2BoolToggleVal, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    UA_Server_writeValue(server, ds2BoolToggleId, tmpVari);
-    //UA_Variant_clear(&tmpVari);
-
-    // Byte
-    UA_Variant_init(&tmpVari);
-    ds2ByteVal++;
-    UA_Variant_setScalar(&tmpVari, &ds2ByteVal, &UA_TYPES[UA_TYPES_BYTE]);
-    UA_Server_writeValue(server, ds2ByteId, tmpVari);
-    //UA_Variant_clear(&tmpVari);
-
-    // Int16
-    UA_Variant_init(&tmpVari);
-    ds2Int16Val++;
-    UA_Variant_setScalar(&tmpVari, &ds2Int16Val, &UA_TYPES[UA_TYPES_INT16]);
-    UA_Server_writeValue(server, ds2Int16Id, tmpVari);
-    //UA_Variant_clear(&tmpVari);
-
-    // Int32
-    UA_Variant_init(&tmpVari);
-    ds2Int32Val++;
-    UA_Variant_setScalar(&tmpVari, &ds2Int32Val, &UA_TYPES[UA_TYPES_INT32]);
-    UA_Server_writeValue(server, ds2Int32Id, tmpVari);
-    //UA_Variant_clear(&tmpVari);
-
-    // Int64
-    UA_Variant_init(&tmpVari);
-    ds2Int64Val++;
-    UA_Variant_setScalar(&tmpVari, &ds2Int64Val, &UA_TYPES[UA_TYPES_INT64]);
-    UA_Server_writeValue(server, ds2Int64Id, tmpVari);
-    //UA_Variant_clear(&tmpVari);
-
-    // SByte
-    UA_Variant_init(&tmpVari);
-    ds2SByteVal++;
-    UA_Variant_setScalar(&tmpVari, &ds2SByteVal, &UA_TYPES[UA_TYPES_SBYTE]);
-    UA_Server_writeValue(server, ds2SByteId, tmpVari);
-    //UA_Variant_clear(&tmpVari);
-
-    // UInt16
-    UA_Variant_init(&tmpVari);
-    ds2UInt16Val++;
-    UA_Variant_setScalar(&tmpVari, &ds2UInt16Val, &UA_TYPES[UA_TYPES_UINT16]);
-    UA_Server_writeValue(server, ds2UInt16Id, tmpVari);
-    //UA_Variant_clear(&tmpVari);
-
-    // UInt32
-    UA_Variant_init(&tmpVari);
-    ds2UInt32Val++;
-    UA_Variant_setScalar(&tmpVari, &ds2UInt32Val, &UA_TYPES[UA_TYPES_UINT32]);
-    UA_Server_writeValue(server, ds2UInt32Id, tmpVari);
-    //UA_Variant_clear(&tmpVari);
-
-    // UInt64
-    UA_Variant_init(&tmpVari);
-    ds2UInt64Val++;
-    UA_Variant_setScalar(&tmpVari, &ds2UInt64Val, &UA_TYPES[UA_TYPES_UINT64]);
-    UA_Server_writeValue(server, ds2UInt64Id, tmpVari);
-    //UA_Variant_clear(&tmpVari);
-
-    // Float
-    UA_Variant_init(&tmpVari);
-    ds2FloatVal++;
-    UA_Variant_setScalar(&tmpVari, &ds2FloatVal, &UA_TYPES[UA_TYPES_FLOAT]);
-    UA_Server_writeValue(server, ds2FloatId, tmpVari);
-    //UA_Variant_clear(&tmpVari);
-
-    // Double
-    UA_Variant_init(&tmpVari);
-    ds2DoubleVal++;
-    UA_Variant_setScalar(&tmpVari, &ds2DoubleVal, &UA_TYPES[UA_TYPES_DOUBLE]);
-    UA_Server_writeValue(server, ds2DoubleId, tmpVari);
-    //UA_Variant_clear(&tmpVari);
-
-    // String 
-    UA_Variant_init(&tmpVari);
-    ds2StringIndex++;
-    if (ds2StringIndex >= ds2StringArrayLen)
-    {
-        ds2StringIndex = 0;
-    }
-
-    UA_Variant_setScalar(&tmpVari, &ds2StringArray[ds2StringIndex], &UA_TYPES[UA_TYPES_STRING]);
-    UA_Server_writeValue(server, ds2StringId, tmpVari);
-    //UA_Variant_deleteMembers(&tmpVari);
-    //UA_Variant_clear(&tmpVari);
-
-    // ByteString 
-    UA_Variant_init(&tmpVari);
-    UA_ByteString bs;
-    UA_ByteString_init(&bs);
-    UA_ByteString_allocBuffer(&bs, 4);
-    UA_UInt32 ui2 = UA_UInt32_random();
-    memcpy(bs.data, &ui2, 4);
-
-    UA_Variant_setScalar(&tmpVari, &bs, &UA_TYPES[UA_TYPES_BYTESTRING]);
-    UA_Server_writeValue(server, ds2ByteStringId, tmpVari);
-    UA_ByteString_deleteMembers(&bs);
-    //UA_Variant_clear(&tmpVari);
-
-    // Guid 
-    UA_Variant_init(&tmpVari);
-    UA_Guid g = UA_Guid_random();
-    UA_Variant_setScalar(&tmpVari, &g, &UA_TYPES[UA_TYPES_GUID]);
-    UA_Server_writeValue(server, ds2GuidId, tmpVari);
-    //UA_Variant_clear(&tmpVari);
-
-    // UInt32Array
-    for (size_t i = 0; i < 10; i++)
-    {
-        ds2UInt32ArrValue[i]++;
-    }
-
-    UA_Variant_init(&tmpVari);
-    UA_Variant_setArray(&tmpVari, ds2UInt32ArrValue, 10, &UA_TYPES[UA_TYPES_UINT32]);
-    UA_Server_writeValue(server, ds2UInt32ArrId, tmpVari);
-    //UA_Variant_clear(&tmpVari);
-}
-
-UA_Boolean running = true;
-static void stopHandler(int sig) {
-    running = false;
-}
-
-static int run(UA_String *transportProfile,
-    UA_NetworkAddressUrlDataType *networkAddressUrl) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setMinimal(config, 4802, NULL);
-
-    /* Details about the connection configuration and handling are located in
-    * the pubsub connection tutorial */
-    config->pubsubTransportLayers =
-        (UA_PubSubTransportLayer *)UA_calloc(2, sizeof(UA_PubSubTransportLayer));
-    if (!config->pubsubTransportLayers) {
-        UA_Server_delete(server);
-        return EXIT_FAILURE;
-    }
-    config->pubsubTransportLayers[0] = UA_PubSubTransportLayerUDPMP();
-    config->pubsubTransportLayersSize++;
-#ifdef UA_ENABLE_PUBSUB_ETH_UADP
-    config->pubsubTransportLayers[1] = UA_PubSubTransportLayerEthernet();
-    config->pubsubTransportLayersSize++;
-#endif
-
-    addPubSubConnection(server, transportProfile, networkAddressUrl);
-    
-    /* Create a PublishedDataSet based on a PublishedDataSetConfig. */
-    UA_PublishedDataSetConfig publishedDataSetConfig;
-    publishedDataSetConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-    publishedDataSetConfig.name = UA_STRING("DataSet 1 (Simple)");
-
-    UA_NodeId publishedDataSetIdent;
-    UA_Server_addPublishedDataSet(server, &publishedDataSetConfig, &publishedDataSetIdent);
-
-    addPublisher1(server, publishedDataSetIdent);
-
-    /* Create a new WriterGroup and configure parameters like the publish interval. */
-    UA_WriterGroupConfig writerGroupConfig;
-    memset(&writerGroupConfig, 0, sizeof(UA_WriterGroupConfig));
-    writerGroupConfig.name = UA_STRING("DataSet WriterGroup");
-    writerGroupConfig.publishingInterval = 500;
-    writerGroupConfig.enabled = UA_FALSE;
-    writerGroupConfig.writerGroupId = 100;
-    writerGroupConfig.encodingMimeType = UA_PUBSUB_ENCODING_UADP;
-    writerGroupConfig.maxEncapsulatedDataSetMessageCount = 3;
-
-    /* Add the new WriterGroup to an existing Connection. */
-    UA_NodeId writerGroupIdent;
-    UA_Server_addWriterGroup(server, connectionIdent, &writerGroupConfig, &writerGroupIdent);
-
-    /* Create a new Writer and connect it with an existing PublishedDataSet */
-    // DataSetWriter ID 1 with Variant Encoding 
-    UA_DataSetWriterConfig dataSetWriterConfig;
-    memset(&dataSetWriterConfig, 0, sizeof(UA_DataSetWriterConfig));
-    dataSetWriterConfig.name = UA_STRING("DataSet 1 DataSetWriter");
-    dataSetWriterConfig.dataSetWriterId = 1;
-    //The creation of delta messages is configured in the following line. Value
-    // 0 -> no delta messages are created. 
-    dataSetWriterConfig.keyFrameCount = 10;
-
-    UA_NodeId writerIdentifier;
-    UA_Server_addDataSetWriter(server, writerGroupIdent, publishedDataSetIdent,
-        &dataSetWriterConfig, &writerIdentifier);
-
-    // Published DataSet 2
-    UA_PublishedDataSetConfig publishedDataSetConfig2;
-    publishedDataSetConfig2.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-    publishedDataSetConfig2.name = UA_STRING("DataSet 2 (AllTypes)");
-
-    UA_NodeId publishedDataSetIdent2;
-    UA_Server_addPublishedDataSet(server, &publishedDataSetConfig2, &publishedDataSetIdent2);
-
-    addPublisher2(server, publishedDataSetIdent2);
-
-    // DataSet Writer 2
-    // Create a new Writer and connect it with an existing PublishedDataSet
-    UA_DataSetWriterConfig dataSetWriterConfig2;
-
-    memset(&dataSetWriterConfig2, 0, sizeof(UA_DataSetWriterConfig));
-    dataSetWriterConfig2.name = UA_STRING("DataSet 2 DataSetWriter");
-    dataSetWriterConfig2.dataSetWriterId = 2;
-    //The creation of delta messages is configured in the following line. Value
-    // 0 -> no delta messages are created. 
-    dataSetWriterConfig2.keyFrameCount = 10;
-
-    UA_NodeId writerIdentifier2;
-    UA_Server_addDataSetWriter(server, writerGroupIdent, publishedDataSetIdent2,
-        &dataSetWriterConfig2, &writerIdentifier2);
-
-    UA_UInt64 timerCallbackId = 0;
-    UA_Server_addRepeatedCallback(server, (UA_ServerCallback)timerCallback, NULL, 1000, &timerCallbackId);
-
-    UA_StatusCode retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
-
-static void
-usage(char *progname) {
-    printf("usage: %s <uri> [device]\n", progname);
-}
-
-int main(int argc, char **argv) {
-    UA_String transportProfile =
-        UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-    UA_NetworkAddressUrlDataType networkAddressUrl =
-    { UA_STRING_NULL, UA_STRING("opc.udp://239.0.0.1:4840/") };
-
-    if (argc > 1) {
-        if (strcmp(argv[1], "-h") == 0) {
-            usage(argv[0]);
-            return EXIT_SUCCESS;
-        }
-        else if (strncmp(argv[1], "opc.udp://", 10) == 0) {
-            networkAddressUrl.url = UA_STRING(argv[1]);
-        }
-        else if (strncmp(argv[1], "opc.eth://", 10) == 0) {
-            transportProfile =
-                UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-eth-uadp");
-            if (argc < 3) {
-                printf("Error: UADP/ETH needs an interface name\n");
-                return EXIT_FAILURE;
-            }
-            networkAddressUrl.networkInterface = UA_STRING(argv[2]);
-            networkAddressUrl.url = UA_STRING(argv[1]);
-        }
-        else {
-            printf("Error: unknown URI\n");
-            return EXIT_FAILURE;
-        }
-    }
-
-    return run(&transportProfile, &networkAddressUrl);
-}
diff --git a/ext/open62541/examples/pubsub/tutorial_pubsub_connection.c b/ext/open62541/examples/pubsub/tutorial_pubsub_connection.c
deleted file mode 100644
index 9ad0347..0000000
--- a/ext/open62541/examples/pubsub/tutorial_pubsub_connection.c
+++ /dev/null
@@ -1,86 +0,0 @@
-
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/plugin/pubsub_udp.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-UA_Boolean running = true;
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-/**
- * The PubSub connection example demonstrate the PubSub TransportLayer configuration and
- * the dynamic creation of PubSub Connections on runtime.
- */
-int main(void) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    /* Add the PubSubTransportLayer implementation to the server config.
-     * The PubSubTransportLayer is a factory to create new connections
-     * on runtime. The UA_PubSubTransportLayer is used for all kinds of
-     * concrete connections e.g. UDP, MQTT, AMQP...
-     */
-    config->pubsubTransportLayers = (UA_PubSubTransportLayer *) UA_malloc(sizeof(UA_PubSubTransportLayer));
-    if(!config->pubsubTransportLayers) {
-        UA_Server_delete(server);
-        return -1;
-    }
-    /* It is possible to use multiple PubSubTransportLayers on runtime. The correct factory
-     * is selected on runtime by the standard defined PubSub TransportProfileUri's. */
-    config->pubsubTransportLayers[0] = UA_PubSubTransportLayerUDPMP();
-    config->pubsubTransportLayersSize++;
-
-    /* Create a new ConnectionConfig. The addPubSubConnection function takes the
-     * config and create a new connection. The Connection identifier is
-     * copied to the NodeId parameter.*/
-    UA_PubSubConnectionConfig connectionConfig;
-    memset(&connectionConfig, 0, sizeof(connectionConfig));
-    connectionConfig.name = UA_STRING("UDP-UADP Connection 1");
-    connectionConfig.transportProfileUri = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-    connectionConfig.enabled = UA_TRUE;
-    /* The address and interface is part of the standard
-     * defined UA_NetworkAddressUrlDataType. */
-    UA_NetworkAddressUrlDataType networkAddressUrl = {UA_STRING_NULL , UA_STRING("opc.udp://224.0.0.22:4840/")};
-    UA_Variant_setScalar(&connectionConfig.address, &networkAddressUrl, &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-    connectionConfig.publisherId.numeric = UA_UInt32_random();
-    /* Connection options are given as Key/Value Pairs. The available options are
-     * maybe standard or vendor defined. */
-    UA_KeyValuePair connectionOptions[3];
-    connectionOptions[0].key = UA_QUALIFIEDNAME(0, "ttl");
-    UA_UInt32 ttl = 10;
-    UA_Variant_setScalar(&connectionOptions[0].value, &ttl, &UA_TYPES[UA_TYPES_UINT32]);
-    connectionOptions[1].key = UA_QUALIFIEDNAME(0, "loopback");
-    UA_Boolean loopback = UA_FALSE;
-    UA_Variant_setScalar(&connectionOptions[1].value, &loopback, &UA_TYPES[UA_TYPES_UINT32]);
-    connectionOptions[2].key = UA_QUALIFIEDNAME(0, "reuse");
-    UA_Boolean reuse = UA_TRUE;
-    UA_Variant_setScalar(&connectionOptions[2].value, &reuse, &UA_TYPES[UA_TYPES_UINT32]);
-    connectionConfig.connectionProperties = connectionOptions;
-    connectionConfig.connectionPropertiesSize = 3;
-    /* Create a new concrete connection and add the connection
-     * to the current PubSub configuration. */
-    UA_NodeId connectionIdentifier;
-    UA_StatusCode retval = UA_Server_addPubSubConnection(server, &connectionConfig, &connectionIdentifier);
-    if(retval == UA_STATUSCODE_GOOD){
-        UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                    "The PubSub Connection was created successfully!");
-    }
-
-    retval |= UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/pubsub/tutorial_pubsub_publish.c b/ext/open62541/examples/pubsub/tutorial_pubsub_publish.c
deleted file mode 100644
index 6d08681..0000000
--- a/ext/open62541/examples/pubsub/tutorial_pubsub_publish.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-/**
- * .. _pubsub-tutorial:
- *
- * Working with Publish/Subscribe
- * ------------------------------
- *
- * Work in progress: This Tutorial will be continuously extended during the next
- * PubSub batches. More details about the PubSub extension and corresponding
- * open62541 API are located here: :ref:`pubsub`.
- *
- * Publishing Fields
- * ^^^^^^^^^^^^^^^^^
- * The PubSub publish example demonstrate the simplest way to publish
- * informations from the information model over UDP multicast using the UADP
- * encoding.
- *
- * **Connection handling**
- *
- * PubSubConnections can be created and deleted on runtime. More details about
- * the system preconfiguration and connection can be found in
- * ``tutorial_pubsub_connection.c``.
- */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/plugin/pubsub_ethernet.h>
-#include <open62541/plugin/pubsub_udp.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-
-UA_NodeId connectionIdent, publishedDataSetIdent, writerGroupIdent;
-
-static void
-addPubSubConnection(UA_Server *server, UA_String *transportProfile,
-                    UA_NetworkAddressUrlDataType *networkAddressUrl){
-    /* Details about the connection configuration and handling are located
-     * in the pubsub connection tutorial */
-    UA_PubSubConnectionConfig connectionConfig;
-    memset(&connectionConfig, 0, sizeof(connectionConfig));
-    connectionConfig.name = UA_STRING("UADP Connection 1");
-    connectionConfig.transportProfileUri = *transportProfile;
-    connectionConfig.enabled = UA_TRUE;
-    UA_Variant_setScalar(&connectionConfig.address, networkAddressUrl,
-                         &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-    /* Changed to static publisherId from random generation to identify
-     * the publisher on Subscriber side */
-    connectionConfig.publisherId.numeric = 2234;
-    UA_Server_addPubSubConnection(server, &connectionConfig, &connectionIdent);
-}
-
-/**
- * **PublishedDataSet handling**
- *
- * The PublishedDataSet (PDS) and PubSubConnection are the toplevel entities and
- * can exist alone. The PDS contains the collection of the published fields. All
- * other PubSub elements are directly or indirectly linked with the PDS or
- * connection. */
-static void
-addPublishedDataSet(UA_Server *server) {
-    /* The PublishedDataSetConfig contains all necessary public
-    * informations for the creation of a new PublishedDataSet */
-    UA_PublishedDataSetConfig publishedDataSetConfig;
-    memset(&publishedDataSetConfig, 0, sizeof(UA_PublishedDataSetConfig));
-    publishedDataSetConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-    publishedDataSetConfig.name = UA_STRING("Demo PDS");
-    /* Create new PublishedDataSet based on the PublishedDataSetConfig. */
-    UA_Server_addPublishedDataSet(server, &publishedDataSetConfig, &publishedDataSetIdent);
-}
-
-/**
- * **DataSetField handling**
- *
- * The DataSetField (DSF) is part of the PDS and describes exactly one published
- * field. */
-static void
-addDataSetField(UA_Server *server) {
-    /* Add a field to the previous created PublishedDataSet */
-    UA_NodeId dataSetFieldIdent;
-    UA_DataSetFieldConfig dataSetFieldConfig;
-    memset(&dataSetFieldConfig, 0, sizeof(UA_DataSetFieldConfig));
-    dataSetFieldConfig.dataSetFieldType = UA_PUBSUB_DATASETFIELD_VARIABLE;
-    dataSetFieldConfig.field.variable.fieldNameAlias = UA_STRING("Server localtime");
-    dataSetFieldConfig.field.variable.promotedField = UA_FALSE;
-    dataSetFieldConfig.field.variable.publishParameters.publishedVariable =
-    UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME);
-    dataSetFieldConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-    UA_Server_addDataSetField(server, publishedDataSetIdent,
-                              &dataSetFieldConfig, &dataSetFieldIdent);
-}
-
-/**
- * **WriterGroup handling**
- *
- * The WriterGroup (WG) is part of the connection and contains the primary
- * configuration parameters for the message creation. */
-static void
-addWriterGroup(UA_Server *server) {
-    /* Now we create a new WriterGroupConfig and add the group to the existing
-     * PubSubConnection. */
-    UA_WriterGroupConfig writerGroupConfig;
-    memset(&writerGroupConfig, 0, sizeof(UA_WriterGroupConfig));
-    writerGroupConfig.name = UA_STRING("Demo WriterGroup");
-    writerGroupConfig.publishingInterval = 100;
-    writerGroupConfig.enabled = UA_FALSE;
-    writerGroupConfig.writerGroupId = 100;
-    writerGroupConfig.encodingMimeType = UA_PUBSUB_ENCODING_UADP;
-    writerGroupConfig.messageSettings.encoding             = UA_EXTENSIONOBJECT_DECODED;
-    writerGroupConfig.messageSettings.content.decoded.type = &UA_TYPES[UA_TYPES_UADPWRITERGROUPMESSAGEDATATYPE];
-    /* The configuration flags for the messages are encapsulated inside the
-     * message- and transport settings extension objects. These extension
-     * objects are defined by the standard. e.g.
-     * UadpWriterGroupMessageDataType */
-    UA_UadpWriterGroupMessageDataType *writerGroupMessage  = UA_UadpWriterGroupMessageDataType_new();
-    /* Change message settings of writerGroup to send PublisherId,
-     * WriterGroupId in GroupHeader and DataSetWriterId in PayloadHeader
-     * of NetworkMessage */
-    writerGroupMessage->networkMessageContentMask          = (UA_UadpNetworkMessageContentMask)(UA_UADPNETWORKMESSAGECONTENTMASK_PUBLISHERID |
-                                                              (UA_UadpNetworkMessageContentMask)UA_UADPNETWORKMESSAGECONTENTMASK_GROUPHEADER |
-                                                              (UA_UadpNetworkMessageContentMask)UA_UADPNETWORKMESSAGECONTENTMASK_WRITERGROUPID |
-                                                              (UA_UadpNetworkMessageContentMask)UA_UADPNETWORKMESSAGECONTENTMASK_PAYLOADHEADER);
-    writerGroupConfig.messageSettings.content.decoded.data = writerGroupMessage;
-    UA_Server_addWriterGroup(server, connectionIdent, &writerGroupConfig, &writerGroupIdent);
-    UA_UadpWriterGroupMessageDataType_delete(writerGroupMessage);
-}
-
-/**
- * **DataSetWriter handling**
- *
- * A DataSetWriter (DSW) is the glue between the WG and the PDS. The DSW is
- * linked to exactly one PDS and contains additional informations for the
- * message generation. */
-static void
-addDataSetWriter(UA_Server *server) {
-    /* We need now a DataSetWriter within the WriterGroup. This means we must
-     * create a new DataSetWriterConfig and add call the addWriterGroup function. */
-    UA_NodeId dataSetWriterIdent;
-    UA_DataSetWriterConfig dataSetWriterConfig;
-    memset(&dataSetWriterConfig, 0, sizeof(UA_DataSetWriterConfig));
-    dataSetWriterConfig.name = UA_STRING("Demo DataSetWriter");
-    dataSetWriterConfig.dataSetWriterId = 62541;
-    dataSetWriterConfig.keyFrameCount = 10;
-    UA_Server_addDataSetWriter(server, writerGroupIdent, publishedDataSetIdent,
-                               &dataSetWriterConfig, &dataSetWriterIdent);
-}
-
-/**
- * That's it! You're now publishing the selected fields. Open a packet
- * inspection tool of trust e.g. wireshark and take a look on the outgoing
- * packages. The following graphic figures out the packages created by this
- * tutorial.
- *
- * .. figure:: ua-wireshark-pubsub.png
- *     :figwidth: 100 %
- *     :alt: OPC UA PubSub communication in wireshark
- *
- * The open62541 subscriber API will be released later. If you want to process
- * the the datagrams, take a look on the ua_network_pubsub_networkmessage.c
- * which already contains the decoding code for UADP messages.
- *
- * It follows the main server code, making use of the above definitions. */
-UA_Boolean running = true;
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-static int run(UA_String *transportProfile,
-               UA_NetworkAddressUrlDataType *networkAddressUrl) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    /* Details about the connection configuration and handling are located in
-     * the pubsub connection tutorial */
-    config->pubsubTransportLayers =
-        (UA_PubSubTransportLayer *) UA_calloc(2, sizeof(UA_PubSubTransportLayer));
-    if(!config->pubsubTransportLayers) {
-        UA_Server_delete(server);
-        return EXIT_FAILURE;
-    }
-    config->pubsubTransportLayers[0] = UA_PubSubTransportLayerUDPMP();
-    config->pubsubTransportLayersSize++;
-#ifdef UA_ENABLE_PUBSUB_ETH_UADP
-    config->pubsubTransportLayers[1] = UA_PubSubTransportLayerEthernet();
-    config->pubsubTransportLayersSize++;
-#endif
-
-    addPubSubConnection(server, transportProfile, networkAddressUrl);
-    addPublishedDataSet(server);
-    addDataSetField(server);
-    addWriterGroup(server);
-    addDataSetWriter(server);
-
-    UA_StatusCode retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
-
-static void
-usage(char *progname) {
-    printf("usage: %s <uri> [device]\n", progname);
-}
-
-int main(int argc, char **argv) {
-    UA_String transportProfile =
-        UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-    UA_NetworkAddressUrlDataType networkAddressUrl =
-        {UA_STRING_NULL , UA_STRING("opc.udp://224.0.0.22:4840/")};
-
-    if (argc > 1) {
-        if (strcmp(argv[1], "-h") == 0) {
-            usage(argv[0]);
-            return EXIT_SUCCESS;
-        } else if (strncmp(argv[1], "opc.udp://", 10) == 0) {
-            networkAddressUrl.url = UA_STRING(argv[1]);
-        } else if (strncmp(argv[1], "opc.eth://", 10) == 0) {
-            transportProfile =
-                UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-eth-uadp");
-            if (argc < 3) {
-                printf("Error: UADP/ETH needs an interface name\n");
-                return EXIT_FAILURE;
-            }
-            networkAddressUrl.networkInterface = UA_STRING(argv[2]);
-            networkAddressUrl.url = UA_STRING(argv[1]);
-        } else {
-            printf("Error: unknown URI\n");
-            return EXIT_FAILURE;
-        }
-    }
-
-    return run(&transportProfile, &networkAddressUrl);
-}
diff --git a/ext/open62541/examples/pubsub/tutorial_pubsub_subscribe.c b/ext/open62541/examples/pubsub/tutorial_pubsub_subscribe.c
deleted file mode 100644
index c3821d1..0000000
--- a/ext/open62541/examples/pubsub/tutorial_pubsub_subscribe.c
+++ /dev/null
@@ -1,286 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- * Copyright (c) 2019 Kalycito Infotech Private Limited
- */
-
-/**
- * IMPORTANT ANNOUNCEMENT
- * The PubSub Subscriber API is currently not finished. This example can be used
- * to receive and display values that are published by tutorial_pubsub_publish
- * example in the TargetVariables of Subscriber Information Model .
- */
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/plugin/pubsub_udp.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-#include <open62541/types_generated.h>
-
-#include "ua_pubsub.h"
-
-#ifdef UA_ENABLE_PUBSUB_ETH_UADP
-#include <open62541/plugin/pubsub_ethernet.h>
-#endif
-
-#include <stdio.h>
-#include <signal.h>
-#include <stdlib.h>
-
-UA_NodeId connectionIdentifier;
-UA_NodeId readerGroupIdentifier;
-UA_NodeId readerIdentifier;
-
-UA_DataSetReaderConfig readerConfig;
-
-static void fillTestDataSetMetaData(UA_DataSetMetaDataType *pMetaData);
-
-/* Add new connection to the server */
-static UA_StatusCode
-addPubSubConnection(UA_Server *server, UA_String *transportProfile,
-                    UA_NetworkAddressUrlDataType *networkAddressUrl) {
-    if((server == NULL) || (transportProfile == NULL) ||
-        (networkAddressUrl == NULL)) {
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    /* Configuration creation for the connection */
-    UA_PubSubConnectionConfig connectionConfig;
-    memset (&connectionConfig, 0, sizeof(UA_PubSubConnectionConfig));
-    connectionConfig.name = UA_STRING("UDPMC Connection 1");
-    connectionConfig.transportProfileUri = *transportProfile;
-    connectionConfig.enabled = UA_TRUE;
-    UA_Variant_setScalar(&connectionConfig.address, networkAddressUrl,
-                         &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-    connectionConfig.publisherId.numeric = UA_UInt32_random ();
-    retval |= UA_Server_addPubSubConnection (server, &connectionConfig, &connectionIdentifier);
-    if (retval != UA_STATUSCODE_GOOD) {
-        return retval;
-    }
-    retval |= UA_PubSubConnection_regist(server, &connectionIdentifier);
-    return retval;
-}
-
-/* Add ReaderGroup to the created connection */
-static UA_StatusCode
-addReaderGroup(UA_Server *server) {
-    if(server == NULL) {
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    UA_ReaderGroupConfig readerGroupConfig;
-    memset (&readerGroupConfig, 0, sizeof(UA_ReaderGroupConfig));
-    readerGroupConfig.name = UA_STRING("ReaderGroup1");
-    retval |= UA_Server_addReaderGroup(server, connectionIdentifier, &readerGroupConfig,
-                                       &readerGroupIdentifier);
-    return retval;
-}
-
-/* Add DataSetReader to the ReaderGroup */
-static UA_StatusCode
-addDataSetReader(UA_Server *server) {
-    if(server == NULL) {
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    memset (&readerConfig, 0, sizeof(UA_DataSetReaderConfig));
-    readerConfig.name = UA_STRING("DataSet Reader 1");
-    /* Parameters to filter which DataSetMessage has to be processed
-     * by the DataSetReader */
-    /* The following parameters are used to show that the data published by
-     * tutorial_pubsub_publish.c is being subscribed and is being updated in
-     * the information model */
-    UA_UInt16 publisherIdentifier = 2234;
-    readerConfig.publisherId.type = &UA_TYPES[UA_TYPES_UINT16];
-    readerConfig.publisherId.data = &publisherIdentifier;
-    readerConfig.writerGroupId    = 100;
-    readerConfig.dataSetWriterId  = 62541;
-
-    /* Setting up Meta data configuration in DataSetReader */
-    fillTestDataSetMetaData(&readerConfig.dataSetMetaData);
-    retval |= UA_Server_addDataSetReader(server, readerGroupIdentifier, &readerConfig,
-                                         &readerIdentifier);
-    return retval;
-}
-
-/* Set SubscribedDataSet type to TargetVariables data type
- * Add subscribedvariables to the DataSetReader */
-static UA_StatusCode
-addSubscribedVariables (UA_Server *server, UA_NodeId dataSetReaderId) {
-    if(server == NULL) {
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    UA_NodeId folderId;
-    UA_String folderName = readerConfig.dataSetMetaData.name;
-    UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-    UA_QualifiedName folderBrowseName;
-    if(folderName.length > 0) {
-        oAttr.displayName.locale = UA_STRING ("en-US");
-        oAttr.displayName.text = folderName;
-        folderBrowseName.namespaceIndex = 1;
-        folderBrowseName.name = folderName;
-    }
-    else {
-        oAttr.displayName = UA_LOCALIZEDTEXT ("en-US", "Subscribed Variables");
-        folderBrowseName = UA_QUALIFIEDNAME (1, "Subscribed Variables");
-    }
-
-    UA_Server_addObjectNode (server, UA_NODEID_NULL,
-                             UA_NODEID_NUMERIC (0, UA_NS0ID_OBJECTSFOLDER),
-                             UA_NODEID_NUMERIC (0, UA_NS0ID_ORGANIZES),
-                             folderBrowseName, UA_NODEID_NUMERIC (0,
-                             UA_NS0ID_BASEOBJECTTYPE), oAttr, NULL, &folderId);
-
-    retval |= UA_Server_DataSetReader_addTargetVariables (server, &folderId,
-                                                          dataSetReaderId,
-                                                          UA_PUBSUB_SDS_TARGET);
-    UA_free(readerConfig.dataSetMetaData.fields);
-    return retval;
-}
-
-/* Define MetaData for TargetVariables */
-static void fillTestDataSetMetaData(UA_DataSetMetaDataType *pMetaData) {
-    if(pMetaData == NULL) {
-        return;
-    }
-
-    UA_DataSetMetaDataType_init (pMetaData);
-    pMetaData->name = UA_STRING ("DataSet 1");
-
-    /* Static definition of number of fields size to 4 to create four different
-     * targetVariables of distinct datatype
-     * Currently the publisher sends only DateTime data type */
-    pMetaData->fieldsSize = 4;
-    pMetaData->fields = (UA_FieldMetaData*)UA_Array_new (pMetaData->fieldsSize,
-                         &UA_TYPES[UA_TYPES_FIELDMETADATA]);
-
-    /* DateTime DataType */
-    UA_FieldMetaData_init (&pMetaData->fields[0]);
-    UA_NodeId_copy (&UA_TYPES[UA_TYPES_DATETIME].typeId,
-                    &pMetaData->fields[0].dataType);
-    pMetaData->fields[0].builtInType = UA_NS0ID_DATETIME;
-    pMetaData->fields[0].name =  UA_STRING ("DateTime");
-    pMetaData->fields[0].valueRank = -1; /* scalar */
-
-    /* Int32 DataType */
-    UA_FieldMetaData_init (&pMetaData->fields[1]);
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_INT32].typeId,
-                   &pMetaData->fields[1].dataType);
-    pMetaData->fields[1].builtInType = UA_NS0ID_INT32;
-    pMetaData->fields[1].name =  UA_STRING ("Int32");
-    pMetaData->fields[1].valueRank = -1; /* scalar */
-
-    /* Int64 DataType */
-    UA_FieldMetaData_init (&pMetaData->fields[2]);
-    UA_NodeId_copy(&UA_TYPES[UA_TYPES_INT64].typeId,
-                   &pMetaData->fields[2].dataType);
-    pMetaData->fields[2].builtInType = UA_NS0ID_INT64;
-    pMetaData->fields[2].name =  UA_STRING ("Int64");
-    pMetaData->fields[2].valueRank = -1; /* scalar */
-
-    /* Boolean DataType */
-    UA_FieldMetaData_init (&pMetaData->fields[3]);
-    UA_NodeId_copy (&UA_TYPES[UA_TYPES_BOOLEAN].typeId,
-                    &pMetaData->fields[3].dataType);
-    pMetaData->fields[3].builtInType = UA_NS0ID_BOOLEAN;
-    pMetaData->fields[3].name =  UA_STRING ("BoolToggle");
-    pMetaData->fields[3].valueRank = -1; /* scalar */
-}
-
-UA_Boolean running = true;
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-static int
-run(UA_String *transportProfile, UA_NetworkAddressUrlDataType *networkAddressUrl) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-    /* Return value initialized to Status Good */
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setMinimal(config, 4801, NULL);
-
-    /* Add the PubSub network layer implementation to the server config.
-     * The TransportLayer is acting as factory to create new connections
-     * on runtime. Details about the PubSubTransportLayer can be found inside the
-     * tutorial_pubsub_connection */
-    config->pubsubTransportLayers = (UA_PubSubTransportLayer *)
-        UA_calloc(2, sizeof(UA_PubSubTransportLayer));
-    if(!config->pubsubTransportLayers) {
-        UA_Server_delete(server);
-        return EXIT_FAILURE;
-    }
-
-    config->pubsubTransportLayers[0] = UA_PubSubTransportLayerUDPMP();
-    config->pubsubTransportLayersSize++;
-#ifdef UA_ENABLE_PUBSUB_ETH_UADP
-    config->pubsubTransportLayers[1] = UA_PubSubTransportLayerEthernet();
-    config->pubsubTransportLayersSize++;
-#endif
-
-    /* API calls */
-    /* Add PubSubConnection */
-    retval |= addPubSubConnection(server, transportProfile, networkAddressUrl);
-    if (retval != UA_STATUSCODE_GOOD)
-        return EXIT_FAILURE;
-
-    /* Add ReaderGroup to the created PubSubConnection */
-    retval |= addReaderGroup(server);
-    if (retval != UA_STATUSCODE_GOOD)
-        return EXIT_FAILURE;
-
-    /* Add DataSetReader to the created ReaderGroup */
-    retval |= addDataSetReader(server);
-    if (retval != UA_STATUSCODE_GOOD)
-        return EXIT_FAILURE;
-
-    /* Add SubscribedVariables to the created DataSetReader */
-    retval |= addSubscribedVariables(server, readerIdentifier);
-    if (retval != UA_STATUSCODE_GOOD)
-        return EXIT_FAILURE;
-
-    retval = UA_Server_run(server, &running);
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
-
-static void
-usage(char *progname) {
-    printf("usage: %s <uri> [device]\n", progname);
-}
-
-int main(int argc, char **argv) {
-    UA_String transportProfile = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-    UA_NetworkAddressUrlDataType networkAddressUrl = {UA_STRING_NULL , UA_STRING("opc.udp://224.0.0.22:4840/")};
-    if(argc > 1) {
-        if(strcmp(argv[1], "-h") == 0) {
-            usage(argv[0]);
-            return EXIT_SUCCESS;
-        } else if(strncmp(argv[1], "opc.udp://", 10) == 0) {
-            networkAddressUrl.url = UA_STRING(argv[1]);
-        } else if(strncmp(argv[1], "opc.eth://", 10) == 0) {
-            transportProfile =
-                UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-eth-uadp");
-            if(argc < 3) {
-                printf("Error: UADP/ETH needs an interface name\n");
-                return EXIT_FAILURE;
-            }
-
-            networkAddressUrl.networkInterface = UA_STRING(argv[2]);
-            networkAddressUrl.url = UA_STRING(argv[1]);
-        } else {
-            printf ("Error: unknown URI\n");
-            return EXIT_FAILURE;
-        }
-    }
-
-    return run(&transportProfile, &networkAddressUrl);
-}
-
diff --git a/ext/open62541/examples/pubsub_realtime/README.md b/ext/open62541/examples/pubsub_realtime/README.md
deleted file mode 100644
index 0f1ca65..0000000
--- a/ext/open62541/examples/pubsub_realtime/README.md
+++ /dev/null
@@ -1,82 +0,0 @@
-# open62541 Realtime OPC UA PubSub Publisher
-
-This example is a self-contained PubSub publisher over raw Ethernet. It
-showcases the realtime-capabilities of OPC UA PubSub. The core idea is that the
-publisher callback can be triggered from a time-triggered system interrupt and
-sends out the PubSub message within the interrupt.
-
-The publisher retrieves its configuration and the payload data from the
-information model of an OPC UA server. (It could also be run in a standalone
-mode without an OPC UA server.) Since the publisher interrupt preempts the
-execution of the normal OPC UA server, the information model needs to be
-consistent at every time (reentrant). The specific techniques used to make the
-OPC UA server reentrant are described in this publication:
-
-```
-@inproceedings{pfrommer2018open,
-  title={Open source OPC UA PubSub over TSN for realtime industrial communication},
-  author={Pfrommer, Julius and Ebner, Andreas and Ravikumar, Siddharth and Karunakaran, Bhagath},
-  booktitle={2018 IEEE 23rd International Conference on Emerging Technologies and Factory Automation (ETFA)},
-  pages={1087--1090},
-  year={2018},
-  organization={IEEE}
-}
-```
-
-Please cite if you use this work.
-
-OPC UA PubSub for open62541 is funded by an industry consortium in the context
-of an OSADL project (Open Source Automation Development Lab). Technical
-development is conducted by Fraunhofer IOSB and Kalycito Infotech.
-
-https://www.osadl.org/OPC-UA-TSN.opcua-tsn.0.html
-
-## Realtime communication with Time-Sensitive Networking (TSN)
-
-OPC UA PubSub can be used together with TSN for hard-realtime Ethernet-based
-communication. Vendor-specific APIs are commonly used for TSN capabilities. This
-example only uses the standard Linux API for raw Ethernet. Vendor-specific
-examples may be added at a later time.
-
-## Building the RT Publisher
-
-The main open62541 library needs to be built with the following build options
-enabled for the realtime PubSub example. Note that some of the other examples
-supplied with open62541 will not link against the library with these build
-options. For good timings, ensure that the `CMAKE_BUILD_TYPE` is set to
-`Release`.
-
-- UA_ENABLE_PUBSUB
-- UA_ENABLE_PUBSUB_ETH_UADP
-- UA_ENABLE_PUBSUB_CUSTOM_PUBLISH_HANDLING
-- UA_ENABLE_MALLOC_SINGLETON
-- UA_ENABLE_IMMUTABLE_NODES
-
-The publisher contains some hard-coded values that need to be adjusted to
-specific systems. Please check the top definitions in
-`pubsub_interrupt_publish.c` and `start_rt_publish.sh`.
-
-The publisher code is built and linked against the main open62541 library as follows:
-
-`gcc -O2 ../examples/pubsub_realtime/pubsub_interrupt_publish.c ../examples/pubsub_realtime/bufmalloc.c -I../include -I../plugins/include -Isrc_generated -I../arch/posix -I../arch -I../plugins/networking bin/libopen62541.a -lrt -o rt_publisher`
-
-## Running the RT Publisher
-
-The publisher must be run as root for direct access to the Ethernet interface.
-
-`# ./rt_publisher`
-
-The example contains a script to be used with RT-Preempt Linux kernel. The
-following command starts the publisher, locks the process to a specific CPU, and
-sets the scheduling policy.
-
-`# start_rt_publish.sh ./rt_publisher`
-
-The measurements are written to a file (publisher_measurement.csv) with the
-following fields for every publish callback:
-
-- Counter
-- Publication Interval
-- Nominal time for the current publish
-- Start delay from the nominal time
-- Duration of the publish callback
diff --git a/ext/open62541/examples/pubsub_realtime/bufmalloc.c b/ext/open62541/examples/pubsub_realtime/bufmalloc.c
deleted file mode 100644
index 015b6e7..0000000
--- a/ext/open62541/examples/pubsub_realtime/bufmalloc.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- */
-
-#include "bufmalloc.h"
-
-#define MALLOCMEMBUFSIZE 16384
-
-/* Every element has the memory layout [length (size_t) | buf (length * sizeof(char)) ... ].
- * The pointer to buf is returned. */
-static char membuf[MALLOCMEMBUFSIZE];
-static size_t pos;
-
-static void * membufMalloc(size_t size) {
-    if(pos + size + sizeof(size_t) > MALLOCMEMBUFSIZE)
-        return NULL;
-    char *begin = &membuf[pos];
-    *((size_t*)begin) = size;
-    pos += size + sizeof(size_t);
-    return &begin[sizeof(size_t)];
-}
-
-static void membufFree(void *ptr) {
-    /* Don't do anyting */
-}
-
-static void * membufCalloc(size_t nelem, size_t elsize) {
-    size_t total = nelem * elsize;
-    void *mem = membufMalloc(total);
-    if(!mem)
-        return NULL;
-    memset(mem, 0, total);
-    return mem;
-}
-
-static void * (membufRealloc)(void *ptr, size_t size) {
-    size_t orig_size = ((size_t*)ptr)[-1];
-    if(size <= orig_size)
-        return ptr;
-    void *mem = membufMalloc(size);
-    if(!mem)
-        return NULL;
-    memcpy(mem, ptr, orig_size);
-    return mem;
-}
-
-void resetMembuf(void) {
-    pos = 0;
-}
-
-void useMembufAlloc(void) {
-    pos = 0;
-    UA_globalMalloc = membufMalloc;
-    UA_globalFree = membufFree;
-    UA_globalCalloc = membufCalloc;
-    UA_globalRealloc = membufRealloc;
-}
-
-void useNormalAlloc(void) {
-    UA_globalMalloc = malloc;
-    UA_globalFree = free;
-    UA_globalCalloc = calloc;
-    UA_globalRealloc = realloc;
-}
diff --git a/ext/open62541/examples/pubsub_realtime/bufmalloc.h b/ext/open62541/examples/pubsub_realtime/bufmalloc.h
deleted file mode 100644
index 4ea905a..0000000
--- a/ext/open62541/examples/pubsub_realtime/bufmalloc.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- */
-
-#include <open62541/config.h>
-
-void resetMembuf(void);
-void useMembufAlloc(void);
-void useNormalAlloc(void);
diff --git a/ext/open62541/examples/pubsub_realtime/etfa18-pfrommer-tsn-pubsub.pdf b/ext/open62541/examples/pubsub_realtime/etfa18-pfrommer-tsn-pubsub.pdf
deleted file mode 100644
index 26b434e..0000000
--- a/ext/open62541/examples/pubsub_realtime/etfa18-pfrommer-tsn-pubsub.pdf
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/examples/pubsub_realtime/pubsub_interrupt_publish.c b/ext/open62541/examples/pubsub_realtime/pubsub_interrupt_publish.c
deleted file mode 100644
index 4275f93..0000000
--- a/ext/open62541/examples/pubsub_realtime/pubsub_interrupt_publish.c
+++ /dev/null
@@ -1,328 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2018-2019 (c) Kalycito Infotech
- *    Copyright 2019 (c) Fraunhofer IOSB (Author: Andreas Ebner)
- *    Copyright 2019 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- */
-
-#include <signal.h>
-#include <stdio.h>
-#include <time.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/plugin/pubsub_ethernet.h>
-#include "bufmalloc.h"
-
-#define ETH_PUBLISH_ADDRESS      "opc.eth://0a-00-27-00-00-08"
-#define ETH_INTERFACE            "enp0s8"
-#define MAX_MEASUREMENTS         10000
-#define MILLI_AS_NANO_SECONDS    (1000 * 1000)
-#define SECONDS_AS_NANO_SECONDS  (1000 * 1000 * 1000)
-#define CLOCKID                  CLOCK_MONOTONIC_RAW
-#define SIG                      SIGUSR1
-#define PUB_INTERVAL             0.25 /* Publish interval in milliseconds */
-#define DATA_SET_WRITER_ID       62541
-#define MEASUREMENT_OUTPUT       "publisher_measurement.csv"
-
-UA_NodeId counterNodePublisher = {1, UA_NODEIDTYPE_NUMERIC, {1234}};
-UA_Int64 pubIntervalNs;
-UA_ServerCallback pubCallback = NULL;
-UA_Server *pubServer;
-UA_Boolean running = true;
-void *pubData;
-timer_t pubEventTimer;
-struct sigevent pubEvent;
-struct sigaction signalAction;
-
-/* Arrays to store measurement data */
-UA_Int32 currentPublishCycleTime[MAX_MEASUREMENTS+1];
-struct timespec calculatedCycleStartTime[MAX_MEASUREMENTS+1];
-struct timespec cycleStartDelay[MAX_MEASUREMENTS+1];
-struct timespec cycleDuration[MAX_MEASUREMENTS+1];
-size_t publisherMeasurementsCounter  = 0;
-
-static void
-timespec_diff(struct timespec *start, struct timespec *stop,
-              struct timespec *result) {
-    if((stop->tv_nsec - start->tv_nsec) < 0) {
-        result->tv_sec = stop->tv_sec - start->tv_sec - 1;
-        result->tv_nsec = stop->tv_nsec - start->tv_nsec + 1000000000;
-    } else {
-        result->tv_sec = stop->tv_sec - start->tv_sec;
-        result->tv_nsec = stop->tv_nsec - start->tv_nsec;
-    }
-}
-
-/* Used to adjust the nanosecond > 1s field value */
-static void
-nanoSecondFieldConversion(struct timespec *timeSpecValue) {
-    while(timeSpecValue->tv_nsec > (SECONDS_AS_NANO_SECONDS - 1)) {
-        timeSpecValue->tv_sec += 1;
-        timeSpecValue->tv_nsec -= SECONDS_AS_NANO_SECONDS;
-    }
-}
-
-/* Signal handler */
-static void
-publishInterrupt(int sig, siginfo_t* si, void* uc) {
-    if(si->si_value.sival_ptr != &pubEventTimer) {
-        UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "stray signal");
-        return;
-    }
-
-    /* Execute the publish callback in the interrupt */
-    struct timespec begin, end;
-    clock_gettime(CLOCKID, &begin);
-    useMembufAlloc();
-    pubCallback(pubServer, pubData);
-    useNormalAlloc();
-    clock_gettime(CLOCKID, &end);
-
-    if(publisherMeasurementsCounter >= MAX_MEASUREMENTS)
-        return;
-
-    /* Save current configured publish interval */
-    currentPublishCycleTime[publisherMeasurementsCounter] = pubIntervalNs;
-
-    /* Save the difference to the calculated time */
-    timespec_diff(&calculatedCycleStartTime[publisherMeasurementsCounter],
-                  &begin, &cycleStartDelay[publisherMeasurementsCounter]);
-
-    /* Save the duration of the publish callback */
-    timespec_diff(&begin, &end, &cycleDuration[publisherMeasurementsCounter]);
-
-    publisherMeasurementsCounter++;
-
-    /* Save the calculated starting time for the next cycle */
-    calculatedCycleStartTime[publisherMeasurementsCounter].tv_nsec =
-        calculatedCycleStartTime[publisherMeasurementsCounter - 1].tv_nsec + pubIntervalNs;
-    calculatedCycleStartTime[publisherMeasurementsCounter].tv_sec =
-        calculatedCycleStartTime[publisherMeasurementsCounter - 1].tv_sec;
-    nanoSecondFieldConversion(&calculatedCycleStartTime[publisherMeasurementsCounter]);
-
-    /* Write the pubsub measurement data */
-    if(publisherMeasurementsCounter == MAX_MEASUREMENTS) {
-        UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                    "Logging the measurements to %s", MEASUREMENT_OUTPUT);
-
-        FILE *fpPublisher = fopen(MEASUREMENT_OUTPUT, "w");
-        for(UA_UInt32 i = 0; i < publisherMeasurementsCounter; i++) {
-            fprintf(fpPublisher, "%u, %u, %ld.%09ld, %ld.%09ld, %ld.%09ld\n",
-                    i,
-                    currentPublishCycleTime[i],
-                    calculatedCycleStartTime[i].tv_sec,
-                    calculatedCycleStartTime[i].tv_nsec,
-                    cycleStartDelay[i].tv_sec,
-                    cycleStartDelay[i].tv_nsec,
-                    cycleDuration[i].tv_sec,
-                    cycleDuration[i].tv_nsec);
-        }
-        fclose(fpPublisher);
-    }
-}
-
-/* The following three methods are originally defined in
- * /src/pubsub/ua_pubsub_manager.c. We provide a custom implementation here to
- * use system interrupts instead if time-triggered callbacks in the OPC UA
- * server control flow. */
-
-UA_StatusCode
-UA_PubSubManager_addRepeatedCallback(UA_Server *server,
-                                     UA_ServerCallback callback,
-                                     void *data, UA_Double interval_ms,
-                                     UA_UInt64 *callbackId) {
-    if(pubCallback) {
-        UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                       "At most one publisher can be registered for interrupt callbacks");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                "Adding a publisher with a cycle time of %lf milliseconds", interval_ms);
-
-    /* Set global values for the publish callback */
-    int resultTimerCreate = 0;
-    pubServer = server;
-    pubCallback = callback;
-    pubData = data;
-    pubIntervalNs = (UA_Int64) (interval_ms * MILLI_AS_NANO_SECONDS);
-
-    /* Handle the signal */
-    memset(&signalAction, 0, sizeof(signalAction));
-    signalAction.sa_flags = SA_SIGINFO;
-    signalAction.sa_sigaction = publishInterrupt;
-    sigemptyset(&signalAction.sa_mask);
-    sigaction(SIG, &signalAction, NULL);
-
-    /* Create the timer */
-    memset(&pubEventTimer, 0, sizeof(pubEventTimer));
-    pubEvent.sigev_notify = SIGEV_SIGNAL;
-    pubEvent.sigev_signo = SIG;
-    pubEvent.sigev_value.sival_ptr = &pubEventTimer;
-    resultTimerCreate = timer_create(CLOCKID, &pubEvent, &pubEventTimer);
-    if(resultTimerCreate != 0) {
-        UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                       "Failed to create a system event");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    /* Arm the timer */
-    struct itimerspec timerspec;
-    timerspec.it_interval.tv_sec = (long int) (pubIntervalNs / (SECONDS_AS_NANO_SECONDS));
-    timerspec.it_interval.tv_nsec = (long int) (pubIntervalNs % SECONDS_AS_NANO_SECONDS);
-    timerspec.it_value.tv_sec = (long int) (pubIntervalNs / (SECONDS_AS_NANO_SECONDS));
-    timerspec.it_value.tv_nsec = (long int) (pubIntervalNs % SECONDS_AS_NANO_SECONDS);
-    resultTimerCreate = timer_settime(pubEventTimer, 0, &timerspec, NULL);
-    if(resultTimerCreate != 0) {
-        UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                       "Failed to arm the system timer");
-        timer_delete(pubEventTimer);
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    /* Start taking measurements */
-    publisherMeasurementsCounter = 0;
-    clock_gettime(CLOCKID, &calculatedCycleStartTime[0]);
-    calculatedCycleStartTime[0].tv_nsec += pubIntervalNs;
-    nanoSecondFieldConversion(&calculatedCycleStartTime[0]);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_PubSubManager_changeRepeatedCallbackInterval(UA_Server *server,
-                                                UA_UInt64 callbackId,
-                                                UA_Double interval_ms) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                "Switching the publisher cycle to %lf milliseconds", interval_ms);
-
-    struct itimerspec timerspec;
-    int resultTimerCreate = 0;
-    pubIntervalNs = (UA_Int64) (interval_ms * MILLI_AS_NANO_SECONDS);
-    timerspec.it_interval.tv_sec = (long int) (pubIntervalNs % SECONDS_AS_NANO_SECONDS);
-    timerspec.it_interval.tv_nsec = (long int) (pubIntervalNs % SECONDS_AS_NANO_SECONDS);
-    timerspec.it_value.tv_sec = (long int) (pubIntervalNs / (SECONDS_AS_NANO_SECONDS));
-    timerspec.it_value.tv_nsec = (long int) (pubIntervalNs % SECONDS_AS_NANO_SECONDS);
-    resultTimerCreate = timer_settime(pubEventTimer, 0, &timerspec, NULL);
-    if(resultTimerCreate != 0) {
-        UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                       "Failed to arm the system timer");
-        timer_delete(pubEventTimer);
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    clock_gettime(CLOCKID, &calculatedCycleStartTime[publisherMeasurementsCounter]);
-    calculatedCycleStartTime[publisherMeasurementsCounter].tv_nsec += pubIntervalNs;
-    nanoSecondFieldConversion(&calculatedCycleStartTime[publisherMeasurementsCounter]);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-void
-UA_PubSubManager_removeRepeatedPubSubCallback(UA_Server *server, UA_UInt64 callbackId) {
-    timer_delete(pubEventTimer);
-    pubCallback = NULL; /* So that a new callback can be registered */
-}
-
-static void
-addPubSubConfiguration(UA_Server* server) {
-    UA_NodeId connectionIdent;
-    UA_NodeId publishedDataSetIdent;
-    UA_NodeId writerGroupIdent;
-
-    UA_PubSubConnectionConfig connectionConfig;
-    memset(&connectionConfig, 0, sizeof(connectionConfig));
-    connectionConfig.name = UA_STRING("UDP-UADP Connection 1");
-    connectionConfig.transportProfileUri =
-        UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-eth-uadp");
-    connectionConfig.enabled = true;
-    UA_NetworkAddressUrlDataType networkAddressUrl =
-        {UA_STRING(ETH_INTERFACE), UA_STRING(ETH_PUBLISH_ADDRESS)};
-    UA_Variant_setScalar(&connectionConfig.address, &networkAddressUrl,
-                         &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-    connectionConfig.publisherId.numeric = UA_UInt32_random();
-    UA_Server_addPubSubConnection(server, &connectionConfig, &connectionIdent);
-
-    UA_PublishedDataSetConfig publishedDataSetConfig;
-    memset(&publishedDataSetConfig, 0, sizeof(UA_PublishedDataSetConfig));
-    publishedDataSetConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-    publishedDataSetConfig.name = UA_STRING("Demo PDS");
-    UA_Server_addPublishedDataSet(server, &publishedDataSetConfig,
-                                  &publishedDataSetIdent);
-
-    UA_NodeId dataSetFieldIdentCounter;
-    UA_DataSetFieldConfig counterValue;
-    memset(&counterValue, 0, sizeof(UA_DataSetFieldConfig));
-    counterValue.dataSetFieldType = UA_PUBSUB_DATASETFIELD_VARIABLE;
-    counterValue.field.variable.fieldNameAlias = UA_STRING ("Counter Variable 1");
-    counterValue.field.variable.promotedField = UA_FALSE;
-    counterValue.field.variable.publishParameters.publishedVariable = counterNodePublisher;
-    counterValue.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-    UA_Server_addDataSetField(server, publishedDataSetIdent, &counterValue,
-                              &dataSetFieldIdentCounter);
-
-    UA_WriterGroupConfig writerGroupConfig;
-    memset(&writerGroupConfig, 0, sizeof(UA_WriterGroupConfig));
-    writerGroupConfig.name = UA_STRING("Demo WriterGroup");
-    writerGroupConfig.publishingInterval = PUB_INTERVAL;
-    writerGroupConfig.enabled = UA_FALSE;
-    writerGroupConfig.encodingMimeType = UA_PUBSUB_ENCODING_UADP;
-    UA_Server_addWriterGroup(server, connectionIdent,
-                             &writerGroupConfig, &writerGroupIdent);
-
-    UA_NodeId dataSetWriterIdent;
-    UA_DataSetWriterConfig dataSetWriterConfig;
-    memset(&dataSetWriterConfig, 0, sizeof(UA_DataSetWriterConfig));
-    dataSetWriterConfig.name = UA_STRING("Demo DataSetWriter");
-    dataSetWriterConfig.dataSetWriterId = DATA_SET_WRITER_ID;
-    dataSetWriterConfig.keyFrameCount = 10;
-    UA_Server_addDataSetWriter(server, writerGroupIdent, publishedDataSetIdent,
-                               &dataSetWriterConfig, &dataSetWriterIdent);
-}
-
-static void
-addServerNodes(UA_Server* server) {
-    UA_UInt64 publishValue = 0;
-    UA_VariableAttributes publisherAttr = UA_VariableAttributes_default;
-    UA_Variant_setScalar(&publisherAttr.value, &publishValue, &UA_TYPES[UA_TYPES_UINT64]);
-    publisherAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Publisher Counter");
-    publisherAttr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-    UA_Server_addVariableNode(server, counterNodePublisher,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                              UA_QUALIFIEDNAME(1, "Publisher Counter"),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                              publisherAttr, NULL, NULL);
-}
-
-/* Stop signal */
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = UA_FALSE;
-}
-
-int main(void) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    config->pubsubTransportLayers = (UA_PubSubTransportLayer *)
-        UA_malloc(sizeof(UA_PubSubTransportLayer));
-    config->pubsubTransportLayers[0] = UA_PubSubTransportLayerEthernet();
-    config->pubsubTransportLayersSize++;
-
-    addServerNodes(server);
-    addPubSubConfiguration(server);
-
-    /* Run the server */
-    UA_StatusCode retval = UA_Server_run(server, &running);
-    UA_Server_delete(server);
-    UA_ServerConfig_delete(config);
-
-    return (int)retval;
-}
diff --git a/ext/open62541/examples/pubsub_realtime/start_rt_publish.sh b/ext/open62541/examples/pubsub_realtime/start_rt_publish.sh
deleted file mode 100644
index 4589f25..0000000
--- a/ext/open62541/examples/pubsub_realtime/start_rt_publish.sh
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/bash
-
-#program path or install dir
-IF=enp0s8
-CPU_NR=3
-PRIO=90
-OLDDIR=$(pwd)
-
-reset() {
-  #standard on most systems. ondemand -> Dynamic CPU-Freq.
-  echo ondemand >/sys/devices/system/cpu/cpu$CPU_NR/cpufreq/scaling_governor
-  cd /sys/devices/system/cpu/cpu$CPU_NR/cpuidle
-  for i in *
-  do
-    #~disable sleep state
-    echo 0 >$i/disable
-  done
-
-  phy=$IF #get interface name
-  #get pid's from interface irq
-  for i in `ps ax | grep -v grep | grep $phy | sed "s/^ //" | cut -d" " -f1`
-  do
-    #retrive or set a process's CPU affinity
-    taskset -pc 0-$CPU_NR $i >/dev/null
-    #manipulate the real-time attributes of a process -p priority -f scheduling policy to SCHED_FIFO
-    chrt -pf 50 $i
-  done
-  #distribute hardware interrupts across processsors on a muliprocessor system
-  systemctl start irqbalance
-}
-
-trap reset ERR
-systemctl stop irqbalance
-
-phy=$IF
-for i in `ps ax | grep -v grep | grep $phy | sed "s/^ //" | cut -d" " -f1`
-do
-  taskset -pc $CPU_NR $i >/dev/null
-  chrt -pf $PRIO $i
-done
-
-cd /sys/devices/system/cpu/cpu$CPU_NR/cpuidle
-for i in `ls -1r`
-do
-  echo 1 >$i/disable
-done
-
-echo performance >/sys/devices/system/cpu/cpu$CPU_NR/cpufreq/scaling_governor
-
-cd $OLDDIR
-taskset -c $CPU_NR chrt -f $PRIO $1
diff --git a/ext/open62541/examples/server.cpp b/ext/open62541/examples/server.cpp
deleted file mode 100644
index 08d55da..0000000
--- a/ext/open62541/examples/server.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include "open62541.h"
-
-#include <signal.h>
-#include <stdlib.h>
-
-/* Build Instructions (Linux)
- * - gcc -std=c99 -c open62541.c
- * - g++ server.cpp open62541.o -o server */
-
-using namespace std;
-
-UA_Boolean running = true;
-
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-int main() {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    // add a variable node to the adresspace
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    UA_Int32 myInteger = 42;
-    UA_Variant_setScalarCopy(&attr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    attr.description = UA_LOCALIZEDTEXT_ALLOC("en-US","the answer");
-    attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US","the answer");
-    UA_NodeId myIntegerNodeId = UA_NODEID_STRING_ALLOC(1, "the.answer");
-    UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME_ALLOC(1, "the answer");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId,
-                              parentReferenceNodeId, myIntegerName,
-                              UA_NODEID_NULL, attr, NULL, NULL);
-
-    /* allocations on the heap need to be freed */
-    UA_VariableAttributes_clear(&attr);
-    UA_NodeId_clear(&myIntegerNodeId);
-    UA_QualifiedName_clear(&myIntegerName);
-
-    UA_StatusCode retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/server_ctt.c b/ext/open62541/examples/server_ctt.c
deleted file mode 100644
index 43e633f..0000000
--- a/ext/open62541/examples/server_ctt.c
+++ /dev/null
@@ -1,1263 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- * Copyright 2019 (c) Kalycito Infotech Private Limited
- * Copyright 2019 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- */
-
-#ifdef _MSC_VER
-#define _CRT_SECURE_NO_WARNINGS /* disable fopen deprication warning in msvs */
-#endif
-
-#include <open62541/server.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server_config_default.h>
-#include <open62541/plugin/pki_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-#include "common.h"
-
-#define MAX_OPERATION_LIMIT 10000
-
-/* This server is configured to the Compliance Testing Tools (CTT) against. The
- * corresponding CTT configuration is available at
- * https://github.com/open62541/open62541-ctt */
-
-static const UA_NodeId baseDataVariableType = {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_BASEDATAVARIABLETYPE}};
-static const UA_NodeId accessDenied = {1, UA_NODEIDTYPE_NUMERIC, {1337}};
-
-/* Custom AccessControl policy that disallows access to one specific node */
-static UA_Byte
-getUserAccessLevel_disallowSpecific(UA_Server *server, UA_AccessControl *ac,
-                                    const UA_NodeId *sessionId, void *sessionContext,
-                                    const UA_NodeId *nodeId, void *nodeContext) {
-    if(UA_NodeId_equal(nodeId, &accessDenied))
-        return 0x00;
-    return 0xFF;
-}
-
-/* Datasource Example */
-static UA_StatusCode
-readTimeData(UA_Server *server,
-             const UA_NodeId *sessionId, void *sessionContext,
-             const UA_NodeId *nodeId, void *nodeContext,
-             UA_Boolean sourceTimeStamp,
-             const UA_NumericRange *range, UA_DataValue *value) {
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-    UA_DateTime currentTime = UA_DateTime_now();
-    UA_Variant_setScalarCopy(&value->value, &currentTime, &UA_TYPES[UA_TYPES_DATETIME]);
-    value->hasValue = true;
-    if(sourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = currentTime;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-readRandomBoolData(UA_Server *server,
-             const UA_NodeId *sessionId, void *sessionContext,
-             const UA_NodeId *nodeId, void *nodeContext,
-             UA_Boolean sourceTimeStamp,
-             const UA_NumericRange *range, UA_DataValue *value) {
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-    UA_Boolean toggle = !((UA_UInt32_random() % 10 ) % 2);
-    UA_Variant_setScalarCopy(&value->value, &toggle, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    value->hasValue = true;
-    if(sourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = UA_DateTime_now();
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-readRandomInt16Data(UA_Server *server,
-             const UA_NodeId *sessionId, void *sessionContext,
-             const UA_NodeId *nodeId, void *nodeContext,
-             UA_Boolean sourceTimeStamp,
-             const UA_NumericRange *range, UA_DataValue *value) {
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-    UA_Int16 toggle = (UA_Int16)UA_UInt32_random();
-    UA_Variant_setScalarCopy(&value->value, &toggle, &UA_TYPES[UA_TYPES_INT16]);
-    value->hasValue = true;
-    if(sourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = UA_DateTime_now();
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-readRandomInt32Data(UA_Server *server,
-             const UA_NodeId *sessionId, void *sessionContext,
-             const UA_NodeId *nodeId, void *nodeContext,
-             UA_Boolean sourceTimeStamp,
-             const UA_NumericRange *range, UA_DataValue *value) {
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-    UA_Int32 toggle = (UA_Int32)UA_UInt32_random();
-    UA_Variant_setScalarCopy(&value->value, &toggle, &UA_TYPES[UA_TYPES_INT32]);
-    value->hasValue = true;
-    if(sourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = UA_DateTime_now();
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-readRandomInt64Data(UA_Server *server,
-             const UA_NodeId *sessionId, void *sessionContext,
-             const UA_NodeId *nodeId, void *nodeContext,
-             UA_Boolean sourceTimeStamp,
-             const UA_NumericRange *range, UA_DataValue *value) {
-    if(range) {
-    value->hasStatus = true;
-    value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-    return UA_STATUSCODE_GOOD;
-    }
-        UA_Int64 toggle = (UA_Int64)UA_UInt32_random();
-        UA_Variant_setScalarCopy(&value->value, &toggle, &UA_TYPES[UA_TYPES_INT64]);
-        value->hasValue = true;
-    if(sourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = UA_DateTime_now();
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-readRandomUInt16Data(UA_Server *server,
-             const UA_NodeId *sessionId, void *sessionContext,
-             const UA_NodeId *nodeId, void *nodeContext,
-             UA_Boolean sourceTimeStamp,
-             const UA_NumericRange *range, UA_DataValue *value) {
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-    UA_UInt16 toggle = (UA_UInt16)UA_UInt32_random();
-    UA_Variant_setScalarCopy(&value->value, &toggle, &UA_TYPES[UA_TYPES_UINT16]);
-    value->hasValue = true;
-    if(sourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = UA_DateTime_now();
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-readRandomUInt32Data(UA_Server *server,
-             const UA_NodeId *sessionId, void *sessionContext,
-             const UA_NodeId *nodeId, void *nodeContext,
-             UA_Boolean sourceTimeStamp,
-             const UA_NumericRange *range, UA_DataValue *value) {
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-    UA_UInt32 toggle = UA_UInt32_random();
-    UA_Variant_setScalarCopy(&value->value, &toggle, &UA_TYPES[UA_TYPES_UINT32]);
-    value->hasValue = true;
-    if(sourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = UA_DateTime_now();
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-readRandomUInt64Data(UA_Server *server,
-             const UA_NodeId *sessionId, void *sessionContext,
-             const UA_NodeId *nodeId, void *nodeContext,
-             UA_Boolean sourceTimeStamp,
-             const UA_NumericRange *range, UA_DataValue *value) {
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-    UA_UInt64 toggle = UA_UInt32_random();
-    UA_Variant_setScalarCopy(&value->value, &toggle, &UA_TYPES[UA_TYPES_UINT64]);
-    value->hasValue = true;
-    if(sourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = UA_DateTime_now();
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-readRandomStringData (UA_Server *server,
-             const UA_NodeId *sessionId, void *sessionContext,
-             const UA_NodeId *nodeId, void *nodeContext,
-             UA_Boolean sourceTimeStamp,
-             const UA_NumericRange *range, UA_DataValue *value) {
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-    char randomName[12];
-    UA_snprintf(randomName, 12, "Random%d", UA_UInt32_random());
-    UA_String toggle = UA_STRING(randomName);
-    UA_Variant_setScalarCopy(&value->value, &toggle, &UA_TYPES[UA_TYPES_STRING]);
-    value->hasValue = true;
-    if(sourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = UA_DateTime_now();
-    }
-   return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-readRandomFloatData (UA_Server *server,
-             const UA_NodeId *sessionId, void *sessionContext,
-             const UA_NodeId *nodeId, void *nodeContext,
-             UA_Boolean sourceTimeStamp,
-             const UA_NumericRange *range, UA_DataValue *value) {
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-    UA_Float toggle = (UA_Float)UA_UInt32_random();
-    UA_Variant_setScalarCopy(&value->value, &toggle, &UA_TYPES[UA_TYPES_FLOAT]);
-    value->hasValue = true;
-    if(sourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = UA_DateTime_now();
-    }
-   return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-readRandomDoubleData (UA_Server *server,
-             const UA_NodeId *sessionId, void *sessionContext,
-             const UA_NodeId *nodeId, void *nodeContext,
-             UA_Boolean sourceTimeStamp,
-             const UA_NumericRange *range, UA_DataValue *value) {
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-    UA_Double toggle = (UA_Double)UA_UInt32_random();
-    UA_Variant_setScalarCopy(&value->value, &toggle, &UA_TYPES[UA_TYPES_DOUBLE]);
-    value->hasValue = true;
-    if(sourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = UA_DateTime_now();
-    }
-   return UA_STATUSCODE_GOOD;
-}
-static UA_StatusCode
-readByteString (UA_Server *server,
-             const UA_NodeId *sessionId, void *sessionContext,
-             const UA_NodeId *nodeId, void *nodeContext,
-             UA_Boolean sourceTimeStamp,
-             const UA_NumericRange *range, UA_DataValue *value) {
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-    char randomName[8];
-    UA_snprintf(randomName, 8, "%d%d", UA_UInt32_random(), UA_UInt32_random());
-    UA_ByteString randomByte = UA_BYTESTRING(randomName);
-    UA_Variant_setScalarCopy(&value->value, &randomByte, &UA_TYPES[UA_TYPES_BYTESTRING]);
-    value->hasValue = true;
-    if(sourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = UA_DateTime_now();
-    }
-   return UA_STATUSCODE_GOOD;
-}
-
-/* Method Node Example */
-#ifdef UA_ENABLE_METHODCALLS
-
-static UA_StatusCode
-helloWorld(UA_Server *server,
-           const UA_NodeId *sessionId, void *sessionContext,
-           const UA_NodeId *methodId, void *methodContext,
-           const UA_NodeId *objectId, void *objectContext,
-           size_t inputSize, const UA_Variant *input,
-           size_t outputSize, UA_Variant *output) {
-    /* input is a scalar string (checked by the server) */
-    UA_String *name = (UA_String *)input[0].data;
-    UA_String hello = UA_STRING("Hello ");
-    UA_String greet;
-    greet.length = hello.length + name->length;
-    greet.data = (UA_Byte *)UA_malloc(greet.length);
-    memcpy(greet.data, hello.data, hello.length);
-    memcpy(greet.data + hello.length, name->data, name->length);
-    UA_Variant_setScalarCopy(output, &greet, &UA_TYPES[UA_TYPES_STRING]);
-    UA_String_clear(&greet);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-noargMethod(UA_Server *server,
-            const UA_NodeId *sessionId, void *sessionContext,
-            const UA_NodeId *methodId, void *methodContext,
-            const UA_NodeId *objectId, void *objectContext,
-            size_t inputSize, const UA_Variant *input,
-            size_t outputSize, UA_Variant *output) {
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-outargMethod(UA_Server *server,
-             const UA_NodeId *sessionId, void *sessionContext,
-             const UA_NodeId *methodId, void *methodContext,
-             const UA_NodeId *objectId, void *objectContext,
-             size_t inputSize, const UA_Variant *input,
-             size_t outputSize, UA_Variant *output) {
-    UA_Int32 out = 42;
-    UA_Variant_setScalarCopy(output, &out, &UA_TYPES[UA_TYPES_INT32]);
-    return UA_STATUSCODE_GOOD;
-}
-
-#endif
-
-static void
-setInformationModel(UA_Server *server) {
-    /* add a static variable node to the server */
-    UA_VariableAttributes myVar = UA_VariableAttributes_default;
-    myVar.description = UA_LOCALIZEDTEXT("en-US", "the answer");
-    myVar.displayName = UA_LOCALIZEDTEXT("en-US", "the answer");
-    myVar.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-    myVar.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    myVar.valueRank = UA_VALUERANK_SCALAR;
-    UA_Int32 myInteger = 42;
-    UA_Variant_setScalar(&myVar.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    const UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "the answer");
-    const UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "the.answer");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId, parentReferenceNodeId,
-                              myIntegerName, baseDataVariableType, myVar, NULL, NULL);
-
-    /* add a static variable that is readable but not writable*/
-    myVar = UA_VariableAttributes_default;
-    myVar.description = UA_LOCALIZEDTEXT("en-US", "the answer - not readable");
-    myVar.displayName = UA_LOCALIZEDTEXT("en-US", "the answer - not readable");
-    myVar.accessLevel = UA_ACCESSLEVELMASK_WRITE;
-    myVar.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    myVar.valueRank = UA_VALUERANK_SCALAR;
-    UA_Variant_setScalar(&myVar.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    const UA_QualifiedName myInteger2Name = UA_QUALIFIEDNAME(1, "the answer - not readable");
-    const UA_NodeId myInteger2NodeId = UA_NODEID_STRING(1, "the.answer.no.read");
-    UA_Server_addVariableNode(server, myInteger2NodeId, parentNodeId, parentReferenceNodeId,
-                              myInteger2Name, baseDataVariableType, myVar, NULL, NULL);
-
-    /* add a variable that is not readable or writable for the current user */
-    myVar = UA_VariableAttributes_default;
-    myVar.description = UA_LOCALIZEDTEXT("en-US", "the answer - not current user");
-    myVar.displayName = UA_LOCALIZEDTEXT("en-US", "the answer - not current user");
-    myVar.accessLevel = UA_ACCESSLEVELMASK_WRITE;
-    myVar.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    myVar.valueRank = UA_VALUERANK_SCALAR;
-    myVar.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&myVar.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    const UA_QualifiedName accessDeniedName = UA_QUALIFIEDNAME(1, "the answer - not current user");
-    UA_Server_addVariableNode(server, accessDenied, parentNodeId, parentReferenceNodeId,
-                              accessDeniedName, baseDataVariableType, myVar, NULL, NULL);
-
-    /* add a variable with the datetime data source */
-    UA_DataSource dateDataSource;
-    dateDataSource.read = readTimeData;
-    dateDataSource.write = NULL;
-    UA_VariableAttributes v_attr = UA_VariableAttributes_default;
-    v_attr.description = UA_LOCALIZEDTEXT("en-US", "current time");
-    v_attr.displayName = UA_LOCALIZEDTEXT("en-US", "current time");
-    v_attr.accessLevel = UA_ACCESSLEVELMASK_READ;
-    v_attr.dataType = UA_TYPES[UA_TYPES_DATETIME].typeId;
-    v_attr.valueRank = UA_VALUERANK_SCALAR;
-    const UA_QualifiedName dateName = UA_QUALIFIEDNAME(1, "current time");
-    UA_Server_addDataSourceVariableNode(server, UA_NODEID_NUMERIC(1, 2345),
-                                        UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                        UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), dateName,
-                                        baseDataVariableType, v_attr, dateDataSource, NULL, NULL);
-
-    /* add a bytestring variable with some content */
-    myVar = UA_VariableAttributes_default;
-    myVar.description = UA_LOCALIZEDTEXT("", "");
-    myVar.displayName = UA_LOCALIZEDTEXT("", "example bytestring");
-    myVar.dataType = UA_TYPES[UA_TYPES_BYTESTRING].typeId;
-    myVar.valueRank = UA_VALUERANK_SCALAR;
-    myVar.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-    UA_ByteString myByteString = UA_BYTESTRING("test123\0test123");
-    UA_Variant_setScalar(&myVar.value, &myByteString, &UA_TYPES[UA_TYPES_BYTESTRING]);
-    const UA_QualifiedName byteStringName = UA_QUALIFIEDNAME(1, "example bytestring");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "myByteString"),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), byteStringName,
-                              baseDataVariableType, myVar, NULL, NULL);
-
-    /* Add HelloWorld method to the server */
-#ifdef UA_ENABLE_METHODCALLS
-    /* Method with IO Arguments */
-    UA_Argument inputArguments;
-    UA_Argument_init(&inputArguments);
-    inputArguments.dataType = UA_TYPES[UA_TYPES_STRING].typeId;
-    inputArguments.description = UA_LOCALIZEDTEXT("en-US", "Say your name");
-    inputArguments.name = UA_STRING("Name");
-    inputArguments.valueRank = UA_VALUERANK_SCALAR; /* scalar argument */
-
-    UA_Argument outputArguments;
-    UA_Argument_init(&outputArguments);
-    outputArguments.arrayDimensionsSize = 0;
-    outputArguments.arrayDimensions = NULL;
-    outputArguments.dataType = UA_TYPES[UA_TYPES_STRING].typeId;
-    outputArguments.description = UA_LOCALIZEDTEXT("en-US", "Receive a greeting");
-    outputArguments.name = UA_STRING("greeting");
-    outputArguments.valueRank = UA_VALUERANK_SCALAR;
-
-    UA_MethodAttributes addmethodattributes = UA_MethodAttributes_default;
-    addmethodattributes.displayName = UA_LOCALIZEDTEXT("en-US", "Hello World");
-    addmethodattributes.executable = true;
-    addmethodattributes.userExecutable = true;
-    UA_Server_addMethodNode(server, UA_NODEID_NUMERIC(1, 62541),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                            UA_QUALIFIEDNAME(1, "hello_world"), addmethodattributes,
-                            &helloWorld, /* callback of the method node */
-                            1, &inputArguments, 1, &outputArguments, NULL, NULL);
-#endif
-
-    /* Add folders for demo information model */
-#define DEMOID 50000
-#define SCALARID 50001
-#define ARRAYID 50002
-#define MATRIXID 50003
-#define DEPTHID 50004
-#define SCALETESTID 40005
-
-    UA_ObjectAttributes object_attr = UA_ObjectAttributes_default;
-    object_attr.description = UA_LOCALIZEDTEXT("en-US", "Demo");
-    object_attr.displayName = UA_LOCALIZEDTEXT("en-US", "Demo");
-    UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, DEMOID),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), UA_QUALIFIEDNAME(1, "Demo"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), object_attr, NULL, NULL);
-
-    object_attr.description = UA_LOCALIZEDTEXT("en-US", "Scalar");
-    object_attr.displayName = UA_LOCALIZEDTEXT("en-US", "Scalar");
-    UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, SCALARID),
-                            UA_NODEID_NUMERIC(1, DEMOID), UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                            UA_QUALIFIEDNAME(1, "Scalar"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), object_attr, NULL, NULL);
-
-    object_attr.description = UA_LOCALIZEDTEXT("en-US", "Array");
-    object_attr.displayName = UA_LOCALIZEDTEXT("en-US", "Array");
-    UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, ARRAYID),
-                            UA_NODEID_NUMERIC(1, DEMOID), UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                            UA_QUALIFIEDNAME(1, "Array"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), object_attr, NULL, NULL);
-
-    object_attr.description = UA_LOCALIZEDTEXT("en-US", "Matrix");
-    object_attr.displayName = UA_LOCALIZEDTEXT("en-US", "Matrix");
-    UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, MATRIXID), UA_NODEID_NUMERIC(1, DEMOID),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), UA_QUALIFIEDNAME(1, "Matrix"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), object_attr, NULL, NULL);
-
-    object_attr.description = UA_LOCALIZEDTEXT("en-US", "ScaleTest");
-    object_attr.displayName = UA_LOCALIZEDTEXT("en-US", "ScaleTest");
-    UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, SCALETESTID), UA_NODEID_NUMERIC(1, DEMOID),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), UA_QUALIFIEDNAME(1, "ScaleTest"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), object_attr, NULL, NULL);
-
-    /* Fill demo nodes for each type*/
-    UA_UInt32 matrixDims[2] = {3, 3};
-    UA_UInt32 id = 51000; // running id in namespace 0
-    for(UA_UInt32 type = 0; type < UA_TYPES_DIAGNOSTICINFO; type++) {
-        if(type == UA_TYPES_VARIANT || type == UA_TYPES_DIAGNOSTICINFO)
-            continue;
-
-        UA_VariableAttributes attr = UA_VariableAttributes_default;
-        attr.dataType = UA_TYPES[type].typeId;
-#ifndef UA_ENABLE_TYPEDESCRIPTION
-        char name[15];
-        UA_snprintf(name, 15, "%02d", type);
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", name);
-        UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME(1, name);
-#else
-        attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", UA_TYPES[type].typeName);
-        UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME_ALLOC(1, UA_TYPES[type].typeName);
-#endif
-        attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-        attr.writeMask = UA_WRITEMASK_DISPLAYNAME | UA_WRITEMASK_DESCRIPTION;
-        attr.userWriteMask = UA_WRITEMASK_DISPLAYNAME | UA_WRITEMASK_DESCRIPTION;
-
-        /* add a scalar node for every built-in type */
-        attr.valueRank = UA_VALUERANK_SCALAR;
-        void *value = UA_new(&UA_TYPES[type]);
-        UA_Variant_setScalar(&attr.value, value, &UA_TYPES[type]);
-        UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, ++id),
-                                  UA_NODEID_NUMERIC(1, SCALARID), UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                  qualifiedName, baseDataVariableType, attr, NULL, NULL);
-        UA_Variant_clear(&attr.value);
-
-        /* add an array node for every built-in type */
-        UA_UInt32 arrayDims = 0;
-        attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
-        attr.arrayDimensions = &arrayDims;
-        attr.arrayDimensionsSize = 1;
-        UA_Variant_setArray(&attr.value, UA_Array_new(10, &UA_TYPES[type]), 10, &UA_TYPES[type]);
-        UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, ++id), UA_NODEID_NUMERIC(1, ARRAYID),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), qualifiedName,
-                                  baseDataVariableType, attr, NULL, NULL);
-        UA_Variant_clear(&attr.value);
-
-        /* add an matrix node for every built-in type */
-        attr.valueRank = UA_VALUERANK_TWO_DIMENSIONS;
-        attr.arrayDimensions = matrixDims;
-        attr.arrayDimensionsSize = 2;
-        void *myMultiArray = UA_Array_new(9, &UA_TYPES[type]);
-        attr.value.arrayDimensions = (UA_UInt32 *)UA_Array_new(2, &UA_TYPES[UA_TYPES_INT32]);
-        attr.value.arrayDimensions[0] = 3;
-        attr.value.arrayDimensions[1] = 3;
-        attr.value.arrayDimensionsSize = 2;
-        attr.value.arrayLength = 9;
-        attr.value.data = myMultiArray;
-        attr.value.type = &UA_TYPES[type];
-        UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, ++id), UA_NODEID_NUMERIC(1, MATRIXID),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), qualifiedName,
-                                  baseDataVariableType, attr, NULL, NULL);
-        UA_Variant_clear(&attr.value);
-#ifdef UA_ENABLE_TYPEDESCRIPTION
-        UA_LocalizedText_clear(&attr.displayName);
-        UA_QualifiedName_clear(&qualifiedName);
-#endif
-    }
-
-    /* Add Integer and UInteger variables */
-    UA_VariableAttributes iattr = UA_VariableAttributes_default;
-    iattr.dataType = UA_NODEID_NUMERIC(0, UA_NS0ID_INTEGER);
-    iattr.displayName = UA_LOCALIZEDTEXT("en-US", "Integer");
-    iattr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-    iattr.writeMask = UA_WRITEMASK_DISPLAYNAME | UA_WRITEMASK_DESCRIPTION;
-    iattr.userWriteMask = UA_WRITEMASK_DISPLAYNAME | UA_WRITEMASK_DESCRIPTION;
-    iattr.valueRank = UA_VALUERANK_SCALAR;
-    UA_QualifiedName iQualifiedName = UA_QUALIFIEDNAME(1, "integer");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "integer"),
-                              UA_NODEID_NUMERIC(1, SCALARID), UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                              iQualifiedName, baseDataVariableType, iattr, NULL, NULL);
-
-    iattr.dataType = UA_NODEID_NUMERIC(0, UA_NS0ID_UINTEGER);
-    iattr.displayName = UA_LOCALIZEDTEXT("en-US", "UInteger");
-    UA_QualifiedName uQualifiedName = UA_QUALIFIEDNAME(1, "uinteger");
-    UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "uinteger"),
-                              UA_NODEID_NUMERIC(1, SCALARID), UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                              uQualifiedName, baseDataVariableType, iattr, NULL, NULL);
-    UA_Variant_clear(&iattr.value);
-
-    /* Hierarchy of depth 10 for CTT testing with forward and inverse references */
-    /* Enter node "depth 9" in CTT configuration - Project->Settings->Server
-       Test->NodeIds->Paths->Starting Node 1 */
-    object_attr.description = UA_LOCALIZEDTEXT("en-US", "DepthDemo");
-    object_attr.displayName = UA_LOCALIZEDTEXT("en-US", "DepthDemo");
-    UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, DEPTHID), UA_NODEID_NUMERIC(1, DEMOID),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), UA_QUALIFIEDNAME(1, "DepthDemo"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), object_attr, NULL, NULL);
-
-    id = DEPTHID; // running id in namespace 0 - Start with Matrix NODE
-    for(UA_UInt32 i = 1; i <= 20; i++) {
-        char name[15];
-        UA_snprintf(name, 15, "depth%i", i);
-        object_attr.description = UA_LOCALIZEDTEXT("en-US", name);
-        object_attr.displayName = UA_LOCALIZEDTEXT("en-US", name);
-        UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, id + i),
-                                UA_NODEID_NUMERIC(1, i == 1 ? DEPTHID : id + i - 1),
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                UA_QUALIFIEDNAME(1, name),
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), object_attr, NULL, NULL);
-    }
-
-    /* Scale Test: 100 nodes of each type */
-    int scale_i = 0;
-    UA_UInt32 scale_nodeid = 43000;
-    for(UA_UInt32 type = 0; type < 15; type++) {
-        if(type == UA_TYPES_SBYTE || type == UA_TYPES_BYTE
-                || type == UA_TYPES_GUID)
-            continue;
-
-        UA_DataSource scaleTestDataSource;
-        UA_VariableAttributes attr = UA_VariableAttributes_default;
-        attr.dataType = UA_TYPES[type].typeId;
-        attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-        attr.writeMask = UA_WRITEMASK_DISPLAYNAME | UA_WRITEMASK_DESCRIPTION;
-        attr.userWriteMask = UA_WRITEMASK_DISPLAYNAME | UA_WRITEMASK_DESCRIPTION;
-        attr.valueRank = UA_VALUERANK_SCALAR;
-        switch(UA_TYPES[type].typeIndex) {
-            case UA_TYPES_BOOLEAN: {
-                scaleTestDataSource.read = readRandomBoolData;
-                scaleTestDataSource.write = NULL;
-                break;
-            }
-            case UA_TYPES_INT16: {
-                scaleTestDataSource.read = readRandomInt16Data;
-                scaleTestDataSource.write = NULL;
-                break;
-            }
-            case UA_TYPES_UINT16: {
-                scaleTestDataSource.read = readRandomUInt16Data;
-                scaleTestDataSource.write = NULL;
-                break;
-            }
-            case UA_TYPES_INT32: {
-                scaleTestDataSource.read = readRandomInt32Data;
-                scaleTestDataSource.write = NULL;
-                break;
-            }
-            case UA_TYPES_UINT32: {
-                scaleTestDataSource.read = readRandomUInt32Data;
-                scaleTestDataSource.write = NULL;
-                break;
-            }
-            case UA_TYPES_INT64: {
-                scaleTestDataSource.read = readRandomInt64Data;
-                scaleTestDataSource.write = NULL;
-                break;
-            }
-            case UA_TYPES_UINT64: {
-                scaleTestDataSource.read = readRandomUInt64Data;
-                scaleTestDataSource.write = NULL;
-                break;
-            }
-            case UA_TYPES_STRING: {
-                scaleTestDataSource.read = readRandomStringData;
-                scaleTestDataSource.write = NULL;
-                break;
-            }
-            case UA_TYPES_FLOAT: {
-                scaleTestDataSource.read = readRandomFloatData;
-                scaleTestDataSource.write = NULL;
-                break;
-            }
-            case UA_TYPES_DOUBLE: {
-                scaleTestDataSource.read = readRandomDoubleData;
-                scaleTestDataSource.write = NULL;
-                break;
-            }
-            case UA_TYPES_DATETIME:
-                scaleTestDataSource.read = readTimeData;
-                scaleTestDataSource.write = NULL;
-                break;
-            case UA_TYPES_BYTESTRING:
-                scaleTestDataSource.read = readByteString;
-                scaleTestDataSource.write = NULL;
-                break;
-            default:
-                break;
-        }
-
-        for(size_t j = 0; j < 100; j++) {
-            char name[32];
-#ifndef UA_ENABLE_TYPEDESCRIPTION
-            UA_snprintf(name, 20, "%02d - %i", type, scale_i);
-#else
-            UA_snprintf(name, 20, "%s - %i", UA_TYPES[type].typeName, scale_i);
-#endif
-            attr.displayName = UA_LOCALIZEDTEXT("en-US", name);
-            UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME(1, name);
-            UA_Server_addDataSourceVariableNode(server, UA_NODEID_NUMERIC(1, ++scale_nodeid),
-                                      UA_NODEID_NUMERIC(1, SCALETESTID),
-                                      UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),qualifiedName,
-                                      baseDataVariableType, attr, scaleTestDataSource, NULL, NULL);
-            scale_i++;
-        }
-        UA_Variant_clear(&attr.value);
-    }
-
-    /* Add the variable to some more places to get a node with three inverse references for the CTT */
-    UA_ExpandedNodeId answer_nodeid = UA_EXPANDEDNODEID_STRING(1, "the.answer");
-    UA_Server_addReference(server, UA_NODEID_NUMERIC(1, DEMOID),
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), answer_nodeid, true);
-    UA_Server_addReference(server, UA_NODEID_NUMERIC(1, SCALARID),
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), answer_nodeid, true);
-
-    /* Example for manually setting an attribute within the server */
-    UA_LocalizedText objectsName = UA_LOCALIZEDTEXT("en-US", "Objects");
-    UA_Server_writeDisplayName(server, UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER), objectsName);
-
-#define NOARGID     60000
-#define INARGID     60001
-#define OUTARGID    60002
-#define INOUTARGID  60003
-#ifdef UA_ENABLE_METHODCALLS
-    /* adding some more method nodes to pass CTT */
-    /* Method without arguments */
-    addmethodattributes = UA_MethodAttributes_default;
-    addmethodattributes.displayName = UA_LOCALIZEDTEXT("en-US", "noarg");
-    addmethodattributes.executable = true;
-    addmethodattributes.userExecutable = true;
-    UA_Server_addMethodNode(server, UA_NODEID_NUMERIC(1, NOARGID),
-                            UA_NODEID_NUMERIC(1, DEMOID),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                            UA_QUALIFIEDNAME(1, "noarg"), addmethodattributes,
-                            &noargMethod, /* callback of the method node */
-                            0, NULL, 0, NULL, NULL, NULL);
-
-    /* Method with in arguments */
-    addmethodattributes = UA_MethodAttributes_default;
-    addmethodattributes.displayName = UA_LOCALIZEDTEXT("en-US", "inarg");
-    addmethodattributes.executable = true;
-    addmethodattributes.userExecutable = true;
-
-    UA_Argument_init(&inputArguments);
-    inputArguments.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    inputArguments.description = UA_LOCALIZEDTEXT("en-US", "Input");
-    inputArguments.name = UA_STRING("Input");
-    inputArguments.valueRank = UA_VALUERANK_SCALAR; //uaexpert will crash if set to 0 ;)
-
-    UA_Server_addMethodNode(server, UA_NODEID_NUMERIC(1, INARGID),
-                            UA_NODEID_NUMERIC(1, DEMOID),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                            UA_QUALIFIEDNAME(1, "noarg"), addmethodattributes,
-                            &noargMethod, /* callback of the method node */
-                            1, &inputArguments, 0, NULL, NULL, NULL);
-
-    /* Method with out arguments */
-    addmethodattributes = UA_MethodAttributes_default;
-    addmethodattributes.displayName = UA_LOCALIZEDTEXT("en-US", "outarg");
-    addmethodattributes.executable = true;
-    addmethodattributes.userExecutable = true;
-
-    UA_Argument_init(&outputArguments);
-    outputArguments.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    outputArguments.description = UA_LOCALIZEDTEXT("en-US", "Output");
-    outputArguments.name = UA_STRING("Output");
-    outputArguments.valueRank = UA_VALUERANK_SCALAR;
-
-    UA_Server_addMethodNode(server, UA_NODEID_NUMERIC(1, OUTARGID),
-                            UA_NODEID_NUMERIC(1, DEMOID),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                            UA_QUALIFIEDNAME(1, "outarg"), addmethodattributes,
-                            &outargMethod, /* callback of the method node */
-                            0, NULL, 1, &outputArguments, NULL, NULL);
-
-    /* Method with inout arguments */
-    addmethodattributes = UA_MethodAttributes_default;
-    addmethodattributes.displayName = UA_LOCALIZEDTEXT("en-US", "inoutarg");
-    addmethodattributes.executable = true;
-    addmethodattributes.userExecutable = true;
-
-    UA_Server_addMethodNode(server, UA_NODEID_NUMERIC(1, INOUTARGID),
-                            UA_NODEID_NUMERIC(1, DEMOID),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                            UA_QUALIFIEDNAME(1, "inoutarg"), addmethodattributes,
-                            &outargMethod, /* callback of the method node */
-                            1, &inputArguments, 1, &outputArguments, NULL, NULL);
-#endif
-}
-
-static void
-disableAnonymous(UA_ServerConfig *config) {
-    for(size_t i = 0; i < config->endpointsSize; i++) {
-        UA_EndpointDescription *ep = &config->endpoints[i];
-
-        for(size_t j = 0; j < ep->userIdentityTokensSize; j++) {
-            UA_UserTokenPolicy *utp = &ep->userIdentityTokens[j];
-            if(utp->tokenType != UA_USERTOKENTYPE_ANONYMOUS)
-                continue;
-
-            UA_UserTokenPolicy_clear(utp);
-            /* Move the last to this position */
-            if(j + 1 < ep->userIdentityTokensSize) {
-                ep->userIdentityTokens[j] = ep->userIdentityTokens[ep->userIdentityTokensSize-1];
-                j--;
-            }
-            ep->userIdentityTokensSize--;
-        }
-
-        /* Delete the entire array if the last UserTokenPolicy was removed */
-        if(ep->userIdentityTokensSize == 0) {
-            UA_free(ep->userIdentityTokens);
-            ep->userIdentityTokens = NULL;
-        }
-    }
-}
-
-#ifdef UA_ENABLE_ENCRYPTION
-static void
-disableUnencrypted(UA_ServerConfig *config) {
-    for(size_t i = 0; i < config->endpointsSize; i++) {
-        UA_EndpointDescription *ep = &config->endpoints[i];
-        if(ep->securityMode != UA_MESSAGESECURITYMODE_NONE)
-            continue;
-
-        UA_EndpointDescription_clear(ep);
-        /* Move the last to this position */
-        if(i + 1 < config->endpointsSize) {
-            config->endpoints[i] = config->endpoints[config->endpointsSize-1];
-            i--;
-        }
-        config->endpointsSize--;
-    }
-    /* Delete the entire array if the last Endpoint was removed */
-    if(config->endpointsSize== 0) {
-        UA_free(config->endpoints);
-        config->endpoints = NULL;
-    }
-}
-
-static void
-disableOutdatedSecurityPolicy(UA_ServerConfig *config) {
-    for(size_t i = 0; i < config->endpointsSize; i++) {
-        UA_EndpointDescription *ep = &config->endpoints[i];
-        UA_ByteString basic128uri = UA_BYTESTRING("http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15");
-        UA_ByteString basic256uri = UA_BYTESTRING("http://opcfoundation.org/UA/SecurityPolicy#Basic256");
-        if(!UA_String_equal(&ep->securityPolicyUri, &basic128uri) &&
-           !UA_String_equal(&ep->securityPolicyUri, &basic256uri))
-            continue;
-
-        UA_EndpointDescription_clear(ep);
-        /* Move the last to this position */
-        if(i + 1 < config->endpointsSize) {
-            config->endpoints[i] = config->endpoints[config->endpointsSize-1];
-            i--;
-        }
-        config->endpointsSize--;
-    }
-    /* Delete the entire array if the last Endpoint was removed */
-    if(config->endpointsSize== 0) {
-        UA_free(config->endpoints);
-        config->endpoints = NULL;
-    }
-}
-
-static void
-disableBasic128SecurityPolicy(UA_ServerConfig *config) {
-    for(size_t i = 0; i < config->endpointsSize; i++) {
-        UA_EndpointDescription *ep = &config->endpoints[i];
-        UA_ByteString basic128uri = UA_BYTESTRING("http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15");
-        if(!UA_String_equal(&ep->securityPolicyUri, &basic128uri))
-            continue;
-
-        UA_EndpointDescription_clear(ep);
-        /* Move the last to this position */
-        if(i + 1 < config->endpointsSize) {
-            config->endpoints[i] = config->endpoints[config->endpointsSize-1];
-            i--;
-        }
-        config->endpointsSize--;
-    }
-    /* Delete the entire array if the last Endpoint was removed */
-    if(config->endpointsSize== 0) {
-        UA_free(config->endpoints);
-        config->endpoints = NULL;
-    }
-}
-
-static void
-disableBasic256SecurityPolicy(UA_ServerConfig *config) {
-    for(size_t i = 0; i < config->endpointsSize; i++) {
-        UA_EndpointDescription *ep = &config->endpoints[i];
-        UA_ByteString basic256uri = UA_BYTESTRING("http://opcfoundation.org/UA/SecurityPolicy#Basic256");
-        if(!UA_String_equal(&ep->securityPolicyUri, &basic256uri))
-            continue;
-
-        UA_EndpointDescription_clear(ep);
-        /* Move the last to this position */
-        if(i + 1 < config->endpointsSize) {
-            config->endpoints[i] = config->endpoints[config->endpointsSize-1];
-            i--;
-        }
-        config->endpointsSize--;
-    }
-    /* Delete the entire array if the last Endpoint was removed */
-    if(config->endpointsSize== 0) {
-        UA_free(config->endpoints);
-        config->endpoints = NULL;
-    }
-}
-
-
-static void
-disableBasic256Sha256SecurityPolicy(UA_ServerConfig *config) {
-    for(size_t i = 0; i < config->endpointsSize; i++) {
-        UA_EndpointDescription *ep = &config->endpoints[i];
-        UA_ByteString basic256sha256uri = UA_BYTESTRING("http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256");
-        if(!UA_String_equal(&ep->securityPolicyUri, &basic256sha256uri))
-            continue;
-
-        UA_EndpointDescription_clear(ep);
-        /* Move the last to this position */
-        if(i + 1 < config->endpointsSize) {
-            config->endpoints[i] = config->endpoints[config->endpointsSize-1];
-            i--;
-        }
-        config->endpointsSize--;
-    }
-    /* Delete the entire array if the last Endpoint was removed */
-    if(config->endpointsSize== 0) {
-        UA_free(config->endpoints);
-        config->endpoints = NULL;
-    }
-}
-
-#endif
-
-UA_Boolean running = true;
-
-static void
-stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Received Ctrl-C");
-    running = 0;
-}
-
-static void
-usage(void) {
-    UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                   "Usage:\n"
-#ifndef UA_ENABLE_ENCRYPTION
-                   "server_ctt [<server-certificate.der>]\n"
-#else
-                   "server_ctt <server-certificate.der> <private-key.der>\n"
-#ifndef __linux__
-                   "\t[--trustlist <tl1.ctl> <tl2.ctl> ... ]\n"
-                   "\t[--issuerlist <il1.der> <il2.der> ... ]\n"
-                   "\t[--revocationlist <rv1.crl> <rv2.crl> ...]\n"
-#else
-                   "\t[--trustlistFolder <folder>]\n"
-                   "\t[--issuerlistFolder <folder>]\n"
-                   "\t[--revocationlistFolder <folder>]\n"
-#endif
-                   "\t[--enableUnencrypted]\n"
-                   "\t[--enableOutdatedSecurityPolicy]\n"
-                   "\t[--enableTimestampCheck]\n"
-                   "\t[--disableBasic128]\n"
-                   "\t[--disableBasic256]\n"
-                   "\t[--disableBasic256Sha256]\n"
-#endif
-                   "\t[--enableAnonymous]\n");
-}
-
-int main(int argc, char **argv) {
-    signal(SIGINT, stopHandler); /* catches ctrl-c */
-    signal(SIGTERM, stopHandler);
-
-    for(int i = 1; i < argc; i++) {
-        if(strcmp(argv[i], "--help") == 0 ||
-           strcmp(argv[i], "-h") == 0) {
-            usage();
-            return EXIT_SUCCESS;
-        }
-    }
-
-    UA_ServerConfig config;
-    memset(&config, 0, sizeof(UA_ServerConfig));
-
-    /* Load certificate */
-    size_t pos = 1;
-    UA_ByteString certificate = UA_BYTESTRING_NULL;
-    if((size_t)argc >= pos + 1) {
-        certificate = loadFile(argv[1]);
-        if(certificate.length == 0) {
-            UA_LOG_FATAL(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                           "Unable to load file %s.", argv[pos]);
-            return EXIT_FAILURE;
-        }
-        pos++;
-    }
-
-#ifdef UA_ENABLE_ENCRYPTION
-    /* Load the private key */
-    UA_ByteString privateKey = UA_BYTESTRING_NULL;
-    if((size_t)argc >= pos + 1) {
-        privateKey = loadFile(argv[2]);
-        if(privateKey.length == 0) {
-            UA_LOG_FATAL(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                           "Unable to load file %s.", argv[pos]);
-            return EXIT_FAILURE;
-        }
-        pos++;
-    }
-
-    char filetype = ' '; /* t==trustlist, l == issuerList, r==revocationlist */
-    UA_Boolean enableUnencr = false;
-    UA_Boolean enableSec = false;
-    UA_Boolean enableTime = false;
-    UA_Boolean disableBasic128 = false;
-    UA_Boolean disableBasic256 = false;
-    UA_Boolean disableBasic256Sha256 = false;
-
-#ifndef __linux__
-    UA_ByteString trustList[100];
-    size_t trustListSize = 0;
-    UA_ByteString issuerList[100];
-    size_t issuerListSize = 0;
-    UA_ByteString revocationList[100];
-    size_t revocationListSize = 0;
-#else
-    const char *trustlistFolder = NULL;
-    const char *issuerlistFolder = NULL;
-    const char *revocationlistFolder = NULL;
-#endif
-
-#endif
-
-    UA_Boolean enableAnon = false;
-
-    /* Loop over the remaining arguments */
-    for(; pos < (size_t)argc; pos++) {
-
-        if(strcmp(argv[pos], "--enableAnonymous") == 0) {
-            enableAnon = true;
-            continue;
-        }
-
-#ifdef UA_ENABLE_ENCRYPTION
-        if(strcmp(argv[pos], "--enableUnencrypted") == 0) {
-            enableUnencr = true;
-            continue;
-        }
-
-        if(strcmp(argv[pos], "--enableOutdatedSecurityPolicy") == 0) {
-            enableSec = true;
-            continue;
-        }
-
-        if(strcmp(argv[pos], "--enableTimestampCheck") == 0) {
-            enableTime = true;
-            continue;
-        }
-
-        if(strcmp(argv[pos], "--disableBasic128") == 0) {
-            disableBasic128 = true;
-            continue;
-        }
-
-        if(strcmp(argv[pos], "--disableBasic256") == 0) {
-            disableBasic256 = true;
-            continue;
-        }
-
-        if(strcmp(argv[pos], "--disableBasic256Sha256") == 0) {
-            disableBasic256Sha256 = true;
-            continue;
-        }
-
-        if(strcmp(argv[pos], "--disableBasic128") == 0) {
-            disableBasic128 = true;
-            continue;
-        }
-
-        if(strcmp(argv[pos], "--disableBasic256") == 0) {
-            disableBasic256 = true;
-            continue;
-        }
-
-        if(strcmp(argv[pos], "--disableBasic256Sha256") == 0) {
-            disableBasic256Sha256 = true;
-            continue;
-        }
-
-#ifndef __linux__
-        if(strcmp(argv[pos], "--trustlist") == 0) {
-            filetype = 't';
-            continue;
-        }
-
-        if(strcmp(argv[pos], "--issuerlist") == 0) {
-            filetype = 'l';
-            continue;
-        }
-
-        if(strcmp(argv[pos], "--revocationlist") == 0) {
-            filetype = 'r';
-            continue;
-        }
-
-        if(filetype == 't') {
-            if(trustListSize >= 100) {
-                UA_LOG_FATAL(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                             "Too many trust lists");
-                return EXIT_FAILURE;
-            }
-            trustList[trustListSize] = loadFile(argv[pos]);
-            if(trustList[trustListSize].data == NULL) {
-                UA_LOG_FATAL(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                             "Unable to load trust list %s", argv[pos]);
-                return EXIT_FAILURE;
-            }
-            trustListSize++;
-            continue;
-        }
-
-        if(filetype == 'l') {
-            if(issuerListSize >= 100) {
-                UA_LOG_FATAL(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                             "Too many trust lists");
-                return EXIT_FAILURE;
-            }
-            issuerList[issuerListSize] = loadFile(argv[pos]);
-            if(issuerList[issuerListSize].data == NULL) {
-                UA_LOG_FATAL(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                             "Unable to load trust list %s", argv[pos]);
-                return EXIT_FAILURE;
-            }
-            issuerListSize++;
-            continue;
-        }
-
-        if(filetype == 'r') {
-            if(revocationListSize >= 100) {
-                UA_LOG_FATAL(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                             "Too many revocation lists");
-                return EXIT_FAILURE;
-            }
-            revocationList[revocationListSize] = loadFile(argv[pos]);
-            if(revocationList[revocationListSize].data == NULL) {
-                UA_LOG_FATAL(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                             "Unable to load revocationlist %s", argv[pos]);
-                return EXIT_FAILURE;
-            }
-            revocationListSize++;
-            continue;
-        }
-#else
-        if(strcmp(argv[pos], "--trustlistFolder") == 0) {
-            filetype = 't';
-            continue;
-        }
-
-        if(strcmp(argv[pos], "--issuerlistFolder") == 0) {
-            filetype = 'l';
-            continue;
-        }
-
-        if(strcmp(argv[pos], "--revocationlistFolder") == 0) {
-            filetype = 'r';
-            continue;
-        }
-
-        if(filetype == 't') {
-            trustlistFolder = argv[pos];
-            continue;
-        }
-
-        if(filetype == 'l') {
-            issuerlistFolder = argv[pos];
-            continue;
-        }
-
-        if(filetype == 'r') {
-            revocationlistFolder = argv[pos];
-            continue;
-        }
-#endif
-
-#endif
-
-        usage();
-        return EXIT_FAILURE;
-    }
-
-#ifdef UA_ENABLE_ENCRYPTION
-#ifndef __linux__
-    UA_ServerConfig_setDefaultWithSecurityPolicies(&config, 4840,
-                                                   &certificate, &privateKey,
-                                                   trustList, trustListSize,
-                                                   issuerList, issuerListSize,
-                                                   revocationList, revocationListSize);
-#else
-    UA_ServerConfig_setDefaultWithSecurityPolicies(&config, 4840,
-                                                   &certificate, &privateKey,
-                                                   NULL, 0, NULL, 0, NULL, 0);
-    config.certificateVerification.deleteMembers(&config.certificateVerification);
-    UA_CertificateVerification_CertFolders(&config.certificateVerification,
-                                           trustlistFolder, issuerlistFolder,
-                                           revocationlistFolder);
-#endif
-
-    if(!enableUnencr)
-        disableUnencrypted(&config);
-    if(!enableSec)
-        disableOutdatedSecurityPolicy(&config);
-
-    if(disableBasic128)
-        disableBasic128SecurityPolicy(&config);
-    if(disableBasic256)
-        disableBasic256SecurityPolicy(&config);
-    if(disableBasic256Sha256)
-        disableBasic256Sha256SecurityPolicy(&config);
-
-    /* Set operation limits */
-    config.maxNodesPerRead = MAX_OPERATION_LIMIT;
-    config.maxNodesPerWrite = MAX_OPERATION_LIMIT;
-    config.maxNodesPerMethodCall = MAX_OPERATION_LIMIT;
-    config.maxNodesPerBrowse = MAX_OPERATION_LIMIT;
-    config.maxNodesPerRegisterNodes = MAX_OPERATION_LIMIT;
-    config.maxNodesPerTranslateBrowsePathsToNodeIds = MAX_OPERATION_LIMIT;
-    config.maxNodesPerNodeManagement = MAX_OPERATION_LIMIT;
-    config.maxMonitoredItemsPerCall = MAX_OPERATION_LIMIT;
-
-    /* If RequestTimestamp is '0', log the warning and proceed */
-    config.verifyRequestTimestamp = UA_RULEHANDLING_WARN;
-
-    if(enableTime)
-        config.verifyRequestTimestamp = UA_RULEHANDLING_DEFAULT;
-
-#else
-    UA_ServerConfig_setMinimal(&config, 4840, &certificate);
-#endif
-
-    if(!enableAnon)
-        disableAnonymous(&config);
-
-    /* Clean up temp values */
-    UA_ByteString_clear(&certificate);
-#if defined(UA_ENABLE_ENCRYPTION) && !defined(__linux__)
-    UA_ByteString_clear(&privateKey);
-    for(size_t i = 0; i < trustListSize; i++)
-        UA_ByteString_clear(&trustList[i]);
-    for(size_t i = 0; i < issuerListSize; i++)
-        UA_ByteString_clear(&issuerList[i]);
-    for(size_t i = 0; i < revocationListSize; i++)
-        UA_ByteString_clear(&revocationList[i]);
-#endif
-
-    /* Override with a custom access control policy */
-    config.accessControl.getUserAccessLevel = getUserAccessLevel_disallowSpecific;
-    UA_String_clear(&config.applicationDescription.applicationUri);
-    config.applicationDescription.applicationUri =
-        UA_String_fromChars("urn:open62541.server.application");
-
-    config.shutdownDelay = 5000.0; /* 5s */
-
-    UA_Server *server = UA_Server_newWithConfig(&config);
-    if(server == NULL)
-        return EXIT_FAILURE;
-
-    setInformationModel(server);
-
-    /* run server */
-    UA_StatusCode retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/server_inheritance.c b/ext/open62541/examples/server_inheritance.c
deleted file mode 100644
index 97c97f6..0000000
--- a/ext/open62541/examples/server_inheritance.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-UA_Boolean running = true;
-static void stopHandler(int sig) {
-    running = false;
-}
-
-/**
- * This will create a type structure and some instances of the types:
- *
- * Create a rudimentary objectType
- *
- * Type:
- * + MammalType
- *  v- Class  = "mamalia"
- *  v- Species
- *  o- Abilities
- *      v- MakeSound
- *      v- Breathe = True
- *  + DogType
- *      v- Species = "Canis"
- *      v- Name
- *      o- Abilities
- *          v- MakeSound = "Wuff"
- *           v- FetchNewPaper
- */
-static void createMammals(UA_Server *server) {
-
-
-    UA_ObjectTypeAttributes otAttr = UA_ObjectTypeAttributes_default;
-    otAttr.description = UA_LOCALIZEDTEXT("en-US", "A mammal");
-    otAttr.displayName = UA_LOCALIZEDTEXT("en-US", "MammalType");
-    UA_Server_addObjectTypeNode(server, UA_NODEID_NUMERIC(1, 10000),
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                UA_QUALIFIEDNAME(1, "MammalType"), otAttr, NULL, NULL);
-
-    UA_VariableAttributes vAttr = UA_VariableAttributes_default;
-    vAttr.description =  UA_LOCALIZEDTEXT("en-US", "This mammals class");
-    vAttr.displayName =  UA_LOCALIZEDTEXT("en-US", "Class");
-    UA_String classVar = UA_STRING("mamalia");
-    UA_Variant_setScalar(&vAttr.value, &classVar, &UA_TYPES[UA_TYPES_STRING]);
-    UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, 10001),
-                              UA_NODEID_NUMERIC(1, 10000),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                              UA_QUALIFIEDNAME(1, "Class"), UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                              vAttr, NULL, NULL);
-
-    vAttr = UA_VariableAttributes_default;
-    vAttr.description =  UA_LOCALIZEDTEXT("en-US", "This mammals species");
-    vAttr.displayName =  UA_LOCALIZEDTEXT("en-US", "Species");
-    UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, 10002),
-                              UA_NODEID_NUMERIC(1, 10000),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                              UA_QUALIFIEDNAME(1, "Species"), UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                              vAttr, NULL, NULL);
-
-    otAttr = UA_ObjectTypeAttributes_default;
-    otAttr.description = UA_LOCALIZEDTEXT("en-US", "A dog, subtype of mammal");
-    otAttr.displayName = UA_LOCALIZEDTEXT("en-US", "DogType");
-    UA_Server_addObjectTypeNode(server, UA_NODEID_NUMERIC(1, 20000),
-                                UA_NODEID_NUMERIC(1, 10000),
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                UA_QUALIFIEDNAME(1, "DogType"), otAttr, NULL, NULL);
-
-    vAttr = UA_VariableAttributes_default;
-    vAttr.description =  UA_LOCALIZEDTEXT("en-US", "This dogs species");
-    vAttr.displayName =  UA_LOCALIZEDTEXT("en-US", "Species");
-    UA_String defaultSpecies = UA_STRING("Canis");
-    UA_Variant_setScalar(&vAttr.value, &defaultSpecies, &UA_TYPES[UA_TYPES_STRING]);
-    UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, 20001),
-                              UA_NODEID_NUMERIC(1, 20000),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                              UA_QUALIFIEDNAME(1, "Species"), UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                              vAttr, NULL, NULL);
-
-    vAttr = UA_VariableAttributes_default;
-    vAttr.description =  UA_LOCALIZEDTEXT("en-US", "This dogs name");
-    vAttr.displayName =  UA_LOCALIZEDTEXT("en-US", "Name");
-    UA_String defaultName = UA_STRING("unnamed dog");
-    UA_Variant_setScalar(&vAttr.value, &defaultName, &UA_TYPES[UA_TYPES_STRING]);
-    UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, 20002),
-                              UA_NODEID_NUMERIC(1, 20000),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                              UA_QUALIFIEDNAME(1, "Name"), UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                              vAttr, NULL, NULL);
-
-    /* Instatiate a dog named bello:
-     * (O) Objects
-     *   + O Bello <DogType>
-     *     + Age
-     *     + Name
-     */
-
-    UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-    oAttr.description = UA_LOCALIZEDTEXT("en-US", "A dog named Bello");
-    oAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Bello");
-    UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, 0),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                            UA_QUALIFIEDNAME(1, "Bello"), UA_NODEID_NUMERIC(1, 20000),
-                            oAttr, NULL, NULL);
-
-    oAttr = UA_ObjectAttributes_default;
-    oAttr.description = UA_LOCALIZEDTEXT("en-US", "Another dog");
-    oAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Dog2");
-    UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, 0),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                            UA_QUALIFIEDNAME(1, "Dog2"), UA_NODEID_NUMERIC(1, 20000),
-                            oAttr, NULL, NULL);
-
-    oAttr = UA_ObjectAttributes_default;
-    oAttr.description = UA_LOCALIZEDTEXT("en-US", "A mmamal");
-    oAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Mmamal1");
-    UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, 0),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                            UA_QUALIFIEDNAME(1, "Mammal1"), UA_NODEID_NUMERIC(1, 10000),
-                            oAttr, NULL, NULL);
-
-}
-
-/**
- * This method shows the usage of _begin and _finish methods.
- * Normally, if you create an instance of an object type, all its
- * mandatory children are inherited and created.
- * It could be the case that you first need to create a node,
- * add some children with specific IDs and then all the remaining
- * inherited children should be created.
- * For this use-case you can use first the _begin method,
- * which creates the node, including its parent references.
- * Then you can add any children, and then you should
- * call _finish on that node, which then adds all the inherited children.
- *
- * For further details check the example below or the corresponding
- * method documentation.
- *
- * To demonstrate this, we use the following example:
- *
- * + ObjectType
- *      + LampType (Object)
- *          + IsOn (Variable, Boolean, Mandatory)
- *          + Brightness (Variable, UInt16, Mandatory)
- * + Objects
- *      + LampGreen
- *          Should inherit the mandatory IsOn and Brightness with a generated node ID
- *      + LampRed
- *          IsOn should have the node ID 30101, Brightness will be inherited with a generated node ID
- *
- */
-static void createCustomInheritance(UA_Server *server) {
-
-    /* Add LampType object type node */
-
-    UA_ObjectTypeAttributes otAttr = UA_ObjectTypeAttributes_default;
-    otAttr.description = UA_LOCALIZEDTEXT("en-US", "A Lamp");
-    otAttr.displayName = UA_LOCALIZEDTEXT("en-US", "LampType");
-    UA_Server_addObjectTypeNode(server, UA_NODEID_NUMERIC(1, 30000),
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                UA_QUALIFIEDNAME(1, "LampType"), otAttr, NULL, NULL);
-
-
-    /* Add the two mandatory children, IsOn and Brightness */
-    UA_VariableAttributes vAttr = UA_VariableAttributes_default;
-    vAttr.description =  UA_LOCALIZEDTEXT("en-US", "Switch lamp on/off");
-    vAttr.displayName =  UA_LOCALIZEDTEXT("en-US", "IsOn");
-    UA_Boolean isOn = UA_FALSE;
-    UA_Variant_setScalar(&vAttr.value, &isOn, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, 30001),
-                              UA_NODEID_NUMERIC(1, 30000),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                              UA_QUALIFIEDNAME(1, "IsOn"), UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                              vAttr, NULL, NULL);
-    UA_Server_addReference(server, UA_NODEID_NUMERIC(1, 30001),
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE),
-                           UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORY), true);
-
-    vAttr = UA_VariableAttributes_default;
-    vAttr.description =  UA_LOCALIZEDTEXT("en-US", "Lamp brightness");
-    vAttr.displayName =  UA_LOCALIZEDTEXT("en-US", "Brightness");
-    UA_UInt16 brightness = 142;
-    UA_Variant_setScalar(&vAttr.value, &brightness, &UA_TYPES[UA_TYPES_UINT16]);
-    UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, 30002),
-                              UA_NODEID_NUMERIC(1, 30000),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                              UA_QUALIFIEDNAME(1, "Brightness"), UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                              vAttr, NULL, NULL);
-    UA_Server_addReference(server, UA_NODEID_NUMERIC(1, 30002),
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE),
-                           UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORY), true);
-    
-    /* Now we want to inherit all the mandatory children for LampGreen and don't care about the node ids.
-     * These will be automatically generated. This will internally call the _begin and _finish methods */
-
-    UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-    oAttr.description = UA_LOCALIZEDTEXT("en-US", "A green lamp");
-    oAttr.displayName = UA_LOCALIZEDTEXT("en-US", "LampGreen");
-    UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, 0),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                            UA_QUALIFIEDNAME(1, "LampGreen"), UA_NODEID_NUMERIC(1, 30000),
-                            oAttr, NULL, NULL);
-
-    /* For the red lamp we want to set the node ID of the IsOn child manually, thus we need to use
-     * the _begin method, add the child and then _finish: */
-
-    /* The call to UA_Server_addNode_begin will create the node and its parent references,
-     * but it will not instantiate the mandatory children */
-    oAttr = UA_ObjectAttributes_default;
-    oAttr.description = UA_LOCALIZEDTEXT("en-US", "A red lamp");
-    oAttr.displayName = UA_LOCALIZEDTEXT("en-US", "LampRed");
-    UA_Server_addNode_begin(server, UA_NODECLASS_OBJECT,
-                            UA_NODEID_NUMERIC(1, 30100),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                            UA_QUALIFIEDNAME(1, "LampRed"),
-                            UA_NODEID_NUMERIC(1, 30000),
-                            (const UA_NodeAttributes*)&oAttr, &UA_TYPES[UA_TYPES_OBJECTATTRIBUTES],
-                            NULL, NULL);
-
-    /* Now we can add the IsOn with our own node ID */
-    vAttr = UA_VariableAttributes_default;
-    vAttr.description =  UA_LOCALIZEDTEXT("en-US", "Switch lamp on/off");
-    vAttr.displayName =  UA_LOCALIZEDTEXT("en-US", "IsOn");
-    isOn = UA_FALSE;
-    UA_Variant_setScalar(&vAttr.value, &isOn, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, 30101),
-                              UA_NODEID_NUMERIC(1, 30100),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                              UA_QUALIFIEDNAME(1, "IsOn"), UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                              vAttr, NULL, NULL);
-
-    /* And then we need to call the UA_Server_addNode_finish which adds all the remaining
-     * children and does some further initialization. It will not add the IsNode child,
-     * since a child with the same browse name already exists */
-    UA_Server_addNode_finish(server, UA_NODEID_NUMERIC(1, 30100));
-}
-
-int main(void) {
-    signal(SIGINT,  stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    createMammals(server);
-
-    createCustomInheritance(server);
-
-    /* Run the server */
-    UA_StatusCode retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/server_instantiation.c b/ext/open62541/examples/server_instantiation.c
deleted file mode 100644
index e43ddbe..0000000
--- a/ext/open62541/examples/server_instantiation.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-UA_Boolean running = true;
-static void stopHandler(int sig) {
-    running = false;
-}
-
-int main(void) {
-    signal(SIGINT,  stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    /* Create a rudimentary objectType
-     * 
-     * BaseObjectType
-     * |
-     * +- (OT) MamalType
-     *    + (V) Age
-     *    + (OT) DogType
-     *      |
-     *      + (V) Name
-     */ 
-    UA_StatusCode retval;
-    UA_ObjectTypeAttributes otAttr = UA_ObjectTypeAttributes_default;
-    otAttr.description = UA_LOCALIZEDTEXT("en-US", "A mamal");
-    otAttr.displayName = UA_LOCALIZEDTEXT("en-US", "MamalType");
-    UA_Server_addObjectTypeNode(server, UA_NODEID_NUMERIC(1, 10000),
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                UA_QUALIFIEDNAME(1, "MamalType"), otAttr, NULL, NULL);
-
-    UA_VariableAttributes vAttr = UA_VariableAttributes_default;
-    vAttr.description =  UA_LOCALIZEDTEXT("en-US", "This mamals Age in months");
-    vAttr.displayName =  UA_LOCALIZEDTEXT("en-US", "Age");
-    UA_UInt32 ageVar = 0;
-    UA_Variant_setScalar(&vAttr.value, &ageVar, &UA_TYPES[UA_TYPES_UINT32]);
-    UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, 10001),
-                              UA_NODEID_NUMERIC(1, 10000), UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                              UA_QUALIFIEDNAME(1, "Age"), UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), vAttr, NULL, NULL);
-
-    otAttr = UA_ObjectTypeAttributes_default;
-    otAttr.description = UA_LOCALIZEDTEXT("en-US", "A dog, subtype of mamal");
-    otAttr.displayName = UA_LOCALIZEDTEXT("en-US", "DogType");
-    UA_Server_addObjectTypeNode(server, UA_NODEID_NUMERIC(1, 10002),
-                                UA_NODEID_NUMERIC(1, 10000), UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                UA_QUALIFIEDNAME(1, "DogType"), otAttr, NULL, NULL);
-
-    vAttr = UA_VariableAttributes_default;
-    vAttr.description =  UA_LOCALIZEDTEXT("en-US", "This mamals Age in months");
-    vAttr.displayName =  UA_LOCALIZEDTEXT("en-US", "Name");
-    UA_String defaultName = UA_STRING("unnamed dog");
-    UA_Variant_setScalar(&vAttr.value, &defaultName, &UA_TYPES[UA_TYPES_STRING]);
-    UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, 10003),
-                              UA_NODEID_NUMERIC(1, 10002), UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                              UA_QUALIFIEDNAME(1, "Name"), UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), vAttr, NULL, NULL);
-
-    /* Instatiate a dog named bello:
-     * (O) Objects
-     *   + O Bello <DogType>
-     *     + Age 
-     *     + Name
-     */
-
-    UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-    oAttr.description = UA_LOCALIZEDTEXT("en-US", "A dog named Bello");
-    oAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Bello");
-    UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, 0),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                            UA_QUALIFIEDNAME(1, "Bello"), UA_NODEID_NUMERIC(1, 10002),
-                            oAttr, NULL, NULL);
-
-    retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/server_mainloop.c b/ext/open62541/examples/server_mainloop.c
deleted file mode 100644
index 0fa50e1..0000000
--- a/ext/open62541/examples/server_mainloop.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-UA_Boolean running = true;
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-/* In this example, we integrate the server into an external "mainloop". This
-   can be for example the event-loop used in GUI toolkits, such as Qt or GTK. */
-
-int main(int argc, char** argv) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    /* Should the server networklayer block (with a timeout) until a message
-       arrives or should it return immediately? */
-    UA_Boolean waitInternal = false;
-
-    UA_StatusCode retval = UA_Server_run_startup(server);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    while(running) {
-        /* timeout is the maximum possible delay (in millisec) until the next
-           _iterate call. Otherwise, the server might miss an internal timeout
-           or cannot react to messages with the promised responsiveness. */
-        /* If multicast discovery server is enabled, the timeout does not not consider new input data (requests) on the mDNS socket.
-         * It will be handled on the next call, which may be too late for requesting clients.
-         * if needed, the select with timeout on the multicast socket server->mdnsSocket (see example in mdnsd library)
-         */
-        UA_UInt16 timeout = UA_Server_run_iterate(server, waitInternal);
-
-        /* Now we can use the max timeout to do something else. In this case, we
-           just sleep. (select is used as a platform-independent sleep
-           function.) */
-        struct timeval tv;
-        tv.tv_sec = 0;
-        tv.tv_usec = timeout * 1000;
-        select(0, NULL, NULL, NULL, &tv);
-    }
-    retval = UA_Server_run_shutdown(server);
-
- cleanup:
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/server_repeated_job.c b/ext/open62541/examples/server_repeated_job.c
deleted file mode 100644
index f464780..0000000
--- a/ext/open62541/examples/server_repeated_job.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-static void
-testCallback(UA_Server *server, void *data) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "testcallback");
-}
-
-UA_Boolean running = true;
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-int main(void) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    /* Add a repeated callback to the server */
-    UA_Server_addRepeatedCallback(server, testCallback, NULL, 2000, NULL); /* call every 2 sec */
-
-    UA_StatusCode retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/tutorial_client_events.c b/ext/open62541/examples/tutorial_client_events.c
deleted file mode 100644
index 7440c21..0000000
--- a/ext/open62541/examples/tutorial_client_events.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <open62541/client_subscriptions.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-#include <open62541/util.h>
-
-#include <signal.h>
-
-#ifdef _MSC_VER
-#pragma warning(disable:4996) // warning C4996: 'UA_Client_Subscriptions_addMonitoredEvent': was declared deprecated
-#endif
-
-#ifdef __clang__
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
-
-static UA_Boolean running = true;
-static void stopHandler(int sig) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "received ctrl-c");
-    running = false;
-}
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-
-static void
-handler_events(UA_Client *client, UA_UInt32 subId, void *subContext,
-               UA_UInt32 monId, void *monContext,
-               size_t nEventFields, UA_Variant *eventFields) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "Notification");
-
-    /* The context should point to the monId on the stack */
-    UA_assert(*(UA_UInt32*)monContext == monId);
-
-    for(size_t i = 0; i < nEventFields; ++i) {
-        if(UA_Variant_hasScalarType(&eventFields[i], &UA_TYPES[UA_TYPES_UINT16])) {
-            UA_UInt16 severity = *(UA_UInt16 *)eventFields[i].data;
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "Severity: %u", severity);
-        } else if (UA_Variant_hasScalarType(&eventFields[i], &UA_TYPES[UA_TYPES_LOCALIZEDTEXT])) {
-            UA_LocalizedText *lt = (UA_LocalizedText *)eventFields[i].data;
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                        "Message: '%.*s'", (int)lt->text.length, lt->text.data);
-        }
-        else {
-#ifdef UA_ENABLE_TYPEDESCRIPTION
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                        "Don't know how to handle type: '%s'", eventFields[i].type->typeName);
-#else
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                        "Don't know how to handle type, enable UA_ENABLE_TYPEDESCRIPTION "
-                        "for typename");
-#endif
-        }
-    }
-}
-
-const size_t nSelectClauses = 2;
-
-static UA_SimpleAttributeOperand *
-setupSelectClauses(void) {
-    UA_SimpleAttributeOperand *selectClauses = (UA_SimpleAttributeOperand*)
-        UA_Array_new(nSelectClauses, &UA_TYPES[UA_TYPES_SIMPLEATTRIBUTEOPERAND]);
-    if(!selectClauses)
-        return NULL;
-
-    for(size_t i =0; i<nSelectClauses; ++i) {
-        UA_SimpleAttributeOperand_init(&selectClauses[i]);
-    }
-
-    selectClauses[0].typeDefinitionId = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEEVENTTYPE);
-    selectClauses[0].browsePathSize = 1;
-    selectClauses[0].browsePath = (UA_QualifiedName*)
-        UA_Array_new(selectClauses[0].browsePathSize, &UA_TYPES[UA_TYPES_QUALIFIEDNAME]);
-    if(!selectClauses[0].browsePath) {
-        UA_SimpleAttributeOperand_delete(selectClauses);
-        return NULL;
-    }
-    selectClauses[0].attributeId = UA_ATTRIBUTEID_VALUE;
-    selectClauses[0].browsePath[0] = UA_QUALIFIEDNAME_ALLOC(0, "Message");
-
-    selectClauses[1].typeDefinitionId = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEEVENTTYPE);
-    selectClauses[1].browsePathSize = 1;
-    selectClauses[1].browsePath = (UA_QualifiedName*)
-        UA_Array_new(selectClauses[1].browsePathSize, &UA_TYPES[UA_TYPES_QUALIFIEDNAME]);
-    if(!selectClauses[1].browsePath) {
-        UA_SimpleAttributeOperand_delete(selectClauses);
-        return NULL;
-    }
-    selectClauses[1].attributeId = UA_ATTRIBUTEID_VALUE;
-    selectClauses[1].browsePath[0] = UA_QUALIFIEDNAME_ALLOC(0, "Severity");
-
-    return selectClauses;
-}
-
-#endif
-
-int main(int argc, char *argv[]) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    if(argc < 2) {
-        printf("Usage: tutorial_client_events <opc.tcp://server-url>\n");
-        return EXIT_FAILURE;
-    }
-
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    /* opc.tcp://uademo.prosysopc.com:53530/OPCUA/SimulationServer */
-    /* opc.tcp://opcua.demo-this.com:51210/UA/SampleServer */
-    UA_StatusCode retval = UA_Client_connect(client, argv[1]);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Client_delete(client);
-        return EXIT_FAILURE;
-    }
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    /* Create a subscription */
-    UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();
-    UA_CreateSubscriptionResponse response = UA_Client_Subscriptions_create(client, request,
-                                                                            NULL, NULL, NULL);
-    if(response.responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-        UA_Client_disconnect(client);
-        UA_Client_delete(client);
-        return EXIT_FAILURE;
-    }
-    UA_UInt32 subId = response.subscriptionId;
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "Create subscription succeeded, id %u", subId);
-
-    /* Add a MonitoredItem */
-    UA_MonitoredItemCreateRequest item;
-    UA_MonitoredItemCreateRequest_init(&item);
-    item.itemToMonitor.nodeId = UA_NODEID_NUMERIC(0, 2253); // Root->Objects->Server
-    item.itemToMonitor.attributeId = UA_ATTRIBUTEID_EVENTNOTIFIER;
-    item.monitoringMode = UA_MONITORINGMODE_REPORTING;
-
-    UA_EventFilter filter;
-    UA_EventFilter_init(&filter);
-    filter.selectClauses = setupSelectClauses();
-    filter.selectClausesSize = nSelectClauses;
-
-    item.requestedParameters.filter.encoding = UA_EXTENSIONOBJECT_DECODED;
-    item.requestedParameters.filter.content.decoded.data = &filter;
-    item.requestedParameters.filter.content.decoded.type = &UA_TYPES[UA_TYPES_EVENTFILTER];
-
-    UA_UInt32 monId = 0;
-
-    UA_MonitoredItemCreateResult result =
-        UA_Client_MonitoredItems_createEvent(client, subId,
-                                             UA_TIMESTAMPSTORETURN_BOTH, item,
-                                             &monId, handler_events, NULL);
-
-    if(result.statusCode != UA_STATUSCODE_GOOD) {
-        UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                    "Could not add the MonitoredItem with %s", UA_StatusCode_name(retval));
-        goto cleanup;
-    } else {
-        UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                    "Monitoring 'Root->Objects->Server', id %u", response.subscriptionId);
-    }
-
-    monId = result.monitoredItemId;
-
-    while(running)
-        retval = UA_Client_run_iterate(client, 100);
-
-    /* Delete the subscription */
- cleanup:
-    UA_MonitoredItemCreateResult_clear(&result);
-    UA_Client_Subscriptions_deleteSingle(client, response.subscriptionId);
-    UA_Array_delete(filter.selectClauses, nSelectClauses, &UA_TYPES[UA_TYPES_SIMPLEATTRIBUTEOPERAND]);
-#endif
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/tutorial_client_firststeps.c b/ext/open62541/examples/tutorial_client_firststeps.c
deleted file mode 100644
index 06cc7bd..0000000
--- a/ext/open62541/examples/tutorial_client_firststeps.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-/**
- * Building a Simple Client
- * ------------------------
- * You should already have a basic server from the previous tutorials. open62541
- * provides both a server- and clientside API, so creating a client is as easy as
- * creating a server. Copy the following into a file `myClient.c`: */
-
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <open62541/plugin/log_stdout.h>
-
-#include <stdlib.h>
-
-int main(void) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Client_delete(client);
-        return (int)retval;
-    }
-
-    /* Read the value attribute of the node. UA_Client_readValueAttribute is a
-     * wrapper for the raw read service available as UA_Client_Service_read. */
-    UA_Variant value; /* Variants can hold scalar values and arrays of any type */
-    UA_Variant_init(&value);
-
-    /* NodeId of the variable holding the current time */
-    const UA_NodeId nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME);
-    retval = UA_Client_readValueAttribute(client, nodeId, &value);
-
-    if(retval == UA_STATUSCODE_GOOD &&
-       UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_DATETIME])) {
-        UA_DateTime raw_date = *(UA_DateTime *) value.data;
-        UA_DateTimeStruct dts = UA_DateTime_toStruct(raw_date);
-        UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "date is: %u-%u-%u %u:%u:%u.%03u\n",
-                    dts.day, dts.month, dts.year, dts.hour, dts.min, dts.sec, dts.milliSec);
-    }
-
-    /* Clean up */
-    UA_Variant_clear(&value);
-    UA_Client_delete(client); /* Disconnects the client internally */
-    return EXIT_SUCCESS;
-}
-
-/**
- * Compilation is similar to the server example.
- *
- * .. code-block:: bash
- *
- *     $ gcc -std=c99 open62541.c myClient.c -o myClient
- *
- * In a MinGW environment, the Winsock library must be added.
- *
- * .. code-block:: bash
- *
- *    $ gcc -std=c99 open62541.c myClient.c -lws2_32 -o myClient.exe
- *
- * Further tasks
- * ^^^^^^^^^^^^^
- *
- * - Try to connect to some other OPC UA server by changing
- *   ``opc.tcp://localhost:4840`` to an appropriate address (remember that the
- *   queried node is contained in any OPC UA server).
- *
- * - Try to set the value of the variable node (ns=1,i="the.answer") containing
- *   an ``Int32`` from the example server (which is built in
- *   :doc:`tutorial_server_firststeps`) using "UA_Client_write" function. The
- *   example server needs some more modifications, i.e., changing request types.
- *   The answer can be found in "examples/client.c". */
diff --git a/ext/open62541/examples/tutorial_datatypes.c b/ext/open62541/examples/tutorial_datatypes.c
deleted file mode 100644
index 93c6755..0000000
--- a/ext/open62541/examples/tutorial_datatypes.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-/**
- * .. _types-tutorial:
- *
- * Working with Data Types
- * -----------------------
- *
- * OPC UA defines a type system for values that can be encoded in the protocol
- * messages. This tutorial shows some examples for available data types and
- * their use. See the section on :ref:`types` for the full definitions.
- *
- * Basic Data Handling
- * ^^^^^^^^^^^^^^^^^^^
- * This section shows the basic interaction patterns for data types. Make
- * sure to compare with the type definitions in ``types.h``. */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <stdlib.h>
-
-static void
-variables_basic(void) {
-    /* Int32 */
-    UA_Int32 i = 5;
-    UA_Int32 j;
-    UA_Int32_copy(&i, &j);
-
-    UA_Int32 *ip = UA_Int32_new();
-    UA_Int32_copy(&i, ip);
-    UA_Int32_delete(ip);
-
-    /* String */
-    UA_String s;
-    UA_String_init(&s); /* _init zeroes out the entire memory of the datatype */
-    char *test = "test";
-    s.length = strlen(test);
-    s.data = (UA_Byte*)test;
-
-    UA_String s2;
-    UA_String_copy(&s, &s2);
-    UA_String_clear(&s2); /* Copying heap-allocated the dynamic content */
-
-    UA_String s3 = UA_STRING("test2");
-    UA_String s4 = UA_STRING_ALLOC("test2"); /* Copies the content to the heap */
-    UA_Boolean eq = UA_String_equal(&s3, &s4);
-    UA_String_clear(&s4);
-    if(!eq)
-        return;
-
-    /* Structured Type */
-    UA_ReadRequest rr;
-    UA_init(&rr, &UA_TYPES[UA_TYPES_READREQUEST]); /* Generic method */
-    UA_ReadRequest_init(&rr); /* Shorthand for the previous line */
-
-    rr.requestHeader.timestamp = UA_DateTime_now(); /* Members of a structure */
-
-    rr.nodesToRead = (UA_ReadValueId *)UA_Array_new(5, &UA_TYPES[UA_TYPES_READVALUEID]);
-    rr.nodesToReadSize = 5; /* Array size needs to be made known */
-
-    UA_ReadRequest *rr2 = UA_ReadRequest_new();
-    UA_copy(&rr, rr2, &UA_TYPES[UA_TYPES_READREQUEST]);
-    UA_ReadRequest_clear(&rr);
-    UA_ReadRequest_delete(rr2);
-}
-
-/**
- * NodeIds
- * ^^^^^^^
- * An OPC UA information model is made up of nodes and references between nodes.
- * Every node has a unique :ref:`nodeid`. NodeIds refer to a namespace with an
- * additional identifier value that can be an integer, a string, a guid or a
- * bytestring. */
-
-static void
-variables_nodeids(void) {
-    UA_NodeId id1 = UA_NODEID_NUMERIC(1, 1234);
-    id1.namespaceIndex = 3;
-
-    UA_NodeId id2 = UA_NODEID_STRING(1, "testid"); /* the string is static */
-    UA_Boolean eq = UA_NodeId_equal(&id1, &id2);
-    if(eq)
-        return;
-
-    UA_NodeId id3;
-    UA_NodeId_copy(&id2, &id3);
-    UA_NodeId_clear(&id3);
-
-    UA_NodeId id4 = UA_NODEID_STRING_ALLOC(1, "testid"); /* the string is copied
-                                                            to the heap */
-    UA_NodeId_clear(&id4);
-}
-
-/**
- * Variants
- * ^^^^^^^^
- * The datatype :ref:`variant` belongs to the built-in datatypes of OPC UA and
- * is used as a container type. A variant can hold any other datatype as a
- * scalar (except variant) or as an array. Array variants can additionally
- * denote the dimensionality of the data (e.g. a 2x3 matrix) in an additional
- * integer array. */
-
-static void
-variables_variants(void) {
-    /* Set a scalar value */
-    UA_Variant v;
-    UA_Int32 i = 42;
-    UA_Variant_setScalar(&v, &i, &UA_TYPES[UA_TYPES_INT32]);
-
-    /* Make a copy */
-    UA_Variant v2;
-    UA_Variant_copy(&v, &v2);
-    UA_Variant_clear(&v2);
-
-    /* Set an array value */
-    UA_Variant v3;
-    UA_Double d[9] = {1.0, 2.0, 3.0,
-                      4.0, 5.0, 6.0,
-                      7.0, 8.0, 9.0};
-    UA_Variant_setArrayCopy(&v3, d, 9, &UA_TYPES[UA_TYPES_DOUBLE]);
-
-    /* Set array dimensions */
-    v3.arrayDimensions = (UA_UInt32 *)UA_Array_new(2, &UA_TYPES[UA_TYPES_UINT32]);
-    v3.arrayDimensionsSize = 2;
-    v3.arrayDimensions[0] = 3;
-    v3.arrayDimensions[1] = 3;
-    UA_Variant_clear(&v3);
-}
-
-/** It follows the main function, making use of the above definitions. */
-
-int main(void) {
-    variables_basic();
-    variables_nodeids();
-    variables_variants();
-    return EXIT_SUCCESS;
-}
diff --git a/ext/open62541/examples/tutorial_server_datasource.c b/ext/open62541/examples/tutorial_server_datasource.c
deleted file mode 100644
index 8078297..0000000
--- a/ext/open62541/examples/tutorial_server_datasource.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-/**
- * Connecting a Variable with a Physical Process
- * ---------------------------------------------
- *
- * In OPC UA-based architectures, servers are typically situated near the source
- * of information. In an industrial context, this translates into servers being
- * near the physical process and clients consuming the data at runtime. In the
- * previous tutorial, we saw how to add variables to an OPC UA information
- * model. This tutorial shows how to connect a variable to runtime information,
- * for example from measurements of a physical process. For simplicity, we take
- * the system clock as the underlying "process".
- *
- * The following code snippets are each concerned with a different way of
- * updating variable values at runtime. Taken together, the code snippets define
- * a compilable source file.
- *
- * Updating variables manually
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * As a starting point, assume that a variable for a value of type
- * :ref:`datetime` has been created in the server with the identifier
- * "ns=1,s=current-time". Assuming that our applications gets triggered when a
- * new value arrives from the underlying process, we can just write into the
- * variable. */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-static void
-updateCurrentTime(UA_Server *server) {
-    UA_DateTime now = UA_DateTime_now();
-    UA_Variant value;
-    UA_Variant_setScalar(&value, &now, &UA_TYPES[UA_TYPES_DATETIME]);
-    UA_NodeId currentNodeId = UA_NODEID_STRING(1, "current-time-value-callback");
-    UA_Server_writeValue(server, currentNodeId, value);
-}
-
-static void
-addCurrentTimeVariable(UA_Server *server) {
-    UA_DateTime now = 0;
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    attr.displayName = UA_LOCALIZEDTEXT("en-US", "Current time - value callback");
-    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&attr.value, &now, &UA_TYPES[UA_TYPES_DATETIME]);
-
-    UA_NodeId currentNodeId = UA_NODEID_STRING(1, "current-time-value-callback");
-    UA_QualifiedName currentName = UA_QUALIFIEDNAME(1, "current-time-value-callback");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_NodeId variableTypeNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE);
-    UA_Server_addVariableNode(server, currentNodeId, parentNodeId,
-                              parentReferenceNodeId, currentName,
-                              variableTypeNodeId, attr, NULL, NULL);
-
-    updateCurrentTime(server);
-}
-
-/**
- * Variable Value Callback
- * ^^^^^^^^^^^^^^^^^^^^^^^
- *
- * When a value changes continuously, such as the system time, updating the
- * value in a tight loop would take up a lot of resources. Value callbacks allow
- * to synchronize a variable value with an external representation. They attach
- * callbacks to the variable that are executed before every read and after every
- * write operation. */
-
-static void
-beforeReadTime(UA_Server *server,
-               const UA_NodeId *sessionId, void *sessionContext,
-               const UA_NodeId *nodeid, void *nodeContext,
-               const UA_NumericRange *range, const UA_DataValue *data) {
-    updateCurrentTime(server);
-}
-
-static void
-afterWriteTime(UA_Server *server,
-               const UA_NodeId *sessionId, void *sessionContext,
-               const UA_NodeId *nodeId, void *nodeContext,
-               const UA_NumericRange *range, const UA_DataValue *data) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                "The variable was updated");
-}
-
-static void
-addValueCallbackToCurrentTimeVariable(UA_Server *server) {
-    UA_NodeId currentNodeId = UA_NODEID_STRING(1, "current-time-value-callback");
-    UA_ValueCallback callback ;
-    callback.onRead = beforeReadTime;
-    callback.onWrite = afterWriteTime;
-    UA_Server_setVariableNode_valueCallback(server, currentNodeId, callback);
-}
-
-/**
- * Variable Data Sources
- * ^^^^^^^^^^^^^^^^^^^^^
- *
- * With value callbacks, the value is still stored in the variable node.
- * So-called data sources go one step further. The server redirects every read
- * and write request to a callback function. Upon reading, the callback provides
- * copy of the current value. Internally, the data source needs to implement its
- * own memory management. */
-
-static UA_StatusCode
-readCurrentTime(UA_Server *server,
-                const UA_NodeId *sessionId, void *sessionContext,
-                const UA_NodeId *nodeId, void *nodeContext,
-                UA_Boolean sourceTimeStamp, const UA_NumericRange *range,
-                UA_DataValue *dataValue) {
-    UA_DateTime now = UA_DateTime_now();
-    UA_Variant_setScalarCopy(&dataValue->value, &now,
-                             &UA_TYPES[UA_TYPES_DATETIME]);
-    dataValue->hasValue = true;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-writeCurrentTime(UA_Server *server,
-                 const UA_NodeId *sessionId, void *sessionContext,
-                 const UA_NodeId *nodeId, void *nodeContext,
-                 const UA_NumericRange *range, const UA_DataValue *data) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                "Changing the system time is not implemented");
-    return UA_STATUSCODE_BADINTERNALERROR;
-}
-
-static void
-addCurrentTimeDataSourceVariable(UA_Server *server) {
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    attr.displayName = UA_LOCALIZEDTEXT("en-US", "Current time - data source");
-    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-
-    UA_NodeId currentNodeId = UA_NODEID_STRING(1, "current-time-datasource");
-    UA_QualifiedName currentName = UA_QUALIFIEDNAME(1, "current-time-datasource");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_NodeId variableTypeNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE);
-
-    UA_DataSource timeDataSource;
-    timeDataSource.read = readCurrentTime;
-    timeDataSource.write = writeCurrentTime;
-    UA_Server_addDataSourceVariableNode(server, currentNodeId, parentNodeId,
-                                        parentReferenceNodeId, currentName,
-                                        variableTypeNodeId, attr,
-                                        timeDataSource, NULL, NULL);
-}
-
-/** It follows the main server code, making use of the above definitions. */
-
-static volatile UA_Boolean running = true;
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-int main(void) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    addCurrentTimeVariable(server);
-    addValueCallbackToCurrentTimeVariable(server);
-    addCurrentTimeDataSourceVariable(server);
-
-    UA_StatusCode retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/tutorial_server_events.c b/ext/open62541/examples/tutorial_server_events.c
deleted file mode 100644
index b08872a..0000000
--- a/ext/open62541/examples/tutorial_server_events.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-/**
- * Generating events
- * -----------------
- * To make sense of the many things going on in a server, monitoring items can be useful. Though in many cases, data
- * change does not convey enough information to be the optimal solution. Events can be generated at any time,
- * hold a lot of information and can be filtered so the client only receives the specific attributes he is interested in.
- *
- * Emitting events by calling methods
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * The following example will be based on the server method tutorial. We will be
- * creating a method node which generates an event from the server node.
- *
- * The event we want to generate should be very simple. Since the `BaseEventType` is abstract,
- * we will have to create our own event type. `EventTypes` are saved internally as `ObjectTypes`,
- * so add the type as you would a new `ObjectType`. */
-
-static UA_NodeId eventType;
-
-static UA_StatusCode
-addNewEventType(UA_Server *server) {
-    UA_ObjectTypeAttributes attr = UA_ObjectTypeAttributes_default;
-    attr.displayName = UA_LOCALIZEDTEXT("en-US", "SimpleEventType");
-    attr.description = UA_LOCALIZEDTEXT("en-US", "The simple event type we created");
-    return UA_Server_addObjectTypeNode(server, UA_NODEID_NULL,
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_BASEEVENTTYPE),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                       UA_QUALIFIEDNAME(0, "SimpleEventType"),
-                                       attr, NULL, &eventType);
-}
-
-/**
- * Setting up an event
- * ^^^^^^^^^^^^^^^^^^^
- * In order to set up the event, we can first use ``UA_Server_createEvent`` to give us a node representation of the event.
- * All we need for this is our `EventType`. Once we have our event node, which is saved internally as an `ObjectNode`,
- * we can define the attributes the event has the same way we would define the attributes of an object node. It is not
- * necessary to define the attributes `EventId`, `ReceiveTime`, `SourceNode` or `EventType` since these are set
- * automatically by the server. In this example, we will be setting the fields 'Message' and 'Severity' in addition
- * to `Time` which is needed to make the example UaExpert compliant.
- */
-static UA_StatusCode
-setUpEvent(UA_Server *server, UA_NodeId *outId) {
-    UA_StatusCode retval = UA_Server_createEvent(server, eventType, outId);
-    if (retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                       "createEvent failed. StatusCode %s", UA_StatusCode_name(retval));
-        return retval;
-    }
-
-    /* Set the Event Attributes */
-    /* Setting the Time is required or else the event will not show up in UAExpert! */
-    UA_DateTime eventTime = UA_DateTime_now();
-    UA_Server_writeObjectProperty_scalar(server, *outId, UA_QUALIFIEDNAME(0, "Time"),
-                                         &eventTime, &UA_TYPES[UA_TYPES_DATETIME]);
-
-    UA_UInt16 eventSeverity = 100;
-    UA_Server_writeObjectProperty_scalar(server, *outId, UA_QUALIFIEDNAME(0, "Severity"),
-                                         &eventSeverity, &UA_TYPES[UA_TYPES_UINT16]);
-
-    UA_LocalizedText eventMessage = UA_LOCALIZEDTEXT("en-US", "An event has been generated.");
-    UA_Server_writeObjectProperty_scalar(server, *outId, UA_QUALIFIEDNAME(0, "Message"),
-                                         &eventMessage, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-
-    UA_String eventSourceName = UA_STRING("Server");
-    UA_Server_writeObjectProperty_scalar(server, *outId, UA_QUALIFIEDNAME(0, "SourceName"),
-                                         &eventSourceName, &UA_TYPES[UA_TYPES_STRING]);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Triggering an event
- * ^^^^^^^^^^^^^^^^^^^
- * First a node representing an event is generated using ``setUpEvent``. Once our event is good to go, we specify
- * a node which emits the event - in this case the server node. We can use ``UA_Server_triggerEvent`` to trigger our
- * event onto said node. Passing ``NULL`` as the second-last argument means we will not receive the `EventId`.
- * The last boolean argument states whether the node should be deleted. */
-static UA_StatusCode
-generateEventMethodCallback(UA_Server *server,
-                         const UA_NodeId *sessionId, void *sessionHandle,
-                         const UA_NodeId *methodId, void *methodContext,
-                         const UA_NodeId *objectId, void *objectContext,
-                         size_t inputSize, const UA_Variant *input,
-                         size_t outputSize, UA_Variant *output) {
-
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "Creating event");
-
-    /* set up event */
-    UA_NodeId eventNodeId;
-    UA_StatusCode retval = setUpEvent(server, &eventNodeId);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                       "Creating event failed. StatusCode %s", UA_StatusCode_name(retval));
-        return retval;
-    }
-
-    retval = UA_Server_triggerEvent(server, eventNodeId,
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER),
-                                    NULL, UA_TRUE);
-    if(retval != UA_STATUSCODE_GOOD)
-        UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, 
-                       "Triggering event failed. StatusCode %s", UA_StatusCode_name(retval));
-
-    return retval;
-}
-
-/**
- * Now, all that is left to do is to create a method node which uses our callback. We do not
- * require any input and as output we will be using the `EventId` we receive from ``triggerEvent``. The `EventId` is
- * generated by the server internally and is a random unique ID which identifies that specific event.
- *
- * This method node will be added to a basic server setup.
- */
-
-static void
-addGenerateEventMethod(UA_Server *server) {
-    UA_MethodAttributes generateAttr = UA_MethodAttributes_default;
-    generateAttr.description = UA_LOCALIZEDTEXT("en-US","Generate an event.");
-    generateAttr.displayName = UA_LOCALIZEDTEXT("en-US","Generate Event");
-    generateAttr.executable = true;
-    generateAttr.userExecutable = true;
-    UA_Server_addMethodNode(server, UA_NODEID_NUMERIC(1, 62541),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASORDEREDCOMPONENT),
-                            UA_QUALIFIEDNAME(1, "Generate Event"),
-                            generateAttr, &generateEventMethodCallback,
-                            0, NULL, 0, NULL, NULL, NULL);
-}
-
-/** It follows the main server code, making use of the above definitions. */
-
-static volatile UA_Boolean running = true;
-static void stopHandler(int sig) {
-    running = false;
-}
-
-int main (void) {
-    /* default server values */
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    addNewEventType(server);
-    addGenerateEventMethod(server);
-
-    UA_StatusCode retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/tutorial_server_firststeps.c b/ext/open62541/examples/tutorial_server_firststeps.c
deleted file mode 100644
index f3db2ce..0000000
--- a/ext/open62541/examples/tutorial_server_firststeps.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-/**
- * Building a Simple Server
- * ------------------------
- *
- * This series of tutorial guide you through your first steps with open62541.
- * For compiling the examples, you need a compiler (MS Visual Studio 2015 or
- * newer, GCC, Clang and MinGW32 are all known to be working). The compilation
- * instructions are given for GCC but should be straightforward to adapt.
- *
- * It will also be very helpful to install an OPC UA Client with a graphical
- * frontend, such as UAExpert by Unified Automation. That will enable you to
- * examine the information model of any OPC UA server.
- *
- * To get started, downdload the open62541 single-file release from
- * http://open62541.org or generate it according to the :ref:`build instructions
- * <building>` with the "amalgamation" option enabled. From now on, we assume
- * you have the ``open62541.c/.h`` files in the current folder. Now create a new
- * C source-file called ``myServer.c`` with the following content: */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-static volatile UA_Boolean running = true;
-static void stopHandler(int sig) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "received ctrl-c");
-    running = false;
-}
-
-int main(void) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    UA_StatusCode retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
-
-/**
- * This is all that is needed for a simple OPC UA server. With the GCC compiler,
- * the following command produces an executable:
- *
- * .. code-block:: bash
- *
- *    $ gcc -std=c99 open62541.c myServer.c -o myServer
- *
- * In a MinGW environment, the Winsock library must be added.
- *
- * .. code-block:: bash
- *
- *    $ gcc -std=c99 open62541.c myServer.c -lws2_32 -o myServer.exe
- *
- * Now start the server (stop with ctrl-c):
- *
- * .. code-block:: bash
- *
- *    $ ./myServer
- *
- * You have now compiled and run your first OPC UA server. You can go ahead and
- * browse the information model with client. The server is listening on
- * ``opc.tcp://localhost:4840``. In the next two sections, we will continue to
- * explain the different parts of the code in detail.
- *
- * Server Configuration and Plugins
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- *
- * *open62541* provides a flexible framework for building OPC UA servers and
- * clients. The goals is to have a core library that accommodates for all use
- * cases and runs on all platforms. Users can then adjust the library to fit
- * their use case via configuration and by developing (platform-specific)
- * plugins. The core library is based on C99 only and does not even require
- * basic POSIX support. For example, the lowlevel networking code is implemented
- * as an exchangeable plugin. But don't worry. *open62541* provides plugin
- * implementations for most platforms and sensible default configurations
- * out-of-the-box.
- * 
- * In the above server code, we simply take the default server configuration and
- * add a single TCP network layer that is listerning on port 4840.
- *
- * Server Lifecycle
- * ^^^^^^^^^^^^^^^^
- *
- * The code in this example shows the three parts for server lifecycle
- * management: Creating a server, running the server, and deleting the server.
- * Creating and deleting a server is trivial once the configuration is set up.
- * The server is started with ``UA_Server_run``. Internally, the server then
- * uses timeouts to schedule regular tasks. Between the timeouts, the server
- * listens on the network layer for incoming messages.
- *
- * You might ask how the server knows when to stop running. For this, we have
- * created a global variable ``running``. Furthermore, we have registered the
- * method ``stopHandler`` that catches the signal (interrupt) the program
- * receives when the operating systems tries to close it. This happens for
- * example when you press ctrl-c in a terminal program. The signal handler then
- * sets the variable ``running`` to false and the server shuts down once it
- * takes back control.
- *
- * In order to integrated OPC UA in a single-threaded application with its own
- * mainloop (for example provided by a GUI toolkit), one can alternatively drive
- * the server manually. See the section of the server documentation on
- * :ref:`server-lifecycle` for details.
- *
- * The server configuration and lifecycle management is needed for all servers.
- * We will use it in the following tutorials without further comment.
- */
diff --git a/ext/open62541/examples/tutorial_server_historicaldata.c b/ext/open62541/examples/tutorial_server_historicaldata.c
deleted file mode 100644
index 26c8945..0000000
--- a/ext/open62541/examples/tutorial_server_historicaldata.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- * Copyright 2019 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
- */
-
-#include <open62541/plugin/historydata/history_data_backend_memory.h>
-#include <open62541/plugin/historydata/history_data_gathering_default.h>
-#include <open62541/plugin/historydata/history_database_default.h>
-#include <open62541/plugin/historydatabase.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-static volatile UA_Boolean running = true;
-static void stopHandler(int sign) {
-    (void)sign;
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-int main(void) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    /* We need a gathering for the plugin to constuct.
-     * The UA_HistoryDataGathering is responsible to collect data and store it to the database.
-     * We will use this gathering for one node, only. initialNodeIdStoreSize = 1
-     * The store will grow if you register more than one node, but this is expensive. */
-    UA_HistoryDataGathering gathering = UA_HistoryDataGathering_Default(1);
-
-    /* We set the responsible plugin in the configuration. UA_HistoryDatabase is
-     * the main plugin which handles the historical data service. */
-    config->historyDatabase = UA_HistoryDatabase_default(gathering);
-
-    /* Define the attribute of the uint32 variable node */
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    UA_UInt32 myUint32 = 40;
-    UA_Variant_setScalar(&attr.value, &myUint32, &UA_TYPES[UA_TYPES_UINT32]);
-    attr.description = UA_LOCALIZEDTEXT("en-US","myUintValue");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","myUintValue");
-    attr.dataType = UA_TYPES[UA_TYPES_UINT32].typeId;
-    /* We set the access level to also support history read
-     * This is what will be reported to clients */
-    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE | UA_ACCESSLEVELMASK_HISTORYREAD;
-    /* We also set this node to historizing, so the server internals also know from it. */
-    attr.historizing = true;
-
-    /* Add the variable node to the information model */
-    UA_NodeId uint32NodeId = UA_NODEID_STRING(1, "myUintValue");
-    UA_QualifiedName uint32Name = UA_QUALIFIEDNAME(1, "myUintValue");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_NodeId outNodeId;
-    UA_NodeId_init(&outNodeId);
-    UA_StatusCode retval = UA_Server_addVariableNode(server,
-                                                     uint32NodeId,
-                                                     parentNodeId,
-                                                     parentReferenceNodeId,
-                                                     uint32Name,
-                                                     UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                                     attr,
-                                                     NULL,
-                                                     &outNodeId);
-
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                "UA_Server_addVariableNode %s", UA_StatusCode_name(retval));
-
-    /* Now we define the settings for our node */
-    UA_HistorizingNodeIdSettings setting;
-
-    /* There is a memory based database plugin. We will use that. We just
-     * reserve space for 3 nodes with 100 values each. This will also
-     * automaticaly grow if needed, but that is expensive, because all data must
-     * be copied. */
-    setting.historizingBackend = UA_HistoryDataBackend_Memory(3, 100);
-
-    /* We want the server to serve a maximum of 100 values per request. This
-     * value depend on the plattform you are running the server. A big server
-     * can serve more values, smaller ones less. */
-    setting.maxHistoryDataResponseSize = 100;
-
-    /* If we have a sensor which do not report updates
-     * and need to be polled we change the setting like that.
-     * The polling interval in ms.
-     *
-    setting.pollingInterval = 100;
-     *
-     * Set the update strategie to polling.
-     *
-    setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_POLL;
-     */
-
-    /* If you want to insert the values to the database yourself, we can set the user strategy here.
-     * This is useful if you for example want a value stored, if a defined delta is reached.
-     * Then you should use a local monitored item with a fuzziness and store the value in the callback.
-     *
-    setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_USER;
-     */
-
-    /* We want the values stored in the database, when the nodes value is
-     * set. */
-    setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_VALUESET;
-
-    /* At the end we register the node for gathering data in the database. */
-    retval = gathering.registerNodeId(server, gathering.context, &outNodeId, setting);
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "registerNodeId %s", UA_StatusCode_name(retval));
-
-    /* If you use UA_HISTORIZINGUPDATESTRATEGY_POLL, then start the polling.
-     *
-    retval = gathering.startPoll(server, gathering.context, &outNodeId);
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "startPoll %s", UA_StatusCode_name(retval));
-    */
-    retval = UA_Server_run(server, &running);
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "UA_Server_run %s", UA_StatusCode_name(retval));
-    /*
-     * If you use UA_HISTORIZINGUPDATESTRATEGY_POLL, then stop the polling.
-     *
-    retval = gathering.stopPoll(server, gathering.context, &outNodeId);
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "stopPoll %s", UA_StatusCode_name(retval));
-    */
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/tutorial_server_method.c b/ext/open62541/examples/tutorial_server_method.c
deleted file mode 100644
index e83bac5..0000000
--- a/ext/open62541/examples/tutorial_server_method.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-/**
- * Adding Methods to Objects
- * -------------------------
- *
- * An object in an OPC UA information model may contain methods similar to
- * objects in a programming language. Methods are represented by a MethodNode.
- * Note that several objects may reference the same MethodNode. When an object
- * type is instantiated, a reference to the method is added instead of copying
- * the MethodNode. Therefore, the identifier of the context object is always
- * explicitly stated when a method is called.
- *
- * The method callback takes as input a custom data pointer attached to the
- * method node, the identifier of the object from which the method is called,
- * and two arrays for the input and output arguments. The input and output
- * arguments are all of type :ref:`variant`. Each variant may in turn contain a
- * (multi-dimensional) array or scalar of any data type.
- *
- * Constraints for the method arguments are defined in terms of data type, value
- * rank and array dimension (similar to variable definitions). The argument
- * definitions are stored in child VariableNodes of the MethodNode with the
- * respective BrowseNames ``(0, "InputArguments")`` and ``(0,
- * "OutputArguments")``.
- *
- * Example: Hello World Method
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * The method takes a string scalar and returns a string scalar with "Hello "
- * prepended. The type and length of the input arguments is checked internally
- * by the SDK, so that we don't have to verify the arguments in the callback. */
-
-#include <open62541/client_config_default.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-static UA_StatusCode
-helloWorldMethodCallback(UA_Server *server,
-                         const UA_NodeId *sessionId, void *sessionHandle,
-                         const UA_NodeId *methodId, void *methodContext,
-                         const UA_NodeId *objectId, void *objectContext,
-                         size_t inputSize, const UA_Variant *input,
-                         size_t outputSize, UA_Variant *output) {
-    UA_String *inputStr = (UA_String*)input->data;
-    UA_String tmp = UA_STRING_ALLOC("Hello ");
-    if(inputStr->length > 0) {
-        tmp.data = (UA_Byte *)UA_realloc(tmp.data, tmp.length + inputStr->length);
-        memcpy(&tmp.data[tmp.length], inputStr->data, inputStr->length);
-        tmp.length += inputStr->length;
-    }
-    UA_Variant_setScalarCopy(output, &tmp, &UA_TYPES[UA_TYPES_STRING]);
-    UA_String_clear(&tmp);
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Hello World was called");
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-addHellWorldMethod(UA_Server *server) {
-    UA_Argument inputArgument;
-    UA_Argument_init(&inputArgument);
-    inputArgument.description = UA_LOCALIZEDTEXT("en-US", "A String");
-    inputArgument.name = UA_STRING("MyInput");
-    inputArgument.dataType = UA_TYPES[UA_TYPES_STRING].typeId;
-    inputArgument.valueRank = UA_VALUERANK_SCALAR;
-
-    UA_Argument outputArgument;
-    UA_Argument_init(&outputArgument);
-    outputArgument.description = UA_LOCALIZEDTEXT("en-US", "A String");
-    outputArgument.name = UA_STRING("MyOutput");
-    outputArgument.dataType = UA_TYPES[UA_TYPES_STRING].typeId;
-    outputArgument.valueRank = UA_VALUERANK_SCALAR;
-
-    UA_MethodAttributes helloAttr = UA_MethodAttributes_default;
-    helloAttr.description = UA_LOCALIZEDTEXT("en-US","Say `Hello World`");
-    helloAttr.displayName = UA_LOCALIZEDTEXT("en-US","Hello World");
-    helloAttr.executable = true;
-    helloAttr.userExecutable = true;
-    UA_Server_addMethodNode(server, UA_NODEID_NUMERIC(1,62541),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASORDEREDCOMPONENT),
-                            UA_QUALIFIEDNAME(1, "hello world"),
-                            helloAttr, &helloWorldMethodCallback,
-                            1, &inputArgument, 1, &outputArgument, NULL, NULL);
-}
-
-/**
- * Increase Array Values Method
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * The method takes an array of 5 integers and a scalar as input. It returns a
- * copy of the array with every entry increased by the scalar. */
-
-static UA_StatusCode
-IncInt32ArrayMethodCallback(UA_Server *server,
-                            const UA_NodeId *sessionId, void *sessionContext,
-                            const UA_NodeId *methodId, void *methodContext,
-                            const UA_NodeId *objectId, void *objectContext,
-                            size_t inputSize, const UA_Variant *input,
-                            size_t outputSize, UA_Variant *output) {
-    UA_Int32 *inputArray = (UA_Int32*)input[0].data;
-    UA_Int32 delta = *(UA_Int32*)input[1].data;
-
-    /* Copy the input array */
-    UA_StatusCode retval = UA_Variant_setArrayCopy(output, inputArray, 5,
-                                                   &UA_TYPES[UA_TYPES_INT32]);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Increate the elements */
-    UA_Int32 *outputArray = (UA_Int32*)output->data;
-    for(size_t i = 0; i < input->arrayLength; i++)
-        outputArray[i] = inputArray[i] + delta;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-addIncInt32ArrayMethod(UA_Server *server) {
-    /* Two input arguments */
-    UA_Argument inputArguments[2];
-    UA_Argument_init(&inputArguments[0]);
-    inputArguments[0].description = UA_LOCALIZEDTEXT("en-US", "int32[5] array");
-    inputArguments[0].name = UA_STRING("int32 array");
-    inputArguments[0].dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    inputArguments[0].valueRank = UA_VALUERANK_ONE_DIMENSION;
-    UA_UInt32 pInputDimension = 5;
-    inputArguments[0].arrayDimensionsSize = 1;
-    inputArguments[0].arrayDimensions = &pInputDimension;
-
-    UA_Argument_init(&inputArguments[1]);
-    inputArguments[1].description = UA_LOCALIZEDTEXT("en-US", "int32 delta");
-    inputArguments[1].name = UA_STRING("int32 delta");
-    inputArguments[1].dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    inputArguments[1].valueRank = UA_VALUERANK_SCALAR;
-
-    /* One output argument */
-    UA_Argument outputArgument;
-    UA_Argument_init(&outputArgument);
-    outputArgument.description = UA_LOCALIZEDTEXT("en-US", "int32[5] array");
-    outputArgument.name = UA_STRING("each entry is incremented by the delta");
-    outputArgument.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    outputArgument.valueRank = UA_VALUERANK_ONE_DIMENSION;
-    UA_UInt32 pOutputDimension = 5;
-    outputArgument.arrayDimensionsSize = 1;
-    outputArgument.arrayDimensions = &pOutputDimension;
-
-    /* Add the method node */
-    UA_MethodAttributes incAttr = UA_MethodAttributes_default;
-    incAttr.description = UA_LOCALIZEDTEXT("en-US", "IncInt32ArrayValues");
-    incAttr.displayName = UA_LOCALIZEDTEXT("en-US", "IncInt32ArrayValues");
-    incAttr.executable = true;
-    incAttr.userExecutable = true;
-    UA_Server_addMethodNode(server, UA_NODEID_STRING(1, "IncInt32ArrayValues"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                            UA_QUALIFIEDNAME(1, "IncInt32ArrayValues"),
-                            incAttr, &IncInt32ArrayMethodCallback,
-                            2, inputArguments, 1, &outputArgument,
-                            NULL, NULL);
-}
-
-/** It follows the main server code, making use of the above definitions. */
-
-static volatile UA_Boolean running = true;
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-int main(void) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    addHellWorldMethod(server);
-    addIncInt32ArrayMethod(server);
-
-    UA_StatusCode retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/tutorial_server_monitoreditems.c b/ext/open62541/examples/tutorial_server_monitoreditems.c
deleted file mode 100644
index 351bad1..0000000
--- a/ext/open62541/examples/tutorial_server_monitoreditems.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-/**
- * Observing Attributes with Local MonitoredItems
- * ----------------------------------------------
- *
- * A client that is interested in the current value of a variable does not need
- * to regularly poll the variable. Instead, he can use the Subscription
- * mechanism to be notified about changes.
- *
- * So-called MonitoredItems define which values (node attributes) and events the
- * client wants to monitor. Under the right conditions, a notification is
- * created and added to the Subscription. The notifications currently in the
- * queue are regularly send to the client.
- *
- * The local user can add MonitoredItems as well. Locally, the MonitoredItems to
- * not go via a Subscription and each have an individual callback method and a
- * context pointer.
- */
-
-#include <open62541/client_subscriptions.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-static void
-dataChangeNotificationCallback(UA_Server *server, UA_UInt32 monitoredItemId,
-                               void *monitoredItemContext, const UA_NodeId *nodeId,
-                               void *nodeContext, UA_UInt32 attributeId,
-                               const UA_DataValue *value) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "Received Notification");
-}
-
-static void
-addMonitoredItemToCurrentTimeVariable(UA_Server *server) {
-    UA_NodeId currentTimeNodeId =
-        UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME);
-    UA_MonitoredItemCreateRequest monRequest =
-        UA_MonitoredItemCreateRequest_default(currentTimeNodeId);
-    monRequest.requestedParameters.samplingInterval = 100.0; /* 100 ms interval */
-    UA_Server_createDataChangeMonitoredItem(server, UA_TIMESTAMPSTORETURN_SOURCE,
-                                            monRequest, NULL, dataChangeNotificationCallback);
-}
-
-/** It follows the main server code, making use of the above definitions. */
-
-static volatile UA_Boolean running = true;
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-int main(void) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    addMonitoredItemToCurrentTimeVariable(server);
-
-    UA_StatusCode retval = UA_Server_run(server, &running);
-    UA_Server_delete(server);
-
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/tutorial_server_object.c b/ext/open62541/examples/tutorial_server_object.c
deleted file mode 100644
index 23f19f1..0000000
--- a/ext/open62541/examples/tutorial_server_object.c
+++ /dev/null
@@ -1,336 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-/**
- * Working with Objects and Object Types
- * -------------------------------------
- *
- * Using objects to structure information models
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Assume a situation where we want to model a set of pumps and their runtime
- * state in an OPC UA information model. Of course, all pump representations
- * should follow the same basic structure, For example, we might have graphical
- * representation of pumps in a SCADA visualisation that shall be resuable for
- * all pumps.
- *
- * Following the object-oriented programming paradigm, every pump is represented
- * by an object with the following layout:
- *
- * .. graphviz::
- *
- *    digraph tree {
- *
- *    fixedsize=true;
- *    node [width=2, height=0, shape=box, fillcolor="#E5E5E5", concentrate=true]
- *
- *    node_root [label=< <I>ObjectNode</I><BR/>Pump >]
- *
- *    { rank=same
- *      point_1 [shape=point]
- *      node_1 [label=< <I>VariableNode</I><BR/>ManufacturerName >] }
- *    node_root -> point_1 [arrowhead=none]
- *    point_1 -> node_1 [label="hasComponent"]
- *
- *    { rank=same
- *      point_2 [shape=point]
- *      node_2 [label=< <I>VariableNode</I><BR/>ModelName >] }
- *    point_1 -> point_2 [arrowhead=none]
- *    point_2 -> node_2 [label="hasComponent"]
- *
- *    {  rank=same
- *       point_4 [shape=point]
- *       node_4 [label=< <I>VariableNode</I><BR/>Status >] }
- *    point_2 -> point_4 [arrowhead=none]
- *    point_4 -> node_4 [label="hasComponent"]
- *
- *    {  rank=same
- *       point_5 [shape=point]
- *       node_5 [label=< <I>VariableNode</I><BR/>MotorRPM >] }
- *    point_4 -> point_5 [arrowhead=none]
- *    point_5 -> node_5 [label="hasComponent"]
- *
- *    }
- *
- * The following code manually defines a pump and its member variables. We omit
- * setting constraints on the variable values as this is not the focus of this
- * tutorial and was already covered. */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-
-static void
-manuallyDefinePump(UA_Server *server) {
-    UA_NodeId pumpId; /* get the nodeid assigned by the server */
-    UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-    oAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Pump (Manual)");
-    UA_Server_addObjectNode(server, UA_NODEID_NULL,
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                            UA_QUALIFIEDNAME(1, "Pump (Manual)"), UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                            oAttr, NULL, &pumpId);
-
-    UA_VariableAttributes mnAttr = UA_VariableAttributes_default;
-    UA_String manufacturerName = UA_STRING("Pump King Ltd.");
-    UA_Variant_setScalar(&mnAttr.value, &manufacturerName, &UA_TYPES[UA_TYPES_STRING]);
-    mnAttr.displayName = UA_LOCALIZEDTEXT("en-US", "ManufacturerName");
-    UA_Server_addVariableNode(server, UA_NODEID_NULL, pumpId,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                              UA_QUALIFIEDNAME(1, "ManufacturerName"),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), mnAttr, NULL, NULL);
-
-    UA_VariableAttributes modelAttr = UA_VariableAttributes_default;
-    UA_String modelName = UA_STRING("Mega Pump 3000");
-    UA_Variant_setScalar(&modelAttr.value, &modelName, &UA_TYPES[UA_TYPES_STRING]);
-    modelAttr.displayName = UA_LOCALIZEDTEXT("en-US", "ModelName");
-    UA_Server_addVariableNode(server, UA_NODEID_NULL, pumpId,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                              UA_QUALIFIEDNAME(1, "ModelName"),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), modelAttr, NULL, NULL);
-
-    UA_VariableAttributes statusAttr = UA_VariableAttributes_default;
-    UA_Boolean status = true;
-    UA_Variant_setScalar(&statusAttr.value, &status, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    statusAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Status");
-    UA_Server_addVariableNode(server, UA_NODEID_NULL, pumpId,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                              UA_QUALIFIEDNAME(1, "Status"),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), statusAttr, NULL, NULL);
-
-    UA_VariableAttributes rpmAttr = UA_VariableAttributes_default;
-    UA_Double rpm = 50.0;
-    UA_Variant_setScalar(&rpmAttr.value, &rpm, &UA_TYPES[UA_TYPES_DOUBLE]);
-    rpmAttr.displayName = UA_LOCALIZEDTEXT("en-US", "MotorRPM");
-    UA_Server_addVariableNode(server, UA_NODEID_NULL, pumpId,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                              UA_QUALIFIEDNAME(1, "MotorRPMs"),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), rpmAttr, NULL, NULL);
-}
-
-/**
- * Object types, type hierarchies and instantiation
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Building up each object manually requires us to write a lot of code.
- * Furthermore, there is no way for clients to detect that an object represents
- * a pump. (We might use naming conventions or similar to detect pumps. But
- * that's not exactly a clean solution.) Furthermore, we might have more devices
- * than just pumps. And we require all devices to share some common structure.
- * The solution is to define ObjectTypes in a hierarchy with inheritance
- * relations.
- *
- * .. graphviz::
- *
- *    digraph tree {
- *
- *    fixedsize=true;
- *    node [width=2, height=0, shape=box, fillcolor="#E5E5E5", concentrate=true]
- *
- *    node_root [label=< <I>ObjectTypeNode</I><BR/>Device >]
- *
- *    { rank=same
- *      point_1 [shape=point]
- *      node_1 [label=< <I>VariableNode</I><BR/>ManufacturerName<BR/>(mandatory) >] }
- *    node_root -> point_1 [arrowhead=none]
- *    point_1 -> node_1 [label="hasComponent"]
- *
- *    { rank=same
- *      point_2 [shape=point]
- *      node_2 [label=< <I>VariableNode</I><BR/>ModelName >] }
- *    point_1 -> point_2 [arrowhead=none]
- *    point_2 -> node_2 [label="hasComponent"]
- *
- *    {  rank=same
- *       point_3 [shape=point]
- *       node_3 [label=< <I>ObjectTypeNode</I><BR/>Pump >] }
- *    point_2 -> point_3 [arrowhead=none]
- *    point_3 -> node_3 [label="hasSubtype"]
- *
- *    {  rank=same
- *       point_4 [shape=point]
- *       node_4 [label=< <I>VariableNode</I><BR/>Status<BR/>(mandatory) >] }
- *    node_3 -> point_4 [arrowhead=none]
- *    point_4 -> node_4 [label="hasComponent"]
- *
- *    {  rank=same
- *       point_5 [shape=point]
- *       node_5 [label=< <I>VariableNode</I><BR/>MotorRPM >] }
- *    point_4 -> point_5 [arrowhead=none]
- *    point_5 -> node_5 [label="hasComponent"]
- *
- *    }
- *
- * Children that are marked mandatory are automatically instantiated together
- * with the parent object. This is indicated by a `hasModellingRule` reference
- * to an object that representes the `mandatory` modelling rule. */
-
-/* predefined identifier for later use */
-UA_NodeId pumpTypeId = {1, UA_NODEIDTYPE_NUMERIC, {1001}};
-
-static void
-defineObjectTypes(UA_Server *server) {
-    /* Define the object type for "Device" */
-    UA_NodeId deviceTypeId; /* get the nodeid assigned by the server */
-    UA_ObjectTypeAttributes dtAttr = UA_ObjectTypeAttributes_default;
-    dtAttr.displayName = UA_LOCALIZEDTEXT("en-US", "DeviceType");
-    UA_Server_addObjectTypeNode(server, UA_NODEID_NULL,
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                UA_QUALIFIEDNAME(1, "DeviceType"), dtAttr,
-                                NULL, &deviceTypeId);
-
-    UA_VariableAttributes mnAttr = UA_VariableAttributes_default;
-    mnAttr.displayName = UA_LOCALIZEDTEXT("en-US", "ManufacturerName");
-    UA_NodeId manufacturerNameId;
-    UA_Server_addVariableNode(server, UA_NODEID_NULL, deviceTypeId,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                              UA_QUALIFIEDNAME(1, "ManufacturerName"),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), mnAttr, NULL, &manufacturerNameId);
-    /* Make the manufacturer name mandatory */
-    UA_Server_addReference(server, manufacturerNameId,
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE),
-                           UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORY), true);
-
-
-    UA_VariableAttributes modelAttr = UA_VariableAttributes_default;
-    modelAttr.displayName = UA_LOCALIZEDTEXT("en-US", "ModelName");
-    UA_Server_addVariableNode(server, UA_NODEID_NULL, deviceTypeId,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                              UA_QUALIFIEDNAME(1, "ModelName"),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), modelAttr, NULL, NULL);
-
-    /* Define the object type for "Pump" */
-    UA_ObjectTypeAttributes ptAttr = UA_ObjectTypeAttributes_default;
-    ptAttr.displayName = UA_LOCALIZEDTEXT("en-US", "PumpType");
-    UA_Server_addObjectTypeNode(server, pumpTypeId,
-                                deviceTypeId, UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                UA_QUALIFIEDNAME(1, "PumpType"), ptAttr,
-                                NULL, NULL);
-
-    UA_VariableAttributes statusAttr = UA_VariableAttributes_default;
-    statusAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Status");
-    statusAttr.valueRank = UA_VALUERANK_SCALAR;
-    UA_NodeId statusId;
-    UA_Server_addVariableNode(server, UA_NODEID_NULL, pumpTypeId,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                              UA_QUALIFIEDNAME(1, "Status"),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), statusAttr, NULL, &statusId);
-    /* Make the status variable mandatory */
-    UA_Server_addReference(server, statusId,
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE),
-                           UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORY), true);
-
-    UA_VariableAttributes rpmAttr = UA_VariableAttributes_default;
-    rpmAttr.displayName = UA_LOCALIZEDTEXT("en-US", "MotorRPM");
-    rpmAttr.valueRank = UA_VALUERANK_SCALAR;
-    UA_Server_addVariableNode(server, UA_NODEID_NULL, pumpTypeId,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                              UA_QUALIFIEDNAME(1, "MotorRPMs"),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), rpmAttr, NULL, NULL);
-}
-
-/**
- * Now we add the derived ObjectType for the pump that inherits from the device
- * object type. The resulting object contains all mandatory child variables.
- * These are simply copied over from the object type. The object has a reference
- * of type ``hasTypeDefinition`` to the object type, so that clients can detect
- * the type-instance relation at runtime.
- */
-
-static void
-addPumpObjectInstance(UA_Server *server, char *name) {
-    UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-    oAttr.displayName = UA_LOCALIZEDTEXT("en-US", name);
-    UA_Server_addObjectNode(server, UA_NODEID_NULL,
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                            UA_QUALIFIEDNAME(1, name),
-                            pumpTypeId, /* this refers to the object type
-                                           identifier */
-                            oAttr, NULL, NULL);
-}
-
-/**
- * Often times, we want to run a constructor function on a new object. This is
- * especially useful when an object is instantiated at runtime (with the
- * AddNodes service) and the integration with an underlying process canot be
- * manually defined. In the following constructor example, we simply set the
- * pump status to on.
- */
-
-static UA_StatusCode
-pumpTypeConstructor(UA_Server *server,
-                    const UA_NodeId *sessionId, void *sessionContext,
-                    const UA_NodeId *typeId, void *typeContext,
-                    const UA_NodeId *nodeId, void **nodeContext) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "New pump created");
-
-    /* Find the NodeId of the status child variable */
-    UA_RelativePathElement rpe;
-    UA_RelativePathElement_init(&rpe);
-    rpe.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT);
-    rpe.isInverse = false;
-    rpe.includeSubtypes = false;
-    rpe.targetName = UA_QUALIFIEDNAME(1, "Status");
-
-    UA_BrowsePath bp;
-    UA_BrowsePath_init(&bp);
-    bp.startingNode = *nodeId;
-    bp.relativePath.elementsSize = 1;
-    bp.relativePath.elements = &rpe;
-
-    UA_BrowsePathResult bpr =
-        UA_Server_translateBrowsePathToNodeIds(server, &bp);
-    if(bpr.statusCode != UA_STATUSCODE_GOOD ||
-       bpr.targetsSize < 1)
-        return bpr.statusCode;
-
-    /* Set the status value */
-    UA_Boolean status = true;
-    UA_Variant value;
-    UA_Variant_setScalar(&value, &status, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    UA_Server_writeValue(server, bpr.targets[0].targetId.nodeId, value);
-    UA_BrowsePathResult_clear(&bpr);
-
-    /* At this point we could replace the node context .. */
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-addPumpTypeConstructor(UA_Server *server) {
-    UA_NodeTypeLifecycle lifecycle;
-    lifecycle.constructor = pumpTypeConstructor;
-    lifecycle.destructor = NULL;
-    UA_Server_setNodeTypeLifecycle(server, pumpTypeId, lifecycle);
-}
-
-/** It follows the main server code, making use of the above definitions. */
-
-static volatile UA_Boolean running = true;
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-int main(void) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    manuallyDefinePump(server);
-    defineObjectTypes(server);
-    addPumpObjectInstance(server, "pump2");
-    addPumpObjectInstance(server, "pump3");
-    addPumpTypeConstructor(server);
-    addPumpObjectInstance(server, "pump4");
-    addPumpObjectInstance(server, "pump5");
-
-    UA_StatusCode retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/tutorial_server_variable.c b/ext/open62541/examples/tutorial_server_variable.c
deleted file mode 100644
index af34570..0000000
--- a/ext/open62541/examples/tutorial_server_variable.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-/**
- * Adding Variables to a Server
- * ----------------------------
- *
- * This tutorial shows how to work with data types and how to add variable nodes
- * to a server. First, we add a new variable to the server. Take a look at the
- * definition of the ``UA_VariableAttributes`` structure to see the list of all
- * attributes defined for VariableNodes.
- *
- * Note that the default settings have the AccessLevel of the variable value as
- * read only. See below for making the variable writable.
- */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-static void
-addVariable(UA_Server *server) {
-    /* Define the attribute of the myInteger variable node */
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    UA_Int32 myInteger = 42;
-    UA_Variant_setScalar(&attr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    attr.description = UA_LOCALIZEDTEXT("en-US","the answer");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","the answer");
-    attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-
-    /* Add the variable node to the information model */
-    UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "the.answer");
-    UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "the answer");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId,
-                              parentReferenceNodeId, myIntegerName,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), attr, NULL, NULL);
-}
-
-static void
-addMatrixVariable(UA_Server *server) {
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    attr.displayName = UA_LOCALIZEDTEXT("en-US", "Double Matrix");
-    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-
-    /* Set the variable value constraints */
-    attr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
-    attr.valueRank = UA_VALUERANK_TWO_DIMENSIONS;
-    UA_UInt32 arrayDims[2] = {2,2};
-    attr.arrayDimensions = arrayDims;
-    attr.arrayDimensionsSize = 2;
-
-    /* Set the value. The array dimensions need to be the same for the value. */
-    UA_Double zero[4] = {0.0, 0.0, 0.0, 0.0};
-    UA_Variant_setArray(&attr.value, zero, 4, &UA_TYPES[UA_TYPES_DOUBLE]);
-    attr.value.arrayDimensions = arrayDims;
-    attr.value.arrayDimensionsSize = 2;
-
-    UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "double.matrix");
-    UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "double matrix");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId,
-                              parentReferenceNodeId, myIntegerName,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                              attr, NULL, NULL);
-}
-
-/**
- * Now we change the value with the write service. This uses the same service
- * implementation that can also be reached over the network by an OPC UA client.
- */
-
-static void
-writeVariable(UA_Server *server) {
-    UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "the.answer");
-
-    /* Write a different integer value */
-    UA_Int32 myInteger = 43;
-    UA_Variant myVar;
-    UA_Variant_init(&myVar);
-    UA_Variant_setScalar(&myVar, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    UA_Server_writeValue(server, myIntegerNodeId, myVar);
-
-    /* Set the status code of the value to an error code. The function
-     * UA_Server_write provides access to the raw service. The above
-     * UA_Server_writeValue is syntactic sugar for writing a specific node
-     * attribute with the write service. */
-    UA_WriteValue wv;
-    UA_WriteValue_init(&wv);
-    wv.nodeId = myIntegerNodeId;
-    wv.attributeId = UA_ATTRIBUTEID_VALUE;
-    wv.value.status = UA_STATUSCODE_BADNOTCONNECTED;
-    wv.value.hasStatus = true;
-    UA_Server_write(server, &wv);
-
-    /* Reset the variable to a good statuscode with a value */
-    wv.value.hasStatus = false;
-    wv.value.value = myVar;
-    wv.value.hasValue = true;
-    UA_Server_write(server, &wv);
-}
-
-/**
- * Note how we initially set the DataType attribute of the variable node to the
- * NodeId of the Int32 data type. This forbids writing values that are not an
- * Int32. The following code shows how this consistency check is performed for
- * every write.
- */
-
-static void
-writeWrongVariable(UA_Server *server) {
-    UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "the.answer");
-
-    /* Write a string */
-    UA_String myString = UA_STRING("test");
-    UA_Variant myVar;
-    UA_Variant_init(&myVar);
-    UA_Variant_setScalar(&myVar, &myString, &UA_TYPES[UA_TYPES_STRING]);
-    UA_StatusCode retval = UA_Server_writeValue(server, myIntegerNodeId, myVar);
-    printf("Writing a string returned statuscode %s\n", UA_StatusCode_name(retval));
-}
-
-/** It follows the main server code, making use of the above definitions. */
-
-static volatile UA_Boolean running = true;
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-int main(void) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-    UA_ServerConfig* config = UA_Server_getConfig(server);
-    config->verifyRequestTimestamp = UA_RULEHANDLING_ACCEPT;
-#ifdef UA_ENABLE_WEBSOCKET_SERVER
-    UA_ServerConfig_addNetworkLayerWS(UA_Server_getConfig(server), 7681, 0, 0);
-#endif
-
-    addVariable(server);
-    addMatrixVariable(server);
-    writeVariable(server);
-    writeWrongVariable(server);
-
-    UA_StatusCode retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/examples/tutorial_server_variabletype.c b/ext/open62541/examples/tutorial_server_variabletype.c
deleted file mode 100644
index f71341f..0000000
--- a/ext/open62541/examples/tutorial_server_variabletype.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-/**
- * Working with Variable Types
- * ---------------------------
- *
- * Variable types have three functions:
- *
- * - Constrain the possible data type, value rank and array dimensions of the
- *   variables of that type. This allows interface code to be written against
- *   the generic type definition, so it is applicable for all instances.
- * - Provide a sensible default value
- * - Enable a semantic interpretation of the variable based on its type
- *
- * In the example of this tutorial, we represent a point in 2D space by an array
- * of double values. The following function adds the corresponding
- * VariableTypeNode to the hierarchy of variable types.
- */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <signal.h>
-#include <stdlib.h>
-
-static UA_NodeId pointTypeId;
-
-static void
-addVariableType2DPoint(UA_Server *server) {
-    UA_VariableTypeAttributes vtAttr = UA_VariableTypeAttributes_default;
-    vtAttr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
-    vtAttr.valueRank = UA_VALUERANK_ONE_DIMENSION;
-    UA_UInt32 arrayDims[1] = {2};
-    vtAttr.arrayDimensions = arrayDims;
-    vtAttr.arrayDimensionsSize = 1;
-    vtAttr.displayName = UA_LOCALIZEDTEXT("en-US", "2DPoint Type");
-
-    /* a matching default value is required */
-    UA_Double zero[2] = {0.0, 0.0};
-    UA_Variant_setArray(&vtAttr.value, zero, 2, &UA_TYPES[UA_TYPES_DOUBLE]);
-
-    UA_Server_addVariableTypeNode(server, UA_NODEID_NULL,
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                  UA_QUALIFIEDNAME(1, "2DPoint Type"), UA_NODEID_NULL,
-                                  vtAttr, NULL, &pointTypeId);
-}
-
-/**
- * Now the new variable type for *2DPoint* can be referenced during the creation
- * of a new variable. If no value is given, the default from the variable type
- * is copied during instantiation.
- */
-
-static UA_NodeId pointVariableId;
-
-static void
-addVariable(UA_Server *server) {
-    /* Prepare the node attributes */
-    UA_VariableAttributes vAttr = UA_VariableAttributes_default;
-    vAttr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
-    vAttr.valueRank = UA_VALUERANK_ONE_DIMENSION;
-    UA_UInt32 arrayDims[1] = {2};
-    vAttr.arrayDimensions = arrayDims;
-    vAttr.arrayDimensionsSize = 1;
-    vAttr.displayName = UA_LOCALIZEDTEXT("en-US", "2DPoint Variable");
-    vAttr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-    /* vAttr.value is left empty, the server instantiates with the default value */
-
-    /* Add the node */
-    UA_Server_addVariableNode(server, UA_NODEID_NULL,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                              UA_QUALIFIEDNAME(1, "2DPoint Type"), pointTypeId,
-                              vAttr, NULL, &pointVariableId);
-}
-
-/**
- * The constraints of the variable type are enforced when creating new variable
- * instances of the type. In the following function, adding a variable of
- * *2DPoint* type with a string value fails because The value does not match the
- * variable type constraints. */
-
-static void
-addVariableFail(UA_Server *server) {
-    /* Prepare the node attributes */
-    UA_VariableAttributes vAttr = UA_VariableAttributes_default;
-    vAttr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
-    vAttr.valueRank = UA_VALUERANK_SCALAR; /* a scalar. this is not allowed per the variable type */
-    vAttr.displayName = UA_LOCALIZEDTEXT("en-US", "2DPoint Variable (fail)");
-    UA_String s = UA_STRING("2dpoint?");
-    UA_Variant_setScalar(&vAttr.value, &s, &UA_TYPES[UA_TYPES_STRING]);
-
-    /* Add the node will return UA_STATUSCODE_BADTYPEMISMATCH*/
-    UA_Server_addVariableNode(server, UA_NODEID_NULL,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                              UA_QUALIFIEDNAME(1, "2DPoint Type (fail)"), pointTypeId,
-                              vAttr, NULL, NULL);
-}
-
-/**
- * The constraints of the variable type are enforced when writing the datatype,
- * valuerank and arraydimensions attributes of the variable. This, in turn,
- * constrains the value attribute of the variable. */
-
-static void
-writeVariable(UA_Server *server) {
-    UA_StatusCode retval = UA_Server_writeValueRank(server, pointVariableId, UA_VALUERANK_ONE_OR_MORE_DIMENSIONS);
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
-                "Setting the Value Rank failed with Status Code %s",
-                UA_StatusCode_name(retval));
-
-}
-
-/** It follows the main server code, making use of the above definitions. */
-
-static volatile UA_Boolean running = true;
-static void stopHandler(int sign) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
-int main(void) {
-    signal(SIGINT, stopHandler);
-    signal(SIGTERM, stopHandler);
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    addVariableType2DPoint(server);
-    addVariable(server);
-    addVariableFail(server);
-    writeVariable(server);
-
-    UA_StatusCode retval = UA_Server_run(server, &running);
-
-    UA_Server_delete(server);
-    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/include/open62541/architecture_base.h b/ext/open62541/include/open62541/architecture_base.h
deleted file mode 100644
index 28efa63..0000000
--- a/ext/open62541/include/open62541/architecture_base.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifndef ARCH_UA_ARCHITECTURE_BASE_H
-#define ARCH_UA_ARCHITECTURE_BASE_H
-
-/*
- * With the following list of defines, one can define its own UA_sleep_ms using a preprocessor define.
- * E.g. see unit tests.
- */
-
-#ifdef UA_sleep_ms
-void UA_sleep_ms(unsigned long ms);
-#endif
-
-#ifdef UA_malloc
-void* UA_malloc(unsigned long size);
-#endif
-
-#ifdef UA_calloc
-void* UA_calloc(unsigned long num, unsigned long size); //allocate memory in the heap with size*num bytes and set the memory to zero
-#endif
-
-#ifdef UA_realloc
-void* UA_realloc(void *ptr, unsigned long new_size);//re-allocate memory in the heap with new_size bytes from previously allocated memory ptr
-#endif
-
-#ifdef UA_free
-void UA_free(void* ptr); //de-allocate memory previously allocated with UA_malloc, UA_calloc or UA_realloc
-#endif
-
-#endif //ARCH_UA_ARCHITECTURE_BASE_H
diff --git a/ext/open62541/include/open62541/architecture_definitions.h b/ext/open62541/include/open62541/architecture_definitions.h
deleted file mode 100644
index fc20716..0000000
--- a/ext/open62541/include/open62541/architecture_definitions.h
+++ /dev/null
@@ -1,378 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2018 (c) Jose Cabral, fortiss GmbH
- */
-
-#ifndef ARCH_UA_ARCHITECTURE_DEFINITIONS_H_
-#define ARCH_UA_ARCHITECTURE_DEFINITIONS_H_
-
-#include <open62541/config.h>
-
-/**
- * C99 Definitions
- * --------------- */
-#include <string.h>
-#include <stddef.h>
-
-/* Include stdint.h and stdbool.h or workaround for older Visual Studios */
-#ifdef UNDER_CE
-# include "stdint.h"
-#endif
-#if !defined(_MSC_VER) || _MSC_VER >= 1800
-# include <stdint.h>
-# include <stdbool.h> /* C99 Boolean */
-#else
-# include "ms_stdint.h"
-# if !defined(__bool_true_false_are_defined)
-#  define bool unsigned char
-#  define true 1
-#  define false 0
-#  define __bool_true_false_are_defined
-# endif
-#endif
-
-/**
- * Assertions
- * ----------
- * The assert macro is disabled by defining NDEBUG. It is often forgotten to
- * include -DNDEBUG in the compiler flags when using the single-file release. So
- * we make assertions dependent on the UA_DEBUG definition handled by CMake. */
-#ifdef UA_DEBUG
-# include <assert.h>
-# define UA_assert(ignore) assert(ignore)
-#else
-# define UA_assert(ignore) do {} while(0)
-#endif
-
-/* Outputs an error message at compile time if the assert fails.
- * Example usage:
- * UA_STATIC_ASSERT(sizeof(long)==7, use_another_compiler_luke)
- * See: https://stackoverflow.com/a/4815532/869402 */
-#if defined(__cplusplus) && __cplusplus >= 201103L /* C++11 or above */
-# define UA_STATIC_ASSERT(cond,msg) static_assert(cond, #msg)
-#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L /* C11 or above */
-# define UA_STATIC_ASSERT(cond,msg) _Static_assert(cond, #msg)
-#elif defined(__GNUC__) || defined(__clang__) || defined(_MSC_VER) /* GCC, Clang, MSC */
-# define UA_CTASTR2(pre,post) pre ## post
-# define UA_CTASTR(pre,post) UA_CTASTR2(pre,post)
-# ifndef __COUNTER__ /* PPC GCC fix */
-#  define __COUNTER__ __LINE__
-# endif
-# define UA_STATIC_ASSERT(cond,msg)                             \
-    typedef struct {                                            \
-        int UA_CTASTR(static_assertion_failed_,msg) : !!(cond); \
-    } UA_CTASTR(static_assertion_failed_,__COUNTER__)
-#else /* Everybody else */
-# define UA_STATIC_ASSERT(cond,msg) typedef char static_assertion_##msg[(cond)?1:-1]
-#endif
-
-#if defined(_WIN32) && defined(UA_DYNAMIC_LINKING)
-# ifdef UA_DYNAMIC_LINKING_EXPORT /* export dll */
-#  ifdef __GNUC__
-#   define UA_EXPORT __attribute__ ((dllexport))
-#  else
-#   define UA_EXPORT __declspec(dllexport)
-#  endif
-# else /* import dll */
-#  ifdef __GNUC__
-#   define UA_EXPORT __attribute__ ((dllimport))
-#  else
-#   define UA_EXPORT __declspec(dllimport)
-#  endif
-# endif
-#else /* non win32 */
-# if __GNUC__ || __clang__
-#  define UA_EXPORT __attribute__ ((visibility ("default")))
-# endif
-#endif
-#ifndef UA_EXPORT
-# define UA_EXPORT /* fallback to default */
-#endif
-
-#define UA_THREADSAFE
-
-/**
- * Inline Functions
- * ---------------- */
-#ifdef _MSC_VER
-# define UA_INLINE __inline
-#else
-# define UA_INLINE inline
-#endif
-
-/**
- * Non-aliasing pointers
- * -------------------- */
-#ifdef _MSC_VER
-# define UA_RESTRICT __restrict
-#elif defined(__GNUC__)
-# define UA_RESTRICT __restrict__
-#else
-# define UA_RESTRICT restrict
-#endif
-
-/**
- * Function attributes
- * ------------------- */
-#if defined(__GNUC__) || defined(__clang__)
-# define UA_FUNC_ATTR_MALLOC __attribute__((malloc))
-# define UA_FUNC_ATTR_PURE __attribute__ ((pure))
-# define UA_FUNC_ATTR_CONST __attribute__((const))
-# define UA_FUNC_ATTR_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
-# define UA_FORMAT(X,Y) __attribute__ ((format (printf, X, Y)))
-#else
-# define UA_FUNC_ATTR_MALLOC
-# define UA_FUNC_ATTR_PURE
-# define UA_FUNC_ATTR_CONST
-# define UA_FUNC_ATTR_WARN_UNUSED_RESULT
-# define UA_FORMAT(X,Y)
-#endif
-
-#if defined(__GNUC__) || defined(__clang__)
-# define UA_DEPRECATED __attribute__((deprecated))
-#elif defined(_MSC_VER)
-# define UA_DEPRECATED __declspec(deprecated)
-#else
-# define UA_DEPRECATED
-#endif
-
-/**
- * Internal Attributes
- * -------------------
- * These attributes are only defined if the macro UA_INTERNAL is defined. That
- * way public methods can be annotated (e.g. to warn for unused results) but
- * warnings are only triggered for internal code. */
-
-#if defined(UA_INTERNAL) && (defined(__GNUC__) || defined(__clang__))
-# define UA_INTERNAL_DEPRECATED _Pragma ("GCC warning \"Macro is deprecated for internal use\"")
-#else
-# define UA_INTERNAL_DEPRECATED
-#endif
-
-#if defined(UA_INTERNAL) && (defined(__GNUC__) || defined(__clang__))
-# define UA_INTERNAL_FUNC_ATTR_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
-#else
-# define UA_INTERNAL_FUNC_ATTR_WARN_UNUSED_RESULT
-#endif
-
-/**
- * Detect Endianness and IEEE 754 floating point
- * ---------------------------------------------
- * Integers and floating point numbers are transmitted in little-endian (IEEE
- * 754 for floating point) encoding. If the target architecture uses the same
- * format, numeral datatypes can be memcpy'd (overlayed) on the network buffer.
- * Otherwise, a slow default encoding routine is used that works for every
- * architecture.
- *
- * Integer Endianness
- * ^^^^^^^^^^^^^^^^^^
- * The definition ``UA_LITTLE_ENDIAN`` is true when the integer representation
- * of the target architecture is little-endian. */
-#if defined(_WIN32)
-# define UA_LITTLE_ENDIAN 1
-#elif defined(__i386__) || defined(__x86_64__) || defined(__amd64__)
-# define UA_LITTLE_ENDIAN 1
-#elif (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \
-      (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__))
-# define UA_LITTLE_ENDIAN 1
-#elif defined(__linux__) /* Linux (including Android) */
-# include <endian.h>
-# if __BYTE_ORDER == __LITTLE_ENDIAN
-#  define UA_LITTLE_ENDIAN 1
-# endif
-#elif defined(__OpenBSD__) /* OpenBSD */
-# include <sys/endian.h>
-# if BYTE_ORDER == LITTLE_ENDIAN
-#  define UA_LITTLE_ENDIAN 1
-# endif
-#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) /* Other BSD */
-# include <sys/endian.h>
-# if _BYTE_ORDER == _LITTLE_ENDIAN
-#  define UA_LITTLE_ENDIAN 1
-# endif
-#elif defined(__APPLE__) /* Apple (MacOS, iOS) */
-# include <libkern/OSByteOrder.h>
-# if defined(__LITTLE_ENDIAN__)
-#  define UA_LITTLE_ENDIAN 1
-# endif
-#elif defined(__QNX__) || defined(__QNXNTO__) /* QNX */
-# include <gulliver.h>
-# if defined(__LITTLEENDIAN__)
-#  define UA_LITTLE_ENDIAN 1
-# endif
-#elif defined(_OS9000) /* OS-9 */
-# if defined(_LIL_END)
-#  define UA_LITTLE_ENDIAN 1
-# endif
-#endif
-#ifndef UA_LITTLE_ENDIAN
-# define UA_LITTLE_ENDIAN 0
-#endif
-
-/* Can the integers be memcpy'd onto the network buffer? Add additional checks
- * here. Some platforms (e.g. QNX) have sizeof(bool) > 1. Manually disable
- * overlayed integer encoding if that is the case. */
-#if (UA_LITTLE_ENDIAN == 1)
-UA_STATIC_ASSERT(sizeof(bool) == 1, cannot_overlay_integers_with_large_bool);
-# define UA_BINARY_OVERLAYABLE_INTEGER 1
-#else
-# define UA_BINARY_OVERLAYABLE_INTEGER 0
-#endif
-
-/**
- * Float Endianness
- * ^^^^^^^^^^^^^^^^
- * The definition ``UA_FLOAT_IEEE754`` is set to true when the floating point
- * number representation of the target architecture is IEEE 754. The definition
- * ``UA_FLOAT_LITTLE_ENDIAN`` is set to true when the floating point number
- * representation is in little-endian encoding. */
-
-#if defined(_WIN32)
-# define UA_FLOAT_IEEE754 1
-#elif defined(__i386__) || defined(__x86_64__) || defined(__amd64__) || \
-    defined(__ia64__) || defined(__powerpc__) || defined(__sparc__) || \
-    defined(__arm__)
-# define UA_FLOAT_IEEE754 1
-#elif defined(__STDC_IEC_559__)
-# define UA_FLOAT_IEEE754 1
-#else
-# define UA_FLOAT_IEEE754 0
-#endif
-
-/* Wikipedia says (https://en.wikipedia.org/wiki/Endianness): Although the
- * ubiquitous x86 processors of today use little-endian storage for all types of
- * data (integer, floating point, BCD), there are a number of hardware
- * architectures where floating-point numbers are represented in big-endian form
- * while integers are represented in little-endian form. */
-#if defined(_WIN32)
-# define UA_FLOAT_LITTLE_ENDIAN 1
-#elif defined(__i386__) || defined(__x86_64__) || defined(__amd64__)
-# define UA_FLOAT_LITTLE_ENDIAN 1
-#elif defined(__FLOAT_WORD_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \
-    (__FLOAT_WORD_ORDER__ == __ORDER_LITTLE_ENDIAN__) /* Defined only in GCC */
-# define UA_FLOAT_LITTLE_ENDIAN 1
-#elif defined(__FLOAT_WORD_ORDER) && defined(__LITTLE_ENDIAN) && \
-    (__FLOAT_WORD_ORDER == __LITTLE_ENDIAN) /* Defined only in GCC */
-# define UA_FLOAT_LITTLE_ENDIAN 1
-#endif
-#ifndef UA_FLOAT_LITTLE_ENDIAN
-# define UA_FLOAT_LITTLE_ENDIAN 0
-#endif
-
-/* Only if the floating points are litle-endian **and** in IEEE 754 format can
- * we memcpy directly onto the network buffer. */
-#if (UA_FLOAT_IEEE754 == 1) && (UA_FLOAT_LITTLE_ENDIAN == 1)
-# define UA_BINARY_OVERLAYABLE_FLOAT 1
-#else
-# define UA_BINARY_OVERLAYABLE_FLOAT 0
-#endif
-
-
-/* Atomic Operations
- * -----------------
- * Atomic operations that synchronize across processor cores (for
- * multithreading). Only the inline-functions defined next are used. Replace
- * with architecture-specific operations if necessary. */
-#if UA_MULTITHREADING >= 200
-    #ifdef _MSC_VER /* Visual Studio */
-    #define UA_atomic_sync() _ReadWriteBarrier()
-    #else /* GCC/Clang */
-    #define UA_atomic_sync() __sync_synchronize()
-    #endif
-#else
-    #define UA_atomic_sync()
-#endif
-
-static UA_INLINE void *
-UA_atomic_xchg(void * volatile * addr, void *newptr) {
-#if UA_MULTITHREADING >= 200
-#ifdef _MSC_VER /* Visual Studio */
-    return _InterlockedExchangePointer(addr, newptr);
-#else /* GCC/Clang */
-    return __sync_lock_test_and_set(addr, newptr);
-#endif
-#else
-    void *old = *addr;
-    *addr = newptr;
-    return old;
-#endif
-}
-
-static UA_INLINE void *
-UA_atomic_cmpxchg(void * volatile * addr, void *expected, void *newptr) {
-#if UA_MULTITHREADING >= 200
-#ifdef _MSC_VER /* Visual Studio */
-    return _InterlockedCompareExchangePointer(addr, expected, newptr);
-#else /* GCC/Clang */
-    return __sync_val_compare_and_swap(addr, expected, newptr);
-#endif
-#else
-    void *old = *addr;
-    if(old == expected) {
-        *addr = newptr;
-    }
-    return old;
-#endif
-}
-
-static UA_INLINE uint32_t
-UA_atomic_addUInt32(volatile uint32_t *addr, uint32_t increase) {
-#if UA_MULTITHREADING >= 200
-#ifdef _MSC_VER /* Visual Studio */
-    return _InterlockedExchangeAdd(addr, increase) + increase;
-#else /* GCC/Clang */
-    return __sync_add_and_fetch(addr, increase);
-#endif
-#else
-    *addr += increase;
-    return *addr;
-#endif
-}
-
-static UA_INLINE size_t
-UA_atomic_addSize(volatile size_t *addr, size_t increase) {
-#if UA_MULTITHREADING >= 200
-#ifdef _MSC_VER /* Visual Studio */
-    return _InterlockedExchangeAdd(addr, increase) + increase;
-#else /* GCC/Clang */
-    return __sync_add_and_fetch(addr, increase);
-#endif
-#else
-    *addr += increase;
-    return *addr;
-#endif
-}
-
-static UA_INLINE uint32_t
-UA_atomic_subUInt32(volatile uint32_t *addr, uint32_t decrease) {
-#if UA_MULTITHREADING >= 200
-#ifdef _MSC_VER /* Visual Studio */
-    return _InterlockedExchangeSub(addr, decrease) - decrease;
-#else /* GCC/Clang */
-    return __sync_sub_and_fetch(addr, decrease);
-#endif
-#else
-    *addr -= decrease;
-    return *addr;
-#endif
-}
-
-static UA_INLINE size_t
-UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
-#if UA_MULTITHREADING >= 200
-#ifdef _MSC_VER /* Visual Studio */
-    return _InterlockedExchangeSub(addr, decrease) - decrease;
-#else /* GCC/Clang */
-    return __sync_sub_and_fetch(addr, decrease);
-#endif
-#else
-    *addr -= decrease;
-    return *addr;
-#endif
-}
-
-#endif /* ARCH_UA_ARCHITECTURE_DEFINITIONS_H_ */
diff --git a/ext/open62541/include/open62541/architecture_functions.h b/ext/open62541/include/open62541/architecture_functions.h
deleted file mode 100644
index cb9d607..0000000
--- a/ext/open62541/include/open62541/architecture_functions.h
+++ /dev/null
@@ -1,211 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2018 (c) Jose Cabral, fortiss GmbH
- */
-
-/*
- * This header has all the functions that are architecture dependent. The declaration is behind a ifndef since
- * they can be previously defined in the ua_architecture.h which include this files at the end
- */
-
-#ifndef PLUGINS_ARCH_UA_ARCHITECTURE_FUNCTIONS_H_
-#define PLUGINS_ARCH_UA_ARCHITECTURE_FUNCTIONS_H_
-
-#include <open62541/config.h>
-
-_UA_BEGIN_DECLS
-
-/*
- * Allocation functions
- */
-
-#ifndef UA_malloc
-void* UA_malloc(size_t size); //allocate memory in the heap with size bytes
-#endif
-
-#ifndef UA_calloc
-void* UA_calloc(size_t num, size_t size); //allocate memory in the heap with size*num bytes and set the memory to zero
-#endif
-
-#ifndef UA_realloc
-void* UA_realloc(void *ptr, size_t new_size);//re-allocate memory in the heap with new_size bytes from previously allocated memory ptr
-#endif
-
-#ifndef UA_free
-void UA_free(void* ptr); //de-allocate memory previously allocated with UA_malloc, UA_calloc or UA_realloc
-#endif
-
-#ifndef UA_alloca
-# if defined(__GNUC__) || defined(__clang__)
-#  define UA_alloca(size) __builtin_alloca (size)
-# elif defined(_WIN32)
-#  define UA_alloca(SIZE) _alloca(SIZE)
-# else
-#  include <alloca.h>
-#  define UA_alloca(SIZE) alloca(SIZE)
-# endif
-#endif
-
-#ifndef UA_STACKARRAY
-/* Stack-allocation of memory. Use C99 variable-length arrays if possible.
- * Otherwise revert to alloca. Note that alloca is not supported on some
- * plattforms. */
-# if defined(__GNUC__) || defined(__clang__)
-#  define UA_STACKARRAY(TYPE, NAME, SIZE) TYPE NAME[SIZE]
-# else
-#  define UA_STACKARRAY(TYPE, NAME, SIZE) \
-    TYPE *NAME = (TYPE*)UA_alloca(sizeof(TYPE) * SIZE)
-# endif
-#endif
-
-/*
- * Sleep function
- */
-
-#ifndef UA_sleep_ms
-int UA_sleep_ms(unsigned int miliSeconds); //suspend the thread for a certain amount of mili seconds
-#endif
-
-/*
- * Socket functions
- */
-
-#ifndef UA_send
-ssize_t UA_send(UA_SOCKET sockfd, const void *buf, size_t len, int flags); //equivalent to posix send implementation
-#endif
-
-#ifndef UA_sendto
-ssize_t sendto(UA_SOCKET sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); //equivalent to posix sendto implementation
-#endif
-
-#ifndef UA_select
-int UA_select(UA_SOCKET nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); //equivalent to posix select implementation
-#endif
-
-#ifndef UA_recv
-ssize_t UA_recv(UA_SOCKET sockfd, void *buf, size_t len, int flags); //equivalent to posix recv implementation
-#endif
-
-#ifndef UA_recvfrom
-ssize_t recvfrom(UA_SOCKET sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
-#endif
-
-#ifndef UA_shutdown
-int UA_shutdown(UA_SOCKET sockfd, int how); //equivalent to posix shutdown implementation
-#endif
-
-#ifndef UA_socket
-UA_SOCKET UA_socket(int domain, int type, int protocol);//equivalent to posix socket implementation
-#endif
-
-#ifndef UA_bind
-int UA_bind(UA_SOCKET sockfd, const struct sockaddr *addr, socklen_t addrlen);//equivalent to posix bind implementation
-#endif
-
-#ifndef UA_listen
-int UA_listen(UA_SOCKET sockfd, int backlog);//equivalent to posix listen implementation
-#endif
-
-#ifndef UA_accept
-int UA_accept(UA_SOCKET sockfd, struct sockaddr *addr, socklen_t *addrlen);//equivalent to posix accept implementation
-#endif
-
-#ifndef UA_close
-int UA_close(UA_SOCKET sockfd);//equivalent to posix close implementation
-#endif
-
-#ifndef UA_connect
-int UA_connect(UA_SOCKET sockfd, const struct sockaddr *addr, socklen_t addrlen);//equivalent to posix connect implementation
-#endif
-
-#ifndef UA_fd_set
-void UA_fd_set(UA_SOCKET fd, fd_set *set); //equivalent to posix FD_SET implementation
-#endif
-
-#ifndef UA_fd_isset
-int UA_fd_isset(UA_SOCKET fd, fd_set *set);//equivalent to posix FD_ISSET implementation
-#endif
-
-#ifndef UA_getaddrinfo
-int UA_getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res);//equivalent to posix getaddrinfo implementation
-#endif
-
-#ifndef UA_htonl
-uint32_t UA_htonl(uint32_t hostlong);//equivalent to posix UA_htonl implementation
-#endif
-
-#ifndef UA_ntohl
-uint32_t UA_ntohl(uint32_t netlong);//equivalent to posix ntohl implementation
-#endif
-
-#ifndef UA_inet_pton
-int UA_inet_pton(int af, const char *src, void *dst);//equivalent to ANSI inet_pton implementation
-#endif
-
-#if UA_IPV6
-# ifndef UA_if_nametoindex
-unsigned int UA_if_nametoindex(const char *ifname);//equivalent to posix if_nametoindex implementation
-# endif
-#endif
-
-#ifndef UA_socket_set_blocking
-unsigned int UA_socket_set_blocking(UA_SOCKET sockfd);//set a socket as blocking. Returns 0 if OK, other value otherwise
-#endif
-
-#ifndef UA_socket_set_nonblocking
-unsigned int UA_socket_set_nonblocking(UA_SOCKET sockfd);//set a socket as non-blocking. Returns 0 if OK, other value otherwise
-#endif
-
-#ifndef UA_getsockopt
-int UA_getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); //equivalent to posix getsockopt implementation. Only in non windows architectures
-#endif
-
-#ifndef UA_setsockopt
-int UA_setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);//equivalent to posix setsockopt implementation
-#endif
-
-#ifndef UA_freeaddrinfo
-void UA_freeaddrinfo(struct addrinfo *res);//equivalent to posix freeaddrinfo implementatio
-#endif
-
-#ifndef UA_gethostname
-int UA_gethostname(char *name, size_t len);//equivalent to posix gethostname implementation
-#endif
-
-#ifndef UA_getsockname
-int UA_getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);//equivalent to posix getsockname implementation
-#endif
-
-#ifndef UA_initialize_architecture_network
-void UA_initialize_architecture_network(void);//initializes all needed for using the network interfaces
-#endif
-
-#ifndef UA_deinitialize_architecture_network
-void UA_deinitialize_architecture_network(void);//de-initializes the network interfaces
-#endif
-
-/*
- * Print function
- */
-#ifndef UA_snprintf
-int UA_snprintf(char* pa_stream, size_t pa_size, const char* pa_format, ...); //prints text to output
-#endif
-
-/*
- * Access to file function
- */
-
-#ifndef UA_access
-int UA_access(const char *pathname, int mode); //equivalent implementation of https://linux.die.net/man/2/access
-#endif
-
-#ifndef UA_fileExists
-#define UA_fileExists(X) ( UA_access(X, 0) == 0)
-#endif
-
-#include <open62541/architecture_definitions.h>
-
-_UA_END_DECLS
-
-#endif /* PLUGINS_ARCH_UA_ARCHITECTURE_FUNCTIONS_H_ */
diff --git a/ext/open62541/include/open62541/client.h b/ext/open62541/include/open62541/client.h
deleted file mode 100644
index e627de0..0000000
--- a/ext/open62541/include/open62541/client.h
+++ /dev/null
@@ -1,528 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2015-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015-2016 (c) Chris Iatrou
- *    Copyright 2015-2017 (c) Florian Palm
- *    Copyright 2015 (c) Holger Jeromin
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2018 (c) Thomas Stalder, Blue Time Concept SA
- *    Copyright 2018 (c) Kalycito Infotech Private Limited
- */
-
-#ifndef UA_CLIENT_H_
-#define UA_CLIENT_H_
-
-#include <open62541/client_config.h>
-#include <open62541/nodeids.h>
-#include <open62541/types.h>
-#include <open62541/types_generated.h>
-#include <open62541/types_generated_handling.h>
-
-_UA_BEGIN_DECLS
-
-/**
- * .. _client:
- *
- * Client
- * ======
- *
- * The client implementation allows remote access to all OPC UA services. For
- * convenience, some functionality has been wrapped in :ref:`high-level
- * abstractions <client-highlevel>`.
- *
- * **However**: At this time, the client does not yet contain its own thread or
- * event-driven main-loop. So the client will not perform any actions
- * automatically in the background. This is especially relevant for
- * subscriptions. The user will have to periodically call
- * `UA_Client_Subscriptions_manuallySendPublishRequest`. See also :ref:`here
- * <client-subscriptions>`.
- *
- *
- * .. include:: client_config.rst
- *
- * Client Lifecycle
- * ---------------- */
-
-/* Create a new client */
-UA_Client UA_EXPORT *
-UA_Client_new(void);
-
-/* Get the client connection status */
-UA_ClientState UA_EXPORT
-UA_Client_getState(UA_Client *client);
-
-/* Get the client configuration */
-UA_EXPORT UA_ClientConfig *
-UA_Client_getConfig(UA_Client *client);
-
-/* Get the client context */
-static UA_INLINE void *
-UA_Client_getContext(UA_Client *client) {
-    UA_ClientConfig *config = UA_Client_getConfig(client); /* Cannot fail */
-    return config->clientContext;
-}
-
-/* Reset a client */
-void UA_EXPORT
-UA_Client_reset(UA_Client *client);
-
-/* Delete a client */
-void UA_EXPORT
-UA_Client_delete(UA_Client *client);
-
-/**
- * Connect to a Server
- * ------------------- */
-
-typedef void (*UA_ClientAsyncServiceCallback)(UA_Client *client, void *userdata,
-        UA_UInt32 requestId, void *response);
-
-/* Connect to the server
- *
- * @param client to use
- * @param endpointURL to connect (for example "opc.tcp://localhost:4840")
- * @return Indicates whether the operation succeeded or returns an error code */
-UA_StatusCode UA_EXPORT
-UA_Client_connect(UA_Client *client, const char *endpointUrl);
-
-UA_StatusCode UA_EXPORT
-UA_Client_connect_async(UA_Client *client, const char *endpointUrl,
-                        UA_ClientAsyncServiceCallback callback,
-                        void *userdata);
-
-/* Connect to the server without creating a session
- *
- * @param client to use
- * @param endpointURL to connect (for example "opc.tcp://localhost:4840")
- * @return Indicates whether the operation succeeded or returns an error code */
-UA_StatusCode UA_EXPORT
-UA_Client_connect_noSession(UA_Client *client, const char *endpointUrl);
-
-/* Connect to the selected server with the given username and password
- *
- * @param client to use
- * @param endpointURL to connect (for example "opc.tcp://localhost:4840")
- * @param username
- * @param password
- * @return Indicates whether the operation succeeded or returns an error code */
-UA_StatusCode UA_EXPORT
-UA_Client_connect_username(UA_Client *client, const char *endpointUrl,
-                           const char *username, const char *password);
-
-/* Disconnect and close a connection to the selected server */
-UA_StatusCode UA_EXPORT
-UA_Client_disconnect(UA_Client *client);
-
-UA_StatusCode UA_EXPORT
-UA_Client_disconnect_async(UA_Client *client, UA_UInt32 *requestId);
-
-/* Close a connection to the selected server */
-UA_DEPRECATED static UA_INLINE UA_StatusCode
-UA_Client_close(UA_Client *client) {
-    return UA_Client_disconnect(client);
-}
-
-/**
- * Discovery
- * --------- */
-
-/* Gets a list of endpoints of a server
- *
- * @param client to use. Must be connected to the same endpoint given in
- *        serverUrl or otherwise in disconnected state.
- * @param serverUrl url to connect (for example "opc.tcp://localhost:4840")
- * @param endpointDescriptionsSize size of the array of endpoint descriptions
- * @param endpointDescriptions array of endpoint descriptions that is allocated
- *        by the function (you need to free manually)
- * @return Indicates whether the operation succeeded or returns an error code */
-UA_StatusCode UA_EXPORT
-UA_Client_getEndpoints(UA_Client *client, const char *serverUrl,
-                       size_t* endpointDescriptionsSize,
-                       UA_EndpointDescription** endpointDescriptions);
-
-/* Gets a list of all registered servers at the given server.
- *
- * You can pass an optional filter for serverUris. If the given server is not registered,
- * an empty array will be returned. If the server is registered, only that application
- * description will be returned.
- *
- * Additionally you can optionally indicate which locale you want for the server name
- * in the returned application description. The array indicates the order of preference.
- * A server may have localized names.
- *
- * @param client to use. Must be connected to the same endpoint given in
- *        serverUrl or otherwise in disconnected state.
- * @param serverUrl url to connect (for example "opc.tcp://localhost:4840")
- * @param serverUrisSize Optional filter for specific server uris
- * @param serverUris Optional filter for specific server uris
- * @param localeIdsSize Optional indication which locale you prefer
- * @param localeIds Optional indication which locale you prefer
- * @param registeredServersSize size of returned array, i.e., number of found/registered servers
- * @param registeredServers array containing found/registered servers
- * @return Indicates whether the operation succeeded or returns an error code */
-UA_StatusCode UA_EXPORT
-UA_Client_findServers(UA_Client *client, const char *serverUrl,
-                      size_t serverUrisSize, UA_String *serverUris,
-                      size_t localeIdsSize, UA_String *localeIds,
-                      size_t *registeredServersSize,
-                      UA_ApplicationDescription **registeredServers);
-
-#ifdef UA_ENABLE_DISCOVERY
-/* Get a list of all known server in the network. Only supported by LDS servers.
- *
- * @param client to use. Must be connected to the same endpoint given in
- * serverUrl or otherwise in disconnected state.
- * @param serverUrl url to connect (for example "opc.tcp://localhost:4840")
- * @param startingRecordId optional. Only return the records with an ID higher
- *        or equal the given. Can be used for pagination to only get a subset of
- *        the full list
- * @param maxRecordsToReturn optional. Only return this number of records
-
- * @param serverCapabilityFilterSize optional. Filter the returned list to only
- *        get servers with given capabilities, e.g. "LDS"
- * @param serverCapabilityFilter optional. Filter the returned list to only get
- *        servers with given capabilities, e.g. "LDS"
- * @param serverOnNetworkSize size of returned array, i.e., number of
- *        known/registered servers
- * @param serverOnNetwork array containing known/registered servers
- * @return Indicates whether the operation succeeded or returns an error code */
-UA_StatusCode UA_EXPORT
-UA_Client_findServersOnNetwork(UA_Client *client, const char *serverUrl,
-                               UA_UInt32 startingRecordId, UA_UInt32 maxRecordsToReturn,
-                               size_t serverCapabilityFilterSize, UA_String *serverCapabilityFilter,
-                               size_t *serverOnNetworkSize, UA_ServerOnNetwork **serverOnNetwork);
-#endif
-
-/**
- * .. _client-services:
- *
- * Services
- * --------
- *
- * The raw OPC UA services are exposed to the client. But most of them time, it
- * is better to use the convenience functions from ``ua_client_highlevel.h``
- * that wrap the raw services. */
-/* Don't use this function. Use the type versions below instead. */
-void UA_EXPORT
-__UA_Client_Service(UA_Client *client, const void *request,
-                    const UA_DataType *requestType, void *response,
-                    const UA_DataType *responseType);
-
-/*
- * Attribute Service Set
- * ^^^^^^^^^^^^^^^^^^^^^ */
-static UA_INLINE UA_ReadResponse
-UA_Client_Service_read(UA_Client *client, const UA_ReadRequest request) {
-    UA_ReadResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_READREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_READRESPONSE]);
-    return response;
-}
-
-static UA_INLINE UA_WriteResponse
-UA_Client_Service_write(UA_Client *client, const UA_WriteRequest request) {
-    UA_WriteResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_WRITEREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_WRITERESPONSE]);
-    return response;
-}
-
-/*
-* Historical Access Service Set
-* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
-#ifdef UA_ENABLE_HISTORIZING
-static UA_INLINE UA_HistoryReadResponse
-UA_Client_Service_historyRead(UA_Client *client, const UA_HistoryReadRequest request) {
-    UA_HistoryReadResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_HISTORYREADREQUEST],
-        &response, &UA_TYPES[UA_TYPES_HISTORYREADRESPONSE]);
-    return response;
-}
-
-static UA_INLINE UA_HistoryUpdateResponse
-UA_Client_Service_historyUpdate(UA_Client *client, const UA_HistoryUpdateRequest request) {
-    UA_HistoryUpdateResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_HISTORYUPDATEREQUEST],
-        &response, &UA_TYPES[UA_TYPES_HISTORYUPDATERESPONSE]);
-    return response;
-}
-#endif
-
-/*
- * Method Service Set
- * ^^^^^^^^^^^^^^^^^^ */
-#ifdef UA_ENABLE_METHODCALLS
-static UA_INLINE UA_CallResponse
-UA_Client_Service_call(UA_Client *client, const UA_CallRequest request) {
-    UA_CallResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_CALLREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_CALLRESPONSE]);
-    return response;
-}
-#endif
-
-/*
- * NodeManagement Service Set
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^ */
-static UA_INLINE UA_AddNodesResponse
-UA_Client_Service_addNodes(UA_Client *client, const UA_AddNodesRequest request) {
-    UA_AddNodesResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_ADDNODESREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_ADDNODESRESPONSE]);
-    return response;
-}
-
-static UA_INLINE UA_AddReferencesResponse
-UA_Client_Service_addReferences(UA_Client *client,
-                                const UA_AddReferencesRequest request) {
-    UA_AddReferencesResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_ADDREFERENCESREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_ADDREFERENCESRESPONSE]);
-    return response;
-}
-
-static UA_INLINE UA_DeleteNodesResponse
-UA_Client_Service_deleteNodes(UA_Client *client,
-                              const UA_DeleteNodesRequest request) {
-    UA_DeleteNodesResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_DELETENODESREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_DELETENODESRESPONSE]);
-    return response;
-}
-
-static UA_INLINE UA_DeleteReferencesResponse
-UA_Client_Service_deleteReferences(UA_Client *client,
-                                   const UA_DeleteReferencesRequest request) {
-    UA_DeleteReferencesResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_DELETEREFERENCESREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_DELETEREFERENCESRESPONSE]);
-    return response;
-}
-
-/*
- * View Service Set
- * ^^^^^^^^^^^^^^^^ */
-static UA_INLINE UA_BrowseResponse
-UA_Client_Service_browse(UA_Client *client, const UA_BrowseRequest request) {
-    UA_BrowseResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_BROWSEREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_BROWSERESPONSE]);
-    return response;
-}
-
-static UA_INLINE UA_BrowseNextResponse
-UA_Client_Service_browseNext(UA_Client *client,
-                             const UA_BrowseNextRequest request) {
-    UA_BrowseNextResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_BROWSENEXTREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_BROWSENEXTRESPONSE]);
-    return response;
-}
-
-static UA_INLINE UA_TranslateBrowsePathsToNodeIdsResponse
-UA_Client_Service_translateBrowsePathsToNodeIds(UA_Client *client,
-                        const UA_TranslateBrowsePathsToNodeIdsRequest request) {
-    UA_TranslateBrowsePathsToNodeIdsResponse response;
-    __UA_Client_Service(client, &request,
-                        &UA_TYPES[UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSREQUEST],
-                        &response,
-                        &UA_TYPES[UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSRESPONSE]);
-    return response;
-}
-
-static UA_INLINE UA_RegisterNodesResponse
-UA_Client_Service_registerNodes(UA_Client *client,
-                                const UA_RegisterNodesRequest request) {
-    UA_RegisterNodesResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_REGISTERNODESREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_REGISTERNODESRESPONSE]);
-    return response;
-}
-
-static UA_INLINE UA_UnregisterNodesResponse
-UA_Client_Service_unregisterNodes(UA_Client *client,
-                                  const UA_UnregisterNodesRequest request) {
-    UA_UnregisterNodesResponse response;
-    __UA_Client_Service(client, &request,
-                        &UA_TYPES[UA_TYPES_UNREGISTERNODESREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_UNREGISTERNODESRESPONSE]);
-    return response;
-}
-
-/*
- * Query Service Set
- * ^^^^^^^^^^^^^^^^^ */
-#ifdef UA_ENABLE_QUERY
-
-static UA_INLINE UA_QueryFirstResponse
-UA_Client_Service_queryFirst(UA_Client *client,
-                             const UA_QueryFirstRequest request) {
-    UA_QueryFirstResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_QUERYFIRSTREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_QUERYFIRSTRESPONSE]);
-    return response;
-}
-
-static UA_INLINE UA_QueryNextResponse
-UA_Client_Service_queryNext(UA_Client *client,
-                            const UA_QueryNextRequest request) {
-    UA_QueryNextResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_QUERYFIRSTREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_QUERYFIRSTRESPONSE]);
-    return response;
-}
-
-#endif
-
-/**
- * .. _client-async-services:
- *
- * Asynchronous Services
- * ---------------------
- * All OPC UA services are asynchronous in nature. So several service calls can
- * be made without waiting for a response first. Responess may come in a
- * different ordering. */
-
-/* Use the type versions of this method. See below. However, the general
- * mechanism of async service calls is explained here.
- *
- * We say that an async service call has been dispatched once this method
- * returns UA_STATUSCODE_GOOD. If there is an error after an async service has
- * been dispatched, the callback is called with an "empty" response where the
- * statusCode has been set accordingly. This is also done if the client is
- * shutting down and the list of dispatched async services is emptied.
- *
- * The statusCode received when the client is shutting down is
- * UA_STATUSCODE_BADSHUTDOWN.
- *
- * The statusCode received when the client don't receive response
- * after specified config->timeout (in ms) is
- * UA_STATUSCODE_BADTIMEOUT.
- *
- * Instead, you can use __UA_Client_AsyncServiceEx to specify
- * a custom timeout
- *
- * The userdata and requestId arguments can be NULL. */
-UA_StatusCode UA_EXPORT
-__UA_Client_AsyncService(UA_Client *client, const void *request,
-                         const UA_DataType *requestType,
-                         UA_ClientAsyncServiceCallback callback,
-                         const UA_DataType *responseType,
-                         void *userdata, UA_UInt32 *requestId);
-
-UA_StatusCode UA_EXPORT
-UA_Client_sendAsyncRequest(UA_Client *client, const void *request,
-        const UA_DataType *requestType, UA_ClientAsyncServiceCallback callback,
-        const UA_DataType *responseType, void *userdata, UA_UInt32 *requestId);
-
-/* Listen on the network and process arriving asynchronous responses in the
- * background. Internal housekeeping, renewal of SecureChannels and subscription
- * management is done as well. */
-UA_StatusCode UA_EXPORT
-UA_Client_run_iterate(UA_Client *client, UA_UInt16 timeout);
-
-UA_DEPRECATED static UA_INLINE UA_StatusCode
-UA_Client_runAsync(UA_Client *client, UA_UInt16 timeout) {
-    return UA_Client_run_iterate(client, timeout);
-}
-
-UA_DEPRECATED static UA_INLINE UA_StatusCode
-UA_Client_manuallyRenewSecureChannel(UA_Client *client) {
-    return UA_Client_run_iterate(client, 0);
-}
-
-/* Use the type versions of this method. See below. However, the general
- * mechanism of async service calls is explained here.
- *
- * We say that an async service call has been dispatched once this method
- * returns UA_STATUSCODE_GOOD. If there is an error after an async service has
- * been dispatched, the callback is called with an "empty" response where the
- * statusCode has been set accordingly. This is also done if the client is
- * shutting down and the list of dispatched async services is emptied.
- *
- * The statusCode received when the client is shutting down is
- * UA_STATUSCODE_BADSHUTDOWN.
- *
- * The statusCode received when the client don't receive response
- * after specified timeout (in ms) is
- * UA_STATUSCODE_BADTIMEOUT.
- *
- * The timeout can be disabled by setting timeout to 0
- *
- * The userdata and requestId arguments can be NULL. */
-UA_StatusCode UA_EXPORT
-__UA_Client_AsyncServiceEx(UA_Client *client, const void *request,
-                           const UA_DataType *requestType,
-                           UA_ClientAsyncServiceCallback callback,
-                           const UA_DataType *responseType,
-                           void *userdata, UA_UInt32 *requestId,
-                           UA_UInt32 timeout);
-
-/**
- * Timed Callbacks
- * ---------------
- * Repeated callbacks can be attached to a client and will be executed in the
- * defined interval. */
-
-typedef void (*UA_ClientCallback)(UA_Client *client, void *data);
-
-/* Add a callback for execution at a specified time. If the indicated time lies
- * in the past, then the callback is executed at the next iteration of the
- * server's main loop.
- *
- * @param client The client object.
- * @param callback The callback that shall be added.
- * @param data Data that is forwarded to the callback.
- * @param date The timestamp for the execution time.
- * @param callbackId Set to the identifier of the repeated callback . This can
- *        be used to cancel the callback later on. If the pointer is null, the
- *        identifier is not set.
- * @return Upon success, UA_STATUSCODE_GOOD is returned. An error code
- *         otherwise. */
-UA_StatusCode UA_EXPORT
-UA_Client_addTimedCallback(UA_Client *client, UA_ClientCallback callback,
-                           void *data, UA_DateTime date, UA_UInt64 *callbackId);
-
-/* Add a callback for cyclic repetition to the client.
- *
- * @param client The client object.
- * @param callback The callback that shall be added.
- * @param data Data that is forwarded to the callback.
- * @param interval_ms The callback shall be repeatedly executed with the given
- *        interval (in ms). The interval must be positive. The first execution
- *        occurs at now() + interval at the latest.
- * @param callbackId Set to the identifier of the repeated callback . This can
- *        be used to cancel the callback later on. If the pointer is null, the
- *        identifier is not set.
- * @return Upon success, UA_STATUSCODE_GOOD is returned. An error code
- *         otherwise. */
-UA_StatusCode UA_EXPORT
-UA_Client_addRepeatedCallback(UA_Client *client, UA_ClientCallback callback,
-                              void *data, UA_Double interval_ms,
-                              UA_UInt64 *callbackId);
-
-UA_StatusCode UA_EXPORT
-UA_Client_changeRepeatedCallbackInterval(UA_Client *client,
-                                         UA_UInt64 callbackId,
-                                         UA_Double interval_ms);
-
-void UA_EXPORT
-UA_Client_removeCallback(UA_Client *client, UA_UInt64 callbackId);
-
-#define UA_Client_removeRepeatedCallback(client, callbackId) \
-    UA_Client_removeCallback(client, callbackId)
-
-/**
- * .. toctree::
- *
- *    client_highlevel
- *    client_subscriptions */
-
-_UA_END_DECLS
-
-#endif /* UA_CLIENT_H_ */
diff --git a/ext/open62541/include/open62541/client_config.h b/ext/open62541/include/open62541/client_config.h
deleted file mode 100644
index 0ba72ca..0000000
--- a/ext/open62541/include/open62541/client_config.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2018 (c) Thomas Stalder, Blue Time Concept SA
- */
-
-#ifndef UA_CLIENT_CONFIG_H
-#define UA_CLIENT_CONFIG_H
-
-#include <open62541/config.h>
-#include <open62541/plugin/log.h>
-#include <open62541/plugin/network.h>
-#include <open62541/plugin/securitypolicy.h>
-
-_UA_BEGIN_DECLS
-
-struct UA_Client;
-typedef struct UA_Client UA_Client;
-
-/**
- * .. _client-config:
- *
- * Client Configuration
- * --------------------
- *
- * The client configuration is used for setting connection parameters and
- * additional settings used by the client.
- * The configuration should not be modified after it is passed to a client.
- * Currently, only one client can use a configuration at a time.
- *
- * Examples for configurations are provided in the ``/plugins`` folder.
- * The usual usage is as follows:
- *
- * 1. Create a client configuration with default settings as a starting point
- * 2. Modifiy the configuration, e.g. modifying the timeout
- * 3. Instantiate a client with it
- * 4. After shutdown of the client, clean up the configuration (free memory)
- *
- * The :ref:`tutorials` provide a good starting point for this. */
-
-typedef enum {
-    UA_CLIENTSTATE_DISCONNECTED,         /* The client is disconnected */
-    UA_CLIENTSTATE_WAITING_FOR_ACK,      /* The Client has sent HEL and waiting */
-    UA_CLIENTSTATE_CONNECTED,            /* A TCP connection to the server is open */
-    UA_CLIENTSTATE_SECURECHANNEL,        /* A SecureChannel to the server is open */
-    UA_CLIENTSTATE_SESSION,              /* A session with the server is open */
-    UA_CLIENTSTATE_SESSION_DISCONNECTED, /* Disconnected vs renewed? */
-    UA_CLIENTSTATE_SESSION_RENEWED       /* A session with the server is open (renewed) */
-} UA_ClientState;
-
-typedef struct {
-    /* Basic client configuration */
-    void *clientContext; /* User-defined data attached to the client */
-    UA_Logger logger;   /* Logger used by the client */
-    UA_UInt32 timeout;  /* Response timeout in ms */
-    UA_ApplicationDescription clientDescription;
-
-    /* Basic connection configuration */
-    UA_ExtensionObject userIdentityToken; /* Configured User-Identity Token */
-    UA_MessageSecurityMode securityMode;  /* None, Sign, SignAndEncrypt. The
-                                           * default is invalid. This indicates
-                                           * the client to select any matching
-                                           * endpoint. */
-    UA_String securityPolicyUri; /* SecurityPolicy for the SecureChannel. An
-                                  * empty string indicates the client to select
-                                  * any matching SecurityPolicy. */
-
-    /* Advanced connection configuration
-     *
-     * If either endpoint or userTokenPolicy has been set (at least one non-zero
-     * byte in either structure), then the selected Endpoint and UserTokenPolicy
-     * overwrite the settings in the basic connection configuration. The
-     * userTokenPolicy array in the EndpointDescription is ignored. The selected
-     * userTokenPolicy is set in the dedicated configuration field.
-     *
-     * If the advanced configuration is not set, the client will write to it the
-     * selected Endpoint and UserTokenPolicy during GetEndpoints.
-     *
-     * The information in the advanced configuration is used during reconnect
-     * when the SecureChannel was broken. */
-    UA_EndpointDescription endpoint;
-    UA_UserTokenPolicy userTokenPolicy;
-
-    /* Advanced client configuration */
-
-    UA_UInt32 secureChannelLifeTime; /* Lifetime in ms (then the channel needs
-                                        to be renewed) */
-    UA_UInt32 requestedSessionTimeout; /* Session timeout in ms */
-    UA_ConnectionConfig localConnectionConfig;
-    UA_UInt32 connectivityCheckInterval;     /* Connectivity check interval in ms.
-                                              * 0 = background task disabled */
-    const UA_DataTypeArray *customDataTypes; /* Custom DataTypes. Attention!
-                                              * Custom datatypes are not cleaned
-                                              * up together with the
-                                              * configuration. So it is possible
-                                              * to allocate them on ROM. */
-
-    /* Available SecurityPolicies */
-    size_t securityPoliciesSize;
-    UA_SecurityPolicy *securityPolicies;
-
-    /* Certificate Verification Plugin */
-    UA_CertificateVerification certificateVerification;
-
-    /* Callbacks for async connection handshakes */
-    UA_ConnectClientConnection connectionFunc;
-    UA_ConnectClientConnection initConnectionFunc;
-    void (*pollConnectionFunc)(UA_Client *client, void *context);
-
-    /* Callback for state changes */
-    void (*stateCallback)(UA_Client *client, UA_ClientState clientState);
-
-    /* When connectivityCheckInterval is greater than 0, every
-     * connectivityCheckInterval (in ms), a async read request is performed on
-     * the server. inactivityCallback is called when the client receive no
-     * response for this read request The connection can be closed, this in an
-     * attempt to recreate a healthy connection. */
-    void (*inactivityCallback)(UA_Client *client);
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    /* Number of PublishResponse queued up in the server */
-    UA_UInt16 outStandingPublishRequests;
-
-    /* If the client does not receive a PublishResponse after the defined delay
-     * of ``(sub->publishingInterval * sub->maxKeepAliveCount) +
-     * client->config.timeout)``, then subscriptionInactivityCallback is called
-     * for the subscription.. */
-    void (*subscriptionInactivityCallback)(UA_Client *client,
-                                           UA_UInt32 subscriptionId,
-                                           void *subContext);
-#endif
-} UA_ClientConfig;
-
-_UA_END_DECLS
-
-#endif /* UA_CLIENT_CONFIG_H */
diff --git a/ext/open62541/include/open62541/client_highlevel.h b/ext/open62541/include/open62541/client_highlevel.h
deleted file mode 100644
index 77ba54a..0000000
--- a/ext/open62541/include/open62541/client_highlevel.h
+++ /dev/null
@@ -1,660 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2015-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Florian Palm
- *    Copyright 2016 (c) Chris Iatrou
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Frank Meerkötter
- *    Copyright 2018 (c) Fabian Arndt
- *    Copyright 2018 (c) Peter Rustler, basyskom GmbH
- */
-
-#ifndef UA_CLIENT_HIGHLEVEL_H_
-#define UA_CLIENT_HIGHLEVEL_H_
-
-#include <open62541/client.h>
-
-_UA_BEGIN_DECLS
-
-/**
- * .. _client-highlevel:
- *
- * Highlevel Client Functionality
- * ------------------------------
- *
- * The following definitions are convenience functions making use of the
- * standard OPC UA services in the background. This is a less flexible way of
- * handling the stack, because at many places sensible defaults are presumed; at
- * the same time using these functions is the easiest way of implementing an OPC
- * UA application, as you will not have to consider all the details that go into
- * the OPC UA services. If more flexibility is needed, you can always achieve
- * the same functionality using the raw :ref:`OPC UA services
- * <client-services>`.
- *
- * Read Attributes
- * ^^^^^^^^^^^^^^^
- * The following functions can be used to retrieve a single node attribute. Use
- * the regular service to read several attributes at once. */
-
-/* Don't call this function, use the typed versions */
-UA_StatusCode UA_EXPORT
-__UA_Client_readAttribute(UA_Client *client, const UA_NodeId *nodeId,
-                          UA_AttributeId attributeId, void *out,
-                          const UA_DataType *outDataType);
-
-static UA_INLINE UA_StatusCode
-UA_Client_readNodeIdAttribute(UA_Client *client, const UA_NodeId nodeId,
-                              UA_NodeId *outNodeId) {
-    return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_NODEID,
-                                     outNodeId, &UA_TYPES[UA_TYPES_NODEID]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readNodeClassAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                 UA_NodeClass *outNodeClass) {
-    return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_NODECLASS,
-                                     outNodeClass, &UA_TYPES[UA_TYPES_NODECLASS]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readBrowseNameAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                  UA_QualifiedName *outBrowseName) {
-    return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_BROWSENAME,
-                                     outBrowseName,
-                                     &UA_TYPES[UA_TYPES_QUALIFIEDNAME]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readDisplayNameAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                   UA_LocalizedText *outDisplayName) {
-    return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_DISPLAYNAME,
-                                     outDisplayName,
-                                     &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readDescriptionAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                   UA_LocalizedText *outDescription) {
-    return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_DESCRIPTION,
-                                     outDescription,
-                                     &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readWriteMaskAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                 UA_UInt32 *outWriteMask) {
-    return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_WRITEMASK,
-                                     outWriteMask, &UA_TYPES[UA_TYPES_UINT32]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readUserWriteMaskAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                     UA_UInt32 *outUserWriteMask) {
-    return __UA_Client_readAttribute(client, &nodeId,
-                                     UA_ATTRIBUTEID_USERWRITEMASK,
-                                     outUserWriteMask,
-                                     &UA_TYPES[UA_TYPES_UINT32]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readIsAbstractAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                  UA_Boolean *outIsAbstract) {
-    return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_ISABSTRACT,
-                                     outIsAbstract, &UA_TYPES[UA_TYPES_BOOLEAN]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readSymmetricAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                 UA_Boolean *outSymmetric) {
-    return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_SYMMETRIC,
-                                     outSymmetric, &UA_TYPES[UA_TYPES_BOOLEAN]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readInverseNameAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                   UA_LocalizedText *outInverseName) {
-    return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_INVERSENAME,
-                                     outInverseName,
-                                     &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readContainsNoLoopsAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                       UA_Boolean *outContainsNoLoops) {
-    return __UA_Client_readAttribute(client, &nodeId,
-                                     UA_ATTRIBUTEID_CONTAINSNOLOOPS,
-                                     outContainsNoLoops,
-                                     &UA_TYPES[UA_TYPES_BOOLEAN]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readEventNotifierAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                     UA_Byte *outEventNotifier) {
-    return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_EVENTNOTIFIER,
-                                     outEventNotifier, &UA_TYPES[UA_TYPES_BYTE]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readValueAttribute(UA_Client *client, const UA_NodeId nodeId,
-                             UA_Variant *outValue) {
-    return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_VALUE,
-                                     outValue, &UA_TYPES[UA_TYPES_VARIANT]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readDataTypeAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                UA_NodeId *outDataType) {
-    return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_DATATYPE,
-                                     outDataType, &UA_TYPES[UA_TYPES_NODEID]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readValueRankAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                 UA_Int32 *outValueRank) {
-    return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_VALUERANK,
-                                     outValueRank, &UA_TYPES[UA_TYPES_INT32]);
-}
-
-UA_StatusCode UA_EXPORT
-UA_Client_readArrayDimensionsAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                       size_t *outArrayDimensionsSize,
-                                       UA_UInt32 **outArrayDimensions);
-
-static UA_INLINE UA_StatusCode
-UA_Client_readAccessLevelAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                   UA_Byte *outAccessLevel) {
-    return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_ACCESSLEVEL,
-                                     outAccessLevel, &UA_TYPES[UA_TYPES_BYTE]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readUserAccessLevelAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                       UA_Byte *outUserAccessLevel) {
-    return __UA_Client_readAttribute(client, &nodeId,
-                                     UA_ATTRIBUTEID_USERACCESSLEVEL,
-                                     outUserAccessLevel,
-                                     &UA_TYPES[UA_TYPES_BYTE]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readMinimumSamplingIntervalAttribute(UA_Client *client,
-                                               const UA_NodeId nodeId,
-                                               UA_Double *outMinSamplingInterval) {
-    return __UA_Client_readAttribute(client, &nodeId,
-                                     UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL,
-                                     outMinSamplingInterval,
-                                     &UA_TYPES[UA_TYPES_DOUBLE]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readHistorizingAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                   UA_Boolean *outHistorizing) {
-    return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_HISTORIZING,
-                                     outHistorizing, &UA_TYPES[UA_TYPES_BOOLEAN]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readExecutableAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                  UA_Boolean *outExecutable) {
-    return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_EXECUTABLE,
-                                     outExecutable, &UA_TYPES[UA_TYPES_BOOLEAN]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_readUserExecutableAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                      UA_Boolean *outUserExecutable) {
-    return __UA_Client_readAttribute(client, &nodeId,
-                                     UA_ATTRIBUTEID_USEREXECUTABLE,
-                                     outUserExecutable,
-                                     &UA_TYPES[UA_TYPES_BOOLEAN]);
-}
-
-/**
- * Historical Access
- * ^^^^^^^^^^^^^^^^^
- * The following functions can be used to read a single node historically.
- * Use the regular service to read several nodes at once. */
-
-#ifdef UA_ENABLE_HISTORIZING
-typedef UA_Boolean
-(*UA_HistoricalIteratorCallback)(UA_Client *client,
-                                 const UA_NodeId *nodeId,
-                                 UA_Boolean moreDataAvailable,
-                                 const UA_ExtensionObject *data, void *callbackContext);
-
-#ifdef UA_ENABLE_EXPERIMENTAL_HISTORIZING
-UA_StatusCode UA_EXPORT
-UA_Client_HistoryRead_events(UA_Client *client, const UA_NodeId *nodeId,
-                                const UA_HistoricalIteratorCallback callback,
-                                UA_DateTime startTime, UA_DateTime endTime,
-                                UA_String indexRange, const UA_EventFilter filter, UA_UInt32 numValuesPerNode,
-                                UA_TimestampsToReturn timestampsToReturn, void *callbackContext);
-#endif // UA_ENABLE_EXPERIMENTAL_HISTORIZING
-
-UA_StatusCode UA_EXPORT
-UA_Client_HistoryRead_raw(UA_Client *client, const UA_NodeId *nodeId,
-                             const UA_HistoricalIteratorCallback callback,
-                             UA_DateTime startTime, UA_DateTime endTime,
-                             UA_String indexRange, UA_Boolean returnBounds, UA_UInt32 numValuesPerNode,
-                             UA_TimestampsToReturn timestampsToReturn, void *callbackContext);
-
-#ifdef UA_ENABLE_EXPERIMENTAL_HISTORIZING
-UA_StatusCode UA_EXPORT
-UA_Client_HistoryRead_modified(UA_Client *client, const UA_NodeId *nodeId,
-                                  const UA_HistoricalIteratorCallback callback,
-                                  UA_DateTime startTime, UA_DateTime endTime,
-                                  UA_String indexRange, UA_Boolean returnBounds, UA_UInt32 numValuesPerNode,
-                                  UA_TimestampsToReturn timestampsToReturn, void *callbackContext);
-#endif // UA_ENABLE_EXPERIMENTAL_HISTORIZING
-
-UA_StatusCode UA_EXPORT
-UA_Client_HistoryUpdate_insert(UA_Client *client,
-                               const UA_NodeId *nodeId,
-                               UA_DataValue *value);
-
-UA_StatusCode UA_EXPORT
-UA_Client_HistoryUpdate_replace(UA_Client *client,
-                                const UA_NodeId *nodeId,
-                                UA_DataValue *value);
-
-UA_StatusCode UA_EXPORT
-UA_Client_HistoryUpdate_update(UA_Client *client,
-                               const UA_NodeId *nodeId,
-                               UA_DataValue *value);
-
-UA_StatusCode UA_EXPORT
-UA_Client_HistoryUpdate_deleteRaw(UA_Client *client,
-                                  const UA_NodeId *nodeId,
-                                  UA_DateTime startTimestamp,
-                                  UA_DateTime endTimestamp);
-
-#endif // UA_ENABLE_HISTORIZING
-
-/**
- * Write Attributes
- * ^^^^^^^^^^^^^^^^
- *
- * The following functions can be use to write a single node attribute at a
- * time. Use the regular write service to write several attributes at once. */
-
-/* Don't call this function, use the typed versions */
-UA_StatusCode UA_EXPORT
-__UA_Client_writeAttribute(UA_Client *client, const UA_NodeId *nodeId,
-                           UA_AttributeId attributeId, const void *in,
-                           const UA_DataType *inDataType);
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeNodeIdAttribute(UA_Client *client, const UA_NodeId nodeId,
-                               const UA_NodeId *newNodeId) {
-    return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_NODEID,
-                                      newNodeId, &UA_TYPES[UA_TYPES_NODEID]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeNodeClassAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                  const UA_NodeClass *newNodeClass) {
-    return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_NODECLASS,
-                                      newNodeClass, &UA_TYPES[UA_TYPES_NODECLASS]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeBrowseNameAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                   const UA_QualifiedName *newBrowseName) {
-    return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_BROWSENAME,
-                                      newBrowseName,
-                                      &UA_TYPES[UA_TYPES_QUALIFIEDNAME]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeDisplayNameAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                    const UA_LocalizedText *newDisplayName) {
-    return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_DISPLAYNAME,
-                                      newDisplayName,
-                                      &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeDescriptionAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                    const UA_LocalizedText *newDescription) {
-    return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_DESCRIPTION,
-                                      newDescription,
-                                      &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeWriteMaskAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                  const UA_UInt32 *newWriteMask) {
-    return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_WRITEMASK,
-                                      newWriteMask, &UA_TYPES[UA_TYPES_UINT32]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeUserWriteMaskAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                      const UA_UInt32 *newUserWriteMask) {
-    return __UA_Client_writeAttribute(client, &nodeId,
-                                      UA_ATTRIBUTEID_USERWRITEMASK,
-                                      newUserWriteMask,
-                                      &UA_TYPES[UA_TYPES_UINT32]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeIsAbstractAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                   const UA_Boolean *newIsAbstract) {
-    return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_ISABSTRACT,
-                                      newIsAbstract, &UA_TYPES[UA_TYPES_BOOLEAN]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeSymmetricAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                  const UA_Boolean *newSymmetric) {
-    return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_SYMMETRIC,
-                                      newSymmetric, &UA_TYPES[UA_TYPES_BOOLEAN]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeInverseNameAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                    const UA_LocalizedText *newInverseName) {
-    return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_INVERSENAME,
-                                      newInverseName,
-                                      &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeContainsNoLoopsAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                        const UA_Boolean *newContainsNoLoops) {
-    return __UA_Client_writeAttribute(client, &nodeId,
-                                      UA_ATTRIBUTEID_CONTAINSNOLOOPS,
-                                      newContainsNoLoops,
-                                      &UA_TYPES[UA_TYPES_BOOLEAN]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeEventNotifierAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                      const UA_Byte *newEventNotifier) {
-    return __UA_Client_writeAttribute(client, &nodeId,
-                                      UA_ATTRIBUTEID_EVENTNOTIFIER,
-                                      newEventNotifier,
-                                      &UA_TYPES[UA_TYPES_BYTE]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeValueAttribute(UA_Client *client, const UA_NodeId nodeId,
-                              const UA_Variant *newValue) {
-    return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_VALUE,
-                                      newValue, &UA_TYPES[UA_TYPES_VARIANT]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeDataTypeAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                 const UA_NodeId *newDataType) {
-    return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_DATATYPE,
-                                      newDataType, &UA_TYPES[UA_TYPES_NODEID]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeValueRankAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                  const UA_Int32 *newValueRank) {
-    return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_VALUERANK,
-                                      newValueRank, &UA_TYPES[UA_TYPES_INT32]);
-}
-
-UA_StatusCode UA_EXPORT
-UA_Client_writeArrayDimensionsAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                        size_t newArrayDimensionsSize,
-                                        const UA_UInt32 *newArrayDimensions);
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeAccessLevelAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                    const UA_Byte *newAccessLevel) {
-    return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_ACCESSLEVEL,
-                                      newAccessLevel, &UA_TYPES[UA_TYPES_BYTE]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeUserAccessLevelAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                        const UA_Byte *newUserAccessLevel) {
-    return __UA_Client_writeAttribute(client, &nodeId,
-                                      UA_ATTRIBUTEID_USERACCESSLEVEL,
-                                      newUserAccessLevel,
-                                      &UA_TYPES[UA_TYPES_BYTE]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeMinimumSamplingIntervalAttribute(UA_Client *client,
-                                                const UA_NodeId nodeId,
-                                                const UA_Double *newMinInterval) {
-    return __UA_Client_writeAttribute(client, &nodeId,
-                                      UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL,
-                                      newMinInterval, &UA_TYPES[UA_TYPES_DOUBLE]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeHistorizingAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                    const UA_Boolean *newHistorizing) {
-    return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_HISTORIZING,
-                                      newHistorizing, &UA_TYPES[UA_TYPES_BOOLEAN]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeExecutableAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                   const UA_Boolean *newExecutable) {
-    return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_EXECUTABLE,
-                                      newExecutable, &UA_TYPES[UA_TYPES_BOOLEAN]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeUserExecutableAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                       const UA_Boolean *newUserExecutable) {
-    return __UA_Client_writeAttribute(client, &nodeId,
-                                      UA_ATTRIBUTEID_USEREXECUTABLE,
-                                      newUserExecutable,
-                                      &UA_TYPES[UA_TYPES_BOOLEAN]);
-}
-
-/**
- * Method Calling
- * ^^^^^^^^^^^^^^ */
-
-#ifdef UA_ENABLE_METHODCALLS
-UA_StatusCode UA_EXPORT
-UA_Client_call(UA_Client *client, const UA_NodeId objectId,
-               const UA_NodeId methodId, size_t inputSize, const UA_Variant *input,
-               size_t *outputSize, UA_Variant **output);
-#endif
-
-/**
- * Node Management
- * ^^^^^^^^^^^^^^^
- * See the section on :ref:`server-side node management <addnodes>`. */
-
-UA_StatusCode UA_EXPORT
-UA_Client_addReference(UA_Client *client, const UA_NodeId sourceNodeId,
-                       const UA_NodeId referenceTypeId, UA_Boolean isForward,
-                       const UA_String targetServerUri,
-                       const UA_ExpandedNodeId targetNodeId,
-                       UA_NodeClass targetNodeClass);
-
-UA_StatusCode UA_EXPORT
-UA_Client_deleteReference(UA_Client *client, const UA_NodeId sourceNodeId,
-                          const UA_NodeId referenceTypeId, UA_Boolean isForward,
-                          const UA_ExpandedNodeId targetNodeId,
-                          UA_Boolean deleteBidirectional);
-
-UA_StatusCode UA_EXPORT
-UA_Client_deleteNode(UA_Client *client, const UA_NodeId nodeId,
-                     UA_Boolean deleteTargetReferences);
-
-/* Protect against redundant definitions for server/client */
-#ifndef UA_DEFAULT_ATTRIBUTES_DEFINED
-#define UA_DEFAULT_ATTRIBUTES_DEFINED
-/* The default for variables is "BaseDataType" for the datatype, -2 for the
- * valuerank and a read-accesslevel. */
-UA_EXPORT extern const UA_VariableAttributes UA_VariableAttributes_default;
-UA_EXPORT extern const UA_VariableTypeAttributes UA_VariableTypeAttributes_default;
-/* Methods are executable by default */
-UA_EXPORT extern const UA_MethodAttributes UA_MethodAttributes_default;
-/* The remaining attribute definitions are currently all zeroed out */
-UA_EXPORT extern const UA_ObjectAttributes UA_ObjectAttributes_default;
-UA_EXPORT extern const UA_ObjectTypeAttributes UA_ObjectTypeAttributes_default;
-UA_EXPORT extern const UA_ReferenceTypeAttributes UA_ReferenceTypeAttributes_default;
-UA_EXPORT extern const UA_DataTypeAttributes UA_DataTypeAttributes_default;
-UA_EXPORT extern const UA_ViewAttributes UA_ViewAttributes_default;
-#endif
-
-/* Don't call this function, use the typed versions */
-UA_StatusCode UA_EXPORT
-__UA_Client_addNode(UA_Client *client, const UA_NodeClass nodeClass,
-                    const UA_NodeId requestedNewNodeId,
-                    const UA_NodeId parentNodeId,
-                    const UA_NodeId referenceTypeId,
-                    const UA_QualifiedName browseName,
-                    const UA_NodeId typeDefinition, const UA_NodeAttributes *attr,
-                    const UA_DataType *attributeType, UA_NodeId *outNewNodeId);
-
-static UA_INLINE UA_StatusCode
-UA_Client_addVariableNode(UA_Client *client, const UA_NodeId requestedNewNodeId,
-                          const UA_NodeId parentNodeId,
-                          const UA_NodeId referenceTypeId,
-                          const UA_QualifiedName browseName,
-                          const UA_NodeId typeDefinition,
-                          const UA_VariableAttributes attr,
-                          UA_NodeId *outNewNodeId) {
-    return __UA_Client_addNode(client, UA_NODECLASS_VARIABLE, requestedNewNodeId,
-                               parentNodeId, referenceTypeId, browseName,
-                               typeDefinition, (const UA_NodeAttributes*)&attr,
-                               &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES],
-                               outNewNodeId);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_addVariableTypeNode(UA_Client *client,
-                              const UA_NodeId requestedNewNodeId,
-                              const UA_NodeId parentNodeId,
-                              const UA_NodeId referenceTypeId,
-                              const UA_QualifiedName browseName,
-                              const UA_VariableTypeAttributes attr,
-                              UA_NodeId *outNewNodeId) {
-    return __UA_Client_addNode(client, UA_NODECLASS_VARIABLETYPE,
-                               requestedNewNodeId,
-                               parentNodeId, referenceTypeId, browseName,
-                               UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
-                               &UA_TYPES[UA_TYPES_VARIABLETYPEATTRIBUTES],
-                               outNewNodeId);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_addObjectNode(UA_Client *client, const UA_NodeId requestedNewNodeId,
-                        const UA_NodeId parentNodeId,
-                        const UA_NodeId referenceTypeId,
-                        const UA_QualifiedName browseName,
-                        const UA_NodeId typeDefinition,
-                        const UA_ObjectAttributes attr, UA_NodeId *outNewNodeId) {
-    return __UA_Client_addNode(client, UA_NODECLASS_OBJECT, requestedNewNodeId,
-                               parentNodeId, referenceTypeId, browseName,
-                               typeDefinition, (const UA_NodeAttributes*)&attr,
-                               &UA_TYPES[UA_TYPES_OBJECTATTRIBUTES], outNewNodeId);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_addObjectTypeNode(UA_Client *client, const UA_NodeId requestedNewNodeId,
-                            const UA_NodeId parentNodeId,
-                            const UA_NodeId referenceTypeId,
-                            const UA_QualifiedName browseName,
-                            const UA_ObjectTypeAttributes attr,
-                            UA_NodeId *outNewNodeId) {
-    return __UA_Client_addNode(client, UA_NODECLASS_OBJECTTYPE, requestedNewNodeId,
-                               parentNodeId, referenceTypeId, browseName,
-                               UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
-                               &UA_TYPES[UA_TYPES_OBJECTTYPEATTRIBUTES],
-                               outNewNodeId);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_addViewNode(UA_Client *client, const UA_NodeId requestedNewNodeId,
-                      const UA_NodeId parentNodeId,
-                      const UA_NodeId referenceTypeId,
-                      const UA_QualifiedName browseName,
-                      const UA_ViewAttributes attr,
-                      UA_NodeId *outNewNodeId) {
-    return __UA_Client_addNode(client, UA_NODECLASS_VIEW, requestedNewNodeId,
-                               parentNodeId, referenceTypeId, browseName,
-                               UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
-                               &UA_TYPES[UA_TYPES_VIEWATTRIBUTES], outNewNodeId);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_addReferenceTypeNode(UA_Client *client,
-                               const UA_NodeId requestedNewNodeId,
-                               const UA_NodeId parentNodeId,
-                               const UA_NodeId referenceTypeId,
-                               const UA_QualifiedName browseName,
-                               const UA_ReferenceTypeAttributes attr,
-                               UA_NodeId *outNewNodeId) {
-    return __UA_Client_addNode(client, UA_NODECLASS_REFERENCETYPE,
-                               requestedNewNodeId,
-                               parentNodeId, referenceTypeId, browseName,
-                               UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
-                               &UA_TYPES[UA_TYPES_REFERENCETYPEATTRIBUTES],
-                               outNewNodeId);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_addDataTypeNode(UA_Client *client, const UA_NodeId requestedNewNodeId,
-                          const UA_NodeId parentNodeId,
-                          const UA_NodeId referenceTypeId,
-                          const UA_QualifiedName browseName,
-                          const UA_DataTypeAttributes attr,
-                          UA_NodeId *outNewNodeId) {
-    return __UA_Client_addNode(client, UA_NODECLASS_DATATYPE, requestedNewNodeId,
-                               parentNodeId, referenceTypeId, browseName,
-                               UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
-                               &UA_TYPES[UA_TYPES_DATATYPEATTRIBUTES],
-                               outNewNodeId);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_addMethodNode(UA_Client *client, const UA_NodeId requestedNewNodeId,
-                        const UA_NodeId parentNodeId,
-                        const UA_NodeId referenceTypeId,
-                        const UA_QualifiedName browseName,
-                        const UA_MethodAttributes attr,
-                        UA_NodeId *outNewNodeId) {
-    return __UA_Client_addNode(client, UA_NODECLASS_METHOD, requestedNewNodeId,
-                               parentNodeId, referenceTypeId, browseName,
-                               UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
-                               &UA_TYPES[UA_TYPES_METHODATTRIBUTES], outNewNodeId);
-}
-
-/**
- * Misc Highlevel Functionality
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
-
-/* Get the namespace-index of a namespace-URI
- *
- * @param client The UA_Client struct for this connection
- * @param namespaceUri The interested namespace URI
- * @param namespaceIndex The namespace index of the URI. The value is unchanged
- *        in case of an error
- * @return Indicates whether the operation succeeded or returns an error code */
-UA_StatusCode UA_EXPORT
-UA_Client_NamespaceGetIndex(UA_Client *client, UA_String *namespaceUri,
-                            UA_UInt16 *namespaceIndex);
-
-#ifndef HAVE_NODEITER_CALLBACK
-#define HAVE_NODEITER_CALLBACK
-/* Iterate over all nodes referenced by parentNodeId by calling the callback
-   function for each child node */
-typedef UA_StatusCode (*UA_NodeIteratorCallback)(UA_NodeId childId, UA_Boolean isInverse,
-                                                 UA_NodeId referenceTypeId, void *handle);
-#endif
-
-UA_StatusCode UA_EXPORT
-UA_Client_forEachChildNodeCall(UA_Client *client, UA_NodeId parentNodeId,
-                               UA_NodeIteratorCallback callback, void *handle);
-
-_UA_END_DECLS
-
-#endif /* UA_CLIENT_HIGHLEVEL_H_ */
diff --git a/ext/open62541/include/open62541/client_highlevel_async.h b/ext/open62541/include/open62541/client_highlevel_async.h
deleted file mode 100644
index 6f45624..0000000
--- a/ext/open62541/include/open62541/client_highlevel_async.h
+++ /dev/null
@@ -1,722 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) Thomas Stalder, Blue Time Concept SA
- *    Copyright 2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- */
-
-#ifndef UA_CLIENT_HIGHLEVEL_ASYNC_H_
-#define UA_CLIENT_HIGHLEVEL_ASYNC_H_
-
-#include <open62541/client.h>
-
-_UA_BEGIN_DECLS
-
-/**
- * Raw Services
- * ^^^^^^^^^^^^ */
-
-typedef void (*UA_ClientAsyncReadCallback)(UA_Client *client, void *userdata,
-                                           UA_UInt32 requestId, UA_ReadResponse *rr);
-static UA_INLINE UA_StatusCode
-UA_Client_sendAsyncReadRequest(UA_Client *client, UA_ReadRequest *request,
-                               UA_ClientAsyncReadCallback readCallback, void *userdata,
-                               UA_UInt32 *reqId) {
-    return UA_Client_sendAsyncRequest(client, request, &UA_TYPES[UA_TYPES_READREQUEST],
-                                      (UA_ClientAsyncServiceCallback)readCallback,
-                                      &UA_TYPES[UA_TYPES_READRESPONSE], userdata, reqId);
-}
-
-typedef void (*UA_ClientAsyncWriteCallback)(UA_Client *client, void *userdata,
-                                            UA_UInt32 requestId, UA_WriteResponse *wr);
-static UA_INLINE UA_StatusCode
-UA_Client_sendAsyncWriteRequest(UA_Client *client, UA_WriteRequest *request,
-                                UA_ClientAsyncWriteCallback writeCallback, void *userdata,
-                                UA_UInt32 *reqId) {
-    return UA_Client_sendAsyncRequest(client, request, &UA_TYPES[UA_TYPES_WRITEREQUEST],
-                                      (UA_ClientAsyncServiceCallback)writeCallback,
-                                      &UA_TYPES[UA_TYPES_WRITERESPONSE], userdata, reqId);
-}
-
-typedef void (*UA_ClientAsyncBrowseCallback)(UA_Client *client, void *userdata,
-                                             UA_UInt32 requestId, UA_BrowseResponse *wr);
-static UA_INLINE UA_StatusCode
-UA_Client_sendAsyncBrowseRequest(UA_Client *client, UA_BrowseRequest *request,
-                                 UA_ClientAsyncBrowseCallback browseCallback,
-                                 void *userdata, UA_UInt32 *reqId) {
-    return UA_Client_sendAsyncRequest(client, request, &UA_TYPES[UA_TYPES_BROWSEREQUEST],
-                                      (UA_ClientAsyncServiceCallback)browseCallback,
-                                      &UA_TYPES[UA_TYPES_BROWSERESPONSE], userdata,
-                                      reqId);
-}
-
-/**
- * Read Attribute
- * ^^^^^^^^^^^^^^ */
-UA_StatusCode UA_EXPORT
-__UA_Client_readAttribute_async(UA_Client *client, const UA_NodeId *nodeId,
-                                UA_AttributeId attributeId,
-                                const UA_DataType *outDataType,
-                                UA_ClientAsyncServiceCallback callback, void *userdata,
-                                UA_UInt32 *reqId);
-
-typedef void (*UA_ClientAsyncReadDataTypeAttributeCallback)(UA_Client *client,
-                                                            void *userdata,
-                                                            UA_UInt32 requestId,
-                                                            UA_NodeId *var);
-static UA_INLINE UA_StatusCode
-UA_Client_readDataTypeAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadDataTypeAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_DATATYPE, &UA_TYPES[UA_TYPES_NODEID],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-
-typedef void (*UA_ClientAsyncReadValueAttributeCallback)(UA_Client *client,
-                                                         void *userdata,
-                                                         UA_UInt32 requestId,
-                                                         UA_Variant *var);
-static UA_INLINE UA_StatusCode
-UA_Client_readValueAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                   UA_ClientAsyncReadValueAttributeCallback callback,
-                                   void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_VALUE, &UA_TYPES[UA_TYPES_VARIANT],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-
-typedef void (*UA_ClientAsyncReadNodeIdAttributeCallback)(UA_Client *client,
-                                                          void *userdata,
-                                                          UA_UInt32 requestId,
-                                                          UA_NodeId *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readNodeIdAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                    UA_ClientAsyncReadNodeIdAttributeCallback callback,
-                                    void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_NODEID, &UA_TYPES[UA_TYPES_NODEID],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadNodeClassAttributeCallback)(UA_Client *client,
-                                                             void *userdata,
-                                                             UA_UInt32 requestId,
-                                                             UA_NodeClass *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readNodeClassAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadNodeClassAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_NODECLASS, &UA_TYPES[UA_TYPES_NODECLASS],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadBrowseNameAttributeCallback)(UA_Client *client,
-                                                              void *userdata,
-                                                              UA_UInt32 requestId,
-                                                              UA_QualifiedName *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readBrowseNameAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadBrowseNameAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_BROWSENAME, &UA_TYPES[UA_TYPES_QUALIFIEDNAME],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadDisplayNameAttributeCallback)(UA_Client *client,
-                                                               void *userdata,
-                                                               UA_UInt32 requestId,
-                                                               UA_LocalizedText *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readDisplayNameAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadDisplayNameAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_DISPLAYNAME, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadDescriptionAttributeCallback)(UA_Client *client,
-                                                               void *userdata,
-                                                               UA_UInt32 requestId,
-                                                               UA_LocalizedText *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readDescriptionAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadDescriptionAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_DESCRIPTION, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadWriteMaskAttributeCallback)(UA_Client *client,
-                                                             void *userdata,
-                                                             UA_UInt32 requestId,
-                                                             UA_UInt32 *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readWriteMaskAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadWriteMaskAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_WRITEMASK, &UA_TYPES[UA_TYPES_UINT32],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadUserWriteMaskAttributeCallback)(UA_Client *client,
-                                                                 void *userdata,
-                                                                 UA_UInt32 requestId,
-                                                                 UA_UInt32 *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readUserWriteMaskAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadUserWriteMaskAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_USERWRITEMASK, &UA_TYPES[UA_TYPES_UINT32],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadIsAbstractAttributeCallback)(UA_Client *client,
-                                                              void *userdata,
-                                                              UA_UInt32 requestId,
-                                                              UA_Boolean *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readIsAbstractAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadIsAbstractAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_ISABSTRACT, &UA_TYPES[UA_TYPES_BOOLEAN],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadSymmetricAttributeCallback)(UA_Client *client,
-                                                             void *userdata,
-                                                             UA_UInt32 requestId,
-                                                             UA_Boolean *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readSymmetricAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadSymmetricAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_SYMMETRIC, &UA_TYPES[UA_TYPES_BOOLEAN],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadInverseNameAttributeCallback)(UA_Client *client,
-                                                               void *userdata,
-                                                               UA_UInt32 requestId,
-                                                               UA_LocalizedText *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readInverseNameAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadInverseNameAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_INVERSENAME, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadContainsNoLoopsAttributeCallback)(UA_Client *client,
-                                                                   void *userdata,
-                                                                   UA_UInt32 requestId,
-                                                                   UA_Boolean *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readContainsNoLoopsAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadContainsNoLoopsAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_CONTAINSNOLOOPS, &UA_TYPES[UA_TYPES_BOOLEAN],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadEventNotifierAttributeCallback)(UA_Client *client,
-                                                                 void *userdata,
-                                                                 UA_UInt32 requestId,
-                                                                 UA_Byte *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readEventNotifierAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadEventNotifierAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_EVENTNOTIFIER, &UA_TYPES[UA_TYPES_BYTE],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadValueRankAttributeCallback)(UA_Client *client,
-                                                             void *userdata,
-                                                             UA_UInt32 requestId,
-                                                             UA_Int32 *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readValueRankAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadValueRankAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_VALUERANK, &UA_TYPES[UA_TYPES_INT32],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadAccessLevelAttributeCallback)(UA_Client *client,
-                                                               void *userdata,
-                                                               UA_UInt32 requestId,
-                                                               UA_Byte *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readAccessLevelAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadAccessLevelAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_ACCESSLEVEL, &UA_TYPES[UA_TYPES_BYTE],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadUserAccessLevelAttributeCallback)(UA_Client *client,
-                                                                   void *userdata,
-                                                                   UA_UInt32 requestId,
-                                                                   UA_Byte *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readUserAccessLevelAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadUserAccessLevelAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_USERACCESSLEVEL, &UA_TYPES[UA_TYPES_BYTE],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadMinimumSamplingIntervalAttributeCallback)(
-    UA_Client *client, void *userdata, UA_UInt32 requestId, UA_Double *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readMinimumSamplingIntervalAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadMinimumSamplingIntervalAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL,
-        &UA_TYPES[UA_TYPES_DOUBLE], (UA_ClientAsyncServiceCallback)callback, userdata,
-        reqId);
-}
-typedef void (*UA_ClientAsyncReadHistorizingAttributeCallback)(UA_Client *client,
-                                                               void *userdata,
-                                                               UA_UInt32 requestId,
-                                                               UA_Boolean *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readHistorizingAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadHistorizingAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_HISTORIZING, &UA_TYPES[UA_TYPES_BOOLEAN],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadExecutableAttributeCallback)(UA_Client *client,
-                                                              void *userdata,
-                                                              UA_UInt32 requestId,
-                                                              UA_Boolean *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readExecutableAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadExecutableAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_EXECUTABLE, &UA_TYPES[UA_TYPES_BOOLEAN],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadUserExecutableAttributeCallback)(UA_Client *client,
-                                                                  void *userdata,
-                                                                  UA_UInt32 requestId,
-                                                                  UA_Boolean *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readUserExecutableAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    UA_ClientAsyncReadUserExecutableAttributeCallback callback, void *userdata,
-    UA_UInt32 *reqId) {
-    return __UA_Client_readAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_USEREXECUTABLE, &UA_TYPES[UA_TYPES_BOOLEAN],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-/**
- * Write Attribute
- * ^^^^^^^^^^^^^^ */
-
-UA_StatusCode UA_EXPORT
-__UA_Client_writeAttribute_async(UA_Client *client, const UA_NodeId *nodeId,
-                                 UA_AttributeId attributeId, const void *in,
-                                 const UA_DataType *inDataType,
-                                 UA_ClientAsyncServiceCallback callback, void *userdata,
-                                 UA_UInt32 *reqId);
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeValueAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                    const UA_Variant *newValue,
-                                    UA_ClientAsyncWriteCallback callback, void *userdata,
-                                    UA_UInt32 *reqId) {
-
-    return __UA_Client_writeAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_VALUE, newValue, &UA_TYPES[UA_TYPES_VARIANT],
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_writeNodeIdAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                     const UA_NodeId *outNodeId,
-                                     UA_ClientAsyncServiceCallback callback,
-                                     void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(client, &nodeId, UA_ATTRIBUTEID_NODEID,
-                                            outNodeId, &UA_TYPES[UA_TYPES_NODEID],
-                                            callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeNodeClassAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                        const UA_NodeClass *outNodeClass,
-                                        UA_ClientAsyncServiceCallback callback,
-                                        void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(client, &nodeId, UA_ATTRIBUTEID_NODECLASS,
-                                            outNodeClass, &UA_TYPES[UA_TYPES_NODECLASS],
-                                            callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeBrowseNameAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                         const UA_QualifiedName *outBrowseName,
-                                         UA_ClientAsyncServiceCallback callback,
-                                         void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_BROWSENAME, outBrowseName,
-        &UA_TYPES[UA_TYPES_QUALIFIEDNAME], callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeDisplayNameAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                          const UA_LocalizedText *outDisplayName,
-                                          UA_ClientAsyncServiceCallback callback,
-                                          void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_DISPLAYNAME, outDisplayName,
-        &UA_TYPES[UA_TYPES_LOCALIZEDTEXT], callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeDescriptionAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                          const UA_LocalizedText *outDescription,
-                                          UA_ClientAsyncServiceCallback callback,
-                                          void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_DESCRIPTION, outDescription,
-        &UA_TYPES[UA_TYPES_LOCALIZEDTEXT], callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeWriteMaskAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                        const UA_UInt32 *outWriteMask,
-                                        UA_ClientAsyncServiceCallback callback,
-                                        void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(client, &nodeId, UA_ATTRIBUTEID_WRITEMASK,
-                                            outWriteMask, &UA_TYPES[UA_TYPES_UINT32],
-                                            callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeUserWriteMaskAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                            const UA_UInt32 *outUserWriteMask,
-                                            UA_ClientAsyncServiceCallback callback,
-                                            void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(client, &nodeId, UA_ATTRIBUTEID_USERWRITEMASK,
-                                            outUserWriteMask, &UA_TYPES[UA_TYPES_UINT32],
-                                            callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeIsAbstractAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                         const UA_Boolean *outIsAbstract,
-                                         UA_ClientAsyncServiceCallback callback,
-                                         void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(client, &nodeId, UA_ATTRIBUTEID_ISABSTRACT,
-                                            outIsAbstract, &UA_TYPES[UA_TYPES_BOOLEAN],
-                                            callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeSymmetricAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                        const UA_Boolean *outSymmetric,
-                                        UA_ClientAsyncServiceCallback callback,
-                                        void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(client, &nodeId, UA_ATTRIBUTEID_SYMMETRIC,
-                                            outSymmetric, &UA_TYPES[UA_TYPES_BOOLEAN],
-                                            callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeInverseNameAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                          const UA_LocalizedText *outInverseName,
-                                          UA_ClientAsyncServiceCallback callback,
-                                          void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_INVERSENAME, outInverseName,
-        &UA_TYPES[UA_TYPES_LOCALIZEDTEXT], callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeContainsNoLoopsAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                              const UA_Boolean *outContainsNoLoops,
-                                              UA_ClientAsyncServiceCallback callback,
-                                              void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_CONTAINSNOLOOPS, outContainsNoLoops,
-        &UA_TYPES[UA_TYPES_BOOLEAN], callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeEventNotifierAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                            const UA_Byte *outEventNotifier,
-                                            UA_ClientAsyncServiceCallback callback,
-                                            void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(client, &nodeId, UA_ATTRIBUTEID_EVENTNOTIFIER,
-                                            outEventNotifier, &UA_TYPES[UA_TYPES_BYTE],
-                                            callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeDataTypeAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                       const UA_NodeId *outDataType,
-                                       UA_ClientAsyncServiceCallback callback,
-                                       void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(client, &nodeId, UA_ATTRIBUTEID_DATATYPE,
-                                            outDataType, &UA_TYPES[UA_TYPES_NODEID],
-                                            callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeValueRankAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                        const UA_Int32 *outValueRank,
-                                        UA_ClientAsyncServiceCallback callback,
-                                        void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(client, &nodeId, UA_ATTRIBUTEID_VALUERANK,
-                                            outValueRank, &UA_TYPES[UA_TYPES_INT32],
-                                            callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeAccessLevelAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                          const UA_Byte *outAccessLevel,
-                                          UA_ClientAsyncServiceCallback callback,
-                                          void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(client, &nodeId, UA_ATTRIBUTEID_ACCESSLEVEL,
-                                            outAccessLevel, &UA_TYPES[UA_TYPES_BYTE],
-                                            callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeUserAccessLevelAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                              const UA_Byte *outUserAccessLevel,
-                                              UA_ClientAsyncServiceCallback callback,
-                                              void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_USERACCESSLEVEL, outUserAccessLevel,
-        &UA_TYPES[UA_TYPES_BYTE], callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeMinimumSamplingIntervalAttribute_async(
-    UA_Client *client, const UA_NodeId nodeId,
-    const UA_Double *outMinimumSamplingInterval, UA_ClientAsyncServiceCallback callback,
-    void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL,
-        outMinimumSamplingInterval, &UA_TYPES[UA_TYPES_DOUBLE], callback, userdata,
-        reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeHistorizingAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                          const UA_Boolean *outHistorizing,
-                                          UA_ClientAsyncServiceCallback callback,
-                                          void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(client, &nodeId, UA_ATTRIBUTEID_HISTORIZING,
-                                            outHistorizing, &UA_TYPES[UA_TYPES_BOOLEAN],
-                                            callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeExecutableAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                         const UA_Boolean *outExecutable,
-                                         UA_ClientAsyncServiceCallback callback,
-                                         void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(client, &nodeId, UA_ATTRIBUTEID_EXECUTABLE,
-                                            outExecutable, &UA_TYPES[UA_TYPES_BOOLEAN],
-                                            callback, userdata, reqId);
-}
-static UA_INLINE UA_StatusCode
-UA_Client_writeUserExecutableAttribute_async(UA_Client *client, const UA_NodeId nodeId,
-                                             const UA_Boolean *outUserExecutable,
-                                             UA_ClientAsyncServiceCallback callback,
-                                             void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_writeAttribute_async(
-        client, &nodeId, UA_ATTRIBUTEID_USEREXECUTABLE, outUserExecutable,
-        &UA_TYPES[UA_TYPES_BOOLEAN], callback, userdata, reqId);
-}
-
-/**
- * Method Calling
- * ^^^^^^^^^^^^^^ */
-#ifdef UA_ENABLE_METHODCALLS
-UA_StatusCode UA_EXPORT
-__UA_Client_call_async(UA_Client *client, const UA_NodeId objectId,
-                       const UA_NodeId methodId, size_t inputSize,
-                       const UA_Variant *input, UA_ClientAsyncServiceCallback callback,
-                       void *userdata, UA_UInt32 *reqId);
-
-typedef void (*UA_ClientAsyncCallCallback)(UA_Client *client, void *userdata,
-                                           UA_UInt32 requestId, UA_CallResponse *cr);
-
-static UA_INLINE UA_StatusCode
-UA_Client_call_async(UA_Client *client, const UA_NodeId objectId,
-                     const UA_NodeId methodId, size_t inputSize, const UA_Variant *input,
-                     UA_ClientAsyncCallCallback callback, void *userdata,
-                     UA_UInt32 *reqId) {
-    return __UA_Client_call_async(client, objectId, methodId, inputSize, input,
-                                  (UA_ClientAsyncServiceCallback)callback, userdata,
-                                  reqId);
-}
-#endif
-
-/**
- * Node Management
- * ^^^^^^^^^^^^^^^ */
-typedef void (*UA_ClientAsyncAddNodesCallback)(UA_Client *client, void *userdata,
-                                               UA_UInt32 requestId,
-                                               UA_AddNodesResponse *ar);
-
-UA_StatusCode UA_EXPORT
-__UA_Client_addNode_async(UA_Client *client, const UA_NodeClass nodeClass,
-                          const UA_NodeId requestedNewNodeId,
-                          const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId,
-                          const UA_QualifiedName browseName,
-                          const UA_NodeId typeDefinition, const UA_NodeAttributes *attr,
-                          const UA_DataType *attributeType, UA_NodeId *outNewNodeId,
-                          UA_ClientAsyncServiceCallback callback, void *userdata,
-                          UA_UInt32 *reqId);
-
-static UA_INLINE UA_StatusCode
-UA_Client_addVariableNode_async(UA_Client *client, const UA_NodeId requestedNewNodeId,
-                                const UA_NodeId parentNodeId,
-                                const UA_NodeId referenceTypeId,
-                                const UA_QualifiedName browseName,
-                                const UA_NodeId typeDefinition,
-                                const UA_VariableAttributes attr, UA_NodeId *outNewNodeId,
-                                UA_ClientAsyncAddNodesCallback callback, void *userdata,
-                                UA_UInt32 *reqId) {
-    return __UA_Client_addNode_async(
-        client, UA_NODECLASS_VARIABLE, requestedNewNodeId, parentNodeId, referenceTypeId,
-        browseName, typeDefinition, (const UA_NodeAttributes *)&attr,
-        &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES], outNewNodeId,
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_addVariableTypeNode_async(
-    UA_Client *client, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId,
-    const UA_NodeId referenceTypeId, const UA_QualifiedName browseName,
-    const UA_VariableTypeAttributes attr, UA_NodeId *outNewNodeId,
-    UA_ClientAsyncAddNodesCallback callback, void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_addNode_async(
-        client, UA_NODECLASS_VARIABLETYPE, requestedNewNodeId, parentNodeId,
-        referenceTypeId, browseName, UA_NODEID_NULL, (const UA_NodeAttributes *)&attr,
-        &UA_TYPES[UA_TYPES_VARIABLETYPEATTRIBUTES], outNewNodeId,
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_addObjectNode_async(UA_Client *client, const UA_NodeId requestedNewNodeId,
-                              const UA_NodeId parentNodeId,
-                              const UA_NodeId referenceTypeId,
-                              const UA_QualifiedName browseName,
-                              const UA_NodeId typeDefinition,
-                              const UA_ObjectAttributes attr, UA_NodeId *outNewNodeId,
-                              UA_ClientAsyncAddNodesCallback callback, void *userdata,
-                              UA_UInt32 *reqId) {
-    return __UA_Client_addNode_async(
-        client, UA_NODECLASS_OBJECT, requestedNewNodeId, parentNodeId, referenceTypeId,
-        browseName, typeDefinition, (const UA_NodeAttributes *)&attr,
-        &UA_TYPES[UA_TYPES_OBJECTATTRIBUTES], outNewNodeId,
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_addObjectTypeNode_async(
-    UA_Client *client, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId,
-    const UA_NodeId referenceTypeId, const UA_QualifiedName browseName,
-    const UA_ObjectTypeAttributes attr, UA_NodeId *outNewNodeId,
-    UA_ClientAsyncAddNodesCallback callback, void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_addNode_async(
-        client, UA_NODECLASS_OBJECTTYPE, requestedNewNodeId, parentNodeId,
-        referenceTypeId, browseName, UA_NODEID_NULL, (const UA_NodeAttributes *)&attr,
-        &UA_TYPES[UA_TYPES_OBJECTTYPEATTRIBUTES], outNewNodeId,
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_addViewNode_async(UA_Client *client, const UA_NodeId requestedNewNodeId,
-                            const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId,
-                            const UA_QualifiedName browseName,
-                            const UA_ViewAttributes attr, UA_NodeId *outNewNodeId,
-                            UA_ClientAsyncAddNodesCallback callback, void *userdata,
-                            UA_UInt32 *reqId) {
-    return __UA_Client_addNode_async(
-        client, UA_NODECLASS_VIEW, requestedNewNodeId, parentNodeId, referenceTypeId,
-        browseName, UA_NODEID_NULL, (const UA_NodeAttributes *)&attr,
-        &UA_TYPES[UA_TYPES_VIEWATTRIBUTES], outNewNodeId,
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_addReferenceTypeNode_async(
-    UA_Client *client, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId,
-    const UA_NodeId referenceTypeId, const UA_QualifiedName browseName,
-    const UA_ReferenceTypeAttributes attr, UA_NodeId *outNewNodeId,
-    UA_ClientAsyncAddNodesCallback callback, void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_addNode_async(
-        client, UA_NODECLASS_REFERENCETYPE, requestedNewNodeId, parentNodeId,
-        referenceTypeId, browseName, UA_NODEID_NULL, (const UA_NodeAttributes *)&attr,
-        &UA_TYPES[UA_TYPES_REFERENCETYPEATTRIBUTES], outNewNodeId,
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_addDataTypeNode_async(UA_Client *client, const UA_NodeId requestedNewNodeId,
-                                const UA_NodeId parentNodeId,
-                                const UA_NodeId referenceTypeId,
-                                const UA_QualifiedName browseName,
-                                const UA_DataTypeAttributes attr, UA_NodeId *outNewNodeId,
-                                UA_ClientAsyncAddNodesCallback callback, void *userdata,
-                                UA_UInt32 *reqId) {
-    return __UA_Client_addNode_async(
-        client, UA_NODECLASS_DATATYPE, requestedNewNodeId, parentNodeId, referenceTypeId,
-        browseName, UA_NODEID_NULL, (const UA_NodeAttributes *)&attr,
-        &UA_TYPES[UA_TYPES_DATATYPEATTRIBUTES], outNewNodeId,
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-
-static UA_INLINE UA_StatusCode
-UA_Client_addMethodNode_async(UA_Client *client, const UA_NodeId requestedNewNodeId,
-                              const UA_NodeId parentNodeId,
-                              const UA_NodeId referenceTypeId,
-                              const UA_QualifiedName browseName,
-                              const UA_MethodAttributes attr, UA_NodeId *outNewNodeId,
-                              UA_ClientAsyncAddNodesCallback callback, void *userdata,
-                              UA_UInt32 *reqId) {
-    return __UA_Client_addNode_async(
-        client, UA_NODECLASS_METHOD, requestedNewNodeId, parentNodeId, referenceTypeId,
-        browseName, UA_NODEID_NULL, (const UA_NodeAttributes *)&attr,
-        &UA_TYPES[UA_TYPES_METHODATTRIBUTES], outNewNodeId,
-        (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-
-/**
- * Misc Functionalities
- * ^^^^^^^^^^^^^^^^^^^^ */
-
-UA_StatusCode UA_EXPORT
-__UA_Client_translateBrowsePathsToNodeIds_async(UA_Client *client, char *paths[],
-                                                UA_UInt32 ids[], size_t pathSize,
-                                                UA_ClientAsyncServiceCallback callback,
-                                                void *userdata, UA_UInt32 *reqId);
-
-typedef void (*UA_ClientAsyncTranslateCallback)(
-    UA_Client *client, void *userdata, UA_UInt32 requestId,
-    UA_TranslateBrowsePathsToNodeIdsResponse *tr);
-
-static UA_INLINE UA_StatusCode
-UA_Cient_translateBrowsePathsToNodeIds_async(UA_Client *client, char **paths,
-                                             UA_UInt32 *ids, size_t pathSize,
-                                             UA_ClientAsyncTranslateCallback callback,
-                                             void *userdata, UA_UInt32 *reqId) {
-    return __UA_Client_translateBrowsePathsToNodeIds_async(
-        client, paths, ids, pathSize, (UA_ClientAsyncServiceCallback)callback, userdata,
-        reqId);
-}
-
-_UA_END_DECLS
-
-#endif /* UA_CLIENT_HIGHLEVEL_ASYNC_H_ */
diff --git a/ext/open62541/include/open62541/client_subscriptions.h b/ext/open62541/include/open62541/client_subscriptions.h
deleted file mode 100644
index 204b294..0000000
--- a/ext/open62541/include/open62541/client_subscriptions.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef UA_CLIENT_SUBSCRIPTIONS_H_
-#define UA_CLIENT_SUBSCRIPTIONS_H_
-
-#include <open62541/client.h>
-
-_UA_BEGIN_DECLS
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-
-/**
- * .. _client-subscriptions:
- *
- * Subscriptions
- * -------------
- *
- * Subscriptions in OPC UA are asynchronous. That is, the client sends several
- * PublishRequests to the server. The server returns PublishResponses with
- * notifications. But only when a notification has been generated. The client
- * does not wait for the responses and continues normal operations.
- *
- * Note the difference between Subscriptions and MonitoredItems. Subscriptions
- * are used to report back notifications. MonitoredItems are used to generate
- * notifications. Every MonitoredItem is attached to exactly one Subscription.
- * And a Subscription can contain many MonitoredItems.
- *
- * The client automatically processes PublishResponses (with a callback) in the
- * background and keeps enough PublishRequests in transit. The PublishResponses
- * may be recieved during a synchronous service call or in
- * ``UA_Client_runAsync``. */
-
-/* Callbacks defined for Subscriptions */
-typedef void (*UA_Client_DeleteSubscriptionCallback)
-    (UA_Client *client, UA_UInt32 subId, void *subContext);
-
-typedef void (*UA_Client_StatusChangeNotificationCallback)
-    (UA_Client *client, UA_UInt32 subId, void *subContext,
-     UA_StatusChangeNotification *notification);
-
-/* Provides default values for a new subscription.
- *
- * RequestedPublishingInterval:  500.0 [ms]
- * RequestedLifetimeCount: 10000
- * RequestedMaxKeepAliveCount: 10
- * MaxNotificationsPerPublish: 0 (unlimited)
- * PublishingEnabled: true
- * Priority: 0 */
-static UA_INLINE UA_CreateSubscriptionRequest
-UA_CreateSubscriptionRequest_default(void) {
-    UA_CreateSubscriptionRequest request;
-    UA_CreateSubscriptionRequest_init(&request);
-
-    request.requestedPublishingInterval = 500.0;
-    request.requestedLifetimeCount = 10000;
-    request.requestedMaxKeepAliveCount = 10;
-    request.maxNotificationsPerPublish = 0;
-    request.publishingEnabled = true;
-    request.priority = 0;
-    return request;
-}
-
-UA_CreateSubscriptionResponse UA_EXPORT
-UA_Client_Subscriptions_create(UA_Client *client,
-                               const UA_CreateSubscriptionRequest request,
-                               void *subscriptionContext,
-                               UA_Client_StatusChangeNotificationCallback statusChangeCallback,
-                               UA_Client_DeleteSubscriptionCallback deleteCallback);
-
-UA_ModifySubscriptionResponse UA_EXPORT
-UA_Client_Subscriptions_modify(UA_Client *client, const UA_ModifySubscriptionRequest request);
-
-UA_DeleteSubscriptionsResponse UA_EXPORT
-UA_Client_Subscriptions_delete(UA_Client *client,
-                               const UA_DeleteSubscriptionsRequest request);
-
-/* Delete a single subscription */
-UA_StatusCode UA_EXPORT
-UA_Client_Subscriptions_deleteSingle(UA_Client *client, UA_UInt32 subscriptionId);
-
-static UA_INLINE UA_SetPublishingModeResponse
-UA_Client_Subscriptions_setPublishingMode(UA_Client *client,
-                                          const UA_SetPublishingModeRequest request) {
-    UA_SetPublishingModeResponse response;
-    __UA_Client_Service(client, &request,
-                        &UA_TYPES[UA_TYPES_SETPUBLISHINGMODEREQUEST], &response,
-                        &UA_TYPES[UA_TYPES_SETPUBLISHINGMODERESPONSE]);
-    return response;
-}
-
-/**
- * MonitoredItems
- * --------------
- *
- * MonitoredItems for Events indicate the ``EventNotifier`` attribute. This
- * indicates to the server not to monitor changes of the attribute, but to
- * forward Event notifications from that node.
- *
- * During the creation of a MonitoredItem, the server may return changed
- * adjusted parameters. Check the returned ``UA_CreateMonitoredItemsResponse``
- * to get the current parameters. */
-
-/* Provides default values for a new monitored item. */
-static UA_INLINE UA_MonitoredItemCreateRequest
-UA_MonitoredItemCreateRequest_default(UA_NodeId nodeId) {
-    UA_MonitoredItemCreateRequest request;
-    UA_MonitoredItemCreateRequest_init(&request);
-    request.itemToMonitor.nodeId = nodeId;
-    request.itemToMonitor.attributeId = UA_ATTRIBUTEID_VALUE;
-    request.monitoringMode = UA_MONITORINGMODE_REPORTING;
-    request.requestedParameters.samplingInterval = 250;
-    request.requestedParameters.discardOldest = true;
-    request.requestedParameters.queueSize = 1;
-    return request;
-}
-
-/**
- * The clientHandle parameter can't be set by the user, any value will be replaced
- * by the client before sending the request to the server. */
-
-/* Callback for the deletion of a MonitoredItem */
-typedef void (*UA_Client_DeleteMonitoredItemCallback)
-    (UA_Client *client, UA_UInt32 subId, void *subContext,
-     UA_UInt32 monId, void *monContext);
-
-/* Callback for DataChange notifications */
-typedef void (*UA_Client_DataChangeNotificationCallback)
-    (UA_Client *client, UA_UInt32 subId, void *subContext,
-     UA_UInt32 monId, void *monContext,
-     UA_DataValue *value);
-
-/* Callback for Event notifications */
-typedef void (*UA_Client_EventNotificationCallback)
-    (UA_Client *client, UA_UInt32 subId, void *subContext,
-     UA_UInt32 monId, void *monContext,
-     size_t nEventFields, UA_Variant *eventFields);
-
-/* Don't use to monitor the EventNotifier attribute */
-UA_CreateMonitoredItemsResponse UA_EXPORT
-UA_Client_MonitoredItems_createDataChanges(UA_Client *client,
-            const UA_CreateMonitoredItemsRequest request, void **contexts,
-            UA_Client_DataChangeNotificationCallback *callbacks,
-            UA_Client_DeleteMonitoredItemCallback *deleteCallbacks);
-
-UA_MonitoredItemCreateResult UA_EXPORT
-UA_Client_MonitoredItems_createDataChange(UA_Client *client, UA_UInt32 subscriptionId,
-          UA_TimestampsToReturn timestampsToReturn, const UA_MonitoredItemCreateRequest item,
-          void *context, UA_Client_DataChangeNotificationCallback callback,
-          UA_Client_DeleteMonitoredItemCallback deleteCallback);
-
-/* Monitor the EventNotifier attribute only */
-UA_CreateMonitoredItemsResponse UA_EXPORT
-UA_Client_MonitoredItems_createEvents(UA_Client *client,
-            const UA_CreateMonitoredItemsRequest request, void **contexts,
-            UA_Client_EventNotificationCallback *callback,
-            UA_Client_DeleteMonitoredItemCallback *deleteCallback);
-
-UA_MonitoredItemCreateResult UA_EXPORT
-UA_Client_MonitoredItems_createEvent(UA_Client *client, UA_UInt32 subscriptionId,
-          UA_TimestampsToReturn timestampsToReturn, const UA_MonitoredItemCreateRequest item,
-          void *context, UA_Client_EventNotificationCallback callback,
-          UA_Client_DeleteMonitoredItemCallback deleteCallback);
-
-UA_DeleteMonitoredItemsResponse UA_EXPORT
-UA_Client_MonitoredItems_delete(UA_Client *client, const UA_DeleteMonitoredItemsRequest);
-
-UA_StatusCode UA_EXPORT
-UA_Client_MonitoredItems_deleteSingle(UA_Client *client, UA_UInt32 subscriptionId, UA_UInt32 monitoredItemId);
-
-/* The clientHandle parameter will be filled automatically */
-UA_ModifyMonitoredItemsResponse UA_EXPORT
-UA_Client_MonitoredItems_modify(UA_Client *client,
-                                const UA_ModifyMonitoredItemsRequest request);
-
-/**
- * The following service calls go directly to the server. The MonitoredItem settings are
- * not stored in the client. */
-
-static UA_INLINE UA_SetMonitoringModeResponse
-UA_Client_MonitoredItems_setMonitoringMode(UA_Client *client,
-                                           const UA_SetMonitoringModeRequest request) {
-    UA_SetMonitoringModeResponse response;
-    __UA_Client_Service(client,
-                        &request, &UA_TYPES[UA_TYPES_SETMONITORINGMODEREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_SETMONITORINGMODERESPONSE]);
-    return response;
-}
-
-static UA_INLINE UA_SetTriggeringResponse
-UA_Client_MonitoredItems_setTriggering(UA_Client *client,
-                                       const UA_SetTriggeringRequest request) {
-    UA_SetTriggeringResponse response;
-    __UA_Client_Service(client,
-                        &request, &UA_TYPES[UA_TYPES_SETTRIGGERINGREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_SETTRIGGERINGRESPONSE]);
-    return response;
-}
-
-#endif
-
-_UA_END_DECLS
-
-#endif /* UA_CLIENT_SUBSCRIPTIONS_H_ */
diff --git a/ext/open62541/include/open62541/config.h.in b/ext/open62541/include/open62541/config.h.in
deleted file mode 100644
index d603fe0..0000000
--- a/ext/open62541/include/open62541/config.h.in
+++ /dev/null
@@ -1,108 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef UA_CONFIG_H_
-#define UA_CONFIG_H_
-
-/**
- * open62541 Version
- * ----------------- */
-#define UA_OPEN62541_VER_MAJOR ${OPEN62541_VER_MAJOR}
-#define UA_OPEN62541_VER_MINOR ${OPEN62541_VER_MINOR}
-#define UA_OPEN62541_VER_PATCH ${OPEN62541_VER_PATCH}
-#define UA_OPEN62541_VER_LABEL "${OPEN62541_VER_LABEL}" /* Release candidate label, etc. */
-#define UA_OPEN62541_VER_COMMIT "${OPEN62541_VER_COMMIT}"
-
-/**
- * Feature Options
- * ---------------
- * Changing the feature options has no effect on a pre-compiled library. */
-
-#define UA_LOGLEVEL ${UA_LOGLEVEL}
-#ifndef UA_ENABLE_AMALGAMATION
-#cmakedefine UA_ENABLE_AMALGAMATION
-#endif
-#cmakedefine UA_ENABLE_METHODCALLS
-#cmakedefine UA_ENABLE_NODEMANAGEMENT
-#cmakedefine UA_ENABLE_SUBSCRIPTIONS
-#cmakedefine UA_ENABLE_PUBSUB
-#cmakedefine UA_ENABLE_PUBSUB_ETH_UADP
-#cmakedefine UA_ENABLE_PUBSUB_DELTAFRAMES
-#cmakedefine UA_ENABLE_PUBSUB_INFORMATIONMODEL
-#cmakedefine UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-#cmakedefine UA_ENABLE_DA
-#cmakedefine UA_ENABLE_ENCRYPTION
-#cmakedefine UA_ENABLE_HISTORIZING
-#cmakedefine UA_ENABLE_MICRO_EMB_DEV_PROFILE
-#cmakedefine UA_ENABLE_EXPERIMENTAL_HISTORIZING
-#cmakedefine UA_ENABLE_SUBSCRIPTIONS_EVENTS
-#cmakedefine UA_ENABLE_JSON_ENCODING
-
-/* Multithreading */
-#cmakedefine UA_ENABLE_IMMUTABLE_NODES
-#define UA_MULTITHREADING ${UA_MULTITHREADING}
-#if UA_MULTITHREADING >= 200 && !defined(UA_ENABLE_IMMUTABLE_NODES)
-#error "The multithreading feature requires nodes to be immutable"
-#endif
-
-/* Advanced Options */
-#cmakedefine UA_ENABLE_CUSTOM_NODESTORE
-#cmakedefine UA_ENABLE_STATUSCODE_DESCRIPTIONS
-#cmakedefine UA_ENABLE_TYPEDESCRIPTION
-#cmakedefine UA_ENABLE_NODESET_COMPILER_DESCRIPTIONS
-#cmakedefine UA_ENABLE_DETERMINISTIC_RNG
-#cmakedefine UA_ENABLE_DISCOVERY
-#cmakedefine UA_ENABLE_DISCOVERY_MULTICAST
-#cmakedefine UA_ENABLE_WEBSOCKET_SERVER
-#cmakedefine UA_ENABLE_QUERY
-#cmakedefine UA_ENABLE_MALLOC_SINGLETON
-#cmakedefine UA_ENABLE_DISCOVERY_SEMAPHORE
-#cmakedefine UA_ENABLE_UNIT_TEST_FAILURE_HOOKS
-#cmakedefine UA_ENABLE_VALGRIND_INTERACTIVE
-#define UA_VALGRIND_INTERACTIVE_INTERVAL ${UA_VALGRIND_INTERACTIVE_INTERVAL}
-#cmakedefine UA_GENERATED_NAMESPACE_ZERO
-#cmakedefine UA_ENABLE_PUBSUB_CUSTOM_PUBLISH_HANDLING
-
-#cmakedefine UA_PACK_DEBIAN
-
-/* Options for Debugging */
-#cmakedefine UA_DEBUG
-#cmakedefine UA_DEBUG_DUMP_PKGS
-
-/**
- * Function Export
- * ---------------
- * On Win32: Define ``UA_DYNAMIC_LINKING`` and ``UA_DYNAMIC_LINKING_EXPORT`` in
- * order to export symbols for a DLL. Define ``UA_DYNAMIC_LINKING`` only to
- * import symbols from a DLL.*/
-#cmakedefine UA_DYNAMIC_LINKING
-
-/* Shortcuts for extern "C" declarations */
-#if !defined(_UA_BEGIN_DECLS)
-# ifdef __cplusplus
-#  define _UA_BEGIN_DECLS extern "C" {
-# else
-#  define _UA_BEGIN_DECLS
-# endif
-#endif
-#if !defined(_UA_END_DECLS)
-# ifdef __cplusplus
-#  define _UA_END_DECLS }
-# else
-#  define _UA_END_DECLS
-# endif
-#endif
-
-/* Select default architecture if non is selected through CMake or compiler define */
-#if ${UA_ARCHITECTURES_NODEF}
-# ifdef _WIN32
-#  define UA_ARCHITECTURE_WIN32
-# else
-#  define UA_ARCHITECTURE_POSIX
-# endif
-#endif
-
-#include "${UA_ARCHITECTURE}/ua_architecture.h"
-
-#endif /* UA_CONFIG_H_ */
diff --git a/ext/open62541/include/open62541/constants.h b/ext/open62541/include/open62541/constants.h
deleted file mode 100644
index 57296b4..0000000
--- a/ext/open62541/include/open62541/constants.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2016-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2016 (c) Sten Grüner
- *    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Florian Palm
- */
-
-#ifndef UA_CONSTANTS_H_
-#define UA_CONSTANTS_H_
-
-#include <open62541/config.h>
-
-_UA_BEGIN_DECLS
-
-/**
- * Standard-Defined Constants
- * ==========================
- * This section contains numerical and string constants that are defined in the
- * OPC UA standard.
- *
- * .. _attribute-id:
- *
- * Attribute Id
- * ------------
- * Every node in an OPC UA information model contains attributes depending on
- * the node type. Possible attributes are as follows: */
-
-typedef enum {
-    UA_ATTRIBUTEID_NODEID                  = 1,
-    UA_ATTRIBUTEID_NODECLASS               = 2,
-    UA_ATTRIBUTEID_BROWSENAME              = 3,
-    UA_ATTRIBUTEID_DISPLAYNAME             = 4,
-    UA_ATTRIBUTEID_DESCRIPTION             = 5,
-    UA_ATTRIBUTEID_WRITEMASK               = 6,
-    UA_ATTRIBUTEID_USERWRITEMASK           = 7,
-    UA_ATTRIBUTEID_ISABSTRACT              = 8,
-    UA_ATTRIBUTEID_SYMMETRIC               = 9,
-    UA_ATTRIBUTEID_INVERSENAME             = 10,
-    UA_ATTRIBUTEID_CONTAINSNOLOOPS         = 11,
-    UA_ATTRIBUTEID_EVENTNOTIFIER           = 12,
-    UA_ATTRIBUTEID_VALUE                   = 13,
-    UA_ATTRIBUTEID_DATATYPE                = 14,
-    UA_ATTRIBUTEID_VALUERANK               = 15,
-    UA_ATTRIBUTEID_ARRAYDIMENSIONS         = 16,
-    UA_ATTRIBUTEID_ACCESSLEVEL             = 17,
-    UA_ATTRIBUTEID_USERACCESSLEVEL         = 18,
-    UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL = 19,
-    UA_ATTRIBUTEID_HISTORIZING             = 20,
-    UA_ATTRIBUTEID_EXECUTABLE              = 21,
-    UA_ATTRIBUTEID_USEREXECUTABLE          = 22,
-    UA_ATTRIBUTEID_DATATYPEDEFINITION      = 23
-} UA_AttributeId;
-
-/**
- * Access Level Masks
- * ------------------
- * The access level to a node is given by the following constants that are ANDed
- * with the overall access level. */
-
-#define UA_ACCESSLEVELMASK_READ           (0x01u << 0u)
-#define UA_ACCESSLEVELMASK_WRITE          (0x01u << 1u)
-#define UA_ACCESSLEVELMASK_HISTORYREAD    (0x01u << 2u)
-#define UA_ACCESSLEVELMASK_HISTORYWRITE   (0x01u << 3u)
-#define UA_ACCESSLEVELMASK_SEMANTICCHANGE (0x01u << 4u)
-#define UA_ACCESSLEVELMASK_STATUSWRITE    (0x01u << 5u)
-#define UA_ACCESSLEVELMASK_TIMESTAMPWRITE (0x01u << 6u)
-
-/**
- * Write Masks
- * -----------
- * The write mask and user write mask is given by the following constants that
- * are ANDed for the overall write mask. Part 3: 5.2.7 Table 2 */
-
-#define UA_WRITEMASK_ACCESSLEVEL             (0x01u << 0u)
-#define UA_WRITEMASK_ARRRAYDIMENSIONS        (0x01u << 1u)
-#define UA_WRITEMASK_BROWSENAME              (0x01u << 2u)
-#define UA_WRITEMASK_CONTAINSNOLOOPS         (0x01u << 3u)
-#define UA_WRITEMASK_DATATYPE                (0x01u << 4u)
-#define UA_WRITEMASK_DESCRIPTION             (0x01u << 5u)
-#define UA_WRITEMASK_DISPLAYNAME             (0x01u << 6u)
-#define UA_WRITEMASK_EVENTNOTIFIER           (0x01u << 7u)
-#define UA_WRITEMASK_EXECUTABLE              (0x01u << 8u)
-#define UA_WRITEMASK_HISTORIZING             (0x01u << 9u)
-#define UA_WRITEMASK_INVERSENAME             (0x01u << 10u)
-#define UA_WRITEMASK_ISABSTRACT              (0x01u << 11u)
-#define UA_WRITEMASK_MINIMUMSAMPLINGINTERVAL (0x01u << 12u)
-#define UA_WRITEMASK_NODECLASS               (0x01u << 13u)
-#define UA_WRITEMASK_NODEID                  (0x01u << 14u)
-#define UA_WRITEMASK_SYMMETRIC               (0x01u << 15u)
-#define UA_WRITEMASK_USERACCESSLEVEL         (0x01u << 16u)
-#define UA_WRITEMASK_USEREXECUTABLE          (0x01u << 17u)
-#define UA_WRITEMASK_USERWRITEMASK           (0x01u << 18u)
-#define UA_WRITEMASK_VALUERANK               (0x01u << 19u)
-#define UA_WRITEMASK_WRITEMASK               (0x01u << 20u)
-#define UA_WRITEMASK_VALUEFORVARIABLETYPE    (0x01u << 21u)
-
-/**
- * ValueRanks
- * ----------
- * The following are the most common ValueRanks used for Variables,
- * VariableTypes and method arguments. ValueRanks higher than 3 are valid as
- * well (but less common). */
-
-#define UA_VALUERANK_SCALAR_OR_ONE_DIMENSION  -3
-#define UA_VALUERANK_ANY                      -2
-#define UA_VALUERANK_SCALAR                   -1
-#define UA_VALUERANK_ONE_OR_MORE_DIMENSIONS    0
-#define UA_VALUERANK_ONE_DIMENSION             1
-#define UA_VALUERANK_TWO_DIMENSIONS            2
-#define UA_VALUERANK_THREE_DIMENSIONS          3
-
-/**
- * Internal Constants
- * ==================
- *
- * Rule Handling
- * -------------
- *
- * The RuleHanding settings define how error cases that result from rules in the
- * OPC UA specification shall be handled. The rule handling can be softened,
- * e.g. to workaround misbehaving implementations or to mitigate the impact of
- * additional rules that are introduced in later versions of the OPC UA
- * specification. */
-typedef enum {
-    UA_RULEHANDLING_DEFAULT = 0,
-    UA_RULEHANDLING_ABORT,  /* Abort the operation and return an error code */
-    UA_RULEHANDLING_WARN,   /* Print a message in the logs and continue */
-    UA_RULEHANDLING_ACCEPT, /* Continue and disregard the broken rule */
-} UA_RuleHandling;
-
-/**
- * Order
- * -----
- *
- * The Order enum is used to establish an absolute ordering between elements.
- */
-
-typedef enum {
-    UA_ORDER_LESS = -1,
-    UA_ORDER_EQ = 0,
-    UA_ORDER_MORE = 1
-} UA_Order;
-
-_UA_END_DECLS
-
-#endif /* UA_CONSTANTS_H_ */
diff --git a/ext/open62541/include/open62541/network_tcp.h b/ext/open62541/include/open62541/network_tcp.h
deleted file mode 100644
index a377470..0000000
--- a/ext/open62541/include/open62541/network_tcp.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. 
- *
- *    Copyright 2016 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- */
-
-#ifndef UA_NETWORK_TCP_H_
-#define UA_NETWORK_TCP_H_
-
-#include <open62541/client.h>
-#include <open62541/plugin/log.h>
-#include <open62541/server.h>
-
-_UA_BEGIN_DECLS
-
-UA_ServerNetworkLayer UA_EXPORT
-UA_ServerNetworkLayerTCP(UA_ConnectionConfig config, UA_UInt16 port, UA_Logger *logger);
-
-UA_Connection UA_EXPORT
-UA_ClientConnectionTCP(UA_ConnectionConfig config, const UA_String endpointUrl,
-                       UA_UInt32 timeout, UA_Logger *logger);
-
-UA_StatusCode UA_EXPORT
-UA_ClientConnectionTCP_poll(UA_Client *client, void *data);
-
-UA_Connection UA_EXPORT
-UA_ClientConnectionTCP_init(UA_ConnectionConfig config, const UA_String endpointUrl,
-                            UA_UInt32 timeout, UA_Logger *logger);
-
-_UA_END_DECLS
-
-#endif /* UA_NETWORK_TCP_H_ */
diff --git a/ext/open62541/include/open62541/network_ws.h b/ext/open62541/include/open62541/network_ws.h
deleted file mode 100644
index 8bcb102..0000000
--- a/ext/open62541/include/open62541/network_ws.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. 
- *
- *    Copyright 2016 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- */
-
-#ifndef UA_NETWORK_WS_H_
-#define UA_NETWORK_WS_H_
-
-#include <open62541/client.h>
-#include <open62541/plugin/log.h>
-#include <open62541/server.h>
-
-_UA_BEGIN_DECLS
-
-UA_ServerNetworkLayer UA_EXPORT
-UA_ServerNetworkLayerWS(UA_ConnectionConfig config, UA_UInt16 port, UA_Logger *logger);
-
-
-_UA_END_DECLS
-
-#endif /* UA_NETWORK_WS_H_ */
diff --git a/ext/open62541/include/open62541/plugin/accesscontrol.h b/ext/open62541/include/open62541/plugin/accesscontrol.h
deleted file mode 100644
index ef85e40..0000000
--- a/ext/open62541/include/open62541/plugin/accesscontrol.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifndef UA_PLUGIN_ACCESS_CONTROL_H_
-#define UA_PLUGIN_ACCESS_CONTROL_H_
-
-#include <open62541/server.h>
-
-_UA_BEGIN_DECLS
-
-struct UA_AccessControl;
-typedef struct UA_AccessControl UA_AccessControl;
-
-/**
- * .. _access-control:
- *
- * Access Control Plugin API
- * =========================
- * The access control callback is used to authenticate sessions and grant access
- * rights accordingly. */
-
-struct UA_AccessControl {
-    void *context;
-    void (*deleteMembers)(UA_AccessControl *ac);
-
-    /* Supported login mechanisms. The server endpoints are created from here. */
-    size_t userTokenPoliciesSize;
-    UA_UserTokenPolicy *userTokenPolicies;
-
-    /* Authenticate a session. The session context is attached to the session
-     * and later passed into the node-based access control callbacks. The new
-     * session is rejected if a StatusCode other than UA_STATUSCODE_GOOD is
-     * returned. */
-    UA_StatusCode (*activateSession)(UA_Server *server, UA_AccessControl *ac,
-                                     const UA_EndpointDescription *endpointDescription,
-                                     const UA_ByteString *secureChannelRemoteCertificate,
-                                     const UA_NodeId *sessionId,
-                                     const UA_ExtensionObject *userIdentityToken,
-                                     void **sessionContext);
-
-    /* Deauthenticate a session and cleanup */
-    void (*closeSession)(UA_Server *server, UA_AccessControl *ac,
-                         const UA_NodeId *sessionId, void *sessionContext);
-
-    /* Access control for all nodes*/
-    UA_UInt32 (*getUserRightsMask)(UA_Server *server, UA_AccessControl *ac,
-                                   const UA_NodeId *sessionId, void *sessionContext,
-                                   const UA_NodeId *nodeId, void *nodeContext);
-
-    /* Additional access control for variable nodes */
-    UA_Byte (*getUserAccessLevel)(UA_Server *server, UA_AccessControl *ac,
-                                  const UA_NodeId *sessionId, void *sessionContext,
-                                  const UA_NodeId *nodeId, void *nodeContext);
-
-    /* Additional access control for method nodes */
-    UA_Boolean (*getUserExecutable)(UA_Server *server, UA_AccessControl *ac,
-                                    const UA_NodeId *sessionId, void *sessionContext,
-                                    const UA_NodeId *methodId, void *methodContext);
-
-    /* Additional access control for calling a method node in the context of a
-     * specific object */
-    UA_Boolean (*getUserExecutableOnObject)(UA_Server *server, UA_AccessControl *ac,
-                                            const UA_NodeId *sessionId, void *sessionContext,
-                                            const UA_NodeId *methodId, void *methodContext,
-                                            const UA_NodeId *objectId, void *objectContext);
-
-    /* Allow adding a node */
-    UA_Boolean (*allowAddNode)(UA_Server *server, UA_AccessControl *ac,
-                               const UA_NodeId *sessionId, void *sessionContext,
-                               const UA_AddNodesItem *item);
-
-    /* Allow adding a reference */
-    UA_Boolean (*allowAddReference)(UA_Server *server, UA_AccessControl *ac,
-                                    const UA_NodeId *sessionId, void *sessionContext,
-                                    const UA_AddReferencesItem *item);
-
-    /* Allow deleting a node */
-    UA_Boolean (*allowDeleteNode)(UA_Server *server, UA_AccessControl *ac,
-                                  const UA_NodeId *sessionId, void *sessionContext,
-                                  const UA_DeleteNodesItem *item);
-
-    /* Allow deleting a reference */
-    UA_Boolean (*allowDeleteReference)(UA_Server *server, UA_AccessControl *ac,
-                                       const UA_NodeId *sessionId, void *sessionContext,
-                                       const UA_DeleteReferencesItem *item);
-#ifdef UA_ENABLE_HISTORIZING
-    /* Allow insert,replace,update of historical data */
-    UA_Boolean (*allowHistoryUpdateUpdateData)(UA_Server *server, UA_AccessControl *ac,
-                                               const UA_NodeId *sessionId, void *sessionContext,
-                                               const UA_NodeId *nodeId,
-                                               UA_PerformUpdateType performInsertReplace,
-                                               const UA_DataValue *value);
-
-    /* Allow delete of historical data */
-    UA_Boolean (*allowHistoryUpdateDeleteRawModified)(UA_Server *server, UA_AccessControl *ac,
-                                                      const UA_NodeId *sessionId, void *sessionContext,
-                                                      const UA_NodeId *nodeId,
-                                                      UA_DateTime startTimestamp,
-                                                      UA_DateTime endTimestamp,
-                                                      bool isDeleteModified);
-#endif
-};
-
-_UA_END_DECLS
-
-#endif /* UA_PLUGIN_ACCESS_CONTROL_H_ */
diff --git a/ext/open62541/include/open62541/plugin/historydatabase.h b/ext/open62541/include/open62541/plugin/historydatabase.h
deleted file mode 100644
index e50e892..0000000
--- a/ext/open62541/include/open62541/plugin/historydatabase.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
- */
-
-#ifndef UA_PLUGIN_HISTORYDATABASE_H_
-#define UA_PLUGIN_HISTORYDATABASE_H_
-
-#include <open62541/server.h>
-
-_UA_BEGIN_DECLS
-
-typedef struct UA_HistoryDatabase UA_HistoryDatabase;
-
-struct UA_HistoryDatabase {
-    void *context;
-
-    void
-    (*deleteMembers)(UA_HistoryDatabase *hdb);
-
-    /* This function will be called when a nodes value is set.
-     * Use this to insert data into your database(s) if polling is not suitable
-     * and you need to get all data changes.
-     * Set it to NULL if you do not need it.
-     *
-     * server is the server this node lives in.
-     * hdbContext is the context of the UA_HistoryDatabase.
-     * sessionId and sessionContext identify the session which set this value.
-     * nodeId is the node id for which data was set.
-     * historizing is the nodes boolean flag for historizing
-     * value is the new value. */
-    void
-    (*setValue)(UA_Server *server,
-                void *hdbContext,
-                const UA_NodeId *sessionId,
-                void *sessionContext,
-                const UA_NodeId *nodeId,
-                UA_Boolean historizing,
-                const UA_DataValue *value);
-
-    /* This function is called if a history read is requested with
-     * isRawReadModified set to false. Setting it to NULL will result in a
-     * response with statuscode UA_STATUSCODE_BADHISTORYOPERATIONUNSUPPORTED.
-     *
-     * server is the server this node lives in.
-     * hdbContext is the context of the UA_HistoryDatabase.
-     * sessionId and sessionContext identify the session which set this value.
-     * requestHeader, historyReadDetails, timestampsToReturn, releaseContinuationPoints
-     * nodesToReadSize and nodesToRead is the requested data from the client. It
-     *                 is from the request object.
-     * response the response to fill for the client. If the request is ok, there
-     *          is no need to use it. Use this to set status codes other than
-     *          "Good" or other data. You find an already allocated
-     *          UA_HistoryReadResult array with an UA_HistoryData object in the
-     *          extension object in the size of nodesToReadSize. If you are not
-     *          willing to return data, you have to delete the results array,
-     *          set it to NULL and set the resultsSize to 0. Do not access
-     *          historyData after that.
-     * historyData is a proper typed pointer array pointing in the
-     *             UA_HistoryReadResult extension object. use this to provide
-     *             result data to the client. Index in the array is the same as
-     *             in nodesToRead and the UA_HistoryReadResult array. */
-    void
-    (*readRaw)(UA_Server *server,
-               void *hdbContext,
-               const UA_NodeId *sessionId,
-               void *sessionContext,
-               const UA_RequestHeader *requestHeader,
-               const UA_ReadRawModifiedDetails *historyReadDetails,
-               UA_TimestampsToReturn timestampsToReturn,
-               UA_Boolean releaseContinuationPoints,
-               size_t nodesToReadSize,
-               const UA_HistoryReadValueId *nodesToRead,
-               UA_HistoryReadResponse *response,
-               UA_HistoryData * const * const historyData);
-
-    void
-    (*updateData)(UA_Server *server,
-                  void *hdbContext,
-                  const UA_NodeId *sessionId,
-                  void *sessionContext,
-                  const UA_RequestHeader *requestHeader,
-                  const UA_UpdateDataDetails *details,
-                  UA_HistoryUpdateResult *result);
-
-    void
-    (*deleteRawModified)(UA_Server *server,
-                         void *hdbContext,
-                         const UA_NodeId *sessionId,
-                         void *sessionContext,
-                         const UA_RequestHeader *requestHeader,
-                         const UA_DeleteRawModifiedDetails *details,
-                         UA_HistoryUpdateResult *result);
-
-    /* Add more function pointer here.
-     * For example for read_event, read_modified, read_processed, read_at_time */
-};
-
-_UA_END_DECLS
-
-#endif /* UA_PLUGIN_HISTORYDATABASE_H_ */
diff --git a/ext/open62541/include/open62541/plugin/log.h b/ext/open62541/include/open62541/plugin/log.h
deleted file mode 100644
index 70a47c1..0000000
--- a/ext/open62541/include/open62541/plugin/log.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifndef UA_PLUGIN_LOG_H_
-#define UA_PLUGIN_LOG_H_
-
-#include <open62541/config.h>
-
-#include <stdarg.h>
-
-_UA_BEGIN_DECLS
-
-/**
- * Logging Plugin API
- * ==================
- *
- * Servers and clients define a logger in their configuration. The logger is a
- * plugin. A default plugin that logs to ``stdout`` is provided as an example.
- * The logger plugin is stateful and can point to custom data. So it is possible
- * to keep open file handlers in the logger context.
- *
- * Every log-message consists of a log-level, a log-category and a string
- * message content. The timestamp of the log-message is created within the
- * logger. */
-
-typedef enum {
-    UA_LOGLEVEL_TRACE,
-    UA_LOGLEVEL_DEBUG,
-    UA_LOGLEVEL_INFO,
-    UA_LOGLEVEL_WARNING,
-    UA_LOGLEVEL_ERROR,
-    UA_LOGLEVEL_FATAL
-} UA_LogLevel;
-
-typedef enum {
-    UA_LOGCATEGORY_NETWORK,
-    UA_LOGCATEGORY_SECURECHANNEL,
-    UA_LOGCATEGORY_SESSION,
-    UA_LOGCATEGORY_SERVER,
-    UA_LOGCATEGORY_CLIENT,
-    UA_LOGCATEGORY_USERLAND,
-    UA_LOGCATEGORY_SECURITYPOLICY
-} UA_LogCategory;
-
-typedef struct {
-    /* Log a message. The message string and following varargs are formatted
-     * according to the rules of the printf command. Use the convenience macros
-     * below that take the minimum log-level defined in ua_config.h into
-     * account. */
-    void (*log)(void *logContext, UA_LogLevel level, UA_LogCategory category,
-                const char *msg, va_list args);
-
-    void *context; /* Logger state */
-
-    void (*clear)(void *context); /* Clean up the logger plugin */
-} UA_Logger;
-
-static UA_INLINE UA_FORMAT(3,4) void
-UA_LOG_TRACE(const UA_Logger *logger, UA_LogCategory category, const char *msg, ...) {
-#if UA_LOGLEVEL <= 100
-    if(!logger || !logger->log)
-        return;
-    va_list args; va_start(args, msg);
-    logger->log(logger->context, UA_LOGLEVEL_TRACE, category, msg, args);
-    va_end(args);
-#endif
-}
-
-static UA_INLINE UA_FORMAT(3,4) void
-UA_LOG_DEBUG(const UA_Logger *logger, UA_LogCategory category, const char *msg, ...) {
-#if UA_LOGLEVEL <= 200
-    if(!logger || !logger->log)
-        return;
-    va_list args; va_start(args, msg);
-    logger->log(logger->context, UA_LOGLEVEL_DEBUG, category, msg, args);
-    va_end(args);
-#endif
-}
-
-static UA_INLINE UA_FORMAT(3,4) void
-UA_LOG_INFO(const UA_Logger *logger, UA_LogCategory category, const char *msg, ...) {
-#if UA_LOGLEVEL <= 300
-    if(!logger || !logger->log)
-        return;
-    va_list args; va_start(args, msg);
-    logger->log(logger->context, UA_LOGLEVEL_INFO, category, msg, args);
-    va_end(args);
-#endif
-}
-
-static UA_INLINE UA_FORMAT(3,4) void
-UA_LOG_WARNING(const UA_Logger *logger, UA_LogCategory category, const char *msg, ...) {
-#if UA_LOGLEVEL <= 400
-    if(!logger || !logger->log)
-        return;
-    va_list args; va_start(args, msg);
-    logger->log(logger->context, UA_LOGLEVEL_WARNING, category, msg, args);
-    va_end(args);
-#endif
-}
-
-static UA_INLINE UA_FORMAT(3,4) void
-UA_LOG_ERROR(const UA_Logger *logger, UA_LogCategory category, const char *msg, ...) {
-#if UA_LOGLEVEL <= 500
-    if(!logger || !logger->log)
-        return;
-    va_list args; va_start(args, msg);
-    logger->log(logger->context, UA_LOGLEVEL_ERROR, category, msg, args);
-    va_end(args);
-#endif
-}
-
-static UA_INLINE UA_FORMAT(3,4) void
-UA_LOG_FATAL(const UA_Logger *logger, UA_LogCategory category, const char *msg, ...) {
-#if UA_LOGLEVEL <= 600
-    if(!logger || !logger->log)
-        return;
-    va_list args; va_start(args, msg);
-    logger->log(logger->context, UA_LOGLEVEL_FATAL, category, msg, args);
-    va_end(args);
-#endif
-}
-
-_UA_END_DECLS
-
-#endif /* UA_PLUGIN_LOG_H_ */
diff --git a/ext/open62541/include/open62541/plugin/network.h b/ext/open62541/include/open62541/plugin/network.h
deleted file mode 100644
index 13f4c38..0000000
--- a/ext/open62541/include/open62541/plugin/network.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifndef UA_PLUGIN_NETWORK_H_
-#define UA_PLUGIN_NETWORK_H_
-
-#include <open62541/plugin/log.h>
-#include <open62541/server.h>
-
-_UA_BEGIN_DECLS
-
-/* Forward declarations */
-struct UA_Connection;
-typedef struct UA_Connection UA_Connection;
-
-struct UA_SecureChannel;
-typedef struct UA_SecureChannel UA_SecureChannel;
-
-struct UA_ServerNetworkLayer;
-typedef struct UA_ServerNetworkLayer UA_ServerNetworkLayer;
-
-/**
- * .. _networking:
- *
- * Networking Plugin API
- * =====================
- *
- * Connection
- * ----------
- * Client-server connections are represented by a `UA_Connection`. The
- * connection is stateful and stores partially received messages, and so on. In
- * addition, the connection contains function pointers to the underlying
- * networking implementation. An example for this is the `send` function. So the
- * connection encapsulates all the required networking functionality. This lets
- * users on embedded (or otherwise exotic) systems implement their own
- * networking plugins with a clear interface to the main open62541 library. */
-
-typedef struct {
-    UA_UInt32 protocolVersion;
-    UA_UInt32 recvBufferSize;
-    UA_UInt32 sendBufferSize;
-    UA_UInt32 maxMessageSize; /* Indicated by the remote side (0 = unbounded) */
-    UA_UInt32 maxChunkCount;  /* Indicated by the remote side (0 = unbounded) */
-} UA_ConnectionConfig;
-
-typedef enum {
-    UA_CONNECTION_CLOSED,     /* The socket has been closed and the connection
-                               * will be deleted */
-    UA_CONNECTION_OPENING,    /* The socket is open, but the HEL/ACK handshake
-                               * is not done */
-    UA_CONNECTION_ESTABLISHED /* The socket is open and the connection
-                               * configured */
-
-} UA_ConnectionState;
-
-struct UA_Connection {
-    UA_ConnectionState state;
-    UA_ConnectionConfig config;
-    UA_SecureChannel *channel;     /* The securechannel that is attached to
-                                    * this connection */
-    UA_SOCKET sockfd;              /* Most connectivity solutions run on
-                                    * sockets. Having the socket id here
-                                    * simplifies the design. */
-    UA_DateTime openingDate;       /* The date the connection was created */
-    void *handle;                  /* A pointer to internal data */
-    UA_ByteString incompleteChunk; /* A half-received chunk (TCP is a
-                                    * streaming protocol) is stored here */
-    UA_UInt64 connectCallbackID;   /* Callback Id, for the connect-loop */
-    /* Get a buffer for sending */
-    UA_StatusCode (*getSendBuffer)(UA_Connection *connection, size_t length,
-                                   UA_ByteString *buf);
-
-    /* Release the send buffer manually */
-    void (*releaseSendBuffer)(UA_Connection *connection, UA_ByteString *buf);
-
-    /* Sends a message over the connection. The message buffer is always freed,
-     * even if sending fails.
-     *
-     * @param connection The connection
-     * @param buf The message buffer
-     * @return Returns an error code or UA_STATUSCODE_GOOD. */
-    UA_StatusCode (*send)(UA_Connection *connection, UA_ByteString *buf);
-
-    /* Receive a message from the remote connection
-     *
-     * @param connection The connection
-     * @param response The response string. It is allocated by the connection
-     *        and needs to be freed with connection->releaseBuffer
-     * @param timeout Timeout of the recv operation in milliseconds
-     * @return Returns UA_STATUSCODE_BADCOMMUNICATIONERROR if the recv operation
-     *         can be repeated, UA_STATUSCODE_GOOD if it succeeded and
-     *         UA_STATUSCODE_BADCONNECTIONCLOSED if the connection was
-     *         closed. */
-    UA_StatusCode (*recv)(UA_Connection *connection, UA_ByteString *response,
-                          UA_UInt32 timeout);
-
-    /* Release the buffer of a received message */
-    void (*releaseRecvBuffer)(UA_Connection *connection, UA_ByteString *buf);
-
-    /* Close the connection. The network layer closes the socket. This is picked
-     * up during the next 'listen' and the connection is freed in the network
-     * layer. */
-    void (*close)(UA_Connection *connection);
-
-    /* To be called only from within the server (and not the network layer).
-     * Frees up the connection's memory. */
-    void (*free)(UA_Connection *connection);
-};
-
-/* Cleans up half-received messages, and so on. Called from connection->free. */
-void UA_EXPORT
-UA_Connection_deleteMembers(UA_Connection *connection);
-
-/**
- * Server Network Layer
- * --------------------
- * The server exposes two functions to interact with remote clients:
- * `processBinaryMessage` and `removeConnection`. These functions are called by
- * the server network layer.
- *
- * It is the job of the server network layer to listen on a TCP socket, to
- * accept new connections, to call the server with received messages and to
- * signal closed connections to the server.
- *
- * The network layer is part of the server config. So users can provide a custom
- * implementation if the provided example does not fit their architecture. The
- * network layer is invoked only from the server's main loop. So the network
- * layer does not need to be thread-safe. If the networklayer receives a
- * positive duration for blocking listening, the server's main loop will block
- * until a message is received or the duration times out. */
-
-/* Process a binary message (TCP packet). The message can contain partial
- * chunks. (TCP is a streaming protocol and packets may be split/merge during
- * transport.) After processing, the message is freed with
- * connection->releaseRecvBuffer. */
-void UA_EXPORT
-UA_Server_processBinaryMessage(UA_Server *server, UA_Connection *connection,
-                               UA_ByteString *message);
-
-/* The server internally cleans up the connection and then calls
- * connection->free. */
-void UA_EXPORT
-UA_Server_removeConnection(UA_Server *server, UA_Connection *connection);
-
-struct UA_ServerNetworkLayer {
-    void *handle; /* Internal data */
-
-    UA_String discoveryUrl;
-
-    UA_ConnectionConfig localConnectionConfig;
-
-    /* Start listening on the networklayer.
-     *
-     * @param nl The network layer
-     * @return Returns UA_STATUSCODE_GOOD or an error code. */
-    UA_StatusCode (*start)(UA_ServerNetworkLayer *nl, const UA_String *customHostname);
-
-    /* Listen for new and closed connections and arriving packets. Calls
-     * UA_Server_processBinaryMessage for the arriving packets. Closed
-     * connections are picked up here and forwarded to
-     * UA_Server_removeConnection where they are cleaned up and freed.
-     *
-     * @param nl The network layer
-     * @param server The server for processing the incoming packets and for
-     *               closing connections.
-     * @param timeout The timeout during which an event must arrive in
-     *                milliseconds
-     * @return A statuscode for the status of the network layer. */
-    UA_StatusCode (*listen)(UA_ServerNetworkLayer *nl, UA_Server *server,
-                            UA_UInt16 timeout);
-
-    /* Close the network socket and all open connections. Afterwards, the
-     * network layer can be safely deleted.
-     *
-     * @param nl The network layer
-     * @param server The server that processes the incoming packets and for
-     *               closing connections before deleting them.
-     * @return A statuscode for the status of the closing operation. */
-    void (*stop)(UA_ServerNetworkLayer *nl, UA_Server *server);
-
-    /* Deletes the network layer context. Call only after stopping. */
-    void (*deleteMembers)(UA_ServerNetworkLayer *nl);
-};
-
-/**
- * Client Network Layer
- * --------------------
- * The client has only a single connection used for sending and receiving binary
- * messages. */
-
-/* @param config the connection config for this client
- * @param endpointUrl to where to connect
- * @param timeout in ms until the connection try times out if remote not reachable
- * @param logger the logger to use */
-typedef UA_Connection
-(*UA_ConnectClientConnection)(UA_ConnectionConfig config, UA_String endpointUrl,
-                              UA_UInt32 timeout, UA_Logger *logger);
-
-_UA_END_DECLS
-
-#endif /* UA_PLUGIN_NETWORK_H_ */
diff --git a/ext/open62541/include/open62541/plugin/nodestore.h b/ext/open62541/include/open62541/plugin/nodestore.h
deleted file mode 100644
index 5f4e404..0000000
--- a/ext/open62541/include/open62541/plugin/nodestore.h
+++ /dev/null
@@ -1,536 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Julian Grothoff
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifndef UA_SERVER_NODES_H_
-#define UA_SERVER_NODES_H_
-
-/* !!! Warning !!!
- *
- * If you are not developing a nodestore plugin, then you should not work with
- * the definitions from this file directly. The underlying node structures are
- * not meant to be used directly by end users. Please use the public server API
- * / OPC UA services to interact with the information model. */
-
-#include <open62541/server.h>
-
-_UA_BEGIN_DECLS
-
-/* Forward declaration */
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-struct UA_MonitoredItem;
-#endif
-
-/**
- * .. _information-modelling:
- *
- * Information Modelling
- * =====================
- *
- * Information modelling in OPC UA combines concepts from object-orientation and
- * semantic modelling. At the core, an OPC UA information model is a graph made
- * up of
- *
- * - Nodes: There are eight possible Node types (variable, object, method, ...)
- * - References: Typed and directed relations between two nodes
- *
- * Every node is identified by a unique (within the server) :ref:`nodeid`.
- * Reference are triples of the form ``(source-nodeid, referencetype-nodeid,
- * target-nodeid)``. An example reference between nodes is a
- * ``hasTypeDefinition`` reference between a Variable and its VariableType. Some
- * ReferenceTypes are *hierarchic* and must not form *directed loops*. See the
- * section on :ref:`ReferenceTypes <referencetypenode>` for more details on
- * possible references and their semantics.
- *
- * **Warning!!** The structures defined in this section are only relevant for
- * the developers of custom Nodestores. The interaction with the information
- * model is possible only via the OPC UA :ref:`services`. So the following
- * sections are purely informational so that users may have a clear mental
- * model of the underlying representation.
- *
- * Base Node Attributes
- * --------------------
- *
- * Nodes contain attributes according to their node type. The base node
- * attributes are common to all node types. In the OPC UA :ref:`services`,
- * attributes are referred to via the :ref:`nodeid` of the containing node and
- * an integer :ref:`attribute-id`.
- *
- * Internally, open62541 uses ``UA_Node`` in places where the exact node type is
- * not known or not important. The ``nodeClass`` attribute is used to ensure the
- * correctness of casting from ``UA_Node`` to a specific node type. */
-
-/* List of reference targets with the same reference type and direction */
-typedef struct {
-    UA_NodeId referenceTypeId;
-    UA_Boolean isInverse;
-    size_t targetIdsSize;
-    UA_ExpandedNodeId *targetIds;
-} UA_NodeReferenceKind;
-
-#define UA_NODE_BASEATTRIBUTES                  \
-    UA_NodeId nodeId;                           \
-    UA_NodeClass nodeClass;                     \
-    UA_QualifiedName browseName;                \
-    UA_LocalizedText displayName;               \
-    UA_LocalizedText description;               \
-    UA_UInt32 writeMask;                        \
-    size_t referencesSize;                      \
-    UA_NodeReferenceKind *references;           \
-                                                \
-    /* Members specific to open62541 */         \
-    void *context;                              \
-    UA_Boolean constructed; /* Constructors were called */
-
-typedef struct {
-    UA_NODE_BASEATTRIBUTES
-} UA_Node;
-
-/**
- * VariableNode
- * ------------
- *
- * Variables store values in a :ref:`datavalue` together with
- * metadata for introspection. Most notably, the attributes data type, value
- * rank and array dimensions constrain the possible values the variable can take
- * on.
- *
- * Variables come in two flavours: properties and datavariables. Properties are
- * related to a parent with a ``hasProperty`` reference and may not have child
- * nodes themselves. Datavariables may contain properties (``hasProperty``) and
- * also datavariables (``hasComponents``).
- *
- * All variables are instances of some :ref:`variabletypenode` in return
- * constraining the possible data type, value rank and array dimensions
- * attributes.
- *
- * Data Type
- * ^^^^^^^^^
- *
- * The (scalar) data type of the variable is constrained to be of a specific
- * type or one of its children in the type hierarchy. The data type is given as
- * a NodeId pointing to a :ref:`datatypenode` in the type hierarchy. See the
- * Section :ref:`datatypenode` for more details.
- *
- * If the data type attribute points to ``UInt32``, then the value attribute
- * must be of that exact type since ``UInt32`` does not have children in the
- * type hierarchy. If the data type attribute points ``Number``, then the type
- * of the value attribute may still be ``UInt32``, but also ``Float`` or
- * ``Byte``.
- *
- * Consistency between the data type attribute in the variable and its
- * :ref:`VariableTypeNode` is ensured.
- *
- * Value Rank
- * ^^^^^^^^^^
- *
- * This attribute indicates whether the value attribute of the variable is an
- * array and how many dimensions the array has. It may have the following
- * values:
- *
- * - ``n >= 1``: the value is an array with the specified number of dimensions
- * - ``n =  0``: the value is an array with one or more dimensions
- * - ``n = -1``: the value is a scalar
- * - ``n = -2``: the value can be a scalar or an array with any number of dimensions
- * - ``n = -3``: the value can be a scalar or a one dimensional array
- *
- * Consistency between the value rank attribute in the variable and its
- * :ref:`variabletypenode` is ensured.
- *
- * Array Dimensions
- * ^^^^^^^^^^^^^^^^
- *
- * If the value rank permits the value to be a (multi-dimensional) array, the
- * exact length in each dimensions can be further constrained with this
- * attribute.
- *
- * - For positive lengths, the variable value is guaranteed to be of the same
- *   length in this dimension.
- * - The dimension length zero is a wildcard and the actual value may have any
- *   length in this dimension.
- *
- * Consistency between the array dimensions attribute in the variable and its
- * :ref:`variabletypenode` is ensured. */
-
-/* Indicates whether a variable contains data inline or whether it points to an
- * external data source */
-typedef enum {
-    UA_VALUESOURCE_DATA,
-    UA_VALUESOURCE_DATASOURCE
-} UA_ValueSource;
-
-#define UA_NODE_VARIABLEATTRIBUTES                                      \
-    /* Constraints on possible values */                                \
-    UA_NodeId dataType;                                                 \
-    UA_Int32 valueRank;                                                 \
-    size_t arrayDimensionsSize;                                         \
-    UA_UInt32 *arrayDimensions;                                         \
-                                                                        \
-    /* The current value */                                             \
-    UA_ValueSource valueSource;                                         \
-    union {                                                             \
-        struct {                                                        \
-            UA_DataValue value;                                         \
-            UA_ValueCallback callback;                                  \
-        } data;                                                         \
-        UA_DataSource dataSource;                                       \
-    } value;
-
-typedef struct {
-    UA_NODE_BASEATTRIBUTES
-    UA_NODE_VARIABLEATTRIBUTES
-    UA_Byte accessLevel;
-    UA_Double minimumSamplingInterval;
-    UA_Boolean historizing;
-} UA_VariableNode;
-
-/**
- * .. _variabletypenode:
- *
- * VariableTypeNode
- * ----------------
- *
- * VariableTypes are used to provide type definitions for variables.
- * VariableTypes constrain the data type, value rank and array dimensions
- * attributes of variable instances. Furthermore, instantiating from a specific
- * variable type may provide semantic information. For example, an instance from
- * ``MotorTemperatureVariableType`` is more meaningful than a float variable
- * instantiated from ``BaseDataVariable``. */
-
-typedef struct {
-    UA_NODE_BASEATTRIBUTES
-    UA_NODE_VARIABLEATTRIBUTES
-    UA_Boolean isAbstract;
-
-    /* Members specific to open62541 */
-    UA_NodeTypeLifecycle lifecycle;
-} UA_VariableTypeNode;
-
-/**
- * .. _methodnode:
- *
- * MethodNode
- * ----------
- *
- * Methods define callable functions and are invoked using the :ref:`Call
- * <method-services>` service. MethodNodes may have special properties (variable
- * childen with a ``hasProperty`` reference) with the :ref:`qualifiedname` ``(0,
- * "InputArguments")`` and ``(0, "OutputArguments")``. The input and output
- * arguments are both described via an array of ``UA_Argument``. While the Call
- * service uses a generic array of :ref:`variant` for input and output, the
- * actual argument values are checked to match the signature of the MethodNode.
- *
- * Note that the same MethodNode may be referenced from several objects (and
- * object types). For this, the NodeId of the method *and of the object
- * providing context* is part of a Call request message. */
-
-typedef struct {
-    UA_NODE_BASEATTRIBUTES
-    UA_Boolean executable;
-
-    /* Members specific to open62541 */
-    UA_MethodCallback method;
-} UA_MethodNode;
-
-/**
- * ObjectNode
- * ----------
- *
- * Objects are used to represent systems, system components, real-world objects
- * and software objects. Objects are instances of an :ref:`object
- * type<objecttypenode>` and may contain variables, methods and further
- * objects. */
-
-typedef struct {
-    UA_NODE_BASEATTRIBUTES
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-    struct UA_MonitoredItem *monitoredItemQueue;
-#endif
-    UA_Byte eventNotifier;
-} UA_ObjectNode;
-
-/**
- * .. _objecttypenode:
- *
- * ObjectTypeNode
- * --------------
- *
- * ObjectTypes provide definitions for Objects. Abstract objects cannot be
- * instantiated. See :ref:`node-lifecycle` for the use of constructor and
- * destructor callbacks. */
-
-typedef struct {
-    UA_NODE_BASEATTRIBUTES
-    UA_Boolean isAbstract;
-
-    /* Members specific to open62541 */
-    UA_NodeTypeLifecycle lifecycle;
-} UA_ObjectTypeNode;
-
-/**
- * .. _referencetypenode:
- *
- * ReferenceTypeNode
- * -----------------
- *
- * Each reference between two nodes is typed with a ReferenceType that gives
- * meaning to the relation. The OPC UA standard defines a set of ReferenceTypes
- * as a mandatory part of OPC UA information models.
- *
- * - Abstract ReferenceTypes cannot be used in actual references and are only
- *   used to structure the ReferenceTypes hierarchy
- * - Symmetric references have the same meaning from the perspective of the
- *   source and target node
- *
- * The figure below shows the hierarchy of the standard ReferenceTypes (arrows
- * indicate a ``hasSubType`` relation). Refer to Part 3 of the OPC UA
- * specification for the full semantics of each ReferenceType.
- *
- * .. graphviz::
- *
- *    digraph tree {
- *
- *    node [height=0, shape=box, fillcolor="#E5E5E5", concentrate=true]
- *
- *    references [label="References\n(Abstract, Symmetric)"]
- *    hierarchical_references [label="HierarchicalReferences\n(Abstract)"]
- *    references -> hierarchical_references
- *
- *    nonhierarchical_references [label="NonHierarchicalReferences\n(Abstract, Symmetric)"]
- *    references -> nonhierarchical_references
- *
- *    haschild [label="HasChild\n(Abstract)"]
- *    hierarchical_references -> haschild
- *
- *    aggregates [label="Aggregates\n(Abstract)"]
- *    haschild -> aggregates
- *
- *    organizes [label="Organizes"]
- *    hierarchical_references -> organizes
- *
- *    hascomponent [label="HasComponent"]
- *    aggregates -> hascomponent
- *
- *    hasorderedcomponent [label="HasOrderedComponent"]
- *    hascomponent -> hasorderedcomponent
- *
- *    hasproperty [label="HasProperty"]
- *    aggregates -> hasproperty
- *
- *    hassubtype [label="HasSubtype"]
- *    haschild -> hassubtype
- *
- *    hasmodellingrule [label="HasModellingRule"]
- *    nonhierarchical_references -> hasmodellingrule
- *
- *    hastypedefinition [label="HasTypeDefinition"]
- *    nonhierarchical_references -> hastypedefinition
- *
- *    hasencoding [label="HasEncoding"]
- *    nonhierarchical_references -> hasencoding
- *
- *    hasdescription [label="HasDescription"]
- *    nonhierarchical_references -> hasdescription
- *
- *    haseventsource [label="HasEventSource"]
- *    hierarchical_references -> haseventsource
- *
- *    hasnotifier [label="HasNotifier"]
- *    hierarchical_references -> hasnotifier
- *
- *    generatesevent [label="GeneratesEvent"]
- *    nonhierarchical_references -> generatesevent
- *
- *    alwaysgeneratesevent [label="AlwaysGeneratesEvent"]
- *    generatesevent -> alwaysgeneratesevent
- *
- *    {rank=same hierarchical_references nonhierarchical_references}
- *    {rank=same generatesevent haseventsource hasmodellingrule
- *               hasencoding hassubtype}
- *    {rank=same alwaysgeneratesevent hasproperty}
- *
- *    }
- *
- * The ReferenceType hierarchy can be extended with user-defined ReferenceTypes.
- * Many Companion Specifications for OPC UA define new ReferenceTypes to be used
- * in their domain of interest.
- *
- * For the following example of custom ReferenceTypes, we attempt to model the
- * structure of a technical system. For this, we introduce two custom
- * ReferenceTypes. First, the hierarchical ``contains`` ReferenceType indicates
- * that a system (represented by an OPC UA object) contains a component (or
- * subsystem). This gives rise to a tree-structure of containment relations. For
- * example, the motor (object) is contained in the car and the crankshaft is
- * contained in the motor. Second, the symmetric ``connectedTo`` ReferenceType
- * indicates that two components are connected. For example, the motor's
- * crankshaft is connected to the gear box. Connections are independent of the
- * containment hierarchy and can induce a general graph-structure. Further
- * subtypes of ``connectedTo`` could be used to differentiate between physical,
- * electrical and information related connections. A client can then learn the
- * layout of a (physical) system represented in an OPC UA information model
- * based on a common understanding of just two custom reference types. */
-
-typedef struct {
-    UA_NODE_BASEATTRIBUTES
-    UA_Boolean isAbstract;
-    UA_Boolean symmetric;
-    UA_LocalizedText inverseName;
-} UA_ReferenceTypeNode;
-
-/**
- * .. _datatypenode:
- *
- * DataTypeNode
- * ------------
- *
- * DataTypes represent simple and structured data types. DataTypes may contain
- * arrays. But they always describe the structure of a single instance. In
- * open62541, DataTypeNodes in the information model hierarchy are matched to
- * ``UA_DataType`` type descriptions for :ref:`generic-types` via their NodeId.
- *
- * Abstract DataTypes (e.g. ``Number``) cannot be the type of actual values.
- * They are used to constrain values to possible child DataTypes (e.g.
- * ``UInt32``). */
-
-typedef struct {
-    UA_NODE_BASEATTRIBUTES
-    UA_Boolean isAbstract;
-} UA_DataTypeNode;
-
-/**
- * ViewNode
- * --------
- *
- * Each View defines a subset of the Nodes in the AddressSpace. Views can be
- * used when browsing an information model to focus on a subset of nodes and
- * references only. ViewNodes can be created and be interacted with. But their
- * use in the :ref:`Browse<view-services>` service is currently unsupported in
- * open62541. */
-
-typedef struct {
-    UA_NODE_BASEATTRIBUTES
-    UA_Byte eventNotifier;
-    UA_Boolean containsNoLoops;
-} UA_ViewNode;
-
-/**
- * Nodestore Plugin API
- * ====================
- *
- * The following definitions are used for implementing custom node storage
- * backends. **Most users will want to use the default nodestore and don't need
- * to work with the nodestore API**.
- *
- * Outside of custom nodestore implementations, users should not manually edit
- * nodes. Please use the OPC UA services for that. Otherwise, all consistency
- * checks are omitted. This can crash the application eventually. */
-
-/* For non-multithreaded access, some nodestores allow that nodes are edited
- * without a copy/replace. This is not possible when the node is only an
- * intermediate representation and stored e.g. in a database backend. */
-extern const UA_Boolean inPlaceEditAllowed;
-
-/* Nodestore context and lifecycle */
-UA_StatusCode UA_Nodestore_new(void **nsCtx);
-void UA_Nodestore_delete(void *nsCtx);
-
-/**
- * The following definitions are used to create empty nodes of the different
- * node types. The memory is managed by the nodestore. Therefore, the node has
- * to be removed via a special deleteNode function. (If the new node is not
- * added to the nodestore.) */
-
-UA_Node *
-UA_Nodestore_newNode(void *nsCtx, UA_NodeClass nodeClass);
-
-void
-UA_Nodestore_deleteNode(void *nsCtx, UA_Node *node);
-
-/**
- *``Get`` returns a pointer to an immutable node. ``Release`` indicates that the
- * pointer is no longer accessed afterwards. */
-
-const UA_Node *
-UA_Nodestore_getNode(void *nsCtx, const UA_NodeId *nodeId);
-
-void
-UA_Nodestore_releaseNode(void *nsCtx, const UA_Node *node);
-
-/* Returns an editable copy of a node (needs to be deleted with the
- * deleteNode function or inserted / replaced into the nodestore). */
-UA_StatusCode
-UA_Nodestore_getNodeCopy(void *nsCtx, const UA_NodeId *nodeId,
-                         UA_Node **outNode);
-
-/* Inserts a new node into the nodestore. If the NodeId is zero, then a fresh
- * numeric NodeId is assigned. If insertion fails, the node is deleted. */
-UA_StatusCode
-UA_Nodestore_insertNode(void *nsCtx, UA_Node *node, UA_NodeId *addedNodeId);
-
-/* To replace a node, get an editable copy of the node, edit and replace with
- * this function. If the node was already replaced since the copy was made,
- * UA_STATUSCODE_BADINTERNALERROR is returned. If the NodeId is not found,
- * UA_STATUSCODE_BADNODEIDUNKNOWN is returned. In both error cases, the editable
- * node is deleted. */
-UA_StatusCode
-UA_Nodestore_replaceNode(void *nsCtx, UA_Node *node);
-
-/* Removes a node from the nodestore. */
-UA_StatusCode
-UA_Nodestore_removeNode(void *nsCtx, const UA_NodeId *nodeId);
-
-/* Execute a callback for every node in the nodestore. */
-typedef void (*UA_NodestoreVisitor)(void *visitorCtx, const UA_Node *node);
-void
-UA_Nodestore_iterate(void *nsCtx, UA_NodestoreVisitor visitor,
-                     void *visitorCtx);
-
-/**
- * Node Handling
- * =============
- *
- * To be used only in the nodestore and internally in the SDK. The following
- * methods specialize internally for the different node classes, distinguished
- * by the NodeClass attribute. */
-
-/* Attributes must be of a matching type (VariableAttributes, ObjectAttributes,
- * and so on). The attributes are copied. Note that the attributes structs do
- * not contain NodeId, NodeClass and BrowseName. The NodeClass of the node needs
- * to be correctly set before calling this method. UA_Node_deleteMembers is
- * called on the node when an error occurs internally. */
-UA_StatusCode UA_EXPORT
-UA_Node_setAttributes(UA_Node *node, const void *attributes,
-                      const UA_DataType *attributeType);
-
-/* Reset the destination node and copy the content of the source */
-UA_StatusCode UA_EXPORT
-UA_Node_copy(const UA_Node *src, UA_Node *dst);
-
-/* Allocate new node and copy the values from src */
-UA_EXPORT UA_Node *
-UA_Node_copy_alloc(const UA_Node *src);
-
-/* Add a single reference to the node */
-UA_StatusCode UA_EXPORT
-UA_Node_addReference(UA_Node *node, const UA_AddReferencesItem *item);
-
-/* Delete a single reference from the node */
-UA_StatusCode UA_EXPORT
-UA_Node_deleteReference(UA_Node *node, const UA_DeleteReferencesItem *item);
-
-/* Delete all references of the node */
-void UA_EXPORT
-UA_Node_deleteReferences(UA_Node *node);
-
-/* Remove all malloc'ed members of the node */
-void UA_EXPORT
-UA_Node_deleteMembers(UA_Node *node);
-
-_UA_END_DECLS
-
-#endif /* UA_SERVER_NODES_H_ */
diff --git a/ext/open62541/include/open62541/plugin/pki.h b/ext/open62541/include/open62541/plugin/pki.h
deleted file mode 100644
index ef836e1..0000000
--- a/ext/open62541/include/open62541/plugin/pki.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) Mark Giraud, Fraunhofer IOSB
- */
-
-#ifndef UA_PLUGIN_PKI_H_
-#define UA_PLUGIN_PKI_H_
-
-#include <open62541/types.h>
-#include <open62541/types_generated.h>
-
-_UA_BEGIN_DECLS
-
-/**
- * Public Key Infrastructure Integration
- * =====================================
- * This file contains interface definitions for integration in a Public Key
- * Infrastructure (PKI). Currently only one plugin interface is defined.
- *
- * Certificate Verification
- * ------------------------
- * This plugin verifies that the origin of the certificate is trusted. It does
- * not assign any access rights/roles to the holder of the certificate.
- *
- * Usually, implementations of the certificate verification plugin provide an
- * initialization method that takes a trust-list and a revocation-list as input.
- * The lifecycle of the plugin is attached to a server or client config. The
- * ``deleteMembers`` method is called automatically when the config is
- * destroyed. */
-
-struct UA_CertificateVerification;
-typedef struct UA_CertificateVerification UA_CertificateVerification;
-
-struct UA_CertificateVerification {
-    void *context;
-
-    /* Verify the certificate against the configured policies and trust chain. */
-    UA_StatusCode (*verifyCertificate)(void *verificationContext,
-                                       const UA_ByteString *certificate);
-
-    /* Verify that the certificate has the applicationURI in the subject name. */
-    UA_StatusCode (*verifyApplicationURI)(void *verificationContext,
-                                          const UA_ByteString *certificate,
-                                          const UA_String *applicationURI);
-
-    /* Delete the certificate verification context */
-    void (*deleteMembers)(UA_CertificateVerification *cv);
-};
-
-_UA_END_DECLS
-
-#endif /* UA_PLUGIN_PKI_H_ */
diff --git a/ext/open62541/include/open62541/plugin/pubsub.h b/ext/open62541/include/open62541/plugin/pubsub.h
deleted file mode 100644
index 80d996b..0000000
--- a/ext/open62541/include/open62541/plugin/pubsub.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017-2018 Fraunhofer IOSB (Author: Andreas Ebner)
- */
-
-#ifndef UA_PLUGIN_PUBSUB_H_
-#define UA_PLUGIN_PUBSUB_H_
-
-#include <open62541/server_pubsub.h>
-
-_UA_BEGIN_DECLS
-
-#ifdef UA_ENABLE_PUBSUB
-
-/**
- * .. _pubsub_connection:
- *
- * PubSub Connection Plugin API
- * ============================
- *
- * The PubSub Connection API is the interface between concrete network
- * implementations and the internal pubsub code.
- *
- * The PubSub specification enables the creation of new connections on runtime.
- * Wording: 'Connection' -> OPC UA standard 'highlevel' perspective, 'Channel'
- * -> open62541 implementation 'lowlevel' perspective. A channel can be assigned
- * with different network implementations like UDP, MQTT, AMQP. The channel
- * provides basis services like send, regist, unregist, receive, close. */
-
-typedef enum {
-    UA_PUBSUB_CHANNEL_RDY,
-    UA_PUBSUB_CHANNEL_PUB,
-    UA_PUBSUB_CHANNEL_SUB,
-    UA_PUBSUB_CHANNEL_PUB_SUB,
-    UA_PUBSUB_CHANNEL_ERROR,
-    UA_PUBSUB_CHANNEL_CLOSED
-} UA_PubSubChannelState;
-
-struct UA_PubSubChannel;
-typedef struct UA_PubSubChannel UA_PubSubChannel;
-
-/* Interface structure between network plugin and internal implementation */
-struct UA_PubSubChannel {
-    UA_UInt32 publisherId; /* unique identifier */
-    UA_PubSubChannelState state;
-    UA_PubSubConnectionConfig *connectionConfig; /* link to parent connection config */
-    UA_SOCKET sockfd;
-    void *handle; /* implementation specific data */
-    /*@info for handle: each network implementation should provide an structure
-    * UA_PubSubChannelData[ImplementationName] This structure can be used by the
-    * network implementation to store network implementation specific data.*/
-
-    /* Sending out the content of the buf parameter */
-    UA_StatusCode (*send)(UA_PubSubChannel *channel, UA_ExtensionObject *transportSettings,
-                          const UA_ByteString *buf);
-
-    /* Register to an specified message source, e.g. multicast group or topic. Callback is used for mqtt. */
-    UA_StatusCode (*regist)(UA_PubSubChannel * channel, UA_ExtensionObject *transportSettings,
-        void (*callback)(UA_ByteString *encodedBuffer, UA_ByteString *topic));
-
-    /* Remove subscription to an specified message source, e.g. multicast group or topic */
-    UA_StatusCode (*unregist)(UA_PubSubChannel * channel, UA_ExtensionObject *transportSettings);
-
-    /* Receive messages. A regist to the message source is needed before. */
-    UA_StatusCode (*receive)(UA_PubSubChannel * channel, UA_ByteString *,
-                             UA_ExtensionObject *transportSettings, UA_UInt32 timeout);
-
-    /* Closing the connection and implicit free of the channel structures. */
-    UA_StatusCode (*close)(UA_PubSubChannel *channel);
-
-    /* Giving the connection protocoll time to process inbound and outbound traffic. */
-    UA_StatusCode (*yield)(UA_PubSubChannel *channel, UA_UInt16 timeout);
-};
-
-/**
- * The UA_PubSubTransportLayer is used for the creation of new connections.
- * Whenever on runtime a new connection is request, the internal PubSub
- * implementation call * the 'createPubSubChannel' function. The
- * 'transportProfileUri' contains the standard defined transport profile
- * information and is used to identify the type of connections which can be
- * created by the TransportLayer. The server config contains a list of
- * UA_PubSubTransportLayer. Take a look in the tutorial_pubsub_connection to get
- * informations about the TransportLayer handling. */
-
-typedef struct {
-    UA_String transportProfileUri;
-    UA_PubSubChannel *(*createPubSubChannel)(UA_PubSubConnectionConfig *connectionConfig);
-} UA_PubSubTransportLayer;
-
-/**
- * The UA_ServerConfig_addPubSubTransportLayer is used to add a transport layer
- * to the server configuration. The list memory is allocated and will be freed
- * with UA_PubSubManager_delete.
- *
- * .. note:: If the UA_String transportProfileUri was dynamically allocated
- *           the memory has to be freed when no longer required.
- *
- * .. note:: This has to be done before the server is started with UA_Server_run. */
-UA_StatusCode UA_EXPORT
-UA_ServerConfig_addPubSubTransportLayer(UA_ServerConfig *config,
-                                        UA_PubSubTransportLayer *pubsubTransportLayer);
-
-#endif /* UA_ENABLE_PUBSUB */
-
-_UA_END_DECLS
-
-#endif /* UA_PLUGIN_PUBSUB_H_ */
diff --git a/ext/open62541/include/open62541/plugin/securitypolicy.h b/ext/open62541/include/open62541/plugin/securitypolicy.h
deleted file mode 100644
index 9f0d26c..0000000
--- a/ext/open62541/include/open62541/plugin/securitypolicy.h
+++ /dev/null
@@ -1,390 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2017-2018 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifndef UA_PLUGIN_SECURITYPOLICY_H_
-#define UA_PLUGIN_SECURITYPOLICY_H_
-
-#include <open62541/plugin/log.h>
-#include <open62541/plugin/pki.h>
-#include <open62541/server.h>
-
-_UA_BEGIN_DECLS
-
-extern UA_EXPORT const UA_ByteString UA_SECURITY_POLICY_NONE_URI;
-
-struct UA_SecurityPolicy;
-typedef struct UA_SecurityPolicy UA_SecurityPolicy;
-
-/**
- * SecurityPolicy Interface Definition
- * ----------------------------------- */
-
-typedef struct {
-    UA_String uri;
-
-    /* Verifies the signature of the message using the provided keys in the context.
-     *
-     * @param securityPolicy the securityPolicy the function is invoked on.
-     * @param channelContext the channelContext that contains the key to verify
-     *                       the supplied message with.
-     * @param message the message to which the signature is supposed to belong.
-     * @param signature the signature of the message, that should be verified. */
-    UA_StatusCode (*verify)(const UA_SecurityPolicy *securityPolicy,
-                            void *channelContext, const UA_ByteString *message,
-                            const UA_ByteString *signature) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-    /* Signs the given message using this policys signing algorithm and the
-     * provided keys in the context.
-     *
-     * @param securityPolicy the securityPolicy the function is invoked on.
-     * @param channelContext the channelContext that contains the key to sign
-     *                       the supplied message with.
-     * @param message the message to sign.
-     * @param signature an output buffer to which the signature is written. The
-     *                  buffer needs to be allocated by the caller. The
-     *                  necessary size can be acquired with the signatureSize
-     *                  attribute of this module. */
-    UA_StatusCode (*sign)(const UA_SecurityPolicy *securityPolicy,
-                          void *channelContext, const UA_ByteString *message,
-                          UA_ByteString *signature) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-    /* Gets the signature size that depends on the local (private) key.
-     *
-     * @param securityPolicy the securityPolicy the function is invoked on.
-     * @param channelContext the channelContext that contains the
-     *                       certificate/key.
-     * @return the size of the local signature. Returns 0 if no local
-     *         certificate was set. */
-    size_t (*getLocalSignatureSize)(const UA_SecurityPolicy *securityPolicy,
-                                    const void *channelContext);
-
-    /* Gets the signature size that depends on the remote (public) key.
-     *
-     * @param securityPolicy the securityPolicy the function is invoked on.
-     * @param channelContext the context to retrieve data from.
-     * @return the size of the remote signature. Returns 0 if no
-     *         remote certificate was set previousely. */
-    size_t (*getRemoteSignatureSize)(const UA_SecurityPolicy *securityPolicy,
-                                     const void *channelContext);
-
-    /* Gets the local signing key length.
-     *
-     * @param securityPolicy the securityPolicy the function is invoked on.
-     * @param channelContext the context to retrieve data from.
-     * @return the length of the signing key in bytes. Returns 0 if no length can be found.
-     */
-    size_t (*getLocalKeyLength)(const UA_SecurityPolicy *securityPolicy,
-                                const void *channelContext);
-
-    /* Gets the local signing key length.
-     *
-     * @param securityPolicy the securityPolicy the function is invoked on.
-     * @param channelContext the context to retrieve data from.
-     * @return the length of the signing key in bytes. Returns 0 if no length can be found.
-     */
-    size_t (*getRemoteKeyLength)(const UA_SecurityPolicy *securityPolicy,
-                                 const void *channelContext);
-} UA_SecurityPolicySignatureAlgorithm;
-
-typedef struct {
-    UA_String uri;
-
-    /* Encrypt the given data in place using an asymmetric algorithm and keys.
-     *
-     * @param securityPolicy the securityPolicy the function is invoked on.
-     * @param channelContext the channelContext which contains information about
-     *                       the keys to encrypt data.
-     * @param data the data that is encrypted. The encrypted data will overwrite
-     *             the data that was supplied. */
-    UA_StatusCode (*encrypt)(const UA_SecurityPolicy *securityPolicy,
-                             void *channelContext,
-                             UA_ByteString *data) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-    /* Decrypts the given ciphertext in place using an asymmetric algorithm and
-     * key.
-     *
-     * @param securityPolicy the securityPolicy the function is invoked on.
-     * @param channelContext the channelContext which contains information about
-     *                       the keys needed to decrypt the message.
-     * @param data the data to decrypt. The decryption is done in place. */
-    UA_StatusCode (*decrypt)(const UA_SecurityPolicy *securityPolicy,
-                             void *channelContext,
-                             UA_ByteString *data) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-    /* Returns the length of the key used locally to encrypt messages in bits
-     *
-     * @param securityPolicy the securityPolicy the function is invoked on.
-     * @param channelContext the context to retrieve data from.
-     * @return the length of the local key. Returns 0 if no
-     *         key length is known. */
-    size_t (*getLocalKeyLength)(const UA_SecurityPolicy *securityPolicy,
-                                const void *channelContext);
-
-    /* Returns the length of the key used remotely to encrypt messages in bits
-     *
-     * @param securityPolicy the securityPolicy the function is invoked on.
-     * @param channelContext the context to retrieve data from.
-     * @return the length of the remote key. Returns 0 if no
-     *         key length is known. */
-    size_t (*getRemoteKeyLength)(const UA_SecurityPolicy *securityPolicy,
-                                 const void *channelContext);
-
-    /* Returns the size of encrypted blocks used by the local encryption algorithm.
-     *
-     * @param securityPolicy the securityPolicy the function is invoked on.
-     * @param channelContext the context to retrieve data from.
-     * @return the size of encrypted blocks in bytes. Returns 0 if no key length is known.
-     */
-    size_t (*getLocalBlockSize)(const UA_SecurityPolicy *securityPolicy,
-                                const void *channelContext);
-
-    /* Returns the size of encrypted blocks used by the remote encryption algorithm.
-     *
-     * @param securityPolicy the securityPolicy the function is invoked on.
-     * @param channelContext the context to retrieve data from.
-     * @return the size of encrypted blocks in bytes. Returns 0 if no key length is known.
-     */
-    size_t (*getRemoteBlockSize)(const UA_SecurityPolicy *securityPolicy,
-                                 const void *channelContext);
-
-    /* Returns the size of plaintext blocks used by the local encryption algorithm.
-     *
-     * @param securityPolicy the securityPolicy the function is invoked on.
-     * @param channelContext the context to retrieve data from.
-     * @return the size of plaintext blocks in bytes. Returns 0 if no key length is known.
-     */
-    size_t (*getLocalPlainTextBlockSize)(const UA_SecurityPolicy *securityPolicy,
-                                         const void *channelContext);
-
-    /* Returns the size of plaintext blocks used by the remote encryption algorithm.
-     *
-     * @param securityPolicy the securityPolicy the function is invoked on.
-     * @param channelContext the context to retrieve data from.
-     * @return the size of plaintext blocks in bytes. Returns 0 if no key length is known.
-     */
-    size_t (*getRemotePlainTextBlockSize)(const UA_SecurityPolicy *securityPolicy,
-                                          const void *channelContext);
-} UA_SecurityPolicyEncryptionAlgorithm;
-
-typedef struct {
-    /* The algorithm used to sign and verify certificates. */
-    UA_SecurityPolicySignatureAlgorithm signatureAlgorithm;
-
-    /* The algorithm used to encrypt and decrypt messages. */
-    UA_SecurityPolicyEncryptionAlgorithm encryptionAlgorithm;
-
-} UA_SecurityPolicyCryptoModule;
-
-typedef struct {
-    /* Generates a thumbprint for the specified certificate.
-     *
-     * @param securityPolicy the securityPolicy the function is invoked on.
-     * @param certificate the certificate to make a thumbprint of.
-     * @param thumbprint an output buffer for the resulting thumbprint. Always
-     *                   has the length specified in the thumbprintLength in the
-     *                   asymmetricModule. */
-    UA_StatusCode (*makeCertificateThumbprint)(const UA_SecurityPolicy *securityPolicy,
-                                               const UA_ByteString *certificate,
-                                               UA_ByteString *thumbprint)
-    UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-    /* Compares the supplied certificate with the certificate in the endpoit context.
-     *
-     * @param securityPolicy the policy data that contains the certificate
-     *                       to compare to.
-     * @param certificateThumbprint the certificate thumbprint to compare to the
-     *                              one stored in the context.
-     * @return if the thumbprints match UA_STATUSCODE_GOOD is returned. If they
-     *         don't match or an error occurred an error code is returned. */
-    UA_StatusCode (*compareCertificateThumbprint)(const UA_SecurityPolicy *securityPolicy,
-                                                  const UA_ByteString *certificateThumbprint)
-    UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-    UA_SecurityPolicyCryptoModule cryptoModule;
-} UA_SecurityPolicyAsymmetricModule;
-
-typedef struct {
-    /* Pseudo random function that is used to generate the symmetric keys.
-     *
-     * For information on what parameters this function receives in what situation,
-     * refer to the OPC UA specification 1.03 Part6 Table 33
-     *
-     * @param securityPolicy the securityPolicy the function is invoked on.
-     * @param secret
-     * @param seed
-     * @param out an output to write the data to. The length defines the maximum
-     *            number of output bytes that are produced. */
-    UA_StatusCode (*generateKey)(const UA_SecurityPolicy *securityPolicy,
-                                 const UA_ByteString *secret,
-                                 const UA_ByteString *seed, UA_ByteString *out)
-    UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-    /* Random generator for generating nonces.
-     *
-     * @param securityPolicy the securityPolicy this function is invoked on.
-     *                       Example: myPolicy->generateNonce(myPolicy,
-     *                       &outBuff);
-     * @param out pointer to a buffer to store the nonce in. Needs to be
-     *            allocated by the caller. The buffer is filled with random
-     *            data. */
-    UA_StatusCode (*generateNonce)(const UA_SecurityPolicy *securityPolicy,
-                                   UA_ByteString *out)
-    UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-    /*
-     * The length of the nonce used in the SecureChannel as specified in the standard.
-     */
-    size_t secureChannelNonceLength;
-
-    UA_SecurityPolicyCryptoModule cryptoModule;
-} UA_SecurityPolicySymmetricModule;
-
-typedef struct {
-    /* This method creates a new context data object.
-     *
-     * The caller needs to call delete on the received object to free allocated
-     * memory. Memory is only allocated if the function succeeds so there is no
-     * need to manually free the memory pointed to by *channelContext or to
-     * call delete in case of failure.
-     *
-     * @param securityPolicy the policy context of the endpoint that is connected
-     *                       to. It will be stored in the channelContext for
-     *                       further access by the policy.
-     * @param remoteCertificate the remote certificate contains the remote
-     *                          asymmetric key. The certificate will be verified
-     *                          and then stored in the context so that its
-     *                          details may be accessed.
-     * @param channelContext the initialized channelContext that is passed to
-     *                       functions that work on a context. */
-    UA_StatusCode (*newContext)(const UA_SecurityPolicy *securityPolicy,
-                                const UA_ByteString *remoteCertificate,
-                                void **channelContext)
-    UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-    /* Deletes the the security context. */
-    void (*deleteContext)(void *channelContext);
-
-    /* Sets the local encrypting key in the supplied context.
-     *
-     * @param channelContext the context to work on.
-     * @param key the local encrypting key to store in the context. */
-    UA_StatusCode (*setLocalSymEncryptingKey)(void *channelContext,
-                                              const UA_ByteString *key)
-    UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-    /* Sets the local signing key in the supplied context.
-     *
-     * @param channelContext the context to work on.
-     * @param key the local signing key to store in the context. */
-    UA_StatusCode (*setLocalSymSigningKey)(void *channelContext,
-                                           const UA_ByteString *key)
-    UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-    /* Sets the local initialization vector in the supplied context.
-     *
-     * @param channelContext the context to work on.
-     * @param iv the local initialization vector to store in the context. */
-    UA_StatusCode (*setLocalSymIv)(void *channelContext,
-                                   const UA_ByteString *iv)
-    UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-    /* Sets the remote encrypting key in the supplied context.
-     *
-     * @param channelContext the context to work on.
-     * @param key the remote encrypting key to store in the context. */
-    UA_StatusCode (*setRemoteSymEncryptingKey)(void *channelContext,
-                                               const UA_ByteString *key)
-    UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-    /* Sets the remote signing key in the supplied context.
-     *
-     * @param channelContext the context to work on.
-     * @param key the remote signing key to store in the context. */
-    UA_StatusCode (*setRemoteSymSigningKey)(void *channelContext,
-                                            const UA_ByteString *key)
-    UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-    /* Sets the remote initialization vector in the supplied context.
-     *
-     * @param channelContext the context to work on.
-     * @param iv the remote initialization vector to store in the context. */
-    UA_StatusCode (*setRemoteSymIv)(void *channelContext,
-                                    const UA_ByteString *iv)
-    UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-    /* Compares the supplied certificate with the certificate in the channel
-     * context.
-     *
-     * @param channelContext the channel context data that contains the
-     *                       certificate to compare to.
-     * @param certificate the certificate to compare to the one stored in the context.
-     * @return if the certificates match UA_STATUSCODE_GOOD is returned. If they
-     *         don't match or an errror occurred an error code is returned. */
-    UA_StatusCode (*compareCertificate)(const void *channelContext,
-                                        const UA_ByteString *certificate)
-    UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-} UA_SecurityPolicyChannelModule;
-
-struct UA_SecurityPolicy {
-    /* Additional data */
-    void *policyContext;
-
-    /* The policy uri that identifies the implemented algorithms */
-    UA_ByteString policyUri;
-
-    /* The local certificate is specific for each SecurityPolicy since it
-     * depends on the used key length. */
-    UA_ByteString localCertificate;
-
-    /* Function pointers grouped into modules */
-    UA_SecurityPolicyAsymmetricModule asymmetricModule;
-    UA_SecurityPolicySymmetricModule symmetricModule;
-    UA_SecurityPolicySignatureAlgorithm certificateSigningAlgorithm;
-    UA_SecurityPolicyChannelModule channelModule;
-    UA_CertificateVerification *certificateVerification;
-
-    const UA_Logger *logger;
-
-    /* Updates the ApplicationInstanceCertificate and the corresponding private
-     * key at runtime. */
-    UA_StatusCode (*updateCertificateAndPrivateKey)(UA_SecurityPolicy *policy,
-                                                    const UA_ByteString newCertificate,
-                                                    const UA_ByteString newPrivateKey);
-
-    /* Deletes the dynamic content of the policy */
-    void (*deleteMembers)(UA_SecurityPolicy *policy);
-};
-
-/* Gets the number of bytes that are needed by the encryption function in
- * addition to the length of the plaintext message. This is needed, since
- * most RSA encryption methods have their own padding mechanism included.
- * This makes the encrypted message larger than the plainText, so we need to
- * have enough room in the buffer for the overhead.
- *
- * @param securityPolicy the algorithms to use.
- * @param channelContext the retrieve data from.
- * @param maxEncryptionLength the maximum number of bytes that the data to
- *                            encrypt can be. */
-size_t
-UA_SecurityPolicy_getRemoteAsymEncryptionBufferLengthOverhead(const UA_SecurityPolicy *securityPolicy,
-                                                              const void *channelContext,
-                                                              size_t maxEncryptionLength);
-
-/* Gets the a pointer to the context of a security policy supported by the
- * server matched by the security policy uri.
- *
- * @param server the server context.
- * @param securityPolicyUri the security policy to get the context of. */
-UA_SecurityPolicy *
-UA_SecurityPolicy_getSecurityPolicyByUri(const UA_Server *server,
-                                         const UA_ByteString *securityPolicyUri);
-
-_UA_END_DECLS
-
-#endif /* UA_PLUGIN_SECURITYPOLICY_H_ */
diff --git a/ext/open62541/include/open62541/server.h b/ext/open62541/include/open62541/server.h
deleted file mode 100644
index 340ddeb..0000000
--- a/ext/open62541/include/open62541/server.h
+++ /dev/null
@@ -1,1373 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2014-2015, 2017 (c) Florian Palm
- *    Copyright 2015-2016 (c) Chris Iatrou
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifndef UA_SERVER_H_
-#define UA_SERVER_H_
-
-#include <open62541/nodeids.h>
-#include <open62541/types.h>
-#include <open62541/types_generated.h>
-#include <open62541/types_generated_handling.h>
-
-_UA_BEGIN_DECLS
-
-/* Forward declarations */
-struct UA_ServerConfig;
-typedef struct UA_ServerConfig UA_ServerConfig;
-
-struct UA_Server;
-typedef struct UA_Server UA_Server;
-
-struct UA_Client;
-
-/**
- * .. _server:
- *
- * Server
- * ======
- *
- * .. include:: server_config.rst
- *
- * .. _server-lifecycle:
- *
- * Server Lifecycle
- * ---------------- */
-
-UA_Server UA_EXPORT * UA_Server_new(void);
-
-/* Makes a (shallow) copy of the config into the server object.
- * The config content is cleared together with the server. */
-UA_Server UA_EXPORT *
-UA_Server_newWithConfig(const UA_ServerConfig *config);
-
-void UA_EXPORT UA_Server_delete(UA_Server *server);
-
-UA_ServerConfig UA_EXPORT *
-UA_Server_getConfig(UA_Server *server);
-
-/* Runs the main loop of the server. In each iteration, this calls into the
- * networklayers to see if messages have arrived.
- *
- * @param server The server object.
- * @param running The loop is run as long as *running is true.
- *        Otherwise, the server shuts down.
- * @return Returns the statuscode of the UA_Server_run_shutdown method */
-UA_StatusCode UA_EXPORT
-UA_Server_run(UA_Server *server, const volatile UA_Boolean *running);
-
-/* The prologue part of UA_Server_run (no need to use if you call
- * UA_Server_run) */
-UA_StatusCode UA_EXPORT
-UA_Server_run_startup(UA_Server *server);
-
-/* Executes a single iteration of the server's main loop.
- *
- * @param server The server object.
- * @param waitInternal Should we wait for messages in the networklayer?
- *        Otherwise, the timouts for the networklayers are set to zero.
- *        The default max wait time is 50millisec.
- * @return Returns how long we can wait until the next scheduled
- *         callback (in ms) */
-UA_UInt16 UA_EXPORT
-UA_Server_run_iterate(UA_Server *server, UA_Boolean waitInternal);
-
-/* The epilogue part of UA_Server_run (no need to use if you call
- * UA_Server_run) */
-UA_StatusCode UA_EXPORT
-UA_Server_run_shutdown(UA_Server *server);
-
-/**
- * Timed Callbacks
- * --------------- */
-typedef void (*UA_ServerCallback)(UA_Server *server, void *data);
-
-/* Add a callback for execution at a specified time. If the indicated time lies
- * in the past, then the callback is executed at the next iteration of the
- * server's main loop.
- *
- * @param server The server object.
- * @param callback The callback that shall be added.
- * @param data Data that is forwarded to the callback.
- * @param date The timestamp for the execution time.
- * @param callbackId Set to the identifier of the repeated callback . This can
- *        be used to cancel the callback later on. If the pointer is null, the
- *        identifier is not set.
- * @return Upon success, UA_STATUSCODE_GOOD is returned. An error code
- *         otherwise. */
-UA_StatusCode UA_EXPORT
-UA_Server_addTimedCallback(UA_Server *server, UA_ServerCallback callback,
-                           void *data, UA_DateTime date, UA_UInt64 *callbackId);
-
-/* Add a callback for cyclic repetition to the server.
- *
- * @param server The server object.
- * @param callback The callback that shall be added.
- * @param data Data that is forwarded to the callback.
- * @param interval_ms The callback shall be repeatedly executed with the given
- *        interval (in ms). The interval must be positive. The first execution
- *        occurs at now() + interval at the latest.
- * @param callbackId Set to the identifier of the repeated callback . This can
- *        be used to cancel the callback later on. If the pointer is null, the
- *        identifier is not set.
- * @return Upon success, UA_STATUSCODE_GOOD is returned. An error code
- *         otherwise. */
-UA_StatusCode UA_EXPORT
-UA_Server_addRepeatedCallback(UA_Server *server, UA_ServerCallback callback,
-                              void *data, UA_Double interval_ms, UA_UInt64 *callbackId);
-
-UA_StatusCode UA_EXPORT
-UA_Server_changeRepeatedCallbackInterval(UA_Server *server, UA_UInt64 callbackId,
-                                         UA_Double interval_ms);
-
-/* Remove a repeated callback. Does nothing if the callback is not found.
- *
- * @param server The server object.
- * @param callbackId The id of the callback */
-void UA_EXPORT
-UA_Server_removeCallback(UA_Server *server, UA_UInt64 callbackId);
-
-#define UA_Server_removeRepeatedCallback(server, callbackId) \
-    UA_Server_removeCallback(server, callbackId);
-
-/**
- * Reading and Writing Node Attributes
- * -----------------------------------
- * The functions for reading and writing node attributes call the regular read
- * and write service in the background that are also used over the network.
- *
- * The following attributes cannot be read, since the local "admin" user always
- * has full rights.
- *
- * - UserWriteMask
- * - UserAccessLevel
- * - UserExecutable */
-/* Read an attribute of a node. The specialized functions below provide a more
- * concise syntax.
- *
- * @param server The server object.
- * @param item ReadValueIds contain the NodeId of the target node, the id of the
- *             attribute to read and (optionally) an index range to read parts
- *             of an array only. See the section on NumericRange for the format
- *             used for array ranges.
- * @param timestamps Which timestamps to return for the attribute.
- * @return Returns a DataValue that contains either an error code, or a variant
- *         with the attribute value and the timestamps. */
-UA_DataValue UA_EXPORT UA_THREADSAFE
-UA_Server_read(UA_Server *server, const UA_ReadValueId *item,
-               UA_TimestampsToReturn timestamps);
-
-/* Don't use this function. There are typed versions for every supported
- * attribute. */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-__UA_Server_read(UA_Server *server, const UA_NodeId *nodeId,
-                 UA_AttributeId attributeId, void *v);
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readNodeId(UA_Server *server, const UA_NodeId nodeId,
-                     UA_NodeId *outNodeId) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_NODEID, outNodeId);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readNodeClass(UA_Server *server, const UA_NodeId nodeId,
-                        UA_NodeClass *outNodeClass) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_NODECLASS,
-                            outNodeClass);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readBrowseName(UA_Server *server, const UA_NodeId nodeId,
-                         UA_QualifiedName *outBrowseName) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_BROWSENAME,
-                            outBrowseName);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readDisplayName(UA_Server *server, const UA_NodeId nodeId,
-                          UA_LocalizedText *outDisplayName) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_DISPLAYNAME,
-                            outDisplayName);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readDescription(UA_Server *server, const UA_NodeId nodeId,
-                          UA_LocalizedText *outDescription) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_DESCRIPTION,
-                            outDescription);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readWriteMask(UA_Server *server, const UA_NodeId nodeId,
-                        UA_UInt32 *outWriteMask) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_WRITEMASK,
-                            outWriteMask);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readIsAbstract(UA_Server *server, const UA_NodeId nodeId,
-                         UA_Boolean *outIsAbstract) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_ISABSTRACT,
-                            outIsAbstract);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readSymmetric(UA_Server *server, const UA_NodeId nodeId,
-                        UA_Boolean *outSymmetric) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_SYMMETRIC,
-                            outSymmetric);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readInverseName(UA_Server *server, const UA_NodeId nodeId,
-                          UA_LocalizedText *outInverseName) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_INVERSENAME,
-                            outInverseName);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readContainsNoLoop(UA_Server *server, const UA_NodeId nodeId,
-                             UA_Boolean *outContainsNoLoops) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_CONTAINSNOLOOPS,
-                            outContainsNoLoops);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readEventNotifier(UA_Server *server, const UA_NodeId nodeId,
-                            UA_Byte *outEventNotifier) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_EVENTNOTIFIER,
-                            outEventNotifier);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readValue(UA_Server *server, const UA_NodeId nodeId,
-                    UA_Variant *outValue) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_VALUE, outValue);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readDataType(UA_Server *server, const UA_NodeId nodeId,
-                       UA_NodeId *outDataType) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_DATATYPE,
-                            outDataType);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readValueRank(UA_Server *server, const UA_NodeId nodeId,
-                        UA_Int32 *outValueRank) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_VALUERANK,
-                            outValueRank);
-}
-
-/* Returns a variant with an int32 array */
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readArrayDimensions(UA_Server *server, const UA_NodeId nodeId,
-                              UA_Variant *outArrayDimensions) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_ARRAYDIMENSIONS,
-                            outArrayDimensions);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readAccessLevel(UA_Server *server, const UA_NodeId nodeId,
-                          UA_Byte *outAccessLevel) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_ACCESSLEVEL,
-                            outAccessLevel);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readMinimumSamplingInterval(UA_Server *server, const UA_NodeId nodeId,
-                                      UA_Double *outMinimumSamplingInterval) {
-    return __UA_Server_read(server, &nodeId,
-                            UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL,
-                            outMinimumSamplingInterval);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readHistorizing(UA_Server *server, const UA_NodeId nodeId,
-                          UA_Boolean *outHistorizing) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_HISTORIZING,
-                            outHistorizing);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readExecutable(UA_Server *server, const UA_NodeId nodeId,
-                         UA_Boolean *outExecutable) {
-    return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_EXECUTABLE,
-                            outExecutable);
-}
-
-/**
- * The following node attributes cannot be changed once a node has been created:
- *
- * - NodeClass
- * - NodeId
- * - Symmetric
- * - ContainsNoLoop
- *
- * The following attributes cannot be written from the server, as they are
- * specific to the different users and set by the access control callback:
- *
- * - UserWriteMask
- * - UserAccessLevel
- * - UserExecutable
- */
-
-/* Overwrite an attribute of a node. The specialized functions below provide a
- * more concise syntax.
- *
- * @param server The server object.
- * @param value WriteValues contain the NodeId of the target node, the id of the
- *              attribute to overwritten, the actual value and (optionally) an
- *              index range to replace parts of an array only. of an array only.
- *              See the section on NumericRange for the format used for array
- *              ranges.
- * @return Returns a status code. */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_write(UA_Server *server, const UA_WriteValue *value);
-
-/* Don't use this function. There are typed versions with no additional
- * overhead. */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-__UA_Server_write(UA_Server *server, const UA_NodeId *nodeId,
-                  const UA_AttributeId attributeId,
-                  const UA_DataType *attr_type, const void *attr);
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeBrowseName(UA_Server *server, const UA_NodeId nodeId,
-                          const UA_QualifiedName browseName) {
-    return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_BROWSENAME,
-                             &UA_TYPES[UA_TYPES_QUALIFIEDNAME], &browseName);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeDisplayName(UA_Server *server, const UA_NodeId nodeId,
-                           const UA_LocalizedText displayName) {
-    return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_DISPLAYNAME,
-                             &UA_TYPES[UA_TYPES_LOCALIZEDTEXT], &displayName);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeDescription(UA_Server *server, const UA_NodeId nodeId,
-                           const UA_LocalizedText description) {
-    return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_DESCRIPTION,
-                             &UA_TYPES[UA_TYPES_LOCALIZEDTEXT], &description);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeWriteMask(UA_Server *server, const UA_NodeId nodeId,
-                         const UA_UInt32 writeMask) {
-    return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_WRITEMASK,
-                             &UA_TYPES[UA_TYPES_UINT32], &writeMask);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeIsAbstract(UA_Server *server, const UA_NodeId nodeId,
-                          const UA_Boolean isAbstract) {
-    return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_ISABSTRACT,
-                             &UA_TYPES[UA_TYPES_BOOLEAN], &isAbstract);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeInverseName(UA_Server *server, const UA_NodeId nodeId,
-                           const UA_LocalizedText inverseName) {
-    return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_INVERSENAME,
-                             &UA_TYPES[UA_TYPES_LOCALIZEDTEXT], &inverseName);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeEventNotifier(UA_Server *server, const UA_NodeId nodeId,
-                             const UA_Byte eventNotifier) {
-    return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_EVENTNOTIFIER,
-                             &UA_TYPES[UA_TYPES_BYTE], &eventNotifier);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeValue(UA_Server *server, const UA_NodeId nodeId,
-                     const UA_Variant value) {
-    return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_VALUE,
-                             &UA_TYPES[UA_TYPES_VARIANT], &value);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeDataType(UA_Server *server, const UA_NodeId nodeId,
-                        const UA_NodeId dataType) {
-    return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_DATATYPE,
-                             &UA_TYPES[UA_TYPES_NODEID], &dataType);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeValueRank(UA_Server *server, const UA_NodeId nodeId,
-                         const UA_Int32 valueRank) {
-    return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_VALUERANK,
-                             &UA_TYPES[UA_TYPES_INT32], &valueRank);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeArrayDimensions(UA_Server *server, const UA_NodeId nodeId,
-                               const UA_Variant arrayDimensions) {
-    return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_ARRAYDIMENSIONS,
-                             &UA_TYPES[UA_TYPES_VARIANT], &arrayDimensions);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeAccessLevel(UA_Server *server, const UA_NodeId nodeId,
-                           const UA_Byte accessLevel) {
-    return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_ACCESSLEVEL,
-                             &UA_TYPES[UA_TYPES_BYTE], &accessLevel);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeMinimumSamplingInterval(UA_Server *server, const UA_NodeId nodeId,
-                                       const UA_Double miniumSamplingInterval) {
-    return __UA_Server_write(server, &nodeId,
-                             UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL,
-                             &UA_TYPES[UA_TYPES_DOUBLE],
-                             &miniumSamplingInterval);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeHistorizing(UA_Server *server, const UA_NodeId nodeId,
-                          const UA_Boolean historizing) {
-    return __UA_Server_write(server, &nodeId,
-                             UA_ATTRIBUTEID_HISTORIZING,
-                             &UA_TYPES[UA_TYPES_BOOLEAN],
-                             &historizing);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeExecutable(UA_Server *server, const UA_NodeId nodeId,
-                          const UA_Boolean executable) {
-    return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_EXECUTABLE,
-                             &UA_TYPES[UA_TYPES_BOOLEAN], &executable); }
-
-/**
- * Browsing
- * -------- */
-
-/* Browse the references of a particular node. See the definition of
- * BrowseDescription structure for details. */
-UA_BrowseResult UA_EXPORT
-UA_Server_browse(UA_Server *server, UA_UInt32 maxReferences,
-                 const UA_BrowseDescription *bd);
-
-UA_BrowseResult UA_EXPORT
-UA_Server_browseNext(UA_Server *server, UA_Boolean releaseContinuationPoint,
-                     const UA_ByteString *continuationPoint);
-
-/* Nonstandard version of the browse service that recurses into child nodes.
- * Possible loops (that can occur for non-hierarchical references) are handled
- * by adding every target node at most once to the results array. */
-UA_StatusCode UA_EXPORT
-UA_Server_browseRecursive(UA_Server *server, const UA_BrowseDescription *bd,
-                          size_t *resultsSize, UA_ExpandedNodeId **results);
-
-UA_BrowsePathResult UA_EXPORT UA_THREADSAFE
-UA_Server_translateBrowsePathToNodeIds(UA_Server *server,
-                                       const UA_BrowsePath *browsePath);
-
-/* A simplified TranslateBrowsePathsToNodeIds based on the
- * SimpleAttributeOperand type (Part 4, 7.4.4.5).
- *
- * This specifies a relative path using a list of BrowseNames instead of the
- * RelativePath structure. The list of BrowseNames is equivalent to a
- * RelativePath that specifies forward references which are subtypes of the
- * HierarchicalReferences ReferenceType. All Nodes followed by the browsePath
- * shall be of the NodeClass Object or Variable. */
-UA_BrowsePathResult UA_EXPORT
-UA_Server_browseSimplifiedBrowsePath(UA_Server *server, const UA_NodeId origin,
-                                     size_t browsePathSize,
-                                     const UA_QualifiedName *browsePath);
-
-#ifndef HAVE_NODEITER_CALLBACK
-#define HAVE_NODEITER_CALLBACK
-/* Iterate over all nodes referenced by parentNodeId by calling the callback
- * function for each child node (in ifdef because GCC/CLANG handle include order
- * differently) */
-typedef UA_StatusCode
-(*UA_NodeIteratorCallback)(UA_NodeId childId, UA_Boolean isInverse,
-                           UA_NodeId referenceTypeId, void *handle);
-#endif
-
-UA_StatusCode UA_EXPORT
-UA_Server_forEachChildNodeCall(UA_Server *server, UA_NodeId parentNodeId,
-                               UA_NodeIteratorCallback callback, void *handle);
-
-#ifdef UA_ENABLE_DISCOVERY
-
-/**
- * Discovery
- * --------- */
-/* Register the given server instance at the discovery server.
- * This should be called periodically.
- * The semaphoreFilePath is optional. If the given file is deleted,
- * the server will automatically be unregistered. This could be
- * for example a pid file which is deleted if the server crashes.
- *
- * When the server shuts down you need to call unregister.
- *
- * @param server
- * @param client the client which is used to call the RegisterServer. It must
- *        already be connected to the correct endpoint
- * @param semaphoreFilePath optional parameter pointing to semaphore file. */
-UA_StatusCode UA_EXPORT
-UA_Server_register_discovery(UA_Server *server, struct UA_Client *client,
-                             const char* semaphoreFilePath);
-
-/* Unregister the given server instance from the discovery server.
- * This should only be called when the server is shutting down.
- * @param server
- * @param client the client which is used to call the RegisterServer. It must
- *        already be connected to the correct endpoint */
-UA_StatusCode UA_EXPORT
-UA_Server_unregister_discovery(UA_Server *server, struct UA_Client *client);
-
- /* Adds a periodic callback to register the server with the LDS (local discovery server)
-  * periodically. The interval between each register call is given as second parameter.
-  * It should be 10 minutes by default (= 10*60*1000).
-  *
-  * The delayFirstRegisterMs parameter indicates the delay for the first register call.
-  * If it is 0, the first register call will be after intervalMs milliseconds,
-  * otherwise the server's first register will be after delayFirstRegisterMs.
-  *
-  * When you manually unregister the server, you also need to cancel the
-  * periodic callback, otherwise it will be automatically be registered again.
-  *
-  * If you call this method multiple times for the same discoveryServerUrl, the older
-  * periodic callback will be removed.
-  *
-  * @param server
-  * @param client the client which is used to call the RegisterServer.
-  *         It must not yet be connected and will be connected for every register call
-  *         to the given discoveryServerUrl.
-  * @param discoveryServerUrl where this server should register itself.
-  *        The string will be copied internally. Therefore you can free it after calling this method.
-  * @param intervalMs
-  * @param delayFirstRegisterMs
-  * @param periodicCallbackId */
-UA_StatusCode UA_EXPORT
-UA_Server_addPeriodicServerRegisterCallback(UA_Server *server, struct UA_Client *client,
-                                            const char* discoveryServerUrl,
-                                            UA_Double intervalMs,
-                                            UA_Double delayFirstRegisterMs,
-                                            UA_UInt64 *periodicCallbackId);
-
-/* Callback for RegisterServer. Data is passed from the register call */
-typedef void (*UA_Server_registerServerCallback)(const UA_RegisteredServer *registeredServer,
-                                                 void* data);
-
-/* Set the callback which is called if another server registeres or unregisters
- * with this instance. This callback is called every time the server gets a register
- * call. This especially means that for every periodic server register the callback will
- * be called.
- *
- * @param server
- * @param cb the callback
- * @param data data passed to the callback
- * @return UA_STATUSCODE_SUCCESS on success */
-void UA_EXPORT
-UA_Server_setRegisterServerCallback(UA_Server *server, UA_Server_registerServerCallback cb,
-                                    void* data);
-
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-
-/* Callback for server detected through mDNS. Data is passed from the register
- * call
- *
- * @param isServerAnnounce indicates if the server has just been detected. If
- *        set to false, this means the server is shutting down.
- * @param isTxtReceived indicates if we already received the corresponding TXT
- *        record with the path and caps data */
-typedef void (*UA_Server_serverOnNetworkCallback)(const UA_ServerOnNetwork *serverOnNetwork,
-                                                  UA_Boolean isServerAnnounce,
-                                                  UA_Boolean isTxtReceived, void* data);
-
-/* Set the callback which is called if another server is found through mDNS or
- * deleted. It will be called for any mDNS message from the remote server, thus
- * it may be called multiple times for the same instance. Also the SRV and TXT
- * records may arrive later, therefore for the first call the server
- * capabilities may not be set yet. If called multiple times, previous data will
- * be overwritten.
- *
- * @param server
- * @param cb the callback
- * @param data data passed to the callback
- * @return UA_STATUSCODE_SUCCESS on success */
-void UA_EXPORT
-UA_Server_setServerOnNetworkCallback(UA_Server *server,
-                                     UA_Server_serverOnNetworkCallback cb,
-                                     void* data);
-
-#endif /* UA_ENABLE_DISCOVERY_MULTICAST */
-
-#endif /* UA_ENABLE_DISCOVERY */
-
-/**
- * Information Model Callbacks
- * ---------------------------
- *
- * There are three places where a callback from an information model to
- * user-defined code can happen.
- *
- * - Custom node constructors and destructors
- * - Linking VariableNodes with an external data source
- * - MethodNode callbacks
- *
- * .. _node-lifecycle:
- *
- * Node Lifecycle: Constructors, Destructors and Node Contexts
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- *
- * To finalize the instantiation of a node, a (user-defined) constructor
- * callback is executed. There can be both a global constructor for all nodes
- * and node-type constructor specific to the TypeDefinition of the new node
- * (attached to an ObjectTypeNode or VariableTypeNode).
- *
- * In the hierarchy of ObjectTypes and VariableTypes, only the constructor of
- * the (lowest) type defined for the new node is executed. Note that every
- * Object and Variable can have only one ``isTypeOf`` reference. But type-nodes
- * can technically have several ``hasSubType`` references to implement multiple
- * inheritance. Issues of (multiple) inheritance in the constructor need to be
- * solved by the user.
- *
- * When a node is destroyed, the node-type destructor is called before the
- * global destructor. So the overall node lifecycle is as follows:
- *
- * 1. Global Constructor (set in the server config)
- * 2. Node-Type Constructor (for VariableType or ObjectTypes)
- * 3. (Usage-period of the Node)
- * 4. Node-Type Destructor
- * 5. Global Destructor
- *
- * The constructor and destructor callbacks can be set to ``NULL`` and are not
- * used in that case. If the node-type constructor fails, the global destructor
- * will be called before removing the node. The destructors are assumed to never
- * fail.
- *
- * Every node carries a user-context and a constructor-context pointer. The
- * user-context is used to attach custom data to a node. But the (user-defined)
- * constructors and destructors may replace the user-context pointer if they
- * wish to do so. The initial value for the constructor-context is ``NULL``.
- * When the ``AddNodes`` service is used over the network, the user-context
- * pointer of the new node is also initially set to ``NULL``. */
-
-/* To be set in the server config. */
-typedef struct {
-    /* Can be NULL. May replace the nodeContext */
-    UA_StatusCode (*constructor)(UA_Server *server,
-                                 const UA_NodeId *sessionId, void *sessionContext,
-                                 const UA_NodeId *nodeId, void **nodeContext);
-
-    /* Can be NULL. The context cannot be replaced since the node is destroyed
-     * immediately afterwards anyway. */
-    void (*destructor)(UA_Server *server,
-                       const UA_NodeId *sessionId, void *sessionContext,
-                       const UA_NodeId *nodeId, void *nodeContext);
-
-    /* Can be NULL. Called during recursive node instantiation. While mandatory
-     * child nodes are automatically created if not already present, optional child
-     * nodes are not. This callback can be used to define whether an optional child
-     * node should be created.
-     *
-     * @param server The server executing the callback
-     * @param sessionId The identifier of the session
-     * @param sessionContext Additional data attached to the session in the
-     *        access control layer
-     * @param sourceNodeId Source node from the type definition. If the new node
-     *        shall be created, it will be a copy of this node.
-     * @param targetParentNodeId Parent of the potential new child node
-     * @param referenceTypeId Identifies the reference type which that the parent
-     *        node has to the new node. 
-     * @return Return UA_TRUE if the child node shall be instantiatet, 
-     *         UA_FALSE otherwise. */
-    UA_Boolean (*createOptionalChild)(UA_Server *server,
-                                      const UA_NodeId *sessionId,
-                                      void *sessionContext,
-                                      const UA_NodeId *sourceNodeId,
-                                      const UA_NodeId *targetParentNodeId,
-                                      const UA_NodeId *referenceTypeId);
-
-    /* Can be NULL. Called when a node is to be copied during recursive
-     * node instantiation. Allows definition of the NodeId for the new node.
-     * If the callback is set to NULL or the resulting NodeId is UA_NODEID_NULL,
-     * then a random NodeId will be generated.
-     *
-     * @param server The server executing the callback
-     * @param sessionId The identifier of the session
-     * @param sessionContext Additional data attached to the session in the
-     *        access control layer
-     * @param sourceNodeId Source node of the copy operation
-     * @param targetParentNodeId Parent node of the new node
-     * @param referenceTypeId Identifies the reference type which that the parent
-     *        node has to the new node. */
-    UA_StatusCode (*generateChildNodeId)(UA_Server *server,
-                                         const UA_NodeId *sessionId, void *sessionContext,
-                                         const UA_NodeId *sourceNodeId,
-                                         const UA_NodeId *targetParentNodeId,
-                                         const UA_NodeId *referenceTypeId,
-                                         UA_NodeId *targetNodeId);
-    } UA_GlobalNodeLifecycle;
-
-typedef struct {
-    /* Can be NULL. May replace the nodeContext */
-    UA_StatusCode (*constructor)(UA_Server *server,
-                                 const UA_NodeId *sessionId, void *sessionContext,
-                                 const UA_NodeId *typeNodeId, void *typeNodeContext,
-                                 const UA_NodeId *nodeId, void **nodeContext);
-
-    /* Can be NULL. May replace the nodeContext. */
-    void (*destructor)(UA_Server *server,
-                       const UA_NodeId *sessionId, void *sessionContext,
-                       const UA_NodeId *typeNodeId, void *typeNodeContext,
-                       const UA_NodeId *nodeId, void **nodeContext);
-} UA_NodeTypeLifecycle;
-
-UA_StatusCode UA_EXPORT
-UA_Server_setNodeTypeLifecycle(UA_Server *server, UA_NodeId nodeId,
-                               UA_NodeTypeLifecycle lifecycle);
-
-UA_StatusCode UA_EXPORT
-UA_Server_getNodeContext(UA_Server *server, UA_NodeId nodeId,
-                         void **nodeContext);
-
-/* Careful! The user has to ensure that the destructor callbacks still work. */
-UA_StatusCode UA_EXPORT
-UA_Server_setNodeContext(UA_Server *server, UA_NodeId nodeId,
-                         void *nodeContext);
-
-/**
- * .. _datasource:
- *
- * Data Source Callback
- * ^^^^^^^^^^^^^^^^^^^^
- *
- * The server has a unique way of dealing with the content of variables. Instead
- * of storing a variant attached to the variable node, the node can point to a
- * function with a local data provider. Whenever the value attribute is read,
- * the function will be called and asked to provide a UA_DataValue return value
- * that contains the value content and additional timestamps.
- *
- * It is expected that the read callback is implemented. The write callback can
- * be set to a null-pointer. */
-typedef struct {
-    /* Copies the data from the source into the provided value.
-     *
-     * !! ZERO-COPY OPERATIONS POSSIBLE !!
-     * It is not required to return a copy of the actual content data. You can
-     * return a pointer to memory owned by the user. Memory can be reused
-     * between read callbacks of a DataSource, as the result is already encoded
-     * on the network buffer between each read operation.
-     *
-     * To use zero-copy reads, set the value of the `value->value` Variant
-     * without copying, e.g. with `UA_Variant_setScalar`. Then, also set
-     * `value->value.storageType` to `UA_VARIANT_DATA_NODELETE` to prevent the
-     * memory being cleaned up. Don't forget to also set `value->hasValue` to
-     * true to indicate the presence of a value.
-     *
-     * @param server The server executing the callback
-     * @param sessionId The identifier of the session
-     * @param sessionContext Additional data attached to the session in the
-     *        access control layer
-     * @param nodeId The identifier of the node being read from
-     * @param nodeContext Additional data attached to the node by the user
-     * @param includeSourceTimeStamp If true, then the datasource is expected to
-     *        set the source timestamp in the returned value
-     * @param range If not null, then the datasource shall return only a
-     *        selection of the (nonscalar) data. Set
-     *        UA_STATUSCODE_BADINDEXRANGEINVALID in the value if this does not
-     *        apply
-     * @param value The (non-null) DataValue that is returned to the client. The
-     *        data source sets the read data, the result status and optionally a
-     *        sourcetimestamp.
-     * @return Returns a status code for logging. Error codes intended for the
-     *         original caller are set in the value. If an error is returned,
-     *         then no releasing of the value is done
-     */
-    UA_StatusCode (*read)(UA_Server *server, const UA_NodeId *sessionId,
-                          void *sessionContext, const UA_NodeId *nodeId,
-                          void *nodeContext, UA_Boolean includeSourceTimeStamp,
-                          const UA_NumericRange *range, UA_DataValue *value);
-
-    /* Write into a data source. This method pointer can be NULL if the
-     * operation is unsupported.
-     *
-     * @param server The server executing the callback
-     * @param sessionId The identifier of the session
-     * @param sessionContext Additional data attached to the session in the
-     *        access control layer
-     * @param nodeId The identifier of the node being written to
-     * @param nodeContext Additional data attached to the node by the user
-     * @param range If not NULL, then the datasource shall return only a
-     *        selection of the (nonscalar) data. Set
-     *        UA_STATUSCODE_BADINDEXRANGEINVALID in the value if this does not
-     *        apply
-     * @param value The (non-NULL) DataValue that has been written by the client.
-     *        The data source contains the written data, the result status and
-     *        optionally a sourcetimestamp
-     * @return Returns a status code for logging. Error codes intended for the
-     *         original caller are set in the value. If an error is returned,
-     *         then no releasing of the value is done
-     */
-    UA_StatusCode (*write)(UA_Server *server, const UA_NodeId *sessionId,
-                           void *sessionContext, const UA_NodeId *nodeId,
-                           void *nodeContext, const UA_NumericRange *range,
-                           const UA_DataValue *value);
-} UA_DataSource;
-
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_setVariableNode_dataSource(UA_Server *server, const UA_NodeId nodeId,
-                                     const UA_DataSource dataSource);
-
-/**
- * .. _value-callback:
- *
- * Value Callback
- * ^^^^^^^^^^^^^^
- * Value Callbacks can be attached to variable and variable type nodes. If
- * not ``NULL``, they are called before reading and after writing respectively. */
-typedef struct {
-    /* Called before the value attribute is read. It is possible to write into the
-     * value attribute during onRead (using the write service). The node is
-     * re-opened afterwards so that changes are considered in the following read
-     * operation.
-     *
-     * @param handle Points to user-provided data for the callback.
-     * @param nodeid The identifier of the node.
-     * @param data Points to the current node value.
-     * @param range Points to the numeric range the client wants to read from
-     *        (or NULL). */
-    void (*onRead)(UA_Server *server, const UA_NodeId *sessionId,
-                   void *sessionContext, const UA_NodeId *nodeid,
-                   void *nodeContext, const UA_NumericRange *range,
-                   const UA_DataValue *value);
-
-    /* Called after writing the value attribute. The node is re-opened after
-     * writing so that the new value is visible in the callback.
-     *
-     * @param server The server executing the callback
-     * @sessionId The identifier of the session
-     * @sessionContext Additional data attached to the session
-     *                 in the access control layer
-     * @param nodeid The identifier of the node.
-     * @param nodeUserContext Additional data attached to the node by
-     *        the user.
-     * @param nodeConstructorContext Additional data attached to the node
-     *        by the type constructor(s).
-     * @param range Points to the numeric range the client wants to write to (or
-     *        NULL). */
-    void (*onWrite)(UA_Server *server, const UA_NodeId *sessionId,
-                    void *sessionContext, const UA_NodeId *nodeId,
-                    void *nodeContext, const UA_NumericRange *range,
-                    const UA_DataValue *data);
-} UA_ValueCallback;
-
-UA_StatusCode UA_EXPORT
-UA_Server_setVariableNode_valueCallback(UA_Server *server,
-                                        const UA_NodeId nodeId,
-                                        const UA_ValueCallback callback);
-
-/**
- * .. _local-monitoreditems:
- *
- * Local MonitoredItems
- * ^^^^^^^^^^^^^^^^^^^^
- *
- * MonitoredItems are used with the Subscription mechanism of OPC UA to
- * transported notifications for data changes and events. MonitoredItems can
- * also be registered locally. Notifications are then forwarded to a
- * user-defined callback instead of a remote client. */
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-
-typedef void (*UA_Server_DataChangeNotificationCallback)
-    (UA_Server *server, UA_UInt32 monitoredItemId, void *monitoredItemContext,
-     const UA_NodeId *nodeId, void *nodeContext, UA_UInt32 attributeId,
-     const UA_DataValue *value);
-
-typedef void (*UA_Server_EventNotificationCallback)
-    (UA_Server *server, UA_UInt32 monId, void *monContext,
-     size_t nEventFields, const UA_Variant *eventFields);
-
-/* Create a local MonitoredItem with a sampling interval that detects data
- * changes.
- *
- * @param server The server executing the MonitoredItem
- * @timestampsToReturn Shall timestamps be added to the value for the callback?
- * @item The parameters of the new MonitoredItem. Note that the attribute of the
- *       ReadValueId (the node that is monitored) can not be
- *       ``UA_ATTRIBUTEID_EVENTNOTIFIER``. A different callback type needs to be
- *       registered for event notifications.
- * @monitoredItemContext A pointer that is forwarded with the callback
- * @callback The callback that is executed on detected data changes
- *
- * @return Returns a description of the created MonitoredItem. The structure
- * also contains a StatusCode (in case of an error) and the identifier of the
- * new MonitoredItem. */
-UA_MonitoredItemCreateResult UA_EXPORT UA_THREADSAFE
-UA_Server_createDataChangeMonitoredItem(UA_Server *server,
-          UA_TimestampsToReturn timestampsToReturn,
-          const UA_MonitoredItemCreateRequest item,
-          void *monitoredItemContext,
-          UA_Server_DataChangeNotificationCallback callback);
-
-/* UA_MonitoredItemCreateResult UA_EXPORT */
-/* UA_Server_createEventMonitoredItem(UA_Server *server, */
-/*           UA_TimestampsToReturn timestampsToReturn, */
-/*           const UA_MonitoredItemCreateRequest item, void *context, */
-/*           UA_Server_EventNotificationCallback callback); */
-
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_deleteMonitoredItem(UA_Server *server, UA_UInt32 monitoredItemId);
-
-#endif
-
-/**
- * Method Callbacks
- * ^^^^^^^^^^^^^^^^
- * Method callbacks are set to `NULL` (not executable) when a method node is
- * added over the network. In theory, it is possible to add a callback via
- * ``UA_Server_setMethodNode_callback`` within the global constructor when
- * adding methods over the network is really wanted. See the Section
- * :ref:`object-interaction` for calling methods on an object. */
-
-typedef UA_StatusCode
-(*UA_MethodCallback)(UA_Server *server, const UA_NodeId *sessionId,
-                     void *sessionContext, const UA_NodeId *methodId,
-                     void *methodContext, const UA_NodeId *objectId,
-                     void *objectContext, size_t inputSize,
-                     const UA_Variant *input, size_t outputSize,
-                     UA_Variant *output);
-
-#ifdef UA_ENABLE_METHODCALLS
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_setMethodNode_callback(UA_Server *server,
-                                 const UA_NodeId methodNodeId,
-                                 UA_MethodCallback methodCallback);
-#endif
-
-/**
- * .. _object-interaction:
- *
- * Interacting with Objects
- * ------------------------
- * Objects in the information model are represented as ObjectNodes. Some
- * convenience functions are provided to simplify the interaction with objects.
- */
-
-/* Write an object property. The property is represented as a VariableNode with
- * a ``HasProperty`` reference from the ObjectNode. The VariableNode is
- * identified by its BrowseName. Writing the property sets the value attribute
- * of the VariableNode.
- *
- * @param server The server object
- * @param objectId The identifier of the object (node)
- * @param propertyName The name of the property
- * @param value The value to be set for the event attribute
- * @return The StatusCode for setting the event attribute */
-UA_StatusCode UA_EXPORT
-UA_Server_writeObjectProperty(UA_Server *server, const UA_NodeId objectId,
-                              const UA_QualifiedName propertyName,
-                              const UA_Variant value);
-
-/* Directly point to the scalar value instead of a variant */
-UA_StatusCode UA_EXPORT
-UA_Server_writeObjectProperty_scalar(UA_Server *server, const UA_NodeId objectId,
-                                     const UA_QualifiedName propertyName,
-                                     const void *value, const UA_DataType *type);
-
-/* Read an object property.
- *
- * @param server The server object
- * @param objectId The identifier of the object (node)
- * @param propertyName The name of the property
- * @param value Contains the property value after reading. Must not be NULL.
- * @return The StatusCode for setting the event attribute */
-UA_StatusCode UA_EXPORT
-UA_Server_readObjectProperty(UA_Server *server, const UA_NodeId objectId,
-                             const UA_QualifiedName propertyName,
-                             UA_Variant *value);
-
-#ifdef UA_ENABLE_METHODCALLS
-UA_CallMethodResult UA_EXPORT UA_THREADSAFE
-UA_Server_call(UA_Server *server, const UA_CallMethodRequest *request);
-#endif
-
-/**
- * .. _addnodes:
- *
- * Node Addition and Deletion
- * --------------------------
- * When creating dynamic node instances at runtime, chances are that you will
- * not care about the specific NodeId of the new node, as long as you can
- * reference it later. When passing numeric NodeIds with a numeric identifier 0,
- * the stack evaluates this as "select a random unassigned numeric NodeId in
- * that namespace". To find out which NodeId was actually assigned to the new
- * node, you may pass a pointer `outNewNodeId`, which will (after a successful
- * node insertion) contain the nodeId of the new node. You may also pass a
- * ``NULL`` pointer if this result is not needed.
- *
- * See the Section :ref:`node-lifecycle` on constructors and on attaching
- * user-defined data to nodes.
- *
- * The methods for node addition and deletion take mostly const arguments that
- * are not modified. When creating a node, a deep copy of the node identifier,
- * node attributes, etc. is created. Therefore, it is possible to call for
- * example ``UA_Server_addVariablenode`` with a value attribute (a
- * :ref:`variant`) pointing to a memory location on the stack. If you need
- * changes to a variable value to manifest at a specific memory location, please
- * use a :ref:`datasource` or a :ref:`value-callback`. */
-
-/* Protect against redundant definitions for server/client */
-#ifndef UA_DEFAULT_ATTRIBUTES_DEFINED
-#define UA_DEFAULT_ATTRIBUTES_DEFINED
-/* The default for variables is "BaseDataType" for the datatype, -2 for the
- * valuerank and a read-accesslevel. */
-UA_EXPORT extern const UA_VariableAttributes UA_VariableAttributes_default;
-UA_EXPORT extern const UA_VariableTypeAttributes UA_VariableTypeAttributes_default;
-/* Methods are executable by default */
-UA_EXPORT extern const UA_MethodAttributes UA_MethodAttributes_default;
-/* The remaining attribute definitions are currently all zeroed out */
-UA_EXPORT extern const UA_ObjectAttributes UA_ObjectAttributes_default;
-UA_EXPORT extern const UA_ObjectTypeAttributes UA_ObjectTypeAttributes_default;
-UA_EXPORT extern const UA_ReferenceTypeAttributes UA_ReferenceTypeAttributes_default;
-UA_EXPORT extern const UA_DataTypeAttributes UA_DataTypeAttributes_default;
-UA_EXPORT extern const UA_ViewAttributes UA_ViewAttributes_default;
-#endif
-
-/* Don't use this function. There are typed versions as inline functions. */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-__UA_Server_addNode(UA_Server *server, const UA_NodeClass nodeClass,
-                    const UA_NodeId *requestedNewNodeId,
-                    const UA_NodeId *parentNodeId,
-                    const UA_NodeId *referenceTypeId,
-                    const UA_QualifiedName browseName,
-                    const UA_NodeId *typeDefinition,
-                    const UA_NodeAttributes *attr,
-                    const UA_DataType *attributeType,
-                    void *nodeContext, UA_NodeId *outNewNodeId);
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_addVariableNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
-                          const UA_NodeId parentNodeId,
-                          const UA_NodeId referenceTypeId,
-                          const UA_QualifiedName browseName,
-                          const UA_NodeId typeDefinition,
-                          const UA_VariableAttributes attr,
-                          void *nodeContext, UA_NodeId *outNewNodeId) {
-    return __UA_Server_addNode(server, UA_NODECLASS_VARIABLE, &requestedNewNodeId,
-                               &parentNodeId, &referenceTypeId, browseName,
-                               &typeDefinition, (const UA_NodeAttributes*)&attr,
-                               &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES],
-                               nodeContext, outNewNodeId);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_addVariableTypeNode(UA_Server *server,
-                              const UA_NodeId requestedNewNodeId,
-                              const UA_NodeId parentNodeId,
-                              const UA_NodeId referenceTypeId,
-                              const UA_QualifiedName browseName,
-                              const UA_NodeId typeDefinition,
-                              const UA_VariableTypeAttributes attr,
-                              void *nodeContext, UA_NodeId *outNewNodeId) {
-    return __UA_Server_addNode(server, UA_NODECLASS_VARIABLETYPE,
-                               &requestedNewNodeId, &parentNodeId, &referenceTypeId,
-                               browseName, &typeDefinition,
-                               (const UA_NodeAttributes*)&attr,
-                               &UA_TYPES[UA_TYPES_VARIABLETYPEATTRIBUTES],
-                               nodeContext, outNewNodeId);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_addObjectNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
-                        const UA_NodeId parentNodeId,
-                        const UA_NodeId referenceTypeId,
-                        const UA_QualifiedName browseName,
-                        const UA_NodeId typeDefinition,
-                        const UA_ObjectAttributes attr,
-                        void *nodeContext, UA_NodeId *outNewNodeId) {
-    return __UA_Server_addNode(server, UA_NODECLASS_OBJECT, &requestedNewNodeId,
-                               &parentNodeId, &referenceTypeId, browseName,
-                               &typeDefinition, (const UA_NodeAttributes*)&attr,
-                               &UA_TYPES[UA_TYPES_OBJECTATTRIBUTES],
-                               nodeContext, outNewNodeId);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_addObjectTypeNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
-                            const UA_NodeId parentNodeId,
-                            const UA_NodeId referenceTypeId,
-                            const UA_QualifiedName browseName,
-                            const UA_ObjectTypeAttributes attr,
-                            void *nodeContext, UA_NodeId *outNewNodeId) {
-    return __UA_Server_addNode(server, UA_NODECLASS_OBJECTTYPE, &requestedNewNodeId,
-                               &parentNodeId, &referenceTypeId, browseName,
-                               &UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
-                               &UA_TYPES[UA_TYPES_OBJECTTYPEATTRIBUTES],
-                               nodeContext, outNewNodeId);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_addViewNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
-                      const UA_NodeId parentNodeId,
-                      const UA_NodeId referenceTypeId,
-                      const UA_QualifiedName browseName,
-                      const UA_ViewAttributes attr,
-                      void *nodeContext, UA_NodeId *outNewNodeId) {
-    return __UA_Server_addNode(server, UA_NODECLASS_VIEW, &requestedNewNodeId,
-                               &parentNodeId, &referenceTypeId, browseName,
-                               &UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
-                               &UA_TYPES[UA_TYPES_VIEWATTRIBUTES],
-                               nodeContext, outNewNodeId);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_addReferenceTypeNode(UA_Server *server,
-                               const UA_NodeId requestedNewNodeId,
-                               const UA_NodeId parentNodeId,
-                               const UA_NodeId referenceTypeId,
-                               const UA_QualifiedName browseName,
-                               const UA_ReferenceTypeAttributes attr,
-                               void *nodeContext, UA_NodeId *outNewNodeId) {
-    return __UA_Server_addNode(server, UA_NODECLASS_REFERENCETYPE,
-                               &requestedNewNodeId, &parentNodeId, &referenceTypeId,
-                               browseName, &UA_NODEID_NULL,
-                               (const UA_NodeAttributes*)&attr,
-                               &UA_TYPES[UA_TYPES_REFERENCETYPEATTRIBUTES],
-                               nodeContext, outNewNodeId);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_addDataTypeNode(UA_Server *server,
-                          const UA_NodeId requestedNewNodeId,
-                          const UA_NodeId parentNodeId,
-                          const UA_NodeId referenceTypeId,
-                          const UA_QualifiedName browseName,
-                          const UA_DataTypeAttributes attr,
-                          void *nodeContext, UA_NodeId *outNewNodeId) {
-    return __UA_Server_addNode(server, UA_NODECLASS_DATATYPE, &requestedNewNodeId,
-                               &parentNodeId, &referenceTypeId, browseName,
-                               &UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
-                               &UA_TYPES[UA_TYPES_DATATYPEATTRIBUTES],
-                               nodeContext, outNewNodeId);
-}
-
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_addDataSourceVariableNode(UA_Server *server,
-                                    const UA_NodeId requestedNewNodeId,
-                                    const UA_NodeId parentNodeId,
-                                    const UA_NodeId referenceTypeId,
-                                    const UA_QualifiedName browseName,
-                                    const UA_NodeId typeDefinition,
-                                    const UA_VariableAttributes attr,
-                                    const UA_DataSource dataSource,
-                                    void *nodeContext, UA_NodeId *outNewNodeId);
-
-#ifdef UA_ENABLE_METHODCALLS
-
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_addMethodNodeEx(UA_Server *server, const UA_NodeId requestedNewNodeId,
-                          const UA_NodeId parentNodeId,
-                          const UA_NodeId referenceTypeId,
-                          const UA_QualifiedName browseName,
-                          const UA_MethodAttributes attr, UA_MethodCallback method,
-                          size_t inputArgumentsSize, const UA_Argument *inputArguments,
-                          const UA_NodeId inputArgumentsRequestedNewNodeId,
-                          UA_NodeId *inputArgumentsOutNewNodeId,
-                          size_t outputArgumentsSize, const UA_Argument *outputArguments,
-                          const UA_NodeId outputArgumentsRequestedNewNodeId,
-                          UA_NodeId *outputArgumentsOutNewNodeId,
-                          void *nodeContext, UA_NodeId *outNewNodeId);
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_addMethodNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
-                        const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId,
-                        const UA_QualifiedName browseName, const UA_MethodAttributes attr,
-                        UA_MethodCallback method,
-                        size_t inputArgumentsSize, const UA_Argument *inputArguments,
-                        size_t outputArgumentsSize, const UA_Argument *outputArguments,
-                        void *nodeContext, UA_NodeId *outNewNodeId) {
-    return UA_Server_addMethodNodeEx(server, requestedNewNodeId,  parentNodeId,
-                                     referenceTypeId, browseName, attr, method,
-                                     inputArgumentsSize, inputArguments, UA_NODEID_NULL, NULL,
-                                     outputArgumentsSize, outputArguments, UA_NODEID_NULL, NULL,
-                                     nodeContext, outNewNodeId);
-}
-
-#endif
-
-
-/**
- * The method pair UA_Server_addNode_begin and _finish splits the AddNodes
- * service in two parts. This is useful if the node shall be modified before
- * finish the instantiation. For example to add children with specific NodeIds.
- * Otherwise, mandatory children (e.g. of an ObjectType) are added with
- * pseudo-random unique NodeIds. Existing children are detected during the
- * _finish part via their matching BrowseName.
- *
- * The _begin method:
- *  - prepares the node and adds it to the nodestore
- *  - copies some unassigned attributes from the TypeDefinition node internally
- *  - adds the references to the parent (and the TypeDefinition if applicable)
- *  - performs type-checking of variables.
- *
- * You can add an object node without a parent if you set the parentNodeId and
- * referenceTypeId to UA_NODE_ID_NULL. Then you need to add the parent reference
- * and hasTypeDef reference yourself before calling the _finish method.
- * Not that this is only allowed for object nodes.
- *
- * The _finish method:
- *  - copies mandatory children
- *  - calls the node constructor(s) at the end
- *  - may remove the node if it encounters an error.
- *
- * The special UA_Server_addMethodNode_finish method needs to be used for
- * method nodes, since there you need to explicitly specifiy the input
- * and output arguments which are added in the finish step (if not yet already there)
- **/
-
-/* The ``attr`` argument must have a type according to the NodeClass.
- * ``VariableAttributes`` for variables, ``ObjectAttributes`` for objects, and
- * so on. Missing attributes are taken from the TypeDefinition node if
- * applicable. */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_addNode_begin(UA_Server *server, const UA_NodeClass nodeClass,
-                        const UA_NodeId requestedNewNodeId,
-                        const UA_NodeId parentNodeId,
-                        const UA_NodeId referenceTypeId,
-                        const UA_QualifiedName browseName,
-                        const UA_NodeId typeDefinition,
-                        const void *attr, const UA_DataType *attributeType,
-                        void *nodeContext, UA_NodeId *outNewNodeId);
-
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_addNode_finish(UA_Server *server, const UA_NodeId nodeId);
-
-#ifdef UA_ENABLE_METHODCALLS
-
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_addMethodNode_finish(UA_Server *server, const UA_NodeId nodeId,
-                         UA_MethodCallback method,
-                         size_t inputArgumentsSize, const UA_Argument* inputArguments,
-                         size_t outputArgumentsSize, const UA_Argument* outputArguments);
-
-#endif
-
-/* Deletes a node and optionally all references leading to the node. */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_deleteNode(UA_Server *server, const UA_NodeId nodeId,
-                     UA_Boolean deleteReferences);
-
-/**
- * Reference Management
- * -------------------- */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_addReference(UA_Server *server, const UA_NodeId sourceId,
-                       const UA_NodeId refTypeId,
-                       const UA_ExpandedNodeId targetId, UA_Boolean isForward);
-
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_deleteReference(UA_Server *server, const UA_NodeId sourceNodeId,
-                          const UA_NodeId referenceTypeId, UA_Boolean isForward,
-                          const UA_ExpandedNodeId targetNodeId,
-                          UA_Boolean deleteBidirectional);
-
-/**
- * .. _events:
- *
- * Events
- * ------
- * The method ``UA_Server_createEvent`` creates an event and represents it as node. The node receives a unique `EventId`
- * which is automatically added to the node.
- * The method returns a `NodeId` to the object node which represents the event through ``outNodeId``. The `NodeId` can
- * be used to set the attributes of the event. The generated `NodeId` is always numeric. ``outNodeId`` cannot be
- * ``NULL``.
- *
- * Note: In order to see an event in UAExpert, the field `Time` must be given a value!
- *
- * The method ``UA_Server_triggerEvent`` "triggers" an event by adding it to all monitored items of the specified
- * origin node and those of all its parents. Any filters specified by the monitored items are automatically applied.
- * Using this method deletes the node generated by ``UA_Server_createEvent``. The `EventId` for the new event is
- * generated automatically and is returned through ``outEventId``. ``NULL`` can be passed if the `EventId` is not
- * needed. ``deleteEventNode`` specifies whether the node representation of the event should be deleted after invoking
- * the method. This can be useful if events with the similar attributes are triggered frequently. ``UA_TRUE`` would
- * cause the node to be deleted. */
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-
-/* The EventQueueOverflowEventType is defined as abstract, therefore we can not
- * create an instance of that type directly, but need to create a subtype. The
- * following is an arbitrary number which shall refer to our internal overflow
- * type. This is already posted on the OPC Foundation bug tracker under the
- * following link for clarification:
- * https://opcfoundation-onlineapplications.org/mantis/view.php?id=4206 */
-# define UA_NS0ID_SIMPLEOVERFLOWEVENTTYPE 4035
-
-/* Creates a node representation of an event
- *
- * @param server The server object
- * @param eventType The type of the event for which a node should be created
- * @param outNodeId The NodeId of the newly created node for the event
- * @return The StatusCode of the UA_Server_createEvent method */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_createEvent(UA_Server *server, const UA_NodeId eventType,
-                      UA_NodeId *outNodeId);
-
-/* Triggers a node representation of an event by applying EventFilters and
-   adding the event to the appropriate queues.
- * @param server The server object
- * @param eventNodeId The NodeId of the node representation of the event which should be triggered
- * @param outEvent the EventId of the new event
- * @param deleteEventNode Specifies whether the node representation of the event should be deleted
- * @return The StatusCode of the UA_Server_triggerEvent method */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_triggerEvent(UA_Server *server, const UA_NodeId eventNodeId, const UA_NodeId originId,
-                       UA_ByteString *outEventId, const UA_Boolean deleteEventNode);
-
-#endif /* UA_ENABLE_SUBSCRIPTIONS_EVENTS */
-
-UA_StatusCode UA_EXPORT
-UA_Server_updateCertificate(UA_Server *server,
-                            const UA_ByteString *oldCertificate,
-                            const UA_ByteString *newCertificate,
-                            const UA_ByteString *newPrivateKey,
-                            UA_Boolean closeSessions,
-                            UA_Boolean closeSecureChannels);
-
-/**
- * Utility Functions
- * ----------------- */
-/* Add a new namespace to the server. Returns the index of the new namespace */
-UA_UInt16 UA_EXPORT UA_Server_addNamespace(UA_Server *server, const char* name);
-
-/* Get namespace by name from the server. */
-UA_StatusCode UA_EXPORT
-UA_Server_getNamespaceByName(UA_Server *server, const UA_String namespaceUri,
-                             size_t* foundIndex);
-
-#ifdef UA_ENABLE_HISTORIZING
-UA_Boolean UA_EXPORT
-UA_Server_AccessControl_allowHistoryUpdateUpdateData(UA_Server *server,
-                                                     const UA_NodeId *sessionId, void *sessionContext,
-                                                     const UA_NodeId *nodeId,
-                                                     UA_PerformUpdateType performInsertReplace,
-                                                     const UA_DataValue *value);
-
-UA_Boolean UA_EXPORT
-UA_Server_AccessControl_allowHistoryUpdateDeleteRawModified(UA_Server *server,
-                                                            const UA_NodeId *sessionId, void *sessionContext,
-                                                            const UA_NodeId *nodeId,
-                                                            UA_DateTime startTimestamp,
-                                                            UA_DateTime endTimestamp,
-                                                            bool isDeleteModified);
-#endif // UA_ENABLE_HISTORIZING
-
-_UA_END_DECLS
-
-#endif /* UA_SERVER_H_ */
diff --git a/ext/open62541/include/open62541/server_config.h b/ext/open62541/include/open62541/server_config.h
deleted file mode 100644
index 4d27769..0000000
--- a/ext/open62541/include/open62541/server_config.h
+++ /dev/null
@@ -1,253 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Henrik Norrman
- *    Copyright 2018 (c) Fabian Arndt, Root-Core
- */
-
-#ifndef UA_SERVER_CONFIG_H_
-#define UA_SERVER_CONFIG_H_
-
-#include <open62541/plugin/accesscontrol.h>
-#include <open62541/plugin/log.h>
-#include <open62541/plugin/network.h>
-#include <open62541/plugin/pki.h>
-#include <open62541/plugin/securitypolicy.h>
-#include <open62541/server.h>
-
-#ifdef UA_ENABLE_PUBSUB
-#include <open62541/plugin/pubsub.h>
-#endif
-
-#ifdef UA_ENABLE_HISTORIZING
-#include <open62541/plugin/historydatabase.h>
-#endif
-
-_UA_BEGIN_DECLS
-
-/**
- * .. _server-configuration:
- *
- * Server Configuration
- * --------------------
-
- * The configuration structure is passed to the server during initialization.
- * The server expects that the configuration is not modified during runtime.
- * Currently, only one server can use a configuration at a time. During
- * shutdown, the server will clean up the parts of the configuration that are
- * modified at runtime through the provided API.
- *
- * Examples for configurations are provided in the ``/plugins`` folder.
- * The usual usage is as follows:
- *
- * 1. Create a server configuration with default settings as a starting point
- * 2. Modifiy the configuration, e.g. by adding a server certificate
- * 3. Instantiate a server with it
- * 4. After shutdown of the server, clean up the configuration (free memory)
- *
- * The :ref:`tutorials` provide a good starting point for this. */
-
-typedef struct {
-    UA_UInt32 min;
-    UA_UInt32 max;
-} UA_UInt32Range;
-
-typedef struct {
-    UA_Duration min;
-    UA_Duration max;
-} UA_DurationRange;
-
-#ifdef UA_ENABLE_DISCOVERY
-typedef struct {
-
-    /* Timeout in seconds when to automatically remove a registered server from
-     * the list, if it doesn't re-register within the given time frame. A value
-     * of 0 disables automatic removal. Default is 60 Minutes (60*60). Must be
-     * bigger than 10 seconds, because cleanup is only triggered approximately
-     * every 10 seconds. The server will still be removed depending on the
-     * state of the semaphore file. */
-    UA_UInt32 cleanupTimeout;
-
-    /* Enable mDNS announce and response to queries */
-    bool mdnsEnable;
-
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-    UA_MdnsDiscoveryConfiguration mdns;
-    UA_String mdnsInterfaceIP;
-#endif
-
-} UA_ServerConfig_Discovery;
-
-#endif
-
-struct UA_ServerConfig {
-    UA_UInt16 nThreads; /* only if multithreading is enabled */
-    UA_Logger logger;
-
-    /* Server Description */
-    UA_BuildInfo buildInfo;
-    UA_ApplicationDescription applicationDescription;
-    UA_ByteString serverCertificate;
-
-    UA_Double shutdownDelay; /* Delay in ms from the shutdown signal (ctrl-c)
-                                until the actual shutdown. Clients need to be
-                                able to get a notification ahead of time. */
-
-    /* Rule Handling */
-    UA_RuleHandling verifyRequestTimestamp; /* Verify that the server sends a
-                                             * timestamp in the request header */
-
-    /* Custom DataTypes. Attention! Custom datatypes are not cleaned up together
-     * with the configuration. So it is possible to allocate them on ROM. */
-    const UA_DataTypeArray *customDataTypes;
-
-    /**
-     * .. note:: See the section on :ref:`generic-types`. Examples for working
-     *    with custom data types are provided in
-     *    ``/examples/custom_datatype/``. */
-
-    /* Networking */
-    size_t networkLayersSize;
-    UA_ServerNetworkLayer *networkLayers;
-    UA_String customHostname;
-
-#ifdef UA_ENABLE_PUBSUB
-    /*PubSub network layer */
-    size_t pubsubTransportLayersSize;
-    UA_PubSubTransportLayer *pubsubTransportLayers;
-#endif
-
-    /* Available security policies */
-    size_t securityPoliciesSize;
-    UA_SecurityPolicy* securityPolicies;
-
-    /* Available endpoints */
-    size_t endpointsSize;
-    UA_EndpointDescription *endpoints;
-
-    /* Node Lifecycle callbacks */
-    UA_GlobalNodeLifecycle nodeLifecycle;
-    /**
-     * .. note:: See the section for :ref:`node lifecycle
-     *    handling<node-lifecycle>`. */
-
-    /* Access Control */
-    UA_AccessControl accessControl;
-    /**
-     * .. note:: See the section for :ref:`access-control
-     *    handling<access-control>`. */
-
-    /* Certificate Verification */
-    UA_CertificateVerification certificateVerification;
-
-    /* Relax constraints for the InformationModel */
-    UA_Boolean relaxEmptyValueConstraint; /* Nominally, only variables with data
-                                           * type BaseDataType can have an empty
-                                           * value. */
-
-    /* Limits for SecureChannels */
-    UA_UInt16 maxSecureChannels;
-    UA_UInt32 maxSecurityTokenLifetime; /* in ms */
-
-    /* Limits for Sessions */
-    UA_UInt16 maxSessions;
-    UA_Double maxSessionTimeout; /* in ms */
-
-    /* Operation limits */
-    UA_UInt32 maxNodesPerRead;
-    UA_UInt32 maxNodesPerWrite;
-    UA_UInt32 maxNodesPerMethodCall;
-    UA_UInt32 maxNodesPerBrowse;
-    UA_UInt32 maxNodesPerRegisterNodes;
-    UA_UInt32 maxNodesPerTranslateBrowsePathsToNodeIds;
-    UA_UInt32 maxNodesPerNodeManagement;
-    UA_UInt32 maxMonitoredItemsPerCall;
-
-    /* Limits for Requests */
-    UA_UInt32 maxReferencesPerNode;
-
-    /* Limits for Subscriptions */
-    UA_UInt32 maxSubscriptions;
-    UA_UInt32 maxSubscriptionsPerSession;
-    UA_DurationRange publishingIntervalLimits; /* in ms (must not be less than 5) */
-    UA_UInt32Range lifeTimeCountLimits;
-    UA_UInt32Range keepAliveCountLimits;
-    UA_UInt32 maxNotificationsPerPublish;
-    UA_Boolean enableRetransmissionQueue;
-    UA_UInt32 maxRetransmissionQueueSize; /* 0 -> unlimited size */
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-    UA_UInt32 maxEventsPerNode; /* 0 -> unlimited size */
-#endif
-
-    /* Limits for MonitoredItems */
-    UA_UInt32 maxMonitoredItems;
-    UA_UInt32 maxMonitoredItemsPerSubscription;
-    UA_DurationRange samplingIntervalLimits; /* in ms (must not be less than 5) */
-    UA_UInt32Range queueSizeLimits; /* Negotiated with the client */
-
-    /* Limits for PublishRequests */
-    UA_UInt32 maxPublishReqPerSession;
-
-    /* Discovery */
-#ifdef UA_ENABLE_DISCOVERY
-    UA_ServerConfig_Discovery discovery;
-#endif
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    /* Register MonitoredItem in Userland
-     *
-     * @param server Allows the access to the server object
-     * @param sessionId The session id, represented as an node id
-     * @param sessionContext An optional pointer to user-defined data for the specific data source
-     * @param nodeid Id of the node in question
-     * @param nodeidContext An optional pointer to user-defined data, associated
-     *        with the node in the nodestore. Note that, if the node has already been removed,
-     *        this value contains a NULL pointer.
-     * @param attributeId Identifies which attribute (value, data type etc.) is monitored
-     * @param removed Determines if the MonitoredItem was removed or created. */
-    void (*monitoredItemRegisterCallback)(UA_Server *server,
-                                          const UA_NodeId *sessionId, void *sessionContext,
-                                          const UA_NodeId *nodeId, void *nodeContext,
-                                          UA_UInt32 attibuteId, UA_Boolean removed);
-#endif
-
-    /* Historical Access */
-#ifdef UA_ENABLE_HISTORIZING
-    UA_HistoryDatabase historyDatabase;
-
-    UA_Boolean accessHistoryDataCapability;
-    UA_UInt32  maxReturnDataValues; /* 0 -> unlimited size */
-
-    UA_Boolean accessHistoryEventsCapability;
-    UA_UInt32  maxReturnEventValues; /* 0 -> unlimited size */
-
-    UA_Boolean insertDataCapability;
-    UA_Boolean insertEventCapability;
-    UA_Boolean insertAnnotationsCapability;
-
-    UA_Boolean replaceDataCapability;
-    UA_Boolean replaceEventCapability;
-
-    UA_Boolean updateDataCapability;
-    UA_Boolean updateEventCapability;
-
-    UA_Boolean deleteRawCapability;
-    UA_Boolean deleteEventCapability;
-    UA_Boolean deleteAtTimeDataCapability;
-#endif
-};
-
-void UA_EXPORT
-UA_ServerConfig_clean(UA_ServerConfig *config);
-
-/* Set a custom hostname in server configuration */
-UA_EXPORT void
-UA_ServerConfig_setCustomHostname(UA_ServerConfig *config,
-                                  const UA_String customHostname);
-
-_UA_END_DECLS
-
-#endif /* UA_SERVER_CONFIG_H_ */
diff --git a/ext/open62541/include/open62541/server_pubsub.h b/ext/open62541/include/open62541/server_pubsub.h
deleted file mode 100644
index b2a5c02..0000000
--- a/ext/open62541/include/open62541/server_pubsub.h
+++ /dev/null
@@ -1,468 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017-2018 Fraunhofer IOSB (Author: Andreas Ebner)
- * Copyright (c) 2019 Kalycito Infotech Private Limited
- */
-
-#ifndef UA_SERVER_PUBSUB_H
-#define UA_SERVER_PUBSUB_H
-
-#include <open62541/server.h>
-
-_UA_BEGIN_DECLS
-
-#ifdef UA_ENABLE_PUBSUB
-
-/**
- * .. _pubsub:
- *
- * Publish/Subscribe
- * =================
- *
- * Work in progress!
- * This part will be a new chapter later.
- *
- * TODO: write general PubSub introduction
- *
- * The Publish/Subscribe (PubSub) extension for OPC UA enables fast and efficient
- * 1:m communication. The PubSub extension is protocol agnostic and can be used
- * with broker based protocols like MQTT and AMQP or brokerless implementations like UDP-Multicasting.
- *
- * The PubSub API uses the following scheme:
- *
- * 1. Create a configuration for the needed PubSub element.
- *
- * 2. Call the add[element] function and pass in the configuration.
- *
- * 3. The add[element] function returns the unique nodeId of the internally created element.
- *
- * Take a look on the PubSub Tutorials for mor details about the API usage.::
- *
- *  +-----------+
- *  | UA_Server |
- *  +-----------+
- *   |    |
- *   |    |
- *   |    |
- *   |    |  +----------------------+
- *   |    +--> UA_PubSubConnection  |  UA_Server_addPubSubConnection
- *   |       +----------------------+
- *   |        |    |
- *   |        |    |    +----------------+
- *   |        |    +----> UA_WriterGroup |  UA_PubSubConnection_addWriterGroup
- *   |        |         +----------------+
- *   |        |              |
- *   |        |              |    +------------------+
- *   |        |              +----> UA_DataSetWriter |  UA_WriterGroup_addDataSetWriter  +-+
- *   |        |                   +------------------+                                     |
- *   |        |                                                                            |
- *   |        |         +----------------+                                                 | r
- *   |        +---------> UA_ReaderGroup |                                                 | e
- *   |                  +----------------+                                                 | f
- *   |                                                                                     |
- *   |       +---------------------------+                                                 |
- *   +-------> UA_PubSubPublishedDataSet |  UA_Server_addPublishedDataSet                <-+
- *           +---------------------------+
- *                 |
- *                 |    +-----------------+
- *                 +----> UA_DataSetField |  UA_PublishedDataSet_addDataSetField
- *                      +-----------------+
- *
- * PubSub compile flags
- * --------------------
- *
- * **UA_ENABLE_PUBSUB**
- *  Enable the experimental OPC UA PubSub support. The option will include the PubSub UDP multicast plugin. Disabled by default.
- * **UA_ENABLE_PUBSUB_DELTAFRAMES**
- *  The PubSub messages differentiate between keyframe (all published values contained) and deltaframe (only changed values contained) messages.
- *  Deltaframe messages creation consumes some additional ressources and can be disabled with this flag. Disabled by default.
- *  Compile the human-readable name of the StatusCodes into the binary. Disabled by default.
- * **UA_ENABLE_PUBSUB_INFORMATIONMODEL**
- *  Enable the information model representation of the PubSub configuration. For more details take a look at the following section `PubSub Information Model Representation`. Disabled by default.
- *
- * PubSub Information Model Representation
- * ---------------------------------------
- * .. _pubsub_informationmodel:
- *
- * The complete PubSub configuration is available inside the information model.
- * The entry point is the node 'PublishSubscribe, located under the Server node.
- * The standard defines for PubSub no new Service set. The configuration can optionally
- * done over methods inside the information model. The information model representation
- * of the current PubSub configuration is generated automatically. This feature
- * can enabled/disable by changing the UA_ENABLE_PUBSUB_INFORMATIONMODEL option.
- *
- * Connections
- * -----------
- * The PubSub connections are the abstraction between the concrete transport protocol
- * and the PubSub functionality. It is possible to create multiple connections with
- * different transport protocols at runtime.
- *
- * Take a look on the PubSub Tutorials for mor details about the API usage.
- */
-
-typedef enum {
-    UA_PUBSUB_PUBLISHERID_NUMERIC,
-    UA_PUBSUB_PUBLISHERID_STRING
-} UA_PublisherIdType;
-
-typedef struct {
-    UA_String name;
-    UA_Boolean enabled;
-    UA_PublisherIdType publisherIdType;
-    union { /* std: valid types UInt or String */
-        UA_UInt32 numeric;
-        UA_String string;
-    } publisherId;
-    UA_String transportProfileUri;
-    UA_Variant address;
-    size_t connectionPropertiesSize;
-    UA_KeyValuePair *connectionProperties;
-    UA_Variant connectionTransportSettings;
-} UA_PubSubConnectionConfig;
-
-UA_StatusCode UA_EXPORT
-UA_Server_addPubSubConnection(UA_Server *server,
-                              const UA_PubSubConnectionConfig *connectionConfig,
-                              UA_NodeId *connectionIdentifier);
-
-/* Returns a deep copy of the config */
-UA_StatusCode UA_EXPORT
-UA_Server_getPubSubConnectionConfig(UA_Server *server,
-                                    const UA_NodeId connection,
-                                    UA_PubSubConnectionConfig *config);
-
-/* Remove Connection, identified by the NodeId. Deletion of Connection
- * removes all contained WriterGroups and Writers. */
-UA_StatusCode UA_EXPORT
-UA_Server_removePubSubConnection(UA_Server *server, const UA_NodeId connection);
-
-/**
- * PublishedDataSets
- * -----------------
- * The PublishedDataSets (PDS) are containers for the published information. The
- * PDS contain the published variables and meta informations. The metadata is
- * commonly autogenerated or given as constant argument as part of the template
- * functions. The template functions are standard defined and intended for
- * configuration tools. You should normally create a empty PDS and call the
- * functions to add new fields. */
-
-/* The UA_PUBSUB_DATASET_PUBLISHEDITEMS has currently no additional members and
- * thus no dedicated config structure. */
-
-typedef enum {
-    UA_PUBSUB_DATASET_PUBLISHEDITEMS,
-    UA_PUBSUB_DATASET_PUBLISHEDEVENTS,
-    UA_PUBSUB_DATASET_PUBLISHEDITEMS_TEMPLATE,
-    UA_PUBSUB_DATASET_PUBLISHEDEVENTS_TEMPLATE,
-} UA_PublishedDataSetType;
-
-typedef struct {
-    UA_DataSetMetaDataType metaData;
-    size_t variablesToAddSize;
-    UA_PublishedVariableDataType *variablesToAdd;
-} UA_PublishedDataItemsTemplateConfig;
-
-typedef struct {
-    UA_NodeId eventNotfier;
-    UA_ContentFilter filter;
-} UA_PublishedEventConfig;
-
-typedef struct {
-    UA_DataSetMetaDataType metaData;
-    UA_NodeId eventNotfier;
-    size_t selectedFieldsSize;
-    UA_SimpleAttributeOperand *selectedFields;
-    UA_ContentFilter filter;
-} UA_PublishedEventTemplateConfig;
-
-/* Configuration structure for PublishedDataSet */
-typedef struct {
-    UA_String name;
-    UA_PublishedDataSetType publishedDataSetType;
-    union {
-        /* The UA_PUBSUB_DATASET_PUBLISHEDITEMS has currently no additional members
-         * and thus no dedicated config structure.*/
-        UA_PublishedDataItemsTemplateConfig itemsTemplate;
-        UA_PublishedEventConfig event;
-        UA_PublishedEventTemplateConfig eventTemplate;
-    } config;
-} UA_PublishedDataSetConfig;
-
-void UA_EXPORT
-UA_PublishedDataSetConfig_deleteMembers(UA_PublishedDataSetConfig *pdsConfig);
-
-typedef struct {
-    UA_StatusCode addResult;
-    size_t fieldAddResultsSize;
-    UA_StatusCode *fieldAddResults;
-    UA_ConfigurationVersionDataType configurationVersion;
-} UA_AddPublishedDataSetResult;
-
-UA_AddPublishedDataSetResult UA_EXPORT
-UA_Server_addPublishedDataSet(UA_Server *server,
-                              const UA_PublishedDataSetConfig *publishedDataSetConfig,
-                              UA_NodeId *pdsIdentifier);
-
-/* Returns a deep copy of the config */
-UA_StatusCode UA_EXPORT
-UA_Server_getPublishedDataSetConfig(UA_Server *server, const UA_NodeId pds,
-                                    UA_PublishedDataSetConfig *config);
-
-/* Remove PublishedDataSet, identified by the NodeId. Deletion of PDS removes
- * all contained and linked PDS Fields. Connected WriterGroups will be also
- * removed. */
-UA_StatusCode UA_EXPORT
-UA_Server_removePublishedDataSet(UA_Server *server, const UA_NodeId pds);
-
-/**
- * DataSetFields
- * -------------
- * The description of published variables is named DataSetField. Each
- * DataSetField contains the selection of one information model node. The
- * DataSetField has additional parameters for the publishing, sampling and error
- * handling process. */
-
-typedef struct{
-    UA_ConfigurationVersionDataType configurationVersion;
-    UA_String fieldNameAlias;
-    UA_Boolean promotedField;
-    UA_PublishedVariableDataType publishParameters;
-} UA_DataSetVariableConfig;
-
-typedef enum {
-    UA_PUBSUB_DATASETFIELD_VARIABLE,
-    UA_PUBSUB_DATASETFIELD_EVENT
-} UA_DataSetFieldType;
-
-typedef struct {
-    UA_DataSetFieldType dataSetFieldType;
-    union {
-        /* events need other config later */
-        UA_DataSetVariableConfig variable;
-    } field;
-} UA_DataSetFieldConfig;
-
-void UA_EXPORT
-UA_DataSetFieldConfig_deleteMembers(UA_DataSetFieldConfig *dataSetFieldConfig);
-
-typedef struct {
-    UA_StatusCode result;
-    UA_ConfigurationVersionDataType configurationVersion;
-} UA_DataSetFieldResult;
-
-UA_DataSetFieldResult UA_EXPORT
-UA_Server_addDataSetField(UA_Server *server,
-                          const UA_NodeId publishedDataSet,
-                          const UA_DataSetFieldConfig *fieldConfig,
-                          UA_NodeId *fieldIdentifier);
-
-/* Returns a deep copy of the config */
-UA_StatusCode UA_EXPORT
-UA_Server_getDataSetFieldConfig(UA_Server *server, const UA_NodeId dsf,
-                                UA_DataSetFieldConfig *config);
-
-UA_DataSetFieldResult UA_EXPORT
-UA_Server_removeDataSetField(UA_Server *server, const UA_NodeId dsf);
-
-/**
- * WriterGroup
- * -----------
- * All WriterGroups are created within a PubSubConnection and automatically
- * deleted if the connection is removed. The WriterGroup is primary used as
- * container for :ref:`dsw` and network message settings. The WriterGroup can be
- * imagined as producer of the network messages. The creation of network
- * messages is controlled by parameters like the publish interval, which is e.g.
- * contained in the WriterGroup. */
-
-typedef enum {
-    UA_PUBSUB_ENCODING_BINARY,
-    UA_PUBSUB_ENCODING_JSON,
-    UA_PUBSUB_ENCODING_UADP
-} UA_PubSubEncodingType;
-
-typedef struct {
-    UA_String name;
-    UA_Boolean enabled;
-    UA_UInt16 writerGroupId;
-    UA_Duration publishingInterval;
-    UA_Double keepAliveTime;
-    UA_Byte priority;
-    UA_MessageSecurityMode securityMode;
-    UA_ExtensionObject transportSettings;
-    UA_ExtensionObject messageSettings;
-    size_t groupPropertiesSize;
-    UA_KeyValuePair *groupProperties;
-    UA_PubSubEncodingType encodingMimeType;
-
-    /* non std. config parameter. maximum count of embedded DataSetMessage in
-     * one NetworkMessage */
-    UA_UInt16 maxEncapsulatedDataSetMessageCount;
-} UA_WriterGroupConfig;
-
-void UA_EXPORT
-UA_WriterGroupConfig_deleteMembers(UA_WriterGroupConfig *writerGroupConfig);
-
-/* Add a new WriterGroup to an existing Connection */
-UA_StatusCode UA_EXPORT
-UA_Server_addWriterGroup(UA_Server *server, const UA_NodeId connection,
-                         const UA_WriterGroupConfig *writerGroupConfig,
-                         UA_NodeId *writerGroupIdentifier);
-
-/* Returns a deep copy of the config */
-UA_StatusCode UA_EXPORT
-UA_Server_getWriterGroupConfig(UA_Server *server, const UA_NodeId writerGroup,
-                               UA_WriterGroupConfig *config);
-
-UA_StatusCode UA_EXPORT
-UA_Server_updateWriterGroupConfig(UA_Server *server, UA_NodeId writerGroupIdentifier,
-                                  const UA_WriterGroupConfig *config);
-
-UA_StatusCode UA_EXPORT
-UA_Server_removeWriterGroup(UA_Server *server, const UA_NodeId writerGroup);
-
-/**
- * .. _dsw:
- *
- * DataSetWriter
- * -------------
- * The DataSetWriters are the glue between the WriterGroups and the
- * PublishedDataSets. The DataSetWriter contain configuration parameters and
- * flags which influence the creation of DataSet messages. These messages are
- * encapsulated inside the network message. The DataSetWriter must be linked
- * with an existing PublishedDataSet and be contained within a WriterGroup. */
-
-typedef struct {
-    UA_String name;
-    UA_UInt16 dataSetWriterId;
-    UA_DataSetFieldContentMask dataSetFieldContentMask;
-    UA_UInt32 keyFrameCount;
-    UA_ExtensionObject messageSettings;
-    UA_String dataSetName;
-    size_t dataSetWriterPropertiesSize;
-    UA_KeyValuePair *dataSetWriterProperties;
-} UA_DataSetWriterConfig;
-
-void UA_EXPORT
-UA_DataSetWriterConfig_deleteMembers(UA_DataSetWriterConfig *pdsConfig);
-
-/* Add a new DataSetWriter to a existing WriterGroup. The DataSetWriter must be
- * coupled with a PublishedDataSet on creation.
- *
- * Part 14, 7.1.5.2.1 defines: The link between the PublishedDataSet and
- * DataSetWriter shall be created when an instance of the DataSetWriterType is
- * created. */
-UA_StatusCode UA_EXPORT
-UA_Server_addDataSetWriter(UA_Server *server,
-                           const UA_NodeId writerGroup, const UA_NodeId dataSet,
-                           const UA_DataSetWriterConfig *dataSetWriterConfig,
-                           UA_NodeId *writerIdentifier);
-
-/* Returns a deep copy of the config */
-UA_StatusCode UA_EXPORT
-UA_Server_getDataSetWriterConfig(UA_Server *server, const UA_NodeId dsw,
-                                 UA_DataSetWriterConfig *config);
-
-UA_StatusCode UA_EXPORT
-UA_Server_removeDataSetWriter(UA_Server *server, const UA_NodeId dsw);
-
-/**
- * DataSetReader
- * -------------
- * DataSetReader can receive NetworkMessages with the DataSet
- * of interest sent by the Publisher. DataSetReaders represent
- * the configuration necessary to receive and process DataSetMessages
- * on the Subscriber side */
-
-/* Parameters for PubSubSecurity */
-typedef struct {
-    UA_Int32 securityMode;          /* placeholder datatype 'MessageSecurityMode' */
-    UA_String securityGroupId;
-    size_t keyServersSize;
-    UA_Int32 *keyServers;
-} UA_PubSubSecurityParameters;
-
-/* Parameters for PubSub DataSetReader Configuration */
-typedef struct {
-    UA_String name;
-    UA_Variant publisherId;
-    UA_UInt16 writerGroupId;
-    UA_UInt16 dataSetWriterId;
-    UA_DataSetMetaDataType dataSetMetaData;
-    UA_DataSetFieldContentMask dataSetFieldContentMask;
-    UA_Double messageReceiveTimeout;
-    UA_PubSubSecurityParameters securityParameters;
-    UA_UadpDataSetReaderMessageDataType messageSettings;
-    UA_TargetVariablesDataType subscribedDataSetTarget;
-} UA_DataSetReaderConfig;
-
-/* Update configuration to the dataSetReader */
-UA_StatusCode
-UA_Server_DataSetReader_updateConfig(UA_Server *server, UA_NodeId dataSetReaderIdentifier,
-                                   UA_NodeId readerGroupIdentifier, const UA_DataSetReaderConfig *config);
-
-/* Get configuration of the dataSetReader */
-UA_StatusCode
-UA_Server_DataSetReader_getConfig(UA_Server *server, UA_NodeId dataSetReaderIdentifier,
-                                 UA_DataSetReaderConfig *config);
-
-/* Return Status Code after creating TargetVariables in Subscriber AddressSpace
- * TargetVariables define a list of variable mappings between received DataSet fields
- * and the TargetVariables in the Subscriber AddressSpace */
-UA_StatusCode
-UA_Server_DataSetReader_createTargetVariables(UA_Server *server, UA_NodeId dataSetReaderIdentifier,
-                                             UA_TargetVariablesDataType* targetVariables);
-
-/* To Do:Implementation of SubscribedDataSetMirrorType
- * UA_StatusCode
- * A_PubSubDataSetReader_createDataSetMirror(UA_Server *server, UA_NodeId dataSetReaderIdentifier,
- * UA_SubscribedDataSetMirrorDataType* mirror) */
-
-/**
- * ReaderGroup
- * -----------
- * All ReaderGroups are created within a PubSubConnection and automatically
- * deleted if the connection is removed. */
-
-/* ReaderGroup configuration */
-typedef struct {
-    UA_String name;
-    UA_PubSubSecurityParameters securityParameters;
-} UA_ReaderGroupConfig;
-
-/* Add DataSetReader to the ReaderGroup */
-UA_StatusCode
-UA_Server_addDataSetReader(UA_Server *server, UA_NodeId readerGroupIdentifier,
-                                      const UA_DataSetReaderConfig *dataSetReaderConfig,
-                                      UA_NodeId *readerIdentifier);
-
-/* Remove DataSetReader from ReaderGroup */
-UA_StatusCode
-UA_Server_removeDataSetReader(UA_Server *server, UA_NodeId readerIdentifier);
-
-/* To Do: Update Configuration of ReaderGroup */
-UA_StatusCode
-UA_Server_ReaderGroup_updateConfig(UA_Server *server, UA_NodeId readerGroupIdentifier,
-                                  const UA_ReaderGroupConfig *config);
-
-/* Get configuraiton of ReaderGroup */
-UA_StatusCode
-UA_Server_ReaderGroup_getConfig(UA_Server *server, UA_NodeId readerGroupIdentifier,
-                               UA_ReaderGroupConfig *config);
-
-/* Add ReaderGroup to the created connection */
-UA_StatusCode
-UA_Server_addReaderGroup(UA_Server *server, UA_NodeId connectionIdentifier,
-                                   const UA_ReaderGroupConfig *readerGroupConfig,
-                                   UA_NodeId *readerGroupIdentifier);
-
-/* Remove ReaderGroup from connection */
-UA_StatusCode
-UA_Server_removeReaderGroup(UA_Server *server, UA_NodeId groupIdentifier);
-
-#endif /* UA_ENABLE_PUBSUB */
-
-_UA_END_DECLS
-
-#endif /* UA_SERVER_PUBSUB_H */
diff --git a/ext/open62541/include/open62541/types.h b/ext/open62541/include/open62541/types.h
deleted file mode 100644
index 1d40f86..0000000
--- a/ext/open62541/include/open62541/types.h
+++ /dev/null
@@ -1,1020 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2014 (c) Leon Urbas
- *    Copyright 2014, 2016-2017 (c) Florian Palm
- *    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015-2016 (c) Chris Iatrou
- *    Copyright 2015 (c) Nick Goossens
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Thomas Stalder, Blue Time Concept SA
- */
-
-#ifndef UA_TYPES_H_
-#define UA_TYPES_H_
-
-#include <open62541/config.h>
-#include <open62541/constants.h>
-#include <open62541/statuscodes.h>
-
-_UA_BEGIN_DECLS
-
-#define UA_BUILTIN_TYPES_COUNT 25U
-
-/**
- * .. _types:
- *
- * Data Types
- * ==========
- *
- * The OPC UA protocol defines 25 builtin data types and three ways of combining
- * them into higher-order types: arrays, structures and unions. In open62541,
- * only the builtin data types are defined manually. All other data types are
- * generated from standard XML definitions. Their exact definitions can be
- * looked up at https://opcfoundation.org/UA/schemas/Opc.Ua.Types.bsd.
- *
- * For users that are new to open62541, take a look at the :ref:`tutorial for
- * working with data types<types-tutorial>` before diving into the
- * implementation details.
- *
- * Builtin Types
- * -------------
- *
- * Boolean
- * ^^^^^^^
- * A two-state logical value (true or false). */
-typedef bool UA_Boolean;
-#define UA_TRUE true UA_INTERNAL_DEPRECATED
-#define UA_FALSE false UA_INTERNAL_DEPRECATED
-
-/**
- * SByte
- * ^^^^^
- * An integer value between -128 and 127. */
-typedef int8_t UA_SByte;
-#define UA_SBYTE_MIN (-128)
-#define UA_SBYTE_MAX 127
-
-/**
- * Byte
- * ^^^^
- * An integer value between 0 and 255. */
-typedef uint8_t UA_Byte;
-#define UA_BYTE_MIN 0
-#define UA_BYTE_MAX 255
-
-/**
- * Int16
- * ^^^^^
- * An integer value between -32 768 and 32 767. */
-typedef int16_t UA_Int16;
-#define UA_INT16_MIN (-32768)
-#define UA_INT16_MAX 32767
-
-/**
- * UInt16
- * ^^^^^^
- * An integer value between 0 and 65 535. */
-typedef uint16_t UA_UInt16;
-#define UA_UINT16_MIN 0
-#define UA_UINT16_MAX 65535
-
-/**
- * Int32
- * ^^^^^
- * An integer value between -2 147 483 648 and 2 147 483 647. */
-typedef int32_t UA_Int32;
-#define UA_INT32_MIN (-2147483648)
-#define UA_INT32_MAX 2147483647
-
-/**
- * UInt32
- * ^^^^^^
- * An integer value between 0 and 4 294 967 295. */
-typedef uint32_t UA_UInt32;
-#define UA_UINT32_MIN 0
-#define UA_UINT32_MAX 4294967295
-
-/**
- * Int64
- * ^^^^^
- * An integer value between -9 223 372 036 854 775 808 and
- * 9 223 372 036 854 775 807. */
-typedef int64_t UA_Int64;
-#define UA_INT64_MIN ((int64_t)-9223372036854775808)
-#define UA_INT64_MAX (int64_t)9223372036854775807
-
-/**
- * UInt64
- * ^^^^^^
- * An integer value between 0 and 18 446 744 073 709 551 615. */
-typedef uint64_t UA_UInt64;
-#define UA_UINT64_MIN (int64_t)0
-#define UA_UINT64_MAX (int64_t)18446744073709551615
-
-/**
- * Float
- * ^^^^^
- * An IEEE single precision (32 bit) floating point value. */
-typedef float UA_Float;
-
-/**
- * Double
- * ^^^^^^
- * An IEEE double precision (64 bit) floating point value. */
-typedef double UA_Double;
-
-/**
- * .. _statuscode:
- *
- * StatusCode
- * ^^^^^^^^^^
- * A numeric identifier for a error or condition that is associated with a value
- * or an operation. See the section :ref:`statuscodes` for the meaning of a
- * specific code. */
-typedef uint32_t UA_StatusCode;
-
-/* Returns the human-readable name of the StatusCode. If no matching StatusCode
- * is found, a default string for "Unknown" is returned. This feature might be
- * disabled to create a smaller binary with the
- * UA_ENABLE_STATUSCODE_DESCRIPTIONS build-flag. Then the function returns an
- * empty string for every StatusCode. */
-UA_EXPORT const char *
-UA_StatusCode_name(UA_StatusCode code);
-
-/**
- * String
- * ^^^^^^
- * A sequence of Unicode characters. Strings are just an array of UA_Byte. */
-typedef struct {
-    size_t length; /* The length of the string */
-    UA_Byte *data; /* The content (not null-terminated) */
-} UA_String;
-
-/* Copies the content on the heap. Returns a null-string when alloc fails */
-UA_String UA_EXPORT UA_String_fromChars(const char *src) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-UA_Boolean UA_EXPORT UA_String_equal(const UA_String *s1, const UA_String *s2);
-
-UA_EXPORT extern const UA_String UA_STRING_NULL;
-
-/**
- * ``UA_STRING`` returns a string pointing to the original char-array.
- * ``UA_STRING_ALLOC`` is shorthand for ``UA_String_fromChars`` and makes a copy
- * of the char-array. */
-static UA_INLINE UA_String
-UA_STRING(char *chars) {
-    UA_String s; s.length = 0; s.data = NULL;
-    if(!chars)
-        return s;
-    s.length = strlen(chars); s.data = (UA_Byte*)chars; return s;
-}
-
-#define UA_STRING_ALLOC(CHARS) UA_String_fromChars(CHARS)
-
-/* Define strings at compile time (in ROM) */
-#define UA_STRING_STATIC(CHARS) {sizeof(CHARS)-1, (UA_Byte*)CHARS}
-
-/**
- * .. _datetime:
- *
- * DateTime
- * ^^^^^^^^
- * An instance in time. A DateTime value is encoded as a 64-bit signed integer
- * which represents the number of 100 nanosecond intervals since January 1, 1601
- * (UTC).
- *
- * The methods providing an interface to the system clock are provided by a
- * "plugin" that is statically linked with the library. */
-
-typedef int64_t UA_DateTime;
-
-/* Multiples to convert durations to DateTime */
-#define UA_DATETIME_USEC 10LL
-#define UA_DATETIME_MSEC (UA_DATETIME_USEC * 1000LL)
-#define UA_DATETIME_SEC (UA_DATETIME_MSEC * 1000LL)
-
-/* The current time in UTC time */
-UA_DateTime UA_EXPORT UA_DateTime_now(void);
-
-/* Offset between local time and UTC time */
-UA_Int64 UA_EXPORT UA_DateTime_localTimeUtcOffset(void);
-
-/* CPU clock invariant to system time changes. Use only to measure durations,
- * not absolute time. */
-UA_DateTime UA_EXPORT UA_DateTime_nowMonotonic(void);
-
-/* Represents a Datetime as a structure */
-typedef struct UA_DateTimeStruct {
-    UA_UInt16 nanoSec;
-    UA_UInt16 microSec;
-    UA_UInt16 milliSec;
-    UA_UInt16 sec;
-    UA_UInt16 min;
-    UA_UInt16 hour;
-    UA_UInt16 day;
-    UA_UInt16 month;
-    UA_UInt16 year;
-} UA_DateTimeStruct;
-
-UA_DateTimeStruct UA_EXPORT UA_DateTime_toStruct(UA_DateTime t);
-
-/* The C99 standard (7.23.1) says: "The range and precision of times
- * representable in clock_t and time_t are implementation-defined." On most
- * systems, time_t is a 4 or 8 byte integer counting seconds since the UTC Unix
- * epoch. The following methods are used for conversion. */
-
-/* Datetime of 1 Jan 1970 00:00 */
-#define UA_DATETIME_UNIX_EPOCH (11644473600LL * UA_DATETIME_SEC)
-
-static UA_INLINE UA_Int64
-UA_DateTime_toUnixTime(UA_DateTime date) {
-    return (date - UA_DATETIME_UNIX_EPOCH) / UA_DATETIME_SEC;
-}
-
-static UA_INLINE UA_DateTime
-UA_DateTime_fromUnixTime(UA_Int64 unixDate) {
-    return (unixDate * UA_DATETIME_SEC) + UA_DATETIME_UNIX_EPOCH;
-}
-
-/**
- * Guid
- * ^^^^
- * A 16 byte value that can be used as a globally unique identifier. */
-typedef struct {
-    UA_UInt32 data1;
-    UA_UInt16 data2;
-    UA_UInt16 data3;
-    UA_Byte   data4[8];
-} UA_Guid;
-
-UA_Boolean UA_EXPORT UA_Guid_equal(const UA_Guid *g1, const UA_Guid *g2);
-
-UA_EXPORT extern const UA_Guid UA_GUID_NULL;
-
-/**
- * ByteString
- * ^^^^^^^^^^
- * A sequence of octets. */
-typedef UA_String UA_ByteString;
-
-static UA_INLINE UA_Boolean
-UA_ByteString_equal(const UA_ByteString *string1,
-                    const UA_ByteString *string2) {
-    return UA_String_equal((const UA_String*)string1,
-                           (const UA_String*)string2);
-}
-
-/* Allocates memory of size length for the bytestring.
- * The content is not set to zero. */
-UA_StatusCode UA_EXPORT
-UA_ByteString_allocBuffer(UA_ByteString *bs, size_t length);
-
-UA_EXPORT extern const UA_ByteString UA_BYTESTRING_NULL;
-
-static UA_INLINE UA_ByteString
-UA_BYTESTRING(char *chars) {
-    UA_ByteString bs; bs.length = 0; bs.data = NULL;
-    if(!chars)
-        return bs;
-    bs.length = strlen(chars); bs.data = (UA_Byte*)chars; return bs;
-}
-
-static UA_INLINE UA_ByteString
-UA_BYTESTRING_ALLOC(const char *chars) {
-    UA_String str = UA_String_fromChars(chars); UA_ByteString bstr;
-    bstr.length = str.length; bstr.data = str.data; return bstr;
-}
-
-/**
- * XmlElement
- * ^^^^^^^^^^
- * An XML element. */
-typedef UA_String UA_XmlElement;
-
-/**
- * .. _nodeid:
- *
- * NodeId
- * ^^^^^^
- * An identifier for a node in the address space of an OPC UA Server. */
-enum UA_NodeIdType {
-    UA_NODEIDTYPE_NUMERIC    = 0, /* In the binary encoding, this can also
-                                   * become 1 or 2 (two-byte and four-byte
-                                   * encoding of small numeric nodeids) */
-    UA_NODEIDTYPE_STRING     = 3,
-    UA_NODEIDTYPE_GUID       = 4,
-    UA_NODEIDTYPE_BYTESTRING = 5
-};
-
-typedef struct {
-    UA_UInt16 namespaceIndex;
-    enum UA_NodeIdType identifierType;
-    union {
-        UA_UInt32     numeric;
-        UA_String     string;
-        UA_Guid       guid;
-        UA_ByteString byteString;
-    } identifier;
-} UA_NodeId;
-
-UA_EXPORT extern const UA_NodeId UA_NODEID_NULL;
-
-UA_Boolean UA_EXPORT UA_NodeId_isNull(const UA_NodeId *p);
-
-UA_Order UA_EXPORT UA_NodeId_order(const UA_NodeId *n1, const UA_NodeId *n2);
-
-static UA_INLINE UA_Boolean
-UA_NodeId_equal(const UA_NodeId *n1, const UA_NodeId *n2) {
-    return (UA_NodeId_order(n1, n2) == UA_ORDER_EQ);
-}
-
-/* Returns a non-cryptographic hash for the NodeId */
-UA_UInt32 UA_EXPORT UA_NodeId_hash(const UA_NodeId *n);
-
-/** The following functions are shorthand for creating NodeIds. */
-static UA_INLINE UA_NodeId
-UA_NODEID_NUMERIC(UA_UInt16 nsIndex, UA_UInt32 identifier) {
-    UA_NodeId id; id.namespaceIndex = nsIndex;
-    id.identifierType = UA_NODEIDTYPE_NUMERIC;
-    id.identifier.numeric = identifier; return id;
-}
-
-static UA_INLINE UA_NodeId
-UA_NODEID_STRING(UA_UInt16 nsIndex, char *chars) {
-    UA_NodeId id; id.namespaceIndex = nsIndex;
-    id.identifierType = UA_NODEIDTYPE_STRING;
-    id.identifier.string = UA_STRING(chars); return id;
-}
-
-static UA_INLINE UA_NodeId
-UA_NODEID_STRING_ALLOC(UA_UInt16 nsIndex, const char *chars) {
-    UA_NodeId id; id.namespaceIndex = nsIndex;
-    id.identifierType = UA_NODEIDTYPE_STRING;
-    id.identifier.string = UA_STRING_ALLOC(chars); return id;
-}
-
-static UA_INLINE UA_NodeId
-UA_NODEID_GUID(UA_UInt16 nsIndex, UA_Guid guid) {
-    UA_NodeId id; id.namespaceIndex = nsIndex;
-    id.identifierType = UA_NODEIDTYPE_GUID;
-    id.identifier.guid = guid; return id;
-}
-
-static UA_INLINE UA_NodeId
-UA_NODEID_BYTESTRING(UA_UInt16 nsIndex, char *chars) {
-    UA_NodeId id; id.namespaceIndex = nsIndex;
-    id.identifierType = UA_NODEIDTYPE_BYTESTRING;
-    id.identifier.byteString = UA_BYTESTRING(chars); return id;
-}
-
-static UA_INLINE UA_NodeId
-UA_NODEID_BYTESTRING_ALLOC(UA_UInt16 nsIndex, const char *chars) {
-    UA_NodeId id; id.namespaceIndex = nsIndex;
-    id.identifierType = UA_NODEIDTYPE_BYTESTRING;
-    id.identifier.byteString = UA_BYTESTRING_ALLOC(chars); return id;
-}
-
-/**
- * ExpandedNodeId
- * ^^^^^^^^^^^^^^
- * A NodeId that allows the namespace URI to be specified instead of an index. */
-typedef struct {
-    UA_NodeId nodeId;
-    UA_String namespaceUri;
-    UA_UInt32 serverIndex;
-} UA_ExpandedNodeId;
-
-UA_EXPORT extern const UA_ExpandedNodeId UA_EXPANDEDNODEID_NULL;
-
-UA_Order UA_EXPORT
-UA_ExpandedNodeId_order(const UA_ExpandedNodeId *n1, const UA_ExpandedNodeId *n2);
-
-static UA_INLINE UA_Boolean
-UA_ExpandedNodeId_equal(const UA_ExpandedNodeId *n1, const UA_ExpandedNodeId *n2) {
-    return (UA_ExpandedNodeId_order(n1, n2) == UA_ORDER_EQ);
-}
-
-/* Returns a non-cryptographic hash for the NodeId */
-UA_UInt32 UA_EXPORT UA_ExpandedNodeId_hash(const UA_ExpandedNodeId *n);
-
-/** The following functions are shorthand for creating ExpandedNodeIds. */
-static UA_INLINE UA_ExpandedNodeId
-UA_EXPANDEDNODEID_NUMERIC(UA_UInt16 nsIndex, UA_UInt32 identifier) {
-    UA_ExpandedNodeId id; id.nodeId = UA_NODEID_NUMERIC(nsIndex, identifier);
-    id.serverIndex = 0; id.namespaceUri = UA_STRING_NULL; return id;
-}
-
-static UA_INLINE UA_ExpandedNodeId
-UA_EXPANDEDNODEID_STRING(UA_UInt16 nsIndex, char *chars) {
-    UA_ExpandedNodeId id; id.nodeId = UA_NODEID_STRING(nsIndex, chars);
-    id.serverIndex = 0; id.namespaceUri = UA_STRING_NULL; return id;
-}
-
-static UA_INLINE UA_ExpandedNodeId
-UA_EXPANDEDNODEID_STRING_ALLOC(UA_UInt16 nsIndex, const char *chars) {
-    UA_ExpandedNodeId id; id.nodeId = UA_NODEID_STRING_ALLOC(nsIndex, chars);
-    id.serverIndex = 0; id.namespaceUri = UA_STRING_NULL; return id;
-}
-
-static UA_INLINE UA_ExpandedNodeId
-UA_EXPANDEDNODEID_STRING_GUID(UA_UInt16 nsIndex, UA_Guid guid) {
-    UA_ExpandedNodeId id; id.nodeId = UA_NODEID_GUID(nsIndex, guid);
-    id.serverIndex = 0; id.namespaceUri = UA_STRING_NULL; return id;
-}
-
-static UA_INLINE UA_ExpandedNodeId
-UA_EXPANDEDNODEID_BYTESTRING(UA_UInt16 nsIndex, char *chars) {
-    UA_ExpandedNodeId id; id.nodeId = UA_NODEID_BYTESTRING(nsIndex, chars);
-    id.serverIndex = 0; id.namespaceUri = UA_STRING_NULL; return id;
-}
-
-static UA_INLINE UA_ExpandedNodeId
-UA_EXPANDEDNODEID_BYTESTRING_ALLOC(UA_UInt16 nsIndex, const char *chars) {
-    UA_ExpandedNodeId id; id.nodeId = UA_NODEID_BYTESTRING_ALLOC(nsIndex, chars);
-    id.serverIndex = 0; id.namespaceUri = UA_STRING_NULL; return id;
-}
-
-/**
- * .. _qualifiedname:
- *
- * QualifiedName
- * ^^^^^^^^^^^^^
- * A name qualified by a namespace. */
-typedef struct {
-    UA_UInt16 namespaceIndex;
-    UA_String name;
-} UA_QualifiedName;
-
-static UA_INLINE UA_Boolean
-UA_QualifiedName_isNull(const UA_QualifiedName *q) {
-    return (q->namespaceIndex == 0 && q->name.length == 0);
-}
-
-static UA_INLINE UA_QualifiedName
-UA_QUALIFIEDNAME(UA_UInt16 nsIndex, char *chars) {
-    UA_QualifiedName qn; qn.namespaceIndex = nsIndex;
-    qn.name = UA_STRING(chars); return qn;
-}
-
-static UA_INLINE UA_QualifiedName
-UA_QUALIFIEDNAME_ALLOC(UA_UInt16 nsIndex, const char *chars) {
-    UA_QualifiedName qn; qn.namespaceIndex = nsIndex;
-    qn.name = UA_STRING_ALLOC(chars); return qn;
-}
-
-UA_Boolean UA_EXPORT
-UA_QualifiedName_equal(const UA_QualifiedName *qn1,
-                       const UA_QualifiedName *qn2);
-
-/**
- * LocalizedText
- * ^^^^^^^^^^^^^
- * Human readable text with an optional locale identifier. */
-typedef struct {
-    UA_String locale;
-    UA_String text;
-} UA_LocalizedText;
-
-static UA_INLINE UA_LocalizedText
-UA_LOCALIZEDTEXT(char *locale, char *text) {
-    UA_LocalizedText lt; lt.locale = UA_STRING(locale);
-    lt.text = UA_STRING(text); return lt;
-}
-
-static UA_INLINE UA_LocalizedText
-UA_LOCALIZEDTEXT_ALLOC(const char *locale, const char *text) {
-    UA_LocalizedText lt; lt.locale = UA_STRING_ALLOC(locale);
-    lt.text = UA_STRING_ALLOC(text); return lt;
-}
-
-/**
- * .. _numericrange:
- *
- * NumericRange
- * ^^^^^^^^^^^^
- *
- * NumericRanges are used to indicate subsets of a (multidimensional) array.
- * They no official data type in the OPC UA standard and are transmitted only
- * with a string encoding, such as "1:2,0:3,5". The colon separates min/max
- * index and the comma separates dimensions. A single value indicates a range
- * with a single element (min==max). */
-typedef struct {
-    UA_UInt32 min;
-    UA_UInt32 max;
-} UA_NumericRangeDimension;
-
-typedef struct  {
-    size_t dimensionsSize;
-    UA_NumericRangeDimension *dimensions;
-} UA_NumericRange;
-
-UA_StatusCode UA_EXPORT
-UA_NumericRange_parseFromString(UA_NumericRange *range, const UA_String *str);
-
-
-/**
- * .. _variant:
- *
- * Variant
- * ^^^^^^^
- *
- * Variants may contain values of any type together with a description of the
- * content. See the section on :ref:`generic-types` on how types are described.
- * The standard mandates that variants contain built-in data types only. If the
- * value is not of a builtin type, it is wrapped into an :ref:`extensionobject`.
- * open62541 hides this wrapping transparently in the encoding layer. If the
- * data type is unknown to the receiver, the variant contains the original
- * ExtensionObject in binary or XML encoding.
- *
- * Variants may contain a scalar value or an array. For details on the handling
- * of arrays, see the section on :ref:`array-handling`. Array variants can have
- * an additional dimensionality (matrix, 3-tensor, ...) defined in an array of
- * dimension lengths. The actual values are kept in an array of dimensions one.
- * For users who work with higher-dimensions arrays directly, keep in mind that
- * dimensions of higher rank are serialized first (the highest rank dimension
- * has stride 1 and elements follow each other directly). Usually it is simplest
- * to interact with higher-dimensional arrays via ``UA_NumericRange``
- * descriptions (see :ref:`array-handling`).
- *
- * To differentiate between scalar / array variants, the following definition is
- * used. ``UA_Variant_isScalar`` provides simplified access to these checks.
- *
- * - ``arrayLength == 0 && data == NULL``: undefined array of length -1
- * - ``arrayLength == 0 && data == UA_EMPTY_ARRAY_SENTINEL``: array of length 0
- * - ``arrayLength == 0 && data > UA_EMPTY_ARRAY_SENTINEL``: scalar value
- * - ``arrayLength > 0``: array of the given length
- *
- * Variants can also be *empty*. Then, the pointer to the type description is
- * ``NULL``. */
-/* Forward declaration. See the section on Generic Type Handling */
-struct UA_DataType;
-typedef struct UA_DataType UA_DataType;
-
-#define UA_EMPTY_ARRAY_SENTINEL ((void*)0x01)
-
-typedef enum {
-    UA_VARIANT_DATA,          /* The data has the same lifecycle as the
-                                 variant */
-    UA_VARIANT_DATA_NODELETE /* The data is "borrowed" by the variant and
-                                 shall not be deleted at the end of the
-                                 variant's lifecycle. */
-} UA_VariantStorageType;
-
-typedef struct {
-    const UA_DataType *type;      /* The data type description */
-    UA_VariantStorageType storageType;
-    size_t arrayLength;           /* The number of elements in the data array */
-    void *data;                   /* Points to the scalar or array data */
-    size_t arrayDimensionsSize;   /* The number of dimensions */
-    UA_UInt32 *arrayDimensions;   /* The length of each dimension */
-} UA_Variant;
-
-/* Returns true if the variant has no value defined (contains neither an array
- * nor a scalar value).
- *
- * @param v The variant
- * @return Is the variant empty */
-static UA_INLINE UA_Boolean
-UA_Variant_isEmpty(const UA_Variant *v) {
-    return v->type == NULL;
-}
-
-/* Returns true if the variant contains a scalar value. Note that empty variants
- * contain an array of length -1 (undefined).
- *
- * @param v The variant
- * @return Does the variant contain a scalar value */
-static UA_INLINE UA_Boolean
-UA_Variant_isScalar(const UA_Variant *v) {
-    return (v->arrayLength == 0 && v->data > UA_EMPTY_ARRAY_SENTINEL);
-}
-
-/* Returns true if the variant contains a scalar value of the given type.
- *
- * @param v The variant
- * @param type The data type
- * @return Does the variant contain a scalar value of the given type */
-static UA_INLINE UA_Boolean
-UA_Variant_hasScalarType(const UA_Variant *v, const UA_DataType *type) {
-    return UA_Variant_isScalar(v) && type == v->type;
-}
-
-/* Returns true if the variant contains an array of the given type.
- *
- * @param v The variant
- * @param type The data type
- * @return Does the variant contain an array of the given type */
-static UA_INLINE UA_Boolean
-UA_Variant_hasArrayType(const UA_Variant *v, const UA_DataType *type) {
-    return (!UA_Variant_isScalar(v)) && type == v->type;
-}
-
-/* Set the variant to a scalar value that already resides in memory. The value
- * takes on the lifecycle of the variant and is deleted with it.
- *
- * @param v The variant
- * @param p A pointer to the value data
- * @param type The datatype of the value in question */
-void UA_EXPORT
-UA_Variant_setScalar(UA_Variant *v, void * UA_RESTRICT p,
-                     const UA_DataType *type);
-
-/* Set the variant to a scalar value that is copied from an existing variable.
- * @param v The variant
- * @param p A pointer to the value data
- * @param type The datatype of the value
- * @return Indicates whether the operation succeeded or returns an error code */
-UA_StatusCode UA_EXPORT
-UA_Variant_setScalarCopy(UA_Variant *v, const void *p,
-                         const UA_DataType *type);
-
-/* Set the variant to an array that already resides in memory. The array takes
- * on the lifecycle of the variant and is deleted with it.
- *
- * @param v The variant
- * @param array A pointer to the array data
- * @param arraySize The size of the array
- * @param type The datatype of the array */
-void UA_EXPORT
-UA_Variant_setArray(UA_Variant *v, void * UA_RESTRICT array,
-                    size_t arraySize, const UA_DataType *type);
-
-/* Set the variant to an array that is copied from an existing array.
- *
- * @param v The variant
- * @param array A pointer to the array data
- * @param arraySize The size of the array
- * @param type The datatype of the array
- * @return Indicates whether the operation succeeded or returns an error code */
-UA_StatusCode UA_EXPORT
-UA_Variant_setArrayCopy(UA_Variant *v, const void *array,
-                        size_t arraySize, const UA_DataType *type);
-
-/* Copy the variant, but use only a subset of the (multidimensional) array into
- * a variant. Returns an error code if the variant is not an array or if the
- * indicated range does not fit.
- *
- * @param src The source variant
- * @param dst The target variant
- * @param range The range of the copied data
- * @return Returns UA_STATUSCODE_GOOD or an error code */
-UA_StatusCode UA_EXPORT
-UA_Variant_copyRange(const UA_Variant *src, UA_Variant *dst,
-                     const UA_NumericRange range);
-
-/* Insert a range of data into an existing variant. The data array can't be
- * reused afterwards if it contains types without a fixed size (e.g. strings)
- * since the members are moved into the variant and take on its lifecycle.
- *
- * @param v The variant
- * @param dataArray The data array. The type must match the variant
- * @param dataArraySize The length of the data array. This is checked to match
- *        the range size.
- * @param range The range of where the new data is inserted
- * @return Returns UA_STATUSCODE_GOOD or an error code */
-UA_StatusCode UA_EXPORT
-UA_Variant_setRange(UA_Variant *v, void * UA_RESTRICT array,
-                    size_t arraySize, const UA_NumericRange range);
-
-/* Deep-copy a range of data into an existing variant.
- *
- * @param v The variant
- * @param dataArray The data array. The type must match the variant
- * @param dataArraySize The length of the data array. This is checked to match
- *        the range size.
- * @param range The range of where the new data is inserted
- * @return Returns UA_STATUSCODE_GOOD or an error code */
-UA_StatusCode UA_EXPORT
-UA_Variant_setRangeCopy(UA_Variant *v, const void *array,
-                        size_t arraySize, const UA_NumericRange range);
-
-/**
- * .. _extensionobject:
- *
- * ExtensionObject
- * ^^^^^^^^^^^^^^^
- *
- * ExtensionObjects may contain scalars of any data type. Even those that are
- * unknown to the receiver. See the section on :ref:`generic-types` on how types
- * are described. If the received data type is unknown, the encoded string and
- * target NodeId is stored instead of the decoded value. */
-typedef enum {
-    UA_EXTENSIONOBJECT_ENCODED_NOBODY     = 0,
-    UA_EXTENSIONOBJECT_ENCODED_BYTESTRING = 1,
-    UA_EXTENSIONOBJECT_ENCODED_XML        = 2,
-    UA_EXTENSIONOBJECT_DECODED            = 3,
-    UA_EXTENSIONOBJECT_DECODED_NODELETE   = 4 /* Don't delete the content
-                                                 together with the
-                                                 ExtensionObject */
-} UA_ExtensionObjectEncoding;
-
-typedef struct {
-    UA_ExtensionObjectEncoding encoding;
-    union {
-        struct {
-            UA_NodeId typeId;   /* The nodeid of the datatype */
-            UA_ByteString body; /* The bytestring of the encoded data */
-        } encoded;
-        struct {
-            const UA_DataType *type;
-            void *data;
-        } decoded;
-    } content;
-} UA_ExtensionObject;
-
-/**
- * .. _datavalue:
- *
- * DataValue
- * ^^^^^^^^^
- * A data value with an associated status code and timestamps. */
-typedef struct {
-    UA_Variant    value;
-    UA_DateTime   sourceTimestamp;
-    UA_DateTime   serverTimestamp;
-    UA_UInt16     sourcePicoseconds;
-    UA_UInt16     serverPicoseconds;
-    UA_StatusCode status;
-    UA_Boolean    hasValue             : 1;
-    UA_Boolean    hasStatus            : 1;
-    UA_Boolean    hasSourceTimestamp   : 1;
-    UA_Boolean    hasServerTimestamp   : 1;
-    UA_Boolean    hasSourcePicoseconds : 1;
-    UA_Boolean    hasServerPicoseconds : 1;
-} UA_DataValue;
-
-/**
- * DiagnosticInfo
- * ^^^^^^^^^^^^^^
- * A structure that contains detailed error and diagnostic information
- * associated with a StatusCode. */
-typedef struct UA_DiagnosticInfo {
-    UA_Boolean    hasSymbolicId          : 1;
-    UA_Boolean    hasNamespaceUri        : 1;
-    UA_Boolean    hasLocalizedText       : 1;
-    UA_Boolean    hasLocale              : 1;
-    UA_Boolean    hasAdditionalInfo      : 1;
-    UA_Boolean    hasInnerStatusCode     : 1;
-    UA_Boolean    hasInnerDiagnosticInfo : 1;
-    UA_Int32      symbolicId;
-    UA_Int32      namespaceUri;
-    UA_Int32      localizedText;
-    UA_Int32      locale;
-    UA_String     additionalInfo;
-    UA_StatusCode innerStatusCode;
-    struct UA_DiagnosticInfo *innerDiagnosticInfo;
-} UA_DiagnosticInfo;
-
-/**
- * .. _generic-types:
- *
- * Generic Type Handling
- * ---------------------
- *
- * All information about a (builtin/structured) data type is stored in a
- * ``UA_DataType``. The array ``UA_TYPES`` contains the description of all
- * standard-defined types. This type description is used for the following
- * generic operations that work on all types:
- *
- * - ``void T_init(T *ptr)``: Initialize the data type. This is synonymous with
- *   zeroing out the memory, i.e. ``memset(ptr, 0, sizeof(T))``.
- * - ``T* T_new()``: Allocate and return the memory for the data type. The
- *   value is already initialized.
- * - ``UA_StatusCode T_copy(const T *src, T *dst)``: Copy the content of the
- *   data type. Returns ``UA_STATUSCODE_GOOD`` or
- *   ``UA_STATUSCODE_BADOUTOFMEMORY``.
- * - ``void T_clear(T *ptr)``: Delete the dynamically allocated content
- *   of the data type and perform a ``T_init`` to reset the type.
- * - ``void T_delete(T *ptr)``: Delete the content of the data type and the
- *   memory for the data type itself.
- *
- * Specializations, such as ``UA_Int32_new()`` are derived from the generic
- * type operations as static inline functions. */
-
-typedef struct {
-#ifdef UA_ENABLE_TYPEDESCRIPTION
-    const char *memberName;
-#endif
-    UA_UInt16 memberTypeIndex;    /* Index of the member in the array of data
-                                     types */
-    UA_Byte   padding;            /* How much padding is there before this
-                                     member element? For arrays this is the
-                                     padding before the size_t length member.
-                                     (No padding between size_t and the
-                                     following ptr.) */
-    UA_Boolean namespaceZero : 1; /* The type of the member is defined in
-                                     namespace zero. In this implementation,
-                                     types from custom namespace may contain
-                                     members from the same namespace or
-                                     namespace zero only.*/
-    UA_Boolean isArray       : 1; /* The member is an array */
-} UA_DataTypeMember;
-
-/* The DataType "kind" is an internal type classification. It is used to
- * dispatch handling to the correct routines. */
-#define UA_DATATYPEKINDS 31
-typedef enum {
-    UA_DATATYPEKIND_BOOLEAN = 0,
-    UA_DATATYPEKIND_SBYTE = 1,
-    UA_DATATYPEKIND_BYTE = 2,
-    UA_DATATYPEKIND_INT16 = 3,
-    UA_DATATYPEKIND_UINT16 = 4,
-    UA_DATATYPEKIND_INT32 = 5,
-    UA_DATATYPEKIND_UINT32 = 6,
-    UA_DATATYPEKIND_INT64 = 7,
-    UA_DATATYPEKIND_UINT64 = 8,
-    UA_DATATYPEKIND_FLOAT = 9,
-    UA_DATATYPEKIND_DOUBLE = 10,
-    UA_DATATYPEKIND_STRING = 11,
-    UA_DATATYPEKIND_DATETIME = 12,
-    UA_DATATYPEKIND_GUID = 13,
-    UA_DATATYPEKIND_BYTESTRING = 14,
-    UA_DATATYPEKIND_XMLELEMENT = 15,
-    UA_DATATYPEKIND_NODEID = 16,
-    UA_DATATYPEKIND_EXPANDEDNODEID = 17,
-    UA_DATATYPEKIND_STATUSCODE = 18,
-    UA_DATATYPEKIND_QUALIFIEDNAME = 19,
-    UA_DATATYPEKIND_LOCALIZEDTEXT = 20,
-    UA_DATATYPEKIND_EXTENSIONOBJECT = 21,
-    UA_DATATYPEKIND_DATAVALUE = 22,
-    UA_DATATYPEKIND_VARIANT = 23,
-    UA_DATATYPEKIND_DIAGNOSTICINFO = 24,
-    UA_DATATYPEKIND_DECIMAL = 25,
-    UA_DATATYPEKIND_ENUM = 26,
-    UA_DATATYPEKIND_STRUCTURE = 27,
-    UA_DATATYPEKIND_OPTSTRUCT = 28, /* struct with optional fields */
-    UA_DATATYPEKIND_UNION = 29,
-    UA_DATATYPEKIND_BITFIELDCLUSTER = 30 /* bitfields + padding */
-} UA_DataTypeKind;
-
-struct UA_DataType {
-#ifdef UA_ENABLE_TYPEDESCRIPTION
-    const char *typeName;
-#endif
-    UA_NodeId typeId;                /* The nodeid of the type */
-    UA_UInt16 memSize;               /* Size of the struct in memory */
-    UA_UInt16 typeIndex;             /* Index of the type in the datatypetable */
-    UA_UInt32 typeKind         : 6;  /* Dispatch index for the handling routines */
-    UA_UInt32 pointerFree      : 1;  /* The type (and its members) contains no
-                                      * pointers that need to be freed */
-    UA_UInt32 overlayable      : 1;  /* The type has the identical memory layout
-                                      * in memory and on the binary stream. */
-    UA_UInt32 membersSize      : 8;  /* How many members does the type have? */
-    UA_UInt32 binaryEncodingId : 16; /* NodeId of datatype when encoded as binary */
-    //UA_UInt16  xmlEncodingId;      /* NodeId of datatype when encoded as XML */
-    UA_DataTypeMember *members;
-};
-
-/* Test if the data type is a numeric builtin data type. This includes Boolean,
- * integers and floating point numbers. Not included are DateTime and
- * StatusCode. */
-UA_Boolean
-UA_DataType_isNumeric(const UA_DataType *type);
-
-/**
- * Builtin data types can be accessed as UA_TYPES[UA_TYPES_XXX], where XXX is
- * the name of the data type. If only the NodeId of a type is known, use the
- * following method to retrieve the data type description. */
-
-/* Returns the data type description for the type's identifier or NULL if no
- * matching data type was found. */
-const UA_DataType UA_EXPORT *
-UA_findDataType(const UA_NodeId *typeId);
-
-/** The following functions are used for generic handling of data types. */
-
-/* Allocates and initializes a variable of type dataType
- *
- * @param type The datatype description
- * @return Returns the memory location of the variable or NULL if no
- *         memory could be allocated */
-void UA_EXPORT * UA_new(const UA_DataType *type) UA_FUNC_ATTR_MALLOC;
-
-/* Initializes a variable to default values
- *
- * @param p The memory location of the variable
- * @param type The datatype description */
-static UA_INLINE void
-UA_init(void *p, const UA_DataType *type) {
-    memset(p, 0, type->memSize);
-}
-
-/* Copies the content of two variables. If copying fails (e.g. because no memory
- * was available for an array), then dst is emptied and initialized to prevent
- * memory leaks.
- *
- * @param src The memory location of the source variable
- * @param dst The memory location of the destination variable
- * @param type The datatype description
- * @return Indicates whether the operation succeeded or returns an error code */
-UA_StatusCode UA_EXPORT
-UA_copy(const void *src, void *dst, const UA_DataType *type);
-
-/* Deletes the dynamically allocated content of a variable (e.g. resets all
- * arrays to undefined arrays). Afterwards, the variable can be safely deleted
- * without causing memory leaks. But the variable is not initialized and may
- * contain old data that is not memory-relevant.
- *
- * @param p The memory location of the variable
- * @param type The datatype description of the variable */
-void UA_EXPORT UA_clear(void *p, const UA_DataType *type);
-
-#define UA_deleteMembers(p, type) UA_clear(p, type)
-
-/* Frees a variable and all of its content.
- *
- * @param p The memory location of the variable
- * @param type The datatype description of the variable */
-void UA_EXPORT UA_delete(void *p, const UA_DataType *type);
-
-/**
- * .. _array-handling:
- *
- * Array handling
- * --------------
- * In OPC UA, arrays can have a length of zero or more with the usual meaning.
- * In addition, arrays can be undefined. Then, they don't even have a length. In
- * the binary encoding, this is indicated by an array of length -1.
- *
- * In open62541 however, we use ``size_t`` for array lengths. An undefined array
- * has length 0 and the data pointer is ``NULL``. An array of length 0 also has
- * length 0 but a data pointer ``UA_EMPTY_ARRAY_SENTINEL``. */
-
-/* Allocates and initializes an array of variables of a specific type
- *
- * @param size The requested array length
- * @param type The datatype description
- * @return Returns the memory location of the variable or NULL if no memory
-           could be allocated */
-void UA_EXPORT *
-UA_Array_new(size_t size, const UA_DataType *type) UA_FUNC_ATTR_MALLOC;
-
-/* Allocates and copies an array
- *
- * @param src The memory location of the source array
- * @param size The size of the array
- * @param dst The location of the pointer to the new array
- * @param type The datatype of the array members
- * @return Returns UA_STATUSCODE_GOOD or UA_STATUSCODE_BADOUTOFMEMORY */
-UA_StatusCode UA_EXPORT
-UA_Array_copy(const void *src, size_t size, void **dst,
-              const UA_DataType *type) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-/* Deletes an array.
- *
- * @param p The memory location of the array
- * @param size The size of the array
- * @param type The datatype of the array members */
-void UA_EXPORT UA_Array_delete(void *p, size_t size, const UA_DataType *type);
-
-/**
- * Random Number Generator
- * -----------------------
- * If UA_MULTITHREADING is defined, then the seed is stored in thread
- * local storage. The seed is initialized for every thread in the
- * server/client. */
-void UA_EXPORT UA_random_seed(UA_UInt64 seed);
-UA_UInt32 UA_EXPORT UA_UInt32_random(void); /* no cryptographic entropy */
-UA_Guid UA_EXPORT UA_Guid_random(void);     /* no cryptographic entropy */
-
-/**
- * .. _generated-types:
- *
- * Generated Data Type Definitions
- * -------------------------------
- *
- * The following data types were auto-generated from a definition in XML format.
- */
-
-/* The following is used to exclude type names in the definition of UA_DataType
- * structures if the feature is disabled. */
-#ifdef UA_ENABLE_TYPEDESCRIPTION
-# define UA_TYPENAME(name) name,
-#else
-# define UA_TYPENAME(name)
-#endif
-
-/* Datatype arrays with custom type definitions can be added in a linked list to
- * the client or server configuration. Datatype members can point to types in
- * the same array via the ``memberTypeIndex``. If ``namespaceZero`` is set to
- * true, the member datatype is looked up in the array of builtin datatypes
- * instead. */
-typedef struct UA_DataTypeArray {
-    const struct UA_DataTypeArray *next;
-    const size_t typesSize;
-    const UA_DataType *types;
-} UA_DataTypeArray;
-
-/**
- *
- * .. toctree::
- *
- *    types_generated */
-
-_UA_END_DECLS
-
-#endif /* UA_TYPES_H_ */
diff --git a/ext/open62541/include/open62541/util.h b/ext/open62541/include/open62541/util.h
deleted file mode 100644
index 95283b2..0000000
--- a/ext/open62541/include/open62541/util.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifndef UA_HELPER_H_
-#define UA_HELPER_H_
-
-#include <open62541/types.h>
-
-_UA_BEGIN_DECLS
-
-/**
- * Endpoint URL Parser
- * -------------------
- * The endpoint URL parser is generally useful for the implementation of network
- * layer plugins. */
-
-/* Split the given endpoint url into hostname, port and path. All arguments must
- * be non-NULL. EndpointUrls have the form "opc.tcp://hostname:port/path", port
- * and path may be omitted (together with the prefix colon and slash).
- *
- * @param endpointUrl The endpoint URL.
- * @param outHostname Set to the parsed hostname. The string points into the
- *        original endpointUrl, so no memory is allocated. If an IPv6 address is
- *        given, hostname contains e.g. '[2001:0db8:85a3::8a2e:0370:7334]'
- * @param outPort Set to the port of the url or left unchanged.
- * @param outPath Set to the path if one is present in the endpointUrl.
- *        Starting or trailing '/' are NOT included in the path. The string
- *        points into the original endpointUrl, so no memory is allocated.
- * @return Returns UA_STATUSCODE_BADTCPENDPOINTURLINVALID if parsing failed. */
-UA_StatusCode UA_EXPORT
-UA_parseEndpointUrl(const UA_String *endpointUrl, UA_String *outHostname,
-                    UA_UInt16 *outPort, UA_String *outPath);
-
-/* Split the given endpoint url into hostname, vid and pcp. All arguments must
- * be non-NULL. EndpointUrls have the form "opc.eth://<host>[:<VID>[.PCP]]".
- * The host is a MAC address, an IP address or a registered name like a
- * hostname. The format of a MAC address is six groups of hexadecimal digits,
- * separated by hyphens (e.g. 01-23-45-67-89-ab). A system may also accept
- * hostnames and/or IP addresses if it provides means to resolve it to a MAC
- * address (e.g. DNS and Reverse-ARP).
- *
- * Note: currently only parsing MAC address is supported.
- *
- * @param endpointUrl The endpoint URL.
- * @param vid Set to VLAN ID.
- * @param pcp Set to Priority Code Point.
- * @return Returns UA_STATUSCODE_BADINTERNALERROR if parsing failed. */
-UA_StatusCode UA_EXPORT
-UA_parseEndpointUrlEthernet(const UA_String *endpointUrl, UA_String *target,
-                            UA_UInt16 *vid, UA_Byte *pcp);
-
-/* Convert given byte string to a positive number. Returns the number of valid
- * digits. Stops if a non-digit char is found and returns the number of digits
- * up to that point. */
-size_t UA_EXPORT
-UA_readNumber(UA_Byte *buf, size_t buflen, UA_UInt32 *number);
-
-/* Same as UA_ReadNumber but with a base parameter */
-size_t UA_EXPORT
-UA_readNumberWithBase(const UA_Byte *buf, size_t buflen,
-                      UA_UInt32 *number, UA_Byte base);
-
-#ifndef UA_MIN
-#define UA_MIN(A,B) (A > B ? B : A)
-#endif
-
-#ifndef UA_MAX
-#define UA_MAX(A,B) (A > B ? A : B)
-#endif
-
-/**
- * Convenience macros for complex types
- * ------------------------------------ */
-#define UA_PRINTF_GUID_FORMAT "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x"
-#define UA_PRINTF_GUID_DATA(GUID) (GUID).data1, (GUID).data2, (GUID).data3, \
-        (GUID).data4[0], (GUID).data4[1], (GUID).data4[2], (GUID).data4[3], \
-        (GUID).data4[4], (GUID).data4[5], (GUID).data4[6], (GUID).data4[7]
-
-#define UA_PRINTF_STRING_FORMAT "\"%.*s\""
-#define UA_PRINTF_STRING_DATA(STRING) (int)(STRING).length, (STRING).data
-
-/**
- * Helper functions for converting data types
- * ------------------------------------ */
-
-/* Converts a bytestring to the corresponding base64 encoded string
- * representation.
- *
- * @param byteString the original byte string
- * @param str the resulting base64 encoded byte string
- *
- * Returns UA_STATUSCODE_GOOD on success. */
-UA_StatusCode UA_EXPORT
-UA_ByteString_toBase64String(const UA_ByteString *byteString, UA_String *str);
-
-/* Converts a node id to the corresponding string representation.
- * It can be one of:
- * - Numeric: ns=0;i=123
- * - String: ns=0;s=Some String
- * - Guid: ns=0;g=A123456C-0ABC-1A2B-815F-687212AAEE1B
- * - ByteString: ns=0;b=AA== */
-UA_StatusCode UA_EXPORT
-UA_NodeId_toString(const UA_NodeId *nodeId, UA_String *nodeIdStr);
-
-/* Compare memory in constant time to mitigate timing attacks.
- * Returns true if ptr1 and ptr2 are equal for length bytes. */
-static UA_INLINE UA_Boolean
-UA_constantTimeEqual(const void *ptr1, const void *ptr2, size_t length) {
-    volatile const UA_Byte *a = (volatile const UA_Byte *)ptr1;
-    volatile const UA_Byte *b = (volatile const UA_Byte *)ptr2;
-    volatile UA_Byte c = 0;
-    for(size_t i = 0; i < length; ++i) {
-        UA_Byte x = a[i], y = b[i];
-        c |= x ^ y;
-    }
-    return !c;
-}
-
-_UA_END_DECLS
-
-#endif /* UA_HELPER_H_ */
diff --git a/ext/open62541/open62541.pc.in b/ext/open62541/open62541.pc.in
deleted file mode 100644
index 53d8e8e..0000000
--- a/ext/open62541/open62541.pc.in
+++ /dev/null
@@ -1,15 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-prefix=@CMAKE_INSTALL_PREFIX@
-exec_prefix=${prefix}
-libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
-sharedlibdir=${libdir}
-includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
-
-Name: open62541
-Description: open62541 is an open source C (C99) implementation of OPC UA
-Version: @OPEN62541_VER_MAJOR@.@OPEN62541_VER_MINOR@.@OPEN62541_VER_PATCH@
-Libs: -L${libdir} -lopen62541
-Cflags: -I${includedir}/open62541
diff --git a/ext/open62541/open62541.spec b/ext/open62541/open62541.spec
deleted file mode 100644
index 046b2a4..0000000
--- a/ext/open62541/open62541.spec
+++ /dev/null
@@ -1,65 +0,0 @@
-Name:     open62541
-Version:  0.3
-Release:  1%{?dist}
-Summary:  OPC UA implementation
-License:  MPLv2.0
-URL:      http://open62541.org
-Source0:  https://github.com/open62541/open62541/archive/%{name}-%{version}.tar.gz
-
-BuildRequires: cmake3, python
-
-%description
-open62541 is a C-based library (linking with C++ projects is possible)
-with all necessary tools to implement dedicated OPC UA clients and servers,
-or to integrate OPC UA-based communication into existing applications.
-
-%package  devel
-Summary:  Development files for %{name}
-Requires: %{name}%{?_isa} = %{version}-%{release}
-
-%description devel
-The %{name}-devel package contains libraries and header files for
-developing applications that use %{name}.
-
-%prep
-%setup -q -n %{name}-%{name}-%{version} # double-name prefix by GitHub
-
-%build
-%cmake3 -DUA_ENABLE_AMALGAMATION=ON .
-make
-
-%install
-%make_install
-
-# Remove this from the examples installation
-rm examples/CMakeLists.txt
-
-%post -p /sbin/ldconfig
-
-%postun -p /sbin/ldconfig
-
-%files
-%license LICENSE
-%doc AUTHORS CHANGELOG README.md
-%{_libdir}/libopen62541.so.*
-
-%files devel
-%license LICENSE LICENSE-CC0
-%{_libdir}/libopen62541.so
-%{_libdir}/pkgconfig/open62541.pc
-%dir %{_includedir}/open62541
-%{_includedir}/open62541/*
-%{_libdir}/cmake/open62541*
-%dir %{_exec_prefix}/share/open62541
-%{_exec_prefix}/share/open62541/*
-
-%doc FEATURES.md
-%doc examples/
-
-%changelog
-* Tue Sep 05 2017 Jens Reimann <jreimann@redhat.com> - 0.3-1
-- New version of open62541
-- Adapt for cmake3
-* Thu Aug 31 2017 Jens Reimann <jreimann@redhat.com> - 0.2-1
-- Initial version of the package
-
diff --git a/ext/open62541/plugins/historydata/ua_history_data_backend_memory.c b/ext/open62541/plugins/historydata/ua_history_data_backend_memory.c
deleted file mode 100644
index 218f7cf..0000000
--- a/ext/open62541/plugins/historydata/ua_history_data_backend_memory.c
+++ /dev/null
@@ -1,604 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
- */
-
-#include <open62541/plugin/historydata/history_data_backend_memory.h>
-
-#include <limits.h>
-#include <string.h>
-
-typedef struct {
-    UA_DateTime timestamp;
-    UA_DataValue value;
-} UA_DataValueMemoryStoreItem;
-
-static void
-UA_DataValueMemoryStoreItem_deleteMembers(UA_DataValueMemoryStoreItem* item) {
-    UA_DateTime_deleteMembers(&item->timestamp);
-    UA_DataValue_deleteMembers(&item->value);
-}
-
-typedef struct {
-    UA_NodeId nodeId;
-    UA_DataValueMemoryStoreItem **dataStore;
-    size_t storeEnd;
-    size_t storeSize;
-} UA_NodeIdStoreContextItem_backend_memory;
-
-static void
-UA_NodeIdStoreContextItem_deleteMembers(UA_NodeIdStoreContextItem_backend_memory* item) {
-    UA_NodeId_deleteMembers(&item->nodeId);
-    for (size_t i = 0; i < item->storeEnd; ++i) {
-        UA_DataValueMemoryStoreItem_deleteMembers(item->dataStore[i]);
-        UA_free(item->dataStore[i]);
-    }
-    UA_free(item->dataStore);
-}
-
-typedef struct {
-    UA_NodeIdStoreContextItem_backend_memory *dataStore;
-    size_t storeEnd;
-    size_t storeSize;
-    size_t initialStoreSize;
-} UA_MemoryStoreContext;
-
-static void
-UA_MemoryStoreContext_deleteMembers(UA_MemoryStoreContext* ctx) {
-    for (size_t i = 0; i < ctx->storeEnd; ++i) {
-        UA_NodeIdStoreContextItem_deleteMembers(&ctx->dataStore[i]);
-    }
-    UA_free(ctx->dataStore);
-    memset(ctx, 0, sizeof(UA_MemoryStoreContext));
-}
-
-static UA_NodeIdStoreContextItem_backend_memory *
-getNewNodeIdContext_backend_memory(UA_MemoryStoreContext* context,
-                                   UA_Server *server,
-                                   const UA_NodeId *nodeId) {
-    UA_MemoryStoreContext *ctx = (UA_MemoryStoreContext*)context;
-    if (ctx->storeEnd >= ctx->storeSize) {
-        size_t newStoreSize = ctx->storeSize * 2;
-        if (newStoreSize == 0)
-            return NULL;
-        ctx->dataStore = (UA_NodeIdStoreContextItem_backend_memory*)UA_realloc(ctx->dataStore,  (newStoreSize * sizeof(UA_NodeIdStoreContextItem_backend_memory)));
-        if (!ctx->dataStore) {
-            ctx->storeSize = 0;
-            return NULL;
-        }
-        ctx->storeSize = newStoreSize;
-    }
-    UA_NodeIdStoreContextItem_backend_memory *item = &ctx->dataStore[ctx->storeEnd];
-    UA_NodeId_copy(nodeId, &item->nodeId);
-    UA_DataValueMemoryStoreItem ** store = (UA_DataValueMemoryStoreItem **)UA_calloc(ctx->initialStoreSize, sizeof(UA_DataValueMemoryStoreItem*));
-    if (!store) {
-        UA_NodeIdStoreContextItem_deleteMembers(item);
-        return NULL;
-    }
-    item->dataStore = store;
-    item->storeSize = ctx->initialStoreSize;
-    item->storeEnd = 0;
-    ++ctx->storeEnd;
-    return item;
-}
-
-static UA_NodeIdStoreContextItem_backend_memory *
-getNodeIdStoreContextItem_backend_memory(UA_MemoryStoreContext* context,
-                                         UA_Server *server,
-                                         const UA_NodeId *nodeId)
-{
-    for (size_t i = 0; i < context->storeEnd; ++i) {
-        if (UA_NodeId_equal(nodeId, &context->dataStore[i].nodeId)) {
-            return &context->dataStore[i];
-        }
-    }
-    return getNewNodeIdContext_backend_memory(context, server, nodeId);
-}
-
-static UA_Boolean
-binarySearch_backend_memory(const UA_NodeIdStoreContextItem_backend_memory* item,
-                            const UA_DateTime timestamp,
-                            size_t *index) {
-    if (item->storeEnd == 0) {
-        *index = item->storeEnd;
-        return false;
-    }
-    size_t min = 0;
-    size_t max = item->storeEnd - 1;
-    while (min <= max) {
-        *index = (min + max) / 2;
-        if (item->dataStore[*index]->timestamp == timestamp) {
-            return true;
-        } else if (item->dataStore[*index]->timestamp < timestamp) {
-            if (*index == item->storeEnd - 1) {
-                *index = item->storeEnd;
-                return false;
-            }
-            min = *index + 1;
-        } else {
-            if (*index == 0)
-                return false;
-            max = *index - 1;
-        }
-    }
-    *index = min;
-    return false;
-
-}
-
-static size_t
-resultSize_backend_memory(UA_Server *server,
-                          void *context,
-                          const UA_NodeId *sessionId,
-                          void *sessionContext,
-                          const UA_NodeId * nodeId,
-                          size_t startIndex,
-                          size_t endIndex) {
-    const UA_NodeIdStoreContextItem_backend_memory* item = getNodeIdStoreContextItem_backend_memory((UA_MemoryStoreContext*)context, server, nodeId);
-    if (item->storeEnd == 0
-            || startIndex == item->storeEnd
-            || endIndex == item->storeEnd)
-        return 0;
-    return endIndex - startIndex + 1;
-}
-
-static size_t
-getDateTimeMatch_backend_memory(UA_Server *server,
-                                void *context,
-                                const UA_NodeId *sessionId,
-                                void *sessionContext,
-                                const UA_NodeId * nodeId,
-                                const UA_DateTime timestamp,
-                                const MatchStrategy strategy) {
-    const UA_NodeIdStoreContextItem_backend_memory* item = getNodeIdStoreContextItem_backend_memory((UA_MemoryStoreContext*)context, server, nodeId);
-    size_t current;
-    UA_Boolean retval = binarySearch_backend_memory(item, timestamp, &current);
-
-    if ((strategy == MATCH_EQUAL
-         || strategy == MATCH_EQUAL_OR_AFTER
-         || strategy == MATCH_EQUAL_OR_BEFORE)
-            && retval)
-        return current;
-    switch (strategy) {
-    case MATCH_AFTER:
-        if (retval)
-            return current+1;
-        return current;
-    case MATCH_EQUAL_OR_AFTER:
-        return current;
-    case MATCH_EQUAL_OR_BEFORE:
-        // retval == true aka "equal" is handled before
-        // Fall through if !retval
-    case MATCH_BEFORE:
-        if (current > 0)
-            return current-1;
-        else
-            return item->storeEnd;
-    default:
-        break;
-    }
-    return item->storeEnd;
-}
-
-
-static UA_StatusCode
-serverSetHistoryData_backend_memory(UA_Server *server,
-                                    void *context,
-                                    const UA_NodeId *sessionId,
-                                    void *sessionContext,
-                                    const UA_NodeId * nodeId,
-                                    UA_Boolean historizing,
-                                    const UA_DataValue *value)
-{
-    UA_NodeIdStoreContextItem_backend_memory *item = getNodeIdStoreContextItem_backend_memory((UA_MemoryStoreContext*)context, server, nodeId);
-
-    if (item->storeEnd >= item->storeSize) {
-        size_t newStoreSize = item->storeSize == 0 ? INITIAL_MEMORY_STORE_SIZE : item->storeSize * 2;
-        item->dataStore = (UA_DataValueMemoryStoreItem **)UA_realloc(item->dataStore,  (newStoreSize * sizeof(UA_DataValueMemoryStoreItem*)));
-        if (!item->dataStore) {
-            item->storeSize = 0;
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        item->storeSize = newStoreSize;
-    }
-    UA_DateTime timestamp = 0;
-    if (value->hasSourceTimestamp) {
-        timestamp = value->sourceTimestamp;
-    } else if (value->hasServerTimestamp) {
-        timestamp = value->serverTimestamp;
-    } else {
-        timestamp = UA_DateTime_now();
-    }
-    UA_DataValueMemoryStoreItem *newItem = (UA_DataValueMemoryStoreItem *)UA_calloc(1, sizeof(UA_DataValueMemoryStoreItem));
-    newItem->timestamp = timestamp;
-    UA_DataValue_copy(value, &newItem->value);
-    size_t index = getDateTimeMatch_backend_memory(server,
-                                                   context,
-                                                   NULL,
-                                                   NULL,
-                                                   nodeId,
-                                                   timestamp,
-                                                   MATCH_EQUAL_OR_AFTER);
-    if (item->storeEnd > 0 && index < item->storeEnd) {
-        memmove(&item->dataStore[index+1], &item->dataStore[index], sizeof(UA_DataValueMemoryStoreItem*) * (item->storeEnd - index));
-    }
-    item->dataStore[index] = newItem;
-    ++item->storeEnd;
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-UA_MemoryStoreContext_delete(UA_MemoryStoreContext* ctx) {
-    UA_MemoryStoreContext_deleteMembers(ctx);
-    UA_free(ctx);
-}
-
-static size_t
-getEnd_backend_memory(UA_Server *server,
-                      void *context,
-                      const UA_NodeId *sessionId,
-                      void *sessionContext,
-                      const UA_NodeId * nodeId) {
-    const UA_NodeIdStoreContextItem_backend_memory* item = getNodeIdStoreContextItem_backend_memory((UA_MemoryStoreContext*)context, server, nodeId);;
-    return item->storeEnd;
-}
-
-static size_t
-lastIndex_backend_memory(UA_Server *server,
-                         void *context,
-                         const UA_NodeId *sessionId,
-                         void *sessionContext,
-                         const UA_NodeId * nodeId) {
-    const UA_NodeIdStoreContextItem_backend_memory* item = getNodeIdStoreContextItem_backend_memory((UA_MemoryStoreContext*)context, server, nodeId);;
-    if (item->storeEnd == 0)
-        return 0;
-    return item->storeEnd - 1;
-}
-
-static size_t
-firstIndex_backend_memory(UA_Server *server,
-                          void *context,
-                          const UA_NodeId *sessionId,
-                          void *sessionContext,
-                          const UA_NodeId * nodeId) {
-    return 0;
-}
-
-static UA_Boolean
-boundSupported_backend_memory(UA_Server *server,
-                              void *context,
-                              const UA_NodeId *sessionId,
-                              void *sessionContext,
-                              const UA_NodeId * nodeId) {
-    return true;
-}
-
-static UA_Boolean
-timestampsToReturnSupported_backend_memory(UA_Server *server,
-                                           void *context,
-                                           const UA_NodeId *sessionId,
-                                           void *sessionContext,
-                                           const UA_NodeId *nodeId,
-                                           const UA_TimestampsToReturn timestampsToReturn) {
-    const UA_NodeIdStoreContextItem_backend_memory* item = getNodeIdStoreContextItem_backend_memory((UA_MemoryStoreContext*)context, server, nodeId);;
-    if (item->storeEnd == 0) {
-        return true;
-    }
-    if (timestampsToReturn == UA_TIMESTAMPSTORETURN_NEITHER
-            || timestampsToReturn == UA_TIMESTAMPSTORETURN_INVALID
-            || (timestampsToReturn == UA_TIMESTAMPSTORETURN_SERVER
-                && !item->dataStore[0]->value.hasServerTimestamp)
-            || (timestampsToReturn == UA_TIMESTAMPSTORETURN_SOURCE
-                && !item->dataStore[0]->value.hasSourceTimestamp)
-            || (timestampsToReturn == UA_TIMESTAMPSTORETURN_BOTH
-                && !(item->dataStore[0]->value.hasSourceTimestamp
-                     && item->dataStore[0]->value.hasServerTimestamp))) {
-        return false;
-    }
-    return true;
-}
-
-static const UA_DataValue*
-getDataValue_backend_memory(UA_Server *server,
-                            void *context,
-                            const UA_NodeId *sessionId,
-                            void *sessionContext,
-                            const UA_NodeId * nodeId, size_t index) {
-    const UA_NodeIdStoreContextItem_backend_memory* item = getNodeIdStoreContextItem_backend_memory((UA_MemoryStoreContext*)context, server, nodeId);;
-    return &item->dataStore[index]->value;
-}
-
-static UA_StatusCode
-UA_DataValue_backend_copyRange(const UA_DataValue *src, UA_DataValue *dst,
-                               const UA_NumericRange range)
-{
-    memcpy(dst, src, sizeof(UA_DataValue));
-    if (src->hasValue)
-        return UA_Variant_copyRange(&src->value, &dst->value, range);
-    return UA_STATUSCODE_BADDATAUNAVAILABLE;
-}
-
-static UA_StatusCode
-copyDataValues_backend_memory(UA_Server *server,
-                              void *context,
-                              const UA_NodeId *sessionId,
-                              void *sessionContext,
-                              const UA_NodeId * nodeId,
-                              size_t startIndex,
-                              size_t endIndex,
-                              UA_Boolean reverse,
-                              size_t maxValues,
-                              UA_NumericRange range,
-                              UA_Boolean releaseContinuationPoints,
-                              const UA_ByteString *continuationPoint,
-                              UA_ByteString *outContinuationPoint,
-                              size_t * providedValues,
-                              UA_DataValue * values)
-{
-    size_t skip = 0;
-    if (continuationPoint->length > 0) {
-        if (continuationPoint->length == sizeof(size_t)) {
-            skip = *((size_t*)(continuationPoint->data));
-        } else {
-            return UA_STATUSCODE_BADCONTINUATIONPOINTINVALID;
-        }
-    }
-    const UA_NodeIdStoreContextItem_backend_memory* item = getNodeIdStoreContextItem_backend_memory((UA_MemoryStoreContext*)context, server, nodeId);;
-    size_t index = startIndex;
-    size_t counter = 0;
-    size_t skipedValues = 0;
-    if (reverse) {
-        while (index >= endIndex && index < item->storeEnd && counter < maxValues) {
-            if (skipedValues++ >= skip) {
-                if (range.dimensionsSize > 0) {
-                    UA_DataValue_backend_copyRange(&item->dataStore[index]->value, &values[counter], range);
-                } else {
-                    UA_DataValue_copy(&item->dataStore[index]->value, &values[counter]);
-                }
-                ++counter;
-            }
-            --index;
-        }
-    } else {
-        while (index <= endIndex && counter < maxValues) {
-            if (skipedValues++ >= skip) {
-                if (range.dimensionsSize > 0) {
-                    UA_DataValue_backend_copyRange(&item->dataStore[index]->value, &values[counter], range);
-                } else {
-                    UA_DataValue_copy(&item->dataStore[index]->value, &values[counter]);
-                }
-                ++counter;
-            }
-            ++index;
-        }
-    }
-
-    if (providedValues)
-        *providedValues = counter;
-
-    if ((!reverse && (endIndex-startIndex-skip+1) > counter) || (reverse && (startIndex-endIndex-skip+1) > counter)) {
-        outContinuationPoint->length = sizeof(size_t);
-        size_t t = sizeof(size_t);
-        outContinuationPoint->data = (UA_Byte*)UA_malloc(t);
-        *((size_t*)(outContinuationPoint->data)) = skip + counter;
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-insertDataValue_backend_memory(UA_Server *server,
-                   void *hdbContext,
-                   const UA_NodeId *sessionId,
-                   void *sessionContext,
-                   const UA_NodeId *nodeId,
-                   const UA_DataValue *value)
-{
-    if (!value->hasSourceTimestamp && !value->hasServerTimestamp)
-        return UA_STATUSCODE_BADINVALIDTIMESTAMP;
-    const UA_DateTime timestamp = value->hasSourceTimestamp ? value->sourceTimestamp : value->serverTimestamp;
-    UA_NodeIdStoreContextItem_backend_memory* item = getNodeIdStoreContextItem_backend_memory((UA_MemoryStoreContext*)hdbContext, server, nodeId);
-
-    size_t index = getDateTimeMatch_backend_memory(server,
-                                    hdbContext,
-                                    sessionId,
-                                    sessionContext,
-                                    nodeId,
-                                    timestamp,
-                                    MATCH_EQUAL_OR_AFTER);
-    if (item->storeEnd != index && item->dataStore[index]->timestamp == timestamp)
-        return UA_STATUSCODE_BADENTRYEXISTS;
-
-    if (item->storeEnd >= item->storeSize) {
-        size_t newStoreSize = item->storeSize == 0 ? INITIAL_MEMORY_STORE_SIZE : item->storeSize * 2;
-        item->dataStore = (UA_DataValueMemoryStoreItem **)UA_realloc(item->dataStore,  (newStoreSize * sizeof(UA_DataValueMemoryStoreItem*)));
-        if (!item->dataStore) {
-            item->storeSize = 0;
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        item->storeSize = newStoreSize;
-    }
-    UA_DataValueMemoryStoreItem *newItem = (UA_DataValueMemoryStoreItem *)UA_calloc(1, sizeof(UA_DataValueMemoryStoreItem));
-    newItem->timestamp = timestamp;
-    UA_DataValue_copy(value, &newItem->value);
-    if (item->storeEnd > 0 && index < item->storeEnd) {
-        memmove(&item->dataStore[index+1], &item->dataStore[index], sizeof(UA_DataValueMemoryStoreItem*) * (item->storeEnd - index));
-    }
-    item->dataStore[index] = newItem;
-    ++item->storeEnd;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-replaceDataValue_backend_memory(UA_Server *server,
-                    void *hdbContext,
-                    const UA_NodeId *sessionId,
-                    void *sessionContext,
-                    const UA_NodeId *nodeId,
-                    const UA_DataValue *value)
-{
-    if (!value->hasSourceTimestamp && !value->hasServerTimestamp)
-        return UA_STATUSCODE_BADINVALIDTIMESTAMP;
-    const UA_DateTime timestamp = value->hasSourceTimestamp ? value->sourceTimestamp : value->serverTimestamp;
-    UA_NodeIdStoreContextItem_backend_memory* item = getNodeIdStoreContextItem_backend_memory((UA_MemoryStoreContext*)hdbContext, server, nodeId);
-
-    size_t index = getDateTimeMatch_backend_memory(server,
-                                    hdbContext,
-                                    sessionId,
-                                    sessionContext,
-                                    nodeId,
-                                    timestamp,
-                                    MATCH_EQUAL);
-    if (index == item->storeEnd)
-        return UA_STATUSCODE_BADNOENTRYEXISTS;
-    UA_DataValue_deleteMembers(&item->dataStore[index]->value);
-    UA_DataValue_copy(value, &item->dataStore[index]->value);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-updateDataValue_backend_memory(UA_Server *server,
-                   void *hdbContext,
-                   const UA_NodeId *sessionId,
-                   void *sessionContext,
-                   const UA_NodeId *nodeId,
-                   const UA_DataValue *value)
-{
-    // we first try to replace, because it is cheap
-    UA_StatusCode ret = replaceDataValue_backend_memory(server,
-                                                        hdbContext,
-                                                        sessionId,
-                                                        sessionContext,
-                                                        nodeId,
-                                                        value);
-    if (ret == UA_STATUSCODE_GOOD)
-        return UA_STATUSCODE_GOODENTRYREPLACED;
-
-    ret = insertDataValue_backend_memory(server,
-                                          hdbContext,
-                                          sessionId,
-                                          sessionContext,
-                                          nodeId,
-                                          value);
-    if (ret == UA_STATUSCODE_GOOD)
-        return UA_STATUSCODE_GOODENTRYINSERTED;
-
-    return ret;
-}
-
-static UA_StatusCode
-removeDataValue_backend_memory(UA_Server *server,
-                               void *hdbContext,
-                               const UA_NodeId *sessionId,
-                               void *sessionContext,
-                               const UA_NodeId *nodeId,
-                               UA_DateTime startTimestamp,
-                               UA_DateTime endTimestamp)
-{
-    UA_NodeIdStoreContextItem_backend_memory* item = getNodeIdStoreContextItem_backend_memory((UA_MemoryStoreContext*)hdbContext, server, nodeId);
-    size_t storeEnd = item->storeEnd;
-    // The first index which will be deleted
-    size_t index1;
-    // the first index which is not deleted
-    size_t index2;
-    if (startTimestamp > endTimestamp) {
-        return UA_STATUSCODE_BADTIMESTAMPNOTSUPPORTED;
-    }
-    if (startTimestamp == endTimestamp) {
-        index1 = getDateTimeMatch_backend_memory(server,
-                                        hdbContext,
-                                        sessionId,
-                                        sessionContext,
-                                        nodeId,
-                                        startTimestamp,
-                                        MATCH_EQUAL);
-        if (index1 == storeEnd)
-            return UA_STATUSCODE_BADNODATA;
-        index2 = index1 + 1;
-    } else {
-        index1 = getDateTimeMatch_backend_memory(server,
-                                        hdbContext,
-                                        sessionId,
-                                        sessionContext,
-                                        nodeId,
-                                        startTimestamp,
-                                        MATCH_EQUAL_OR_AFTER);
-        index2 = getDateTimeMatch_backend_memory(server,
-                                        hdbContext,
-                                        sessionId,
-                                        sessionContext,
-                                        nodeId,
-                                        endTimestamp,
-                                        MATCH_BEFORE);
-        if (index2 == storeEnd || index1 == storeEnd || index1 > index2 )
-            return UA_STATUSCODE_BADNODATA;
-        ++index2;
-    }
-#ifndef __clang_analyzer__
-    for (size_t i = index1; i < index2; ++i) {
-        UA_DataValueMemoryStoreItem_deleteMembers(item->dataStore[i]);
-        UA_free(item->dataStore[i]);
-    }
-    memmove(&item->dataStore[index1], &item->dataStore[index2], sizeof(UA_DataValueMemoryStoreItem*) * (item->storeEnd - index2));
-    item->storeEnd -= index2 - index1;
-#else
-    (void)index1;
-    (void)index2;
-#endif
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-deleteMembers_backend_memory(UA_HistoryDataBackend *backend)
-{
-    if (backend == NULL || backend->context == NULL)
-        return;
-    UA_MemoryStoreContext_deleteMembers((UA_MemoryStoreContext*)backend->context);
-}
-
-
-
-UA_HistoryDataBackend
-UA_HistoryDataBackend_Memory(size_t initialNodeIdStoreSize, size_t initialDataStoreSize) {
-    if (initialNodeIdStoreSize == 0)
-        initialNodeIdStoreSize = 1;
-    if (initialDataStoreSize == 0)
-        initialDataStoreSize = 1;
-    UA_HistoryDataBackend result;
-    memset(&result, 0, sizeof(UA_HistoryDataBackend));
-    UA_MemoryStoreContext *ctx = (UA_MemoryStoreContext *)UA_calloc(1, sizeof(UA_MemoryStoreContext));
-    if (!ctx)
-        return result;
-    ctx->dataStore = (UA_NodeIdStoreContextItem_backend_memory*)UA_calloc(initialNodeIdStoreSize, sizeof(UA_NodeIdStoreContextItem_backend_memory));
-    ctx->initialStoreSize = initialDataStoreSize;
-    ctx->storeSize = initialNodeIdStoreSize;
-    ctx->storeEnd = 0;
-    result.serverSetHistoryData = &serverSetHistoryData_backend_memory;
-    result.resultSize = &resultSize_backend_memory;
-    result.getEnd = &getEnd_backend_memory;
-    result.lastIndex = &lastIndex_backend_memory;
-    result.firstIndex = &firstIndex_backend_memory;
-    result.getDateTimeMatch = &getDateTimeMatch_backend_memory;
-    result.copyDataValues = &copyDataValues_backend_memory;
-    result.getDataValue = &getDataValue_backend_memory;
-    result.boundSupported = &boundSupported_backend_memory;
-    result.timestampsToReturnSupported = &timestampsToReturnSupported_backend_memory;
-    result.insertDataValue =  &insertDataValue_backend_memory;
-    result.updateDataValue =  &updateDataValue_backend_memory;
-    result.replaceDataValue =  &replaceDataValue_backend_memory;
-    result.removeDataValue =  &removeDataValue_backend_memory;
-    result.deleteMembers = &deleteMembers_backend_memory;
-    result.getHistoryData = NULL;
-    result.context = ctx;
-    return result;
-}
-
-void
-UA_HistoryDataBackend_Memory_deleteMembers(UA_HistoryDataBackend *backend)
-{
-    UA_MemoryStoreContext *ctx = (UA_MemoryStoreContext*)backend->context;
-    UA_MemoryStoreContext_delete(ctx);
-    memset(backend, 0, sizeof(UA_HistoryDataBackend));
-}
diff --git a/ext/open62541/plugins/historydata/ua_history_data_gathering_default.c b/ext/open62541/plugins/historydata/ua_history_data_gathering_default.c
deleted file mode 100644
index e276d44..0000000
--- a/ext/open62541/plugins/historydata/ua_history_data_gathering_default.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
- */
-
-#include <open62541/client_subscriptions.h>
-#include <open62541/plugin/historydata/history_data_gathering_default.h>
-#include <open62541/plugin/historydata/history_database_default.h>
-
-#include <string.h>
-
-typedef struct {
-    UA_NodeId nodeId;
-    UA_HistorizingNodeIdSettings setting;
-    UA_MonitoredItemCreateResult monitoredResult;
-} UA_NodeIdStoreContextItem_gathering_default;
-
-typedef struct {
-    UA_NodeIdStoreContextItem_gathering_default *dataStore;
-    size_t storeEnd;
-    size_t storeSize;
-} UA_NodeIdStoreContext;
-
-static void
-dataChangeCallback_gathering_default(UA_Server *server,
-                                     UA_UInt32 monitoredItemId,
-                                     void *monitoredItemContext,
-                                     const UA_NodeId *nodeId,
-                                     void *nodeContext,
-                                     UA_UInt32 attributeId,
-                                     const UA_DataValue *value)
-{
-    UA_NodeIdStoreContextItem_gathering_default *context = (UA_NodeIdStoreContextItem_gathering_default*)monitoredItemContext;
-    context->setting.historizingBackend.serverSetHistoryData(server,
-                                                             context->setting.historizingBackend.context,
-                                                             NULL,
-                                                             NULL,
-                                                             nodeId,
-                                                             UA_TRUE,
-                                                             value);
-}
-
-static UA_NodeIdStoreContextItem_gathering_default*
-getNodeIdStoreContextItem_gathering_default(UA_NodeIdStoreContext *context,
-                                            const UA_NodeId *nodeId)
-{
-    for (size_t i = 0; i < context->storeEnd; ++i) {
-        if (UA_NodeId_equal(&context->dataStore[i].nodeId, nodeId)) {
-            return &context->dataStore[i];
-        }
-    }
-    return NULL;
-}
-
-static UA_StatusCode
-startPoll(UA_Server *server, UA_NodeIdStoreContextItem_gathering_default *item)
-{
-    UA_MonitoredItemCreateRequest monitorRequest =
-            UA_MonitoredItemCreateRequest_default(item->nodeId);
-    monitorRequest.requestedParameters.samplingInterval = (double)item->setting.pollingInterval;
-    monitorRequest.monitoringMode = UA_MONITORINGMODE_REPORTING;
-    item->monitoredResult =
-            UA_Server_createDataChangeMonitoredItem(server,
-                                                    UA_TIMESTAMPSTORETURN_BOTH,
-                                                    monitorRequest,
-                                                    item,
-                                                    &dataChangeCallback_gathering_default);
-    return item->monitoredResult.statusCode;
-}
-
-static UA_StatusCode
-stopPoll(UA_Server *server, UA_NodeIdStoreContextItem_gathering_default *item)
-{
-    UA_StatusCode retval = UA_Server_deleteMonitoredItem(server, item->monitoredResult.monitoredItemId);
-    UA_MonitoredItemCreateResult_init(&item->monitoredResult);
-    return retval;
-}
-
-static UA_StatusCode
-stopPoll_gathering_default(UA_Server *server,
-                           void *context,
-                           const UA_NodeId *nodeId)
-{
-    UA_NodeIdStoreContext *ctx = (UA_NodeIdStoreContext *)context;
-    UA_NodeIdStoreContextItem_gathering_default *item = getNodeIdStoreContextItem_gathering_default(ctx, nodeId);
-    if (!item) {
-        return UA_STATUSCODE_BADNODEIDUNKNOWN;
-    }
-    if (item->setting.historizingUpdateStrategy != UA_HISTORIZINGUPDATESTRATEGY_POLL)
-        return UA_STATUSCODE_BADNODEIDINVALID;
-    if (item->monitoredResult.monitoredItemId == 0)
-        return UA_STATUSCODE_BADMONITOREDITEMIDINVALID;
-    return stopPoll(server, item);
-}
-
-static UA_StatusCode
-startPoll_gathering_default(UA_Server *server,
-                            void *context,
-                            const UA_NodeId *nodeId)
-{
-    UA_NodeIdStoreContext *ctx = (UA_NodeIdStoreContext *)context;
-    UA_NodeIdStoreContextItem_gathering_default *item = getNodeIdStoreContextItem_gathering_default(ctx, nodeId);
-    if (!item) {
-        return UA_STATUSCODE_BADNODEIDUNKNOWN;
-    }
-    if (item->setting.historizingUpdateStrategy != UA_HISTORIZINGUPDATESTRATEGY_POLL)
-        return UA_STATUSCODE_BADNODEIDINVALID;
-    if (item->monitoredResult.monitoredItemId > 0)
-        return UA_STATUSCODE_BADMONITOREDITEMIDINVALID;
-    return startPoll(server, item);
-}
-
-static UA_StatusCode
-registerNodeId_gathering_default(UA_Server *server,
-                                 void *context,
-                                 const UA_NodeId *nodeId,
-                                 const UA_HistorizingNodeIdSettings setting)
-{
-    UA_NodeIdStoreContext *ctx = (UA_NodeIdStoreContext*)context;
-    if (getNodeIdStoreContextItem_gathering_default(ctx, nodeId)) {
-        return UA_STATUSCODE_BADNODEIDEXISTS;
-    }
-    if (ctx->storeEnd >= ctx->storeSize) {
-        size_t newStoreSize = ctx->storeSize * 2;
-        ctx->dataStore = (UA_NodeIdStoreContextItem_gathering_default*)UA_realloc(ctx->dataStore,  (newStoreSize * sizeof(UA_NodeIdStoreContextItem_gathering_default)));
-        if (!ctx->dataStore) {
-            ctx->storeSize = 0;
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        ctx->storeSize = newStoreSize;
-    }
-    UA_NodeId_copy(nodeId, &ctx->dataStore[ctx->storeEnd].nodeId);
-    size_t current = ctx->storeEnd;
-    ctx->dataStore[current].setting = setting;
-    ++ctx->storeEnd;
-    return UA_STATUSCODE_GOOD;
-}
-
-static const UA_HistorizingNodeIdSettings*
-getHistorizingSetting_gathering_default(UA_Server *server,
-                                        void *context,
-                                        const UA_NodeId *nodeId)
-{
-    UA_NodeIdStoreContext *ctx = (UA_NodeIdStoreContext*)context;
-    UA_NodeIdStoreContextItem_gathering_default *item = getNodeIdStoreContextItem_gathering_default(ctx, nodeId);
-    if (item) {
-        return &item->setting;
-    }
-    return NULL;
-}
-
-static void
-deleteMembers_gathering_default(UA_HistoryDataGathering *gathering)
-{
-    if (gathering == NULL || gathering->context == NULL)
-        return;
-    UA_NodeIdStoreContext *ctx = (UA_NodeIdStoreContext*)gathering->context;
-    for (size_t i = 0; i < ctx->storeEnd; ++i) {
-        UA_NodeId_deleteMembers(&ctx->dataStore[i].nodeId);
-        // There is still a monitored item present for this gathering
-        // You need to remove it with UA_Server_deleteMonitoredItem
-        UA_assert(ctx->dataStore[i].monitoredResult.monitoredItemId == 0);
-    }
-    UA_free(ctx->dataStore);
-    UA_free(gathering->context);
-}
-
-static UA_Boolean
-updateNodeIdSetting_gathering_default(UA_Server *server,
-                                      void *context,
-                                      const UA_NodeId *nodeId,
-                                      const UA_HistorizingNodeIdSettings setting)
-{
-    UA_NodeIdStoreContext *ctx = (UA_NodeIdStoreContext*)context;
-    UA_NodeIdStoreContextItem_gathering_default *item = getNodeIdStoreContextItem_gathering_default(ctx, nodeId);
-    if (!item) {
-        return false;
-    }
-    stopPoll_gathering_default(server, context, nodeId);
-    item->setting = setting;
-    return true;
-}
-
-static void
-setValue_gathering_default(UA_Server *server,
-                           void *context,
-                           const UA_NodeId *sessionId,
-                           void *sessionContext,
-                           const UA_NodeId *nodeId,
-                           UA_Boolean historizing,
-                           const UA_DataValue *value)
-{
-    UA_NodeIdStoreContext *ctx = (UA_NodeIdStoreContext*)context;
-    UA_NodeIdStoreContextItem_gathering_default *item = getNodeIdStoreContextItem_gathering_default(ctx, nodeId);
-    if (!item) {
-        return;
-    }
-    if (item->setting.historizingUpdateStrategy == UA_HISTORIZINGUPDATESTRATEGY_VALUESET) {
-        item->setting.historizingBackend.serverSetHistoryData(server,
-                                                              item->setting.historizingBackend.context,
-                                                              sessionId,
-                                                              sessionContext,
-                                                              nodeId,
-                                                              historizing,
-                                                              value);
-    }
-}
-
-UA_HistoryDataGathering
-UA_HistoryDataGathering_Default(size_t initialNodeIdStoreSize)
-{
-    UA_HistoryDataGathering gathering;
-    memset(&gathering, 0, sizeof(UA_HistoryDataGathering));
-    gathering.setValue = &setValue_gathering_default;
-    gathering.getHistorizingSetting = &getHistorizingSetting_gathering_default;
-    gathering.registerNodeId = &registerNodeId_gathering_default;
-    gathering.startPoll = &startPoll_gathering_default;
-    gathering.stopPoll = &stopPoll_gathering_default;
-    gathering.deleteMembers = &deleteMembers_gathering_default;
-    gathering.updateNodeIdSetting = &updateNodeIdSetting_gathering_default;
-    UA_NodeIdStoreContext *context = (UA_NodeIdStoreContext*)UA_calloc(1, sizeof(UA_NodeIdStoreContext));
-    context->storeEnd = 0;
-    context->storeSize = initialNodeIdStoreSize;
-    context->dataStore = (UA_NodeIdStoreContextItem_gathering_default*)UA_calloc(initialNodeIdStoreSize, sizeof(UA_NodeIdStoreContextItem_gathering_default));
-    gathering.context = context;
-    return gathering;
-}
diff --git a/ext/open62541/plugins/historydata/ua_history_database_default.c b/ext/open62541/plugins/historydata/ua_history_database_default.c
deleted file mode 100644
index 090a72b..0000000
--- a/ext/open62541/plugins/historydata/ua_history_database_default.c
+++ /dev/null
@@ -1,629 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
- */
-
-#include <open62541/plugin/historydata/history_data_gathering_default.h>
-#include <open62541/plugin/historydata/history_database_default.h>
-
-#include <limits.h>
-
-typedef struct {
-    UA_HistoryDataGathering gathering;
-} UA_HistoryDatabaseContext_default;
-
-static size_t
-getResultSize_service_default(const UA_HistoryDataBackend* backend,
-                              UA_Server *server,
-                              const UA_NodeId *sessionId,
-                              void* sessionContext,
-                              const UA_NodeId *nodeId,
-                              UA_DateTime start,
-                              UA_DateTime end,
-                              UA_UInt32 numValuesPerNode,
-                              UA_Boolean returnBounds,
-                              size_t *startIndex,
-                              size_t *endIndex,
-                              UA_Boolean *addFirst,
-                              UA_Boolean *addLast,
-                              UA_Boolean *reverse)
-{
-    size_t storeEnd = backend->getEnd(server, backend->context, sessionId, sessionContext, nodeId);
-    size_t firstIndex = backend->firstIndex(server, backend->context, sessionId, sessionContext, nodeId);
-    size_t lastIndex = backend->lastIndex(server, backend->context, sessionId, sessionContext, nodeId);
-    *startIndex = storeEnd;
-    *endIndex = storeEnd;
-    *addFirst = false;
-    *addLast = false;
-    if (end == LLONG_MIN) {
-        *reverse = false;
-    } else if (start == LLONG_MIN) {
-        *reverse = true;
-    } else {
-        *reverse = end < start;
-    }
-    UA_Boolean equal = start == end;
-    size_t size = 0;
-    if (lastIndex != storeEnd) {
-        if (equal) {
-            if (returnBounds) {
-                *startIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, start, MATCH_EQUAL_OR_BEFORE);
-                if (*startIndex == storeEnd) {
-                    *startIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, start, MATCH_AFTER);
-                    *addFirst = true;
-                }
-                *endIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, start, MATCH_AFTER);
-                size = backend->resultSize(server, backend->context, sessionId, sessionContext, nodeId, *startIndex, *endIndex);
-            } else {
-                *startIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, start, MATCH_EQUAL);
-                *endIndex = *startIndex;
-                if (*startIndex == storeEnd)
-                    size = 0;
-                else
-                    size = 1;
-            }
-        } else if (start == LLONG_MIN) {
-            *endIndex = firstIndex;
-            if (returnBounds) {
-                *addLast = true;
-                *startIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, end, MATCH_EQUAL_OR_AFTER);
-                if (*startIndex == storeEnd) {
-                    *startIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, end, MATCH_EQUAL_OR_BEFORE);
-                    *addFirst = true;
-                }
-            } else {
-                *startIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, end, MATCH_EQUAL_OR_BEFORE);
-            }
-            size = backend->resultSize(server, backend->context, sessionId, sessionContext, nodeId, *endIndex, *startIndex);
-        } else if (end == LLONG_MIN) {
-            *endIndex = lastIndex;
-            if (returnBounds) {
-                *addLast = true;
-                *startIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, start, MATCH_EQUAL_OR_BEFORE);
-                if (*startIndex == storeEnd) {
-                    *startIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, start, MATCH_AFTER);
-                    *addFirst = true;
-                }
-            } else {
-                *startIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, start, MATCH_EQUAL_OR_AFTER);
-            }
-            size = backend->resultSize(server, backend->context, sessionId, sessionContext, nodeId, *startIndex, *endIndex);
-        } else if (*reverse) {
-            if (returnBounds) {
-                *startIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, start, MATCH_EQUAL_OR_AFTER);
-                if (*startIndex == storeEnd) {
-                    *addFirst = true;
-                    *startIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, start, MATCH_BEFORE);
-                }
-                *endIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, end, MATCH_EQUAL_OR_BEFORE);
-                if (*endIndex == storeEnd) {
-                    *addLast = true;
-                    *endIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, end, MATCH_AFTER);
-                }
-            } else {
-                *startIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, start, MATCH_EQUAL_OR_BEFORE);
-                *endIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, end, MATCH_AFTER);
-            }
-            size = backend->resultSize(server, backend->context, sessionId, sessionContext, nodeId, *endIndex, *startIndex);
-        } else {
-            if (returnBounds) {
-                *startIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, start, MATCH_EQUAL_OR_BEFORE);
-                if (*startIndex == storeEnd) {
-                    *addFirst = true;
-                    *startIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, start, MATCH_AFTER);
-                }
-                *endIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, end, MATCH_EQUAL_OR_AFTER);
-                if (*endIndex == storeEnd) {
-                    *addLast = true;
-                    *endIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, end, MATCH_BEFORE);
-                }
-            } else {
-                *startIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, start, MATCH_EQUAL_OR_AFTER);
-                *endIndex = backend->getDateTimeMatch(server, backend->context, sessionId, sessionContext, nodeId, end, MATCH_BEFORE);
-            }
-            size = backend->resultSize(server, backend->context, sessionId, sessionContext, nodeId, *startIndex, *endIndex);
-        }
-    } else if (returnBounds) {
-        *addLast = true;
-        *addFirst = true;
-    }
-
-    if (*addLast)
-        ++size;
-    if (*addFirst)
-        ++size;
-
-    if (numValuesPerNode > 0 && size > numValuesPerNode) {
-        size = numValuesPerNode;
-        *addLast = false;
-    }
-    return size;
-}
-
-static UA_StatusCode
-getHistoryData_service_default(const UA_HistoryDataBackend* backend,
-                               const UA_DateTime start,
-                               const UA_DateTime end,
-                               UA_Server *server,
-                               const UA_NodeId *sessionId,
-                               void *sessionContext,
-                               const UA_NodeId* nodeId,
-                               size_t maxSize,
-                               UA_UInt32 numValuesPerNode,
-                               UA_Boolean returnBounds,
-                               UA_TimestampsToReturn timestampsToReturn,
-                               UA_NumericRange range,
-                               UA_Boolean releaseContinuationPoints,
-                               const UA_ByteString *continuationPoint,
-                               UA_ByteString *outContinuationPoint,
-                               size_t *resultSize,
-                               UA_DataValue ** result)
-{
-    size_t skip = 0;
-    UA_ByteString backendContinuationPoint;
-    UA_ByteString_init(&backendContinuationPoint);
-    if (continuationPoint->length > 0) {
-        if (continuationPoint->length >= sizeof(size_t)) {
-            skip = *((size_t*)(continuationPoint->data));
-            if (continuationPoint->length > 0) {
-                backendContinuationPoint.length = continuationPoint->length - sizeof(size_t);
-                backendContinuationPoint.data = continuationPoint->data + sizeof(size_t);
-            }
-        } else {
-            return UA_STATUSCODE_BADCONTINUATIONPOINTINVALID;
-        }
-    }
-
-    size_t storeEnd = backend->getEnd(server, backend->context, sessionId, sessionContext, nodeId);
-    size_t startIndex;
-    size_t endIndex;
-    UA_Boolean addFirst;
-    UA_Boolean addLast;
-    UA_Boolean reverse;
-    size_t _resultSize = getResultSize_service_default(backend,
-                                                       server,
-                                                       sessionId,
-                                                       sessionContext,
-                                                       nodeId,
-                                                       start,
-                                                       end,
-                                                       numValuesPerNode == 0 ? 0 : numValuesPerNode + (UA_UInt32)skip,
-                                                       returnBounds,
-                                                       &startIndex,
-                                                       &endIndex,
-                                                       &addFirst,
-                                                       &addLast,
-                                                       &reverse);
-    *resultSize = _resultSize - skip;
-    if (*resultSize > maxSize) {
-        *resultSize = maxSize;
-    }
-    UA_DataValue *outResult= (UA_DataValue*)UA_Array_new(*resultSize, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    if (!outResult) {
-        *resultSize = 0;
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-    *result = outResult;
-
-    size_t counter = 0;
-    if (addFirst) {
-        if (skip == 0) {
-            outResult[counter].hasStatus = true;
-            outResult[counter].status = UA_STATUSCODE_BADBOUNDNOTFOUND;
-            outResult[counter].hasSourceTimestamp = true;
-            if (start == LLONG_MIN) {
-                outResult[counter].sourceTimestamp = end;
-            } else {
-                outResult[counter].sourceTimestamp = start;
-            }
-            ++counter;
-        }
-    }
-    UA_ByteString backendOutContinuationPoint;
-    UA_ByteString_init(&backendOutContinuationPoint);
-    if (endIndex != storeEnd && startIndex != storeEnd) {
-        size_t retval = 0;
-
-        size_t valueSize = *resultSize - counter;
-        if (valueSize + skip > _resultSize - addFirst - addLast) {
-            if (skip == 0) {
-                valueSize = _resultSize - addFirst - addLast;
-            } else {
-                valueSize = _resultSize - skip - addLast;
-            }
-
-        }
-
-        UA_StatusCode ret = UA_STATUSCODE_GOOD;
-        if (valueSize > 0)
-            ret = backend->copyDataValues(server,
-                                          backend->context,
-                                          sessionId,
-                                          sessionContext,
-                                          nodeId,
-                                          startIndex,
-                                          endIndex,
-                                          reverse,
-                                          valueSize,
-                                          range,
-                                          releaseContinuationPoints,
-                                          &backendContinuationPoint,
-                                          &backendOutContinuationPoint,
-                                          &retval,
-                                          &outResult[counter]);
-        if (ret != UA_STATUSCODE_GOOD) {
-            UA_Array_delete(outResult, *resultSize, &UA_TYPES[UA_TYPES_DATAVALUE]);
-            *result = NULL;
-            *resultSize = 0;
-            return ret;
-        }
-        counter += retval;
-    }
-    if (addLast && counter < *resultSize) {
-        outResult[counter].hasStatus = true;
-        outResult[counter].status = UA_STATUSCODE_BADBOUNDNOTFOUND;
-        outResult[counter].hasSourceTimestamp = true;
-        if (start == LLONG_MIN && storeEnd != backend->firstIndex(server, backend->context, sessionId, sessionContext, nodeId)) {
-            outResult[counter].sourceTimestamp = backend->getDataValue(server, backend->context, sessionId, sessionContext, nodeId, endIndex)->sourceTimestamp - UA_DATETIME_SEC;
-        } else if (end == LLONG_MIN && storeEnd != backend->firstIndex(server, backend->context, sessionId, sessionContext, nodeId)) {
-            outResult[counter].sourceTimestamp = backend->getDataValue(server, backend->context, sessionId, sessionContext, nodeId, endIndex)->sourceTimestamp + UA_DATETIME_SEC;
-        } else {
-            outResult[counter].sourceTimestamp = end;
-        }
-    }
-    // there are more values
-    if (skip + *resultSize < _resultSize
-            // there are not more values for this request, but there are more values in database
-            || (backendOutContinuationPoint.length > 0
-                && numValuesPerNode != 0)
-            // we deliver just one value which is a FIRST/LAST value
-            || (skip == 0
-                && addFirst == true
-                && *resultSize == 1)) {
-        if(UA_ByteString_allocBuffer(outContinuationPoint, backendOutContinuationPoint.length + sizeof(size_t))
-                != UA_STATUSCODE_GOOD) {
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        *((size_t*)(outContinuationPoint->data)) = skip + *resultSize;
-        if(backendOutContinuationPoint.length > 0)
-            memcpy(outContinuationPoint->data + sizeof(size_t), backendOutContinuationPoint.data, backendOutContinuationPoint.length);
-    }
-    UA_ByteString_deleteMembers(&backendOutContinuationPoint);
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-updateData_service_default(UA_Server *server,
-                           void *hdbContext,
-                           const UA_NodeId *sessionId,
-                           void *sessionContext,
-                           const UA_RequestHeader *requestHeader,
-                           const UA_UpdateDataDetails *details,
-                           UA_HistoryUpdateResult *result)
-{
-    UA_HistoryDatabaseContext_default *ctx = (UA_HistoryDatabaseContext_default*)hdbContext;
-    UA_Byte accessLevel = 0;
-    UA_Server_readAccessLevel(server,
-                              details->nodeId,
-                              &accessLevel);
-    if (!(accessLevel & UA_ACCESSLEVELMASK_HISTORYWRITE)) {
-        result->statusCode = UA_STATUSCODE_BADUSERACCESSDENIED;
-        return;
-    }
-
-    UA_Boolean historizing = false;
-    UA_Server_readHistorizing(server,
-                              details->nodeId,
-                              &historizing);
-    if (!historizing) {
-        result->statusCode = UA_STATUSCODE_BADHISTORYOPERATIONINVALID;
-        return;
-    }
-    const UA_HistorizingNodeIdSettings *setting = ctx->gathering.getHistorizingSetting(
-                server,
-                ctx->gathering.context,
-                &details->nodeId);
-
-    if (!setting) {
-        result->statusCode = UA_STATUSCODE_BADHISTORYOPERATIONINVALID;
-        return;
-    }
-
-    result->operationResultsSize = details->updateValuesSize;
-    result->operationResults = (UA_StatusCode*)UA_Array_new(result->operationResultsSize, &UA_TYPES[UA_TYPES_STATUSCODE]);
-    for (size_t i = 0; i < details->updateValuesSize; ++i) {
-        if (!UA_Server_AccessControl_allowHistoryUpdateUpdateData(server,
-                                                                  sessionId,
-                                                                  sessionContext,
-                                                                  &details->nodeId,
-                                                                  details->performInsertReplace,
-                                                                  &details->updateValues[i])) {
-            result->operationResults[i] = UA_STATUSCODE_BADUSERACCESSDENIED;
-            continue;
-        }
-        switch (details->performInsertReplace) {
-        case UA_PERFORMUPDATETYPE_INSERT:
-            if (!setting->historizingBackend.insertDataValue) {
-                result->operationResults[i] = UA_STATUSCODE_BADHISTORYOPERATIONUNSUPPORTED;
-                continue;
-            }
-            result->operationResults[i]
-                    = setting->historizingBackend.insertDataValue(server,
-                                                                  setting->historizingBackend.context,
-                                                                  sessionId,
-                                                                  sessionContext,
-                                                                  &details->nodeId,
-                                                                  &details->updateValues[i]);
-            continue;
-        case UA_PERFORMUPDATETYPE_REPLACE:
-            if (!setting->historizingBackend.replaceDataValue) {
-                result->operationResults[i] = UA_STATUSCODE_BADHISTORYOPERATIONUNSUPPORTED;
-                continue;
-            }
-            result->operationResults[i]
-                    = setting->historizingBackend.replaceDataValue(server,
-                                                                   setting->historizingBackend.context,
-                                                                   sessionId,
-                                                                   sessionContext,
-                                                                   &details->nodeId,
-                                                                   &details->updateValues[i]);
-            continue;
-        case UA_PERFORMUPDATETYPE_UPDATE:
-            if (!setting->historizingBackend.updateDataValue) {
-                result->operationResults[i] = UA_STATUSCODE_BADHISTORYOPERATIONUNSUPPORTED;
-                continue;
-            }
-            result->operationResults[i]
-                    = setting->historizingBackend.updateDataValue(server,
-                                                                  setting->historizingBackend.context,
-                                                                  sessionId,
-                                                                  sessionContext,
-                                                                  &details->nodeId,
-                                                                  &details->updateValues[i]);
-            continue;
-        default:
-            result->operationResults[i] = UA_STATUSCODE_BADHISTORYOPERATIONINVALID;
-            continue;
-        }
-    }
-}
-
-
-static void
-deleteRawModified_service_default(UA_Server *server,
-                                  void *hdbContext,
-                                  const UA_NodeId *sessionId,
-                                  void *sessionContext,
-                                  const UA_RequestHeader *requestHeader,
-                                  const UA_DeleteRawModifiedDetails *details,
-                                  UA_HistoryUpdateResult *result)
-{
-    if (details->isDeleteModified) {
-        result->statusCode = UA_STATUSCODE_BADHISTORYOPERATIONUNSUPPORTED;
-        return;
-    }
-    UA_HistoryDatabaseContext_default *ctx = (UA_HistoryDatabaseContext_default*)hdbContext;
-    UA_Byte accessLevel = 0;
-    UA_Server_readAccessLevel(server,
-                              details->nodeId,
-                              &accessLevel);
-    if (!(accessLevel & UA_ACCESSLEVELMASK_HISTORYWRITE)) {
-        result->statusCode = UA_STATUSCODE_BADUSERACCESSDENIED;
-        return;
-    }
-
-    UA_Boolean historizing = false;
-    UA_Server_readHistorizing(server,
-                              details->nodeId,
-                              &historizing);
-    if (!historizing) {
-        result->statusCode = UA_STATUSCODE_BADHISTORYOPERATIONINVALID;
-        return;
-    }
-    const UA_HistorizingNodeIdSettings *setting = ctx->gathering.getHistorizingSetting(
-                server,
-                ctx->gathering.context,
-                &details->nodeId);
-
-    if (!setting) {
-        result->statusCode = UA_STATUSCODE_BADHISTORYOPERATIONINVALID;
-        return;
-    }
-    if (!setting->historizingBackend.removeDataValue) {
-        result->statusCode = UA_STATUSCODE_BADHISTORYOPERATIONUNSUPPORTED;
-        return;
-    }
-
-    if (!UA_Server_AccessControl_allowHistoryUpdateDeleteRawModified(server,
-                                                                     sessionId,
-                                                                     sessionContext,
-                                                                     &details->nodeId,
-                                                                     details->startTime,
-                                                                     details->endTime,
-                                                                     details->isDeleteModified)) {
-        result->statusCode = UA_STATUSCODE_BADUSERACCESSDENIED;
-        return;
-    }
-
-    result->statusCode
-            = setting->historizingBackend.removeDataValue(server,
-                                                          setting->historizingBackend.context,
-                                                          sessionId,
-                                                          sessionContext,
-                                                          &details->nodeId,
-                                                          details->startTime,
-                                                          details->endTime);
-}
-
-static void
-readRaw_service_default(UA_Server *server,
-                        void *context,
-                        const UA_NodeId *sessionId,
-                        void *sessionContext,
-                        const UA_RequestHeader *requestHeader,
-                        const UA_ReadRawModifiedDetails *historyReadDetails,
-                        UA_TimestampsToReturn timestampsToReturn,
-                        UA_Boolean releaseContinuationPoints,
-                        size_t nodesToReadSize,
-                        const UA_HistoryReadValueId *nodesToRead,
-                        UA_HistoryReadResponse *response,
-                        UA_HistoryData * const * const historyData)
-{
-    UA_HistoryDatabaseContext_default *ctx = (UA_HistoryDatabaseContext_default*)context;
-    for (size_t i = 0; i < nodesToReadSize; ++i) {
-        UA_Byte accessLevel = 0;
-        UA_Server_readAccessLevel(server,
-                                  nodesToRead[i].nodeId,
-                                  &accessLevel);
-        if (!(accessLevel & UA_ACCESSLEVELMASK_HISTORYREAD)) {
-            response->results[i].statusCode = UA_STATUSCODE_BADUSERACCESSDENIED;
-            continue;
-        }
-
-        UA_Boolean historizing = false;
-        UA_Server_readHistorizing(server,
-                                  nodesToRead[i].nodeId,
-                                  &historizing);
-        if (!historizing) {
-            response->results[i].statusCode = UA_STATUSCODE_BADHISTORYOPERATIONINVALID;
-            continue;
-        }
-
-        const UA_HistorizingNodeIdSettings *setting = ctx->gathering.getHistorizingSetting(
-                    server,
-                    ctx->gathering.context,
-                    &nodesToRead[i].nodeId);
-
-        if (!setting) {
-            response->results[i].statusCode = UA_STATUSCODE_BADHISTORYOPERATIONINVALID;
-            continue;
-        }
-
-        if (historyReadDetails->returnBounds && !setting->historizingBackend.boundSupported(
-                    server,
-                    setting->historizingBackend.context,
-                    sessionId,
-                    sessionContext,
-                    &nodesToRead[i].nodeId)) {
-            response->results[i].statusCode = UA_STATUSCODE_BADBOUNDNOTSUPPORTED;
-            continue;
-        }
-
-        if (!setting->historizingBackend.timestampsToReturnSupported(
-                    server,
-                    setting->historizingBackend.context,
-                    sessionId,
-                    sessionContext,
-                    &nodesToRead[i].nodeId,
-                    timestampsToReturn)) {
-            response->results[i].statusCode = UA_STATUSCODE_BADTIMESTAMPNOTSUPPORTED;
-            continue;
-        }
-
-        UA_NumericRange range;
-        range.dimensionsSize = 0;
-        range.dimensions = NULL;
-        if (nodesToRead[i].indexRange.length > 0) {
-            UA_StatusCode rangeParseResult = UA_NumericRange_parseFromString(&range, &nodesToRead[i].indexRange);
-            if (rangeParseResult != UA_STATUSCODE_GOOD) {
-                response->results[i].statusCode = rangeParseResult;
-                continue;
-            }
-        }
-
-        UA_StatusCode getHistoryDataStatusCode;
-        if (setting->historizingBackend.getHistoryData) {
-            getHistoryDataStatusCode = setting->historizingBackend.getHistoryData(
-                        server,
-                        sessionId,
-                        sessionContext,
-                        &setting->historizingBackend,
-                        historyReadDetails->startTime,
-                        historyReadDetails->endTime,
-                        &nodesToRead[i].nodeId,
-                        setting->maxHistoryDataResponseSize,
-                        historyReadDetails->numValuesPerNode,
-                        historyReadDetails->returnBounds,
-                        timestampsToReturn,
-                        range,
-                        releaseContinuationPoints,
-                        &nodesToRead[i].continuationPoint,
-                        &response->results[i].continuationPoint,
-                        historyData[i]);
-        } else {
-            getHistoryDataStatusCode = getHistoryData_service_default(
-                        &setting->historizingBackend,
-                        historyReadDetails->startTime,
-                        historyReadDetails->endTime,
-                        server,
-                        sessionId,
-                        sessionContext,
-                        &nodesToRead[i].nodeId,
-                        setting->maxHistoryDataResponseSize,
-                        historyReadDetails->numValuesPerNode,
-                        historyReadDetails->returnBounds,
-                        timestampsToReturn,
-                        range,
-                        releaseContinuationPoints,
-                        &nodesToRead[i].continuationPoint,
-                        &response->results[i].continuationPoint,
-                        &historyData[i]->dataValuesSize,
-                        &historyData[i]->dataValues);
-        }
-        if (getHistoryDataStatusCode != UA_STATUSCODE_GOOD) {
-            response->results[i].statusCode = getHistoryDataStatusCode;
-            continue;
-        }
-    }
-    response->responseHeader.serviceResult = UA_STATUSCODE_GOOD;
-    return;
-}
-
-static void
-setValue_service_default(UA_Server *server,
-                         void *context,
-                         const UA_NodeId *sessionId,
-                         void *sessionContext,
-                         const UA_NodeId *nodeId,
-                         UA_Boolean historizing,
-                         const UA_DataValue *value)
-{
-    UA_HistoryDatabaseContext_default *ctx = (UA_HistoryDatabaseContext_default*)context;
-    if (ctx->gathering.setValue)
-        ctx->gathering.setValue(server,
-                                ctx->gathering.context,
-                                sessionId,
-                                sessionContext,
-                                nodeId,
-                                historizing,
-                                value);
-}
-
-static void
-deleteMembers_service_default(UA_HistoryDatabase *hdb)
-{
-    if (hdb == NULL || hdb->context == NULL)
-        return;
-    UA_HistoryDatabaseContext_default *ctx = (UA_HistoryDatabaseContext_default*)hdb->context;
-    ctx->gathering.deleteMembers(&ctx->gathering);
-    UA_free(ctx);
-}
-
-UA_HistoryDatabase
-UA_HistoryDatabase_default(UA_HistoryDataGathering gathering)
-{
-    UA_HistoryDatabase hdb;
-    UA_HistoryDatabaseContext_default *context =
-            (UA_HistoryDatabaseContext_default*)
-            UA_calloc(1, sizeof(UA_HistoryDatabaseContext_default));
-    context->gathering = gathering;
-    hdb.context = context;
-    hdb.readRaw = &readRaw_service_default;
-    hdb.setValue = &setValue_service_default;
-    hdb.updateData = &updateData_service_default;
-    hdb.deleteRawModified = &deleteRawModified_service_default;
-    hdb.deleteMembers = &deleteMembers_service_default;
-    return hdb;
-}
diff --git a/ext/open62541/plugins/include/open62541/client_config_default.h b/ext/open62541/plugins/include/open62541/client_config_default.h
deleted file mode 100644
index 8df28d3..0000000
--- a/ext/open62541/plugins/include/open62541/client_config_default.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2018 (c) Mark Giraud, Fraunhofer IOSB
- */
-
-#ifndef UA_CLIENT_CONFIG_DEFAULT_H_
-#define UA_CLIENT_CONFIG_DEFAULT_H_
-
-#include <open62541/client_config.h>
-
-_UA_BEGIN_DECLS
-
-UA_StatusCode UA_EXPORT
-UA_ClientConfig_setDefault(UA_ClientConfig *config);
-
-#ifdef UA_ENABLE_ENCRYPTION
-UA_StatusCode UA_EXPORT
-UA_ClientConfig_setDefaultEncryption(UA_ClientConfig *config,
-                                     UA_ByteString localCertificate, UA_ByteString privateKey,
-                                     const UA_ByteString *trustList, size_t trustListSize,
-                                     const UA_ByteString *revocationList, size_t revocationListSize);
-#endif
-
-_UA_END_DECLS
-
-#endif /* UA_CLIENT_CONFIG_DEFAULT_H_ */
diff --git a/ext/open62541/plugins/include/open62541/plugin/accesscontrol_default.h b/ext/open62541/plugins/include/open62541/plugin/accesscontrol_default.h
deleted file mode 100644
index 7f60b14..0000000
--- a/ext/open62541/plugins/include/open62541/plugin/accesscontrol_default.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2016-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifndef UA_ACCESSCONTROL_DEFAULT_H_
-#define UA_ACCESSCONTROL_DEFAULT_H_
-
-#include <open62541/plugin/accesscontrol.h>
-#include <open62541/server.h>
-
-_UA_BEGIN_DECLS
-
-typedef struct {
-    UA_String username;
-    UA_String password;
-} UA_UsernamePasswordLogin;
-
-/* Default access control. The log-in can be anonymous or username-password. A
- * logged-in user has all access rights. */
-UA_EXPORT UA_StatusCode
-UA_AccessControl_default(UA_ServerConfig *config, UA_Boolean allowAnonymous,
-                         const UA_ByteString *userTokenPolicyUri,
-                         size_t usernamePasswordLoginSize,
-                         const UA_UsernamePasswordLogin *usernamePasswordLogin);
-
-_UA_END_DECLS
-
-#endif /* UA_ACCESSCONTROL_DEFAULT_H_ */
diff --git a/ext/open62541/plugins/include/open62541/plugin/historydata/history_data_backend.h b/ext/open62541/plugins/include/open62541/plugin/historydata/history_data_backend.h
deleted file mode 100644
index e7722f3..0000000
--- a/ext/open62541/plugins/include/open62541/plugin/historydata/history_data_backend.h
+++ /dev/null
@@ -1,291 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
- */
-
-#ifndef UA_PLUGIN_HISTORY_DATA_BACKEND_H_
-#define UA_PLUGIN_HISTORY_DATA_BACKEND_H_
-
-#include <open62541/server.h>
-
-_UA_BEGIN_DECLS
-
-typedef enum {
-    MATCH_EQUAL, /* Match with the exact timestamp. */
-    MATCH_AFTER, /* Match the value with the timestamp in the
-                    database that is the first later in time from the provided timestamp. */
-    MATCH_EQUAL_OR_AFTER, /* Match exactly if possible, or the first timestamp
-                             later in time from the provided timestamp. */
-    MATCH_BEFORE, /* Match the first timestamp in the database that is earlier
-                     in time from the provided timestamp. */
-    MATCH_EQUAL_OR_BEFORE /* Match exactly if possible, or the first timestamp
-                             that is earlier in time from the provided timestamp. */
-} MatchStrategy;
-
-typedef struct UA_HistoryDataBackend UA_HistoryDataBackend;
-
-struct UA_HistoryDataBackend {
-    void *context;
-
-    void
-    (*deleteMembers)(UA_HistoryDataBackend *backend);
-
-    /* This function sets a DataValue for a node in the historical data storage.
-     *
-     * server is the server the node lives in.
-     * hdbContext is the context of the UA_HistoryDataBackend.
-     * sessionId and sessionContext identify the session that wants to read historical data.
-     * nodeId is the node for which the value shall be stored.
-     * value is the value which shall be stored.
-     * historizing is the historizing flag of the node identified by nodeId.
-     * If sessionId is NULL, the historizing flag is invalid and must not be used. */
-    UA_StatusCode
-    (*serverSetHistoryData)(UA_Server *server,
-                            void *hdbContext,
-                            const UA_NodeId *sessionId,
-                            void *sessionContext,
-                            const UA_NodeId *nodeId,
-                            UA_Boolean historizing,
-                            const UA_DataValue *value);
-
-    /* This function is the high level interface for the ReadRaw operation. Set
-     * it to NULL if you use the low level API for your plugin. It should be
-     * used if the low level interface does not suite your database. It is more
-     * complex to implement the high level interface but it also provide more
-     * freedom. If you implement this, then set all low level api function
-     * pointer to NULL.
-     *
-     * server is the server the node lives in.
-     * hdbContext is the context of the UA_HistoryDataBackend.
-     * sessionId and sessionContext identify the session that wants to read historical data.
-     * backend is the HistoryDataBackend whose storage is to be queried.
-     * start is the start time of the HistoryRead request.
-     * end is the end time of the HistoryRead request.
-     * nodeId is the node id of the node for which historical data is requested.
-     * maxSizePerResponse is the maximum number of items per response the server can provide.
-     * numValuesPerNode is the maximum number of items per response the client wants to receive.
-     * returnBounds determines if the client wants to receive bounding values.
-     * timestampsToReturn contains the time stamps the client is interested in.
-     * range is the numeric range the client wants to read.
-     * releaseContinuationPoints determines if the continuation points shall be released.
-     * continuationPoint is the continuation point the client wants to release or start from.
-     * outContinuationPoint is the continuation point that gets passed to the
-     *                      client by the HistoryRead service.
-     * result contains the result histoy data that gets passed to the client. */
-    UA_StatusCode
-    (*getHistoryData)(UA_Server *server,
-                      const UA_NodeId *sessionId,
-                      void *sessionContext,
-                      const UA_HistoryDataBackend *backend,
-                      const UA_DateTime start,
-                      const UA_DateTime end,
-                      const UA_NodeId *nodeId,
-                      size_t maxSizePerResponse,
-                      UA_UInt32 numValuesPerNode,
-                      UA_Boolean returnBounds,
-                      UA_TimestampsToReturn timestampsToReturn,
-                      UA_NumericRange range,
-                      UA_Boolean releaseContinuationPoints,
-                      const UA_ByteString *continuationPoint,
-                      UA_ByteString *outContinuationPoint,
-                      UA_HistoryData *result);
-
-    /* This function is part of the low level HistoryRead API. It returns the
-     * index of a value in the database which matches certain criteria.
-     *
-     * server is the server the node lives in.
-     * hdbContext is the context of the UA_HistoryDataBackend.
-     * sessionId and sessionContext identify the session that wants to read historical data.
-     * nodeId is the node id of the node for which the matching value shall be found.
-     * timestamp is the timestamp of the requested index.
-     * strategy is the matching strategy which shall be applied in finding the index. */
-    size_t
-    (*getDateTimeMatch)(UA_Server *server,
-                        void *hdbContext,
-                        const UA_NodeId *sessionId,
-                        void *sessionContext,
-                        const UA_NodeId *nodeId,
-                        const UA_DateTime timestamp,
-                        const MatchStrategy strategy);
-
-    /* This function is part of the low level HistoryRead API. It returns the
-     * index of the element after the last valid entry in the database for a
-     * node.
-     *
-     * server is the server the node lives in.
-     * hdbContext is the context of the UA_HistoryDataBackend.
-     * sessionId and sessionContext identify the session that wants to read historical data.
-     * nodeId is the node id of the node for which the end of storage shall be returned. */
-    size_t
-    (*getEnd)(UA_Server *server,
-              void *hdbContext,
-              const UA_NodeId *sessionId,
-              void *sessionContext,
-              const UA_NodeId *nodeId);
-
-    /* This function is part of the low level HistoryRead API. It returns the
-     * index of the last element in the database for a node.
-     *
-     * server is the server the node lives in.
-     * hdbContext is the context of the UA_HistoryDataBackend.
-     * sessionId and sessionContext identify the session that wants to read historical data.
-     * nodeId is the node id of the node for which the index of the last element
-     *        shall be returned. */
-    size_t
-    (*lastIndex)(UA_Server *server,
-                 void *hdbContext,
-                 const UA_NodeId *sessionId,
-                 void *sessionContext,
-                 const UA_NodeId *nodeId);
-
-    /* This function is part of the low level HistoryRead API. It returns the
-     * index of the first element in the database for a node.
-     *
-     * server is the server the node lives in.
-     * hdbContext is the context of the UA_HistoryDataBackend.
-     * sessionId and sessionContext identify the session that wants to read historical data.
-     * nodeId is the node id of the node for which the index of the first
-     *        element shall be returned. */
-    size_t
-    (*firstIndex)(UA_Server *server,
-                  void *hdbContext,
-                  const UA_NodeId *sessionId,
-                  void *sessionContext,
-                  const UA_NodeId *nodeId);
-
-    /* This function is part of the low level HistoryRead API. It returns the
-     * number of elements between startIndex and endIndex including both.
-     *
-     * server is the server the node lives in.
-     * hdbContext is the context of the UA_HistoryDataBackend.
-     * sessionId and sessionContext identify the session that wants to read historical data.
-     * nodeId is the node id of the node for which the number of elements shall be returned.
-     * startIndex is the index of the first element in the range.
-     * endIndex is the index of the last element in the range. */
-    size_t
-    (*resultSize)(UA_Server *server,
-                  void *hdbContext,
-                  const UA_NodeId *sessionId,
-                  void *sessionContext,
-                  const UA_NodeId *nodeId,
-                  size_t startIndex,
-                  size_t endIndex);
-
-    /* This function is part of the low level HistoryRead API. It copies data
-     * values inside a certain range into a buffer.
-     *
-     * server is the server the node lives in.
-     * hdbContext is the context of the UA_HistoryDataBackend.
-     * sessionId and sessionContext identify the session that wants to read historical data.
-     * nodeId is the node id of the node for which the data values shall be copied.
-     * startIndex is the index of the first value in the range.
-     * endIndex is the index of the last value in the range.
-     * reverse determines if the values shall be copied in reverse order.
-     * valueSize is the maximal number of data values to copy.
-     * range is the numeric range which shall be copied for every data value.
-     * releaseContinuationPoints determines if the continuation points shall be released.
-     * continuationPoint is a continuation point the client wants to release or start from.
-     * outContinuationPoint is a continuation point which will be passed to the client.
-     * providedValues contains the number of values that were copied.
-     * values contains the values that have been copied from the database. */
-    UA_StatusCode
-    (*copyDataValues)(UA_Server *server,
-                      void *hdbContext,
-                      const UA_NodeId *sessionId,
-                      void *sessionContext,
-                      const UA_NodeId *nodeId,
-                      size_t startIndex,
-                      size_t endIndex,
-                      UA_Boolean reverse,
-                      size_t valueSize,
-                      UA_NumericRange range,
-                      UA_Boolean releaseContinuationPoints,
-                      const UA_ByteString *continuationPoint,
-                      UA_ByteString *outContinuationPoint,
-                      size_t *providedValues,
-                      UA_DataValue *values);
-
-    /* This function is part of the low level HistoryRead API. It returns the
-     * data value stored at a certain index in the database.
-     *
-     * server is the server the node lives in.
-     * hdbContext is the context of the UA_HistoryDataBackend.
-     * sessionId and sessionContext identify the session that wants to read historical data.
-     * nodeId is the node id of the node for which the data value shall be returned.
-     * index is the index in the database for which the data value is requested. */
-    const UA_DataValue*
-    (*getDataValue)(UA_Server *server,
-                    void *hdbContext,
-                    const UA_NodeId *sessionId,
-                    void *sessionContext,
-                    const UA_NodeId *nodeId,
-                    size_t index);
-
-    /* This function returns UA_TRUE if the backend supports returning bounding
-     * values for a node. This function is mandatory.
-     *
-     * server is the server the node lives in.
-     * hdbContext is the context of the UA_HistoryDataBackend.
-     * sessionId and sessionContext identify the session that wants to read
-     *           historical data.
-     * nodeId is the node id of the node for which the capability to return
-     *        bounds shall be queried. */
-    UA_Boolean
-    (*boundSupported)(UA_Server *server,
-                      void *hdbContext,
-                      const UA_NodeId *sessionId,
-                      void *sessionContext,
-                      const UA_NodeId *nodeId);
-
-    /* This function returns UA_TRUE if the backend supports returning the
-     * requested timestamps for a node. This function is mandatory.
-     *
-     * server is the server the node lives in.
-     * hdbContext is the context of the UA_HistoryDataBackend.
-     * sessionId and sessionContext identify the session that wants to read historical data.
-     * nodeId is the node id of the node for which the capability to return
-     *        certain timestamps shall be queried. */
-    UA_Boolean
-    (*timestampsToReturnSupported)(UA_Server *server,
-                                   void *hdbContext,
-                                   const UA_NodeId *sessionId,
-                                   void *sessionContext,
-                                   const UA_NodeId *nodeId,
-                                   const UA_TimestampsToReturn timestampsToReturn);
-
-    UA_StatusCode
-    (*insertDataValue)(UA_Server *server,
-                       void *hdbContext,
-                       const UA_NodeId *sessionId,
-                       void *sessionContext,
-                       const UA_NodeId *nodeId,
-                       const UA_DataValue *value);
-    UA_StatusCode
-    (*replaceDataValue)(UA_Server *server,
-                        void *hdbContext,
-                        const UA_NodeId *sessionId,
-                        void *sessionContext,
-                        const UA_NodeId *nodeId,
-                        const UA_DataValue *value);
-    UA_StatusCode
-    (*updateDataValue)(UA_Server *server,
-                       void *hdbContext,
-                       const UA_NodeId *sessionId,
-                       void *sessionContext,
-                       const UA_NodeId *nodeId,
-                       const UA_DataValue *value);
-    UA_StatusCode
-    (*removeDataValue)(UA_Server *server,
-                       void *hdbContext,
-                       const UA_NodeId *sessionId,
-                       void *sessionContext,
-                       const UA_NodeId *nodeId,
-                       UA_DateTime startTimestamp,
-                       UA_DateTime endTimestamp);
-};
-
-_UA_END_DECLS
-
-#endif /* UA_PLUGIN_HISTORY_DATA_BACKEND_H_ */
diff --git a/ext/open62541/plugins/include/open62541/plugin/historydata/history_data_backend_memory.h b/ext/open62541/plugins/include/open62541/plugin/historydata/history_data_backend_memory.h
deleted file mode 100644
index ac0a3ea..0000000
--- a/ext/open62541/plugins/include/open62541/plugin/historydata/history_data_backend_memory.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
- */
-
-#ifndef UA_HISTORYDATABACKEND_MEMORY_H_
-#define UA_HISTORYDATABACKEND_MEMORY_H_
-
-#include "history_data_backend.h"
-
-_UA_BEGIN_DECLS
-
-#define INITIAL_MEMORY_STORE_SIZE 1000
-
-UA_HistoryDataBackend UA_EXPORT
-UA_HistoryDataBackend_Memory(size_t initialNodeIdStoreSize, size_t initialDataStoreSize);
-
-void UA_EXPORT
-UA_HistoryDataBackend_Memory_deleteMembers(UA_HistoryDataBackend *backend);
-
-_UA_END_DECLS
-
-#endif /* UA_HISTORYDATABACKEND_MEMORY_H_ */
diff --git a/ext/open62541/plugins/include/open62541/plugin/historydata/history_data_gathering.h b/ext/open62541/plugins/include/open62541/plugin/historydata/history_data_gathering.h
deleted file mode 100644
index 6ecf659..0000000
--- a/ext/open62541/plugins/include/open62541/plugin/historydata/history_data_gathering.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
- */
-
-#ifndef UA_PLUGIN_HISTORY_DATA_GATHERING_H_
-#define UA_PLUGIN_HISTORY_DATA_GATHERING_H_
-
-#include "history_data_backend.h"
-
-_UA_BEGIN_DECLS
-
-typedef enum {
-    UA_HISTORIZINGUPDATESTRATEGY_USER     = 0x00, /* The user of the api stores the values to the database himself.
-                                                     The api will not store any value to the database. */
-    UA_HISTORIZINGUPDATESTRATEGY_VALUESET = 0x01, /* Values will be stored when a node's value is set.
-                                                     The values will be stored when a node is updated via write service.*/
-    UA_HISTORIZINGUPDATESTRATEGY_POLL     = 0x02  /* The value of the node will be read periodically.
-                                                     This is mainly relevant for datasource nodes which do
-                                                     not use the write service.
-                                                     Values will not be stored if the value is
-                                                     equal to the old value. */
-} UA_HistorizingUpdateStrategy;
-
-typedef struct {
-    UA_HistoryDataBackend historizingBackend; /* The database backend used for this node. */
-    size_t maxHistoryDataResponseSize; /* The maximum number of values returned by the server in one response.
-                                          If the result has more values, continuation points will be used. */
-    UA_HistorizingUpdateStrategy historizingUpdateStrategy; /* Defines how the values in the database will be updated.
-                                                               See UA_HistorizingUpdateStrategy for details. */
-    size_t pollingInterval; /* The polling interval for UA_HISTORIZINGUPDATESTRATEGY_POLL. */
-    void *userContext; /* A pointer to store your own settings. */
-} UA_HistorizingNodeIdSettings;
-
-typedef struct UA_HistoryDataGathering UA_HistoryDataGathering;
-struct UA_HistoryDataGathering {
-    void *context;
-
-    void
-    (*deleteMembers)(UA_HistoryDataGathering *gathering);
-
-    /* This function registers a node for the gathering of historical data.
-     *
-     * server is the server the node lives in.
-     * hdgContext is the context of the UA_HistoryDataGathering.
-     * nodeId is the node id of the node to register.
-     * setting contains the gatering settings for the node to register. */
-    UA_StatusCode
-    (*registerNodeId)(UA_Server *server,
-                      void *hdgContext,
-                      const UA_NodeId *nodeId,
-                      const UA_HistorizingNodeIdSettings setting);
-
-    /* This function stops polling a node for value changes.
-     *
-     * server is the server the node lives in.
-     * hdgContext is the context of the UA_HistoryDataGathering.
-     * nodeId is id of the node for which polling shall be stopped.
-     * setting contains the gatering settings for the node. */
-    UA_StatusCode
-    (*stopPoll)(UA_Server *server,
-                void *hdgContext,
-                const UA_NodeId *nodeId);
-
-    /* This function starts polling a node for value changes.
-     *
-     * server is the server the node lives in.
-     * hdgContext is the context of the UA_HistoryDataGathering.
-     * nodeId is the id of the node for which polling shall be started. */
-    UA_StatusCode
-    (*startPoll)(UA_Server *server,
-                 void *hdgContext,
-                 const UA_NodeId *nodeId);
-
-    /* This function modifies the gathering settings for a node.
-     *
-     * server is the server the node lives in.
-     * hdgContext is the context of the UA_HistoryDataGathering.
-     * nodeId is the node id of the node for which gathering shall be modified.
-     * setting contains the new gatering settings for the node. */
-    UA_Boolean
-    (*updateNodeIdSetting)(UA_Server *server,
-                           void *hdgContext,
-                           const UA_NodeId *nodeId,
-                           const UA_HistorizingNodeIdSettings setting);
-
-    /* Returns the gathering settings for a node.
-     *
-     * server is the server the node lives in.
-     * hdgContext is the context of the UA_HistoryDataGathering.
-     * nodeId is the node id of the node for which the gathering settings shall
-     *        be retrieved. */
-    const UA_HistorizingNodeIdSettings*
-    (*getHistorizingSetting)(UA_Server *server,
-                             void *hdgContext,
-                             const UA_NodeId *nodeId);
-
-    /* Sets a DataValue for a node in the historical data storage.
-     *
-     * server is the server the node lives in.
-     * hdgContext is the context of the UA_HistoryDataGathering.
-     * sessionId and sessionContext identify the session which wants to set this value.
-     * nodeId is the node id of the node for which a value shall be set.
-     * historizing is the historizing flag of the node identified by nodeId.
-     * value is the value to set in the history data storage. */
-    void
-    (*setValue)(UA_Server *server,
-                void *hdgContext,
-                const UA_NodeId *sessionId,
-                void *sessionContext,
-                const UA_NodeId *nodeId,
-                UA_Boolean historizing,
-                const UA_DataValue *value);
-};
-
-_UA_END_DECLS
-
-#endif /* UA_PLUGIN_HISTORY_DATA_GATHERING_H_ */
diff --git a/ext/open62541/plugins/include/open62541/plugin/historydata/history_data_gathering_default.h b/ext/open62541/plugins/include/open62541/plugin/historydata/history_data_gathering_default.h
deleted file mode 100644
index cfd039e..0000000
--- a/ext/open62541/plugins/include/open62541/plugin/historydata/history_data_gathering_default.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
- */
-
-#ifndef UA_HISTORYDATAGATHERING_DEFAULT_H_
-#define UA_HISTORYDATAGATHERING_DEFAULT_H_
-
-#include "history_data_gathering.h"
-
-_UA_BEGIN_DECLS
-
-UA_HistoryDataGathering UA_EXPORT
-UA_HistoryDataGathering_Default(size_t initialNodeIdStoreSize);
-
-_UA_END_DECLS
-
-#endif /* UA_HISTORYDATAGATHERING_DEFAULT_H_ */
diff --git a/ext/open62541/plugins/include/open62541/plugin/historydata/history_database_default.h b/ext/open62541/plugins/include/open62541/plugin/historydata/history_database_default.h
deleted file mode 100644
index 7445fdd..0000000
--- a/ext/open62541/plugins/include/open62541/plugin/historydata/history_database_default.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
- */
-
-#ifndef UA_HISTORYDATASERVICE_DEFAULT_H_
-#define UA_HISTORYDATASERVICE_DEFAULT_H_
-
-#include <open62541/plugin/historydatabase.h>
-
-#include "history_data_gathering.h"
-
-_UA_BEGIN_DECLS
-
-UA_HistoryDatabase UA_EXPORT
-UA_HistoryDatabase_default(UA_HistoryDataGathering gathering);
-
-_UA_END_DECLS
-
-#endif /* UA_HISTORYDATASERVICE_DEFAULT_H_ */
diff --git a/ext/open62541/plugins/include/open62541/plugin/log_stdout.h b/ext/open62541/plugins/include/open62541/plugin/log_stdout.h
deleted file mode 100644
index 06a39c9..0000000
--- a/ext/open62541/plugins/include/open62541/plugin/log_stdout.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2016, 2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- */
-
-#ifndef UA_LOG_STDOUT_H_
-#define UA_LOG_STDOUT_H_
-
-#include <open62541/plugin/log.h>
-
-_UA_BEGIN_DECLS
-
-extern UA_EXPORT const UA_Logger UA_Log_Stdout_; /* Logger structure */
-extern UA_EXPORT const UA_Logger *UA_Log_Stdout; /* Shorthand pointer */
-
-/* Don't use these definitions. They are only exported as long as the client
- * config is static and required compile-time  */
-UA_EXPORT void
-UA_Log_Stdout_log(void *_, UA_LogLevel level, UA_LogCategory category,
-                  const char *msg, va_list args);
-UA_EXPORT void
-UA_Log_Stdout_clear(void *logContext);
-
-_UA_END_DECLS
-
-#endif /* UA_LOG_STDOUT_H_ */
diff --git a/ext/open62541/plugins/include/open62541/plugin/pki_default.h b/ext/open62541/plugins/include/open62541/plugin/pki_default.h
deleted file mode 100644
index d6a66be..0000000
--- a/ext/open62541/plugins/include/open62541/plugin/pki_default.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2018 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2019 (c) Kalycito Infotech Private Limited
- */
-
-#ifndef UA_PKI_CERTIFICATE_H_
-#define UA_PKI_CERTIFICATE_H_
-
-#include <open62541/plugin/pki.h>
-
-_UA_BEGIN_DECLS
-
-/* Default implementation that accepts all certificates */
-UA_EXPORT void
-UA_CertificateVerification_AcceptAll(UA_CertificateVerification *cv);
-
-#ifdef UA_ENABLE_ENCRYPTION
-
-/* Accept certificates based on a trust-list and a revocation-list. Based on
- * mbedTLS. */
-UA_EXPORT UA_StatusCode
-UA_CertificateVerification_Trustlist(UA_CertificateVerification *cv,
-                                     const UA_ByteString *certificateTrustList,
-                                     size_t certificateTrustListSize,
-                                     const UA_ByteString *certificateIssuerList,
-                                     size_t certificateIssuerListSize,
-                                     const UA_ByteString *certificateRevocationList,
-                                     size_t certificateRevocationListSize);
-
-#ifdef __linux__ /* Linux only so far */
-UA_EXPORT UA_StatusCode
-UA_CertificateVerification_CertFolders(UA_CertificateVerification *cv,
-                                       const char *trustListFolder,
-                                       const char *issuerListFolder,
-                                       const char *revocationListFolder);
-#endif
-
-#endif
-
-_UA_END_DECLS
-
-#endif /* UA_PKI_CERTIFICATE_H_ */
diff --git a/ext/open62541/plugins/include/open62541/plugin/pubsub_ethernet.h b/ext/open62541/plugins/include/open62541/plugin/pubsub_ethernet.h
deleted file mode 100644
index cbf6268..0000000
--- a/ext/open62541/plugins/include/open62541/plugin/pubsub_ethernet.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *   Copyright 2018 (c) Kontron Europe GmbH (Author: Rudolf Hoyler)
- */
-
-#ifndef UA_NETWORK_PUBSUB_ETHERNET_H_
-#define UA_NETWORK_PUBSUB_ETHERNET_H_
-
-#include <open62541/plugin/pubsub.h>
-
-_UA_BEGIN_DECLS
-
-UA_PubSubTransportLayer UA_EXPORT
-UA_PubSubTransportLayerEthernet(void);
-
-_UA_END_DECLS
-
-#endif /* UA_NETWORK_PUBSUB_ETHERNET_H_ */
diff --git a/ext/open62541/plugins/include/open62541/plugin/pubsub_udp.h b/ext/open62541/plugins/include/open62541/plugin/pubsub_udp.h
deleted file mode 100644
index 7c590d1..0000000
--- a/ext/open62541/plugins/include/open62541/plugin/pubsub_udp.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2017-2018 (c) Fraunhofer IOSB (Author: Andreas Ebner)
- */
-
-#ifndef UA_NETWORK_UDPMC_H_
-#define UA_NETWORK_UDPMC_H_
-
-#include <open62541/plugin/pubsub.h>
-
-_UA_BEGIN_DECLS
-
-UA_PubSubTransportLayer UA_EXPORT
-UA_PubSubTransportLayerUDPMP(void);
-
-_UA_END_DECLS
-
-#endif /* UA_NETWORK_UDPMC_H_ */
diff --git a/ext/open62541/plugins/include/open62541/plugin/securitypolicy_default.h b/ext/open62541/plugins/include/open62541/plugin/securitypolicy_default.h
deleted file mode 100644
index 27f9c2e..0000000
--- a/ext/open62541/plugins/include/open62541/plugin/securitypolicy_default.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2017-2018 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2018 (c) Daniel Feist, Precitec GmbH & Co. KG
- */
-
-#ifndef UA_SECURITYPOLICIES_H_
-#define UA_SECURITYPOLICIES_H_
-
-#include <open62541/plugin/securitypolicy.h>
-
-_UA_BEGIN_DECLS
-
-UA_EXPORT UA_StatusCode
-UA_SecurityPolicy_None(UA_SecurityPolicy *policy,
-                       UA_CertificateVerification *certificateVerification,
-                       const UA_ByteString localCertificate, const UA_Logger *logger);
-
-#ifdef UA_ENABLE_ENCRYPTION
-
-UA_EXPORT UA_StatusCode
-UA_SecurityPolicy_Basic128Rsa15(UA_SecurityPolicy *policy,
-                                UA_CertificateVerification *certificateVerification,
-                                const UA_ByteString localCertificate,
-                                const UA_ByteString localPrivateKey,
-                                const UA_Logger *logger);
-
-UA_EXPORT UA_StatusCode
-UA_SecurityPolicy_Basic256(UA_SecurityPolicy *policy,
-                           UA_CertificateVerification *certificateVerification,
-                           const UA_ByteString localCertificate,
-                           const UA_ByteString localPrivateKey, const UA_Logger *logger);
-
-UA_EXPORT UA_StatusCode
-UA_SecurityPolicy_Basic256Sha256(UA_SecurityPolicy *policy,
-                                 UA_CertificateVerification *certificateVerification,
-                                 const UA_ByteString localCertificate,
-                                 const UA_ByteString localPrivateKey,
-                                 const UA_Logger *logger);
-
-#endif
-
-_UA_END_DECLS
-
-#endif /* UA_SECURITYPOLICIES_H_ */
diff --git a/ext/open62541/plugins/include/open62541/plugin/securitypolicy_mbedtls_common.h b/ext/open62541/plugins/include/open62541/plugin/securitypolicy_mbedtls_common.h
deleted file mode 100644
index 7d7f44d..0000000
--- a/ext/open62541/plugins/include/open62541/plugin/securitypolicy_mbedtls_common.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. 
- *
- *    Copyright 2019 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- */
-
-#ifndef UA_SECURITYPOLICY_MBEDTLS_COMMON_H_
-#define UA_SECURITYPOLICY_MBEDTLS_COMMON_H_
-
-#include <open62541/plugin/securitypolicy.h>
-
-#ifdef UA_ENABLE_ENCRYPTION
-
-#include <mbedtls/md.h>
-#include <mbedtls/x509_crt.h>
-#include <mbedtls/ctr_drbg.h>
-
-#define UA_SHA1_LENGTH 20
-
-_UA_BEGIN_DECLS
-
-void
-swapBuffers(UA_ByteString *const bufA, UA_ByteString *const bufB);
-
-void
-mbedtls_hmac(mbedtls_md_context_t *context, const UA_ByteString *key,
-             const UA_ByteString *in, unsigned char *out);
-
-UA_StatusCode
-mbedtls_generateKey(mbedtls_md_context_t *context,
-                    const UA_ByteString *secret, const UA_ByteString *seed,
-                    UA_ByteString *out);
-
-UA_StatusCode
-mbedtls_verifySig_sha1(mbedtls_x509_crt *certificate, const UA_ByteString *message,
-                       const UA_ByteString *signature);
-
-UA_StatusCode
-mbedtls_sign_sha1(mbedtls_pk_context *localPrivateKey,
-                  mbedtls_ctr_drbg_context *drbgContext,
-                  const UA_ByteString *message,
-                  UA_ByteString *signature);
-
-UA_StatusCode
-mbedtls_thumbprint_sha1(const UA_ByteString *certificate,
-                        UA_ByteString *thumbprint);
-
-/* Set the hashing scheme before calling
- * E.g. mbedtls_rsa_set_padding(context, MBEDTLS_RSA_PKCS_V21, MBEDTLS_MD_SHA1); */
-UA_StatusCode
-mbedtls_encrypt_rsaOaep(mbedtls_rsa_context *context,
-                        mbedtls_ctr_drbg_context *drbgContext,
-                        UA_ByteString *data, const size_t plainTextBlockSize);
-
-UA_StatusCode
-mbedtls_decrypt_rsaOaep(mbedtls_pk_context *localPrivateKey,
-                        mbedtls_ctr_drbg_context *drbgContext,
-                        UA_ByteString *data);
-
-_UA_END_DECLS
-
-#endif
-
-#endif /* UA_SECURITYPOLICY_MBEDTLS_COMMON_H_ */
diff --git a/ext/open62541/plugins/include/open62541/server_config_default.h b/ext/open62541/plugins/include/open62541/server_config_default.h
deleted file mode 100644
index 66d9fa0..0000000
--- a/ext/open62541/plugins/include/open62541/server_config_default.h
+++ /dev/null
@@ -1,222 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2018 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2019 (c) Kalycito Infotech Private Limited
- */
-
-#ifndef UA_SERVER_CONFIG_DEFAULT_H_
-#define UA_SERVER_CONFIG_DEFAULT_H_
-
-#include <open62541/server_config.h>
-
-_UA_BEGIN_DECLS
-
-/**********************/
-/* Default Connection */
-/**********************/
-
-extern const UA_EXPORT
-UA_ConnectionConfig UA_ConnectionConfig_default;
-
-/*************************/
-/* Default Server Config */
-/*************************/
-
-/* Creates a new server config with one endpoint and custom buffer size.
- *
- * The config will set the tcp network layer to the given port and adds a single
- * endpoint with the security policy ``SecurityPolicy#None`` to the server. A
- * server certificate may be supplied but is optional.
- * Additionally you can define a custom buffer size for send and receive buffer.
- *
- * @param portNumber The port number for the tcp network layer
- * @param certificate Optional certificate for the server endpoint. Can be
- *        ``NULL``.
- * @param sendBufferSize The size in bytes for the network send buffer
- * @param recvBufferSize The size in bytes for the network receive buffer
- *
- */
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_setMinimalCustomBuffer(UA_ServerConfig *config,
-                                       UA_UInt16 portNumber,
-                                       const UA_ByteString *certificate,
-                                       UA_UInt32 sendBufferSize,
-                                       UA_UInt32 recvBufferSize);
-
-/* Creates a new server config with one endpoint.
- *
- * The config will set the tcp network layer to the given port and adds a single
- * endpoint with the security policy ``SecurityPolicy#None`` to the server. A
- * server certificate may be supplied but is optional. */
-static UA_INLINE UA_StatusCode
-UA_ServerConfig_setMinimal(UA_ServerConfig *config, UA_UInt16 portNumber,
-                           const UA_ByteString *certificate) {
-    return UA_ServerConfig_setMinimalCustomBuffer(config, portNumber,
-                                                  certificate, 0, 0);
-}
-
-#ifdef UA_ENABLE_ENCRYPTION
-
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_setDefaultWithSecurityPolicies(UA_ServerConfig *conf,
-                                               UA_UInt16 portNumber,
-                                               const UA_ByteString *certificate,
-                                               const UA_ByteString *privateKey,
-                                               const UA_ByteString *trustList,
-                                               size_t trustListSize,
-                                               const UA_ByteString *issuerList,
-                                               size_t issuerListSize,
-                                               const UA_ByteString *revocationList,
-                                               size_t revocationListSize);
-
-#endif
-
-/* Creates a server config on the default port 4840 with no server
- * certificate. */
-static UA_INLINE UA_StatusCode
-UA_ServerConfig_setDefault(UA_ServerConfig *config) {
-    return UA_ServerConfig_setMinimal(config, 4840, NULL);
-}
-
-/* Creates a new server config with no network layer and no endpoints.
- *
- * It initializes reasonable defaults for many things, but does not
- * add any network layer, security policies and endpoints.
- * Use the various UA_ServerConfig_addXxx functions to add them.
- * 
- * @param conf The configuration to manipulate
- */
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_setBasics(UA_ServerConfig *conf);
-
-/* Adds a TCP network layer with custom buffer sizes
- *
- * @param conf The configuration to manipulate
- * @param portNumber The port number for the tcp network layer
- * @param sendBufferSize The size in bytes for the network send buffer. Pass 0
- *        to use defaults.
- * @param recvBufferSize The size in bytes for the network receive buffer.
- *        Pass 0 to use defaults.
- */
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addNetworkLayerTCP(UA_ServerConfig *conf, UA_UInt16 portNumber,
-                                   UA_UInt32 sendBufferSize, UA_UInt32 recvBufferSize);
-
-#ifdef UA_ENABLE_WEBSOCKET_SERVER
-/* Adds a Websocket network layer with custom buffer sizes
- *
- * @param conf The configuration to manipulate
- * @param portNumber The port number for the tcp network layer
- * @param sendBufferSize The size in bytes for the network send buffer. Pass 0
- *        to use defaults.
- * @param recvBufferSize The size in bytes for the network receive buffer.
- *        Pass 0 to use defaults.
- */
-
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addNetworkLayerWS(UA_ServerConfig *conf, UA_UInt16 portNumber,
-                                  UA_UInt32 sendBufferSize, UA_UInt32 recvBufferSize);
-#endif
-
-/* Adds the security policy ``SecurityPolicy#None`` to the server. A
- * server certificate may be supplied but is optional.
- *
- * @param config The configuration to manipulate
- * @param certificate The optional server certificate.
- */
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addSecurityPolicyNone(UA_ServerConfig *config, 
-                                      const UA_ByteString *certificate);
-
-#ifdef UA_ENABLE_ENCRYPTION
-
-/* Adds the security policy ``SecurityPolicy#Basic128Rsa15`` to the server. A
- * server certificate may be supplied but is optional.
- * 
- * Certificate verification should be configured before calling this
- * function. See PKI plugin.
- *
- * @param config The configuration to manipulate
- * @param certificate The server certificate.
- * @param privateKey The private key that corresponds to the certificate.
- */
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addSecurityPolicyBasic128Rsa15(UA_ServerConfig *config, 
-                                               const UA_ByteString *certificate,
-                                               const UA_ByteString *privateKey);
-
-/* Adds the security policy ``SecurityPolicy#Basic256`` to the server. A
- * server certificate may be supplied but is optional.
- *
- * Certificate verification should be configured before calling this
- * function. See PKI plugin.
- * 
- * @param config The configuration to manipulate
- * @param certificate The server certificate.
- * @param privateKey The private key that corresponds to the certificate.
- */
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addSecurityPolicyBasic256(UA_ServerConfig *config, 
-                                          const UA_ByteString *certificate,
-                                          const UA_ByteString *privateKey);
-
-/* Adds the security policy ``SecurityPolicy#Basic256Sha256`` to the server. A
- * server certificate may be supplied but is optional.
- *
- * Certificate verification should be configured before calling this
- * function. See PKI plugin.
- *
- * @param config The configuration to manipulate
- * @param certificate The server certificate.
- * @param privateKey The private key that corresponds to the certificate.
- */
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addSecurityPolicyBasic256Sha256(UA_ServerConfig *config, 
-                                                const UA_ByteString *certificate,
-                                                const UA_ByteString *privateKey);
-
-/* Adds all supported security policies and sets up certificate
- * validation procedures.
- *
- * Certificate verification should be configured before calling this
- * function. See PKI plugin.
- * 
- * @param config The configuration to manipulate
- * @param certificate The server certificate.
- * @param privateKey The private key that corresponds to the certificate.
- * @param trustList The trustList for client certificate validation.
- * @param trustListSize The trustList size.
- * @param revocationList The revocationList for client certificate validation.
- * @param revocationListSize The revocationList size.
- */
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addAllSecurityPolicies(UA_ServerConfig *config,
-                                       const UA_ByteString *certificate,
-                                       const UA_ByteString *privateKey);
-
-#endif
-
-/* Adds an endpoint for the given security policy and mode. The security
- * policy has to be added already. See UA_ServerConfig_addXxx functions.
- *
- * @param config The configuration to manipulate
- * @param securityPolicyUri The security policy for which to add the endpoint.
- * @param securityMode The security mode for which to add the endpoint.
- */
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addEndpoint(UA_ServerConfig *config, const UA_String securityPolicyUri, 
-                            UA_MessageSecurityMode securityMode);
-
-/* Adds endpoints for all configured security policies in each mode.
- *
- * @param config The configuration to manipulate
- */
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addAllEndpoints(UA_ServerConfig *config);
-
-_UA_END_DECLS
-
-#endif /* UA_SERVER_CONFIG_DEFAULT_H_ */
diff --git a/ext/open62541/plugins/securityPolicies/securitypolicy_mbedtls_common.c b/ext/open62541/plugins/securityPolicies/securitypolicy_mbedtls_common.c
deleted file mode 100644
index c2ba6ba..0000000
--- a/ext/open62541/plugins/securityPolicies/securitypolicy_mbedtls_common.c
+++ /dev/null
@@ -1,244 +0,0 @@
-#include <open62541/plugin/securitypolicy.h>
-
-#ifdef UA_ENABLE_ENCRYPTION
-
-#include <open62541/plugin/pki.h>
-#include <open62541/plugin/securitypolicy_mbedtls_common.h>
-#include <open62541/types.h>
-
-#include <mbedtls/aes.h>
-#include <mbedtls/ctr_drbg.h>
-#include <mbedtls/entropy.h>
-#include <mbedtls/entropy_poll.h>
-#include <mbedtls/error.h>
-#include <mbedtls/md.h>
-#include <mbedtls/sha1.h>
-#include <mbedtls/version.h>
-#include <mbedtls/x509_crt.h>
-
-void
-swapBuffers(UA_ByteString *const bufA, UA_ByteString *const bufB) {
-    UA_ByteString tmp = *bufA;
-    *bufA = *bufB;
-    *bufB = tmp;
-}
-
-void
-mbedtls_hmac(mbedtls_md_context_t *context, const UA_ByteString *key,
-             const UA_ByteString *in, unsigned char *out) {
-    mbedtls_md_hmac_starts(context, key->data, key->length);
-    mbedtls_md_hmac_update(context, in->data, in->length);
-    mbedtls_md_hmac_finish(context, out);
-}
-
-UA_StatusCode
-mbedtls_generateKey(mbedtls_md_context_t *context,
-                    const UA_ByteString *secret, const UA_ByteString *seed,
-                    UA_ByteString *out) {
-    size_t hashLen = (size_t)mbedtls_md_get_size(context->md_info);
-
-    UA_ByteString A_and_seed;
-    UA_ByteString_allocBuffer(&A_and_seed, hashLen + seed->length);
-    memcpy(A_and_seed.data + hashLen, seed->data, seed->length);
-
-    UA_ByteString ANext_and_seed;
-    UA_ByteString_allocBuffer(&ANext_and_seed, hashLen + seed->length);
-    memcpy(ANext_and_seed.data + hashLen, seed->data, seed->length);
-
-    UA_ByteString A = {
-        hashLen,
-        A_and_seed.data
-    };
-
-    UA_ByteString ANext = {
-        hashLen,
-        ANext_and_seed.data
-    };
-
-    mbedtls_hmac(context, secret, seed, A.data);
-
-    UA_StatusCode retval = 0;
-    for(size_t offset = 0; offset < out->length; offset += hashLen) {
-        UA_ByteString outSegment = {
-            hashLen,
-            out->data + offset
-        };
-        UA_Boolean bufferAllocated = UA_FALSE;
-        // Not enough room in out buffer to write the hash.
-        if(offset + hashLen > out->length) {
-            outSegment.data = NULL;
-            outSegment.length = 0;
-            retval = UA_ByteString_allocBuffer(&outSegment, hashLen);
-            if(retval != UA_STATUSCODE_GOOD) {
-                UA_ByteString_deleteMembers(&A_and_seed);
-                UA_ByteString_deleteMembers(&ANext_and_seed);
-                return retval;
-            }
-            bufferAllocated = UA_TRUE;
-        }
-
-        mbedtls_hmac(context, secret, &A_and_seed, outSegment.data);
-        mbedtls_hmac(context, secret, &A, ANext.data);
-
-        if(retval != UA_STATUSCODE_GOOD) {
-            if(bufferAllocated)
-                UA_ByteString_deleteMembers(&outSegment);
-            UA_ByteString_deleteMembers(&A_and_seed);
-            UA_ByteString_deleteMembers(&ANext_and_seed);
-            return retval;
-        }
-
-        if(bufferAllocated) {
-            memcpy(out->data + offset, outSegment.data, out->length - offset);
-            UA_ByteString_deleteMembers(&outSegment);
-        }
-
-        swapBuffers(&ANext_and_seed, &A_and_seed);
-        swapBuffers(&ANext, &A);
-    }
-
-    UA_ByteString_deleteMembers(&A_and_seed);
-    UA_ByteString_deleteMembers(&ANext_and_seed);
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-mbedtls_verifySig_sha1(mbedtls_x509_crt *certificate, const UA_ByteString *message,
-                       const UA_ByteString *signature) {
-    /* Compute the sha1 hash */
-    unsigned char hash[UA_SHA1_LENGTH];
-#if MBEDTLS_VERSION_NUMBER >= 0x02070000
-    mbedtls_sha1_ret(message->data, message->length, hash);
-#else
-    mbedtls_sha1(message->data, message->length, hash);
-#endif
-
-    /* Set the RSA settings */
-    mbedtls_rsa_context *rsaContext = mbedtls_pk_rsa(certificate->pk);
-    if(!rsaContext)
-        return UA_STATUSCODE_BADINTERNALERROR;
-    mbedtls_rsa_set_padding(rsaContext, MBEDTLS_RSA_PKCS_V15, 0);
-
-    /* Verify */
-    int mbedErr = mbedtls_pk_verify(&certificate->pk,
-                                    MBEDTLS_MD_SHA1, hash, UA_SHA1_LENGTH,
-                                    signature->data, signature->length);
-    if(mbedErr)
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-mbedtls_sign_sha1(mbedtls_pk_context *localPrivateKey,
-                  mbedtls_ctr_drbg_context *drbgContext,
-                  const UA_ByteString *message,
-                  UA_ByteString *signature) {
-    unsigned char hash[UA_SHA1_LENGTH];
-#if MBEDTLS_VERSION_NUMBER >= 0x02070000
-    mbedtls_sha1_ret(message->data, message->length, hash);
-#else
-    mbedtls_sha1(message->data, message->length, hash);
-#endif
-
-    mbedtls_rsa_context *rsaContext = mbedtls_pk_rsa(*localPrivateKey);
-    mbedtls_rsa_set_padding(rsaContext, MBEDTLS_RSA_PKCS_V15, 0);
-
-    size_t sigLen = 0;
-    int mbedErr = mbedtls_pk_sign(localPrivateKey, MBEDTLS_MD_SHA1, hash,
-                                  UA_SHA1_LENGTH, signature->data, &sigLen,
-                                  mbedtls_ctr_drbg_random, drbgContext);
-    if(mbedErr)
-        return UA_STATUSCODE_BADINTERNALERROR;
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-mbedtls_thumbprint_sha1(const UA_ByteString *certificate,
-                        UA_ByteString *thumbprint) {
-    if(UA_ByteString_equal(certificate, &UA_BYTESTRING_NULL))
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    if(thumbprint->length != UA_SHA1_LENGTH)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* The certificate thumbprint is always a 20 bit sha1 hash, see Part 4 of the Specification. */
-#if MBEDTLS_VERSION_NUMBER >= 0x02070000
-    mbedtls_sha1_ret(certificate->data, certificate->length, thumbprint->data);
-#else
-    mbedtls_sha1(certificate->data, certificate->length, thumbprint->data);
-#endif
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-mbedtls_encrypt_rsaOaep(mbedtls_rsa_context *context,
-                        mbedtls_ctr_drbg_context *drbgContext,
-                        UA_ByteString *data, const size_t plainTextBlockSize) {
-    if(data->length % plainTextBlockSize != 0)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    size_t max_blocks = data->length / plainTextBlockSize;
-
-    UA_ByteString encrypted;
-    UA_StatusCode retval = UA_ByteString_allocBuffer(&encrypted, max_blocks * context->len);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    size_t lenDataToEncrypt = data->length;
-    size_t inOffset = 0;
-    size_t offset = 0;
-    const unsigned char *label = NULL;
-    while(lenDataToEncrypt >= plainTextBlockSize) {
-        int mbedErr = mbedtls_rsa_rsaes_oaep_encrypt(context, mbedtls_ctr_drbg_random,
-                                                     drbgContext, MBEDTLS_RSA_PUBLIC,
-                                                     label, 0, plainTextBlockSize,
-                                                     data->data + inOffset, encrypted.data + offset);
-        if(mbedErr) {
-            UA_ByteString_deleteMembers(&encrypted);
-            return UA_STATUSCODE_BADINTERNALERROR;
-        }
-
-        inOffset += plainTextBlockSize;
-        offset += context->len;
-        lenDataToEncrypt -= plainTextBlockSize;
-    }
-
-    memcpy(data->data, encrypted.data, offset);
-    UA_ByteString_deleteMembers(&encrypted);
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-mbedtls_decrypt_rsaOaep(mbedtls_pk_context *localPrivateKey,
-                        mbedtls_ctr_drbg_context *drbgContext,
-                        UA_ByteString *data) {
-    mbedtls_rsa_context *rsaContext = mbedtls_pk_rsa(*localPrivateKey);
-    mbedtls_rsa_set_padding(rsaContext, MBEDTLS_RSA_PKCS_V21, MBEDTLS_MD_SHA1);
-
-    if(data->length % rsaContext->len != 0)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    size_t inOffset = 0;
-    size_t outOffset = 0;
-    size_t outLength = 0;
-    unsigned char buf[512];
-
-    while(inOffset < data->length) {
-        int mbedErr = mbedtls_rsa_rsaes_oaep_decrypt(rsaContext, mbedtls_ctr_drbg_random,
-                                                     drbgContext, MBEDTLS_RSA_PRIVATE,
-                                                     NULL, 0, &outLength,
-                                                     data->data + inOffset,
-                                                     buf, 512);
-        if(mbedErr)
-            return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-
-        memcpy(data->data + outOffset, buf, outLength);
-        inOffset += rsaContext->len;
-        outOffset += outLength;
-    }
-
-    data->length = outOffset;
-    return UA_STATUSCODE_GOOD;
-}
-
-#endif
diff --git a/ext/open62541/plugins/securityPolicies/ua_securitypolicy_basic128rsa15.c b/ext/open62541/plugins/securityPolicies/ua_securitypolicy_basic128rsa15.c
deleted file mode 100644
index 1a27aa9..0000000
--- a/ext/open62541/plugins/securityPolicies/ua_securitypolicy_basic128rsa15.c
+++ /dev/null
@@ -1,877 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2019 (c) Kalycito Infotech Private Limited
- *
- */
-
-#include <open62541/plugin/securitypolicy_default.h>
-#include <open62541/plugin/securitypolicy_mbedtls_common.h>
-
-#ifdef UA_ENABLE_ENCRYPTION
-
-#include <open62541/util.h>
-
-
-#include <mbedtls/aes.h>
-#include <mbedtls/ctr_drbg.h>
-#include <mbedtls/entropy.h>
-#include <mbedtls/entropy_poll.h>
-#include <mbedtls/error.h>
-#include <mbedtls/md.h>
-#include <mbedtls/sha1.h>
-#include <mbedtls/version.h>
-#include <mbedtls/x509_crt.h>
-
-/* Notes:
- * mbedTLS' AES allows in-place encryption and decryption. Sow we don't have to
- * allocate temp buffers.
- * https://tls.mbed.org/discussions/generic/in-place-decryption-with-aes256-same-input-output-buffer
- */
-
-#define UA_SECURITYPOLICY_BASIC128RSA15_RSAPADDING_LEN 11
-#define UA_SECURITYPOLICY_BASIC128RSA15_SYM_KEY_LENGTH 16
-#define UA_BASIC128RSA15_SYM_SIGNING_KEY_LENGTH 16
-#define UA_SECURITYPOLICY_BASIC128RSA15_SYM_ENCRYPTION_BLOCK_SIZE 16
-#define UA_SECURITYPOLICY_BASIC128RSA15_SYM_PLAIN_TEXT_BLOCK_SIZE 16
-#define UA_SECURITYPOLICY_BASIC128RSA15_MINASYMKEYLENGTH 128
-#define UA_SECURITYPOLICY_BASIC128RSA15_MAXASYMKEYLENGTH 512
-
-typedef struct {
-    const UA_SecurityPolicy *securityPolicy;
-    UA_ByteString localCertThumbprint;
-
-    mbedtls_ctr_drbg_context drbgContext;
-    mbedtls_entropy_context entropyContext;
-    mbedtls_md_context_t sha1MdContext;
-    mbedtls_pk_context localPrivateKey;
-} Basic128Rsa15_PolicyContext;
-
-typedef struct {
-    Basic128Rsa15_PolicyContext *policyContext;
-
-    UA_ByteString localSymSigningKey;
-    UA_ByteString localSymEncryptingKey;
-    UA_ByteString localSymIv;
-
-    UA_ByteString remoteSymSigningKey;
-    UA_ByteString remoteSymEncryptingKey;
-    UA_ByteString remoteSymIv;
-
-    mbedtls_x509_crt remoteCertificate;
-} Basic128Rsa15_ChannelContext;
-
-/********************/
-/* AsymmetricModule */
-/********************/
-
-static UA_StatusCode
-asym_verify_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                             Basic128Rsa15_ChannelContext *cc,
-                             const UA_ByteString *message,
-                             const UA_ByteString *signature) {
-    if(securityPolicy == NULL || message == NULL || signature == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    return mbedtls_verifySig_sha1(&cc->remoteCertificate, message, signature);
-}
-
-static UA_StatusCode
-asym_sign_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                           Basic128Rsa15_ChannelContext *cc,
-                           const UA_ByteString *message,
-                           UA_ByteString *signature) {
-    if(securityPolicy == NULL || message == NULL || signature == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    Basic128Rsa15_PolicyContext *pc = cc->policyContext;
-    return mbedtls_sign_sha1(&pc->localPrivateKey, &pc->drbgContext,
-                             message, signature);
-}
-
-static size_t
-asym_getLocalSignatureSize_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                                            const Basic128Rsa15_ChannelContext *cc) {
-    if(securityPolicy == NULL || cc == NULL)
-        return 0;
-
-    return mbedtls_pk_rsa(cc->policyContext->localPrivateKey)->len;
-}
-
-static size_t
-asym_getRemoteSignatureSize_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                                             const Basic128Rsa15_ChannelContext *cc) {
-    if(securityPolicy == NULL || cc == NULL)
-        return 0;
-
-    return mbedtls_pk_rsa(cc->remoteCertificate.pk)->len;
-}
-
-static UA_StatusCode
-asym_encrypt_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                              Basic128Rsa15_ChannelContext *cc,
-                              UA_ByteString *data) {
-    if(securityPolicy == NULL || cc == NULL || data == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    const size_t plainTextBlockSize = securityPolicy->asymmetricModule.cryptoModule.encryptionAlgorithm.
-        getRemotePlainTextBlockSize(securityPolicy, cc);
-
-    if(data->length % plainTextBlockSize != 0)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    mbedtls_rsa_context *remoteRsaContext = mbedtls_pk_rsa(cc->remoteCertificate.pk);
-    mbedtls_rsa_set_padding(remoteRsaContext, MBEDTLS_RSA_PKCS_V15, 0);
-
-    UA_ByteString encrypted;
-    const size_t bufferOverhead =
-        UA_SecurityPolicy_getRemoteAsymEncryptionBufferLengthOverhead(securityPolicy, cc, data->length);
-    UA_StatusCode retval = UA_ByteString_allocBuffer(&encrypted, data->length + bufferOverhead);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    size_t lenDataToEncrypt = data->length;
-    size_t inOffset = 0;
-    size_t offset = 0;
-    size_t outLength = 0;
-    Basic128Rsa15_PolicyContext *pc = cc->policyContext;
-    while(lenDataToEncrypt >= plainTextBlockSize) {
-        int mbedErr = mbedtls_pk_encrypt(&cc->remoteCertificate.pk,
-                                         data->data + inOffset, plainTextBlockSize,
-                                         encrypted.data + offset, &outLength,
-                                         encrypted.length - offset,
-                                         mbedtls_ctr_drbg_random,
-                                         &pc->drbgContext);
-        if(mbedErr) {
-            UA_ByteString_deleteMembers(&encrypted);
-            return UA_STATUSCODE_BADINTERNALERROR;
-        }
-
-        inOffset += plainTextBlockSize;
-        offset += outLength;
-        lenDataToEncrypt -= plainTextBlockSize;
-    }
-
-    memcpy(data->data, encrypted.data, offset);
-    UA_ByteString_deleteMembers(&encrypted);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-asym_decrypt_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                              Basic128Rsa15_ChannelContext *cc,
-                              UA_ByteString *data) {
-    if(securityPolicy == NULL || cc == NULL || data == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    mbedtls_rsa_context *rsaContext = mbedtls_pk_rsa(cc->policyContext->localPrivateKey);
-    mbedtls_rsa_set_padding(rsaContext, MBEDTLS_RSA_PKCS_V15, 0);
-
-    if(data->length % rsaContext->len != 0)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    size_t inOffset = 0;
-    size_t outOffset = 0;
-    size_t outLength = 0;
-    unsigned char buf[512];
-
-    while(inOffset < data->length) {
-        int mbedErr = mbedtls_pk_decrypt(&cc->policyContext->localPrivateKey,
-                                         data->data + inOffset, rsaContext->len,
-                                         buf, &outLength, 512, NULL, NULL);
-        if(mbedErr)
-            return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-
-        memcpy(data->data + outOffset, buf, outLength);
-        inOffset += rsaContext->len;
-        outOffset += outLength;
-    }
-
-    data->length = outOffset;
-    return UA_STATUSCODE_GOOD;
-}
-
-static size_t
-asym_getRemoteEncryptionKeyLength_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                                                   const Basic128Rsa15_ChannelContext *cc) {
-    return mbedtls_pk_get_len(&cc->remoteCertificate.pk) * 8;
-}
-
-static size_t
-asym_getRemoteBlockSize_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                                         const Basic128Rsa15_ChannelContext *cc) {
-    mbedtls_rsa_context *const rsaContext = mbedtls_pk_rsa(cc->remoteCertificate.pk);
-    return rsaContext->len;
-}
-
-static size_t
-asym_getRemotePlainTextBlockSize_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                                                  const Basic128Rsa15_ChannelContext *cc) {
-    mbedtls_rsa_context *const rsaContext = mbedtls_pk_rsa(cc->remoteCertificate.pk);
-    return rsaContext->len - UA_SECURITYPOLICY_BASIC128RSA15_RSAPADDING_LEN;
-}
-
-static UA_StatusCode
-asym_makeThumbprint_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                                     const UA_ByteString *certificate,
-                                     UA_ByteString *thumbprint) {
-    if(securityPolicy == NULL || certificate == NULL || thumbprint == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-    return mbedtls_thumbprint_sha1(certificate, thumbprint);
-}
-
-static UA_StatusCode
-asymmetricModule_compareCertificateThumbprint_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                                                               const UA_ByteString *certificateThumbprint) {
-    if(securityPolicy == NULL || certificateThumbprint == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    Basic128Rsa15_PolicyContext *pc = (Basic128Rsa15_PolicyContext *)securityPolicy->policyContext;
-    if(!UA_ByteString_equal(certificateThumbprint, &pc->localCertThumbprint))
-        return UA_STATUSCODE_BADCERTIFICATEINVALID;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/*******************/
-/* SymmetricModule */
-/*******************/
-
-static UA_StatusCode
-sym_verify_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                            Basic128Rsa15_ChannelContext *cc,
-                            const UA_ByteString *message,
-                            const UA_ByteString *signature) {
-    if(securityPolicy == NULL || cc == NULL || message == NULL || signature == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Compute MAC */
-    if(signature->length != UA_SHA1_LENGTH) {
-        UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                     "Signature size does not have the desired size defined by the security policy");
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-    }
-
-    Basic128Rsa15_PolicyContext *pc =
-        (Basic128Rsa15_PolicyContext *)securityPolicy->policyContext;
-
-    unsigned char mac[UA_SHA1_LENGTH];
-    mbedtls_hmac(&pc->sha1MdContext, &cc->remoteSymSigningKey, message, mac);
-
-    /* Compare with Signature */
-    if(!UA_constantTimeEqual(signature->data, mac, UA_SHA1_LENGTH))
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-sym_sign_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                          const Basic128Rsa15_ChannelContext *cc,
-                          const UA_ByteString *message,
-                          UA_ByteString *signature) {
-    if(signature->length != UA_SHA1_LENGTH)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    mbedtls_hmac(&cc->policyContext->sha1MdContext, &cc->localSymSigningKey,
-                 message, signature->data);
-    return UA_STATUSCODE_GOOD;
-}
-
-static size_t
-sym_getSignatureSize_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                                      const void *channelContext) {
-    return UA_SHA1_LENGTH;
-}
-
-static size_t
-sym_getSigningKeyLength_sp_basic128rsa15(const UA_SecurityPolicy *const securityPolicy,
-                                         const void *const channelContext) {
-    return UA_BASIC128RSA15_SYM_SIGNING_KEY_LENGTH;
-}
-
-static size_t
-sym_getEncryptionKeyLength_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                                            const void *channelContext) {
-    return UA_SECURITYPOLICY_BASIC128RSA15_SYM_KEY_LENGTH;
-}
-
-static size_t
-sym_getEncryptionBlockSize_sp_basic128rsa15(const UA_SecurityPolicy *const securityPolicy,
-                                            const void *const channelContext) {
-    return UA_SECURITYPOLICY_BASIC128RSA15_SYM_ENCRYPTION_BLOCK_SIZE;
-}
-
-static size_t
-sym_getPlainTextBlockSize_sp_basic128rsa15(const UA_SecurityPolicy *const securityPolicy,
-                                           const void *const channelContext) {
-    return UA_SECURITYPOLICY_BASIC128RSA15_SYM_PLAIN_TEXT_BLOCK_SIZE;
-}
-
-static UA_StatusCode
-sym_encrypt_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                             const Basic128Rsa15_ChannelContext *cc,
-                             UA_ByteString *data) {
-    if(securityPolicy == NULL || cc == NULL || data == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    if(cc->localSymIv.length !=
-       securityPolicy->symmetricModule.cryptoModule.encryptionAlgorithm.getLocalBlockSize(securityPolicy, cc))
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    size_t plainTextBlockSize =
-        securityPolicy->symmetricModule.cryptoModule.encryptionAlgorithm.getLocalPlainTextBlockSize(securityPolicy, cc);
-
-    if(data->length % plainTextBlockSize != 0) {
-        UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                     "Length of data to encrypt is not a multiple of the plain text block size."
-                         "Padding might not have been calculated appropriately.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    /* Keylength in bits */
-    unsigned int keylength = (unsigned int)(cc->localSymEncryptingKey.length * 8);
-    mbedtls_aes_context aesContext;
-    int mbedErr = mbedtls_aes_setkey_enc(&aesContext, cc->localSymEncryptingKey.data, keylength);
-    if(mbedErr)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString ivCopy;
-    UA_StatusCode retval = UA_ByteString_copy(&cc->localSymIv, &ivCopy);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    mbedErr = mbedtls_aes_crypt_cbc(&aesContext, MBEDTLS_AES_ENCRYPT, data->length,
-                                    ivCopy.data, data->data, data->data);
-    if(mbedErr)
-        retval = UA_STATUSCODE_BADINTERNALERROR;
-    UA_ByteString_deleteMembers(&ivCopy);
-    return retval;
-}
-
-static UA_StatusCode
-sym_decrypt_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                             const Basic128Rsa15_ChannelContext *cc,
-                             UA_ByteString *data) {
-    if(securityPolicy == NULL || cc == NULL || data == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    size_t encryptionBlockSize = securityPolicy->symmetricModule.cryptoModule.
-        encryptionAlgorithm.getRemoteBlockSize(securityPolicy, cc);
-
-    if(cc->remoteSymIv.length != encryptionBlockSize)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    if(data->length % encryptionBlockSize != 0) {
-        UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                     "Length of data to decrypt is not a multiple of the encryptingBlock size.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    unsigned int keylength = (unsigned int)(cc->remoteSymEncryptingKey.length * 8);
-    mbedtls_aes_context aesContext;
-    int mbedErr = mbedtls_aes_setkey_dec(&aesContext, cc->remoteSymEncryptingKey.data, keylength);
-    if(mbedErr)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString ivCopy;
-    UA_StatusCode retval = UA_ByteString_copy(&cc->remoteSymIv, &ivCopy);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    mbedErr = mbedtls_aes_crypt_cbc(&aesContext, MBEDTLS_AES_DECRYPT, data->length,
-                                    ivCopy.data, data->data, data->data);
-    if(mbedErr)
-        retval = UA_STATUSCODE_BADINTERNALERROR;
-    UA_ByteString_deleteMembers(&ivCopy);
-    return retval;
-}
-
-static UA_StatusCode
-sym_generateKey_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                                 const UA_ByteString *secret, const UA_ByteString *seed,
-                                 UA_ByteString *out) {
-    if(securityPolicy == NULL || secret == NULL || seed == NULL || out == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    Basic128Rsa15_PolicyContext *pc =
-        (Basic128Rsa15_PolicyContext *)securityPolicy->policyContext;
-
-    return mbedtls_generateKey(&pc->sha1MdContext, secret, seed, out);
-}
-
-static UA_StatusCode
-sym_generateNonce_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                                   UA_ByteString *out) {
-    if(securityPolicy == NULL || securityPolicy->policyContext == NULL || out == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    Basic128Rsa15_PolicyContext *pc =
-        (Basic128Rsa15_PolicyContext *)securityPolicy->policyContext;
-
-    int mbedErr = mbedtls_ctr_drbg_random(&pc->drbgContext, out->data, out->length);
-    if(mbedErr)
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/*****************/
-/* ChannelModule */
-/*****************/
-
-/* Assumes that the certificate has been verified externally */
-static UA_StatusCode
-parseRemoteCertificate_sp_basic128rsa15(Basic128Rsa15_ChannelContext *cc,
-                                        const UA_ByteString *remoteCertificate) {
-    if(remoteCertificate == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Parse the certificate */
-    int mbedErr = mbedtls_x509_crt_parse(&cc->remoteCertificate, remoteCertificate->data,
-                                         remoteCertificate->length);
-    if(mbedErr)
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-
-    /* Check the key length */
-    mbedtls_rsa_context *rsaContext = mbedtls_pk_rsa(cc->remoteCertificate.pk);
-    if(rsaContext->len < UA_SECURITYPOLICY_BASIC128RSA15_MINASYMKEYLENGTH ||
-       rsaContext->len > UA_SECURITYPOLICY_BASIC128RSA15_MAXASYMKEYLENGTH)
-        return UA_STATUSCODE_BADCERTIFICATEUSENOTALLOWED;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-channelContext_deleteContext_sp_basic128rsa15(Basic128Rsa15_ChannelContext *cc) {
-    UA_ByteString_deleteMembers(&cc->localSymSigningKey);
-    UA_ByteString_deleteMembers(&cc->localSymEncryptingKey);
-    UA_ByteString_deleteMembers(&cc->localSymIv);
-
-    UA_ByteString_deleteMembers(&cc->remoteSymSigningKey);
-    UA_ByteString_deleteMembers(&cc->remoteSymEncryptingKey);
-    UA_ByteString_deleteMembers(&cc->remoteSymIv);
-
-    mbedtls_x509_crt_free(&cc->remoteCertificate);
-
-    UA_free(cc);
-}
-
-static UA_StatusCode
-channelContext_newContext_sp_basic128rsa15(const UA_SecurityPolicy *securityPolicy,
-                                           const UA_ByteString *remoteCertificate,
-                                           void **pp_contextData) {
-    if(securityPolicy == NULL || remoteCertificate == NULL || pp_contextData == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Allocate the channel context */
-    *pp_contextData = UA_malloc(sizeof(Basic128Rsa15_ChannelContext));
-    if(*pp_contextData == NULL)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    Basic128Rsa15_ChannelContext *cc = (Basic128Rsa15_ChannelContext *)*pp_contextData;
-
-    /* Initialize the channel context */
-    cc->policyContext = (Basic128Rsa15_PolicyContext *)securityPolicy->policyContext;
-
-    UA_ByteString_init(&cc->localSymSigningKey);
-    UA_ByteString_init(&cc->localSymEncryptingKey);
-    UA_ByteString_init(&cc->localSymIv);
-
-    UA_ByteString_init(&cc->remoteSymSigningKey);
-    UA_ByteString_init(&cc->remoteSymEncryptingKey);
-    UA_ByteString_init(&cc->remoteSymIv);
-
-    mbedtls_x509_crt_init(&cc->remoteCertificate);
-
-    // TODO: this can be optimized so that we dont allocate memory before parsing the certificate
-    UA_StatusCode retval = parseRemoteCertificate_sp_basic128rsa15(cc, remoteCertificate);
-    if(retval != UA_STATUSCODE_GOOD) {
-        channelContext_deleteContext_sp_basic128rsa15(cc);
-        *pp_contextData = NULL;
-    }
-    return retval;
-}
-
-static UA_StatusCode
-channelContext_setLocalSymEncryptingKey_sp_basic128rsa15(Basic128Rsa15_ChannelContext *cc,
-                                                         const UA_ByteString *key) {
-    if(key == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->localSymEncryptingKey);
-    return UA_ByteString_copy(key, &cc->localSymEncryptingKey);
-}
-
-static UA_StatusCode
-channelContext_setLocalSymSigningKey_sp_basic128rsa15(Basic128Rsa15_ChannelContext *cc,
-                                                      const UA_ByteString *key) {
-    if(key == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->localSymSigningKey);
-    return UA_ByteString_copy(key, &cc->localSymSigningKey);
-}
-
-
-static UA_StatusCode
-channelContext_setLocalSymIv_sp_basic128rsa15(Basic128Rsa15_ChannelContext *cc,
-                                              const UA_ByteString *iv) {
-    if(iv == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->localSymIv);
-    return UA_ByteString_copy(iv, &cc->localSymIv);
-}
-
-static UA_StatusCode
-channelContext_setRemoteSymEncryptingKey_sp_basic128rsa15(Basic128Rsa15_ChannelContext *cc,
-                                                          const UA_ByteString *key) {
-    if(key == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->remoteSymEncryptingKey);
-    return UA_ByteString_copy(key, &cc->remoteSymEncryptingKey);
-}
-
-static UA_StatusCode
-channelContext_setRemoteSymSigningKey_sp_basic128rsa15(Basic128Rsa15_ChannelContext *cc,
-                                                       const UA_ByteString *key) {
-    if(key == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->remoteSymSigningKey);
-    return UA_ByteString_copy(key, &cc->remoteSymSigningKey);
-}
-
-static UA_StatusCode
-channelContext_setRemoteSymIv_sp_basic128rsa15(Basic128Rsa15_ChannelContext *cc,
-                                               const UA_ByteString *iv) {
-    if(iv == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->remoteSymIv);
-    return UA_ByteString_copy(iv, &cc->remoteSymIv);
-}
-
-static UA_StatusCode
-channelContext_compareCertificate_sp_basic128rsa15(const Basic128Rsa15_ChannelContext *cc,
-                                                   const UA_ByteString *certificate) {
-    if(cc == NULL || certificate == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    mbedtls_x509_crt cert;
-    mbedtls_x509_crt_init(&cert);
-    int mbedErr = mbedtls_x509_crt_parse(&cert, certificate->data, certificate->length);
-    if(mbedErr)
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(cert.raw.len != cc->remoteCertificate.raw.len ||
-       memcmp(cert.raw.p, cc->remoteCertificate.raw.p, cert.raw.len) != 0)
-        retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-
-    mbedtls_x509_crt_free(&cert);
-    return retval;
-}
-
-static void
-deleteMembers_sp_basic128rsa15(UA_SecurityPolicy *securityPolicy) {
-    if(securityPolicy == NULL)
-        return;
-
-    if(securityPolicy->policyContext == NULL)
-        return;
-
-    UA_ByteString_deleteMembers(&securityPolicy->localCertificate);
-
-    /* delete all allocated members in the context */
-    Basic128Rsa15_PolicyContext *pc = (Basic128Rsa15_PolicyContext *)
-        securityPolicy->policyContext;
-
-    mbedtls_ctr_drbg_free(&pc->drbgContext);
-    mbedtls_entropy_free(&pc->entropyContext);
-    mbedtls_pk_free(&pc->localPrivateKey);
-    mbedtls_md_free(&pc->sha1MdContext);
-    UA_ByteString_deleteMembers(&pc->localCertThumbprint);
-
-    UA_LOG_DEBUG(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                 "Deleted members of EndpointContext for sp_basic128rsa15");
-
-    UA_free(pc);
-    securityPolicy->policyContext = NULL;
-}
-
-static UA_StatusCode
-updateCertificateAndPrivateKey_sp_basic128rsa15(UA_SecurityPolicy *securityPolicy,
-                                                const UA_ByteString newCertificate,
-                                                const UA_ByteString newPrivateKey) {
-    if(securityPolicy == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    if(securityPolicy->policyContext == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    Basic128Rsa15_PolicyContext *pc = (Basic128Rsa15_PolicyContext *)securityPolicy->policyContext;
-
-    UA_ByteString_deleteMembers(&securityPolicy->localCertificate);
-
-    UA_StatusCode retval = UA_ByteString_allocBuffer(&securityPolicy->localCertificate, newCertificate.length + 1);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    memcpy(securityPolicy->localCertificate.data, newCertificate.data, newCertificate.length);
-    securityPolicy->localCertificate.data[newCertificate.length] = '\0';
-    securityPolicy->localCertificate.length--;
-
-    /* Set the new private key */
-    mbedtls_pk_free(&pc->localPrivateKey);
-    mbedtls_pk_init(&pc->localPrivateKey);
-    int mbedErr = mbedtls_pk_parse_key(&pc->localPrivateKey,
-                                       newPrivateKey.data, newPrivateKey.length,
-                                       NULL, 0);
-    if(mbedErr) {
-        retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-        goto error;
-    }
-
-    retval = asym_makeThumbprint_sp_basic128rsa15(pc->securityPolicy,
-                                                  &securityPolicy->localCertificate,
-                                                  &pc->localCertThumbprint);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-
-    return retval;
-
-    error:
-    UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                 "Could not update certificate and private key");
-    if(securityPolicy->policyContext != NULL)
-        deleteMembers_sp_basic128rsa15(securityPolicy);
-    return retval;
-}
-
-static UA_StatusCode
-policyContext_newContext_sp_basic128rsa15(UA_SecurityPolicy *securityPolicy,
-                                          const UA_ByteString localPrivateKey) {
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(securityPolicy == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    if (localPrivateKey.length == 0) {
-        UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                     "Can not initialize security policy. Private key is empty.");
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-
-    Basic128Rsa15_PolicyContext *pc = (Basic128Rsa15_PolicyContext *)
-        UA_malloc(sizeof(Basic128Rsa15_PolicyContext));
-    securityPolicy->policyContext = (void *)pc;
-    if(!pc) {
-        retval = UA_STATUSCODE_BADOUTOFMEMORY;
-        goto error;
-    }
-
-    /* Initialize the PolicyContext */
-    memset(pc, 0, sizeof(Basic128Rsa15_PolicyContext));
-    mbedtls_ctr_drbg_init(&pc->drbgContext);
-    mbedtls_entropy_init(&pc->entropyContext);
-    mbedtls_pk_init(&pc->localPrivateKey);
-    mbedtls_md_init(&pc->sha1MdContext);
-    pc->securityPolicy = securityPolicy;
-
-    /* Initialized the message digest */
-    const mbedtls_md_info_t *const mdInfo = mbedtls_md_info_from_type(MBEDTLS_MD_SHA1);
-    int mbedErr = mbedtls_md_setup(&pc->sha1MdContext, mdInfo, MBEDTLS_MD_SHA1);
-    if(mbedErr) {
-        retval = UA_STATUSCODE_BADOUTOFMEMORY;
-        goto error;
-    }
-
-    /* Add the system entropy source */
-    mbedErr = mbedtls_entropy_add_source(&pc->entropyContext,
-                                         mbedtls_platform_entropy_poll, NULL, 0,
-                                         MBEDTLS_ENTROPY_SOURCE_STRONG);
-    if(mbedErr) {
-        retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-        goto error;
-    }
-
-    /* Seed the RNG */
-    char *personalization = "open62541-drbg";
-    mbedErr = mbedtls_ctr_drbg_seed(&pc->drbgContext, mbedtls_entropy_func,
-                                    &pc->entropyContext,
-                                    (const unsigned char *)personalization, 14);
-    if(mbedErr) {
-        retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-        goto error;
-    }
-
-    /* Set the private key */
-    mbedErr = mbedtls_pk_parse_key(&pc->localPrivateKey,
-                                   localPrivateKey.data, localPrivateKey.length,
-                                   NULL, 0);
-    if(mbedErr) {
-        retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-        goto error;
-    }
-
-    /* Set the local certificate thumbprint */
-    retval = UA_ByteString_allocBuffer(&pc->localCertThumbprint, UA_SHA1_LENGTH);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-    retval = asym_makeThumbprint_sp_basic128rsa15(pc->securityPolicy,
-                                                  &securityPolicy->localCertificate,
-                                                  &pc->localCertThumbprint);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-
-    return UA_STATUSCODE_GOOD;
-
-error:
-    UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                 "Could not create securityContext: %s", UA_StatusCode_name(retval));
-    if(securityPolicy->policyContext != NULL)
-        deleteMembers_sp_basic128rsa15(securityPolicy);
-    return retval;
-}
-
-UA_StatusCode
-UA_SecurityPolicy_Basic128Rsa15(UA_SecurityPolicy *policy,
-                                UA_CertificateVerification *certificateVerification,
-                                const UA_ByteString localCertificate,
-                                const UA_ByteString localPrivateKey, const UA_Logger *logger) {
-    memset(policy, 0, sizeof(UA_SecurityPolicy));
-    policy->logger = logger;
-
-    policy->policyUri = UA_STRING("http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15");
-
-    UA_SecurityPolicyAsymmetricModule *const asymmetricModule = &policy->asymmetricModule;
-    UA_SecurityPolicySymmetricModule *const symmetricModule = &policy->symmetricModule;
-    UA_SecurityPolicyChannelModule *const channelModule = &policy->channelModule;
-
-    /* Copy the certificate and add a NULL to the end */
-    UA_StatusCode retval =
-        UA_ByteString_allocBuffer(&policy->localCertificate, localCertificate.length + 1);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    memcpy(policy->localCertificate.data, localCertificate.data, localCertificate.length);
-    policy->localCertificate.data[localCertificate.length] = '\0';
-    policy->localCertificate.length--;
-    policy->certificateVerification = certificateVerification;
-
-    /* AsymmetricModule */
-    UA_SecurityPolicySignatureAlgorithm *asym_signatureAlgorithm =
-        &asymmetricModule->cryptoModule.signatureAlgorithm;
-    asym_signatureAlgorithm->uri =
-        UA_STRING("http://www.w3.org/2000/09/xmldsig#rsa-sha1\0");
-    asym_signatureAlgorithm->verify =
-        (UA_StatusCode (*)(const UA_SecurityPolicy *, void *,
-                           const UA_ByteString *, const UA_ByteString *))asym_verify_sp_basic128rsa15;
-    asym_signatureAlgorithm->sign =
-        (UA_StatusCode (*)(const UA_SecurityPolicy *, void *,
-                           const UA_ByteString *, UA_ByteString *))asym_sign_sp_basic128rsa15;
-    asym_signatureAlgorithm->getLocalSignatureSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getLocalSignatureSize_sp_basic128rsa15;
-    asym_signatureAlgorithm->getRemoteSignatureSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemoteSignatureSize_sp_basic128rsa15;
-    asym_signatureAlgorithm->getLocalKeyLength = NULL; // TODO: Write function
-    asym_signatureAlgorithm->getRemoteKeyLength = NULL; // TODO: Write function
-
-    UA_SecurityPolicyEncryptionAlgorithm *asym_encryptionAlgorithm =
-        &asymmetricModule->cryptoModule.encryptionAlgorithm;
-    asym_encryptionAlgorithm->uri = UA_STRING("http://www.w3.org/2001/04/xmlenc#rsa-1_5");
-    asym_encryptionAlgorithm->encrypt =
-        (UA_StatusCode(*)(const UA_SecurityPolicy *, void *, UA_ByteString *))asym_encrypt_sp_basic128rsa15;
-    asym_encryptionAlgorithm->decrypt =
-        (UA_StatusCode(*)(const UA_SecurityPolicy *, void *, UA_ByteString *))
-            asym_decrypt_sp_basic128rsa15;
-    asym_encryptionAlgorithm->getLocalKeyLength = NULL; // TODO: Write function
-    asym_encryptionAlgorithm->getRemoteKeyLength =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemoteEncryptionKeyLength_sp_basic128rsa15;
-    asym_encryptionAlgorithm->getLocalBlockSize = NULL; // TODO: Write function
-    asym_encryptionAlgorithm->getRemoteBlockSize = (size_t (*)(const UA_SecurityPolicy *,
-                                                               const void *))asym_getRemoteBlockSize_sp_basic128rsa15;
-    asym_encryptionAlgorithm->getLocalPlainTextBlockSize = NULL; // TODO: Write function
-    asym_encryptionAlgorithm->getRemotePlainTextBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemotePlainTextBlockSize_sp_basic128rsa15;
-
-    asymmetricModule->makeCertificateThumbprint = asym_makeThumbprint_sp_basic128rsa15;
-    asymmetricModule->compareCertificateThumbprint =
-        asymmetricModule_compareCertificateThumbprint_sp_basic128rsa15;
-
-    /* SymmetricModule */
-    symmetricModule->generateKey = sym_generateKey_sp_basic128rsa15;
-    symmetricModule->generateNonce = sym_generateNonce_sp_basic128rsa15;
-
-    UA_SecurityPolicySignatureAlgorithm *sym_signatureAlgorithm =
-        &symmetricModule->cryptoModule.signatureAlgorithm;
-    sym_signatureAlgorithm->uri =
-        UA_STRING("http://www.w3.org/2000/09/xmldsig#hmac-sha1\0");
-    sym_signatureAlgorithm->verify =
-        (UA_StatusCode (*)(const UA_SecurityPolicy *, void *, const UA_ByteString *,
-                           const UA_ByteString *))sym_verify_sp_basic128rsa15;
-    sym_signatureAlgorithm->sign =
-        (UA_StatusCode (*)(const UA_SecurityPolicy *, void *,
-                           const UA_ByteString *, UA_ByteString *))sym_sign_sp_basic128rsa15;
-    sym_signatureAlgorithm->getLocalSignatureSize = sym_getSignatureSize_sp_basic128rsa15;
-    sym_signatureAlgorithm->getRemoteSignatureSize = sym_getSignatureSize_sp_basic128rsa15;
-    sym_signatureAlgorithm->getLocalKeyLength =
-        (size_t (*)(const UA_SecurityPolicy *,
-                    const void *))sym_getSigningKeyLength_sp_basic128rsa15;
-    sym_signatureAlgorithm->getRemoteKeyLength =
-        (size_t (*)(const UA_SecurityPolicy *,
-                    const void *))sym_getSigningKeyLength_sp_basic128rsa15;
-
-    UA_SecurityPolicyEncryptionAlgorithm *sym_encryptionAlgorithm =
-        &symmetricModule->cryptoModule.encryptionAlgorithm;
-    sym_encryptionAlgorithm->uri = UA_STRING("http://www.w3.org/2001/04/xmlenc#aes128-cbc");
-    sym_encryptionAlgorithm->encrypt =
-        (UA_StatusCode(*)(const UA_SecurityPolicy *, void *, UA_ByteString *))sym_encrypt_sp_basic128rsa15;
-    sym_encryptionAlgorithm->decrypt =
-        (UA_StatusCode(*)(const UA_SecurityPolicy *, void *, UA_ByteString *))sym_decrypt_sp_basic128rsa15;
-    sym_encryptionAlgorithm->getLocalKeyLength = sym_getEncryptionKeyLength_sp_basic128rsa15;
-    sym_encryptionAlgorithm->getRemoteKeyLength = sym_getEncryptionKeyLength_sp_basic128rsa15;
-    sym_encryptionAlgorithm->getLocalBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))sym_getEncryptionBlockSize_sp_basic128rsa15;
-    sym_encryptionAlgorithm->getRemoteBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))sym_getEncryptionBlockSize_sp_basic128rsa15;
-    sym_encryptionAlgorithm->getLocalPlainTextBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))sym_getPlainTextBlockSize_sp_basic128rsa15;
-    sym_encryptionAlgorithm->getRemotePlainTextBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))sym_getPlainTextBlockSize_sp_basic128rsa15;
-    symmetricModule->secureChannelNonceLength = 16;
-
-    // Use the same signature algorithm as the asymmetric component for certificate signing (see standard)
-    policy->certificateSigningAlgorithm = policy->asymmetricModule.cryptoModule.signatureAlgorithm;
-
-    /* ChannelModule */
-    channelModule->newContext = channelContext_newContext_sp_basic128rsa15;
-    channelModule->deleteContext = (void (*)(void *))
-        channelContext_deleteContext_sp_basic128rsa15;
-
-    channelModule->setLocalSymEncryptingKey = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setLocalSymEncryptingKey_sp_basic128rsa15;
-    channelModule->setLocalSymSigningKey = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setLocalSymSigningKey_sp_basic128rsa15;
-    channelModule->setLocalSymIv = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setLocalSymIv_sp_basic128rsa15;
-
-    channelModule->setRemoteSymEncryptingKey = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setRemoteSymEncryptingKey_sp_basic128rsa15;
-    channelModule->setRemoteSymSigningKey = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setRemoteSymSigningKey_sp_basic128rsa15;
-    channelModule->setRemoteSymIv = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setRemoteSymIv_sp_basic128rsa15;
-
-    channelModule->compareCertificate = (UA_StatusCode (*)(const void *, const UA_ByteString *))
-        channelContext_compareCertificate_sp_basic128rsa15;
-
-    policy->updateCertificateAndPrivateKey = updateCertificateAndPrivateKey_sp_basic128rsa15;
-    policy->deleteMembers = deleteMembers_sp_basic128rsa15;
-
-    return policyContext_newContext_sp_basic128rsa15(policy, localPrivateKey);
-}
-
-#endif
diff --git a/ext/open62541/plugins/securityPolicies/ua_securitypolicy_basic256.c b/ext/open62541/plugins/securityPolicies/ua_securitypolicy_basic256.c
deleted file mode 100644
index 18aff9a..0000000
--- a/ext/open62541/plugins/securityPolicies/ua_securitypolicy_basic256.c
+++ /dev/null
@@ -1,827 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2018 (c) Daniel Feist, Precitec GmbH & Co. KG
- *    Copyright 2019 (c) Kalycito Infotech Private Limited
- *
- */
-
-#include <open62541/plugin/securitypolicy.h>
-
-#ifdef UA_ENABLE_ENCRYPTION
-
-#include <open62541/plugin/pki.h>
-#include <open62541/plugin/securitypolicy_default.h>
-#include <open62541/plugin/securitypolicy_mbedtls_common.h>
-#include <open62541/types.h>
-#include <open62541/util.h>
-
-
-#include <mbedtls/aes.h>
-#include <mbedtls/entropy.h>
-#include <mbedtls/entropy_poll.h>
-#include <mbedtls/error.h>
-#include <mbedtls/sha1.h>
-#include <mbedtls/version.h>
-
-/* Notes:
- * mbedTLS' AES allows in-place encryption and decryption. Sow we don't have to
- * allocate temp buffers.
- * https://tls.mbed.org/discussions/generic/in-place-decryption-with-aes256-same-input-output-buffer
- */
-
-#define UA_SECURITYPOLICY_BASIC256SHA1_RSAPADDING_LEN 42
-#define UA_SHA1_LENGTH 20
-#define UA_BASIC256_SYM_SIGNING_KEY_LENGTH 24
-#define UA_SECURITYPOLICY_BASIC256_SYM_KEY_LENGTH 32
-#define UA_SECURITYPOLICY_BASIC256_SYM_ENCRYPTION_BLOCK_SIZE 16
-#define UA_SECURITYPOLICY_BASIC256_SYM_PLAIN_TEXT_BLOCK_SIZE 16
-#define UA_SECURITYPOLICY_BASIC256_MINASYMKEYLENGTH 128
-#define UA_SECURITYPOLICY_BASIC256_MAXASYMKEYLENGTH 512
-
-typedef struct {
-    const UA_SecurityPolicy *securityPolicy;
-    UA_ByteString localCertThumbprint;
-
-    mbedtls_ctr_drbg_context drbgContext;
-    mbedtls_entropy_context entropyContext;
-    mbedtls_md_context_t sha1MdContext;
-    mbedtls_pk_context localPrivateKey;
-} Basic256_PolicyContext;
-
-typedef struct {
-    Basic256_PolicyContext *policyContext;
-
-    UA_ByteString localSymSigningKey;
-    UA_ByteString localSymEncryptingKey;
-    UA_ByteString localSymIv;
-
-    UA_ByteString remoteSymSigningKey;
-    UA_ByteString remoteSymEncryptingKey;
-    UA_ByteString remoteSymIv;
-
-    mbedtls_x509_crt remoteCertificate;
-} Basic256_ChannelContext;
-
-/********************/
-/* AsymmetricModule */
-/********************/
-
-/* VERIFY AsymmetricSignatureAlgorithm_RSA-PKCS15-SHA2-256 */
-static UA_StatusCode
-asym_verify_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                        Basic256_ChannelContext *cc,
-                        const UA_ByteString *message,
-                        const UA_ByteString *signature) {
-    if(securityPolicy == NULL || message == NULL || signature == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    return mbedtls_verifySig_sha1(&cc->remoteCertificate, message, signature);
-}
-
-/* AsymmetricSignatureAlgorithm_RSA-PKCS15-SHA2-256 */
-static UA_StatusCode
-asym_sign_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                      Basic256_ChannelContext *cc,
-                      const UA_ByteString *message,
-                      UA_ByteString *signature) {
-    if(securityPolicy == NULL || message == NULL || signature == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    Basic256_PolicyContext *pc = cc->policyContext;
-    return mbedtls_sign_sha1(&pc->localPrivateKey, &pc->drbgContext,
-                             message, signature);
-}
-
-static size_t
-asym_getLocalSignatureSize_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                                       const Basic256_ChannelContext *cc) {
-    if(securityPolicy == NULL || cc == NULL)
-        return 0;
-    return mbedtls_pk_rsa(cc->policyContext->localPrivateKey)->len;
-}
-
-static size_t
-asym_getRemoteSignatureSize_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                                        const Basic256_ChannelContext *cc) {
-    if(securityPolicy == NULL || cc == NULL)
-        return 0;
-    return mbedtls_pk_rsa(cc->remoteCertificate.pk)->len;
-}
-
-/* AsymmetricEncryptionAlgorithm_RSA-OAEP-SHA1 */
-static UA_StatusCode
-asym_encrypt_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                         Basic256_ChannelContext *cc,
-                         UA_ByteString *data) {
-    if(securityPolicy == NULL || cc == NULL || data == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    const size_t plainTextBlockSize = securityPolicy->asymmetricModule.cryptoModule.
-        encryptionAlgorithm.getRemotePlainTextBlockSize(securityPolicy, cc);
-
-    mbedtls_rsa_context *remoteRsaContext = mbedtls_pk_rsa(cc->remoteCertificate.pk);
-    mbedtls_rsa_set_padding(remoteRsaContext, MBEDTLS_RSA_PKCS_V21, MBEDTLS_MD_SHA1);
-
-    return mbedtls_encrypt_rsaOaep(remoteRsaContext, &cc->policyContext->drbgContext,
-                                   data, plainTextBlockSize);
-}
-
-/* AsymmetricEncryptionAlgorithm_RSA-OAEP-SHA1 */
-static UA_StatusCode
-asym_decrypt_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                         Basic256_ChannelContext *cc,
-                         UA_ByteString *data) {
-    if(securityPolicy == NULL || cc == NULL || data == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-    return mbedtls_decrypt_rsaOaep(&cc->policyContext->localPrivateKey,
-                                   &cc->policyContext->drbgContext, data);
-}
-
-static size_t
-asym_getRemoteEncryptionKeyLength_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                                              const Basic256_ChannelContext *cc) {
-    return mbedtls_pk_get_len(&cc->remoteCertificate.pk) * 8;
-}
-
-static size_t
-asym_getRemoteBlockSize_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                                          const Basic256_ChannelContext *cc) {
-    mbedtls_rsa_context *const rsaContext = mbedtls_pk_rsa(cc->remoteCertificate.pk);
-    return rsaContext->len;
-}
-
-static size_t
-asym_getRemotePlainTextBlockSize_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                                             const Basic256_ChannelContext *cc) {
-    mbedtls_rsa_context *const rsaContext = mbedtls_pk_rsa(cc->remoteCertificate.pk);
-    return rsaContext->len - UA_SECURITYPOLICY_BASIC256SHA1_RSAPADDING_LEN;
-}
-
-static UA_StatusCode
-asym_makeThumbprint_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                                const UA_ByteString *certificate,
-                                UA_ByteString *thumbprint) {
-    if(securityPolicy == NULL || certificate == NULL || thumbprint == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-    return mbedtls_thumbprint_sha1(certificate, thumbprint);
-}
-
-static UA_StatusCode
-asymmetricModule_compareCertificateThumbprint_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                                                          const UA_ByteString *certificateThumbprint) {
-    if(securityPolicy == NULL || certificateThumbprint == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    Basic256_PolicyContext *pc = (Basic256_PolicyContext *)securityPolicy->policyContext;
-    if(!UA_ByteString_equal(certificateThumbprint, &pc->localCertThumbprint))
-        return UA_STATUSCODE_BADCERTIFICATEINVALID;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/*******************/
-/* SymmetricModule */
-/*******************/
-
-static UA_StatusCode
-sym_verify_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                       Basic256_ChannelContext *cc,
-                       const UA_ByteString *message,
-                       const UA_ByteString *signature) {
-    if(securityPolicy == NULL || cc == NULL || message == NULL || signature == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Compute MAC */
-    if(signature->length != UA_SHA1_LENGTH) {
-        UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                     "Signature size does not have the desired size defined by the security policy");
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-    }
-
-    Basic256_PolicyContext *pc =
-        (Basic256_PolicyContext *)securityPolicy->policyContext;
-    
-    unsigned char mac[UA_SHA1_LENGTH];
-    mbedtls_hmac(&pc->sha1MdContext, &cc->remoteSymSigningKey, message, mac);
-
-    /* Compare with Signature */
-    if(!UA_constantTimeEqual(signature->data, mac, UA_SHA1_LENGTH))
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-sym_sign_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                           const Basic256_ChannelContext *cc,
-                           const UA_ByteString *message,
-                           UA_ByteString *signature) {
-    if(signature->length != UA_SHA1_LENGTH)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    mbedtls_hmac(&cc->policyContext->sha1MdContext, &cc->localSymSigningKey,
-                 message, signature->data);
-    return UA_STATUSCODE_GOOD;
-}
-
-static size_t
-sym_getSignatureSize_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                                 const void *channelContext) {
-    return UA_SHA1_LENGTH;
-}
-
-static size_t
-sym_getSigningKeyLength_sp_basic256(const UA_SecurityPolicy *const securityPolicy,
-                                    const void *const channelContext) {
-    return UA_BASIC256_SYM_SIGNING_KEY_LENGTH;
-}
-
-static size_t
-sym_getEncryptionKeyLength_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                                       const void *channelContext) {
-    return UA_SECURITYPOLICY_BASIC256_SYM_KEY_LENGTH;
-}
-
-static size_t
-sym_getEncryptionBlockSize_sp_basic256(const UA_SecurityPolicy *const securityPolicy,
-                                       const void *const channelContext) {
-    return UA_SECURITYPOLICY_BASIC256_SYM_ENCRYPTION_BLOCK_SIZE;
-}
-
-static size_t
-sym_getPlainTextBlockSize_sp_basic256(const UA_SecurityPolicy *const securityPolicy,
-                                      const void *const channelContext) {
-    return UA_SECURITYPOLICY_BASIC256_SYM_PLAIN_TEXT_BLOCK_SIZE;
-}
-
-static UA_StatusCode
-sym_encrypt_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                              const Basic256_ChannelContext *cc,
-                              UA_ByteString *data) {
-    if(securityPolicy == NULL || cc == NULL || data == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    if(cc->localSymIv.length !=
-       securityPolicy->symmetricModule.cryptoModule.encryptionAlgorithm.
-       getLocalBlockSize(securityPolicy, cc))
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    size_t plainTextBlockSize =
-        securityPolicy->symmetricModule.cryptoModule.encryptionAlgorithm.
-        getLocalPlainTextBlockSize(securityPolicy, cc);
-
-    if(data->length % plainTextBlockSize != 0) {
-        UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                     "Length of data to encrypt is not a multiple of the plain text block size."
-                         "Padding might not have been calculated appropriately.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    /* Keylength in bits */
-    unsigned int keylength = (unsigned int)(cc->localSymEncryptingKey.length * 8);
-    mbedtls_aes_context aesContext;
-    int mbedErr = mbedtls_aes_setkey_enc(&aesContext, cc->localSymEncryptingKey.data, keylength);
-    if(mbedErr)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString ivCopy;
-    UA_StatusCode retval = UA_ByteString_copy(&cc->localSymIv, &ivCopy);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    mbedErr = mbedtls_aes_crypt_cbc(&aesContext, MBEDTLS_AES_ENCRYPT, data->length,
-                                    ivCopy.data, data->data, data->data);
-    if(mbedErr)
-        retval = UA_STATUSCODE_BADINTERNALERROR;
-    UA_ByteString_deleteMembers(&ivCopy);
-    return retval;
-}
-
-static UA_StatusCode
-sym_decrypt_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                              const Basic256_ChannelContext *cc,
-                              UA_ByteString *data) {
-    if(securityPolicy == NULL || cc == NULL || data == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    size_t encryptionBlockSize =
-        securityPolicy->symmetricModule.cryptoModule.encryptionAlgorithm.
-        getRemoteBlockSize(securityPolicy, cc);
-
-    if(cc->remoteSymIv.length != encryptionBlockSize)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    if(data->length % encryptionBlockSize != 0) {
-        UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                     "Length of data to decrypt is not a multiple of the encryptingBlock size.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    unsigned int keylength = (unsigned int)(cc->remoteSymEncryptingKey.length * 8);
-    mbedtls_aes_context aesContext;
-    int mbedErr = mbedtls_aes_setkey_dec(&aesContext, cc->remoteSymEncryptingKey.data, keylength);
-    if(mbedErr)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString ivCopy;
-    UA_StatusCode retval = UA_ByteString_copy(&cc->remoteSymIv, &ivCopy);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    mbedErr = mbedtls_aes_crypt_cbc(&aesContext, MBEDTLS_AES_DECRYPT, data->length,
-                                    ivCopy.data, data->data, data->data);
-    if(mbedErr)
-        retval = UA_STATUSCODE_BADINTERNALERROR;
-    UA_ByteString_deleteMembers(&ivCopy);
-    return retval;
-}
-
-static UA_StatusCode
-sym_generateKey_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                            const UA_ByteString *secret, const UA_ByteString *seed,
-                            UA_ByteString *out) {
-    if(securityPolicy == NULL || secret == NULL || seed == NULL || out == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    Basic256_PolicyContext *pc =
-        (Basic256_PolicyContext *)securityPolicy->policyContext;
-
-    return mbedtls_generateKey(&pc->sha1MdContext, secret, seed, out);
-}
-
-static UA_StatusCode
-sym_generateNonce_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                              UA_ByteString *out) {
-    if(securityPolicy == NULL || securityPolicy->policyContext == NULL || out == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    Basic256_PolicyContext *pc =
-        (Basic256_PolicyContext *)securityPolicy->policyContext;
-
-    int mbedErr = mbedtls_ctr_drbg_random(&pc->drbgContext, out->data, out->length);
-    if(mbedErr)
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/*****************/
-/* ChannelModule */
-/*****************/
-
-/* Assumes that the certificate has been verified externally */
-static UA_StatusCode
-parseRemoteCertificate_sp_basic256(Basic256_ChannelContext *cc,
-                                   const UA_ByteString *remoteCertificate) {
-    if(remoteCertificate == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Parse the certificate */
-    int mbedErr = mbedtls_x509_crt_parse(&cc->remoteCertificate, remoteCertificate->data,
-                                         remoteCertificate->length);
-    if(mbedErr)
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-
-    /* Check the key length */
-    mbedtls_rsa_context *rsaContext = mbedtls_pk_rsa(cc->remoteCertificate.pk);
-    if(rsaContext->len < UA_SECURITYPOLICY_BASIC256_MINASYMKEYLENGTH ||
-       rsaContext->len > UA_SECURITYPOLICY_BASIC256_MAXASYMKEYLENGTH)
-        return UA_STATUSCODE_BADCERTIFICATEUSENOTALLOWED;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-channelContext_deleteContext_sp_basic256(Basic256_ChannelContext *cc) {
-    UA_ByteString_deleteMembers(&cc->localSymSigningKey);
-    UA_ByteString_deleteMembers(&cc->localSymEncryptingKey);
-    UA_ByteString_deleteMembers(&cc->localSymIv);
-
-    UA_ByteString_deleteMembers(&cc->remoteSymSigningKey);
-    UA_ByteString_deleteMembers(&cc->remoteSymEncryptingKey);
-    UA_ByteString_deleteMembers(&cc->remoteSymIv);
-
-    mbedtls_x509_crt_free(&cc->remoteCertificate);
-
-    UA_free(cc);
-}
-
-static UA_StatusCode
-channelContext_newContext_sp_basic256(const UA_SecurityPolicy *securityPolicy,
-                                      const UA_ByteString *remoteCertificate,
-                                      void **pp_contextData) {
-    if(securityPolicy == NULL || remoteCertificate == NULL || pp_contextData == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Allocate the channel context */
-    *pp_contextData = UA_malloc(sizeof(Basic256_ChannelContext));
-    if(*pp_contextData == NULL)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    Basic256_ChannelContext *cc = (Basic256_ChannelContext *)*pp_contextData;
-
-    /* Initialize the channel context */
-    cc->policyContext = (Basic256_PolicyContext *)securityPolicy->policyContext;
-
-    UA_ByteString_init(&cc->localSymSigningKey);
-    UA_ByteString_init(&cc->localSymEncryptingKey);
-    UA_ByteString_init(&cc->localSymIv);
-
-    UA_ByteString_init(&cc->remoteSymSigningKey);
-    UA_ByteString_init(&cc->remoteSymEncryptingKey);
-    UA_ByteString_init(&cc->remoteSymIv);
-
-    mbedtls_x509_crt_init(&cc->remoteCertificate);
-
-    // TODO: this can be optimized so that we dont allocate memory before parsing the certificate
-    UA_StatusCode retval = parseRemoteCertificate_sp_basic256(cc, remoteCertificate);
-    if(retval != UA_STATUSCODE_GOOD) {
-        channelContext_deleteContext_sp_basic256(cc);
-        *pp_contextData = NULL;
-    }
-    return retval;
-}
-
-static UA_StatusCode
-channelContext_setLocalSymEncryptingKey_sp_basic256(Basic256_ChannelContext *cc,
-                                                    const UA_ByteString *key) {
-    if(key == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->localSymEncryptingKey);
-    return UA_ByteString_copy(key, &cc->localSymEncryptingKey);
-}
-
-static UA_StatusCode
-channelContext_setLocalSymSigningKey_sp_basic256(Basic256_ChannelContext *cc,
-                                                 const UA_ByteString *key) {
-    if(key == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->localSymSigningKey);
-    return UA_ByteString_copy(key, &cc->localSymSigningKey);
-}
-
-
-static UA_StatusCode
-channelContext_setLocalSymIv_sp_basic256(Basic256_ChannelContext *cc,
-                                         const UA_ByteString *iv) {
-    if(iv == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->localSymIv);
-    return UA_ByteString_copy(iv, &cc->localSymIv);
-}
-
-static UA_StatusCode
-channelContext_setRemoteSymEncryptingKey_sp_basic256(Basic256_ChannelContext *cc,
-                                                     const UA_ByteString *key) {
-    if(key == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->remoteSymEncryptingKey);
-    return UA_ByteString_copy(key, &cc->remoteSymEncryptingKey);
-}
-
-static UA_StatusCode
-channelContext_setRemoteSymSigningKey_sp_basic256(Basic256_ChannelContext *cc,
-                                                  const UA_ByteString *key) {
-    if(key == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->remoteSymSigningKey);
-    return UA_ByteString_copy(key, &cc->remoteSymSigningKey);
-}
-
-static UA_StatusCode
-channelContext_setRemoteSymIv_sp_basic256(Basic256_ChannelContext *cc,
-                                          const UA_ByteString *iv) {
-    if(iv == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->remoteSymIv);
-    return UA_ByteString_copy(iv, &cc->remoteSymIv);
-}
-
-static UA_StatusCode
-channelContext_compareCertificate_sp_basic256(const Basic256_ChannelContext *cc,
-                                              const UA_ByteString *certificate) {
-    if(cc == NULL || certificate == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    mbedtls_x509_crt cert;
-    mbedtls_x509_crt_init(&cert);
-    int mbedErr = mbedtls_x509_crt_parse(&cert, certificate->data, certificate->length);
-    if(mbedErr)
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(cert.raw.len != cc->remoteCertificate.raw.len ||
-       memcmp(cert.raw.p, cc->remoteCertificate.raw.p, cert.raw.len) != 0)
-        retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-
-    mbedtls_x509_crt_free(&cert);
-    return retval;
-}
-
-static void
-deleteMembers_sp_basic256(UA_SecurityPolicy *securityPolicy) {
-    if(securityPolicy == NULL)
-        return;
-
-    if(securityPolicy->policyContext == NULL)
-        return;
-
-    UA_ByteString_deleteMembers(&securityPolicy->localCertificate);
-
-    /* delete all allocated members in the context */
-    Basic256_PolicyContext *pc = (Basic256_PolicyContext *)
-        securityPolicy->policyContext;
-
-    mbedtls_ctr_drbg_free(&pc->drbgContext);
-    mbedtls_entropy_free(&pc->entropyContext);
-    mbedtls_pk_free(&pc->localPrivateKey);
-    mbedtls_md_free(&pc->sha1MdContext);
-    UA_ByteString_deleteMembers(&pc->localCertThumbprint);
-
-    UA_LOG_DEBUG(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                 "Deleted members of EndpointContext for sp_basic256");
-
-    UA_free(pc);
-    securityPolicy->policyContext = NULL;
-}
-
-static UA_StatusCode
-updateCertificateAndPrivateKey_sp_basic256(UA_SecurityPolicy *securityPolicy,
-                                           const UA_ByteString newCertificate,
-                                           const UA_ByteString newPrivateKey) {
-    if(securityPolicy == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    if(securityPolicy->policyContext == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    Basic256_PolicyContext *pc = (Basic256_PolicyContext *)
-        securityPolicy->policyContext;
-
-    UA_ByteString_deleteMembers(&securityPolicy->localCertificate);
-
-    UA_StatusCode retval = UA_ByteString_allocBuffer(&securityPolicy->localCertificate,
-                                                     newCertificate.length + 1);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    memcpy(securityPolicy->localCertificate.data, newCertificate.data, newCertificate.length);
-    securityPolicy->localCertificate.data[newCertificate.length] = '\0';
-    securityPolicy->localCertificate.length--;
-
-    /* Set the new private key */
-    mbedtls_pk_free(&pc->localPrivateKey);
-    mbedtls_pk_init(&pc->localPrivateKey);
-    int mbedErr = mbedtls_pk_parse_key(&pc->localPrivateKey,
-                                       newPrivateKey.data, newPrivateKey.length,
-                                       NULL, 0);
-    if(mbedErr) {
-        retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-        goto error;
-    }
-
-    retval = asym_makeThumbprint_sp_basic256(pc->securityPolicy,
-                                             &securityPolicy->localCertificate,
-                                             &pc->localCertThumbprint);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-
-    return retval;
-
-    error:
-    UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                 "Could not update certificate and private key");
-    if(securityPolicy->policyContext != NULL)
-        deleteMembers_sp_basic256(securityPolicy);
-    return retval;
-}
-
-static UA_StatusCode
-policyContext_newContext_sp_basic256(UA_SecurityPolicy *securityPolicy,
-                                     const UA_ByteString localPrivateKey) {
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(securityPolicy == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    if (localPrivateKey.length == 0) {
-        UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                     "Can not initialize security policy. Private key is empty.");
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-
-    Basic256_PolicyContext *pc = (Basic256_PolicyContext *)
-        UA_malloc(sizeof(Basic256_PolicyContext));
-    securityPolicy->policyContext = (void *)pc;
-    if(!pc) {
-        retval = UA_STATUSCODE_BADOUTOFMEMORY;
-        goto error;
-    }
-
-    /* Initialize the PolicyContext */
-    memset(pc, 0, sizeof(Basic256_PolicyContext));
-    mbedtls_ctr_drbg_init(&pc->drbgContext);
-    mbedtls_entropy_init(&pc->entropyContext);
-    mbedtls_pk_init(&pc->localPrivateKey);
-    mbedtls_md_init(&pc->sha1MdContext);
-    pc->securityPolicy = securityPolicy;
-
-    /* Initialized the message digest */
-    const mbedtls_md_info_t *mdInfo = mbedtls_md_info_from_type(MBEDTLS_MD_SHA1);
-    int mbedErr = mbedtls_md_setup(&pc->sha1MdContext, mdInfo, MBEDTLS_MD_SHA1);
-    if(mbedErr) {
-        retval = UA_STATUSCODE_BADOUTOFMEMORY;
-        goto error;
-    }
-
-    /* Add the system entropy source */
-    mbedErr = mbedtls_entropy_add_source(&pc->entropyContext,
-                                         mbedtls_platform_entropy_poll, NULL, 0,
-                                         MBEDTLS_ENTROPY_SOURCE_STRONG);
-    if(mbedErr) {
-        retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-        goto error;
-    }
-
-    /* Seed the RNG */
-    char *personalization = "open62541-drbg";
-    mbedErr = mbedtls_ctr_drbg_seed(&pc->drbgContext, mbedtls_entropy_func,
-                                    &pc->entropyContext,
-                                    (const unsigned char *)personalization, 14);
-    if(mbedErr) {
-        retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-        goto error;
-    }
-
-    /* Set the private key */
-    mbedErr = mbedtls_pk_parse_key(&pc->localPrivateKey, localPrivateKey.data,
-                                   localPrivateKey.length, NULL, 0);
-    if(mbedErr) {
-        retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-        goto error;
-    }
-
-    /* Set the local certificate thumbprint */
-    retval = UA_ByteString_allocBuffer(&pc->localCertThumbprint, UA_SHA1_LENGTH);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-    retval = asym_makeThumbprint_sp_basic256(pc->securityPolicy,
-                                                  &securityPolicy->localCertificate,
-                                                  &pc->localCertThumbprint);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-
-    return UA_STATUSCODE_GOOD;
-
-error:
-    UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                 "Could not create securityContext: %s", UA_StatusCode_name(retval));
-    if(securityPolicy->policyContext != NULL)
-        deleteMembers_sp_basic256(securityPolicy);
-    return retval;
-}
-
-UA_StatusCode
-UA_SecurityPolicy_Basic256(UA_SecurityPolicy *policy,
-                           UA_CertificateVerification *certificateVerification,
-                           const UA_ByteString localCertificate,
-                           const UA_ByteString localPrivateKey, const UA_Logger *logger) {
-    memset(policy, 0, sizeof(UA_SecurityPolicy));
-    policy->logger = logger;
-
-    policy->policyUri = UA_STRING("http://opcfoundation.org/UA/SecurityPolicy#Basic256");
-
-    UA_SecurityPolicyAsymmetricModule *const asymmetricModule = &policy->asymmetricModule;
-    UA_SecurityPolicySymmetricModule *const symmetricModule = &policy->symmetricModule;
-    UA_SecurityPolicyChannelModule *const channelModule = &policy->channelModule;
-
-    /* Copy the certificate and add a NULL to the end */
-    UA_StatusCode retval =
-        UA_ByteString_allocBuffer(&policy->localCertificate, localCertificate.length + 1);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    memcpy(policy->localCertificate.data, localCertificate.data, localCertificate.length);
-    policy->localCertificate.data[localCertificate.length] = '\0';
-    policy->localCertificate.length--;
-    policy->certificateVerification = certificateVerification;
-
-    /* AsymmetricModule */
-    UA_SecurityPolicySignatureAlgorithm *asym_signatureAlgorithm =
-        &asymmetricModule->cryptoModule.signatureAlgorithm;
-    asym_signatureAlgorithm->uri =
-        UA_STRING("http://www.w3.org/2000/09/xmldsig#rsa-sha1\0");
-    asym_signatureAlgorithm->verify =
-        (UA_StatusCode (*)(const UA_SecurityPolicy *, void *,
-                           const UA_ByteString *, const UA_ByteString *))asym_verify_sp_basic256;
-    asym_signatureAlgorithm->sign =
-        (UA_StatusCode (*)(const UA_SecurityPolicy *, void *,
-                           const UA_ByteString *, UA_ByteString *))asym_sign_sp_basic256;
-    asym_signatureAlgorithm->getLocalSignatureSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getLocalSignatureSize_sp_basic256;
-    asym_signatureAlgorithm->getRemoteSignatureSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemoteSignatureSize_sp_basic256;
-    asym_signatureAlgorithm->getLocalKeyLength = NULL; // TODO: Write function
-    asym_signatureAlgorithm->getRemoteKeyLength = NULL; // TODO: Write function
-
-    UA_SecurityPolicyEncryptionAlgorithm *asym_encryptionAlgorithm =
-        &asymmetricModule->cryptoModule.encryptionAlgorithm;
-    asym_encryptionAlgorithm->uri = UA_STRING("http://www.w3.org/2001/04/xmlenc#rsa-oaep\0");
-    asym_encryptionAlgorithm->encrypt =
-        (UA_StatusCode(*)(const UA_SecurityPolicy *, void *, UA_ByteString *))asym_encrypt_sp_basic256;
-    asym_encryptionAlgorithm->decrypt =
-        (UA_StatusCode(*)(const UA_SecurityPolicy *, void *, UA_ByteString *))
-            asym_decrypt_sp_basic256;
-    asym_encryptionAlgorithm->getLocalKeyLength = NULL; // TODO: Write function
-    asym_encryptionAlgorithm->getRemoteKeyLength =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemoteEncryptionKeyLength_sp_basic256;
-    asym_encryptionAlgorithm->getLocalBlockSize = NULL; // TODO: Write function
-    asym_encryptionAlgorithm->getRemoteBlockSize = (size_t (*)(const UA_SecurityPolicy *,
-                                                               const void *))asym_getRemoteBlockSize_sp_basic256;
-    asym_encryptionAlgorithm->getLocalPlainTextBlockSize = NULL; // TODO: Write function
-    asym_encryptionAlgorithm->getRemotePlainTextBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemotePlainTextBlockSize_sp_basic256;
-
-    asymmetricModule->makeCertificateThumbprint = asym_makeThumbprint_sp_basic256;
-    asymmetricModule->compareCertificateThumbprint =
-        asymmetricModule_compareCertificateThumbprint_sp_basic256;
-
-    /* SymmetricModule */
-    symmetricModule->generateKey = sym_generateKey_sp_basic256;
-    symmetricModule->generateNonce = sym_generateNonce_sp_basic256;
-
-    UA_SecurityPolicySignatureAlgorithm *sym_signatureAlgorithm =
-        &symmetricModule->cryptoModule.signatureAlgorithm;
-    sym_signatureAlgorithm->uri =
-        UA_STRING("http://www.w3.org/2000/09/xmldsig#hmac-sha1\0");
-    sym_signatureAlgorithm->verify =
-        (UA_StatusCode (*)(const UA_SecurityPolicy *, void *, const UA_ByteString *,
-                           const UA_ByteString *))sym_verify_sp_basic256;
-    sym_signatureAlgorithm->sign =
-        (UA_StatusCode (*)(const UA_SecurityPolicy *, void *,
-                           const UA_ByteString *, UA_ByteString *))sym_sign_sp_basic256;
-    sym_signatureAlgorithm->getLocalSignatureSize = sym_getSignatureSize_sp_basic256;
-    sym_signatureAlgorithm->getRemoteSignatureSize = sym_getSignatureSize_sp_basic256;
-    sym_signatureAlgorithm->getLocalKeyLength =
-        (size_t (*)(const UA_SecurityPolicy *,
-                    const void *))sym_getSigningKeyLength_sp_basic256;
-    sym_signatureAlgorithm->getRemoteKeyLength =
-        (size_t (*)(const UA_SecurityPolicy *,
-                    const void *))sym_getSigningKeyLength_sp_basic256;
-
-    UA_SecurityPolicyEncryptionAlgorithm *sym_encryptionAlgorithm =
-        &symmetricModule->cryptoModule.encryptionAlgorithm;
-    sym_encryptionAlgorithm->uri = UA_STRING("http://www.w3.org/2001/04/xmlenc#aes256-cbc\0");
-    sym_encryptionAlgorithm->encrypt =
-        (UA_StatusCode(*)(const UA_SecurityPolicy *, void *, UA_ByteString *))sym_encrypt_sp_basic256;
-    sym_encryptionAlgorithm->decrypt =
-        (UA_StatusCode(*)(const UA_SecurityPolicy *, void *, UA_ByteString *))sym_decrypt_sp_basic256;
-    sym_encryptionAlgorithm->getLocalKeyLength = sym_getEncryptionKeyLength_sp_basic256;
-    sym_encryptionAlgorithm->getRemoteKeyLength = sym_getEncryptionKeyLength_sp_basic256;
-    sym_encryptionAlgorithm->getLocalBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))sym_getEncryptionBlockSize_sp_basic256;
-    sym_encryptionAlgorithm->getRemoteBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))sym_getEncryptionBlockSize_sp_basic256;
-    sym_encryptionAlgorithm->getLocalPlainTextBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))sym_getPlainTextBlockSize_sp_basic256;
-    sym_encryptionAlgorithm->getRemotePlainTextBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))sym_getPlainTextBlockSize_sp_basic256;
-    symmetricModule->secureChannelNonceLength = 32;
-
-    // Use the same signature algorithm as the asymmetric component for certificate signing (see standard)
-    policy->certificateSigningAlgorithm = policy->asymmetricModule.cryptoModule.signatureAlgorithm;
-
-    /* ChannelModule */
-    channelModule->newContext = channelContext_newContext_sp_basic256;
-    channelModule->deleteContext = (void (*)(void *))
-        channelContext_deleteContext_sp_basic256;
-
-    channelModule->setLocalSymEncryptingKey = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setLocalSymEncryptingKey_sp_basic256;
-    channelModule->setLocalSymSigningKey = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setLocalSymSigningKey_sp_basic256;
-    channelModule->setLocalSymIv = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setLocalSymIv_sp_basic256;
-
-    channelModule->setRemoteSymEncryptingKey = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setRemoteSymEncryptingKey_sp_basic256;
-    channelModule->setRemoteSymSigningKey = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setRemoteSymSigningKey_sp_basic256;
-    channelModule->setRemoteSymIv = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setRemoteSymIv_sp_basic256;
-
-    channelModule->compareCertificate = (UA_StatusCode (*)(const void *, const UA_ByteString *))
-        channelContext_compareCertificate_sp_basic256;
-
-    policy->updateCertificateAndPrivateKey = updateCertificateAndPrivateKey_sp_basic256;
-    policy->deleteMembers = deleteMembers_sp_basic256;
-
-    return policyContext_newContext_sp_basic256(policy, localPrivateKey);
-}
-
-#endif
diff --git a/ext/open62541/plugins/securityPolicies/ua_securitypolicy_basic256sha256.c b/ext/open62541/plugins/securityPolicies/ua_securitypolicy_basic256sha256.c
deleted file mode 100644
index 18f628d..0000000
--- a/ext/open62541/plugins/securityPolicies/ua_securitypolicy_basic256sha256.c
+++ /dev/null
@@ -1,867 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2018 (c) Daniel Feist, Precitec GmbH & Co. KG
- */
-
-#include <open62541/plugin/securitypolicy_default.h>
-#include <open62541/plugin/securitypolicy_mbedtls_common.h>
-#include <open62541/util.h>
-
-#ifdef UA_ENABLE_ENCRYPTION
-
-
-#include <mbedtls/aes.h>
-#include <mbedtls/ctr_drbg.h>
-#include <mbedtls/entropy.h>
-#include <mbedtls/entropy_poll.h>
-#include <mbedtls/error.h>
-#include <mbedtls/md.h>
-#include <mbedtls/sha1.h>
-#include <mbedtls/sha256.h>
-#include <mbedtls/version.h>
-#include <mbedtls/x509_crt.h>
-
-/* Notes:
- * mbedTLS' AES allows in-place encryption and decryption. Sow we don't have to
- * allocate temp buffers.
- * https://tls.mbed.org/discussions/generic/in-place-decryption-with-aes256-same-input-output-buffer
- */
-
-#define UA_SECURITYPOLICY_BASIC256SHA256_RSAPADDING_LEN 42
-#define UA_SHA1_LENGTH 20
-#define UA_SHA256_LENGTH 32
-#define UA_BASIC256SHA256_SYM_SIGNING_KEY_LENGTH 32
-#define UA_SECURITYPOLICY_BASIC256SHA256_SYM_KEY_LENGTH 32
-#define UA_SECURITYPOLICY_BASIC256SHA256_SYM_ENCRYPTION_BLOCK_SIZE 16
-#define UA_SECURITYPOLICY_BASIC256SHA256_SYM_PLAIN_TEXT_BLOCK_SIZE 16
-#define UA_SECURITYPOLICY_BASIC256SHA256_MINASYMKEYLENGTH 256
-#define UA_SECURITYPOLICY_BASIC256SHA256_MAXASYMKEYLENGTH 512
-
-typedef struct {
-    const UA_SecurityPolicy *securityPolicy;
-    UA_ByteString localCertThumbprint;
-
-    mbedtls_ctr_drbg_context drbgContext;
-    mbedtls_entropy_context entropyContext;
-    mbedtls_md_context_t sha256MdContext;
-    mbedtls_pk_context localPrivateKey;
-} Basic256Sha256_PolicyContext;
-
-typedef struct {
-    Basic256Sha256_PolicyContext *policyContext;
-
-    UA_ByteString localSymSigningKey;
-    UA_ByteString localSymEncryptingKey;
-    UA_ByteString localSymIv;
-
-    UA_ByteString remoteSymSigningKey;
-    UA_ByteString remoteSymEncryptingKey;
-    UA_ByteString remoteSymIv;
-
-    mbedtls_x509_crt remoteCertificate;
-} Basic256Sha256_ChannelContext;
-
-/********************/
-/* AsymmetricModule */
-/********************/
-
-/* VERIFY AsymmetricSignatureAlgorithm_RSA-PKCS15-SHA2-256 */
-static UA_StatusCode
-asym_verify_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                              Basic256Sha256_ChannelContext *cc,
-                              const UA_ByteString *message,
-                              const UA_ByteString *signature) {
-    if(securityPolicy == NULL || message == NULL || signature == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    unsigned char hash[UA_SHA256_LENGTH];
-#if MBEDTLS_VERSION_NUMBER >= 0x02070000
-    // TODO check return status
-    mbedtls_sha256_ret(message->data, message->length, hash, 0);
-#else
-    mbedtls_sha256(message->data, message->length, hash, 0);
-#endif
-
-    /* Set the RSA settings */
-    mbedtls_rsa_context *rsaContext = mbedtls_pk_rsa(cc->remoteCertificate.pk);
-    mbedtls_rsa_set_padding(rsaContext, MBEDTLS_RSA_PKCS_V15, MBEDTLS_MD_SHA256);
-
-    /* For RSA keys, the default padding type is PKCS#1 v1.5 in mbedtls_pk_verify() */
-    /* Alternatively, use more specific function mbedtls_rsa_rsassa_pkcs1_v15_verify(), i.e. */
-    /* int mbedErr = mbedtls_rsa_rsassa_pkcs1_v15_verify(rsaContext, NULL, NULL,
-                                                         MBEDTLS_RSA_PUBLIC, MBEDTLS_MD_SHA256,
-                                                         UA_SHA256_LENGTH, hash,
-                                                         signature->data); */
-    int mbedErr = mbedtls_pk_verify(&cc->remoteCertificate.pk,
-                                    MBEDTLS_MD_SHA256, hash, UA_SHA256_LENGTH,
-                                    signature->data, signature->length);
-
-    if(mbedErr)
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* AsymmetricSignatureAlgorithm_RSA-PKCS15-SHA2-256 */
-static UA_StatusCode
-asym_sign_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                            Basic256Sha256_ChannelContext *cc,
-                            const UA_ByteString *message,
-                            UA_ByteString *signature) {
-    if(securityPolicy == NULL || message == NULL || signature == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    unsigned char hash[UA_SHA256_LENGTH];
-#if MBEDTLS_VERSION_NUMBER >= 0x02070000
-    // TODO check return status
-    mbedtls_sha256_ret(message->data, message->length, hash, 0);
-#else
-    mbedtls_sha256(message->data, message->length, hash, 0);
-#endif
-
-    Basic256Sha256_PolicyContext *pc = cc->policyContext;
-    mbedtls_rsa_context *rsaContext = mbedtls_pk_rsa(pc->localPrivateKey);
-    mbedtls_rsa_set_padding(rsaContext, MBEDTLS_RSA_PKCS_V15, MBEDTLS_MD_SHA256);
-
-    size_t sigLen = 0;
-
-    /* For RSA keys, the default padding type is PKCS#1 v1.5 in mbedtls_pk_sign */
-    /* Alternatively use more specific function mbedtls_rsa_rsassa_pkcs1_v15_sign() */
-    int mbedErr = mbedtls_pk_sign(&pc->localPrivateKey,
-                                  MBEDTLS_MD_SHA256, hash,
-                                  UA_SHA256_LENGTH, signature->data,
-                                  &sigLen, mbedtls_ctr_drbg_random,
-                                  &pc->drbgContext);
-    if(mbedErr)
-        return UA_STATUSCODE_BADINTERNALERROR;
-    return UA_STATUSCODE_GOOD;
-}
-
-static size_t
-asym_getLocalSignatureSize_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                                             const Basic256Sha256_ChannelContext *cc) {
-    if(securityPolicy == NULL || cc == NULL)
-        return 0;
-
-    return mbedtls_pk_rsa(cc->policyContext->localPrivateKey)->len;
-}
-
-static size_t
-asym_getRemoteSignatureSize_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                                              const Basic256Sha256_ChannelContext *cc) {
-    if(securityPolicy == NULL || cc == NULL)
-        return 0;
-
-    return mbedtls_pk_rsa(cc->remoteCertificate.pk)->len;
-}
-
-/* AsymmetricEncryptionAlgorithm_RSA-OAEP-SHA1 */
-static UA_StatusCode
-asym_encrypt_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                               Basic256Sha256_ChannelContext *cc,
-                               UA_ByteString *data) {
-    if(securityPolicy == NULL || cc == NULL || data == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    const size_t plainTextBlockSize = securityPolicy->asymmetricModule.cryptoModule.
-        encryptionAlgorithm.getRemotePlainTextBlockSize(securityPolicy, cc);
-
-    mbedtls_rsa_context *remoteRsaContext = mbedtls_pk_rsa(cc->remoteCertificate.pk);
-    mbedtls_rsa_set_padding(remoteRsaContext, MBEDTLS_RSA_PKCS_V21, MBEDTLS_MD_SHA1);
-
-    return mbedtls_encrypt_rsaOaep(remoteRsaContext, &cc->policyContext->drbgContext,
-                                   data, plainTextBlockSize);
-}
-
-/* AsymmetricEncryptionAlgorithm_RSA-OAEP-SHA1 */
-static UA_StatusCode
-asym_decrypt_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                               Basic256Sha256_ChannelContext *cc,
-                               UA_ByteString *data) {
-    if(securityPolicy == NULL || cc == NULL || data == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-    return mbedtls_decrypt_rsaOaep(&cc->policyContext->localPrivateKey,
-                                   &cc->policyContext->drbgContext, data);
-}
-
-static size_t
-asym_getRemoteEncryptionKeyLength_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                                                    const Basic256Sha256_ChannelContext *cc) {
-    return mbedtls_pk_get_len(&cc->remoteCertificate.pk) * 8;
-}
-
-static size_t
-asym_getRemoteBlockSize_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                                          const Basic256Sha256_ChannelContext *cc) {
-    mbedtls_rsa_context *const rsaContext = mbedtls_pk_rsa(cc->remoteCertificate.pk);
-    return rsaContext->len;
-}
-
-static size_t
-asym_getRemotePlainTextBlockSize_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                                                   const Basic256Sha256_ChannelContext *cc) {
-    mbedtls_rsa_context *const rsaContext = mbedtls_pk_rsa(cc->remoteCertificate.pk);
-    return rsaContext->len - UA_SECURITYPOLICY_BASIC256SHA256_RSAPADDING_LEN;
-}
-
-static UA_StatusCode
-asym_makeThumbprint_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                                      const UA_ByteString *certificate,
-                                      UA_ByteString *thumbprint) {
-    if(securityPolicy == NULL || certificate == NULL || thumbprint == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-    return mbedtls_thumbprint_sha1(certificate, thumbprint);
-}
-
-static UA_StatusCode
-asymmetricModule_compareCertificateThumbprint_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                                                                const UA_ByteString *certificateThumbprint) {
-    if(securityPolicy == NULL || certificateThumbprint == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    Basic256Sha256_PolicyContext *pc = (Basic256Sha256_PolicyContext *)securityPolicy->policyContext;
-    if(!UA_ByteString_equal(certificateThumbprint, &pc->localCertThumbprint))
-        return UA_STATUSCODE_BADCERTIFICATEINVALID;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/*******************/
-/* SymmetricModule */
-/*******************/
-
-static UA_StatusCode
-sym_verify_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                             Basic256Sha256_ChannelContext *cc,
-                             const UA_ByteString *message,
-                             const UA_ByteString *signature) {
-    if(securityPolicy == NULL || cc == NULL || message == NULL || signature == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Compute MAC */
-    if(signature->length != UA_SHA256_LENGTH) {
-        UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                     "Signature size does not have the desired size defined by the security policy");
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-    }
-
-    Basic256Sha256_PolicyContext *pc =
-        (Basic256Sha256_PolicyContext *)securityPolicy->policyContext;
-
-    unsigned char mac[UA_SHA256_LENGTH];
-    mbedtls_hmac(&pc->sha256MdContext, &cc->remoteSymSigningKey, message, mac);
-
-    /* Compare with Signature */
-    if(!UA_constantTimeEqual(signature->data, mac, UA_SHA256_LENGTH))
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-sym_sign_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                           const Basic256Sha256_ChannelContext *cc,
-                           const UA_ByteString *message,
-                           UA_ByteString *signature) {
-    if(signature->length != UA_SHA256_LENGTH)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    mbedtls_hmac(&cc->policyContext->sha256MdContext, &cc->localSymSigningKey,
-                 message, signature->data);
-    return UA_STATUSCODE_GOOD;
-}
-
-static size_t
-sym_getSignatureSize_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                                       const void *channelContext) {
-    return UA_SHA256_LENGTH;
-}
-
-static size_t
-sym_getSigningKeyLength_sp_basic256sha256(const UA_SecurityPolicy *const securityPolicy,
-                                          const void *const channelContext) {
-    return UA_BASIC256SHA256_SYM_SIGNING_KEY_LENGTH;
-}
-
-static size_t
-sym_getEncryptionKeyLength_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                                             const void *channelContext) {
-    return UA_SECURITYPOLICY_BASIC256SHA256_SYM_KEY_LENGTH;
-}
-
-static size_t
-sym_getEncryptionBlockSize_sp_basic256sha256(const UA_SecurityPolicy *const securityPolicy,
-                                             const void *const channelContext) {
-    return UA_SECURITYPOLICY_BASIC256SHA256_SYM_ENCRYPTION_BLOCK_SIZE;
-}
-
-static size_t
-sym_getPlainTextBlockSize_sp_basic256sha256(const UA_SecurityPolicy *const securityPolicy,
-                                            const void *const channelContext) {
-    return UA_SECURITYPOLICY_BASIC256SHA256_SYM_PLAIN_TEXT_BLOCK_SIZE;
-}
-
-static UA_StatusCode
-sym_encrypt_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                              const Basic256Sha256_ChannelContext *cc,
-                              UA_ByteString *data) {
-    if(securityPolicy == NULL || cc == NULL || data == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    if(cc->localSymIv.length != securityPolicy->symmetricModule.cryptoModule.
-       encryptionAlgorithm.getLocalBlockSize(securityPolicy, cc))
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    size_t plainTextBlockSize = securityPolicy->symmetricModule.cryptoModule.
-        encryptionAlgorithm.getLocalPlainTextBlockSize(securityPolicy, cc);
-
-    if(data->length % plainTextBlockSize != 0) {
-        UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                     "Length of data to encrypt is not a multiple of the plain text block size."
-                     "Padding might not have been calculated appropriately.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    /* Keylength in bits */
-    unsigned int keylength = (unsigned int)(cc->localSymEncryptingKey.length * 8);
-    mbedtls_aes_context aesContext;
-    int mbedErr = mbedtls_aes_setkey_enc(&aesContext, cc->localSymEncryptingKey.data, keylength);
-    if(mbedErr)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString ivCopy;
-    UA_StatusCode retval = UA_ByteString_copy(&cc->localSymIv, &ivCopy);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    mbedErr = mbedtls_aes_crypt_cbc(&aesContext, MBEDTLS_AES_ENCRYPT, data->length,
-                                    ivCopy.data, data->data, data->data);
-    if(mbedErr)
-        retval = UA_STATUSCODE_BADINTERNALERROR;
-    UA_ByteString_deleteMembers(&ivCopy);
-    return retval;
-}
-
-static UA_StatusCode
-sym_decrypt_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                              const Basic256Sha256_ChannelContext *cc,
-                              UA_ByteString *data) {
-    if(securityPolicy == NULL || cc == NULL || data == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    size_t encryptionBlockSize = securityPolicy->symmetricModule.cryptoModule.
-        encryptionAlgorithm.getRemoteBlockSize(securityPolicy, cc);
-
-    if(cc->remoteSymIv.length != encryptionBlockSize)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    if(data->length % encryptionBlockSize != 0) {
-        UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                     "Length of data to decrypt is not a multiple of the encryptingBlock size.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    unsigned int keylength = (unsigned int)(cc->remoteSymEncryptingKey.length * 8);
-    mbedtls_aes_context aesContext;
-    int mbedErr = mbedtls_aes_setkey_dec(&aesContext, cc->remoteSymEncryptingKey.data, keylength);
-    if(mbedErr)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString ivCopy;
-    UA_StatusCode retval = UA_ByteString_copy(&cc->remoteSymIv, &ivCopy);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    mbedErr = mbedtls_aes_crypt_cbc(&aesContext, MBEDTLS_AES_DECRYPT, data->length,
-                                    ivCopy.data, data->data, data->data);
-    if(mbedErr)
-        retval = UA_STATUSCODE_BADINTERNALERROR;
-    UA_ByteString_deleteMembers(&ivCopy);
-    return retval;
-}
-
-static UA_StatusCode
-sym_generateKey_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                                  const UA_ByteString *secret, const UA_ByteString *seed,
-                                  UA_ByteString *out) {
-    if(securityPolicy == NULL || secret == NULL || seed == NULL || out == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    Basic256Sha256_PolicyContext *pc =
-        (Basic256Sha256_PolicyContext *)securityPolicy->policyContext;
-
-    return mbedtls_generateKey(&pc->sha256MdContext, secret, seed, out);
-}
-
-static UA_StatusCode
-sym_generateNonce_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                                    UA_ByteString *out) {
-    if(securityPolicy == NULL || securityPolicy->policyContext == NULL || out == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    Basic256Sha256_PolicyContext *pc =
-        (Basic256Sha256_PolicyContext *)securityPolicy->policyContext;
-    int mbedErr = mbedtls_ctr_drbg_random(&pc->drbgContext, out->data, out->length);
-    if(mbedErr)
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-    return UA_STATUSCODE_GOOD;
-}
-
-/*****************/
-/* ChannelModule */
-/*****************/
-
-/* Assumes that the certificate has been verified externally */
-static UA_StatusCode
-parseRemoteCertificate_sp_basic256sha256(Basic256Sha256_ChannelContext *cc,
-                                         const UA_ByteString *remoteCertificate) {
-    if(remoteCertificate == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Parse the certificate */
-    int mbedErr = mbedtls_x509_crt_parse(&cc->remoteCertificate, remoteCertificate->data,
-                                         remoteCertificate->length);
-    if(mbedErr)
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-
-    /* Check the key length */
-    mbedtls_rsa_context *rsaContext = mbedtls_pk_rsa(cc->remoteCertificate.pk);
-    if(rsaContext->len < UA_SECURITYPOLICY_BASIC256SHA256_MINASYMKEYLENGTH ||
-       rsaContext->len > UA_SECURITYPOLICY_BASIC256SHA256_MAXASYMKEYLENGTH)
-        return UA_STATUSCODE_BADCERTIFICATEUSENOTALLOWED;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-channelContext_deleteContext_sp_basic256sha256(Basic256Sha256_ChannelContext *cc) {
-    UA_ByteString_deleteMembers(&cc->localSymSigningKey);
-    UA_ByteString_deleteMembers(&cc->localSymEncryptingKey);
-    UA_ByteString_deleteMembers(&cc->localSymIv);
-
-    UA_ByteString_deleteMembers(&cc->remoteSymSigningKey);
-    UA_ByteString_deleteMembers(&cc->remoteSymEncryptingKey);
-    UA_ByteString_deleteMembers(&cc->remoteSymIv);
-
-    mbedtls_x509_crt_free(&cc->remoteCertificate);
-
-    UA_free(cc);
-}
-
-static UA_StatusCode
-channelContext_newContext_sp_basic256sha256(const UA_SecurityPolicy *securityPolicy,
-                                            const UA_ByteString *remoteCertificate,
-                                            void **pp_contextData) {
-    if(securityPolicy == NULL || remoteCertificate == NULL || pp_contextData == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Allocate the channel context */
-    *pp_contextData = UA_malloc(sizeof(Basic256Sha256_ChannelContext));
-    if(*pp_contextData == NULL)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    Basic256Sha256_ChannelContext *cc = (Basic256Sha256_ChannelContext *)*pp_contextData;
-
-    /* Initialize the channel context */
-    cc->policyContext = (Basic256Sha256_PolicyContext *)securityPolicy->policyContext;
-
-    UA_ByteString_init(&cc->localSymSigningKey);
-    UA_ByteString_init(&cc->localSymEncryptingKey);
-    UA_ByteString_init(&cc->localSymIv);
-
-    UA_ByteString_init(&cc->remoteSymSigningKey);
-    UA_ByteString_init(&cc->remoteSymEncryptingKey);
-    UA_ByteString_init(&cc->remoteSymIv);
-
-    mbedtls_x509_crt_init(&cc->remoteCertificate);
-
-    // TODO: this can be optimized so that we dont allocate memory before parsing the certificate
-    UA_StatusCode retval = parseRemoteCertificate_sp_basic256sha256(cc, remoteCertificate);
-    if(retval != UA_STATUSCODE_GOOD) {
-        channelContext_deleteContext_sp_basic256sha256(cc);
-        *pp_contextData = NULL;
-    }
-    return retval;
-}
-
-static UA_StatusCode
-channelContext_setLocalSymEncryptingKey_sp_basic256sha256(Basic256Sha256_ChannelContext *cc,
-                                                          const UA_ByteString *key) {
-    if(key == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->localSymEncryptingKey);
-    return UA_ByteString_copy(key, &cc->localSymEncryptingKey);
-}
-
-static UA_StatusCode
-channelContext_setLocalSymSigningKey_sp_basic256sha256(Basic256Sha256_ChannelContext *cc,
-                                                       const UA_ByteString *key) {
-    if(key == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->localSymSigningKey);
-    return UA_ByteString_copy(key, &cc->localSymSigningKey);
-}
-
-
-static UA_StatusCode
-channelContext_setLocalSymIv_sp_basic256sha256(Basic256Sha256_ChannelContext *cc,
-                                               const UA_ByteString *iv) {
-    if(iv == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->localSymIv);
-    return UA_ByteString_copy(iv, &cc->localSymIv);
-}
-
-static UA_StatusCode
-channelContext_setRemoteSymEncryptingKey_sp_basic256sha256(Basic256Sha256_ChannelContext *cc,
-                                                           const UA_ByteString *key) {
-    if(key == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->remoteSymEncryptingKey);
-    return UA_ByteString_copy(key, &cc->remoteSymEncryptingKey);
-}
-
-static UA_StatusCode
-channelContext_setRemoteSymSigningKey_sp_basic256sha256(Basic256Sha256_ChannelContext *cc,
-                                                        const UA_ByteString *key) {
-    if(key == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->remoteSymSigningKey);
-    return UA_ByteString_copy(key, &cc->remoteSymSigningKey);
-}
-
-static UA_StatusCode
-channelContext_setRemoteSymIv_sp_basic256sha256(Basic256Sha256_ChannelContext *cc,
-                                                const UA_ByteString *iv) {
-    if(iv == NULL || cc == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString_deleteMembers(&cc->remoteSymIv);
-    return UA_ByteString_copy(iv, &cc->remoteSymIv);
-}
-
-static UA_StatusCode
-channelContext_compareCertificate_sp_basic256sha256(const Basic256Sha256_ChannelContext *cc,
-                                                    const UA_ByteString *certificate) {
-    if(cc == NULL || certificate == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    mbedtls_x509_crt cert;
-    mbedtls_x509_crt_init(&cert);
-    int mbedErr = mbedtls_x509_crt_parse(&cert, certificate->data, certificate->length);
-    if(mbedErr)
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(cert.raw.len != cc->remoteCertificate.raw.len ||
-       memcmp(cert.raw.p, cc->remoteCertificate.raw.p, cert.raw.len) != 0)
-        retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-
-    mbedtls_x509_crt_free(&cert);
-    return retval;
-}
-
-static void
-deleteMembers_sp_basic256sha256(UA_SecurityPolicy *securityPolicy) {
-    if(securityPolicy == NULL)
-        return;
-
-    if(securityPolicy->policyContext == NULL)
-        return;
-
-    UA_ByteString_deleteMembers(&securityPolicy->localCertificate);
-
-    /* delete all allocated members in the context */
-    Basic256Sha256_PolicyContext *pc = (Basic256Sha256_PolicyContext *)
-        securityPolicy->policyContext;
-
-    mbedtls_ctr_drbg_free(&pc->drbgContext);
-    mbedtls_entropy_free(&pc->entropyContext);
-    mbedtls_pk_free(&pc->localPrivateKey);
-    mbedtls_md_free(&pc->sha256MdContext);
-    UA_ByteString_deleteMembers(&pc->localCertThumbprint);
-
-    UA_LOG_DEBUG(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                 "Deleted members of EndpointContext for sp_basic256sha256");
-
-    UA_free(pc);
-    securityPolicy->policyContext = NULL;
-}
-
-static UA_StatusCode
-updateCertificateAndPrivateKey_sp_basic256sha256(UA_SecurityPolicy *securityPolicy,
-                                                 const UA_ByteString newCertificate,
-                                                 const UA_ByteString newPrivateKey) {
-    if(securityPolicy == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    if(securityPolicy->policyContext == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    Basic256Sha256_PolicyContext *pc =
-            (Basic256Sha256_PolicyContext *) securityPolicy->policyContext;
-
-    UA_ByteString_deleteMembers(&securityPolicy->localCertificate);
-
-    UA_StatusCode retval = UA_ByteString_allocBuffer(&securityPolicy->localCertificate,
-                                                     newCertificate.length + 1);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    memcpy(securityPolicy->localCertificate.data, newCertificate.data, newCertificate.length);
-    securityPolicy->localCertificate.data[newCertificate.length] = '\0';
-    securityPolicy->localCertificate.length--;
-
-    /* Set the new private key */
-    mbedtls_pk_free(&pc->localPrivateKey);
-    mbedtls_pk_init(&pc->localPrivateKey);
-    int mbedErr = mbedtls_pk_parse_key(&pc->localPrivateKey, newPrivateKey.data,
-                                       newPrivateKey.length, NULL, 0);
-    if(mbedErr) {
-        retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-        goto error;
-    }
-
-    retval = asym_makeThumbprint_sp_basic256sha256(pc->securityPolicy,
-                                                   &securityPolicy->localCertificate,
-                                                   &pc->localCertThumbprint);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-
-    return retval;
-
-    error:
-    UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                 "Could not update certificate and private key");
-    if(securityPolicy->policyContext != NULL)
-        deleteMembers_sp_basic256sha256(securityPolicy);
-    return retval;
-}
-
-static UA_StatusCode
-policyContext_newContext_sp_basic256sha256(UA_SecurityPolicy *securityPolicy,
-                                           const UA_ByteString localPrivateKey) {
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(securityPolicy == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    if (localPrivateKey.length == 0) {
-        UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                     "Can not initialize security policy. Private key is empty.");
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-
-    Basic256Sha256_PolicyContext *pc = (Basic256Sha256_PolicyContext *)
-        UA_malloc(sizeof(Basic256Sha256_PolicyContext));
-    securityPolicy->policyContext = (void *)pc;
-    if(!pc) {
-        retval = UA_STATUSCODE_BADOUTOFMEMORY;
-        goto error;
-    }
-
-    /* Initialize the PolicyContext */
-    memset(pc, 0, sizeof(Basic256Sha256_PolicyContext));
-    mbedtls_ctr_drbg_init(&pc->drbgContext);
-    mbedtls_entropy_init(&pc->entropyContext);
-    mbedtls_pk_init(&pc->localPrivateKey);
-    mbedtls_md_init(&pc->sha256MdContext);
-    pc->securityPolicy = securityPolicy;
-
-    /* Initialized the message digest */
-    const mbedtls_md_info_t *const mdInfo = mbedtls_md_info_from_type(MBEDTLS_MD_SHA256);
-    int mbedErr = mbedtls_md_setup(&pc->sha256MdContext, mdInfo, MBEDTLS_MD_SHA256);
-    if(mbedErr) {
-        retval = UA_STATUSCODE_BADOUTOFMEMORY;
-        goto error;
-    }
-
-    /* Add the system entropy source */
-    mbedErr = mbedtls_entropy_add_source(&pc->entropyContext,
-                                         mbedtls_platform_entropy_poll, NULL, 0,
-                                         MBEDTLS_ENTROPY_SOURCE_STRONG);
-    if(mbedErr) {
-        retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-        goto error;
-    }
-
-    /* Seed the RNG */
-    char *personalization = "open62541-drbg";
-    mbedErr = mbedtls_ctr_drbg_seed(&pc->drbgContext, mbedtls_entropy_func,
-                                    &pc->entropyContext,
-                                    (const unsigned char *)personalization, 14);
-    if(mbedErr) {
-        retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-        goto error;
-    }
-
-    /* Set the private key */
-    mbedErr = mbedtls_pk_parse_key(&pc->localPrivateKey, localPrivateKey.data,
-                                   localPrivateKey.length, NULL, 0);
-    if(mbedErr) {
-        retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-        goto error;
-    }
-
-    /* Set the local certificate thumbprint */
-    retval = UA_ByteString_allocBuffer(&pc->localCertThumbprint, UA_SHA1_LENGTH);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-    retval = asym_makeThumbprint_sp_basic256sha256(pc->securityPolicy,
-                                                  &securityPolicy->localCertificate,
-                                                  &pc->localCertThumbprint);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-
-    return UA_STATUSCODE_GOOD;
-
-error:
-    UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                 "Could not create securityContext: %s", UA_StatusCode_name(retval));
-    if(securityPolicy->policyContext != NULL)
-        deleteMembers_sp_basic256sha256(securityPolicy);
-    return retval;
-}
-
-UA_StatusCode
-UA_SecurityPolicy_Basic256Sha256(UA_SecurityPolicy *policy,
-                                 UA_CertificateVerification *certificateVerification,
-                                 const UA_ByteString localCertificate,
-                                 const UA_ByteString localPrivateKey, const UA_Logger *logger) {
-    memset(policy, 0, sizeof(UA_SecurityPolicy));
-    policy->logger = logger;
-
-    policy->policyUri = UA_STRING("http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256");
-
-    UA_SecurityPolicyAsymmetricModule *const asymmetricModule = &policy->asymmetricModule;
-    UA_SecurityPolicySymmetricModule *const symmetricModule = &policy->symmetricModule;
-    UA_SecurityPolicyChannelModule *const channelModule = &policy->channelModule;
-
-    /* Copy the certificate and add a NULL to the end */
-    UA_StatusCode retval =
-        UA_ByteString_allocBuffer(&policy->localCertificate, localCertificate.length + 1);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    memcpy(policy->localCertificate.data, localCertificate.data, localCertificate.length);
-    policy->localCertificate.data[localCertificate.length] = '\0';
-    policy->localCertificate.length--;
-    policy->certificateVerification = certificateVerification;
-
-    /* AsymmetricModule */
-    UA_SecurityPolicySignatureAlgorithm *asym_signatureAlgorithm =
-        &asymmetricModule->cryptoModule.signatureAlgorithm;
-    asym_signatureAlgorithm->uri =
-        UA_STRING("http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\0");
-    asym_signatureAlgorithm->verify =
-        (UA_StatusCode (*)(const UA_SecurityPolicy *, void *,
-                           const UA_ByteString *, const UA_ByteString *))asym_verify_sp_basic256sha256;
-    asym_signatureAlgorithm->sign =
-        (UA_StatusCode (*)(const UA_SecurityPolicy *, void *,
-                           const UA_ByteString *, UA_ByteString *))asym_sign_sp_basic256sha256;
-    asym_signatureAlgorithm->getLocalSignatureSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getLocalSignatureSize_sp_basic256sha256;
-    asym_signatureAlgorithm->getRemoteSignatureSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemoteSignatureSize_sp_basic256sha256;
-    asym_signatureAlgorithm->getLocalKeyLength = NULL; // TODO: Write function
-    asym_signatureAlgorithm->getRemoteKeyLength = NULL; // TODO: Write function
-
-    UA_SecurityPolicyEncryptionAlgorithm *asym_encryptionAlgorithm =
-        &asymmetricModule->cryptoModule.encryptionAlgorithm;
-    asym_encryptionAlgorithm->uri = UA_STRING("http://www.w3.org/2001/04/xmlenc#rsa-oaep\0");
-    asym_encryptionAlgorithm->encrypt =
-        (UA_StatusCode(*)(const UA_SecurityPolicy *, void *, UA_ByteString *))asym_encrypt_sp_basic256sha256;
-    asym_encryptionAlgorithm->decrypt =
-        (UA_StatusCode(*)(const UA_SecurityPolicy *, void *, UA_ByteString *))
-            asym_decrypt_sp_basic256sha256;
-    asym_encryptionAlgorithm->getLocalKeyLength = NULL; // TODO: Write function
-    asym_encryptionAlgorithm->getRemoteKeyLength =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemoteEncryptionKeyLength_sp_basic256sha256;
-    asym_encryptionAlgorithm->getLocalBlockSize = NULL; // TODO: Write function
-    asym_encryptionAlgorithm->getRemoteBlockSize = (size_t (*)(const UA_SecurityPolicy *,
-                                                               const void *))asym_getRemoteBlockSize_sp_basic256sha256;
-    asym_encryptionAlgorithm->getLocalPlainTextBlockSize = NULL; // TODO: Write function
-    asym_encryptionAlgorithm->getRemotePlainTextBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))asym_getRemotePlainTextBlockSize_sp_basic256sha256;
-
-    asymmetricModule->makeCertificateThumbprint = asym_makeThumbprint_sp_basic256sha256;
-    asymmetricModule->compareCertificateThumbprint =
-        asymmetricModule_compareCertificateThumbprint_sp_basic256sha256;
-
-    /* SymmetricModule */
-    symmetricModule->generateKey = sym_generateKey_sp_basic256sha256;
-    symmetricModule->generateNonce = sym_generateNonce_sp_basic256sha256;
-
-    UA_SecurityPolicySignatureAlgorithm *sym_signatureAlgorithm =
-        &symmetricModule->cryptoModule.signatureAlgorithm;
-    sym_signatureAlgorithm->uri =
-        UA_STRING("http://www.w3.org/2000/09/xmldsig#hmac-sha1\0");
-    sym_signatureAlgorithm->verify =
-        (UA_StatusCode (*)(const UA_SecurityPolicy *, void *, const UA_ByteString *,
-                           const UA_ByteString *))sym_verify_sp_basic256sha256;
-    sym_signatureAlgorithm->sign =
-        (UA_StatusCode (*)(const UA_SecurityPolicy *, void *,
-                           const UA_ByteString *, UA_ByteString *))sym_sign_sp_basic256sha256;
-    sym_signatureAlgorithm->getLocalSignatureSize = sym_getSignatureSize_sp_basic256sha256;
-    sym_signatureAlgorithm->getRemoteSignatureSize = sym_getSignatureSize_sp_basic256sha256;
-    sym_signatureAlgorithm->getLocalKeyLength =
-        (size_t (*)(const UA_SecurityPolicy *,
-                    const void *))sym_getSigningKeyLength_sp_basic256sha256;
-    sym_signatureAlgorithm->getRemoteKeyLength =
-        (size_t (*)(const UA_SecurityPolicy *,
-                    const void *))sym_getSigningKeyLength_sp_basic256sha256;
-
-    UA_SecurityPolicyEncryptionAlgorithm *sym_encryptionAlgorithm =
-        &symmetricModule->cryptoModule.encryptionAlgorithm;
-    sym_encryptionAlgorithm->uri = UA_STRING("http://www.w3.org/2001/04/xmlenc#aes128-cbc");
-    sym_encryptionAlgorithm->encrypt =
-        (UA_StatusCode(*)(const UA_SecurityPolicy *, void *, UA_ByteString *))sym_encrypt_sp_basic256sha256;
-    sym_encryptionAlgorithm->decrypt =
-        (UA_StatusCode(*)(const UA_SecurityPolicy *, void *, UA_ByteString *))sym_decrypt_sp_basic256sha256;
-    sym_encryptionAlgorithm->getLocalKeyLength = sym_getEncryptionKeyLength_sp_basic256sha256;
-    sym_encryptionAlgorithm->getRemoteKeyLength = sym_getEncryptionKeyLength_sp_basic256sha256;
-    sym_encryptionAlgorithm->getLocalBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))sym_getEncryptionBlockSize_sp_basic256sha256;
-    sym_encryptionAlgorithm->getRemoteBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))sym_getEncryptionBlockSize_sp_basic256sha256;
-    sym_encryptionAlgorithm->getLocalPlainTextBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))sym_getPlainTextBlockSize_sp_basic256sha256;
-    sym_encryptionAlgorithm->getRemotePlainTextBlockSize =
-        (size_t (*)(const UA_SecurityPolicy *, const void *))sym_getPlainTextBlockSize_sp_basic256sha256;
-    symmetricModule->secureChannelNonceLength = 32;
-
-    // Use the same signature algorithm as the asymmetric component for certificate signing (see standard)
-    policy->certificateSigningAlgorithm = policy->asymmetricModule.cryptoModule.signatureAlgorithm;
-
-    /* ChannelModule */
-    channelModule->newContext = channelContext_newContext_sp_basic256sha256;
-    channelModule->deleteContext = (void (*)(void *))
-        channelContext_deleteContext_sp_basic256sha256;
-
-    channelModule->setLocalSymEncryptingKey = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setLocalSymEncryptingKey_sp_basic256sha256;
-    channelModule->setLocalSymSigningKey = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setLocalSymSigningKey_sp_basic256sha256;
-    channelModule->setLocalSymIv = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setLocalSymIv_sp_basic256sha256;
-
-    channelModule->setRemoteSymEncryptingKey = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setRemoteSymEncryptingKey_sp_basic256sha256;
-    channelModule->setRemoteSymSigningKey = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setRemoteSymSigningKey_sp_basic256sha256;
-    channelModule->setRemoteSymIv = (UA_StatusCode (*)(void *, const UA_ByteString *))
-        channelContext_setRemoteSymIv_sp_basic256sha256;
-
-    channelModule->compareCertificate = (UA_StatusCode (*)(const void *, const UA_ByteString *))
-        channelContext_compareCertificate_sp_basic256sha256;
-
-    policy->updateCertificateAndPrivateKey = updateCertificateAndPrivateKey_sp_basic256sha256;
-    policy->deleteMembers = deleteMembers_sp_basic256sha256;
-
-    return policyContext_newContext_sp_basic256sha256(policy, localPrivateKey);
-}
-
-#endif
diff --git a/ext/open62541/plugins/securityPolicies/ua_securitypolicy_none.c b/ext/open62541/plugins/securityPolicies/ua_securitypolicy_none.c
deleted file mode 100644
index 2198fed..0000000
--- a/ext/open62541/plugins/securityPolicies/ua_securitypolicy_none.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2017-2018 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#include <open62541/plugin/securitypolicy_default.h>
-
-static UA_StatusCode
-verify_none(const UA_SecurityPolicy *securityPolicy,
-            void *channelContext,
-            const UA_ByteString *message,
-            const UA_ByteString *signature) {
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-sign_none(const UA_SecurityPolicy *securityPolicy,
-          void *channelContext,
-          const UA_ByteString *message,
-          UA_ByteString *signature) {
-    return UA_STATUSCODE_GOOD;
-}
-
-static size_t
-length_none(const UA_SecurityPolicy *securityPolicy,
-            const void *channelContext) {
-    return 0;
-}
-
-static UA_StatusCode
-encrypt_none(const UA_SecurityPolicy *securityPolicy,
-             void *channelContext,
-             UA_ByteString *data) {
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-decrypt_none(const UA_SecurityPolicy *securityPolicy,
-             void *channelContext,
-             UA_ByteString *data) {
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-makeThumbprint_none(const UA_SecurityPolicy *securityPolicy,
-                    const UA_ByteString *certificate,
-                    UA_ByteString *thumbprint) {
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-compareThumbprint_none(const UA_SecurityPolicy *securityPolicy,
-                       const UA_ByteString *certificateThumbprint) {
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-generateKey_none(const UA_SecurityPolicy *securityPolicy,
-                 const UA_ByteString *secret,
-                 const UA_ByteString *seed,
-                 UA_ByteString *out) {
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Use the non-cryptographic RNG to set the nonce */
-static UA_StatusCode
-generateNonce_none(const UA_SecurityPolicy *securityPolicy, UA_ByteString *out) {
-    if(securityPolicy == NULL || out == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    if(out->length == 0)
-        return UA_STATUSCODE_GOOD;
-
-    /* Fill blocks of four byte */
-    size_t i = 0;
-    while(i + 3 < out->length) {
-        UA_UInt32 rand = UA_UInt32_random();
-        memcpy(&out->data[i], &rand, 4);
-        i = i+4;
-    }
-
-    /* Fill the remaining byte */
-    UA_UInt32 rand = UA_UInt32_random();
-    memcpy(&out->data[i], &rand, out->length % 4);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-newContext_none(const UA_SecurityPolicy *securityPolicy,
-                const UA_ByteString *remoteCertificate,
-                void **channelContext) {
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-deleteContext_none(void *channelContext) {
-}
-
-static UA_StatusCode
-setContextValue_none(void *channelContext,
-                     const UA_ByteString *key) {
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-compareCertificate_none(const void *channelContext,
-                        const UA_ByteString *certificate) {
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-updateCertificateAndPrivateKey_none(UA_SecurityPolicy *policy,
-                                    const UA_ByteString newCertificate,
-                                    const UA_ByteString newPrivateKey) {
-    UA_ByteString_deleteMembers(&policy->localCertificate);
-    UA_ByteString_copy(&newCertificate, &policy->localCertificate);
-    return UA_STATUSCODE_GOOD;
-}
-
-
-static void
-policy_deletemembers_none(UA_SecurityPolicy *policy) {
-    UA_ByteString_deleteMembers(&policy->localCertificate);
-}
-
-UA_StatusCode
-UA_SecurityPolicy_None(UA_SecurityPolicy *policy,
-                       UA_CertificateVerification *certificateVerification,
-                       const UA_ByteString localCertificate, const UA_Logger *logger) {
-    policy->policyContext = (void *)(uintptr_t)logger;
-    policy->policyUri = UA_STRING("http://opcfoundation.org/UA/SecurityPolicy#None");
-    policy->logger = logger;
-    UA_ByteString_copy(&localCertificate, &policy->localCertificate);
-
-    policy->certificateVerification = certificateVerification;
-
-    policy->symmetricModule.generateKey = generateKey_none;
-    policy->symmetricModule.generateNonce = generateNonce_none;
-
-    UA_SecurityPolicySignatureAlgorithm *sym_signatureAlgorithm =
-        &policy->symmetricModule.cryptoModule.signatureAlgorithm;
-    sym_signatureAlgorithm->uri = UA_STRING_NULL;
-    sym_signatureAlgorithm->verify = verify_none;
-    sym_signatureAlgorithm->sign = sign_none;
-    sym_signatureAlgorithm->getLocalSignatureSize = length_none;
-    sym_signatureAlgorithm->getRemoteSignatureSize = length_none;
-    sym_signatureAlgorithm->getLocalKeyLength = length_none;
-    sym_signatureAlgorithm->getRemoteKeyLength = length_none;
-
-    UA_SecurityPolicyEncryptionAlgorithm *sym_encryptionAlgorithm =
-        &policy->symmetricModule.cryptoModule.encryptionAlgorithm;
-    sym_encryptionAlgorithm->encrypt = encrypt_none;
-    sym_encryptionAlgorithm->decrypt = decrypt_none;
-    sym_encryptionAlgorithm->getLocalKeyLength = length_none;
-    sym_encryptionAlgorithm->getRemoteKeyLength = length_none;
-    sym_encryptionAlgorithm->getLocalBlockSize = length_none;
-    sym_encryptionAlgorithm->getRemoteBlockSize = length_none;
-    sym_encryptionAlgorithm->getLocalPlainTextBlockSize = length_none;
-    sym_encryptionAlgorithm->getRemotePlainTextBlockSize = length_none;
-    policy->symmetricModule.secureChannelNonceLength = 0;
-
-    policy->asymmetricModule.makeCertificateThumbprint = makeThumbprint_none;
-    policy->asymmetricModule.compareCertificateThumbprint = compareThumbprint_none;
-
-    // This only works for none since symmetric and asymmetric crypto modules do the same i.e. nothing
-    policy->asymmetricModule.cryptoModule = policy->symmetricModule.cryptoModule;
-
-    // Use the same signing algorithm as for asymmetric signing
-    policy->certificateSigningAlgorithm = policy->asymmetricModule.cryptoModule.signatureAlgorithm;
-
-    policy->channelModule.newContext = newContext_none;
-    policy->channelModule.deleteContext = deleteContext_none;
-    policy->channelModule.setLocalSymEncryptingKey = setContextValue_none;
-    policy->channelModule.setLocalSymSigningKey = setContextValue_none;
-    policy->channelModule.setLocalSymIv = setContextValue_none;
-    policy->channelModule.setRemoteSymEncryptingKey = setContextValue_none;
-    policy->channelModule.setRemoteSymSigningKey = setContextValue_none;
-    policy->channelModule.setRemoteSymIv = setContextValue_none;
-    policy->channelModule.compareCertificate = compareCertificate_none;
-    policy->updateCertificateAndPrivateKey = updateCertificateAndPrivateKey_none;
-    policy->deleteMembers = policy_deletemembers_none;
-
-    return UA_STATUSCODE_GOOD;
-}
diff --git a/ext/open62541/plugins/ua_accesscontrol_default.c b/ext/open62541/plugins/ua_accesscontrol_default.c
deleted file mode 100644
index c1fa1bc..0000000
--- a/ext/open62541/plugins/ua_accesscontrol_default.c
+++ /dev/null
@@ -1,303 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. 
- *
- *    Copyright 2016-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#include <open62541/plugin/accesscontrol_default.h>
-#include <open62541/server_config.h>
-
-/* Example access control management. Anonymous and username / password login.
- * The access rights are maximally permissive. */
-
-typedef struct {
-    UA_Boolean allowAnonymous;
-    size_t usernamePasswordLoginSize;
-    UA_UsernamePasswordLogin *usernamePasswordLogin;
-} AccessControlContext;
-
-#define ANONYMOUS_POLICY "open62541-anonymous-policy"
-#define USERNAME_POLICY "open62541-username-policy"
-const UA_String anonymous_policy = UA_STRING_STATIC(ANONYMOUS_POLICY);
-const UA_String username_policy = UA_STRING_STATIC(USERNAME_POLICY);
-
-/************************/
-/* Access Control Logic */
-/************************/
-
-static UA_StatusCode
-activateSession_default(UA_Server *server, UA_AccessControl *ac,
-                        const UA_EndpointDescription *endpointDescription,
-                        const UA_ByteString *secureChannelRemoteCertificate,
-                        const UA_NodeId *sessionId,
-                        const UA_ExtensionObject *userIdentityToken,
-                        void **sessionContext) {
-    AccessControlContext *context = (AccessControlContext*)ac->context;
-
-    /* The empty token is interpreted as anonymous */
-    if(userIdentityToken->encoding == UA_EXTENSIONOBJECT_ENCODED_NOBODY) {
-        if(!context->allowAnonymous)
-            return UA_STATUSCODE_BADIDENTITYTOKENINVALID;
-
-        /* No userdata atm */
-        *sessionContext = NULL;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* Could the token be decoded? */
-    if(userIdentityToken->encoding < UA_EXTENSIONOBJECT_DECODED)
-        return UA_STATUSCODE_BADIDENTITYTOKENINVALID;
-
-    /* Anonymous login */
-    if(userIdentityToken->content.decoded.type == &UA_TYPES[UA_TYPES_ANONYMOUSIDENTITYTOKEN]) {
-        if(!context->allowAnonymous)
-            return UA_STATUSCODE_BADIDENTITYTOKENINVALID;
-
-        const UA_AnonymousIdentityToken *token = (UA_AnonymousIdentityToken*)
-            userIdentityToken->content.decoded.data;
-
-        /* Compatibility notice: Siemens OPC Scout v10 provides an empty
-         * policyId. This is not compliant. For compatibility, assume that empty
-         * policyId == ANONYMOUS_POLICY */
-        if(token->policyId.data && !UA_String_equal(&token->policyId, &anonymous_policy))
-            return UA_STATUSCODE_BADIDENTITYTOKENINVALID;
-
-        /* No userdata atm */
-        *sessionContext = NULL;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* Username and password */
-    if(userIdentityToken->content.decoded.type == &UA_TYPES[UA_TYPES_USERNAMEIDENTITYTOKEN]) {
-        const UA_UserNameIdentityToken *userToken =
-            (UA_UserNameIdentityToken*)userIdentityToken->content.decoded.data;
-
-        if(!UA_String_equal(&userToken->policyId, &username_policy))
-            return UA_STATUSCODE_BADIDENTITYTOKENINVALID;
-
-        /* The userToken has been decrypted by the server before forwarding
-         * it to the plugin. This information can be used here. */
-        /* if(userToken->encryptionAlgorithm.length > 0) {} */
-
-        /* Empty username and password */
-        if(userToken->userName.length == 0 && userToken->password.length == 0)
-            return UA_STATUSCODE_BADIDENTITYTOKENINVALID;
-
-        /* Try to match username/pw */
-        UA_Boolean match = false;
-        for(size_t i = 0; i < context->usernamePasswordLoginSize; i++) {
-            if(UA_String_equal(&userToken->userName, &context->usernamePasswordLogin[i].username) &&
-               UA_String_equal(&userToken->password, &context->usernamePasswordLogin[i].password)) {
-                match = true;
-                break;
-            }
-        }
-        if(!match)
-            return UA_STATUSCODE_BADUSERACCESSDENIED;
-
-        /* No userdata atm */
-        *sessionContext = NULL;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* Unsupported token type */
-    return UA_STATUSCODE_BADIDENTITYTOKENINVALID;
-}
-
-static void
-closeSession_default(UA_Server *server, UA_AccessControl *ac,
-                     const UA_NodeId *sessionId, void *sessionContext) {
-    /* no context to clean up */
-}
-
-static UA_UInt32
-getUserRightsMask_default(UA_Server *server, UA_AccessControl *ac,
-                          const UA_NodeId *sessionId, void *sessionContext,
-                          const UA_NodeId *nodeId, void *nodeContext) {
-    return 0xFFFFFFFF;
-}
-
-static UA_Byte
-getUserAccessLevel_default(UA_Server *server, UA_AccessControl *ac,
-                           const UA_NodeId *sessionId, void *sessionContext,
-                           const UA_NodeId *nodeId, void *nodeContext) {
-    return 0xFF;
-}
-
-static UA_Boolean
-getUserExecutable_default(UA_Server *server, UA_AccessControl *ac,
-                          const UA_NodeId *sessionId, void *sessionContext,
-                          const UA_NodeId *methodId, void *methodContext) {
-    return true;
-}
-
-static UA_Boolean
-getUserExecutableOnObject_default(UA_Server *server, UA_AccessControl *ac,
-                                  const UA_NodeId *sessionId, void *sessionContext,
-                                  const UA_NodeId *methodId, void *methodContext,
-                                  const UA_NodeId *objectId, void *objectContext) {
-    return true;
-}
-
-static UA_Boolean
-allowAddNode_default(UA_Server *server, UA_AccessControl *ac,
-                     const UA_NodeId *sessionId, void *sessionContext,
-                     const UA_AddNodesItem *item) {
-    return true;
-}
-
-static UA_Boolean
-allowAddReference_default(UA_Server *server, UA_AccessControl *ac,
-                          const UA_NodeId *sessionId, void *sessionContext,
-                          const UA_AddReferencesItem *item) {
-    return true;
-}
-
-static UA_Boolean
-allowDeleteNode_default(UA_Server *server, UA_AccessControl *ac,
-                        const UA_NodeId *sessionId, void *sessionContext,
-                        const UA_DeleteNodesItem *item) {
-    return true;
-}
-
-static UA_Boolean
-allowDeleteReference_default(UA_Server *server, UA_AccessControl *ac,
-                             const UA_NodeId *sessionId, void *sessionContext,
-                             const UA_DeleteReferencesItem *item) {
-    return true;
-}
-
-#ifdef UA_ENABLE_HISTORIZING
-static UA_Boolean
-allowHistoryUpdateUpdateData_default(UA_Server *server, UA_AccessControl *ac,
-                                     const UA_NodeId *sessionId, void *sessionContext,
-                                     const UA_NodeId *nodeId,
-                                     UA_PerformUpdateType performInsertReplace,
-                                     const UA_DataValue *value) {
-    return true;
-}
-
-static UA_Boolean
-allowHistoryUpdateDeleteRawModified_default(UA_Server *server, UA_AccessControl *ac,
-                                            const UA_NodeId *sessionId, void *sessionContext,
-                                            const UA_NodeId *nodeId,
-                                            UA_DateTime startTimestamp,
-                                            UA_DateTime endTimestamp,
-                                            bool isDeleteModified) {
-    return true;
-}
-#endif
-
-/***************************************/
-/* Create Delete Access Control Plugin */
-/***************************************/
-
-static void deleteMembers_default(UA_AccessControl *ac) {
-    UA_Array_delete((void*)(uintptr_t)ac->userTokenPolicies,
-                    ac->userTokenPoliciesSize,
-                    &UA_TYPES[UA_TYPES_USERTOKENPOLICY]);
-    ac->userTokenPolicies = NULL;
-    ac->userTokenPoliciesSize = 0;
-
-    AccessControlContext *context = (AccessControlContext*)ac->context;
-
-    if (context) {
-        for(size_t i = 0; i < context->usernamePasswordLoginSize; i++) {
-            UA_String_deleteMembers(&context->usernamePasswordLogin[i].username);
-            UA_String_deleteMembers(&context->usernamePasswordLogin[i].password);
-        }
-        if(context->usernamePasswordLoginSize > 0)
-            UA_free(context->usernamePasswordLogin);
-        UA_free(ac->context);
-    }
-}
-
-UA_StatusCode
-UA_AccessControl_default(UA_ServerConfig *config, UA_Boolean allowAnonymous,
-                         const UA_ByteString *userTokenPolicyUri,
-                         size_t usernamePasswordLoginSize,
-                         const UA_UsernamePasswordLogin *usernamePasswordLogin) {
-    UA_AccessControl *ac = &config->accessControl;
-    ac->deleteMembers = deleteMembers_default;
-    ac->activateSession = activateSession_default;
-    ac->closeSession = closeSession_default;
-    ac->getUserRightsMask = getUserRightsMask_default;
-    ac->getUserAccessLevel = getUserAccessLevel_default;
-    ac->getUserExecutable = getUserExecutable_default;
-    ac->getUserExecutableOnObject = getUserExecutableOnObject_default;
-    ac->allowAddNode = allowAddNode_default;
-    ac->allowAddReference = allowAddReference_default;
-
-#ifdef UA_ENABLE_HISTORIZING
-    ac->allowHistoryUpdateUpdateData = allowHistoryUpdateUpdateData_default;
-    ac->allowHistoryUpdateDeleteRawModified = allowHistoryUpdateDeleteRawModified_default;
-#endif
-
-    ac->allowDeleteNode = allowDeleteNode_default;
-    ac->allowDeleteReference = allowDeleteReference_default;
-
-    AccessControlContext *context = (AccessControlContext*)
-            UA_malloc(sizeof(AccessControlContext));
-    if (!context)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    memset(context, 0, sizeof(AccessControlContext));
-    ac->context = context;
-
-    /* Allow anonymous? */
-    context->allowAnonymous = allowAnonymous;
-
-    /* Copy username/password to the access control plugin */
-    if(usernamePasswordLoginSize > 0) {
-        context->usernamePasswordLogin = (UA_UsernamePasswordLogin*)
-            UA_malloc(usernamePasswordLoginSize * sizeof(UA_UsernamePasswordLogin));
-        if(!context->usernamePasswordLogin)
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        context->usernamePasswordLoginSize = usernamePasswordLoginSize;
-        for(size_t i = 0; i < usernamePasswordLoginSize; i++) {
-            UA_String_copy(&usernamePasswordLogin[i].username, &context->usernamePasswordLogin[i].username);
-            UA_String_copy(&usernamePasswordLogin[i].password, &context->usernamePasswordLogin[i].password);
-        }
-    }
-
-    /* Set the allowed policies */
-    size_t policies = 0;
-    if(allowAnonymous)
-        policies++;
-    if(usernamePasswordLoginSize > 0)
-        policies++;
-    ac->userTokenPoliciesSize = 0;
-    ac->userTokenPolicies = (UA_UserTokenPolicy *)
-        UA_Array_new(policies, &UA_TYPES[UA_TYPES_USERTOKENPOLICY]);
-    if(!ac->userTokenPolicies)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    ac->userTokenPoliciesSize = policies;
-
-    policies = 0;
-    if(allowAnonymous) {
-        ac->userTokenPolicies[policies].tokenType = UA_USERTOKENTYPE_ANONYMOUS;
-        ac->userTokenPolicies[policies].policyId = UA_STRING_ALLOC(ANONYMOUS_POLICY);
-        if (!ac->userTokenPolicies[policies].policyId.data)
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        policies++;
-    }
-
-    if(usernamePasswordLoginSize > 0) {
-        ac->userTokenPolicies[policies].tokenType = UA_USERTOKENTYPE_USERNAME;
-        ac->userTokenPolicies[policies].policyId = UA_STRING_ALLOC(USERNAME_POLICY);
-        if(!ac->userTokenPolicies[policies].policyId.data)
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-
-#if UA_LOGLEVEL <= 400
-        const UA_String noneUri = UA_STRING("http://opcfoundation.org/UA/SecurityPolicy#None");
-        if(UA_ByteString_equal(userTokenPolicyUri, &noneUri)) {
-            UA_LOG_WARNING(&config->logger, UA_LOGCATEGORY_SERVER,
-                           "Username/Password configured, but no encrypting SecurityPolicy. "
-                           "This can leak credentials on the network.");
-        }
-#endif
-        return UA_ByteString_copy(userTokenPolicyUri,
-                                  &ac->userTokenPolicies[policies].securityPolicyUri);
-    }
-    return UA_STATUSCODE_GOOD;
-}
diff --git a/ext/open62541/plugins/ua_config_default.c b/ext/open62541/plugins/ua_config_default.c
deleted file mode 100644
index 8ee8b7c..0000000
--- a/ext/open62541/plugins/ua_config_default.c
+++ /dev/null
@@ -1,751 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Julian Grothoff
- *    Copyright 2017-2018 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Thomas Stalder, Blue Time Concept SA
- *    Copyright 2018 (c) Daniel Feist, Precitec GmbH & Co. KG
- *    Copyright 2018 (c) Fabian Arndt, Root-Core
- *    Copyright 2019 (c) Kalycito Infotech Private Limited
- */
-
-#include <open62541/client_config_default.h>
-#include <open62541/network_tcp.h>
-#ifdef UA_ENABLE_WEBSOCKET_SERVER
-#include <open62541/network_ws.h>
-#endif
-#include <open62541/plugin/accesscontrol_default.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/plugin/pki_default.h>
-#include <open62541/plugin/securitypolicy_default.h>
-#include <open62541/server_config_default.h>
-
-/* Struct initialization works across ANSI C/C99/C++ if it is done when the
- * variable is first declared. Assigning values to existing structs is
- * heterogeneous across the three. */
-static UA_INLINE UA_UInt32Range
-UA_UINT32RANGE(UA_UInt32 min, UA_UInt32 max) {
-    UA_UInt32Range range = {min, max};
-    return range;
-}
-
-static UA_INLINE UA_DurationRange
-UA_DURATIONRANGE(UA_Duration min, UA_Duration max) {
-    UA_DurationRange range = {min, max};
-    return range;
-}
-
-/*******************************/
-/* Default Connection Settings */
-/*******************************/
-
-const UA_ConnectionConfig UA_ConnectionConfig_default = {
-    0, /* .protocolVersion */
-    65535, /* .sendBufferSize, 64k per chunk */
-    65535, /* .recvBufferSize, 64k per chunk */
-    0, /* .maxMessageSize, 0 -> unlimited */
-    0 /* .maxChunkCount, 0 -> unlimited */
-};
-
-/***************************/
-/* Default Server Settings */
-/***************************/
-
-#define MANUFACTURER_NAME "open62541"
-#define PRODUCT_NAME "open62541 OPC UA Server"
-#define PRODUCT_URI "http://open62541.org"
-#define APPLICATION_NAME "open62541-based OPC UA Application"
-#define APPLICATION_URI "urn:unconfigured:application"
-#define APPLICATION_URI_SERVER "urn:open62541.server.application"
-
-#define STRINGIFY(arg) #arg
-#define VERSION(MAJOR, MINOR, PATCH, LABEL) \
-    STRINGIFY(MAJOR) "." STRINGIFY(MINOR) "." STRINGIFY(PATCH) LABEL
-
-static UA_StatusCode
-createEndpoint(UA_ServerConfig *conf, UA_EndpointDescription *endpoint,
-               const UA_SecurityPolicy *securityPolicy,
-               UA_MessageSecurityMode securityMode) {
-    UA_EndpointDescription_init(endpoint);
-
-    endpoint->securityMode = securityMode;
-    UA_String_copy(&securityPolicy->policyUri, &endpoint->securityPolicyUri);
-    endpoint->transportProfileUri =
-        UA_STRING_ALLOC("http://opcfoundation.org/UA-Profile/Transport/uatcp-uasc-uabinary");
-
-    /* Add security level value for the corresponding message security mode */
-    endpoint->securityLevel = (UA_Byte) securityMode;
-
-    /* Enable all login mechanisms from the access control plugin  */
-    UA_StatusCode retval = UA_Array_copy(conf->accessControl.userTokenPolicies,
-                                         conf->accessControl.userTokenPoliciesSize,
-                                         (void **)&endpoint->userIdentityTokens,
-                                         &UA_TYPES[UA_TYPES_USERTOKENPOLICY]);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    endpoint->userIdentityTokensSize = conf->accessControl.userTokenPoliciesSize;
-
-    UA_String_copy(&securityPolicy->localCertificate, &endpoint->serverCertificate);
-    UA_ApplicationDescription_copy(&conf->applicationDescription, &endpoint->server);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static const size_t usernamePasswordsSize = 2;
-static UA_UsernamePasswordLogin usernamePasswords[2] = {
-    {UA_STRING_STATIC("user1"), UA_STRING_STATIC("password")},
-    {UA_STRING_STATIC("user2"), UA_STRING_STATIC("password1")}};
-
-static UA_StatusCode
-setDefaultConfig(UA_ServerConfig *conf) {
-    if (!conf)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-
-    /* Zero out.. All members have a valid initial value */
-    UA_ServerConfig_clean(conf);
-    memset(conf, 0, sizeof(UA_ServerConfig));
-
-    /* --> Start setting the default static config <-- */
-    conf->nThreads = 1;
-    conf->logger = UA_Log_Stdout_;
-
-    conf->shutdownDelay = 0.0;
-
-    /* Server Description */
-    conf->buildInfo.productUri = UA_STRING_ALLOC(PRODUCT_URI);
-    conf->buildInfo.manufacturerName = UA_STRING_ALLOC(MANUFACTURER_NAME);
-    conf->buildInfo.productName = UA_STRING_ALLOC(PRODUCT_NAME);
-    conf->buildInfo.softwareVersion =
-        UA_STRING_ALLOC(VERSION(UA_OPEN62541_VER_MAJOR, UA_OPEN62541_VER_MINOR,
-                                UA_OPEN62541_VER_PATCH, UA_OPEN62541_VER_LABEL));
-    #ifdef UA_PACK_DEBIAN
-    conf->buildInfo.buildNumber = UA_STRING_ALLOC("deb");
-    #else
-    conf->buildInfo.buildNumber = UA_STRING_ALLOC(__DATE__ " " __TIME__);
-    #endif
-    conf->buildInfo.buildDate = UA_DateTime_now();
-
-    conf->applicationDescription.applicationUri = UA_STRING_ALLOC(APPLICATION_URI_SERVER);
-    conf->applicationDescription.productUri = UA_STRING_ALLOC(PRODUCT_URI);
-    conf->applicationDescription.applicationName =
-        UA_LOCALIZEDTEXT_ALLOC("en", APPLICATION_NAME);
-    conf->applicationDescription.applicationType = UA_APPLICATIONTYPE_SERVER;
-    /* conf->applicationDescription.gatewayServerUri = UA_STRING_NULL; */
-    /* conf->applicationDescription.discoveryProfileUri = UA_STRING_NULL; */
-    /* conf->applicationDescription.discoveryUrlsSize = 0; */
-    /* conf->applicationDescription.discoveryUrls = NULL; */
-
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-    UA_MdnsDiscoveryConfiguration_init(&conf->discovery.mdns);
-    conf->discovery.mdnsInterfaceIP = UA_STRING_NULL;
-#endif
-
-    /* Custom DataTypes */
-    /* conf->customDataTypesSize = 0; */
-    /* conf->customDataTypes = NULL; */
-
-    /* Networking */
-    /* conf->networkLayersSize = 0; */
-    /* conf->networkLayers = NULL; */
-    /* conf->customHostname = UA_STRING_NULL; */
-
-    /* Endpoints */
-    /* conf->endpoints = {0, NULL}; */
-
-    /* Certificate Verification that accepts every certificate. Can be
-     * overwritten when the policy is specialized. */
-    UA_CertificateVerification_AcceptAll(&conf->certificateVerification);
-
-    /* Global Node Lifecycle */
-    conf->nodeLifecycle.constructor = NULL;
-    conf->nodeLifecycle.destructor = NULL;
-    conf->nodeLifecycle.createOptionalChild = NULL;
-    conf->nodeLifecycle.generateChildNodeId = NULL;
-
-    /* Relax constraints for the InformationModel */
-    conf->relaxEmptyValueConstraint = true; /* Allow empty values */
-
-    /* Limits for SecureChannels */
-    conf->maxSecureChannels = 40;
-    conf->maxSecurityTokenLifetime = 10 * 60 * 1000; /* 10 minutes */
-
-    /* Limits for Sessions */
-    conf->maxSessions = 100;
-    conf->maxSessionTimeout = 60.0 * 60.0 * 1000.0; /* 1h */
-
-    /* Limits for Subscriptions */
-    conf->publishingIntervalLimits = UA_DURATIONRANGE(100.0, 3600.0 * 1000.0);
-    conf->lifeTimeCountLimits = UA_UINT32RANGE(3, 15000);
-    conf->keepAliveCountLimits = UA_UINT32RANGE(1, 100);
-    conf->maxNotificationsPerPublish = 1000;
-    conf->enableRetransmissionQueue = true;
-    conf->maxRetransmissionQueueSize = 0; /* unlimited */
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-    conf->maxEventsPerNode = 0; /* unlimited */
-#endif
-
-    /* Limits for MonitoredItems */
-    conf->samplingIntervalLimits = UA_DURATIONRANGE(50.0, 24.0 * 3600.0 * 1000.0);
-    conf->queueSizeLimits = UA_UINT32RANGE(1, 100);
-
-#ifdef UA_ENABLE_DISCOVERY
-    conf->discovery.cleanupTimeout = 60 * 60;
-#endif
-
-#ifdef UA_ENABLE_HISTORIZING
-    /* conf->accessHistoryDataCapability = UA_FALSE; */
-    /* conf->maxReturnDataValues = 0; */
-
-    /* conf->accessHistoryEventsCapability = UA_FALSE; */
-    /* conf->maxReturnEventValues = 0; */
-
-    /* conf->insertDataCapability = UA_FALSE; */
-    /* conf->insertEventCapability = UA_FALSE; */
-    /* conf->insertAnnotationsCapability = UA_FALSE; */
-
-    /* conf->replaceDataCapability = UA_FALSE; */
-    /* conf->replaceEventCapability = UA_FALSE; */
-
-    /* conf->updateDataCapability = UA_FALSE; */
-    /* conf->updateEventCapability = UA_FALSE; */
-
-    /* conf->deleteRawCapability = UA_FALSE; */
-    /* conf->deleteEventCapability = UA_FALSE; */
-    /* conf->deleteAtTimeDataCapability = UA_FALSE; */
-#endif
-
-    /* --> Finish setting the default static config <-- */
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_setBasics(UA_ServerConfig* conf) {
-    return setDefaultConfig(conf);
-}
-
-static UA_StatusCode
-addDefaultNetworkLayers(UA_ServerConfig *conf, UA_UInt16 portNumber,
-                        UA_UInt32 sendBufferSize, UA_UInt32 recvBufferSize) {
-    return UA_ServerConfig_addNetworkLayerTCP(conf, portNumber, sendBufferSize, recvBufferSize);
-}
-
-
-
-#ifdef UA_ENABLE_WEBSOCKET_SERVER
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addNetworkLayerWS(UA_ServerConfig *conf, UA_UInt16 portNumber,
-                                   UA_UInt32 sendBufferSize, UA_UInt32 recvBufferSize) {
-    /* Add a network layer */
-    UA_ServerNetworkLayer *tmp = (UA_ServerNetworkLayer *)
-        UA_realloc(conf->networkLayers, sizeof(UA_ServerNetworkLayer) * (1 + conf->networkLayersSize));
-    if(!tmp)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    conf->networkLayers = tmp;
-
-    UA_ConnectionConfig config = UA_ConnectionConfig_default;
-    if (sendBufferSize > 0)
-        config.sendBufferSize = sendBufferSize;
-    if (recvBufferSize > 0)
-        config.recvBufferSize = recvBufferSize;
-
-    conf->networkLayers[conf->networkLayersSize] =
-        UA_ServerNetworkLayerWS(config, portNumber, &conf->logger);
-    if (!conf->networkLayers[conf->networkLayersSize].handle)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    conf->networkLayersSize++;
-
-    return UA_STATUSCODE_GOOD;
-}
-#endif
-
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addNetworkLayerTCP(UA_ServerConfig *conf, UA_UInt16 portNumber,
-                                   UA_UInt32 sendBufferSize, UA_UInt32 recvBufferSize) {
-    /* Add a network layer */
-    UA_ServerNetworkLayer *tmp = (UA_ServerNetworkLayer *)
-        UA_realloc(conf->networkLayers, sizeof(UA_ServerNetworkLayer) * (1 + conf->networkLayersSize));
-    if(!tmp)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    conf->networkLayers = tmp;
-
-    UA_ConnectionConfig config = UA_ConnectionConfig_default;
-    if (sendBufferSize > 0)
-        config.sendBufferSize = sendBufferSize;
-    if (recvBufferSize > 0)
-        config.recvBufferSize = recvBufferSize;
-
-    conf->networkLayers[conf->networkLayersSize] =
-        UA_ServerNetworkLayerTCP(config, portNumber, &conf->logger);
-    if (!conf->networkLayers[conf->networkLayersSize].handle)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    conf->networkLayersSize++;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addSecurityPolicyNone(UA_ServerConfig *config, 
-                                      const UA_ByteString *certificate) {
-    UA_StatusCode retval;
-
-    /* Allocate the SecurityPolicies */
-    UA_SecurityPolicy *tmp = (UA_SecurityPolicy *)
-        UA_realloc(config->securityPolicies, sizeof(UA_SecurityPolicy) * (1 + config->securityPoliciesSize));
-    if(!tmp)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    config->securityPolicies = tmp;
-    
-    /* Populate the SecurityPolicies */
-    UA_ByteString localCertificate = UA_BYTESTRING_NULL;
-    if(certificate)
-        localCertificate = *certificate;
-    retval = UA_SecurityPolicy_None(&config->securityPolicies[config->securityPoliciesSize], NULL,
-                                    localCertificate, &config->logger);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    config->securityPoliciesSize++;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addEndpoint(UA_ServerConfig *config, const UA_String securityPolicyUri, 
-                            UA_MessageSecurityMode securityMode)
-{
-    UA_StatusCode retval;
-
-    /* Allocate the endpoint */
-    UA_EndpointDescription * tmp = (UA_EndpointDescription *)
-        UA_realloc(config->endpoints, sizeof(UA_EndpointDescription) * (1 + config->endpointsSize));
-    if(!tmp) {
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-    config->endpoints = tmp;
-
-    /* Lookup the security policy */
-    const UA_SecurityPolicy *policy = NULL;
-    for (size_t i = 0; i < config->securityPoliciesSize; ++i) {
-        if (UA_String_equal(&securityPolicyUri, &config->securityPolicies[i].policyUri)) {
-            policy = &config->securityPolicies[i];
-            break;
-        }
-    }
-    if (!policy)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-
-    /* Populate the endpoint */
-    retval = createEndpoint(config, &config->endpoints[config->endpointsSize],
-                            policy, securityMode);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    config->endpointsSize++;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addAllEndpoints(UA_ServerConfig *config) {
-    UA_StatusCode retval;
-
-    /* Allocate the endpoints */
-    UA_EndpointDescription * tmp = (UA_EndpointDescription *)
-        UA_realloc(config->endpoints, sizeof(UA_EndpointDescription) * (2 * config->securityPoliciesSize + config->endpointsSize));
-    if(!tmp) {
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-    config->endpoints = tmp;
-
-    /* Populate the endpoints */
-    for (size_t i = 0; i < config->securityPoliciesSize; ++i) {
-        if (UA_String_equal(&UA_SECURITY_POLICY_NONE_URI, &config->securityPolicies[i].policyUri)) {
-            retval = createEndpoint(config, &config->endpoints[config->endpointsSize],
-                                    &config->securityPolicies[i], UA_MESSAGESECURITYMODE_NONE);
-            if(retval != UA_STATUSCODE_GOOD)
-                return retval;
-            config->endpointsSize++;
-        } else {
-            retval = createEndpoint(config, &config->endpoints[config->endpointsSize],
-                                    &config->securityPolicies[i], UA_MESSAGESECURITYMODE_SIGN);
-            if(retval != UA_STATUSCODE_GOOD)
-                return retval;
-            config->endpointsSize++;
-
-            retval = createEndpoint(config, &config->endpoints[config->endpointsSize],
-                                    &config->securityPolicies[i], UA_MESSAGESECURITYMODE_SIGNANDENCRYPT);
-            if(retval != UA_STATUSCODE_GOOD)
-                return retval;
-            config->endpointsSize++;
-        }
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_setMinimalCustomBuffer(UA_ServerConfig *config, UA_UInt16 portNumber,
-                                       const UA_ByteString *certificate,
-                                       UA_UInt32 sendBufferSize,
-                                       UA_UInt32 recvBufferSize) {
-    if (!config)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-
-    UA_StatusCode retval = setDefaultConfig(config);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ServerConfig_clean(config);
-        return retval;
-    }
-
-    retval = addDefaultNetworkLayers(config, portNumber, sendBufferSize, recvBufferSize);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ServerConfig_clean(config);
-        return retval;
-    }
-
-    /* Allocate the SecurityPolicies */
-    retval = UA_ServerConfig_addSecurityPolicyNone(config, certificate);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ServerConfig_clean(config);
-        return retval;
-    }
-
-    /* Initialize the Access Control plugin */
-    retval = UA_AccessControl_default(config, true,
-                &config->securityPolicies[config->securityPoliciesSize-1].policyUri,
-                usernamePasswordsSize, usernamePasswords);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ServerConfig_clean(config);
-        return retval;
-    }
-
-    /* Allocate the endpoint */
-    retval = UA_ServerConfig_addEndpoint(config, UA_SECURITY_POLICY_NONE_URI, UA_MESSAGESECURITYMODE_NONE);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ServerConfig_clean(config);
-        return retval;
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-#ifdef UA_ENABLE_ENCRYPTION
-
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addSecurityPolicyBasic128Rsa15(UA_ServerConfig *config, 
-                                               const UA_ByteString *certificate,
-                                               const UA_ByteString *privateKey) {
-    UA_StatusCode retval;
-
-    /* Allocate the SecurityPolicies */
-    UA_SecurityPolicy *tmp = (UA_SecurityPolicy *)
-        UA_realloc(config->securityPolicies, sizeof(UA_SecurityPolicy) * (1 + config->securityPoliciesSize));
-    if(!tmp)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    config->securityPolicies = tmp;
-    
-    /* Populate the SecurityPolicies */
-    UA_ByteString localCertificate = UA_BYTESTRING_NULL;
-    UA_ByteString localPrivateKey  = UA_BYTESTRING_NULL;
-    if(certificate)
-        localCertificate = *certificate;
-    if(privateKey)
-       localPrivateKey = *privateKey;
-    retval = UA_SecurityPolicy_Basic128Rsa15(&config->securityPolicies[config->securityPoliciesSize],
-                                             &config->certificateVerification,
-                                             localCertificate, localPrivateKey, &config->logger);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    config->securityPoliciesSize++;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addSecurityPolicyBasic256(UA_ServerConfig *config, 
-                                          const UA_ByteString *certificate,
-                                          const UA_ByteString *privateKey) {
-    UA_StatusCode retval;
-
-    /* Allocate the SecurityPolicies */
-    UA_SecurityPolicy *tmp = (UA_SecurityPolicy *)
-        UA_realloc(config->securityPolicies, sizeof(UA_SecurityPolicy) * (1 + config->securityPoliciesSize));
-    if(!tmp)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    config->securityPolicies = tmp;
-    
-    /* Populate the SecurityPolicies */
-    UA_ByteString localCertificate = UA_BYTESTRING_NULL;
-    UA_ByteString localPrivateKey  = UA_BYTESTRING_NULL;
-    if(certificate)
-        localCertificate = *certificate;
-    if(privateKey)
-       localPrivateKey = *privateKey;
-    retval = UA_SecurityPolicy_Basic256(&config->securityPolicies[config->securityPoliciesSize],
-                                        &config->certificateVerification,
-                                        localCertificate, localPrivateKey, &config->logger);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    config->securityPoliciesSize++;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addSecurityPolicyBasic256Sha256(UA_ServerConfig *config, 
-                                                const UA_ByteString *certificate,
-                                                const UA_ByteString *privateKey) {
-    UA_StatusCode retval;
-
-    /* Allocate the SecurityPolicies */
-    UA_SecurityPolicy *tmp = (UA_SecurityPolicy *)
-        UA_realloc(config->securityPolicies, sizeof(UA_SecurityPolicy) * (1 + config->securityPoliciesSize));
-    if(!tmp)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    config->securityPolicies = tmp;
-    
-    /* Populate the SecurityPolicies */
-    UA_ByteString localCertificate = UA_BYTESTRING_NULL;
-    UA_ByteString localPrivateKey  = UA_BYTESTRING_NULL;
-    if(certificate)
-        localCertificate = *certificate;
-    if(privateKey)
-       localPrivateKey = *privateKey;
-    retval = UA_SecurityPolicy_Basic256Sha256(&config->securityPolicies[config->securityPoliciesSize],
-                                              &config->certificateVerification,
-                                              localCertificate, localPrivateKey, &config->logger);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    config->securityPoliciesSize++;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_addAllSecurityPolicies(UA_ServerConfig *config,
-                                       const UA_ByteString *certificate,
-                                       const UA_ByteString *privateKey) {
-    UA_StatusCode retval;
-
-    /* Allocate the SecurityPolicies */
-    UA_SecurityPolicy *tmp = (UA_SecurityPolicy *)
-        UA_realloc(config->securityPolicies, sizeof(UA_SecurityPolicy) * (4 + config->securityPoliciesSize));
-    if(!tmp)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    config->securityPolicies = tmp;
-    
-    /* Populate the SecurityPolicies */
-    UA_ByteString localCertificate = UA_BYTESTRING_NULL;
-    UA_ByteString localPrivateKey  = UA_BYTESTRING_NULL;
-    if(certificate)
-        localCertificate = *certificate;
-    if(privateKey)
-       localPrivateKey = *privateKey;
-
-    retval = UA_SecurityPolicy_None(&config->securityPolicies[config->securityPoliciesSize], NULL,
-                                    localCertificate, &config->logger);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    config->securityPoliciesSize++;
-
-    retval = UA_SecurityPolicy_Basic128Rsa15(&config->securityPolicies[config->securityPoliciesSize],
-                                             &config->certificateVerification,
-                                             localCertificate, localPrivateKey, &config->logger);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    config->securityPoliciesSize++;
-
-    retval = UA_SecurityPolicy_Basic256(&config->securityPolicies[config->securityPoliciesSize],
-                                        &config->certificateVerification,
-                                        localCertificate, localPrivateKey, &config->logger);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    config->securityPoliciesSize++;
-
-    retval = UA_SecurityPolicy_Basic256Sha256(&config->securityPolicies[config->securityPoliciesSize],
-                                              &config->certificateVerification,
-                                              localCertificate, localPrivateKey, &config->logger);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    config->securityPoliciesSize++;
-
-    return retval;
-}
-
-UA_EXPORT UA_StatusCode
-UA_ServerConfig_setDefaultWithSecurityPolicies(UA_ServerConfig *conf,
-                                               UA_UInt16 portNumber,
-                                               const UA_ByteString *certificate,
-                                               const UA_ByteString *privateKey,
-                                               const UA_ByteString *trustList,
-                                               size_t trustListSize,
-                                               const UA_ByteString *issuerList,
-                                               size_t issuerListSize,
-                                               const UA_ByteString *revocationList,
-                                               size_t revocationListSize) {
-    UA_StatusCode retval = setDefaultConfig(conf);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ServerConfig_clean(conf);
-        return retval;
-    }
-
-    retval = UA_CertificateVerification_Trustlist(&conf->certificateVerification,
-                                                  trustList, trustListSize,
-                                                  issuerList, issuerListSize,
-                                                  revocationList, revocationListSize);
-    if (retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    if(trustListSize == 0)
-        UA_LOG_WARNING(&conf->logger, UA_LOGCATEGORY_USERLAND,
-                       "No CA trust-list provided. "
-                       "Any remote certificate will be accepted.");
-
-    retval = addDefaultNetworkLayers(conf, portNumber, 0, 0);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ServerConfig_clean(conf);
-        return retval;
-    }
-
-    retval = UA_ServerConfig_addAllSecurityPolicies(conf, certificate, privateKey);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ServerConfig_clean(conf);
-        return retval;
-    }
-
-    retval = UA_AccessControl_default(conf, true,
-                &conf->securityPolicies[conf->securityPoliciesSize-1].policyUri,
-                usernamePasswordsSize, usernamePasswords);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ServerConfig_clean(conf);
-        return retval;
-    }
-
-    retval = UA_ServerConfig_addAllEndpoints(conf);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ServerConfig_clean(conf);
-        return retval;
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-#endif
-
-/***************************/
-/* Default Client Settings */
-/***************************/
-
-static UA_INLINE void
-UA_ClientConnectionTCP_poll_callback(UA_Client *client, void *data) {
-    UA_ClientConnectionTCP_poll(client, data);
-}
-
-UA_StatusCode
-UA_ClientConfig_setDefault(UA_ClientConfig *config) {
-    config->timeout = 5000;
-    config->secureChannelLifeTime = 10 * 60 * 1000; /* 10 minutes */
-
-    config->logger.log = UA_Log_Stdout_log;
-    config->logger.context = NULL;
-    config->logger.clear = UA_Log_Stdout_clear;
-
-    config->localConnectionConfig = UA_ConnectionConfig_default;
-
-    /* Certificate Verification that accepts every certificate. Can be
-     * overwritten when the policy is specialized. */
-    UA_CertificateVerification_AcceptAll(&config->certificateVerification);
-
-    /* With encryption enabled, the applicationUri needs to match the URI from
-     * the certificate */
-    config->clientDescription.applicationUri = UA_STRING_ALLOC(APPLICATION_URI);
-    config->clientDescription.applicationType = UA_APPLICATIONTYPE_CLIENT;
-
-    if(config->securityPoliciesSize > 0) {
-        UA_LOG_ERROR(&config->logger, UA_LOGCATEGORY_NETWORK,
-                     "Could not initialize a config that already has SecurityPolicies");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    config->securityPolicies = (UA_SecurityPolicy*)UA_malloc(sizeof(UA_SecurityPolicy));
-    if(!config->securityPolicies)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    UA_StatusCode retval = UA_SecurityPolicy_None(config->securityPolicies, NULL,
-                                                  UA_BYTESTRING_NULL, &config->logger);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_free(config->securityPolicies);
-        config->securityPolicies = NULL;
-        return retval;
-    }
-    config->securityPoliciesSize = 1;
-
-    config->connectionFunc = UA_ClientConnectionTCP;
-    config->initConnectionFunc = UA_ClientConnectionTCP_init; /* for async client */
-    config->pollConnectionFunc = UA_ClientConnectionTCP_poll_callback; /* for async connection */
-
-    config->customDataTypes = NULL;
-    config->stateCallback = NULL;
-    config->connectivityCheckInterval = 0;
-
-    config->requestedSessionTimeout = 1200000; /* requestedSessionTimeout */
-
-    config->inactivityCallback = NULL;
-    config->clientContext = NULL;
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    config->outStandingPublishRequests = 10;
-    config->subscriptionInactivityCallback = NULL;
-#endif
-
-    return UA_STATUSCODE_GOOD;
-}
-
-#ifdef UA_ENABLE_ENCRYPTION
-UA_StatusCode
-UA_ClientConfig_setDefaultEncryption(UA_ClientConfig *config,
-                                     UA_ByteString localCertificate, UA_ByteString privateKey,
-                                     const UA_ByteString *trustList, size_t trustListSize,
-                                     const UA_ByteString *revocationList, size_t revocationListSize) {
-    UA_StatusCode retval = UA_ClientConfig_setDefault(config);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    retval = UA_CertificateVerification_Trustlist(&config->certificateVerification,
-                                                  trustList, trustListSize,
-                                                  NULL, 0,
-                                                  revocationList, revocationListSize);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Populate SecurityPolicies */
-    UA_SecurityPolicy *sp = (UA_SecurityPolicy*)
-        UA_realloc(config->securityPolicies, sizeof(UA_SecurityPolicy) * 4);
-    if(!sp)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    config->securityPolicies = sp;
-
-    retval = UA_SecurityPolicy_Basic128Rsa15(&config->securityPolicies[1],
-                                             &config->certificateVerification,
-                                             localCertificate, privateKey, &config->logger);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    ++config->securityPoliciesSize;
-
-    retval = UA_SecurityPolicy_Basic256(&config->securityPolicies[2],
-                                        &config->certificateVerification,
-                                        localCertificate, privateKey, &config->logger);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    ++config->securityPoliciesSize;
-
-    retval = UA_SecurityPolicy_Basic256Sha256(&config->securityPolicies[3],
-                                              &config->certificateVerification,
-                                              localCertificate, privateKey, &config->logger);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    ++config->securityPoliciesSize;
-
-    return UA_STATUSCODE_GOOD;
-}
-#endif
diff --git a/ext/open62541/plugins/ua_debug_dump_pkgs.c b/ext/open62541/plugins/ua_debug_dump_pkgs.c
deleted file mode 100644
index ee42dea..0000000
--- a/ext/open62541/plugins/ua_debug_dump_pkgs.c
+++ /dev/null
@@ -1,43 +0,0 @@
-
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. 
- *
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#include "ua_util_internal.h"
-
-#include <ctype.h>
-#include <stdio.h>
-
-#ifdef UA_DEBUG_DUMP_PKGS
-void UA_dump_hex_pkg(UA_Byte* buffer, size_t bufferLen) {
-    printf("--------------- HEX Package Start ---------------\n");
-    char ascii[17];
-    memset(ascii,0,17);
-    for (size_t i = 0; i < bufferLen; i++)
-    {
-        if (i == 0)
-            printf("%08zx ", i);
-        else if (i%16 == 0)
-            printf(" |%s|\n%08zx ", ascii, i);
-        if (isprint((int)(buffer[i])))
-            ascii[i%16] = (char)buffer[i];
-        else
-            ascii[i%16] = '.';
-        if (i%8==0)
-            printf(" ");
-        printf("%02X ", (unsigned char)buffer[i]);
-
-    }
-    size_t fillPos = bufferLen %16;
-    ascii[fillPos] = 0;
-    for (size_t i=fillPos; i<16; i++) {
-        if (i%8==0)
-            printf(" ");
-        printf("   ");
-    }
-    printf(" |%s|\n%08zx\n", ascii, bufferLen);
-    printf("--------------- HEX Package END ---------------\n");
-}
-#endif
diff --git a/ext/open62541/plugins/ua_log_stdout.c b/ext/open62541/plugins/ua_log_stdout.c
deleted file mode 100644
index ab064ea..0000000
--- a/ext/open62541/plugins/ua_log_stdout.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2016-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Thomas Stalder, Blue Time Concept SA
- */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/types.h>
-
-#include <stdio.h>
-
-#if UA_MULTITHREADING >= 200
-#include <pthread.h>
-static pthread_mutex_t printf_mutex = PTHREAD_MUTEX_INITIALIZER;
-#endif
-
-/* ANSI escape sequences for color output taken from here:
- * https://stackoverflow.com/questions/3219393/stdlib-and-colored-output-in-c*/
-
-#ifdef UA_ENABLE_LOG_COLORS
-# define ANSI_COLOR_RED     "\x1b[31m"
-# define ANSI_COLOR_GREEN   "\x1b[32m"
-# define ANSI_COLOR_YELLOW  "\x1b[33m"
-# define ANSI_COLOR_BLUE    "\x1b[34m"
-# define ANSI_COLOR_MAGENTA "\x1b[35m"
-# define ANSI_COLOR_CYAN    "\x1b[36m"
-# define ANSI_COLOR_RESET   "\x1b[0m"
-#else
-# define ANSI_COLOR_RED     ""
-# define ANSI_COLOR_GREEN   ""
-# define ANSI_COLOR_YELLOW  ""
-# define ANSI_COLOR_BLUE    ""
-# define ANSI_COLOR_MAGENTA ""
-# define ANSI_COLOR_CYAN    ""
-# define ANSI_COLOR_RESET   ""
-#endif
-
-const char *logLevelNames[6] = {"trace", "debug",
-                                ANSI_COLOR_GREEN "info",
-                                ANSI_COLOR_YELLOW "warn",
-                                ANSI_COLOR_RED "error",
-                                ANSI_COLOR_MAGENTA "fatal"};
-const char *logCategoryNames[7] = {"network", "channel", "session", "server",
-                                   "client", "userland", "securitypolicy"};
-
-#ifdef __clang__
-__attribute__((__format__(__printf__, 4 , 0)))
-#endif
-void
-UA_Log_Stdout_log(void *_, UA_LogLevel level, UA_LogCategory category,
-                  const char *msg, va_list args) {
-    UA_Int64 tOffset = UA_DateTime_localTimeUtcOffset();
-    UA_DateTimeStruct dts = UA_DateTime_toStruct(UA_DateTime_now() + tOffset);
-
-#if UA_MULTITHREADING >= 200
-    pthread_mutex_lock(&printf_mutex);
-#endif
-
-    printf("[%04u-%02u-%02u %02u:%02u:%02u.%03u (UTC%+05d)] %s/%s" ANSI_COLOR_RESET "\t",
-           dts.year, dts.month, dts.day, dts.hour, dts.min, dts.sec, dts.milliSec,
-           (int)(tOffset / UA_DATETIME_SEC / 36), logLevelNames[level], logCategoryNames[category]);
-    vprintf(msg, args);
-    printf("\n");
-    fflush(stdout);
-
-#if UA_MULTITHREADING >= 200
-    pthread_mutex_unlock(&printf_mutex);
-#endif
-}
-
-void
-UA_Log_Stdout_clear(void *logContext) {
-
-}
-
-const UA_Logger UA_Log_Stdout_ = {UA_Log_Stdout_log, NULL, UA_Log_Stdout_clear};
-const UA_Logger *UA_Log_Stdout = &UA_Log_Stdout_;
diff --git a/ext/open62541/plugins/ua_nodestore_default.c b/ext/open62541/plugins/ua_nodestore_default.c
deleted file mode 100644
index 4c25677..0000000
--- a/ext/open62541/plugins/ua_nodestore_default.c
+++ /dev/null
@@ -1,357 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. 
- *
- *    Copyright 2014-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Julian Grothoff
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#include <open62541/plugin/nodestore.h>
-#include "ziptree.h"
-
-#ifndef UA_ENABLE_CUSTOM_NODESTORE
-
-#if UA_MULTITHREADING >= 100
-#define BEGIN_CRITSECT(NODEMAP) UA_LOCK(NODEMAP->lock)
-#define END_CRITSECT(NODEMAP) UA_UNLOCK(NODEMAP->lock)
-#else
-#define BEGIN_CRITSECT(NODEMAP) do {} while(0)
-#define END_CRITSECT(NODEMAP) do {} while(0)
-#endif
-
-/* container_of */
-#define container_of(ptr, type, member) \
-    (type *)((uintptr_t)ptr - offsetof(type,member))
-
-struct NodeEntry;
-typedef struct NodeEntry NodeEntry;
-
-struct NodeEntry {
-    ZIP_ENTRY(NodeEntry) zipfields;
-    UA_UInt32 nodeIdHash;
-    UA_UInt16 refCount; /* How many consumers have a reference to the node? */
-    UA_Boolean deleted; /* Node was marked as deleted and can be deleted when refCount == 0 */
-    NodeEntry *orig;    /* If a copy is made to replace a node, track that we
-                         * replace only the node from which the copy was made.
-                         * Important for concurrent operations. */
-    UA_NodeId nodeId; /* This is actually a UA_Node that also starts with a NodeId */
-};
-
-/* Absolute ordering for NodeIds */
-static enum ZIP_CMP
-cmpNodeId(const void *a, const void *b) {
-    const NodeEntry *aa = (const NodeEntry*)a;
-    const NodeEntry *bb = (const NodeEntry*)b;
-
-    /* Compare hash */
-    if(aa->nodeIdHash < bb->nodeIdHash)
-        return ZIP_CMP_LESS;
-    if(aa->nodeIdHash > bb->nodeIdHash)
-        return ZIP_CMP_MORE;
-
-    /* Compore nodes in detail */
-    return (enum ZIP_CMP)UA_NodeId_order(&aa->nodeId, &bb->nodeId);
-}
-
-ZIP_HEAD(NodeTree, NodeEntry);
-typedef struct NodeTree NodeTree;
-
-typedef struct {
-    NodeTree root;
-#if UA_MULTITHREADING >= 100
-    UA_LOCK_TYPE(lock) /* Protect access */
-#endif
-} NodeMap;
-
-ZIP_PROTTYPE(NodeTree, NodeEntry, NodeEntry)
-ZIP_IMPL(NodeTree, NodeEntry, zipfields, NodeEntry, zipfields, cmpNodeId)
-
-static NodeEntry *
-newEntry(UA_NodeClass nodeClass) {
-    size_t size = sizeof(NodeEntry) - sizeof(UA_NodeId);
-    switch(nodeClass) {
-    case UA_NODECLASS_OBJECT:
-        size += sizeof(UA_ObjectNode);
-        break;
-    case UA_NODECLASS_VARIABLE:
-        size += sizeof(UA_VariableNode);
-        break;
-    case UA_NODECLASS_METHOD:
-        size += sizeof(UA_MethodNode);
-        break;
-    case UA_NODECLASS_OBJECTTYPE:
-        size += sizeof(UA_ObjectTypeNode);
-        break;
-    case UA_NODECLASS_VARIABLETYPE:
-        size += sizeof(UA_VariableTypeNode);
-        break;
-    case UA_NODECLASS_REFERENCETYPE:
-        size += sizeof(UA_ReferenceTypeNode);
-        break;
-    case UA_NODECLASS_DATATYPE:
-        size += sizeof(UA_DataTypeNode);
-        break;
-    case UA_NODECLASS_VIEW:
-        size += sizeof(UA_ViewNode);
-        break;
-    default:
-        return NULL;
-    }
-    NodeEntry *entry = (NodeEntry*)UA_calloc(1, size);
-    if(!entry)
-        return NULL;
-    UA_Node *node = (UA_Node*)&entry->nodeId;
-    node->nodeClass = nodeClass;
-    return entry;
-}
-
-static void
-deleteEntry(NodeEntry *entry) {
-    UA_Node_deleteMembers((UA_Node*)&entry->nodeId);
-    UA_free(entry);
-}
-
-static void
-cleanupEntry(NodeEntry *entry) {
-    if(entry->deleted && entry->refCount == 0)
-        deleteEntry(entry);
-}
-
-/***********************/
-/* Interface functions */
-/***********************/
-
-/* Not yet inserted into the NodeMap */
-UA_Node *
-UA_Nodestore_newNode(void *nsCtx, UA_NodeClass nodeClass) {
-    NodeEntry *entry = newEntry(nodeClass);
-    if(!entry)
-        return NULL;
-    return (UA_Node*)&entry->nodeId;
-}
-
-/* Not yet inserted into the NodeMap */
-void
-UA_Nodestore_deleteNode(void *nsCtx, UA_Node *node) {
-    deleteEntry(container_of(node, NodeEntry, nodeId));
-}
-
-const UA_Node *
-UA_Nodestore_getNode(void *nsCtx, const UA_NodeId *nodeId) {
-    NodeMap *ns = (NodeMap*)nsCtx;
-    BEGIN_CRITSECT(ns);
-    NodeEntry dummy;
-    dummy.nodeIdHash = UA_NodeId_hash(nodeId);
-    dummy.nodeId = *nodeId;
-    NodeEntry *entry = ZIP_FIND(NodeTree, &ns->root, &dummy);
-    if(!entry) {
-        END_CRITSECT(ns);
-        return NULL;
-    }
-    ++entry->refCount;
-    END_CRITSECT(ns);
-    return (const UA_Node*)&entry->nodeId;
-}
-
-void
-UA_Nodestore_releaseNode(void *nsCtx, const UA_Node *node) {
-    if(!node)
-        return;
-#if UA_MULTITHREADING >= 100
-        NodeMap *ns = (NodeMap*)nsCtx;
-#endif
-    BEGIN_CRITSECT(ns);
-    NodeEntry *entry = container_of(node, NodeEntry, nodeId);
-    UA_assert(entry->refCount > 0);
-    --entry->refCount;
-    cleanupEntry(entry);
-    END_CRITSECT(ns);
-}
-
-UA_StatusCode
-UA_Nodestore_getNodeCopy(void *nsCtx, const UA_NodeId *nodeId,
-                         UA_Node **outNode) {
-    /* Find the node */
-    const UA_Node *node = UA_Nodestore_getNode(nsCtx, nodeId);
-    if(!node)
-        return UA_STATUSCODE_BADNODEIDUNKNOWN;
-
-    /* Create the new entry */
-    NodeEntry *ne = newEntry(node->nodeClass);
-    if(!ne) {
-        UA_Nodestore_releaseNode(nsCtx, node);
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-
-    /* Copy the node content */
-    UA_Node *nnode = (UA_Node*)&ne->nodeId;
-    UA_StatusCode retval = UA_Node_copy(node, nnode);
-    UA_Nodestore_releaseNode(nsCtx, node);
-    if(retval != UA_STATUSCODE_GOOD) {
-        deleteEntry(ne);
-        return retval;
-    }
-
-    ne->orig = container_of(node, NodeEntry, nodeId);
-    *outNode = nnode;
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_Nodestore_insertNode(void *nsCtx, UA_Node *node, UA_NodeId *addedNodeId) {
-    NodeEntry *entry = container_of(node, NodeEntry, nodeId);
-    NodeMap *ns = (NodeMap*)nsCtx;
-    BEGIN_CRITSECT(ns);
-
-    /* Ensure that the NodeId is unique */
-    NodeEntry dummy;
-    dummy.nodeId = node->nodeId;
-    if(node->nodeId.identifierType == UA_NODEIDTYPE_NUMERIC &&
-       node->nodeId.identifier.numeric == 0) {
-        do { /* Create a random nodeid until we find an unoccupied id */
-            node->nodeId.identifier.numeric = UA_UInt32_random();
-            dummy.nodeId.identifier.numeric = node->nodeId.identifier.numeric;
-            dummy.nodeIdHash = UA_NodeId_hash(&node->nodeId);
-        } while(ZIP_FIND(NodeTree, &ns->root, &dummy));
-    } else {
-        dummy.nodeIdHash = UA_NodeId_hash(&node->nodeId);
-        if(ZIP_FIND(NodeTree, &ns->root, &dummy)) { /* The nodeid exists */
-            deleteEntry(entry);
-            END_CRITSECT(ns);
-            return UA_STATUSCODE_BADNODEIDEXISTS;
-        }
-    }
-
-    /* Copy the NodeId */
-    if(addedNodeId) {
-        UA_StatusCode retval = UA_NodeId_copy(&node->nodeId, addedNodeId);
-        if(retval != UA_STATUSCODE_GOOD) {
-            deleteEntry(entry);
-            END_CRITSECT(ns);
-            return retval;
-        }
-    }
-
-    /* Insert the node */
-    entry->nodeIdHash = dummy.nodeIdHash;
-    ZIP_INSERT(NodeTree, &ns->root, entry, ZIP_FFS32(UA_UInt32_random()));
-    END_CRITSECT(ns);
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_Nodestore_replaceNode(void *nsCtx, UA_Node *node) {
-    /* Find the node */
-    const UA_Node *oldNode = UA_Nodestore_getNode(nsCtx, &node->nodeId);
-    if(!oldNode) {
-        deleteEntry(container_of(node, NodeEntry, nodeId));
-        return UA_STATUSCODE_BADNODEIDUNKNOWN;
-    }
-
-    /* Test if the copy is current */
-    NodeEntry *entry = container_of(node, NodeEntry, nodeId);
-    NodeEntry *oldEntry = container_of(oldNode, NodeEntry, nodeId);
-    if(oldEntry != entry->orig) {
-        /* The node was already updated since the copy was made */
-        deleteEntry(entry);
-        UA_Nodestore_releaseNode(nsCtx, oldNode);
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    /* Replace */
-    NodeMap *ns = (NodeMap*)nsCtx;
-    BEGIN_CRITSECT(ns);
-    ZIP_REMOVE(NodeTree, &ns->root, oldEntry);
-    entry->nodeIdHash = oldEntry->nodeIdHash;
-    ZIP_INSERT(NodeTree, &ns->root, entry, ZIP_RANK(entry, zipfields));
-    oldEntry->deleted = true;
-    END_CRITSECT(ns);
-
-    UA_Nodestore_releaseNode(nsCtx, oldNode);
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_Nodestore_removeNode(void *nsCtx, const UA_NodeId *nodeId) {
-    NodeMap *ns = (NodeMap*)nsCtx;
-    BEGIN_CRITSECT(ns);
-    NodeEntry dummy;
-    dummy.nodeIdHash = UA_NodeId_hash(nodeId);
-    dummy.nodeId = *nodeId;
-    NodeEntry *entry = ZIP_FIND(NodeTree, &ns->root, &dummy);
-    if(!entry) {
-        END_CRITSECT(ns);
-        return UA_STATUSCODE_BADNODEIDUNKNOWN;
-    }
-    ZIP_REMOVE(NodeTree, &ns->root, entry);
-    entry->deleted = true;
-    cleanupEntry(entry);
-    END_CRITSECT(ns);
-    return UA_STATUSCODE_GOOD;
-}
-
-struct VisitorData {
-    UA_NodestoreVisitor visitor;
-    void *visitorContext;
-};
-
-static void
-nodeVisitor(NodeEntry *entry, void *data) {
-    struct VisitorData *d = (struct VisitorData*)data;
-    d->visitor(d->visitorContext, (UA_Node*)&entry->nodeId);
-}
-
-void
-UA_Nodestore_iterate(void *nsCtx, UA_NodestoreVisitor visitor,
-                     void *visitorCtx) {
-    struct VisitorData d;
-    d.visitor = visitor;
-    d.visitorContext = visitorCtx;
-    NodeMap *ns = (NodeMap*)nsCtx;
-    BEGIN_CRITSECT(ns);
-    ZIP_ITER(NodeTree, &ns->root, nodeVisitor, &d);
-    END_CRITSECT(ns);
-}
-
-static void
-deleteNodeVisitor(NodeEntry *entry, void *data) {
-    deleteEntry(entry);
-}
-
-/***********************/
-/* Nodestore Lifecycle */
-/***********************/
-
-const UA_Boolean inPlaceEditAllowed = true;
-
-UA_StatusCode
-UA_Nodestore_new(void **nsCtx) {
-    /* Allocate and initialize the nodemap */
-    NodeMap *nodemap = (NodeMap*)UA_malloc(sizeof(NodeMap));
-    if(!nodemap)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-#if UA_MULTITHREADING >= 100
-    UA_LOCK_INIT(nodemap->lock)
-#endif
-
-    ZIP_INIT(&nodemap->root);
-
-    /* Populate the nodestore */
-    *nsCtx = (void*)nodemap;
-    return UA_STATUSCODE_GOOD;
-}
-
-void
-UA_Nodestore_delete(void *nsCtx) {
-    if (!nsCtx)
-        return;
-
-    NodeMap *ns = (NodeMap*)nsCtx;
-#if UA_MULTITHREADING >= 100
-    UA_LOCK_DESTROY(ns->lock);
-#endif
-    ZIP_ITER(NodeTree, &ns->root, deleteNodeVisitor, NULL);
-    UA_free(ns);
-}
-
-#endif /* UA_ENABLE_CUSTOM_NODESTORE */
diff --git a/ext/open62541/plugins/ua_pki_default.c b/ext/open62541/plugins/ua_pki_default.c
deleted file mode 100644
index 79331bc..0000000
--- a/ext/open62541/plugins/ua_pki_default.c
+++ /dev/null
@@ -1,589 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- *    Copyright 2018 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2019 (c) Kalycito Infotech Private Limited
- *    Copyright 2019 (c) Julius Pfrommer, Fraunhofer IOSB
- */
-
-#include <open62541/server_config.h>
-#include <open62541/plugin/pki_default.h>
-#include <open62541/plugin/log_stdout.h>
-
-#ifdef UA_ENABLE_ENCRYPTION
-#include <mbedtls/x509.h>
-#include <mbedtls/x509_crt.h>
-#include <mbedtls/error.h>
-#endif
-
-#define REMOTECERTIFICATETRUSTED 1
-#define ISSUERKNOWN              2
-#define DUALPARENT               3
-#define PARENTFOUND              4
-
-/************/
-/* AllowAll */
-/************/
-
-static UA_StatusCode
-verifyCertificateAllowAll(void *verificationContext,
-               const UA_ByteString *certificate) {
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-verifyApplicationURIAllowAll(void *verificationContext,
-                             const UA_ByteString *certificate,
-                             const UA_String *applicationURI) {
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-deleteVerifyAllowAll(UA_CertificateVerification *cv) {
-
-}
-
-void UA_CertificateVerification_AcceptAll(UA_CertificateVerification *cv) {
-    cv->verifyCertificate = verifyCertificateAllowAll;
-    cv->verifyApplicationURI = verifyApplicationURIAllowAll;
-    cv->deleteMembers = deleteVerifyAllowAll;
-}
-
-#ifdef UA_ENABLE_ENCRYPTION
-
-typedef struct {
-    /* If the folders are defined, we use them to reload the certificates during
-     * runtime */
-    UA_String trustListFolder;
-    UA_String issuerListFolder;
-    UA_String revocationListFolder;
-
-    mbedtls_x509_crt certificateTrustList;
-    mbedtls_x509_crt certificateIssuerList;
-    mbedtls_x509_crl certificateRevocationList;
-} CertInfo;
-
-#ifdef __linux__ /* Linux only so far */
-
-#include <dirent.h>
-#include <limits.h>
-
-static UA_StatusCode
-fileNamesFromFolder(const UA_String *folder, size_t *pathsSize, UA_String **paths) {
-    char buf[PATH_MAX + 1];
-    if(folder->length > PATH_MAX)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    memcpy(buf, folder->data, folder->length);
-    buf[folder->length] = 0;
-    
-    DIR *dir = opendir(buf);
-    if(!dir)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    *paths = (UA_String*)UA_Array_new(256, &UA_TYPES[UA_TYPES_STRING]);
-    if(*paths == NULL) {
-        closedir(dir);
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-
-    struct dirent *ent;
-    char buf2[PATH_MAX + 1];
-    realpath(buf, buf2);
-    size_t pathlen = strlen(buf2);
-    *pathsSize = 0;
-    while((ent = readdir (dir)) != NULL && *pathsSize < 256) {
-        if(ent->d_type != DT_REG)
-            continue;
-        buf2[pathlen] = '/';
-        buf2[pathlen+1] = 0;
-        strcat(buf2, ent->d_name);
-        (*paths)[*pathsSize] = UA_STRING_ALLOC(buf2);
-        *pathsSize += 1;
-    }
-    closedir(dir);
-
-    if(*pathsSize == 0) {
-        UA_free(*paths);
-        *paths = NULL;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-reloadCertificates(CertInfo *ci) {
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    int err = 0;
-
-    /* Load the trustlists */
-    if(ci->trustListFolder.length > 0) {
-        UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Reloading the trust-list");
-        mbedtls_x509_crt_free(&ci->certificateTrustList);
-        mbedtls_x509_crt_init(&ci->certificateTrustList);
-
-        char f[PATH_MAX];
-        memcpy(f, ci->trustListFolder.data, ci->trustListFolder.length);
-        f[ci->trustListFolder.length] = 0;
-        err = mbedtls_x509_crt_parse_path(&ci->certificateTrustList, f);
-        if(err == 0) {
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                        "Loaded certificate from %s", f);
-        } else {
-            char errBuff[300];
-            mbedtls_strerror(err, errBuff, 300);
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                        "Failed to load certificate from %s", f);
-        }
-    }
-
-    /* Load the revocationlists */
-    if(ci->revocationListFolder.length > 0) {
-        UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Reloading the revocation-list");
-        size_t pathsSize = 0;
-        UA_String *paths = NULL;
-        retval = fileNamesFromFolder(&ci->revocationListFolder, &pathsSize, &paths);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-        mbedtls_x509_crl_free(&ci->certificateRevocationList);
-        mbedtls_x509_crl_init(&ci->certificateRevocationList);
-        for(size_t i = 0; i < pathsSize; i++) {
-            char f[PATH_MAX];
-            memcpy(f, paths[i].data, paths[i].length);
-            f[paths[i].length] = 0;
-            err = mbedtls_x509_crl_parse_file(&ci->certificateRevocationList, f);
-            if(err == 0) {
-                UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                            "Loaded certificate from %.*s",
-                            (int)paths[i].length, paths[i].data);
-            } else {
-                UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                            "Failed to load certificate from %.*s",
-                            (int)paths[i].length, paths[i].data);
-            }
-        }
-        UA_Array_delete(paths, pathsSize, &UA_TYPES[UA_TYPES_STRING]);
-        paths = NULL;
-        pathsSize = 0;
-    }
-
-    /* Load the issuerlists */
-    if(ci->issuerListFolder.length > 0) {
-        UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Reloading the issuer-list");
-        mbedtls_x509_crt_free(&ci->certificateIssuerList);
-        mbedtls_x509_crt_init(&ci->certificateIssuerList);
-        char f[PATH_MAX];
-        memcpy(f, ci->issuerListFolder.data, ci->issuerListFolder.length);
-        f[ci->issuerListFolder.length] = 0;
-        err = mbedtls_x509_crt_parse_path(&ci->certificateIssuerList, f);
-        if(err == 0) {
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                        "Loaded certificate from %s", f);
-        } else {
-            UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                        "Failed to load certificate from %s", f);
-        }
-    }
-
-    return retval;
-}
-
-#endif
-
-static UA_StatusCode
-certificateVerification_verify(void *verificationContext,
-                               const UA_ByteString *certificate) {
-    CertInfo *ci = (CertInfo*)verificationContext;
-    if(!ci)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-#ifdef __linux__ /* Reload certificates if folder paths are specified */
-    reloadCertificates(ci);
-#endif
-
-    /* if(ci->certificateTrustList.raw.len == 0) { */
-    /*     UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, */
-    /*                    "No Trustlist loaded. Accepting the certificate."); */
-    /*     return UA_STATUSCODE_GOOD; */
-    /* } */
-
-    /* Parse the certificate */
-    mbedtls_x509_crt remoteCertificate;
-
-    /* Temporary Object to parse the trustList */
-    mbedtls_x509_crt *tempCert;
-
-    /* Temporary Object to parse the revocationList */
-    mbedtls_x509_crl *tempCrl;
-
-    /* Temporary Object to identify the parent CA when there is no intermediate CA */
-    mbedtls_x509_crt *parentCert;
-
-    /* Temporary Object to identify the parent CA when there is intermediate CA */
-    mbedtls_x509_crt *parentCert_2;
-
-    /* Flag value to identify if the issuer certificate is found */
-    int issuerKnown = 0;
-
-    /* Flag value to identify if the parent certificate found */
-    int parentFound = 0;
-
-    mbedtls_x509_crt_init(&remoteCertificate);
-    int mbedErr = mbedtls_x509_crt_parse(&remoteCertificate, certificate->data,
-                                         certificate->length);
-    if(mbedErr) {
-        /* char errBuff[300]; */
-        /* mbedtls_strerror(mbedErr, errBuff, 300); */
-        /* UA_LOG_WARNING(data->policyContext->securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY, */
-        /*                "Could not parse the remote certificate with error: %s", errBuff); */
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-    }
-
-    /* Verify */
-    mbedtls_x509_crt_profile crtProfile = {
-        MBEDTLS_X509_ID_FLAG(MBEDTLS_MD_SHA1) | MBEDTLS_X509_ID_FLAG(MBEDTLS_MD_SHA256),
-        0xFFFFFF, 0x000000, 128 * 8 // in bits
-    }; // TODO: remove magic numbers
-
-    uint32_t flags = 0;
-    mbedErr = mbedtls_x509_crt_verify_with_profile(&remoteCertificate,
-                                                   &ci->certificateTrustList,
-                                                   &ci->certificateRevocationList,
-                                                   &crtProfile, NULL, &flags, NULL, NULL);
-
-    /* Flag to check if the remote certificate is trusted or not */
-    int TRUSTED = 0;
-
-    /* Check if the remoteCertificate is present in the trustList while mbedErr value is not zero */
-    if(mbedErr && !(flags & MBEDTLS_X509_BADCERT_EXPIRED) && !(flags & MBEDTLS_X509_BADCERT_FUTURE)) {
-        for(tempCert = &ci->certificateTrustList; tempCert != NULL; tempCert = tempCert->next) {
-            if(remoteCertificate.raw.len == tempCert->raw.len &&
-               memcmp(remoteCertificate.raw.p, tempCert->raw.p, remoteCertificate.raw.len) == 0) {
-                TRUSTED = REMOTECERTIFICATETRUSTED;
-                break;
-            }
-        }
-    }
-
-    /* If the remote certificate is present in the trustList then check if the issuer certificate
-     * of remoteCertificate is present in issuerList */
-    if(TRUSTED && mbedErr) {
-        mbedErr = mbedtls_x509_crt_verify_with_profile(&remoteCertificate,
-                                                       &ci->certificateIssuerList,
-                                                       &ci->certificateRevocationList,
-                                                       &crtProfile, NULL, &flags, NULL, NULL);
-
-        /* Check if the parent certificate has a CRL file available */
-        if(!mbedErr) {
-            /* Flag value to identify if that there is an intermediate CA present */
-            int dualParent = 0;
-
-            /* Identify the topmost parent certificate for the remoteCertificate */
-            for( parentCert = &ci->certificateIssuerList; parentCert != NULL; parentCert = parentCert->next ) {
-                if(memcmp(remoteCertificate.issuer_raw.p, parentCert->subject_raw.p, parentCert->subject_raw.len) == 0) {
-                    for(parentCert_2 = &ci->certificateTrustList; parentCert_2 != NULL; parentCert_2 = parentCert_2->next) {
-                        if(memcmp(parentCert->issuer_raw.p, parentCert_2->subject_raw.p, parentCert_2->subject_raw.len) == 0) {
-                            dualParent = DUALPARENT;
-                            parentFound = PARENTFOUND;
-                            break;
-                        }
-
-                    }
-
-                    parentFound = PARENTFOUND;
-                }
-
-                if(parentFound == PARENTFOUND) {
-                    break;
-                }
-
-            }
-
-            /* Check if there is an intermediate certificate between the topmost parent
-             * certificate and child certificate
-             * If yes the topmost parent certificate is to be checked whether it has a
-             * CRL file avaiable */
-            if(dualParent == DUALPARENT && parentFound == PARENTFOUND) {
-                parentCert = parentCert_2;
-            }
-
-            /* If a parent certificate is found traverse the revocationList and identify
-             * if there is any CRL file that corresponds to the parentCertificate */
-            if(parentFound == PARENTFOUND) {
-                tempCrl = &ci->certificateRevocationList;
-                while(tempCrl != NULL) {
-                    if(tempCrl->version != 0 &&
-                       tempCrl->issuer_raw.len == parentCert->subject_raw.len &&
-                       memcmp(tempCrl->issuer_raw.p,
-                              parentCert->subject_raw.p,
-                              tempCrl->issuer_raw.len) == 0) {
-                        issuerKnown = ISSUERKNOWN;
-                        break;
-                    }
-
-                    tempCrl = tempCrl->next;
-                }
-
-                /* If the CRL file corresponding to the parent certificate is not present
-                 * then return UA_STATUSCODE_BADCERTIFICATEISSUERREVOCATIONUNKNOWN */
-                if(!issuerKnown) {
-                    return UA_STATUSCODE_BADCERTIFICATEISSUERREVOCATIONUNKNOWN;
-                }
-
-            }
-
-        }
-
-    }
-    else if(!mbedErr && !TRUSTED) {
-        /* This else if section is to identify if the parent certificate which is present in trustList
-         * has CRL file corresponding to it */
-
-        /* Identify the parent certificate of the remoteCertificate */
-        for(parentCert = &ci->certificateTrustList; parentCert != NULL; parentCert = parentCert->next) {
-            if(memcmp(remoteCertificate.issuer_raw.p, parentCert->subject_raw.p, parentCert->subject_raw.len) == 0) {
-                parentFound = PARENTFOUND;
-                break;
-            }
-
-        }
-
-        /* If the parent certificate is found traverse the revocationList and identify
-         * if there is any CRL file that corresponds to the parentCertificate */
-        if(parentFound == PARENTFOUND &&
-            memcmp(remoteCertificate.issuer_raw.p, remoteCertificate.subject_raw.p, remoteCertificate.subject_raw.len) != 0) {
-            tempCrl = &ci->certificateRevocationList;
-            while(tempCrl != NULL) {
-                if(tempCrl->version != 0 &&
-                   tempCrl->issuer_raw.len == parentCert->subject_raw.len &&
-                   memcmp(tempCrl->issuer_raw.p,
-                          parentCert->subject_raw.p,
-                          tempCrl->issuer_raw.len) == 0) {
-                    issuerKnown = ISSUERKNOWN;
-                    break;
-                }
-
-                tempCrl = tempCrl->next;
-            }
-
-            /* If the CRL file corresponding to the parent certificate is not present
-             * then return UA_STATUSCODE_BADCERTIFICATEREVOCATIONUNKNOWN */
-            if(!issuerKnown) {
-                return UA_STATUSCODE_BADCERTIFICATEREVOCATIONUNKNOWN;
-            }
-
-        }
-
-    }
-
-    // TODO: Extend verification
-
-    /* This condition will check whether the certificate is a User certificate
-     * or a CA certificate. If the MBEDTLS_X509_KU_KEY_CERT_SIGN and
-     * MBEDTLS_X509_KU_CRL_SIGN of key_usage are set, then the certificate
-     * shall be condidered as CA Certificate and cannot be used to establish a
-     * connection. Refer the test case CTT/Security/Security Certificate Validation/029.js
-     * for more details */
-    if((remoteCertificate.key_usage & MBEDTLS_X509_KU_KEY_CERT_SIGN) &&
-       (remoteCertificate.key_usage & MBEDTLS_X509_KU_CRL_SIGN)) {
-        return UA_STATUSCODE_BADCERTIFICATEUSENOTALLOWED;
-    }
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(mbedErr) {
-        /* char buff[100]; */
-        /* mbedtls_x509_crt_verify_info(buff, 100, "", flags); */
-        /* UA_LOG_ERROR(channelContextData->policyContext->securityPolicy->logger, */
-        /*              UA_LOGCATEGORY_SECURITYPOLICY, */
-        /*              "Verifying the certificate failed with error: %s", buff); */
-
-        if(flags & (uint32_t)MBEDTLS_X509_BADCERT_NOT_TRUSTED) {
-            retval = UA_STATUSCODE_BADCERTIFICATEUNTRUSTED;
-        } else if(flags & (uint32_t)MBEDTLS_X509_BADCERT_FUTURE ||
-                  flags & (uint32_t)MBEDTLS_X509_BADCERT_EXPIRED) {
-            retval = UA_STATUSCODE_BADCERTIFICATETIMEINVALID;
-        } else if(flags & (uint32_t)MBEDTLS_X509_BADCERT_REVOKED ||
-                  flags & (uint32_t)MBEDTLS_X509_BADCRL_EXPIRED) {
-            retval = UA_STATUSCODE_BADCERTIFICATEREVOKED;
-        } else {
-            retval = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-        }
-    }
-
-    mbedtls_x509_crt_free(&remoteCertificate);
-    return retval;
-}
-
-/* Find binary substring. Taken and adjusted from
- * http://tungchingkai.blogspot.com/2011/07/binary-strstr.html */
-
-static const unsigned char *
-bstrchr(const unsigned char *s, const unsigned char ch, size_t l) {
-    /* find first occurrence of c in char s[] for length l*/
-    /* handle special case */
-    if(l == 0)
-        return (NULL);
-
-    for(; *s != ch; ++s, --l)
-        if(l == 0)
-            return (NULL);
-    return s;
-}
-
-static const unsigned char *
-bstrstr(const unsigned char *s1, size_t l1, const unsigned char *s2, size_t l2) {
-    /* find first occurrence of s2[] in s1[] for length l1*/
-    const unsigned char *ss1 = s1;
-    const unsigned char *ss2 = s2;
-    /* handle special case */
-    if(l1 == 0)
-        return (NULL);
-    if(l2 == 0)
-        return s1;
-
-    /* match prefix */
-    for (; (s1 = bstrchr(s1, *s2, (uintptr_t)ss1-(uintptr_t)s1+(uintptr_t)l1)) != NULL &&
-             (uintptr_t)ss1-(uintptr_t)s1+(uintptr_t)l1 != 0; ++s1) {
-
-        /* match rest of prefix */
-        const unsigned char *sc1, *sc2;
-        for (sc1 = s1, sc2 = s2; ;)
-            if (++sc2 >= ss2+l2)
-                return s1;
-            else if (*++sc1 != *sc2)
-                break;
-    }
-    return NULL;
-}
-
-static UA_StatusCode
-certificateVerification_verifyApplicationURI(void *verificationContext,
-                                             const UA_ByteString *certificate,
-                                             const UA_String *applicationURI) {
-    CertInfo *ci = (CertInfo*)verificationContext;
-    if(!ci)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Parse the certificate */
-    mbedtls_x509_crt remoteCertificate;
-    mbedtls_x509_crt_init(&remoteCertificate);
-    int mbedErr = mbedtls_x509_crt_parse(&remoteCertificate, certificate->data,
-                                         certificate->length);
-    if(mbedErr)
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-
-    /* Poor man's ApplicationUri verification. mbedTLS does not parse all fields
-     * of the Alternative Subject Name. Instead test whether the URI-string is
-     * present in the v3_ext field in general.
-     *
-     * TODO: Improve parsing of the Alternative Subject Name */
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(bstrstr(remoteCertificate.v3_ext.p, remoteCertificate.v3_ext.len,
-               applicationURI->data, applicationURI->length) == NULL)
-        retval = UA_STATUSCODE_BADCERTIFICATEURIINVALID;
-
-    mbedtls_x509_crt_free(&remoteCertificate);
-    return retval;
-}
-
-static void
-certificateVerification_deleteMembers(UA_CertificateVerification *cv) {
-    CertInfo *ci = (CertInfo*)cv->context;
-    if(!ci)
-        return;
-    mbedtls_x509_crt_free(&ci->certificateTrustList);
-    mbedtls_x509_crl_free(&ci->certificateRevocationList);
-    mbedtls_x509_crt_free(&ci->certificateIssuerList);
-    UA_String_clear(&ci->trustListFolder);
-    UA_String_clear(&ci->issuerListFolder);
-    UA_String_clear(&ci->revocationListFolder);
-    UA_free(ci);
-    cv->context = NULL;
-}
-
-UA_StatusCode
-UA_CertificateVerification_Trustlist(UA_CertificateVerification *cv,
-                                     const UA_ByteString *certificateTrustList,
-                                     size_t certificateTrustListSize,
-                                     const UA_ByteString *certificateIssuerList,
-                                     size_t certificateIssuerListSize,
-                                     const UA_ByteString *certificateRevocationList,
-                                     size_t certificateRevocationListSize) {
-    CertInfo *ci = (CertInfo*)UA_malloc(sizeof(CertInfo));
-    if(!ci)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    memset(ci, 0, sizeof(CertInfo));
-    mbedtls_x509_crt_init(&ci->certificateTrustList);
-    mbedtls_x509_crl_init(&ci->certificateRevocationList);
-    mbedtls_x509_crt_init(&ci->certificateIssuerList);
-
-    cv->context = (void*)ci;
-    if(certificateTrustListSize > 0)
-        cv->verifyCertificate = certificateVerification_verify;
-    else
-        cv->verifyCertificate = verifyCertificateAllowAll;
-    cv->deleteMembers = certificateVerification_deleteMembers;
-    cv->verifyApplicationURI = certificateVerification_verifyApplicationURI;
-
-    int err = 0;
-    for(size_t i = 0; i < certificateTrustListSize; i++) {
-        err = mbedtls_x509_crt_parse(&ci->certificateTrustList,
-                                     certificateTrustList[i].data,
-                                     certificateTrustList[i].length);
-        if(err)
-            goto error;
-    }
-    for(size_t i = 0; i < certificateIssuerListSize; i++) {
-        err = mbedtls_x509_crt_parse(&ci->certificateIssuerList,
-                                     certificateIssuerList[i].data,
-                                     certificateIssuerList[i].length);
-        if(err)
-            goto error;
-    }
-    for(size_t i = 0; i < certificateRevocationListSize; i++) {
-        err = mbedtls_x509_crl_parse(&ci->certificateRevocationList,
-                                     certificateRevocationList[i].data,
-                                     certificateRevocationList[i].length);
-        if(err)
-            goto error;
-    }
-
-    return UA_STATUSCODE_GOOD;
-error:
-    certificateVerification_deleteMembers(cv);
-    return UA_STATUSCODE_BADINTERNALERROR;
-}
-
-#ifdef __linux__ /* Linux only so far */
-
-UA_StatusCode
-UA_CertificateVerification_CertFolders(UA_CertificateVerification *cv,
-                                       const char *trustListFolder,
-                                       const char *issuerListFolder,
-                                       const char *revocationListFolder) {
-    CertInfo *ci = (CertInfo*)UA_malloc(sizeof(CertInfo));
-    if(!ci)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    memset(ci, 0, sizeof(CertInfo));
-    mbedtls_x509_crt_init(&ci->certificateTrustList);
-    mbedtls_x509_crl_init(&ci->certificateRevocationList);
-    mbedtls_x509_crt_init(&ci->certificateIssuerList);
-
-    /* Only set the folder paths. They will be reloaded during runtime.
-     * TODO: Add a more efficient reloading of only the changes */
-    ci->trustListFolder = UA_STRING_ALLOC(trustListFolder);
-    ci->issuerListFolder = UA_STRING_ALLOC(issuerListFolder);
-    ci->revocationListFolder = UA_STRING_ALLOC(revocationListFolder);
-
-    reloadCertificates(ci);
-
-    cv->context = (void*)ci;
-    cv->verifyCertificate = certificateVerification_verify;
-    cv->deleteMembers = certificateVerification_deleteMembers;
-    cv->verifyApplicationURI = certificateVerification_verifyApplicationURI;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-#endif
-
-#endif
diff --git a/ext/open62541/plugins/ua_pubsub_ethernet.c b/ext/open62541/plugins/ua_pubsub_ethernet.c
deleted file mode 100644
index 15e71be..0000000
--- a/ext/open62541/plugins/ua_pubsub_ethernet.c
+++ /dev/null
@@ -1,447 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *   Copyright 2018 (c) Kontron Europe GmbH (Author: Rudolf Hoyler)
- */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/plugin/pubsub_ethernet.h>
-#include <open62541/util.h>
-
-#include <linux/if_packet.h>
-#include <netinet/ether.h>
-
-#ifndef ETHERTYPE_UADP
-#define ETHERTYPE_UADP 0xb62c
-#endif
-
-/* Ethernet network layer specific internal data */
-typedef struct {
-    int ifindex;
-    UA_UInt16 vid;
-    UA_Byte prio;
-    UA_Byte ifAddress[ETH_ALEN];
-    UA_Byte targetAddress[ETH_ALEN];
-} UA_PubSubChannelDataEthernet;
-
-/*
- * OPC-UA specification Part 14:
- *
- * "The target is a MAC address, an IP address or a registered name like a
- *  hostname. The format of a MAC address is six groups of hexadecimal digits,
- *  separated by hyphens (e.g. 01-23-45-67-89-ab). A system may also accept
- *  hostnames and/or IP addresses if it provides means to resolve it to a MAC
- *  address (e.g. DNS and Reverse-ARP)."
- *
- * We do not support currently IP addresses or hostnames.
- */
-static UA_StatusCode
-UA_parseHardwareAddress(UA_String* target, UA_Byte* destinationMac) {
-    size_t curr = 0, idx = 0;
-    for(; idx < ETH_ALEN; idx++) {
-        UA_UInt32 value;
-        size_t progress =
-            UA_readNumberWithBase(&target->data[curr],
-                                  target->length - curr, &value, 16);
-        if(progress == 0 || value > (long)0xff)
-            return UA_STATUSCODE_BADINTERNALERROR;
-
-        destinationMac[idx] = (UA_Byte) value;
-
-        curr += progress;
-        if(curr == target->length)
-            break;
-
-        if(target->data[curr] != '-')
-            return UA_STATUSCODE_BADINTERNALERROR;
-
-        curr++; /* skip '-' */
-    }
-
-    if(idx != (ETH_ALEN-1))
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Open communication socket based on the connectionConfig.
- *
- * @return ref to created channel, NULL on error
- */
-static UA_PubSubChannel *
-UA_PubSubChannelEthernet_open(const UA_PubSubConnectionConfig *connectionConfig) {
-
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                "Open PubSub ethernet connection.");
-
-    /* allocate and init memory for the ethernet specific internal data */
-    UA_PubSubChannelDataEthernet* channelDataEthernet =
-            (UA_PubSubChannelDataEthernet*) UA_calloc(1, sizeof(*channelDataEthernet));
-    if(!channelDataEthernet) {
-        UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-            "PubSub Connection creation failed. Out of memory.");
-        return NULL;
-    }
-
-    /* handle specified network address */
-    UA_NetworkAddressUrlDataType *address;
-    if(UA_Variant_hasScalarType(&connectionConfig->address,
-                                 &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE])) {
-        address = (UA_NetworkAddressUrlDataType *) connectionConfig->address.data;
-    } else {
-        UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-            "PubSub Connection creation failed. Invalid Address.");
-        UA_free(channelDataEthernet);
-        return NULL;
-    }
-    UA_LOG_DEBUG(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Specified Interface Name = %.*s",
-         (int) address->networkInterface.length, address->networkInterface.data);
-    UA_LOG_DEBUG(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Specified Network Url = %.*s",
-         (int)address->url.length, address->url.data);
-
-    UA_String target;
-    /* encode the URL and store information in internal structure */
-    if(UA_parseEndpointUrlEthernet(&address->url, &target, &channelDataEthernet->vid,
-                                   &channelDataEthernet->prio)) {
-        UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-            "PubSub Connection creation failed. Invalid Address URL.");
-        UA_free(channelDataEthernet);
-        return NULL;
-    }
-
-    /* Get a valid MAC address from target definition */
-    if(UA_parseHardwareAddress(&target, channelDataEthernet->targetAddress) != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "PubSub Connection creation failed. Invalid destination MAC address.");
-        UA_free(channelDataEthernet);
-        return NULL;
-    }
-
-    /* generate a new Pub/Sub channel and open a related socket */
-    UA_PubSubChannel *newChannel = (UA_PubSubChannel*)UA_calloc(1, sizeof(UA_PubSubChannel));
-    if(!newChannel) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "PubSub Connection creation failed. Out of memory.");
-        UA_free(channelDataEthernet);
-        return NULL;
-    }
-
-    /* Open a packet socket */
-    int sockFd = UA_socket(PF_PACKET, SOCK_RAW, 0);
-    if(sockFd < 0) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-            "PubSub connection creation failed. Cannot create socket.");
-        UA_free(channelDataEthernet);
-        UA_free(newChannel);
-        return NULL;
-    }
-    newChannel->sockfd = sockFd;
-
-    /* allow the socket to be reused */
-    int opt = 1;
-    if(UA_setsockopt(sockFd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) < 0) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-            "PubSub connection creation failed. Cannot set socket reuse.");
-        UA_close(sockFd);
-        UA_free(channelDataEthernet);
-        UA_free(newChannel);
-        return NULL;
-    }
-
-    /* get interface index */
-    struct ifreq ifreq;
-    memset(&ifreq, 0, sizeof(struct ifreq));
-    strncpy(ifreq.ifr_name, (char*)address->networkInterface.data,
-            UA_MIN(address->networkInterface.length, sizeof(ifreq.ifr_name)-1));
-
-    if(ioctl(sockFd, SIOCGIFINDEX, &ifreq) < 0) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-           "PubSub connection creation failed. Cannot get interface index.");
-        UA_close(sockFd);
-        UA_free(channelDataEthernet);
-        UA_free(newChannel);
-        return NULL;
-    }
-    channelDataEthernet->ifindex = ifreq.ifr_ifindex;
-
-    /* determine own MAC address (source address for send) */
-    if(ioctl(sockFd, SIOCGIFHWADDR, &ifreq) < 0) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-            "PubSub connection creation failed. Cannot determine own MAC address.");
-        UA_close(sockFd);
-        UA_free(channelDataEthernet);
-        UA_free(newChannel);
-        return NULL;
-    }
-    memcpy(channelDataEthernet->ifAddress, &ifreq.ifr_hwaddr.sa_data, ETH_ALEN);
-
-    /* bind the socket to interface and ethertype */
-    struct sockaddr_ll sll = { 0 };
-    sll.sll_family = AF_PACKET;
-    sll.sll_ifindex = channelDataEthernet->ifindex;
-    sll.sll_protocol = htons(ETHERTYPE_UADP);
-
-    if(UA_bind(sockFd, (struct sockaddr*)&sll, sizeof(sll)) < 0) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-            "PubSub connection creation failed. Cannot bind socket.");
-        UA_close(sockFd);
-        UA_free(channelDataEthernet);
-        UA_free(newChannel);
-        return NULL;
-    }
-
-    newChannel->handle = channelDataEthernet;
-    newChannel->state = UA_PUBSUB_CHANNEL_PUB;
-
-    return newChannel;
-}
-
-static UA_Boolean
-is_multicast_address(const UA_Byte *address) {
-    /* check if it is a unicast address */
-    if((address[0] & 1) == 0) {
-        return UA_FALSE;
-    }
-
-    /* and exclude broadcast addresses */
-    for(size_t i = 0; i < ETH_ALEN; i++) {
-        if(address[i] != 0xff)
-            return UA_TRUE;
-    }
-
-    /* reaching this point, we know it has to be a broadcast address */
-    return UA_FALSE;
-}
-
-/**
- * Subscribe to a given address.
- *
- * @return UA_STATUSCODE_GOOD on success
- */
-static UA_StatusCode
-UA_PubSubChannelEthernet_regist(UA_PubSubChannel *channel,
-                                UA_ExtensionObject *transportSettings,
-                                void (*notUsedHere)(UA_ByteString *encodedBuffer, UA_ByteString *topic)) {
-    UA_PubSubChannelDataEthernet *channelDataEthernet =
-        (UA_PubSubChannelDataEthernet *) channel->handle;
-
-    if(!is_multicast_address(channelDataEthernet->targetAddress))
-        return UA_STATUSCODE_GOOD;
-
-    struct packet_mreq mreq;
-    mreq.mr_ifindex = channelDataEthernet->ifindex;
-    mreq.mr_type = PACKET_MR_MULTICAST;
-    mreq.mr_alen = ETH_ALEN;
-    memcpy(mreq.mr_address, channelDataEthernet->targetAddress, ETH_ALEN);
-
-    if(UA_setsockopt(channel->sockfd, SOL_PACKET, PACKET_ADD_MEMBERSHIP, (char*) &mreq, sizeof(mreq)) < 0) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "PubSub Connection regist failed. %s", strerror(errno));
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Remove current subscription.
- *
- * @return UA_STATUSCODE_GOOD on success
- */
-static UA_StatusCode
-UA_PubSubChannelEthernet_unregist(UA_PubSubChannel *channel,
-                                  UA_ExtensionObject *transportSettings) {
-    UA_PubSubChannelDataEthernet *channelDataEthernet =
-        (UA_PubSubChannelDataEthernet *) channel->handle;
-
-    if(!is_multicast_address(channelDataEthernet->targetAddress)) {
-        return UA_STATUSCODE_GOOD;
-    }
-
-    struct packet_mreq mreq;
-    mreq.mr_ifindex = channelDataEthernet->ifindex;
-    mreq.mr_type = PACKET_MR_MULTICAST;
-    mreq.mr_alen = ETH_ALEN;
-    memcpy(mreq.mr_address, channelDataEthernet->targetAddress, ETH_ALEN);
-
-    if(UA_setsockopt(channel->sockfd, SOL_PACKET, PACKET_DROP_MEMBERSHIP, (char*) &mreq, sizeof(mreq) < 0)) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "PubSub Connection regist failed.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Send messages to the connection defined address
- *
- * @return UA_STATUSCODE_GOOD if success
- */
-static UA_StatusCode
-UA_PubSubChannelEthernet_send(UA_PubSubChannel *channel,
-                              UA_ExtensionObject *transportSettings,
-                              const UA_ByteString *buf) {
-    UA_PubSubChannelDataEthernet *channelDataEthernet =
-        (UA_PubSubChannelDataEthernet *) channel->handle;
-
-    /* Allocate a buffer for the ethernet data which contains the ethernet
-     * header (without VLAN tag), the VLAN tag and the OPC-UA/Ethernet data. */
-    char *bufSend, *ptrCur;
-    size_t lenBuf;
-    struct ether_header* ethHdr;
-
-    lenBuf = sizeof(*ethHdr) + 4 + buf->length;
-    bufSend = (char*) UA_malloc(lenBuf);
-    ethHdr = (struct ether_header*) bufSend;
-
-    /* Set (own) source MAC address */
-    memcpy(ethHdr->ether_shost, channelDataEthernet->ifAddress, ETH_ALEN);
-
-    /* Set destination MAC address */
-    memcpy(ethHdr->ether_dhost, channelDataEthernet->targetAddress, ETH_ALEN);
-
-    /* Set ethertype */
-    /* Either VLAN or Ethernet */
-    ptrCur = bufSend + sizeof(*ethHdr);
-    if(channelDataEthernet->vid == 0) {
-        ethHdr->ether_type = htons(ETHERTYPE_UADP);
-        lenBuf -= 4;  /* no VLAN tag */
-    } else {
-        ethHdr->ether_type = htons(ETHERTYPE_VLAN);
-        /* set VLAN ID */
-        UA_UInt16 vlanTag;
-        vlanTag = (UA_UInt16) (channelDataEthernet->vid + (channelDataEthernet->prio << 13));
-        *((UA_UInt16 *) ptrCur) = htons(vlanTag);
-        ptrCur += sizeof(UA_UInt16);
-        /* set Ethernet */
-        *((UA_UInt16 *) ptrCur) = htons(ETHERTYPE_UADP);
-        ptrCur += sizeof(UA_UInt16);
-    }
-
-    /* copy payload of ethernet message */
-    memcpy(ptrCur, buf->data, buf->length);
-
-    ssize_t rc;
-    rc = UA_send(channel->sockfd, bufSend, lenBuf, 0);
-    if(rc  < 0) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-            "PubSub connection send failed. Send message failed.");
-        UA_free(bufSend);
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    UA_free(bufSend);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Receive messages.
- *
- * @param timeout in usec -> not used
- * @return
- */
-static UA_StatusCode
-UA_PubSubChannelEthernet_receive(UA_PubSubChannel *channel, UA_ByteString *message,
-                                 UA_ExtensionObject *transportSettings, UA_UInt32 timeout) {
-    UA_PubSubChannelDataEthernet *channelDataEthernet =
-        (UA_PubSubChannelDataEthernet *) channel->handle;
-
-    struct ether_header eth_hdr;
-    struct msghdr msg;
-    struct iovec iov[2];
-
-    iov[0].iov_base = &eth_hdr;
-    iov[0].iov_len = sizeof(eth_hdr);
-    iov[1].iov_base = message->data;
-    iov[1].iov_len = message->length;
-    msg.msg_namelen = 0;
-    msg.msg_iov = iov;
-    msg.msg_iovlen = 2;
-    msg.msg_controllen = 0;
-
-    /* Sleep in a select call if a timeout was set */
-    if(timeout > 0) {
-        fd_set fdset;
-        FD_ZERO(&fdset);
-        UA_fd_set(channel->sockfd, &fdset);
-        struct timeval tmptv = {(long int)(timeout / 1000000),
-                                (long int)(timeout % 1000000)};
-        int resultsize = UA_select(channel->sockfd+1, &fdset, NULL, NULL, &tmptv);
-        if(resultsize == 0) {
-            message->length = 0;
-            return UA_STATUSCODE_GOODNONCRITICALTIMEOUT;
-        }
-        if(resultsize == -1) {
-            message->length = 0;
-            return UA_STATUSCODE_BADINTERNALERROR;
-        }
-    }
-
-    /* Read the current packet on the socket */
-    ssize_t dataLen = recvmsg(channel->sockfd, &msg, 0);
-    if(dataLen < 0) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "PubSub connection receive failed. Receive message failed.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    if((size_t)dataLen < sizeof(eth_hdr)) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "PubSub connection receive failed. Packet too small.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    if(dataLen == 0)
-        return UA_STATUSCODE_GOODNODATA;
-
-    /* Make sure we match our target */
-    if(memcmp(eth_hdr.ether_dhost, channelDataEthernet->targetAddress, ETH_ALEN) != 0)
-        return UA_STATUSCODE_GOODNODATA;
-
-    /* Set the message length */
-    message->length = (size_t)dataLen - sizeof(eth_hdr);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Close channel and free the channel data.
- *
- * @return UA_STATUSCODE_GOOD if success
- */
-static UA_StatusCode
-UA_PubSubChannelEthernet_close(UA_PubSubChannel *channel) {
-    UA_close(channel->sockfd);
-    UA_free(channel->handle);
-    UA_free(channel);
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Generate a new channel. based on the given configuration.
- *
- * @param connectionConfig connection configuration
- * @return  ref to created channel, NULL on error
- */
-static UA_PubSubChannel *
-TransportLayerEthernet_addChannel(UA_PubSubConnectionConfig *connectionConfig) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "PubSub channel requested");
-    UA_PubSubChannel * pubSubChannel = UA_PubSubChannelEthernet_open(connectionConfig);
-    if(pubSubChannel) {
-        pubSubChannel->regist = UA_PubSubChannelEthernet_regist;
-        pubSubChannel->unregist = UA_PubSubChannelEthernet_unregist;
-        pubSubChannel->send = UA_PubSubChannelEthernet_send;
-        pubSubChannel->receive = UA_PubSubChannelEthernet_receive;
-        pubSubChannel->close = UA_PubSubChannelEthernet_close;
-        pubSubChannel->connectionConfig = connectionConfig;
-    }
-    return pubSubChannel;
-}
-
-UA_PubSubTransportLayer
-UA_PubSubTransportLayerEthernet() {
-    UA_PubSubTransportLayer pubSubTransportLayer;
-    pubSubTransportLayer.transportProfileUri =
-        UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-eth-uadp");
-    pubSubTransportLayer.createPubSubChannel = &TransportLayerEthernet_addChannel;
-    return pubSubTransportLayer;
-}
diff --git a/ext/open62541/plugins/ua_pubsub_udp.c b/ext/open62541/plugins/ua_pubsub_udp.c
deleted file mode 100644
index a4f6226..0000000
--- a/ext/open62541/plugins/ua_pubsub_udp.c
+++ /dev/null
@@ -1,453 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017-2018 Fraunhofer IOSB (Author: Andreas Ebner)
- * Copyright 2018 (c) Jose Cabral, fortiss GmbH
- */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/plugin/pubsub_udp.h>
-#include <open62541/util.h>
-
-// UDP multicast network layer specific internal data
-typedef struct {
-    int ai_family;                        //Protocol family for socket.  IPv4/IPv6
-    struct sockaddr_storage *ai_addr;     //https://msdn.microsoft.com/de-de/library/windows/desktop/ms740496(v=vs.85).aspx
-    UA_UInt32 messageTTL;
-    UA_Boolean enableLoopback;
-    UA_Boolean enableReuse;
-} UA_PubSubChannelDataUDPMC;
-
-/**
- * Open communication socket based on the connectionConfig. Protocol specific parameters are
- * provided within the connectionConfig as KeyValuePair.
- * Currently supported options: "ttl" , "loopback", "reuse"
- *
- * @return ref to created channel, NULL on error
- */
-static UA_PubSubChannel *
-UA_PubSubChannelUDPMC_open(const UA_PubSubConnectionConfig *connectionConfig) {
-    UA_initialize_architecture_network();
-
-    UA_NetworkAddressUrlDataType address;
-    if(UA_Variant_hasScalarType(&connectionConfig->address, &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE])){
-        address = *(UA_NetworkAddressUrlDataType *)connectionConfig->address.data;
-    } else {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "PubSub Connection creation failed. Invalid Address.");
-        return NULL;
-    }
-    //allocate and init memory for the UDP multicast specific internal data
-    UA_PubSubChannelDataUDPMC * channelDataUDPMC =
-            (UA_PubSubChannelDataUDPMC *) UA_calloc(1, (sizeof(UA_PubSubChannelDataUDPMC)));
-    if(!channelDataUDPMC){
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "PubSub Connection creation failed. Out of memory.");
-        return NULL;
-    }
-    //set default values
-    UA_PubSubChannelDataUDPMC defaultValues = {0, NULL, 255, UA_TRUE, UA_TRUE};
-    memcpy(channelDataUDPMC, &defaultValues, sizeof(UA_PubSubChannelDataUDPMC));
-    //iterate over the given KeyValuePair paramters
-    UA_String ttlParam = UA_STRING("ttl"), loopbackParam = UA_STRING("loopback"), reuseParam = UA_STRING("reuse");
-    for(size_t i = 0; i < connectionConfig->connectionPropertiesSize; i++){
-        if(UA_String_equal(&connectionConfig->connectionProperties[i].key.name, &ttlParam)){
-            if(UA_Variant_hasScalarType(&connectionConfig->connectionProperties[i].value, &UA_TYPES[UA_TYPES_UINT32])){
-                channelDataUDPMC->messageTTL = *(UA_UInt32 *) connectionConfig->connectionProperties[i].value.data;
-            }
-        } else if(UA_String_equal(&connectionConfig->connectionProperties[i].key.name, &loopbackParam)){
-            if(UA_Variant_hasScalarType(&connectionConfig->connectionProperties[i].value, &UA_TYPES[UA_TYPES_BOOLEAN])){
-                channelDataUDPMC->enableLoopback = *(UA_Boolean *) connectionConfig->connectionProperties[i].value.data;
-            }
-        } else if(UA_String_equal(&connectionConfig->connectionProperties[i].key.name, &reuseParam)){
-            if(UA_Variant_hasScalarType(&connectionConfig->connectionProperties[i].value, &UA_TYPES[UA_TYPES_BOOLEAN])){
-                channelDataUDPMC->enableReuse = *(UA_Boolean *) connectionConfig->connectionProperties[i].value.data;
-            }
-        } else {
-            UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "PubSub Connection creation. Unknown connection parameter.");
-        }
-    }
-
-    UA_PubSubChannel *newChannel = (UA_PubSubChannel *) UA_calloc(1, sizeof(UA_PubSubChannel));
-    if(!newChannel){
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "PubSub Connection creation failed. Out of memory.");
-        UA_free(channelDataUDPMC);
-        return NULL;
-    }
-    struct addrinfo hints, *rp, *requestResult = NULL;
-    memset(&hints, 0, sizeof hints);
-    hints.ai_family = AF_UNSPEC;
-    hints.ai_socktype = SOCK_DGRAM;
-    hints.ai_flags = 0;
-    hints.ai_protocol = 0;
-
-    UA_String hostname, path;
-    UA_UInt16 networkPort;
-    if(UA_parseEndpointUrl(&address.url, &hostname, &networkPort, &path) != UA_STATUSCODE_GOOD){
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "PubSub Connection creation failed. Invalid URL.");
-        UA_free(channelDataUDPMC);
-        UA_free(newChannel);
-        return NULL;
-    }
-    if(hostname.length > 512) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "PubSub Connection creation failed. URL maximum length is 512.");
-        UA_free(channelDataUDPMC);
-        UA_free(newChannel);
-        return NULL;
-    }
-
-    UA_STACKARRAY(char, addressAsChar, sizeof(char) * hostname.length +1);
-    memcpy(addressAsChar, hostname.data, hostname.length);
-    addressAsChar[hostname.length] = 0;
-    char port[6];
-    sprintf(port, "%u", networkPort);
-
-    if(UA_getaddrinfo(addressAsChar, port, &hints, &requestResult) != 0) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "PubSub Connection creation failed. Internal error.");
-        UA_free(channelDataUDPMC);
-        UA_free(newChannel);
-        return NULL;
-    }
-
-    //check if the ip address is a multicast address
-    if(requestResult->ai_family == PF_INET){
-        struct in_addr imr_interface;
-        UA_inet_pton(AF_INET, addressAsChar, &imr_interface);
-        if((UA_ntohl(imr_interface.s_addr) & 0xF0000000) != 0xE0000000){
-            UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                           "PubSub Connection creation failed. No multicast address.");
-        }
-    } else {
-        //TODO check if ipv6 addrr is multicast address.
-    }
-
-    for(rp = requestResult; rp != NULL; rp = rp->ai_next){
-        newChannel->sockfd = UA_socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);
-        if(newChannel->sockfd != UA_INVALID_SOCKET){
-            break; /*success*/
-        }
-    }
-    if(!rp){
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "PubSub Connection creation failed. Internal error.");
-        UA_freeaddrinfo(requestResult);
-        UA_free(channelDataUDPMC);
-        UA_free(newChannel);
-        return NULL;
-    }
-    channelDataUDPMC->ai_family = rp->ai_family;
-    channelDataUDPMC->ai_addr = (struct sockaddr_storage *) UA_calloc(1, sizeof(struct sockaddr_storage));
-    if(!channelDataUDPMC->ai_addr){
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "PubSub Connection creation failed. Out of memory.");
-        UA_close(newChannel->sockfd);
-        UA_freeaddrinfo(requestResult);
-        UA_free(channelDataUDPMC);
-        UA_free(newChannel);
-        return NULL;
-    }
-    memcpy(channelDataUDPMC->ai_addr, rp->ai_addr, sizeof(*rp->ai_addr));
-    //link channel and internal channel data
-    newChannel->handle = channelDataUDPMC;
-
-    //Set loop back data to your host
-#if UA_IPV6
-    if(UA_setsockopt(newChannel->sockfd,
-                     requestResult->ai_family == PF_INET6 ? IPPROTO_IPV6 : IPPROTO_IP,
-                     requestResult->ai_family == PF_INET6 ? IPV6_MULTICAST_LOOP : IP_MULTICAST_LOOP,
-                     (const char *)&channelDataUDPMC->enableLoopback, sizeof (channelDataUDPMC->enableLoopback))
-#else
-    if(UA_setsockopt(newChannel->sockfd,
-                     IPPROTO_IP,
-                     IP_MULTICAST_LOOP,
-                     (const char *)&channelDataUDPMC->enableLoopback, sizeof (channelDataUDPMC->enableLoopback))
-#endif
-                      < 0) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "PubSub Connection creation failed. Loopback setup failed.");
-        UA_close(newChannel->sockfd);
-        UA_freeaddrinfo(requestResult);
-        UA_free(channelDataUDPMC);
-        UA_free(newChannel);
-        return NULL;
-    }
-
-    //Set Time to live (TTL). Value of 1 prevent forward beyond the local network.
-#if UA_IPV6
-    if(UA_setsockopt(newChannel->sockfd,
-                     requestResult->ai_family == PF_INET6 ? IPPROTO_IPV6 : IPPROTO_IP,
-                     requestResult->ai_family == PF_INET6 ? IPV6_MULTICAST_HOPS : IP_MULTICAST_TTL,
-                     (const char *)&channelDataUDPMC->messageTTL, sizeof(channelDataUDPMC->messageTTL))
-#else
-    if(UA_setsockopt(newChannel->sockfd,
-                     IPPROTO_IP,
-                     IP_MULTICAST_TTL,
-                     (const char *)&channelDataUDPMC->messageTTL, sizeof(channelDataUDPMC->messageTTL))
-#endif
-
-                      < 0) {
-        UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "PubSub Connection creation problem. Time to live setup failed.");
-    }
-
-    //Set reuse address -> enables sharing of the same listening address on different sockets.
-    if(channelDataUDPMC->enableReuse){
-        int enableReuse = 1;
-        if(UA_setsockopt(newChannel->sockfd,
-                      SOL_SOCKET, SO_REUSEADDR,
-                      (const char*)&enableReuse, sizeof(enableReuse)) < 0){
-            UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                           "PubSub Connection creation problem. Reuse address setup failed.");
-        }
-    }
-
-    //Set the physical interface for outgoing traffic
-    if(address.networkInterface.length > 0){
-        UA_STACKARRAY(char, interfaceAsChar, sizeof(char) * address.networkInterface.length + 1);
-        memcpy(interfaceAsChar, address.networkInterface.data, address.networkInterface.length);
-        interfaceAsChar[address.networkInterface.length] = 0;
-        enum{
-            IPv4,
-#if UA_IPV6
-            IPv6,
-#endif
-            INVALID
-        } ipVersion;
-        union {
-            struct ip_mreq ipv4;
-#if UA_IPV6
-            struct ipv6_mreq ipv6;
-#endif
-        } group;
-        if(UA_inet_pton(AF_INET, interfaceAsChar, &group.ipv4.imr_interface)){
-            ipVersion = IPv4;
-#if UA_IPV6
-        } else if (UA_inet_pton(AF_INET6, interfaceAsChar, &group.ipv6.ipv6mr_multiaddr)){
-            group.ipv6.ipv6mr_interface = UA_if_nametoindex(interfaceAsChar);
-            ipVersion = IPv6;
-#endif
-        } else {
-            ipVersion = INVALID;
-        }
-        if(ipVersion == INVALID ||
-#if UA_IPV6
-                UA_setsockopt(newChannel->sockfd,
-                           requestResult->ai_family == PF_INET6 ? IPPROTO_IPV6 : IPPROTO_IP,
-                           requestResult->ai_family == PF_INET6 ? IPV6_MULTICAST_IF : IP_MULTICAST_IF,
-                           ipVersion == IPv6 ? (const void *) &group.ipv6.ipv6mr_interface : &group.ipv4.imr_interface,
-                           ipVersion == IPv6 ? sizeof(group.ipv6.ipv6mr_interface) : sizeof(struct in_addr))
-#else
-                UA_setsockopt(newChannel->sockfd,
-                           IPPROTO_IP,
-                           IP_MULTICAST_IF,
-                           &group.ipv4.imr_interface,
-                           sizeof(struct in_addr))
-#endif
-                                                         < 0) {
-            UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                           "PubSub Connection creation problem. Interface selection failed.");
-        };
-    }
-    UA_freeaddrinfo(requestResult);
-    newChannel->state = UA_PUBSUB_CHANNEL_PUB;
-    return newChannel;
-}
-
-/**
- * Subscribe to a given address.
- *
- * @return UA_STATUSCODE_GOOD on success
- */
-static UA_StatusCode
-UA_PubSubChannelUDPMC_regist(UA_PubSubChannel *channel, UA_ExtensionObject *transportSettings,
-        void (*notUsedHere)(UA_ByteString *encodedBuffer, UA_ByteString *topic)) {
-    if(!(channel->state == UA_PUBSUB_CHANNEL_PUB || channel->state == UA_PUBSUB_CHANNEL_RDY)){
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "PubSub Connection regist failed.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    UA_PubSubChannelDataUDPMC * connectionConfig = (UA_PubSubChannelDataUDPMC *) channel->handle;
-    if(connectionConfig->ai_family == PF_INET){//IPv4 handling
-        struct sockaddr_in addr;
-        memcpy(&addr, connectionConfig->ai_addr, sizeof(struct sockaddr_in));
-        addr.sin_addr.s_addr = INADDR_ANY;
-        if (UA_bind(channel->sockfd, (const struct sockaddr *)&addr, sizeof(struct sockaddr_in)) != 0){
-            UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "PubSub Connection regist failed.");
-            return UA_STATUSCODE_BADINTERNALERROR;
-        }
-        struct ip_mreq groupV4;
-        memcpy(&groupV4.imr_multiaddr, &((const struct sockaddr_in *)connectionConfig->ai_addr)->sin_addr, sizeof(struct ip_mreq));
-        groupV4.imr_interface.s_addr = UA_htonl(INADDR_ANY);
-        //multihomed hosts can join several groups on different IF, INADDR_ANY -> kernel decides
-
-        if(UA_setsockopt(channel->sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) &groupV4, sizeof(groupV4)) != 0) {
-            UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                           "PubSub Connection not on multicast");
-        }
-#if UA_IPV6
-    } else if (connectionConfig->ai_family == PF_INET6) {//IPv6 handling
-        //TODO implement regist for IPv6
-#endif
-    } else {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "PubSub Connection regist failed.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Remove current subscription.
- *
- * @return UA_STATUSCODE_GOOD on success
- */
-static UA_StatusCode
-UA_PubSubChannelUDPMC_unregist(UA_PubSubChannel *channel, UA_ExtensionObject *transportSettings) {
-    if(!(channel->state == UA_PUBSUB_CHANNEL_PUB_SUB || channel->state == UA_PUBSUB_CHANNEL_SUB)){
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "PubSub Connection unregist failed.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    UA_PubSubChannelDataUDPMC * connectionConfig = (UA_PubSubChannelDataUDPMC *) channel->handle;
-    if(connectionConfig->ai_family == PF_INET){//IPv4 handling
-        struct ip_mreq groupV4;
-        memcpy(&groupV4.imr_multiaddr, &((const struct sockaddr_in *)connectionConfig->ai_addr)->sin_addr, sizeof(struct ip_mreq));
-        groupV4.imr_interface.s_addr = UA_htonl(INADDR_ANY);
-
-        if(UA_setsockopt(channel->sockfd, IPPROTO_IP, IP_DROP_MEMBERSHIP, (char *) &groupV4, sizeof(groupV4)) != 0){
-            UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "PubSub Connection unregist failed.");
-            return UA_STATUSCODE_BADINTERNALERROR;
-        }
-#if UA_IPV6
-    } else if (connectionConfig->ai_family == PF_INET6) {//IPv6 handling
-        //TODO implement unregist for IPv6
-#endif
-    } else {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "PubSub Connection unregist failed.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Send messages to the connection defined address
- *
- * @return UA_STATUSCODE_GOOD if success
- */
-static UA_StatusCode
-UA_PubSubChannelUDPMC_send(UA_PubSubChannel *channel, UA_ExtensionObject *transportSettigns, const UA_ByteString *buf) {
-    UA_PubSubChannelDataUDPMC *channelConfigUDPMC = (UA_PubSubChannelDataUDPMC *) channel->handle;
-    if(!(channel->state == UA_PUBSUB_CHANNEL_PUB || channel->state == UA_PUBSUB_CHANNEL_PUB_SUB)){
-        UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "PubSub Connection sending failed. Invalid state.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    //TODO evalute: chunk messages or check against MTU?
-    long nWritten = 0;
-    while (nWritten < (long)buf->length) {
-        long n = (long)UA_sendto(channel->sockfd, buf->data, buf->length, 0,
-                        (struct sockaddr *) channelConfigUDPMC->ai_addr, sizeof(struct sockaddr_storage));
-        if(n == -1L) {
-            UA_LOG_WARNING(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "PubSub Connection sending failed.");
-            return UA_STATUSCODE_BADINTERNALERROR;
-        }
-        nWritten += n;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Receive messages. The regist function should be called before.
- *
- * @param timeout in usec | on windows platforms are only multiples of 1000usec possible
- * @return
- */
-static UA_StatusCode
-UA_PubSubChannelUDPMC_receive(UA_PubSubChannel *channel, UA_ByteString *message, UA_ExtensionObject *transportSettigns, UA_UInt32 timeout){
-    if(!(channel->state == UA_PUBSUB_CHANNEL_PUB || channel->state == UA_PUBSUB_CHANNEL_PUB_SUB)) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "PubSub Connection receive failed. Invalid state.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    UA_PubSubChannelDataUDPMC *channelConfigUDPMC = (UA_PubSubChannelDataUDPMC *) channel->handle;
-
-    if(timeout > 0) {
-        fd_set fdset;
-        FD_ZERO(&fdset);
-        UA_fd_set(channel->sockfd, &fdset);
-        struct timeval tmptv = {(long int)(timeout / 1000000),
-                                (long int)(timeout % 1000000)};
-        int resultsize = UA_select(channel->sockfd+1, &fdset, NULL,
-                                NULL, &tmptv);
-        if(resultsize == 0) {
-            message->length = 0;
-            return UA_STATUSCODE_GOODNONCRITICALTIMEOUT;
-        }
-        if (resultsize == -1) {
-            message->length = 0;
-            return UA_STATUSCODE_BADINTERNALERROR;
-        }
-    }
-
-    if(channelConfigUDPMC->ai_family == PF_INET){
-        ssize_t messageLength;
-        messageLength = UA_recvfrom(channel->sockfd, message->data, message->length, 0, NULL, NULL);
-        if(messageLength > 0){
-            message->length = (size_t) messageLength;
-        } else {
-            message->length = 0;
-        }
-#if UA_IPV6
-    } else {
-        //TODO implement recieve for IPv6
-#endif
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Close channel and free the channel data.
- *
- * @return UA_STATUSCODE_GOOD if success
- */
-static UA_StatusCode
-UA_PubSubChannelUDPMC_close(UA_PubSubChannel *channel) {
-    if(UA_close(channel->sockfd) != 0){
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "PubSub Connection delete failed.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    UA_deinitialize_architecture_network();
-    //cleanup the internal NetworkLayer data
-    UA_PubSubChannelDataUDPMC *networkLayerData = (UA_PubSubChannelDataUDPMC *) channel->handle;
-    UA_free(networkLayerData->ai_addr);
-    UA_free(networkLayerData);
-    UA_free(channel);
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Generate a new channel. based on the given configuration.
- *
- * @param connectionConfig connection configuration
- * @return  ref to created channel, NULL on error
- */
-static UA_PubSubChannel *
-TransportLayerUDPMC_addChannel(UA_PubSubConnectionConfig *connectionConfig) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "PubSub channel requested");
-    UA_PubSubChannel * pubSubChannel = UA_PubSubChannelUDPMC_open(connectionConfig);
-    if(pubSubChannel){
-        pubSubChannel->regist = UA_PubSubChannelUDPMC_regist;
-        pubSubChannel->unregist = UA_PubSubChannelUDPMC_unregist;
-        pubSubChannel->send = UA_PubSubChannelUDPMC_send;
-        pubSubChannel->receive = UA_PubSubChannelUDPMC_receive;
-        pubSubChannel->close = UA_PubSubChannelUDPMC_close;
-        pubSubChannel->connectionConfig = connectionConfig;
-    }
-    return pubSubChannel;
-}
-
-//UDPMC channel factory
-UA_PubSubTransportLayer
-UA_PubSubTransportLayerUDPMP() {
-    UA_PubSubTransportLayer pubSubTransportLayer;
-    pubSubTransportLayer.transportProfileUri = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-    pubSubTransportLayer.createPubSubChannel = &TransportLayerUDPMC_addChannel;
-    return pubSubTransportLayer;
-}
diff --git a/ext/open62541/sonar-project.properties b/ext/open62541/sonar-project.properties
deleted file mode 100644
index b4c0fb3..0000000
--- a/ext/open62541/sonar-project.properties
+++ /dev/null
@@ -1,29 +0,0 @@
-sonar.projectKey=open62541-main
-sonar.projectName=open62541
-sonar.projectVersion=0.4
-
-sonar.log.level=INFO
-
-sonar.exclusions=deps/**/*,build/open62541.c,build/open62541.h,CMakeFiles/**/*,tools/**/*,tests/**/*,examples/**/*
-
-
-# =====================================================
-#   Meta-data for the project
-# =====================================================
-
-sonar.links.homepage=https://github.com/open62541/open62541
-sonar.links.ci=https://travis-ci.org/open62541/open62541
-sonar.links.scm=https://github.com/open62541/open62541
-sonar.links.issue=https://github.com/open62541/open62541/issues
-
-
-# =====================================================
-#   Properties that will be shared amongst all modules
-# =====================================================
-
-# SQ standard properties
-sonar.sources=.
-
-# Properties specific to the C/C++ analyzer:
-sonar.cfamily.build-wrapper-output=bw-output
-sonar.cfamily.gcov.reportsPath=.
diff --git a/ext/open62541/src/client/ua_client.c b/ext/open62541/src/client/ua_client.c
deleted file mode 100644
index 2ce6597..0000000
--- a/ext/open62541/src/client/ua_client.c
+++ /dev/null
@@ -1,559 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2015-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015-2016 (c) Chris Iatrou
- *    Copyright 2015 (c) hfaham
- *    Copyright 2015-2017 (c) Florian Palm
- *    Copyright 2017-2018 (c) Thomas Stalder, Blue Time Concept SA
- *    Copyright 2015 (c) Holger Jeromin
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2016 (c) TorbenD
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2016 (c) Lykurg
- *    Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2018 (c) Kalycito Infotech Private Limited
- */
-
-#include <open62541/types_generated_encoding_binary.h>
-
-#include "ua_client_internal.h"
-#include "ua_connection_internal.h"
-#include "ua_types_encoding_binary.h"
-
-#define STATUS_CODE_BAD_POINTER 0x01
-
-/********************/
-/* Client Lifecycle */
-/********************/
-
-static void
-UA_Client_init(UA_Client* client) {
-    memset(client, 0, sizeof(UA_Client));
-    UA_SecureChannel_init(&client->channel);
-    if(client->config.stateCallback)
-        client->config.stateCallback(client, client->state);
-    /* Catch error during async connection */
-    client->connectStatus = UA_STATUSCODE_GOOD;
-
-    UA_Timer_init(&client->timer);
-    UA_WorkQueue_init(&client->workQueue);
-}
-
-UA_Client *
-UA_Client_new() {
-    UA_Client *client = (UA_Client*)UA_malloc(sizeof(UA_Client));
-    if(!client)
-        return NULL;
-    UA_Client_init(client);
-    return client;
-}
-
-static void
-UA_ClientConfig_deleteMembers(UA_ClientConfig *config) {
-    UA_ApplicationDescription_deleteMembers(&config->clientDescription);
-
-    UA_ExtensionObject_deleteMembers(&config->userIdentityToken);
-    UA_String_deleteMembers(&config->securityPolicyUri);
-
-    UA_EndpointDescription_deleteMembers(&config->endpoint);
-    UA_UserTokenPolicy_deleteMembers(&config->userTokenPolicy);
-
-    if(config->certificateVerification.deleteMembers)
-        config->certificateVerification.deleteMembers(&config->certificateVerification);
-
-    /* Delete the SecurityPolicies */
-    if(config->securityPolicies == 0)
-        return;
-    for(size_t i = 0; i < config->securityPoliciesSize; i++)
-        config->securityPolicies[i].deleteMembers(&config->securityPolicies[i]);
-    UA_free(config->securityPolicies);
-    config->securityPolicies = 0;
-}
-
-static void
-UA_Client_deleteMembers(UA_Client *client) {
-    UA_Client_disconnect(client);
-    /* Commented as UA_SecureChannel_deleteMembers already done
-     * in UA_Client_disconnect function */
-    //UA_SecureChannel_deleteMembersCleanup(&client->channel);
-    if (client->connection.free)
-        client->connection.free(&client->connection);
-    UA_Connection_deleteMembers(&client->connection);
-    UA_NodeId_deleteMembers(&client->authenticationToken);
-    UA_String_deleteMembers(&client->endpointUrl);
-
-    /* Delete the async service calls */
-    UA_Client_AsyncService_removeAll(client, UA_STATUSCODE_BADSHUTDOWN);
-
-    /* Delete the subscriptions */
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    UA_Client_Subscriptions_clean(client);
-#endif
-
-    /* Delete the timed work */
-    UA_Timer_deleteMembers(&client->timer);
-
-    /* Clean up the work queue */
-    UA_WorkQueue_cleanup(&client->workQueue);
-
-    UA_ClientConfig_deleteMembers(&client->config);
-}
-
-void
-UA_Client_reset(UA_Client* client) {
-    UA_Client_deleteMembers(client);
-    UA_Client_init(client);
-}
-
-void
-UA_Client_delete(UA_Client* client) {
-    UA_Client_deleteMembers(client);
-    UA_free(client);
-}
-
-UA_ClientState
-UA_Client_getState(UA_Client *client) {
-    return client->state;
-}
-
-UA_ClientConfig *
-UA_Client_getConfig(UA_Client *client) {
-    if(!client)
-        return NULL;
-    return &client->config;
-}
-
-/****************/
-/* Raw Services */
-/****************/
-
-/* For synchronous service calls. Execute async responses with a callback. When
- * the response with the correct requestId turns up, return it via the
- * SyncResponseDescription pointer. */
-typedef struct {
-    UA_Client *client;
-    UA_Boolean received;
-    UA_UInt32 requestId;
-    void *response;
-    const UA_DataType *responseType;
-} SyncResponseDescription;
-
-/* For both synchronous and asynchronous service calls */
-static UA_StatusCode
-sendSymmetricServiceRequest(UA_Client *client, const void *request,
-                            const UA_DataType *requestType, UA_UInt32 *requestId) {
-    /* Make sure we have a valid session */
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    /* FIXME: this is just a dirty workaround. We need to rework some of the sync and async processing
-     * FIXME: in the client. Currently a lot of stuff is semi broken and in dire need of cleaning up.*/
-    /*UA_StatusCode retval = openSecureChannel(client, true);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;*/
-
-    /* Adjusting the request header. The const attribute is violated, but we
-     * only touch the following members: */
-    UA_RequestHeader *rr = (UA_RequestHeader*)(uintptr_t)request;
-    rr->authenticationToken = client->authenticationToken; /* cleaned up at the end */
-    rr->timestamp = UA_DateTime_now();
-    rr->requestHandle = ++client->requestHandle;
-
-    /* Send the request */
-    UA_UInt32 rqId = ++client->requestId;
-    UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                 "Sending a request of type %i", requestType->typeId.identifier.numeric);
-
-    if (client->channel.nextSecurityToken.tokenId != 0) // Change to the new security token if the secure channel has been renewed.
-        UA_SecureChannel_revolveTokens(&client->channel);
-    retval = UA_SecureChannel_sendSymmetricMessage(&client->channel, rqId, UA_MESSAGETYPE_MSG,
-                                                   rr, requestType);
-    UA_NodeId_init(&rr->authenticationToken); /* Do not return the token to the user */
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    *requestId = rqId;
-    return UA_STATUSCODE_GOOD;
-}
-
-static const UA_NodeId
-serviceFaultId = {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_SERVICEFAULT_ENCODING_DEFAULTBINARY}};
-
-/* Look for the async callback in the linked list, execute and delete it */
-static UA_StatusCode
-processAsyncResponse(UA_Client *client, UA_UInt32 requestId, const UA_NodeId *responseTypeId,
-                     const UA_ByteString *responseMessage, size_t *offset) {
-    /* Find the callback */
-    AsyncServiceCall *ac;
-    LIST_FOREACH(ac, &client->asyncServiceCalls, pointers) {
-        if(ac->requestId == requestId)
-            break;
-    }
-    if(!ac)
-        return UA_STATUSCODE_BADREQUESTHEADERINVALID;
-
-    /* Allocate the response */
-    UA_STACKARRAY(UA_Byte, responseBuf, ac->responseType->memSize);
-    void *response = (void*)(uintptr_t)&responseBuf[0]; /* workaround aliasing rules */
-
-    /* Verify the type of the response */
-    const UA_DataType *responseType = ac->responseType;
-    const UA_NodeId expectedNodeId = UA_NODEID_NUMERIC(0, ac->responseType->binaryEncodingId);
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(!UA_NodeId_equal(responseTypeId, &expectedNodeId)) {
-        UA_init(response, ac->responseType);
-        if(UA_NodeId_equal(responseTypeId, &serviceFaultId)) {
-            /* Decode as a ServiceFault, i.e. only the response header */
-            UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                        "Received a ServiceFault response");
-            responseType = &UA_TYPES[UA_TYPES_SERVICEFAULT];
-        } else {
-            /* Close the connection */
-            UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                         "Reply contains the wrong service response");
-            retval = UA_STATUSCODE_BADCOMMUNICATIONERROR;
-            goto process;
-        }
-    }
-
-    /* Decode the response */
-    retval = UA_decodeBinary(responseMessage, offset, response, responseType, client->config.customDataTypes);
-
- process:
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                    "Could not decode the response with id %u due to %s",
-                    requestId, UA_StatusCode_name(retval));
-        ((UA_ResponseHeader*)response)->serviceResult = retval;
-    } else if(((UA_ResponseHeader*)response)->serviceResult != UA_STATUSCODE_GOOD) {
-        /* Decode as a ServiceFault, i.e. only the response header */
-        UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                    "The ServiceResult has the StatusCode %s",
-                    UA_StatusCode_name(((UA_ResponseHeader*)response)->serviceResult));
-    }
-
-    /* Call the callback */
-    if(ac->callback)
-        ac->callback(client, ac->userdata, requestId, response);
-    UA_deleteMembers(response, ac->responseType);
-
-    /* Remove the callback */
-    LIST_REMOVE(ac, pointers);
-    UA_free(ac);
-    return retval;
-}
-
-/* Processes the received service response. Either with an async callback or by
- * decoding the message and returning it "upwards" in the
- * SyncResponseDescription. */
-static void
-processServiceResponse(void *application, UA_SecureChannel *channel,
-                       UA_MessageType messageType, UA_UInt32 requestId,
-                       const UA_ByteString *message) {
-    SyncResponseDescription *rd = (SyncResponseDescription*)application;
-
-    /* Must be OPN or MSG */
-    if(messageType != UA_MESSAGETYPE_OPN &&
-       messageType != UA_MESSAGETYPE_MSG) {
-        UA_LOG_TRACE_CHANNEL(&rd->client->config.logger, channel,
-                             "Invalid message type");
-        return;
-    }
-
-    /* Forward declaration for the goto */
-    UA_NodeId expectedNodeId = UA_NODEID_NULL;
-
-    /* Decode the data type identifier of the response */
-    size_t offset = 0;
-    UA_NodeId responseId;
-    UA_StatusCode retval = UA_NodeId_decodeBinary(message, &offset, &responseId);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto finish;
-
-    /* Got an asynchronous response. Don't expected a synchronous response
-     * (responseType NULL) or the id does not match. */
-    if(!rd->responseType || requestId != rd->requestId) {
-        retval = processAsyncResponse(rd->client, requestId, &responseId, message, &offset);
-        goto finish;
-    }
-
-    /* Got the synchronous response */
-    rd->received = true;
-
-    /* Check that the response type matches */
-    expectedNodeId = UA_NODEID_NUMERIC(0, rd->responseType->binaryEncodingId);
-    if(!UA_NodeId_equal(&responseId, &expectedNodeId)) {
-        if(UA_NodeId_equal(&responseId, &serviceFaultId)) {
-            UA_init(rd->response, rd->responseType);
-            retval = UA_decodeBinary(message, &offset, rd->response,
-                                     &UA_TYPES[UA_TYPES_SERVICEFAULT],
-                                     rd->client->config.customDataTypes);
-            if(retval != UA_STATUSCODE_GOOD)
-                ((UA_ResponseHeader*)rd->response)->serviceResult = retval;
-            UA_LOG_INFO(&rd->client->config.logger, UA_LOGCATEGORY_CLIENT,
-                        "Received a ServiceFault response with StatusCode %s",
-                        UA_StatusCode_name(((UA_ResponseHeader*)rd->response)->serviceResult));
-        } else {
-            /* Close the connection */
-            UA_LOG_ERROR(&rd->client->config.logger, UA_LOGCATEGORY_CLIENT,
-                         "Reply contains the wrong service response");
-            retval = UA_STATUSCODE_BADCOMMUNICATIONERROR;
-        }
-        goto finish;
-    }
-
-#ifdef UA_ENABLE_TYPEDESCRIPTION
-    UA_LOG_DEBUG(&rd->client->config.logger, UA_LOGCATEGORY_CLIENT,
-                 "Decode a message of type %s", rd->responseType->typeName);
-#else
-    UA_LOG_DEBUG(&rd->client->config.logger, UA_LOGCATEGORY_CLIENT,
-                 "Decode a message of type %u", responseId.identifier.numeric);
-#endif
-
-    /* Decode the response */
-    retval = UA_decodeBinary(message, &offset, rd->response, rd->responseType,
-                             rd->client->config.customDataTypes);
-
-finish:
-    UA_NodeId_deleteMembers(&responseId);
-    if(retval != UA_STATUSCODE_GOOD) {
-        if(retval == UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED)
-            retval = UA_STATUSCODE_BADRESPONSETOOLARGE;
-        UA_LOG_INFO(&rd->client->config.logger, UA_LOGCATEGORY_CLIENT,
-                    "Error receiving the response with status code %s",
-                    UA_StatusCode_name(retval));
-
-        if(rd->response) {
-            UA_ResponseHeader *respHeader = (UA_ResponseHeader*)rd->response;
-            respHeader->serviceResult = retval;
-        }
-    }
-}
-
-/* Forward complete chunks directly to the securechannel */
-static UA_StatusCode
-client_processChunk(void *application, UA_Connection *connection, UA_ByteString *chunk) {
-    SyncResponseDescription *rd = (SyncResponseDescription*)application;
-    UA_StatusCode retval = UA_SecureChannel_decryptAddChunk(&rd->client->channel, chunk, true);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    return UA_SecureChannel_persistIncompleteMessages(&rd->client->channel);
-}
-
-/* Receive and process messages until a synchronous message arrives or the
- * timout finishes */
-UA_StatusCode
-receiveServiceResponse(UA_Client *client, void *response, const UA_DataType *responseType,
-                       UA_DateTime maxDate, const UA_UInt32 *synchronousRequestId) {
-    /* Prepare the response and the structure we give into processServiceResponse */
-    SyncResponseDescription rd = { client, false, 0, response, responseType };
-
-    /* Return upon receiving the synchronized response. All other responses are
-     * processed with a callback "in the background". */
-    if(synchronousRequestId)
-        rd.requestId = *synchronousRequestId;
-
-    UA_StatusCode retval;
-    do {
-        UA_DateTime now = UA_DateTime_nowMonotonic();
-
-        /* >= avoid timeout to be set to 0 */
-        if(now >= maxDate)
-            return UA_STATUSCODE_GOODNONCRITICALTIMEOUT;
-
-        /* round always to upper value to avoid timeout to be set to 0
-         * if(maxDate - now) < (UA_DATETIME_MSEC/2) */
-        UA_UInt32 timeout = (UA_UInt32)(((maxDate - now) + (UA_DATETIME_MSEC - 1)) / UA_DATETIME_MSEC);
-
-        retval = UA_Connection_receiveChunksBlocking(&client->connection, &rd, client_processChunk, timeout);
-        UA_SecureChannel_processCompleteMessages(&client->channel, &rd, processServiceResponse);
-
-        if(retval != UA_STATUSCODE_GOOD && retval != UA_STATUSCODE_GOODNONCRITICALTIMEOUT) {
-            if(retval == UA_STATUSCODE_BADCONNECTIONCLOSED)
-                setClientState(client, UA_CLIENTSTATE_DISCONNECTED);
-            UA_Client_disconnect(client);
-            break;
-        }
-    } while(!rd.received);
-    return retval;
-}
-
-void
-__UA_Client_Service(UA_Client *client, const void *request,
-                    const UA_DataType *requestType, void *response,
-                    const UA_DataType *responseType) {
-    UA_init(response, responseType);
-    UA_ResponseHeader *respHeader = (UA_ResponseHeader*)response;
-
-    /* Send the request */
-    UA_UInt32 requestId;
-    UA_StatusCode retval = sendSymmetricServiceRequest(client, request, requestType, &requestId);
-    if(retval != UA_STATUSCODE_GOOD) {
-        if(retval == UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED)
-            respHeader->serviceResult = UA_STATUSCODE_BADREQUESTTOOLARGE;
-        else
-            respHeader->serviceResult = retval;
-        UA_Client_disconnect(client);
-        return;
-    }
-
-    /* Retrieve the response */
-    UA_DateTime maxDate = UA_DateTime_nowMonotonic() +
-        (client->config.timeout * UA_DATETIME_MSEC);
-    retval = receiveServiceResponse(client, response, responseType, maxDate, &requestId);
-    if(retval == UA_STATUSCODE_GOODNONCRITICALTIMEOUT) {
-        /* In synchronous service, if we have don't have a reply we need to close the connection */
-        UA_Client_disconnect(client);
-        retval = UA_STATUSCODE_BADCONNECTIONCLOSED;
-    }
-    if(retval != UA_STATUSCODE_GOOD)
-        respHeader->serviceResult = retval;
-}
-
-UA_StatusCode
-receiveServiceResponseAsync(UA_Client *client, void *response,
-                             const UA_DataType *responseType) {
-    SyncResponseDescription rd = { client, false, 0, response, responseType };
-
-    UA_StatusCode retval = UA_Connection_receiveChunksNonBlocking(
-            &client->connection, &rd, client_processChunk);
-    UA_SecureChannel_processCompleteMessages(&client->channel, &rd, processServiceResponse);
-    /*let client run when non critical timeout*/
-    if(retval != UA_STATUSCODE_GOOD
-            && retval != UA_STATUSCODE_GOODNONCRITICALTIMEOUT) {
-        if(retval == UA_STATUSCODE_BADCONNECTIONCLOSED) {
-            setClientState(client, UA_CLIENTSTATE_DISCONNECTED);
-        }
-        UA_Client_disconnect(client);
-    }
-    return retval;
-}
-
-UA_StatusCode
-receivePacketAsync(UA_Client *client) {
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if (UA_Client_getState(client) == UA_CLIENTSTATE_DISCONNECTED ||
-            UA_Client_getState(client) == UA_CLIENTSTATE_WAITING_FOR_ACK) {
-        retval = UA_Connection_receiveChunksNonBlocking(&client->connection, client, processACKResponseAsync);
-    }
-    else if(UA_Client_getState(client) == UA_CLIENTSTATE_CONNECTED) {
-        retval = UA_Connection_receiveChunksNonBlocking(&client->connection, client, processOPNResponseAsync);
-    }
-    if(retval != UA_STATUSCODE_GOOD && retval != UA_STATUSCODE_GOODNONCRITICALTIMEOUT) {
-        if(retval == UA_STATUSCODE_BADCONNECTIONCLOSED)
-            setClientState(client, UA_CLIENTSTATE_DISCONNECTED);
-        UA_Client_disconnect(client);
-    }
-    return retval;
-}
-
-void
-UA_Client_AsyncService_cancel(UA_Client *client, AsyncServiceCall *ac,
-                              UA_StatusCode statusCode) {
-    /* Create an empty response with the statuscode */
-    UA_STACKARRAY(UA_Byte, responseBuf, ac->responseType->memSize);
-    void *resp = (void*)(uintptr_t)&responseBuf[0]; /* workaround aliasing rules */
-    UA_init(resp, ac->responseType);
-    ((UA_ResponseHeader*)resp)->serviceResult = statusCode;
-
-    if(ac->callback)
-        ac->callback(client, ac->userdata, ac->requestId, resp);
-
-    /* Clean up the response. Users might move data into it. For whatever reasons. */
-    UA_deleteMembers(resp, ac->responseType);
-}
-
-void UA_Client_AsyncService_removeAll(UA_Client *client, UA_StatusCode statusCode) {
-    AsyncServiceCall *ac, *ac_tmp;
-    LIST_FOREACH_SAFE(ac, &client->asyncServiceCalls, pointers, ac_tmp) {
-        LIST_REMOVE(ac, pointers);
-        UA_Client_AsyncService_cancel(client, ac, statusCode);
-        UA_free(ac);
-    }
-}
-
-UA_StatusCode
-__UA_Client_AsyncServiceEx(UA_Client *client, const void *request,
-                           const UA_DataType *requestType,
-                           UA_ClientAsyncServiceCallback callback,
-                           const UA_DataType *responseType,
-                           void *userdata, UA_UInt32 *requestId,
-                           UA_UInt32 timeout) {
-    /* Prepare the entry for the linked list */
-    AsyncServiceCall *ac = (AsyncServiceCall*)UA_malloc(sizeof(AsyncServiceCall));
-    if(!ac)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    ac->callback = callback;
-    ac->responseType = responseType;
-    ac->userdata = userdata;
-    ac->timeout = timeout;
-
-    /* Call the service and set the requestId */
-    UA_StatusCode retval = sendSymmetricServiceRequest(client, request, requestType, &ac->requestId);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_free(ac);
-        return retval;
-    }
-
-    ac->start = UA_DateTime_nowMonotonic();
-
-    /* Store the entry for async processing */
-    LIST_INSERT_HEAD(&client->asyncServiceCalls, ac, pointers);
-    if(requestId)
-        *requestId = ac->requestId;
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-__UA_Client_AsyncService(UA_Client *client, const void *request,
-                         const UA_DataType *requestType,
-                         UA_ClientAsyncServiceCallback callback,
-                         const UA_DataType *responseType,
-                         void *userdata, UA_UInt32 *requestId) {
-    return __UA_Client_AsyncServiceEx(client, request, requestType, callback,
-                                      responseType, userdata, requestId,
-                                      client->config.timeout);
-}
-
-
-UA_StatusCode
-UA_Client_sendAsyncRequest(UA_Client *client, const void *request,
-                           const UA_DataType *requestType,
-                           UA_ClientAsyncServiceCallback callback,
-                           const UA_DataType *responseType, void *userdata,
-                           UA_UInt32 *requestId) {
-    if (UA_Client_getState(client) < UA_CLIENTSTATE_SECURECHANNEL) {
-        UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-				"Client must be connected to send high-level requests");
-		return UA_STATUSCODE_BADSERVERNOTCONNECTED;
-    }
-    return __UA_Client_AsyncService(client, request, requestType, callback,
-                                    responseType, userdata, requestId);
-}
-
-UA_StatusCode UA_EXPORT
-UA_Client_addTimedCallback(UA_Client *client, UA_ClientCallback callback,
-                           void *data, UA_DateTime date, UA_UInt64 *callbackId) {
-    return UA_Timer_addTimedCallback(&client->timer, (UA_ApplicationCallback) callback,
-                                     client, data, date, callbackId);
-}
-
-UA_StatusCode
-UA_Client_addRepeatedCallback(UA_Client *client, UA_ClientCallback callback,
-                              void *data, UA_Double interval_ms, UA_UInt64 *callbackId) {
-    return UA_Timer_addRepeatedCallback(&client->timer, (UA_ApplicationCallback) callback,
-                                        client, data, interval_ms, callbackId);
-}
-
-UA_StatusCode
-UA_Client_changeRepeatedCallbackInterval(UA_Client *client, UA_UInt64 callbackId,
-                                         UA_Double interval_ms) {
-    return UA_Timer_changeRepeatedCallbackInterval(&client->timer, callbackId,
-                                                   interval_ms);
-}
-
-void
-UA_Client_removeCallback(UA_Client *client, UA_UInt64 callbackId) {
-    UA_Timer_removeCallback(&client->timer, callbackId);
-}
diff --git a/ext/open62541/src/client/ua_client_connect.c b/ext/open62541/src/client/ua_client_connect.c
deleted file mode 100644
index 4a11a83..0000000
--- a/ext/open62541/src/client/ua_client_connect.c
+++ /dev/null
@@ -1,1122 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2017-2018 (c) Thomas Stalder, Blue Time Concept SA
- *    Copyright 2017-2019 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2018 (c) Kalycito Infotech Private Limited
- */
-
-#include <open62541/transport_generated.h>
-#include <open62541/transport_generated_encoding_binary.h>
-#include <open62541/transport_generated_handling.h>
-#include <open62541/types_generated_encoding_binary.h>
-
-#include "ua_client_internal.h"
-
-/* Size are refered in bytes */
-#define UA_MINMESSAGESIZE                8192
-#define UA_SESSION_LOCALNONCELENGTH      32
-#define MAX_DATA_SIZE                    4096
-
- /********************/
- /* Set client state */
- /********************/
-void
-setClientState(UA_Client *client, UA_ClientState state) {
-    if(client->state != state) {
-        client->state = state;
-        if(client->config.stateCallback)
-            client->config.stateCallback(client, client->state);
-    }
-}
-
-/***********************/
-/* Open the Connection */
-/***********************/
-
-#define UA_BITMASK_MESSAGETYPE 0x00ffffffu
-#define UA_BITMASK_CHUNKTYPE 0xff000000u
-
-static UA_StatusCode
-processACKResponse(void *application, UA_Connection *connection, UA_ByteString *chunk) {
-    UA_Client *client = (UA_Client*)application;
-
-    /* Decode the message */
-    size_t offset = 0;
-    UA_StatusCode retval;
-    UA_TcpMessageHeader messageHeader;
-    UA_TcpAcknowledgeMessage ackMessage;
-    retval = UA_TcpMessageHeader_decodeBinary(chunk, &offset, &messageHeader);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_NETWORK,
-                     "Decoding ACK message failed");
-        return retval;
-    }
-
-    // check if we got an error response from the server
-    UA_MessageType messageType = (UA_MessageType)
-        (messageHeader.messageTypeAndChunkType & UA_BITMASK_MESSAGETYPE);
-    UA_ChunkType chunkType = (UA_ChunkType)
-        (messageHeader.messageTypeAndChunkType & UA_BITMASK_CHUNKTYPE);
-    if (messageType == UA_MESSAGETYPE_ERR) {
-        // Header + ErrorMessage (error + reasonLength_field + length)
-        UA_StatusCode error = *(UA_StatusCode*)(&chunk->data[offset]);
-        UA_UInt32 len = *((UA_UInt32*)&chunk->data[offset + 4]);
-        UA_Byte *data = (UA_Byte*)&chunk->data[offset + 4+4];
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_NETWORK,
-                    "Received ERR response. %s - %.*s", UA_StatusCode_name(error), len, data);
-        return error;
-    }
-    if (chunkType != UA_CHUNKTYPE_FINAL) {
-        return UA_STATUSCODE_BADTCPMESSAGETYPEINVALID;
-    }
-
-    /* Decode the ACK message */
-    retval = UA_TcpAcknowledgeMessage_decodeBinary(chunk, &offset, &ackMessage);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_NETWORK,
-                     "Decoding ACK message failed");
-        return retval;
-    }
-    UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_NETWORK, "Received ACK message");
-
-    /* Process the ACK message */
-    return UA_Connection_processHELACK(connection, &client->config.localConnectionConfig,
-                                       (const UA_ConnectionConfig*)&ackMessage);
-}
-
-static UA_StatusCode
-HelAckHandshake(UA_Client *client, const UA_String endpointUrl) {
-    /* Get a buffer */
-    UA_ByteString message;
-    UA_Connection *conn = &client->connection;
-    UA_StatusCode retval = conn->getSendBuffer(conn, UA_MINMESSAGESIZE, &message);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Prepare the HEL message and encode at offset 8 */
-    UA_TcpHelloMessage hello;
-    /* just reference to avoid copy */
-    hello.endpointUrl = endpointUrl;
-    memcpy(&hello, &client->config.localConnectionConfig,
-           sizeof(UA_ConnectionConfig)); /* same struct layout */
-
-    UA_Byte *bufPos = &message.data[8]; /* skip the header */
-    const UA_Byte *bufEnd = &message.data[message.length];
-    retval = UA_TcpHelloMessage_encodeBinary(&hello, &bufPos, bufEnd);
-    /* avoid deleting reference */
-    hello.endpointUrl = UA_STRING_NULL;
-    UA_TcpHelloMessage_deleteMembers(&hello);
-    if(retval != UA_STATUSCODE_GOOD) {
-        conn->releaseSendBuffer(conn, &message);
-        return retval;
-    }
-
-    /* Encode the message header at offset 0 */
-    UA_TcpMessageHeader messageHeader;
-    messageHeader.messageTypeAndChunkType = UA_CHUNKTYPE_FINAL + UA_MESSAGETYPE_HEL;
-    messageHeader.messageSize = (UA_UInt32)((uintptr_t)bufPos - (uintptr_t)message.data);
-    bufPos = message.data;
-    retval = UA_TcpMessageHeader_encodeBinary(&messageHeader, &bufPos, bufEnd);
-    if(retval != UA_STATUSCODE_GOOD) {
-        conn->releaseSendBuffer(conn, &message);
-        return retval;
-    }
-
-    /* Send the HEL message */
-    message.length = messageHeader.messageSize;
-    retval = conn->send(conn, &message);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_NETWORK,
-                     "Sending HEL failed");
-        return retval;
-    }
-    UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_NETWORK,
-                 "Sent HEL message");
-
-    /* Loop until we have a complete chunk */
-    retval = UA_Connection_receiveChunksBlocking(conn, client, processACKResponse,
-                                                 client->config.timeout);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_NETWORK,
-                     "Receiving ACK message failed with %s", UA_StatusCode_name(retval));
-        if(retval == UA_STATUSCODE_BADCONNECTIONCLOSED)
-            client->state = UA_CLIENTSTATE_DISCONNECTED;
-        UA_Client_disconnect(client);
-    }
-    return retval;
-}
-
-UA_SecurityPolicy *
-getSecurityPolicy(UA_Client *client, UA_String policyUri) {
-    for(size_t i = 0; i < client->config.securityPoliciesSize; i++) {
-        if(UA_String_equal(&policyUri, &client->config.securityPolicies[i].policyUri))
-            return &client->config.securityPolicies[i];
-    }
-    return NULL;
-}
-
-static void
-processDecodedOPNResponse(UA_Client *client, UA_OpenSecureChannelResponse *response,
-                          UA_Boolean renew) {
-    /* Replace the token */
-    if(renew)
-        client->channel.nextSecurityToken = response->securityToken;
-    else
-        client->channel.securityToken = response->securityToken;
-
-    /* Replace the nonce */
-    UA_ByteString_deleteMembers(&client->channel.remoteNonce);
-    client->channel.remoteNonce = response->serverNonce;
-    UA_ByteString_init(&response->serverNonce);
-
-    if(client->channel.state == UA_SECURECHANNELSTATE_OPEN)
-        UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                    "SecureChannel renewed");
-    else
-        UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                    "Opened SecureChannel with SecurityPolicy %.*s",
-                    (int)client->channel.securityPolicy->policyUri.length,
-                    client->channel.securityPolicy->policyUri.data);
-
-    /* Response.securityToken.revisedLifetime is UInt32 we need to cast it to
-     * DateTime=Int64 we take 75% of lifetime to start renewing as described in
-     * standard */
-    client->channel.state = UA_SECURECHANNELSTATE_OPEN;
-    client->nextChannelRenewal = UA_DateTime_nowMonotonic() + (UA_DateTime)
-        (client->channel.securityToken.revisedLifetime * (UA_Double)UA_DATETIME_MSEC * 0.75);
-}
-
-UA_StatusCode
-openSecureChannel(UA_Client *client, UA_Boolean renew) {
-    /* Check if sc is still valid */
-    if(renew && client->nextChannelRenewal > UA_DateTime_nowMonotonic())
-        return UA_STATUSCODE_GOOD;
-
-    UA_Connection *conn = &client->connection;
-    if(conn->state != UA_CONNECTION_ESTABLISHED)
-        return UA_STATUSCODE_BADSERVERNOTCONNECTED;
-
-    /* Prepare the OpenSecureChannelRequest */
-    UA_OpenSecureChannelRequest opnSecRq;
-    UA_OpenSecureChannelRequest_init(&opnSecRq);
-    opnSecRq.requestHeader.timestamp = UA_DateTime_now();
-    opnSecRq.requestHeader.authenticationToken = client->authenticationToken;
-    if(renew) {
-        opnSecRq.requestType = UA_SECURITYTOKENREQUESTTYPE_RENEW;
-        UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_SECURECHANNEL,
-                     "Requesting to renew the SecureChannel");
-    } else {
-        opnSecRq.requestType = UA_SECURITYTOKENREQUESTTYPE_ISSUE;
-        UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_SECURECHANNEL,
-                     "Requesting to open a SecureChannel");
-    }
-
-    /* Set the securityMode to input securityMode from client data */
-    opnSecRq.securityMode = client->channel.securityMode;
-
-    opnSecRq.clientNonce = client->channel.localNonce;
-    opnSecRq.requestedLifetime = client->config.secureChannelLifeTime;
-
-    /* Send the OPN message */
-    UA_UInt32 requestId = ++client->requestId;
-    UA_StatusCode retval =
-        UA_SecureChannel_sendAsymmetricOPNMessage(&client->channel, requestId, &opnSecRq,
-                                                  &UA_TYPES[UA_TYPES_OPENSECURECHANNELREQUEST]);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_SECURECHANNEL,
-                     "Sending OPN message failed with error %s", UA_StatusCode_name(retval));
-        UA_Client_disconnect(client);
-        return retval;
-    }
-
-    UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_SECURECHANNEL, "OPN message sent");
-
-    /* Increase nextChannelRenewal to avoid that we re-start renewal when
-     * publish responses are received before the OPN response arrives. */
-    client->nextChannelRenewal = UA_DateTime_nowMonotonic() +
-        (2 * ((UA_DateTime)client->config.timeout * UA_DATETIME_MSEC));
-
-    /* Receive / decrypt / decode the OPN response. Process async services in
-     * the background until the OPN response arrives. */
-    UA_OpenSecureChannelResponse response;
-    retval = receiveServiceResponse(client, &response,
-                                    &UA_TYPES[UA_TYPES_OPENSECURECHANNELRESPONSE],
-                                    UA_DateTime_nowMonotonic() +
-                                    ((UA_DateTime)client->config.timeout * UA_DATETIME_MSEC),
-                                    &requestId);
-
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_SECURECHANNEL,
-                     "Receiving service response failed with error %s", UA_StatusCode_name(retval));
-        UA_Client_disconnect(client);
-        return retval;
-    }
-
-    processDecodedOPNResponse(client, &response, renew);
-    UA_OpenSecureChannelResponse_deleteMembers(&response);
-    return retval;
-}
-
-/* Function to verify the signature corresponds to ClientNonce
- * using the local certificate */
-static UA_StatusCode
-checkClientSignature(const UA_SecureChannel *channel,
-                     const UA_CreateSessionResponse *response) {
-    if(channel->securityMode != UA_MESSAGESECURITYMODE_SIGN &&
-       channel->securityMode != UA_MESSAGESECURITYMODE_SIGNANDENCRYPT)
-        return UA_STATUSCODE_GOOD;
-
-    if(!channel->securityPolicy)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    const UA_SecurityPolicy *sp = channel->securityPolicy;
-    const UA_ByteString *lc = &sp->localCertificate;
-
-    size_t dataToVerifySize = lc->length + channel->localNonce.length;
-    UA_ByteString dataToVerify = UA_BYTESTRING_NULL;
-    UA_StatusCode retval = UA_ByteString_allocBuffer(&dataToVerify, dataToVerifySize);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    memcpy(dataToVerify.data, lc->data, lc->length);
-    memcpy(dataToVerify.data + lc->length,
-           channel->localNonce.data, channel->localNonce.length);
-
-    retval = sp->certificateSigningAlgorithm.
-        verify(sp, channel->channelContext, &dataToVerify,
-               &response->serverSignature.signature);
-    UA_ByteString_deleteMembers(&dataToVerify);
-    return retval;
-}
-
-/* Function to create a signature using remote certificate and nonce */
-#ifdef UA_ENABLE_ENCRYPTION
-UA_StatusCode
-signActivateSessionRequest(UA_SecureChannel *channel,
-                           UA_ActivateSessionRequest *request) {
-    if(channel->securityMode != UA_MESSAGESECURITYMODE_SIGN &&
-       channel->securityMode != UA_MESSAGESECURITYMODE_SIGNANDENCRYPT)
-        return UA_STATUSCODE_GOOD;
-
-    const UA_SecurityPolicy *sp = channel->securityPolicy;
-    UA_SignatureData *sd = &request->clientSignature;
-
-    /* Prepare the signature */
-    size_t signatureSize = sp->certificateSigningAlgorithm.
-        getLocalSignatureSize(sp, channel->channelContext);
-    UA_StatusCode retval = UA_String_copy(&sp->certificateSigningAlgorithm.uri,
-                                          &sd->algorithm);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    retval = UA_ByteString_allocBuffer(&sd->signature, signatureSize);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Allocate a temporary buffer */
-    size_t dataToSignSize = channel->remoteCertificate.length + channel->remoteNonce.length;
-    if(dataToSignSize > MAX_DATA_SIZE)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_ByteString dataToSign;
-    retval = UA_ByteString_allocBuffer(&dataToSign, dataToSignSize);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval; /* sd->signature is cleaned up with the response */
-
-    /* Sign the signature */
-    memcpy(dataToSign.data, channel->remoteCertificate.data,
-           channel->remoteCertificate.length);
-    memcpy(dataToSign.data + channel->remoteCertificate.length,
-           channel->remoteNonce.data, channel->remoteNonce.length);
-    retval = sp->certificateSigningAlgorithm.sign(sp, channel->channelContext,
-                                                  &dataToSign, &sd->signature);
-
-    /* Clean up */
-    UA_ByteString_deleteMembers(&dataToSign);
-    return retval;
-}
-
-UA_StatusCode
-encryptUserIdentityToken(UA_Client *client, const UA_String *userTokenSecurityPolicy,
-                         UA_ExtensionObject *userIdentityToken) {
-    UA_IssuedIdentityToken *iit = NULL;
-    UA_UserNameIdentityToken *unit = NULL;
-    UA_ByteString *tokenData;
-    if(userIdentityToken->content.decoded.type == &UA_TYPES[UA_TYPES_ISSUEDIDENTITYTOKEN]) {
-        iit = (UA_IssuedIdentityToken*)userIdentityToken->content.decoded.data;
-        tokenData = &iit->tokenData;
-    } else if(userIdentityToken->content.decoded.type == &UA_TYPES[UA_TYPES_USERNAMEIDENTITYTOKEN]) {
-        unit = (UA_UserNameIdentityToken*)userIdentityToken->content.decoded.data;
-        tokenData = &unit->password;
-    } else {
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* No encryption */
-    const UA_String none = UA_STRING("http://opcfoundation.org/UA/SecurityPolicy#None");
-    if(userTokenSecurityPolicy->length == 0 ||
-       UA_String_equal(userTokenSecurityPolicy, &none)) {
-        return UA_STATUSCODE_GOOD;
-    }
-
-    UA_SecurityPolicy *sp = getSecurityPolicy(client, *userTokenSecurityPolicy);
-    if(!sp) {
-        UA_LOG_WARNING(&client->config.logger, UA_LOGCATEGORY_NETWORK,
-                       "Could not find the required SecurityPolicy for the UserToken");
-        return UA_STATUSCODE_BADSECURITYPOLICYREJECTED;
-    }
-
-    /* Create a temp channel context */
-
-    void *channelContext;
-    UA_StatusCode retval = sp->channelModule.
-        newContext(sp, &client->config.endpoint.serverCertificate, &channelContext);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_WARNING(&client->config.logger, UA_LOGCATEGORY_NETWORK,
-                       "Could not instantiate the SecurityPolicy for the UserToken");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    
-    /* Compute the encrypted length (at least one byte padding) */
-    size_t plainTextBlockSize = sp->asymmetricModule.cryptoModule.
-        encryptionAlgorithm.getRemotePlainTextBlockSize(sp, channelContext);
-    UA_UInt32 length = (UA_UInt32)(tokenData->length + client->channel.remoteNonce.length);
-    UA_UInt32 totalLength = length + 4; /* Including the length field */
-    size_t blocks = totalLength / plainTextBlockSize;
-    if(totalLength  % plainTextBlockSize != 0)
-        blocks++;
-    size_t overHead =
-        UA_SecurityPolicy_getRemoteAsymEncryptionBufferLengthOverhead(sp, channelContext,
-                                                                      blocks * plainTextBlockSize);
-
-    /* Allocate memory for encryption overhead */
-    UA_ByteString encrypted;
-    retval = UA_ByteString_allocBuffer(&encrypted, (blocks * plainTextBlockSize) + overHead);
-    if(retval != UA_STATUSCODE_GOOD) {
-        sp->channelModule.deleteContext(channelContext);
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-
-    UA_Byte *pos = encrypted.data;
-    const UA_Byte *end = &encrypted.data[encrypted.length];
-    UA_UInt32_encodeBinary(&length, &pos, end);
-    memcpy(pos, tokenData->data, tokenData->length);
-    memcpy(&pos[tokenData->length], client->channel.remoteNonce.data,
-           client->channel.remoteNonce.length);
-
-    /* Add padding
-     *
-     * 7.36.2.2 Legacy Encrypted Token Secret Format: A Client should not add any
-     * padding after the secret. If a Client adds padding then all bytes shall
-     * be zero. A Server shall check for padding added by Clients and ensure
-     * that all padding bytes are zeros. */
-    size_t paddedLength = plainTextBlockSize * blocks;
-    for(size_t i = totalLength; i < paddedLength; i++)
-        encrypted.data[i] = 0;
-    encrypted.length = paddedLength;
-
-    retval = sp->asymmetricModule.cryptoModule.encryptionAlgorithm.encrypt(sp, channelContext,
-                                                                           &encrypted);
-    encrypted.length = (blocks * plainTextBlockSize) + overHead;
-
-    if(iit) {
-        retval |= UA_String_copy(&sp->asymmetricModule.cryptoModule.encryptionAlgorithm.uri,
-                                 &iit->encryptionAlgorithm);
-    } else {
-        retval |= UA_String_copy(&sp->asymmetricModule.cryptoModule.encryptionAlgorithm.uri,
-                                 &unit->encryptionAlgorithm);
-    }
-
-    UA_ByteString_deleteMembers(tokenData);
-    *tokenData = encrypted;
-
-    /* Delete the temp channel context */
-    sp->channelModule.deleteContext(channelContext);
-
-    return retval;
-}
-#endif
-
-static UA_StatusCode
-activateSession(UA_Client *client) {
-    UA_ActivateSessionRequest request;
-    UA_ActivateSessionRequest_init(&request);
-    request.requestHeader.requestHandle = ++client->requestHandle;
-    request.requestHeader.timestamp = UA_DateTime_now();
-    request.requestHeader.timeoutHint = 600000;
-    UA_StatusCode retval =
-        UA_ExtensionObject_copy(&client->config.userIdentityToken, &request.userIdentityToken);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* If not token is set, use anonymous */
-    if(request.userIdentityToken.encoding == UA_EXTENSIONOBJECT_ENCODED_NOBODY) {
-        UA_AnonymousIdentityToken *t = UA_AnonymousIdentityToken_new();
-        if(!t) {
-            UA_ActivateSessionRequest_deleteMembers(&request);
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        request.userIdentityToken.content.decoded.data = t;
-        request.userIdentityToken.content.decoded.type = &UA_TYPES[UA_TYPES_ANONYMOUSIDENTITYTOKEN];
-        request.userIdentityToken.encoding = UA_EXTENSIONOBJECT_DECODED;
-    }
-
-    /* Set the policy-Id from the endpoint. Every IdentityToken starts with a
-     * string. */
-    retval = UA_String_copy(&client->config.userTokenPolicy.policyId,
-                            (UA_String*)request.userIdentityToken.content.decoded.data);
-
-#ifdef UA_ENABLE_ENCRYPTION
-    /* Encrypt the UserIdentityToken */
-    const UA_String *userTokenPolicy = &client->channel.securityPolicy->policyUri;
-    if(client->config.userTokenPolicy.securityPolicyUri.length > 0)
-        userTokenPolicy = &client->config.userTokenPolicy.securityPolicyUri;
-    retval |= encryptUserIdentityToken(client, userTokenPolicy, &request.userIdentityToken);
-
-    /* This function call is to prepare a client signature */
-    retval |= signActivateSessionRequest(&client->channel, &request);
-#endif
-
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ActivateSessionRequest_deleteMembers(&request);
-        return retval;
-    }
-
-    UA_ActivateSessionResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_ACTIVATESESSIONREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_ACTIVATESESSIONRESPONSE]);
-
-    if(response.responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "ActivateSession failed with error code %s",
-                     UA_StatusCode_name(response.responseHeader.serviceResult));
-    }
-
-    retval = response.responseHeader.serviceResult;
-    UA_ActivateSessionRequest_deleteMembers(&request);
-    UA_ActivateSessionResponse_deleteMembers(&response);
-    return retval;
-}
-
-/* Gets a list of endpoints. Memory is allocated for endpointDescription array */
-UA_StatusCode
-UA_Client_getEndpointsInternal(UA_Client *client, const UA_String endpointUrl,
-                               size_t *endpointDescriptionsSize,
-                               UA_EndpointDescription **endpointDescriptions) {
-    UA_GetEndpointsRequest request;
-    UA_GetEndpointsRequest_init(&request);
-    request.requestHeader.timestamp = UA_DateTime_now();
-    request.requestHeader.timeoutHint = 10000;
-    // assume the endpointurl outlives the service call
-    request.endpointUrl = endpointUrl;
-
-    UA_GetEndpointsResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_GETENDPOINTSREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_GETENDPOINTSRESPONSE]);
-
-    if(response.responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-        UA_StatusCode retval = response.responseHeader.serviceResult;
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "GetEndpointRequest failed with error code %s",
-                     UA_StatusCode_name(retval));
-        UA_GetEndpointsResponse_deleteMembers(&response);
-        return retval;
-    }
-    *endpointDescriptions = response.endpoints;
-    *endpointDescriptionsSize = response.endpointsSize;
-    response.endpoints = NULL;
-    response.endpointsSize = 0;
-    UA_GetEndpointsResponse_deleteMembers(&response);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-selectEndpoint(UA_Client *client, const UA_String endpointUrl) {
-    UA_EndpointDescription* endpointArray = NULL;
-    size_t endpointArraySize = 0;
-    UA_StatusCode retval =
-        UA_Client_getEndpointsInternal(client, endpointUrl,
-                                       &endpointArraySize, &endpointArray);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    UA_Boolean endpointFound = false;
-    UA_Boolean tokenFound = false;
-    UA_String binaryTransport = UA_STRING("http://opcfoundation.org/UA-Profile/"
-                                          "Transport/uatcp-uasc-uabinary");
-
-    UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT, "Found %lu endpoints", (long unsigned)endpointArraySize);
-    for(size_t i = 0; i < endpointArraySize; ++i) {
-        UA_EndpointDescription* endpoint = &endpointArray[i];
-        /* Match Binary TransportProfile?
-         * Note: Siemens returns empty ProfileUrl, we will accept it as binary */
-        if(endpoint->transportProfileUri.length != 0 &&
-           !UA_String_equal(&endpoint->transportProfileUri, &binaryTransport))
-            continue;
-
-        /* Valid SecurityMode? */
-        if(endpoint->securityMode < 1 || endpoint->securityMode > 3) {
-            UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT, "Rejecting endpoint %lu: invalid security mode", (long unsigned)i);
-            continue;
-        }
-
-        /* Selected SecurityMode? */
-        if(client->config.securityMode > 0 &&
-           client->config.securityMode != endpoint->securityMode) {
-            UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT, "Rejecting endpoint %lu: security mode doesn't match", (long unsigned)i);
-            continue;
-        }
-
-        /* Matching SecurityPolicy? */
-        if(client->config.securityPolicyUri.length > 0 &&
-           !UA_String_equal(&client->config.securityPolicyUri,
-                            &endpoint->securityPolicyUri)) {
-            UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT, "Rejecting endpoint %lu: security policy doesn't match", (long unsigned)i);
-            continue;
-        }
-
-        /* SecurityPolicy available? */
-        if(!getSecurityPolicy(client, endpoint->securityPolicyUri)) {
-            UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT, "Rejecting endpoint %lu: security policy not available", (long unsigned)i);
-            continue;
-        }
-
-        endpointFound = true;
-
-        /* Select a matching UserTokenPolicy inside the endpoint */
-        UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT, "Endpoint %lu has %lu user token policies", (long unsigned)i, (long unsigned)endpoint->userIdentityTokensSize);
-        for(size_t j = 0; j < endpoint->userIdentityTokensSize; ++j) {
-            UA_UserTokenPolicy* userToken = &endpoint->userIdentityTokens[j];
-
-            /* Usertokens also have a security policy... */
-            if (userToken->securityPolicyUri.length > 0 &&
-                !getSecurityPolicy(client, userToken->securityPolicyUri)) {
-                UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT, "Rejecting UserTokenPolicy %lu in endpoint %lu: security policy '%.*s' not available",
-                (long unsigned)j, (long unsigned)i,
-                (int)userToken->securityPolicyUri.length, userToken->securityPolicyUri.data);
-                continue;
-            }
-
-            if(userToken->tokenType > 3) {
-                UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT, "Rejecting UserTokenPolicy %lu in endpoint %lu: invalid token type", (long unsigned)j, (long unsigned)i);
-                continue;
-            }
-
-            /* Does the token type match the client configuration? */
-            if (userToken->tokenType == UA_USERTOKENTYPE_ANONYMOUS &&
-                client->config.userIdentityToken.content.decoded.type != &UA_TYPES[UA_TYPES_ANONYMOUSIDENTITYTOKEN] &&
-                client->config.userIdentityToken.content.decoded.type != NULL) {
-                UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT, "Rejecting UserTokenPolicy %lu (anonymous) in endpoint %lu: configuration doesn't match", (long unsigned)j, (long unsigned)i);
-                continue;
-            }
-            if (userToken->tokenType == UA_USERTOKENTYPE_USERNAME &&
-                client->config.userIdentityToken.content.decoded.type != &UA_TYPES[UA_TYPES_USERNAMEIDENTITYTOKEN]) {
-                UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT, "Rejecting UserTokenPolicy %lu (username) in endpoint %lu: configuration doesn't match", (long unsigned)j, (long unsigned)i);
-                continue;
-            }
-            if (userToken->tokenType == UA_USERTOKENTYPE_CERTIFICATE &&
-                client->config.userIdentityToken.content.decoded.type != &UA_TYPES[UA_TYPES_X509IDENTITYTOKEN]) {
-                UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT, "Rejecting UserTokenPolicy %lu (certificate) in endpoint %lu: configuration doesn't match", (long unsigned)j, (long unsigned)i);
-                continue;
-            }
-            if (userToken->tokenType == UA_USERTOKENTYPE_ISSUEDTOKEN &&
-                client->config.userIdentityToken.content.decoded.type != &UA_TYPES[UA_TYPES_ISSUEDIDENTITYTOKEN]) {
-                UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT, "Rejecting UserTokenPolicy %lu (token) in endpoint %lu: configuration doesn't match", (long unsigned)j, (long unsigned)i);
-                continue;
-            }
-
-            /* Endpoint with matching UserTokenPolicy found. Copy to the configuration. */
-            tokenFound = true;
-            UA_EndpointDescription_deleteMembers(&client->config.endpoint);
-            UA_EndpointDescription temp = *endpoint;
-            temp.userIdentityTokensSize = 0;
-            temp.userIdentityTokens = NULL;
-            UA_UserTokenPolicy_deleteMembers(&client->config.userTokenPolicy);
-
-            retval = UA_EndpointDescription_copy(&temp, &client->config.endpoint);
-            if(retval != UA_STATUSCODE_GOOD) {
-                UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                    "Copying endpoint description failed with error code %s",
-                    UA_StatusCode_name(retval));
-                break;
-            }
-
-            retval = UA_UserTokenPolicy_copy(userToken, &client->config.userTokenPolicy);
-            if(retval != UA_STATUSCODE_GOOD) {
-                UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                    "Copying user token policy failed with error code %s",
-                    UA_StatusCode_name(retval));
-                break;
-            }
-
-#if UA_LOGLEVEL <= 300
-            const char *securityModeNames[3] = {"None", "Sign", "SignAndEncrypt"};
-            const char *userTokenTypeNames[4] = {"Anonymous", "UserName",
-                                                 "Certificate", "IssuedToken"};
-            UA_String *securityPolicyUri = &userToken->securityPolicyUri;
-            if(securityPolicyUri->length == 0)
-                securityPolicyUri = &endpoint->securityPolicyUri;
-
-            /* Log the selected endpoint */
-            UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                        "Selected Endpoint %.*s with SecurityMode %s and SecurityPolicy %.*s",
-                        (int)endpoint->endpointUrl.length, endpoint->endpointUrl.data,
-                        securityModeNames[endpoint->securityMode - 1],
-                        (int)endpoint->securityPolicyUri.length,
-                        endpoint->securityPolicyUri.data);
-
-            /* Log the selected UserTokenPolicy */
-            UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                        "Selected UserTokenPolicy %.*s with UserTokenType %s and SecurityPolicy %.*s",
-                        (int)userToken->policyId.length, userToken->policyId.data,
-                        userTokenTypeNames[userToken->tokenType],
-                        (int)securityPolicyUri->length, securityPolicyUri->data);
-#endif
-            break;
-        }
-
-        if(tokenFound)
-            break;
-    }
-
-    UA_Array_delete(endpointArray, endpointArraySize,
-                    &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
-
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    if(!endpointFound) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "No suitable endpoint found");
-        retval = UA_STATUSCODE_BADINTERNALERROR;
-    } else if(!tokenFound) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "No suitable UserTokenPolicy found for the possible endpoints");
-        retval = UA_STATUSCODE_BADINTERNALERROR;
-    }
-    return retval;
-}
-
-static UA_StatusCode
-createSession(UA_Client *client) {
-    UA_CreateSessionRequest request;
-    UA_CreateSessionRequest_init(&request);
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-
-    if(client->channel.securityMode == UA_MESSAGESECURITYMODE_SIGN ||
-       client->channel.securityMode == UA_MESSAGESECURITYMODE_SIGNANDENCRYPT) {
-        if(client->channel.localNonce.length != UA_SESSION_LOCALNONCELENGTH) {
-           UA_ByteString_deleteMembers(&client->channel.localNonce);
-            retval = UA_ByteString_allocBuffer(&client->channel.localNonce,
-                                               UA_SESSION_LOCALNONCELENGTH);
-            if(retval != UA_STATUSCODE_GOOD)
-               return retval;
-        }
-
-        retval = client->channel.securityPolicy->symmetricModule.
-                 generateNonce(client->channel.securityPolicy, &client->channel.localNonce);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-    }
-
-    request.requestHeader.timestamp = UA_DateTime_now();
-    request.requestHeader.timeoutHint = 10000;
-    UA_ByteString_copy(&client->channel.localNonce, &request.clientNonce);
-    request.requestedSessionTimeout = client->config.requestedSessionTimeout;
-    request.maxResponseMessageSize = UA_INT32_MAX;
-    UA_String_copy(&client->config.endpoint.endpointUrl, &request.endpointUrl);
-
-    UA_ApplicationDescription_copy(&client->config.clientDescription,
-                                   &request.clientDescription);
-
-    if(client->channel.securityMode == UA_MESSAGESECURITYMODE_SIGN ||
-       client->channel.securityMode == UA_MESSAGESECURITYMODE_SIGNANDENCRYPT) {
-        UA_ByteString_copy(&client->channel.securityPolicy->localCertificate,
-                           &request.clientCertificate);
-    }
-
-    UA_CreateSessionResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_CREATESESSIONREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_CREATESESSIONRESPONSE]);
-
-    if(response.responseHeader.serviceResult == UA_STATUSCODE_GOOD) {
-        /* Verify the encrypted response */
-        if(client->channel.securityMode == UA_MESSAGESECURITYMODE_SIGN ||
-           client->channel.securityMode == UA_MESSAGESECURITYMODE_SIGNANDENCRYPT) {
-
-            if(!UA_ByteString_equal(&response.serverCertificate,
-                                    &client->channel.remoteCertificate)) {
-                retval = UA_STATUSCODE_BADCERTIFICATEINVALID;
-                goto cleanup;
-            }
-
-            /* Verify the client signature */
-            retval = checkClientSignature(&client->channel, &response);
-            if(retval != UA_STATUSCODE_GOOD)
-                goto cleanup;
-        }
-
-        /* Copy nonce and and authenticationtoken */
-        UA_ByteString_deleteMembers(&client->channel.remoteNonce);
-        retval |= UA_ByteString_copy(&response.serverNonce, &client->channel.remoteNonce);
-
-        UA_NodeId_deleteMembers(&client->authenticationToken);
-        retval |= UA_NodeId_copy(&response.authenticationToken, &client->authenticationToken);
-    }
-
-    retval |= response.responseHeader.serviceResult;
-
- cleanup:
-    UA_CreateSessionRequest_deleteMembers(&request);
-    UA_CreateSessionResponse_deleteMembers(&response);
-    return retval;
-}
-
-UA_StatusCode
-UA_Client_connectTCPSecureChannel(UA_Client *client, const UA_String endpointUrl) {
-    if(client->state >= UA_CLIENTSTATE_CONNECTED)
-        return UA_STATUSCODE_GOOD;
-
-    UA_ChannelSecurityToken_init(&client->channel.securityToken);
-    client->channel.state = UA_SECURECHANNELSTATE_FRESH;
-    client->channel.sendSequenceNumber = 0;
-    client->requestId = 0;
-
-    /* Set the channel SecurityMode */
-    client->channel.securityMode = client->config.endpoint.securityMode;
-    if(client->channel.securityMode == UA_MESSAGESECURITYMODE_INVALID)
-        client->channel.securityMode = UA_MESSAGESECURITYMODE_NONE;
-
-    /* Initialized the SecureChannel */
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                 "Initialize the SecurityPolicy context");
-    if(!client->channel.securityPolicy) {
-        /* Set the channel SecurityPolicy to #None if no endpoint is selected */
-        UA_String sps = client->config.endpoint.securityPolicyUri;
-        if(sps.length == 0) {
-            UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                        "SecurityPolicy not specified -> use default #None");
-            sps = UA_STRING("http://opcfoundation.org/UA/SecurityPolicy#None");
-        }
-
-        UA_SecurityPolicy *sp = getSecurityPolicy(client, sps);
-        if(!sp) {
-            UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                         "Failed to find the required security policy");
-            retval = UA_STATUSCODE_BADINTERNALERROR;
-            goto cleanup;
-        }
-        
-        
-        retval = UA_SecureChannel_setSecurityPolicy(&client->channel, sp,
-                                                    &client->config.endpoint.serverCertificate);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                        "Failed to set the security policy");
-            goto cleanup;
-        }
-    }
-
-    /* Open a TCP connection */
-    client->connection = client->config.connectionFunc(client->config.localConnectionConfig,
-                                                       endpointUrl, client->config.timeout,
-                                                       &client->config.logger);
-    if(client->connection.state != UA_CONNECTION_OPENING) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "Opening the TCP socket failed");
-        retval = UA_STATUSCODE_BADCONNECTIONCLOSED;
-        goto cleanup;
-    }
-
-    UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                "TCP connection established");
-
-    /* Perform the HEL/ACK handshake */
-    client->connection.config = client->config.localConnectionConfig;
-    retval = HelAckHandshake(client, endpointUrl);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "HEL/ACK handshake failed");
-        goto cleanup;
-    }
-    setClientState(client, UA_CLIENTSTATE_CONNECTED);
-
-    /* Open a SecureChannel. */
-    retval = UA_SecureChannel_generateLocalNonce(&client->channel);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "Generating a local nonce failed");
-        goto cleanup;
-    }
-    client->channel.connection = &client->connection;
-    retval = openSecureChannel(client, false);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "Opening a secure channel failed");
-        goto cleanup;
-    }
-    retval = UA_SecureChannel_generateNewKeys(&client->channel);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "Generating new keys failed");
-        return retval;
-    }
-    setClientState(client, UA_CLIENTSTATE_SECURECHANNEL);
-
-    return retval;
-
-cleanup:
-    UA_Client_disconnect(client);
-    return retval;
-}
-
-UA_StatusCode
-UA_Client_connectSession(UA_Client *client) {
-    if(client->state < UA_CLIENTSTATE_SECURECHANNEL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Delete async service. TODO: Move this from connect to the disconnect/cleanup phase */
-    UA_Client_AsyncService_removeAll(client, UA_STATUSCODE_BADSHUTDOWN);
-
-    // TODO: actually, reactivate an existing session is working, but currently
-    // republish is not implemented This option is disabled until we have a good
-    // implementation of the subscription recovery.
-
-#ifdef UA_SESSION_RECOVERY
-    /* Try to activate an existing Session for this SecureChannel */
-    if((!UA_NodeId_equal(&client->authenticationToken, &UA_NODEID_NULL)) && (createNewSession)) {
-        UA_StatusCode res = activateSession(client);
-        if(res != UA_STATUSCODE_BADSESSIONIDINVALID) {
-            if(res == UA_STATUSCODE_GOOD) {
-                setClientState(client, UA_CLIENTSTATE_SESSION_RENEWED);
-            } else {
-                UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                             "Could not activate the Session with StatusCode %s",
-                             UA_StatusCode_name(retval));
-                UA_Client_disconnect(client);
-            }
-            return res;
-        }
-    }
-#endif /* UA_SESSION_RECOVERY */
-
-    /* Could not recover an old session. Remove authenticationToken */
-    UA_NodeId_deleteMembers(&client->authenticationToken);
-
-    /* Create a session */
-    UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_CLIENT, "Create a new session");
-    UA_StatusCode retval = createSession(client);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "Could not open a Session with StatusCode %s",
-                     UA_StatusCode_name(retval));
-        UA_Client_disconnect(client);
-        return retval;
-    }
-    
-    /* A new session has been created. We need to clean up the subscriptions */
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    UA_Client_Subscriptions_clean(client);
-    client->currentlyOutStandingPublishRequests = 0;
-#endif
-
-    /* Activate the session */
-    retval = activateSession(client);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "Could not activate the Session with StatusCode %s",
-                     UA_StatusCode_name(retval));
-        UA_Client_disconnect(client);
-        return retval;
-    }
-    setClientState(client, UA_CLIENTSTATE_SESSION);
-    return retval;
-}
-
-#ifdef UA_ENABLE_ENCRYPTION
-/* The local ApplicationURI has to match the certificates of the
- * SecurityPolicies */
-static void
-verifyClientApplicationURI(const UA_Client *client) {
-#if UA_LOGLEVEL <= 400
-    for(size_t i = 0; i < client->config.securityPoliciesSize; i++) {
-        UA_SecurityPolicy *sp = &client->config.securityPolicies[i];
-        if(!sp->certificateVerification)
-            continue;
-        UA_StatusCode retval =
-            sp->certificateVerification->
-            verifyApplicationURI(sp->certificateVerification->context,
-                                 &sp->localCertificate,
-                                 &client->config.clientDescription.applicationUri);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_WARNING(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                           "The configured ApplicationURI does not match the URI "
-                           "specified in the certificate for the SecurityPolicy %.*s",
-                           (int)sp->policyUri.length, sp->policyUri.data);
-        }
-    }
-#endif
-}
-#endif
-
-UA_StatusCode
-UA_Client_connectInternal(UA_Client *client, const UA_String endpointUrl) {
-    if(client->state >= UA_CLIENTSTATE_CONNECTED)
-        return UA_STATUSCODE_GOOD;
-
-    UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                "Connecting to endpoint %.*s", (int)endpointUrl.length,
-                endpointUrl.data);
-
-#ifdef UA_ENABLE_ENCRYPTION
-    verifyClientApplicationURI(client);
-#endif
-
-    /* Get endpoints only if the description has not been touched (memset to zero) */
-    UA_Byte test = 0;
-    UA_Byte *pos = (UA_Byte*)&client->config.endpoint;
-    for(size_t i = 0; i < sizeof(UA_EndpointDescription); i++)
-        test = test | pos[i];
-    pos = (UA_Byte*)&client->config.userTokenPolicy;
-    for(size_t i = 0; i < sizeof(UA_UserTokenPolicy); i++)
-        test = test | pos[i];
-    UA_Boolean getEndpoints = (test == 0);
-
-    /* Connect up to the SecureChannel */
-    UA_StatusCode retval = UA_Client_connectTCPSecureChannel(client, endpointUrl);
-    if (retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "Couldn't connect the client to a TCP secure channel");
-        goto cleanup;
-    }
-    
-    /* Get and select endpoints if required */
-    if(getEndpoints) {
-        UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                    "Endpoint and UserTokenPolicy unconfigured, perform GetEndpoints");
-        retval = selectEndpoint(client, endpointUrl);
-        if(retval != UA_STATUSCODE_GOOD)
-            goto cleanup;
-
-        /* Reconnect with a new SecureChannel if the current one does not match
-         * the selected endpoint */
-        if(!UA_String_equal(&client->config.endpoint.securityPolicyUri,
-                            &client->channel.securityPolicy->policyUri)) {
-            UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                        "Disconnect to switch to a different SecurityPolicy");
-            UA_Client_disconnect(client);
-            return UA_Client_connectInternal(client, endpointUrl);
-        }
-    }
-
-    retval = UA_Client_connectSession(client);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    return retval;
-
-cleanup:
-    UA_Client_disconnect(client);
-    return retval;
-}
-
-UA_StatusCode
-UA_Client_connect(UA_Client *client, const char *endpointUrl) {
-    return UA_Client_connectInternal(client, UA_STRING((char*)(uintptr_t)endpointUrl));
-}
-
-UA_StatusCode
-UA_Client_connect_noSession(UA_Client *client, const char *endpointUrl) {
-    return UA_Client_connectTCPSecureChannel(client, UA_STRING((char*)(uintptr_t)endpointUrl));
-}
-
-UA_StatusCode
-UA_Client_connect_username(UA_Client *client, const char *endpointUrl,
-                           const char *username, const char *password) {
-    UA_UserNameIdentityToken* identityToken = UA_UserNameIdentityToken_new();
-    if(!identityToken)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    identityToken->userName = UA_STRING_ALLOC(username);
-    identityToken->password = UA_STRING_ALLOC(password);
-    UA_ExtensionObject_deleteMembers(&client->config.userIdentityToken);
-    client->config.userIdentityToken.encoding = UA_EXTENSIONOBJECT_DECODED;
-    client->config.userIdentityToken.content.decoded.type = &UA_TYPES[UA_TYPES_USERNAMEIDENTITYTOKEN];
-    client->config.userIdentityToken.content.decoded.data = identityToken;
-    return UA_Client_connect(client, endpointUrl);
-}
-
-/************************/
-/* Close the Connection */
-/************************/
-
-static void
-sendCloseSession(UA_Client *client) {
-    UA_CloseSessionRequest request;
-    UA_CloseSessionRequest_init(&request);
-
-    request.requestHeader.timestamp = UA_DateTime_now();
-    request.requestHeader.timeoutHint = 10000;
-    request.deleteSubscriptions = true;
-    UA_CloseSessionResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_CLOSESESSIONREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_CLOSESESSIONRESPONSE]);
-    UA_CloseSessionRequest_deleteMembers(&request);
-    UA_CloseSessionResponse_deleteMembers(&response);
-}
-
-static void
-sendCloseSecureChannel(UA_Client *client) {
-    UA_SecureChannel *channel = &client->channel;
-    UA_CloseSecureChannelRequest request;
-    UA_CloseSecureChannelRequest_init(&request);
-    request.requestHeader.requestHandle = ++client->requestHandle;
-    request.requestHeader.timestamp = UA_DateTime_now();
-    request.requestHeader.timeoutHint = 10000;
-    request.requestHeader.authenticationToken = client->authenticationToken;
-    UA_SecureChannel_sendSymmetricMessage(channel, ++client->requestId,
-                                          UA_MESSAGETYPE_CLO, &request,
-                                          &UA_TYPES[UA_TYPES_CLOSESECURECHANNELREQUEST]);
-    UA_CloseSecureChannelRequest_deleteMembers(&request);
-    UA_SecureChannel_close(&client->channel);
-    UA_SecureChannel_deleteMembers(&client->channel);
-}
-
-UA_StatusCode
-UA_Client_disconnect(UA_Client *client) {
-    /* Is a session established? */
-    if(client->state >= UA_CLIENTSTATE_SESSION) {
-        client->state = UA_CLIENTSTATE_SECURECHANNEL;
-        sendCloseSession(client);
-    }
-    UA_NodeId_deleteMembers(&client->authenticationToken);
-    client->requestHandle = 0;
-
-    /* Is a secure channel established? */
-    if(client->state >= UA_CLIENTSTATE_SECURECHANNEL) {
-        client->state = UA_CLIENTSTATE_CONNECTED;
-        sendCloseSecureChannel(client);
-    }
-
-    /* Close the TCP connection */
-    if(client->connection.state != UA_CONNECTION_CLOSED
-            && client->connection.state != UA_CONNECTION_OPENING)
-        /* UA_ClientConnectionTCP_init sets initial state to opening */
-        if(client->connection.close != NULL)
-            client->connection.close(&client->connection);
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    // TODO REMOVE WHEN UA_SESSION_RECOVERY IS READY
-    /* We need to clean up the subscriptions */
-    UA_Client_Subscriptions_clean(client);
-#endif
-
-    UA_SecureChannel_deleteMembers(&client->channel);
-
-    setClientState(client, UA_CLIENTSTATE_DISCONNECTED);
-    return UA_STATUSCODE_GOOD;
-}
diff --git a/ext/open62541/src/client/ua_client_connect_async.c b/ext/open62541/src/client/ua_client_connect_async.c
deleted file mode 100644
index 28156ee..0000000
--- a/ext/open62541/src/client/ua_client_connect_async.c
+++ /dev/null
@@ -1,731 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/transport_generated.h>
-#include <open62541/transport_generated_encoding_binary.h>
-#include <open62541/transport_generated_handling.h>
-#include <open62541/types_generated_encoding_binary.h>
-
-#include "ua_client_internal.h"
-
-#define UA_MINMESSAGESIZE                8192
-#define UA_SESSION_LOCALNONCELENGTH      32
-#define MAX_DATA_SIZE 4096
-
-/* Asynchronous client connection
- * To prepare an async connection, UA_Client_connectAsync() is called, which does not connect the
- * client directly. UA_Client_run_iterate() takes care of actually connecting the client:
- * if client is disconnected:
- *      send hello msg and set the client state to be WAITING_FOR_ACK
- *      (see UA_Client_connect_iterate())
- * if client is waiting for the ACK:
- *      call the non-blocking receiving function and register processACKResponseAsync() as its callback
- *      (see receivePacketAsync())
- * if ACK is processed (callback called):
- *      processACKResponseAsync() calls openSecureChannelAsync() at the end, which prepares the request
- *      to open secure channel and the client is connected
- * if client is connected:
- *      call the non-blocking receiving function and register processOPNResponse() as its callback
- *      (see receivePacketAsync())
- * if OPN-request processed (callback called)
- *      send session request, where the session response is put into a normal AsyncServiceCall, and when
- *      called, request to activate session is sent, where its response is again put into an AsyncServiceCall
- * in the very last step responseActivateSession():
- *      the user defined callback that is passed into UA_Client_connectAsync() is called and the
- *      async connection finalized.
- * */
-
-/***********************/
-/* Open the Connection */
-/***********************/
-static UA_StatusCode
-openSecureChannelAsync(UA_Client *client/*, UA_Boolean renew*/);
-
-static UA_StatusCode
-requestSession(UA_Client *client, UA_UInt32 *requestId);
-
-static UA_StatusCode
-requestGetEndpoints(UA_Client *client, UA_UInt32 *requestId);
-
-/*receives hello ack, opens secure channel*/
-UA_StatusCode
-processACKResponseAsync(void *application, UA_Connection *connection,
-                         UA_ByteString *chunk) {
-    UA_Client *client = (UA_Client*)application;
-
-    /* Decode the message */
-    size_t offset = 0;
-    UA_TcpMessageHeader messageHeader;
-    UA_TcpAcknowledgeMessage ackMessage;
-    client->connectStatus = UA_TcpMessageHeader_decodeBinary (chunk, &offset,
-                                                              &messageHeader);
-    client->connectStatus |= UA_TcpAcknowledgeMessage_decodeBinary(
-            chunk, &offset, &ackMessage);
-    if (client->connectStatus != UA_STATUSCODE_GOOD) {
-        UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_NETWORK,
-                     "Decoding ACK message failed");
-        return client->connectStatus;
-    }
-    UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_NETWORK, "Received ACK message");
-
-    client->connectStatus =
-        UA_Connection_processHELACK(connection, &client->config.localConnectionConfig,
-                                    (const UA_ConnectionConfig*)&ackMessage);
-    if(client->connectStatus != UA_STATUSCODE_GOOD)
-        return client->connectStatus;
-
-    client->state = UA_CLIENTSTATE_CONNECTED;
-
-    /* Open a SecureChannel. TODO: Select with endpoint  */
-    client->channel.connection = &client->connection;
-    client->connectStatus = openSecureChannelAsync(client/*, false*/);
-    return client->connectStatus;
-}
-
-static UA_StatusCode
-sendHELMessage(UA_Client *client) {
-    /* Get a buffer */
-    UA_ByteString message;
-    UA_Connection *conn = &client->connection;
-    UA_StatusCode retval = conn->getSendBuffer(conn, UA_MINMESSAGESIZE, &message);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Prepare the HEL message and encode at offset 8 */
-    UA_TcpHelloMessage hello;
-    UA_String_copy(&client->endpointUrl, &hello.endpointUrl); /* must be less than 4096 bytes */
-    memcpy(&hello, &client->config.localConnectionConfig,
-           sizeof(UA_ConnectionConfig)); /* same struct layout */
-
-    UA_Byte *bufPos = &message.data[8]; /* skip the header */
-    const UA_Byte *bufEnd = &message.data[message.length];
-    client->connectStatus = UA_TcpHelloMessage_encodeBinary(&hello, &bufPos, bufEnd);
-    UA_TcpHelloMessage_deleteMembers (&hello);
-
-    /* Encode the message header at offset 0 */
-    UA_TcpMessageHeader messageHeader;
-    messageHeader.messageTypeAndChunkType = UA_CHUNKTYPE_FINAL + UA_MESSAGETYPE_HEL;
-    messageHeader.messageSize = (UA_UInt32) ((uintptr_t)bufPos - (uintptr_t)message.data);
-    bufPos = message.data;
-    retval = UA_TcpMessageHeader_encodeBinary(&messageHeader, &bufPos, bufEnd);
-    if(retval != UA_STATUSCODE_GOOD) {
-        conn->releaseSendBuffer(conn, &message);
-        return retval;
-    }
-
-    /* Send the HEL message */
-    message.length = messageHeader.messageSize;
-    retval = conn->send (conn, &message);
-
-    if(retval == UA_STATUSCODE_GOOD) {
-        UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_NETWORK, "Sent HEL message");
-    } else {
-        UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_NETWORK, "Sending HEL failed");
-    }
-    return retval;
-}
-
-static void
-processDecodedOPNResponseAsync(void *application, UA_SecureChannel *channel,
-                                UA_MessageType messageType,
-                                UA_UInt32 requestId,
-                                const UA_ByteString *message) {
-    /* Does the request id match? */
-    UA_Client *client = (UA_Client*)application;
-    if(requestId != client->requestId) {
-        UA_Client_disconnect(client);
-        return;
-    }
-
-    /* Is the content of the expected type? */
-    size_t offset = 0;
-    UA_NodeId responseId;
-    UA_NodeId expectedId = UA_NODEID_NUMERIC(
-            0, UA_TYPES[UA_TYPES_OPENSECURECHANNELRESPONSE].binaryEncodingId);
-    UA_StatusCode retval = UA_NodeId_decodeBinary(message, &offset,
-                                                  &responseId);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Client_disconnect(client);
-        return;
-    }
-    if(!UA_NodeId_equal(&responseId, &expectedId)) {
-        UA_NodeId_deleteMembers(&responseId);
-        UA_Client_disconnect(client);
-        return;
-    }
-    UA_NodeId_deleteMembers (&responseId);
-
-    /* Decode the response */
-    UA_OpenSecureChannelResponse response;
-    retval = UA_OpenSecureChannelResponse_decodeBinary(message, &offset,
-                                                       &response);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Client_disconnect(client);
-        return;
-    }
-
-    /* Response.securityToken.revisedLifetime is UInt32 we need to cast it to
-     * DateTime=Int64 we take 75% of lifetime to start renewing as described in
-     * standard */
-    client->nextChannelRenewal = UA_DateTime_nowMonotonic()
-            + (UA_DateTime) (response.securityToken.revisedLifetime
-                    * (UA_Double) UA_DATETIME_MSEC * 0.75);
-
-    /* Replace the token and nonce */
-    UA_ChannelSecurityToken_deleteMembers(&client->channel.securityToken);
-    UA_ByteString_deleteMembers(&client->channel.remoteNonce);
-    client->channel.securityToken = response.securityToken;
-    client->channel.remoteNonce = response.serverNonce;
-    UA_ResponseHeader_deleteMembers(&response.responseHeader); /* the other members were moved */
-    if(client->channel.state == UA_SECURECHANNELSTATE_OPEN)
-        UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_SECURECHANNEL, "SecureChannel renewed");
-    else
-        UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_SECURECHANNEL, "SecureChannel opened");
-    client->channel.state = UA_SECURECHANNELSTATE_OPEN;
-
-    if(client->state < UA_CLIENTSTATE_SECURECHANNEL)
-        setClientState(client, UA_CLIENTSTATE_SECURECHANNEL);
-}
-
-UA_StatusCode
-processOPNResponseAsync(void *application, UA_Connection *connection,
-                        UA_ByteString *chunk) {
-    UA_Client *client = (UA_Client*) application;
-    UA_StatusCode retval = UA_SecureChannel_decryptAddChunk(&client->channel, chunk, true);
-    client->connectStatus = retval;
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-    UA_SecureChannel_processCompleteMessages(&client->channel, client, processDecodedOPNResponseAsync);
-    
-    if(client->state < UA_CLIENTSTATE_SECURECHANNEL) {
-        retval = UA_STATUSCODE_BADSECURECHANNELCLOSED;
-        goto error;
-    }
-
-    retval = UA_SecureChannel_persistIncompleteMessages(&client->channel);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-
-    retval = UA_SecureChannel_generateNewKeys(&client->channel);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-
-    /* Following requests and responses */
-    UA_UInt32 reqId;
-    if(client->endpointsHandshake)
-        retval = requestGetEndpoints (client, &reqId);
-    else
-        retval = requestSession (client, &reqId);
-
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-
-    return retval;
-
-error:
-    UA_Client_disconnect(client);
-
-    return retval;
-}
-
-/* OPN messges to renew the channel are sent asynchronous */
-static UA_StatusCode
-openSecureChannelAsync(UA_Client *client/*, UA_Boolean renew*/) {
-    /* Check if sc is still valid */
-    /*if(renew && client->nextChannelRenewal - UA_DateTime_nowMonotonic () > 0)
-        return UA_STATUSCODE_GOOD;*/
-
-    UA_Connection *conn = &client->connection;
-    if(conn->state != UA_CONNECTION_ESTABLISHED)
-        return UA_STATUSCODE_BADSERVERNOTCONNECTED;
-
-    /* Prepare the OpenSecureChannelRequest */
-    UA_OpenSecureChannelRequest opnSecRq;
-    UA_OpenSecureChannelRequest_init(&opnSecRq);
-    opnSecRq.requestHeader.timestamp = UA_DateTime_now();
-    opnSecRq.requestHeader.authenticationToken = client->authenticationToken;
-    /*if(renew) {
-        opnSecRq.requestType = UA_SECURITYTOKENREQUESTTYPE_RENEW;
-        UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_SECURECHANNEL,
-                     "Requesting to renew the SecureChannel");
-    } else {*/
-        opnSecRq.requestType = UA_SECURITYTOKENREQUESTTYPE_ISSUE;
-        UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_SECURECHANNEL,
-                     "Requesting to open a SecureChannel");
-    //}
-    opnSecRq.securityMode = client->channel.securityMode;
-
-    opnSecRq.clientNonce = client->channel.localNonce;
-    opnSecRq.requestedLifetime = client->config.secureChannelLifeTime;
-
-    /* Prepare the entry for the linked list */
-    UA_UInt32 requestId = ++client->requestId;
-    /*AsyncServiceCall *ac = NULL;
-    if(renew) {
-        ac = (AsyncServiceCall*)UA_malloc(sizeof(AsyncServiceCall));
-        if (!ac)
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        ac->callback =
-                (UA_ClientAsyncServiceCallback) processDecodedOPNResponseAsync;
-        ac->responseType = &UA_TYPES[UA_TYPES_OPENSECURECHANNELRESPONSE];
-        ac->requestId = requestId;
-        ac->userdata = NULL;
-    }*/
-
-    /* Send the OPN message */
-    UA_StatusCode retval = UA_SecureChannel_sendAsymmetricOPNMessage (
-            &client->channel, requestId, &opnSecRq,
-            &UA_TYPES[UA_TYPES_OPENSECURECHANNELREQUEST]);
-    client->connectStatus = retval;
-
-    if(retval != UA_STATUSCODE_GOOD) {
-        client->connectStatus = retval;
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_SECURECHANNEL,
-                      "Sending OPN message failed with error %s",
-                      UA_StatusCode_name(retval));
-        UA_Client_disconnect(client);
-        //if(renew)
-        //    UA_free(ac);
-        return retval;
-    }
-
-    UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_SECURECHANNEL,
-                 "OPN message sent");
-
-    /* Store the entry for async processing and return */
-    /*if(renew) {
-        LIST_INSERT_HEAD(&client->asyncServiceCalls, ac, pointers);
-        return retval;
-    }*/
-    return retval;
-}
-
-static void
-responseActivateSession(UA_Client *client, void *userdata, UA_UInt32 requestId,
-                        void *response) {
-    UA_ActivateSessionResponse *activateResponse =
-            (UA_ActivateSessionResponse *) response;
-    if(activateResponse->responseHeader.serviceResult) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "ActivateSession failed with error code %s",
-                     UA_StatusCode_name(activateResponse->responseHeader.serviceResult));
-    }
-    client->connection.state = UA_CONNECTION_ESTABLISHED;
-    setClientState(client, UA_CLIENTSTATE_SESSION);
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    /* A new session has been created. We need to clean up the subscriptions */
-    UA_Client_Subscriptions_clean(client);
-#endif
-
-     /* Call onConnect (client_async.c) callback */
-    if(client->asyncConnectCall.callback)
-        client->asyncConnectCall.callback(client, client->asyncConnectCall.userdata,
-                                          requestId + 1,
-                                          &activateResponse->responseHeader.serviceResult);
-}
-
-static UA_StatusCode
-requestActivateSession (UA_Client *client, UA_UInt32 *requestId) {
-    UA_ActivateSessionRequest request;
-    UA_ActivateSessionRequest_init(&request);
-    request.requestHeader.requestHandle = ++client->requestHandle;
-    request.requestHeader.timestamp = UA_DateTime_now ();
-    request.requestHeader.timeoutHint = 600000;
-    UA_StatusCode retval =
-        UA_ExtensionObject_copy(&client->config.userIdentityToken, &request.userIdentityToken);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* If not token is set, use anonymous */
-    if(request.userIdentityToken.encoding == UA_EXTENSIONOBJECT_ENCODED_NOBODY) {
-        UA_AnonymousIdentityToken *t = UA_AnonymousIdentityToken_new();
-        if(!t) {
-            UA_ActivateSessionRequest_deleteMembers(&request);
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        request.userIdentityToken.content.decoded.data = t;
-        request.userIdentityToken.content.decoded.type = &UA_TYPES[UA_TYPES_ANONYMOUSIDENTITYTOKEN];
-        request.userIdentityToken.encoding = UA_EXTENSIONOBJECT_DECODED;
-    }
-
-    /* Set the policy-Id from the endpoint. Every IdentityToken starts with a
-     * string. */
-    retval = UA_String_copy(&client->config.userTokenPolicy.policyId,
-                            (UA_String*)request.userIdentityToken.content.decoded.data);
-
-#ifdef UA_ENABLE_ENCRYPTION
-    /* Encrypt the UserIdentityToken */
-    const UA_String *userTokenPolicy = &client->channel.securityPolicy->policyUri;
-    if(client->config.userTokenPolicy.securityPolicyUri.length > 0)
-        userTokenPolicy = &client->config.userTokenPolicy.securityPolicyUri;
-    retval |= encryptUserIdentityToken(client, userTokenPolicy, &request.userIdentityToken);
-
-    /* This function call is to prepare a client signature */
-    retval |= signActivateSessionRequest(&client->channel, &request);
-#endif
-
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ActivateSessionRequest_deleteMembers(&request);
-        client->connectStatus = retval;
-        return retval;
-    }
-
-    retval = UA_Client_sendAsyncRequest (
-            client, &request, &UA_TYPES[UA_TYPES_ACTIVATESESSIONREQUEST],
-            (UA_ClientAsyncServiceCallback) responseActivateSession,
-            &UA_TYPES[UA_TYPES_ACTIVATESESSIONRESPONSE], NULL, requestId);
-
-    UA_ActivateSessionRequest_deleteMembers(&request);
-    client->connectStatus = retval;
-    return retval;
-}
-
-/* Combination of UA_Client_getEndpointsInternal and getEndpoints */
-static void
-responseGetEndpoints(UA_Client *client, void *userdata, UA_UInt32 requestId,
-                     void *response) {
-    UA_EndpointDescription* endpointArray = NULL;
-    size_t endpointArraySize = 0;
-    UA_GetEndpointsResponse* resp;
-    resp = (UA_GetEndpointsResponse*)response;
-
-    if (resp->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-        client->connectStatus = resp->responseHeader.serviceResult;
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "GetEndpointRequest failed with error code %s",
-                     UA_StatusCode_name (client->connectStatus));
-        UA_GetEndpointsResponse_deleteMembers(resp);
-        return;
-    }
-    endpointArray = resp->endpoints;
-    endpointArraySize = resp->endpointsSize;
-    resp->endpoints = NULL;
-    resp->endpointsSize = 0;
-
-    UA_Boolean endpointFound = false;
-    UA_Boolean tokenFound = false;
-    UA_String securityNone = UA_STRING("http://opcfoundation.org/UA/SecurityPolicy#None");
-    UA_String binaryTransport = UA_STRING("http://opcfoundation.org/UA-Profile/"
-                                          "Transport/uatcp-uasc-uabinary");
-
-    // TODO: compare endpoint information with client->endpointUri
-    for(size_t i = 0; i < endpointArraySize; ++i) {
-        UA_EndpointDescription* endpoint = &endpointArray[i];
-        /* look out for binary transport endpoints */
-        /* Note: Siemens returns empty ProfileUrl, we will accept it as binary */
-        if(endpoint->transportProfileUri.length != 0
-                && !UA_String_equal (&endpoint->transportProfileUri,
-                                     &binaryTransport))
-            continue;
-
-        /* Look for an endpoint corresponding to the client security policy */
-        if(!UA_String_equal(&endpoint->securityPolicyUri, &client->channel.securityPolicy->policyUri))
-            continue;
-
-        endpointFound = true;
-
-        /* Look for a user token policy with an anonymous token */
-        for(size_t j = 0; j < endpoint->userIdentityTokensSize; ++j) {
-            UA_UserTokenPolicy* userToken = &endpoint->userIdentityTokens[j];
-
-            /* Usertokens also have a security policy... */
-            if(userToken->securityPolicyUri.length > 0 &&
-               !UA_String_equal(&userToken->securityPolicyUri, &securityNone))
-                continue;
-
-            /* Does the token type match the client configuration? */
-            if((userToken->tokenType == UA_USERTOKENTYPE_ANONYMOUS &&
-                client->config.userIdentityToken.content.decoded.type !=
-                &UA_TYPES[UA_TYPES_ANONYMOUSIDENTITYTOKEN] &&
-                client->config.userIdentityToken.content.decoded.type != NULL) ||
-               (userToken->tokenType == UA_USERTOKENTYPE_USERNAME &&
-                client->config.userIdentityToken.content.decoded.type !=
-                &UA_TYPES[UA_TYPES_USERNAMEIDENTITYTOKEN]) ||
-               (userToken->tokenType == UA_USERTOKENTYPE_CERTIFICATE &&
-                client->config.userIdentityToken.content.decoded.type !=
-                &UA_TYPES[UA_TYPES_X509IDENTITYTOKEN]) ||
-               (userToken->tokenType == UA_USERTOKENTYPE_ISSUEDTOKEN &&
-                client->config.userIdentityToken.content.decoded.type !=
-                &UA_TYPES[UA_TYPES_ISSUEDIDENTITYTOKEN]))
-                continue;
-
-            /* Endpoint with matching usertokenpolicy found */
-            tokenFound = true;
-            UA_EndpointDescription_deleteMembers(&client->config.endpoint);
-            UA_EndpointDescription_copy(endpoint, &client->config.endpoint);
-            UA_UserTokenPolicy_deleteMembers(&client->config.userTokenPolicy);
-            UA_UserTokenPolicy_copy(userToken, &client->config.userTokenPolicy);
-            break;
-        }
-    }
-
-    UA_Array_delete(endpointArray, endpointArraySize,
-                    &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
-
-    if(!endpointFound) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "No suitable endpoint found");
-        client->connectStatus = UA_STATUSCODE_BADINTERNALERROR;
-    } else if(!tokenFound) {
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "No suitable UserTokenPolicy found for the possible endpoints");
-        client->connectStatus = UA_STATUSCODE_BADINTERNALERROR;
-    }
-    requestSession(client, &requestId);
-}
-
-static UA_StatusCode
-requestGetEndpoints(UA_Client *client, UA_UInt32 *requestId) {
-    UA_GetEndpointsRequest request;
-    UA_GetEndpointsRequest_init(&request);
-    request.requestHeader.timestamp = UA_DateTime_now();
-    request.requestHeader.timeoutHint = 10000;
-    /* assume the endpointurl outlives the service call */
-    UA_String_copy(&client->endpointUrl, &request.endpointUrl);
-
-    client->connectStatus = UA_Client_sendAsyncRequest(
-            client, &request, &UA_TYPES[UA_TYPES_GETENDPOINTSREQUEST],
-            (UA_ClientAsyncServiceCallback) responseGetEndpoints,
-            &UA_TYPES[UA_TYPES_GETENDPOINTSRESPONSE], NULL, requestId);
-    UA_GetEndpointsRequest_deleteMembers(&request);
-    return client->connectStatus;
-
-}
-
-static void
-responseSessionCallback(UA_Client *client, void *userdata, UA_UInt32 requestId,
-                        void *response) {
-    UA_CreateSessionResponse *sessionResponse =
-            (UA_CreateSessionResponse *)response;
-    UA_NodeId_copy(&sessionResponse->authenticationToken,
-                   &client->authenticationToken);
-    requestActivateSession(client, &requestId);
-}
-
-static UA_StatusCode
-requestSession(UA_Client *client, UA_UInt32 *requestId) {
-    UA_CreateSessionRequest request;
-    UA_CreateSessionRequest_init(&request);
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(client->channel.securityMode == UA_MESSAGESECURITYMODE_SIGN ||
-       client->channel.securityMode == UA_MESSAGESECURITYMODE_SIGNANDENCRYPT) {
-        if(client->channel.localNonce.length != UA_SESSION_LOCALNONCELENGTH) {
-           UA_ByteString_deleteMembers(&client->channel.localNonce);
-            retval = UA_ByteString_allocBuffer(&client->channel.localNonce,
-                                               UA_SESSION_LOCALNONCELENGTH);
-            if(retval != UA_STATUSCODE_GOOD)
-                return retval;
-        }
-
-        retval = client->channel.securityPolicy->symmetricModule.
-                 generateNonce(client->channel.securityPolicy, &client->channel.localNonce);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-    }
-
-    request.requestHeader.requestHandle = ++client->requestHandle;
-    request.requestHeader.timestamp = UA_DateTime_now();
-    request.requestHeader.timeoutHint = 10000;
-    UA_ByteString_copy(&client->channel.localNonce, &request.clientNonce);
-    request.requestedSessionTimeout = client->config.requestedSessionTimeout;
-    request.maxResponseMessageSize = UA_INT32_MAX;
-    UA_String_copy(&client->config.endpoint.endpointUrl, &request.endpointUrl);
-
-    UA_ApplicationDescription_copy(&client->config.clientDescription,
-                                   &request.clientDescription);
-
-    retval = UA_Client_sendAsyncRequest (
-            client, &request, &UA_TYPES[UA_TYPES_CREATESESSIONREQUEST],
-            (UA_ClientAsyncServiceCallback) responseSessionCallback,
-            &UA_TYPES[UA_TYPES_CREATESESSIONRESPONSE], NULL, requestId);
-    UA_CreateSessionRequest_deleteMembers(&request);
-    client->connectStatus = retval;
-    return client->connectStatus;
-}
-
-UA_StatusCode
-UA_Client_connect_iterate(UA_Client *client) {
-    UA_LOG_TRACE(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                 "Client connect iterate");
-    if (client->connection.state == UA_CONNECTION_ESTABLISHED){
-        if(client->state < UA_CLIENTSTATE_WAITING_FOR_ACK) {
-            client->connectStatus = sendHELMessage(client);
-            if(client->connectStatus == UA_STATUSCODE_GOOD) {
-                setClientState(client, UA_CLIENTSTATE_WAITING_FOR_ACK);
-            } else {
-                client->connection.close(&client->connection);
-                client->connection.free(&client->connection);
-            }
-            return client->connectStatus;
-        }
-    }
-
-    /* If server is not connected */
-    if(client->connection.state == UA_CONNECTION_CLOSED) {
-        client->connectStatus = UA_STATUSCODE_BADCONNECTIONCLOSED;
-        UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_NETWORK,
-                     "No connection to server.");
-    }
-
-    if(client->connectStatus != UA_STATUSCODE_GOOD) {
-        client->connection.close(&client->connection);
-        client->connection.free(&client->connection);
-    }
-
-    return client->connectStatus;
-}
-
-UA_StatusCode
-UA_Client_connect_async(UA_Client *client, const char *endpointUrl,
-                        UA_ClientAsyncServiceCallback callback,
-                        void *userdata) {
-    UA_LOG_TRACE(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                 "Client internal async");
-
-    if(client->state >= UA_CLIENTSTATE_WAITING_FOR_ACK)
-        return UA_STATUSCODE_GOOD;
-
-    UA_ChannelSecurityToken_init(&client->channel.securityToken);
-    client->channel.state = UA_SECURECHANNELSTATE_FRESH;
-    client->endpointsHandshake = true;
-    client->channel.sendSequenceNumber = 0;
-    client->requestId = 0;
-
-    UA_String_deleteMembers(&client->endpointUrl);
-    client->endpointUrl = UA_STRING_ALLOC(endpointUrl);
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    client->connection =
-        client->config.initConnectionFunc(client->config.localConnectionConfig,
-                                          client->endpointUrl,
-                                          client->config.timeout, &client->config.logger);
-    if(client->connection.state != UA_CONNECTION_OPENING) {
-        UA_LOG_TRACE(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "Could not init async connection");
-        retval = UA_STATUSCODE_BADCONNECTIONCLOSED;
-        goto cleanup;
-    }
-
-    /* Set the channel SecurityMode if not done so far */
-    if(client->channel.securityMode == UA_MESSAGESECURITYMODE_INVALID)
-        client->channel.securityMode = UA_MESSAGESECURITYMODE_NONE;
-
-    /* Set the channel SecurityPolicy if not done so far */
-    if(!client->channel.securityPolicy) {
-        UA_SecurityPolicy *sp =
-            getSecurityPolicy(client, UA_STRING("http://opcfoundation.org/UA/SecurityPolicy#None"));
-        if(!sp) {
-            retval = UA_STATUSCODE_BADINTERNALERROR;
-            goto cleanup;
-        }
-        UA_ByteString remoteCertificate = UA_BYTESTRING_NULL;
-        retval = UA_SecureChannel_setSecurityPolicy(&client->channel, sp,
-                                                    &remoteCertificate);
-        if(retval != UA_STATUSCODE_GOOD)
-            goto cleanup;
-    }
-
-    client->asyncConnectCall.callback = callback;
-    client->asyncConnectCall.userdata = userdata;
-
-    if(!client->connection.connectCallbackID) {
-        UA_LOG_TRACE(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "Adding async connection callback");
-        retval = UA_Client_addRepeatedCallback(
-                     client, client->config.pollConnectionFunc, &client->connection, 100.0,
-                     &client->connection.connectCallbackID);
-        if(retval != UA_STATUSCODE_GOOD)
-            goto cleanup;
-    }
-
-    retval = UA_SecureChannel_generateLocalNonce(&client->channel);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    /* Delete async service. TODO: Move this from connect to the disconnect/cleanup phase */
-    UA_Client_AsyncService_removeAll(client, UA_STATUSCODE_BADSHUTDOWN);
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    client->currentlyOutStandingPublishRequests = 0;
-#endif
-
-    UA_NodeId_deleteMembers(&client->authenticationToken);
-
-    /* Generate new local and remote key */
-    retval = UA_SecureChannel_generateNewKeys(&client->channel);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    return retval;
-
- cleanup:
-    UA_LOG_TRACE(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                 "Failure during async connect");
-    UA_Client_disconnect(client);
-    return retval;
-}
-
-/* Async disconnection */
-static void
-sendCloseSecureChannelAsync(UA_Client *client, void *userdata,
-                             UA_UInt32 requestId, void *response) {
-    UA_NodeId_deleteMembers (&client->authenticationToken);
-    client->requestHandle = 0;
-
-    UA_SecureChannel *channel = &client->channel;
-    UA_CloseSecureChannelRequest request;
-    UA_CloseSecureChannelRequest_init(&request);
-    request.requestHeader.requestHandle = ++client->requestHandle;
-    request.requestHeader.timestamp = UA_DateTime_now();
-    request.requestHeader.timeoutHint = 10000;
-    request.requestHeader.authenticationToken = client->authenticationToken;
-    UA_SecureChannel_sendSymmetricMessage(
-            channel, ++client->requestId, UA_MESSAGETYPE_CLO, &request,
-            &UA_TYPES[UA_TYPES_CLOSESECURECHANNELREQUEST]);
-    UA_SecureChannel_close(&client->channel);
-    UA_SecureChannel_deleteMembers(&client->channel);
-}
-
-static void
-sendCloseSessionAsync(UA_Client *client, UA_UInt32 *requestId) {
-    UA_CloseSessionRequest request;
-    UA_CloseSessionRequest_init(&request);
-
-    request.requestHeader.timestamp = UA_DateTime_now();
-    request.requestHeader.timeoutHint = 10000;
-    request.deleteSubscriptions = true;
-
-    UA_Client_sendAsyncRequest(
-            client, &request, &UA_TYPES[UA_TYPES_CLOSESESSIONREQUEST],
-            (UA_ClientAsyncServiceCallback) sendCloseSecureChannelAsync,
-            &UA_TYPES[UA_TYPES_CLOSESESSIONRESPONSE], NULL, requestId);
-
-}
-
-UA_StatusCode
-UA_Client_disconnect_async(UA_Client *client, UA_UInt32 *requestId) {
-    /* Is a session established? */
-    if (client->state == UA_CLIENTSTATE_SESSION) {
-        client->state = UA_CLIENTSTATE_SESSION_DISCONNECTED;
-        sendCloseSessionAsync(client, requestId);
-    }
-
-    /* Close the TCP connection
-     * shutdown and close (in tcp.c) are already async*/
-    if (client->state >= UA_CLIENTSTATE_CONNECTED)
-        client->connection.close(&client->connection);
-    else
-        UA_Client_removeRepeatedCallback(client, client->connection.connectCallbackID);
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-// TODO REMOVE WHEN UA_SESSION_RECOVERY IS READY
-    /* We need to clean up the subscriptions */
-    UA_Client_Subscriptions_clean(client);
-#endif
-
-    setClientState(client, UA_CLIENTSTATE_DISCONNECTED);
-    return UA_STATUSCODE_GOOD;
-}
diff --git a/ext/open62541/src/client/ua_client_discovery.c b/ext/open62541/src/client/ua_client_discovery.c
deleted file mode 100644
index 2136a75..0000000
--- a/ext/open62541/src/client/ua_client_discovery.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#include "ua_client_internal.h"
-
-UA_StatusCode
-UA_Client_getEndpoints(UA_Client *client, const char *serverUrl,
-                       size_t* endpointDescriptionsSize,
-                       UA_EndpointDescription** endpointDescriptions) {
-    UA_Boolean connected = (client->state > UA_CLIENTSTATE_DISCONNECTED);
-    /* Client is already connected to a different server */
-    if(connected && strncmp((const char*)client->config.endpoint.endpointUrl.data, serverUrl,
-                            client->config.endpoint.endpointUrl.length) != 0) {
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-
-    UA_StatusCode retval;
-    const UA_String url = UA_STRING((char*)(uintptr_t)serverUrl);
-    if(!connected) {
-        retval = UA_Client_connectTCPSecureChannel(client, url);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-    }
-    retval = UA_Client_getEndpointsInternal(client, url, endpointDescriptionsSize,
-                                            endpointDescriptions);
-
-    if(!connected)
-        UA_Client_disconnect(client);
-    return retval;
-}
-
-UA_StatusCode
-UA_Client_findServers(UA_Client *client, const char *serverUrl,
-                      size_t serverUrisSize, UA_String *serverUris,
-                      size_t localeIdsSize, UA_String *localeIds,
-                      size_t *registeredServersSize,
-                      UA_ApplicationDescription **registeredServers) {
-    UA_Boolean connected = (client->state > UA_CLIENTSTATE_DISCONNECTED);
-    /* Client is already connected to a different server */
-    if(connected && strncmp((const char*)client->config.endpoint.endpointUrl.data, serverUrl,
-                            client->config.endpoint.endpointUrl.length) != 0) {
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-
-    UA_StatusCode retval;
-    const UA_String url = UA_STRING((char*)(uintptr_t)serverUrl);
-    if(!connected) {
-        retval = UA_Client_connectTCPSecureChannel(client, url);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-    }
-
-    /* Prepare the request */
-    UA_FindServersRequest request;
-    UA_FindServersRequest_init(&request);
-    request.serverUrisSize = serverUrisSize;
-    request.serverUris = serverUris;
-    request.localeIdsSize = localeIdsSize;
-    request.localeIds = localeIds;
-
-    /* Send the request */
-    UA_FindServersResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_FINDSERVERSREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_FINDSERVERSRESPONSE]);
-
-    /* Process the response */
-    retval = response.responseHeader.serviceResult;
-    if(retval == UA_STATUSCODE_GOOD) {
-        *registeredServersSize = response.serversSize;
-        *registeredServers = response.servers;
-        response.serversSize = 0;
-        response.servers = NULL;
-    } else {
-        *registeredServersSize = 0;
-        *registeredServers = NULL;
-    }
-
-    /* Clean up */
-    UA_FindServersResponse_deleteMembers(&response);
-    if(!connected)
-        UA_Client_disconnect(client);
-    return retval;
-}
-
-#ifdef UA_ENABLE_DISCOVERY
-
-UA_StatusCode
-UA_Client_findServersOnNetwork(UA_Client *client, const char *serverUrl,
-                               UA_UInt32 startingRecordId, UA_UInt32 maxRecordsToReturn,
-                               size_t serverCapabilityFilterSize, UA_String *serverCapabilityFilter,
-                               size_t *serverOnNetworkSize, UA_ServerOnNetwork **serverOnNetwork) {
-    UA_Boolean connected = (client->state > UA_CLIENTSTATE_DISCONNECTED);
-    /* Client is already connected to a different server */
-    if(connected && strncmp((const char*)client->config.endpoint.endpointUrl.data, serverUrl,
-                            client->config.endpoint.endpointUrl.length) != 0) {
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-
-    UA_StatusCode retval;
-    const UA_String url = UA_STRING((char*)(uintptr_t)serverUrl);
-    if(!connected) {
-        retval = UA_Client_connectTCPSecureChannel(client, url);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-    }
-
-    /* Prepare the request */
-    UA_FindServersOnNetworkRequest request;
-    UA_FindServersOnNetworkRequest_init(&request);
-    request.startingRecordId = startingRecordId;
-    request.maxRecordsToReturn = maxRecordsToReturn;
-    request.serverCapabilityFilterSize = serverCapabilityFilterSize;
-    request.serverCapabilityFilter = serverCapabilityFilter;
-
-    /* Send the request */
-    UA_FindServersOnNetworkResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_FINDSERVERSONNETWORKREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_FINDSERVERSONNETWORKRESPONSE]);
-
-    /* Process the response */
-    retval = response.responseHeader.serviceResult;
-    if(retval == UA_STATUSCODE_GOOD) {
-        *serverOnNetworkSize = response.serversSize;
-        *serverOnNetwork = response.servers;
-        response.serversSize = 0;
-        response.servers = NULL;
-    } else {
-        *serverOnNetworkSize = 0;
-        *serverOnNetwork = NULL;
-    }
-
-    /* Clean up */
-    UA_FindServersOnNetworkResponse_deleteMembers(&response);
-    if(!connected)
-        UA_Client_disconnect(client);
-    return retval;
-}
-
-#endif
diff --git a/ext/open62541/src/client/ua_client_highlevel.c b/ext/open62541/src/client/ua_client_highlevel.c
deleted file mode 100644
index f605f7b..0000000
--- a/ext/open62541/src/client/ua_client_highlevel.c
+++ /dev/null
@@ -1,947 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2015-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Florian Palm
- *    Copyright 2016 (c) Chris Iatrou
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2018 (c) Fabian Arndt
- *    Copyright 2018 (c) Peter Rustler, basyskom GmbH
- */
-
-#include <open62541/client_highlevel.h>
-#include <open62541/client_highlevel_async.h>
-
-#include "ua_client_internal.h"
-
-UA_StatusCode
-UA_Client_NamespaceGetIndex(UA_Client *client, UA_String *namespaceUri,
-                            UA_UInt16 *namespaceIndex) {
-    UA_ReadRequest request;
-    UA_ReadRequest_init(&request);
-    UA_ReadValueId id;
-    UA_ReadValueId_init(&id);
-    id.attributeId = UA_ATTRIBUTEID_VALUE;
-    id.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_NAMESPACEARRAY);
-    request.nodesToRead = &id;
-    request.nodesToReadSize = 1;
-
-    UA_ReadResponse response = UA_Client_Service_read(client, request);
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(response.responseHeader.serviceResult != UA_STATUSCODE_GOOD)
-        retval = response.responseHeader.serviceResult;
-    else if(response.resultsSize != 1 || !response.results[0].hasValue)
-        retval = UA_STATUSCODE_BADNODEATTRIBUTESINVALID;
-    else if(response.results[0].value.type != &UA_TYPES[UA_TYPES_STRING])
-        retval = UA_STATUSCODE_BADTYPEMISMATCH;
-
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ReadResponse_deleteMembers(&response);
-        return retval;
-    }
-
-    retval = UA_STATUSCODE_BADNOTFOUND;
-    UA_String *ns = (UA_String *)response.results[0].value.data;
-    for(size_t i = 0; i < response.results[0].value.arrayLength; ++i) {
-        if(UA_String_equal(namespaceUri, &ns[i])) {
-            *namespaceIndex = (UA_UInt16)i;
-            retval = UA_STATUSCODE_GOOD;
-            break;
-        }
-    }
-
-    UA_ReadResponse_deleteMembers(&response);
-    return retval;
-}
-
-UA_StatusCode
-UA_Client_forEachChildNodeCall(UA_Client *client, UA_NodeId parentNodeId,
-                               UA_NodeIteratorCallback callback, void *handle) {
-    UA_BrowseRequest bReq;
-    UA_BrowseRequest_init(&bReq);
-    bReq.requestedMaxReferencesPerNode = 0;
-    bReq.nodesToBrowse = UA_BrowseDescription_new();
-    bReq.nodesToBrowseSize = 1;
-    UA_NodeId_copy(&parentNodeId, &bReq.nodesToBrowse[0].nodeId);
-    bReq.nodesToBrowse[0].resultMask = UA_BROWSERESULTMASK_ALL; //return everything
-    bReq.nodesToBrowse[0].browseDirection = UA_BROWSEDIRECTION_BOTH;
-
-    UA_BrowseResponse bResp = UA_Client_Service_browse(client, bReq);
-
-    UA_StatusCode retval = bResp.responseHeader.serviceResult;
-    if(retval == UA_STATUSCODE_GOOD) {
-        for(size_t i = 0; i < bResp.resultsSize; ++i) {
-            for(size_t j = 0; j < bResp.results[i].referencesSize; ++j) {
-                UA_ReferenceDescription *ref = &bResp.results[i].references[j];
-                retval |= callback(ref->nodeId.nodeId, !ref->isForward,
-                                   ref->referenceTypeId, handle);
-            }
-        }
-    }
-
-    UA_BrowseRequest_deleteMembers(&bReq);
-    UA_BrowseResponse_deleteMembers(&bResp);
-    return retval;
-}
-
-/*******************/
-/* Node Management */
-/*******************/
-
-UA_StatusCode
-UA_Client_addReference(UA_Client *client, const UA_NodeId sourceNodeId,
-                       const UA_NodeId referenceTypeId, UA_Boolean isForward,
-                       const UA_String targetServerUri,
-                       const UA_ExpandedNodeId targetNodeId,
-                       UA_NodeClass targetNodeClass) {
-    UA_AddReferencesItem item;
-    UA_AddReferencesItem_init(&item);
-    item.sourceNodeId = sourceNodeId;
-    item.referenceTypeId = referenceTypeId;
-    item.isForward = isForward;
-    item.targetServerUri = targetServerUri;
-    item.targetNodeId = targetNodeId;
-    item.targetNodeClass = targetNodeClass;
-    UA_AddReferencesRequest request;
-    UA_AddReferencesRequest_init(&request);
-    request.referencesToAdd = &item;
-    request.referencesToAddSize = 1;
-    UA_AddReferencesResponse response = UA_Client_Service_addReferences(client, request);
-    UA_StatusCode retval = response.responseHeader.serviceResult;
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_AddReferencesResponse_deleteMembers(&response);
-        return retval;
-    }
-    if(response.resultsSize != 1) {
-        UA_AddReferencesResponse_deleteMembers(&response);
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-    retval = response.results[0];
-    UA_AddReferencesResponse_deleteMembers(&response);
-    return retval;
-}
-
-UA_StatusCode
-UA_Client_deleteReference(UA_Client *client, const UA_NodeId sourceNodeId,
-                          const UA_NodeId referenceTypeId, UA_Boolean isForward,
-                          const UA_ExpandedNodeId targetNodeId,
-                          UA_Boolean deleteBidirectional) {
-    UA_DeleteReferencesItem item;
-    UA_DeleteReferencesItem_init(&item);
-    item.sourceNodeId = sourceNodeId;
-    item.referenceTypeId = referenceTypeId;
-    item.isForward = isForward;
-    item.targetNodeId = targetNodeId;
-    item.deleteBidirectional = deleteBidirectional;
-    UA_DeleteReferencesRequest request;
-    UA_DeleteReferencesRequest_init(&request);
-    request.referencesToDelete = &item;
-    request.referencesToDeleteSize = 1;
-    UA_DeleteReferencesResponse response = UA_Client_Service_deleteReferences(client, request);
-    UA_StatusCode retval = response.responseHeader.serviceResult;
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_DeleteReferencesResponse_deleteMembers(&response);
-        return retval;
-    }
-    if(response.resultsSize != 1) {
-        UA_DeleteReferencesResponse_deleteMembers(&response);
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-    retval = response.results[0];
-    UA_DeleteReferencesResponse_deleteMembers(&response);
-    return retval;
-}
-
-UA_StatusCode
-UA_Client_deleteNode(UA_Client *client, const UA_NodeId nodeId,
-                     UA_Boolean deleteTargetReferences) {
-    UA_DeleteNodesItem item;
-    UA_DeleteNodesItem_init(&item);
-    item.nodeId = nodeId;
-    item.deleteTargetReferences = deleteTargetReferences;
-    UA_DeleteNodesRequest request;
-    UA_DeleteNodesRequest_init(&request);
-    request.nodesToDelete = &item;
-    request.nodesToDeleteSize = 1;
-    UA_DeleteNodesResponse response = UA_Client_Service_deleteNodes(client, request);
-    UA_StatusCode retval = response.responseHeader.serviceResult;
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_DeleteNodesResponse_deleteMembers(&response);
-        return retval;
-    }
-    if(response.resultsSize != 1) {
-        UA_DeleteNodesResponse_deleteMembers(&response);
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-    retval = response.results[0];
-    UA_DeleteNodesResponse_deleteMembers(&response);
-    return retval;
-}
-
-UA_StatusCode
-__UA_Client_addNode(UA_Client *client, const UA_NodeClass nodeClass,
-                    const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId,
-                    const UA_NodeId referenceTypeId, const UA_QualifiedName browseName,
-                    const UA_NodeId typeDefinition, const UA_NodeAttributes *attr,
-                    const UA_DataType *attributeType, UA_NodeId *outNewNodeId) {
-    UA_AddNodesRequest request;
-    UA_AddNodesRequest_init(&request);
-    UA_AddNodesItem item;
-    UA_AddNodesItem_init(&item);
-    item.parentNodeId.nodeId = parentNodeId;
-    item.referenceTypeId = referenceTypeId;
-    item.requestedNewNodeId.nodeId = requestedNewNodeId;
-    item.browseName = browseName;
-    item.nodeClass = nodeClass;
-    item.typeDefinition.nodeId = typeDefinition;
-    item.nodeAttributes.encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
-    item.nodeAttributes.content.decoded.type = attributeType;
-    item.nodeAttributes.content.decoded.data = (void*)(uintptr_t)attr; // hack. is not written into.
-    request.nodesToAdd = &item;
-    request.nodesToAddSize = 1;
-    UA_AddNodesResponse response = UA_Client_Service_addNodes(client, request);
-
-    UA_StatusCode retval = response.responseHeader.serviceResult;
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_AddNodesResponse_deleteMembers(&response);
-        return retval;
-    }
-
-    if(response.resultsSize != 1) {
-        UA_AddNodesResponse_deleteMembers(&response);
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-
-    /* Move the id of the created node */
-    retval = response.results[0].statusCode;
-    if(retval == UA_STATUSCODE_GOOD && outNewNodeId) {
-        *outNewNodeId = response.results[0].addedNodeId;
-        UA_NodeId_init(&response.results[0].addedNodeId);
-    }
-
-    UA_AddNodesResponse_deleteMembers(&response);
-    return retval;
-}
-
-/********/
-/* Call */
-/********/
-
-#ifdef UA_ENABLE_METHODCALLS
-
-UA_StatusCode
-UA_Client_call(UA_Client *client, const UA_NodeId objectId,
-               const UA_NodeId methodId, size_t inputSize,
-               const UA_Variant *input, size_t *outputSize,
-               UA_Variant **output) {
-    /* Set up the request */
-    UA_CallRequest request;
-    UA_CallRequest_init(&request);
-    UA_CallMethodRequest item;
-    UA_CallMethodRequest_init(&item);
-    item.methodId = methodId;
-    item.objectId = objectId;
-    item.inputArguments = (UA_Variant *)(void*)(uintptr_t)input; // cast const...
-    item.inputArgumentsSize = inputSize;
-    request.methodsToCall = &item;
-    request.methodsToCallSize = 1;
-
-    /* Call the service */
-    UA_CallResponse response = UA_Client_Service_call(client, request);
-    UA_StatusCode retval = response.responseHeader.serviceResult;
-    if(retval == UA_STATUSCODE_GOOD) {
-        if(response.resultsSize == 1)
-            retval = response.results[0].statusCode;
-        else
-            retval = UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_CallResponse_deleteMembers(&response);
-        return retval;
-    }
-
-    /* Move the output arguments */
-    if(output != NULL && outputSize != NULL) {
-        *output = response.results[0].outputArguments;
-        *outputSize = response.results[0].outputArgumentsSize;
-        response.results[0].outputArguments = NULL;
-        response.results[0].outputArgumentsSize = 0;
-    }
-    UA_CallResponse_deleteMembers(&response);
-    return retval;
-}
-
-#endif
-
-/********************/
-/* Write Attributes */
-/********************/
-
-UA_StatusCode
-__UA_Client_writeAttribute(UA_Client *client, const UA_NodeId *nodeId,
-                           UA_AttributeId attributeId, const void *in,
-                           const UA_DataType *inDataType) {
-    if(!in)
-      return UA_STATUSCODE_BADTYPEMISMATCH;
-
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    wValue.nodeId = *nodeId;
-    wValue.attributeId = attributeId;
-    if(attributeId == UA_ATTRIBUTEID_VALUE)
-        wValue.value.value = *(const UA_Variant*)in;
-    else
-        /* hack. is never written into. */
-        UA_Variant_setScalar(&wValue.value.value, (void*)(uintptr_t)in, inDataType);
-    wValue.value.hasValue = true;
-    UA_WriteRequest wReq;
-    UA_WriteRequest_init(&wReq);
-    wReq.nodesToWrite = &wValue;
-    wReq.nodesToWriteSize = 1;
-
-    UA_WriteResponse wResp = UA_Client_Service_write(client, wReq);
-
-    UA_StatusCode retval = wResp.responseHeader.serviceResult;
-    if(retval == UA_STATUSCODE_GOOD) {
-        if(wResp.resultsSize == 1)
-            retval = wResp.results[0];
-        else
-            retval = UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-
-    UA_WriteResponse_deleteMembers(&wResp);
-    return retval;
-}
-
-UA_StatusCode
-UA_Client_writeArrayDimensionsAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                        size_t newArrayDimensionsSize,
-                                        const UA_UInt32 *newArrayDimensions) {
-    if(!newArrayDimensions)
-      return UA_STATUSCODE_BADTYPEMISMATCH;
-
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    wValue.nodeId = nodeId;
-    wValue.attributeId = UA_ATTRIBUTEID_ARRAYDIMENSIONS;
-    UA_Variant_setArray(&wValue.value.value, (void*)(uintptr_t)newArrayDimensions,
-                        newArrayDimensionsSize, &UA_TYPES[UA_TYPES_UINT32]);
-    wValue.value.hasValue = true;
-    UA_WriteRequest wReq;
-    UA_WriteRequest_init(&wReq);
-    wReq.nodesToWrite = &wValue;
-    wReq.nodesToWriteSize = 1;
-
-    UA_WriteResponse wResp = UA_Client_Service_write(client, wReq);
-
-    UA_StatusCode retval = wResp.responseHeader.serviceResult;
-    if(retval == UA_STATUSCODE_GOOD) {
-        if(wResp.resultsSize == 1)
-            retval = wResp.results[0];
-        else
-            retval = UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-    UA_WriteResponse_deleteMembers(&wResp);
-    return retval;
-}
-
-/*******************/
-/* Read Attributes */
-/*******************/
-
-UA_StatusCode
-__UA_Client_readAttribute(UA_Client *client, const UA_NodeId *nodeId,
-                          UA_AttributeId attributeId, void *out,
-                          const UA_DataType *outDataType) {
-    UA_ReadValueId item;
-    UA_ReadValueId_init(&item);
-    item.nodeId = *nodeId;
-    item.attributeId = attributeId;
-    UA_ReadRequest request;
-    UA_ReadRequest_init(&request);
-    request.nodesToRead = &item;
-    request.nodesToReadSize = 1;
-    UA_ReadResponse response = UA_Client_Service_read(client, request);
-    UA_StatusCode retval = response.responseHeader.serviceResult;
-    if(retval == UA_STATUSCODE_GOOD) {
-        if(response.resultsSize == 1)
-            retval = response.results[0].status;
-        else
-            retval = UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ReadResponse_deleteMembers(&response);
-        return retval;
-    }
-
-    /* Set the StatusCode */
-    UA_DataValue *res = response.results;
-    if(res->hasStatus)
-        retval = res->status;
-
-    /* Return early of no value is given */
-    if(!res->hasValue) {
-        if(retval == UA_STATUSCODE_GOOD)
-            retval = UA_STATUSCODE_BADUNEXPECTEDERROR;
-        UA_ReadResponse_deleteMembers(&response);
-        return retval;
-    }
-
-    /* Copy value into out */
-    if(attributeId == UA_ATTRIBUTEID_VALUE) {
-        memcpy(out, &res->value, sizeof(UA_Variant));
-        UA_Variant_init(&res->value);
-    } else if(attributeId == UA_ATTRIBUTEID_NODECLASS) {
-        memcpy(out, (UA_NodeClass*)res->value.data, sizeof(UA_NodeClass));
-    } else if(UA_Variant_isScalar(&res->value) &&
-              res->value.type == outDataType) {
-        memcpy(out, res->value.data, res->value.type->memSize);
-        UA_free(res->value.data);
-        res->value.data = NULL;
-    } else {
-        retval = UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-
-    UA_ReadResponse_deleteMembers(&response);
-    return retval;
-}
-
-static UA_StatusCode
-processReadArrayDimensionsResult(UA_ReadResponse *response,
-                                 UA_UInt32 **outArrayDimensions,
-                                 size_t *outArrayDimensionsSize) {
-    UA_StatusCode retval = response->responseHeader.serviceResult;
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    if(response->resultsSize != 1)
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-
-    retval = response->results[0].status;
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    UA_DataValue *res = &response->results[0];
-    if(!res->hasValue ||
-       UA_Variant_isScalar(&res->value) ||
-       res->value.type != &UA_TYPES[UA_TYPES_UINT32])
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-
-    /* Move results */
-    *outArrayDimensions = (UA_UInt32*)res->value.data;
-    *outArrayDimensionsSize = res->value.arrayLength;
-    res->value.data = NULL;
-    res->value.arrayLength = 0;
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_Client_readArrayDimensionsAttribute(UA_Client *client, const UA_NodeId nodeId,
-                                       size_t *outArrayDimensionsSize,
-                                       UA_UInt32 **outArrayDimensions) {
-    UA_ReadValueId item;
-    UA_ReadValueId_init(&item);
-    item.nodeId = nodeId;
-    item.attributeId = UA_ATTRIBUTEID_ARRAYDIMENSIONS;
-    UA_ReadRequest request;
-    UA_ReadRequest_init(&request);
-    request.nodesToRead = &item;
-    request.nodesToReadSize = 1;
-
-    UA_ReadResponse response = UA_Client_Service_read(client, request);
-    UA_StatusCode retval = processReadArrayDimensionsResult(&response, outArrayDimensions,
-                                                            outArrayDimensionsSize);
-    UA_ReadResponse_deleteMembers(&response);
-    return retval;
-}
-
-/*********************/
-/* Historical Access */
-/*********************/
-#ifdef UA_ENABLE_HISTORIZING
-static UA_HistoryReadResponse
-__UA_Client_HistoryRead(UA_Client *client, const UA_NodeId *nodeId,
-                        UA_ExtensionObject* details, UA_String indexRange,
-                        UA_TimestampsToReturn timestampsToReturn,
-                        UA_ByteString continuationPoint, UA_Boolean releaseConti) {
-
-    UA_HistoryReadValueId item;
-    UA_HistoryReadValueId_init(&item);
-
-    item.nodeId = *nodeId;
-    item.indexRange = indexRange;
-    item.continuationPoint = continuationPoint;
-    item.dataEncoding = UA_QUALIFIEDNAME(0, "Default Binary");
-
-    UA_HistoryReadRequest request;
-    UA_HistoryReadRequest_init(&request);
-
-    request.nodesToRead = &item;
-    request.nodesToReadSize = 1;
-    request.timestampsToReturn = timestampsToReturn; // Defaults to Source
-    request.releaseContinuationPoints = releaseConti; // No values are returned, if true
-
-    /* Build ReadDetails */
-    request.historyReadDetails = *details;
-
-    return UA_Client_Service_historyRead(client, request);
-}
-
-static UA_StatusCode
-__UA_Client_HistoryRead_service(UA_Client *client, const UA_NodeId *nodeId,
-                                   const UA_HistoricalIteratorCallback callback,
-                                   UA_ExtensionObject *details, UA_String indexRange,
-                                   UA_TimestampsToReturn timestampsToReturn,
-                                   void *callbackContext) {
-
-    UA_ByteString continuationPoint = UA_BYTESTRING_NULL;
-    UA_Boolean continuationAvail = false;
-    UA_Boolean fetchMore = false;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-
-    do {
-        /* We release the continuation point, if no more data is requested by the user */
-        UA_Boolean cleanup = !fetchMore && continuationAvail;
-        UA_HistoryReadResponse response =
-            __UA_Client_HistoryRead(client, nodeId, details, indexRange, timestampsToReturn, continuationPoint, cleanup);
-
-        if (cleanup) {
-            retval = response.responseHeader.serviceResult;
-cleanup:    UA_HistoryReadResponse_deleteMembers(&response);
-            UA_ByteString_deleteMembers(&continuationPoint);
-            return retval;
-        }
-
-        retval = response.responseHeader.serviceResult;
-        if (retval == UA_STATUSCODE_GOOD) {
-            if (response.resultsSize == 1)
-                retval = response.results[0].statusCode;
-            else
-                retval = UA_STATUSCODE_BADUNEXPECTEDERROR;
-        }
-        if (retval != UA_STATUSCODE_GOOD)
-            goto cleanup;
-
-        UA_HistoryReadResult *res = response.results;
-
-        /* Clear old and check / store new continuation point */
-        UA_ByteString_deleteMembers(&continuationPoint);
-        UA_ByteString_copy(&res->continuationPoint, &continuationPoint);
-        continuationAvail = !UA_ByteString_equal(&continuationPoint, &UA_BYTESTRING_NULL);
-
-        /* Client callback with possibility to request further values */
-        fetchMore = callback(client, nodeId, continuationAvail, &res->historyData, callbackContext);
-
-        /* Regular cleanup */
-        UA_HistoryReadResponse_deleteMembers(&response);
-    } while (continuationAvail);
-
-    return retval;
-}
-
-#ifdef UA_ENABLE_EXPERIMENTAL_HISTORIZING
-UA_StatusCode
-UA_Client_HistoryRead_events(UA_Client *client, const UA_NodeId *nodeId,
-                                const UA_HistoricalIteratorCallback callback,
-                                UA_DateTime startTime, UA_DateTime endTime,
-                                UA_String indexRange, const UA_EventFilter filter, UA_UInt32 numValuesPerNode,
-                                UA_TimestampsToReturn timestampsToReturn, void *callbackContext) {
-
-    UA_ReadEventDetails details;
-    UA_ReadEventDetails_init(&details);
-    details.filter = filter;
-
-    // At least two of the following parameters must be set
-    details.numValuesPerNode = numValuesPerNode; // 0 = return all / max server is capable of
-    details.startTime = startTime;
-    details.endTime = endTime;
-
-    UA_ExtensionObject detailsExtensionObject;
-    UA_ExtensionObject_init(&detailsExtensionObject);
-    detailsExtensionObject.content.decoded.type = &UA_TYPES[UA_TYPES_READEVENTDETAILS];
-    detailsExtensionObject.content.decoded.data = &details;
-    detailsExtensionObject.encoding = UA_EXTENSIONOBJECT_DECODED;
-
-    return __UA_Client_HistoryRead_service(client, nodeId, callback, &detailsExtensionObject,
-                                              indexRange, timestampsToReturn, callbackContext);
-}
-#endif // UA_ENABLE_EXPERIMENTAL_HISTORIZING
-
-static UA_StatusCode
-__UA_Client_HistoryRead_service_rawMod(UA_Client *client, const UA_NodeId *nodeId,
-                                          const UA_HistoricalIteratorCallback callback,
-                                          UA_DateTime startTime,UA_DateTime endTime,
-                                          UA_String indexRange, UA_Boolean returnBounds, UA_UInt32 numValuesPerNode,
-                                          UA_Boolean readModified, UA_TimestampsToReturn timestampsToReturn,
-                                          void *callbackContext) {
-
-    UA_ReadRawModifiedDetails details;
-    UA_ReadRawModifiedDetails_init(&details);
-    details.isReadModified = readModified; // Return only modified values
-    details.returnBounds = returnBounds;   // Return values pre / post given range
-
-    // At least two of the following parameters must be set
-    details.numValuesPerNode = numValuesPerNode;   // 0 = return all / max server is capable of
-    details.startTime = startTime;
-    details.endTime = endTime;
-
-    UA_ExtensionObject detailsExtensionObject;
-    UA_ExtensionObject_init(&detailsExtensionObject);
-    detailsExtensionObject.content.decoded.type = &UA_TYPES[UA_TYPES_READRAWMODIFIEDDETAILS];
-    detailsExtensionObject.content.decoded.data = &details;
-    detailsExtensionObject.encoding = UA_EXTENSIONOBJECT_DECODED;
-
-    return __UA_Client_HistoryRead_service(client, nodeId, callback,
-                                              &detailsExtensionObject, indexRange,
-                                              timestampsToReturn, callbackContext);
-}
-
-UA_StatusCode
-UA_Client_HistoryRead_raw(UA_Client *client, const UA_NodeId *nodeId,
-                             const UA_HistoricalIteratorCallback callback,
-                             UA_DateTime startTime, UA_DateTime endTime,
-                             UA_String indexRange, UA_Boolean returnBounds, UA_UInt32 numValuesPerNode,
-                             UA_TimestampsToReturn timestampsToReturn, void *callbackContext) {
-
-    return __UA_Client_HistoryRead_service_rawMod(client, nodeId, callback, startTime, endTime, indexRange, returnBounds,
-                                                     numValuesPerNode, false, timestampsToReturn, callbackContext);
-}
-
-#ifdef UA_ENABLE_EXPERIMENTAL_HISTORIZING
-UA_StatusCode
-UA_Client_HistoryRead_modified(UA_Client *client, const UA_NodeId *nodeId,
-                                  const UA_HistoricalIteratorCallback callback,
-                                  UA_DateTime startTime, UA_DateTime endTime,
-                                  UA_String indexRange, UA_Boolean returnBounds, UA_UInt32 maxItems,
-                                  UA_TimestampsToReturn timestampsToReturn, void *callbackContext) {
-
-    return __UA_Client_HistoryRead_service_rawMod(client, nodeId, callback, startTime, endTime, indexRange, returnBounds,
-                                                     maxItems, true, timestampsToReturn, callbackContext);
-}
-#endif // UA_ENABLE_EXPERIMENTAL_HISTORIZING
-
-static UA_HistoryUpdateResponse
-__UA_Client_HistoryUpdate(UA_Client *client,
-                          void *details,
-                          size_t typeId)
-{
-    UA_HistoryUpdateRequest request;
-    UA_HistoryUpdateRequest_init(&request);
-
-    UA_ExtensionObject extension;
-    UA_ExtensionObject_init(&extension);
-    request.historyUpdateDetailsSize = 1;
-    request.historyUpdateDetails = &extension;
-
-    extension.encoding = UA_EXTENSIONOBJECT_DECODED;
-    extension.content.decoded.type = &UA_TYPES[typeId];
-    extension.content.decoded.data = details;
-
-    UA_HistoryUpdateResponse response;
-    response = UA_Client_Service_historyUpdate(client, request);
-    //UA_HistoryUpdateRequest_deleteMembers(&request);
-    return response;
-}
-
-static UA_StatusCode
-__UA_Client_HistoryUpdate_updateData(UA_Client *client,
-                          const UA_NodeId *nodeId,
-                          UA_PerformUpdateType type,
-                          UA_DataValue *value)
-{
-    UA_StatusCode ret = UA_STATUSCODE_GOOD;
-    UA_UpdateDataDetails details;
-    UA_UpdateDataDetails_init(&details);
-
-    details.performInsertReplace = type;
-    details.updateValuesSize = 1;
-    details.updateValues = value;
-    UA_NodeId_copy(nodeId, &details.nodeId);
-
-    UA_HistoryUpdateResponse response;
-    response = __UA_Client_HistoryUpdate(client, &details, UA_TYPES_UPDATEDATADETAILS);
-    if (response.responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-        ret = response.responseHeader.serviceResult;
-        goto cleanup;
-    }
-    if (response.resultsSize != 1 || response.results[0].operationResultsSize != 1) {
-        ret = UA_STATUSCODE_BADUNEXPECTEDERROR;
-        goto cleanup;
-    }
-    if (response.results[0].statusCode != UA_STATUSCODE_GOOD) {
-        ret = response.results[0].statusCode;
-        goto cleanup;
-    }
-    ret = response.results[0].operationResults[0];
-cleanup:
-    UA_HistoryUpdateResponse_deleteMembers(&response);
-    UA_NodeId_deleteMembers(&details.nodeId);
-    return ret;
-}
-
-UA_StatusCode
-UA_Client_HistoryUpdate_insert(UA_Client *client,
-                               const UA_NodeId *nodeId,
-                               UA_DataValue *value)
-{
-    return __UA_Client_HistoryUpdate_updateData(client,
-                                                nodeId,
-                                                UA_PERFORMUPDATETYPE_INSERT,
-                                                value);
-}
-
-UA_StatusCode
-UA_Client_HistoryUpdate_replace(UA_Client *client,
-                                const UA_NodeId *nodeId,
-                                UA_DataValue *value)
-{
-    return __UA_Client_HistoryUpdate_updateData(client,
-                                                nodeId,
-                                                UA_PERFORMUPDATETYPE_REPLACE,
-                                                value);
-}
-
-UA_StatusCode
-UA_Client_HistoryUpdate_update(UA_Client *client,
-                               const UA_NodeId *nodeId,
-                               UA_DataValue *value)
-{
-    return __UA_Client_HistoryUpdate_updateData(client,
-                                                nodeId,
-                                                UA_PERFORMUPDATETYPE_UPDATE,
-                                                value);
-}
-
-UA_StatusCode
-UA_Client_HistoryUpdate_deleteRaw(UA_Client *client,
-                                  const UA_NodeId *nodeId,
-                                  UA_DateTime startTimestamp,
-                                  UA_DateTime endTimestamp)
-{
-    UA_StatusCode ret = UA_STATUSCODE_GOOD;
-
-    UA_DeleteRawModifiedDetails details;
-    UA_DeleteRawModifiedDetails_init(&details);
-
-    details.isDeleteModified = false;
-    details.startTime = startTimestamp;
-    details.endTime = endTimestamp;
-    UA_NodeId_copy(nodeId, &details.nodeId);
-
-    UA_HistoryUpdateResponse response;
-    response = __UA_Client_HistoryUpdate(client, &details, UA_TYPES_DELETERAWMODIFIEDDETAILS);
-    if (response.responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-        ret = response.responseHeader.serviceResult;
-        goto cleanup;
-    }
-    if (response.resultsSize != 1) {
-        ret = UA_STATUSCODE_BADUNEXPECTEDERROR;
-        goto cleanup;
-    }
-
-    ret = response.results[0].statusCode;
-
-cleanup:
-    UA_HistoryUpdateResponse_deleteMembers(&response);
-    UA_NodeId_deleteMembers(&details.nodeId);
-    return ret;
-}
-#endif // UA_ENABLE_HISTORIZING
-
-/* Async Functions */
-
-static
-void ValueAttributeRead(UA_Client *client, void *userdata,
-                        UA_UInt32 requestId, void *response) {
-    if(!response)
-        return;
-
-    /* Find the callback for the response */
-    CustomCallback *cc;
-    LIST_FOREACH(cc, &client->customCallbacks, pointers) {
-        if(cc->callbackId == requestId)
-            break;
-    }
-    if(!cc)
-        return;
-
-    UA_ReadResponse *rr = (UA_ReadResponse *) response;
-    UA_DataValue *res = rr->results;
-    UA_Boolean done = false;
-    if(rr->resultsSize == 1 && res != NULL && res->hasValue) {
-        if(cc->attributeId == UA_ATTRIBUTEID_VALUE) {
-            /* Call directly with the variant */
-            cc->callback(client, userdata, requestId, &res->value);
-            done = true;
-        } else if(UA_Variant_isScalar(&res->value) &&
-                  res->value.type == cc->outDataType) {
-            /* Unpack the value */
-            UA_STACKARRAY(UA_Byte, value, cc->outDataType->memSize);
-            memcpy(&value, res->value.data, cc->outDataType->memSize);
-            cc->callback(client, userdata, requestId, &value);
-            done = true;
-        }
-    }
-
-    /* Could not process, delete the callback anyway */
-    if(!done)
-        UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                    "Cannot process the response to the async read "
-                    "request %u", requestId);
-
-    LIST_REMOVE(cc, pointers);
-    UA_free(cc);
-}
-
-/*Read Attributes*/
-UA_StatusCode __UA_Client_readAttribute_async(UA_Client *client,
-        const UA_NodeId *nodeId, UA_AttributeId attributeId,
-        const UA_DataType *outDataType, UA_ClientAsyncServiceCallback callback,
-        void *userdata, UA_UInt32 *reqId) {
-    UA_ReadValueId item;
-    UA_ReadValueId_init(&item);
-    item.nodeId = *nodeId;
-    item.attributeId = attributeId;
-    UA_ReadRequest request;
-    UA_ReadRequest_init(&request);
-    request.nodesToRead = &item;
-    request.nodesToReadSize = 1;
-
-    __UA_Client_AsyncService(client, &request, &UA_TYPES[UA_TYPES_READREQUEST],
-                             ValueAttributeRead, &UA_TYPES[UA_TYPES_READRESPONSE],
-                             userdata, reqId);
-
-    CustomCallback *cc = (CustomCallback*) UA_malloc(sizeof(CustomCallback));
-    if (!cc)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    cc->callback = callback;
-    cc->callbackId = *reqId;
-
-    cc->attributeId = attributeId;
-    cc->outDataType = outDataType;
-
-    LIST_INSERT_HEAD(&client->customCallbacks, cc, pointers);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/*Write Attributes*/
-UA_StatusCode __UA_Client_writeAttribute_async(UA_Client *client,
-        const UA_NodeId *nodeId, UA_AttributeId attributeId, const void *in,
-        const UA_DataType *inDataType, UA_ClientAsyncServiceCallback callback,
-        void *userdata, UA_UInt32 *reqId) {
-    if (!in)
-        return UA_STATUSCODE_BADTYPEMISMATCH;
-
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    wValue.nodeId = *nodeId;
-    wValue.attributeId = attributeId;
-    if (attributeId == UA_ATTRIBUTEID_VALUE)
-        wValue.value.value = *(const UA_Variant*) in;
-    else
-        /* hack. is never written into. */
-        UA_Variant_setScalar(&wValue.value.value, (void*) (uintptr_t) in,
-                inDataType);
-    wValue.value.hasValue = true;
-    UA_WriteRequest wReq;
-    UA_WriteRequest_init(&wReq);
-    wReq.nodesToWrite = &wValue;
-    wReq.nodesToWriteSize = 1;
-
-    return __UA_Client_AsyncService(client, &wReq,
-            &UA_TYPES[UA_TYPES_WRITEREQUEST], callback,
-            &UA_TYPES[UA_TYPES_WRITERESPONSE], userdata, reqId);
-}
-
-/*Node Management*/
-
-UA_StatusCode UA_EXPORT
-__UA_Client_addNode_async(UA_Client *client, const UA_NodeClass nodeClass,
-        const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId,
-        const UA_NodeId referenceTypeId, const UA_QualifiedName browseName,
-        const UA_NodeId typeDefinition, const UA_NodeAttributes *attr,
-        const UA_DataType *attributeType, UA_NodeId *outNewNodeId,
-        UA_ClientAsyncServiceCallback callback, void *userdata,
-        UA_UInt32 *reqId) {
-    UA_AddNodesRequest request;
-    UA_AddNodesRequest_init(&request);
-    UA_AddNodesItem item;
-    UA_AddNodesItem_init(&item);
-    item.parentNodeId.nodeId = parentNodeId;
-    item.referenceTypeId = referenceTypeId;
-    item.requestedNewNodeId.nodeId = requestedNewNodeId;
-    item.browseName = browseName;
-    item.nodeClass = nodeClass;
-    item.typeDefinition.nodeId = typeDefinition;
-    item.nodeAttributes.encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
-    item.nodeAttributes.content.decoded.type = attributeType;
-    item.nodeAttributes.content.decoded.data = (void*) (uintptr_t) attr; // hack. is not written into.
-    request.nodesToAdd = &item;
-    request.nodesToAddSize = 1;
-
-    return __UA_Client_AsyncService(client, &request,
-            &UA_TYPES[UA_TYPES_ADDNODESREQUEST], callback,
-            &UA_TYPES[UA_TYPES_ADDNODESRESPONSE], userdata, reqId);
-
-}
-
-/* Misc Highlevel Functions */
-#ifdef UA_ENABLE_METHODCALLS
-UA_StatusCode __UA_Client_call_async(UA_Client *client,
-        const UA_NodeId objectId, const UA_NodeId methodId, size_t inputSize,
-        const UA_Variant *input, UA_ClientAsyncServiceCallback callback,
-        void *userdata, UA_UInt32 *reqId) {
-
-    UA_CallRequest request;
-    UA_CallRequest_init(&request);
-    UA_CallMethodRequest item;
-    UA_CallMethodRequest_init(&item);
-    item.methodId = methodId;
-    item.objectId = objectId;
-    item.inputArguments = (UA_Variant *) (void*) (uintptr_t) input; // cast const...
-    item.inputArgumentsSize = inputSize;
-    request.methodsToCall = &item;
-    request.methodsToCallSize = 1;
-
-    return __UA_Client_AsyncService(client, &request,
-            &UA_TYPES[UA_TYPES_CALLREQUEST], callback,
-            &UA_TYPES[UA_TYPES_CALLRESPONSE], userdata, reqId);
-}
-#endif
-
-UA_StatusCode __UA_Client_translateBrowsePathsToNodeIds_async(UA_Client *client,
-        char *paths[], UA_UInt32 ids[], size_t pathSize,
-        UA_ClientAsyncServiceCallback callback, void *userdata,
-        UA_UInt32 *reqId) {
-
-    UA_BrowsePath browsePath;
-    UA_BrowsePath_init(&browsePath);
-    browsePath.startingNode = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    browsePath.relativePath.elements = (UA_RelativePathElement*) UA_Array_new(
-            pathSize, &UA_TYPES[UA_TYPES_RELATIVEPATHELEMENT]);
-    if (!browsePath.relativePath.elements)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    browsePath.relativePath.elementsSize = pathSize;
-
-    UA_TranslateBrowsePathsToNodeIdsRequest request;
-    UA_TranslateBrowsePathsToNodeIdsRequest_init(&request);
-    request.browsePaths = &browsePath;
-    request.browsePathsSize = 1;
-
-    UA_StatusCode retval = __UA_Client_AsyncService(client, &request,
-            &UA_TYPES[UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSREQUEST], callback,
-            &UA_TYPES[UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSRESPONSE], userdata,
-            reqId);
-    if (retval != UA_STATUSCODE_GOOD) {
-        UA_Array_delete(browsePath.relativePath.elements,
-                browsePath.relativePath.elementsSize,
-                &UA_TYPES[UA_TYPES_RELATIVEPATHELEMENT]);
-        return retval;
-    }
-    UA_BrowsePath_deleteMembers(&browsePath);
-    return retval;
-}
diff --git a/ext/open62541/src/client/ua_client_internal.h b/ext/open62541/src/client/ua_client_internal.h
deleted file mode 100644
index ff3acb8..0000000
--- a/ext/open62541/src/client/ua_client_internal.h
+++ /dev/null
@@ -1,233 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2016-2017 (c) Florian Palm
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
- */
-
-#ifndef UA_CLIENT_INTERNAL_H_
-#define UA_CLIENT_INTERNAL_H_
-
-#define UA_INTERNAL
-#include <open62541/client.h>
-#include <open62541/client_highlevel.h>
-#include <open62541/client_subscriptions.h>
-
-#include "open62541_queue.h"
-#include "ua_securechannel.h"
-#include "ua_timer.h"
-#include "ua_workqueue.h"
-
-_UA_BEGIN_DECLS
-
-/**************************/
-/* Subscriptions Handling */
-/**************************/
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-
-typedef struct UA_Client_NotificationsAckNumber {
-    LIST_ENTRY(UA_Client_NotificationsAckNumber) listEntry;
-    UA_SubscriptionAcknowledgement subAck;
-} UA_Client_NotificationsAckNumber;
-
-typedef struct UA_Client_MonitoredItem {
-    LIST_ENTRY(UA_Client_MonitoredItem) listEntry;
-    UA_UInt32 monitoredItemId;
-    UA_UInt32 clientHandle;
-    void *context;
-    UA_Client_DeleteMonitoredItemCallback deleteCallback;
-    union {
-        UA_Client_DataChangeNotificationCallback dataChangeCallback;
-        UA_Client_EventNotificationCallback eventCallback;
-    } handler;
-    UA_Boolean isEventMonitoredItem; /* Otherwise a DataChange MoniitoredItem */
-} UA_Client_MonitoredItem;
-
-typedef struct UA_Client_Subscription {
-    LIST_ENTRY(UA_Client_Subscription) listEntry;
-    UA_UInt32 subscriptionId;
-    void *context;
-    UA_Double publishingInterval;
-    UA_UInt32 maxKeepAliveCount;
-    UA_Client_StatusChangeNotificationCallback statusChangeCallback;
-    UA_Client_DeleteSubscriptionCallback deleteCallback;
-    UA_UInt32 sequenceNumber;
-    UA_DateTime lastActivity;
-    LIST_HEAD(UA_ListOfClientMonitoredItems, UA_Client_MonitoredItem) monitoredItems;
-} UA_Client_Subscription;
-
-void
-UA_Client_Subscriptions_clean(UA_Client *client);
-
-void
-UA_Client_MonitoredItem_remove(UA_Client *client, UA_Client_Subscription *sub,
-                               UA_Client_MonitoredItem *mon);
-
-void
-UA_Client_Subscriptions_processPublishResponse(UA_Client *client,
-                                               UA_PublishRequest *request,
-                                               UA_PublishResponse *response);
-
-UA_StatusCode
-UA_Client_preparePublishRequest(UA_Client *client, UA_PublishRequest *request);
-
-UA_StatusCode
-UA_Client_Subscriptions_backgroundPublish(UA_Client *client);
-
-void
-UA_Client_Subscriptions_backgroundPublishInactivityCheck(UA_Client *client);
-
-#endif /* UA_ENABLE_SUBSCRIPTIONS */
-
-/**************/
-/* Encryption */
-/**************/
-
-UA_StatusCode
-signActivateSessionRequest(UA_SecureChannel *channel,
-                           UA_ActivateSessionRequest *request);
-/**********/
-/* Client */
-/**********/
-
-typedef struct AsyncServiceCall {
-    LIST_ENTRY(AsyncServiceCall) pointers;
-    UA_UInt32 requestId;
-    UA_ClientAsyncServiceCallback callback;
-    const UA_DataType *responseType;
-    void *userdata;
-    UA_DateTime start;
-    UA_UInt32 timeout;
-    void *responsedata;
-} AsyncServiceCall;
-
-void UA_Client_AsyncService_cancel(UA_Client *client, AsyncServiceCall *ac,
-                                   UA_StatusCode statusCode);
-
-void UA_Client_AsyncService_removeAll(UA_Client *client, UA_StatusCode statusCode);
-
-typedef struct CustomCallback {
-    LIST_ENTRY(CustomCallback)
-    pointers;
-    //to find the correct callback
-    UA_UInt32 callbackId;
-
-    UA_ClientAsyncServiceCallback callback;
-
-    UA_AttributeId attributeId;
-    const UA_DataType *outDataType;
-} CustomCallback;
-
-struct UA_Client {
-    /* State */
-    UA_ClientState state;
-
-    UA_ClientConfig config;
-    UA_Timer timer;
-    UA_StatusCode connectStatus;
-
-    /* Connection */
-    UA_Connection connection;
-
-    /* SecureChannel */
-    UA_SecureChannel channel;
-    UA_UInt32 requestId;
-    UA_DateTime nextChannelRenewal;
-
-    /* Session */
-    UA_NodeId authenticationToken;
-    UA_UInt32 requestHandle;
-
-    UA_Boolean endpointsHandshake;
-    UA_String endpointUrl; /* Only for the async connect */
-
-    /* Async Service */
-    AsyncServiceCall asyncConnectCall;
-    LIST_HEAD(ListOfAsyncServiceCall, AsyncServiceCall) asyncServiceCalls;
-    /*When using highlevel functions these are the callbacks that can be accessed by the user*/
-    LIST_HEAD(ListOfCustomCallback, CustomCallback) customCallbacks;
-
-    /* Work queue */
-    UA_WorkQueue workQueue;
-
-    /* Subscriptions */
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    UA_UInt32 monitoredItemHandles;
-    LIST_HEAD(, UA_Client_NotificationsAckNumber) pendingNotificationsAcks;
-    LIST_HEAD(, UA_Client_Subscription) subscriptions;
-    UA_UInt16 currentlyOutStandingPublishRequests;
-#endif
-
-    /* Connectivity check */
-    UA_DateTime lastConnectivityCheck;
-    UA_Boolean pendingConnectivityCheck;
-};
-
-void
-setClientState(UA_Client *client, UA_ClientState state);
-
-/* The endpointUrl must be set in the configuration. If the complete
- * endpointdescription is not set, a GetEndpoints is performed. */
-UA_StatusCode
-UA_Client_connectInternal(UA_Client *client, const UA_String endpointUrl);
-
-UA_StatusCode
-UA_Client_connectTCPSecureChannel(UA_Client *client, const UA_String endpointUrl);
-
-UA_StatusCode
-UA_Client_connectSession(UA_Client *client);
-
-UA_StatusCode
-UA_Client_getEndpointsInternal(UA_Client *client, const UA_String endpointUrl,
-                               size_t *endpointDescriptionsSize,
-                               UA_EndpointDescription **endpointDescriptions);
-
-/* Receive and process messages until a synchronous message arrives or the
- * timout finishes */
-UA_StatusCode
-receivePacketAsync(UA_Client *client);
-
-UA_StatusCode
-processACKResponseAsync(void *application, UA_Connection *connection,
-                        UA_ByteString *chunk);
-
-UA_StatusCode
-processOPNResponseAsync(void *application, UA_Connection *connection,
-                        UA_ByteString *chunk);
-
-UA_StatusCode
-openSecureChannel(UA_Client *client, UA_Boolean renew);
-
-UA_StatusCode
-receiveServiceResponse(UA_Client *client, void *response,
-                       const UA_DataType *responseType, UA_DateTime maxDate,
-                       const UA_UInt32 *synchronousRequestId);
-
-UA_StatusCode
-receiveServiceResponseAsync(UA_Client *client, void *response,
-                             const UA_DataType *responseType);
-
-UA_StatusCode
-UA_Client_connect_iterate (UA_Client *client);
-
-void
-setUserIdentityPolicyId(const UA_EndpointDescription *endpoint,
-                        const UA_DataType *tokenType,
-                        UA_String *policyId, UA_String *securityPolicyUri);
-
-UA_SecurityPolicy *
-getSecurityPolicy(UA_Client *client, UA_String policyUri);
-
-UA_StatusCode
-encryptUserIdentityToken(UA_Client *client, const UA_String *userTokenSecurityPolicy,
-                         UA_ExtensionObject *userIdentityToken);
-
-_UA_END_DECLS
-
-#endif /* UA_CLIENT_INTERNAL_H_ */
diff --git a/ext/open62541/src/client/ua_client_subscriptions.c b/ext/open62541/src/client/ua_client_subscriptions.c
deleted file mode 100644
index c43b34d..0000000
--- a/ext/open62541/src/client/ua_client_subscriptions.c
+++ /dev/null
@@ -1,846 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2015-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2016 (c) Sten Grüner
- *    Copyright 2017-2018 (c) Thomas Stalder, Blue Time Concept SA
- *    Copyright 2016-2017 (c) Florian Palm
- *    Copyright 2017 (c) Frank Meerkötter
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#include <open62541/client_highlevel.h>
-#include <open62541/client_highlevel_async.h>
-
-#include "ua_client_internal.h"
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS /* conditional compilation */
-
-/*****************/
-/* Subscriptions */
-/*****************/
-
-UA_CreateSubscriptionResponse UA_EXPORT
-UA_Client_Subscriptions_create(UA_Client *client,
-                               const UA_CreateSubscriptionRequest request,
-                               void *subscriptionContext,
-                               UA_Client_StatusChangeNotificationCallback statusChangeCallback,
-                               UA_Client_DeleteSubscriptionCallback deleteCallback) {
-    UA_CreateSubscriptionResponse response;
-    UA_CreateSubscriptionResponse_init(&response);
-    
-    /* Allocate the internal representation */
-    UA_Client_Subscription *newSub = (UA_Client_Subscription*)
-        UA_malloc(sizeof(UA_Client_Subscription));
-    if(!newSub) {
-        response.responseHeader.serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
-        return response;
-    }
-
-    /* Send the request as a synchronous service call */
-    __UA_Client_Service(client,
-                        &request, &UA_TYPES[UA_TYPES_CREATESUBSCRIPTIONREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_CREATESUBSCRIPTIONRESPONSE]);
-    if(response.responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-        UA_free(newSub);
-        return response;
-    }
-
-    /* Prepare the internal representation */
-    newSub->context = subscriptionContext;
-    newSub->subscriptionId = response.subscriptionId;
-    newSub->sequenceNumber = 0;
-    newSub->lastActivity = UA_DateTime_nowMonotonic();
-    newSub->statusChangeCallback = statusChangeCallback;
-    newSub->deleteCallback = deleteCallback;
-    newSub->publishingInterval = response.revisedPublishingInterval;
-    newSub->maxKeepAliveCount = response.revisedMaxKeepAliveCount;
-    LIST_INIT(&newSub->monitoredItems);
-    LIST_INSERT_HEAD(&client->subscriptions, newSub, listEntry);
-
-    return response;
-}
-
-static UA_Client_Subscription *
-findSubscription(const UA_Client *client, UA_UInt32 subscriptionId) {
-    UA_Client_Subscription *sub = NULL;
-    LIST_FOREACH(sub, &client->subscriptions, listEntry) {
-        if(sub->subscriptionId == subscriptionId)
-            break;
-    }
-    return sub;
-}
-
-UA_ModifySubscriptionResponse UA_EXPORT
-UA_Client_Subscriptions_modify(UA_Client *client, const UA_ModifySubscriptionRequest request) {
-    UA_ModifySubscriptionResponse response;
-    UA_ModifySubscriptionResponse_init(&response);
-
-    /* Find the internal representation */
-    UA_Client_Subscription *sub = findSubscription(client, request.subscriptionId);
-    if(!sub) {
-        response.responseHeader.serviceResult = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
-        return response;
-    }
-    
-    /* Call the service */
-    __UA_Client_Service(client,
-                        &request, &UA_TYPES[UA_TYPES_MODIFYSUBSCRIPTIONREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_MODIFYSUBSCRIPTIONRESPONSE]);
-
-    /* Adjust the internal representation */
-    sub->publishingInterval = response.revisedPublishingInterval;
-    sub->maxKeepAliveCount = response.revisedMaxKeepAliveCount;
-    return response;
-}
-
-static void
-UA_Client_Subscription_deleteInternal(UA_Client *client, UA_Client_Subscription *sub) {
-    /* Remove the MonitoredItems */
-    UA_Client_MonitoredItem *mon, *mon_tmp;
-    LIST_FOREACH_SAFE(mon, &sub->monitoredItems, listEntry, mon_tmp)
-        UA_Client_MonitoredItem_remove(client, sub, mon);
-
-    /* Call the delete callback */
-    if(sub->deleteCallback)
-        sub->deleteCallback(client, sub->subscriptionId, sub->context);
-
-    /* Remove */
-    LIST_REMOVE(sub, listEntry);
-    UA_free(sub);
-}
-
-UA_DeleteSubscriptionsResponse UA_EXPORT
-UA_Client_Subscriptions_delete(UA_Client *client, const UA_DeleteSubscriptionsRequest request) {
-    UA_STACKARRAY(UA_Client_Subscription*, subs, request.subscriptionIdsSize);
-    memset(subs, 0, sizeof(void*) * request.subscriptionIdsSize);
-
-    /* temporary remove the subscriptions from the list */
-    for(size_t i = 0; i < request.subscriptionIdsSize; i++) {
-        subs[i] = findSubscription(client, request.subscriptionIds[i]);
-        if (subs[i])
-            LIST_REMOVE(subs[i], listEntry);
-    }
-
-    /* Send the request */
-    UA_DeleteSubscriptionsResponse response;
-    __UA_Client_Service(client,
-                        &request, &UA_TYPES[UA_TYPES_DELETESUBSCRIPTIONSREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_DELETESUBSCRIPTIONSRESPONSE]);
-    if(response.responseHeader.serviceResult != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    if(request.subscriptionIdsSize != response.resultsSize) {
-        response.responseHeader.serviceResult = UA_STATUSCODE_BADINTERNALERROR;
-        goto cleanup;
-    }
-
-    /* Loop over the removed subscriptions and remove internally */
-    for(size_t i = 0; i < request.subscriptionIdsSize; i++) {
-        if(response.results[i] != UA_STATUSCODE_GOOD &&
-           response.results[i] != UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID) {
-            /* Something was wrong, reinsert the subscription in the list */
-            if (subs[i])
-                LIST_INSERT_HEAD(&client->subscriptions, subs[i], listEntry);
-            continue;
-        }
-
-        if(!subs[i]) {
-            UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                        "No internal representation of subscription %u",
-                        request.subscriptionIds[i]);
-            continue;
-        }
-        
-        LIST_INSERT_HEAD(&client->subscriptions, subs[i], listEntry);
-        UA_Client_Subscription_deleteInternal(client, subs[i]);
-    }
-
-    return response;
-
-cleanup:
-    for(size_t i = 0; i < request.subscriptionIdsSize; i++) {
-        if (subs[i]) {
-            LIST_INSERT_HEAD(&client->subscriptions, subs[i], listEntry);
-        }
-    }
-    return response;
-}
-
-UA_StatusCode UA_EXPORT
-UA_Client_Subscriptions_deleteSingle(UA_Client *client, UA_UInt32 subscriptionId) {
-    UA_DeleteSubscriptionsRequest request;
-    UA_DeleteSubscriptionsRequest_init(&request);
-    request.subscriptionIds = &subscriptionId;
-    request.subscriptionIdsSize = 1;
-    
-    UA_DeleteSubscriptionsResponse response =
-        UA_Client_Subscriptions_delete(client, request);
-
-    UA_StatusCode retval = response.responseHeader.serviceResult;
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_DeleteSubscriptionsResponse_deleteMembers(&response);
-        return retval;
-    }
-
-    if(response.resultsSize != 1) {
-        UA_DeleteSubscriptionsResponse_deleteMembers(&response);
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    retval = response.results[0];
-    UA_DeleteSubscriptionsResponse_deleteMembers(&response);
-    return retval;
-}
-
-/******************/
-/* MonitoredItems */
-/******************/
-
-void
-UA_Client_MonitoredItem_remove(UA_Client *client, UA_Client_Subscription *sub,
-                               UA_Client_MonitoredItem *mon) {
-    // NOLINTNEXTLINE
-    LIST_REMOVE(mon, listEntry);
-    if(mon->deleteCallback)
-        mon->deleteCallback(client, sub->subscriptionId, sub->context,
-                            mon->monitoredItemId, mon->context);
-    UA_free(mon);
-}
-
-static void
-__UA_Client_MonitoredItems_create(UA_Client *client,
-                                  const UA_CreateMonitoredItemsRequest *request,
-                                  void **contexts, void **handlingCallbacks,
-                                  UA_Client_DeleteMonitoredItemCallback *deleteCallbacks,
-                                  UA_CreateMonitoredItemsResponse *response) {
-    UA_CreateMonitoredItemsResponse_init(response);
-
-    if (!request->itemsToCreateSize) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADINTERNALERROR;
-        return;
-    }
-
-    /* Fix clang warning */
-    size_t itemsToCreateSize = request->itemsToCreateSize;
-    UA_Client_Subscription *sub = NULL;
-    
-    /* Allocate the memory for internal representations */
-    UA_STACKARRAY(UA_Client_MonitoredItem*, mis, itemsToCreateSize);
-    memset(mis, 0, sizeof(void*) * itemsToCreateSize);
-    for(size_t i = 0; i < itemsToCreateSize; i++) {
-        mis[i] = (UA_Client_MonitoredItem*)UA_malloc(sizeof(UA_Client_MonitoredItem));
-        if(!mis[i]) {
-            response->responseHeader.serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
-            goto cleanup;
-        }
-    }
-
-    /* Get the subscription */
-    sub = findSubscription(client, request->subscriptionId);
-    if(!sub) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
-        goto cleanup;
-    }
-
-    /* Set the clientHandle */
-    for(size_t i = 0; i < itemsToCreateSize; i++)
-        request->itemsToCreate[i].requestedParameters.clientHandle = ++(client->monitoredItemHandles);
-
-    /* Call the service */
-    __UA_Client_Service(client, request, &UA_TYPES[UA_TYPES_CREATEMONITOREDITEMSREQUEST],
-                        response, &UA_TYPES[UA_TYPES_CREATEMONITOREDITEMSRESPONSE]);
-    if(response->responseHeader.serviceResult != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    if(response->resultsSize != itemsToCreateSize) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADINTERNALERROR;
-        goto cleanup;
-    }
-
-    /* Add internally */
-    for(size_t i = 0; i < itemsToCreateSize; i++) {
-        if(response->results[i].statusCode != UA_STATUSCODE_GOOD) {
-            if (deleteCallbacks[i])
-                deleteCallbacks[i](client, sub->subscriptionId, sub->context, 0, contexts[i]);
-            UA_free(mis[i]);
-            mis[i] = NULL;
-            continue;
-        }
-            
-        UA_Client_MonitoredItem *newMon = mis[i];
-        newMon->clientHandle = request->itemsToCreate[i].requestedParameters.clientHandle;
-        newMon->monitoredItemId = response->results[i].monitoredItemId;
-        newMon->context = contexts[i];
-        newMon->deleteCallback = deleteCallbacks[i];
-        newMon->handler.dataChangeCallback =
-            (UA_Client_DataChangeNotificationCallback)(uintptr_t)handlingCallbacks[i];
-        newMon->isEventMonitoredItem =
-            (request->itemsToCreate[i].itemToMonitor.attributeId == UA_ATTRIBUTEID_EVENTNOTIFIER);
-        LIST_INSERT_HEAD(&sub->monitoredItems, newMon, listEntry);
-
-        UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                    "Subscription %u | Added a MonitoredItem with handle %u",
-                     sub->subscriptionId, newMon->clientHandle);
-    }
-
-    return;
-
- cleanup:
-    for(size_t i = 0; i < itemsToCreateSize; i++) {
-        if (deleteCallbacks[i]) {
-            if (sub)
-                deleteCallbacks[i](client, sub->subscriptionId, sub->context, 0, contexts[i]);
-            else
-                deleteCallbacks[i](client, 0, NULL, 0, contexts[i]);
-        }
-        if(mis[i])
-            UA_free(mis[i]);
-    }
-}
-
-UA_CreateMonitoredItemsResponse UA_EXPORT
-UA_Client_MonitoredItems_createDataChanges(UA_Client *client,
-            const UA_CreateMonitoredItemsRequest request, void **contexts,
-            UA_Client_DataChangeNotificationCallback *callbacks,
-            UA_Client_DeleteMonitoredItemCallback *deleteCallbacks) {
-    UA_CreateMonitoredItemsResponse response;
-    __UA_Client_MonitoredItems_create(client, &request, contexts,
-                (void**)(uintptr_t)callbacks, deleteCallbacks, &response);
-    return response;
-}
-
-UA_MonitoredItemCreateResult UA_EXPORT
-UA_Client_MonitoredItems_createDataChange(UA_Client *client, UA_UInt32 subscriptionId,
-          UA_TimestampsToReturn timestampsToReturn, const UA_MonitoredItemCreateRequest item,
-          void *context, UA_Client_DataChangeNotificationCallback callback,
-          UA_Client_DeleteMonitoredItemCallback deleteCallback) {
-    UA_CreateMonitoredItemsRequest request;
-    UA_CreateMonitoredItemsRequest_init(&request);
-    request.subscriptionId = subscriptionId;
-    request.timestampsToReturn = timestampsToReturn;
-    request.itemsToCreate = (UA_MonitoredItemCreateRequest*)(uintptr_t)&item;
-    request.itemsToCreateSize = 1;
-    UA_CreateMonitoredItemsResponse response = 
-       UA_Client_MonitoredItems_createDataChanges(client, request, &context,
-                                                   &callback, &deleteCallback);
-    UA_MonitoredItemCreateResult result;
-    UA_MonitoredItemCreateResult_init(&result);
-    if(response.responseHeader.serviceResult != UA_STATUSCODE_GOOD)
-        result.statusCode = response.responseHeader.serviceResult;
-
-    if(result.statusCode == UA_STATUSCODE_GOOD &&
-       response.resultsSize != 1)
-        result.statusCode = UA_STATUSCODE_BADINTERNALERROR;
-    
-    if(result.statusCode == UA_STATUSCODE_GOOD)
-       UA_MonitoredItemCreateResult_copy(&response.results[0] , &result);
-    UA_CreateMonitoredItemsResponse_deleteMembers(&response);
-    return result;
-}
-
-UA_CreateMonitoredItemsResponse UA_EXPORT
-UA_Client_MonitoredItems_createEvents(UA_Client *client,
-            const UA_CreateMonitoredItemsRequest request, void **contexts,
-            UA_Client_EventNotificationCallback *callback,
-            UA_Client_DeleteMonitoredItemCallback *deleteCallback) {
-    UA_CreateMonitoredItemsResponse response;
-    __UA_Client_MonitoredItems_create(client, &request, contexts,
-                (void**)(uintptr_t)callback, deleteCallback, &response);
-    return response;
-}
-
-UA_MonitoredItemCreateResult UA_EXPORT
-UA_Client_MonitoredItems_createEvent(UA_Client *client, UA_UInt32 subscriptionId,
-          UA_TimestampsToReturn timestampsToReturn, const UA_MonitoredItemCreateRequest item,
-          void *context, UA_Client_EventNotificationCallback callback,
-          UA_Client_DeleteMonitoredItemCallback deleteCallback) {
-    UA_CreateMonitoredItemsRequest request;
-    UA_CreateMonitoredItemsRequest_init(&request);
-    request.subscriptionId = subscriptionId;
-    request.timestampsToReturn = timestampsToReturn;
-    request.itemsToCreate = (UA_MonitoredItemCreateRequest*)(uintptr_t)&item;
-    request.itemsToCreateSize = 1;
-    UA_CreateMonitoredItemsResponse response = 
-       UA_Client_MonitoredItems_createEvents(client, request, &context,
-                                             &callback, &deleteCallback);
-    UA_StatusCode retval = response.responseHeader.serviceResult;
-    UA_MonitoredItemCreateResult result;
-    UA_MonitoredItemCreateResult_init(&result);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_CreateMonitoredItemsResponse_deleteMembers(&response);
-        result.statusCode = retval;
-        return result;
-    }
-    UA_MonitoredItemCreateResult_copy(response.results , &result);
-    UA_CreateMonitoredItemsResponse_deleteMembers(&response);
-    return result;
-}
-
-UA_DeleteMonitoredItemsResponse UA_EXPORT
-UA_Client_MonitoredItems_delete(UA_Client *client, const UA_DeleteMonitoredItemsRequest request) {
-    /* Send the request */
-    UA_DeleteMonitoredItemsResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_DELETEMONITOREDITEMSREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_DELETEMONITOREDITEMSRESPONSE]);
-    if(response.responseHeader.serviceResult != UA_STATUSCODE_GOOD)
-        return response;
-
-    UA_Client_Subscription *sub = findSubscription(client, request.subscriptionId);
-    if(!sub) {
-        UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                    "No internal representation of subscription %u",
-                    request.subscriptionId);
-        return response;
-    }
-
-    /* Loop over deleted MonitoredItems */
-    for(size_t i = 0; i < response.resultsSize; i++) {
-        if(response.results[i] != UA_STATUSCODE_GOOD &&
-           response.results[i] != UA_STATUSCODE_BADMONITOREDITEMIDINVALID) {
-            continue;
-        }
-
-#ifndef __clang_analyzer__
-        /* Delete the internal representation */
-        UA_Client_MonitoredItem *mon;
-        LIST_FOREACH(mon, &sub->monitoredItems, listEntry) {
-            // NOLINTNEXTLINE
-            if (mon->monitoredItemId == request.monitoredItemIds[i]) {
-                UA_Client_MonitoredItem_remove(client, sub, mon);
-                break;
-            }
-        }
-#endif
-    }
-
-    return response;
-}
-
-UA_StatusCode UA_EXPORT
-UA_Client_MonitoredItems_deleteSingle(UA_Client *client, UA_UInt32 subscriptionId, UA_UInt32 monitoredItemId) {
-    UA_DeleteMonitoredItemsRequest request;
-    UA_DeleteMonitoredItemsRequest_init(&request);
-    request.subscriptionId = subscriptionId;
-    request.monitoredItemIds = &monitoredItemId;
-    request.monitoredItemIdsSize = 1;
-
-    UA_DeleteMonitoredItemsResponse response =
-        UA_Client_MonitoredItems_delete(client, request);
-
-    UA_StatusCode retval = response.responseHeader.serviceResult;
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_DeleteMonitoredItemsResponse_deleteMembers(&response);
-        return retval;
-    }
-
-    if(response.resultsSize != 1) {
-        UA_DeleteMonitoredItemsResponse_deleteMembers(&response);
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    retval = response.results[0];
-    UA_DeleteMonitoredItemsResponse_deleteMembers(&response);
-    return retval;
-}
-
-UA_ModifyMonitoredItemsResponse UA_EXPORT
-UA_Client_MonitoredItems_modify(UA_Client *client,
-                                const UA_ModifyMonitoredItemsRequest request) {
-    UA_ModifyMonitoredItemsResponse response;
-
-    UA_Client_Subscription *sub = 0;
-    LIST_FOREACH(sub, &client->subscriptions, listEntry) {
-        if (sub->subscriptionId == request.subscriptionId)
-            break;
-    }
-
-    if (!sub) {
-        UA_ModifyMonitoredItemsResponse_init(&response);
-        response.responseHeader.serviceResult = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
-        return response;
-    }
-
-    UA_ModifyMonitoredItemsRequest modifiedRequest;
-    UA_ModifyMonitoredItemsRequest_copy(&request, &modifiedRequest);
-
-    for (size_t i = 0; i < modifiedRequest.itemsToModifySize; ++i) {
-        UA_Client_MonitoredItem *mon = 0;
-        LIST_FOREACH(mon, &sub->monitoredItems, listEntry) {
-            if(mon->monitoredItemId == modifiedRequest.itemsToModify[i].monitoredItemId) {
-                modifiedRequest.itemsToModify[i].requestedParameters.clientHandle = mon->clientHandle;
-                break;
-            }
-        }
-    }
-
-    __UA_Client_Service(client,
-                        &modifiedRequest, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSRESPONSE]);
-
-    UA_ModifyMonitoredItemsRequest_deleteMembers(&modifiedRequest);
-    return response;
-}
-
-/*************************************/
-/* Async Processing of Notifications */
-/*************************************/
-
-/* Assume the request is already initialized */
-UA_StatusCode
-UA_Client_preparePublishRequest(UA_Client *client, UA_PublishRequest *request) {
-    /* Count acks */
-    UA_Client_NotificationsAckNumber *ack;
-    LIST_FOREACH(ack, &client->pendingNotificationsAcks, listEntry)
-        ++request->subscriptionAcknowledgementsSize;
-
-    /* Create the array. Returns a sentinel pointer if the length is zero. */
-    request->subscriptionAcknowledgements = (UA_SubscriptionAcknowledgement*)
-        UA_Array_new(request->subscriptionAcknowledgementsSize,
-                     &UA_TYPES[UA_TYPES_SUBSCRIPTIONACKNOWLEDGEMENT]);
-    if(!request->subscriptionAcknowledgements) {
-        request->subscriptionAcknowledgementsSize = 0;
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-
-    size_t i = 0;
-    UA_Client_NotificationsAckNumber *ack_tmp;
-    LIST_FOREACH_SAFE(ack, &client->pendingNotificationsAcks, listEntry, ack_tmp) {
-        request->subscriptionAcknowledgements[i].sequenceNumber = ack->subAck.sequenceNumber;
-        request->subscriptionAcknowledgements[i].subscriptionId = ack->subAck.subscriptionId;
-        ++i;
-        LIST_REMOVE(ack, listEntry);
-        UA_free(ack);
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-/* According to OPC Unified Architecture, Part 4 5.13.1.1 i) */
-/* The value 0 is never used for the sequence number         */
-static UA_UInt32
-UA_Client_Subscriptions_nextSequenceNumber(UA_UInt32 sequenceNumber) {
-    UA_UInt32 nextSequenceNumber = sequenceNumber + 1;
-    if(nextSequenceNumber == 0)
-        nextSequenceNumber = 1;
-    return nextSequenceNumber;
-}
-
-static void
-processDataChangeNotification(UA_Client *client, UA_Client_Subscription *sub,
-                              UA_DataChangeNotification *dataChangeNotification) {
-    for(size_t j = 0; j < dataChangeNotification->monitoredItemsSize; ++j) {
-        UA_MonitoredItemNotification *min = &dataChangeNotification->monitoredItems[j];
-
-        /* Find the MonitoredItem */
-        UA_Client_MonitoredItem *mon;
-        LIST_FOREACH(mon, &sub->monitoredItems, listEntry) {
-            if(mon->clientHandle == min->clientHandle)
-                break;
-        }
-
-        if(!mon) {
-            UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                         "Could not process a notification with clienthandle %u on subscription %u",
-                         min->clientHandle, sub->subscriptionId);
-            continue;
-        }
-
-        if(mon->isEventMonitoredItem) {
-            UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                         "MonitoredItem is configured for Events. But received a "
-                         "DataChangeNotification.");
-            continue;
-        }
-
-        mon->handler.dataChangeCallback(client, sub->subscriptionId, sub->context,
-                                        mon->monitoredItemId, mon->context,
-                                        &min->value);
-    }
-}
-
-static void
-processEventNotification(UA_Client *client, UA_Client_Subscription *sub,
-                         UA_EventNotificationList *eventNotificationList) {
-    for(size_t j = 0; j < eventNotificationList->eventsSize; ++j) {
-        UA_EventFieldList *eventFieldList = &eventNotificationList->events[j];
-
-        /* Find the MonitoredItem */
-        UA_Client_MonitoredItem *mon;
-        LIST_FOREACH(mon, &sub->monitoredItems, listEntry) {
-            if(mon->clientHandle == eventFieldList->clientHandle)
-                break;
-        }
-
-        if(!mon) {
-            UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                         "Could not process a notification with clienthandle %u on subscription %u",
-                         eventFieldList->clientHandle, sub->subscriptionId);
-            continue;
-        }
-
-        if(!mon->isEventMonitoredItem) {
-            UA_LOG_DEBUG(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                         "MonitoredItem is configured for DataChanges. But received a "
-                         "EventNotification.");
-            continue;
-        }
-
-        mon->handler.eventCallback(client, sub->subscriptionId, sub->context,
-                                   mon->monitoredItemId, mon->context,
-                                   eventFieldList->eventFieldsSize,
-                                   eventFieldList->eventFields);
-    }
-}
-
-static void
-processNotificationMessage(UA_Client *client, UA_Client_Subscription *sub,
-                           UA_ExtensionObject *msg) {
-    if(msg->encoding != UA_EXTENSIONOBJECT_DECODED)
-        return;
-
-    /* Handle DataChangeNotification */
-    if(msg->content.decoded.type == &UA_TYPES[UA_TYPES_DATACHANGENOTIFICATION]) {
-        UA_DataChangeNotification *dataChangeNotification =
-            (UA_DataChangeNotification *)msg->content.decoded.data;
-        processDataChangeNotification(client, sub, dataChangeNotification);
-        return;
-    }
-
-    /* Handle EventNotification */
-    if(msg->content.decoded.type == &UA_TYPES[UA_TYPES_EVENTNOTIFICATIONLIST]) {
-        UA_EventNotificationList *eventNotificationList =
-            (UA_EventNotificationList *)msg->content.decoded.data;
-        processEventNotification(client, sub, eventNotificationList);
-        return;
-    }
-
-    /* Handle StatusChangeNotification */
-    if(msg->content.decoded.type == &UA_TYPES[UA_TYPES_STATUSCHANGENOTIFICATION]) {
-        if(sub->statusChangeCallback) {
-            sub->statusChangeCallback(client, sub->subscriptionId, sub->context,
-                                      (UA_StatusChangeNotification*)msg->content.decoded.data);
-        } else {
-            UA_LOG_WARNING(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                           "Dropped a StatusChangeNotification since no callback is registered");
-        }
-        return;
-    }
-
-    UA_LOG_WARNING(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                   "Unknown notification message type");
-}
-
-void
-UA_Client_Subscriptions_processPublishResponse(UA_Client *client, UA_PublishRequest *request,
-                                               UA_PublishResponse *response) {
-    UA_NotificationMessage *msg = &response->notificationMessage;
-
-    client->currentlyOutStandingPublishRequests--;
-
-    if(response->responseHeader.serviceResult == UA_STATUSCODE_BADTOOMANYPUBLISHREQUESTS) {
-        if(client->config.outStandingPublishRequests > 1) {
-            client->config.outStandingPublishRequests--;
-            UA_LOG_WARNING(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                          "Too many publishrequest, reduce outStandingPublishRequests to %d",
-                           client->config.outStandingPublishRequests);
-        } else {
-            UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                         "Too many publishrequest when outStandingPublishRequests = 1");
-            UA_Client_Subscriptions_deleteSingle(client, response->subscriptionId);
-        }
-        return;
-    }
-
-    if(response->responseHeader.serviceResult == UA_STATUSCODE_BADSHUTDOWN)
-        return;
-
-    if(!LIST_FIRST(&client->subscriptions)) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADNOSUBSCRIPTION;
-        return;
-    }
-
-    if(response->responseHeader.serviceResult == UA_STATUSCODE_BADSESSIONCLOSED) {
-        if(client->state >= UA_CLIENTSTATE_SESSION) {
-            UA_LOG_WARNING(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                           "Received Publish Response with code %s",
-                            UA_StatusCode_name(response->responseHeader.serviceResult));
-            UA_Client_Subscription* sub = findSubscription(client, response->subscriptionId);
-            if (sub != NULL)
-              UA_Client_Subscription_deleteInternal(client, sub);
-        }
-        return;
-    }
-
-    if(response->responseHeader.serviceResult == UA_STATUSCODE_BADSESSIONIDINVALID) {
-        UA_Client_disconnect(client); /* TODO: This should be handled before the process callback */
-        UA_LOG_WARNING(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                       "Received BadSessionIdInvalid");
-        return;
-    }
-
-    if(response->responseHeader.serviceResult == UA_STATUSCODE_BADTIMEOUT) {
-        if (client->config.inactivityCallback)
-            client->config.inactivityCallback(client);
-        UA_LOG_WARNING(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                       "Received Timeout for Publish Response");
-        return;
-    }
-
-    if(response->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-        UA_LOG_WARNING(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                       "Received Publish Response with code %s",
-                       UA_StatusCode_name(response->responseHeader.serviceResult));
-        return;
-    }
-
-    UA_Client_Subscription *sub = findSubscription(client, response->subscriptionId);
-    if(!sub) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADINTERNALERROR;
-        UA_LOG_WARNING(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                       "Received Publish Response for a non-existant subscription");
-        return;
-    }
-
-    sub->lastActivity = UA_DateTime_nowMonotonic();
-
-    /* Detect missing message - OPC Unified Architecture, Part 4 5.13.1.1 e) */
-    if(UA_Client_Subscriptions_nextSequenceNumber(sub->sequenceNumber) != msg->sequenceNumber) {
-        UA_LOG_WARNING(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "Invalid subscription sequence number: expected %u but got %u",
-                     UA_Client_Subscriptions_nextSequenceNumber(sub->sequenceNumber),
-                     msg->sequenceNumber);
-        /* This is an error. But we do not abort the connection. Some server
-         * SDKs misbehave from time to time and send out-of-order sequence
-         * numbers. (Probably some multi-threading synchronization issue.) */
-        /* UA_Client_disconnect(client);
-           return; */
-    }
-    /* According to f), a keep-alive message contains no notifications and has the sequence number
-     * of the next NotificationMessage that is to be sent => More than one consecutive keep-alive
-     * message or a NotificationMessage following a keep-alive message will share the same sequence
-     * number. */
-    if (msg->notificationDataSize)
-        sub->sequenceNumber = msg->sequenceNumber;
-
-    /* Process the notification messages */
-    for(size_t k = 0; k < msg->notificationDataSize; ++k)
-        processNotificationMessage(client, sub, &msg->notificationData[k]);
-
-    /* Add to the list of pending acks */
-    for(size_t i = 0; i < response->availableSequenceNumbersSize; i++) {
-        if(response->availableSequenceNumbers[i] != msg->sequenceNumber)
-            continue;
-        UA_Client_NotificationsAckNumber *tmpAck = (UA_Client_NotificationsAckNumber*)
-            UA_malloc(sizeof(UA_Client_NotificationsAckNumber));
-        if(!tmpAck) {
-            UA_LOG_WARNING(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                           "Not enough memory to store the acknowledgement for a publish "
-                           "message on subscription %u", sub->subscriptionId);
-            break;
-        }   
-        tmpAck->subAck.sequenceNumber = msg->sequenceNumber;
-        tmpAck->subAck.subscriptionId = sub->subscriptionId;
-        LIST_INSERT_HEAD(&client->pendingNotificationsAcks, tmpAck, listEntry);
-        break;
-    } 
-}
-
-static void
-processPublishResponseAsync(UA_Client *client, void *userdata, UA_UInt32 requestId,
-                            void *response) {
-    UA_PublishRequest *req = (UA_PublishRequest*)userdata;
-    UA_PublishResponse *res = (UA_PublishResponse*)response;
-
-    /* Process the response */
-    UA_Client_Subscriptions_processPublishResponse(client, req, res);
-
-    /* Delete the cached request */
-    UA_PublishRequest_delete(req);
-
-    /* Fill up the outstanding publish requests */
-    UA_Client_Subscriptions_backgroundPublish(client);
-}
-
-void
-UA_Client_Subscriptions_clean(UA_Client *client) {
-    UA_Client_NotificationsAckNumber *n, *tmp;
-    LIST_FOREACH_SAFE(n, &client->pendingNotificationsAcks, listEntry, tmp) {
-        LIST_REMOVE(n, listEntry);
-        UA_free(n);
-    }
-
-    UA_Client_Subscription *sub, *tmps;
-    LIST_FOREACH_SAFE(sub, &client->subscriptions, listEntry, tmps)
-        UA_Client_Subscription_deleteInternal(client, sub); /* force local removal */
-
-    client->monitoredItemHandles = 0;
-}
-
-void
-UA_Client_Subscriptions_backgroundPublishInactivityCheck(UA_Client *client) {
-    if(client->state < UA_CLIENTSTATE_SESSION)
-        return;
-
-    /* Is the lack of responses the client's fault? */
-    if(client->currentlyOutStandingPublishRequests == 0)
-        return;
-
-    UA_Client_Subscription *sub;
-    LIST_FOREACH(sub, &client->subscriptions, listEntry) {
-        UA_DateTime maxSilence = (UA_DateTime)
-            ((sub->publishingInterval * sub->maxKeepAliveCount) +
-             client->config.timeout) * UA_DATETIME_MSEC;
-        if(maxSilence + sub->lastActivity < UA_DateTime_nowMonotonic()) {
-            /* Reset activity */
-            sub->lastActivity = UA_DateTime_nowMonotonic();
-
-            if(client->config.subscriptionInactivityCallback)
-                client->config.subscriptionInactivityCallback(client, sub->subscriptionId,
-                                                              sub->context);
-            UA_LOG_ERROR(&client->config.logger, UA_LOGCATEGORY_CLIENT,
-                         "Inactivity for Subscription %u.", sub->subscriptionId);
-        }
-    }
-}
-
-UA_StatusCode
-UA_Client_Subscriptions_backgroundPublish(UA_Client *client) {
-    if(client->state < UA_CLIENTSTATE_SESSION)
-        return UA_STATUSCODE_BADSERVERNOTCONNECTED;
-
-    /* The session must have at least one subscription */
-    if(!LIST_FIRST(&client->subscriptions))
-        return UA_STATUSCODE_GOOD;
-
-    while(client->currentlyOutStandingPublishRequests < client->config.outStandingPublishRequests) {
-        UA_PublishRequest *request = UA_PublishRequest_new();
-        if (!request)
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-
-        request->requestHeader.timeoutHint=60000;
-        UA_StatusCode retval = UA_Client_preparePublishRequest(client, request);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_PublishRequest_delete(request);
-            return retval;
-        }
-    
-        UA_UInt32 requestId;
-        client->currentlyOutStandingPublishRequests++;
-
-        /* Disable the timeout, it is treat in UA_Client_Subscriptions_backgroundPublishInactivityCheck */
-        retval = __UA_Client_AsyncServiceEx(client, request, &UA_TYPES[UA_TYPES_PUBLISHREQUEST],
-                                            processPublishResponseAsync,
-                                            &UA_TYPES[UA_TYPES_PUBLISHRESPONSE],
-                                            (void*)request, &requestId, 0);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_PublishRequest_delete(request);
-            return retval;
-        }
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-#endif /* UA_ENABLE_SUBSCRIPTIONS */
diff --git a/ext/open62541/src/client/ua_client_worker.c b/ext/open62541/src/client/ua_client_worker.c
deleted file mode 100644
index eedc388..0000000
--- a/ext/open62541/src/client/ua_client_worker.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "ua_client_internal.h"
-
-static void
-asyncServiceTimeoutCheck(UA_Client *client) {
-    UA_DateTime now = UA_DateTime_nowMonotonic();
-
-    /* Timeout occurs, remove the callback */
-    AsyncServiceCall *ac, *ac_tmp;
-    LIST_FOREACH_SAFE(ac, &client->asyncServiceCalls, pointers, ac_tmp) {
-        if(!ac->timeout)
-           continue;
-
-        if(ac->start + (UA_DateTime)(ac->timeout * UA_DATETIME_MSEC) <= now) {
-            LIST_REMOVE(ac, pointers);
-            UA_Client_AsyncService_cancel(client, ac, UA_STATUSCODE_BADTIMEOUT);
-            UA_free(ac);
-        }
-    }
-}
-
-static void
-backgroundConnectivityCallback(UA_Client *client, void *userdata,
-                               UA_UInt32 requestId, const UA_ReadResponse *response) {
-    if(response->responseHeader.serviceResult == UA_STATUSCODE_BADTIMEOUT) {
-        if (client->config.inactivityCallback)
-            client->config.inactivityCallback(client);
-    }
-    client->pendingConnectivityCheck = false;
-    client->lastConnectivityCheck = UA_DateTime_nowMonotonic();
-}
-
-static UA_StatusCode
-UA_Client_backgroundConnectivity(UA_Client *client) {
-    if(!client->config.connectivityCheckInterval)
-        return UA_STATUSCODE_GOOD;
-
-    if (client->pendingConnectivityCheck)
-        return UA_STATUSCODE_GOOD;
-
-    UA_DateTime now = UA_DateTime_nowMonotonic();
-    UA_DateTime nextDate = client->lastConnectivityCheck + (UA_DateTime)(client->config.connectivityCheckInterval * UA_DATETIME_MSEC);
-
-    if(now <= nextDate)
-        return UA_STATUSCODE_GOOD;
-
-    UA_ReadRequest request;
-    UA_ReadRequest_init(&request);
-
-    UA_ReadValueId rvid;
-    UA_ReadValueId_init(&rvid);
-    rvid.attributeId = UA_ATTRIBUTEID_VALUE;
-    rvid.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE);
-
-    request.nodesToRead = &rvid;
-    request.nodesToReadSize = 1;
-
-    UA_StatusCode retval = __UA_Client_AsyncService(client, &request, &UA_TYPES[UA_TYPES_READREQUEST],
-                                                    (UA_ClientAsyncServiceCallback)backgroundConnectivityCallback,
-                                                    &UA_TYPES[UA_TYPES_READRESPONSE], NULL, NULL);
-
-    client->pendingConnectivityCheck = true;
-
-    return retval;
-}
-
-/**
- * Main Client Loop
- * ----------------
- * Start: Spin up the workers and the network layer
- * Iterate: Process repeated callbacks and events in the network layer.
- *          This part can be driven from an external main-loop in an
- *          event-driven single-threaded architecture.
- * Stop: Stop workers, finish all callbacks, stop the network layer,
- *       clean up */
-
-static void
-clientExecuteRepeatedCallback(UA_Client *client, UA_ApplicationCallback cb,
-                              void *callbackApplication, void *data) {
-    cb(callbackApplication, data);
-    /* TODO: Use workers in the client
-     * UA_WorkQueue_enqueue(&client->workQueue, cb, callbackApplication, data); */
-}
-
-UA_StatusCode UA_Client_run_iterate(UA_Client *client, UA_UInt16 timeout) {
-// TODO connectivity check & timeout features for the async implementation (timeout == 0)
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    UA_StatusCode retvalPublish = UA_Client_Subscriptions_backgroundPublish(client);
-    if(client->state >= UA_CLIENTSTATE_SESSION && retvalPublish != UA_STATUSCODE_GOOD)
-        return retvalPublish;
-#endif
-    /* Make sure we have an open channel */
-
-    /************************************************************/
-    /* FIXME: This is a dirty workaround */
-    if(client->state >= UA_CLIENTSTATE_SECURECHANNEL)
-        retval = openSecureChannel(client, true);
-    /* FIXME: Will most likely break somewhere in the future */
-    /************************************************************/
-
-    if(timeout) {
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-
-        retval = UA_Client_backgroundConnectivity(client);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-
-        UA_DateTime maxDate = UA_DateTime_nowMonotonic() + (timeout * UA_DATETIME_MSEC);
-        retval = receiveServiceResponse(client, NULL, NULL, maxDate, NULL);
-        if(retval == UA_STATUSCODE_GOODNONCRITICALTIMEOUT)
-            retval = UA_STATUSCODE_GOOD;
-    } else {
-        UA_DateTime now = UA_DateTime_nowMonotonic();
-        UA_Timer_process(&client->timer, now,
-                         (UA_TimerExecutionCallback)clientExecuteRepeatedCallback, client);
-
-        UA_ClientState cs = UA_Client_getState(client);
-        retval = UA_Client_connect_iterate(client);
-
-        /* Connection failed, drop the rest */
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-        if((cs == UA_CLIENTSTATE_SECURECHANNEL) || (cs == UA_CLIENTSTATE_SESSION)) {
-            /* Check for new data */
-            retval = receiveServiceResponseAsync(client, NULL, NULL);
-        } else {
-            retval = receivePacketAsync(client);
-        }
-    }
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-        /* The inactivity check must be done after receiveServiceResponse*/
-        UA_Client_Subscriptions_backgroundPublishInactivityCheck(client);
-#endif
-        asyncServiceTimeoutCheck(client);
-
-#if UA_MULTITHREADING < 200
-        /* Process delayed callbacks when all callbacks and network events are
-         * done */
-        UA_WorkQueue_manuallyProcessDelayed(&client->workQueue);
-#endif
-    return retval;
-}
diff --git a/ext/open62541/src/pubsub/ua_pubsub.c b/ext/open62541/src/pubsub/ua_pubsub.c
deleted file mode 100644
index fbcd0b6..0000000
--- a/ext/open62541/src/pubsub/ua_pubsub.c
+++ /dev/null
@@ -1,2188 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017-2018 Fraunhofer IOSB (Author: Andreas Ebner)
- * Copyright (c) 2019 Fraunhofer IOSB (Author: Julius Pfrommer)
- * Copyright (c) 2019 Kalycito Infotech Private Limited
- */
-
-#include "server/ua_server_internal.h"
-
-#ifdef UA_ENABLE_PUBSUB /* conditional compilation */
-
-#include "ua_pubsub.h"
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL
-#include "ua_pubsub_ns0.h"
-#endif
-
-#ifdef UA_ENABLE_PUBSUB_DELTAFRAMES
-#include "ua_types_encoding_binary.h"
-#endif
-
-#define UA_MAX_STACKBUF 512 /* Max size of network messages on the stack */
-#define UA_MAX_SIZENAME 64  /* Max size of Qualified Name of Subscribed Variable */
-
-/* Forward declaration */
-static void
-UA_WriterGroup_deleteMembers(UA_Server *server, UA_WriterGroup *writerGroup);
-static void
-UA_DataSetField_deleteMembers(UA_DataSetField *field);
-/* To direct the DataSetMessage to the desired DataSetReader by checking the
- * WriterGroupId and DataSetWriterId parameters */
-static UA_DataSetReader *
-checkReaderIdentifier(UA_Server *server, UA_NetworkMessage *pMsg, UA_DataSetReader *tmpReader);
-
-/**********************************************/
-/*               Connection                   */
-/**********************************************/
-
-UA_StatusCode
-UA_PubSubConnectionConfig_copy(const UA_PubSubConnectionConfig *src,
-                               UA_PubSubConnectionConfig *dst) {
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    memcpy(dst, src, sizeof(UA_PubSubConnectionConfig));
-    retVal |= UA_String_copy(&src->name, &dst->name);
-    retVal |= UA_Variant_copy(&src->address, &dst->address);
-    retVal |= UA_String_copy(&src->transportProfileUri, &dst->transportProfileUri);
-    retVal |= UA_Variant_copy(&src->connectionTransportSettings, &dst->connectionTransportSettings);
-    if(src->connectionPropertiesSize > 0){
-        dst->connectionProperties = (UA_KeyValuePair *)
-            UA_calloc(src->connectionPropertiesSize, sizeof(UA_KeyValuePair));
-        if(!dst->connectionProperties){
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        for(size_t i = 0; i < src->connectionPropertiesSize; i++){
-            retVal |= UA_QualifiedName_copy(&src->connectionProperties[i].key,
-                                            &dst->connectionProperties[i].key);
-            retVal |= UA_Variant_copy(&src->connectionProperties[i].value,
-                                      &dst->connectionProperties[i].value);
-        }
-    }
-    return retVal;
-}
-
-UA_StatusCode
-UA_Server_getPubSubConnectionConfig(UA_Server *server, const UA_NodeId connection,
-                                    UA_PubSubConnectionConfig *config) {
-    if(!config)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-
-    UA_PubSubConnection *currentPubSubConnection =
-        UA_PubSubConnection_findConnectionbyId(server, connection);
-    if(!currentPubSubConnection)
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    UA_PubSubConnectionConfig tmpPubSubConnectionConfig;
-    //deep copy of the actual config
-    UA_PubSubConnectionConfig_copy(currentPubSubConnection->config, &tmpPubSubConnectionConfig);
-    *config = tmpPubSubConnectionConfig;
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_PubSubConnection *
-UA_PubSubConnection_findConnectionbyId(UA_Server *server, UA_NodeId connectionIdentifier) {
-    for(size_t i = 0; i < server->pubSubManager.connectionsSize; i++){
-        if(UA_NodeId_equal(&connectionIdentifier, &server->pubSubManager.connections[i].identifier)){
-            return &server->pubSubManager.connections[i];
-        }
-    }
-    return NULL;
-}
-
-void
-UA_PubSubConnectionConfig_deleteMembers(UA_PubSubConnectionConfig *connectionConfig) {
-    UA_String_deleteMembers(&connectionConfig->name);
-    UA_String_deleteMembers(&connectionConfig->transportProfileUri);
-    UA_Variant_deleteMembers(&connectionConfig->connectionTransportSettings);
-    UA_Variant_deleteMembers(&connectionConfig->address);
-    for(size_t i = 0; i < connectionConfig->connectionPropertiesSize; i++){
-        UA_QualifiedName_deleteMembers(&connectionConfig->connectionProperties[i].key);
-        UA_Variant_deleteMembers(&connectionConfig->connectionProperties[i].value);
-    }
-    UA_free(connectionConfig->connectionProperties);
-}
-
-void
-UA_PubSubConnection_deleteMembers(UA_Server *server, UA_PubSubConnection *connection) {
-    //delete connection config
-    UA_PubSubConnectionConfig_deleteMembers(connection->config);
-    //remove contained WriterGroups
-    UA_WriterGroup *writerGroup, *tmpWriterGroup;
-    LIST_FOREACH_SAFE(writerGroup, &connection->writerGroups, listEntry, tmpWriterGroup){
-        UA_Server_removeWriterGroup(server, writerGroup->identifier);
-    }
-    /* remove contained ReaderGroups */
-    UA_ReaderGroup *readerGroups, *tmpReaderGroup;
-    LIST_FOREACH_SAFE(readerGroups, &connection->readerGroups, listEntry, tmpReaderGroup){
-      UA_Server_removeReaderGroup(server, readerGroups->identifier);
-    }
-
-    UA_NodeId_deleteMembers(&connection->identifier);
-    if(connection->channel){
-        connection->channel->close(connection->channel);
-    }
-    UA_free(connection->config);
-}
-
-/**
- * Regist connection given by connectionIdentifier
- *
- * @param server
- * @param connectionIdentifier
- */
-UA_StatusCode
-UA_PubSubConnection_regist(UA_Server *server, UA_NodeId *connectionIdentifier) {
-    UA_PubSubConnection *connection = UA_PubSubConnection_findConnectionbyId(server, *connectionIdentifier);
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(connection == NULL) {
-        return UA_STATUSCODE_BADNOTFOUND;
-    }
-    retval = connection->channel->regist(connection->channel, NULL, NULL);
-    if (retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER, "register channel failed: 0x%x!", retval);
-    }
-    return retval;
-}
-
-UA_StatusCode
-UA_Server_addWriterGroup(UA_Server *server, const UA_NodeId connection,
-                         const UA_WriterGroupConfig *writerGroupConfig,
-                         UA_NodeId *writerGroupIdentifier) {
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    if(!writerGroupConfig)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    //search the connection by the given connectionIdentifier
-    UA_PubSubConnection *currentConnectionContext =
-        UA_PubSubConnection_findConnectionbyId(server, connection);
-    if(!currentConnectionContext)
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    //allocate memory for new WriterGroup
-    UA_WriterGroup *newWriterGroup = (UA_WriterGroup *) UA_calloc(1, sizeof(UA_WriterGroup));
-    if(!newWriterGroup)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    newWriterGroup->linkedConnection = currentConnectionContext->identifier;
-    UA_PubSubManager_generateUniqueNodeId(server, &newWriterGroup->identifier);
-    if(writerGroupIdentifier){
-        UA_NodeId_copy(&newWriterGroup->identifier, writerGroupIdentifier);
-    }
-
-    //deep copy of the config
-    UA_WriterGroupConfig tmpWriterGroupConfig;
-    retVal |= UA_WriterGroupConfig_copy(writerGroupConfig, &tmpWriterGroupConfig);
-
-    if(!tmpWriterGroupConfig.messageSettings.content.decoded.type) {
-        UA_UadpWriterGroupMessageDataType *wgm = UA_UadpWriterGroupMessageDataType_new();
-        tmpWriterGroupConfig.messageSettings.content.decoded.data = wgm;
-        tmpWriterGroupConfig.messageSettings.content.decoded.type =
-            &UA_TYPES[UA_TYPES_UADPWRITERGROUPMESSAGEDATATYPE];
-        tmpWriterGroupConfig.messageSettings.encoding = UA_EXTENSIONOBJECT_DECODED;
-    }
-
-    newWriterGroup->config = tmpWriterGroupConfig;
-    retVal |= UA_WriterGroup_addPublishCallback(server, newWriterGroup);
-    LIST_INSERT_HEAD(&currentConnectionContext->writerGroups, newWriterGroup, listEntry);
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL
-    addWriterGroupRepresentation(server, newWriterGroup);
-#endif
-    return retVal;
-}
-
-UA_StatusCode
-UA_Server_removeWriterGroup(UA_Server *server, const UA_NodeId writerGroup){
-    UA_WriterGroup *wg = UA_WriterGroup_findWGbyId(server, writerGroup);
-    if(!wg)
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    UA_PubSubConnection *connection =
-        UA_PubSubConnection_findConnectionbyId(server, wg->linkedConnection);
-    if(!connection)
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    //unregister the publish callback
-    UA_PubSubManager_removeRepeatedPubSubCallback(server, wg->publishCallbackId);
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL
-    removeGroupRepresentation(server, wg);
-#endif
-
-    UA_WriterGroup_deleteMembers(server, wg);
-    LIST_REMOVE(wg, listEntry);
-    UA_free(wg);
-    return UA_STATUSCODE_GOOD;
-}
-
-/**********************************************/
-/*               ReaderGroup                  */
-/**********************************************/
-
-/**
- * Add ReaderGroup to connection.
- *
- * @param server
- * @param connectionIdentifier
- * @param readerGroupConfiguration
- * @param readerGroupIdentifier
- * @return UA_STATUSCODE_GOOD on success
- */
-UA_StatusCode
-UA_Server_addReaderGroup(UA_Server *server, UA_NodeId connectionIdentifier,
-                                   const UA_ReaderGroupConfig *readerGroupConfig,
-                                   UA_NodeId *readerGroupIdentifier) {
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    UA_ReaderGroupConfig tmpReaderGroupConfig;
-
-    /* Check for valid readergroup configuration */
-    if(!readerGroupConfig) {
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-
-    /* Search the connection by the given connectionIdentifier */
-    UA_PubSubConnection *currentConnectionContext = UA_PubSubConnection_findConnectionbyId(server, connectionIdentifier);
-    if(!currentConnectionContext) {
-        return UA_STATUSCODE_BADNOTFOUND;
-    }
-
-    /* Allocate memory for new reader group */
-    UA_ReaderGroup *newGroup = (UA_ReaderGroup *)UA_calloc(1, sizeof(UA_ReaderGroup));
-    if(!newGroup) {
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-
-    /* Generate nodeid for the readergroup identifier */
-    newGroup->linkedConnection = currentConnectionContext->identifier;
-    UA_PubSubManager_generateUniqueNodeId(server, &newGroup->identifier);
-    if(readerGroupIdentifier) {
-        UA_NodeId_copy(&newGroup->identifier, readerGroupIdentifier);
-    }
-
-    /* Deep copy of the config */
-    retval |= UA_ReaderGroupConfig_copy(readerGroupConfig, &tmpReaderGroupConfig);
-    newGroup->config = tmpReaderGroupConfig;
-    retval |= UA_ReaderGroup_addSubscribeCallback(server, newGroup);
-    LIST_INSERT_HEAD(&currentConnectionContext->readerGroups, newGroup, listEntry);
-    currentConnectionContext->readerGroupsSize++;
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL
-    addReaderGroupRepresentation(server, newGroup);
-#endif
-
-    return retval;
-}
-
-/**
- * Remove ReaderGroup from connection and delete contained readers.
- *
- * @param server
- * @param groupIdentifier
- * @return UA_STATUSCODE_GOOD on success
- */
-UA_StatusCode
-UA_Server_removeReaderGroup(UA_Server *server, UA_NodeId groupIdentifier) {
-    UA_ReaderGroup* readerGroup = UA_ReaderGroup_findRGbyId(server, groupIdentifier);
-    if(readerGroup == NULL) {
-        return UA_STATUSCODE_BADNOTFOUND;
-    }
-
-    /* Search the connection to which the given readergroup is connected to */
-    UA_PubSubConnection *connection = UA_PubSubConnection_findConnectionbyId(server, readerGroup->linkedConnection);
-    if(connection == NULL) {
-        return UA_STATUSCODE_BADNOTFOUND;
-    }
-
-    /* Unregister subscribe callback */
-    UA_PubSubManager_removeRepeatedPubSubCallback(server, readerGroup->subscribeCallbackId);
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL
-    /* To Do:RemoveGroupRepresentation(server, &readerGroup->identifier) */
-#endif
-
-    /* UA_Server_ReaderGroup_delete also removes itself from the list */
-    UA_Server_ReaderGroup_delete(server, readerGroup);
-    /* Remove readerGroup from Connection */
-    LIST_REMOVE(readerGroup, listEntry);
-    UA_free(readerGroup);
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * To Do:
- * Update ReaderGroup configuration.
- *
- * @param server
- * @param readerGroupIdentifier
- * @param readerGroupConfiguration
- * @return UA_STATUSCODE_GOOD on success
- */
-UA_StatusCode
-UA_Server_ReaderGroup_updateConfig(UA_Server *server, UA_NodeId readerGroupIdentifier,
-                                  const UA_ReaderGroupConfig *config) {
-    return UA_STATUSCODE_BADNOTIMPLEMENTED;
-}
-
-/**
- * Get ReaderGroup configuration.
- *
- * @param server
- * @param groupIdentifier
- * @param readerGroupConfiguration
- * @return UA_STATUSCODE_GOOD on success
- */
-UA_StatusCode
-UA_Server_ReaderGroup_getConfig(UA_Server *server, UA_NodeId readerGroupIdentifier,
-                               UA_ReaderGroupConfig *config) {
-    if(!config) {
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-
-    /* Identify the readergroup through the readerGroupIdentifier */
-    UA_ReaderGroup *currentReaderGroup = UA_ReaderGroup_findRGbyId(server, readerGroupIdentifier);
-    if(!currentReaderGroup) {
-        return UA_STATUSCODE_BADNOTFOUND;
-    }
-
-    UA_ReaderGroupConfig tmpReaderGroupConfig;
-    /* deep copy of the actual config */
-    UA_ReaderGroupConfig_copy(&currentReaderGroup->config, &tmpReaderGroupConfig);
-    *config = tmpReaderGroupConfig;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* To Do UA_ReaderGroupConfig delete */
-
-/**
- * Delete ReaderGroup.
- *
- * @param server
- * @param groupIdentifier
- */
-void UA_Server_ReaderGroup_delete(UA_Server* server, UA_ReaderGroup *readerGroup) {
-    /* To Do Call UA_ReaderGroupConfig_delete */
-    UA_DataSetReader *dataSetReader, *tmpDataSetReader;
-    LIST_FOREACH_SAFE(dataSetReader, &readerGroup->readers, listEntry, tmpDataSetReader) {
-        UA_DataSetReader_delete(server, dataSetReader);
-    }
-    UA_PubSubConnection* pConn = UA_PubSubConnection_findConnectionbyId(server, readerGroup->linkedConnection);
-    if(pConn != NULL) {
-        pConn->readerGroupsSize--;
-    }
-
-    /* Delete ReaderGroup and its members */
-    UA_String_deleteMembers(&readerGroup->config.name);
-    UA_NodeId_deleteMembers(&readerGroup->linkedConnection);
-    UA_NodeId_deleteMembers(&readerGroup->identifier);
-}
-
-/**
- * Copy ReaderGroup configuration.
- *
- * @param source
- * @param destination
- * @return UA_STATUSCODE_GOOD on success
- */
-UA_StatusCode
-UA_ReaderGroupConfig_copy(const UA_ReaderGroupConfig *src,
-                                UA_ReaderGroupConfig *dst) {
-    UA_String_copy(&src->name, &dst->name);
-    /* Currently simple memcpy only */
-    memcpy(&dst->securityParameters, &src->securityParameters, sizeof(UA_PubSubSecurityParameters));
-    return UA_STATUSCODE_GOOD;
-}
-
-
-static UA_DataSetReader *
-getReaderFromIdentifier(UA_Server *server, UA_NetworkMessage *pMsg, UA_PubSubConnection *pConnection) {
-    if(!pMsg->publisherIdEnabled) {
-        UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER, "Cannot process DataSetReader without PublisherId");
-        return NULL;
-    }
-
-    UA_ReaderGroup* readerGroup;
-    LIST_FOREACH(readerGroup, &pConnection->readerGroups, listEntry) {
-        UA_DataSetReader *tmpReader;
-        LIST_FOREACH(tmpReader, &readerGroup->readers, listEntry) {
-            switch (pMsg->publisherIdType) {
-            case UA_PUBLISHERDATATYPE_BYTE:
-                if(tmpReader->config.publisherId.type == &UA_TYPES[UA_TYPES_BYTE] &&
-                   pMsg->publisherIdType == UA_PUBLISHERDATATYPE_BYTE &&
-                   pMsg->publisherId.publisherIdByte == *(UA_Byte*)tmpReader->config.publisherId.data) {
-                    UA_DataSetReader* processReader = checkReaderIdentifier(server, pMsg, tmpReader);
-                    return processReader;
-                }
-                break;
-            case UA_PUBLISHERDATATYPE_UINT16:
-                if(tmpReader->config.publisherId.type == &UA_TYPES[UA_TYPES_UINT16] &&
-                   pMsg->publisherIdType == UA_PUBLISHERDATATYPE_UINT16 &&
-                   pMsg->publisherId.publisherIdUInt16 == *(UA_UInt16*)tmpReader->config.publisherId.data) {
-                    UA_DataSetReader* processReader = checkReaderIdentifier(server, pMsg, tmpReader);
-                    return processReader;
-                }
-                break;
-            case UA_PUBLISHERDATATYPE_UINT32:
-                if(tmpReader->config.publisherId.type == &UA_TYPES[UA_TYPES_UINT32] &&
-                   pMsg->publisherIdType == UA_PUBLISHERDATATYPE_UINT32 &&
-                   pMsg->publisherId.publisherIdUInt32 == *(UA_UInt32*)tmpReader->config.publisherId.data) {
-                    UA_DataSetReader* processReader = checkReaderIdentifier(server, pMsg, tmpReader);
-                    return processReader;
-                }
-                break;
-            case UA_PUBLISHERDATATYPE_UINT64:
-                if(tmpReader->config.publisherId.type == &UA_TYPES[UA_TYPES_UINT64] &&
-                   pMsg->publisherIdType == UA_PUBLISHERDATATYPE_UINT64 &&
-                   pMsg->publisherId.publisherIdUInt64 == *(UA_UInt64*)tmpReader->config.publisherId.data) {
-                    UA_DataSetReader* processReader = checkReaderIdentifier(server, pMsg, tmpReader);
-                    return processReader;
-                }
-                break;
-            case UA_PUBLISHERDATATYPE_STRING:
-                if(tmpReader->config.publisherId.type == &UA_TYPES[UA_TYPES_STRING] &&
-                   pMsg->publisherIdType == UA_PUBLISHERDATATYPE_STRING &&
-                   UA_String_equal(&pMsg->publisherId.publisherIdString, (UA_String*)tmpReader->config.publisherId.data)) {
-                    UA_DataSetReader* processReader = checkReaderIdentifier(server, pMsg, tmpReader);
-                    return processReader;
-                }
-                break;
-            default:
-                return NULL;
-            }
-        }
-    }
-
-    return NULL;
-}
-
-/**
- * Check DataSetReader parameters.
- *
- * @param server
- * @param NetworkMessage
- * @param DataSetReader
- * @return DataSetReader on success
- */
-static UA_DataSetReader *
-checkReaderIdentifier(UA_Server *server, UA_NetworkMessage *pMsg, UA_DataSetReader *tmpReader) {
-    if(!pMsg->groupHeaderEnabled && !pMsg->groupHeader.writerGroupIdEnabled && !pMsg->payloadHeaderEnabled) {
-        UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER, "Cannot process DataSetReader without WriterGroup"
-                    "and DataSetWriter identifiers");
-        return NULL;
-    }
-    else {
-        if((tmpReader->config.writerGroupId == pMsg->groupHeader.writerGroupId) &&
-           (tmpReader->config.dataSetWriterId == *pMsg->payloadHeader.dataSetPayloadHeader.dataSetWriterIds)) {
-            UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER, "DataSetReader found. Process NetworkMessage");
-            return tmpReader;
-        }
-    }
-
-    return NULL;
-}
-
-/**
- * Process NetworkMessage.
- *
- * @param server
- * @param networkmessage
- * @return UA_STATUSCODE_GOOD on success
- */
-UA_StatusCode
-UA_Server_processNetworkMessage(UA_Server *server, UA_NetworkMessage *pMsg,
-                                UA_PubSubConnection *pConnection) {
-    if(!pMsg || !pConnection)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-
-    /* To Do Handle multiple DataSetMessage for one NetworkMessage */
-    /* To Do The condition pMsg->dataSetClassIdEnabled
-     * Here some filtering is possible */
-
-    UA_DataSetReader* dataSetReaderErg = getReaderFromIdentifier(server, pMsg, pConnection);
-
-    /* No Reader with the specified id found */
-    if(!dataSetReaderErg) {
-        return UA_STATUSCODE_BADNOTFOUND; /* TODO: Check the return code */
-    }
-
-    UA_LOG_DEBUG(&server->config.logger, UA_LOGCATEGORY_SERVER, "DataSetReader found with PublisherId");
-
-    UA_Byte anzDataSets = 1;
-    if(pMsg->payloadHeaderEnabled)
-        anzDataSets = pMsg->payloadHeader.dataSetPayloadHeader.count;
-    for(UA_Byte iterator = 0; iterator < anzDataSets; iterator++) {
-        UA_LOG_DEBUG(&server->config.logger, UA_LOGCATEGORY_SERVER, "Process Msg with DataSetReader!");
-        UA_Server_DataSetReader_process(server, dataSetReaderErg, &pMsg->payload.dataSetPayload.dataSetMessages[iterator]);
-    }
-
-    /* To Do Handle when dataSetReader parameters are null for publisherId
-     * and zero for WriterGroupId and DataSetWriterId */
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Find ReaderGroup with its identifier.
- *
- * @param server
- * @param groupIdentifier
- * @return the ReaderGroup or NULL if not found
- */
-UA_ReaderGroup * UA_ReaderGroup_findRGbyId(UA_Server *server, UA_NodeId identifier) {
-    for (size_t iteratorConn = 0; iteratorConn < server->pubSubManager.connectionsSize; iteratorConn++) {
-        UA_ReaderGroup* readerGroup = NULL;
-        LIST_FOREACH(readerGroup, &server->pubSubManager.connections[iteratorConn].readerGroups, listEntry) {
-            if(UA_NodeId_equal(&identifier, &readerGroup->identifier)) {
-                return readerGroup;
-            }
-
-        }
-    }
-    return NULL;
-}
-
-/**
- * Find a DataSetReader with its identifier
- *
- * @param server
- * @param identifier
- * @return the DataSetReader or NULL if not found
- */
-UA_DataSetReader *UA_ReaderGroup_findDSRbyId(UA_Server *server, UA_NodeId identifier) {
-    for (size_t iteratorConn = 0; iteratorConn < server->pubSubManager.connectionsSize; iteratorConn++) {
-        UA_ReaderGroup* readerGroup = NULL;
-        LIST_FOREACH(readerGroup, &server->pubSubManager.connections[iteratorConn].readerGroups, listEntry) {
-            UA_DataSetReader *tmpReader;
-            LIST_FOREACH(tmpReader, &readerGroup->readers, listEntry) {
-                if(UA_NodeId_equal(&tmpReader->identifier, &identifier)) {
-                    return tmpReader;
-                }
-
-            }
-        }
-    }
-    return NULL;
-}
-
-/**********************************************/
-/*               DataSetReader                */
-/**********************************************/
-
-/**
- * Add a DataSetReader to ReaderGroup
- *
- * @param server
- * @param readerGroupIdentifier
- * @param dataSetReaderConfig
- * @param readerIdentifier
- * @return UA_STATUSCODE_GOOD on success
- */
-UA_StatusCode
-UA_Server_addDataSetReader(UA_Server *server, UA_NodeId readerGroupIdentifier,
-                                      const UA_DataSetReaderConfig *dataSetReaderConfig,
-                                      UA_NodeId *readerIdentifier) {
-    /* Search the reader group by the given readerGroupIdentifier */
-    UA_ReaderGroup *readerGroup = UA_ReaderGroup_findRGbyId(server, readerGroupIdentifier);
-
-    if(!dataSetReaderConfig) {
-        return UA_STATUSCODE_BADNOTFOUND;
-    }
-
-    if(readerGroup == NULL) {
-        return UA_STATUSCODE_BADNOTFOUND;
-    }
-
-    /* Allocate memory for new DataSetReader */
-    UA_DataSetReader *newDataSetReader = (UA_DataSetReader *)UA_calloc(1, sizeof(UA_DataSetReader));
-    /* Copy the config into the new dataSetReader */
-    UA_DataSetReaderConfig_copy(dataSetReaderConfig, &newDataSetReader->config);
-    newDataSetReader->linkedReaderGroup = readerGroup->identifier;
-    UA_PubSubManager_generateUniqueNodeId(server, &newDataSetReader->identifier);
-    if(readerIdentifier != NULL) {
-        UA_NodeId_copy(&newDataSetReader->identifier, readerIdentifier);
-    }
-
-    /* Add the new reader to the group */
-    LIST_INSERT_HEAD(&readerGroup->readers, newDataSetReader, listEntry);
-    readerGroup->readersCount++;
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL
-    addDataSetReaderRepresentation(server, newDataSetReader);
-#endif
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Remove a DataSetReader from ReaderGroup
- *
- * @param server
- * @param readerGroupIdentifier
- * @return UA_STATUSCODE_GOOD on success
- */
-UA_StatusCode
-UA_Server_removeDataSetReader(UA_Server *server, UA_NodeId readerIdentifier) {
-    /* Remove datasetreader given by the identifier */
-    UA_DataSetReader *dataSetReader = UA_ReaderGroup_findDSRbyId(server, readerIdentifier);
-    if(!dataSetReader) {
-        return UA_STATUSCODE_BADNOTFOUND;
-    }
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL
-    removeDataSetReaderRepresentation(server, dataSetReader);
-#endif
-
-    UA_DataSetReader_delete(server, dataSetReader);
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Update the config of the DataSetReader.
- *
- * @param server
- * @param dataSetReaderIdentifier
- * @param readerGroupIdentifier
- * @param config
- * @return UA_STATUSCODE_GOOD on success
- */
-UA_StatusCode
-UA_Server_DataSetReader_updateConfig(UA_Server *server, UA_NodeId dataSetReaderIdentifier, UA_NodeId readerGroupIdentifier,
-                                    const UA_DataSetReaderConfig *config) {
-    if(config == NULL) {
-       return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-
-    UA_DataSetReader *currentDataSetReader =  UA_ReaderGroup_findDSRbyId(server, dataSetReaderIdentifier);
-    UA_ReaderGroup   *currentReaderGroup = UA_ReaderGroup_findRGbyId(server, readerGroupIdentifier);
-    if(!currentDataSetReader) {
-       return UA_STATUSCODE_BADNOTFOUND;
-    }
-
-    /* The update functionality will be extended during the next PubSub batches.
-     * Currently is only a change of the publishing interval possible. */
-    if(currentDataSetReader->config.writerGroupId != config->writerGroupId) {
-       UA_PubSubManager_removeRepeatedPubSubCallback(server, currentReaderGroup->subscribeCallbackId);
-       currentDataSetReader->config.writerGroupId = config->writerGroupId;
-       UA_ReaderGroup_subscribeCallback(server, currentReaderGroup);
-    }
-    else {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                       "No or unsupported ReaderGroup update.");
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Get the current config of the UA_DataSetReader.
- *
- * @param server
- * @param dataSetReaderIdentifier
- * @param config
- * @return UA_STATUSCODE_GOOD on success
- */
-UA_StatusCode
-UA_Server_DataSetReader_getConfig(UA_Server *server, UA_NodeId dataSetReaderIdentifier,
-                                 UA_DataSetReaderConfig *config) {
-    if(!config) {
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-
-    UA_DataSetReader *currentDataSetReader = UA_ReaderGroup_findDSRbyId(server, dataSetReaderIdentifier);
-    if(!currentDataSetReader) {
-        return UA_STATUSCODE_BADNOTFOUND;
-    }
-
-    UA_DataSetReaderConfig tmpReaderConfig;
-    /* Deep copy of the actual config */
-    UA_DataSetReaderConfig_copy(&currentDataSetReader->config, &tmpReaderConfig);
-    *config = tmpReaderConfig;
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * This Method is used to initially set the SubscribedDataSet to TargetVariablesType and to create the list of target Variables of a SubscribedDataSetType.
- *
- * @param server
- * @param dataSetReaderIdentifier
- * @param targetVariables
- * @return UA_STATUSCODE_GOOD on success
- */
-UA_StatusCode
-UA_Server_DataSetReader_createTargetVariables(UA_Server *server, UA_NodeId dataSetReaderIdentifier, UA_TargetVariablesDataType *targetVariables) {
-    UA_StatusCode retval = UA_STATUSCODE_BADUNEXPECTEDERROR;
-    UA_DataSetReader* pDS = UA_ReaderGroup_findDSRbyId(server, dataSetReaderIdentifier);
-    if(pDS == NULL) {
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-
-    if(pDS->subscribedDataSetTarget.targetVariablesSize > 0) {
-        UA_TargetVariablesDataType_deleteMembers(&pDS->subscribedDataSetTarget);
-        pDS->subscribedDataSetTarget.targetVariablesSize = 0;
-        pDS->subscribedDataSetTarget.targetVariables = NULL;
-    }
-
-    /* Set subscribed dataset to TargetVariableType */
-    pDS->subscribedDataSetType = UA_PUBSUB_SDS_TARGET;
-    retval = UA_TargetVariablesDataType_copy(targetVariables, &pDS->subscribedDataSetTarget);
-    return retval;
-}
-
-/**
- * Adds Subscribed Variables from the DataSetMetaData for the given DataSet into the given parent node
- * and creates the corresponding data in the targetVariables of the DataSetReader
- *
- * @param server
- * @param parentNode
- * @param dataSetReaderIdentifier
- * @return UA_STATUSCODE_GOOD on success
- */
-UA_StatusCode UA_Server_DataSetReader_addTargetVariables(UA_Server *server, UA_NodeId *parentNode, UA_NodeId dataSetReaderIdentifier, UA_SubscribedDataSetEnumType sdsType) {
-    if((server == NULL) || (parentNode == NULL)) {
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    UA_DataSetReader* pDataSetReader = UA_ReaderGroup_findDSRbyId(server, dataSetReaderIdentifier);
-    if(pDataSetReader == NULL) {
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-
-    UA_TargetVariablesDataType targetVars;
-    targetVars.targetVariablesSize = pDataSetReader->config.dataSetMetaData.fieldsSize;
-    targetVars.targetVariables = (UA_FieldTargetDataType *)UA_calloc(targetVars.targetVariablesSize, sizeof(UA_FieldTargetDataType));
-    for (size_t iteratorField = 0; iteratorField < pDataSetReader->config.dataSetMetaData.fieldsSize; iteratorField++) {
-        UA_VariableAttributes vAttr = UA_VariableAttributes_default;
-        vAttr.valueRank = pDataSetReader->config.dataSetMetaData.fields[iteratorField].valueRank;
-        if(pDataSetReader->config.dataSetMetaData.fields[iteratorField].arrayDimensionsSize > 0) {
-            retval = UA_Array_copy(pDataSetReader->config.dataSetMetaData.fields[iteratorField].arrayDimensions, pDataSetReader->config.dataSetMetaData.fields[iteratorField].arrayDimensionsSize, (void**)&vAttr.arrayDimensions, &UA_TYPES[UA_TYPES_UINT32]);
-            if(retval == UA_STATUSCODE_GOOD) {
-                vAttr.arrayDimensionsSize = pDataSetReader->config.dataSetMetaData.fields[iteratorField].arrayDimensionsSize;
-            }
-
-        }
-
-        vAttr.dataType = pDataSetReader->config.dataSetMetaData.fields[iteratorField].dataType;
-
-        vAttr.accessLevel = UA_ACCESSLEVELMASK_READ;
-        UA_LocalizedText_copy(&pDataSetReader->config.dataSetMetaData.fields[iteratorField].description, &vAttr.description);
-        UA_QualifiedName qn;
-        UA_QualifiedName_init(&qn);
-        char szTmpName[UA_MAX_SIZENAME];
-        if(pDataSetReader->config.dataSetMetaData.fields[iteratorField].name.length > 0) {
-            UA_UInt16 slen = UA_MAX_SIZENAME -1;
-            vAttr.displayName.locale = UA_STRING("en-US");
-            vAttr.displayName.text = pDataSetReader->config.dataSetMetaData.fields[iteratorField].name;
-            if(pDataSetReader->config.dataSetMetaData.fields[iteratorField].name.length < slen) {
-                slen = (UA_UInt16)pDataSetReader->config.dataSetMetaData.fields[iteratorField].name.length;
-                UA_snprintf(szTmpName, sizeof(szTmpName), "%.*s", (int)slen, (const char*)pDataSetReader->config.dataSetMetaData.fields[iteratorField].name.data);
-            }
-
-            szTmpName[slen] = '\0';
-            qn = UA_QUALIFIEDNAME(1, szTmpName);
-        }
-        else {
-            strcpy(szTmpName, "SubscribedVariable");
-            vAttr.displayName = UA_LOCALIZEDTEXT("en-US", szTmpName);
-            qn = UA_QUALIFIEDNAME(1, "SubscribedVariable");
-        }
-
-        /* Add variable to the given parent node */
-        UA_NodeId newNode;
-        retval = UA_Server_addVariableNode(server, UA_NODEID_NULL, *parentNode,
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), qn,
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), vAttr, NULL, &newNode);
-        if(retval == UA_STATUSCODE_GOOD) {
-            UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_USERLAND, "addVariableNode %s succeeded", szTmpName);
-        }
-        else {
-            UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_USERLAND, "addVariableNode: error 0x%x", retval);
-        }
-
-        UA_FieldTargetDataType_init(&targetVars.targetVariables[iteratorField]);
-        targetVars.targetVariables[iteratorField].attributeId = UA_ATTRIBUTEID_VALUE;
-        UA_NodeId_copy(&newNode, &targetVars.targetVariables[iteratorField].targetNodeId);
-        UA_NodeId_deleteMembers(&newNode);
-        if(vAttr.arrayDimensionsSize > 0) {
-            UA_Array_delete(vAttr.arrayDimensions, vAttr.arrayDimensionsSize, &UA_TYPES[UA_TYPES_UINT32]);
-        }
-    }
-
-    if(sdsType == UA_PUBSUB_SDS_TARGET) {
-        retval = UA_Server_DataSetReader_createTargetVariables(server, pDataSetReader->identifier, &targetVars);
-    }
-
-    UA_TargetVariablesDataType_deleteMembers(&targetVars);
-    return retval;
-}
-
-/**
- * Process a NetworkMessage with a DataSetReader.
- *
- * @param server
- * @param dataSetReader
- * @param dataSetMsg
- */
-void UA_Server_DataSetReader_process(UA_Server *server, UA_DataSetReader *dataSetReader, UA_DataSetMessage* dataSetMsg) {
-    if((dataSetReader == NULL) || (dataSetMsg == NULL) || (server == NULL)) {
-        return;
-    }
-
-    if(!dataSetMsg->header.dataSetMessageValid) {
-        UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER, "DataSetMessage is discarded: message is not valid");
-         /* To Do check ConfigurationVersion*/
-         /*if(dataSetMsg->header.configVersionMajorVersionEnabled)
-         * {
-         * if(dataSetMsg->header.configVersionMajorVersion != dataSetReader->config.dataSetMetaData.configurationVersion.majorVersion)
-         * {
-         * UA_LOG_WARNING(server->config.logger, UA_LOGCATEGORY_SERVER, "DataSetMessage is discarded: ConfigurationVersion MajorVersion does not match");
-         * return;
-         * }
-         } */
-    }
-    else {
-        if(dataSetMsg->header.dataSetMessageType == UA_DATASETMESSAGE_DATAKEYFRAME) {
-            if(dataSetMsg->header.fieldEncoding != UA_FIELDENCODING_RAWDATA) {
-                size_t anzFields = dataSetMsg->data.keyFrameData.fieldCount;
-                    if(dataSetReader->config.dataSetMetaData.fieldsSize < anzFields) {
-                    anzFields = dataSetReader->config.dataSetMetaData.fieldsSize;
-                }
-
-                if(dataSetReader->subscribedDataSetTarget.targetVariablesSize < anzFields) {
-                    anzFields = dataSetReader->subscribedDataSetTarget.targetVariablesSize;
-                }
-
-                UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-                for (UA_UInt16 iteratorField = 0; iteratorField < anzFields; iteratorField++) {
-                    if(dataSetMsg->data.keyFrameData.dataSetFields[iteratorField].hasValue) {
-                        if(dataSetReader->subscribedDataSetTarget.targetVariables[iteratorField].attributeId == UA_ATTRIBUTEID_VALUE) {
-                            retVal = UA_Server_writeValue(server, dataSetReader->subscribedDataSetTarget.targetVariables[iteratorField].targetNodeId, dataSetMsg->data.keyFrameData.dataSetFields[iteratorField].value);
-                            if(retVal != UA_STATUSCODE_GOOD) {
-                                UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER, "Error Write Value KF %u: 0x%x", iteratorField, retVal);
-                            }
-
-                        }
-                        else {
-                            UA_WriteValue writeVal;
-                            UA_WriteValue_init(&writeVal);
-                            writeVal.attributeId = dataSetReader->subscribedDataSetTarget.targetVariables[iteratorField].attributeId;
-                            writeVal.indexRange = dataSetReader->subscribedDataSetTarget.targetVariables[iteratorField].receiverIndexRange;
-                            writeVal.nodeId = dataSetReader->subscribedDataSetTarget.targetVariables[iteratorField].targetNodeId;
-                            UA_DataValue_copy(&dataSetMsg->data.keyFrameData.dataSetFields[iteratorField], &writeVal.value);
-                            retVal = UA_Server_write(server, &writeVal);
-                            if(retVal != UA_STATUSCODE_GOOD) {
-                                UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER, "Error Write KF %u: 0x%x", iteratorField, retVal);
-                            }
-
-                        }
-
-                    }
-
-               }
-
-           }
-
-        }
-
-    }
-}
-
-/**
- * Copy the config of the DataSetReader.
- *
- * @param src
- * @param dst
- * @return UA_STATUSCODE_GOOD on success
- */
-UA_StatusCode
-UA_DataSetReaderConfig_copy(const UA_DataSetReaderConfig *src,
-                                  UA_DataSetReaderConfig *dst) {
-    memset(dst, 0, sizeof(UA_DataSetReaderConfig));
-    UA_StatusCode retVal = UA_String_copy(&src->name, &dst->name);
-    if(retVal != UA_STATUSCODE_GOOD) {
-        return retVal;
-    }
-
-    retVal = UA_Variant_copy(&src->publisherId, &dst->publisherId);
-    if(retVal != UA_STATUSCODE_GOOD) {
-        return retVal;
-    }
-
-    dst->writerGroupId = src->writerGroupId;
-    dst->dataSetWriterId = src->dataSetWriterId;
-    retVal = UA_DataSetMetaDataType_copy(&src->dataSetMetaData, &dst->dataSetMetaData);
-    if(retVal != UA_STATUSCODE_GOOD) {
-        return retVal;
-    }
-
-    dst->dataSetFieldContentMask = src->dataSetFieldContentMask;
-    dst->messageReceiveTimeout = src->messageReceiveTimeout;
-
-    /* Currently memcpy is used to copy the securityParameters */
-    memcpy(&dst->securityParameters, &src->securityParameters, sizeof(UA_PubSubSecurityParameters));
-    retVal = UA_UadpDataSetReaderMessageDataType_copy(&src->messageSettings, &dst->messageSettings);
-    if(retVal != UA_STATUSCODE_GOOD) {
-        return retVal;
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * Delete the DataSetReader.
- *
- * @param server
- * @param dataSetReader
- */
-void UA_DataSetReader_delete(UA_Server *server, UA_DataSetReader *dataSetReader) {
-    /* Delete DataSetReader config */
-    UA_String_deleteMembers(&dataSetReader->config.name);
-    UA_Variant_deleteMembers(&dataSetReader->config.publisherId);
-    UA_DataSetMetaDataType_deleteMembers(&dataSetReader->config.dataSetMetaData);
-    UA_UadpDataSetReaderMessageDataType_deleteMembers(&dataSetReader->config.messageSettings);
-    UA_TargetVariablesDataType_deleteMembers(&dataSetReader->subscribedDataSetTarget);
-
-    /* Delete DataSetReader */
-    UA_ReaderGroup* pGroup = UA_ReaderGroup_findRGbyId(server, dataSetReader->linkedReaderGroup);
-    if(pGroup != NULL) {
-        pGroup->readersCount--;
-    }
-
-    UA_NodeId_deleteMembers(&dataSetReader->identifier);
-    UA_NodeId_deleteMembers(&dataSetReader->linkedReaderGroup);
-    /* Remove DataSetReader from group */
-    LIST_REMOVE(dataSetReader, listEntry);
-    /* Free memory allocated for DataSetReader */
-    UA_free(dataSetReader);
-}
-
-/**********************************************/
-/*               PublishedDataSet             */
-/**********************************************/
-UA_StatusCode
-UA_PublishedDataSetConfig_copy(const UA_PublishedDataSetConfig *src,
-                               UA_PublishedDataSetConfig *dst) {
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    memcpy(dst, src, sizeof(UA_PublishedDataSetConfig));
-    retVal |= UA_String_copy(&src->name, &dst->name);
-    switch(src->publishedDataSetType){
-        case UA_PUBSUB_DATASET_PUBLISHEDITEMS:
-            //no additional items
-            break;
-        case UA_PUBSUB_DATASET_PUBLISHEDITEMS_TEMPLATE:
-            if(src->config.itemsTemplate.variablesToAddSize > 0){
-                dst->config.itemsTemplate.variablesToAdd = (UA_PublishedVariableDataType *) UA_calloc(
-                        src->config.itemsTemplate.variablesToAddSize, sizeof(UA_PublishedVariableDataType));
-            }
-
-            for(size_t i = 0; i < src->config.itemsTemplate.variablesToAddSize; i++){
-                retVal |= UA_PublishedVariableDataType_copy(&src->config.itemsTemplate.variablesToAdd[i],
-                                                            &dst->config.itemsTemplate.variablesToAdd[i]);
-            }
-            retVal |= UA_DataSetMetaDataType_copy(&src->config.itemsTemplate.metaData,
-                                                  &dst->config.itemsTemplate.metaData);
-            break;
-
-        default:
-            return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-    return retVal;
-}
-
-UA_StatusCode
-UA_Server_getPublishedDataSetConfig(UA_Server *server, const UA_NodeId pds,
-                                    UA_PublishedDataSetConfig *config){
-    if(!config)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-
-    UA_PublishedDataSet *currentPublishedDataSet = UA_PublishedDataSet_findPDSbyId(server, pds);
-    if(!currentPublishedDataSet)
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    UA_PublishedDataSetConfig tmpPublishedDataSetConfig;
-    //deep copy of the actual config
-    UA_PublishedDataSetConfig_copy(&currentPublishedDataSet->config, &tmpPublishedDataSetConfig);
-    *config = tmpPublishedDataSetConfig;
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_PublishedDataSet *
-UA_PublishedDataSet_findPDSbyId(UA_Server *server, UA_NodeId identifier){
-    for(size_t i = 0; i < server->pubSubManager.publishedDataSetsSize; i++){
-        if(UA_NodeId_equal(&server->pubSubManager.publishedDataSets[i].identifier, &identifier)){
-            return &server->pubSubManager.publishedDataSets[i];
-        }
-    }
-    return NULL;
-}
-
-void
-UA_PublishedDataSetConfig_deleteMembers(UA_PublishedDataSetConfig *pdsConfig){
-    //delete pds config
-    UA_String_deleteMembers(&pdsConfig->name);
-    switch (pdsConfig->publishedDataSetType){
-        case UA_PUBSUB_DATASET_PUBLISHEDITEMS:
-            //no additional items
-            break;
-        case UA_PUBSUB_DATASET_PUBLISHEDITEMS_TEMPLATE:
-            if(pdsConfig->config.itemsTemplate.variablesToAddSize > 0){
-                for(size_t i = 0; i < pdsConfig->config.itemsTemplate.variablesToAddSize; i++){
-                    UA_PublishedVariableDataType_deleteMembers(&pdsConfig->config.itemsTemplate.variablesToAdd[i]);
-                }
-                UA_free(pdsConfig->config.itemsTemplate.variablesToAdd);
-            }
-            UA_DataSetMetaDataType_deleteMembers(&pdsConfig->config.itemsTemplate.metaData);
-            break;
-        default:
-            break;
-    }
-}
-
-void
-UA_PublishedDataSet_deleteMembers(UA_Server *server, UA_PublishedDataSet *publishedDataSet){
-    UA_PublishedDataSetConfig_deleteMembers(&publishedDataSet->config);
-    //delete PDS
-    UA_DataSetMetaDataType_deleteMembers(&publishedDataSet->dataSetMetaData);
-    UA_DataSetField *field, *tmpField;
-    LIST_FOREACH_SAFE(field, &publishedDataSet->fields, listEntry, tmpField) {
-        UA_Server_removeDataSetField(server, field->identifier);
-    }
-    UA_NodeId_deleteMembers(&publishedDataSet->identifier);
-}
-
-UA_DataSetFieldResult
-UA_Server_addDataSetField(UA_Server *server, const UA_NodeId publishedDataSet,
-                          const UA_DataSetFieldConfig *fieldConfig,
-                          UA_NodeId *fieldIdentifier) {
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    UA_DataSetFieldResult result = {UA_STATUSCODE_BADINVALIDARGUMENT, {0, 0}};
-    if(!fieldConfig)
-        return result;
-
-    UA_PublishedDataSet *currentDataSet = UA_PublishedDataSet_findPDSbyId(server, publishedDataSet);
-    if(currentDataSet == NULL){
-        result.result = UA_STATUSCODE_BADNOTFOUND;
-        return result;
-    }
-
-    if(currentDataSet->config.publishedDataSetType != UA_PUBSUB_DATASET_PUBLISHEDITEMS){
-        result.result = UA_STATUSCODE_BADNOTIMPLEMENTED;
-        return result;
-    }
-
-    UA_DataSetField *newField = (UA_DataSetField *) UA_calloc(1, sizeof(UA_DataSetField));
-    if(!newField){
-        result.result = UA_STATUSCODE_BADINTERNALERROR;
-        return result;
-    }
-
-    UA_DataSetFieldConfig tmpFieldConfig;
-    retVal |= UA_DataSetFieldConfig_copy(fieldConfig, &tmpFieldConfig);
-    newField->config = tmpFieldConfig;
-    UA_PubSubManager_generateUniqueNodeId(server, &newField->identifier);
-    if(fieldIdentifier != NULL){
-        UA_NodeId_copy(&newField->identifier, fieldIdentifier);
-    }
-    newField->publishedDataSet = currentDataSet->identifier;
-    //update major version of parent published data set
-    currentDataSet->dataSetMetaData.configurationVersion.majorVersion = UA_PubSubConfigurationVersionTimeDifference();
-    LIST_INSERT_HEAD(&currentDataSet->fields, newField, listEntry);
-    if(newField->config.field.variable.promotedField)
-        currentDataSet->promotedFieldsCount++;
-    currentDataSet->fieldSize++;
-    result.result = retVal;
-    result.configurationVersion.majorVersion = currentDataSet->dataSetMetaData.configurationVersion.majorVersion;
-    result.configurationVersion.minorVersion = currentDataSet->dataSetMetaData.configurationVersion.minorVersion;
-    return result;
-}
-
-UA_DataSetFieldResult
-UA_Server_removeDataSetField(UA_Server *server, const UA_NodeId dsf) {
-    UA_DataSetField *currentField = UA_DataSetField_findDSFbyId(server, dsf);
-    UA_DataSetFieldResult result = {UA_STATUSCODE_BADNOTFOUND, {0, 0}};
-    if(!currentField)
-        return result;
-
-    UA_PublishedDataSet *parentPublishedDataSet =
-        UA_PublishedDataSet_findPDSbyId(server, currentField->publishedDataSet);
-    if(!parentPublishedDataSet)
-        return result;
-
-    parentPublishedDataSet->fieldSize--;
-    if(currentField->config.field.variable.promotedField)
-        parentPublishedDataSet->promotedFieldsCount--;
-    /* update major version of PublishedDataSet */
-    parentPublishedDataSet->dataSetMetaData.configurationVersion.majorVersion =
-        UA_PubSubConfigurationVersionTimeDifference();
-
-    UA_DataSetField_deleteMembers(currentField);
-    LIST_REMOVE(currentField, listEntry);
-    UA_free(currentField);
-
-    result.result = UA_STATUSCODE_GOOD;
-    result.configurationVersion.majorVersion = parentPublishedDataSet->dataSetMetaData.configurationVersion.majorVersion;
-    result.configurationVersion.minorVersion = parentPublishedDataSet->dataSetMetaData.configurationVersion.minorVersion;
-    return result;
-}
-
-/**********************************************/
-/*               DataSetWriter                */
-/**********************************************/
-
-UA_StatusCode
-UA_DataSetWriterConfig_copy(const UA_DataSetWriterConfig *src,
-                            UA_DataSetWriterConfig *dst){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    memcpy(dst, src, sizeof(UA_DataSetWriterConfig));
-    retVal |= UA_String_copy(&src->name, &dst->name);
-    retVal |= UA_String_copy(&src->dataSetName, &dst->dataSetName);
-    retVal |= UA_ExtensionObject_copy(&src->messageSettings, &dst->messageSettings);
-    dst->dataSetWriterProperties = (UA_KeyValuePair *)
-        UA_calloc(src->dataSetWriterPropertiesSize, sizeof(UA_KeyValuePair));
-    if(!dst->dataSetWriterProperties)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    for(size_t i = 0; i < src->dataSetWriterPropertiesSize; i++){
-        retVal |= UA_KeyValuePair_copy(&src->dataSetWriterProperties[i], &dst->dataSetWriterProperties[i]);
-    }
-    return retVal;
-}
-
-UA_StatusCode
-UA_Server_getDataSetWriterConfig(UA_Server *server, const UA_NodeId dsw,
-                                 UA_DataSetWriterConfig *config){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    if(!config)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-
-    UA_DataSetWriter *currentDataSetWriter = UA_DataSetWriter_findDSWbyId(server, dsw);
-    if(!currentDataSetWriter)
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    UA_DataSetWriterConfig tmpWriterConfig;
-    //deep copy of the actual config
-    retVal |= UA_DataSetWriterConfig_copy(&currentDataSetWriter->config, &tmpWriterConfig);
-    *config = tmpWriterConfig;
-    return retVal;
-}
-
-UA_DataSetWriter *
-UA_DataSetWriter_findDSWbyId(UA_Server *server, UA_NodeId identifier) {
-    for(size_t i = 0; i < server->pubSubManager.connectionsSize; i++){
-        UA_WriterGroup *tmpWriterGroup;
-        LIST_FOREACH(tmpWriterGroup, &server->pubSubManager.connections[i].writerGroups, listEntry){
-            UA_DataSetWriter *tmpWriter;
-            LIST_FOREACH(tmpWriter, &tmpWriterGroup->writers, listEntry){
-                if(UA_NodeId_equal(&tmpWriter->identifier, &identifier)){
-                    return tmpWriter;
-                }
-            }
-        }
-    }
-    return NULL;
-}
-
-void
-UA_DataSetWriterConfig_deleteMembers(UA_DataSetWriterConfig *pdsConfig) {
-    UA_String_deleteMembers(&pdsConfig->name);
-    UA_String_deleteMembers(&pdsConfig->dataSetName);
-    for(size_t i = 0; i < pdsConfig->dataSetWriterPropertiesSize; i++){
-        UA_KeyValuePair_deleteMembers(&pdsConfig->dataSetWriterProperties[i]);
-    }
-    UA_free(pdsConfig->dataSetWriterProperties);
-    UA_ExtensionObject_deleteMembers(&pdsConfig->messageSettings);
-}
-
-static void
-UA_DataSetWriter_deleteMembers(UA_Server *server, UA_DataSetWriter *dataSetWriter) {
-    UA_DataSetWriterConfig_deleteMembers(&dataSetWriter->config);
-    //delete DataSetWriter
-    UA_NodeId_deleteMembers(&dataSetWriter->identifier);
-    UA_NodeId_deleteMembers(&dataSetWriter->linkedWriterGroup);
-    UA_NodeId_deleteMembers(&dataSetWriter->connectedDataSet);
-#ifdef UA_ENABLE_PUBSUB_DELTAFRAMES
-    //delete lastSamples store
-    for(size_t i = 0; i < dataSetWriter->lastSamplesCount; i++) {
-        UA_DataValue_deleteMembers(&dataSetWriter->lastSamples[i].value);
-    }
-    UA_free(dataSetWriter->lastSamples);
-    dataSetWriter->lastSamples = NULL;
-    dataSetWriter->lastSamplesCount = 0;
-#endif
-}
-
-/**********************************************/
-/*               WriterGroup                  */
-/**********************************************/
-
-UA_StatusCode
-UA_WriterGroupConfig_copy(const UA_WriterGroupConfig *src,
-                          UA_WriterGroupConfig *dst){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    memcpy(dst, src, sizeof(UA_WriterGroupConfig));
-    retVal |= UA_String_copy(&src->name, &dst->name);
-    retVal |= UA_ExtensionObject_copy(&src->transportSettings, &dst->transportSettings);
-    retVal |= UA_ExtensionObject_copy(&src->messageSettings, &dst->messageSettings);
-    dst->groupProperties = (UA_KeyValuePair *) UA_calloc(src->groupPropertiesSize, sizeof(UA_KeyValuePair));
-    if(!dst->groupProperties)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    for(size_t i = 0; i < src->groupPropertiesSize; i++){
-        retVal |= UA_KeyValuePair_copy(&src->groupProperties[i], &dst->groupProperties[i]);
-    }
-    return retVal;
-}
-
-UA_StatusCode
-UA_Server_getWriterGroupConfig(UA_Server *server, const UA_NodeId writerGroup,
-                               UA_WriterGroupConfig *config){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    if(!config)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-
-    UA_WriterGroup *currentWriterGroup = UA_WriterGroup_findWGbyId(server, writerGroup);
-    if(!currentWriterGroup){
-        return UA_STATUSCODE_BADNOTFOUND;
-    }
-    UA_WriterGroupConfig tmpWriterGroupConfig;
-    //deep copy of the actual config
-    retVal |= UA_WriterGroupConfig_copy(&currentWriterGroup->config, &tmpWriterGroupConfig);
-    *config = tmpWriterGroupConfig;
-    return retVal;
-}
-
-UA_StatusCode
-UA_Server_updateWriterGroupConfig(UA_Server *server, UA_NodeId writerGroupIdentifier,
-                                  const UA_WriterGroupConfig *config){
-    if(!config)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-
-    UA_WriterGroup *currentWriterGroup = UA_WriterGroup_findWGbyId(server, writerGroupIdentifier);
-    if(!currentWriterGroup)
-        return UA_STATUSCODE_BADNOTFOUND;
-    //The update functionality will be extended during the next PubSub batches.
-    //Currently is only a change of the publishing interval possible.
-    if(currentWriterGroup->config.maxEncapsulatedDataSetMessageCount != config->maxEncapsulatedDataSetMessageCount){
-        currentWriterGroup->config.maxEncapsulatedDataSetMessageCount = config->maxEncapsulatedDataSetMessageCount;
-        if(currentWriterGroup->config.messageSettings.encoding == UA_EXTENSIONOBJECT_ENCODED_NOBODY) {
-            UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                           "MaxEncapsulatedDataSetMessag need enabled 'PayloadHeader' within the message settings.");
-        }
-    }
-    if(currentWriterGroup->config.publishingInterval != config->publishingInterval) {
-        UA_PubSubManager_removeRepeatedPubSubCallback(server, currentWriterGroup->publishCallbackId);
-        currentWriterGroup->config.publishingInterval = config->publishingInterval;
-        UA_WriterGroup_addPublishCallback(server, currentWriterGroup);
-    }
-    if(currentWriterGroup->config.priority != config->priority) {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                       "No or unsupported WriterGroup update.");
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_WriterGroup *
-UA_WriterGroup_findWGbyId(UA_Server *server, UA_NodeId identifier){
-    for(size_t i = 0; i < server->pubSubManager.connectionsSize; i++){
-        UA_WriterGroup *tmpWriterGroup;
-        LIST_FOREACH(tmpWriterGroup, &server->pubSubManager.connections[i].writerGroups, listEntry) {
-            if(UA_NodeId_equal(&identifier, &tmpWriterGroup->identifier)){
-                return tmpWriterGroup;
-            }
-        }
-    }
-    return NULL;
-}
-
-void
-UA_WriterGroupConfig_deleteMembers(UA_WriterGroupConfig *writerGroupConfig){
-    //delete writerGroup config
-    UA_String_deleteMembers(&writerGroupConfig->name);
-    UA_ExtensionObject_deleteMembers(&writerGroupConfig->transportSettings);
-    UA_ExtensionObject_deleteMembers(&writerGroupConfig->messageSettings);
-    for(size_t i = 0; i < writerGroupConfig->groupPropertiesSize; i++){
-        UA_KeyValuePair_deleteMembers(&writerGroupConfig->groupProperties[i]);
-    }
-    UA_free(writerGroupConfig->groupProperties);
-}
-
-static void
-UA_WriterGroup_deleteMembers(UA_Server *server, UA_WriterGroup *writerGroup) {
-    UA_WriterGroupConfig_deleteMembers(&writerGroup->config);
-    //delete WriterGroup
-    //delete all writers. Therefore removeDataSetWriter is called from PublishedDataSet
-    UA_DataSetWriter *dataSetWriter, *tmpDataSetWriter;
-    LIST_FOREACH_SAFE(dataSetWriter, &writerGroup->writers, listEntry, tmpDataSetWriter){
-        UA_Server_removeDataSetWriter(server, dataSetWriter->identifier);
-    }
-    UA_NodeId_deleteMembers(&writerGroup->linkedConnection);
-    UA_NodeId_deleteMembers(&writerGroup->identifier);
-}
-
-UA_StatusCode
-UA_Server_addDataSetWriter(UA_Server *server,
-                           const UA_NodeId writerGroup, const UA_NodeId dataSet,
-                           const UA_DataSetWriterConfig *dataSetWriterConfig,
-                           UA_NodeId *writerIdentifier) {
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    if(!dataSetWriterConfig)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-
-    UA_PublishedDataSet *currentDataSetContext = UA_PublishedDataSet_findPDSbyId(server, dataSet);
-    if(!currentDataSetContext)
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    UA_WriterGroup *wg = UA_WriterGroup_findWGbyId(server, writerGroup);
-    if(!wg)
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    UA_DataSetWriter *newDataSetWriter = (UA_DataSetWriter *) UA_calloc(1, sizeof(UA_DataSetWriter));
-    if(!newDataSetWriter)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    //copy the config into the new dataSetWriter
-    UA_DataSetWriterConfig tmpDataSetWriterConfig;
-    retVal |= UA_DataSetWriterConfig_copy(dataSetWriterConfig, &tmpDataSetWriterConfig);
-    newDataSetWriter->config = tmpDataSetWriterConfig;
-    //save the current version of the connected PublishedDataSet
-    newDataSetWriter->connectedDataSetVersion = currentDataSetContext->dataSetMetaData.configurationVersion;
-
-#ifdef UA_ENABLE_PUBSUB_DELTAFRAMES
-    //initialize the queue for the last values
-    newDataSetWriter->lastSamples = (UA_DataSetWriterSample * )
-        UA_calloc(currentDataSetContext->fieldSize, sizeof(UA_DataSetWriterSample));
-    if(!newDataSetWriter->lastSamples) {
-        UA_DataSetWriterConfig_deleteMembers(&newDataSetWriter->config);
-        UA_free(newDataSetWriter);
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-    newDataSetWriter->lastSamplesCount = currentDataSetContext->fieldSize;
-#endif
-
-    //connect PublishedDataSet with DataSetWriter
-    newDataSetWriter->connectedDataSet = currentDataSetContext->identifier;
-    newDataSetWriter->linkedWriterGroup = wg->identifier;
-    UA_PubSubManager_generateUniqueNodeId(server, &newDataSetWriter->identifier);
-    if(writerIdentifier != NULL)
-        UA_NodeId_copy(&newDataSetWriter->identifier, writerIdentifier);
-    //add the new writer to the group
-    LIST_INSERT_HEAD(&wg->writers, newDataSetWriter, listEntry);
-    wg->writersCount++;
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL
-    addDataSetWriterRepresentation(server, newDataSetWriter);
-#endif
-    return retVal;
-}
-
-UA_StatusCode
-UA_Server_removeDataSetWriter(UA_Server *server, const UA_NodeId dsw){
-    UA_DataSetWriter *dataSetWriter = UA_DataSetWriter_findDSWbyId(server, dsw);
-    if(!dataSetWriter)
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    UA_WriterGroup *linkedWriterGroup = UA_WriterGroup_findWGbyId(server, dataSetWriter->linkedWriterGroup);
-    if(!linkedWriterGroup)
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    linkedWriterGroup->writersCount--;
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL
-    removeDataSetWriterRepresentation(server, dataSetWriter);
-#endif
-
-    //remove DataSetWriter from group
-    UA_DataSetWriter_deleteMembers(server, dataSetWriter);
-    LIST_REMOVE(dataSetWriter, listEntry);
-    UA_free(dataSetWriter);
-    return UA_STATUSCODE_GOOD;
-}
-
-/**********************************************/
-/*                DataSetField                */
-/**********************************************/
-
-UA_StatusCode
-UA_DataSetFieldConfig_copy(const UA_DataSetFieldConfig *src, UA_DataSetFieldConfig *dst){
-    memcpy(dst, src, sizeof(UA_DataSetFieldConfig));
-    if(src->dataSetFieldType == UA_PUBSUB_DATASETFIELD_VARIABLE) {
-        UA_String_copy(&src->field.variable.fieldNameAlias, &dst->field.variable.fieldNameAlias);
-        UA_PublishedVariableDataType_copy(&src->field.variable.publishParameters,
-                                          &dst->field.variable.publishParameters);
-    } else {
-        return UA_STATUSCODE_BADNOTSUPPORTED;
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_Server_getDataSetFieldConfig(UA_Server *server, const UA_NodeId dsf,
-                                UA_DataSetFieldConfig *config) {
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    if(!config)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    UA_DataSetField *currentDataSetField = UA_DataSetField_findDSFbyId(server, dsf);
-    if(!currentDataSetField)
-        return UA_STATUSCODE_BADNOTFOUND;
-    UA_DataSetFieldConfig tmpFieldConfig;
-    //deep copy of the actual config
-    retVal |= UA_DataSetFieldConfig_copy(&currentDataSetField->config, &tmpFieldConfig);
-    *config = tmpFieldConfig;
-    return retVal;
-}
-
-UA_DataSetField *
-UA_DataSetField_findDSFbyId(UA_Server *server, UA_NodeId identifier) {
-    for(size_t i = 0; i < server->pubSubManager.publishedDataSetsSize; i++){
-        UA_DataSetField *tmpField;
-        LIST_FOREACH(tmpField, &server->pubSubManager.publishedDataSets[i].fields, listEntry){
-            if(UA_NodeId_equal(&tmpField->identifier, &identifier)){
-                return tmpField;
-            }
-        }
-    }
-    return NULL;
-}
-
-void
-UA_DataSetFieldConfig_deleteMembers(UA_DataSetFieldConfig *dataSetFieldConfig){
-    if(dataSetFieldConfig->dataSetFieldType == UA_PUBSUB_DATASETFIELD_VARIABLE){
-        UA_String_deleteMembers(&dataSetFieldConfig->field.variable.fieldNameAlias);
-        UA_PublishedVariableDataType_deleteMembers(&dataSetFieldConfig->field.variable.publishParameters);
-    }
-}
-
-static void
-UA_DataSetField_deleteMembers(UA_DataSetField *field) {
-    UA_DataSetFieldConfig_deleteMembers(&field->config);
-    //delete DataSetField
-    UA_NodeId_deleteMembers(&field->identifier);
-    UA_NodeId_deleteMembers(&field->publishedDataSet);
-    UA_FieldMetaData_deleteMembers(&field->fieldMetaData);
-}
-
-/*********************************************************/
-/*               PublishValues handling                  */
-/*********************************************************/
-
-/**
- * Compare two variants. Internally used for value change detection.
- *
- * @return true if the value has changed
- */
-#ifdef UA_ENABLE_PUBSUB_DELTAFRAMES
-static UA_Boolean
-valueChangedVariant(UA_Variant *oldValue, UA_Variant *newValue){
-    if(! (oldValue && newValue))
-        return false;
-
-    UA_ByteString *oldValueEncoding = UA_ByteString_new(), *newValueEncoding = UA_ByteString_new();
-    size_t oldValueEncodingSize, newValueEncodingSize;
-    oldValueEncodingSize = UA_calcSizeBinary(oldValue, &UA_TYPES[UA_TYPES_VARIANT]);
-    newValueEncodingSize = UA_calcSizeBinary(newValue, &UA_TYPES[UA_TYPES_VARIANT]);
-    if((oldValueEncodingSize == 0) || (newValueEncodingSize == 0))
-        return false;
-
-    if(oldValueEncodingSize != newValueEncodingSize)
-        return true;
-
-    if(UA_ByteString_allocBuffer(oldValueEncoding, oldValueEncodingSize) != UA_STATUSCODE_GOOD)
-        return false;
-
-    if(UA_ByteString_allocBuffer(newValueEncoding, newValueEncodingSize) != UA_STATUSCODE_GOOD)
-        return false;
-
-    UA_Byte *bufPosOldValue = oldValueEncoding->data;
-    const UA_Byte *bufEndOldValue = &oldValueEncoding->data[oldValueEncoding->length];
-    UA_Byte *bufPosNewValue = newValueEncoding->data;
-    const UA_Byte *bufEndNewValue = &newValueEncoding->data[newValueEncoding->length];
-    if(UA_encodeBinary(oldValue, &UA_TYPES[UA_TYPES_VARIANT],
-                       &bufPosOldValue, &bufEndOldValue, NULL, NULL) != UA_STATUSCODE_GOOD){
-        return false;
-    }
-    if(UA_encodeBinary(newValue, &UA_TYPES[UA_TYPES_VARIANT],
-                       &bufPosNewValue, &bufEndNewValue, NULL, NULL) != UA_STATUSCODE_GOOD){
-        return false;
-    }
-    oldValueEncoding->length = (uintptr_t)bufPosOldValue - (uintptr_t)oldValueEncoding->data;
-    newValueEncoding->length = (uintptr_t)bufPosNewValue - (uintptr_t)newValueEncoding->data;
-    UA_Boolean compareResult = !UA_ByteString_equal(oldValueEncoding, newValueEncoding);
-    UA_ByteString_delete(oldValueEncoding);
-    UA_ByteString_delete(newValueEncoding);
-    return compareResult;
-}
-#endif
-
-/**
- * Obtain the latest value for a specific DataSetField. This method is currently
- * called inside the DataSetMessage generation process.
- */
-static void
-UA_PubSubDataSetField_sampleValue(UA_Server *server, UA_DataSetField *field,
-                                  UA_DataValue *value) {
-    /* Read the value */
-    UA_ReadValueId rvid;
-    UA_ReadValueId_init(&rvid);
-    rvid.nodeId = field->config.field.variable.publishParameters.publishedVariable;
-    rvid.attributeId = field->config.field.variable.publishParameters.attributeId;
-    rvid.indexRange = field->config.field.variable.publishParameters.indexRange;
-    *value = UA_Server_read(server, &rvid, UA_TIMESTAMPSTORETURN_BOTH);
-}
-
-static UA_StatusCode
-UA_PubSubDataSetWriter_generateKeyFrameMessage(UA_Server *server, UA_DataSetMessage *dataSetMessage,
-                                               UA_DataSetWriter *dataSetWriter) {
-    UA_PublishedDataSet *currentDataSet =
-        UA_PublishedDataSet_findPDSbyId(server, dataSetWriter->connectedDataSet);
-    if(!currentDataSet)
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    /* Prepare DataSetMessageContent */
-    dataSetMessage->header.dataSetMessageValid = true;
-    dataSetMessage->header.dataSetMessageType = UA_DATASETMESSAGE_DATAKEYFRAME;
-    dataSetMessage->data.keyFrameData.fieldCount = currentDataSet->fieldSize;
-    dataSetMessage->data.keyFrameData.dataSetFields = (UA_DataValue *)
-            UA_Array_new(currentDataSet->fieldSize, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    if(!dataSetMessage->data.keyFrameData.dataSetFields)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-#ifdef UA_ENABLE_JSON_ENCODING
-    /* json: insert fieldnames used as json keys */
-       dataSetMessage->data.keyFrameData.fieldNames =
-               (UA_String *)UA_Array_new(currentDataSet->fieldSize, &UA_TYPES[UA_TYPES_STRING]);
-       if(!dataSetMessage->data.keyFrameData.fieldNames)
-           return UA_STATUSCODE_BADOUTOFMEMORY;
-#endif
-
-    /* Loop over the fields */
-    size_t counter = 0;
-    UA_DataSetField *dsf;
-    LIST_FOREACH(dsf, &currentDataSet->fields, listEntry) {
-
-#ifdef UA_ENABLE_JSON_ENCODING
-        /* json: store the fieldNameAlias*/
-        UA_String_copy(&dsf->config.field.variable.fieldNameAlias,
-              &dataSetMessage->data.keyFrameData.fieldNames[counter]);
-#endif
-
-        /* Sample the value */
-        UA_DataValue *dfv = &dataSetMessage->data.keyFrameData.dataSetFields[counter];
-        UA_PubSubDataSetField_sampleValue(server, dsf, dfv);
-
-        /* Deactivate statuscode? */
-        if(((u64)dataSetWriter->config.dataSetFieldContentMask & (u64)UA_DATASETFIELDCONTENTMASK_STATUSCODE) == 0)
-            dfv->hasStatus = false;
-
-        /* Deactivate timestamps */
-        if(((u64)dataSetWriter->config.dataSetFieldContentMask &
-            (u64)UA_DATASETFIELDCONTENTMASK_SOURCETIMESTAMP) == 0)
-            dfv->hasSourceTimestamp = false;
-        if(((u64)dataSetWriter->config.dataSetFieldContentMask &
-            (u64)UA_DATASETFIELDCONTENTMASK_SOURCEPICOSECONDS) == 0)
-            dfv->hasSourcePicoseconds = false;
-        if(((u64)dataSetWriter->config.dataSetFieldContentMask &
-            (u64)UA_DATASETFIELDCONTENTMASK_SERVERTIMESTAMP) == 0)
-            dfv->hasServerTimestamp = false;
-        if(((u64)dataSetWriter->config.dataSetFieldContentMask &
-            (u64)UA_DATASETFIELDCONTENTMASK_SERVERPICOSECONDS) == 0)
-            dfv->hasServerPicoseconds = false;
-
-#ifdef UA_ENABLE_PUBSUB_DELTAFRAMES
-        /* Update lastValue store */
-        UA_DataValue_deleteMembers(&dataSetWriter->lastSamples[counter].value);
-        UA_DataValue_copy(dfv, &dataSetWriter->lastSamples[counter].value);
-#endif
-
-        counter++;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-#ifdef UA_ENABLE_PUBSUB_DELTAFRAMES
-static UA_StatusCode
-UA_PubSubDataSetWriter_generateDeltaFrameMessage(UA_Server *server,
-                                                 UA_DataSetMessage *dataSetMessage,
-                                                 UA_DataSetWriter *dataSetWriter) {
-    UA_PublishedDataSet *currentDataSet =
-        UA_PublishedDataSet_findPDSbyId(server, dataSetWriter->connectedDataSet);
-    if(!currentDataSet)
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    /* Prepare DataSetMessageContent */
-    memset(dataSetMessage, 0, sizeof(UA_DataSetMessage));
-    dataSetMessage->header.dataSetMessageValid = true;
-    dataSetMessage->header.dataSetMessageType = UA_DATASETMESSAGE_DATADELTAFRAME;
-
-    UA_DataSetField *dsf;
-    size_t counter = 0;
-    LIST_FOREACH(dsf, &currentDataSet->fields, listEntry) {
-        /* Sample the value */
-        UA_DataValue value;
-        UA_DataValue_init(&value);
-        UA_PubSubDataSetField_sampleValue(server, dsf, &value);
-
-        /* Check if the value has changed */
-        if(valueChangedVariant(&dataSetWriter->lastSamples[counter].value.value, &value.value)) {
-            /* increase fieldCount for current delta message */
-            dataSetMessage->data.deltaFrameData.fieldCount++;
-            dataSetWriter->lastSamples[counter].valueChanged = true;
-
-            /* Update last stored sample */
-            UA_DataValue_deleteMembers(&dataSetWriter->lastSamples[counter].value);
-            dataSetWriter->lastSamples[counter].value = value;
-        } else {
-            UA_DataValue_deleteMembers(&value);
-            dataSetWriter->lastSamples[counter].valueChanged = false;
-        }
-
-        counter++;
-    }
-
-    /* Allocate DeltaFrameFields */
-    UA_DataSetMessage_DeltaFrameField *deltaFields = (UA_DataSetMessage_DeltaFrameField *)
-            UA_calloc(dataSetMessage->data.deltaFrameData.fieldCount, sizeof(UA_DataSetMessage_DeltaFrameField));
-    if(!deltaFields)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    dataSetMessage->data.deltaFrameData.deltaFrameFields = deltaFields;
-    size_t currentDeltaField = 0;
-    for(size_t i = 0; i < currentDataSet->fieldSize; i++) {
-        if(!dataSetWriter->lastSamples[i].valueChanged)
-            continue;
-
-        UA_DataSetMessage_DeltaFrameField *dff = &deltaFields[currentDeltaField];
-
-        dff->fieldIndex = (UA_UInt16) i;
-        UA_DataValue_copy(&dataSetWriter->lastSamples[i].value, &dff->fieldValue);
-        dataSetWriter->lastSamples[i].valueChanged = false;
-
-        /* Deactivate statuscode? */
-        if(((u64)dataSetWriter->config.dataSetFieldContentMask & (u64)UA_DATASETFIELDCONTENTMASK_STATUSCODE) == 0)
-            dff->fieldValue.hasStatus = false;
-
-        /* Deactivate timestamps? */
-        if(((u64)dataSetWriter->config.dataSetFieldContentMask & (u64)UA_DATASETFIELDCONTENTMASK_SOURCETIMESTAMP) == 0)
-            dff->fieldValue.hasSourceTimestamp = false;
-        if(((u64)dataSetWriter->config.dataSetFieldContentMask & (u64)UA_DATASETFIELDCONTENTMASK_SOURCEPICOSECONDS) == 0)
-            dff->fieldValue.hasServerPicoseconds = false;
-        if(((u64)dataSetWriter->config.dataSetFieldContentMask & (u64)UA_DATASETFIELDCONTENTMASK_SERVERTIMESTAMP) == 0)
-            dff->fieldValue.hasServerTimestamp = false;
-        if(((u64)dataSetWriter->config.dataSetFieldContentMask & (u64)UA_DATASETFIELDCONTENTMASK_SERVERPICOSECONDS) == 0)
-            dff->fieldValue.hasServerPicoseconds = false;
-
-        currentDeltaField++;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-#endif
-
-/**
- * Generate a DataSetMessage for the given writer.
- *
- * @param dataSetWriter ptr to corresponding writer
- * @return ptr to generated DataSetMessage
- */
-static UA_StatusCode
-UA_DataSetWriter_generateDataSetMessage(UA_Server *server, UA_DataSetMessage *dataSetMessage,
-                                        UA_DataSetWriter *dataSetWriter) {
-    UA_PublishedDataSet *currentDataSet =
-        UA_PublishedDataSet_findPDSbyId(server, dataSetWriter->connectedDataSet);
-    if(!currentDataSet)
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    /* Reset the message */
-    memset(dataSetMessage, 0, sizeof(UA_DataSetMessage));
-
-    /* store messageType to switch between json or uadp (default) */
-    UA_UInt16 messageType = UA_TYPES_UADPDATASETWRITERMESSAGEDATATYPE;
-    UA_JsonDataSetWriterMessageDataType *jsonDataSetWriterMessageDataType = NULL;
-
-    /* The configuration Flags are included
-     * inside the std. defined UA_UadpDataSetWriterMessageDataType */
-    UA_UadpDataSetWriterMessageDataType defaultUadpConfiguration;
-    UA_UadpDataSetWriterMessageDataType *dataSetWriterMessageDataType = NULL;
-    if((dataSetWriter->config.messageSettings.encoding == UA_EXTENSIONOBJECT_DECODED ||
-        dataSetWriter->config.messageSettings.encoding == UA_EXTENSIONOBJECT_DECODED_NODELETE) &&
-       (dataSetWriter->config.messageSettings.content.decoded.type ==
-        &UA_TYPES[UA_TYPES_UADPDATASETWRITERMESSAGEDATATYPE])) {
-        dataSetWriterMessageDataType = (UA_UadpDataSetWriterMessageDataType *)
-            dataSetWriter->config.messageSettings.content.decoded.data;
-
-        /* type is UADP */
-        messageType = UA_TYPES_UADPDATASETWRITERMESSAGEDATATYPE;
-    } else if((dataSetWriter->config.messageSettings.encoding == UA_EXTENSIONOBJECT_DECODED ||
-               dataSetWriter->config.messageSettings.encoding == UA_EXTENSIONOBJECT_DECODED_NODELETE) &&
-              (dataSetWriter->config.messageSettings.content.decoded.type ==
-               &UA_TYPES[UA_TYPES_JSONDATASETWRITERMESSAGEDATATYPE])) {
-        jsonDataSetWriterMessageDataType = (UA_JsonDataSetWriterMessageDataType *)
-            dataSetWriter->config.messageSettings.content.decoded.data;
-
-        /* type is JSON */
-        messageType = UA_TYPES_JSONDATASETWRITERMESSAGEDATATYPE;
-    } else {
-        /* create default flag configuration if no
-         * UadpDataSetWriterMessageDataType was passed in */
-        memset(&defaultUadpConfiguration, 0, sizeof(UA_UadpDataSetWriterMessageDataType));
-        defaultUadpConfiguration.dataSetMessageContentMask = (UA_UadpDataSetMessageContentMask)
-            ((u64)UA_UADPDATASETMESSAGECONTENTMASK_TIMESTAMP | (u64)UA_UADPDATASETMESSAGECONTENTMASK_MAJORVERSION |
-             (u64)UA_UADPDATASETMESSAGECONTENTMASK_MINORVERSION);
-        dataSetWriterMessageDataType = &defaultUadpConfiguration;
-    }
-
-    /* Sanity-test the configuration */
-    if(dataSetWriterMessageDataType &&
-       (dataSetWriterMessageDataType->networkMessageNumber != 0 ||
-        dataSetWriterMessageDataType->dataSetOffset != 0 ||
-        dataSetWriterMessageDataType->configuredSize != 0)) {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                       "Static DSM configuration not supported. Using defaults");
-        dataSetWriterMessageDataType->networkMessageNumber = 0;
-        dataSetWriterMessageDataType->dataSetOffset = 0;
-        dataSetWriterMessageDataType->configuredSize = 0;
-    }
-
-    /* The field encoding depends on the flags inside the writer config.
-     * TODO: This can be moved to the encoding layer. */
-    if(dataSetWriter->config.dataSetFieldContentMask & (u64)UA_DATASETFIELDCONTENTMASK_RAWDATA
-) {
-        dataSetMessage->header.fieldEncoding = UA_FIELDENCODING_RAWDATA;
-    } else if((u64)dataSetWriter->config.dataSetFieldContentMask &
-              ((u64)UA_DATASETFIELDCONTENTMASK_SOURCETIMESTAMP | (u64)UA_DATASETFIELDCONTENTMASK_SERVERPICOSECONDS |
-               (u64)UA_DATASETFIELDCONTENTMASK_SOURCEPICOSECONDS | (u64)UA_DATASETFIELDCONTENTMASK_STATUSCODE)) {
-        dataSetMessage->header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
-    } else {
-        dataSetMessage->header.fieldEncoding = UA_FIELDENCODING_VARIANT;
-    }
-
-    if(messageType == UA_TYPES_UADPDATASETWRITERMESSAGEDATATYPE) {
-        /* Std: 'The DataSetMessageContentMask defines the flags for the content of the DataSetMessage header.' */
-        if((u64)dataSetWriterMessageDataType->dataSetMessageContentMask &
-           (u64)UA_UADPDATASETMESSAGECONTENTMASK_MAJORVERSION) {
-            dataSetMessage->header.configVersionMajorVersionEnabled = true;
-            dataSetMessage->header.configVersionMajorVersion =
-                currentDataSet->dataSetMetaData.configurationVersion.majorVersion;
-        }
-        if((u64)dataSetWriterMessageDataType->dataSetMessageContentMask &
-           (u64)UA_UADPDATASETMESSAGECONTENTMASK_MINORVERSION) {
-            dataSetMessage->header.configVersionMinorVersionEnabled = true;
-            dataSetMessage->header.configVersionMinorVersion =
-                currentDataSet->dataSetMetaData.configurationVersion.minorVersion;
-        }
-
-        if((u64)dataSetWriterMessageDataType->dataSetMessageContentMask &
-           (u64)UA_UADPDATASETMESSAGECONTENTMASK_SEQUENCENUMBER) {
-            dataSetMessage->header.dataSetMessageSequenceNrEnabled = true;
-            dataSetMessage->header.dataSetMessageSequenceNr =
-                dataSetWriter->actualDataSetMessageSequenceCount;
-        }
-
-        if((u64)dataSetWriterMessageDataType->dataSetMessageContentMask &
-           (u64)UA_UADPDATASETMESSAGECONTENTMASK_TIMESTAMP) {
-            dataSetMessage->header.timestampEnabled = true;
-            dataSetMessage->header.timestamp = UA_DateTime_now();
-        }
-        /* TODO: Picoseconds resolution not supported atm */
-        if((u64)dataSetWriterMessageDataType->dataSetMessageContentMask &
-           (u64)UA_UADPDATASETMESSAGECONTENTMASK_PICOSECONDS) {
-            dataSetMessage->header.picoSecondsIncluded = false;
-        }
-
-        /* TODO: Statuscode not supported yet */
-        if((u64)dataSetWriterMessageDataType->dataSetMessageContentMask &
-           (u64)UA_UADPDATASETMESSAGECONTENTMASK_STATUS) {
-            dataSetMessage->header.statusEnabled = false;
-        }
-    } else if(messageType == UA_TYPES_JSONDATASETWRITERMESSAGEDATATYPE) {
-        if((u64)jsonDataSetWriterMessageDataType->dataSetMessageContentMask &
-           (u64)UA_JSONDATASETMESSAGECONTENTMASK_METADATAVERSION) {
-            dataSetMessage->header.configVersionMajorVersionEnabled = true;
-            dataSetMessage->header.configVersionMajorVersion =
-                currentDataSet->dataSetMetaData.configurationVersion.majorVersion;
-        }
-        if((u64)jsonDataSetWriterMessageDataType->dataSetMessageContentMask &
-           (u64)UA_JSONDATASETMESSAGECONTENTMASK_METADATAVERSION) {
-            dataSetMessage->header.configVersionMinorVersionEnabled = true;
-            dataSetMessage->header.configVersionMinorVersion =
-                currentDataSet->dataSetMetaData.configurationVersion.minorVersion;
-        }
-
-        if((u64)jsonDataSetWriterMessageDataType->dataSetMessageContentMask &
-           (u64)UA_JSONDATASETMESSAGECONTENTMASK_SEQUENCENUMBER) {
-            dataSetMessage->header.dataSetMessageSequenceNrEnabled = true;
-            dataSetMessage->header.dataSetMessageSequenceNr =
-                dataSetWriter->actualDataSetMessageSequenceCount;
-        }
-
-        if((u64)jsonDataSetWriterMessageDataType->dataSetMessageContentMask &
-           (u64)UA_JSONDATASETMESSAGECONTENTMASK_TIMESTAMP) {
-            dataSetMessage->header.timestampEnabled = true;
-            dataSetMessage->header.timestamp = UA_DateTime_now();
-        }
-
-        /* TODO: Statuscode not supported yet */
-        if((u64)jsonDataSetWriterMessageDataType->dataSetMessageContentMask &
-           (u64)UA_JSONDATASETMESSAGECONTENTMASK_STATUS) {
-            dataSetMessage->header.statusEnabled = false;
-        }
-    }
-
-    /* Set the sequence count. Automatically rolls over to zero */
-    dataSetWriter->actualDataSetMessageSequenceCount++;
-
-    /* JSON does not differ between deltaframes and keyframes, only keyframes are currently used. */
-    if(messageType != UA_TYPES_JSONDATASETWRITERMESSAGEDATATYPE){
-#ifdef UA_ENABLE_PUBSUB_DELTAFRAMES
-    /* Check if the PublishedDataSet version has changed -> if yes flush the lastValue store and send a KeyFrame */
-    if(dataSetWriter->connectedDataSetVersion.majorVersion != currentDataSet->dataSetMetaData.configurationVersion.majorVersion ||
-       dataSetWriter->connectedDataSetVersion.minorVersion != currentDataSet->dataSetMetaData.configurationVersion.minorVersion) {
-        /* Remove old samples */
-        for(size_t i = 0; i < dataSetWriter->lastSamplesCount; i++)
-            UA_DataValue_deleteMembers(&dataSetWriter->lastSamples[i].value);
-
-        /* Realloc pds dependent memory */
-        dataSetWriter->lastSamplesCount = currentDataSet->fieldSize;
-        UA_DataSetWriterSample *newSamplesArray = (UA_DataSetWriterSample * )
-            UA_realloc(dataSetWriter->lastSamples, sizeof(UA_DataSetWriterSample) * dataSetWriter->lastSamplesCount);
-        if(!newSamplesArray)
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        dataSetWriter->lastSamples = newSamplesArray;
-        memset(dataSetWriter->lastSamples, 0, sizeof(UA_DataSetWriterSample) * dataSetWriter->lastSamplesCount);
-
-        dataSetWriter->connectedDataSetVersion = currentDataSet->dataSetMetaData.configurationVersion;
-        UA_PubSubDataSetWriter_generateKeyFrameMessage(server, dataSetMessage, dataSetWriter);
-        dataSetWriter->deltaFrameCounter = 0;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* The standard defines: if a PDS contains only one fields no delta messages
-     * should be generated because they need more memory than a keyframe with 1
-     * field. */
-    if(currentDataSet->fieldSize > 1 && dataSetWriter->deltaFrameCounter > 0 &&
-       dataSetWriter->deltaFrameCounter <= dataSetWriter->config.keyFrameCount) {
-        UA_PubSubDataSetWriter_generateDeltaFrameMessage(server, dataSetMessage, dataSetWriter);
-        dataSetWriter->deltaFrameCounter++;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    dataSetWriter->deltaFrameCounter = 1;
-#endif
-    }
-
-    UA_PubSubDataSetWriter_generateKeyFrameMessage(server, dataSetMessage, dataSetWriter);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-sendNetworkMessageJson(UA_PubSubConnection *connection, UA_DataSetMessage *dsm,
-                   UA_UInt16 *writerIds, UA_Byte dsmCount, UA_ExtensionObject *transportSettings) {
-   UA_StatusCode retval = UA_STATUSCODE_BADNOTSUPPORTED;
-#ifdef UA_ENABLE_JSON_ENCODING
-    UA_NetworkMessage nm;
-    memset(&nm, 0, sizeof(UA_NetworkMessage));
-    nm.version = 1;
-    nm.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    nm.payloadHeaderEnabled = true;
-
-    nm.payloadHeader.dataSetPayloadHeader.count = dsmCount;
-    nm.payloadHeader.dataSetPayloadHeader.dataSetWriterIds = writerIds;
-    nm.payload.dataSetPayload.dataSetMessages = dsm;
-
-    /* Allocate the buffer. Allocate on the stack if the buffer is small. */
-    UA_ByteString buf;
-    size_t msgSize = UA_NetworkMessage_calcSizeJson(&nm, NULL, 0, NULL, 0, true);
-    size_t stackSize = 1;
-    if(msgSize <= UA_MAX_STACKBUF)
-        stackSize = msgSize;
-    UA_STACKARRAY(UA_Byte, stackBuf, stackSize);
-    buf.data = stackBuf;
-    buf.length = msgSize;
-    if(msgSize > UA_MAX_STACKBUF) {
-        retval = UA_ByteString_allocBuffer(&buf, msgSize);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-    }
-
-    /* Encode the message */
-    UA_Byte *bufPos = buf.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &buf.data[buf.length];
-    retval = UA_NetworkMessage_encodeJson(&nm, &bufPos, &bufEnd, NULL, 0, NULL, 0, true);
-    if(retval != UA_STATUSCODE_GOOD) {
-        if(msgSize > UA_MAX_STACKBUF)
-            UA_ByteString_deleteMembers(&buf);
-        return retval;
-    }
-
-    /* Send the prepared messages */
-    retval = connection->channel->send(connection->channel, transportSettings, &buf);
-    if(msgSize > UA_MAX_STACKBUF)
-        UA_ByteString_deleteMembers(&buf);
-#endif
-    return retval;
-}
-
-static UA_StatusCode
-sendNetworkMessage(UA_PubSubConnection *connection, UA_WriterGroup *wg,
-                   UA_DataSetMessage *dsm, UA_UInt16 *writerIds, UA_Byte dsmCount,
-                   UA_ExtensionObject *messageSettings,
-                   UA_ExtensionObject *transportSettings) {
-
-    if(messageSettings->content.decoded.type !=
-       &UA_TYPES[UA_TYPES_UADPWRITERGROUPMESSAGEDATATYPE])
-        return UA_STATUSCODE_BADINTERNALERROR;
-    UA_UadpWriterGroupMessageDataType *wgm = (UA_UadpWriterGroupMessageDataType*)
-        messageSettings->content.decoded.data;
-
-    UA_NetworkMessage nm;
-    memset(&nm, 0, sizeof(UA_NetworkMessage));
-
-    nm.publisherIdEnabled =
-        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_PUBLISHERID) != 0;
-    nm.groupHeaderEnabled =
-        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_GROUPHEADER) != 0;
-    nm.groupHeader.writerGroupIdEnabled =
-        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_WRITERGROUPID) != 0;
-    nm.groupHeader.groupVersionEnabled =
-        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_GROUPVERSION) != 0;
-    nm.groupHeader.networkMessageNumberEnabled =
-        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_NETWORKMESSAGENUMBER) != 0;
-    nm.groupHeader.sequenceNumberEnabled =
-        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_SEQUENCENUMBER) != 0;
-    nm.payloadHeaderEnabled =
-        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_PAYLOADHEADER) != 0;
-    nm.timestampEnabled =
-        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_TIMESTAMP) != 0;
-    nm.picosecondsEnabled =
-        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_PICOSECONDS) != 0;
-    nm.dataSetClassIdEnabled =
-        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_DATASETCLASSID) != 0;
-    nm.promotedFieldsEnabled =
-        ((u64)wgm->networkMessageContentMask & (u64)UA_UADPNETWORKMESSAGECONTENTMASK_PROMOTEDFIELDS) != 0;
-
-    nm.version = 1;
-    nm.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    if(connection->config->publisherIdType == UA_PUBSUB_PUBLISHERID_NUMERIC) {
-        nm.publisherIdType = UA_PUBLISHERDATATYPE_UINT16;
-        nm.publisherId.publisherIdUInt32 = connection->config->publisherId.numeric;
-    } else if(connection->config->publisherIdType == UA_PUBSUB_PUBLISHERID_STRING){
-        nm.publisherIdType = UA_PUBLISHERDATATYPE_STRING;
-        nm.publisherId.publisherIdString = connection->config->publisherId.string;
-    }
-
-    /* Compute the length of the dsm separately for the header */
-    UA_STACKARRAY(UA_UInt16, dsmLengths, dsmCount);
-    for(UA_Byte i = 0; i < dsmCount; i++)
-        dsmLengths[i] = (UA_UInt16)UA_DataSetMessage_calcSizeBinary(&dsm[i]);
-
-    nm.payloadHeader.dataSetPayloadHeader.count = dsmCount;
-    nm.payloadHeader.dataSetPayloadHeader.dataSetWriterIds = writerIds;
-    nm.groupHeader.writerGroupId = wg->config.writerGroupId;
-    nm.groupHeader.networkMessageNumber = 1;
-    nm.payload.dataSetPayload.sizes = dsmLengths;
-    nm.payload.dataSetPayload.dataSetMessages = dsm;
-
-    /* Allocate the buffer. Allocate on the stack if the buffer is small. */
-    UA_ByteString buf;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&nm);
-    size_t stackSize = 1;
-    if(msgSize <= UA_MAX_STACKBUF)
-        stackSize = msgSize;
-    UA_STACKARRAY(UA_Byte, stackBuf, stackSize);
-    buf.data = stackBuf;
-    buf.length = msgSize;
-    UA_StatusCode retval;
-    if(msgSize > UA_MAX_STACKBUF) {
-        retval = UA_ByteString_allocBuffer(&buf, msgSize);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-    }
-
-    /* Encode the message */
-    UA_Byte *bufPos = buf.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &buf.data[buf.length];
-    retval = UA_NetworkMessage_encodeBinary(&nm, &bufPos, bufEnd);
-    if(retval != UA_STATUSCODE_GOOD) {
-        if(msgSize > UA_MAX_STACKBUF)
-            UA_ByteString_deleteMembers(&buf);
-        return retval;
-    }
-
-    /* Send the prepared messages */
-    retval = connection->channel->send(connection->channel, transportSettings, &buf);
-    if(msgSize > UA_MAX_STACKBUF)
-        UA_ByteString_deleteMembers(&buf);
-    return retval;
-}
-
-/* This callback triggers the collection and publish of NetworkMessages and the
- * contained DataSetMessages. */
-void
-UA_WriterGroup_publishCallback(UA_Server *server, UA_WriterGroup *writerGroup) {
-    UA_LOG_DEBUG(&server->config.logger, UA_LOGCATEGORY_SERVER, "Publish Callback");
-
-    if(!writerGroup) {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                       "Publish failed. WriterGroup not found");
-        return;
-    }
-
-    /* Nothing to do? */
-    if(writerGroup->writersCount <= 0)
-        return;
-
-    /* Binary or Json encoding?  */
-    if(writerGroup->config.encodingMimeType != UA_PUBSUB_ENCODING_UADP &&
-       writerGroup->config.encodingMimeType != UA_PUBSUB_ENCODING_JSON) {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                       "Publish failed: Unknown encoding type.");
-        return;
-    }
-
-    /* Find the connection associated with the writer */
-    UA_PubSubConnection *connection =
-        UA_PubSubConnection_findConnectionbyId(server, writerGroup->linkedConnection);
-    if(!connection) {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                       "Publish failed. PubSubConnection invalid.");
-        return;
-    }
-
-    /* How many DSM can be sent in one NM? */
-    UA_Byte maxDSM = (UA_Byte)writerGroup->config.maxEncapsulatedDataSetMessageCount;
-    if(writerGroup->config.maxEncapsulatedDataSetMessageCount > UA_BYTE_MAX)
-        maxDSM = UA_BYTE_MAX;
-    /* If the maxEncapsulatedDataSetMessageCount is set to 0->1 */
-    if(maxDSM == 0)
-        maxDSM = 1;
-
-    /* It is possible to put several DataSetMessages into one NetworkMessage.
-     * But only if they do not contain promoted fields. NM with only DSM are
-     * sent out right away. The others are kept in a buffer for "batching". */
-    size_t dsmCount = 0;
-    UA_DataSetWriter *dsw;
-    UA_STACKARRAY(UA_UInt16, dsWriterIds, writerGroup->writersCount);
-    UA_STACKARRAY(UA_DataSetMessage, dsmStore, writerGroup->writersCount);
-    LIST_FOREACH(dsw, &writerGroup->writers, listEntry) {
-        /* Find the dataset */
-        UA_PublishedDataSet *pds =
-            UA_PublishedDataSet_findPDSbyId(server, dsw->connectedDataSet);
-        if(!pds) {
-            UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                           "PubSub Publish: PublishedDataSet not found");
-            continue;
-        }
-
-        /* Generate the DSM */
-        UA_StatusCode res =
-            UA_DataSetWriter_generateDataSetMessage(server, &dsmStore[dsmCount], dsw);
-        if(res != UA_STATUSCODE_GOOD) {
-            UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                           "PubSub Publish: DataSetMessage creation failed");
-            continue;
-        }
-
-        /* Send right away if there is only this DSM in a NM. If promoted fields
-         * are contained in the PublishedDataSet, then this DSM must go into a
-         * dedicated NM as well. */
-        if(pds->promotedFieldsCount > 0 || maxDSM == 1) {
-            if(writerGroup->config.encodingMimeType == UA_PUBSUB_ENCODING_UADP){
-                res = sendNetworkMessage(connection, writerGroup, &dsmStore[dsmCount],
-                                         &dsw->config.dataSetWriterId, 1,
-                                         &writerGroup->config.messageSettings,
-                                         &writerGroup->config.transportSettings);
-            }else if(writerGroup->config.encodingMimeType == UA_PUBSUB_ENCODING_JSON){
-                res = sendNetworkMessageJson(connection, &dsmStore[dsmCount],
-                        &dsw->config.dataSetWriterId, 1, &writerGroup->config.transportSettings);
-            }
-           if(res != UA_STATUSCODE_GOOD)
-                UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                               "PubSub Publish: Could not send a NetworkMessage");
-            UA_DataSetMessage_free(&dsmStore[dsmCount]);
-            continue;
-        }
-
-        dsWriterIds[dsmCount] = dsw->config.dataSetWriterId;
-        dsmCount++;
-    }
-
-    /* Send the NetworkMessages with batched DataSetMessages */
-    size_t nmCount = (dsmCount / maxDSM) + ((dsmCount % maxDSM) == 0 ? 0 : 1);
-    for(UA_UInt32 i = 0; i < nmCount; i++) {
-        UA_Byte nmDsmCount = maxDSM;
-        if(i == nmCount - 1  && (dsmCount % maxDSM))
-            nmDsmCount = (UA_Byte)dsmCount % maxDSM;
-
-        UA_StatusCode res3 = UA_STATUSCODE_GOOD;
-        if(writerGroup->config.encodingMimeType == UA_PUBSUB_ENCODING_UADP){
-            res3 = sendNetworkMessage(connection, writerGroup, &dsmStore[i * maxDSM],
-                                      &dsWriterIds[i * maxDSM], nmDsmCount,
-                                      &writerGroup->config.messageSettings,
-                                      &writerGroup->config.transportSettings);
-        }else if(writerGroup->config.encodingMimeType == UA_PUBSUB_ENCODING_JSON){
-            res3 = sendNetworkMessageJson(connection, &dsmStore[i * maxDSM],
-                    &dsWriterIds[i * maxDSM], nmDsmCount, &writerGroup->config.transportSettings);
-        }
-        if(res3 != UA_STATUSCODE_GOOD)
-            UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                           "PubSub Publish: Sending a NetworkMessage failed");
-    }
-
-    /* Clean up DSM */
-    for(size_t i = 0; i < dsmCount; i++)
-        UA_DataSetMessage_free(&dsmStore[i]);
-}
-
-/* Add new publishCallback. The first execution is triggered directly after
- * creation. */
-UA_StatusCode
-UA_WriterGroup_addPublishCallback(UA_Server *server, UA_WriterGroup *writerGroup) {
-    UA_StatusCode retval =
-            UA_PubSubManager_addRepeatedCallback(server,
-                                                 (UA_ServerCallback) UA_WriterGroup_publishCallback,
-                                                 writerGroup, writerGroup->config.publishingInterval,
-                                                 &writerGroup->publishCallbackId);
-    if(retval == UA_STATUSCODE_GOOD)
-        writerGroup->publishCallbackIsRegistered = true;
-
-    /* Run once after creation */
-    UA_WriterGroup_publishCallback(server, writerGroup);
-    return retval;
-}
-
-/* This callback triggers the collection and reception of NetworkMessages and the
- * contained DataSetMessages. */
-void UA_ReaderGroup_subscribeCallback(UA_Server *server, UA_ReaderGroup *readerGroup) {
-    UA_PubSubConnection *connection = UA_PubSubConnection_findConnectionbyId(server, readerGroup->linkedConnection);
-    UA_ByteString buffer;
-    if(UA_ByteString_allocBuffer(&buffer, 512) != UA_STATUSCODE_GOOD) {
-        UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER, "Message buffer alloc failed!");
-        return;
-    }
-
-    connection->channel->receive(connection->channel, &buffer, NULL, 300000);
-    if(buffer.length > 0) {
-        UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_USERLAND, "Message received:");
-        UA_NetworkMessage currentNetworkMessage;
-        memset(&currentNetworkMessage, 0, sizeof(UA_NetworkMessage));
-        size_t currentPosition = 0;
-        UA_NetworkMessage_decodeBinary(&buffer, &currentPosition, &currentNetworkMessage);
-        UA_Server_processNetworkMessage(server, &currentNetworkMessage, connection);
-        UA_NetworkMessage_deleteMembers(&currentNetworkMessage);
-    }
-
-    UA_ByteString_deleteMembers(&buffer);
-}
-
-/* Add new subscribeCallback. The first execution is triggered directly after
- * creation. */
-UA_StatusCode
-UA_ReaderGroup_addSubscribeCallback(UA_Server *server, UA_ReaderGroup *readerGroup) {
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    retval |= UA_PubSubManager_addRepeatedCallback(server, (UA_ServerCallback) UA_ReaderGroup_subscribeCallback,
-                                                   readerGroup, 5,
-                                                   &readerGroup->subscribeCallbackId);
-
-    if(retval == UA_STATUSCODE_GOOD) {
-        readerGroup->subscribeCallbackIsRegistered = true;
-    }
-
-    /* Run once after creation */
-    UA_ReaderGroup_subscribeCallback(server, readerGroup);
-    return retval;
-}
-
-#endif /* UA_ENABLE_PUBSUB */
diff --git a/ext/open62541/src/pubsub/ua_pubsub.h b/ext/open62541/src/pubsub/ua_pubsub.h
deleted file mode 100644
index a752eff..0000000
--- a/ext/open62541/src/pubsub/ua_pubsub.h
+++ /dev/null
@@ -1,241 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017-2018 Fraunhofer IOSB (Author: Andreas Ebner)
- * Copyright (c) 2019 Kalycito Infotech Private Limited
- */
-
-#ifndef UA_PUBSUB_H_
-#define UA_PUBSUB_H_
-
-#include <open62541/plugin/pubsub.h>
-#include <open62541/server.h>
-#include <open62541/server_pubsub.h>
-
-#include "open62541_queue.h"
-#include "ua_pubsub_networkmessage.h"
-
-_UA_BEGIN_DECLS
-
-#ifdef UA_ENABLE_PUBSUB /* conditional compilation */
-
-/* forward declarations */
-struct UA_WriterGroup;
-typedef struct UA_WriterGroup UA_WriterGroup;
-
-/* Declaration for ReaderGroup */
-struct UA_ReaderGroup;
-typedef struct UA_ReaderGroup UA_ReaderGroup;
-
-/* The configuration structs (public part of PubSub entities) are defined in include/ua_plugin_pubsub.h */
-
-/**********************************************/
-/*            PublishedDataSet                */
-/**********************************************/
-typedef struct{
-    UA_PublishedDataSetConfig config;
-    UA_DataSetMetaDataType dataSetMetaData;
-    LIST_HEAD(UA_ListOfDataSetField, UA_DataSetField) fields;
-    UA_NodeId identifier;
-    UA_UInt16 fieldSize;
-    UA_UInt16 promotedFieldsCount;
-} UA_PublishedDataSet;
-
-UA_StatusCode
-UA_PublishedDataSetConfig_copy(const UA_PublishedDataSetConfig *src, UA_PublishedDataSetConfig *dst);
-UA_PublishedDataSet *
-UA_PublishedDataSet_findPDSbyId(UA_Server *server, UA_NodeId identifier);
-void
-UA_PublishedDataSet_deleteMembers(UA_Server *server, UA_PublishedDataSet *publishedDataSet);
-
-/**********************************************/
-/*               Connection                   */
-/**********************************************/
-//the connection config (public part of connection) object is defined in include/ua_plugin_pubsub.h
-typedef struct{
-    UA_PubSubConnectionConfig *config;
-    //internal fields
-    UA_PubSubChannel *channel;
-    UA_NodeId identifier;
-    LIST_HEAD(UA_ListOfWriterGroup, UA_WriterGroup) writerGroups;
-    LIST_HEAD(UA_ListOfPubSubReaderGroup, UA_ReaderGroup) readerGroups;
-    size_t readerGroupsSize;
-} UA_PubSubConnection;
-
-UA_StatusCode
-UA_PubSubConnectionConfig_copy(const UA_PubSubConnectionConfig *src, UA_PubSubConnectionConfig *dst);
-UA_PubSubConnection *
-UA_PubSubConnection_findConnectionbyId(UA_Server *server, UA_NodeId connectionIdentifier);
-void
-UA_PubSubConnectionConfig_deleteMembers(UA_PubSubConnectionConfig *connectionConfig);
-void
-UA_PubSubConnection_deleteMembers(UA_Server *server, UA_PubSubConnection *connection);
-/* Register channel for given connectionIdentifier */
-UA_StatusCode
-UA_PubSubConnection_regist(UA_Server *server, UA_NodeId *connectionIdentifier);
-
-/**********************************************/
-/*              DataSetWriter                 */
-/**********************************************/
-
-#ifdef UA_ENABLE_PUBSUB_DELTAFRAMES
-typedef struct UA_DataSetWriterSample{
-    UA_Boolean valueChanged;
-    UA_DataValue value;
-} UA_DataSetWriterSample;
-#endif
-
-typedef struct UA_DataSetWriter{
-    UA_DataSetWriterConfig config;
-    //internal fields
-    LIST_ENTRY(UA_DataSetWriter) listEntry;
-    UA_NodeId identifier;
-    UA_NodeId linkedWriterGroup;
-    UA_NodeId connectedDataSet;
-    UA_ConfigurationVersionDataType connectedDataSetVersion;
-#ifdef UA_ENABLE_PUBSUB_DELTAFRAMES
-    UA_UInt16 deltaFrameCounter;            //actual count of sent deltaFrames
-    size_t lastSamplesCount;
-    UA_DataSetWriterSample *lastSamples;
-#endif
-    UA_UInt16 actualDataSetMessageSequenceCount;
-} UA_DataSetWriter;
-
-UA_StatusCode
-UA_DataSetWriterConfig_copy(const UA_DataSetWriterConfig *src, UA_DataSetWriterConfig *dst);
-UA_DataSetWriter *
-UA_DataSetWriter_findDSWbyId(UA_Server *server, UA_NodeId identifier);
-
-/**********************************************/
-/*               WriterGroup                  */
-/**********************************************/
-
-struct UA_WriterGroup{
-    UA_WriterGroupConfig config;
-    //internal fields
-    LIST_ENTRY(UA_WriterGroup) listEntry;
-    UA_NodeId identifier;
-    UA_NodeId linkedConnection;
-    LIST_HEAD(UA_ListOfDataSetWriter, UA_DataSetWriter) writers;
-    UA_UInt32 writersCount;
-    UA_UInt64 publishCallbackId;
-    UA_Boolean publishCallbackIsRegistered;
-};
-
-UA_StatusCode
-UA_WriterGroupConfig_copy(const UA_WriterGroupConfig *src, UA_WriterGroupConfig *dst);
-UA_WriterGroup *
-UA_WriterGroup_findWGbyId(UA_Server *server, UA_NodeId identifier);
-
-/**********************************************/
-/*               DataSetField                 */
-/**********************************************/
-
-typedef struct UA_DataSetField{
-    UA_DataSetFieldConfig config;
-    //internal fields
-    LIST_ENTRY(UA_DataSetField) listEntry;
-    UA_NodeId identifier;
-    UA_NodeId publishedDataSet;             //ref to parent pds
-    UA_FieldMetaData fieldMetaData;
-    UA_UInt64 sampleCallbackId;
-    UA_Boolean sampleCallbackIsRegistered;
-} UA_DataSetField;
-
-UA_StatusCode
-UA_DataSetFieldConfig_copy(const UA_DataSetFieldConfig *src, UA_DataSetFieldConfig *dst);
-UA_DataSetField *
-UA_DataSetField_findDSFbyId(UA_Server *server, UA_NodeId identifier);
-
-/**********************************************/
-/*               DataSetReader                */
-/**********************************************/
-
-/* SubscribedDataSetDataType Definition */
-typedef enum {
-    UA_PUBSUB_SDS_TARGET,
-    UA_PUBSUB_SDS_MIRROR
-}UA_SubscribedDataSetEnumType;
-
-/* DataSetReader Type definition */
-typedef struct UA_DataSetReader {
-    UA_DataSetReaderConfig config;
-    /* implementation defined fields */
-    UA_NodeId identifier;
-    UA_NodeId linkedReaderGroup;
-    LIST_ENTRY(UA_DataSetReader) listEntry;
-    UA_SubscribedDataSetEnumType subscribedDataSetType;
-    UA_TargetVariablesDataType subscribedDataSetTarget;
-    /* To Do UA_SubscribedDataSetMirrorDataType subscribedDataSetMirror */
-}UA_DataSetReader;
-
-/* Delete DataSetReader */
-void UA_DataSetReader_delete(UA_Server *server, UA_DataSetReader *dataSetReader);
-
-/* Process Network Message using DataSetReader */
-void UA_Server_DataSetReader_process(UA_Server *server, UA_DataSetReader *dataSetReader, UA_DataSetMessage* dataSetMsg);
-
-/* Copy the configuration of DataSetReader */
-UA_StatusCode UA_DataSetReaderConfig_copy(const UA_DataSetReaderConfig *src, UA_DataSetReaderConfig *dst);
-
-/* Add TargetVariables */
-UA_StatusCode
-UA_Server_DataSetReader_addTargetVariables(UA_Server* server, UA_NodeId* parentNode, UA_NodeId dataSetReaderIdentifier, UA_SubscribedDataSetEnumType sdsType);
-
-/**********************************************/
-/*                ReaderGroup                 */
-/**********************************************/
-/* ReaderGroup Type Definition*/
-
-struct UA_ReaderGroup {
-    UA_ReaderGroupConfig config;
-    UA_NodeId identifier;
-    UA_NodeId linkedConnection;
-    LIST_ENTRY(UA_ReaderGroup) listEntry;
-    LIST_HEAD(UA_ListOfPubSubDataSetReader, UA_DataSetReader) readers;
-    /* for simplified information access */
-    UA_UInt32 readersCount;
-    UA_UInt64 subscribeCallbackId;
-    UA_Boolean subscribeCallbackIsRegistered;
-};
-
-/* Delete ReaderGroup */
-void UA_Server_ReaderGroup_delete(UA_Server *server, UA_ReaderGroup *readerGroup);
-
-/* Copy configuration of ReaderGroup */
-UA_StatusCode
-UA_ReaderGroupConfig_copy(const UA_ReaderGroupConfig *src, UA_ReaderGroupConfig *dst);
-
-/* Process Network Message */
-UA_StatusCode
-UA_Server_processNetworkMessage(UA_Server *server, UA_NetworkMessage* pMsg, UA_PubSubConnection *pConnection);
-
-/* Prototypes for internal util functions - some functions maybe removed later
- *(currently moved from public to internal)*/
-UA_ReaderGroup *UA_ReaderGroup_findRGbyId(UA_Server *server, UA_NodeId identifier);
-UA_DataSetReader *UA_ReaderGroup_findDSRbyId(UA_Server *server, UA_NodeId identifier);
-
-/*********************************************************/
-/*               PublishValues handling                  */
-/*********************************************************/
-
-UA_StatusCode
-UA_WriterGroup_addPublishCallback(UA_Server *server, UA_WriterGroup *writerGroup);
-void
-UA_WriterGroup_publishCallback(UA_Server *server, UA_WriterGroup *writerGroup);
-
-/*********************************************************/
-/*               SubscribeValues handling                */
-/*********************************************************/
-
-UA_StatusCode
-UA_ReaderGroup_addSubscribeCallback(UA_Server *server, UA_ReaderGroup *readerGroup);
-void
-UA_ReaderGroup_subscribeCallback(UA_Server *server, UA_ReaderGroup *readerGroup);
-
-#endif /* UA_ENABLE_PUBSUB */
-
-_UA_END_DECLS
-
-#endif /* UA_PUBSUB_H_ */
diff --git a/ext/open62541/src/pubsub/ua_pubsub_manager.c b/ext/open62541/src/pubsub/ua_pubsub_manager.c
deleted file mode 100644
index 7e1eaf2..0000000
--- a/ext/open62541/src/pubsub/ua_pubsub_manager.c
+++ /dev/null
@@ -1,337 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017-2018 Fraunhofer IOSB (Author: Andreas Ebner)
- * Copyright (c) 2018 Fraunhofer IOSB (Author: Julius Pfrommer)
- */
-
-#include "server/ua_server_internal.h"
-#include "ua_pubsub_ns0.h"
-
-#ifdef UA_ENABLE_PUBSUB /* conditional compilation */
-
-#define UA_DATETIMESTAMP_2000 125911584000000000
-
-UA_StatusCode
-UA_Server_addPubSubConnection(UA_Server *server,
-                              const UA_PubSubConnectionConfig *connectionConfig,
-                              UA_NodeId *connectionIdentifier) {
-    /* Find the matching UA_PubSubTransportLayers */
-    UA_PubSubTransportLayer *tl = NULL;
-    for(size_t i = 0; i < server->config.pubsubTransportLayersSize; i++) {
-        if(connectionConfig &&
-           UA_String_equal(&server->config.pubsubTransportLayers[i].transportProfileUri,
-                           &connectionConfig->transportProfileUri)) {
-            tl = &server->config.pubsubTransportLayers[i];
-        }
-    }
-    if(!tl) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "PubSub Connection creation failed. Requested transport layer not found.");
-        return UA_STATUSCODE_BADNOTFOUND;
-    }
-
-    /* Create a copy of the connection config */
-    UA_PubSubConnectionConfig *tmpConnectionConfig = (UA_PubSubConnectionConfig *)
-        UA_calloc(1, sizeof(UA_PubSubConnectionConfig));
-    if(!tmpConnectionConfig){
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "PubSub Connection creation failed. Out of Memory.");
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-
-    UA_StatusCode retval = UA_PubSubConnectionConfig_copy(connectionConfig, tmpConnectionConfig);
-    if(retval != UA_STATUSCODE_GOOD){
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "PubSub Connection creation failed. Could not copy the config.");
-        return retval;
-    }
-
-    /* Create new connection and add to UA_PubSubManager */
-    UA_PubSubConnection *newConnectionsField = (UA_PubSubConnection *)
-        UA_realloc(server->pubSubManager.connections,
-                   sizeof(UA_PubSubConnection) * (server->pubSubManager.connectionsSize + 1));
-    if(!newConnectionsField) {
-        UA_PubSubConnectionConfig_deleteMembers(tmpConnectionConfig);
-        UA_free(tmpConnectionConfig);
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "PubSub Connection creation failed. Out of Memory.");
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-    server->pubSubManager.connections = newConnectionsField;
-    server->pubSubManager.connectionsSize++;
-
-    UA_PubSubConnection *newConnection =
-        &server->pubSubManager.connections[server->pubSubManager.connectionsSize-1];
-
-    /* Initialize the new connection */
-    memset(newConnection, 0, sizeof(UA_PubSubConnection));
-    LIST_INIT(&newConnection->writerGroups);
-    //workaround - fixing issue with queue.h and realloc.
-    for(size_t n = 0; n < server->pubSubManager.connectionsSize; n++){
-        if(server->pubSubManager.connections[n].writerGroups.lh_first){
-            server->pubSubManager.connections[n].writerGroups.lh_first->listEntry.le_prev = &server->pubSubManager.connections[n].writerGroups.lh_first;
-        }
-    }
-    newConnection->config = tmpConnectionConfig;
-
-    /* Open the channel */
-    newConnection->channel = tl->createPubSubChannel(newConnection->config);
-    if(!newConnection->channel) {
-        UA_PubSubConnection_deleteMembers(server, newConnection);
-        server->pubSubManager.connectionsSize--;
-        /* Keep the realloced (longer) array if entries remain */
-        if(server->pubSubManager.connectionsSize == 0) {
-            UA_free(server->pubSubManager.connections);
-            server->pubSubManager.connections = NULL;
-        }
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "PubSub Connection creation failed. Transport layer creation problem.");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    UA_PubSubManager_generateUniqueNodeId(server, &newConnection->identifier);
-
-    if(connectionIdentifier)
-        UA_NodeId_copy(&newConnection->identifier, connectionIdentifier);
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL
-    addPubSubConnectionRepresentation(server, newConnection);
-#endif
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_Server_removePubSubConnection(UA_Server *server, const UA_NodeId connection) {
-    //search the identified Connection and store the Connection index
-    size_t connectionIndex;
-    UA_PubSubConnection *currentConnection = NULL;
-    for(connectionIndex = 0; connectionIndex < server->pubSubManager.connectionsSize; connectionIndex++){
-        if(UA_NodeId_equal(&connection, &server->pubSubManager.connections[connectionIndex].identifier)){
-            currentConnection = &server->pubSubManager.connections[connectionIndex];
-            break;
-        }
-    }
-    if(!currentConnection)
-        return UA_STATUSCODE_BADNOTFOUND;
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL
-    removePubSubConnectionRepresentation(server, currentConnection);
-#endif
-    UA_PubSubConnection_deleteMembers(server, currentConnection);
-    server->pubSubManager.connectionsSize--;
-    //remove the connection from the pubSubManager, move the last connection
-    //into the allocated memory of the deleted connection
-    if(server->pubSubManager.connectionsSize != connectionIndex){
-        memcpy(&server->pubSubManager.connections[connectionIndex],
-               &server->pubSubManager.connections[server->pubSubManager.connectionsSize],
-               sizeof(UA_PubSubConnection));
-    }
-
-    if(server->pubSubManager.connectionsSize <= 0){
-        UA_free(server->pubSubManager.connections);
-        server->pubSubManager.connections = NULL;
-    } else {
-        server->pubSubManager.connections = (UA_PubSubConnection *)
-                UA_realloc(server->pubSubManager.connections, sizeof(UA_PubSubConnection) * server->pubSubManager.connectionsSize);
-        if(!server->pubSubManager.connections){
-            return UA_STATUSCODE_BADINTERNALERROR;
-        }
-        //workaround - fixing issue with queue.h and realloc.
-        for(size_t n = 0; n < server->pubSubManager.connectionsSize; n++){
-            if(server->pubSubManager.connections[n].writerGroups.lh_first){
-                server->pubSubManager.connections[n].writerGroups.lh_first->listEntry.le_prev = &server->pubSubManager.connections[n].writerGroups.lh_first;
-            }
-        }
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_AddPublishedDataSetResult
-UA_Server_addPublishedDataSet(UA_Server *server, const UA_PublishedDataSetConfig *publishedDataSetConfig,
-                              UA_NodeId *pdsIdentifier) {
-    UA_AddPublishedDataSetResult result = {UA_STATUSCODE_BADINVALIDARGUMENT, 0, NULL, {0, 0}};
-    if(!publishedDataSetConfig){
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "PublishedDataSet creation failed. No config passed in.");
-        return result;
-    }
-    if(publishedDataSetConfig->publishedDataSetType != UA_PUBSUB_DATASET_PUBLISHEDITEMS){
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "PublishedDataSet creation failed. Unsupported PublishedDataSet type.");
-        return result;
-    }
-    //deep copy the given connection config
-    UA_PublishedDataSetConfig tmpPublishedDataSetConfig;
-    memset(&tmpPublishedDataSetConfig, 0, sizeof(UA_PublishedDataSetConfig));
-    if(UA_PublishedDataSetConfig_copy(publishedDataSetConfig, &tmpPublishedDataSetConfig) != UA_STATUSCODE_GOOD){
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "PublishedDataSet creation failed. Configuration copy failed.");
-        result.addResult = UA_STATUSCODE_BADINTERNALERROR;
-        return result;
-    }
-    //create new PDS and add to UA_PubSubManager
-    UA_PublishedDataSet *newPubSubDataSetField = (UA_PublishedDataSet *)
-            UA_realloc(server->pubSubManager.publishedDataSets,
-                       sizeof(UA_PublishedDataSet) * (server->pubSubManager.publishedDataSetsSize + 1));
-    if(!newPubSubDataSetField) {
-        UA_PublishedDataSetConfig_deleteMembers(&tmpPublishedDataSetConfig);
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "PublishedDataSet creation failed. Out of Memory.");
-        result.addResult = UA_STATUSCODE_BADOUTOFMEMORY;
-        return result;
-    }
-    server->pubSubManager.publishedDataSets = newPubSubDataSetField;
-    UA_PublishedDataSet *newPubSubDataSet = &server->pubSubManager.publishedDataSets[(server->pubSubManager.publishedDataSetsSize)];
-    memset(newPubSubDataSet, 0, sizeof(UA_PublishedDataSet));
-    LIST_INIT(&newPubSubDataSet->fields);
-    //workaround - fixing issue with queue.h and realloc.
-    for(size_t n = 0; n < server->pubSubManager.publishedDataSetsSize; n++){
-        if(server->pubSubManager.publishedDataSets[n].fields.lh_first){
-            server->pubSubManager.publishedDataSets[n].fields.lh_first->listEntry.le_prev = &server->pubSubManager.publishedDataSets[n].fields.lh_first;
-        }
-    }
-    newPubSubDataSet->config = tmpPublishedDataSetConfig;
-    if(tmpPublishedDataSetConfig.publishedDataSetType == UA_PUBSUB_DATASET_PUBLISHEDITEMS_TEMPLATE){
-        //parse template config and add fields (later PubSub batch)
-    }
-    //generate unique nodeId
-    UA_PubSubManager_generateUniqueNodeId(server, &newPubSubDataSet->identifier);
-    if(pdsIdentifier != NULL){
-        UA_NodeId_copy(&newPubSubDataSet->identifier, pdsIdentifier);
-    }
-    server->pubSubManager.publishedDataSetsSize++;
-    result.addResult = UA_STATUSCODE_GOOD;
-    result.fieldAddResults = NULL;
-    result.fieldAddResultsSize = 0;
-    result.configurationVersion.majorVersion = UA_PubSubConfigurationVersionTimeDifference();
-    result.configurationVersion.minorVersion = UA_PubSubConfigurationVersionTimeDifference();
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL
-    addPublishedDataItemsRepresentation(server, newPubSubDataSet);
-#endif
-    return result;
-}
-
-UA_StatusCode
-UA_Server_removePublishedDataSet(UA_Server *server, const UA_NodeId pds) {
-    //search the identified PublishedDataSet and store the PDS index
-    UA_PublishedDataSet *publishedDataSet = NULL;
-    size_t publishedDataSetIndex;
-    for(publishedDataSetIndex = 0; publishedDataSetIndex < server->pubSubManager.publishedDataSetsSize; publishedDataSetIndex++){
-        if(UA_NodeId_equal(&server->pubSubManager.publishedDataSets[publishedDataSetIndex].identifier, &pds)){
-            publishedDataSet = &server->pubSubManager.publishedDataSets[publishedDataSetIndex];
-            break;
-        }
-    }
-    if(!publishedDataSet){
-        return UA_STATUSCODE_BADNOTFOUND;
-    }
-    //search for referenced writers -> delete this writers. (Standard: writer must be connected with PDS)
-    for(size_t i = 0; i < server->pubSubManager.connectionsSize; i++){
-        UA_WriterGroup *writerGroup;
-        LIST_FOREACH(writerGroup, &server->pubSubManager.connections[i].writerGroups, listEntry){
-            UA_DataSetWriter *currentWriter, *tmpWriterGroup;
-            LIST_FOREACH_SAFE(currentWriter, &writerGroup->writers, listEntry, tmpWriterGroup){
-                if(UA_NodeId_equal(&currentWriter->connectedDataSet, &publishedDataSet->identifier)){
-                    UA_Server_removeDataSetWriter(server, currentWriter->identifier);
-                }
-            }
-        }
-    }
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL
-    removePublishedDataSetRepresentation(server, publishedDataSet);
-#endif
-    UA_PublishedDataSet_deleteMembers(server, publishedDataSet);
-    server->pubSubManager.publishedDataSetsSize--;
-    //copy the last PDS to the removed PDS inside the allocated memory block
-    if(server->pubSubManager.publishedDataSetsSize != publishedDataSetIndex){
-        memcpy(&server->pubSubManager.publishedDataSets[publishedDataSetIndex],
-               &server->pubSubManager.publishedDataSets[server->pubSubManager.publishedDataSetsSize],
-               sizeof(UA_PublishedDataSet));
-    }
-    if(server->pubSubManager.publishedDataSetsSize <= 0){
-        UA_free(server->pubSubManager.publishedDataSets);
-        server->pubSubManager.publishedDataSets = NULL;
-    } else {
-        server->pubSubManager.publishedDataSets = (UA_PublishedDataSet *)
-                UA_realloc(server->pubSubManager.publishedDataSets, sizeof(UA_PublishedDataSet) * server->pubSubManager.publishedDataSetsSize);
-        if(!server->pubSubManager.publishedDataSets){
-            return UA_STATUSCODE_BADINTERNALERROR;
-        }
-        //workaround - fixing issue with queue.h and realloc.
-        for(size_t n = 0; n < server->pubSubManager.publishedDataSetsSize; n++){
-            if(server->pubSubManager.publishedDataSets[n].fields.lh_first){
-                server->pubSubManager.publishedDataSets[n].fields.lh_first->listEntry.le_prev = &server->pubSubManager.publishedDataSets[n].fields.lh_first;
-            }
-        }
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Calculate the time difference between current time and UTC (00:00) on January
- * 1, 2000. */
-UA_UInt32
-UA_PubSubConfigurationVersionTimeDifference() {
-    UA_UInt32 timeDiffSince2000 = (UA_UInt32) (UA_DateTime_now() - UA_DATETIMESTAMP_2000);
-    return timeDiffSince2000;
-}
-
-/* Generate a new unique NodeId. This NodeId will be used for the information
- * model representation of PubSub entities. */
-void
-UA_PubSubManager_generateUniqueNodeId(UA_Server *server, UA_NodeId *nodeId) {
-    UA_NodeId newNodeId = UA_NODEID_NUMERIC(0, 0);
-    UA_Node *newNode = UA_Nodestore_newNode(server->nsCtx, UA_NODECLASS_OBJECT);
-    UA_Nodestore_insertNode(server->nsCtx, newNode, &newNodeId);
-    UA_NodeId_copy(&newNodeId, nodeId);
-}
-
-/* Delete the current PubSub configuration including all nested members. This
- * action also delete the configured PubSub transport Layers. */
-void
-UA_PubSubManager_delete(UA_Server *server, UA_PubSubManager *pubSubManager) {
-    UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER, "PubSub cleanup was called.");
-    //free the currently configured transport layers
-    UA_free(server->config.pubsubTransportLayers);
-    server->config.pubsubTransportLayersSize = 0;
-
-    //remove Connections and WriterGroups
-    while(pubSubManager->connectionsSize > 0){
-        UA_Server_removePubSubConnection(server, pubSubManager->connections[pubSubManager->connectionsSize-1].identifier);
-    }
-    while(pubSubManager->publishedDataSetsSize > 0){
-        UA_Server_removePublishedDataSet(server, pubSubManager->publishedDataSets[pubSubManager->publishedDataSetsSize-1].identifier);
-    }
-}
-
-/***********************************/
-/*      PubSub Jobs abstraction    */
-/***********************************/
-
-#ifndef UA_ENABLE_PUBSUB_CUSTOM_PUBLISH_HANDLING
-
-/* If UA_ENABLE_PUBSUB_CUSTOM_PUBLISH_INTERRUPT is enabled, a custom callback
- * management must be linked to the application */
-
-UA_StatusCode
-UA_PubSubManager_addRepeatedCallback(UA_Server *server, UA_ServerCallback callback,
-                                     void *data, UA_Double interval_ms, UA_UInt64 *callbackId) {
-    return UA_Timer_addRepeatedCallback(&server->timer, (UA_ApplicationCallback)callback,
-                                        server, data, interval_ms, callbackId);
-}
-
-UA_StatusCode
-UA_PubSubManager_changeRepeatedCallbackInterval(UA_Server *server, UA_UInt64 callbackId,
-                                                UA_Double interval_ms) {
-    return UA_Timer_changeRepeatedCallbackInterval(&server->timer, callbackId, interval_ms);
-}
-
-void
-UA_PubSubManager_removeRepeatedPubSubCallback(UA_Server *server, UA_UInt64 callbackId) {
-    UA_Timer_removeCallback(&server->timer, callbackId);
-}
-
-#endif /* UA_ENABLE_PUBSUB_CUSTOM_PUBLISH_HANDLING */
-
-#endif /* UA_ENABLE_PUBSUB */
diff --git a/ext/open62541/src/pubsub/ua_pubsub_manager.h b/ext/open62541/src/pubsub/ua_pubsub_manager.h
deleted file mode 100644
index e690f9b..0000000
--- a/ext/open62541/src/pubsub/ua_pubsub_manager.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017-2018 Fraunhofer IOSB (Author: Andreas Ebner)
- */
-
-#ifndef UA_PUBSUB_MANAGER_H_
-#define UA_PUBSUB_MANAGER_H_
-
-#include <open62541/server_pubsub.h>
-
-#include "ua_pubsub.h"
-
-_UA_BEGIN_DECLS
-
-#ifdef UA_ENABLE_PUBSUB /* conditional compilation */
-
-typedef struct UA_PubSubManager{
-    //Connections and PublishedDataSets can exist alone (own lifecycle) -> top level components
-    size_t connectionsSize;
-    UA_PubSubConnection *connections;
-    size_t publishedDataSetsSize;
-    UA_PublishedDataSet *publishedDataSets;
-} UA_PubSubManager;
-
-void
-UA_PubSubManager_delete(UA_Server *server, UA_PubSubManager *pubSubManager);
-
-void
-UA_PubSubManager_generateUniqueNodeId(UA_Server *server, UA_NodeId *nodeId);
-
-UA_UInt32
-UA_PubSubConfigurationVersionTimeDifference(void);
-
-/***********************************/
-/*      PubSub Jobs abstraction    */
-/***********************************/
-UA_StatusCode
-UA_PubSubManager_addRepeatedCallback(UA_Server *server, UA_ServerCallback callback,
-                                     void *data, UA_Double interval_ms, UA_UInt64 *callbackId);
-UA_StatusCode
-UA_PubSubManager_changeRepeatedCallbackInterval(UA_Server *server, UA_UInt64 callbackId,
-                                                UA_Double interval_ms);
-void
-UA_PubSubManager_removeRepeatedPubSubCallback(UA_Server *server, UA_UInt64 callbackId);
-
-#endif /* UA_ENABLE_PUBSUB */
-
-_UA_END_DECLS
-
-#endif /* UA_PUBSUB_MANAGER_H_ */
diff --git a/ext/open62541/src/pubsub/ua_pubsub_networkmessage.c b/ext/open62541/src/pubsub/ua_pubsub_networkmessage.c
deleted file mode 100644
index f9f9878..0000000
--- a/ext/open62541/src/pubsub/ua_pubsub_networkmessage.c
+++ /dev/null
@@ -1,1284 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017 - 2018 Fraunhofer IOSB (Author: Tino Bischoff)
- */
-
-#include <open62541/types_generated_encoding_binary.h>
-#include <open62541/types_generated_handling.h>
-
-#ifdef UA_ENABLE_PUBSUB /* conditional compilation */
-
-#include "ua_pubsub_networkmessage.h"
-
-const UA_Byte NM_VERSION_MASK = 15;
-const UA_Byte NM_PUBLISHER_ID_ENABLED_MASK = 16;
-const UA_Byte NM_GROUP_HEADER_ENABLED_MASK = 32;
-const UA_Byte NM_PAYLOAD_HEADER_ENABLED_MASK = 64;
-const UA_Byte NM_EXTENDEDFLAGS1_ENABLED_MASK = 128;
-const UA_Byte NM_PUBLISHER_ID_MASK = 7;
-const UA_Byte NM_DATASET_CLASSID_ENABLED_MASK = 8;
-const UA_Byte NM_SECURITY_ENABLED_MASK = 16;
-const UA_Byte NM_TIMESTAMP_ENABLED_MASK = 32;
-const UA_Byte NM_PICOSECONDS_ENABLED_MASK = 64;
-const UA_Byte NM_EXTENDEDFLAGS2_ENABLED_MASK = 128;
-const UA_Byte NM_NETWORK_MSG_TYPE_MASK = 28;
-const UA_Byte NM_CHUNK_MESSAGE_MASK = 1;
-const UA_Byte NM_PROMOTEDFIELDS_ENABLED_MASK = 2;
-const UA_Byte GROUP_HEADER_WRITER_GROUPID_ENABLED = 1;
-const UA_Byte GROUP_HEADER_GROUP_VERSION_ENABLED = 2;
-const UA_Byte GROUP_HEADER_NM_NUMBER_ENABLED = 4;
-const UA_Byte GROUP_HEADER_SEQUENCE_NUMBER_ENABLED = 8;
-const UA_Byte SECURITY_HEADER_NM_SIGNED = 1;
-const UA_Byte SECURITY_HEADER_NM_ENCRYPTED = 2;
-const UA_Byte SECURITY_HEADER_SEC_FOOTER_ENABLED = 4;
-const UA_Byte SECURITY_HEADER_FORCE_KEY_RESET = 8;
-const UA_Byte DS_MESSAGEHEADER_DS_MSG_VALID = 1;
-const UA_Byte DS_MESSAGEHEADER_FIELD_ENCODING_MASK = 6;
-const UA_Byte DS_MESSAGEHEADER_SEQ_NR_ENABLED_MASK = 8;
-const UA_Byte DS_MESSAGEHEADER_STATUS_ENABLED_MASK = 16;
-const UA_Byte DS_MESSAGEHEADER_CONFIGMAJORVERSION_ENABLED_MASK = 32;
-const UA_Byte DS_MESSAGEHEADER_CONFIGMINORVERSION_ENABLED_MASK = 64;
-const UA_Byte DS_MESSAGEHEADER_FLAGS2_ENABLED_MASK = 128;
-const UA_Byte DS_MESSAGEHEADER_DS_MESSAGE_TYPE_MASK = 15;
-const UA_Byte DS_MESSAGEHEADER_TIMESTAMP_ENABLED_MASK = 16;
-const UA_Byte DS_MESSAGEHEADER_PICOSECONDS_INCLUDED_MASK = 32;
-const UA_Byte NM_SHIFT_LEN = 2;
-const UA_Byte DS_MH_SHIFT_LEN = 1;
-
-static UA_Boolean UA_NetworkMessage_ExtendedFlags1Enabled(const UA_NetworkMessage* src);
-static UA_Boolean UA_NetworkMessage_ExtendedFlags2Enabled(const UA_NetworkMessage* src);
-static UA_Boolean UA_DataSetMessageHeader_DataSetFlags2Enabled(const UA_DataSetMessageHeader* src);
-
-UA_StatusCode
-UA_NetworkMessage_encodeBinary(const UA_NetworkMessage* src, UA_Byte **bufPos,
-                               const UA_Byte *bufEnd) {
-    /* UADPVersion + UADP Flags */
-    UA_Byte v = src->version;
-    if(src->publisherIdEnabled)
-        v |= NM_PUBLISHER_ID_ENABLED_MASK;
-
-    if(src->groupHeaderEnabled)
-        v |= NM_GROUP_HEADER_ENABLED_MASK;
-
-    if(src->payloadHeaderEnabled)
-        v |= NM_PAYLOAD_HEADER_ENABLED_MASK;
-
-    if(UA_NetworkMessage_ExtendedFlags1Enabled(src))
-        v |= NM_EXTENDEDFLAGS1_ENABLED_MASK;
-
-    UA_StatusCode rv = UA_Byte_encodeBinary(&v, bufPos, bufEnd);
-    if(rv != UA_STATUSCODE_GOOD)
-        return rv;
-
-    // ExtendedFlags1
-    if(UA_NetworkMessage_ExtendedFlags1Enabled(src)) {
-        v = (UA_Byte)src->publisherIdType;
-
-        if(src->dataSetClassIdEnabled)
-            v |= NM_DATASET_CLASSID_ENABLED_MASK;
-
-        if(src->securityEnabled)
-            v |= NM_SECURITY_ENABLED_MASK;
-
-        if(src->timestampEnabled)
-            v |= NM_TIMESTAMP_ENABLED_MASK;
-
-        if(src->picosecondsEnabled)
-            v |= NM_PICOSECONDS_ENABLED_MASK;
-
-        if(UA_NetworkMessage_ExtendedFlags2Enabled(src))
-            v |= NM_EXTENDEDFLAGS2_ENABLED_MASK;
-
-        rv = UA_Byte_encodeBinary(&v, bufPos, bufEnd);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-
-        // ExtendedFlags2
-        if(UA_NetworkMessage_ExtendedFlags2Enabled(src)) { 
-            v = (UA_Byte)src->networkMessageType;
-            // shift left 2 bit
-            v = (UA_Byte) (v << NM_SHIFT_LEN);
-
-            if(src->chunkMessage)
-                v |= NM_CHUNK_MESSAGE_MASK;
-
-            if(src->promotedFieldsEnabled)
-                v |= NM_PROMOTEDFIELDS_ENABLED_MASK;
-
-            rv = UA_Byte_encodeBinary(&v, bufPos, bufEnd);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-    }
-
-    // PublisherId
-    if(src->publisherIdEnabled) {
-        switch (src->publisherIdType) {
-        case UA_PUBLISHERDATATYPE_BYTE:
-            rv = UA_Byte_encodeBinary(&(src->publisherId.publisherIdByte), bufPos, bufEnd);
-            break;
-
-        case UA_PUBLISHERDATATYPE_UINT16:
-            rv = UA_UInt16_encodeBinary(&(src->publisherId.publisherIdUInt16), bufPos, bufEnd);
-            break;
-
-        case UA_PUBLISHERDATATYPE_UINT32:
-            rv = UA_UInt32_encodeBinary(&(src->publisherId.publisherIdUInt32), bufPos, bufEnd);
-            break;
-
-        case UA_PUBLISHERDATATYPE_UINT64:
-            rv = UA_UInt64_encodeBinary(&(src->publisherId.publisherIdUInt64), bufPos, bufEnd);
-            break;
-
-        case UA_PUBLISHERDATATYPE_STRING:
-            rv = UA_String_encodeBinary(&(src->publisherId.publisherIdString), bufPos, bufEnd);
-            break;
-
-        default:
-            rv = UA_STATUSCODE_BADINTERNALERROR;
-            break;
-        }
-    
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    // DataSetClassId
-    if(src->dataSetClassIdEnabled) {
-        rv = UA_Guid_encodeBinary(&(src->dataSetClassId), bufPos, bufEnd);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    // Group Header
-    if(src->groupHeaderEnabled) {
-        v = 0;
-
-        if(src->groupHeader.writerGroupIdEnabled)
-            v |= GROUP_HEADER_WRITER_GROUPID_ENABLED;
-
-        if(src->groupHeader.groupVersionEnabled)
-            v |= GROUP_HEADER_GROUP_VERSION_ENABLED;
-
-        if(src->groupHeader.networkMessageNumberEnabled)
-            v |= GROUP_HEADER_NM_NUMBER_ENABLED;
-
-        if(src->groupHeader.sequenceNumberEnabled)
-            v |= GROUP_HEADER_SEQUENCE_NUMBER_ENABLED;
-
-        rv = UA_Byte_encodeBinary(&v, bufPos, bufEnd);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-
-        if(src->groupHeader.writerGroupIdEnabled) {
-            rv = UA_UInt16_encodeBinary(&(src->groupHeader.writerGroupId), bufPos, bufEnd);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-
-        if(src->groupHeader.groupVersionEnabled) { 
-            rv = UA_UInt32_encodeBinary(&(src->groupHeader.groupVersion), bufPos, bufEnd);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-
-        if(src->groupHeader.networkMessageNumberEnabled) {
-            rv = UA_UInt16_encodeBinary(&(src->groupHeader.networkMessageNumber), bufPos, bufEnd);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-
-        if(src->groupHeader.sequenceNumberEnabled) {
-            rv = UA_UInt16_encodeBinary(&(src->groupHeader.sequenceNumber), bufPos, bufEnd);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-    }
-
-    // Payload-Header
-    if(src->payloadHeaderEnabled) {
-        if(src->networkMessageType != UA_NETWORKMESSAGE_DATASET)
-            return UA_STATUSCODE_BADNOTIMPLEMENTED;
-            
-        rv = UA_Byte_encodeBinary(&(src->payloadHeader.dataSetPayloadHeader.count), bufPos, bufEnd);
-
-        if(src->payloadHeader.dataSetPayloadHeader.dataSetWriterIds == NULL)
-            return UA_STATUSCODE_BADENCODINGERROR;
-            
-        for(UA_Byte i = 0; i < src->payloadHeader.dataSetPayloadHeader.count; i++) {
-            rv = UA_UInt16_encodeBinary(&(src->payloadHeader.dataSetPayloadHeader.dataSetWriterIds[i]),
-                                        bufPos, bufEnd);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-    }
-
-    // Timestamp
-    if(src->timestampEnabled)
-        rv = UA_DateTime_encodeBinary(&(src->timestamp), bufPos, bufEnd);
-
-    // Picoseconds
-    if(src->picosecondsEnabled)
-        rv = UA_UInt16_encodeBinary(&(src->picoseconds), bufPos, bufEnd);
-
-    // PromotedFields
-    if(src->promotedFieldsEnabled) {
-        /* Size (calculate & encode) */
-        UA_UInt16 pfSize = 0;
-        for(UA_UInt16 i = 0; i < src->promotedFieldsSize; i++)
-            pfSize = (UA_UInt16) (pfSize + UA_Variant_calcSizeBinary(&src->promotedFields[i]));
-        rv |= UA_UInt16_encodeBinary(&pfSize, bufPos, bufEnd);
-
-        for (UA_UInt16 i = 0; i < src->promotedFieldsSize; i++)
-            rv |= UA_Variant_encodeBinary(&(src->promotedFields[i]), bufPos, bufEnd);
-    }
-
-    // SecurityHeader
-    if(src->securityEnabled) {
-        // SecurityFlags
-        v = 0;
-        if(src->securityHeader.networkMessageSigned)
-            v |= SECURITY_HEADER_NM_SIGNED;
-
-        if(src->securityHeader.networkMessageEncrypted)
-            v |= SECURITY_HEADER_NM_ENCRYPTED;
-
-        if(src->securityHeader.securityFooterEnabled)
-            v |= SECURITY_HEADER_SEC_FOOTER_ENABLED;
-
-        if(src->securityHeader.forceKeyReset)
-            v |= SECURITY_HEADER_FORCE_KEY_RESET;
-
-        rv = UA_Byte_encodeBinary(&v, bufPos, bufEnd);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-
-        // SecurityTokenId
-        rv = UA_UInt32_encodeBinary(&src->securityHeader.securityTokenId, bufPos, bufEnd);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-
-        // NonceLength
-        rv = UA_Byte_encodeBinary(&src->securityHeader.nonceLength, bufPos, bufEnd);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-
-        // MessageNonce
-        for (UA_Byte i = 0; i < src->securityHeader.nonceLength; i++) {
-            rv = UA_Byte_encodeBinary(&(src->securityHeader.messageNonce.data[i]), bufPos, bufEnd);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-
-        // SecurityFooterSize
-        if(src->securityHeader.securityFooterEnabled) {
-            rv = UA_UInt16_encodeBinary(&src->securityHeader.securityFooterSize, bufPos, bufEnd);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-    }
-
-    // Payload
-    if(src->networkMessageType != UA_NETWORKMESSAGE_DATASET)
-        return UA_STATUSCODE_BADNOTIMPLEMENTED;
-        
-    UA_Byte count = 1;
-
-    if(src->payloadHeaderEnabled) {
-        count = src->payloadHeader.dataSetPayloadHeader.count;
-        if(count > 1) {
-            for (UA_Byte i = 0; i < count; i++) {
-                // initially calculate the size, if not specified
-                UA_UInt16 sz = 0;
-                if((src->payload.dataSetPayload.sizes != NULL) &&
-                   (src->payload.dataSetPayload.sizes[i] != 0)) {
-                    sz = src->payload.dataSetPayload.sizes[i];
-                } else {
-                    sz = (UA_UInt16)UA_DataSetMessage_calcSizeBinary(&src->payload.dataSetPayload.dataSetMessages[i]);
-                }
-
-                rv = UA_UInt16_encodeBinary(&sz, bufPos, bufEnd);
-                if(rv != UA_STATUSCODE_GOOD)
-                    return rv;
-            }
-        }
-    }
-
-    for(UA_Byte i = 0; i < count; i++) {
-        rv = UA_DataSetMessage_encodeBinary(&(src->payload.dataSetPayload.dataSetMessages[i]), bufPos, bufEnd);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    if(src->securityEnabled) {
-        // SecurityFooter
-        if(src->securityHeader.securityFooterEnabled) {
-            for(UA_Byte i = 0; i < src->securityHeader.securityFooterSize; i++) {
-                rv = UA_Byte_encodeBinary(&(src->securityFooter.data[i]), bufPos, bufEnd);
-                if(rv != UA_STATUSCODE_GOOD)
-                    return rv;
-            }
-        }
-
-        // Signature
-        if(src->securityHeader.networkMessageSigned) {
-            rv = UA_ByteString_encodeBinary(&(src->signature), bufPos, bufEnd);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-UA_NetworkMessage_decodeBinaryInternal(const UA_ByteString *src, size_t *offset,
-                                       UA_NetworkMessage* dst) {
-    memset(dst, 0, sizeof(UA_NetworkMessage));
-    UA_Byte v = 0;
-    UA_StatusCode rv = UA_Byte_decodeBinary(src, offset, &v);
-    if(rv != UA_STATUSCODE_GOOD)
-        return rv;
-
-    dst->version = v & NM_VERSION_MASK;
-    
-    if((v & NM_PUBLISHER_ID_ENABLED_MASK) != 0)
-        dst->publisherIdEnabled = true;
-
-    if((v & NM_GROUP_HEADER_ENABLED_MASK) != 0)
-        dst->groupHeaderEnabled = true;
-
-    if((v & NM_PAYLOAD_HEADER_ENABLED_MASK) != 0)
-        dst->payloadHeaderEnabled = true;
-    
-    if((v & NM_EXTENDEDFLAGS1_ENABLED_MASK) != 0) {
-        v = 0;
-        rv = UA_Byte_decodeBinary(src, offset, &v);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-
-        dst->publisherIdType = (UA_PublisherIdDatatype)(v & NM_PUBLISHER_ID_MASK);
-        if((v & NM_DATASET_CLASSID_ENABLED_MASK) != 0)
-            dst->dataSetClassIdEnabled = true;
-
-        if((v & NM_SECURITY_ENABLED_MASK) != 0)
-            dst->securityEnabled = true;
-
-        if((v & NM_TIMESTAMP_ENABLED_MASK) != 0)
-            dst->timestampEnabled = true;
-
-        if((v & NM_PICOSECONDS_ENABLED_MASK) != 0)
-            dst->picosecondsEnabled = true;
-
-        if((v & NM_EXTENDEDFLAGS2_ENABLED_MASK) != 0) {
-            v = 0;
-            rv = UA_Byte_decodeBinary(src, offset, &v);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-
-            if((v & NM_CHUNK_MESSAGE_MASK) != 0)
-                dst->chunkMessage = true;
-
-            if((v & NM_PROMOTEDFIELDS_ENABLED_MASK) != 0)
-                dst->promotedFieldsEnabled = true;
-
-            v = v & NM_NETWORK_MSG_TYPE_MASK;
-            v = (UA_Byte) (v >> NM_SHIFT_LEN);
-            dst->networkMessageType = (UA_NetworkMessageType)v;
-        }
-    }
-
-    if(dst->publisherIdEnabled) {
-        switch (dst->publisherIdType) {
-        case UA_PUBLISHERDATATYPE_BYTE:
-            rv = UA_Byte_decodeBinary(src, offset, &(dst->publisherId.publisherIdByte));
-            break;
-
-        case UA_PUBLISHERDATATYPE_UINT16:
-            rv = UA_UInt16_decodeBinary(src, offset, &(dst->publisherId.publisherIdUInt16));
-            break;
-
-        case UA_PUBLISHERDATATYPE_UINT32:
-            rv = UA_UInt32_decodeBinary(src, offset, &(dst->publisherId.publisherIdUInt32));
-            break;
-
-        case UA_PUBLISHERDATATYPE_UINT64:
-            rv = UA_UInt64_decodeBinary(src, offset, &(dst->publisherId.publisherIdUInt64));
-            break;
-
-        case UA_PUBLISHERDATATYPE_STRING:
-            rv = UA_String_decodeBinary(src, offset, &(dst->publisherId.publisherIdString));
-            break;
-
-        default:
-            rv = UA_STATUSCODE_BADINTERNALERROR;
-            break;
-        }
-
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    if(dst->dataSetClassIdEnabled) {
-        rv = UA_Guid_decodeBinary(src, offset, &(dst->dataSetClassId));
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    // GroupHeader
-    if(dst->groupHeaderEnabled) { 
-        v = 0;
-        rv = UA_Byte_decodeBinary(src, offset, &v);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-
-        if((v & GROUP_HEADER_WRITER_GROUPID_ENABLED) != 0)
-            dst->groupHeader.writerGroupIdEnabled = true;
-
-        if((v & GROUP_HEADER_GROUP_VERSION_ENABLED) != 0)
-            dst->groupHeader.groupVersionEnabled = true;
-
-        if((v & GROUP_HEADER_NM_NUMBER_ENABLED) != 0)
-            dst->groupHeader.networkMessageNumberEnabled = true;
-
-        if((v & GROUP_HEADER_SEQUENCE_NUMBER_ENABLED) != 0)
-            dst->groupHeader.sequenceNumberEnabled = true;
-
-        if(dst->groupHeader.writerGroupIdEnabled) {
-            rv = UA_UInt16_decodeBinary(src, offset, &dst->groupHeader.writerGroupId);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-
-        if(dst->groupHeader.groupVersionEnabled) {
-            rv = UA_UInt32_decodeBinary(src, offset, &dst->groupHeader.groupVersion);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-
-        if(dst->groupHeader.networkMessageNumberEnabled) {
-            rv = UA_UInt16_decodeBinary(src, offset, &dst->groupHeader.networkMessageNumber);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-
-        if(dst->groupHeader.sequenceNumberEnabled) {
-            rv = UA_UInt16_decodeBinary(src, offset, &dst->groupHeader.sequenceNumber);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-    }
-
-    // Payload-Header
-    if(dst->payloadHeaderEnabled) {
-        if(dst->networkMessageType != UA_NETWORKMESSAGE_DATASET)
-            return UA_STATUSCODE_BADNOTIMPLEMENTED;
-
-        rv = UA_Byte_decodeBinary(src, offset, &dst->payloadHeader.dataSetPayloadHeader.count);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-
-        dst->payloadHeader.dataSetPayloadHeader.dataSetWriterIds =
-            (UA_UInt16 *)UA_Array_new(dst->payloadHeader.dataSetPayloadHeader.count,
-                                      &UA_TYPES[UA_TYPES_UINT16]);
-        for (UA_Byte i = 0; i < dst->payloadHeader.dataSetPayloadHeader.count; i++) {
-            rv = UA_UInt16_decodeBinary(src, offset,
-                                        &dst->payloadHeader.dataSetPayloadHeader.dataSetWriterIds[i]);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-    }
-
-    // Timestamp
-    if(dst->timestampEnabled) {
-        rv = UA_DateTime_decodeBinary(src, offset, &(dst->timestamp));
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    // Picoseconds
-    if(dst->picosecondsEnabled) {
-        rv = UA_UInt16_decodeBinary(src, offset, &(dst->picoseconds));
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    // PromotedFields 
-    if(dst->promotedFieldsEnabled) {
-        // Size
-        UA_UInt16 promotedFieldsSize = 0;
-        rv = UA_UInt16_decodeBinary(src, offset, &promotedFieldsSize);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-
-        // promotedFieldsSize: here size in Byte, not the number of objects!
-        if(promotedFieldsSize > 0) {
-            // store offset, later compared with promotedFieldsSize 
-            size_t offsetEnd = (*offset) + promotedFieldsSize;
-
-            unsigned int counter = 0;
-            do {
-                if(counter == 0) {
-                    dst->promotedFields = (UA_Variant*)UA_malloc(UA_TYPES[UA_TYPES_VARIANT].memSize);
-                    // set promotedFieldsSize to the number of objects
-                    dst->promotedFieldsSize = (UA_UInt16) (counter + 1);
-                } else {
-                    dst->promotedFields = (UA_Variant*)
-                        UA_realloc(dst->promotedFields,
-                                   UA_TYPES[UA_TYPES_VARIANT].memSize * (counter + 1));
-                    // set promotedFieldsSize to the number of objects
-                    dst->promotedFieldsSize = (UA_UInt16) (counter + 1);
-                }
-
-                UA_Variant_init(&dst->promotedFields[counter]);
-                rv = UA_Variant_decodeBinary(src, offset, &dst->promotedFields[counter]);
-                if(rv != UA_STATUSCODE_GOOD)
-                    return rv;
-                counter++;
-            } while ((*offset) < offsetEnd);
-        }
-    }
-
-    // SecurityHeader
-    if(dst->securityEnabled) {
-        // SecurityFlags
-        v = 0;
-        rv = UA_Byte_decodeBinary(src, offset, &v);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-
-        if((v & SECURITY_HEADER_NM_SIGNED) != 0)
-            dst->securityHeader.networkMessageSigned = true;
-
-        if((v & SECURITY_HEADER_NM_ENCRYPTED) != 0)
-            dst->securityHeader.networkMessageEncrypted = true;
-
-        if((v & SECURITY_HEADER_SEC_FOOTER_ENABLED) != 0)
-            dst->securityHeader.securityFooterEnabled = true;
-
-        if((v & SECURITY_HEADER_FORCE_KEY_RESET) != 0)
-            dst->securityHeader.forceKeyReset = true;
-
-        // SecurityTokenId
-        rv = UA_UInt32_decodeBinary(src, offset, &dst->securityHeader.securityTokenId);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-
-        // NonceLength
-        rv = UA_Byte_decodeBinary(src, offset, &dst->securityHeader.nonceLength);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-
-        // MessageNonce
-        if(dst->securityHeader.nonceLength > 0) {
-            rv = UA_ByteString_allocBuffer(&dst->securityHeader.messageNonce,
-                                           dst->securityHeader.nonceLength);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-
-            for (UA_Byte i = 0; i < dst->securityHeader.nonceLength; i++) {
-                rv = UA_Byte_decodeBinary(src, offset, &(dst->securityHeader.messageNonce.data[i]));
-                if(rv != UA_STATUSCODE_GOOD)
-                    return rv;
-            }
-        }
-
-        // SecurityFooterSize
-        if(dst->securityHeader.securityFooterEnabled) {
-            rv = UA_UInt16_decodeBinary(src, offset, &dst->securityHeader.securityFooterSize);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-    }
-
-    // Payload
-    if(dst->networkMessageType != UA_NETWORKMESSAGE_DATASET)
-        return UA_STATUSCODE_BADNOTIMPLEMENTED;
-
-    UA_Byte count = 1;
-    if(dst->payloadHeaderEnabled) {
-        count = dst->payloadHeader.dataSetPayloadHeader.count;
-        if(count > 1) {
-            dst->payload.dataSetPayload.sizes = (UA_UInt16 *)UA_Array_new(count, &UA_TYPES[UA_TYPES_UINT16]);
-            for (UA_Byte i = 0; i < count; i++) {
-                rv = UA_UInt16_decodeBinary(src, offset, &(dst->payload.dataSetPayload.sizes[i]));
-                if(rv != UA_STATUSCODE_GOOD)
-                    return rv;
-            }
-        }
-    }
-
-    dst->payload.dataSetPayload.dataSetMessages = (UA_DataSetMessage*)
-        UA_calloc(count, sizeof(UA_DataSetMessage));
-    for(UA_Byte i = 0; i < count; i++) {
-        rv = UA_DataSetMessage_decodeBinary(src, offset, &(dst->payload.dataSetPayload.dataSetMessages[i]));
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    if(rv != UA_STATUSCODE_GOOD)
-        return rv;
-
-    if(dst->securityEnabled) {
-        // SecurityFooter
-        if(dst->securityHeader.securityFooterEnabled && (dst->securityHeader.securityFooterSize > 0)) {
-            rv = UA_ByteString_allocBuffer(&dst->securityFooter, dst->securityHeader.securityFooterSize);
-            if (rv != UA_STATUSCODE_GOOD)
-                return rv;
-
-            for (UA_Byte i = 0; i < dst->securityHeader.securityFooterSize; i++) {
-                rv = UA_Byte_decodeBinary(src, offset, &(dst->securityFooter.data[i]));
-                if (rv != UA_STATUSCODE_GOOD)
-                    return rv;
-            }
-        }
-
-        // Signature
-        if(dst->securityHeader.networkMessageSigned) {
-            rv = UA_ByteString_decodeBinary(src, offset, &(dst->signature));
-            if (rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_NetworkMessage_decodeBinary(const UA_ByteString *src, size_t *offset, UA_NetworkMessage* dst) {
-    UA_StatusCode retval = UA_NetworkMessage_decodeBinaryInternal(src, offset, dst);
-
-    if(retval != UA_STATUSCODE_GOOD)
-        UA_NetworkMessage_deleteMembers(dst);
-
-    return retval;
-}
-
-size_t UA_NetworkMessage_calcSizeBinary(const UA_NetworkMessage* p) {
-    size_t retval = 0;
-    UA_Byte byte;
-    size_t size = UA_Byte_calcSizeBinary(&byte); // UADPVersion + UADPFlags
-    if(UA_NetworkMessage_ExtendedFlags1Enabled(p)) {
-        size += UA_Byte_calcSizeBinary(&byte);
-        if(UA_NetworkMessage_ExtendedFlags2Enabled(p))
-            size += UA_Byte_calcSizeBinary(&byte);
-    }
-
-    if(p->publisherIdEnabled) {
-        switch (p->publisherIdType) {
-        case UA_PUBLISHERDATATYPE_BYTE:
-            size += UA_Byte_calcSizeBinary(&p->publisherId.publisherIdByte);
-            break;
-
-        case UA_PUBLISHERDATATYPE_UINT16:
-            size += UA_UInt16_calcSizeBinary(&p->publisherId.publisherIdUInt16);
-            break;
-
-        case UA_PUBLISHERDATATYPE_UINT32:
-            size += UA_UInt32_calcSizeBinary(&p->publisherId.publisherIdUInt32);
-            break;
-
-        case UA_PUBLISHERDATATYPE_UINT64:
-            size += UA_UInt64_calcSizeBinary(&p->publisherId.publisherIdUInt64);
-            break;
-
-        case UA_PUBLISHERDATATYPE_STRING:
-            size += UA_String_calcSizeBinary(&p->publisherId.publisherIdString);
-            break;
-        }
-    }
-
-    if(p->dataSetClassIdEnabled)
-        size += UA_Guid_calcSizeBinary(&p->dataSetClassId);
-
-    // Group Header 
-    if(p->groupHeaderEnabled) {
-        size += UA_Byte_calcSizeBinary(&byte);
-
-        if(p->groupHeader.writerGroupIdEnabled)
-            size += UA_UInt16_calcSizeBinary(&p->groupHeader.writerGroupId);
-
-        if(p->groupHeader.groupVersionEnabled)
-            size += UA_UInt32_calcSizeBinary(&p->groupHeader.groupVersion);
-
-        if(p->groupHeader.networkMessageNumberEnabled)
-            size += UA_UInt16_calcSizeBinary(&p->groupHeader.networkMessageNumber);
-
-        if(p->groupHeader.sequenceNumberEnabled)
-            size += UA_UInt16_calcSizeBinary(&p->groupHeader.sequenceNumber);
-    }
-
-    // Payload Header
-    if(p->payloadHeaderEnabled) {
-        if(p->networkMessageType == UA_NETWORKMESSAGE_DATASET) {
-            size += UA_Byte_calcSizeBinary(&p->payloadHeader.dataSetPayloadHeader.count);
-            if(p->payloadHeader.dataSetPayloadHeader.dataSetWriterIds != NULL) {
-                size += UA_UInt16_calcSizeBinary(&p->payloadHeader.dataSetPayloadHeader.dataSetWriterIds[0]) *
-                    p->payloadHeader.dataSetPayloadHeader.count;
-            } else {
-                return 0; /* no dataSetWriterIds given! */
-            }
-        } else {
-            // not implemented
-        }
-    }
-
-    if(p->timestampEnabled)
-        size += UA_DateTime_calcSizeBinary(&p->timestamp);
-
-    if(p->picosecondsEnabled)
-        size += UA_UInt16_calcSizeBinary(&p->picoseconds);
-
-    if(p->promotedFieldsEnabled) { 
-        size += UA_UInt16_calcSizeBinary(&p->promotedFieldsSize);
-        for (UA_UInt16 i = 0; i < p->promotedFieldsSize; i++)
-            size += UA_Variant_calcSizeBinary(&p->promotedFields[i]);
-    }
-
-    if(p->securityEnabled) {
-        size += UA_Byte_calcSizeBinary(&byte);
-        size += UA_UInt32_calcSizeBinary(&p->securityHeader.securityTokenId);
-        size += UA_Byte_calcSizeBinary(&p->securityHeader.nonceLength);
-        if(p->securityHeader.nonceLength > 0)
-            size += (UA_Byte_calcSizeBinary(&p->securityHeader.messageNonce.data[0]) * p->securityHeader.nonceLength);
-        if(p->securityHeader.securityFooterEnabled)
-            size += UA_UInt16_calcSizeBinary(&p->securityHeader.securityFooterSize);
-    }
-    
-    if(p->networkMessageType == UA_NETWORKMESSAGE_DATASET) {
-        UA_Byte count = 1;
-        if(p->payloadHeaderEnabled) {
-            count = p->payloadHeader.dataSetPayloadHeader.count;
-            if(count > 1)
-                size += UA_UInt16_calcSizeBinary(&(p->payload.dataSetPayload.sizes[0])) * count;
-        }
-
-        for (size_t i = 0; i < count; i++)
-            size += UA_DataSetMessage_calcSizeBinary(&(p->payload.dataSetPayload.dataSetMessages[i]));
-    }
-
-    if (p->securityEnabled) {
-        if (p->securityHeader.securityFooterEnabled)
-            size += p->securityHeader.securityFooterSize;
-
-        if (p->securityHeader.networkMessageSigned)
-            size += UA_ByteString_calcSizeBinary(&p->signature);
-    }
-
-    retval = size;
-    return retval;
-}
-
-void
-UA_NetworkMessage_deleteMembers(UA_NetworkMessage* p) {
-    if(p->promotedFieldsEnabled)
-        UA_Array_delete(p->promotedFields, p->promotedFieldsSize, &UA_TYPES[UA_TYPES_VARIANT]);
-
-    if(p->securityEnabled && (p->securityHeader.nonceLength > 0))
-        UA_ByteString_deleteMembers(&p->securityHeader.messageNonce);
-
-    if(p->networkMessageType == UA_NETWORKMESSAGE_DATASET) {
-        if(p->payloadHeaderEnabled) {
-            if(p->payloadHeader.dataSetPayloadHeader.dataSetWriterIds != NULL) {
-                UA_Array_delete(p->payloadHeader.dataSetPayloadHeader.dataSetWriterIds,
-                                p->payloadHeader.dataSetPayloadHeader.count, &UA_TYPES[UA_TYPES_UINT16]);
-            }
-
-            if(p->payload.dataSetPayload.sizes != NULL) { 
-                UA_Array_delete(p->payload.dataSetPayload.sizes,
-                                p->payloadHeader.dataSetPayloadHeader.count, &UA_TYPES[UA_TYPES_UINT16]);
-            }
-        }
-
-        if(p->payload.dataSetPayload.dataSetMessages != NULL) {
-            UA_Byte count = 1;
-            if(p->payloadHeaderEnabled)
-                count = p->payloadHeader.dataSetPayloadHeader.count;
-            
-            for (size_t i = 0; i < count; i++)
-                UA_DataSetMessage_free(&(p->payload.dataSetPayload.dataSetMessages[i]));
-
-            UA_free(p->payload.dataSetPayload.dataSetMessages);
-        }
-    }
-
-    if(p->securityHeader.securityFooterEnabled && (p->securityHeader.securityFooterSize > 0))
-        UA_ByteString_deleteMembers(&p->securityFooter);
-
-    if(p->messageIdEnabled){
-           UA_String_deleteMembers(&p->messageId);
-    }
-
-    if(p->publisherIdEnabled && p->publisherIdType == UA_PUBLISHERDATATYPE_STRING){
-       UA_String_deleteMembers(&p->publisherId.publisherIdString);
-    }
-
-    memset(p, 0, sizeof(UA_NetworkMessage));
-}
-
-void UA_NetworkMessage_delete(UA_NetworkMessage* p) {
-    UA_NetworkMessage_deleteMembers(p);
-}
-
-UA_Boolean
-UA_NetworkMessage_ExtendedFlags1Enabled(const UA_NetworkMessage* src) {
-    UA_Boolean retval = false;
-
-    if((src->publisherIdType != UA_PUBLISHERDATATYPE_BYTE) 
-        || src->dataSetClassIdEnabled 
-        || src->securityEnabled 
-        || src->timestampEnabled 
-        || src->picosecondsEnabled
-        || UA_NetworkMessage_ExtendedFlags2Enabled(src))
-    {
-        retval = true;
-    }
-
-    return retval;
-}
-
-UA_Boolean
-UA_NetworkMessage_ExtendedFlags2Enabled(const UA_NetworkMessage* src) {
-    if(src->chunkMessage || src->promotedFieldsEnabled ||
-       src->networkMessageType != UA_NETWORKMESSAGE_DATASET)
-        return true;
-    return false;
-}
-
-UA_Boolean
-UA_DataSetMessageHeader_DataSetFlags2Enabled(const UA_DataSetMessageHeader* src) {
-    if(src->dataSetMessageType != UA_DATASETMESSAGE_DATAKEYFRAME ||
-       src->timestampEnabled || src->picoSecondsIncluded)
-        return true;
-    return false;
-}
-
-UA_StatusCode
-UA_DataSetMessageHeader_encodeBinary(const UA_DataSetMessageHeader* src, UA_Byte **bufPos,
-                                     const UA_Byte *bufEnd) {
-    UA_Byte v;
-    // DataSetFlags1 
-    v = (UA_Byte)src->fieldEncoding;
-    // shift left 1 bit
-    v = (UA_Byte)(v << DS_MH_SHIFT_LEN);
-
-    if(src->dataSetMessageValid)
-        v |= DS_MESSAGEHEADER_DS_MSG_VALID;
-
-    if(src->dataSetMessageSequenceNrEnabled)
-        v |= DS_MESSAGEHEADER_SEQ_NR_ENABLED_MASK;
-
-    if(src->statusEnabled)
-        v |= DS_MESSAGEHEADER_STATUS_ENABLED_MASK;
-
-    if(src->configVersionMajorVersionEnabled)
-        v |= DS_MESSAGEHEADER_CONFIGMAJORVERSION_ENABLED_MASK;
-
-    if(src->configVersionMinorVersionEnabled)
-        v |= DS_MESSAGEHEADER_CONFIGMINORVERSION_ENABLED_MASK;
-
-    if(UA_DataSetMessageHeader_DataSetFlags2Enabled(src))
-        v |= DS_MESSAGEHEADER_FLAGS2_ENABLED_MASK;
-
-    UA_StatusCode rv = UA_Byte_encodeBinary(&v, bufPos, bufEnd);
-    if(rv != UA_STATUSCODE_GOOD)
-        return rv;
-    
-    // DataSetFlags2
-    if(UA_DataSetMessageHeader_DataSetFlags2Enabled(src)) {
-        v = (UA_Byte)src->dataSetMessageType;
-
-        if(src->timestampEnabled)
-            v |= DS_MESSAGEHEADER_TIMESTAMP_ENABLED_MASK;
-
-        if(src->picoSecondsIncluded)
-            v |= DS_MESSAGEHEADER_PICOSECONDS_INCLUDED_MASK;
-
-        rv = UA_Byte_encodeBinary(&v, bufPos, bufEnd);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    // DataSetMessageSequenceNr
-    if(src->dataSetMessageSequenceNrEnabled) { 
-        rv = UA_UInt16_encodeBinary(&src->dataSetMessageSequenceNr, bufPos, bufEnd);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    // Timestamp
-    if(src->timestampEnabled) {
-        rv = UA_DateTime_encodeBinary(&(src->timestamp), bufPos, bufEnd); /* UtcTime */
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    // PicoSeconds
-    if(src->picoSecondsIncluded) {
-        rv = UA_UInt16_encodeBinary(&(src->picoSeconds), bufPos, bufEnd);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    // Status
-    if(src->statusEnabled) {
-        rv = UA_UInt16_encodeBinary(&(src->status), bufPos, bufEnd);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    // ConfigVersionMajorVersion
-    if(src->configVersionMajorVersionEnabled) {
-        rv = UA_UInt32_encodeBinary(&(src->configVersionMajorVersion), bufPos, bufEnd);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    // ConfigVersionMinorVersion
-    if(src->configVersionMinorVersionEnabled) {
-        rv = UA_UInt32_encodeBinary(&(src->configVersionMinorVersion), bufPos, bufEnd);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_DataSetMessageHeader_decodeBinary(const UA_ByteString *src, size_t *offset,
-                                     UA_DataSetMessageHeader* dst) {
-    memset(dst, 0, sizeof(UA_DataSetMessageHeader));
-    UA_Byte v = 0;
-    UA_StatusCode rv = UA_Byte_decodeBinary(src, offset, &v);
-    if(rv != UA_STATUSCODE_GOOD)
-        return rv;
-
-    UA_Byte v2 = v & DS_MESSAGEHEADER_FIELD_ENCODING_MASK;
-    v2 = (UA_Byte)(v2 >> DS_MH_SHIFT_LEN);
-    dst->fieldEncoding = (UA_FieldEncoding)v2;
-    
-    if((v & DS_MESSAGEHEADER_DS_MSG_VALID) != 0)
-        dst->dataSetMessageValid = true;
-
-    if((v & DS_MESSAGEHEADER_SEQ_NR_ENABLED_MASK) != 0)
-        dst->dataSetMessageSequenceNrEnabled = true;
-
-    if((v & DS_MESSAGEHEADER_STATUS_ENABLED_MASK) != 0)
-        dst->statusEnabled = true;
-
-    if((v & DS_MESSAGEHEADER_CONFIGMAJORVERSION_ENABLED_MASK) != 0)
-        dst->configVersionMajorVersionEnabled = true;
-
-    if((v & DS_MESSAGEHEADER_CONFIGMINORVERSION_ENABLED_MASK) != 0)
-        dst->configVersionMinorVersionEnabled = true;
-
-    if((v & DS_MESSAGEHEADER_FLAGS2_ENABLED_MASK) != 0) {
-        v = 0;
-        rv = UA_Byte_decodeBinary(src, offset, &v);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-        
-        dst->dataSetMessageType = (UA_DataSetMessageType)(v & DS_MESSAGEHEADER_DS_MESSAGE_TYPE_MASK);
-
-        if((v & DS_MESSAGEHEADER_TIMESTAMP_ENABLED_MASK) != 0)
-            dst->timestampEnabled = true;
-
-        if((v & DS_MESSAGEHEADER_PICOSECONDS_INCLUDED_MASK) != 0)
-            dst->picoSecondsIncluded = true;
-    } else {
-        dst->dataSetMessageType = UA_DATASETMESSAGE_DATAKEYFRAME;
-        dst->picoSecondsIncluded = false;
-    }
-
-    if(dst->dataSetMessageSequenceNrEnabled) {
-        rv = UA_UInt16_decodeBinary(src, offset, &dst->dataSetMessageSequenceNr);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    } else {
-        dst->dataSetMessageSequenceNr = 0;
-    }
-
-    if(dst->timestampEnabled) {
-        rv = UA_DateTime_decodeBinary(src, offset, &dst->timestamp); /* UtcTime */
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    } else {
-        dst->timestamp = 0;
-    }
-
-    if(dst->picoSecondsIncluded) {
-        rv = UA_UInt16_decodeBinary(src, offset, &dst->picoSeconds);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    } else {
-        dst->picoSeconds = 0;
-    }
-
-    if(dst->statusEnabled) {
-        rv = UA_UInt16_decodeBinary(src, offset, &dst->status);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    } else {
-        dst->status = 0;
-    }
-
-    if(dst->configVersionMajorVersionEnabled) {
-        rv = UA_UInt32_decodeBinary(src, offset, &dst->configVersionMajorVersion);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    } else {
-        dst->configVersionMajorVersion = 0;
-    }
-
-    if(dst->configVersionMinorVersionEnabled) {
-        rv = UA_UInt32_decodeBinary(src, offset, &dst->configVersionMinorVersion);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    } else {
-        dst->configVersionMinorVersion = 0;
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-size_t
-UA_DataSetMessageHeader_calcSizeBinary(const UA_DataSetMessageHeader* p) {
-    UA_Byte byte;
-    size_t size = UA_Byte_calcSizeBinary(&byte); // DataSetMessage Type + Flags
-    if(UA_DataSetMessageHeader_DataSetFlags2Enabled(p))
-        size += UA_Byte_calcSizeBinary(&byte);
-
-    if(p->dataSetMessageSequenceNrEnabled)
-        size += UA_UInt16_calcSizeBinary(&p->dataSetMessageSequenceNr);
-
-    if(p->timestampEnabled)
-        size += UA_DateTime_calcSizeBinary(&p->timestamp); /* UtcTime */
-
-    if(p->picoSecondsIncluded)
-        size += UA_UInt16_calcSizeBinary(&p->picoSeconds);
-
-    if(p->statusEnabled)
-        size += UA_UInt16_calcSizeBinary(&p->status);
-
-    if(p->configVersionMajorVersionEnabled)
-        size += UA_UInt32_calcSizeBinary(&p->configVersionMajorVersion);
-
-    if(p->configVersionMinorVersionEnabled)
-        size += UA_UInt32_calcSizeBinary(&p->configVersionMinorVersion);
-
-    return size;
-}
-
-UA_StatusCode
-UA_DataSetMessage_encodeBinary(const UA_DataSetMessage* src, UA_Byte **bufPos,
-                               const UA_Byte *bufEnd) {
-    UA_StatusCode rv = UA_DataSetMessageHeader_encodeBinary(&src->header, bufPos, bufEnd);
-    if(rv != UA_STATUSCODE_GOOD)
-        return rv;
-
-    if(src->header.dataSetMessageType == UA_DATASETMESSAGE_DATAKEYFRAME) {
-        if(src->header.fieldEncoding != UA_FIELDENCODING_RAWDATA) {
-            rv = UA_UInt16_encodeBinary(&(src->data.keyFrameData.fieldCount), bufPos, bufEnd);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-        }
-
-        if(src->header.fieldEncoding == UA_FIELDENCODING_VARIANT) {
-            for (UA_UInt16 i = 0; i < src->data.keyFrameData.fieldCount; i++) {
-                rv = UA_Variant_encodeBinary(&(src->data.keyFrameData.dataSetFields[i].value), bufPos, bufEnd);
-                if(rv != UA_STATUSCODE_GOOD)
-                    return rv;
-            }
-        } else if(src->header.fieldEncoding == UA_FIELDENCODING_RAWDATA) {
-            return UA_STATUSCODE_BADNOTIMPLEMENTED;
-        } else if(src->header.fieldEncoding == UA_FIELDENCODING_DATAVALUE) {
-            for (UA_UInt16 i = 0; i < src->data.keyFrameData.fieldCount; i++) {
-                rv = UA_DataValue_encodeBinary(&(src->data.keyFrameData.dataSetFields[i]), bufPos, bufEnd);
-                if(rv != UA_STATUSCODE_GOOD)
-                    return rv;
-            }
-        }
-    } else if(src->header.dataSetMessageType == UA_DATASETMESSAGE_DATADELTAFRAME) {
-        // Encode Delta Frame
-        // Here the FieldCount is always present
-        rv = UA_UInt16_encodeBinary(&(src->data.keyFrameData.fieldCount), bufPos, bufEnd);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-
-        if(src->header.fieldEncoding == UA_FIELDENCODING_VARIANT) {
-            for (UA_UInt16 i = 0; i < src->data.deltaFrameData.fieldCount; i++) {
-                rv = UA_UInt16_encodeBinary(&(src->data.deltaFrameData.deltaFrameFields[i].fieldIndex), bufPos, bufEnd);
-                if(rv != UA_STATUSCODE_GOOD)
-                    return rv;
-                
-                rv = UA_Variant_encodeBinary(&(src->data.deltaFrameData.deltaFrameFields[i].fieldValue.value), bufPos, bufEnd);
-                if(rv != UA_STATUSCODE_GOOD)
-                    return rv;
-            }
-        } else if(src->header.fieldEncoding == UA_FIELDENCODING_RAWDATA) {
-            return UA_STATUSCODE_BADNOTIMPLEMENTED;
-        } else if(src->header.fieldEncoding == UA_FIELDENCODING_DATAVALUE) {
-            for (UA_UInt16 i = 0; i < src->data.deltaFrameData.fieldCount; i++) {
-                rv = UA_UInt16_encodeBinary(&(src->data.deltaFrameData.deltaFrameFields[i].fieldIndex), bufPos, bufEnd);
-                if(rv != UA_STATUSCODE_GOOD)
-                    return rv;
-
-                rv = UA_DataValue_encodeBinary(&(src->data.deltaFrameData.deltaFrameFields[i].fieldValue), bufPos, bufEnd);
-                if(rv != UA_STATUSCODE_GOOD)
-                    return rv;
-            }
-        }
-    } else if(src->header.dataSetMessageType != UA_DATASETMESSAGE_KEEPALIVE) {
-        return UA_STATUSCODE_BADNOTIMPLEMENTED;
-    }
-
-    /* Keep-Alive Message contains no Payload Data */
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_DataSetMessage_decodeBinary(const UA_ByteString *src, size_t *offset, UA_DataSetMessage* dst) {
-    memset(dst, 0, sizeof(UA_DataSetMessage));
-    UA_StatusCode rv = UA_DataSetMessageHeader_decodeBinary(src, offset, &dst->header);
-    if(rv != UA_STATUSCODE_GOOD)
-        return rv;
-
-    if(dst->header.dataSetMessageType == UA_DATASETMESSAGE_DATAKEYFRAME) {
-        if(dst->header.fieldEncoding != UA_FIELDENCODING_RAWDATA) {
-            rv = UA_UInt16_decodeBinary(src, offset, &dst->data.keyFrameData.fieldCount);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-
-            if(dst->header.fieldEncoding == UA_FIELDENCODING_VARIANT) {
-                dst->data.keyFrameData.dataSetFields =
-                    (UA_DataValue *)UA_Array_new(dst->data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-                for (UA_UInt16 i = 0; i < dst->data.keyFrameData.fieldCount; i++) {
-                    UA_DataValue_init(&dst->data.keyFrameData.dataSetFields[i]);
-                    rv = UA_Variant_decodeBinary(src, offset, &dst->data.keyFrameData.dataSetFields[i].value);
-                    if(rv != UA_STATUSCODE_GOOD)
-                        return rv;
-                    dst->data.keyFrameData.dataSetFields[i].hasValue = true;
-                }
-            } else if(dst->header.fieldEncoding == UA_FIELDENCODING_RAWDATA) {
-                return UA_STATUSCODE_BADNOTIMPLEMENTED;
-            } else if(dst->header.fieldEncoding == UA_FIELDENCODING_DATAVALUE) {
-                dst->data.keyFrameData.dataSetFields =
-                    (UA_DataValue *)UA_Array_new(dst->data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-                for (UA_UInt16 i = 0; i < dst->data.keyFrameData.fieldCount; i++) {
-                    rv = UA_DataValue_decodeBinary(src, offset, &(dst->data.keyFrameData.dataSetFields[i]));
-                    if(rv != UA_STATUSCODE_GOOD)
-                        return rv;
-                }
-            }
-        }
-    } else if(dst->header.dataSetMessageType == UA_DATASETMESSAGE_DATADELTAFRAME) {
-        if(dst->header.fieldEncoding != UA_FIELDENCODING_RAWDATA) {
-            rv = UA_UInt16_decodeBinary(src, offset, &dst->data.deltaFrameData.fieldCount);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-
-            if(dst->header.fieldEncoding == UA_FIELDENCODING_VARIANT) {
-                size_t memsize = sizeof(UA_DataSetMessage_DeltaFrameField) * dst->data.deltaFrameData.fieldCount;
-                dst->data.deltaFrameData.deltaFrameFields = (UA_DataSetMessage_DeltaFrameField*)UA_malloc(memsize);
-                for (UA_UInt16 i = 0; i < dst->data.deltaFrameData.fieldCount; i++) {
-                    rv = UA_UInt16_decodeBinary(src, offset, &dst->data.deltaFrameData.deltaFrameFields[i].fieldIndex);
-                    if(rv != UA_STATUSCODE_GOOD)
-                        return rv;
-                    
-                    UA_DataValue_init(&dst->data.deltaFrameData.deltaFrameFields[i].fieldValue);
-                    rv = UA_Variant_decodeBinary(src, offset, &dst->data.deltaFrameData.deltaFrameFields[i].fieldValue.value);
-                    if(rv != UA_STATUSCODE_GOOD)
-                        return rv;
-
-                    dst->data.deltaFrameData.deltaFrameFields[i].fieldValue.hasValue = true;
-                }
-            } else if(dst->header.fieldEncoding == UA_FIELDENCODING_RAWDATA) {
-                return UA_STATUSCODE_BADNOTIMPLEMENTED;
-            } else if(dst->header.fieldEncoding == UA_FIELDENCODING_DATAVALUE) {
-                size_t memsize = sizeof(UA_DataSetMessage_DeltaFrameField) * dst->data.deltaFrameData.fieldCount;
-                dst->data.deltaFrameData.deltaFrameFields = (UA_DataSetMessage_DeltaFrameField*)UA_malloc(memsize);
-                for (UA_UInt16 i = 0; i < dst->data.deltaFrameData.fieldCount; i++) {
-                    rv = UA_UInt16_decodeBinary(src, offset, &dst->data.deltaFrameData.deltaFrameFields[i].fieldIndex);
-                    if(rv != UA_STATUSCODE_GOOD)
-                        return rv;
-                    
-                    rv = UA_DataValue_decodeBinary(src, offset, &(dst->data.deltaFrameData.deltaFrameFields[i].fieldValue));
-                    if(rv != UA_STATUSCODE_GOOD)
-                        return rv;
-                }
-            }
-        }
-    } else if(dst->header.dataSetMessageType != UA_DATASETMESSAGE_KEEPALIVE) {
-        return UA_STATUSCODE_BADNOTIMPLEMENTED;
-    }
-
-    /* Keep-Alive Message contains no Payload Data */
-    return UA_STATUSCODE_GOOD;
-}
-
-size_t
-UA_DataSetMessage_calcSizeBinary(const UA_DataSetMessage* p) {
-    size_t size = UA_DataSetMessageHeader_calcSizeBinary(&p->header);
-
-    if(p->header.dataSetMessageType == UA_DATASETMESSAGE_DATAKEYFRAME) {
-        if(p->header.fieldEncoding != UA_FIELDENCODING_RAWDATA)
-            size += UA_calcSizeBinary(&p->data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_UINT16]);
-
-        if(p->header.fieldEncoding == UA_FIELDENCODING_VARIANT) {
-            for (UA_UInt16 i = 0; i < p->data.keyFrameData.fieldCount; i++)
-                size += UA_calcSizeBinary(&p->data.keyFrameData.dataSetFields[i].value, &UA_TYPES[UA_TYPES_VARIANT]);
-        } else if(p->header.fieldEncoding == UA_FIELDENCODING_RAWDATA) {
-            // not implemented
-        } else if(p->header.fieldEncoding == UA_FIELDENCODING_DATAVALUE) {
-            for (UA_UInt16 i = 0; i < p->data.keyFrameData.fieldCount; i++)
-                size += UA_calcSizeBinary(&p->data.keyFrameData.dataSetFields[i], &UA_TYPES[UA_TYPES_DATAVALUE]);
-        }
-    } else if(p->header.dataSetMessageType == UA_DATASETMESSAGE_DATADELTAFRAME) {
-        if(p->header.fieldEncoding != UA_FIELDENCODING_RAWDATA)
-            size += UA_calcSizeBinary(&p->data.deltaFrameData.fieldCount, &UA_TYPES[UA_TYPES_UINT16]);
-
-        if(p->header.fieldEncoding == UA_FIELDENCODING_VARIANT) {
-            for (UA_UInt16 i = 0; i < p->data.deltaFrameData.fieldCount; i++) {
-                size += UA_calcSizeBinary(&p->data.deltaFrameData.deltaFrameFields[i].fieldIndex, &UA_TYPES[UA_TYPES_UINT16]);
-                size += UA_calcSizeBinary(&p->data.deltaFrameData.deltaFrameFields[i].fieldValue.value, &UA_TYPES[UA_TYPES_VARIANT]);
-            }
-        } else if(p->header.fieldEncoding == UA_FIELDENCODING_RAWDATA) {
-            // not implemented
-        } else if(p->header.fieldEncoding == UA_FIELDENCODING_DATAVALUE) {
-            for (UA_UInt16 i = 0; i < p->data.deltaFrameData.fieldCount; i++) {
-                size += UA_calcSizeBinary(&p->data.deltaFrameData.deltaFrameFields[i].fieldIndex, &UA_TYPES[UA_TYPES_UINT16]);
-                size += UA_calcSizeBinary(&p->data.deltaFrameData.deltaFrameFields[i].fieldValue, &UA_TYPES[UA_TYPES_DATAVALUE]);
-            }
-        }
-    }
-
-    /* KeepAlive-Message contains no Payload Data */
-    return size;
-}
-
-void UA_DataSetMessage_free(const UA_DataSetMessage* p) {
-    if(p->header.dataSetMessageType == UA_DATASETMESSAGE_DATAKEYFRAME) {
-        if(p->data.keyFrameData.dataSetFields != NULL)
-            UA_Array_delete(p->data.keyFrameData.dataSetFields, p->data.keyFrameData.fieldCount,
-                            &UA_TYPES[UA_TYPES_DATAVALUE]);
-        /* Json keys */
-        if(p->data.keyFrameData.fieldNames != NULL){
-            UA_Array_delete(p->data.keyFrameData.fieldNames, p->data.keyFrameData.fieldCount,
-                            &UA_TYPES[UA_TYPES_STRING]);
-        }
-    } else if(p->header.dataSetMessageType == UA_DATASETMESSAGE_DATADELTAFRAME) {
-        if(p->data.deltaFrameData.deltaFrameFields != NULL) {
-            for(UA_UInt16 i = 0; i < p->data.deltaFrameData.fieldCount; i++) {
-                if(p->header.fieldEncoding == UA_FIELDENCODING_DATAVALUE) {
-                    UA_DataValue_deleteMembers(&p->data.deltaFrameData.deltaFrameFields[i].fieldValue);
-                } else if(p->header.fieldEncoding == UA_FIELDENCODING_VARIANT) {
-                    UA_Variant_deleteMembers(&p->data.deltaFrameData.deltaFrameFields[i].fieldValue.value);
-                }
-            }
-            UA_free(p->data.deltaFrameData.deltaFrameFields);
-        }
-    }
-}
-#endif /* UA_ENABLE_PUBSUB */
diff --git a/ext/open62541/src/pubsub/ua_pubsub_networkmessage.h b/ext/open62541/src/pubsub/ua_pubsub_networkmessage.h
deleted file mode 100644
index 892fe8d..0000000
--- a/ext/open62541/src/pubsub/ua_pubsub_networkmessage.h
+++ /dev/null
@@ -1,243 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017 - 2018 Fraunhofer IOSB (Author: Tino Bischoff)
- */
-
-#ifndef UA_PUBSUB_NETWORKMESSAGE_H_
-#define UA_PUBSUB_NETWORKMESSAGE_H_
-
-#include <open62541/types.h>
-#include <open62541/types_generated.h>
-
-_UA_BEGIN_DECLS
-
-/* DataSet Payload Header */
-typedef struct {
-    UA_Byte count;
-    UA_UInt16* dataSetWriterIds;
-} UA_DataSetPayloadHeader;
-
-/* FieldEncoding Enum  */
-typedef enum {
-    UA_FIELDENCODING_VARIANT = 0, 
-    UA_FIELDENCODING_RAWDATA = 1,
-    UA_FIELDENCODING_DATAVALUE = 2
-} UA_FieldEncoding;
-
-/* DataSetMessage Type */
-typedef enum {
-    UA_DATASETMESSAGE_DATAKEYFRAME = 0,
-    UA_DATASETMESSAGE_DATADELTAFRAME = 1,
-    UA_DATASETMESSAGE_EVENT = 2, 
-    UA_DATASETMESSAGE_KEEPALIVE = 3
-} UA_DataSetMessageType;
-
-/* DataSetMessage Header */
-typedef struct {
-    UA_Boolean dataSetMessageValid;
-    UA_FieldEncoding fieldEncoding;
-    UA_Boolean dataSetMessageSequenceNrEnabled;
-    UA_Boolean timestampEnabled;
-    UA_Boolean statusEnabled;
-    UA_Boolean configVersionMajorVersionEnabled;
-    UA_Boolean configVersionMinorVersionEnabled;
-    UA_DataSetMessageType dataSetMessageType;
-    UA_Boolean picoSecondsIncluded;
-    UA_UInt16 dataSetMessageSequenceNr;
-    UA_UtcTime timestamp;
-    UA_UInt16 picoSeconds;
-    UA_UInt16 status;
-    UA_UInt32 configVersionMajorVersion;
-    UA_UInt32 configVersionMinorVersion;
-} UA_DataSetMessageHeader;
-
-UA_StatusCode
-UA_DataSetMessageHeader_encodeBinary(const UA_DataSetMessageHeader* src,
-                                     UA_Byte **bufPos, const UA_Byte *bufEnd);
-
-UA_StatusCode
-UA_DataSetMessageHeader_decodeBinary(const UA_ByteString *src, size_t *offset,
-                                     UA_DataSetMessageHeader* dst);
-
-size_t
-UA_DataSetMessageHeader_calcSizeBinary(const UA_DataSetMessageHeader* p);
-
-/**
- * DataSetMessage
- * ^^^^^^^^^^^^^^ */
-
-typedef struct {
-    UA_UInt16 fieldCount;
-    UA_DataValue* dataSetFields;
-    /* Json keys for the dataSetFields: TODO: own dataSetMessageType for json? */
-    UA_String* fieldNames;
-} UA_DataSetMessage_DataKeyFrameData;
-
-typedef struct {
-    UA_UInt16 fieldIndex;
-    UA_DataValue fieldValue;
-} UA_DataSetMessage_DeltaFrameField;
-
-typedef struct {
-    UA_UInt16 fieldCount;
-    UA_DataSetMessage_DeltaFrameField* deltaFrameFields;
-} UA_DataSetMessage_DataDeltaFrameData;
-
-typedef struct {
-    UA_DataSetMessageHeader header;
-    union {
-        UA_DataSetMessage_DataKeyFrameData keyFrameData;
-        UA_DataSetMessage_DataDeltaFrameData deltaFrameData;
-    } data;
-} UA_DataSetMessage;
-
-UA_StatusCode
-UA_DataSetMessage_encodeBinary(const UA_DataSetMessage* src, UA_Byte **bufPos,
-                               const UA_Byte *bufEnd);
-
-UA_StatusCode
-UA_DataSetMessage_decodeBinary(const UA_ByteString *src, size_t *offset,
-                               UA_DataSetMessage* dst);
-
-size_t
-UA_DataSetMessage_calcSizeBinary(const UA_DataSetMessage* p);
-
-void UA_DataSetMessage_free(const UA_DataSetMessage* p);
-
-typedef struct {
-    UA_UInt16* sizes;
-    UA_DataSetMessage* dataSetMessages;
-} UA_DataSetPayload;
-
-typedef enum {
-    UA_PUBLISHERDATATYPE_BYTE = 0,
-    UA_PUBLISHERDATATYPE_UINT16 = 1,
-    UA_PUBLISHERDATATYPE_UINT32 = 2,
-    UA_PUBLISHERDATATYPE_UINT64 = 3,
-    UA_PUBLISHERDATATYPE_STRING = 4
-} UA_PublisherIdDatatype;
-
-typedef enum {
-    UA_NETWORKMESSAGE_DATASET = 0,
-    UA_NETWORKMESSAGE_DISCOVERY_REQUEST = 1,
-    UA_NETWORKMESSAGE_DISCOVERY_RESPONSE = 2
-} UA_NetworkMessageType;
-
-/**
- * UA_NetworkMessageGroupHeader
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
-typedef struct {
-    UA_Boolean writerGroupIdEnabled;
-    UA_Boolean groupVersionEnabled;
-    UA_Boolean networkMessageNumberEnabled;
-    UA_Boolean sequenceNumberEnabled;
-    UA_UInt16 writerGroupId;
-    UA_UInt32 groupVersion; // spec: type "VersionTime"
-    UA_UInt16 networkMessageNumber;
-    UA_UInt16 sequenceNumber;
-} UA_NetworkMessageGroupHeader;
-
-/**
- * UA_NetworkMessageSecurityHeader
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
-typedef struct {
-    UA_Boolean networkMessageSigned;
-    UA_Boolean networkMessageEncrypted;
-    UA_Boolean securityFooterEnabled;
-    UA_Boolean forceKeyReset;
-    UA_UInt32 securityTokenId;      // spec: IntegerId
-    UA_Byte nonceLength;
-    UA_ByteString messageNonce;
-    UA_UInt16 securityFooterSize;
-} UA_NetworkMessageSecurityHeader;
-
-/**
- * UA_NetworkMessage
- * ^^^^^^^^^^^^^^^^^ */
-typedef struct {
-    UA_Byte version;
-    UA_Boolean messageIdEnabled;
-    UA_String messageId; /* For Json NetworkMessage */
-    UA_Boolean publisherIdEnabled;
-    UA_Boolean groupHeaderEnabled;
-    UA_Boolean payloadHeaderEnabled;
-    UA_PublisherIdDatatype publisherIdType;
-    UA_Boolean dataSetClassIdEnabled;
-    UA_Boolean securityEnabled;
-    UA_Boolean timestampEnabled;
-    UA_Boolean picosecondsEnabled;
-    UA_Boolean chunkMessage;
-    UA_Boolean promotedFieldsEnabled;
-    UA_NetworkMessageType networkMessageType;
-    union {
-        UA_Byte publisherIdByte;
-        UA_UInt16 publisherIdUInt16;
-        UA_UInt32 publisherIdUInt32;
-        UA_UInt64 publisherIdUInt64;
-        UA_Guid publisherIdGuid;
-        UA_String publisherIdString;
-    } publisherId;
-    UA_Guid dataSetClassId;
-
-    UA_NetworkMessageGroupHeader groupHeader;
-
-    union {
-        UA_DataSetPayloadHeader dataSetPayloadHeader;
-    } payloadHeader;
-    
-    UA_DateTime timestamp;
-    UA_UInt16 picoseconds;
-    UA_UInt16 promotedFieldsSize;
-    UA_Variant* promotedFields; /* BaseDataType */
-    
-    UA_NetworkMessageSecurityHeader securityHeader;
-
-    union {
-        UA_DataSetPayload dataSetPayload;
-    } payload;
-    
-    UA_ByteString securityFooter;
-    UA_ByteString signature;
-} UA_NetworkMessage;
-
-UA_StatusCode
-UA_NetworkMessage_encodeBinary(const UA_NetworkMessage* src,
-                               UA_Byte **bufPos, const UA_Byte *bufEnd);
-
-UA_StatusCode
-UA_NetworkMessage_decodeBinary(const UA_ByteString *src, size_t *offset,
-                               UA_NetworkMessage* dst);
-
-size_t
-UA_NetworkMessage_calcSizeBinary(const UA_NetworkMessage* p);
-
-void
-UA_NetworkMessage_deleteMembers(UA_NetworkMessage* p);
-
-#define UA_NetworkMessage_clear(p) UA_NetworkMessage_deleteMembers(p)
-
-void
-UA_NetworkMessage_delete(UA_NetworkMessage* p);
-
-
-#ifdef UA_ENABLE_JSON_ENCODING
-UA_StatusCode
-UA_NetworkMessage_encodeJson(const UA_NetworkMessage *src,
-                             UA_Byte **bufPos, const UA_Byte **bufEnd, UA_String *namespaces,
-                             size_t namespaceSize, UA_String *serverUris,
-                             size_t serverUriSize, UA_Boolean useReversible);
-
-size_t
-UA_NetworkMessage_calcSizeJson(const UA_NetworkMessage *src,
-                               UA_String *namespaces, size_t namespaceSize,
-                               UA_String *serverUris, size_t serverUriSize,
-                               UA_Boolean useReversible);
-
-UA_StatusCode UA_NetworkMessage_decodeJson(UA_NetworkMessage *dst, const UA_ByteString *src);
-#endif
-
-_UA_END_DECLS
-
-#endif /* UA_PUBSUB_NETWORKMESSAGE_H_ */
diff --git a/ext/open62541/src/pubsub/ua_pubsub_networkmessage_json.c b/ext/open62541/src/pubsub/ua_pubsub_networkmessage_json.c
deleted file mode 100644
index 4281a80..0000000
--- a/ext/open62541/src/pubsub/ua_pubsub_networkmessage_json.c
+++ /dev/null
@@ -1,536 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2019 Fraunhofer IOSB (Author: Lukas Meling)
- */
-
-#include <open62541/types.h>
-#include <open62541/types_generated_handling.h>
-
-#include "ua_pubsub_networkmessage.h"
-#include "ua_types_encoding_json.h"
-
-/* Json keys for dsm */
-const char * UA_DECODEKEY_MESSAGES = ("Messages");
-const char * UA_DECODEKEY_MESSAGETYPE = ("MessageType");
-const char * UA_DECODEKEY_MESSAGEID = ("MessageId");
-const char * UA_DECODEKEY_PUBLISHERID = ("PublisherId");
-const char * UA_DECODEKEY_DATASETCLASSID = ("DataSetClassId");
-
-/* Json keys for dsm */
-const char * UA_DECODEKEY_DATASETWRITERID = ("DataSetWriterId");
-const char * UA_DECODEKEY_SEQUENCENUMBER = ("SequenceNumber");
-const char * UA_DECODEKEY_METADATAVERSION = ("MetaDataVersion");
-const char * UA_DECODEKEY_TIMESTAMP = ("Timestamp");
-const char * UA_DECODEKEY_DSM_STATUS = ("Status");
-const char * UA_DECODEKEY_PAYLOAD = ("Payload");
-const char * UA_DECODEKEY_DS_TYPE = ("Type");
-
-/* -- json encoding/decoding -- */
-static UA_StatusCode writeJsonKey_UA_String(CtxJson *ctx, UA_String *in){
-    UA_STACKARRAY(char, out, in->length + 1);
-    memcpy(out, in->data, in->length);
-    out[in->length] = 0;
-    return writeJsonKey(ctx, out);
-}
-
-static UA_StatusCode
-UA_DataSetMessage_encodeJson_internal(const UA_DataSetMessage* src, UA_UInt16 dataSetWriterId,
-                                      CtxJson *ctx){
-    status rv = writeJsonObjStart(ctx);
-
-    /* DataSetWriterId */
-    rv |= writeJsonObjElm(ctx, UA_DECODEKEY_DATASETWRITERID,
-                          &dataSetWriterId, &UA_TYPES[UA_TYPES_UINT16]);
-    if(rv != UA_STATUSCODE_GOOD)
-        return rv;
-
-    /* DataSetMessageSequenceNr */
-    if(src->header.dataSetMessageSequenceNrEnabled) {
-        rv |= writeJsonObjElm(ctx, UA_DECODEKEY_SEQUENCENUMBER,
-                              &src->header.dataSetMessageSequenceNr,
-                              &UA_TYPES[UA_TYPES_UINT16]);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    /* MetaDataVersion */
-    if(src->header.configVersionMajorVersionEnabled || src->header.configVersionMinorVersionEnabled) {
-        UA_ConfigurationVersionDataType cvd;
-        cvd.majorVersion = src->header.configVersionMajorVersion;
-        cvd.minorVersion = src->header.configVersionMinorVersion;
-        rv |= writeJsonObjElm(ctx, UA_DECODEKEY_METADATAVERSION, &cvd,
-                              &UA_TYPES[UA_TYPES_CONFIGURATIONVERSIONDATATYPE]);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    /* Timestamp */
-    if(src->header.timestampEnabled) {
-        rv |= writeJsonObjElm(ctx, UA_DECODEKEY_TIMESTAMP, &src->header.timestamp,
-                              &UA_TYPES[UA_TYPES_DATETIME]);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    /* Status */
-    if(src->header.statusEnabled) {
-        rv |= writeJsonObjElm(ctx, UA_DECODEKEY_DSM_STATUS,
-                              &src->header.status, &UA_TYPES[UA_TYPES_STATUSCODE]);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    rv |= writeJsonKey(ctx, UA_DECODEKEY_PAYLOAD);
-    rv |= writeJsonObjStart(ctx);
-
-    /* TODO: currently no difference between delta and key frames. Own
-     * dataSetMessageType for json?. If the field names are not defined, write
-     * out empty field names. */
-    if(src->header.dataSetMessageType == UA_DATASETMESSAGE_DATAKEYFRAME) {
-
-        if(src->header.fieldEncoding == UA_FIELDENCODING_VARIANT) {
-            /* KEYFRAME VARIANT */
-            for (UA_UInt16 i = 0; i < src->data.keyFrameData.fieldCount; i++) {
-                if(src->data.keyFrameData.fieldNames)
-                    rv |= writeJsonKey_UA_String(ctx, &src->data.keyFrameData.fieldNames[i]);
-                else
-                    rv |= writeJsonKey(ctx, "");
-                rv |= encodeJsonInternal(&(src->data.keyFrameData.dataSetFields[i].value),
-                                         &UA_TYPES[UA_TYPES_VARIANT], ctx);
-                if(rv != UA_STATUSCODE_GOOD)
-                    return rv;
-            }
-        } else if(src->header.fieldEncoding == UA_FIELDENCODING_DATAVALUE) {
-            /* KEYFRAME DATAVALUE */
-            for (UA_UInt16 i = 0; i < src->data.keyFrameData.fieldCount; i++) {
-                if(src->data.keyFrameData.fieldNames)
-                    rv |= writeJsonKey_UA_String(ctx, &src->data.keyFrameData.fieldNames[i]);
-                else
-                    rv |= writeJsonKey(ctx, "");
-                rv |= encodeJsonInternal(&src->data.keyFrameData.dataSetFields[i],
-                                         &UA_TYPES[UA_TYPES_DATAVALUE], ctx);
-                if(rv != UA_STATUSCODE_GOOD)
-                    return rv;
-            }
-        } else {
-            /* RawData */
-            return UA_STATUSCODE_BADNOTIMPLEMENTED;
-        }
-    } else {
-        /* DeltaFrame */
-        return UA_STATUSCODE_BADNOTSUPPORTED;
-    }
-    rv |= writeJsonObjEnd(ctx); /* Payload */
-    rv |= writeJsonObjEnd(ctx); /* DataSetMessage */
-    return rv;
-}
-
-static UA_StatusCode
-UA_NetworkMessage_encodeJson_internal(const UA_NetworkMessage* src, CtxJson *ctx) {
-    status rv = UA_STATUSCODE_GOOD;
-    /* currently only ua-data is supported, no discovery message implemented */
-    if(src->networkMessageType != UA_NETWORKMESSAGE_DATASET)
-        return UA_STATUSCODE_BADNOTIMPLEMENTED;
-
-    writeJsonObjStart(ctx);
-
-    /* Table 91 – JSON NetworkMessage Definition
-     * MessageId | String | A globally unique identifier for the message.
-     * This value is mandatory. But we don't check uniqueness in the
-     * encoding layer. */
-    rv |= writeJsonObjElm(ctx, UA_DECODEKEY_MESSAGEID,
-                          &src->messageId, &UA_TYPES[UA_TYPES_STRING]);
-
-    /* MessageType */
-    UA_String s = UA_STRING("ua-data");
-    rv |= writeJsonObjElm(ctx, UA_DECODEKEY_MESSAGETYPE,
-                          &s, &UA_TYPES[UA_TYPES_STRING]);
-
-    /* PublisherId */
-    if(src->publisherIdEnabled) {
-        rv = writeJsonKey(ctx, UA_DECODEKEY_PUBLISHERID);
-        switch (src->publisherIdType) {
-        case UA_PUBLISHERDATATYPE_BYTE:
-            rv |= encodeJsonInternal(&src->publisherId.publisherIdByte,
-                                     &UA_TYPES[UA_TYPES_BYTE], ctx);
-            break;
-
-        case UA_PUBLISHERDATATYPE_UINT16:
-            rv |= encodeJsonInternal(&src->publisherId.publisherIdUInt16,
-                                     &UA_TYPES[UA_TYPES_UINT16], ctx);
-            break;
-
-        case UA_PUBLISHERDATATYPE_UINT32:
-            rv |= encodeJsonInternal(&src->publisherId.publisherIdUInt32,
-                                     &UA_TYPES[UA_TYPES_UINT32], ctx);
-            break;
-
-        case UA_PUBLISHERDATATYPE_UINT64:
-            rv |= encodeJsonInternal(&src->publisherId.publisherIdUInt64,
-                                     &UA_TYPES[UA_TYPES_UINT64], ctx);
-            break;
-
-        case UA_PUBLISHERDATATYPE_STRING:
-            rv |= encodeJsonInternal(&src->publisherId.publisherIdString,
-                                     &UA_TYPES[UA_TYPES_STRING], ctx);
-            break;
-        }
-    }
-    if(rv != UA_STATUSCODE_GOOD)
-        return rv;
-
-    /* DataSetClassId */
-    if(src->dataSetClassIdEnabled) {
-        rv |= writeJsonObjElm(ctx, UA_DECODEKEY_DATASETCLASSID,
-                              &src->dataSetClassId, &UA_TYPES[UA_TYPES_GUID]);
-        if(rv != UA_STATUSCODE_GOOD)
-            return rv;
-    }
-
-    /* Payload: DataSetMessages */
-    UA_Byte count = src->payloadHeader.dataSetPayloadHeader.count;
-    if(count > 0){
-        UA_UInt16 *dataSetWriterIds = src->payloadHeader.dataSetPayloadHeader.dataSetWriterIds;
-        if(!dataSetWriterIds){
-            return UA_STATUSCODE_BADENCODINGERROR;
-        }
-
-        rv |= writeJsonKey(ctx, UA_DECODEKEY_MESSAGES);
-        rv |= writeJsonArrStart(ctx); /* start array */
-
-        for (UA_UInt16 i = 0; i < count; i++) {
-            writeJsonCommaIfNeeded(ctx);
-            rv |= UA_DataSetMessage_encodeJson_internal(&src->payload.dataSetPayload.dataSetMessages[i],
-                                                        dataSetWriterIds[i], ctx);
-            if(rv != UA_STATUSCODE_GOOD)
-                return rv;
-            /* comma is needed if more dsm are present */
-            ctx->commaNeeded[ctx->depth] = true;
-        }
-        rv |= writeJsonArrEnd(ctx); /* end array */
-    }
-
-    rv |= writeJsonObjEnd(ctx);
-    return rv;
-}
-
-UA_StatusCode
-UA_NetworkMessage_encodeJson(const UA_NetworkMessage *src,
-                             UA_Byte **bufPos, const UA_Byte **bufEnd, UA_String *namespaces,
-                             size_t namespaceSize, UA_String *serverUris,
-                             size_t serverUriSize, UA_Boolean useReversible) {
-    /* Set up the context */
-    CtxJson ctx;
-    memset(&ctx, 0, sizeof(ctx));
-    ctx.pos = *bufPos;
-    ctx.end = *bufEnd;
-    ctx.depth = 0;
-    ctx.namespaces = namespaces;
-    ctx.namespacesSize = namespaceSize;
-    ctx.serverUris = serverUris;
-    ctx.serverUrisSize = serverUriSize;
-    ctx.useReversible = useReversible;
-    ctx.calcOnly = false;
-
-    status ret = UA_NetworkMessage_encodeJson_internal(src, &ctx);
-
-    *bufPos = ctx.pos;
-    *bufEnd = ctx.end;
-    return ret;
-}
-
-size_t
-UA_NetworkMessage_calcSizeJson(const UA_NetworkMessage *src,
-                               UA_String *namespaces, size_t namespaceSize,
-                               UA_String *serverUris, size_t serverUriSize,
-                               UA_Boolean useReversible){
-
-    /* Set up the context */
-    CtxJson ctx;
-    memset(&ctx, 0, sizeof(ctx));
-    ctx.pos = 0;
-    ctx.end = (const UA_Byte*)(uintptr_t)SIZE_MAX;
-    ctx.depth = 0;
-    ctx.namespaces = namespaces;
-    ctx.namespacesSize = namespaceSize;
-    ctx.serverUris = serverUris;
-    ctx.serverUrisSize = serverUriSize;
-    ctx.useReversible = useReversible;
-    ctx.calcOnly = true;
-
-    status ret = UA_NetworkMessage_encodeJson_internal(src, &ctx);
-    if(ret != UA_STATUSCODE_GOOD)
-        return 0;
-    return (size_t)ctx.pos;
-}
-
-/* decode  json */
-static status
-MetaDataVersion_decodeJsonInternal(void* cvd, const UA_DataType *type, CtxJson *ctx,
-                                   ParseCtx *parseCtx, UA_Boolean moveToken){
-    return decodeJsonInternal(cvd, &UA_TYPES[UA_TYPES_CONFIGURATIONVERSIONDATATYPE],
-                              ctx, parseCtx, UA_TRUE);
-}
-
-static status
-DataSetPayload_decodeJsonInternal(void* dsmP, const UA_DataType *type, CtxJson *ctx,
-                                  ParseCtx *parseCtx, UA_Boolean moveToken) {
-    UA_DataSetMessage* dsm = (UA_DataSetMessage*)dsmP;
-    dsm->header.dataSetMessageValid = UA_TRUE;
-    if(isJsonNull(ctx, parseCtx)) {
-        parseCtx->index++;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    size_t length = (size_t)parseCtx->tokenArray[parseCtx->index].size;
-    UA_String *fieldNames = (UA_String*)UA_calloc(length, sizeof(UA_String));
-    dsm->data.keyFrameData.fieldNames = fieldNames;
-    dsm->data.keyFrameData.fieldCount = (UA_UInt16)length;
-    dsm->data.keyFrameData.dataSetFields = (UA_DataValue *)
-        UA_Array_new(dsm->data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-
-    status ret = UA_STATUSCODE_GOOD;
-
-    parseCtx->index++; // We go to first Object key!
-
-    /* iterate over the key/value pairs in the object. Keys are stored in fieldnames. */
-    for(size_t i = 0; i < length; ++i) {
-        ret = getDecodeSignature(UA_TYPES_STRING)(&fieldNames[i], type, ctx, parseCtx, UA_TRUE);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-
-        //TODO: Is field value a variant or datavalue? Current check if type and body present.
-        size_t searchResult = 0;
-        status foundType = lookAheadForKey("Type", ctx, parseCtx, &searchResult);
-        status foundBody = lookAheadForKey("Body", ctx, parseCtx, &searchResult);
-        if(foundType == UA_STATUSCODE_GOOD && foundBody == UA_STATUSCODE_GOOD){
-            dsm->header.fieldEncoding = UA_FIELDENCODING_VARIANT;
-            ret = getDecodeSignature(UA_TYPES_VARIANT)
-                (&dsm->data.keyFrameData.dataSetFields[i].value, type, ctx, parseCtx, UA_TRUE);
-            dsm->data.keyFrameData.dataSetFields[i].hasValue = UA_TRUE;
-        } else {
-            dsm->header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
-            ret = getDecodeSignature(UA_TYPES_DATAVALUE)
-                (&dsm->data.keyFrameData.dataSetFields[i], type, ctx, parseCtx, UA_TRUE);
-            dsm->data.keyFrameData.dataSetFields[i].hasValue = UA_TRUE;
-        }
-
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-
-    }
-
-    return ret;
-}
-
-static status
-DatasetMessage_Payload_decodeJsonInternal(UA_DataSetMessage* dsm, const UA_DataType *type,
-                                          CtxJson *ctx, ParseCtx *parseCtx, UA_Boolean moveToken) {
-    UA_ConfigurationVersionDataType cvd;
-    UA_UInt16 dataSetWriterId; /* the id is currently not processed */
-
-    dsm->header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
-
-    DecodeEntry entries[6] = {
-        {UA_DECODEKEY_DATASETWRITERID, &dataSetWriterId,
-         getDecodeSignature(UA_TYPES_UINT16), false, NULL},
-        {UA_DECODEKEY_SEQUENCENUMBER, &dsm->header.dataSetMessageSequenceNr,
-         getDecodeSignature(UA_TYPES_UINT16), false, NULL},
-        {UA_DECODEKEY_METADATAVERSION, &cvd,
-         &MetaDataVersion_decodeJsonInternal, false, NULL},
-        {UA_DECODEKEY_TIMESTAMP, &dsm->header.timestamp,
-         getDecodeSignature(UA_TYPES_DATETIME), false, NULL},
-        {UA_DECODEKEY_DSM_STATUS, &dsm->header.status,
-         getDecodeSignature(UA_TYPES_UINT16), false, NULL},
-        {UA_DECODEKEY_PAYLOAD, dsm,
-         &DataSetPayload_decodeJsonInternal, false, NULL}
-    };
-
-    status ret = decodeFields(ctx, parseCtx, entries, 6, NULL);
-    if(ret != UA_STATUSCODE_GOOD || !entries[0].found){
-        /* no dataSetwriterid. Is mandatory. Abort. */
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }else{
-        if(parseCtx->custom != NULL){
-            UA_UInt16* dataSetWriterIdsArray = (UA_UInt16*)parseCtx->custom;
-
-            if(*parseCtx->currentCustomIndex  < parseCtx->numCustom){
-                 dataSetWriterIdsArray[*parseCtx->currentCustomIndex] = dataSetWriterId;
-                 (*parseCtx->currentCustomIndex)++;
-            }else{
-                return UA_STATUSCODE_BADDECODINGERROR;
-            }
-        }else{
-            return UA_STATUSCODE_BADDECODINGERROR;
-        }
-    }
-    dsm->header.dataSetMessageSequenceNrEnabled = entries[1].found;
-    dsm->header.configVersionMajorVersion = cvd.majorVersion;
-    dsm->header.configVersionMinorVersion = cvd.minorVersion;
-    dsm->header.configVersionMajorVersionEnabled = entries[2].found;
-    dsm->header.configVersionMinorVersionEnabled = entries[2].found;
-    dsm->header.timestampEnabled = entries[3].found;
-    dsm->header.statusEnabled = entries[4].found;
-    if(!entries[5].found){
-        /* No payload found */
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-
-    dsm->header.dataSetMessageType = UA_DATASETMESSAGE_DATAKEYFRAME;
-    dsm->header.picoSecondsIncluded = UA_FALSE;
-    dsm->header.dataSetMessageValid = UA_TRUE;
-    dsm->header.fieldEncoding = UA_FIELDENCODING_VARIANT;
-    return ret;
-}
-
-static status
-DatasetMessage_Array_decodeJsonInternal(void *UA_RESTRICT dst, const UA_DataType *type,
-                                        CtxJson *ctx, ParseCtx *parseCtx, UA_Boolean moveToken) {
-    /* Array! */
-    if(getJsmnType(parseCtx) != JSMN_ARRAY)
-        return UA_STATUSCODE_BADDECODINGERROR;
-    size_t length = (size_t)parseCtx->tokenArray[parseCtx->index].size;
-
-    /* Return early for empty arrays */
-    if(length == 0)
-        return UA_STATUSCODE_GOOD;
-
-    /* Allocate memory */
-    UA_DataSetMessage *dsm = (UA_DataSetMessage*)UA_calloc(length, sizeof(UA_DataSetMessage));
-    if(dsm == NULL)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    /* Copy new Pointer do dest */
-    memcpy(dst, &dsm, sizeof(void*));
-
-    /* We go to first Array member! */
-    parseCtx->index++;
-
-    status ret = UA_STATUSCODE_BADDECODINGERROR;
-    /* Decode array members */
-    for(size_t i = 0; i < length; ++i) {
-        ret = DatasetMessage_Payload_decodeJsonInternal(&dsm[i], NULL, ctx, parseCtx, UA_TRUE);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    return ret;
-}
-
-static status NetworkMessage_decodeJsonInternal(UA_NetworkMessage *dst, CtxJson *ctx,
-                                                ParseCtx *parseCtx) {
-    memset(dst, 0, sizeof(UA_NetworkMessage));
-    dst->chunkMessage = UA_FALSE;
-    dst->groupHeaderEnabled = UA_FALSE;
-    dst->payloadHeaderEnabled = UA_FALSE;
-    dst->picosecondsEnabled = UA_FALSE;
-    dst->promotedFieldsEnabled = UA_FALSE;
-
-    /* Look forward for publisheId, if present check if type if primitve (Number) or String. */
-    u8 publishIdTypeIndex = UA_TYPES_STRING;
-    size_t searchResultPublishIdType = 0;
-    status found = lookAheadForKey(UA_DECODEKEY_PUBLISHERID, ctx,
-                                   parseCtx, &searchResultPublishIdType);
-    if(found == UA_STATUSCODE_GOOD) {
-        jsmntok_t publishIdToken = parseCtx->tokenArray[searchResultPublishIdType];
-        if(publishIdToken.type == JSMN_PRIMITIVE) {
-            publishIdTypeIndex = UA_TYPES_UINT64;
-            dst->publisherIdType = UA_PUBLISHERDATATYPE_UINT64; //store in biggest possible
-        } else if(publishIdToken.type == JSMN_STRING) {
-            publishIdTypeIndex = UA_TYPES_STRING;
-            dst->publisherIdType = UA_PUBLISHERDATATYPE_STRING;
-        } else {
-            return UA_STATUSCODE_BADDECODINGERROR;
-        }
-    }
-
-    /* Is Messages an Array? How big? */
-    size_t messageCount = 0;
-    size_t searchResultMessages = 0;
-    found = lookAheadForKey(UA_DECODEKEY_MESSAGES, ctx, parseCtx, &searchResultMessages);
-    if(found != UA_STATUSCODE_GOOD)
-        return UA_STATUSCODE_BADNOTIMPLEMENTED;
-    jsmntok_t bodyToken = parseCtx->tokenArray[searchResultMessages];
-    if(bodyToken.type != JSMN_ARRAY)
-        return UA_STATUSCODE_BADNOTIMPLEMENTED;
-    messageCount = (size_t)parseCtx->tokenArray[searchResultMessages].size;
-
-    /* Set up custom context for the dataSetwriterId */
-    size_t currentCustomIndex = 0;
-    parseCtx->custom = (void*)UA_calloc(messageCount, sizeof(UA_UInt16));
-    parseCtx->currentCustomIndex = &currentCustomIndex;
-    parseCtx->numCustom = messageCount;
-
-    /* MessageType */
-    UA_Boolean isUaData = UA_TRUE;
-    size_t searchResultMessageType = 0;
-    found = lookAheadForKey(UA_DECODEKEY_MESSAGETYPE, ctx, parseCtx, &searchResultMessageType);
-    if(found != UA_STATUSCODE_GOOD)
-        return UA_STATUSCODE_BADDECODINGERROR;
-    size_t size = (size_t)(parseCtx->tokenArray[searchResultMessageType].end - parseCtx->tokenArray[searchResultMessageType].start);
-    char* msgType = (char*)(ctx->pos + parseCtx->tokenArray[searchResultMessageType].start);
-    if(size == 7) { //ua-data
-        if(strncmp(msgType, "ua-data", size) != 0)
-            return UA_STATUSCODE_BADDECODINGERROR;
-        isUaData = UA_TRUE;
-    } else if(size == 11) { //ua-metadata
-        if(strncmp(msgType, "ua-metadata", size) != 0)
-            return UA_STATUSCODE_BADDECODINGERROR;
-        isUaData = UA_FALSE;
-    } else {
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-
-    //TODO: MetaData
-    if(!isUaData)
-        return UA_STATUSCODE_BADNOTIMPLEMENTED;
-        
-    /* Network Message */
-    UA_String messageType;
-    DecodeEntry entries[5] = {
-        {UA_DECODEKEY_MESSAGEID, &dst->messageId, getDecodeSignature(UA_TYPES_STRING), false, NULL},
-        {UA_DECODEKEY_MESSAGETYPE, &messageType, NULL, false, NULL},
-        {UA_DECODEKEY_PUBLISHERID, &dst->publisherId.publisherIdString, getDecodeSignature(publishIdTypeIndex), false, NULL},
-        {UA_DECODEKEY_DATASETCLASSID, &dst->dataSetClassId, getDecodeSignature(UA_TYPES_GUID), false, NULL},
-        {UA_DECODEKEY_MESSAGES, &dst->payload.dataSetPayload.dataSetMessages, &DatasetMessage_Array_decodeJsonInternal, false, NULL}
-    };
-
-    //Store publisherId in correct union
-    if(publishIdTypeIndex == UA_TYPES_UINT64)
-        entries[2].fieldPointer = &dst->publisherId.publisherIdUInt64;
-
-    status ret = decodeFields(ctx, parseCtx, entries, 5, NULL);
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-
-    dst->messageIdEnabled = entries[0].found;
-    dst->publisherIdEnabled = entries[2].found;
-    if(dst->publisherIdEnabled)
-        dst->publisherIdType = UA_PUBLISHERDATATYPE_STRING;
-    dst->dataSetClassIdEnabled = entries[3].found;
-    dst->payloadHeaderEnabled = UA_TRUE;
-    dst->payloadHeader.dataSetPayloadHeader.count = (UA_Byte)messageCount;
-
-    //Set the dataSetWriterIds. They are filled in the dataSet decoding.
-    dst->payloadHeader.dataSetPayloadHeader.dataSetWriterIds = (UA_UInt16*)parseCtx->custom;
-    return ret;
-}
-
-status UA_NetworkMessage_decodeJson(UA_NetworkMessage *dst, const UA_ByteString *src){
-    /* Set up the context */
-    CtxJson ctx;
-    memset(&ctx, 0, sizeof(CtxJson));
-    ParseCtx parseCtx;
-    memset(&parseCtx, 0, sizeof(ParseCtx));
-    parseCtx.tokenArray = (jsmntok_t*)UA_malloc(sizeof(jsmntok_t) * UA_JSON_MAXTOKENCOUNT);
-    memset(parseCtx.tokenArray, 0, sizeof(jsmntok_t) * UA_JSON_MAXTOKENCOUNT);
-    status ret = tokenize(&parseCtx, &ctx, src);
-    if(ret != UA_STATUSCODE_GOOD){
-        return ret;
-    }
-    ret = NetworkMessage_decodeJsonInternal(dst, &ctx, &parseCtx);
-    UA_free(parseCtx.tokenArray);
-    return ret;
-}
diff --git a/ext/open62541/src/pubsub/ua_pubsub_ns0.c b/ext/open62541/src/pubsub/ua_pubsub_ns0.c
deleted file mode 100644
index 66ac573..0000000
--- a/ext/open62541/src/pubsub/ua_pubsub_ns0.c
+++ /dev/null
@@ -1,1153 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017-2018 Fraunhofer IOSB (Author: Andreas Ebner)
- * Copyright (c) 2019 Kalycito Infotech Private Limited
- */
-
-#include "ua_pubsub_ns0.h"
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL /* conditional compilation */
-
-typedef struct{
-    UA_NodeId parentNodeId;
-    UA_UInt32 parentClassifier;
-    UA_UInt32 elementClassiefier;
-} UA_NodePropertyContext;
-
-//Prototypes
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-static UA_StatusCode addWriterGroupAction(UA_Server *server,
-                                          const UA_NodeId *sessionId, void *sessionHandle,
-                                          const UA_NodeId *methodId, void *methodContext,
-                                          const UA_NodeId *objectId, void *objectContext,
-                                          size_t inputSize, const UA_Variant *input,
-                                          size_t outputSize, UA_Variant *output);
-static UA_StatusCode removeGroupAction(UA_Server *server,
-                                          const UA_NodeId *sessionId, void *sessionHandle,
-                                          const UA_NodeId *methodId, void *methodContext,
-                                          const UA_NodeId *objectId, void *objectContext,
-                                          size_t inputSize, const UA_Variant *input,
-                                          size_t outputSize, UA_Variant *output);
-static UA_StatusCode addDataSetWriterAction(UA_Server *server,
-                                          const UA_NodeId *sessionId, void *sessionHandle,
-                                          const UA_NodeId *methodId, void *methodContext,
-                                          const UA_NodeId *objectId, void *objectContext,
-                                          size_t inputSize, const UA_Variant *input,
-                                          size_t outputSize, UA_Variant *output);
-
-#endif
-
-static UA_StatusCode
-addPubSubObjectNode(UA_Server *server, char* name, UA_UInt32 objectid,
-              UA_UInt32 parentid, UA_UInt32 referenceid, UA_UInt32 type_id) {
-    UA_ObjectAttributes object_attr = UA_ObjectAttributes_default;
-    object_attr.displayName = UA_LOCALIZEDTEXT("", name);
-    return UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(0, objectid),
-                                   UA_NODEID_NUMERIC(0, parentid),
-                                   UA_NODEID_NUMERIC(0, referenceid),
-                                   UA_QUALIFIEDNAME(0, name),
-                                   UA_NODEID_NUMERIC(0, type_id),
-                                   object_attr, NULL, NULL);
-}
-
-static UA_StatusCode
-writePubSubNs0VariableArray(UA_Server *server, UA_UInt32 id, void *v,
-                      size_t length, const UA_DataType *type) {
-    UA_Variant var;
-    UA_Variant_init(&var);
-    UA_Variant_setArray(&var, v, length, type);
-    return UA_Server_writeValue(server, UA_NODEID_NUMERIC(0, id), var);
-}
-
-static UA_NodeId
-findSingleChildNode(UA_Server *server, UA_QualifiedName targetName,
-                    UA_NodeId referenceTypeId, UA_NodeId startingNode){
-    UA_NodeId resultNodeId;
-    UA_RelativePathElement rpe;
-    UA_RelativePathElement_init(&rpe);
-    rpe.referenceTypeId = referenceTypeId;
-    rpe.isInverse = false;
-    rpe.includeSubtypes = false;
-    rpe.targetName = targetName;
-    UA_BrowsePath bp;
-    UA_BrowsePath_init(&bp);
-    bp.startingNode = startingNode;
-    bp.relativePath.elementsSize = 1;
-    bp.relativePath.elements = &rpe;
-    UA_BrowsePathResult bpr =
-            UA_Server_translateBrowsePathToNodeIds(server, &bp);
-    if(bpr.statusCode != UA_STATUSCODE_GOOD ||
-       bpr.targetsSize < 1)
-        return UA_NODEID_NULL;
-    if(UA_NodeId_copy(&bpr.targets[0].targetId.nodeId, &resultNodeId) != UA_STATUSCODE_GOOD){
-        UA_BrowsePathResult_deleteMembers(&bpr);
-        return UA_NODEID_NULL;
-    }
-    UA_BrowsePathResult_deleteMembers(&bpr);
-    return resultNodeId;
-}
-
-static void
-onRead(UA_Server *server, const UA_NodeId *sessionId, void *sessionContext,
-       const UA_NodeId *nodeid, void *context,
-       const UA_NumericRange *range, const UA_DataValue *data) {
-    UA_Variant value;
-    UA_Variant_init(&value);
-    const UA_NodePropertyContext *nodeContext = (const UA_NodePropertyContext*)context;
-    const UA_NodeId *myNodeId = &nodeContext->parentNodeId;
-
-    switch(nodeContext->parentClassifier){
-    case UA_NS0ID_PUBSUBCONNECTIONTYPE: {
-        UA_PubSubConnection *pubSubConnection =
-            UA_PubSubConnection_findConnectionbyId(server, *myNodeId);
-        switch(nodeContext->elementClassiefier) {
-        case UA_NS0ID_PUBSUBCONNECTIONTYPE_PUBLISHERID:
-            if(pubSubConnection->config->publisherIdType == UA_PUBSUB_PUBLISHERID_STRING) {
-                UA_Variant_setScalar(&value, &pubSubConnection->config->publisherId.numeric,
-                                     &UA_TYPES[UA_TYPES_STRING]);
-            } else {
-                UA_Variant_setScalar(&value, &pubSubConnection->config->publisherId.numeric,
-                                     &UA_TYPES[UA_TYPES_UINT32]);
-            }
-            break;
-        default:
-            UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                           "Read error! Unknown property.");
-        }
-        break;
-    }
-    case UA_NS0ID_WRITERGROUPTYPE: {
-        UA_WriterGroup *writerGroup = UA_WriterGroup_findWGbyId(server, *myNodeId);
-        if(!writerGroup)
-            return;
-        switch(nodeContext->elementClassiefier){
-        case UA_NS0ID_WRITERGROUPTYPE_PUBLISHINGINTERVAL:
-            UA_Variant_setScalar(&value, &writerGroup->config.publishingInterval,
-                                 &UA_TYPES[UA_TYPES_DURATION]);
-            break;
-        default:
-            UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                           "Read error! Unknown property.");
-        }
-        break;
-    }
-    case UA_NS0ID_PUBLISHEDDATAITEMSTYPE: {
-        UA_PublishedDataSet *publishedDataSet = UA_PublishedDataSet_findPDSbyId(server, *myNodeId);
-        if(!publishedDataSet)
-            return;
-        switch(nodeContext->elementClassiefier) {
-        case UA_NS0ID_PUBLISHEDDATAITEMSTYPE_PUBLISHEDDATA: {
-            UA_PublishedVariableDataType *pvd = (UA_PublishedVariableDataType *)
-                UA_calloc(publishedDataSet->fieldSize, sizeof(UA_PublishedVariableDataType));
-            size_t counter = 0;
-            UA_DataSetField *field;
-            LIST_FOREACH(field, &publishedDataSet->fields, listEntry) {
-                pvd[counter].attributeId = UA_ATTRIBUTEID_VALUE;
-                pvd[counter].publishedVariable = field->config.field.variable.publishParameters.publishedVariable;
-                //UA_NodeId_copy(&field->config.field.variable.publishParameters.publishedVariable, &pvd[counter].publishedVariable);
-                counter++;
-            }
-            UA_Variant_setArray(&value, pvd, publishedDataSet->fieldSize,
-                                &UA_TYPES[UA_TYPES_PUBLISHEDVARIABLEDATATYPE]);
-            break;
-        }
-        case UA_NS0ID_PUBLISHEDDATAITEMSTYPE_DATASETMETADATA: {
-            UA_Variant_setScalarCopy(&value, &publishedDataSet->dataSetMetaData, &UA_TYPES[UA_TYPES_DATASETMETADATATYPE]);
-            break;
-        }
-        case UA_NS0ID_PUBLISHEDDATAITEMSTYPE_CONFIGURATIONVERSION: {
-            UA_Variant_setScalarCopy(&value, &publishedDataSet->dataSetMetaData.configurationVersion,
-                                     &UA_TYPES[UA_TYPES_CONFIGURATIONVERSIONDATATYPE]);
-            break;
-        }
-        default:
-            UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                           "Read error! Unknown property.");
-        }
-        break;
-    }
-    default:
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                       "Read error! Unknown parent element.");
-    }
-    UA_Server_writeValue(server, *nodeid, value);
-}
-
-static void
-onWrite(UA_Server *server, const UA_NodeId *sessionId, void *sessionContext,
-        const UA_NodeId *nodeId, void *nodeContext,
-        const UA_NumericRange *range, const UA_DataValue *data){
-    UA_Variant value;
-    UA_NodeId myNodeId;
-    UA_WriterGroup *writerGroup = NULL;
-    switch(((UA_NodePropertyContext *) nodeContext)->parentClassifier){
-        case UA_NS0ID_PUBSUBCONNECTIONTYPE:
-            //no runtime writable attributes
-            break;
-        case UA_NS0ID_WRITERGROUPTYPE:
-            myNodeId = ((UA_NodePropertyContext *) nodeContext)->parentNodeId;
-            writerGroup = UA_WriterGroup_findWGbyId(server, myNodeId);
-            UA_WriterGroupConfig writerGroupConfig;
-            memset(&writerGroupConfig, 0, sizeof(writerGroupConfig));
-            if(!writerGroup)
-                return;
-            switch(((UA_NodePropertyContext *) nodeContext)->elementClassiefier){
-                case UA_NS0ID_WRITERGROUPTYPE_PUBLISHINGINTERVAL:
-                    UA_Server_getWriterGroupConfig(server, writerGroup->identifier, &writerGroupConfig);
-                    writerGroupConfig.publishingInterval = *((UA_Duration *) data->value.data);
-                    UA_Server_updateWriterGroupConfig(server, writerGroup->identifier, &writerGroupConfig);
-                    UA_Variant_setScalar(&value, data->value.data, &UA_TYPES[UA_TYPES_DURATION]);
-                    UA_WriterGroupConfig_deleteMembers(&writerGroupConfig);
-                    break;
-                default:
-                    UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                                   "Write error! Unknown property element.");
-            }
-            break;
-        default:
-            UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                           "Read error! Unknown parent element.");
-    }
-}
-
-static UA_StatusCode
-addVariableValueSource(UA_Server *server, UA_ValueCallback valueCallback,
-                       UA_NodeId node, UA_NodePropertyContext *context){
-    UA_Server_setNodeContext(server, node, context);
-    return UA_Server_setVariableNode_valueCallback(server, node, valueCallback);
-}
-
-/*************************************************/
-/*            PubSubConnection                   */
-/*************************************************/
-UA_StatusCode
-addPubSubConnectionRepresentation(UA_Server *server, UA_PubSubConnection *connection){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    if(connection->config->name.length > 512)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    UA_STACKARRAY(char, connectionName, sizeof(char) * connection->config->name.length +1);
-    memcpy(connectionName, connection->config->name.data, connection->config->name.length);
-    connectionName[connection->config->name.length] = '\0';
-    //This code block must use a lock
-    UA_Nodestore_removeNode(server->nsCtx, &connection->identifier);
-    UA_NodeId pubSubConnectionNodeId;
-    UA_ObjectAttributes attr = UA_ObjectAttributes_default;
-    attr.displayName = UA_LOCALIZEDTEXT("de-DE", connectionName);
-    retVal |= UA_Server_addNode_begin(server, UA_NODECLASS_OBJECT,
-                                      UA_NODEID_NUMERIC(0, connection->identifier.identifier.numeric),
-                                      UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE),
-                                      UA_NODEID_NUMERIC(0, UA_NS0ID_HASPUBSUBCONNECTION),
-                                      UA_QUALIFIEDNAME(0, connectionName),
-                                      UA_NODEID_NUMERIC(0, UA_NS0ID_PUBSUBCONNECTIONTYPE),
-                                      (const UA_NodeAttributes*)&attr, &UA_TYPES[UA_TYPES_OBJECTATTRIBUTES],
-                                      NULL, &pubSubConnectionNodeId);
-    addPubSubObjectNode(server, "Address", connection->identifier.identifier.numeric+1,
-                        pubSubConnectionNodeId.identifier.numeric,  UA_NS0ID_HASCOMPONENT,
-                        UA_NS0ID_NETWORKADDRESSURLTYPE);
-    UA_Server_addNode_finish(server, pubSubConnectionNodeId);
-    //End lock zone
-
-    UA_NodeId addressNode, urlNode, interfaceNode, publisherIdNode, connectionPropertieNode, transportProfileUri;
-    addressNode = findSingleChildNode(server, UA_QUALIFIEDNAME(0, "Address"),
-                                      UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                      UA_NODEID_NUMERIC(0, connection->identifier.identifier.numeric));
-    urlNode = findSingleChildNode(server, UA_QUALIFIEDNAME(0, "Url"),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), addressNode);
-    interfaceNode = findSingleChildNode(server, UA_QUALIFIEDNAME(0, "NetworkInterface"),
-                                        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), addressNode);
-    publisherIdNode = findSingleChildNode(server, UA_QUALIFIEDNAME(0, "PublisherId"),
-                                        UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                                        UA_NODEID_NUMERIC(0, connection->identifier.identifier.numeric));
-    connectionPropertieNode = findSingleChildNode(server, UA_QUALIFIEDNAME(0, "ConnectionProperties"),
-                                                 UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                                                 UA_NODEID_NUMERIC(0, connection->identifier.identifier.numeric));
-    transportProfileUri = findSingleChildNode(server, UA_QUALIFIEDNAME(0, "TransportProfileUri"),
-                                          UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                          UA_NODEID_NUMERIC(0, connection->identifier.identifier.numeric));
-
-    if(UA_NodeId_equal(&addressNode, &UA_NODEID_NULL) ||
-       UA_NodeId_equal(&urlNode, &UA_NODEID_NULL) ||
-       UA_NodeId_equal(&interfaceNode, &UA_NODEID_NULL) ||
-       UA_NodeId_equal(&publisherIdNode, &UA_NODEID_NULL) ||
-       UA_NodeId_equal(&connectionPropertieNode, &UA_NODEID_NULL) ||
-       UA_NodeId_equal(&transportProfileUri, &UA_NODEID_NULL)) {
-        return UA_STATUSCODE_BADNOTFOUND;
-    }
-
-    retVal |= writePubSubNs0VariableArray(server, connectionPropertieNode.identifier.numeric,
-                                          connection->config->connectionProperties,
-                                          connection->config->connectionPropertiesSize,
-                                          &UA_TYPES[UA_TYPES_KEYVALUEPAIR]);
-
-    UA_NetworkAddressUrlDataType *networkAddressUrlDataType = ((UA_NetworkAddressUrlDataType *) connection->config->address.data);
-    UA_Variant value;
-    UA_Variant_init(&value);
-    UA_Variant_setScalar(&value, &networkAddressUrlDataType->url, &UA_TYPES[UA_TYPES_STRING]);
-    UA_Server_writeValue(server, urlNode, value);
-    UA_Variant_setScalar(&value, &networkAddressUrlDataType->networkInterface, &UA_TYPES[UA_TYPES_STRING]);
-    UA_Server_writeValue(server, interfaceNode, value);
-    UA_Variant_setScalar(&value, &connection->config->transportProfileUri, &UA_TYPES[UA_TYPES_STRING]);
-    UA_Server_writeValue(server, transportProfileUri, value);
-
-    UA_NodePropertyContext *connectionPublisherIdContext = (UA_NodePropertyContext *) UA_malloc(sizeof(UA_NodePropertyContext));
-    connectionPublisherIdContext->parentNodeId = connection->identifier;
-    connectionPublisherIdContext->parentClassifier = UA_NS0ID_PUBSUBCONNECTIONTYPE;
-    connectionPublisherIdContext->elementClassiefier = UA_NS0ID_PUBSUBCONNECTIONTYPE_PUBLISHERID;
-    UA_ValueCallback valueCallback;
-    valueCallback.onRead = onRead;
-    valueCallback.onWrite = NULL;
-    retVal |= addVariableValueSource(server, valueCallback, publisherIdNode, connectionPublisherIdContext);
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-    retVal |= UA_Server_addReference(server, connection->identifier,
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                     UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_PUBSUBCONNECTIONTYPE_ADDWRITERGROUP), true);
-    retVal |= UA_Server_addReference(server, connection->identifier,
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                     UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_PUBSUBCONNECTIONTYPE_ADDREADERGROUP), true);
-    retVal |= UA_Server_addReference(server, connection->identifier,
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                     UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_PUBSUBCONNECTIONTYPE_REMOVEGROUP), true);
-#endif
-    return retVal;
-}
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-static UA_StatusCode
-addPubSubConnectionAction(UA_Server *server,
-                          const UA_NodeId *sessionId, void *sessionHandle,
-                          const UA_NodeId *methodId, void *methodContext,
-                          const UA_NodeId *objectId, void *objectContext,
-                          size_t inputSize, const UA_Variant *input,
-                          size_t outputSize, UA_Variant *output){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    UA_PubSubConnectionDataType pubSubConnectionDataType = *((UA_PubSubConnectionDataType *) input[0].data);
-    UA_NetworkAddressUrlDataType networkAddressUrlDataType;
-    memset(&networkAddressUrlDataType, 0, sizeof(networkAddressUrlDataType));
-    UA_ExtensionObject eo = pubSubConnectionDataType.address;
-    if(eo.encoding == UA_EXTENSIONOBJECT_DECODED){
-        if(eo.content.decoded.type == &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]){
-            if(UA_NetworkAddressUrlDataType_copy((UA_NetworkAddressUrlDataType *) eo.content.decoded.data,
-                                                 &networkAddressUrlDataType) != UA_STATUSCODE_GOOD){
-                return UA_STATUSCODE_BADOUTOFMEMORY;
-            }
-        }
-    }
-    UA_PubSubConnectionConfig connectionConfig;
-    memset(&connectionConfig, 0, sizeof(UA_PubSubConnectionConfig));
-    connectionConfig.transportProfileUri = pubSubConnectionDataType.transportProfileUri;
-    connectionConfig.name = pubSubConnectionDataType.name;
-    //TODO set real connection state
-    connectionConfig.enabled = pubSubConnectionDataType.enabled;
-    //connectionConfig.enabled = pubSubConnectionDataType.enabled;
-    UA_Variant_setScalar(&connectionConfig.address, &networkAddressUrlDataType,
-                         &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-    if(pubSubConnectionDataType.publisherId.type == &UA_TYPES[UA_TYPES_UINT32]){
-        connectionConfig.publisherId.numeric = * ((UA_UInt32 *) pubSubConnectionDataType.publisherId.data);
-    } else if(pubSubConnectionDataType.publisherId.type == &UA_TYPES[UA_TYPES_STRING]){
-        connectionConfig.publisherIdType = UA_PUBSUB_PUBLISHERID_STRING;
-        UA_String_copy((UA_String *) pubSubConnectionDataType.publisherId.data, &connectionConfig.publisherId.string);
-    } else {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER, "Unsupported PublisherId Type used.");
-        //TODO what's the best default behaviour here?
-        connectionConfig.publisherId.numeric = 0;
-    }
-    //call API function and create the connection
-    UA_NodeId connectionId;
-
-    retVal |= UA_Server_addPubSubConnection(server, &connectionConfig, &connectionId);
-
-    if(retVal != UA_STATUSCODE_GOOD){
-        return retVal;
-    }
-    for(size_t i = 0; i < pubSubConnectionDataType.writerGroupsSize; i++){
-        //UA_PubSubConnection_addWriterGroup(server, UA_NODEID_NULL, NULL, NULL);
-    }
-    for(size_t i = 0; i < pubSubConnectionDataType.readerGroupsSize; i++){
-        //UA_Server_addReaderGroup(server, NULL, NULL, NULL);
-    }
-    UA_NetworkAddressUrlDataType_deleteMembers(&networkAddressUrlDataType);
-    //set ouput value
-    UA_Variant_setScalarCopy(output, &connectionId, &UA_TYPES[UA_TYPES_NODEID]);
-    return UA_STATUSCODE_GOOD;
-}
-#endif
-
-UA_StatusCode
-removePubSubConnectionRepresentation(UA_Server *server, UA_PubSubConnection *connection){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-    retVal |= UA_Server_deleteReference(server, connection->identifier, UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), true,
-                                        UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_PUBSUBCONNECTIONTYPE_ADDWRITERGROUP),
-                                        false);
-    retVal |= UA_Server_deleteReference(server, connection->identifier, UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), true,
-                                        UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_PUBSUBCONNECTIONTYPE_ADDREADERGROUP),
-                                        false);
-    retVal |= UA_Server_deleteReference(server, connection->identifier, UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), true,
-                                        UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_PUBSUBCONNECTIONTYPE_REMOVEGROUP),
-                                        false);
-#endif
-    retVal |= UA_Server_deleteNode(server, connection->identifier, true);
-    return retVal;
-}
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-static UA_StatusCode
-removeConnectionAction(UA_Server *server,
-                       const UA_NodeId *sessionId, void *sessionHandle,
-                       const UA_NodeId *methodId, void *methodContext,
-                       const UA_NodeId *objectId, void *objectContext,
-                       size_t inputSize, const UA_Variant *input,
-                       size_t outputSize, UA_Variant *output){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    UA_NodeId nodeToRemove = *((UA_NodeId *) input[0].data);
-    retVal |= UA_Server_removePubSubConnection(server, nodeToRemove);
-    if(retVal == UA_STATUSCODE_BADNOTFOUND)
-        retVal = UA_STATUSCODE_BADNODEIDUNKNOWN;
-    return retVal;
-}
-#endif
-
-/**********************************************/
-/*               DataSetReader                */
-/**********************************************/
-UA_StatusCode
-addDataSetReaderRepresentation(UA_Server *server, UA_DataSetReader *dataSetReader){
-    //TODO implement reader part
-    return UA_STATUSCODE_BADNOTIMPLEMENTED;
-}
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-static UA_StatusCode
-addDataSetReaderAction(UA_Server *server,
-                       const UA_NodeId *sessionId, void *sessionHandle,
-                       const UA_NodeId *methodId, void *methodContext,
-                       const UA_NodeId *objectId, void *objectContext,
-                       size_t inputSize, const UA_Variant *input,
-                       size_t outputSize, UA_Variant *output){
-    UA_StatusCode retVal = UA_STATUSCODE_BADNOTIMPLEMENTED;
-    //TODO implement reader part
-    return retVal;
-}
-#endif
-
-UA_StatusCode
-removeDataSetReaderRepresentation(UA_Server *server, UA_DataSetReader* dataSetReader){
-    //TODO implement reader part
-    return UA_STATUSCODE_BADNOTIMPLEMENTED;
-}
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-static UA_StatusCode
-removeDataSetReaderAction(UA_Server *server,
-                          const UA_NodeId *sessionId, void *sessionHandle,
-                          const UA_NodeId *methodId, void *methodContext,
-                          const UA_NodeId *objectId, void *objectContext,
-                          size_t inputSize, const UA_Variant *input,
-                          size_t outputSize, UA_Variant *output){
-    UA_StatusCode retVal = UA_STATUSCODE_BADNOTIMPLEMENTED;
-    //TODO implement reader part
-    return retVal;
-}
-#endif
-
-/*************************************************/
-/*                PublishedDataSet               */
-/*************************************************/
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-static UA_StatusCode
-addDataSetFolderAction(UA_Server *server,
-                       const UA_NodeId *sessionId, void *sessionHandle,
-                       const UA_NodeId *methodId, void *methodContext,
-                       const UA_NodeId *objectId, void *objectContext,
-                       size_t inputSize, const UA_Variant *input,
-                       size_t outputSize, UA_Variant *output){
-    /* defined in R 1.04 9.1.4.5.7 */
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    UA_String newFolderName = *((UA_String *) input[0].data);
-    UA_NodeId generatedId;
-    UA_ObjectAttributes objectAttributes = UA_ObjectAttributes_default;
-    UA_LocalizedText name = {UA_STRING("en-US"), newFolderName};
-    objectAttributes.displayName = name;
-    retVal |= UA_Server_addObjectNode(server, UA_NODEID_NULL, *objectId, UA_NODEID_NUMERIC(0,UA_NS0ID_ORGANIZES),
-                                      UA_QUALIFIEDNAME(0, "DataSetFolder"), UA_NODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE),
-                                      objectAttributes, NULL, &generatedId);
-    UA_Variant_setScalarCopy(output, &generatedId, &UA_TYPES[UA_TYPES_NODEID]);
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-    retVal |= UA_Server_addReference(server, generatedId,
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                     UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_ADDPUBLISHEDDATAITEMS), true);
-    retVal |= UA_Server_addReference(server, generatedId,
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                     UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_REMOVEPUBLISHEDDATASET), true);
-    retVal |= UA_Server_addReference(server, generatedId,
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                     UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_ADDDATASETFOLDER), true);
-    retVal |= UA_Server_addReference(server, generatedId,
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                     UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_REMOVEDATASETFOLDER), true);
-#endif
-    return retVal;
-}
-#endif
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-static UA_StatusCode
-removeDataSetFolderAction(UA_Server *server,
-                          const UA_NodeId *sessionId, void *sessionHandle,
-                          const UA_NodeId *methodId, void *methodContext,
-                          const UA_NodeId *objectId, void *objectContext,
-                          size_t inputSize, const UA_Variant *input,
-                          size_t outputSize, UA_Variant *output){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    UA_NodeId nodeToRemove = *((UA_NodeId *) input[0].data);
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-    retVal |= UA_Server_deleteReference(server, nodeToRemove, UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), true,
-                                        UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_ADDPUBLISHEDDATAITEMS),
-                                        false);
-    retVal |= UA_Server_deleteReference(server, nodeToRemove, UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), true,
-                                        UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_REMOVEPUBLISHEDDATASET),
-                                        false);
-    retVal |= UA_Server_deleteReference(server, nodeToRemove, UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), true,
-                                        UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_ADDDATASETFOLDER),
-                                        false);
-    retVal |= UA_Server_deleteReference(server, nodeToRemove, UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), true,
-                                        UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_REMOVEDATASETFOLDER),
-                                        false);
-#endif
-    retVal |= UA_Server_deleteNode(server, nodeToRemove, false);
-    return retVal;
-}
-#endif
-
-UA_StatusCode
-addPublishedDataItemsRepresentation(UA_Server *server, UA_PublishedDataSet *publishedDataSet) {
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    if(publishedDataSet->config.name.length > 512)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    UA_STACKARRAY(char, pdsName, sizeof(char) * publishedDataSet->config.name.length +1);
-    memcpy(pdsName, publishedDataSet->config.name.data, publishedDataSet->config.name.length);
-    pdsName[publishedDataSet->config.name.length] = '\0';
-    //This code block must use a lock
-    UA_Nodestore_removeNode(server->nsCtx, &publishedDataSet->identifier);
-    retVal |= addPubSubObjectNode(server, pdsName, publishedDataSet->identifier.identifier.numeric,
-                                  UA_NS0ID_PUBLISHSUBSCRIBE_PUBLISHEDDATASETS,
-                                  UA_NS0ID_HASPROPERTY, UA_NS0ID_PUBLISHEDDATAITEMSTYPE);
-    //End lock zone
-
-    UA_ValueCallback valueCallback;
-    valueCallback.onRead = onRead;
-    valueCallback.onWrite = NULL;
-
-    UA_NodeId configurationVersionNode =
-        findSingleChildNode(server, UA_QUALIFIEDNAME(0, "ConfigurationVersion"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                            UA_NODEID_NUMERIC(0, publishedDataSet->identifier.identifier.numeric));
-    if(UA_NodeId_equal(&configurationVersionNode, &UA_NODEID_NULL))
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    UA_NodePropertyContext * configurationVersionContext = (UA_NodePropertyContext *)
-        UA_malloc(sizeof(UA_NodePropertyContext));
-    configurationVersionContext->parentNodeId = publishedDataSet->identifier;
-    configurationVersionContext->parentClassifier = UA_NS0ID_PUBLISHEDDATAITEMSTYPE;
-    configurationVersionContext->elementClassiefier =
-        UA_NS0ID_PUBLISHEDDATAITEMSTYPE_CONFIGURATIONVERSION;
-    retVal |= addVariableValueSource(server, valueCallback, configurationVersionNode,
-                                     configurationVersionContext);
-
-    UA_NodeId publishedDataNode =
-        findSingleChildNode(server, UA_QUALIFIEDNAME(0, "PublishedData"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                            UA_NODEID_NUMERIC(0, publishedDataSet->identifier.identifier.numeric));
-    if(UA_NodeId_equal(&publishedDataNode, &UA_NODEID_NULL))
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    UA_NodePropertyContext * publishingIntervalContext = (UA_NodePropertyContext *)
-        UA_malloc(sizeof(UA_NodePropertyContext));
-    publishingIntervalContext->parentNodeId = publishedDataSet->identifier;
-    publishingIntervalContext->parentClassifier = UA_NS0ID_PUBLISHEDDATAITEMSTYPE;
-    publishingIntervalContext->elementClassiefier = UA_NS0ID_PUBLISHEDDATAITEMSTYPE_PUBLISHEDDATA;
-    retVal |= addVariableValueSource(server, valueCallback, publishedDataNode,
-                                     publishingIntervalContext);
-
-    UA_NodeId dataSetMetaDataNode =
-        findSingleChildNode(server, UA_QUALIFIEDNAME(0, "DataSetMetaData"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                            UA_NODEID_NUMERIC(0, publishedDataSet->identifier.identifier.numeric));
-    if(UA_NodeId_equal(&dataSetMetaDataNode, &UA_NODEID_NULL))
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    UA_NodePropertyContext *metaDataContext = (UA_NodePropertyContext *)
-        UA_malloc(sizeof(UA_NodePropertyContext));
-    metaDataContext->parentNodeId = publishedDataSet->identifier;
-    metaDataContext->parentClassifier = UA_NS0ID_PUBLISHEDDATAITEMSTYPE;
-    metaDataContext->elementClassiefier = UA_NS0ID_PUBLISHEDDATAITEMSTYPE_DATASETMETADATA;
-    retVal |= addVariableValueSource(server, valueCallback, dataSetMetaDataNode, metaDataContext);
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-    retVal |= UA_Server_addReference(server, publishedDataSet->identifier,
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                     UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_PUBLISHEDDATAITEMSTYPE_ADDVARIABLES), true);
-    retVal |= UA_Server_addReference(server, publishedDataSet->identifier,
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                     UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_PUBLISHEDDATAITEMSTYPE_REMOVEVARIABLES), true);
-#endif
-    return retVal;
-}
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-static UA_StatusCode
-addPublishedDataItemsAction(UA_Server *server,
-                            const UA_NodeId *sessionId, void *sessionHandle,
-                            const UA_NodeId *methodId, void *methodContext,
-                            const UA_NodeId *objectId, void *objectContext,
-                            size_t inputSize, const UA_Variant *input,
-                            size_t outputSize, UA_Variant *output){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    size_t fieldNameAliasesSize = input[1].arrayLength;
-    UA_String * fieldNameAliases = (UA_String *) input[1].data;
-    size_t fieldFlagsSize = input[2].arrayLength;
-    UA_DataSetFieldFlags * fieldFlags = (UA_DataSetFieldFlags *) input[2].data;
-    size_t variablesToAddSize = input[3].arrayLength;
-    UA_PublishedVariableDataType *variablesToAddField = (UA_PublishedVariableDataType *) input[3].data;
-
-    if(!(fieldNameAliasesSize == fieldFlagsSize || fieldFlagsSize == variablesToAddSize))
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-
-    UA_PublishedDataSetConfig publishedDataSetConfig;
-    memset(&publishedDataSetConfig, 0, sizeof(publishedDataSetConfig));
-    publishedDataSetConfig.name = *((UA_String *) input[0].data);
-    publishedDataSetConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-
-    UA_NodeId dataSetItemsNodeId;
-    retVal |= UA_Server_addPublishedDataSet(server, &publishedDataSetConfig, &dataSetItemsNodeId).addResult;
-
-    UA_DataSetFieldConfig dataSetFieldConfig;
-    for(size_t j = 0; j < variablesToAddSize; ++j) {
-        memset(&dataSetFieldConfig, 0, sizeof(dataSetFieldConfig));
-        dataSetFieldConfig.dataSetFieldType = UA_PUBSUB_DATASETFIELD_VARIABLE;
-        dataSetFieldConfig.field.variable.fieldNameAlias = fieldNameAliases[j];
-        if(fieldFlags[j] == UA_DATASETFIELDFLAGS_PROMOTEDFIELD){
-            dataSetFieldConfig.field.variable.promotedField = UA_TRUE;
-        }
-        dataSetFieldConfig.field.variable.publishParameters = variablesToAddField[j];
-        UA_Server_addDataSetField(server, dataSetItemsNodeId, &dataSetFieldConfig, NULL);
-    }
-    UA_PublishedVariableDataType_clear(variablesToAddField);
-    return retVal;
-}
-#endif
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-static UA_StatusCode
-addVariablesAction(UA_Server *server,
-                   const UA_NodeId *sessionId, void *sessionHandle,
-                   const UA_NodeId *methodId, void *methodContext,
-                   const UA_NodeId *objectId, void *objectContext,
-                   size_t inputSize, const UA_Variant *input,
-                   size_t outputSize, UA_Variant *output){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-
-    return retVal;
-}
-
-static UA_StatusCode
-removeVariablesAction(UA_Server *server,
-                      const UA_NodeId *sessionId, void *sessionHandle,
-                      const UA_NodeId *methodId, void *methodContext,
-                      const UA_NodeId *objectId, void *objectContext,
-                      size_t inputSize, const UA_Variant *input,
-                      size_t outputSize, UA_Variant *output){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-
-    return retVal;
-}
-#endif
-
-
-UA_StatusCode
-removePublishedDataSetRepresentation(UA_Server *server, UA_PublishedDataSet *publishedDataSet){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    retVal |= UA_Server_deleteNode(server, publishedDataSet->identifier, false);
-
-    return retVal;
-}
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-static UA_StatusCode
-removePublishedDataSetAction(UA_Server *server,
-                             const UA_NodeId *sessionId, void *sessionHandle,
-                             const UA_NodeId *methodId, void *methodContext,
-                             const UA_NodeId *objectId, void *objectContext,
-                             size_t inputSize, const UA_Variant *input,
-                             size_t outputSize, UA_Variant *output){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    UA_NodeId nodeToRemove = *((UA_NodeId *) input[0].data);
-    retVal |= UA_Server_removePublishedDataSet(server, nodeToRemove);
-    return retVal;
-}
-#endif
-
-/**********************************************/
-/*               WriterGroup                  */
-/**********************************************/
-
-static UA_StatusCode
-readContentMask(UA_Server *server, const UA_NodeId *sessionId,
-                void *sessionContext, const UA_NodeId *nodeId,
-                void *nodeContext, UA_Boolean includeSourceTimeStamp,
-                const UA_NumericRange *range, UA_DataValue *value) {
-    UA_WriterGroup *writerGroup = (UA_WriterGroup*)nodeContext;
-    if((writerGroup->config.messageSettings.encoding != UA_EXTENSIONOBJECT_DECODED &&
-        writerGroup->config.messageSettings.encoding != UA_EXTENSIONOBJECT_DECODED_NODELETE) ||
-       writerGroup->config.messageSettings.content.decoded.type !=
-       &UA_TYPES[UA_TYPES_UADPWRITERGROUPMESSAGEDATATYPE])
-        return UA_STATUSCODE_BADINTERNALERROR;
-    UA_UadpWriterGroupMessageDataType *wgm = (UA_UadpWriterGroupMessageDataType*)
-        writerGroup->config.messageSettings.content.decoded.data;
-
-    UA_Variant_setScalarCopy(&value->value, &wgm->networkMessageContentMask,
-                             &UA_TYPES[UA_TYPES_UADPNETWORKMESSAGECONTENTMASK]);
-    value->hasValue = true;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-writeContentMask(UA_Server *server, const UA_NodeId *sessionId,
-                 void *sessionContext, const UA_NodeId *nodeId,
-                 void *nodeContext, const UA_NumericRange *range,
-                 const UA_DataValue *value) {
-    UA_WriterGroup *writerGroup = (UA_WriterGroup*)nodeContext;
-    if((writerGroup->config.messageSettings.encoding != UA_EXTENSIONOBJECT_DECODED &&
-        writerGroup->config.messageSettings.encoding != UA_EXTENSIONOBJECT_DECODED_NODELETE) ||
-       writerGroup->config.messageSettings.content.decoded.type !=
-       &UA_TYPES[UA_TYPES_UADPWRITERGROUPMESSAGEDATATYPE])
-        return UA_STATUSCODE_BADINTERNALERROR;
-    UA_UadpWriterGroupMessageDataType *wgm = (UA_UadpWriterGroupMessageDataType*)
-        writerGroup->config.messageSettings.content.decoded.data;
-
-    if(!value->value.type)
-        return UA_STATUSCODE_BADTYPEMISMATCH;
-    if(value->value.type->typeKind != UA_DATATYPEKIND_ENUM &&
-       value->value.type->typeKind != UA_DATATYPEKIND_INT32)
-        return UA_STATUSCODE_BADTYPEMISMATCH;
-
-    wgm->networkMessageContentMask = *(UA_UadpNetworkMessageContentMask*)value->value.data;
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-addWriterGroupRepresentation(UA_Server *server, UA_WriterGroup *writerGroup){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    if(writerGroup->config.name.length > 512)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    UA_STACKARRAY(char, wgName, sizeof(char) * writerGroup->config.name.length + 1);
-    memcpy(wgName, writerGroup->config.name.data, writerGroup->config.name.length);
-    wgName[writerGroup->config.name.length] = '\0';
-    //This code block must use a lock
-    UA_Nodestore_removeNode(server->nsCtx, &writerGroup->identifier);
-    retVal |= addPubSubObjectNode(server, wgName, writerGroup->identifier.identifier.numeric,
-                                  writerGroup->linkedConnection.identifier.numeric,
-                                  UA_NS0ID_HASCOMPONENT, UA_NS0ID_WRITERGROUPTYPE);
-    //End lock zone
-    UA_NodeId keepAliveNode =
-        findSingleChildNode(server, UA_QUALIFIEDNAME(0, "KeepAliveTime"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                            UA_NODEID_NUMERIC(0, writerGroup->identifier.identifier.numeric));
-    UA_NodeId publishingIntervalNode =
-        findSingleChildNode(server, UA_QUALIFIEDNAME(0, "PublishingInterval"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                            UA_NODEID_NUMERIC(0, writerGroup->identifier.identifier.numeric));
-    if(UA_NodeId_equal(&keepAliveNode, &UA_NODEID_NULL) ||
-       UA_NodeId_equal(&publishingIntervalNode, &UA_NODEID_NULL))
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    UA_NodePropertyContext * publishingIntervalContext = (UA_NodePropertyContext *)
-        UA_malloc(sizeof(UA_NodePropertyContext));
-    publishingIntervalContext->parentNodeId = writerGroup->identifier;
-    publishingIntervalContext->parentClassifier = UA_NS0ID_WRITERGROUPTYPE;
-    publishingIntervalContext->elementClassiefier = UA_NS0ID_WRITERGROUPTYPE_PUBLISHINGINTERVAL;
-    UA_ValueCallback valueCallback;
-    valueCallback.onRead = onRead;
-    valueCallback.onWrite = onWrite;
-    retVal |= addVariableValueSource(server, valueCallback,
-                                     publishingIntervalNode, publishingIntervalContext);
-    UA_Server_writeAccessLevel(server, publishingIntervalNode,
-                               UA_ACCESSLEVELMASK_READ ^ UA_ACCESSLEVELMASK_WRITE);
-
-    UA_NodeId priorityNode =
-        findSingleChildNode(server, UA_QUALIFIEDNAME(0, "Priority"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                            UA_NODEID_NUMERIC(0, writerGroup->identifier.identifier.numeric));
-    UA_NodeId writerGroupIdNode =
-        findSingleChildNode(server, UA_QUALIFIEDNAME(0, "WriterGroupId"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                            UA_NODEID_NUMERIC(0, writerGroup->identifier.identifier.numeric));
-    UA_Variant value;
-    UA_Variant_init(&value);
-    UA_Variant_setScalar(&value, &writerGroup->config.publishingInterval, &UA_TYPES[UA_TYPES_DURATION]);
-    UA_Server_writeValue(server, publishingIntervalNode, value);
-    UA_Variant_setScalar(&value, &writerGroup->config.keepAliveTime, &UA_TYPES[UA_TYPES_DURATION]);
-    UA_Server_writeValue(server, keepAliveNode, value);
-    UA_Variant_setScalar(&value, &writerGroup->config.priority, &UA_TYPES[UA_TYPES_BYTE]);
-    UA_Server_writeValue(server, priorityNode, value);
-    UA_Variant_setScalar(&value, &writerGroup->config.writerGroupId, &UA_TYPES[UA_TYPES_UINT16]);
-    UA_Server_writeValue(server, writerGroupIdNode, value);
-
-    retVal |= addPubSubObjectNode(server, "MessageSettings", 0,
-                                  writerGroup->identifier.identifier.numeric,
-                                  UA_NS0ID_HASCOMPONENT, UA_NS0ID_UADPWRITERGROUPMESSAGETYPE);
-
-    /* Find the variable with the content mask */
-
-    UA_NodeId messageSettingsId =
-        findSingleChildNode(server, UA_QUALIFIEDNAME(0, "MessageSettings"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                            UA_NODEID_NUMERIC(0, writerGroup->identifier.identifier.numeric));
-    UA_NodeId contentMaskId =
-        findSingleChildNode(server, UA_QUALIFIEDNAME(0, "NetworkMessageContentMask"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY), messageSettingsId);
-    if(UA_NodeId_equal(&messageSettingsId, &UA_NODEID_NULL) ||
-       UA_NodeId_equal(&contentMaskId, &UA_NODEID_NULL)) {
-        return UA_STATUSCODE_BADNOTFOUND;
-    }
-
-    /* Set the callback */
-    UA_DataSource ds;
-    ds.read = readContentMask;
-    ds.write = writeContentMask;
-    UA_Server_setVariableNode_dataSource(server, contentMaskId, ds);
-    UA_Server_setNodeContext(server, contentMaskId, writerGroup);
-
-    /* Make writable */
-    UA_Server_writeAccessLevel(server, contentMaskId,
-                               UA_ACCESSLEVELMASK_WRITE | UA_ACCESSLEVELMASK_READ);
-
-    return retVal;
-}
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-static UA_StatusCode
-addWriterGroupAction(UA_Server *server,
-                             const UA_NodeId *sessionId, void *sessionHandle,
-                             const UA_NodeId *methodId, void *methodContext,
-                             const UA_NodeId *objectId, void *objectContext,
-                             size_t inputSize, const UA_Variant *input,
-                             size_t outputSize, UA_Variant *output){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    UA_WriterGroupDataType *writerGroupDataType = ((UA_WriterGroupDataType *) input[0].data);
-    UA_NodeId generatedId;
-    UA_WriterGroupConfig writerGroupConfig;
-    memset(&writerGroupConfig, 0, sizeof(UA_WriterGroupConfig));
-    writerGroupConfig.name = writerGroupDataType->name;
-    writerGroupConfig.publishingInterval = writerGroupDataType->publishingInterval;
-    writerGroupConfig.writerGroupId = writerGroupDataType->writerGroupId;
-    writerGroupConfig.enabled = writerGroupDataType->enabled;
-    writerGroupConfig.priority = writerGroupDataType->priority;
-    //TODO remove hard coded UADP
-    writerGroupConfig.encodingMimeType = UA_PUBSUB_ENCODING_UADP;
-    //ToDo transfer all arguments to internal WGConfiguration
-    retVal |= UA_Server_addWriterGroup(server, *objectId, &writerGroupConfig, &generatedId);
-    UA_Variant_setScalarCopy(output, &generatedId, &UA_TYPES[UA_TYPES_NODEID]);
-    return retVal;
-}
-#endif
-
-UA_StatusCode
-removeGroupRepresentation(UA_Server *server, UA_WriterGroup *writerGroup) {
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    retVal |= UA_Server_deleteNode(server, writerGroup->identifier, false);
-    return retVal;
-}
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-static UA_StatusCode
-removeGroupAction(UA_Server *server,
-                             const UA_NodeId *sessionId, void *sessionHandle,
-                             const UA_NodeId *methodId, void *methodContext,
-                             const UA_NodeId *objectId, void *objectContext,
-                             size_t inputSize, const UA_Variant *input,
-                             size_t outputSize, UA_Variant *output){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    UA_NodeId nodeToRemove = *((UA_NodeId *) input[0].data);
-    if(UA_WriterGroup_findWGbyId(server, nodeToRemove) != NULL)
-        retVal |= UA_Server_removeWriterGroup(server, nodeToRemove);
-    //else
-        //retVal |= UA_Server_removeReaderGroup(server, nodeToRemve);
-    return retVal;
-}
-#endif
-
-/**********************************************/
-/*               ReaderGroup                  */
-/**********************************************/
-UA_StatusCode
-addReaderGroupRepresentation(UA_Server *server, UA_ReaderGroup *readerGroup){
-    //TODO implement reader part
-    return UA_STATUSCODE_BADNOTIMPLEMENTED;
-}
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-static UA_StatusCode
-addReaderGroupAction(UA_Server *server,
-                     const UA_NodeId *sessionId, void *sessionHandle,
-                     const UA_NodeId *methodId, void *methodContext,
-                     const UA_NodeId *objectId, void *objectContext,
-                     size_t inputSize, const UA_Variant *input,
-                     size_t outputSize, UA_Variant *output){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    //TODO implement reader part
-    return retVal;
-}
-#endif
-
-/**********************************************/
-/*               DataSetWriter                */
-/**********************************************/
-UA_StatusCode
-addDataSetWriterRepresentation(UA_Server *server, UA_DataSetWriter *dataSetWriter){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    if(dataSetWriter->config.name.length > 512)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    UA_STACKARRAY(char, dswName, sizeof(char) * dataSetWriter->config.name.length + 1);
-    memcpy(dswName, dataSetWriter->config.name.data, dataSetWriter->config.name.length);
-    dswName[dataSetWriter->config.name.length] = '\0';
-    //This code block must use a lock
-    UA_Nodestore_removeNode(server->nsCtx, &dataSetWriter->identifier);
-    retVal |= addPubSubObjectNode(server, dswName, dataSetWriter->identifier.identifier.numeric,
-                                  dataSetWriter->linkedWriterGroup.identifier.numeric,
-                                  UA_NS0ID_HASDATASETWRITER, UA_NS0ID_DATASETWRITERTYPE);
-    //End lock zone
-    retVal |= UA_Server_addReference(server, dataSetWriter->connectedDataSet,
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_DATASETTOWRITER),
-                                     UA_EXPANDEDNODEID_NUMERIC(0, dataSetWriter->identifier.identifier.numeric), true);
-
-
-    retVal |= addPubSubObjectNode(server, "MessageSettings", 0,
-                                  dataSetWriter->identifier.identifier.numeric,
-                                  UA_NS0ID_HASCOMPONENT, UA_NS0ID_UADPDATASETWRITERMESSAGETYPE);
-    return retVal;
-}
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-static UA_StatusCode
-addDataSetWriterAction(UA_Server *server,
-                       const UA_NodeId *sessionId, void *sessionHandle,
-                       const UA_NodeId *methodId, void *methodContext,
-                       const UA_NodeId *objectId, void *objectContext,
-                       size_t inputSize, const UA_Variant *input,
-                       size_t outputSize, UA_Variant *output){
-    UA_DataSetWriterDataType *dataSetWriterDataType = (UA_DataSetWriterDataType *) input[0].data;
-
-    UA_NodeId targetPDS = UA_NODEID_NULL;
-    for(size_t i = 0; i < server->pubSubManager.publishedDataSetsSize; ++i) {
-        if(UA_String_equal(&dataSetWriterDataType->dataSetName,
-                           &server->pubSubManager.publishedDataSets[i].config.name)){
-            targetPDS = server->pubSubManager.publishedDataSets[i].identifier;
-        }
-    }
-    if(UA_NodeId_isNull(&targetPDS))
-        return UA_STATUSCODE_BADPARENTNODEIDINVALID;
-
-    UA_NodeId generatedId;
-    UA_DataSetWriterConfig dataSetWriterConfig;
-    memset(&dataSetWriterConfig, 0, sizeof(UA_DataSetWriterConfig));
-    dataSetWriterConfig.name = dataSetWriterDataType->name;
-    dataSetWriterConfig.dataSetName = dataSetWriterDataType->dataSetName;
-    dataSetWriterConfig.keyFrameCount =  dataSetWriterDataType->keyFrameCount;
-    dataSetWriterConfig.dataSetWriterId = dataSetWriterDataType->dataSetWriterId;
-
-    UA_Server_addDataSetWriter(server, *objectId, targetPDS, &dataSetWriterConfig, &generatedId);
-    UA_Variant_setScalarCopy(output, &generatedId, &UA_TYPES[UA_TYPES_NODEID]);
-    return UA_STATUSCODE_GOOD;
-}
-#endif
-
-
-UA_StatusCode
-removeDataSetWriterRepresentation(UA_Server *server, UA_DataSetWriter *dataSetWriter) {
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    retVal |= UA_Server_deleteNode(server, dataSetWriter->identifier, false);
-    return retVal;
-}
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-static UA_StatusCode
-removeDataSetWriterAction(UA_Server *server,
-                          const UA_NodeId *sessionId, void *sessionHandle,
-                          const UA_NodeId *methodId, void *methodContext,
-                          const UA_NodeId *objectId, void *objectContext,
-                          size_t inputSize, const UA_Variant *input,
-                          size_t outputSize, UA_Variant *output){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    UA_NodeId nodeToRemove = *((UA_NodeId *) input[0].data);
-    retVal |= UA_Server_removeDataSetWriter(server, nodeToRemove);
-    return retVal;
-}
-#endif
-
-/**********************************************/
-/*                Destructors                 */
-/**********************************************/
-
-static void
-connectionTypeDestructor(UA_Server *server,
-                         const UA_NodeId *sessionId, void *sessionContext,
-                         const UA_NodeId *typeId, void *typeContext,
-                         const UA_NodeId *nodeId, void **nodeContext) {
-    UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_USERLAND, "Connection destructor called!");
-    UA_NodeId publisherIdNode;
-    publisherIdNode = findSingleChildNode(server, UA_QUALIFIEDNAME(0, "PublisherId"),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY), *nodeId);
-    UA_NodePropertyContext *internalConnectionContext;
-    UA_Server_getNodeContext(server, publisherIdNode, (void **) &internalConnectionContext);
-    if(!UA_NodeId_equal(&UA_NODEID_NULL , &publisherIdNode)){
-        UA_free(internalConnectionContext);
-    }
-
-}
-
-static void
-writerGroupTypeDestructor(UA_Server *server,
-                          const UA_NodeId *sessionId, void *sessionContext,
-                          const UA_NodeId *typeId, void *typeContext,
-                          const UA_NodeId *nodeId, void **nodeContext) {
-    UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_USERLAND, "WriterGroup destructor called!");
-    UA_NodeId intervalNode;
-    intervalNode = findSingleChildNode(server, UA_QUALIFIEDNAME(0, "PublishingInterval"),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY), *nodeId);
-    UA_NodePropertyContext *internalConnectionContext;
-    UA_Server_getNodeContext(server, intervalNode, (void **) &internalConnectionContext);
-    if(!UA_NodeId_equal(&UA_NODEID_NULL , &intervalNode)){
-        UA_free(internalConnectionContext);
-    }
-}
-
-static void
-readerGroupTypeDestructor(UA_Server *server,
-                          const UA_NodeId *sessionId, void *sessionContext,
-                          const UA_NodeId *typeId, void *typeContext,
-                          const UA_NodeId *nodeId, void **nodeContext) {
-    UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_USERLAND, "ReaderGroup destructor called!");
-}
-
-static void
-dataSetWriterTypeDestructor(UA_Server *server,
-                            const UA_NodeId *sessionId, void *sessionContext,
-                            const UA_NodeId *typeId, void *typeContext,
-                            const UA_NodeId *nodeId, void **nodeContext) {
-    UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_USERLAND, "DataSetWriter destructor called!");
-}
-
-static void
-dataSetReaderTypeDestructor(UA_Server *server,
-                            const UA_NodeId *sessionId, void *sessionContext,
-                            const UA_NodeId *typeId, void *typeContext,
-                            const UA_NodeId *nodeId, void **nodeContext) {
-    UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_USERLAND, "DataSetReader destructor called!");
-}
-
-static void
-publishedDataItemsTypeDestructor(UA_Server *server,
-                            const UA_NodeId *sessionId, void *sessionContext,
-                            const UA_NodeId *typeId, void *typeContext,
-                            const UA_NodeId *nodeId, void **nodeContext) {
-    UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_USERLAND,
-                "PublishedDataItems destructor called!");
-    void *childContext;
-    UA_NodeId node = findSingleChildNode(server, UA_QUALIFIEDNAME(0, "PublishedData"),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY), *nodeId);
-    UA_Server_getNodeContext(server, node, (void**)&childContext);
-    if(!UA_NodeId_equal(&UA_NODEID_NULL , &node))
-        UA_free(childContext);
-
-    node = findSingleChildNode(server, UA_QUALIFIEDNAME(0, "ConfigurationVersion"),
-                               UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                               *nodeId);
-    UA_Server_getNodeContext(server, node, (void**)&childContext);
-    if(!UA_NodeId_equal(&UA_NODEID_NULL , &node))
-        UA_free(childContext);
-
-    node = findSingleChildNode(server, UA_QUALIFIEDNAME(0, "DataSetMetaData"),
-                               UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY), *nodeId);
-    UA_Server_getNodeContext(server, node, (void**)&childContext);
-    if(!UA_NodeId_equal(&node, &UA_NODEID_NULL))
-        UA_free(childContext);
-}
-
-UA_StatusCode
-UA_Server_initPubSubNS0(UA_Server *server) {
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    UA_String profileArray[1];
-    profileArray[0] = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-
-    retVal |= writePubSubNs0VariableArray(server, UA_NS0ID_PUBLISHSUBSCRIBE_SUPPORTEDTRANSPORTPROFILES,
-                                    profileArray,
-                                    1, &UA_TYPES[UA_TYPES_STRING]);
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS
-    retVal |= UA_Server_setMethodNode_callback(server,
-                                               UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE_ADDCONNECTION), addPubSubConnectionAction);
-    retVal |= UA_Server_setMethodNode_callback(server,
-                                               UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE_REMOVECONNECTION), removeConnectionAction);
-    retVal |= UA_Server_addReference(server, UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE_PUBLISHEDDATASETS),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                     UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_ADDDATASETFOLDER), true);
-    retVal |= UA_Server_addReference(server, UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE_PUBLISHEDDATASETS),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                     UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_ADDPUBLISHEDDATAITEMS), true);
-    retVal |= UA_Server_addReference(server, UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE_PUBLISHEDDATASETS),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                     UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_REMOVEPUBLISHEDDATASET), true);
-    retVal |= UA_Server_addReference(server, UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE_PUBLISHEDDATASETS),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                     UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_REMOVEDATASETFOLDER), true);
-    retVal |= UA_Server_setMethodNode_callback(server,
-                                               UA_NODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_ADDDATASETFOLDER), addDataSetFolderAction);
-    retVal |= UA_Server_setMethodNode_callback(server,
-                                               UA_NODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_REMOVEDATASETFOLDER), removeDataSetFolderAction);
-    retVal |= UA_Server_setMethodNode_callback(server,
-                                               UA_NODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_ADDPUBLISHEDDATAITEMS), addPublishedDataItemsAction);
-    retVal |= UA_Server_setMethodNode_callback(server,
-                                               UA_NODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_REMOVEPUBLISHEDDATASET), removePublishedDataSetAction);
-    retVal |= UA_Server_setMethodNode_callback(server,
-                                               UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHEDDATAITEMSTYPE_ADDVARIABLES), addVariablesAction);
-    retVal |= UA_Server_setMethodNode_callback(server,
-                                               UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHEDDATAITEMSTYPE_REMOVEVARIABLES), removeVariablesAction);
-    retVal |= UA_Server_setMethodNode_callback(server, UA_NODEID_NUMERIC(0, UA_NS0ID_PUBSUBCONNECTIONTYPE_ADDWRITERGROUP), addWriterGroupAction);
-    retVal |= UA_Server_setMethodNode_callback(server, UA_NODEID_NUMERIC(0, UA_NS0ID_PUBSUBCONNECTIONTYPE_ADDREADERGROUP), addReaderGroupAction);
-    retVal |= UA_Server_setMethodNode_callback(server, UA_NODEID_NUMERIC(0, UA_NS0ID_PUBSUBCONNECTIONTYPE_REMOVEGROUP), removeGroupAction);
-    retVal |= UA_Server_setMethodNode_callback(server, UA_NODEID_NUMERIC(0, UA_NS0ID_WRITERGROUPTYPE_ADDDATASETWRITER), addDataSetWriterAction);
-    retVal |= UA_Server_setMethodNode_callback(server, UA_NODEID_NUMERIC(0, UA_NS0ID_WRITERGROUPTYPE_REMOVEDATASETWRITER), removeDataSetWriterAction);
-    retVal |= UA_Server_setMethodNode_callback(server, UA_NODEID_NUMERIC(0, UA_NS0ID_READERGROUPTYPE_ADDDATASETREADER), addDataSetReaderAction);
-    retVal |= UA_Server_setMethodNode_callback(server, UA_NODEID_NUMERIC(0, UA_NS0ID_READERGROUPTYPE_REMOVEDATASETREADER), removeDataSetReaderAction);
-
-#else
-    retVal |= UA_Server_deleteReference(server, UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE), UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), true,
-                                        UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE_ADDCONNECTION),
-                                        false);
-    retVal |= UA_Server_deleteReference(server, UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE), UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), true,
-                                        UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE_REMOVECONNECTION),
-                                        false);
-#endif
-    UA_NodeTypeLifecycle liveCycle;
-    liveCycle.constructor = NULL;
-    liveCycle.destructor = connectionTypeDestructor;
-    UA_Server_setNodeTypeLifecycle(server, UA_NODEID_NUMERIC(0, UA_NS0ID_PUBSUBCONNECTIONTYPE), liveCycle);
-    liveCycle.destructor = writerGroupTypeDestructor;
-    UA_Server_setNodeTypeLifecycle(server, UA_NODEID_NUMERIC(0, UA_NS0ID_WRITERGROUPTYPE), liveCycle);
-    liveCycle.destructor = readerGroupTypeDestructor;
-    UA_Server_setNodeTypeLifecycle(server, UA_NODEID_NUMERIC(0, UA_NS0ID_READERGROUPTYPE), liveCycle);
-    liveCycle.destructor = dataSetWriterTypeDestructor;
-    UA_Server_setNodeTypeLifecycle(server, UA_NODEID_NUMERIC(0, UA_NS0ID_DATASETWRITERDATATYPE), liveCycle);
-    liveCycle.destructor = publishedDataItemsTypeDestructor;
-    UA_Server_setNodeTypeLifecycle(server, UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHEDDATAITEMSTYPE), liveCycle);
-    liveCycle.destructor = dataSetReaderTypeDestructor;
-    UA_Server_setNodeTypeLifecycle(server, UA_NODEID_NUMERIC(0, UA_NS0ID_DATASETREADERDATATYPE), liveCycle);
-
-    return retVal;
-}
-
-#endif /* UA_ENABLE_PUBSUB_INFORMATIONMODEL */
diff --git a/ext/open62541/src/pubsub/ua_pubsub_ns0.h b/ext/open62541/src/pubsub/ua_pubsub_ns0.h
deleted file mode 100644
index 7f9ec9c..0000000
--- a/ext/open62541/src/pubsub/ua_pubsub_ns0.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017-2018 Fraunhofer IOSB (Author: Andreas Ebner)
- * Copyright (c) 2019 Kalycito Infotech Private Limited
- */
-
-#ifndef UA_PUBSUB_NS0_H_
-#define UA_PUBSUB_NS0_H_
-
-#include "server/ua_server_internal.h"
-#include "ua_pubsub.h"
-
-_UA_BEGIN_DECLS
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL /* conditional compilation */
-
-UA_StatusCode
-UA_Server_initPubSubNS0(UA_Server *server);
-
-UA_StatusCode
-addPubSubConnectionRepresentation(UA_Server *server, UA_PubSubConnection *connection);
-
-UA_StatusCode
-removePubSubConnectionRepresentation(UA_Server *server, UA_PubSubConnection *connection);
-
-UA_StatusCode
-addWriterGroupRepresentation(UA_Server *server, UA_WriterGroup *writerGroup);
-
-UA_StatusCode
-addReaderGroupRepresentation(UA_Server *server, UA_ReaderGroup *readerGroup);
-
-UA_StatusCode
-removeGroupRepresentation(UA_Server *server, UA_WriterGroup *writerGroup);
-
-UA_StatusCode
-addDataSetWriterRepresentation(UA_Server *server, UA_DataSetWriter *dataSetWriter);
-
-UA_StatusCode
-removeDataSetWriterRepresentation(UA_Server *server, UA_DataSetWriter *dataSetWriter);
-
-UA_StatusCode
-addPublishedDataItemsRepresentation(UA_Server *server, UA_PublishedDataSet *publishedDataSet);
-
-UA_StatusCode
-removePublishedDataSetRepresentation(UA_Server *server, UA_PublishedDataSet *publishedDataSet);
-
-UA_StatusCode
-addDataSetReaderRepresentation(UA_Server *server, UA_DataSetReader *dataSetReader);
-
-UA_StatusCode
-removeDataSetReaderRepresentation(UA_Server *server, UA_DataSetReader *dataSetReader);
-
-#endif /* UA_ENABLE_PUBSUB_INFORMATIONMODEL */
-
-_UA_END_DECLS
-
-#endif /* UA_PUBSUB_NS0_H_ */
diff --git a/ext/open62541/src/server/ua_discovery_manager.c b/ext/open62541/src/server/ua_discovery_manager.c
deleted file mode 100644
index 5024142..0000000
--- a/ext/open62541/src/server/ua_discovery_manager.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2014-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014, 2017 (c) Florian Palm
- *    Copyright 2015-2016, 2019 (c) Sten Grüner
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Julian Grothoff
- */
-
-#include "ua_server_internal.h"
-
-#ifdef UA_ENABLE_DISCOVERY
-
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-
-#ifndef IN_ZERONET
-#define IN_ZERONET(addr) ((addr & IN_CLASSA_NET) == 0)
-#endif
-
-/* Create multicast 224.0.0.251:5353 socket */
-static UA_SOCKET
-discovery_createMulticastSocket(UA_Server* server) {
-    UA_SOCKET s;
-    int flag = 1, ittl = 255;
-    struct sockaddr_in in;
-    struct ip_mreq mc;
-    char ttl = (char)255; // publish to complete net, not only subnet. See:
-                          // https://docs.oracle.com/cd/E23824_01/html/821-1602/sockets-137.html
-
-    memset(&in, 0, sizeof(in));
-    in.sin_family = AF_INET;
-    in.sin_port = htons(5353);
-    in.sin_addr.s_addr = 0;
-
-    if((s = UA_socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == UA_INVALID_SOCKET)
-        return UA_INVALID_SOCKET;
-
-#ifdef SO_REUSEPORT
-    UA_setsockopt(s, SOL_SOCKET, SO_REUSEPORT, (char *)&flag, sizeof(flag));
-#endif
-    UA_setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&flag, sizeof(flag));
-    if(UA_bind(s, (struct sockaddr *)&in, sizeof(in))) {
-        UA_close(s);
-        return UA_INVALID_SOCKET;
-    }
-
-    /* Custom outbound multicast interface */
-    size_t length = server->config.discovery.mdnsInterfaceIP.length;
-    if(length > 0){
-        char* interfaceName = (char*)UA_malloc(length+1);
-        if (!interfaceName) {
-            UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_NETWORK, "Multicast DNS: cannot alloc memory for iface name");
-            return 0;
-        }
-        struct in_addr ina;
-        memset(&ina, 0, sizeof(ina));
-        memcpy(interfaceName, server->config.discovery.mdnsInterfaceIP.data, length);
-        interfaceName[length] = '\0';
-        inet_pton(AF_INET, interfaceName, &ina);
-        UA_free(interfaceName);
-        /* Set interface for outbound multicast */
-        if (setsockopt(s, IPPROTO_IP, IP_MULTICAST_IF, (char*)&ina, sizeof(ina)) < 0)
-            UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER, "Multicast DNS: failed setting IP_MULTICAST_IF to %s: %s", inet_ntoa(ina), strerror(errno));
-    }
-
-    /* Check outbound multicast interface parameters */
-    struct in_addr interface_addr;
-    socklen_t addr_size = sizeof(struct in_addr);
-    if (getsockopt(s, IPPROTO_IP, IP_MULTICAST_IF, (char*)&interface_addr, &addr_size) <  0) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_NETWORK, "Multicast DNS: getsockopt(IP_MULTICAST_IF) failed");
-    }
-
-    if(IN_ZERONET(ntohl(interface_addr.s_addr))){
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_NETWORK, "Multicast DNS: outbound interface 0.0.0.0, it means that the first OS interface is used (you can explicitly set the interface by using 'discovery.mdnsInterfaceIP' config parameter)");
-    }else{
-        char buf[16];
-        inet_ntop(AF_INET, &interface_addr, buf, 16);
-        UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_NETWORK, "Multicast DNS: outbound interface is %s", buf);
-    }
-
-    mc.imr_multiaddr.s_addr = inet_addr("224.0.0.251");
-    mc.imr_interface.s_addr = htonl(INADDR_ANY);
-    UA_setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&mc, sizeof(mc));
-    UA_setsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ttl, sizeof(ttl));
-    UA_setsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ittl, sizeof(ittl));
-
-    UA_socket_set_nonblocking(s); //TODO: check return value
-    return s;
-}
-
-static UA_StatusCode
-initMulticastDiscoveryServer(UA_DiscoveryManager *dm, UA_Server* server) {
-    server->discoveryManager.mdnsDaemon = mdnsd_new(QCLASS_IN, 1000);
-    UA_initialize_architecture_network();
-
-    if((server->discoveryManager.mdnsSocket = discovery_createMulticastSocket(server)) == UA_INVALID_SOCKET) {
-        UA_LOG_SOCKET_ERRNO_WRAP(
-                UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "Could not create multicast socket. Error: %s", errno_str));
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-    mdnsd_register_receive_callback(server->discoveryManager.mdnsDaemon,
-                                    mdns_record_received, server);
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-destroyMulticastDiscoveryServer(UA_DiscoveryManager *dm) {
-    if (!dm->mdnsDaemon)
-        return;
-
-    mdnsd_shutdown(dm->mdnsDaemon);
-    mdnsd_free(dm->mdnsDaemon);
-
-    if(dm->mdnsSocket != UA_INVALID_SOCKET) {
-        UA_close(dm->mdnsSocket);
-        dm->mdnsSocket = UA_INVALID_SOCKET;
-    }
-}
-
-#endif /* UA_ENABLE_DISCOVERY_MULTICAST */
-
-void
-UA_DiscoveryManager_init(UA_DiscoveryManager *dm, UA_Server *server) {
-    LIST_INIT(&dm->registeredServers);
-    dm->registeredServersSize = 0;
-    LIST_INIT(&dm->periodicServerRegisterCallbacks);
-    dm->registerServerCallback = NULL;
-    dm->registerServerCallbackData = NULL;
-
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-    dm->mdnsDaemon = NULL;
-    dm->mdnsSocket = UA_INVALID_SOCKET;
-    dm->mdnsMainSrvAdded = false;
-    if(server->config.discovery.mdnsEnable)
-        initMulticastDiscoveryServer(dm, server);
-
-    LIST_INIT(&dm->serverOnNetwork);
-    dm->serverOnNetworkSize = 0;
-    dm->serverOnNetworkRecordIdCounter = 0;
-    dm->serverOnNetworkRecordIdLastReset = UA_DateTime_now();
-    memset(dm->serverOnNetworkHash, 0,
-           sizeof(struct serverOnNetwork_hash_entry*) * SERVER_ON_NETWORK_HASH_PRIME);
-
-    dm->serverOnNetworkCallback = NULL;
-    dm->serverOnNetworkCallbackData = NULL;
-#endif /* UA_ENABLE_DISCOVERY_MULTICAST */
-}
-
-void
-UA_DiscoveryManager_deleteMembers(UA_DiscoveryManager *dm, UA_Server *server) {
-    registeredServer_list_entry *rs, *rs_tmp;
-    LIST_FOREACH_SAFE(rs, &dm->registeredServers, pointers, rs_tmp) {
-        LIST_REMOVE(rs, pointers);
-        UA_RegisteredServer_deleteMembers(&rs->registeredServer);
-        UA_free(rs);
-    }
-    periodicServerRegisterCallback_entry *ps, *ps_tmp;
-    LIST_FOREACH_SAFE(ps, &dm->periodicServerRegisterCallbacks, pointers, ps_tmp) {
-        LIST_REMOVE(ps, pointers);
-        if (ps->callback->discovery_server_url)
-            UA_free(ps->callback->discovery_server_url);
-        UA_free(ps->callback);
-        UA_free(ps);
-    }
-
-# ifdef UA_ENABLE_DISCOVERY_MULTICAST
-    if(server->config.discovery.mdnsEnable)
-        destroyMulticastDiscoveryServer(dm);
-
-    serverOnNetwork_list_entry *son, *son_tmp;
-    LIST_FOREACH_SAFE(son, &dm->serverOnNetwork, pointers, son_tmp) {
-        LIST_REMOVE(son, pointers);
-        UA_ServerOnNetwork_deleteMembers(&son->serverOnNetwork);
-        if(son->pathTmp)
-            UA_free(son->pathTmp);
-        UA_free(son);
-    }
-
-    for(size_t i = 0; i < SERVER_ON_NETWORK_HASH_PRIME; i++) {
-        serverOnNetwork_hash_entry* currHash = dm->serverOnNetworkHash[i];
-        while(currHash) {
-            serverOnNetwork_hash_entry* nextHash = currHash->next;
-            UA_free(currHash);
-            currHash = nextHash;
-        }
-    }
-
-# endif /* UA_ENABLE_DISCOVERY_MULTICAST */
-}
-
-#endif /* UA_ENABLE_DISCOVERY */
diff --git a/ext/open62541/src/server/ua_discovery_manager.h b/ext/open62541/src/server/ua_discovery_manager.h
deleted file mode 100644
index 0399f99..0000000
--- a/ext/open62541/src/server/ua_discovery_manager.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2014-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014, 2017 (c) Florian Palm
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Julian Grothoff
- */
-
-#ifndef UA_DISCOVERY_MANAGER_H_
-#define UA_DISCOVERY_MANAGER_H_
-
-#include <open62541/server.h>
-
-#include "open62541_queue.h"
-
-_UA_BEGIN_DECLS
-
-#ifdef UA_ENABLE_DISCOVERY
-
-typedef struct registeredServer_list_entry {
-#if UA_MULTITHREADING >= 200
-    UA_DelayedCallback delayedCleanup;
-#endif
-    LIST_ENTRY(registeredServer_list_entry) pointers;
-    UA_RegisteredServer registeredServer;
-    UA_DateTime lastSeen;
-} registeredServer_list_entry;
-
-struct PeriodicServerRegisterCallback {
-    UA_UInt64 id;
-    UA_Double this_interval;
-    UA_Double default_interval;
-    UA_Boolean registered;
-    struct UA_Client* client;
-    char* discovery_server_url;
-};
-
-typedef struct periodicServerRegisterCallback_entry {
-#if UA_MULTITHREADING >= 200
-    UA_DelayedCallback delayedCleanup;
-#endif
-    LIST_ENTRY(periodicServerRegisterCallback_entry) pointers;
-    struct PeriodicServerRegisterCallback *callback;
-} periodicServerRegisterCallback_entry;
-
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-
-#include "mdnsd/libmdnsd/mdnsd.h"
-
-/**
- * TXT record:
- * [servername]-[hostname]._opcua-tcp._tcp.local. TXT path=/ caps=NA,DA,...
- *
- * A/AAAA record for all ip addresses:
- * [servername]-[hostname]._opcua-tcp._tcp.local. A [ip].
- * [hostname]. A [ip].
- */
-
-typedef struct serverOnNetwork_list_entry {
-#if UA_MULTITHREADING >= 200
-    UA_DelayedCallback delayedCleanup;
-#endif
-    LIST_ENTRY(serverOnNetwork_list_entry) pointers;
-    UA_ServerOnNetwork serverOnNetwork;
-    UA_DateTime created;
-    UA_DateTime lastSeen;
-    UA_Boolean txtSet;
-    UA_Boolean srvSet;
-    char* pathTmp;
-} serverOnNetwork_list_entry;
-
-#define SERVER_ON_NETWORK_HASH_PRIME 1009
-typedef struct serverOnNetwork_hash_entry {
-    serverOnNetwork_list_entry* entry;
-    struct serverOnNetwork_hash_entry* next;
-} serverOnNetwork_hash_entry;
-
-#endif
-
-typedef struct {
-    LIST_HEAD(, periodicServerRegisterCallback_entry) periodicServerRegisterCallbacks;
-    LIST_HEAD(, registeredServer_list_entry) registeredServers;
-    size_t registeredServersSize;
-    UA_Server_registerServerCallback registerServerCallback;
-    void* registerServerCallbackData;
-
-# ifdef UA_ENABLE_DISCOVERY_MULTICAST
-    mdns_daemon_t *mdnsDaemon;
-    UA_SOCKET mdnsSocket;
-    UA_Boolean mdnsMainSrvAdded;
-
-    LIST_HEAD(, serverOnNetwork_list_entry) serverOnNetwork;
-    size_t serverOnNetworkSize;
-
-    UA_UInt32 serverOnNetworkRecordIdCounter;
-    UA_DateTime serverOnNetworkRecordIdLastReset;
-
-    /* hash mapping domain name to serverOnNetwork list entry */
-    struct serverOnNetwork_hash_entry* serverOnNetworkHash[SERVER_ON_NETWORK_HASH_PRIME];
-
-    UA_Server_serverOnNetworkCallback serverOnNetworkCallback;
-    void* serverOnNetworkCallbackData;
-
-#if UA_MULTITHREADING >= 200
-    pthread_t mdnsThread;
-    UA_Boolean mdnsRunning;
-#  endif
-# endif /* UA_ENABLE_DISCOVERY_MULTICAST */
-} UA_DiscoveryManager;
-
-void UA_DiscoveryManager_init(UA_DiscoveryManager *dm, UA_Server *server);
-void UA_DiscoveryManager_deleteMembers(UA_DiscoveryManager *dm, UA_Server *server);
-
-/* Checks if a registration timed out and removes that registration.
- * Should be called periodically in main loop */
-void UA_Discovery_cleanupTimedOut(UA_Server *server, UA_DateTime nowMonotonic);
-
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-
-void
-UA_Server_updateMdnsForDiscoveryUrl(UA_Server *server, const UA_String *serverName,
-                                    const UA_MdnsDiscoveryConfiguration *mdnsConfig,
-                                    const UA_String *discoveryUrl,
-                                    UA_Boolean isOnline, UA_Boolean updateTxt);
-
-void mdns_record_received(const struct resource *r, void *data);
-
-void mdns_create_txt(UA_Server *server, const char *fullServiceDomain,
-                     const char *path, const UA_String *capabilites,
-                     const size_t capabilitiesSize,
-                     void (*conflict)(char *host, int type, void *arg));
-
-void mdns_set_address_record(UA_Server *server,
-                             const char *fullServiceDomain,
-                             const char *localDomain);
-
-mdns_record_t *
-mdns_find_record(mdns_daemon_t *mdnsDaemon, unsigned short type,
-                 const char *host, const char *rdname);
-
-void startMulticastDiscoveryServer(UA_Server *server);
-
-void stopMulticastDiscoveryServer(UA_Server *server);
-
-UA_StatusCode
-iterateMulticastDiscoveryServer(UA_Server* server, UA_DateTime *nextRepeat,
-                                UA_Boolean processIn);
-
-typedef enum {
-    UA_DISCOVERY_TCP,     /* OPC UA TCP mapping */
-    UA_DISCOVERY_TLS     /* OPC UA HTTPS mapping */
-} UA_DiscoveryProtocol;
-
-/* Send a multicast probe to find any other OPC UA server on the network through mDNS. */
-UA_StatusCode
-UA_Discovery_multicastQuery(UA_Server* server);
-
-UA_StatusCode
-UA_Discovery_addRecord(UA_Server *server, const UA_String *servername,
-                       const UA_String *hostname, UA_UInt16 port,
-                       const UA_String *path, const UA_DiscoveryProtocol protocol,
-                       UA_Boolean createTxt, const UA_String* capabilites,
-                       const size_t capabilitiesSize);
-UA_StatusCode
-UA_Discovery_removeRecord(UA_Server *server, const UA_String *servername,
-                          const UA_String *hostname, UA_UInt16 port,
-                          UA_Boolean removeTxt);
-
-#endif /* UA_ENABLE_DISCOVERY_MULTICAST */
-
-#endif /* UA_ENABLE_DISCOVERY */
-
-_UA_END_DECLS
-
-#endif /* UA_DISCOVERY_MANAGER_H_ */
diff --git a/ext/open62541/src/server/ua_nodes.c b/ext/open62541/src/server/ua_nodes.c
deleted file mode 100644
index 07930c8..0000000
--- a/ext/open62541/src/server/ua_nodes.c
+++ /dev/null
@@ -1,622 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2015-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015, 2017 (c) Florian Palm
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Julian Grothoff
- */
-
-#include "ua_server_internal.h"
-#include "ua_types_encoding_binary.h"
-
-/* There is no UA_Node_new() method here. Creating nodes is part of the
- * NodeStore layer */
-
-void UA_Node_deleteMembers(UA_Node *node) {
-    /* Delete standard content */
-    UA_NodeId_deleteMembers(&node->nodeId);
-    UA_QualifiedName_deleteMembers(&node->browseName);
-    UA_LocalizedText_deleteMembers(&node->displayName);
-    UA_LocalizedText_deleteMembers(&node->description);
-
-    /* Delete references */
-    UA_Node_deleteReferences(node);
-
-    /* Delete unique content of the nodeclass */
-    switch(node->nodeClass) {
-    case UA_NODECLASS_OBJECT:
-        break;
-    case UA_NODECLASS_METHOD:
-        break;
-    case UA_NODECLASS_OBJECTTYPE:
-        break;
-    case UA_NODECLASS_VARIABLE:
-    case UA_NODECLASS_VARIABLETYPE: {
-        UA_VariableNode *p = (UA_VariableNode*)node;
-        UA_NodeId_deleteMembers(&p->dataType);
-        UA_Array_delete(p->arrayDimensions, p->arrayDimensionsSize,
-                        &UA_TYPES[UA_TYPES_INT32]);
-        p->arrayDimensions = NULL;
-        p->arrayDimensionsSize = 0;
-        if(p->valueSource == UA_VALUESOURCE_DATA)
-            UA_DataValue_deleteMembers(&p->value.data.value);
-        break;
-    }
-    case UA_NODECLASS_REFERENCETYPE: {
-        UA_ReferenceTypeNode *p = (UA_ReferenceTypeNode*)node;
-        UA_LocalizedText_deleteMembers(&p->inverseName);
-        break;
-    }
-    case UA_NODECLASS_DATATYPE:
-        break;
-    case UA_NODECLASS_VIEW:
-        break;
-    default:
-        break;
-    }
-}
-
-static UA_StatusCode
-UA_ObjectNode_copy(const UA_ObjectNode *src, UA_ObjectNode *dst) {
-    dst->eventNotifier = src->eventNotifier;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-UA_CommonVariableNode_copy(const UA_VariableNode *src, UA_VariableNode *dst) {
-    UA_StatusCode retval = UA_Array_copy(src->arrayDimensions,
-                                         src->arrayDimensionsSize,
-                                         (void**)&dst->arrayDimensions,
-                                         &UA_TYPES[UA_TYPES_INT32]);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    dst->arrayDimensionsSize = src->arrayDimensionsSize;
-    retval = UA_NodeId_copy(&src->dataType, &dst->dataType);
-    dst->valueRank = src->valueRank;
-    dst->valueSource = src->valueSource;
-    if(src->valueSource == UA_VALUESOURCE_DATA) {
-        retval |= UA_DataValue_copy(&src->value.data.value,
-                                    &dst->value.data.value);
-        dst->value.data.callback = src->value.data.callback;
-    } else
-        dst->value.dataSource = src->value.dataSource;
-    return retval;
-}
-
-static UA_StatusCode
-UA_VariableNode_copy(const UA_VariableNode *src, UA_VariableNode *dst) {
-    UA_StatusCode retval = UA_CommonVariableNode_copy(src, dst);
-    dst->accessLevel = src->accessLevel;
-    dst->minimumSamplingInterval = src->minimumSamplingInterval;
-    dst->historizing = src->historizing;
-    return retval;
-}
-
-static UA_StatusCode
-UA_VariableTypeNode_copy(const UA_VariableTypeNode *src,
-                         UA_VariableTypeNode *dst) {
-    UA_StatusCode retval = UA_CommonVariableNode_copy((const UA_VariableNode*)src,
-                                                      (UA_VariableNode*)dst);
-    dst->isAbstract = src->isAbstract;
-    return retval;
-}
-
-static UA_StatusCode
-UA_MethodNode_copy(const UA_MethodNode *src, UA_MethodNode *dst) {
-    dst->executable = src->executable;
-    dst->method = src->method;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-UA_ObjectTypeNode_copy(const UA_ObjectTypeNode *src, UA_ObjectTypeNode *dst) {
-    dst->isAbstract = src->isAbstract;
-    dst->lifecycle = src->lifecycle;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-UA_ReferenceTypeNode_copy(const UA_ReferenceTypeNode *src,
-                          UA_ReferenceTypeNode *dst) {
-    UA_StatusCode retval = UA_LocalizedText_copy(&src->inverseName,
-                                                 &dst->inverseName);
-    dst->isAbstract = src->isAbstract;
-    dst->symmetric = src->symmetric;
-    return retval;
-}
-
-static UA_StatusCode
-UA_DataTypeNode_copy(const UA_DataTypeNode *src, UA_DataTypeNode *dst) {
-    dst->isAbstract = src->isAbstract;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-UA_ViewNode_copy(const UA_ViewNode *src, UA_ViewNode *dst) {
-    dst->containsNoLoops = src->containsNoLoops;
-    dst->eventNotifier = src->eventNotifier;
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_Node_copy(const UA_Node *src, UA_Node *dst) {
-    if(src->nodeClass != dst->nodeClass)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Copy standard content */
-    UA_StatusCode retval = UA_NodeId_copy(&src->nodeId, &dst->nodeId);
-    retval |= UA_QualifiedName_copy(&src->browseName, &dst->browseName);
-    retval |= UA_LocalizedText_copy(&src->displayName, &dst->displayName);
-    retval |= UA_LocalizedText_copy(&src->description, &dst->description);
-    dst->writeMask = src->writeMask;
-    dst->context = src->context;
-    dst->constructed = src->constructed;
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Node_deleteMembers(dst);
-        return retval;
-    }
-
-    /* Copy the references */
-    dst->references = NULL;
-    if(src->referencesSize > 0) {
-        dst->references = (UA_NodeReferenceKind*)
-            UA_calloc(src->referencesSize, sizeof(UA_NodeReferenceKind));
-        if(!dst->references) {
-            UA_Node_deleteMembers(dst);
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        dst->referencesSize = src->referencesSize;
-
-        for(size_t i = 0; i < src->referencesSize; ++i) {
-            UA_NodeReferenceKind *srefs = &src->references[i];
-            UA_NodeReferenceKind *drefs = &dst->references[i];
-            drefs->isInverse = srefs->isInverse;
-            retval = UA_NodeId_copy(&srefs->referenceTypeId, &drefs->referenceTypeId);
-            if(retval != UA_STATUSCODE_GOOD)
-                break;
-            retval = UA_Array_copy(srefs->targetIds, srefs->targetIdsSize,
-                                    (void**)&drefs->targetIds,
-                                    &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-            if(retval != UA_STATUSCODE_GOOD)
-                break;
-            drefs->targetIdsSize = srefs->targetIdsSize;
-        }
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_Node_deleteMembers(dst);
-            return retval;
-        }
-    }
-
-    /* Copy unique content of the nodeclass */
-    switch(src->nodeClass) {
-    case UA_NODECLASS_OBJECT:
-        retval = UA_ObjectNode_copy((const UA_ObjectNode*)src, (UA_ObjectNode*)dst);
-        break;
-    case UA_NODECLASS_VARIABLE:
-        retval = UA_VariableNode_copy((const UA_VariableNode*)src, (UA_VariableNode*)dst);
-        break;
-    case UA_NODECLASS_METHOD:
-        retval = UA_MethodNode_copy((const UA_MethodNode*)src, (UA_MethodNode*)dst);
-        break;
-    case UA_NODECLASS_OBJECTTYPE:
-        retval = UA_ObjectTypeNode_copy((const UA_ObjectTypeNode*)src, (UA_ObjectTypeNode*)dst);
-        break;
-    case UA_NODECLASS_VARIABLETYPE:
-        retval = UA_VariableTypeNode_copy((const UA_VariableTypeNode*)src, (UA_VariableTypeNode*)dst);
-        break;
-    case UA_NODECLASS_REFERENCETYPE:
-        retval = UA_ReferenceTypeNode_copy((const UA_ReferenceTypeNode*)src, (UA_ReferenceTypeNode*)dst);
-        break;
-    case UA_NODECLASS_DATATYPE:
-        retval = UA_DataTypeNode_copy((const UA_DataTypeNode*)src, (UA_DataTypeNode*)dst);
-        break;
-    case UA_NODECLASS_VIEW:
-        retval = UA_ViewNode_copy((const UA_ViewNode*)src, (UA_ViewNode*)dst);
-        break;
-    default:
-        break;
-    }
-
-    if(retval != UA_STATUSCODE_GOOD)
-        UA_Node_deleteMembers(dst);
-
-    return retval;
-}
-
-UA_Node *
-UA_Node_copy_alloc(const UA_Node *src) {
-    /* use dstPtr to trick static code analysis in accepting dirty cast */
-    size_t nodesize = 0;
-    switch(src->nodeClass) {
-        case UA_NODECLASS_OBJECT:
-            nodesize = sizeof(UA_ObjectNode);
-            break;
-        case UA_NODECLASS_VARIABLE:
-            nodesize = sizeof(UA_VariableNode);
-            break;
-        case UA_NODECLASS_METHOD:
-            nodesize = sizeof(UA_MethodNode);
-            break;
-        case UA_NODECLASS_OBJECTTYPE:
-            nodesize = sizeof(UA_ObjectTypeNode);
-            break;
-        case UA_NODECLASS_VARIABLETYPE:
-            nodesize = sizeof(UA_VariableTypeNode);
-            break;
-        case UA_NODECLASS_REFERENCETYPE:
-            nodesize = sizeof(UA_ReferenceTypeNode);
-            break;
-        case UA_NODECLASS_DATATYPE:
-            nodesize = sizeof(UA_DataTypeNode);
-            break;
-        case UA_NODECLASS_VIEW:
-            nodesize = sizeof(UA_ViewNode);
-            break;
-        default:
-            return NULL;
-    }
-
-    UA_Node *dst = (UA_Node*)UA_calloc(1,nodesize);
-    if(!dst)
-        return NULL;
-
-    dst->nodeClass = src->nodeClass;
-
-    UA_StatusCode retval = UA_Node_copy(src, dst);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_free(dst);
-        return NULL;
-    }
-    return dst;
-}
-/******************************/
-/* Copy Attributes into Nodes */
-/******************************/
-
-static UA_StatusCode
-copyStandardAttributes(UA_Node *node, const UA_NodeAttributes *attr) {
-    /* retval  = UA_NodeId_copy(&item->requestedNewNodeId.nodeId, &node->nodeId); */
-    /* retval |= UA_QualifiedName_copy(&item->browseName, &node->browseName); */
-
-    UA_StatusCode retval;
-    /* The new nodeset format has optional display name.
-     * See https://github.com/open62541/open62541/issues/2627
-     * If display name is NULL, then we take the name part of the browse name */
-    if (attr->displayName.text.length == 0) {
-        retval = UA_String_copy(&node->browseName.name,
-                                       &node->displayName.text);
-    } else {
-        retval = UA_LocalizedText_copy(&attr->displayName,
-                                                     &node->displayName);
-        retval |= UA_LocalizedText_copy(&attr->description, &node->description);
-    }
-
-    node->writeMask = attr->writeMask;
-    return retval;
-}
-
-static UA_StatusCode
-copyCommonVariableAttributes(UA_VariableNode *node,
-                             const UA_VariableAttributes *attr) {
-    /* Copy the array dimensions */
-    UA_StatusCode retval =
-        UA_Array_copy(attr->arrayDimensions, attr->arrayDimensionsSize,
-                      (void**)&node->arrayDimensions, &UA_TYPES[UA_TYPES_UINT32]);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    node->arrayDimensionsSize = attr->arrayDimensionsSize;
-
-    /* Data type and value rank */
-    retval = UA_NodeId_copy(&attr->dataType, &node->dataType);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    node->valueRank = attr->valueRank;
-
-    /* Copy the value */
-    retval = UA_Variant_copy(&attr->value, &node->value.data.value.value);
-    node->valueSource = UA_VALUESOURCE_DATA;
-    node->value.data.value.hasValue = (node->value.data.value.value.type != NULL);
-
-    return retval;
-}
-
-static UA_StatusCode
-copyVariableNodeAttributes(UA_VariableNode *vnode,
-                           const UA_VariableAttributes *attr) {
-    vnode->accessLevel = attr->accessLevel;
-    vnode->historizing = attr->historizing;
-    vnode->minimumSamplingInterval = attr->minimumSamplingInterval;
-    return copyCommonVariableAttributes(vnode, attr);
-}
-
-static UA_StatusCode
-copyVariableTypeNodeAttributes(UA_VariableTypeNode *vtnode,
-                               const UA_VariableTypeAttributes *attr) {
-    vtnode->isAbstract = attr->isAbstract;
-    return copyCommonVariableAttributes((UA_VariableNode*)vtnode,
-                                        (const UA_VariableAttributes*)attr);
-}
-
-static UA_StatusCode
-copyObjectNodeAttributes(UA_ObjectNode *onode, const UA_ObjectAttributes *attr) {
-    onode->eventNotifier = attr->eventNotifier;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-copyReferenceTypeNodeAttributes(UA_ReferenceTypeNode *rtnode,
-                                const UA_ReferenceTypeAttributes *attr) {
-    rtnode->isAbstract = attr->isAbstract;
-    rtnode->symmetric = attr->symmetric;
-    return UA_LocalizedText_copy(&attr->inverseName, &rtnode->inverseName);
-}
-
-static UA_StatusCode
-copyObjectTypeNodeAttributes(UA_ObjectTypeNode *otnode,
-                             const UA_ObjectTypeAttributes *attr) {
-    otnode->isAbstract = attr->isAbstract;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-copyViewNodeAttributes(UA_ViewNode *vnode, const UA_ViewAttributes *attr) {
-    vnode->containsNoLoops = attr->containsNoLoops;
-    vnode->eventNotifier = attr->eventNotifier;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-copyDataTypeNodeAttributes(UA_DataTypeNode *dtnode,
-                           const UA_DataTypeAttributes *attr) {
-    dtnode->isAbstract = attr->isAbstract;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-copyMethodNodeAttributes(UA_MethodNode *mnode,
-                         const UA_MethodAttributes *attr) {
-    mnode->executable = attr->executable;
-    return UA_STATUSCODE_GOOD;
-}
-
-#define CHECK_ATTRIBUTES(TYPE)                           \
-    if(attributeType != &UA_TYPES[UA_TYPES_##TYPE]) {    \
-        retval = UA_STATUSCODE_BADNODEATTRIBUTESINVALID; \
-        break;                                           \
-    }
-
-UA_StatusCode
-UA_Node_setAttributes(UA_Node *node, const void *attributes,
-                      const UA_DataType *attributeType) {
-    /* Copy the attributes into the node */
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    switch(node->nodeClass) {
-    case UA_NODECLASS_OBJECT:
-        CHECK_ATTRIBUTES(OBJECTATTRIBUTES);
-        retval = copyObjectNodeAttributes((UA_ObjectNode*)node,
-                                          (const UA_ObjectAttributes*)attributes);
-        break;
-    case UA_NODECLASS_VARIABLE:
-        CHECK_ATTRIBUTES(VARIABLEATTRIBUTES);
-        retval = copyVariableNodeAttributes((UA_VariableNode*)node,
-                                            (const UA_VariableAttributes*)attributes);
-        break;
-    case UA_NODECLASS_OBJECTTYPE:
-        CHECK_ATTRIBUTES(OBJECTTYPEATTRIBUTES);
-        retval = copyObjectTypeNodeAttributes((UA_ObjectTypeNode*)node,
-                                              (const UA_ObjectTypeAttributes*)attributes);
-        break;
-    case UA_NODECLASS_VARIABLETYPE:
-        CHECK_ATTRIBUTES(VARIABLETYPEATTRIBUTES);
-        retval = copyVariableTypeNodeAttributes((UA_VariableTypeNode*)node,
-                                                (const UA_VariableTypeAttributes*)attributes);
-        break;
-    case UA_NODECLASS_REFERENCETYPE:
-        CHECK_ATTRIBUTES(REFERENCETYPEATTRIBUTES);
-        retval = copyReferenceTypeNodeAttributes((UA_ReferenceTypeNode*)node,
-                                                 (const UA_ReferenceTypeAttributes*)attributes);
-        break;
-    case UA_NODECLASS_DATATYPE:
-        CHECK_ATTRIBUTES(DATATYPEATTRIBUTES);
-        retval = copyDataTypeNodeAttributes((UA_DataTypeNode*)node,
-                                            (const UA_DataTypeAttributes*)attributes);
-        break;
-    case UA_NODECLASS_VIEW:
-        CHECK_ATTRIBUTES(VIEWATTRIBUTES);
-        retval = copyViewNodeAttributes((UA_ViewNode*)node,
-                                        (const UA_ViewAttributes*)attributes);
-        break;
-    case UA_NODECLASS_METHOD:
-        CHECK_ATTRIBUTES(METHODATTRIBUTES);
-        retval = copyMethodNodeAttributes((UA_MethodNode*)node,
-                                          (const UA_MethodAttributes*)attributes);
-        break;
-    case UA_NODECLASS_UNSPECIFIED:
-    default:
-        retval = UA_STATUSCODE_BADNODECLASSINVALID;
-    }
-
-    if(retval == UA_STATUSCODE_GOOD)
-        retval = copyStandardAttributes(node, (const UA_NodeAttributes*)attributes);
-    if(retval != UA_STATUSCODE_GOOD)
-        UA_Node_deleteMembers(node);
-    return retval;
-}
-
-/*********************/
-/* Manage References */
-/*********************/
-
-static UA_StatusCode
-addReferenceTarget(UA_NodeReferenceKind *refs, const UA_ExpandedNodeId *target) {
-    UA_ExpandedNodeId *targets =
-        (UA_ExpandedNodeId*) UA_realloc(refs->targetIds,
-                                        sizeof(UA_ExpandedNodeId) * (refs->targetIdsSize+1));
-    if(!targets)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    refs->targetIds = targets;
-    UA_StatusCode retval =
-        UA_ExpandedNodeId_copy(target, &refs->targetIds[refs->targetIdsSize]);
-
-    if(retval == UA_STATUSCODE_GOOD) {
-        refs->targetIdsSize++;
-    } else if(refs->targetIdsSize == 0) {
-        /* We had zero references before (realloc was a malloc) */
-        UA_free(refs->targetIds);
-        refs->targetIds = NULL;
-    }
-    return retval;
-}
-
-static UA_StatusCode
-addReferenceKind(UA_Node *node, const UA_AddReferencesItem *item) {
-    UA_NodeReferenceKind *refs =
-        (UA_NodeReferenceKind*)UA_realloc(node->references,
-                                          sizeof(UA_NodeReferenceKind) * (node->referencesSize+1));
-    if(!refs)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    node->references = refs;
-    UA_NodeReferenceKind *newRef = &refs[node->referencesSize];
-    memset(newRef, 0, sizeof(UA_NodeReferenceKind));
-
-    newRef->isInverse = !item->isForward;
-    UA_StatusCode retval = UA_NodeId_copy(&item->referenceTypeId, &newRef->referenceTypeId);
-    retval |= addReferenceTarget(newRef, &item->targetNodeId);
-
-    if(retval == UA_STATUSCODE_GOOD) {
-        node->referencesSize++;
-    } else {
-        UA_NodeId_deleteMembers(&newRef->referenceTypeId);
-        if(node->referencesSize == 0) {
-            UA_free(node->references);
-            node->references = NULL;
-        }
-    }
-    return retval;
-}
-
-UA_StatusCode
-UA_Node_addReference(UA_Node *node, const UA_AddReferencesItem *item) {
-    UA_NodeReferenceKind *existingRefs = NULL;
-    for(size_t i = 0; i < node->referencesSize; ++i) {
-        UA_NodeReferenceKind *refs = &node->references[i];
-        if(refs->isInverse != item->isForward
-                && UA_NodeId_equal(&refs->referenceTypeId, &item->referenceTypeId)) {
-            existingRefs = refs;
-            break;
-        }
-    }
-    if(existingRefs != NULL) {
-        for(size_t i = 0; i < existingRefs->targetIdsSize; i++) {
-            if(UA_ExpandedNodeId_equal(&existingRefs->targetIds[i],
-                                       &item->targetNodeId)) {
-                return UA_STATUSCODE_BADDUPLICATEREFERENCENOTALLOWED;
-            }
-        }
-        return addReferenceTarget(existingRefs, &item->targetNodeId);
-    }
-    return addReferenceKind(node, item);
-}
-
-UA_StatusCode
-UA_Node_deleteReference(UA_Node *node, const UA_DeleteReferencesItem *item) {
-    for(size_t i = node->referencesSize; i > 0; --i) {
-        UA_NodeReferenceKind *refs = &node->references[i-1];
-        if(item->isForward == refs->isInverse)
-            continue;
-        if(!UA_NodeId_equal(&item->referenceTypeId, &refs->referenceTypeId))
-            continue;
-
-        for(size_t j = refs->targetIdsSize; j > 0; --j) {
-            UA_ExpandedNodeId *target = &refs->targetIds[j-1];
-            if(!UA_NodeId_equal(&item->targetNodeId.nodeId, &target->nodeId))
-                continue;
-
-            /* Ok, delete the reference */
-            UA_ExpandedNodeId_deleteMembers(target);
-            refs->targetIdsSize--;
-
-            /* One matching target remaining */
-            if(refs->targetIdsSize > 0) {
-                if(j-1 != refs->targetIdsSize) // avoid valgrind error: Source
-                                               // and destination overlap in
-                                               // memcpy
-                    *target = refs->targetIds[refs->targetIdsSize];
-                return UA_STATUSCODE_GOOD;
-            }
-
-            /* No target for the ReferenceType remaining. Remove entry. */
-            UA_free(refs->targetIds);
-            UA_NodeId_deleteMembers(&refs->referenceTypeId);
-            node->referencesSize--;
-            if(node->referencesSize > 0) {
-                if(i-1 != node->referencesSize) // avoid valgrind error: Source
-                                                // and destination overlap in
-                                                // memcpy
-                    node->references[i-1] = node->references[node->referencesSize];
-                return UA_STATUSCODE_GOOD;
-            }
-
-            /* No remaining references of any ReferenceType */
-            UA_free(node->references);
-            node->references = NULL;
-            return UA_STATUSCODE_GOOD;
-        }
-    }
-    return UA_STATUSCODE_UNCERTAINREFERENCENOTDELETED;
-}
-
-void
-UA_Node_deleteReferencesSubset(UA_Node *node, size_t referencesSkipSize,
-                               UA_NodeId* referencesSkip) {
-    /* Nothing to do */
-    if(node->referencesSize == 0 || node->references == NULL)
-        return;
-
-    for(size_t i = node->referencesSize; i > 0; --i) {
-        UA_NodeReferenceKind *refs = &node->references[i-1];
-
-        /* Shall we keep the references of this type? */
-        UA_Boolean skip = false;
-        for(size_t j = 0; j < referencesSkipSize; j++) {
-            if(UA_NodeId_equal(&refs->referenceTypeId, &referencesSkip[j])) {
-                skip = true;
-                break;
-            }
-        }
-        if(skip)
-            continue;
-
-        /* Remove references */
-        UA_Array_delete(refs->targetIds, refs->targetIdsSize, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-        UA_NodeId_deleteMembers(&refs->referenceTypeId);
-        node->referencesSize--;
-
-        /* Move last references-kind entry to this position */
-        if(i-1 == node->referencesSize) /* Don't memcpy over the same position */
-            continue;
-        node->references[i-1] = node->references[node->referencesSize];
-    }
-
-    if(node->referencesSize == 0) {
-        /* The array is empty. Remove. */
-        UA_free(node->references);
-        node->references = NULL;
-    } else {
-        /* Realloc to save memory */
-        UA_NodeReferenceKind *refs = (UA_NodeReferenceKind*)
-            UA_realloc(node->references, sizeof(UA_NodeReferenceKind) * node->referencesSize);
-        if(refs) /* Do nothing if realloc fails */
-            node->references = refs;
-    }
-}
-
-void UA_Node_deleteReferences(UA_Node *node) {
-    UA_Node_deleteReferencesSubset(node, 0, NULL);
-}
diff --git a/ext/open62541/src/server/ua_securechannel_manager.c b/ext/open62541/src/server/ua_securechannel_manager.c
deleted file mode 100644
index 2da1b90..0000000
--- a/ext/open62541/src/server/ua_securechannel_manager.c
+++ /dev/null
@@ -1,286 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014-2017 (c) Florian Palm
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
- */
-
-#include "ua_securechannel_manager.h"
-
-#include <open62541/transport_generated.h>
-
-#include "ua_server_internal.h"
-#include "ua_session.h"
-
-#define STARTCHANNELID 1
-#define STARTTOKENID 1
-
-UA_StatusCode
-UA_SecureChannelManager_init(UA_SecureChannelManager *cm, UA_Server *server) {
-    TAILQ_INIT(&cm->channels);
-    // TODO: use an ID that is likely to be unique after a restart
-    cm->lastChannelId = STARTCHANNELID;
-    cm->lastTokenId = STARTTOKENID;
-    cm->currentChannelCount = 0;
-    cm->server = server;
-    return UA_STATUSCODE_GOOD;
-}
-
-void
-UA_SecureChannelManager_deleteMembers(UA_SecureChannelManager *cm) {
-    channel_entry *entry, *temp;
-    TAILQ_FOREACH_SAFE(entry, &cm->channels, pointers, temp) {
-        TAILQ_REMOVE(&cm->channels, entry, pointers);
-        UA_SecureChannel_close(&entry->channel);
-        UA_SecureChannel_deleteMembers(&entry->channel);
-        UA_free(entry);
-    }
-}
-
-static void
-removeSecureChannelCallback(void *_, channel_entry *entry) {
-    UA_SecureChannel_deleteMembers(&entry->channel);
-}
-
-static void
-removeSecureChannel(UA_SecureChannelManager *cm, channel_entry *entry) {
-    /* Close the SecureChannel */
-    UA_SecureChannel_close(&entry->channel);
-
-    /* Detach the channel and make the capacity available */
-    TAILQ_REMOVE(&cm->channels, entry, pointers);
-    UA_atomic_subUInt32(&cm->currentChannelCount, 1);
-
-    /* Add a delayed callback to remove the channel when the currently
-     * scheduled jobs have completed */
-    entry->cleanupCallback.callback = (UA_ApplicationCallback)removeSecureChannelCallback;
-    entry->cleanupCallback.application = NULL;
-    entry->cleanupCallback.data = entry;
-    UA_WorkQueue_enqueueDelayed(&cm->server->workQueue, &entry->cleanupCallback);
-}
-
-/* remove channels that were not renewed or who have no connection attached */
-void
-UA_SecureChannelManager_cleanupTimedOut(UA_SecureChannelManager *cm,
-                                        UA_DateTime nowMonotonic) {
-    channel_entry *entry, *temp;
-    TAILQ_FOREACH_SAFE(entry, &cm->channels, pointers, temp) {
-        /* The channel was closed internally */
-        if(entry->channel.state == UA_SECURECHANNELSTATE_CLOSED ||
-           !entry->channel.connection) {
-            removeSecureChannel(cm, entry);
-            continue;
-        }
-
-        /* The channel has timed out */
-        UA_DateTime timeout =
-            entry->channel.securityToken.createdAt +
-            (UA_DateTime)(entry->channel.securityToken.revisedLifetime * UA_DATETIME_MSEC);
-        if(timeout < nowMonotonic) {
-            UA_LOG_INFO_CHANNEL(&cm->server->config.logger, &entry->channel,
-                                "SecureChannel has timed out");
-            removeSecureChannel(cm, entry);
-            continue;
-        }
-
-        /* Revolve the channel tokens */
-        if(entry->channel.nextSecurityToken.tokenId > 0) {
-            UA_SecureChannel_revolveTokens(&entry->channel);
-        }
-    }
-}
-
-/* remove the first channel that has no session attached */
-static UA_Boolean
-purgeFirstChannelWithoutSession(UA_SecureChannelManager *cm) {
-    channel_entry *entry;
-    TAILQ_FOREACH(entry, &cm->channels, pointers) {
-        if(LIST_EMPTY(&entry->channel.sessions)) {
-            UA_LOG_INFO_CHANNEL(&cm->server->config.logger, &entry->channel,
-                                "Channel was purged since maxSecureChannels was "
-                                "reached and channel had no session attached");
-            removeSecureChannel(cm, entry);
-            return true;
-        }
-    }
-    return false;
-}
-
-UA_StatusCode
-UA_SecureChannelManager_create(UA_SecureChannelManager *const cm, UA_Connection *const connection,
-                               const UA_SecurityPolicy *const securityPolicy,
-                               const UA_AsymmetricAlgorithmSecurityHeader *const asymHeader) {
-    /* connection already has a channel attached. */
-    if(connection->channel != NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Check if there exists a free SC, otherwise try to purge one SC without a
-     * session the purge has been introduced to pass CTT, it is not clear what
-     * strategy is expected here */
-    if(cm->currentChannelCount >= cm->server->config.maxSecureChannels &&
-       !purgeFirstChannelWithoutSession(cm))
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    UA_LOG_INFO(&cm->server->config.logger, UA_LOGCATEGORY_SECURECHANNEL,
-                "Creating a new SecureChannel");
-
-    channel_entry *entry = (channel_entry *)UA_malloc(sizeof(channel_entry));
-    if(!entry)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    /* Create the channel context and parse the sender (remote) certificate used for the
-     * secureChannel. */
-    UA_SecureChannel_init(&entry->channel);
-    UA_StatusCode retval =
-        UA_SecureChannel_setSecurityPolicy(&entry->channel, securityPolicy,
-                                           &asymHeader->senderCertificate);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_free(entry);
-        return retval;
-    }
-
-    /* Channel state is fresh (0) */
-    entry->channel.securityToken.channelId = 0;
-    entry->channel.securityToken.tokenId = cm->lastTokenId++;
-    entry->channel.securityToken.createdAt = UA_DateTime_now();
-    entry->channel.securityToken.revisedLifetime = cm->server->config.maxSecurityTokenLifetime;
-
-    TAILQ_INSERT_TAIL(&cm->channels, entry, pointers);
-    UA_atomic_addUInt32(&cm->currentChannelCount, 1);
-    UA_Connection_attachSecureChannel(connection, &entry->channel);
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_SecureChannelManager_open(UA_SecureChannelManager *cm, UA_SecureChannel *channel,
-                             const UA_OpenSecureChannelRequest *request,
-                             UA_OpenSecureChannelResponse *response) {
-    if(channel->state != UA_SECURECHANNELSTATE_FRESH) {
-        UA_LOG_ERROR_CHANNEL(&cm->server->config.logger, channel,
-                             "Called open on already open or closed channel");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    if(request->securityMode != UA_MESSAGESECURITYMODE_NONE &&
-       UA_ByteString_equal(&channel->securityPolicy->policyUri, &UA_SECURITY_POLICY_NONE_URI)) {
-        return UA_STATUSCODE_BADSECURITYMODEREJECTED;
-    }
-
-    channel->securityMode = request->securityMode;
-    channel->securityToken.createdAt = UA_DateTime_nowMonotonic();
-    channel->securityToken.channelId = cm->lastChannelId++;
-    channel->securityToken.createdAt = UA_DateTime_now();
-
-    /* Set the lifetime. Lifetime 0 -> set the maximum possible */
-    channel->securityToken.revisedLifetime =
-        (request->requestedLifetime > cm->server->config.maxSecurityTokenLifetime) ?
-        cm->server->config.maxSecurityTokenLifetime : request->requestedLifetime;
-    if(channel->securityToken.revisedLifetime == 0)
-        channel->securityToken.revisedLifetime = cm->server->config.maxSecurityTokenLifetime;
-
-    /* Set the nonces and generate the keys */
-    UA_StatusCode retval = UA_ByteString_copy(&request->clientNonce, &channel->remoteNonce);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    retval = UA_SecureChannel_generateLocalNonce(channel);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    retval = UA_SecureChannel_generateNewKeys(channel);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Set the response */
-    retval = UA_ByteString_copy(&channel->localNonce, &response->serverNonce);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    retval = UA_ChannelSecurityToken_copy(&channel->securityToken, &response->securityToken);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    response->responseHeader.timestamp = UA_DateTime_now();
-    response->responseHeader.requestHandle = request->requestHeader.requestHandle;
-
-    /* The channel is open */
-    channel->state = UA_SECURECHANNELSTATE_OPEN;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_SecureChannelManager_renew(UA_SecureChannelManager *cm, UA_SecureChannel *channel,
-                              const UA_OpenSecureChannelRequest *request,
-                              UA_OpenSecureChannelResponse *response) {
-    if(channel->state != UA_SECURECHANNELSTATE_OPEN) {
-        UA_LOG_ERROR_CHANNEL(&cm->server->config.logger, channel,
-                             "Called renew on channel which is not open");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    /* If no security token is already issued */
-    if(channel->nextSecurityToken.tokenId == 0) {
-        channel->nextSecurityToken.channelId = channel->securityToken.channelId;
-        channel->nextSecurityToken.tokenId = cm->lastTokenId++;
-        channel->nextSecurityToken.createdAt = UA_DateTime_now();
-        channel->nextSecurityToken.revisedLifetime =
-            (request->requestedLifetime > cm->server->config.maxSecurityTokenLifetime) ?
-            cm->server->config.maxSecurityTokenLifetime : request->requestedLifetime;
-        if(channel->nextSecurityToken.revisedLifetime == 0) /* lifetime 0 -> return the max lifetime */
-            channel->nextSecurityToken.revisedLifetime = cm->server->config.maxSecurityTokenLifetime;
-    }
-
-    /* Replace the nonces */
-    UA_ByteString_deleteMembers(&channel->remoteNonce);
-    UA_StatusCode retval = UA_ByteString_copy(&request->clientNonce, &channel->remoteNonce);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    retval = UA_SecureChannel_generateLocalNonce(channel);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Set the response */
-    response->responseHeader.requestHandle = request->requestHeader.requestHandle;
-    retval = UA_ByteString_copy(&channel->localNonce, &response->serverNonce);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    retval = UA_ChannelSecurityToken_copy(&channel->nextSecurityToken, &response->securityToken);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Reset the internal creation date to the monotonic clock */
-    channel->nextSecurityToken.createdAt = UA_DateTime_nowMonotonic();
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_SecureChannel *
-UA_SecureChannelManager_get(UA_SecureChannelManager *cm, UA_UInt32 channelId) {
-    channel_entry *entry;
-    TAILQ_FOREACH(entry, &cm->channels, pointers) {
-        if(entry->channel.securityToken.channelId == channelId)
-            return &entry->channel;
-    }
-    return NULL;
-}
-
-UA_StatusCode
-UA_SecureChannelManager_close(UA_SecureChannelManager *cm, UA_UInt32 channelId) {
-    channel_entry *entry;
-    TAILQ_FOREACH(entry, &cm->channels, pointers) {
-        if(entry->channel.securityToken.channelId == channelId)
-            break;
-    }
-    if(!entry)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    removeSecureChannel(cm, entry);
-    return UA_STATUSCODE_GOOD;
-}
diff --git a/ext/open62541/src/server/ua_securechannel_manager.h b/ext/open62541/src/server/ua_securechannel_manager.h
deleted file mode 100644
index c9f040a..0000000
--- a/ext/open62541/src/server/ua_securechannel_manager.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014, 2017 (c) Florian Palm
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifndef UA_CHANNEL_MANAGER_H_
-#define UA_CHANNEL_MANAGER_H_
-
-#include <open62541/server.h>
-
-#include "open62541_queue.h"
-#include "ua_securechannel.h"
-#include "ua_util_internal.h"
-#include "ua_workqueue.h"
-
-_UA_BEGIN_DECLS
-
-typedef struct channel_entry {
-    UA_DelayedCallback cleanupCallback;
-    TAILQ_ENTRY(channel_entry) pointers;
-    UA_SecureChannel channel;
-} channel_entry;
-
-typedef struct {
-    TAILQ_HEAD(, channel_entry) channels; // doubly-linked list of channels
-    UA_UInt32 currentChannelCount;
-    UA_UInt32 lastChannelId;
-    UA_UInt32 lastTokenId;
-    UA_Server *server;
-} UA_SecureChannelManager;
-
-UA_StatusCode
-UA_SecureChannelManager_init(UA_SecureChannelManager *cm, UA_Server *server);
-
-/* Remove a all securechannels */
-void
-UA_SecureChannelManager_deleteMembers(UA_SecureChannelManager *cm);
-
-/* Remove timed out securechannels with a delayed callback. So all currently
- * scheduled jobs with a pointer to a securechannel can finish first. */
-void
-UA_SecureChannelManager_cleanupTimedOut(UA_SecureChannelManager *cm,
-                                        UA_DateTime nowMonotonic);
-
-UA_StatusCode
-UA_SecureChannelManager_create(UA_SecureChannelManager *const cm, UA_Connection *const connection,
-                               const UA_SecurityPolicy *const securityPolicy,
-                               const UA_AsymmetricAlgorithmSecurityHeader *const asymHeader);
-
-UA_StatusCode
-UA_SecureChannelManager_open(UA_SecureChannelManager *cm, UA_SecureChannel *channel,
-                             const UA_OpenSecureChannelRequest *request,
-                             UA_OpenSecureChannelResponse *response);
-
-UA_StatusCode
-UA_SecureChannelManager_renew(UA_SecureChannelManager *cm, UA_SecureChannel *channel,
-                              const UA_OpenSecureChannelRequest *request,
-                              UA_OpenSecureChannelResponse *response);
-
-UA_SecureChannel *
-UA_SecureChannelManager_get(UA_SecureChannelManager *cm, UA_UInt32 channelId);
-
-UA_StatusCode
-UA_SecureChannelManager_close(UA_SecureChannelManager *cm, UA_UInt32 channelId);
-
-_UA_END_DECLS
-
-#endif /* UA_CHANNEL_MANAGER_H_ */
diff --git a/ext/open62541/src/server/ua_server.c b/ext/open62541/src/server/ua_server.c
deleted file mode 100644
index 19ce406..0000000
--- a/ext/open62541/src/server/ua_server.c
+++ /dev/null
@@ -1,690 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014-2017 (c) Florian Palm
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015-2016 (c) Chris Iatrou
- *    Copyright 2015 (c) LEvertz
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2016 (c) Julian Grothoff
- *    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2016 (c) Lorenz Haas
- *    Copyright 2017 (c) frax2222
- *    Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2018 (c) Hilscher Gesellschaft für Systemautomation mbH (Author: Martin Lang)
- *    Copyright 2019 (c) Kalycito Infotech Private Limited
- */
-
-#include "ua_server_internal.h"
-
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL
-#include "ua_pubsub_ns0.h"
-#endif
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-#include "ua_subscription.h"
-#endif
-
-#ifdef UA_ENABLE_VALGRIND_INTERACTIVE
-#include <valgrind/memcheck.h>
-#endif
-
-/**********************/
-/* Namespace Handling */
-/**********************/
-
-/*
- * The NS1 Uri can be changed by the user to some custom string.
- * This method is called to initialize the NS1 Uri if it is not set before to the default Application URI.
- *
- * This is done as soon as the Namespace Array is read or written via node value read / write services,
- * or UA_Server_addNamespace, UA_Server_getNamespaceByName or UA_Server_run_startup is called.
- *
- * Therefore one has to set the custom NS1 URI before one of the previously mentioned steps.
- */
-void setupNs1Uri(UA_Server *server) {
-    if (!server->namespaces[1].data) {
-        UA_String_copy(&server->config.applicationDescription.applicationUri, &server->namespaces[1]);
-    }
-}
-
-UA_UInt16 addNamespace(UA_Server *server, const UA_String name) {
-    /* ensure that the uri for ns1 is set up from the app description */
-    setupNs1Uri(server);
-
-    /* Check if the namespace already exists in the server's namespace array */
-    for(UA_UInt16 i = 0; i < server->namespacesSize; ++i) {
-        if(UA_String_equal(&name, &server->namespaces[i]))
-            return i;
-    }
-
-    /* Make the array bigger */
-    UA_String *newNS = (UA_String*)UA_realloc(server->namespaces,
-                                              sizeof(UA_String) * (server->namespacesSize + 1));
-    if(!newNS)
-        return 0;
-    server->namespaces = newNS;
-
-    /* Copy the namespace string */
-    UA_StatusCode retval = UA_String_copy(&name, &server->namespaces[server->namespacesSize]);
-    if(retval != UA_STATUSCODE_GOOD)
-        return 0;
-
-    /* Announce the change (otherwise, the array appears unchanged) */
-    ++server->namespacesSize;
-    return (UA_UInt16)(server->namespacesSize - 1);
-}
-
-UA_UInt16 UA_Server_addNamespace(UA_Server *server, const char* name) {
-    /* Override const attribute to get string (dirty hack) */
-    UA_String nameString;
-    nameString.length = strlen(name);
-    nameString.data = (UA_Byte*)(uintptr_t)name;
-    return addNamespace(server, nameString);
-}
-
-UA_ServerConfig*
-UA_Server_getConfig(UA_Server *server)
-{
-  if(!server)
-    return NULL;
-
-  return &server->config;
-}
-
-UA_StatusCode
-UA_Server_getNamespaceByName(UA_Server *server, const UA_String namespaceUri,
-                             size_t* foundIndex) {
-    /* ensure that the uri for ns1 is set up from the app description */
-    setupNs1Uri(server);
-
-    for(size_t idx = 0; idx < server->namespacesSize; idx++) {
-        if(!UA_String_equal(&server->namespaces[idx], &namespaceUri))
-            continue;
-        (*foundIndex) = idx;
-        return UA_STATUSCODE_GOOD;
-    }
-    return UA_STATUSCODE_BADNOTFOUND;
-}
-
-UA_StatusCode
-UA_Server_forEachChildNodeCall(UA_Server *server, UA_NodeId parentNodeId,
-                               UA_NodeIteratorCallback callback, void *handle) {
-    const UA_Node *parent = UA_Nodestore_getNode(server->nsCtx, &parentNodeId);
-    if(!parent)
-        return UA_STATUSCODE_BADNODEIDINVALID;
-
-    /* TODO: We need to do an ugly copy of the references array since users may
-     * delete references from within the callback. In single-threaded mode this
-     * changes the same node we point at here. In multi-threaded mode, this
-     * creates a new copy as nodes are truly immutable.
-     * The callback could remove a node via the regular public API.
-     * This can remove a member of the nodes-array we iterate over...
-     * */
-    UA_Node *parentCopy = UA_Node_copy_alloc(parent);
-    if(!parentCopy) {
-        UA_Nodestore_releaseNode(server->nsCtx, parent);
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    for(size_t i = parentCopy->referencesSize; i > 0; --i) {
-        UA_NodeReferenceKind *ref = &parentCopy->references[i - 1];
-        for(size_t j = 0; j<ref->targetIdsSize; j++) {
-            retval = callback(ref->targetIds[j].nodeId, ref->isInverse,
-                              ref->referenceTypeId, handle);
-            if(retval != UA_STATUSCODE_GOOD)
-                goto cleanup;
-        }
-    }
-
-cleanup:
-    UA_Node_deleteMembers(parentCopy);
-    UA_free(parentCopy);
-
-    UA_Nodestore_releaseNode(server->nsCtx, parent);
-    return retval;
-}
-
-/********************/
-/* Server Lifecycle */
-/********************/
-
-/* The server needs to be stopped before it can be deleted */
-void UA_Server_delete(UA_Server *server) {
-    /* Delete all internal data */
-    UA_SecureChannelManager_deleteMembers(&server->secureChannelManager);
-    UA_SessionManager_deleteMembers(&server->sessionManager);
-    UA_Array_delete(server->namespaces, server->namespacesSize, &UA_TYPES[UA_TYPES_STRING]);
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    UA_MonitoredItem *mon, *mon_tmp;
-    LIST_FOREACH_SAFE(mon, &server->localMonitoredItems, listEntry, mon_tmp) {
-        LIST_REMOVE(mon, listEntry);
-        UA_MonitoredItem_delete(server, mon);
-    }
-#endif
-
-#ifdef UA_ENABLE_PUBSUB
-    UA_PubSubManager_delete(server, &server->pubSubManager);
-#endif
-
-#ifdef UA_ENABLE_DISCOVERY
-    UA_DiscoveryManager_deleteMembers(&server->discoveryManager, server);
-#endif
-
-#if UA_MULTITHREADING >= 100
-    UA_LOCK_DESTROY(server->networkMutex)
-    UA_LOCK_DESTROY(server->serviceMutex)
-#endif
-
-    /* Clean up the Admin Session */
-    UA_Session_deleteMembersCleanup(&server->adminSession, server);
-
-    /* Clean up the work queue */
-    UA_WorkQueue_cleanup(&server->workQueue);
-
-    /* Delete the timed work */
-    UA_Timer_deleteMembers(&server->timer);
-
-    /* Clean up the nodestore */
-    UA_Nodestore_delete(server->nsCtx);
-
-    /* Clean up the config */
-    UA_ServerConfig_clean(&server->config);
-
-    /* Delete the server itself */
-    UA_free(server);
-}
-
-/* Recurring cleanup. Removing unused and timed-out channels and sessions */
-static void
-UA_Server_cleanup(UA_Server *server, void *_) {
-    UA_DateTime nowMonotonic = UA_DateTime_nowMonotonic();
-    UA_SessionManager_cleanupTimedOut(&server->sessionManager, nowMonotonic);
-    UA_SecureChannelManager_cleanupTimedOut(&server->secureChannelManager, nowMonotonic);
-#ifdef UA_ENABLE_DISCOVERY
-    UA_Discovery_cleanupTimedOut(server, nowMonotonic);
-#endif
-}
-
-/********************/
-/* Server Lifecycle */
-/********************/
-
-static UA_Server *
-UA_Server_init(UA_Server *server) {
-    /* Init start time to zero, the actual start time will be sampled in
-     * UA_Server_run_startup() */
-    server->startTime = 0;
-
-    /* Set a seed for non-cyptographic randomness */
-#ifndef UA_ENABLE_DETERMINISTIC_RNG
-    UA_random_seed((UA_UInt64)UA_DateTime_now());
-#endif
-
-#if UA_MULTITHREADING >= 100
-    UA_LOCK_INIT(server->networkMutex)
-    UA_LOCK_INIT(server->serviceMutex)
-#endif
-
-    /* Initialize the handling of repeated callbacks */
-    UA_Timer_init(&server->timer);
-
-    UA_WorkQueue_init(&server->workQueue);
-
-    /* Initialize the adminSession */
-    UA_Session_init(&server->adminSession);
-    server->adminSession.sessionId.identifierType = UA_NODEIDTYPE_GUID;
-    server->adminSession.sessionId.identifier.guid.data1 = 1;
-    server->adminSession.validTill = UA_INT64_MAX;
-
-    /* Create Namespaces 0 and 1
-     * Ns1 will be filled later with the uri from the app description */
-    server->namespaces = (UA_String *)UA_Array_new(2, &UA_TYPES[UA_TYPES_STRING]);
-    if(!server->namespaces) {
-        UA_Server_delete(server);
-        return NULL;
-    }
-    server->namespaces[0] = UA_STRING_ALLOC("http://opcfoundation.org/UA/");
-    server->namespaces[1] = UA_STRING_NULL;
-    server->namespacesSize = 2;
-
-    /* Initialized SecureChannel and Session managers */
-    UA_SecureChannelManager_init(&server->secureChannelManager, server);
-    UA_SessionManager_init(&server->sessionManager, server);
-
-    /* Add a regular callback for cleanup and maintenance. With a 10s interval. */
-    UA_Server_addRepeatedCallback(server, (UA_ServerCallback)UA_Server_cleanup, NULL,
-                                  10000.0, NULL);
-
-    /* Initialize namespace 0*/
-    UA_StatusCode retVal = UA_Nodestore_new(&server->nsCtx);
-    if(retVal != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    retVal = UA_Server_initNS0(server);
-    if(retVal != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    /* Build PubSub information model */
-#ifdef UA_ENABLE_PUBSUB_INFORMATIONMODEL
-    UA_Server_initPubSubNS0(server);
-#endif
-
-    return server;
-
- cleanup:
-    UA_Server_delete(server);
-    return NULL;
-}
-
-UA_Server *
-UA_Server_new() {
-    /* Allocate the server */
-    UA_Server *server = (UA_Server *)UA_calloc(1, sizeof(UA_Server));
-    if(!server)
-        return NULL;
-    return UA_Server_init(server);
-}
-
-
-UA_Server *
-UA_Server_newWithConfig(const UA_ServerConfig *config) {
-    UA_Server *server = (UA_Server *)UA_calloc(1, sizeof(UA_Server));
-    if(!server)
-        return NULL;
-    if(config)
-        server->config = *config;
-    return UA_Server_init(server);
-}
-
-/* Returns if the server should be shut down immediately */
-static UA_Boolean
-setServerShutdown(UA_Server *server) {
-    if(server->endTime != 0)
-        return false;
-    if(server->config.shutdownDelay == 0)
-        return true;
-    UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                   "Shutting down the server with a delay of %i ms", (int)server->config.shutdownDelay);
-    server->endTime = UA_DateTime_now() + (UA_DateTime)(server->config.shutdownDelay * UA_DATETIME_MSEC);
-    return false;
-}
-
-/*******************/
-/* Timed Callbacks */
-/*******************/
-
-UA_StatusCode
-UA_Server_addTimedCallback(UA_Server *server, UA_ServerCallback callback,
-                           void *data, UA_DateTime date, UA_UInt64 *callbackId) {
-    return UA_Timer_addTimedCallback(&server->timer,
-                                     (UA_ApplicationCallback)callback,
-                                     server, data, date, callbackId);
-}
-
-UA_StatusCode
-UA_Server_addRepeatedCallback(UA_Server *server, UA_ServerCallback callback,
-                              void *data, UA_Double interval_ms,
-                              UA_UInt64 *callbackId) {
-    return UA_Timer_addRepeatedCallback(&server->timer,
-                                        (UA_ApplicationCallback)callback,
-                                        server, data, interval_ms, callbackId);
-}
-
-UA_StatusCode
-UA_Server_changeRepeatedCallbackInterval(UA_Server *server, UA_UInt64 callbackId,
-                                         UA_Double interval_ms) {
-    return UA_Timer_changeRepeatedCallbackInterval(&server->timer, callbackId,
-                                                   interval_ms);
-}
-
-void
-UA_Server_removeCallback(UA_Server *server, UA_UInt64 callbackId) {
-    UA_Timer_removeCallback(&server->timer, callbackId);
-}
-
-UA_StatusCode UA_EXPORT
-UA_Server_updateCertificate(UA_Server *server,
-                            const UA_ByteString *oldCertificate,
-                            const UA_ByteString *newCertificate,
-                            const UA_ByteString *newPrivateKey,
-                            UA_Boolean closeSessions,
-                            UA_Boolean closeSecureChannels) {
-
-    if (server == NULL || oldCertificate == NULL
-        || newCertificate == NULL || newPrivateKey == NULL) {
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    if (closeSessions) {
-        UA_SessionManager *sm = &server->sessionManager;
-        session_list_entry *current;
-        LIST_FOREACH(current, &sm->sessions, pointers) {
-            if (UA_ByteString_equal(oldCertificate,
-                                    &current->session.header.channel->securityPolicy->localCertificate)) {
-                UA_SessionManager_removeSession(sm, &current->session.header.authenticationToken);
-            }
-        }
-
-    }
-
-    if (closeSecureChannels) {
-        UA_SecureChannelManager *cm = &server->secureChannelManager;
-        channel_entry *entry;
-        TAILQ_FOREACH(entry, &cm->channels, pointers) {
-            if(UA_ByteString_equal(&entry->channel.securityPolicy->localCertificate, oldCertificate)){
-                UA_SecureChannelManager_close(cm, entry->channel.securityToken.channelId);
-            }
-        }
-    }
-
-    size_t i = 0;
-    while (i < server->config.endpointsSize) {
-        UA_EndpointDescription *ed = &server->config.endpoints[i];
-        if (UA_ByteString_equal(&ed->serverCertificate, oldCertificate)) {
-            UA_String_deleteMembers(&ed->serverCertificate);
-            UA_String_copy(newCertificate, &ed->serverCertificate);
-            UA_SecurityPolicy *sp = UA_SecurityPolicy_getSecurityPolicyByUri(server, &server->config.endpoints[i].securityPolicyUri);
-            if(!sp)
-                return UA_STATUSCODE_BADINTERNALERROR;
-            sp->updateCertificateAndPrivateKey(sp, *newCertificate, *newPrivateKey);
-        }
-        i++;
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/***************************/
-/* Server lookup functions */
-/***************************/
-
-UA_SecurityPolicy *
-UA_SecurityPolicy_getSecurityPolicyByUri(const UA_Server *server,
-                                         const UA_ByteString *securityPolicyUri) {
-    for(size_t i = 0; i < server->config.securityPoliciesSize; i++) {
-        UA_SecurityPolicy *securityPolicyCandidate = &server->config.securityPolicies[i];
-        if(UA_ByteString_equal(securityPolicyUri, &securityPolicyCandidate->policyUri))
-            return securityPolicyCandidate;
-    }
-    return NULL;
-}
-
-#ifdef UA_ENABLE_ENCRYPTION
-/* The local ApplicationURI has to match the certificates of the
- * SecurityPolicies */
-static void
-verifyServerApplicationURI(const UA_Server *server) {
-#if UA_LOGLEVEL <= 400
-    for(size_t i = 0; i < server->config.securityPoliciesSize; i++) {
-        UA_SecurityPolicy *sp = &server->config.securityPolicies[i];
-        if(!sp->certificateVerification)
-            continue;
-        UA_StatusCode retval =
-            sp->certificateVerification->
-            verifyApplicationURI(sp->certificateVerification->context,
-                                 &sp->localCertificate,
-                                 &server->config.applicationDescription.applicationUri);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                           "The configured ApplicationURI does not match the URI "
-                           "specified in the certificate for the SecurityPolicy %.*s",
-                           (int)sp->policyUri.length, sp->policyUri.data);
-        }
-    }
-#endif
-}
-#endif
-
-/********************/
-/* Main Server Loop */
-/********************/
-
-#define UA_MAXTIMEOUT 50 /* Max timeout in ms between main-loop iterations */
-
-/* Start: Spin up the workers and the network layer and sample the server's
- *        start time.
- * Iterate: Process repeated callbacks and events in the network layer. This
- *          part can be driven from an external main-loop in an event-driven
- *          single-threaded architecture.
- * Stop: Stop workers, finish all callbacks, stop the network layer, clean up */
-
-UA_StatusCode
-UA_Server_run_startup(UA_Server *server) {
-    /* ensure that the uri for ns1 is set up from the app description */
-    setupNs1Uri(server);
-
-    /* write ServerArray with same ApplicationURI value as NamespaceArray */
-    UA_StatusCode retVal = writeNs0VariableArray(server, UA_NS0ID_SERVER_SERVERARRAY,
-                                    &server->config.applicationDescription.applicationUri,
-                                    1, &UA_TYPES[UA_TYPES_STRING]);
-    if(retVal != UA_STATUSCODE_GOOD)
-        return retVal;
-
-    if(server->state > UA_SERVERLIFECYCLE_FRESH)
-        return UA_STATUSCODE_GOOD;
-
-    /* At least one endpoint has to be configured */
-    if(server->config.endpointsSize == 0) {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                       "There has to be at least one endpoint.");
-    }
-
-    /* Initialized discovery */
-#ifdef UA_ENABLE_DISCOVERY
-    UA_DiscoveryManager_init(&server->discoveryManager, server);
-#endif
-
-    /* Does the ApplicationURI match the local certificates? */
-#ifdef UA_ENABLE_ENCRYPTION
-    verifyServerApplicationURI(server);
-#endif
-
-    /* Sample the start time and set it to the Server object */
-    server->startTime = UA_DateTime_now();
-    UA_Variant var;
-    UA_Variant_init(&var);
-    UA_Variant_setScalar(&var, &server->startTime, &UA_TYPES[UA_TYPES_DATETIME]);
-    UA_Server_writeValue(server,
-                         UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STARTTIME),
-                         var);
-
-    /* Start the networklayers */
-    UA_StatusCode result = UA_STATUSCODE_GOOD;
-    for(size_t i = 0; i < server->config.networkLayersSize; ++i) {
-        UA_ServerNetworkLayer *nl = &server->config.networkLayers[i];
-        result |= nl->start(nl, &server->config.customHostname);
-    }
-
-    /* Update the application description to match the previously added discovery urls.
-     * We can only do this after the network layer is started since it inits the discovery url */
-    if (server->config.applicationDescription.discoveryUrlsSize != 0) {
-        UA_Array_delete(server->config.applicationDescription.discoveryUrls, server->config.applicationDescription.discoveryUrlsSize, &UA_TYPES[UA_TYPES_STRING]);
-        server->config.applicationDescription.discoveryUrlsSize = 0;
-    }
-    server->config.applicationDescription.discoveryUrls = (UA_String *) UA_Array_new(server->config.networkLayersSize, &UA_TYPES[UA_TYPES_STRING]);
-    if (!server->config.applicationDescription.discoveryUrls) {
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-    server->config.applicationDescription.discoveryUrlsSize = server->config.networkLayersSize;
-    for (size_t i=0; i< server->config.applicationDescription.discoveryUrlsSize; i++) {
-        UA_ServerNetworkLayer *nl = &server->config.networkLayers[i];
-        UA_String_copy(&nl->discoveryUrl, &server->config.applicationDescription.discoveryUrls[i]);
-    }
-
-    /* Spin up the worker threads */
-#if UA_MULTITHREADING >= 200
-    UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                "Spinning up %u worker thread(s)", server->config.nThreads);
-    UA_WorkQueue_start(&server->workQueue, server->config.nThreads);
-#endif
-
-    /* Start the multicast discovery server */
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-    if(server->config.discovery.mdnsEnable)
-        startMulticastDiscoveryServer(server);
-#endif
-
-    server->state = UA_SERVERLIFECYCLE_FRESH;
-
-    return result;
-}
-
-static void
-serverExecuteRepeatedCallback(UA_Server *server, UA_ApplicationCallback cb,
-                        void *callbackApplication, void *data) {
-#if UA_MULTITHREADING >= 200
-    UA_WorkQueue_enqueue(&server->workQueue, cb, callbackApplication, data);
-#else
-    cb(callbackApplication, data);
-#endif
-}
-
-UA_UInt16
-UA_Server_run_iterate(UA_Server *server, UA_Boolean waitInternal) {
-    /* Process repeated work */
-    UA_DateTime now = UA_DateTime_nowMonotonic();
-    UA_DateTime nextRepeated = UA_Timer_process(&server->timer, now,
-                     (UA_TimerExecutionCallback)serverExecuteRepeatedCallback, server);
-    UA_DateTime latest = now + (UA_MAXTIMEOUT * UA_DATETIME_MSEC);
-    if(nextRepeated > latest)
-        nextRepeated = latest;
-
-    UA_UInt16 timeout = 0;
-
-    /* round always to upper value to avoid timeout to be set to 0
-    * if(nextRepeated - now) < (UA_DATETIME_MSEC/2) */
-    if(waitInternal)
-        timeout = (UA_UInt16)(((nextRepeated - now) + (UA_DATETIME_MSEC - 1)) / UA_DATETIME_MSEC);
-
-    /* Listen on the networklayer */
-    for(size_t i = 0; i < server->config.networkLayersSize; ++i) {
-        UA_ServerNetworkLayer *nl = &server->config.networkLayers[i];
-        nl->listen(nl, server, timeout);
-    }
-
-#if defined(UA_ENABLE_DISCOVERY_MULTICAST) && (UA_MULTITHREADING < 200)
-    if(server->config.discovery.mdnsEnable) {
-        // TODO multicastNextRepeat does not consider new input data (requests)
-        // on the socket. It will be handled on the next call. if needed, we
-        // need to use select with timeout on the multicast socket
-        // server->mdnsSocket (see example in mdnsd library) on higher level.
-        UA_DateTime multicastNextRepeat = 0;
-        UA_StatusCode hasNext =
-            iterateMulticastDiscoveryServer(server, &multicastNextRepeat, true);
-        if(hasNext == UA_STATUSCODE_GOOD && multicastNextRepeat < nextRepeated)
-            nextRepeated = multicastNextRepeat;
-    }
-#endif
-
-#if UA_MULTITHREADING < 200
-    UA_WorkQueue_manuallyProcessDelayed(&server->workQueue);
-#endif
-
-    now = UA_DateTime_nowMonotonic();
-    timeout = 0;
-    if(nextRepeated > now)
-        timeout = (UA_UInt16)((nextRepeated - now) / UA_DATETIME_MSEC);
-    return timeout;
-}
-
-UA_StatusCode
-UA_Server_run_shutdown(UA_Server *server) {
-    /* Stop the netowrk layer */
-    for(size_t i = 0; i < server->config.networkLayersSize; ++i) {
-        UA_ServerNetworkLayer *nl = &server->config.networkLayers[i];
-        nl->stop(nl, server);
-    }
-
-#if UA_MULTITHREADING >= 200
-    /* Shut down the workers */
-    UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                "Shutting down %u worker thread(s)",
-                (UA_UInt32)server->workQueue.workersSize);
-    UA_WorkQueue_stop(&server->workQueue);
-#endif
-
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-    /* Stop multicast discovery */
-    if(server->config.discovery.mdnsEnable)
-        stopMulticastDiscoveryServer(server);
-#endif
-
-    /* Execute all delayed callbacks */
-    UA_WorkQueue_cleanup(&server->workQueue);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_Boolean
-testShutdownCondition(UA_Server *server) {
-    if(server->endTime == 0)
-        return false;
-    return (UA_DateTime_now() > server->endTime);
-}
-
-UA_StatusCode
-UA_Server_run(UA_Server *server, const volatile UA_Boolean *running) {
-    UA_StatusCode retval = UA_Server_run_startup(server);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-#ifdef UA_ENABLE_VALGRIND_INTERACTIVE
-    size_t loopCount = 0;
-#endif
-    while(!testShutdownCondition(server)) {
-#ifdef UA_ENABLE_VALGRIND_INTERACTIVE
-        if(loopCount == 0) {
-            VALGRIND_DO_LEAK_CHECK;
-        }
-        ++loopCount;
-        loopCount %= UA_VALGRIND_INTERACTIVE_INTERVAL;
-#endif
-        UA_Server_run_iterate(server, true);
-        if(!*running) {
-            if(setServerShutdown(server))
-                break;
-        }
-    }
-    return UA_Server_run_shutdown(server);
-}
-
-#ifdef UA_ENABLE_HISTORIZING
-/* Allow insert of historical data */
-UA_Boolean
-UA_Server_AccessControl_allowHistoryUpdateUpdateData(UA_Server *server,
-                                                     const UA_NodeId *sessionId, void *sessionContext,
-                                                     const UA_NodeId *nodeId,
-                                                     UA_PerformUpdateType performInsertReplace,
-                                                     const UA_DataValue *value) {
-    if(server->config.accessControl.allowHistoryUpdateUpdateData &&
-            !server->config.accessControl.allowHistoryUpdateUpdateData(server, &server->config.accessControl,
-                                                                       sessionId, sessionContext, nodeId,
-                                                                       performInsertReplace, value)) {
-        return false;
-    }
-    return true;
-}
-
-/* Allow delete of historical data */
-UA_Boolean
-UA_Server_AccessControl_allowHistoryUpdateDeleteRawModified(UA_Server *server,
-                                                            const UA_NodeId *sessionId, void *sessionContext,
-                                                            const UA_NodeId *nodeId,
-                                                            UA_DateTime startTimestamp,
-                                                            UA_DateTime endTimestamp,
-                                                            bool isDeleteModified) {
-    if(server->config.accessControl.allowHistoryUpdateDeleteRawModified &&
-            !server->config.accessControl.allowHistoryUpdateDeleteRawModified(server, &server->config.accessControl,
-                                                                              sessionId, sessionContext, nodeId,
-                                                                              startTimestamp, endTimestamp,
-                                                                              isDeleteModified)) {
-        return false;
-    }
-    return true;
-
-}
-#endif /* UA_ENABLE_HISTORIZING */
diff --git a/ext/open62541/src/server/ua_server_binary.c b/ext/open62541/src/server/ua_server_binary.c
deleted file mode 100644
index 4b0908c..0000000
--- a/ext/open62541/src/server/ua_server_binary.c
+++ /dev/null
@@ -1,837 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014-2016 (c) Sten Grüner
- *    Copyright 2014-2015, 2017 (c) Florian Palm
- *    Copyright 2015-2016 (c) Chris Iatrou
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2016 (c) Joakim L. Gilje
- *    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2016 (c) TorbenD
- *    Copyright 2017 (c) frax2222
- *    Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2019 (c) Kalycito Infotech Private Limited
- */
-
-#include <open62541/transport_generated.h>
-#include <open62541/transport_generated_encoding_binary.h>
-#include <open62541/transport_generated_handling.h>
-#include <open62541/types_generated_encoding_binary.h>
-#include <open62541/types_generated_handling.h>
-
-#include "ua_securechannel_manager.h"
-#include "ua_server_internal.h"
-#include "ua_services.h"
-#include "ua_session_manager.h"
-
-#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
-// store the authentication token and session ID so we can help fuzzing by setting
-// these values in the next request automatically
-UA_NodeId unsafe_fuzz_authenticationToken = {0, UA_NODEIDTYPE_NUMERIC, {0}};
-#endif
-
-#ifdef UA_DEBUG_DUMP_PKGS_FILE
-void UA_debug_dumpCompleteChunk(UA_Server *const server, UA_Connection *const connection,
-                                UA_ByteString *messageBuffer);
-#endif
-
-/********************/
-/* Helper Functions */
-/********************/
-
-static UA_StatusCode
-sendServiceFaultWithRequest(UA_SecureChannel *channel,
-                            const UA_RequestHeader *requestHeader,
-                            const UA_DataType *responseType,
-                            UA_UInt32 requestId, UA_StatusCode error) {
-    UA_STACKARRAY(UA_Byte, response, responseType->memSize);
-    UA_init(response, responseType);
-    UA_ResponseHeader *responseHeader = (UA_ResponseHeader*)response;
-    responseHeader->requestHandle = requestHeader->requestHandle;
-    responseHeader->timestamp = UA_DateTime_now();
-    responseHeader->serviceResult = error;
-
-    /* Send error message. Message type is MSG and not ERR, since we are on a
-     * SecureChannel! */
-    UA_StatusCode retval =
-        UA_SecureChannel_sendSymmetricMessage(channel, requestId, UA_MESSAGETYPE_MSG,
-                                              response, responseType);
-
-    UA_LOG_DEBUG(channel->securityPolicy->logger, UA_LOGCATEGORY_SERVER,
-                 "Sent ServiceFault with error code %s", UA_StatusCode_name(error));
-    return retval;
-}
-
- /* This is not an ERR message, the connection is not closed afterwards */
-static UA_StatusCode
-sendServiceFault(UA_SecureChannel *channel, const UA_ByteString *msg,
-                 size_t offset, const UA_DataType *responseType,
-                 UA_UInt32 requestId, UA_StatusCode error) {
-    UA_RequestHeader requestHeader;
-    UA_StatusCode retval = UA_RequestHeader_decodeBinary(msg, &offset, &requestHeader);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    retval = sendServiceFaultWithRequest(channel, &requestHeader, responseType,
-                                         requestId, error);
-    UA_RequestHeader_deleteMembers(&requestHeader);
-    return retval;
-}
-
-static void
-getServicePointers(UA_UInt32 requestTypeId, const UA_DataType **requestType,
-                   const UA_DataType **responseType, UA_Service *service,
-                   UA_Boolean *requiresSession) {
-    switch(requestTypeId) {
-    case UA_NS0ID_GETENDPOINTSREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_GetEndpoints;
-        *requestType = &UA_TYPES[UA_TYPES_GETENDPOINTSREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_GETENDPOINTSRESPONSE];
-        *requiresSession = false;
-        break;
-    case UA_NS0ID_FINDSERVERSREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_FindServers;
-        *requestType = &UA_TYPES[UA_TYPES_FINDSERVERSREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_FINDSERVERSRESPONSE];
-        *requiresSession = false;
-        break;
-#ifdef UA_ENABLE_DISCOVERY
-# ifdef UA_ENABLE_DISCOVERY_MULTICAST
-    case UA_NS0ID_FINDSERVERSONNETWORKREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_FindServersOnNetwork;
-        *requestType = &UA_TYPES[UA_TYPES_FINDSERVERSONNETWORKREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_FINDSERVERSONNETWORKRESPONSE];
-        *requiresSession = false;
-        break;
-# endif
-    case UA_NS0ID_REGISTERSERVERREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_RegisterServer;
-        *requestType = &UA_TYPES[UA_TYPES_REGISTERSERVERREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_REGISTERSERVERRESPONSE];
-        *requiresSession = false;
-        break;
-    case UA_NS0ID_REGISTERSERVER2REQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_RegisterServer2;
-        *requestType = &UA_TYPES[UA_TYPES_REGISTERSERVER2REQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_REGISTERSERVER2RESPONSE];
-        *requiresSession = false;
-        break;
-#endif
-    case UA_NS0ID_CREATESESSIONREQUEST_ENCODING_DEFAULTBINARY:
-        *service = NULL; //(UA_Service)Service_CreateSession;
-        *requestType = &UA_TYPES[UA_TYPES_CREATESESSIONREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_CREATESESSIONRESPONSE];
-        *requiresSession = false;
-        break;
-    case UA_NS0ID_ACTIVATESESSIONREQUEST_ENCODING_DEFAULTBINARY:
-        *service = NULL; //(UA_Service)Service_ActivateSession;
-        *requestType = &UA_TYPES[UA_TYPES_ACTIVATESESSIONREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_ACTIVATESESSIONRESPONSE];
-        break;
-    case UA_NS0ID_CLOSESESSIONREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_CloseSession;
-        *requestType = &UA_TYPES[UA_TYPES_CLOSESESSIONREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_CLOSESESSIONRESPONSE];
-        break;
-    case UA_NS0ID_READREQUEST_ENCODING_DEFAULTBINARY:
-        *service = NULL;
-        *service = (UA_Service)Service_Read;
-        *requestType = &UA_TYPES[UA_TYPES_READREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_READRESPONSE];
-        break;
-    case UA_NS0ID_WRITEREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_Write;
-        *requestType = &UA_TYPES[UA_TYPES_WRITEREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_WRITERESPONSE];
-        break;
-    case UA_NS0ID_BROWSEREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_Browse;
-        *requestType = &UA_TYPES[UA_TYPES_BROWSEREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_BROWSERESPONSE];
-        break;
-    case UA_NS0ID_BROWSENEXTREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_BrowseNext;
-        *requestType = &UA_TYPES[UA_TYPES_BROWSENEXTREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_BROWSENEXTRESPONSE];
-        break;
-    case UA_NS0ID_REGISTERNODESREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_RegisterNodes;
-        *requestType = &UA_TYPES[UA_TYPES_REGISTERNODESREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_REGISTERNODESRESPONSE];
-        break;
-    case UA_NS0ID_UNREGISTERNODESREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_UnregisterNodes;
-        *requestType = &UA_TYPES[UA_TYPES_UNREGISTERNODESREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_UNREGISTERNODESRESPONSE];
-        break;
-    case UA_NS0ID_TRANSLATEBROWSEPATHSTONODEIDSREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_TranslateBrowsePathsToNodeIds;
-        *requestType = &UA_TYPES[UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSRESPONSE];
-        break;
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    case UA_NS0ID_CREATESUBSCRIPTIONREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_CreateSubscription;
-        *requestType = &UA_TYPES[UA_TYPES_CREATESUBSCRIPTIONREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_CREATESUBSCRIPTIONRESPONSE];
-        break;
-    case UA_NS0ID_PUBLISHREQUEST_ENCODING_DEFAULTBINARY:
-        *requestType = &UA_TYPES[UA_TYPES_PUBLISHREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_PUBLISHRESPONSE];
-        break;
-    case UA_NS0ID_REPUBLISHREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_Republish;
-        *requestType = &UA_TYPES[UA_TYPES_REPUBLISHREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_REPUBLISHRESPONSE];
-        break;
-    case UA_NS0ID_MODIFYSUBSCRIPTIONREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_ModifySubscription;
-        *requestType = &UA_TYPES[UA_TYPES_MODIFYSUBSCRIPTIONREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_MODIFYSUBSCRIPTIONRESPONSE];
-        break;
-    case UA_NS0ID_SETPUBLISHINGMODEREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_SetPublishingMode;
-        *requestType = &UA_TYPES[UA_TYPES_SETPUBLISHINGMODEREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_SETPUBLISHINGMODERESPONSE];
-        break;
-    case UA_NS0ID_DELETESUBSCRIPTIONSREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_DeleteSubscriptions;
-        *requestType = &UA_TYPES[UA_TYPES_DELETESUBSCRIPTIONSREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_DELETESUBSCRIPTIONSRESPONSE];
-        break;
-    case UA_NS0ID_CREATEMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_CreateMonitoredItems;
-        *requestType = &UA_TYPES[UA_TYPES_CREATEMONITOREDITEMSREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_CREATEMONITOREDITEMSRESPONSE];
-        break;
-    case UA_NS0ID_DELETEMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_DeleteMonitoredItems;
-        *requestType = &UA_TYPES[UA_TYPES_DELETEMONITOREDITEMSREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_DELETEMONITOREDITEMSRESPONSE];
-        break;
-    case UA_NS0ID_MODIFYMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_ModifyMonitoredItems;
-        *requestType = &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSRESPONSE];
-        break;
-    case UA_NS0ID_SETMONITORINGMODEREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_SetMonitoringMode;
-        *requestType = &UA_TYPES[UA_TYPES_SETMONITORINGMODEREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_SETMONITORINGMODERESPONSE];
-        break;
-#endif
-#ifdef UA_ENABLE_HISTORIZING
-        /* For History read */
-    case UA_NS0ID_HISTORYREADREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_HistoryRead;
-        *requestType = &UA_TYPES[UA_TYPES_HISTORYREADREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_HISTORYREADRESPONSE];
-        break;
-        /* For History update */
-    case UA_NS0ID_HISTORYUPDATEREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_HistoryUpdate;
-        *requestType = &UA_TYPES[UA_TYPES_HISTORYUPDATEREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_HISTORYUPDATERESPONSE];
-        break;
-#endif
-
-#ifdef UA_ENABLE_METHODCALLS
-    case UA_NS0ID_CALLREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_Call;
-        *requestType = &UA_TYPES[UA_TYPES_CALLREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_CALLRESPONSE];
-        break;
-#endif
-
-#ifdef UA_ENABLE_NODEMANAGEMENT
-    case UA_NS0ID_ADDNODESREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_AddNodes;
-        *requestType = &UA_TYPES[UA_TYPES_ADDNODESREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_ADDNODESRESPONSE];
-        break;
-    case UA_NS0ID_ADDREFERENCESREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_AddReferences;
-        *requestType = &UA_TYPES[UA_TYPES_ADDREFERENCESREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_ADDREFERENCESRESPONSE];
-        break;
-    case UA_NS0ID_DELETENODESREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_DeleteNodes;
-        *requestType = &UA_TYPES[UA_TYPES_DELETENODESREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_DELETENODESRESPONSE];
-        break;
-    case UA_NS0ID_DELETEREFERENCESREQUEST_ENCODING_DEFAULTBINARY:
-        *service = (UA_Service)Service_DeleteReferences;
-        *requestType = &UA_TYPES[UA_TYPES_DELETEREFERENCESREQUEST];
-        *responseType = &UA_TYPES[UA_TYPES_DELETEREFERENCESRESPONSE];
-        break;
-#endif
-
-    default:
-        break;
-    }
-}
-
-/*************************/
-/* Process Message Types */
-/*************************/
-
-/* HEL -> Open up the connection */
-static UA_StatusCode
-processHEL(UA_Server *server, UA_Connection *connection,
-           const UA_ByteString *msg, size_t *offset) {
-    UA_TcpHelloMessage helloMessage;
-    UA_StatusCode retval = UA_TcpHelloMessage_decodeBinary(msg, offset, &helloMessage);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Currently not checked */
-    UA_String_deleteMembers(&helloMessage.endpointUrl);
-
-    /* TODO: Use the config of the exact NetworkLayer */
-    if(server->config.networkLayersSize == 0)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    const UA_ConnectionConfig *localConfig = &server->config.networkLayers[0].localConnectionConfig;
-
-    /* Parameterize the connection */
-    UA_ConnectionConfig remoteConfig;
-    remoteConfig.protocolVersion = helloMessage.protocolVersion;
-    remoteConfig.sendBufferSize = helloMessage.sendBufferSize;
-    remoteConfig.recvBufferSize = helloMessage.receiveBufferSize;
-    remoteConfig.maxMessageSize = helloMessage.maxMessageSize;
-    remoteConfig.maxChunkCount = helloMessage.maxChunkCount;
-    retval = UA_Connection_processHELACK(connection, localConfig, &remoteConfig);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_NETWORK,
-                    "Connection %i | Error during the HEL/ACK handshake",
-                    (int)(connection->sockfd));
-        return retval;
-    }
-
-    /* Build acknowledge response */
-    UA_TcpAcknowledgeMessage ackMessage;
-    memcpy(&ackMessage, localConfig, sizeof(UA_TcpAcknowledgeMessage)); /* Same struct layout.. */
-    UA_TcpMessageHeader ackHeader;
-    ackHeader.messageTypeAndChunkType = UA_MESSAGETYPE_ACK + UA_CHUNKTYPE_FINAL;
-    ackHeader.messageSize = 8 + 20; /* ackHeader + ackMessage */
-
-    /* Get the send buffer from the network layer */
-    UA_ByteString ack_msg;
-    UA_ByteString_init(&ack_msg);
-    retval = connection->getSendBuffer(connection, connection->config.sendBufferSize, &ack_msg);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Encode and send the response */
-    UA_Byte *bufPos = ack_msg.data;
-    const UA_Byte *bufEnd = &ack_msg.data[ack_msg.length];
-
-    retval = UA_TcpMessageHeader_encodeBinary(&ackHeader, &bufPos, bufEnd);
-    if(retval != UA_STATUSCODE_GOOD) {
-        connection->releaseSendBuffer(connection, &ack_msg);
-        return retval;
-    }
-
-    retval = UA_TcpAcknowledgeMessage_encodeBinary(&ackMessage, &bufPos, bufEnd);
-    if(retval != UA_STATUSCODE_GOOD) {
-        connection->releaseSendBuffer(connection, &ack_msg);
-        return retval;
-    }
-    ack_msg.length = ackHeader.messageSize;
-    return connection->send(connection, &ack_msg);
-}
-
-/* OPN -> Open up/renew the securechannel */
-static UA_StatusCode
-processOPN(UA_Server *server, UA_SecureChannel *channel,
-           const UA_UInt32 requestId, const UA_ByteString *msg) {
-    /* Decode the request */
-    size_t offset = 0;
-    UA_NodeId requestType;
-    UA_OpenSecureChannelRequest openSecureChannelRequest;
-    UA_StatusCode retval = UA_NodeId_decodeBinary(msg, &offset, &requestType);
-
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_NodeId_deleteMembers(&requestType);
-        UA_LOG_INFO_CHANNEL(&server->config.logger, channel,
-                            "Could not decode the NodeId. Closing the connection");
-        UA_SecureChannelManager_close(&server->secureChannelManager, channel->securityToken.channelId);
-        return retval;
-    }
-    retval = UA_OpenSecureChannelRequest_decodeBinary(msg, &offset, &openSecureChannelRequest);
-
-    /* Error occurred */
-    if(retval != UA_STATUSCODE_GOOD ||
-       requestType.identifier.numeric != UA_TYPES[UA_TYPES_OPENSECURECHANNELREQUEST].binaryEncodingId) {
-        UA_NodeId_deleteMembers(&requestType);
-        UA_OpenSecureChannelRequest_deleteMembers(&openSecureChannelRequest);
-        UA_LOG_INFO_CHANNEL(&server->config.logger, channel,
-                            "Could not decode the OPN message. Closing the connection.");
-        UA_SecureChannelManager_close(&server->secureChannelManager, channel->securityToken.channelId);
-        return retval;
-    }
-    UA_NodeId_deleteMembers(&requestType);
-
-    /* Call the service */
-    UA_OpenSecureChannelResponse openScResponse;
-    UA_OpenSecureChannelResponse_init(&openScResponse);
-    Service_OpenSecureChannel(server, channel, &openSecureChannelRequest, &openScResponse);
-    UA_OpenSecureChannelRequest_deleteMembers(&openSecureChannelRequest);
-    if(openScResponse.responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-        UA_LOG_INFO_CHANNEL(&server->config.logger, channel, "Could not open a SecureChannel. "
-                            "Closing the connection.");
-        UA_SecureChannelManager_close(&server->secureChannelManager,
-                                      channel->securityToken.channelId);
-        return openScResponse.responseHeader.serviceResult;
-    }
-
-    /* Send the response */
-    retval = UA_SecureChannel_sendAsymmetricOPNMessage(channel, requestId, &openScResponse,
-                                                       &UA_TYPES[UA_TYPES_OPENSECURECHANNELRESPONSE]);
-    UA_OpenSecureChannelResponse_deleteMembers(&openScResponse);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_INFO_CHANNEL(&server->config.logger, channel,
-                            "Could not send the OPN answer with error code %s",
-                            UA_StatusCode_name(retval));
-        UA_SecureChannelManager_close(&server->secureChannelManager,
-                                      channel->securityToken.channelId);
-        return retval;
-    }
-
-    return retval;
-}
-
-static UA_StatusCode
-sendResponse(UA_SecureChannel *channel, UA_UInt32 requestId, UA_UInt32 requestHandle,
-             UA_ResponseHeader *responseHeader, const UA_DataType *responseType) {
-    /* Prepare the ResponseHeader */
-    responseHeader->requestHandle = requestHandle;
-    responseHeader->timestamp = UA_DateTime_now();
-
-    /* Start the message context */
-    UA_MessageContext mc;
-    UA_StatusCode retval = UA_MessageContext_begin(&mc, channel, requestId, UA_MESSAGETYPE_MSG);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Assert's required for clang-analyzer */
-    UA_assert(mc.buf_pos == &mc.messageBuffer.data[UA_SECURE_MESSAGE_HEADER_LENGTH]);
-    UA_assert(mc.buf_end <= &mc.messageBuffer.data[mc.messageBuffer.length]);
-
-    /* Encode the response type */
-    UA_NodeId typeId = UA_NODEID_NUMERIC(0, responseType->binaryEncodingId);
-    retval = UA_MessageContext_encode(&mc, &typeId, &UA_TYPES[UA_TYPES_NODEID]);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Encode the response */
-    retval = UA_MessageContext_encode(&mc, responseHeader, responseType);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Finish / send out */
-    return UA_MessageContext_finish(&mc);
-}
-
-static UA_StatusCode
-processMSGDecoded(UA_Server *server, UA_SecureChannel *channel, UA_UInt32 requestId,
-                  UA_Service service, const UA_RequestHeader *requestHeader,
-                  const UA_DataType *requestType, UA_ResponseHeader *responseHeader,
-                  const UA_DataType *responseType, UA_Boolean sessionRequired) {
-    /* CreateSession doesn't need a session */
-    if(requestType == &UA_TYPES[UA_TYPES_CREATESESSIONREQUEST]) {
-        Service_CreateSession(server, channel,
-                              (const UA_CreateSessionRequest *)requestHeader,
-                              (UA_CreateSessionResponse *)responseHeader);
-#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
-        /* Store the authentication token and session ID so we can help fuzzing
-         * by setting these values in the next request automatically */
-        UA_CreateSessionResponse *res = (UA_CreateSessionResponse *)responseHeader;
-        UA_NodeId_copy(&res->authenticationToken, &unsafe_fuzz_authenticationToken);
-#endif
-        return sendResponse(channel, requestId, requestHeader->requestHandle,
-                            responseHeader, responseType);
-    }
-
-    /* Find the matching session */
-    UA_Session *session = (UA_Session*)
-        UA_SecureChannel_getSession(channel, &requestHeader->authenticationToken);
-    if(!session && !UA_NodeId_isNull(&requestHeader->authenticationToken))
-        session = UA_SessionManager_getSessionByToken(&server->sessionManager,
-                                                      &requestHeader->authenticationToken);
-
-    if(requestType == &UA_TYPES[UA_TYPES_ACTIVATESESSIONREQUEST]) {
-        if(!session) {
-            UA_LOG_DEBUG_CHANNEL(&server->config.logger, channel,
-                                 "Trying to activate a session that is " \
-                                 "not known in the server");
-            return sendServiceFaultWithRequest(channel, requestHeader, responseType,
-                                    requestId, UA_STATUSCODE_BADSESSIONIDINVALID);
-        }
-        Service_ActivateSession(server, channel, session,
-                                (const UA_ActivateSessionRequest*)requestHeader,
-                                (UA_ActivateSessionResponse*)responseHeader);
-        return sendResponse(channel, requestId, requestHeader->requestHandle,
-                            responseHeader, responseType);
-    }
-
-    /* Set an anonymous, inactive session for services that need no session */
-    UA_Session anonymousSession;
-    if(!session) {
-        if(sessionRequired) {
-#ifdef UA_ENABLE_TYPEDESCRIPTION
-            UA_LOG_WARNING_CHANNEL(&server->config.logger, channel,
-                                   "%s refused without a valid session",
-                                   requestType->typeName);
-#else
-            UA_LOG_WARNING_CHANNEL(&server->config.logger, channel,
-                                   "Service %i refused without a valid session",
-                                   requestType->binaryEncodingId);
-#endif
-            return sendServiceFaultWithRequest(channel, requestHeader, responseType,
-                                               requestId, UA_STATUSCODE_BADSESSIONIDINVALID);
-        }
-
-        UA_Session_init(&anonymousSession);
-        anonymousSession.sessionId = UA_NODEID_GUID(0, UA_GUID_NULL);
-        anonymousSession.header.channel = channel;
-        session = &anonymousSession;
-    }
-
-    /* Trying to use a non-activated session? Do not allow if request is of type
-     * CloseSessionRequest */
-    if(sessionRequired && !session->activated &&
-       requestType != &UA_TYPES[UA_TYPES_CLOSESESSIONREQUEST]) {
-#ifdef UA_ENABLE_TYPEDESCRIPTION
-        UA_LOG_WARNING_SESSION(&server->config.logger, session,
-                               "%s refused on a non-activated session",
-                               requestType->typeName);
-#else
-        UA_LOG_WARNING_SESSION(&server->config.logger, session,
-                               "Service %i refused on a non-activated session",
-                               requestType->binaryEncodingId);
-#endif
-        UA_SessionManager_removeSession(&server->sessionManager,
-                                        &session->header.authenticationToken);
-        return sendServiceFaultWithRequest(channel, requestHeader, responseType,
-                                           requestId, UA_STATUSCODE_BADSESSIONNOTACTIVATED);
-    }
-
-    /* The session is bound to another channel */
-    if(session != &anonymousSession && session->header.channel != channel) {
-        UA_LOG_WARNING_CHANNEL(&server->config.logger, channel,
-                               "Client tries to use a Session that is not "
-                               "bound to this SecureChannel");
-        return sendServiceFaultWithRequest(channel, requestHeader, responseType,
-                                           requestId, UA_STATUSCODE_BADSECURECHANNELIDINVALID);
-    }
-
-    /* Update the session lifetime */
-    UA_Session_updateLifetime(session);
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    /* The publish request is not answered immediately */
-    if(requestType == &UA_TYPES[UA_TYPES_PUBLISHREQUEST]) {
-        Service_Publish(server, session, (const UA_PublishRequest*)requestHeader, requestId);
-        return UA_STATUSCODE_GOOD;
-    }
-#endif
-
-    /* Dispatch the synchronous service call and send the response */
-    UA_LOCK(server->serviceMutex);
-    service(server, session, requestHeader, responseHeader);
-    UA_UNLOCK(server->serviceMutex);
-    return sendResponse(channel, requestId, requestHeader->requestHandle,
-                        responseHeader, responseType);
-}
-
-static UA_StatusCode
-processMSG(UA_Server *server, UA_SecureChannel *channel,
-           UA_UInt32 requestId, const UA_ByteString *msg) {
-    /* Decode the nodeid */
-    size_t offset = 0;
-    UA_NodeId requestTypeId;
-    UA_StatusCode retval = UA_NodeId_decodeBinary(msg, &offset, &requestTypeId);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    if(requestTypeId.namespaceIndex != 0 ||
-       requestTypeId.identifierType != UA_NODEIDTYPE_NUMERIC)
-        UA_NodeId_deleteMembers(&requestTypeId); /* leads to badserviceunsupported */
-
-    size_t requestPos = offset; /* Store the offset (for sendServiceFault) */
-
-    /* Get the service pointers */
-    UA_Service service = NULL;
-    UA_Boolean sessionRequired = true;
-    const UA_DataType *requestType = NULL;
-    const UA_DataType *responseType = NULL;
-    getServicePointers(requestTypeId.identifier.numeric, &requestType,
-                       &responseType, &service, &sessionRequired);
-    if(!requestType) {
-        if(requestTypeId.identifier.numeric == 787) {
-            UA_LOG_INFO_CHANNEL(&server->config.logger, channel,
-                                "Client requested a subscription, " \
-                                "but those are not enabled in the build");
-        } else {
-            UA_LOG_INFO_CHANNEL(&server->config.logger, channel,
-                                "Unknown request with type identifier %i",
-                                requestTypeId.identifier.numeric);
-        }
-        return sendServiceFault(channel, msg, requestPos, &UA_TYPES[UA_TYPES_SERVICEFAULT],
-                                requestId, UA_STATUSCODE_BADSERVICEUNSUPPORTED);
-    }
-    UA_assert(responseType);
-
-    /* Decode the request */
-    UA_STACKARRAY(UA_Byte, request, requestType->memSize);
-    retval = UA_decodeBinary(msg, &offset, request, requestType, server->config.customDataTypes);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_DEBUG_CHANNEL(&server->config.logger, channel,
-                             "Could not decode the request");
-        return sendServiceFault(channel, msg, requestPos, responseType, requestId, retval);
-    }
-
-    /* Check timestamp in the request header */
-    UA_RequestHeader *requestHeader = (UA_RequestHeader*)request;
-    if(requestHeader->timestamp == 0) {
-        if(server->config.verifyRequestTimestamp <= UA_RULEHANDLING_WARN) {
-            UA_LOG_WARNING_CHANNEL(&server->config.logger, channel,
-                                   "The server sends no timestamp in the request header. "
-                                   "See the 'verifyRequestTimestamp' setting.");
-            if(server->config.verifyRequestTimestamp <= UA_RULEHANDLING_ABORT) {
-                retval = sendServiceFaultWithRequest(channel, requestHeader, responseType,
-                                                     requestId, UA_STATUSCODE_BADINVALIDTIMESTAMP);
-                UA_deleteMembers(request, requestType);
-                return retval;
-            }
-        }
-    }
-
-#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
-    /* Set the authenticationToken from the create session request to help
-     * fuzzing cover more lines */
-    UA_NodeId_deleteMembers(&requestHeader->authenticationToken);
-    if(!UA_NodeId_isNull(&unsafe_fuzz_authenticationToken))
-        UA_NodeId_copy(&unsafe_fuzz_authenticationToken, &requestHeader->authenticationToken);
-#endif
-
-    /* Prepare the respone */
-    UA_STACKARRAY(UA_Byte, response, responseType->memSize);
-    UA_ResponseHeader *responseHeader = (UA_ResponseHeader*)response;
-    UA_init(response, responseType);
-
-    /* Continue with the decoded Request */
-    retval = processMSGDecoded(server, channel, requestId, service, requestHeader, requestType,
-                               responseHeader, responseType, sessionRequired);
-
-    /* Clean up */
-    UA_deleteMembers(request, requestType);
-    UA_deleteMembers(responseHeader, responseType);
-    return retval;
-}
-
-/* Takes decoded messages starting at the nodeid of the content type. */
-static void
-processSecureChannelMessage(void *application, UA_SecureChannel *channel,
-                            UA_MessageType messagetype, UA_UInt32 requestId,
-                            const UA_ByteString *message) {
-    UA_Server *server = (UA_Server*)application;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    switch(messagetype) {
-    case UA_MESSAGETYPE_OPN:
-        UA_LOG_TRACE_CHANNEL(&server->config.logger, channel,
-                             "Process an OPN on an open channel");
-        retval = processOPN(server, channel, requestId, message);
-        break;
-    case UA_MESSAGETYPE_MSG:
-        UA_LOG_TRACE_CHANNEL(&server->config.logger, channel, "Process a MSG");
-        retval = processMSG(server, channel, requestId, message);
-        break;
-    case UA_MESSAGETYPE_CLO:
-        UA_LOG_TRACE_CHANNEL(&server->config.logger, channel, "Process a CLO");
-        Service_CloseSecureChannel(server, channel);
-        break;
-    default:
-        UA_LOG_TRACE_CHANNEL(&server->config.logger, channel, "Invalid message type");
-        retval = UA_STATUSCODE_BADTCPMESSAGETYPEINVALID;
-        break;
-    }
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_INFO_CHANNEL(&server->config.logger, channel,
-                            "Processing the message failed with StatusCode %s. "
-                            "Closing the channel.", UA_StatusCode_name(retval));
-        Service_CloseSecureChannel(server, channel);
-    }
-}
-
-static UA_StatusCode
-createSecureChannel(void *application, UA_Connection *connection,
-                    UA_AsymmetricAlgorithmSecurityHeader *asymHeader) {
-    UA_Server *server = (UA_Server*)application;
-
-    /* Iterate over available endpoints and choose the correct one */
-    UA_SecurityPolicy *securityPolicy = NULL;
-    for(size_t i = 0; i < server->config.securityPoliciesSize; ++i) {
-        UA_SecurityPolicy *policy = &server->config.securityPolicies[i];
-        if(!UA_ByteString_equal(&asymHeader->securityPolicyUri, &policy->policyUri))
-            continue;
-
-        UA_StatusCode retval = policy->asymmetricModule.
-            compareCertificateThumbprint(policy, &asymHeader->receiverCertificateThumbprint);
-        if(retval != UA_STATUSCODE_GOOD)
-            continue;
-
-        /* We found the correct policy (except for security mode). The endpoint
-         * needs to be selected by the client / server to match the security
-         * mode in the endpoint for the session. */
-        securityPolicy = policy;
-        break;
-    }
-
-    if(!securityPolicy)
-        return UA_STATUSCODE_BADSECURITYPOLICYREJECTED;
-
-    /* Create a new channel */
-    return UA_SecureChannelManager_create(&server->secureChannelManager, connection,
-                                          securityPolicy, asymHeader);
-}
-
-static UA_StatusCode
-processCompleteChunkWithoutChannel(UA_Server *server, UA_Connection *connection,
-                                   UA_ByteString *message) {
-    /* Process chunk without a channel; must be OPN */
-    UA_LOG_TRACE(&server->config.logger, UA_LOGCATEGORY_NETWORK,
-                 "Connection %i | No channel attached to the connection. "
-                 "Process the chunk directly", (int)(connection->sockfd));
-    size_t offset = 0;
-    UA_TcpMessageHeader tcpMessageHeader;
-    UA_StatusCode retval =
-        UA_TcpMessageHeader_decodeBinary(message, &offset, &tcpMessageHeader);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    // Only HEL and OPN messages possible without a channel (on the server side)
-    switch(tcpMessageHeader.messageTypeAndChunkType & 0x00ffffffu) {
-    case UA_MESSAGETYPE_HEL:
-        retval = processHEL(server, connection, message, &offset);
-        break;
-    case UA_MESSAGETYPE_OPN:
-    {
-        UA_LOG_TRACE(&server->config.logger, UA_LOGCATEGORY_NETWORK,
-                     "Connection %i | Process OPN message", (int)(connection->sockfd));
-
-        /* Called before HEL */
-        if(connection->state != UA_CONNECTION_ESTABLISHED) {
-            retval = UA_STATUSCODE_BADCOMMUNICATIONERROR;
-            break;
-        }
-
-        // Decode the asymmetric algorithm security header since it is not encrypted and
-        // needed to decide what security policy to use.
-        UA_AsymmetricAlgorithmSecurityHeader asymHeader;
-        UA_AsymmetricAlgorithmSecurityHeader_init(&asymHeader);
-        size_t messageHeaderOffset = UA_SECURE_CONVERSATION_MESSAGE_HEADER_LENGTH;
-        retval = UA_AsymmetricAlgorithmSecurityHeader_decodeBinary(message,
-                                                                   &messageHeaderOffset,
-                                                                   &asymHeader);
-        if(retval != UA_STATUSCODE_GOOD)
-            break;
-
-        retval = createSecureChannel(server, connection, &asymHeader);
-        UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
-        if(retval != UA_STATUSCODE_GOOD)
-            break;
-
-        retval = UA_SecureChannel_decryptAddChunk(connection->channel, message, false);
-        if(retval != UA_STATUSCODE_GOOD)
-            break;
-
-        UA_SecureChannel_processCompleteMessages(connection->channel, server,
-                                                 processSecureChannelMessage);
-        break;
-    }
-    default:
-        UA_LOG_TRACE(&server->config.logger, UA_LOGCATEGORY_NETWORK,
-                     "Connection %i | Expected OPN or HEL message on a connection "
-                     "without a SecureChannel", (int)(connection->sockfd));
-        retval = UA_STATUSCODE_BADTCPMESSAGETYPEINVALID;
-        break;
-    }
-    return retval;
-}
-
-static UA_StatusCode
-processCompleteChunk(void *const application, UA_Connection *connection,
-                     UA_ByteString *chunk) {
-    UA_Server *server = (UA_Server*)application;
-#ifdef UA_DEBUG_DUMP_PKGS_FILE
-    UA_debug_dumpCompleteChunk(server, connection, chunk);
-#endif
-    if(!connection->channel)
-        return processCompleteChunkWithoutChannel(server, connection, chunk);
-    return UA_SecureChannel_decryptAddChunk(connection->channel, chunk, false);
-}
-
-void
-UA_Server_processBinaryMessage(UA_Server *server, UA_Connection *connection,
-                               UA_ByteString *message) {
-    UA_LOG_TRACE(&server->config.logger, UA_LOGCATEGORY_NETWORK,
-                 "Connection %i | Received a packet.", (int)(connection->sockfd));
-#ifdef UA_DEBUG_DUMP_PKGS
-    UA_dump_hex_pkg(message->data, message->length);
-#endif
-
-    UA_StatusCode retval = UA_Connection_processChunks(connection, server,
-                                                       processCompleteChunk, message);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_NETWORK,
-                    "Connection %i | Processing the message failed with "
-                    "error %s", (int)(connection->sockfd), UA_StatusCode_name(retval));
-        /* Send an ERR message and close the connection */
-        UA_TcpErrorMessage error;
-        error.error = retval;
-        error.reason = UA_STRING_NULL;
-        UA_Connection_sendError(connection, &error);
-        connection->close(connection);
-        return;
-    }
-
-    UA_SecureChannel *channel = connection->channel;
-    if(!channel)
-        return;
-
-    /* Process complete messages */
-    UA_SecureChannel_processCompleteMessages(channel, server, processSecureChannelMessage);
-
-    /* Is the channel still open? */
-    if(channel->state == UA_SECURECHANNELSTATE_CLOSED)
-        return;
-
-    /* Store unused decoded chunks internally in the SecureChannel */
-    UA_SecureChannel_persistIncompleteMessages(connection->channel);
-}
-
-#if UA_MULTITHREADING >= 200
-static void
-deleteConnection(UA_Server *server, UA_Connection *connection) {
-    connection->free(connection);
-}
-#endif
-
-void
-UA_Server_removeConnection(UA_Server *server, UA_Connection *connection) {
-    UA_Connection_detachSecureChannel(connection);
-#if UA_MULTITHREADING >= 200
-    UA_DelayedCallback *dc = (UA_DelayedCallback*)UA_malloc(sizeof(UA_DelayedCallback));
-    if(!dc)
-        return; /* Malloc cannot fail on OS's that support multithreading. They
-                 * rather kill the process. */
-    dc->callback = (UA_ApplicationCallback)deleteConnection;
-    dc->application = server;
-    dc->data = connection;
-    UA_WorkQueue_enqueueDelayed(&server->workQueue, dc);
-#else
-    connection->free(connection);
-#endif
-}
diff --git a/ext/open62541/src/server/ua_server_config.c b/ext/open62541/src/server/ua_server_config.c
deleted file mode 100644
index d2b5ac7..0000000
--- a/ext/open62541/src/server/ua_server_config.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2019 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- */
-
-#include <open62541/server_config.h>
-
-void
-UA_ServerConfig_clean(UA_ServerConfig *config) {
-    if(!config)
-        return;
-
-    /* Server Description */
-    UA_BuildInfo_deleteMembers(&config->buildInfo);
-    UA_ApplicationDescription_deleteMembers(&config->applicationDescription);
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-    UA_MdnsDiscoveryConfiguration_clear(&config->discovery.mdns);
-    UA_String_clear(&config->discovery.mdnsInterfaceIP);
-#endif
-
-    /* Custom DataTypes */
-    /* nothing to do */
-
-    /* Networking */
-    for(size_t i = 0; i < config->networkLayersSize; ++i)
-        config->networkLayers[i].deleteMembers(&config->networkLayers[i]);
-    UA_free(config->networkLayers);
-    config->networkLayers = NULL;
-    config->networkLayersSize = 0;
-    UA_String_deleteMembers(&config->customHostname);
-    config->customHostname = UA_STRING_NULL;
-
-    for(size_t i = 0; i < config->securityPoliciesSize; ++i) {
-        UA_SecurityPolicy *policy = &config->securityPolicies[i];
-        policy->deleteMembers(policy);
-    }
-    UA_free(config->securityPolicies);
-    config->securityPolicies = NULL;
-    config->securityPoliciesSize = 0;
-
-    for(size_t i = 0; i < config->endpointsSize; ++i)
-        UA_EndpointDescription_deleteMembers(&config->endpoints[i]);
-
-    UA_free(config->endpoints);
-    config->endpoints = NULL;
-    config->endpointsSize = 0;
-
-    /* Certificate Validation */
-    if(config->certificateVerification.deleteMembers)
-        config->certificateVerification.deleteMembers(&config->certificateVerification);
-
-    /* Access Control */
-    if(config->accessControl.deleteMembers)
-        config->accessControl.deleteMembers(&config->accessControl);
-
-    /* Historical data */
-#ifdef UA_ENABLE_HISTORIZING
-    if(config->historyDatabase.deleteMembers)
-        config->historyDatabase.deleteMembers(&config->historyDatabase);
-#endif
-
-    /* Logger */
-    if(config->logger.clear)
-        config->logger.clear(config->logger.context);
-}
-
-void
-UA_ServerConfig_setCustomHostname(UA_ServerConfig *config,
-                                  const UA_String customHostname) {
-    if(!config)
-        return;
-    UA_String_deleteMembers(&config->customHostname);
-    UA_String_copy(&customHostname, &config->customHostname);
-}
-
-#ifdef UA_ENABLE_PUBSUB
-/* Add a pubsubTransportLayer to the configuration. Memory is reallocated on
- * demand. */
-UA_StatusCode
-UA_ServerConfig_addPubSubTransportLayer(UA_ServerConfig *config,
-        UA_PubSubTransportLayer *pubsubTransportLayer) {
-
-    if(config->pubsubTransportLayersSize == 0) {
-        config->pubsubTransportLayers = (UA_PubSubTransportLayer *)
-                UA_malloc(sizeof(UA_PubSubTransportLayer));
-    } else {
-        config->pubsubTransportLayers = (UA_PubSubTransportLayer*)
-                UA_realloc(config->pubsubTransportLayers,
-                sizeof(UA_PubSubTransportLayer) * (config->pubsubTransportLayersSize + 1));
-    }
-
-    if(config->pubsubTransportLayers == NULL)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    memcpy(&config->pubsubTransportLayers[config->pubsubTransportLayersSize],
-            pubsubTransportLayer, sizeof(UA_PubSubTransportLayer));
-    config->pubsubTransportLayersSize++;
-
-    return UA_STATUSCODE_GOOD;
-}
-#endif /* UA_ENABLE_PUBSUB */
diff --git a/ext/open62541/src/server/ua_server_discovery.c b/ext/open62541/src/server/ua_server_discovery.c
deleted file mode 100644
index f3dd79e..0000000
--- a/ext/open62541/src/server/ua_server_discovery.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#include <open62541/client.h>
-
-#include "ua_server_internal.h"
-
-#ifdef UA_ENABLE_DISCOVERY
-
-static UA_StatusCode
-register_server_with_discovery_server(UA_Server *server,
-                                      UA_Client *client,
-                                      const UA_Boolean isUnregister,
-                                      const char* semaphoreFilePath) {
-    /* Prepare the request. Do not cleanup the request after the service call,
-     * as the members are stack-allocated or point into the server config. */
-    UA_RegisterServer2Request request;
-    UA_RegisterServer2Request_init(&request);
-    request.requestHeader.timestamp = UA_DateTime_now();
-    request.requestHeader.timeoutHint = 10000;
-
-    request.server.isOnline = !isUnregister;
-    request.server.serverUri = server->config.applicationDescription.applicationUri;
-    request.server.productUri = server->config.applicationDescription.productUri;
-    request.server.serverType = server->config.applicationDescription.applicationType;
-    request.server.gatewayServerUri = server->config.applicationDescription.gatewayServerUri;
-
-    if(semaphoreFilePath) {
-#ifdef UA_ENABLE_DISCOVERY_SEMAPHORE
-        request.server.semaphoreFilePath =
-            UA_STRING((char*)(uintptr_t)semaphoreFilePath); /* dirty cast */
-#else
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_CLIENT,
-                       "Ignoring semaphore file path. open62541 not compiled "
-                       "with UA_ENABLE_DISCOVERY_SEMAPHORE=ON");
-#endif
-    }
-
-    request.server.serverNames = &server->config.applicationDescription.applicationName;
-    request.server.serverNamesSize = 1;
-
-    /* Copy the discovery urls from the server config and the network layers*/
-    size_t config_discurls = server->config.applicationDescription.discoveryUrlsSize;
-    size_t nl_discurls = server->config.networkLayersSize;
-    size_t total_discurls = config_discurls + nl_discurls;
-    UA_STACKARRAY(UA_String, urlsBuf, total_discurls);
-    request.server.discoveryUrls = urlsBuf;
-    request.server.discoveryUrlsSize = total_discurls;
-
-    for(size_t i = 0; i < config_discurls; ++i)
-        request.server.discoveryUrls[i] = server->config.applicationDescription.discoveryUrls[i];
-
-    /* TODO: Add nl only if discoveryUrl not already present */
-    for(size_t i = 0; i < nl_discurls; ++i) {
-        UA_ServerNetworkLayer *nl = &server->config.networkLayers[i];
-        request.server.discoveryUrls[config_discurls + i] = nl->discoveryUrl;
-    }
-
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-    request.discoveryConfigurationSize = 1;
-    request.discoveryConfiguration = UA_ExtensionObject_new();
-    UA_ExtensionObject_init(&request.discoveryConfiguration[0]);
-    // Set to NODELETE so that we can just use a pointer to the mdns config
-    request.discoveryConfiguration[0].encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
-    request.discoveryConfiguration[0].content.decoded.type = &UA_TYPES[UA_TYPES_MDNSDISCOVERYCONFIGURATION];
-    request.discoveryConfiguration[0].content.decoded.data = &server->config.discovery.mdns;
-#endif
-
-    // First try with RegisterServer2, if that isn't implemented, use RegisterServer
-    UA_RegisterServer2Response response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_REGISTERSERVER2REQUEST],
-                        &response, &UA_TYPES[UA_TYPES_REGISTERSERVER2RESPONSE]);
-
-    UA_StatusCode serviceResult = response.responseHeader.serviceResult;
-    UA_RegisterServer2Response_deleteMembers(&response);
-    UA_Array_delete(request.discoveryConfiguration,
-                    request.discoveryConfigurationSize,
-                    &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
-    request.discoveryConfiguration = NULL;
-    request.discoveryConfigurationSize = 0;
-
-    if(serviceResult == UA_STATUSCODE_BADNOTIMPLEMENTED ||
-       serviceResult == UA_STATUSCODE_BADSERVICEUNSUPPORTED) {
-        /* Try RegisterServer */
-        UA_RegisterServerRequest request_fallback;
-        UA_RegisterServerRequest_init(&request_fallback);
-        /* Copy from RegisterServer2 request */
-        request_fallback.requestHeader = request.requestHeader;
-        request_fallback.server = request.server;
-
-        UA_RegisterServerResponse response_fallback;
-
-        __UA_Client_Service(client, &request_fallback,
-                            &UA_TYPES[UA_TYPES_REGISTERSERVERREQUEST],
-                            &response_fallback,
-                            &UA_TYPES[UA_TYPES_REGISTERSERVERRESPONSE]);
-
-        serviceResult = response_fallback.responseHeader.serviceResult;
-        UA_RegisterServerResponse_deleteMembers(&response_fallback);
-    }
-
-    if(serviceResult != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_CLIENT,
-                     "RegisterServer/RegisterServer2 failed with statuscode %s",
-                     UA_StatusCode_name(serviceResult));
-    }
-
-    return serviceResult;
-}
-
-UA_StatusCode
-UA_Server_register_discovery(UA_Server *server, UA_Client *client,
-                             const char* semaphoreFilePath) {
-    return register_server_with_discovery_server(server, client,
-                                                 false, semaphoreFilePath);
-}
-
-UA_StatusCode
-UA_Server_unregister_discovery(UA_Server *server, UA_Client *client) {
-    return register_server_with_discovery_server(server, client,
-                                                 true, NULL);
-}
-
-#endif /* UA_ENABLE_DISCOVERY */
diff --git a/ext/open62541/src/server/ua_server_discovery_mdns.c b/ext/open62541/src/server/ua_server_discovery_mdns.c
deleted file mode 100644
index 74a2620..0000000
--- a/ext/open62541/src/server/ua_server_discovery_mdns.c
+++ /dev/null
@@ -1,711 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- */
-
-#include "ua_server_internal.h"
-
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-
-#ifndef UA_ENABLE_AMALGAMATION
-#include "mdnsd/libmdnsd/xht.h"
-#include "mdnsd/libmdnsd/sdtxt.h"
-#endif
-
-#ifdef _WIN32
-/* inet_ntoa is deprecated on MSVC but used for compatibility */
-# define _WINSOCK_DEPRECATED_NO_WARNINGS
-# include <winsock2.h>
-# include <iphlpapi.h>
-# include <ws2tcpip.h>
-#else
-# include <sys/time.h> // for struct timeval
-# include <netinet/in.h> // for struct ip_mreq
-# include <ifaddrs.h>
-# include <net/if.h> /* for IFF_RUNNING */
-# include <netdb.h> // for recvfrom in cygwin
-#endif
-
-/* FIXME: Is this a required algorithm? Otherwise, reuse hashing for nodeids */
-/* Generates a hash code for a string.
- * This function uses the ELF hashing algorithm as reprinted in
- * Andrew Binstock, "Hashing Rehashed," Dr. Dobb's Journal, April 1996.
- */
-static int
-mdns_hash_record(const char *s) {
-    /* ELF hash uses unsigned chars and unsigned arithmetic for portability */
-    const unsigned char *name = (const unsigned char *) s;
-    unsigned long h = 0;
-    while(*name) {
-        h = (h << 4) + (unsigned long) (*name++);
-        unsigned long g;
-        if((g = (h & 0xF0000000UL)) != 0)
-            h ^= (g >> 24);
-        h &= ~g;
-    }
-    return (int) h;
-}
-
-static struct serverOnNetwork_list_entry *
-mdns_record_add_or_get(UA_DiscoveryManager *dm, const char *record, const char *serverName,
-                       size_t serverNameLen, UA_Boolean createNew) {
-    int hashIdx = mdns_hash_record(record) % SERVER_ON_NETWORK_HASH_PRIME;
-    struct serverOnNetwork_hash_entry *hash_entry = dm->serverOnNetworkHash[hashIdx];
-
-    while(hash_entry) {
-        size_t maxLen;
-        if(serverNameLen > hash_entry->entry->serverOnNetwork.serverName.length)
-            maxLen = hash_entry->entry->serverOnNetwork.serverName.length;
-        else
-            maxLen = serverNameLen;
-
-        if(strncmp((char *) hash_entry->entry->serverOnNetwork.serverName.data,
-                   serverName, maxLen) == 0)
-            return hash_entry->entry;
-        hash_entry = hash_entry->next;
-    }
-
-    if(!createNew)
-        return NULL;
-
-    /* not yet in list, create new one */
-    /* todo: malloc may fail: return a statuscode */
-    struct serverOnNetwork_list_entry *listEntry = (serverOnNetwork_list_entry*)
-        UA_malloc(sizeof(struct serverOnNetwork_list_entry));
-    listEntry->created = UA_DateTime_now();
-    listEntry->pathTmp = NULL;
-    listEntry->txtSet = false;
-    listEntry->srvSet = false;
-    UA_ServerOnNetwork_init(&listEntry->serverOnNetwork);
-    listEntry->serverOnNetwork.recordId = dm->serverOnNetworkRecordIdCounter;
-    listEntry->serverOnNetwork.serverName.length = serverNameLen;
-    /* todo: malloc may fail: return a statuscode */
-    listEntry->serverOnNetwork.serverName.data = (UA_Byte*)UA_malloc(serverNameLen);
-    memcpy(listEntry->serverOnNetwork.serverName.data, serverName, serverNameLen);
-    UA_atomic_addUInt32(&dm->serverOnNetworkRecordIdCounter, 1);
-    if(dm->serverOnNetworkRecordIdCounter == 0)
-        dm->serverOnNetworkRecordIdLastReset = UA_DateTime_now();
-
-    /* add to hash */
-    /* todo: malloc may fail: return a statuscode */
-    struct serverOnNetwork_hash_entry *newHashEntry = (struct serverOnNetwork_hash_entry*)
-        UA_malloc(sizeof(struct serverOnNetwork_hash_entry));
-    newHashEntry->next = dm->serverOnNetworkHash[hashIdx];
-    dm->serverOnNetworkHash[hashIdx] = newHashEntry;
-    newHashEntry->entry = listEntry;
-
-    LIST_INSERT_HEAD(&dm->serverOnNetwork, listEntry, pointers);
-
-    return listEntry;
-}
-
-#ifdef _WIN32
-
-/* see http://stackoverflow.com/a/10838854/869402 */
-static IP_ADAPTER_ADDRESSES *
-getInterfaces(const UA_Server *server) {
-    IP_ADAPTER_ADDRESSES* adapter_addresses = NULL;
-
-    /* Start with a 16 KB buffer and resize if needed - multiple attempts in
-     * case interfaces change while we are in the middle of querying them. */
-    DWORD adapter_addresses_buffer_size = 16 * 1024;
-    for(size_t attempts = 0; attempts != 3; ++attempts) {
-        /* todo: malloc may fail: return a statuscode */
-        adapter_addresses = (IP_ADAPTER_ADDRESSES*)UA_malloc(adapter_addresses_buffer_size);
-        if(!adapter_addresses) {
-            UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                         "GetAdaptersAddresses out of memory");
-            adapter_addresses = NULL;
-            break;
-        }
-        DWORD error = GetAdaptersAddresses(AF_UNSPEC,
-                                           GAA_FLAG_SKIP_ANYCAST |
-                                           GAA_FLAG_SKIP_DNS_SERVER |
-                                           GAA_FLAG_SKIP_FRIENDLY_NAME,
-                                           NULL, adapter_addresses,
-                                           &adapter_addresses_buffer_size);
-
-        if(ERROR_SUCCESS == error) {
-            break;
-        } else if (ERROR_BUFFER_OVERFLOW == error) {
-            /* Try again with the new size */
-            UA_free(adapter_addresses);
-            adapter_addresses = NULL;
-            continue;
-        }
-
-        /* Unexpected error */
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "GetAdaptersAddresses returned an unexpected error. "
-                     "Not setting mDNS A records.");
-        UA_free(adapter_addresses);
-        adapter_addresses = NULL;
-        break;
-    }
-    return adapter_addresses;
-}
-
-#endif /* _WIN32 */
-
-static UA_Boolean
-mdns_is_self_announce(const UA_Server *server, const struct serverOnNetwork_list_entry *entry) {
-    for (size_t i=0; i<server->config.networkLayersSize; i++) {
-        UA_ServerNetworkLayer *nl = &server->config.networkLayers[i];
-        if(UA_String_equal(&entry->serverOnNetwork.discoveryUrl,
-                           &nl->discoveryUrl))
-            return true;
-        // check discoveryUrl ignoring tailing slash
-        if (((
-                nl->discoveryUrl.length == entry->serverOnNetwork.discoveryUrl.length +1 &&
-                nl->discoveryUrl.data[nl->discoveryUrl.length-1] == '/'
-              ) || (
-                entry->serverOnNetwork.discoveryUrl.length == nl->discoveryUrl.length +1 &&
-                entry->serverOnNetwork.discoveryUrl.data[entry->serverOnNetwork.discoveryUrl.length-1] == '/'
-              )
-            ) &&
-            memcmp(nl->discoveryUrl.data, entry->serverOnNetwork.discoveryUrl.data,
-                    UA_MIN(nl->discoveryUrl.length, entry->serverOnNetwork.discoveryUrl.length)) == 0
-        ) {
-            return true;
-        }
-        if (nl->discoveryUrl.length == entry->serverOnNetwork.discoveryUrl.length +1 &&
-            nl->discoveryUrl.data[nl->discoveryUrl.length-1] == '/' &&
-            memcmp(nl->discoveryUrl.data, entry->serverOnNetwork.discoveryUrl.data, nl->discoveryUrl.length-1) == 0
-                ) {
-            return true;
-        }
-    }
-
-    /* The discovery URL may also just contain the IP address, but in our
-     * discovery URL we are using hostname thus previous check may not detect
-     * the same URL. Therefore we also check if the name matches: */
-    UA_String hostnameRemote = UA_STRING_NULL;
-    UA_UInt16 portRemote = 4840;
-    UA_String pathRemote = UA_STRING_NULL;
-    UA_StatusCode retval =
-        UA_parseEndpointUrl(&entry->serverOnNetwork.discoveryUrl,
-                            &hostnameRemote, &portRemote, &pathRemote);
-    if(retval != UA_STATUSCODE_GOOD) {
-        /* skip invalid url */
-        return false;
-    }
-
-#ifdef _WIN32
-    IP_ADAPTER_ADDRESSES* adapter_addresses = getInterfaces(server);
-    if(!adapter_addresses) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "getifaddrs returned an unexpected error. Not setting mDNS A records.");
-        return false;
-    }
-#else
-    struct ifaddrs *ifaddr, *ifa;
-    if(getifaddrs(&ifaddr) == -1) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "getifaddrs returned an unexpected error. Not setting mDNS A records.");
-        return false;
-    }
-#endif
-
-
-    UA_Boolean isSelf = false;
-
-    for (size_t i=0; i<server->config.networkLayersSize; i++) {
-        UA_ServerNetworkLayer *nl = &server->config.networkLayers[i];
-
-        UA_String hostnameSelf = UA_STRING_NULL;
-        UA_UInt16 portSelf = 4840;
-        UA_String pathSelf = UA_STRING_NULL;
-
-        retval = UA_parseEndpointUrl(&nl->discoveryUrl, &hostnameSelf,
-                                     &portSelf, &pathSelf);
-        if(retval != UA_STATUSCODE_GOOD) {
-            /* skip invalid url */
-            continue;
-        }
-        if (portRemote != portSelf)
-            continue;
-
-#ifdef _WIN32
-        /* Iterate through all of the adapters */
-        IP_ADAPTER_ADDRESSES* adapter = adapter_addresses;
-        for(; adapter != NULL; adapter = adapter->Next) {
-            /* Skip loopback adapters */
-            if(IF_TYPE_SOFTWARE_LOOPBACK == adapter->IfType)
-                continue;
-
-            /* Parse all IPv4 and IPv6 addresses */
-            IP_ADAPTER_UNICAST_ADDRESS* address = adapter->FirstUnicastAddress;
-            for(; NULL != address; address = address->Next) {
-                int family = address->Address.lpSockaddr->sa_family;
-                if(AF_INET == family) {
-                    SOCKADDR_IN* ipv4 = (SOCKADDR_IN*)(address->Address.lpSockaddr); /* IPv4 */
-                    char *ipStr = inet_ntoa(ipv4->sin_addr);
-                    if(strncmp((const char*)hostnameRemote.data, ipStr,
-                               hostnameRemote.length) == 0) {
-                        isSelf = true;
-                        break;
-                    }
-                } else if(AF_INET6 == family) {
-                    /* IPv6 not implemented yet */
-                }
-            }
-            if (isSelf)
-                break;
-        }
-#else
-        /* Walk through linked list, maintaining head pointer so we can free
-         * list later */
-        int n;
-        for(ifa = ifaddr, n = 0; ifa != NULL; ifa = ifa->ifa_next, n++) {
-            if(!ifa->ifa_addr)
-                continue;
-
-            if((strcmp("lo", ifa->ifa_name) == 0) ||
-               !(ifa->ifa_flags & (IFF_RUNNING))||
-               !(ifa->ifa_flags & (IFF_MULTICAST)))
-                continue;
-
-            /* IPv4 */
-            if(ifa->ifa_addr->sa_family == AF_INET) {
-                struct sockaddr_in* sa = (struct sockaddr_in*) ifa->ifa_addr;
-
-                char *ipStr = inet_ntoa(sa->sin_addr);
-                if(strncmp((const char*)hostnameRemote.data, ipStr,
-                           hostnameRemote.length) == 0) {
-                    isSelf = true;
-                    break;
-                }
-            }
-
-            /* IPv6 not implemented yet */
-        }
-#endif
-        if (isSelf)
-            break;
-    }
-
-#ifdef _WIN32
-    /* Cleanup */
-    UA_free(adapter_addresses);
-    adapter_addresses = NULL;
-#else
-    /* Clean up */
-    freeifaddrs(ifaddr);
-#endif
-
-    return isSelf;
-}
-
-static void
-mdns_record_remove(UA_Server *server, const char *record,
-                   struct serverOnNetwork_list_entry *entry) {
-    UA_DiscoveryManager *dm = &server->discoveryManager;
-
-    /* remove from hash */
-    int hashIdx = mdns_hash_record(record) % SERVER_ON_NETWORK_HASH_PRIME;
-    struct serverOnNetwork_hash_entry *hash_entry = dm->serverOnNetworkHash[hashIdx];
-    struct serverOnNetwork_hash_entry *prevEntry = hash_entry;
-    while(hash_entry) {
-        if(hash_entry->entry == entry) {
-            if(dm->serverOnNetworkHash[hashIdx] == hash_entry)
-                dm->serverOnNetworkHash[hashIdx] = hash_entry->next;
-            else if(prevEntry)
-                prevEntry->next = hash_entry->next;
-            break;
-        }
-        prevEntry = hash_entry;
-        hash_entry = hash_entry->next;
-    }
-    UA_free(hash_entry);
-
-    if(dm->serverOnNetworkCallback && !mdns_is_self_announce(server, entry))
-        dm->serverOnNetworkCallback(&entry->serverOnNetwork, false,
-                                    entry->txtSet, dm->serverOnNetworkCallbackData);
-
-    /* remove from list */
-    LIST_REMOVE(entry, pointers);
-    UA_ServerOnNetwork_deleteMembers(&entry->serverOnNetwork);
-    if(entry->pathTmp)
-        UA_free(entry->pathTmp);
-
-#if UA_MULTITHREADING >= 200
-    UA_atomic_subSize(&dm->serverOnNetworkSize, 1);
-    entry->delayedCleanup.callback = NULL; /* Only free the structure */
-    UA_WorkQueue_enqueueDelayed(&server->workQueue, &entry->delayedCleanup);
-#else
-    dm->serverOnNetworkSize--;
-    UA_free(entry);
-#endif
-}
-
-static void
-mdns_append_path_to_url(UA_String *url, const char *path) {
-    size_t pathLen = strlen(path);
-    /* todo: malloc may fail: return a statuscode */
-    char *newUrl = (char *)UA_malloc(url->length + pathLen);
-    memcpy(newUrl, url->data, url->length);
-    memcpy(newUrl + url->length, path, pathLen);
-    url->length = url->length + pathLen;
-    url->data = (UA_Byte *) newUrl;
-}
-
-static void
-setTxt(UA_Server *server, const struct resource *r,
-       struct serverOnNetwork_list_entry *entry) {
-    entry->txtSet = true;
-    xht_t *x = txt2sd(r->rdata, r->rdlength);
-    char *path = (char *) xht_get(x, "path");
-    char *caps = (char *) xht_get(x, "caps");
-
-    size_t pathLen = path ? strlen(path) : 0;
-
-    if(path && pathLen > 1) {
-        if(!entry->srvSet) {
-            /* txt arrived before SRV, thus cache path entry */
-            if (!entry->pathTmp) {
-                entry->pathTmp = (char*)UA_malloc(pathLen+1);
-                if (!entry->pathTmp) {
-                    UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER, "Cannot alloc memory for mDNS srv path");
-                    return;
-                }
-                memcpy(&(entry->pathTmp), &path, pathLen);
-                entry->pathTmp[pathLen] = '\0';
-            }
-        } else {
-            /* SRV already there and discovery URL set. Add path to discovery URL */
-            mdns_append_path_to_url(&entry->serverOnNetwork.discoveryUrl, path);
-        }
-    }
-
-    if(caps && strlen(caps) > 0) {
-        /* count comma in caps */
-        size_t capsCount = 1;
-        for(size_t i = 0; caps[i]; i++) {
-            if(caps[i] == ',')
-                capsCount++;
-        }
-
-        /* set capabilities */
-        entry->serverOnNetwork.serverCapabilitiesSize = capsCount;
-        entry->serverOnNetwork.serverCapabilities =
-            (UA_String *) UA_Array_new(capsCount, &UA_TYPES[UA_TYPES_STRING]);
-
-        for(size_t i = 0; i < capsCount; i++) {
-            char *nextStr = strchr(caps, ',');
-            size_t len = nextStr ? (size_t) (nextStr - caps) : strlen(caps);
-            entry->serverOnNetwork.serverCapabilities[i].length = len;
-            /* todo: malloc may fail: return a statuscode */
-            entry->serverOnNetwork.serverCapabilities[i].data = (UA_Byte*)UA_malloc(len);
-            memcpy(entry->serverOnNetwork.serverCapabilities[i].data, caps, len);
-            if(nextStr)
-                caps = nextStr + 1;
-            else
-                break;
-        }
-    }
-    xht_free(x);
-}
-
-/* [servername]-[hostname]._opcua-tcp._tcp.local. 86400 IN SRV 0 5 port [hostname]. */
-static void
-setSrv(UA_Server *server, const struct resource *r,
-       struct serverOnNetwork_list_entry *entry) {
-    entry->srvSet = true;
-
-
-    /* The specification Part 12 says: The hostname maps onto the SRV record
-     * target field. If the hostname is an IPAddress then it must be converted
-     * to a domain name. If this cannot be done then LDS shall report an
-     * error. */
-
-    size_t srvNameLen = strlen(r->known.srv.name);
-    if(srvNameLen > 0 && r->known.srv.name[srvNameLen - 1] == '.')
-        /* cut off last dot */
-        srvNameLen--;
-    /* opc.tcp://[servername]:[port][path] */
-    char *newUrl = (char*)UA_malloc(10 + srvNameLen + 8);
-    if (!newUrl) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER, "Cannot allocate char for discovery url. Out of memory.");
-        return;
-    }
-    UA_snprintf(newUrl, 10 + srvNameLen + 8, "opc.tcp://%.*s:%d", (int) srvNameLen,
-             r->known.srv.name, r->known.srv.port);
-
-
-    UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                "Multicast DNS: found server: %s", newUrl);
-    entry->serverOnNetwork.discoveryUrl = UA_String_fromChars(newUrl);
-    UA_free(newUrl);
-
-    if(entry->pathTmp) {
-        mdns_append_path_to_url(&entry->serverOnNetwork.discoveryUrl, entry->pathTmp);
-        UA_free(entry->pathTmp);
-    }
-}
-
-/* This will be called by the mDNS library on every record which is received */
-void
-mdns_record_received(const struct resource *r, void *data) {
-    UA_Server *server = (UA_Server *) data;
-    /* we only need SRV and TXT records */
-    /* TODO: remove magic number */
-    if((r->clazz != QCLASS_IN && r->clazz != QCLASS_IN + 32768) ||
-       (r->type != QTYPE_SRV && r->type != QTYPE_TXT))
-        return;
-
-    /* we only handle '_opcua-tcp._tcp.' records */
-    char *opcStr = strstr(r->name, "_opcua-tcp._tcp.");
-    if(!opcStr)
-        return;
-
-    /* Compute the length of the servername */
-    size_t servernameLen = (size_t) (opcStr - r->name);
-    if(servernameLen == 0)
-        return;
-    servernameLen--; /* remove point */
-
-    /* Get entry */
-    struct serverOnNetwork_list_entry *entry =
-            mdns_record_add_or_get(&server->discoveryManager, r->name, r->name,
-                                   servernameLen, r->ttl > 0);
-    if(!entry)
-        return;
-
-    /* Check that the ttl is positive */
-    if(r->ttl == 0) {
-        UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                    "Multicast DNS: remove server (TTL=0): %.*s",
-                    (int)entry->serverOnNetwork.discoveryUrl.length,
-                    entry->serverOnNetwork.discoveryUrl.data);
-        mdns_record_remove(server, r->name, entry);
-        return;
-    }
-
-    /* Update lastSeen */
-    entry->lastSeen = UA_DateTime_nowMonotonic();
-
-    /* TXT and SRV are already set */
-    if(entry->txtSet && entry->srvSet) {
-        // call callback for every mdns package we received.
-        // This will also call the callback multiple times
-        if (server->discoveryManager.serverOnNetworkCallback &&
-            !mdns_is_self_announce(server, entry))
-            server->discoveryManager.
-                serverOnNetworkCallback(&entry->serverOnNetwork, true, entry->txtSet,
-                                        server->discoveryManager.serverOnNetworkCallbackData);
-        return;
-    }
-
-    /* Add the resources */
-    if(r->type == QTYPE_TXT && !entry->txtSet)
-        setTxt(server, r, entry);
-    else if (r->type == QTYPE_SRV && !entry->srvSet)
-        setSrv(server, r, entry);
-
-    /* Call callback to announce a new server */
-    if(entry->srvSet && server->discoveryManager.serverOnNetworkCallback &&
-       !mdns_is_self_announce(server, entry))
-        server->discoveryManager.
-            serverOnNetworkCallback(&entry->serverOnNetwork, true, entry->txtSet,
-                                    server->discoveryManager.serverOnNetworkCallbackData);
-}
-
-void
-mdns_create_txt(UA_Server *server, const char *fullServiceDomain, const char *path,
-                const UA_String *capabilites, const size_t capabilitiesSize,
-                void (*conflict)(char *host, int type, void *arg)) {
-    mdns_record_t *r = mdnsd_unique(server->discoveryManager.mdnsDaemon, fullServiceDomain,
-                                    QTYPE_TXT, 600, conflict, server);
-    xht_t *h = xht_new(11);
-    char *allocPath = NULL;
-    if(!path || strlen(path) == 0) {
-        xht_set(h, "path", "/");
-    } else {
-        /* path does not contain slash, so add it here */
-        size_t pathLen = strlen(path);
-        if(path[0] == '/') {
-            allocPath = (char*)UA_malloc(pathLen+1);
-            if (!allocPath) {
-                UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER, "Cannot alloc memory for txt path");
-                return;
-            }
-            memcpy(&allocPath, &path, pathLen);
-            allocPath[pathLen] = '\0';
-        } else {
-            /* todo: malloc may fail: return a statuscode */
-            allocPath = (char*)UA_malloc(pathLen + 2);
-            allocPath[0] = '/';
-            memcpy(allocPath + 1, path, pathLen);
-            allocPath[pathLen + 1] = '\0';
-        }
-        xht_set(h, "path", allocPath);
-    }
-
-    /* calculate max string length: */
-    size_t capsLen = 0;
-    for(size_t i = 0; i < capabilitiesSize; i++) {
-        /* add comma or last \0 */
-        capsLen += capabilites[i].length + 1;
-    }
-
-    char *caps = NULL;
-    if(capsLen) {
-        /* freed when xht_free is called */
-        /* todo: malloc may fail: return a statuscode */
-        caps = (char*)UA_malloc(sizeof(char) * capsLen);
-        size_t idx = 0;
-        for(size_t i = 0; i < capabilitiesSize; i++) {
-            memcpy(caps + idx, (const char *) capabilites[i].data, capabilites[i].length);
-            idx += capabilites[i].length + 1;
-            caps[idx - 1] = ',';
-        }
-        caps[idx - 1] = '\0';
-
-        xht_set(h, "caps", caps);
-    } else {
-        xht_set(h, "caps", "NA");
-    }
-
-    int txtRecordLength;
-    unsigned char *packet = sd2txt(h, &txtRecordLength);
-    if(allocPath)
-        UA_free(allocPath);
-    if(caps)
-        UA_free(caps);
-    xht_free(h);
-    mdnsd_set_raw(server->discoveryManager.mdnsDaemon, r, (char *) packet,
-                  (unsigned short) txtRecordLength);
-    UA_free(packet);
-}
-
-mdns_record_t *
-mdns_find_record(mdns_daemon_t *mdnsDaemon, unsigned short type,
-                 const char *host, const char *rdname) {
-    mdns_record_t *r = mdnsd_get_published(mdnsDaemon, host);
-    if(!r)
-        return NULL;
-
-    /* search for the record with the correct ptr hostname */
-    while(r) {
-        const mdns_answer_t *data = mdnsd_record_data(r);
-        if(data->type == type && strcmp(data->rdname, rdname) == 0)
-            return r;
-        r = mdnsd_record_next(r);
-    }
-    return NULL;
-}
-
-/* set record in the given interface */
-static void
-mdns_set_address_record_if(UA_DiscoveryManager *dm, const char *fullServiceDomain,
-                           const char *localDomain, char *addr, UA_UInt16 addr_len) {
-    /* [servername]-[hostname]._opcua-tcp._tcp.local. A [ip]. */
-    mdns_record_t *r = mdnsd_shared(dm->mdnsDaemon, fullServiceDomain, QTYPE_A, 600);
-    mdnsd_set_raw(dm->mdnsDaemon, r, addr, addr_len);
-
-    /* [hostname]. A [ip]. */
-    r = mdnsd_shared(dm->mdnsDaemon, localDomain, QTYPE_A, 600);
-    mdnsd_set_raw(dm->mdnsDaemon, r, addr, addr_len);
-}
-
-/* Loop over network interfaces and run set_address_record on each */
-#ifdef _WIN32
-
-void mdns_set_address_record(UA_Server *server, const char *fullServiceDomain,
-                             const char *localDomain) {
-    IP_ADAPTER_ADDRESSES* adapter_addresses = getInterfaces(server);
-    if(!adapter_addresses)
-        return;
-
-    /* Iterate through all of the adapters */
-    IP_ADAPTER_ADDRESSES* adapter = adapter_addresses;
-    for(; adapter != NULL; adapter = adapter->Next) {
-        /* Skip loopback adapters */
-        if(IF_TYPE_SOFTWARE_LOOPBACK == adapter->IfType)
-            continue;
-
-        /* Parse all IPv4 and IPv6 addresses */
-        IP_ADAPTER_UNICAST_ADDRESS* address = adapter->FirstUnicastAddress;
-        for(; NULL != address; address = address->Next) {
-            int family = address->Address.lpSockaddr->sa_family;
-            if(AF_INET == family) {
-                SOCKADDR_IN* ipv4 = (SOCKADDR_IN*)(address->Address.lpSockaddr); /* IPv4 */
-                mdns_set_address_record_if(&server->discoveryManager, fullServiceDomain,
-                                           localDomain, (char *)&ipv4->sin_addr, 4);
-            } else if(AF_INET6 == family) {
-                /* IPv6 */
-#if 0
-                SOCKADDR_IN6* ipv6 = (SOCKADDR_IN6*)(address->Address.lpSockaddr);
-
-                char str_buffer[INET6_ADDRSTRLEN] = {0};
-                inet_ntop(AF_INET6, &(ipv6->sin6_addr), str_buffer, INET6_ADDRSTRLEN);
-
-                std::string ipv6_str(str_buffer);
-
-                /* Detect and skip non-external addresses */
-                UA_Boolean is_link_local(false);
-                UA_Boolean is_special_use(false);
-
-                if(0 == ipv6_str.find("fe")) {
-                    char c = ipv6_str[2];
-                    if(c == '8' || c == '9' || c == 'a' || c == 'b')
-                        is_link_local = true;
-                } else if (0 == ipv6_str.find("2001:0:")) {
-                    is_special_use = true;
-                }
-
-                if(!(is_link_local || is_special_use))
-                    ipAddrs.mIpv6.push_back(ipv6_str);
-#endif
-            }
-        }
-    }
-
-    /* Cleanup */
-    UA_free(adapter_addresses);
-    adapter_addresses = NULL;
-}
-
-#else /* _WIN32 */
-
-void
-mdns_set_address_record(UA_Server *server, const char *fullServiceDomain,
-                        const char *localDomain) {
-    struct ifaddrs *ifaddr, *ifa;
-    if(getifaddrs(&ifaddr) == -1) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "getifaddrs returned an unexpected error. Not setting mDNS A records.");
-        return;
-    }
-
-    /* Walk through linked list, maintaining head pointer so we can free list later */
-    int n;
-    for(ifa = ifaddr, n = 0; ifa != NULL; ifa = ifa->ifa_next, n++) {
-        if(!ifa->ifa_addr)
-            continue;
-
-        if((strcmp("lo", ifa->ifa_name) == 0) ||
-           !(ifa->ifa_flags & (IFF_RUNNING))||
-           !(ifa->ifa_flags & (IFF_MULTICAST)))
-            continue;
-
-        /* IPv4 */
-        if(ifa->ifa_addr->sa_family == AF_INET) {
-            struct sockaddr_in* sa = (struct sockaddr_in*) ifa->ifa_addr;
-            mdns_set_address_record_if(&server->discoveryManager, fullServiceDomain,
-                                       localDomain, (char*)&sa->sin_addr.s_addr, 4);
-        }
-
-        /* IPv6 not implemented yet */
-    }
-
-    /* Clean up */
-    freeifaddrs(ifaddr);
-}
-
-#endif /* _WIN32 */
-
-#endif /* UA_ENABLE_DISCOVERY_MULTICAST */
diff --git a/ext/open62541/src/server/ua_server_internal.h b/ext/open62541/src/server/ua_server_internal.h
deleted file mode 100644
index ae2e62e..0000000
--- a/ext/open62541/src/server/ua_server_internal.h
+++ /dev/null
@@ -1,356 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2014-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014, 2017 (c) Florian Palm
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Julian Grothoff
- *    Copyright 2019 (c) Kalycito Infotech Private Limited
- */
-
-#ifndef UA_SERVER_INTERNAL_H_
-#define UA_SERVER_INTERNAL_H_
-
-#include <open62541/server.h>
-#include <open62541/server_config.h>
-#include <open62541/plugin/nodestore.h>
-
-#include "ua_connection_internal.h"
-#include "ua_securechannel_manager.h"
-#include "ua_session_manager.h"
-#include "ua_timer.h"
-#include "ua_util_internal.h"
-#include "ua_workqueue.h"
-
-_UA_BEGIN_DECLS
-
-#if UA_MULTITHREADING >= 100
-#undef UA_THREADSAFE
-#define UA_THREADSAFE UA_DEPRECATED
-#endif
-
-#ifdef UA_ENABLE_PUBSUB
-#include "ua_pubsub_manager.h"
-#endif
-
-#ifdef UA_ENABLE_DISCOVERY
-#include "ua_discovery_manager.h"
-#endif
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-#include "ua_subscription.h"
-
-typedef struct {
-    UA_MonitoredItem monitoredItem;
-    void *context;
-    union {
-        UA_Server_DataChangeNotificationCallback dataChangeCallback;
-        /* UA_Server_EventNotificationCallback eventCallback; */
-    } callback;
-} UA_LocalMonitoredItem;
-
-#endif
-
-typedef enum {
-    UA_SERVERLIFECYCLE_FRESH,
-    UA_SERVERLIFECYLE_RUNNING
-} UA_ServerLifecycle;
-
-struct UA_Server {
-    /* Config */
-    UA_ServerConfig config;
-    UA_DateTime startTime;
-    UA_DateTime endTime; /* Zeroed out. If a time is set, then the server shuts
-                          * down once the time has been reached */
-
-    /* Nodestore */
-    void *nsCtx;
-
-    UA_ServerLifecycle state;
-
-    /* Security */
-    UA_SecureChannelManager secureChannelManager;
-    UA_SessionManager sessionManager;
-    UA_Session adminSession; /* Local access to the services (for startup and
-                              * maintenance) uses this Session with all possible
-                              * access rights (Session Id: 1) */
-
-    /* Namespaces */
-    size_t namespacesSize;
-    UA_String *namespaces;
-
-    /* Callbacks with a repetition interval */
-    UA_Timer timer;
-
-    /* WorkQueue and worker threads */
-    UA_WorkQueue workQueue;
-
-    /* For bootstrapping, omit some consistency checks, creating a reference to
-     * the parent and member instantiation */
-    UA_Boolean bootstrapNS0;
-
-    /* Discovery */
-#ifdef UA_ENABLE_DISCOVERY
-    UA_DiscoveryManager discoveryManager;
-#endif
-
-    /* DataChange Subscriptions */
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    /* Num active subscriptions */
-    UA_UInt32 numSubscriptions;
-    /* Num active monitored items */
-    UA_UInt32 numMonitoredItems;
-    /* To be cast to UA_LocalMonitoredItem to get the callback and context */
-    LIST_HEAD(LocalMonitoredItems, UA_MonitoredItem) localMonitoredItems;
-    UA_UInt32 lastLocalMonitoredItemId;
-#endif
-
-    /* Publish/Subscribe */
-#ifdef UA_ENABLE_PUBSUB
-    UA_PubSubManager pubSubManager;
-#endif
-
-#if UA_MULTITHREADING >= 100
-    UA_LOCK_TYPE(networkMutex)
-    UA_LOCK_TYPE(serviceMutex)
-#endif
-};
-
-/*****************/
-/* Node Handling */
-/*****************/
-
-/* Deletes references from the node which are not matching any type in the given
- * array. Could be used to e.g. delete all the references, except
- * 'HASMODELINGRULE' */
-void UA_Node_deleteReferencesSubset(UA_Node *node, size_t referencesSkipSize,
-                                    UA_NodeId* referencesSkip);
-
-/* Calls the callback with the node retrieved from the nodestore on top of the
- * stack. Either a copy or the original node for in-situ editing. Depends on
- * multithreading and the nodestore.*/
-typedef UA_StatusCode (*UA_EditNodeCallback)(UA_Server*, UA_Session*,
-                                             UA_Node *node, void*);
-UA_StatusCode UA_Server_editNode(UA_Server *server, UA_Session *session,
-                                 const UA_NodeId *nodeId,
-                                 UA_EditNodeCallback callback,
-                                 void *data);
-
-/*********************/
-/* Utility Functions */
-/*********************/
-
-/* A few global NodeId definitions */
-extern const UA_NodeId subtypeId;
-extern const UA_NodeId hierarchicalReferences;
-
-void setupNs1Uri(UA_Server *server);
-UA_UInt16 addNamespace(UA_Server *server, const UA_String name);
-
-UA_Boolean
-UA_Node_hasSubTypeOrInstances(const UA_Node *node);
-
-/* Recursively searches "upwards" in the tree following specific reference types */
-UA_Boolean
-isNodeInTree(void *nsCtx, const UA_NodeId *leafNode,
-             const UA_NodeId *nodeToFind, const UA_NodeId *referenceTypeIds,
-             size_t referenceTypeIdsSize);
-
-/* Returns an array with the hierarchy of nodes. The start nodes are returned as
- * well. The returned array starts at the leaf and continues "upwards" or
- * "downwards". Duplicate entries are removed. The parameter `walkDownwards`
- * indicates the direction of search. */
-UA_StatusCode
-browseRecursive(UA_Server *server,
-                size_t startNodesSize, const UA_NodeId *startNodes,
-                size_t refTypesSize, const UA_NodeId *refTypes,
-                UA_BrowseDirection browseDirection, UA_Boolean includeStartNodes,
-                size_t *resultsSize, UA_ExpandedNodeId **results);
-
-/* If refTypes is non-NULL, tries to realloc and increase the length */
-UA_StatusCode
-referenceSubtypes(UA_Server *server, const UA_NodeId *refType,
-                  size_t *refTypesSize, UA_NodeId **refTypes);
-
-/* Returns the recursive type and interface hierarchy of the node */ 
-UA_StatusCode
-getParentTypeAndInterfaceHierarchy(UA_Server *server, const UA_NodeId *typeNode,
-                                   UA_NodeId **typeHierarchy, size_t *typeHierarchySize);
-
-/* Returns the type node from the node on the stack top. The type node is pushed
- * on the stack and returned. */
-const UA_Node * getNodeType(UA_Server *server, const UA_Node *node);
-
-/* Write a node attribute with a defined session */
-UA_StatusCode
-writeWithSession(UA_Server *server, UA_Session *session,
-                 const UA_WriteValue *value);
-
-
-/* Many services come as an array of operations. This function generalizes the
- * processing of the operations. */
-typedef void (*UA_ServiceOperation)(UA_Server *server, UA_Session *session,
-                                    const void *context,
-                                    const void *requestOperation,
-                                    void *responseOperation);
-
-UA_StatusCode
-UA_Server_processServiceOperations(UA_Server *server, UA_Session *session,
-                                   UA_ServiceOperation operationCallback,
-                                   const void *context,
-                                   const size_t *requestOperations,
-                                   const UA_DataType *requestOperationsType,
-                                   size_t *responseOperations,
-                                   const UA_DataType *responseOperationsType)
-    UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-
-/******************************************/
-/* Internal function calls, without locks */
-/******************************************/
-UA_StatusCode
-deleteNode(UA_Server *server, const UA_NodeId nodeId,
-           UA_Boolean deleteReferences);
-
-UA_StatusCode
-addNode(UA_Server *server, const UA_NodeClass nodeClass, const UA_NodeId *requestedNewNodeId,
-        const UA_NodeId *parentNodeId, const UA_NodeId *referenceTypeId,
-        const UA_QualifiedName browseName, const UA_NodeId *typeDefinition,
-        const UA_NodeAttributes *attr, const UA_DataType *attributeType,
-        void *nodeContext, UA_NodeId *outNewNodeId);
-
-UA_StatusCode
-setVariableNode_dataSource(UA_Server *server, const UA_NodeId nodeId,
-                           const UA_DataSource dataSource);
-
-UA_StatusCode
-setMethodNode_callback(UA_Server *server,
-                       const UA_NodeId methodNodeId,
-                       UA_MethodCallback methodCallback);
-
-UA_StatusCode
-writeAttribute(UA_Server *server, const UA_WriteValue *value);
-
-UA_StatusCode
-writeWithWriteValue(UA_Server *server, const UA_NodeId *nodeId,
-                    const UA_AttributeId attributeId,
-                    const UA_DataType *attr_type,
-                    const void *attr);
-
-UA_DataValue
-readAttribute(UA_Server *server, const UA_ReadValueId *item,
-              UA_TimestampsToReturn timestamps);
-
-UA_StatusCode
-readWithReadValue(UA_Server *server, const UA_NodeId *nodeId,
-                  const UA_AttributeId attributeId, void *v);
-
-UA_BrowsePathResult
-translateBrowsePathToNodeIds(UA_Server *server, const UA_BrowsePath *browsePath);
-
-void
-monitoredItem_sampleCallback(UA_Server *server, UA_MonitoredItem *monitoredItem);
-
-UA_BrowsePathResult
-browseSimplifiedBrowsePath(UA_Server *server, const UA_NodeId origin,
-                           size_t browsePathSize, const UA_QualifiedName *browsePath);
-
-/***************************************/
-/* Check Information Model Consistency */
-/***************************************/
-
-/* Read a node attribute in the context of a "checked-out" node. So the
- * attribute will not be copied when possible. The variant then points into the
- * node and has UA_VARIANT_DATA_NODELETE set. */
-void
-ReadWithNode(const UA_Node *node, UA_Server *server, UA_Session *session,
-             UA_TimestampsToReturn timestampsToReturn,
-             const UA_ReadValueId *id, UA_DataValue *v);
-
-UA_StatusCode
-readValueAttribute(UA_Server *server, UA_Session *session,
-                   const UA_VariableNode *vn, UA_DataValue *v);
-
-/* Test whether the value matches a variable definition given by
- * - datatype
- * - valueranke
- * - array dimensions.
- * Sometimes it can be necessary to transform the content of the value, e.g.
- * byte array to bytestring or uint32 to some enum. If editableValue is non-NULL,
- * we try to create a matching variant that points to the original data. */
-UA_Boolean
-compatibleValue(UA_Server *server, UA_Session *session, const UA_NodeId *targetDataTypeId,
-                UA_Int32 targetValueRank, size_t targetArrayDimensionsSize,
-                const UA_UInt32 *targetArrayDimensions, const UA_Variant *value,
-                const UA_NumericRange *range);
-
-UA_Boolean
-compatibleArrayDimensions(size_t constraintArrayDimensionsSize,
-                          const UA_UInt32 *constraintArrayDimensions,
-                          size_t testArrayDimensionsSize,
-                          const UA_UInt32 *testArrayDimensions);
-
-UA_Boolean
-compatibleValueArrayDimensions(const UA_Variant *value, size_t targetArrayDimensionsSize,
-                               const UA_UInt32 *targetArrayDimensions);
-
-UA_Boolean
-compatibleValueRankArrayDimensions(UA_Server *server, UA_Session *session,
-                                   UA_Int32 valueRank, size_t arrayDimensionsSize);
-
-UA_Boolean
-compatibleDataType(UA_Server *server, const UA_NodeId *dataType,
-                   const UA_NodeId *constraintDataType, UA_Boolean isValue);
-
-UA_Boolean
-compatibleValueRanks(UA_Int32 valueRank, UA_Int32 constraintValueRank);
-
-struct BrowseOpts {
-    UA_UInt32 maxReferences;
-    UA_Boolean recursive;
-};
-
-void
-Operation_Browse(UA_Server *server, UA_Session *session, const UA_UInt32 *maxrefs,
-                 const UA_BrowseDescription *descr, UA_BrowseResult *result);
-
-UA_DataValue
-UA_Server_readWithSession(UA_Server *server, UA_Session *session,
-                          const UA_ReadValueId *item,
-                          UA_TimestampsToReturn timestampsToReturn);
-
-/*****************************/
-/* AddNodes Begin and Finish */
-/*****************************/
-
-/* Creates a new node in the nodestore. */
-UA_StatusCode
-AddNode_raw(UA_Server *server, UA_Session *session, void *nodeContext,
-            const UA_AddNodesItem *item, UA_NodeId *outNewNodeId);
-
-/* Check the reference to the parent node; Add references. */
-UA_StatusCode
-AddNode_addRefs(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId,
-                const UA_NodeId *parentNodeId, const UA_NodeId *referenceTypeId,
-                const UA_NodeId *typeDefinitionId);
-
-/* Type-check type-definition; Run the constructors */
-UA_StatusCode
-AddNode_finish(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId);
-
-/**********************/
-/* Create Namespace 0 */
-/**********************/
-
-UA_StatusCode UA_Server_initNS0(UA_Server *server);
-
-UA_StatusCode writeNs0VariableArray(UA_Server *server, UA_UInt32 id, void *v,
-                      size_t length, const UA_DataType *type);
-
-_UA_END_DECLS
-
-#endif /* UA_SERVER_INTERNAL_H_ */
diff --git a/ext/open62541/src/server/ua_server_ns0.c b/ext/open62541/src/server/ua_server_ns0.c
deleted file mode 100644
index 6dd2fe8..0000000
--- a/ext/open62541/src/server/ua_server_ns0.c
+++ /dev/null
@@ -1,1088 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Thomas Bender
- *    Copyright 2017 (c) Julian Grothoff
- *    Copyright 2017 (c) Henrik Norrman
- *    Copyright 2018 (c) Fabian Arndt, Root-Core
- *    Copyright 2019 (c) Kalycito Infotech Private Limited
- */
-
-#include "open62541/namespace0_generated.h"
-
-#include "ua_server_internal.h"
-#include "ua_session.h"
-#include "ua_subscription.h"
-
-static UA_StatusCode
-addNode_raw(UA_Server *server, UA_NodeClass nodeClass,
-            UA_UInt32 nodeId, char *name, void *attributes,
-            const UA_DataType *attributesType) {
-    UA_AddNodesItem item;
-    UA_AddNodesItem_init(&item);
-    item.nodeClass = nodeClass;
-    item.requestedNewNodeId.nodeId = UA_NODEID_NUMERIC(0, nodeId);
-    item.browseName = UA_QUALIFIEDNAME(0, name);
-    item.nodeAttributes.encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
-    item.nodeAttributes.content.decoded.data = attributes;
-    item.nodeAttributes.content.decoded.type = attributesType;
-    return AddNode_raw(server, &server->adminSession, NULL, &item, NULL);
-}
-
-static UA_StatusCode
-addNode_finish(UA_Server *server, UA_UInt32 nodeId,
-               UA_UInt32 parentNodeId, UA_UInt32 referenceTypeId) {
-    const UA_NodeId sourceId = UA_NODEID_NUMERIC(0, nodeId);
-    const UA_NodeId refTypeId = UA_NODEID_NUMERIC(0, referenceTypeId);
-    const UA_ExpandedNodeId targetId = UA_EXPANDEDNODEID_NUMERIC(0, parentNodeId);
-    UA_StatusCode retval = UA_Server_addReference(server, sourceId, refTypeId, targetId, false);
-    if (retval != UA_STATUSCODE_GOOD)
-        return retval;
-    return AddNode_finish(server, &server->adminSession, &sourceId);
-}
-
-static UA_StatusCode
-addObjectNode(UA_Server *server, char* name, UA_UInt32 objectid,
-              UA_UInt32 parentid, UA_UInt32 referenceid, UA_UInt32 type_id) {
-    UA_ObjectAttributes object_attr = UA_ObjectAttributes_default;
-    object_attr.displayName = UA_LOCALIZEDTEXT("", name);
-    return UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(0, objectid),
-                                   UA_NODEID_NUMERIC(0, parentid),
-                                   UA_NODEID_NUMERIC(0, referenceid),
-                                   UA_QUALIFIEDNAME(0, name),
-                                   UA_NODEID_NUMERIC(0, type_id),
-                                   object_attr, NULL, NULL);
-}
-
-static UA_StatusCode
-addReferenceTypeNode(UA_Server *server, char* name, char *inverseName, UA_UInt32 referencetypeid,
-                     UA_Boolean isabstract, UA_Boolean symmetric, UA_UInt32 parentid) {
-    UA_ReferenceTypeAttributes reference_attr = UA_ReferenceTypeAttributes_default;
-    reference_attr.displayName = UA_LOCALIZEDTEXT("", name);
-    reference_attr.isAbstract = isabstract;
-    reference_attr.symmetric = symmetric;
-    if(inverseName)
-        reference_attr.inverseName = UA_LOCALIZEDTEXT("", inverseName);
-    return UA_Server_addReferenceTypeNode(server, UA_NODEID_NUMERIC(0, referencetypeid),
-                                   UA_NODEID_NUMERIC(0, parentid), UA_NODEID_NULL,
-                                   UA_QUALIFIEDNAME(0, name), reference_attr, NULL, NULL);
-}
-
-/***************************/
-/* Bootstrap NS0 hierarchy */
-/***************************/
-
-/* Creates the basic nodes which are expected by the nodeset compiler to be
- * already created. This is necessary to reduce the dependencies for the nodeset
- * compiler. */
-static UA_StatusCode
-UA_Server_createNS0_base(UA_Server *server) {
-    /* Bootstrap References and HasSubtype */
-    UA_StatusCode ret = UA_STATUSCODE_GOOD;
-    UA_ReferenceTypeAttributes references_attr = UA_ReferenceTypeAttributes_default;
-    references_attr.displayName = UA_LOCALIZEDTEXT("", "References");
-    references_attr.isAbstract = true;
-    references_attr.symmetric = true;
-    references_attr.inverseName = UA_LOCALIZEDTEXT("", "References");
-    ret |= addNode_raw(server, UA_NODECLASS_REFERENCETYPE, UA_NS0ID_REFERENCES, "References",
-                       &references_attr, &UA_TYPES[UA_TYPES_REFERENCETYPEATTRIBUTES]);
-
-    UA_ReferenceTypeAttributes hassubtype_attr = UA_ReferenceTypeAttributes_default;
-    hassubtype_attr.displayName = UA_LOCALIZEDTEXT("", "HasSubtype");
-    hassubtype_attr.isAbstract = false;
-    hassubtype_attr.symmetric = false;
-    hassubtype_attr.inverseName = UA_LOCALIZEDTEXT("", "HasSupertype");
-    ret |= addNode_raw(server, UA_NODECLASS_REFERENCETYPE, UA_NS0ID_HASSUBTYPE, "HasSubtype",
-                       &hassubtype_attr, &UA_TYPES[UA_TYPES_REFERENCETYPEATTRIBUTES]);
-
-    UA_ReferenceTypeAttributes aggregates_attr = UA_ReferenceTypeAttributes_default;
-    aggregates_attr.displayName = UA_LOCALIZEDTEXT("", "Aggregates");
-    aggregates_attr.isAbstract = false;
-    aggregates_attr.symmetric = false;
-    aggregates_attr.inverseName = UA_LOCALIZEDTEXT("", "AggregatedBy");
-    ret |= addNode_raw(server, UA_NODECLASS_REFERENCETYPE, UA_NS0ID_AGGREGATES, "Aggregates",
-                       &aggregates_attr, &UA_TYPES[UA_TYPES_REFERENCETYPEATTRIBUTES]);
-
-    ret |= addReferenceTypeNode(server, "HierarchicalReferences", NULL,
-                         UA_NS0ID_HIERARCHICALREFERENCES, true, false, UA_NS0ID_REFERENCES);
-
-    ret |= addReferenceTypeNode(server, "NonHierarchicalReferences", NULL,
-                         UA_NS0ID_NONHIERARCHICALREFERENCES, true, false, UA_NS0ID_REFERENCES);
-
-    ret |= addReferenceTypeNode(server, "HasChild", NULL, UA_NS0ID_HASCHILD,
-                         true, false, UA_NS0ID_HIERARCHICALREFERENCES);
-
-    ret |= addReferenceTypeNode(server, "Organizes", "OrganizedBy", UA_NS0ID_ORGANIZES,
-                         false, false, UA_NS0ID_HIERARCHICALREFERENCES);
-
-    ret |= addReferenceTypeNode(server, "HasEventSource", "EventSourceOf", UA_NS0ID_HASEVENTSOURCE,
-                         false, false, UA_NS0ID_HIERARCHICALREFERENCES);
-
-    ret |= addReferenceTypeNode(server, "HasModellingRule", "ModellingRuleOf", UA_NS0ID_HASMODELLINGRULE,
-                         false, false, UA_NS0ID_NONHIERARCHICALREFERENCES);
-
-    ret |= addReferenceTypeNode(server, "HasEncoding", "EncodingOf", UA_NS0ID_HASENCODING,
-                         false, false, UA_NS0ID_NONHIERARCHICALREFERENCES);
-
-    ret |= addReferenceTypeNode(server, "HasDescription", "DescriptionOf", UA_NS0ID_HASDESCRIPTION,
-                         false, false, UA_NS0ID_NONHIERARCHICALREFERENCES);
-
-    ret |= addReferenceTypeNode(server, "HasTypeDefinition", "TypeDefinitionOf", UA_NS0ID_HASTYPEDEFINITION,
-                         false, false, UA_NS0ID_NONHIERARCHICALREFERENCES);
-
-    ret |= addReferenceTypeNode(server, "GeneratesEvent", "GeneratedBy", UA_NS0ID_GENERATESEVENT,
-                         false, false, UA_NS0ID_NONHIERARCHICALREFERENCES);
-
-    /* Complete bootstrap of Aggregates */
-    ret |= addNode_finish(server, UA_NS0ID_AGGREGATES, UA_NS0ID_HASCHILD, UA_NS0ID_HASSUBTYPE);
-
-    /* Complete bootstrap of HasSubtype */
-    ret |= addNode_finish(server, UA_NS0ID_HASSUBTYPE, UA_NS0ID_HASCHILD, UA_NS0ID_HASSUBTYPE);
-
-    ret |= addReferenceTypeNode(server, "HasProperty", "PropertyOf", UA_NS0ID_HASPROPERTY,
-                         false, false, UA_NS0ID_AGGREGATES);
-
-    ret |= addReferenceTypeNode(server, "HasComponent", "ComponentOf", UA_NS0ID_HASCOMPONENT,
-                         false, false, UA_NS0ID_AGGREGATES);
-
-    ret |= addReferenceTypeNode(server, "HasNotifier", "NotifierOf", UA_NS0ID_HASNOTIFIER,
-                         false, false, UA_NS0ID_HASEVENTSOURCE);
-
-    ret |= addReferenceTypeNode(server, "HasOrderedComponent", "OrderedComponentOf",
-                         UA_NS0ID_HASORDEREDCOMPONENT, false, false, UA_NS0ID_HASCOMPONENT);
-
-    /**************/
-    /* Data Types */
-    /**************/
-
-    /* Bootstrap BaseDataType */
-    UA_DataTypeAttributes basedatatype_attr = UA_DataTypeAttributes_default;
-    basedatatype_attr.displayName = UA_LOCALIZEDTEXT("", "BaseDataType");
-    basedatatype_attr.isAbstract = true;
-    ret |= addNode_raw(server, UA_NODECLASS_DATATYPE, UA_NS0ID_BASEDATATYPE, "BaseDataType",
-                       &basedatatype_attr, &UA_TYPES[UA_TYPES_DATATYPEATTRIBUTES]);
-
-    /*****************/
-    /* VariableTypes */
-    /*****************/
-
-    UA_VariableTypeAttributes basevar_attr = UA_VariableTypeAttributes_default;
-    basevar_attr.displayName = UA_LOCALIZEDTEXT("", "BaseVariableType");
-    basevar_attr.isAbstract = true;
-    basevar_attr.valueRank = UA_VALUERANK_ANY;
-    basevar_attr.dataType = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATATYPE);
-    ret |= addNode_raw(server, UA_NODECLASS_VARIABLETYPE, UA_NS0ID_BASEVARIABLETYPE, "BaseVariableType",
-                       &basevar_attr, &UA_TYPES[UA_TYPES_VARIABLETYPEATTRIBUTES]);
-
-    UA_VariableTypeAttributes bdv_attr = UA_VariableTypeAttributes_default;
-    bdv_attr.displayName = UA_LOCALIZEDTEXT("", "BaseDataVariableType");
-    bdv_attr.dataType = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATATYPE);
-    bdv_attr.valueRank = UA_VALUERANK_ANY;
-    ret |= UA_Server_addVariableTypeNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_BASEVARIABLETYPE),
-                                         UA_NODEID_NULL, UA_QUALIFIEDNAME(0, "BaseDataVariableType"),
-                                         UA_NODEID_NULL, bdv_attr, NULL, NULL);
-
-    UA_VariableTypeAttributes prop_attr = UA_VariableTypeAttributes_default;
-    prop_attr.displayName = UA_LOCALIZEDTEXT("", "PropertyType");
-    prop_attr.dataType = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATATYPE);
-    prop_attr.valueRank = UA_VALUERANK_ANY;
-    ret |= UA_Server_addVariableTypeNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_PROPERTYTYPE),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_BASEVARIABLETYPE),
-                                         UA_NODEID_NULL, UA_QUALIFIEDNAME(0, "PropertyType"),
-                                         UA_NODEID_NULL, prop_attr, NULL, NULL);
-
-    /***************/
-    /* ObjectTypes */
-    /***************/
-
-    UA_ObjectTypeAttributes baseobj_attr = UA_ObjectTypeAttributes_default;
-    baseobj_attr.displayName = UA_LOCALIZEDTEXT("", "BaseObjectType");
-    ret |= addNode_raw(server, UA_NODECLASS_OBJECTTYPE, UA_NS0ID_BASEOBJECTTYPE, "BaseObjectType",
-                       &baseobj_attr, &UA_TYPES[UA_TYPES_OBJECTTYPEATTRIBUTES]);
-
-    UA_ObjectTypeAttributes folder_attr = UA_ObjectTypeAttributes_default;
-    folder_attr.displayName = UA_LOCALIZEDTEXT("", "FolderType");
-    ret |= UA_Server_addObjectTypeNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                       UA_NODEID_NULL, UA_QUALIFIEDNAME(0, "FolderType"),
-                                       folder_attr, NULL, NULL);
-
-    /******************/
-    /* Root and below */
-    /******************/
-
-    ret |= addObjectNode(server, "Root", UA_NS0ID_ROOTFOLDER, 0, 0, UA_NS0ID_FOLDERTYPE);
-
-    ret |= addObjectNode(server, "Objects", UA_NS0ID_OBJECTSFOLDER, UA_NS0ID_ROOTFOLDER,
-                  UA_NS0ID_ORGANIZES, UA_NS0ID_FOLDERTYPE);
-
-    ret |= addObjectNode(server, "Types", UA_NS0ID_TYPESFOLDER, UA_NS0ID_ROOTFOLDER,
-                  UA_NS0ID_ORGANIZES, UA_NS0ID_FOLDERTYPE);
-
-    ret |= addObjectNode(server, "ReferenceTypes", UA_NS0ID_REFERENCETYPESFOLDER, UA_NS0ID_TYPESFOLDER,
-                  UA_NS0ID_ORGANIZES, UA_NS0ID_FOLDERTYPE);
-    ret |= addNode_finish(server, UA_NS0ID_REFERENCES, UA_NS0ID_REFERENCETYPESFOLDER,
-                   UA_NS0ID_ORGANIZES);
-
-    ret |= addObjectNode(server, "DataTypes", UA_NS0ID_DATATYPESFOLDER, UA_NS0ID_TYPESFOLDER,
-                  UA_NS0ID_ORGANIZES, UA_NS0ID_FOLDERTYPE);
-    ret |= addNode_finish(server, UA_NS0ID_BASEDATATYPE, UA_NS0ID_DATATYPESFOLDER,
-                   UA_NS0ID_ORGANIZES);
-
-    ret |= addObjectNode(server, "VariableTypes", UA_NS0ID_VARIABLETYPESFOLDER, UA_NS0ID_TYPESFOLDER,
-                  UA_NS0ID_ORGANIZES, UA_NS0ID_FOLDERTYPE);
-    ret |= addNode_finish(server, UA_NS0ID_BASEVARIABLETYPE, UA_NS0ID_VARIABLETYPESFOLDER,
-                   UA_NS0ID_ORGANIZES);
-
-    ret |= addObjectNode(server, "ObjectTypes", UA_NS0ID_OBJECTTYPESFOLDER, UA_NS0ID_TYPESFOLDER,
-                  UA_NS0ID_ORGANIZES, UA_NS0ID_FOLDERTYPE);
-    ret |= addNode_finish(server, UA_NS0ID_BASEOBJECTTYPE, UA_NS0ID_OBJECTTYPESFOLDER,
-                   UA_NS0ID_ORGANIZES);
-
-    ret |= addObjectNode(server, "EventTypes", UA_NS0ID_EVENTTYPESFOLDER, UA_NS0ID_TYPESFOLDER,
-                  UA_NS0ID_ORGANIZES, UA_NS0ID_FOLDERTYPE);
-
-    ret |= addObjectNode(server, "Views", UA_NS0ID_VIEWSFOLDER, UA_NS0ID_ROOTFOLDER,
-                  UA_NS0ID_ORGANIZES, UA_NS0ID_FOLDERTYPE);
-
-    if(ret != UA_STATUSCODE_GOOD)
-        ret = UA_STATUSCODE_BADINTERNALERROR;
-
-    return ret;
-}
-
-/****************/
-/* Data Sources */
-/****************/
-
-static UA_StatusCode
-readStatus(UA_Server *server, const UA_NodeId *sessionId, void *sessionContext,
-           const UA_NodeId *nodeId, void *nodeContext, UA_Boolean sourceTimestamp,
-           const UA_NumericRange *range, UA_DataValue *value) {
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    if(sourceTimestamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = UA_DateTime_now();
-    }
-
-    void *data = NULL;
-
-    UA_assert(nodeId->identifierType == UA_NODEIDTYPE_NUMERIC);
-
-    switch(nodeId->identifier.numeric) {
-    case UA_NS0ID_SERVER_SERVERSTATUS_SECONDSTILLSHUTDOWN: {
-        UA_UInt32 *shutdown = UA_UInt32_new();
-        if(!shutdown)
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        if(server->endTime != 0)
-            *shutdown = (UA_UInt32)((server->endTime - UA_DateTime_now()) / UA_DATETIME_SEC);
-        value->value.data = shutdown;
-        value->value.type = &UA_TYPES[UA_TYPES_UINT32];
-        value->hasValue = true;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    case UA_NS0ID_SERVER_SERVERSTATUS_STATE: {
-        UA_ServerState *state = UA_ServerState_new();
-        if(!state)
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        if(server->endTime != 0)
-            *state = UA_SERVERSTATE_SHUTDOWN;
-        value->value.data = state;
-        value->value.type = &UA_TYPES[UA_TYPES_SERVERSTATE];
-        value->hasValue = true;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    case UA_NS0ID_SERVER_SERVERSTATUS: {
-        UA_ServerStatusDataType *statustype = UA_ServerStatusDataType_new();
-        if(!statustype)
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        statustype->startTime = server->startTime;
-        statustype->currentTime = UA_DateTime_now();
-
-        statustype->state = UA_SERVERSTATE_RUNNING;
-        statustype->secondsTillShutdown = 0;
-        if(server->endTime != 0) {
-            statustype->state = UA_SERVERSTATE_SHUTDOWN;
-            statustype->secondsTillShutdown = (UA_UInt32)((server->endTime - UA_DateTime_now()) / UA_DATETIME_SEC);
-        }
-
-        value->value.data = statustype;
-        value->value.type = &UA_TYPES[UA_TYPES_SERVERSTATUSDATATYPE];
-        value->hasValue = true;
-        return UA_BuildInfo_copy(&server->config.buildInfo, &statustype->buildInfo);
-    }
-
-    case UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO:
-        value->value.type = &UA_TYPES[UA_TYPES_BUILDINFO];
-        data = &server->config.buildInfo;
-        break;
-
-    case UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTURI:
-        value->value.type = &UA_TYPES[UA_TYPES_STRING];
-        data = &server->config.buildInfo.productUri;
-        break;
-
-    case UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_MANUFACTURERNAME:
-        value->value.type = &UA_TYPES[UA_TYPES_STRING];
-        data = &server->config.buildInfo.manufacturerName;
-        break;
-
-    case UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTNAME:
-        value->value.type = &UA_TYPES[UA_TYPES_STRING];
-        data = &server->config.buildInfo.productName;
-        break;
-
-    case UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_SOFTWAREVERSION:
-        value->value.type = &UA_TYPES[UA_TYPES_STRING];
-        data = &server->config.buildInfo.softwareVersion;
-        break;
-
-    case UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDNUMBER:
-        value->value.type = &UA_TYPES[UA_TYPES_STRING];
-        data = &server->config.buildInfo.buildNumber;
-        break;
-
-    case UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDDATE:
-        value->value.type = &UA_TYPES[UA_TYPES_DATETIME];
-        data = &server->config.buildInfo.buildDate;
-        break;
-
-    default:
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINTERNALERROR;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    value->value.data = UA_new(value->value.type);
-    if(!value->value.data) {
-        value->value.type = NULL;
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-
-    value->hasValue = true;
-    return UA_copy(data, value->value.data, value->value.type);
-}
-
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-static UA_StatusCode
-readServiceLevel(UA_Server *server, const UA_NodeId *sessionId, void *sessionContext,
-                 const UA_NodeId *nodeId, void *nodeContext, UA_Boolean includeSourceTimeStamp,
-                 const UA_NumericRange *range, UA_DataValue *value) {
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    value->value.type = &UA_TYPES[UA_TYPES_BYTE];
-    value->value.arrayLength = 0;
-    UA_Byte *byte = UA_Byte_new();
-    *byte = 255;
-    value->value.data = byte;
-    value->value.arrayDimensionsSize = 0;
-    value->value.arrayDimensions = NULL;
-    value->hasValue = true;
-    if(includeSourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = UA_DateTime_now();
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-readAuditing(UA_Server *server, const UA_NodeId *sessionId, void *sessionContext,
-             const UA_NodeId *nodeId, void *nodeContext, UA_Boolean includeSourceTimeStamp,
-             const UA_NumericRange *range, UA_DataValue *value) {
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    value->value.type = &UA_TYPES[UA_TYPES_BOOLEAN];
-    value->value.arrayLength = 0;
-    UA_Boolean *boolean = UA_Boolean_new();
-    *boolean = false;
-    value->value.data = boolean;
-    value->value.arrayDimensionsSize = 0;
-    value->value.arrayDimensions = NULL;
-    value->hasValue = true;
-    if(includeSourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = UA_DateTime_now();
-    }
-    return UA_STATUSCODE_GOOD;
-}
-#endif
-
-static UA_StatusCode
-readNamespaces(UA_Server *server, const UA_NodeId *sessionId, void *sessionContext,
-               const UA_NodeId *nodeid, void *nodeContext, UA_Boolean includeSourceTimeStamp,
-               const UA_NumericRange *range,
-               UA_DataValue *value) {
-    /* ensure that the uri for ns1 is set up from the app description */
-    setupNs1Uri(server);
-
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-    UA_StatusCode retval;
-    retval = UA_Variant_setArrayCopy(&value->value, server->namespaces,
-                                     server->namespacesSize, &UA_TYPES[UA_TYPES_STRING]);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    value->hasValue = true;
-    if(includeSourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = UA_DateTime_now();
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-writeNamespaces(UA_Server *server, const UA_NodeId *sessionId, void *sessionContext,
-                const UA_NodeId *nodeid, void *nodeContext, const UA_NumericRange *range,
-                const UA_DataValue *value) {
-    /* Check the data type */
-    if(!value->hasValue ||
-       value->value.type != &UA_TYPES[UA_TYPES_STRING])
-        return UA_STATUSCODE_BADTYPEMISMATCH;
-
-    /* Check that the variant is not empty */
-    if(!value->value.data)
-        return UA_STATUSCODE_BADTYPEMISMATCH;
-
-    /* TODO: Writing with a range is not implemented */
-    if(range)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_String *newNamespaces = (UA_String*)value->value.data;
-    size_t newNamespacesSize = value->value.arrayLength;
-
-    /* Test if we append to the existing namespaces */
-    if(newNamespacesSize <= server->namespacesSize)
-        return UA_STATUSCODE_BADTYPEMISMATCH;
-
-    /* ensure that the uri for ns1 is set up from the app description */
-    setupNs1Uri(server);
-    
-    /* Test if the existing namespaces are unchanged */
-    for(size_t i = 0; i < server->namespacesSize; ++i) {
-        if(!UA_String_equal(&server->namespaces[i], &newNamespaces[i]))
-            return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    /* Add namespaces */
-    for(size_t i = server->namespacesSize; i < newNamespacesSize; ++i)
-        addNamespace(server, newNamespaces[i]);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-readCurrentTime(UA_Server *server, const UA_NodeId *sessionId, void *sessionContext,
-                const UA_NodeId *nodeid, void *nodeContext, UA_Boolean sourceTimeStamp,
-                const UA_NumericRange *range, UA_DataValue *value) {
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-    UA_DateTime currentTime = UA_DateTime_now();
-    UA_StatusCode retval = UA_Variant_setScalarCopy(&value->value, &currentTime,
-                                                    &UA_TYPES[UA_TYPES_DATETIME]);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    value->hasValue = true;
-    if(sourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = currentTime;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-static UA_StatusCode
-readMinSamplingInterval(UA_Server *server, const UA_NodeId *sessionId, void *sessionContext,
-               const UA_NodeId *nodeid, void *nodeContext, UA_Boolean includeSourceTimeStamp,
-               const UA_NumericRange *range,
-               UA_DataValue *value) {
-    if(range) {
-        value->hasStatus = true;
-        value->status = UA_STATUSCODE_BADINDEXRANGEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    UA_StatusCode retval;
-    retval = UA_Variant_setScalarCopy(&value->value,
-                                      &server->config.samplingIntervalLimits.min,
-                                      &UA_TYPES[UA_TYPES_DURATION]);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    value->hasValue = true;
-    if(includeSourceTimeStamp) {
-        value->hasSourceTimestamp = true;
-        value->sourceTimestamp = UA_DateTime_now();
-    }
-    return UA_STATUSCODE_GOOD;
-}
-#endif
-
-#if defined(UA_GENERATED_NAMESPACE_ZERO) && defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS)
-static UA_StatusCode
-readMonitoredItems(UA_Server *server, const UA_NodeId *sessionId, void *sessionContext,
-                   const UA_NodeId *methodId, void *methodContext, const UA_NodeId *objectId,
-                   void *objectContext, size_t inputSize,
-                   const UA_Variant *input, size_t outputSize,
-                   UA_Variant *output) {
-    UA_Session *session = UA_SessionManager_getSessionById(&server->sessionManager, sessionId);
-    if(!session)
-        return UA_STATUSCODE_BADINTERNALERROR;
-    if (inputSize == 0 || !input[0].data)
-        return UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
-    UA_UInt32 subscriptionId = *((UA_UInt32*)(input[0].data));
-    UA_Subscription* subscription = UA_Session_getSubscriptionById(session, subscriptionId);
-    if(!subscription)
-    {
-        if(LIST_EMPTY(&session->serverSubscriptions))
-        {
-          UA_Variant_setArray(&output[0], UA_Array_new(0, &UA_TYPES[UA_TYPES_UINT32]), 
-                              0, &UA_TYPES[UA_TYPES_UINT32]);
-          UA_Variant_setArray(&output[1], UA_Array_new(0, &UA_TYPES[UA_TYPES_UINT32]), 
-                              0, &UA_TYPES[UA_TYPES_UINT32]);
-
-          return UA_STATUSCODE_BADNOMATCH;
-        }
-        
-        return UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
-    }
-
-    UA_UInt32 sizeOfOutput = 0;
-    UA_MonitoredItem* monitoredItem;
-    LIST_FOREACH(monitoredItem, &subscription->monitoredItems, listEntry) {
-        ++sizeOfOutput;
-    }
-    if(sizeOfOutput==0)
-        return UA_STATUSCODE_GOOD;
-
-    UA_UInt32* clientHandles = (UA_UInt32 *)UA_Array_new(sizeOfOutput, &UA_TYPES[UA_TYPES_UINT32]);
-    UA_UInt32* serverHandles = (UA_UInt32 *)UA_Array_new(sizeOfOutput, &UA_TYPES[UA_TYPES_UINT32]);
-    UA_UInt32 i = 0;
-    LIST_FOREACH(monitoredItem, &subscription->monitoredItems, listEntry) {
-        clientHandles[i] = monitoredItem->clientHandle;
-        serverHandles[i] = monitoredItem->monitoredItemId;
-        ++i;
-    }
-    UA_Variant_setArray(&output[0], serverHandles, sizeOfOutput, &UA_TYPES[UA_TYPES_UINT32]);
-    UA_Variant_setArray(&output[1], clientHandles, sizeOfOutput, &UA_TYPES[UA_TYPES_UINT32]);
-    return UA_STATUSCODE_GOOD;
-}
-#endif /* defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) */
-
-UA_StatusCode
-writeNs0VariableArray(UA_Server *server, UA_UInt32 id, void *v,
-                      size_t length, const UA_DataType *type) {
-    UA_Variant var;
-    UA_Variant_init(&var);
-    UA_Variant_setArray(&var, v, length, type);
-    return UA_Server_writeValue(server, UA_NODEID_NUMERIC(0, id), var);
-}
-
-#ifndef UA_GENERATED_NAMESPACE_ZERO
-static UA_StatusCode
-addVariableNode(UA_Server *server, char* name, UA_UInt32 variableid,
-                UA_UInt32 parentid, UA_UInt32 referenceid,
-                UA_Int32 valueRank, UA_UInt32 dataType) {
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    attr.displayName = UA_LOCALIZEDTEXT("", name);
-    attr.dataType = UA_NODEID_NUMERIC(0, dataType);
-    attr.valueRank = valueRank;
-    attr.accessLevel = UA_ACCESSLEVELMASK_READ;
-    return UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(0, variableid),
-                                     UA_NODEID_NUMERIC(0, parentid), UA_NODEID_NUMERIC(0, referenceid),
-                                     UA_QUALIFIEDNAME(0, name),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                     attr, NULL, NULL);
-}
-
-/* A minimal server object that is not complete and does not use the mandated
- * references to a server type. To be used on very constrained devices. */
-static UA_StatusCode
-UA_Server_minimalServerObject(UA_Server *server) {
-    /* Server */
-    UA_StatusCode retval = addObjectNode(server, "Server", UA_NS0ID_SERVER, UA_NS0ID_OBJECTSFOLDER,
-                                         UA_NS0ID_ORGANIZES, UA_NS0ID_BASEOBJECTTYPE);
-
-    /* Use a valuerank of -2 for now. The array is added later on and the valuerank set to 1. */
-    retval |= addVariableNode(server, "ServerArray", UA_NS0ID_SERVER_SERVERARRAY,
-                              UA_NS0ID_SERVER, UA_NS0ID_HASPROPERTY,
-                              UA_VALUERANK_ANY, UA_NS0ID_BASEDATATYPE);
-    retval |= addVariableNode(server, "NamespaceArray", UA_NS0ID_SERVER_NAMESPACEARRAY,
-                              UA_NS0ID_SERVER, UA_NS0ID_HASPROPERTY,
-                              UA_VALUERANK_ANY, UA_NS0ID_BASEDATATYPE);
-
-    retval |= addVariableNode(server, "ServerStatus", UA_NS0ID_SERVER_SERVERSTATUS,
-                              UA_NS0ID_SERVER, UA_NS0ID_HASCOMPONENT,
-                              UA_VALUERANK_SCALAR, UA_NS0ID_BASEDATATYPE);
-
-    retval |= addVariableNode(server, "CurrentTime", UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME,
-                              UA_NS0ID_SERVER_SERVERSTATUS, UA_NS0ID_HASCOMPONENT,
-                              UA_VALUERANK_SCALAR, UA_NS0ID_BASEDATATYPE);
-
-    retval |= addVariableNode(server, "State", UA_NS0ID_SERVER_SERVERSTATUS_STATE,
-                              UA_NS0ID_SERVER_SERVERSTATUS, UA_NS0ID_HASCOMPONENT,
-                              UA_VALUERANK_SCALAR, UA_NS0ID_BASEDATATYPE);
-
-    retval |= addVariableNode(server, "BuildInfo", UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO,
-                              UA_NS0ID_SERVER_SERVERSTATUS, UA_NS0ID_HASCOMPONENT,
-                              UA_VALUERANK_SCALAR, UA_NS0ID_BASEDATATYPE);
-
-    retval |= addVariableNode(server, "ProductUri", UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTURI,
-                              UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO, UA_NS0ID_HASCOMPONENT,
-                              UA_VALUERANK_SCALAR, UA_NS0ID_BASEDATATYPE);
-
-    retval |= addVariableNode(server, "ManufacturerName",
-                              UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_MANUFACTURERNAME,
-                              UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO, UA_NS0ID_HASCOMPONENT,
-                              UA_VALUERANK_SCALAR, UA_NS0ID_BASEDATATYPE);
-
-    retval |= addVariableNode(server, "ProductName",
-                              UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTNAME,
-                              UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO, UA_NS0ID_HASCOMPONENT,
-                              UA_VALUERANK_SCALAR, UA_NS0ID_BASEDATATYPE);
-
-    retval |= addVariableNode(server, "SoftwareVersion",
-                              UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_SOFTWAREVERSION,
-                              UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO, UA_NS0ID_HASCOMPONENT,
-                              UA_VALUERANK_SCALAR, UA_NS0ID_BASEDATATYPE);
-
-    retval |= addVariableNode(server, "BuildNumber",
-                              UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDNUMBER,
-                              UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO, UA_NS0ID_HASCOMPONENT,
-                              UA_VALUERANK_SCALAR, UA_NS0ID_BASEDATATYPE);
-
-    retval |= addVariableNode(server, "BuildDate",
-                              UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDDATE,
-                              UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO, UA_NS0ID_HASCOMPONENT,
-                              UA_VALUERANK_SCALAR, UA_NS0ID_BASEDATATYPE);
-
-    return retval;
-}
-
-#else
-
-static UA_StatusCode
-writeNs0Variable(UA_Server *server, UA_UInt32 id, void *v, const UA_DataType *type) {
-    UA_Variant var;
-    UA_Variant_init(&var);
-    UA_Variant_setScalar(&var, v, type);
-    return UA_Server_writeValue(server, UA_NODEID_NUMERIC(0, id), var);
-}
-
-static void
-addModellingRules(UA_Server *server) {
-    /* Test if the ModellingRules folder was added. (Only for the full ns0.) */
-    UA_NodeClass mrnc = UA_NODECLASS_UNSPECIFIED;
-    UA_StatusCode retval = UA_Server_readNodeClass(server,
-                                                   UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES),
-                                                   &mrnc);
-    if(retval != UA_STATUSCODE_GOOD)
-        return;
-
-    /* Add ExposesItsArray */
-    UA_Server_addReference(server,
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES),
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                           UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_EXPOSESITSARRAY),
-                           true);
-
-    /* Add Mandatory */
-    UA_Server_addReference(server,
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES),
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                           UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORY),
-                           true);
-
-
-    /* Add MandatoryPlaceholder */
-    UA_Server_addReference(server,
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES),
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                           UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORYPLACEHOLDER),
-                           true);
-
-    /* Add Optional */
-    UA_Server_addReference(server,
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES),
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                           UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_OPTIONAL),
-                           true);
-
-    /* Add OptionalPlaceholder */
-    UA_Server_addReference(server,
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES),
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                           UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_OPTIONALPLACEHOLDER),
-                           true);
-}
-
-#endif
-
-/* Initialize the nodeset 0 by using the generated code of the nodeset compiler.
- * This also initialized the data sources for various variables, such as for
- * example server time. */
-UA_StatusCode
-UA_Server_initNS0(UA_Server *server) {
-
-    /* Initialize base nodes which are always required an cannot be created
-     * through the NS compiler */
-    server->bootstrapNS0 = true;
-    UA_StatusCode retVal = UA_Server_createNS0_base(server);
-    server->bootstrapNS0 = false;
-    if(retVal != UA_STATUSCODE_GOOD)
-        return retVal;
-
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-    /* Load nodes and references generated from the XML ns0 definition */
-    retVal = namespace0_generated(server);
-#else
-    /* Create a minimal server object */
-    retVal = UA_Server_minimalServerObject(server);
-#endif
-
-    if(retVal != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "Initialization of Namespace 0 (before bootstrapping) "
-                     "failed with %s. See previous outputs for any error messages.",
-                     UA_StatusCode_name(retVal));
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    /* NamespaceArray */
-    UA_DataSource namespaceDataSource = {readNamespaces, writeNamespaces};
-    retVal |= UA_Server_setVariableNode_dataSource(server,
-                                                   UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_NAMESPACEARRAY),
-                                                   namespaceDataSource);
-    retVal |= UA_Server_writeValueRank(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_NAMESPACEARRAY), 1);
-
-    /* ServerArray */
-    retVal |= writeNs0VariableArray(server, UA_NS0ID_SERVER_SERVERARRAY,
-                                    &server->config.applicationDescription.applicationUri,
-                                    1, &UA_TYPES[UA_TYPES_STRING]);
-    retVal |= UA_Server_writeValueRank(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERARRAY), 1);
-
-    /* ServerStatus */
-    UA_DataSource serverStatus = {readStatus, NULL};
-    retVal |= UA_Server_setVariableNode_dataSource(server,
-                        UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS), serverStatus);
-
-    /* StartTime will be sampled in UA_Server_run_startup()*/
-
-    /* CurrentTime */
-    UA_DataSource currentTime = {readCurrentTime, NULL};
-    retVal |= UA_Server_setVariableNode_dataSource(server,
-                 UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME), currentTime);
-
-    /* State */
-    retVal |= UA_Server_setVariableNode_dataSource(server,
-                 UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE),
-                                                   serverStatus);
-
-    /* BuildInfo */
-    retVal |= UA_Server_setVariableNode_dataSource(server,
-                 UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO), serverStatus);
-
-    /* BuildInfo - ProductUri */
-    retVal |= UA_Server_setVariableNode_dataSource(server,
-                 UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTURI),
-                                                   serverStatus);
-
-    /* BuildInfo - ManufacturerName */
-    retVal |= UA_Server_setVariableNode_dataSource(server,
-                 UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_MANUFACTURERNAME),
-                                                   serverStatus);
-
-    /* BuildInfo - ProductName */
-    retVal |= UA_Server_setVariableNode_dataSource(server,
-                 UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTNAME),
-                                                   serverStatus);
-
-    /* BuildInfo - SoftwareVersion */
-    retVal |= UA_Server_setVariableNode_dataSource(server,
-                 UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_SOFTWAREVERSION),
-                                                   serverStatus);
-
-    /* BuildInfo - BuildNumber */
-    retVal |= UA_Server_setVariableNode_dataSource(server,
-                 UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDNUMBER),
-                                                   serverStatus);
-
-    /* BuildInfo - BuildDate */
-    retVal |= UA_Server_setVariableNode_dataSource(server,
-                 UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDDATE),
-                                                   serverStatus);
-
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-
-    /* SecondsTillShutdown */
-    retVal |= UA_Server_setVariableNode_dataSource(server,
-                 UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_SECONDSTILLSHUTDOWN),
-                                                   serverStatus);
-
-    /* ShutDownReason */
-    UA_LocalizedText shutdownReason;
-    UA_LocalizedText_init(&shutdownReason);
-    retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERSTATUS_SHUTDOWNREASON,
-                               &shutdownReason, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-
-    /* ServiceLevel */
-    UA_DataSource serviceLevel = {readServiceLevel, NULL};
-    retVal |= UA_Server_setVariableNode_dataSource(server,
-                        UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVICELEVEL), serviceLevel);
-
-    /* ServerDiagnostics - ServerDiagnosticsSummary */
-    UA_ServerDiagnosticsSummaryDataType serverDiagnosticsSummary;
-    UA_ServerDiagnosticsSummaryDataType_init(&serverDiagnosticsSummary);
-    retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERDIAGNOSTICS_SERVERDIAGNOSTICSSUMMARY,
-                               &serverDiagnosticsSummary,
-                               &UA_TYPES[UA_TYPES_SERVERDIAGNOSTICSSUMMARYDATATYPE]);
-
-    /* ServerDiagnostics - EnabledFlag */
-    UA_Boolean enabledFlag = false;
-    retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERDIAGNOSTICS_ENABLEDFLAG,
-                               &enabledFlag, &UA_TYPES[UA_TYPES_BOOLEAN]);
-
-    /* According to Specification part-5 - pg.no-11(PDF pg.no-29), when the ServerDiagnostics is disabled the client
-     * may modify the value of enabledFlag=true in the server. By default, this node have CurrentRead/Write access.
-     * In CTT, Subscription_Minimum_1/002.js test will modify the above flag. This will not be a problem when build
-     * configuration is set at UA_NAMESPACE_ZERO="REDUCED" as NodeIds will not be present. When UA_NAMESPACE_ZERO="FULL",
-     * the test will fail. Hence made the NodeId as read only */
-    retVal |= UA_Server_writeAccessLevel(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERDIAGNOSTICS_ENABLEDFLAG),
-                                         UA_ACCESSLEVELMASK_READ);
-
-    /* Auditing */
-    UA_DataSource auditing = {readAuditing, NULL};
-    retVal |= UA_Server_setVariableNode_dataSource(server,
-                        UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_AUDITING), auditing);
-
-    /* Redundancy Support */
-    UA_RedundancySupport redundancySupport = UA_REDUNDANCYSUPPORT_NONE;
-    retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERREDUNDANCY_REDUNDANCYSUPPORT,
-                               &redundancySupport, &UA_TYPES[UA_TYPES_REDUNDANCYSUPPORT]);
-
-    /* Remove unused subtypes of ServerRedundancy */
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERREDUNDANCY_CURRENTSERVERID), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERREDUNDANCY_REDUNDANTSERVERARRAY), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERREDUNDANCY_SERVERURIARRAY), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERREDUNDANCY_SERVERNETWORKGROUPS), true);
-
-    /* ServerCapabilities - LocaleIdArray */
-    UA_LocaleId locale_en = UA_STRING("en");
-    retVal |= writeNs0VariableArray(server, UA_NS0ID_SERVER_SERVERCAPABILITIES_LOCALEIDARRAY,
-                                    &locale_en, 1, &UA_TYPES[UA_TYPES_LOCALEID]);
-
-    /* ServerCapabilities - MaxBrowseContinuationPoints */
-    UA_UInt16 maxBrowseContinuationPoints = UA_MAXCONTINUATIONPOINTS;
-    retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXBROWSECONTINUATIONPOINTS,
-                               &maxBrowseContinuationPoints, &UA_TYPES[UA_TYPES_UINT16]);
-
-    /* ServerProfileArray */
-    UA_String profileArray[3];
-    UA_UInt16 profileArraySize = 0;
-#define ADDPROFILEARRAY(x) profileArray[profileArraySize++] = UA_STRING(x)
-    ADDPROFILEARRAY("http://opcfoundation.org/UA-Profile/Server/MicroEmbeddedDevice");
-#ifdef UA_ENABLE_NODEMANAGEMENT
-    ADDPROFILEARRAY("http://opcfoundation.org/UA-Profile/Server/NodeManagement");
-#endif
-#ifdef UA_ENABLE_METHODCALLS
-    ADDPROFILEARRAY("http://opcfoundation.org/UA-Profile/Server/Methods");
-#endif
-    retVal |= writeNs0VariableArray(server, UA_NS0ID_SERVER_SERVERCAPABILITIES_SERVERPROFILEARRAY,
-                                    profileArray, profileArraySize, &UA_TYPES[UA_TYPES_STRING]);
-
-    /* ServerCapabilities - MaxQueryContinuationPoints */
-    UA_UInt16 maxQueryContinuationPoints = 0;
-    retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXQUERYCONTINUATIONPOINTS,
-                               &maxQueryContinuationPoints, &UA_TYPES[UA_TYPES_UINT16]);
-
-    /* ServerCapabilities - MaxHistoryContinuationPoints */
-    UA_UInt16 maxHistoryContinuationPoints = 0;
-    retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXHISTORYCONTINUATIONPOINTS,
-                               &maxHistoryContinuationPoints, &UA_TYPES[UA_TYPES_UINT16]);
-
-    /* ServerCapabilities - MinSupportedSampleRate */
-    UA_DataSource samplingInterval = {readMinSamplingInterval, NULL};
-    retVal |= UA_Server_setVariableNode_dataSource(server,
-                 UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_MINSUPPORTEDSAMPLERATE),
-                                                   samplingInterval);
-
-    /* ServerCapabilities - OperationLimits - MaxNodesPerRead */
-    retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERCAPABILITIES_OPERATIONLIMITS_MAXNODESPERREAD,
-                               &server->config.maxNodesPerRead, &UA_TYPES[UA_TYPES_UINT32]);
-
-    /* ServerCapabilities - OperationLimits - maxNodesPerWrite */
-    retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERCAPABILITIES_OPERATIONLIMITS_MAXNODESPERWRITE,
-                               &server->config.maxNodesPerWrite, &UA_TYPES[UA_TYPES_UINT32]);
-
-    /* ServerCapabilities - OperationLimits - MaxNodesPerMethodCall */
-    retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERCAPABILITIES_OPERATIONLIMITS_MAXNODESPERMETHODCALL,
-                               &server->config.maxNodesPerMethodCall, &UA_TYPES[UA_TYPES_UINT32]);
-
-    /* ServerCapabilities - OperationLimits - MaxNodesPerBrowse */
-    retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERCAPABILITIES_OPERATIONLIMITS_MAXNODESPERBROWSE,
-                               &server->config.maxNodesPerBrowse, &UA_TYPES[UA_TYPES_UINT32]);
-
-    /* ServerCapabilities - OperationLimits - MaxNodesPerRegisterNodes */
-    retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERCAPABILITIES_OPERATIONLIMITS_MAXNODESPERREGISTERNODES,
-                               &server->config.maxNodesPerRegisterNodes, &UA_TYPES[UA_TYPES_UINT32]);
-
-    /* ServerCapabilities - OperationLimits - MaxNodesPerTranslateBrowsePathsToNodeIds */
-    retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERCAPABILITIES_OPERATIONLIMITS_MAXNODESPERTRANSLATEBROWSEPATHSTONODEIDS,
-                               &server->config.maxNodesPerTranslateBrowsePathsToNodeIds, &UA_TYPES[UA_TYPES_UINT32]);
-
-    /* ServerCapabilities - OperationLimits - MaxNodesPerNodeManagement */
-    retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERCAPABILITIES_OPERATIONLIMITS_MAXNODESPERNODEMANAGEMENT,
-                               &server->config.maxNodesPerNodeManagement, &UA_TYPES[UA_TYPES_UINT32]);
-
-    /* ServerCapabilities - OperationLimits - MaxMonitoredItemsPerCall */
-    retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERCAPABILITIES_OPERATIONLIMITS_MAXMONITOREDITEMSPERCALL,
-                               &server->config.maxMonitoredItemsPerCall, &UA_TYPES[UA_TYPES_UINT32]);
-
-#ifdef UA_ENABLE_MICRO_EMB_DEV_PROFILE
-    /* Remove unused operation limit components */
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_OPERATIONLIMITS_MAXNODESPERHISTORYREADDATA), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_OPERATIONLIMITS_MAXNODESPERHISTORYREADEVENTS), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_OPERATIONLIMITS_MAXNODESPERHISTORYUPDATEDATA), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_OPERATIONLIMITS_MAXNODESPERHISTORYUPDATEEVENTS), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_ROLESET), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXSTRINGLENGTH), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXARRAYLENGTH), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXBYTESTRINGLENGTH), true);
-
-    /* Remove not supported Server Instance */
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_DICTIONARIES), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_ESTIMATEDRETURNTIME), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_LOCALTIME), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_NAMESPACES), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_REQUESTSERVERSTATECHANGE), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_RESENDDATA), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVERCONFIGURATION), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SETSUBSCRIPTIONDURABLE), true);
-
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERDIAGNOSTICS_SAMPLINGINTERVALDIAGNOSTICSARRAY), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERDIAGNOSTICS_SESSIONSDIAGNOSTICSSUMMARY), true);
-
-    /* Removing these NodeIds make Server Object to be non-complaint with UA 1.03  in CTT (Base Inforamtion/Base Info Core Structure/ 001.js)
-     * In the 1.04 specification this has been resolved by allowing to remove these static nodes as well */
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERDIAGNOSTICS_SERVERDIAGNOSTICSSUMMARY), true);
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERDIAGNOSTICS_SUBSCRIPTIONDIAGNOSTICSARRAY), true);
-#endif
-
-#ifndef UA_ENABLE_HISTORIZING
-    UA_Server_deleteNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_HISTORYSERVERCAPABILITIES), true);
-#else
-    /* ServerCapabilities - HistoryServerCapabilities - AccessHistoryDataCapability */
-    retVal |= writeNs0Variable(server, UA_NS0ID_HISTORYSERVERCAPABILITIES_ACCESSHISTORYDATACAPABILITY,
-                               &server->config.accessHistoryDataCapability, &UA_TYPES[UA_TYPES_BOOLEAN]);
-
-    /* ServerCapabilities - HistoryServerCapabilities - MaxReturnDataValues */
-    retVal |= writeNs0Variable(server, UA_NS0ID_HISTORYSERVERCAPABILITIES_MAXRETURNDATAVALUES,
-                               &server->config.maxReturnDataValues, &UA_TYPES[UA_TYPES_UINT32]);
-
-    /* ServerCapabilities - HistoryServerCapabilities - AccessHistoryEventsCapability */
-    retVal |= writeNs0Variable(server, UA_NS0ID_HISTORYSERVERCAPABILITIES_ACCESSHISTORYEVENTSCAPABILITY,
-                               &server->config.accessHistoryEventsCapability, &UA_TYPES[UA_TYPES_BOOLEAN]);
-
-    /* ServerCapabilities - HistoryServerCapabilities - MaxReturnEventValues */
-    retVal |= writeNs0Variable(server, UA_NS0ID_HISTORYSERVERCAPABILITIES_MAXRETURNEVENTVALUES,
-                               &server->config.maxReturnEventValues, &UA_TYPES[UA_TYPES_UINT32]);
-
-    /* ServerCapabilities - HistoryServerCapabilities - InsertDataCapability */
-    retVal |= writeNs0Variable(server, UA_NS0ID_HISTORYSERVERCAPABILITIES_INSERTDATACAPABILITY,
-                               &server->config.insertDataCapability, &UA_TYPES[UA_TYPES_BOOLEAN]);
-
-    /* ServerCapabilities - HistoryServerCapabilities - InsertEventCapability */
-    retVal |= writeNs0Variable(server, UA_NS0ID_HISTORYSERVERCAPABILITIES_INSERTEVENTCAPABILITY,
-                               &server->config.insertEventCapability, &UA_TYPES[UA_TYPES_BOOLEAN]);
-
-    /* ServerCapabilities - HistoryServerCapabilities - InsertAnnotationsCapability */
-    retVal |= writeNs0Variable(server, UA_NS0ID_HISTORYSERVERCAPABILITIES_INSERTANNOTATIONCAPABILITY,
-                               &server->config.insertAnnotationsCapability, &UA_TYPES[UA_TYPES_BOOLEAN]);
-
-    /* ServerCapabilities - HistoryServerCapabilities - ReplaceDataCapability */
-    retVal |= writeNs0Variable(server, UA_NS0ID_HISTORYSERVERCAPABILITIES_REPLACEDATACAPABILITY,
-                               &server->config.replaceDataCapability, &UA_TYPES[UA_TYPES_BOOLEAN]);
-
-    /* ServerCapabilities - HistoryServerCapabilities - ReplaceEventCapability */
-    retVal |= writeNs0Variable(server, UA_NS0ID_HISTORYSERVERCAPABILITIES_REPLACEEVENTCAPABILITY,
-                               &server->config.replaceEventCapability, &UA_TYPES[UA_TYPES_BOOLEAN]);
-
-    /* ServerCapabilities - HistoryServerCapabilities - UpdateDataCapability */
-    retVal |= writeNs0Variable(server, UA_NS0ID_HISTORYSERVERCAPABILITIES_UPDATEDATACAPABILITY,
-                               &server->config.updateDataCapability, &UA_TYPES[UA_TYPES_BOOLEAN]);
-
-    /* ServerCapabilities - HistoryServerCapabilities - UpdateEventCapability */
-    retVal |= writeNs0Variable(server, UA_NS0ID_HISTORYSERVERCAPABILITIES_UPDATEEVENTCAPABILITY,
-                               &server->config.updateEventCapability, &UA_TYPES[UA_TYPES_BOOLEAN]);
-
-    /* ServerCapabilities - HistoryServerCapabilities - DeleteRawCapability */
-    retVal |= writeNs0Variable(server, UA_NS0ID_HISTORYSERVERCAPABILITIES_DELETERAWCAPABILITY,
-                               &server->config.deleteRawCapability, &UA_TYPES[UA_TYPES_BOOLEAN]);
-
-    /* ServerCapabilities - HistoryServerCapabilities - DeleteEventCapability */
-    retVal |= writeNs0Variable(server, UA_NS0ID_HISTORYSERVERCAPABILITIES_DELETEEVENTCAPABILITY,
-                               &server->config.deleteEventCapability, &UA_TYPES[UA_TYPES_BOOLEAN]);
-
-    /* ServerCapabilities - HistoryServerCapabilities - DeleteAtTimeDataCapability */
-    retVal |= writeNs0Variable(server, UA_NS0ID_HISTORYSERVERCAPABILITIES_DELETEATTIMECAPABILITY,
-                               &server->config.deleteAtTimeDataCapability, &UA_TYPES[UA_TYPES_BOOLEAN]);
-#endif
-
-#if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS)
-    retVal |= UA_Server_setMethodNode_callback(server,
-                        UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_GETMONITOREDITEMS), readMonitoredItems);
-#endif
-
-    /* The HasComponent references to the ModellingRules are not part of the
-     * Nodeset2.xml. So we add the references manually. */
-    addModellingRules(server);
-
-#endif /* UA_GENERATED_NAMESPACE_ZERO */
-
-    /* create the OverFlowEventType
-     * The EventQueueOverflowEventType is defined as abstract, therefore we can not create an instance of that type
-     * directly, but need to create a subtype. This is already posted on the OPC Foundation bug tracker under the
-     * following link for clarification: https://opcfoundation-onlineapplications.org/mantis/view.php?id=4206 */
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-    UA_ObjectTypeAttributes overflowAttr = UA_ObjectTypeAttributes_default;
-    overflowAttr.description = UA_LOCALIZEDTEXT("en-US", "A simple event for indicating a queue overflow.");
-    overflowAttr.displayName = UA_LOCALIZEDTEXT("en-US", "SimpleOverflowEventType");
-    retVal |= UA_Server_addObjectTypeNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SIMPLEOVERFLOWEVENTTYPE),
-                                          UA_NODEID_NUMERIC(0, UA_NS0ID_EVENTQUEUEOVERFLOWEVENTTYPE),
-                                          UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                          UA_QUALIFIEDNAME(0, "SimpleOverflowEventType"),
-                                          overflowAttr, NULL, NULL);
-#endif
-
-    if(retVal != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "Initialization of Namespace 0 (after bootstrapping) "
-                     "failed with %s. See previous outputs for any error messages.",
-                     UA_StatusCode_name(retVal));
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    return UA_STATUSCODE_GOOD;
-}
diff --git a/ext/open62541/src/server/ua_server_utils.c b/ext/open62541/src/server/ua_server_utils.c
deleted file mode 100644
index 4706ede..0000000
--- a/ext/open62541/src/server/ua_server_utils.c
+++ /dev/null
@@ -1,384 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2016-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2016 (c) Lorenz Haas
- *    Copyright 2017 (c) frax2222
- *    Copyright 2017 (c) Florian Palm
- *    Copyright 2017-2018 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Julian Grothoff
- */
-
-#include "ua_server_internal.h"
-
-#define UA_MAX_TREE_RECURSE 50 /* How deep up/down the tree do we recurse at most? */
-
-/********************************/
-/* Information Model Operations */
-/********************************/
-
-/* Keeps track of already visited nodes to detect circular references */
-struct ref_history {
-    struct ref_history *parent; /* the previous element */
-    const UA_NodeId *id; /* the id of the node at this depth */
-    UA_UInt16 depth;
-};
-
-static UA_Boolean
-isNodeInTreeNoCircular(void *nsCtx, const UA_NodeId *leafNode, const UA_NodeId *nodeToFind,
-                       struct ref_history *visitedRefs, const UA_NodeId *referenceTypeIds,
-                       size_t referenceTypeIdsSize) {
-    if(UA_NodeId_equal(nodeToFind, leafNode))
-        return true;
-
-    if(visitedRefs->depth >= UA_MAX_TREE_RECURSE)
-        return false;
-
-    const UA_Node *node = UA_Nodestore_getNode(nsCtx, leafNode);
-    if(!node)
-        return false;
-
-    for(size_t i = 0; i < node->referencesSize; ++i) {
-        UA_NodeReferenceKind *refs = &node->references[i];
-        /* Search upwards in the tree */
-        if(!refs->isInverse)
-            continue;
-
-        /* Consider only the indicated reference types */
-        UA_Boolean match = false;
-        for(size_t j = 0; j < referenceTypeIdsSize; ++j) {
-            if(UA_NodeId_equal(&refs->referenceTypeId, &referenceTypeIds[j])) {
-                match = true;
-                break;
-            }
-        }
-        if(!match)
-            continue;
-
-        /* Match the targets or recurse */
-        for(size_t j = 0; j < refs->targetIdsSize; ++j) {
-            /* Check if we already have seen the referenced node and skip to
-             * avoid endless recursion. Do this only at every 5th depth to save
-             * effort. Circular dependencies are rare and forbidden for most
-             * reference types. */
-            if(visitedRefs->depth % 5 == 4) {
-                struct ref_history *last = visitedRefs;
-                UA_Boolean skip = false;
-                while(!skip && last) {
-                    if(UA_NodeId_equal(last->id, &refs->targetIds[j].nodeId))
-                        skip = true;
-                    last = last->parent;
-                }
-                if(skip)
-                    continue;
-            }
-
-            /* Stack-allocate the visitedRefs structure for the next depth */
-            struct ref_history nextVisitedRefs = {visitedRefs, &refs->targetIds[j].nodeId,
-                                                  (UA_UInt16)(visitedRefs->depth+1)};
-
-            /* Recurse */
-            UA_Boolean foundRecursive =
-                isNodeInTreeNoCircular(nsCtx, &refs->targetIds[j].nodeId, nodeToFind, &nextVisitedRefs,
-                                       referenceTypeIds, referenceTypeIdsSize);
-            if(foundRecursive) {
-                UA_Nodestore_releaseNode(nsCtx, node);
-                return true;
-            }
-        }
-    }
-
-    UA_Nodestore_releaseNode(nsCtx, node);
-    return false;
-}
-
-UA_Boolean
-isNodeInTree(void *nsCtx, const UA_NodeId *leafNode, const UA_NodeId *nodeToFind,
-             const UA_NodeId *referenceTypeIds, size_t referenceTypeIdsSize) {
-    struct ref_history visitedRefs = {NULL, leafNode, 0};
-    return isNodeInTreeNoCircular(nsCtx, leafNode, nodeToFind, &visitedRefs,
-                                  referenceTypeIds, referenceTypeIdsSize);
-}
-
-const UA_Node *
-getNodeType(UA_Server *server, const UA_Node *node) {
-    /* The reference to the parent is different for variable and variabletype */
-    UA_NodeId parentRef;
-    UA_Boolean inverse;
-    UA_NodeClass typeNodeClass;
-    switch(node->nodeClass) {
-    case UA_NODECLASS_OBJECT:
-        parentRef = UA_NODEID_NUMERIC(0, UA_NS0ID_HASTYPEDEFINITION);
-        inverse = false;
-        typeNodeClass = UA_NODECLASS_OBJECTTYPE;
-        break;
-    case UA_NODECLASS_VARIABLE:
-        parentRef = UA_NODEID_NUMERIC(0, UA_NS0ID_HASTYPEDEFINITION);
-        inverse = false;
-        typeNodeClass = UA_NODECLASS_VARIABLETYPE;
-        break;
-    case UA_NODECLASS_OBJECTTYPE:
-    case UA_NODECLASS_VARIABLETYPE:
-    case UA_NODECLASS_REFERENCETYPE:
-    case UA_NODECLASS_DATATYPE:
-        parentRef = UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE);
-        inverse = true;
-        typeNodeClass = node->nodeClass;
-        break;
-    default:
-        return NULL;
-    }
-
-    /* Return the first matching candidate */
-    for(size_t i = 0; i < node->referencesSize; ++i) {
-        if(node->references[i].isInverse != inverse)
-            continue;
-        if(!UA_NodeId_equal(&node->references[i].referenceTypeId, &parentRef))
-            continue;
-        UA_assert(node->references[i].targetIdsSize > 0);
-        const UA_NodeId *targetId = &node->references[i].targetIds[0].nodeId;
-        const UA_Node *type = UA_Nodestore_getNode(server->nsCtx, targetId);
-        if(!type)
-            continue;
-        if(type->nodeClass == typeNodeClass)
-            return type;
-        UA_Nodestore_releaseNode(server->nsCtx, type);
-    }
-
-    return NULL;
-}
-
-UA_Boolean
-UA_Node_hasSubTypeOrInstances(const UA_Node *node) {
-    const UA_NodeId hasSubType = UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE);
-    const UA_NodeId hasTypeDefinition = UA_NODEID_NUMERIC(0, UA_NS0ID_HASTYPEDEFINITION);
-    for(size_t i = 0; i < node->referencesSize; ++i) {
-        if(node->references[i].isInverse == false &&
-           UA_NodeId_equal(&node->references[i].referenceTypeId, &hasSubType))
-            return true;
-        if(node->references[i].isInverse == true &&
-           UA_NodeId_equal(&node->references[i].referenceTypeId, &hasTypeDefinition))
-            return true;
-    }
-    return false;
-}
-
-static const UA_NodeId hasInterfaceNodeId =
-    {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_HASINTERFACE}};
-
-UA_StatusCode
-getParentTypeAndInterfaceHierarchy(UA_Server *server, const UA_NodeId *typeNode,
-                                   UA_NodeId **typeHierarchy, size_t *typeHierarchySize) {
-    UA_ExpandedNodeId *subTypes = NULL;
-    size_t subTypesSize = 0;
-    UA_StatusCode retval = browseRecursive(server, 1, typeNode, 1, &subtypeId,
-                                           UA_BROWSEDIRECTION_INVERSE, false,
-                                           &subTypesSize, &subTypes);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    UA_assert(subTypesSize < 1000);
-
-    UA_ExpandedNodeId *interfaces = NULL;
-    size_t interfacesSize = 0;
-    retval = browseRecursive(server, 1, typeNode, 1, &hasInterfaceNodeId,
-                             UA_BROWSEDIRECTION_FORWARD, false,
-                             &interfacesSize, &interfaces);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Array_delete(subTypes, subTypesSize, &UA_TYPES[UA_TYPES_NODEID]);
-        return retval;
-    }
-
-    UA_assert(interfacesSize < 1000);
-
-    UA_NodeId *hierarchy = (UA_NodeId*)
-        UA_malloc(sizeof(UA_NodeId) * (1 + subTypesSize + interfacesSize));
-    if(!hierarchy) {
-        UA_Array_delete(subTypes, subTypesSize, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-        UA_Array_delete(interfaces, interfacesSize, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-
-    retval = UA_NodeId_copy(typeNode, hierarchy);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_free(hierarchy);
-        UA_Array_delete(subTypes, subTypesSize, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-        UA_Array_delete(interfaces, interfacesSize, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-
-    for(size_t i = 0; i < subTypesSize; i++) {
-        hierarchy[i+1] = subTypes[i].nodeId;
-        UA_NodeId_init(&subTypes[i].nodeId);
-    }
-    for(size_t i = 0; i < interfacesSize; i++) {
-        hierarchy[i+1+subTypesSize] = interfaces[i].nodeId;
-        UA_NodeId_init(&interfaces[i].nodeId);
-    }
-
-    *typeHierarchy = hierarchy;
-    *typeHierarchySize = subTypesSize + interfacesSize + 1;
-
-    UA_assert(*typeHierarchySize < 1000);
-
-    UA_Array_delete(subTypes, subTypesSize, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-    UA_Array_delete(interfaces, interfacesSize, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-    return UA_STATUSCODE_GOOD;
-}
-
-/* For mulithreading: make a copy of the node, edit and replace.
- * For singlethreading: edit the original */
-UA_StatusCode
-UA_Server_editNode(UA_Server *server, UA_Session *session,
-                   const UA_NodeId *nodeId, UA_EditNodeCallback callback,
-                   void *data) {
-#ifndef UA_ENABLE_IMMUTABLE_NODES
-    /* Get the node and process it in-situ */
-    const UA_Node *node = UA_Nodestore_getNode(server->nsCtx, nodeId);
-    if(!node)
-        return UA_STATUSCODE_BADNODEIDUNKNOWN;
-    UA_StatusCode retval = callback(server, session, (UA_Node*)(uintptr_t)node, data);
-    UA_Nodestore_releaseNode(server->nsCtx, node);
-    return retval;
-#else
-    UA_StatusCode retval;
-    do {
-        /* Get an editable copy of the node */
-        UA_Node *node;
-        retval = UA_Nodestore_getNodeCopy(server->nsCtx, nodeId, &node);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-
-        /* Run the operation on the copy */
-        retval = callback(server, session, node, data);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_Nodestore_deleteNode(server->nsCtx, node);
-            return retval;
-        }
-
-        /* Replace the node */
-        retval = UA_Nodestore_replaceNode(server->nsCtx, node);
-    } while(retval != UA_STATUSCODE_GOOD);
-    return retval;
-#endif
-}
-
-UA_StatusCode
-UA_Server_processServiceOperations(UA_Server *server, UA_Session *session,
-                                   UA_ServiceOperation operationCallback,
-                                   const void *context, const size_t *requestOperations,
-                                   const UA_DataType *requestOperationsType,
-                                   size_t *responseOperations,
-                                   const UA_DataType *responseOperationsType) {
-    size_t ops = *requestOperations;
-    if(ops == 0)
-        return UA_STATUSCODE_BADNOTHINGTODO;
-
-    /* No padding after size_t */
-    void **respPos = (void**)((uintptr_t)responseOperations + sizeof(size_t));
-    *respPos = UA_Array_new(ops, responseOperationsType);
-    if(!(*respPos))
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    *responseOperations = ops;
-    uintptr_t respOp = (uintptr_t)*respPos;
-    /* No padding after size_t */
-    uintptr_t reqOp = *(uintptr_t*)((uintptr_t)requestOperations + sizeof(size_t));
-    for(size_t i = 0; i < ops; i++) {
-        operationCallback(server, session, context, (void*)reqOp, (void*)respOp);
-        reqOp += requestOperationsType->memSize;
-        respOp += responseOperationsType->memSize;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-/* A few global NodeId definitions */
-const UA_NodeId subtypeId = {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_HASSUBTYPE}};
-const UA_NodeId hierarchicalReferences = {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_HIERARCHICALREFERENCES}};
-
-/*********************************/
-/* Default attribute definitions */
-/*********************************/
-
-const UA_ObjectAttributes UA_ObjectAttributes_default = {
-    0,                      /* specifiedAttributes */
-    {{0, NULL}, {0, NULL}}, /* displayName */
-    {{0, NULL}, {0, NULL}}, /* description */
-    0, 0,                   /* writeMask (userWriteMask) */
-    0                       /* eventNotifier */
-};
-
-const UA_VariableAttributes UA_VariableAttributes_default = {
-    0,                           /* specifiedAttributes */
-    {{0, NULL}, {0, NULL}},      /* displayName */
-    {{0, NULL}, {0, NULL}},      /* description */
-    0, 0,                        /* writeMask (userWriteMask) */
-    {NULL, UA_VARIANT_DATA,
-     0, NULL, 0, NULL},          /* value */
-    {0, UA_NODEIDTYPE_NUMERIC,
-     {UA_NS0ID_BASEDATATYPE}},   /* dataType */
-    UA_VALUERANK_ANY,            /* valueRank */
-    0, NULL,                     /* arrayDimensions */
-    UA_ACCESSLEVELMASK_READ, 0,  /* accessLevel (userAccessLevel) */
-    0.0,                         /* minimumSamplingInterval */
-    false                        /* historizing */
-};
-
-const UA_MethodAttributes UA_MethodAttributes_default = {
-    0,                      /* specifiedAttributes */
-    {{0, NULL}, {0, NULL}}, /* displayName */
-    {{0, NULL}, {0, NULL}}, /* description */
-    0, 0,                   /* writeMask (userWriteMask) */
-    true, true              /* executable (userExecutable) */
-};
-
-const UA_ObjectTypeAttributes UA_ObjectTypeAttributes_default = {
-    0,                      /* specifiedAttributes */
-    {{0, NULL}, {0, NULL}}, /* displayName */
-    {{0, NULL}, {0, NULL}}, /* description */
-    0, 0,                   /* writeMask (userWriteMask) */
-    false                   /* isAbstract */
-};
-
-const UA_VariableTypeAttributes UA_VariableTypeAttributes_default = {
-    0,                           /* specifiedAttributes */
-    {{0, NULL}, {0, NULL}},      /* displayName */
-    {{0, NULL}, {0, NULL}},      /* description */
-    0, 0,                        /* writeMask (userWriteMask) */
-    {NULL, UA_VARIANT_DATA,
-     0, NULL, 0, NULL},          /* value */
-    {0, UA_NODEIDTYPE_NUMERIC,
-     {UA_NS0ID_BASEDATATYPE}},   /* dataType */
-    UA_VALUERANK_ANY,            /* valueRank */
-    0, NULL,                     /* arrayDimensions */
-    false                        /* isAbstract */
-};
-
-const UA_ReferenceTypeAttributes UA_ReferenceTypeAttributes_default = {
-    0,                      /* specifiedAttributes */
-    {{0, NULL}, {0, NULL}}, /* displayName */
-    {{0, NULL}, {0, NULL}}, /* description */
-    0, 0,                   /* writeMask (userWriteMask) */
-    false,                  /* isAbstract */
-    false,                  /* symmetric */
-    {{0, NULL}, {0, NULL}}  /* inverseName */
-};
-
-const UA_DataTypeAttributes UA_DataTypeAttributes_default = {
-    0,                      /* specifiedAttributes */
-    {{0, NULL}, {0, NULL}}, /* displayName */
-    {{0, NULL}, {0, NULL}}, /* description */
-    0, 0,                   /* writeMask (userWriteMask) */
-    false                   /* isAbstract */
-};
-
-const UA_ViewAttributes UA_ViewAttributes_default = {
-    0,                      /* specifiedAttributes */
-    {{0, NULL}, {0, NULL}}, /* displayName */
-    {{0, NULL}, {0, NULL}}, /* description */
-    0, 0,                   /* writeMask (userWriteMask) */
-    false,                  /* containsNoLoops */
-    0                       /* eventNotifier */
-};
-
diff --git a/ext/open62541/src/server/ua_services.h b/ext/open62541/src/server/ua_services.h
deleted file mode 100644
index aad45b3..0000000
--- a/ext/open62541/src/server/ua_services.h
+++ /dev/null
@@ -1,495 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014-2017 (c) Florian Palm
- *    Copyright 2015 (c) Sten Grüner
- *    Copyright 2014 (c) LEvertz
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015 (c) Christian Fimmers
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifndef UA_SERVICES_H_
-#define UA_SERVICES_H_
-
-#include <open62541/server.h>
-
-#include "ua_session.h"
-
-_UA_BEGIN_DECLS
-
-/**
- * .. _services:
- *
- * Services
- * ========
- *
- * In OPC UA, all communication is based on service calls, each consisting of a
- * request and a response message. These messages are defined as data structures
- * with a binary encoding and listed in :ref:`generated-types`. Since all
- * Services are pre-defined in the standard, they cannot be modified by the
- * user. But you can use the :ref:`Call <method-services>` service to invoke
- * user-defined methods on the server.
- *
- * The following service signatures are internal and *not visible to users*.
- * Still, we present them here for an overview of the capabilities of OPC UA.
- * Please refer to the :ref:`client` and :ref:`server` API where the services
- * are exposed to end users. Please see part 4 of the OPC UA standard for the
- * authoritative definition of the service and their behaviour.
- *
- * Most services take as input the server, the current session and pointers to
- * the request and response structures. Possible error codes are returned as
- * part of the response. */
-
-typedef void (*UA_Service)(UA_Server*, UA_Session*,
-                           const void *request, void *response);
-
-/**
- * Discovery Service Set
- * ---------------------
- * This Service Set defines Services used to discover the Endpoints implemented
- * by a Server and to read the security configuration for those Endpoints.
- *
- * FindServers Service
- * ^^^^^^^^^^^^^^^^^^^
- * Returns the Servers known to a Server or Discovery Server. The Client may
- * reduce the number of results returned by specifying filter criteria */
-void Service_FindServers(UA_Server *server, UA_Session *session,
-                         const UA_FindServersRequest *request,
-                         UA_FindServersResponse *response);
-
-/**
- * GetEndpoints Service
- * ^^^^^^^^^^^^^^^^^^^^
- * Returns the Endpoints supported by a Server and all of the configuration
- * information required to establish a SecureChannel and a Session. */
-void Service_GetEndpoints(UA_Server *server, UA_Session *session,
-                          const UA_GetEndpointsRequest *request,
-                          UA_GetEndpointsResponse *response);
-
-#ifdef UA_ENABLE_DISCOVERY
-
-# ifdef UA_ENABLE_DISCOVERY_MULTICAST
-
-/**
- * FindServersOnNetwork Service
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Returns the Servers known to a Discovery Server. Unlike FindServer,
- * this Service is only implemented by Discovery Servers. It additionally
- * returns servers which may have been detected through Multicast. */
-void Service_FindServersOnNetwork(UA_Server *server, UA_Session *session,
-                                  const UA_FindServersOnNetworkRequest *request,
-                                  UA_FindServersOnNetworkResponse *response);
-
-# endif /* UA_ENABLE_DISCOVERY_MULTICAST */
-
-/**
- * RegisterServer
- * ^^^^^^^^^^^^^^
- * Registers a remote server in the local discovery service. */
-void Service_RegisterServer(UA_Server *server, UA_Session *session,
-                            const UA_RegisterServerRequest *request,
-                            UA_RegisterServerResponse *response);
-
-/**
- * RegisterServer2
- * ^^^^^^^^^^^^^^^
- * This Service allows a Server to register its DiscoveryUrls and capabilities
- * with a Discovery Server. It extends the registration information from
- * RegisterServer with information necessary for FindServersOnNetwork. */
-void Service_RegisterServer2(UA_Server *server, UA_Session *session,
-                            const UA_RegisterServer2Request *request,
-                            UA_RegisterServer2Response *response);
-
-#endif /* UA_ENABLE_DISCOVERY */
-
-/**
- * SecureChannel Service Set
- * -------------------------
- * This Service Set defines Services used to open a communication channel that
- * ensures the confidentiality and Integrity of all Messages exchanged with the
- * Server.
- *
- * OpenSecureChannel Service
- * ^^^^^^^^^^^^^^^^^^^^^^^^^
- * Open or renew a SecureChannel that can be used to ensure Confidentiality and
- * Integrity for Message exchange during a Session. */
-void Service_OpenSecureChannel(UA_Server *server, UA_SecureChannel* channel,
-                               const UA_OpenSecureChannelRequest *request,
-                               UA_OpenSecureChannelResponse *response);
-
-/**
- * CloseSecureChannel Service
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Used to terminate a SecureChannel. */
-void Service_CloseSecureChannel(UA_Server *server, UA_SecureChannel *channel);
-
-/**
- * Session Service Set
- * -------------------
- * This Service Set defines Services for an application layer connection
- * establishment in the context of a Session.
- *
- * CreateSession Service
- * ^^^^^^^^^^^^^^^^^^^^^
- * Used by an OPC UA Client to create a Session and the Server returns two
- * values which uniquely identify the Session. The first value is the sessionId
- * which is used to identify the Session in the audit logs and in the Server's
- * address space. The second is the authenticationToken which is used to
- * associate an incoming request with a Session. */
-void Service_CreateSession(UA_Server *server, UA_SecureChannel *channel,
-                           const UA_CreateSessionRequest *request,
-                           UA_CreateSessionResponse *response);
-
-/**
- * ActivateSession
- * ^^^^^^^^^^^^^^^
- * Used by the Client to submit its SoftwareCertificates to the Server for
- * validation and to specify the identity of the user associated with the
- * Session. This Service request shall be issued by the Client before it issues
- * any other Service request after CreateSession. Failure to do so shall cause
- * the Server to close the Session. */
-void Service_ActivateSession(UA_Server *server, UA_SecureChannel *channel,
-                             UA_Session *session,
-                             const UA_ActivateSessionRequest *request,
-                             UA_ActivateSessionResponse *response);
-
-/**
- * CloseSession
- * ^^^^^^^^^^^^
- * Used to terminate a Session. */
-void Service_CloseSession(UA_Server *server, UA_Session *session,
-                          const UA_CloseSessionRequest *request,
-                          UA_CloseSessionResponse *response);
-
-/**
- * Cancel Service
- * ^^^^^^^^^^^^^^
- * Used to cancel outstanding Service requests. Successfully cancelled service
- * requests shall respond with Bad_RequestCancelledByClient. */
-/* Not Implemented */
-
-/**
- * NodeManagement Service Set
- * --------------------------
- * This Service Set defines Services to add and delete AddressSpace Nodes and
- * References between them. All added Nodes continue to exist in the
- * AddressSpace even if the Client that created them disconnects from the
- * Server.
- *
- * AddNodes Service
- * ^^^^^^^^^^^^^^^^
- * Used to add one or more Nodes into the AddressSpace hierarchy. */
-void Service_AddNodes(UA_Server *server, UA_Session *session,
-                      const UA_AddNodesRequest *request,
-                      UA_AddNodesResponse *response);
-
-/**
- * AddReferences Service
- * ^^^^^^^^^^^^^^^^^^^^^
- * Used to add one or more References to one or more Nodes. */
-void Service_AddReferences(UA_Server *server, UA_Session *session,
-                           const UA_AddReferencesRequest *request,
-                           UA_AddReferencesResponse *response);
-
-/**
- * DeleteNodes Service
- * ^^^^^^^^^^^^^^^^^^^
- * Used to delete one or more Nodes from the AddressSpace. */
-void Service_DeleteNodes(UA_Server *server, UA_Session *session,
-                         const UA_DeleteNodesRequest *request,
-                         UA_DeleteNodesResponse *response);
-
-/**
- * DeleteReferences
- * ^^^^^^^^^^^^^^^^
- * Used to delete one or more References of a Node. */
-void Service_DeleteReferences(UA_Server *server, UA_Session *session,
-                              const UA_DeleteReferencesRequest *request,
-                              UA_DeleteReferencesResponse *response);
-
-/**
- * .. _view-services:
- *
- * View Service Set
- * ----------------
- * Clients use the browse Services of the View Service Set to navigate through
- * the AddressSpace or through a View which is a subset of the AddressSpace.
- *
- * Browse Service
- * ^^^^^^^^^^^^^^
- * Used to discover the References of a specified Node. The browse can be
- * further limited by the use of a View. This Browse Service also supports a
- * primitive filtering capability. */
-void Service_Browse(UA_Server *server, UA_Session *session,
-                    const UA_BrowseRequest *request,
-                    UA_BrowseResponse *response);
-
-/**
- * BrowseNext Service
- * ^^^^^^^^^^^^^^^^^^
- * Used to request the next set of Browse or BrowseNext response information
- * that is too large to be sent in a single response. "Too large" in this
- * context means that the Server is not able to return a larger response or that
- * the number of results to return exceeds the maximum number of results to
- * return that was specified by the Client in the original Browse request. */
-void Service_BrowseNext(UA_Server *server, UA_Session *session,
-                        const UA_BrowseNextRequest *request,
-                        UA_BrowseNextResponse *response);
-
-/**
- * TranslateBrowsePathsToNodeIds Service
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Used to translate textual node paths to their respective ids. */
-void Service_TranslateBrowsePathsToNodeIds(UA_Server *server, UA_Session *session,
-             const UA_TranslateBrowsePathsToNodeIdsRequest *request,
-             UA_TranslateBrowsePathsToNodeIdsResponse *response);
-
-/**
- * RegisterNodes Service
- * ^^^^^^^^^^^^^^^^^^^^^
- * Used by Clients to register the Nodes that they know they will access
- * repeatedly (e.g. Write, Call). It allows Servers to set up anything needed so
- * that the access operations will be more efficient. */
-void Service_RegisterNodes(UA_Server *server, UA_Session *session,
-                           const UA_RegisterNodesRequest *request,
-                           UA_RegisterNodesResponse *response);
-
-/**
- * UnregisterNodes Service
- * ^^^^^^^^^^^^^^^^^^^^^^^
- * This Service is used to unregister NodeIds that have been obtained via the
- * RegisterNodes service. */
-void Service_UnregisterNodes(UA_Server *server, UA_Session *session,
-                             const UA_UnregisterNodesRequest *request,
-                             UA_UnregisterNodesResponse *response);
-
-/**
- * Query Service Set
- * -----------------
- * This Service Set is used to issue a Query to a Server. OPC UA Query is
- * generic in that it provides an underlying storage mechanism independent Query
- * capability that can be used to access a wide variety of OPC UA data stores
- * and information management systems. OPC UA Query permits a Client to access
- * data maintained by a Server without any knowledge of the logical schema used
- * for internal storage of the data. Knowledge of the AddressSpace is
- * sufficient.
- *
- * QueryFirst Service
- * ^^^^^^^^^^^^^^^^^^
- * This Service is used to issue a Query request to the Server. */
-/* Not Implemented */
-
-/**
- * QueryNext Service
- * ^^^^^^^^^^^^^^^^^
- * This Service is used to request the next set of QueryFirst or QueryNext
- * response information that is too large to be sent in a single response. */
-/* Not Impelemented */
-
-/**
- * Attribute Service Set
- * ---------------------
- * This Service Set provides Services to access Attributes that are part of
- * Nodes.
- *
- * Read Service
- * ^^^^^^^^^^^^
- * Used to read attributes of nodes. For constructed attribute values whose
- * elements are indexed, such as an array, this Service allows Clients to read
- * the entire set of indexed values as a composite, to read individual elements
- * or to read ranges of elements of the composite. */
-void Service_Read(UA_Server *server, UA_Session *session,
-                  const UA_ReadRequest *request, UA_ReadResponse *response);
-
-/**
- * Write Service
- * ^^^^^^^^^^^^^
- * Used to write attributes of nodes. For constructed attribute values whose
- * elements are indexed, such as an array, this Service allows Clients to write
- * the entire set of indexed values as a composite, to write individual elements
- * or to write ranges of elements of the composite. */
-void Service_Write(UA_Server *server, UA_Session *session,
-                   const UA_WriteRequest *request, UA_WriteResponse *response);
-
-/**
- * HistoryRead Service
- * ^^^^^^^^^^^^^^^^^^^
- * Used to read historical values or Events of one or more Nodes. Servers may
- * make historical values available to Clients using this Service, although the
- * historical values themselves are not visible in the AddressSpace. */
-#ifdef UA_ENABLE_HISTORIZING
-void Service_HistoryRead(UA_Server *server, UA_Session *session,
-                         const UA_HistoryReadRequest *request,
-                         UA_HistoryReadResponse *response);
-
-/**
- * HistoryUpdate Service
- * ^^^^^^^^^^^^^^^^^^^^^
- * Used to update historical values or Events of one or more Nodes. Several
- * request parameters indicate how the Server is to update the historical value
- * or Event. Valid actions are Insert, Replace or Delete. */
-void
-Service_HistoryUpdate(UA_Server *server, UA_Session *session,
-                      const UA_HistoryUpdateRequest *request,
-                      UA_HistoryUpdateResponse *response);
-#endif
-
-/**
- * .. _method-services:
- *
- * Method Service Set
- * ------------------
- * The Method Service Set defines the means to invoke methods. A method shall be
- * a component of an Object. See the section on :ref:`MethodNodes <methodnode>`
- * for more information.
- *
- * Call Service
- * ^^^^^^^^^^^^
- * Used to call (invoke) a methods. Each method call is invoked within the
- * context of an existing Session. If the Session is terminated, the results of
- * the method's execution cannot be returned to the Client and are discarded. */
-#ifdef UA_ENABLE_METHODCALLS
-void Service_Call(UA_Server *server, UA_Session *session,
-                  const UA_CallRequest *request,
-                  UA_CallResponse *response);
-#endif
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-
-/**
- * MonitoredItem Service Set
- * -------------------------
- * Clients define MonitoredItems to subscribe to data and Events. Each
- * MonitoredItem identifies the item to be monitored and the Subscription to use
- * to send Notifications. The item to be monitored may be any Node Attribute.
- *
- * CreateMonitoredItems Service
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Used to create and add one or more MonitoredItems to a Subscription. A
- * MonitoredItem is deleted automatically by the Server when the Subscription is
- * deleted. Deleting a MonitoredItem causes its entire set of triggered item
- * links to be deleted, but has no effect on the MonitoredItems referenced by
- * the triggered items. */
-void Service_CreateMonitoredItems(UA_Server *server, UA_Session *session,
-                                  const UA_CreateMonitoredItemsRequest *request,
-                                  UA_CreateMonitoredItemsResponse *response);
-
-/**
- * DeleteMonitoredItems Service
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Used to remove one or more MonitoredItems of a Subscription. When a
- * MonitoredItem is deleted, its triggered item links are also deleted. */
-void Service_DeleteMonitoredItems(UA_Server *server, UA_Session *session,
-                                  const UA_DeleteMonitoredItemsRequest *request,
-                                  UA_DeleteMonitoredItemsResponse *response);
-
-/**
- * ModifyMonitoredItems Service
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Used to modify MonitoredItems of a Subscription. Changes to the MonitoredItem
- * settings shall be applied immediately by the Server. They take effect as soon
- * as practical but not later than twice the new revisedSamplingInterval.
- *
- * Illegal request values for parameters that can be revised do not generate
- * errors. Instead the server will choose default values and indicate them in
- * the corresponding revised parameter. */
-void Service_ModifyMonitoredItems(UA_Server *server, UA_Session *session,
-                                  const UA_ModifyMonitoredItemsRequest *request,
-                                  UA_ModifyMonitoredItemsResponse *response);
-
-/**
- * SetMonitoringMode Service
- * ^^^^^^^^^^^^^^^^^^^^^^^^^
- * Used to set the monitoring mode for one or more MonitoredItems of a
- * Subscription. */
-void Service_SetMonitoringMode(UA_Server *server, UA_Session *session,
-                               const UA_SetMonitoringModeRequest *request,
-                               UA_SetMonitoringModeResponse *response);
-
-/**
- * SetTriggering Service
- * ^^^^^^^^^^^^^^^^^^^^^
- * Used to create and delete triggering links for a triggering item. */
-/* Not Implemented */
-
-/**
- * Subscription Service Set
- * ------------------------
- * Subscriptions are used to report Notifications to the Client.
- *
- * CreateSubscription Service
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Used to create a Subscription. Subscriptions monitor a set of MonitoredItems
- * for Notifications and return them to the Client in response to Publish
- * requests. */
-void Service_CreateSubscription(UA_Server *server, UA_Session *session,
-                                const UA_CreateSubscriptionRequest *request,
-                                UA_CreateSubscriptionResponse *response);
-
-/**
- * ModifySubscription Service
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Used to modify a Subscription. */
-void Service_ModifySubscription(UA_Server *server, UA_Session *session,
-                                const UA_ModifySubscriptionRequest *request,
-                                UA_ModifySubscriptionResponse *response);
-
-/**
- * SetPublishingMode Service
- * ^^^^^^^^^^^^^^^^^^^^^^^^^
- * Used to enable sending of Notifications on one or more Subscriptions. */
-void Service_SetPublishingMode(UA_Server *server, UA_Session *session,
-                               const UA_SetPublishingModeRequest *request,
-                               UA_SetPublishingModeResponse *response);
-
-/**
- * Publish Service
- * ^^^^^^^^^^^^^^^
- * Used for two purposes. First, it is used to acknowledge the receipt of
- * NotificationMessages for one or more Subscriptions. Second, it is used to
- * request the Server to return a NotificationMessage or a keep-alive
- * Message.
- *
- * Note that the service signature is an exception and does not contain a
- * pointer to a PublishResponse. That is because the service queues up publish
- * requests internally and sends responses asynchronously based on timeouts. */
-void Service_Publish(UA_Server *server, UA_Session *session,
-                     const UA_PublishRequest *request, UA_UInt32 requestId);
-
-/**
- * Republish Service
- * ^^^^^^^^^^^^^^^^^
- * Requests the Subscription to republish a NotificationMessage from its
- * retransmission queue. */
-void Service_Republish(UA_Server *server, UA_Session *session,
-                       const UA_RepublishRequest *request,
-                       UA_RepublishResponse *response);
-
-/**
- * DeleteSubscriptions Service
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Invoked to delete one or more Subscriptions that belong to the Client's
- * Session. */
-void Service_DeleteSubscriptions(UA_Server *server, UA_Session *session,
-                                 const UA_DeleteSubscriptionsRequest *request,
-                                 UA_DeleteSubscriptionsResponse *response);
-
-/**
- * TransferSubscription Service
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Used to transfer a Subscription and its MonitoredItems from one Session to
- * another. For example, a Client may need to reopen a Session and then transfer
- * its Subscriptions to that Session. It may also be used by one Client to take
- * over a Subscription from another Client by transferring the Subscription to
- * its Session. */
-/* Not Implemented */
-
-#endif /* UA_ENABLE_SUBSCRIPTIONS */
-
-_UA_END_DECLS
-
-#endif /* UA_SERVICES_H_ */
diff --git a/ext/open62541/src/server/ua_services_attribute.c b/ext/open62541/src/server/ua_services_attribute.c
deleted file mode 100644
index c779746..0000000
--- a/ext/open62541/src/server/ua_services_attribute.c
+++ /dev/null
@@ -1,1707 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2014-2017 (c) Florian Palm
- *    Copyright 2015 (c) Christian Fimmers
- *    Copyright 2015-2016 (c) Chris Iatrou
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2015 (c) wuyangtang
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2016 (c) Lorenz Haas
- *    Copyright 2017 (c) frax2222
- *    Copyright 2017 (c) Thomas Bender
- *    Copyright 2017 (c) Julian Grothoff
- *    Copyright 2017 (c) Jonas Green
- *    Copyright 2017 (c) Henrik Norrman
- */
-
-#include "ua_server_internal.h"
-#include "ua_types_encoding_binary.h"
-#include "ua_services.h"
-
-#ifdef UA_ENABLE_HISTORIZING
-#include <open62541/plugin/historydatabase.h>
-#endif
-
-/******************/
-/* Access Control */
-/******************/
-
-static UA_UInt32
-getUserWriteMask(UA_Server *server, const UA_Session *session,
-                 const UA_Node *node) {
-    if(session == &server->adminSession)
-        return 0xFFFFFFFF; /* the local admin user has all rights */
-    UA_UInt32 retval = node->writeMask;
-    UA_UNLOCK(server->serviceMutex);
-    retval &= server->config.accessControl.getUserRightsMask(server, &server->config.accessControl,
-                                                             &session->sessionId, session->sessionHandle,
-                                                             &node->nodeId, node->context);
-    UA_LOCK(server->serviceMutex);
-    return retval;
-}
-
-static UA_Byte
-getAccessLevel(UA_Server *server, const UA_Session *session,
-               const UA_VariableNode *node) {
-    if(session == &server->adminSession)
-        return 0xFF; /* the local admin user has all rights */
-    return node->accessLevel;
-}
-
-static UA_Byte
-getUserAccessLevel(UA_Server *server, const UA_Session *session,
-                   const UA_VariableNode *node) {
-    if(session == &server->adminSession)
-        return 0xFF; /* the local admin user has all rights */
-    UA_Byte retval = node->accessLevel;
-    UA_UNLOCK(server->serviceMutex);
-    retval &= server->config.accessControl.getUserAccessLevel(server, &server->config.accessControl,
-                                                    &session->sessionId, session->sessionHandle,
-                                                    &node->nodeId, node->context);
-    UA_LOCK(server->serviceMutex);
-    return retval;
-}
-
-static UA_Boolean
-getUserExecutable(UA_Server *server, const UA_Session *session,
-                  const UA_MethodNode *node) {
-    if(session == &server->adminSession)
-        return true; /* the local admin user has all rights */
-    UA_Boolean retval = node->executable;
-    UA_UNLOCK(server->serviceMutex);
-    retval &= server->config.accessControl.getUserExecutable(server, &server->config.accessControl,
-                                                             &session->sessionId, session->sessionHandle,
-                                                             &node->nodeId, node->context);
-    UA_LOCK(server->serviceMutex);
-    return retval;
-}
-
-/****************/
-/* Read Service */
-/****************/
-
-static UA_StatusCode
-readIsAbstractAttribute(const UA_Node *node, UA_Variant *v) {
-    const UA_Boolean *isAbstract;
-    switch(node->nodeClass) {
-    case UA_NODECLASS_REFERENCETYPE:
-        isAbstract = &((const UA_ReferenceTypeNode*)node)->isAbstract;
-        break;
-    case UA_NODECLASS_OBJECTTYPE:
-        isAbstract = &((const UA_ObjectTypeNode*)node)->isAbstract;
-        break;
-    case UA_NODECLASS_VARIABLETYPE:
-        isAbstract = &((const UA_VariableTypeNode*)node)->isAbstract;
-        break;
-    case UA_NODECLASS_DATATYPE:
-        isAbstract = &((const UA_DataTypeNode*)node)->isAbstract;
-        break;
-    default:
-        return UA_STATUSCODE_BADATTRIBUTEIDINVALID;
-    }
-
-    return UA_Variant_setScalarCopy(v, isAbstract, &UA_TYPES[UA_TYPES_BOOLEAN]);
-}
-
-static UA_StatusCode
-readValueAttributeFromNode(UA_Server *server, UA_Session *session,
-                           const UA_VariableNode *vn, UA_DataValue *v,
-                           UA_NumericRange *rangeptr) {
-    /* Update the value by the user callback */
-    if(vn->value.data.callback.onRead) {
-        UA_UNLOCK(server->serviceMutex);
-        vn->value.data.callback.onRead(server, &session->sessionId,
-                                       session->sessionHandle, &vn->nodeId,
-                                       vn->context, rangeptr, &vn->value.data.value);
-        UA_LOCK(server->serviceMutex);
-        vn = (const UA_VariableNode*)UA_Nodestore_getNode(server->nsCtx, &vn->nodeId);
-        if(!vn)
-            return UA_STATUSCODE_BADNODEIDUNKNOWN;
-    }
-
-    /* Set the result */
-    if(rangeptr)
-        return UA_Variant_copyRange(&vn->value.data.value.value, &v->value, *rangeptr);
-    UA_StatusCode retval = UA_DataValue_copy(&vn->value.data.value, v);
-
-    /* Clean up */
-    if(vn->value.data.callback.onRead)
-        UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node *)vn);
-    return retval;
-}
-
-static UA_StatusCode
-readValueAttributeFromDataSource(UA_Server *server, UA_Session *session,
-                                 const UA_VariableNode *vn, UA_DataValue *v,
-                                 UA_TimestampsToReturn timestamps,
-                                 UA_NumericRange *rangeptr) {
-    if(!vn->value.dataSource.read)
-        return UA_STATUSCODE_BADINTERNALERROR;
-    UA_Boolean sourceTimeStamp = (timestamps == UA_TIMESTAMPSTORETURN_SOURCE ||
-                                  timestamps == UA_TIMESTAMPSTORETURN_BOTH);
-    UA_DataValue v2;
-    UA_DataValue_init(&v2);
-    UA_UNLOCK(server->serviceMutex);
-    UA_StatusCode retval = vn->value.dataSource.
-        read(server, &session->sessionId, session->sessionHandle,
-             &vn->nodeId, vn->context, sourceTimeStamp, rangeptr, &v2);
-    UA_LOCK(server->serviceMutex);
-    if(v2.hasValue && v2.value.storageType == UA_VARIANT_DATA_NODELETE) {
-        retval = UA_DataValue_copy(&v2, v);
-        UA_DataValue_deleteMembers(&v2);
-    } else {
-        *v = v2;
-    }
-    return retval;
-}
-
-static UA_StatusCode
-readValueAttributeComplete(UA_Server *server, UA_Session *session,
-                           const UA_VariableNode *vn, UA_TimestampsToReturn timestamps,
-                           const UA_String *indexRange, UA_DataValue *v) {
-    /* Compute the index range */
-    UA_NumericRange range;
-    UA_NumericRange *rangeptr = NULL;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(indexRange && indexRange->length > 0) {
-        retval = UA_NumericRange_parseFromString(&range, indexRange);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-        rangeptr = &range;
-    }
-
-    /* Read the value */
-    if(vn->valueSource == UA_VALUESOURCE_DATA)
-        retval = readValueAttributeFromNode(server, session, vn, v, rangeptr);
-    else
-        retval = readValueAttributeFromDataSource(server, session, vn, v, timestamps, rangeptr);
-
-    /* Clean up */
-    if(rangeptr)
-        UA_free(range.dimensions);
-    return retval;
-}
-
-UA_StatusCode
-readValueAttribute(UA_Server *server, UA_Session *session,
-                   const UA_VariableNode *vn, UA_DataValue *v) {
-    return readValueAttributeComplete(server, session, vn, UA_TIMESTAMPSTORETURN_NEITHER, NULL, v);
-}
-
-static const UA_String binEncoding = {sizeof("Default Binary")-1, (UA_Byte*)"Default Binary"};
-static const UA_String xmlEncoding = {sizeof("Default XML")-1, (UA_Byte*)"Default XML"};
-static const UA_String jsonEncoding = {sizeof("Default JSON")-1, (UA_Byte*)"Default JSON"};
-
-#define CHECK_NODECLASS(CLASS)                                  \
-    if(!(node->nodeClass & (CLASS))) {                          \
-        retval = UA_STATUSCODE_BADATTRIBUTEIDINVALID;           \
-        break;                                                  \
-    }
-
-#ifdef UA_ENABLE_TYPEDESCRIPTION
-static const UA_DataType *
-findDataType(const UA_Node *node, const UA_DataTypeArray *customTypes) {
-    for(size_t i = 0; i < UA_TYPES_COUNT; ++i) {
-        if(UA_NodeId_equal(&UA_TYPES[i].typeId, &node->nodeId)) {
-            return &UA_TYPES[i];
-        }
-    }
-
-    // lookup custom type
-    while(customTypes) {
-        for(size_t i = 0; i < customTypes->typesSize; ++i) {
-            if(UA_NodeId_equal(&customTypes->types[i].typeId, &node->nodeId))
-                return &customTypes->types[i];
-        }
-        customTypes = customTypes->next;
-    }
-    return NULL;
-}
-
-static UA_StatusCode
-getStructureDefinition(const UA_DataType *type, UA_StructureDefinition *def) {
-    def->baseDataType = UA_NODEID_NUMERIC(0, UA_NS0ID_STRUCTURE);
-    def->defaultEncodingId =
-        UA_NODEID_NUMERIC(type->typeId.namespaceIndex, type->binaryEncodingId);
-    def->structureType = UA_STRUCTURETYPE_STRUCTURE;
-    def->fieldsSize = type->membersSize;
-    def->fields =
-        (UA_StructureField *)UA_calloc(def->fieldsSize, sizeof(UA_StructureField));
-    if(!def->fields) {
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-    const UA_DataType *typelists[2] = {UA_TYPES, &type[-type->typeIndex]};
-    for(size_t cnt = 0; cnt < def->fieldsSize; cnt++) {
-        const UA_DataTypeMember *m = &type->members[cnt];
-        def->fields[cnt].valueRank = UA_TRUE == m->isArray ? 1 : -1;
-        def->fields[cnt].arrayDimensions = NULL;
-        def->fields[cnt].arrayDimensionsSize = 0;
-        def->fields[cnt].name =
-            UA_STRING((char *)(uintptr_t)m->memberName);
-        def->fields[cnt].description.locale = UA_STRING_NULL;
-        def->fields[cnt].description.text = UA_STRING_NULL;
-        def->fields[cnt].dataType = typelists[!m->namespaceZero][m->memberTypeIndex].typeId;
-        def->fields[cnt].maxStringLength = 0;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-#endif
-
-/* Returns a datavalue that may point into the node via the
- * UA_VARIANT_DATA_NODELETE tag. Don't access the returned DataValue once the
- * node has been released! */
-void
-ReadWithNode(const UA_Node *node, UA_Server *server, UA_Session *session,
-             UA_TimestampsToReturn timestampsToReturn,
-             const UA_ReadValueId *id, UA_DataValue *v) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Read the attribute %i", id->attributeId);
-
-    /* Only Binary Encoding is supported */
-    if(id->dataEncoding.name.length > 0 &&
-       !UA_String_equal(&binEncoding, &id->dataEncoding.name)) {
-        if(UA_String_equal(&xmlEncoding, &id->dataEncoding.name) ||
-           UA_String_equal(&jsonEncoding, &id->dataEncoding.name))
-           v->status = UA_STATUSCODE_BADDATAENCODINGUNSUPPORTED;
-        else
-           v->status = UA_STATUSCODE_BADDATAENCODINGINVALID;
-        v->hasStatus = true;
-        return;
-    }
-
-    /* Index range for an attribute other than value */
-    if(id->indexRange.length > 0 && id->attributeId != UA_ATTRIBUTEID_VALUE) {
-        v->hasStatus = true;
-        v->status = UA_STATUSCODE_BADINDEXRANGENODATA;
-        return;
-    }
-
-    /* Read the attribute */
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    switch(id->attributeId) {
-    case UA_ATTRIBUTEID_NODEID:
-        retval = UA_Variant_setScalarCopy(&v->value, &node->nodeId, &UA_TYPES[UA_TYPES_NODEID]);
-        break;
-    case UA_ATTRIBUTEID_NODECLASS:
-        retval = UA_Variant_setScalarCopy(&v->value, &node->nodeClass, &UA_TYPES[UA_TYPES_NODECLASS]);
-        break;
-    case UA_ATTRIBUTEID_BROWSENAME:
-        retval = UA_Variant_setScalarCopy(&v->value, &node->browseName, &UA_TYPES[UA_TYPES_QUALIFIEDNAME]);
-        break;
-    case UA_ATTRIBUTEID_DISPLAYNAME:
-        retval = UA_Variant_setScalarCopy(&v->value, &node->displayName, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-        break;
-    case UA_ATTRIBUTEID_DESCRIPTION:
-        retval = UA_Variant_setScalarCopy(&v->value, &node->description, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-        break;
-    case UA_ATTRIBUTEID_WRITEMASK:
-        retval = UA_Variant_setScalarCopy(&v->value, &node->writeMask, &UA_TYPES[UA_TYPES_UINT32]);
-        break;
-    case UA_ATTRIBUTEID_USERWRITEMASK: {
-        UA_UInt32 userWriteMask = getUserWriteMask(server, session, node);
-        retval = UA_Variant_setScalarCopy(&v->value, &userWriteMask, &UA_TYPES[UA_TYPES_UINT32]);
-        break; }
-    case UA_ATTRIBUTEID_ISABSTRACT:
-        retval = readIsAbstractAttribute(node, &v->value);
-        break;
-    case UA_ATTRIBUTEID_SYMMETRIC:
-        CHECK_NODECLASS(UA_NODECLASS_REFERENCETYPE);
-        retval = UA_Variant_setScalarCopy(&v->value, &((const UA_ReferenceTypeNode*)node)->symmetric,
-                          &UA_TYPES[UA_TYPES_BOOLEAN]);
-        break;
-    case UA_ATTRIBUTEID_INVERSENAME:
-        CHECK_NODECLASS(UA_NODECLASS_REFERENCETYPE);
-        retval = UA_Variant_setScalarCopy(&v->value, &((const UA_ReferenceTypeNode*)node)->inverseName,
-                          &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-        break;
-    case UA_ATTRIBUTEID_CONTAINSNOLOOPS:
-        CHECK_NODECLASS(UA_NODECLASS_VIEW);
-        retval = UA_Variant_setScalarCopy(&v->value, &((const UA_ViewNode*)node)->containsNoLoops,
-                          &UA_TYPES[UA_TYPES_BOOLEAN]);
-        break;
-    case UA_ATTRIBUTEID_EVENTNOTIFIER:
-        CHECK_NODECLASS(UA_NODECLASS_VIEW | UA_NODECLASS_OBJECT);
-        if(node->nodeClass == UA_NODECLASS_VIEW) {
-            retval = UA_Variant_setScalarCopy(&v->value, &((const UA_ViewNode*)node)->eventNotifier,
-                              &UA_TYPES[UA_TYPES_BYTE]);
-        }
-        else{
-            retval = UA_Variant_setScalarCopy(&v->value, &((const UA_ObjectNode*)node)->eventNotifier,
-                              &UA_TYPES[UA_TYPES_BYTE]);
-        }
-        break;
-    case UA_ATTRIBUTEID_VALUE: {
-        CHECK_NODECLASS(UA_NODECLASS_VARIABLE | UA_NODECLASS_VARIABLETYPE);
-        /* VariableTypes don't have the AccessLevel concept. Always allow reading the value. */
-        if(node->nodeClass == UA_NODECLASS_VARIABLE) {
-            /* The access to a value variable is granted via the AccessLevel
-             * and UserAccessLevel attributes */
-            UA_Byte accessLevel = getAccessLevel(server, session, (const UA_VariableNode*)node);
-            if(!(accessLevel & (UA_ACCESSLEVELMASK_READ))) {
-                retval = UA_STATUSCODE_BADNOTREADABLE;
-                break;
-            }
-            accessLevel = getUserAccessLevel(server, session,
-                                             (const UA_VariableNode*)node);
-            if(!(accessLevel & (UA_ACCESSLEVELMASK_READ))) {
-                retval = UA_STATUSCODE_BADUSERACCESSDENIED;
-                break;
-            }
-        }
-        retval = readValueAttributeComplete(server, session, (const UA_VariableNode*)node,
-                                            timestampsToReturn, &id->indexRange, v);
-        break;
-    }
-    case UA_ATTRIBUTEID_DATATYPE:
-        CHECK_NODECLASS(UA_NODECLASS_VARIABLE | UA_NODECLASS_VARIABLETYPE);
-        retval = UA_Variant_setScalarCopy(&v->value, &((const UA_VariableTypeNode*)node)->dataType,
-                                          &UA_TYPES[UA_TYPES_NODEID]);
-        break;
-    case UA_ATTRIBUTEID_VALUERANK:
-        CHECK_NODECLASS(UA_NODECLASS_VARIABLE | UA_NODECLASS_VARIABLETYPE);
-        retval = UA_Variant_setScalarCopy(&v->value, &((const UA_VariableTypeNode*)node)->valueRank,
-                                          &UA_TYPES[UA_TYPES_INT32]);
-        break;
-    case UA_ATTRIBUTEID_ARRAYDIMENSIONS:
-        CHECK_NODECLASS(UA_NODECLASS_VARIABLE | UA_NODECLASS_VARIABLETYPE);
-        retval = UA_Variant_setArrayCopy(&v->value, ((const UA_VariableTypeNode*)node)->arrayDimensions,
-                                         ((const UA_VariableTypeNode*)node)->arrayDimensionsSize,
-                                         &UA_TYPES[UA_TYPES_UINT32]);
-        break;
-    case UA_ATTRIBUTEID_ACCESSLEVEL:
-        CHECK_NODECLASS(UA_NODECLASS_VARIABLE);
-        retval = UA_Variant_setScalarCopy(&v->value, &((const UA_VariableNode*)node)->accessLevel,
-                                          &UA_TYPES[UA_TYPES_BYTE]);
-        break;
-    case UA_ATTRIBUTEID_USERACCESSLEVEL: {
-        CHECK_NODECLASS(UA_NODECLASS_VARIABLE);
-        UA_Byte userAccessLevel = getUserAccessLevel(server, session, (const UA_VariableNode*)node);
-        retval = UA_Variant_setScalarCopy(&v->value, &userAccessLevel, &UA_TYPES[UA_TYPES_BYTE]);
-        break; }
-    case UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL:
-        CHECK_NODECLASS(UA_NODECLASS_VARIABLE);
-        retval = UA_Variant_setScalarCopy(&v->value, &((const UA_VariableNode*)node)->minimumSamplingInterval,
-                          &UA_TYPES[UA_TYPES_DOUBLE]);
-        break;
-    case UA_ATTRIBUTEID_HISTORIZING:
-        CHECK_NODECLASS(UA_NODECLASS_VARIABLE);
-        retval = UA_Variant_setScalarCopy(&v->value, &((const UA_VariableNode*)node)->historizing,
-                          &UA_TYPES[UA_TYPES_BOOLEAN]);
-        break;
-    case UA_ATTRIBUTEID_EXECUTABLE:
-        CHECK_NODECLASS(UA_NODECLASS_METHOD);
-        retval = UA_Variant_setScalarCopy(&v->value, &((const UA_MethodNode*)node)->executable,
-                          &UA_TYPES[UA_TYPES_BOOLEAN]);
-        break;
-    case UA_ATTRIBUTEID_USEREXECUTABLE: {
-        CHECK_NODECLASS(UA_NODECLASS_METHOD);
-        UA_Boolean userExecutable = getUserExecutable(server, session, (const UA_MethodNode*)node);
-        retval = UA_Variant_setScalarCopy(&v->value, &userExecutable, &UA_TYPES[UA_TYPES_BOOLEAN]);
-        break; }
-    case UA_ATTRIBUTEID_DATATYPEDEFINITION: {
-        CHECK_NODECLASS(UA_NODECLASS_DATATYPE);
-
-#ifdef UA_ENABLE_TYPEDESCRIPTION
-        const UA_DataType *type = findDataType(node, server->config.customDataTypes);
-        if(!type) {
-            retval = UA_STATUSCODE_BADATTRIBUTEIDINVALID;
-            break;
-        }
-
-        if(UA_DATATYPEKIND_STRUCTURE == type->typeKind ||
-           UA_DATATYPEKIND_OPTSTRUCT == type->typeKind) {
-            UA_StructureDefinition def;
-            retval = getStructureDefinition(type, &def);
-            if(UA_STATUSCODE_GOOD!=retval)
-                break;            
-            retval = UA_Variant_setScalarCopy(&v->value, &def,
-                                              &UA_TYPES[UA_TYPES_STRUCTUREDEFINITION]);
-            UA_free(def.fields);
-            break;
-        }
-#endif
-        retval = UA_STATUSCODE_BADATTRIBUTEIDINVALID;
-        break; }
-    default:
-        retval = UA_STATUSCODE_BADATTRIBUTEIDINVALID;
-    }
-
-    /* Return error code when reading has failed */
-    if(retval != UA_STATUSCODE_GOOD) {
-        v->hasStatus = true;
-        v->status = retval;
-        return;
-    }
-
-    v->hasValue = true;
-
-    /* Create server timestamp */
-    if(timestampsToReturn == UA_TIMESTAMPSTORETURN_SERVER ||
-       timestampsToReturn == UA_TIMESTAMPSTORETURN_BOTH) {
-        if (!v->hasServerTimestamp) {
-            v->serverTimestamp = UA_DateTime_now();
-            v->hasServerTimestamp = true;
-        }
-    } else {
-        /* In case the ServerTimestamp has been set manually */
-        v->hasServerTimestamp = false;
-    }
-
-    /* Handle source time stamp */
-    if(id->attributeId == UA_ATTRIBUTEID_VALUE) {
-        if(timestampsToReturn == UA_TIMESTAMPSTORETURN_SERVER ||
-           timestampsToReturn == UA_TIMESTAMPSTORETURN_NEITHER) {
-            v->hasSourceTimestamp = false;
-            v->hasSourcePicoseconds = false;
-        } else if(!v->hasSourceTimestamp) {
-            v->sourceTimestamp = UA_DateTime_now();
-            v->hasSourceTimestamp = true;
-        }
-    }
-}
-
-static void
-Operation_Read(UA_Server *server, UA_Session *session, UA_ReadRequest *request,
-               UA_ReadValueId *rvi, UA_DataValue *result) {
-    /* Get the node */
-    const UA_Node *node = UA_Nodestore_getNode(server->nsCtx, &rvi->nodeId);
-
-    /* Perform the read operation */
-    if(node) {
-        ReadWithNode(node, server, session, request->timestampsToReturn, rvi, result);
-        UA_Nodestore_releaseNode(server->nsCtx, node);
-    } else {
-        result->hasStatus = true;
-        result->status = UA_STATUSCODE_BADNODEIDUNKNOWN;
-    }
-}
-
-void
-Service_Read(UA_Server *server, UA_Session *session,
-             const UA_ReadRequest *request, UA_ReadResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session, "Processing ReadRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    /* Check if the timestampstoreturn is valid */
-    if(request->timestampsToReturn > UA_TIMESTAMPSTORETURN_NEITHER) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTIMESTAMPSTORETURNINVALID;
-        return;
-    }
-
-    /* Check if maxAge is valid */
-    if(request->maxAge < 0) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADMAXAGEINVALID;
-        return;
-    }
-
-    /* Check if there are too many operations */
-    if(server->config.maxNodesPerRead != 0 &&
-       request->nodesToReadSize > server->config.maxNodesPerRead) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYOPERATIONS;
-        return;
-    }
-
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    response->responseHeader.serviceResult =
-        UA_Server_processServiceOperations(server, session, (UA_ServiceOperation)Operation_Read,
-                                           request,
-                                           &request->nodesToReadSize, &UA_TYPES[UA_TYPES_READVALUEID],
-                                           &response->resultsSize, &UA_TYPES[UA_TYPES_DATAVALUE]);
-}
-
-UA_DataValue
-UA_Server_readWithSession(UA_Server *server, UA_Session *session,
-                          const UA_ReadValueId *item,
-                          UA_TimestampsToReturn timestampsToReturn) {
-    UA_DataValue dv;
-    UA_DataValue_init(&dv);
-
-    /* Get the node */
-    const UA_Node *node = UA_Nodestore_getNode(server->nsCtx, &item->nodeId);
-    if(!node) {
-        dv.hasStatus = true;
-        dv.status = UA_STATUSCODE_BADNODEIDUNKNOWN;
-        return dv;
-    }
-
-    /* Perform the read operation */
-    ReadWithNode(node, server, session, timestampsToReturn, item, &dv);
-
-    /* Release the node and return */
-    UA_Nodestore_releaseNode(server->nsCtx, node);
-    return dv;
-}
-
-UA_DataValue
-readAttribute(UA_Server *server, const UA_ReadValueId *item,
-               UA_TimestampsToReturn timestamps) {
-    return UA_Server_readWithSession(server, &server->adminSession, item, timestamps);
-}
-
-UA_StatusCode
-readWithReadValue(UA_Server *server, const UA_NodeId *nodeId,
-                                const UA_AttributeId attributeId, void *v) {
-    /* Call the read service */
-    UA_ReadValueId item;
-    UA_ReadValueId_init(&item);
-    item.nodeId = *nodeId;
-    item.attributeId = attributeId;
-    UA_DataValue dv = readAttribute(server, &item, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    /* Check the return value */
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(dv.hasStatus)
-        retval = dv.status;
-    else if(!dv.hasValue)
-        retval = UA_STATUSCODE_BADUNEXPECTEDERROR;
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_DataValue_deleteMembers(&dv);
-        return retval;
-    }
-
-    if(attributeId == UA_ATTRIBUTEID_VALUE ||
-       attributeId == UA_ATTRIBUTEID_ARRAYDIMENSIONS) {
-        /* Return the entire variant */
-        memcpy(v, &dv.value, sizeof(UA_Variant));
-    } else {
-        /* Return the variant content only */
-        memcpy(v, dv.value.data, dv.value.type->memSize);
-        UA_free(dv.value.data);
-    }
-    return retval;
-}
-
-/* Exposes the Read service to local users */
-UA_DataValue
-UA_Server_read(UA_Server *server, const UA_ReadValueId *item,
-               UA_TimestampsToReturn timestamps) {
-    UA_LOCK(server->serviceMutex);
-    UA_DataValue dv = readAttribute(server, item, timestamps);
-    UA_UNLOCK(server->serviceMutex);
-    return dv;
-}
-
-/* Used in inline functions exposing the Read service with more syntactic sugar
- * for individual attributes */
-UA_StatusCode
-__UA_Server_read(UA_Server *server, const UA_NodeId *nodeId,
-                 const UA_AttributeId attributeId, void *v) {
-   UA_LOCK(server->serviceMutex);
-   UA_StatusCode retval = readWithReadValue(server, nodeId, attributeId, v);
-   UA_UNLOCK(server->serviceMutex);
-   return retval;
-}
-
-UA_StatusCode
-UA_Server_readObjectProperty(UA_Server *server, const UA_NodeId objectId,
-                             const UA_QualifiedName propertyName,
-                             UA_Variant *value) {
-    UA_RelativePathElement rpe;
-    UA_RelativePathElement_init(&rpe);
-    rpe.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY);
-    rpe.isInverse = false;
-    rpe.includeSubtypes = false;
-    rpe.targetName = propertyName;
-
-    UA_BrowsePath bp;
-    UA_BrowsePath_init(&bp);
-    bp.startingNode = objectId;
-    bp.relativePath.elementsSize = 1;
-    bp.relativePath.elements = &rpe;
-
-    UA_StatusCode retval;
-    UA_BrowsePathResult bpr = translateBrowsePathToNodeIds(server, &bp);
-    if(bpr.statusCode != UA_STATUSCODE_GOOD || bpr.targetsSize < 1) {
-        retval = bpr.statusCode;
-        UA_BrowsePathResult_deleteMembers(&bpr);
-        return retval;
-    }
-
-    retval = UA_Server_readValue(server, bpr.targets[0].targetId.nodeId, value);
-
-    UA_BrowsePathResult_deleteMembers(&bpr);
-    return retval;
-}
-
-/*****************/
-/* Type Checking */
-/*****************/
-
-static UA_DataTypeKind
-typeEquivalence(const UA_DataType *t) {
-    UA_DataTypeKind k = (UA_DataTypeKind)t->typeKind;
-    if(k == UA_DATATYPEKIND_ENUM)
-        return UA_DATATYPEKIND_INT32;
-    return k;
-}
-
-static const UA_NodeId enumNodeId = {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_ENUMERATION}};
-
-UA_Boolean
-compatibleDataType(UA_Server *server, const UA_NodeId *dataType,
-                   const UA_NodeId *constraintDataType, UA_Boolean isValue) {
-    /* Do not allow empty datatypes */
-    if(UA_NodeId_isNull(dataType))
-       return false;
-
-    /* No constraint (TODO: use variant instead) */
-    if(UA_NodeId_isNull(constraintDataType))
-        return true;
-
-    /* Same datatypes */
-    if (UA_NodeId_equal(dataType, constraintDataType))
-        return true;
-
-    /* Variant allows any subtype */
-    if(UA_NodeId_equal(constraintDataType, &UA_TYPES[UA_TYPES_VARIANT].typeId))
-        return true;
-
-    /* Is the value-type a subtype of the required type? */
-    if(isNodeInTree(server->nsCtx, dataType, constraintDataType, &subtypeId, 1))
-        return true;
-
-    /* Enum allows Int32 (only) */
-    if(UA_NodeId_equal(dataType, &UA_TYPES[UA_TYPES_INT32].typeId) &&
-       isNodeInTree(server->nsCtx, constraintDataType, &enumNodeId, &subtypeId, 1))
-        return true;
-
-    /* More checks for the data type of real values (variants) */
-    if(isValue) {
-        /* If value is a built-in type: The target data type may be a sub type of
-         * the built-in type. (e.g. UtcTime is sub-type of DateTime and has a
-         * DateTime value). A type is builtin if its NodeId is in Namespace 0 and
-         * has a numeric identifier <= 25 (DiagnosticInfo) */
-        if(dataType->namespaceIndex == 0 &&
-           dataType->identifierType == UA_NODEIDTYPE_NUMERIC &&
-           dataType->identifier.numeric <= 25 &&
-           isNodeInTree(server->nsCtx, constraintDataType,
-                        dataType, &subtypeId, 1))
-            return true;
-    }
-
-    return false;
-}
-
-/* Test whether a ValueRank and the given arraydimensions are compatible.
- *
- * 5.6.2 Variable NodeClass: If the maximum is unknown the value shall be 0. The
- * number of elements shall be equal to the value of the ValueRank Attribute.
- * This Attribute shall be null if ValueRank <= 0. */
-UA_Boolean
-compatibleValueRankArrayDimensions(UA_Server *server, UA_Session *session,
-                                   UA_Int32 valueRank, size_t arrayDimensionsSize) {
-    /* ValueRank invalid */
-    if(valueRank < UA_VALUERANK_SCALAR_OR_ONE_DIMENSION) {
-        UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "The ValueRank is invalid (< -3)");
-        return false;
-    }
-
-    /* case -3, UA_VALUERANK_SCALAR_OR_ONE_DIMENSION: the value can be a scalar or a one dimensional array */
-    /* case -2, UA_VALUERANK_ANY: the value can be a scalar or an array with any number of dimensions */
-    /* case -1, UA_VALUERANK_SCALAR: the value is a scalar */
-    /* case  0, UA_VALUERANK_ONE_OR_MORE_DIMENSIONS:  the value is an array with one or more dimensions */
-    if(valueRank <= UA_VALUERANK_ONE_OR_MORE_DIMENSIONS) {
-        if(arrayDimensionsSize > 0) {
-            UA_LOG_INFO_SESSION(&server->config.logger, session,
-                                "No ArrayDimensions can be defined for a ValueRank <= 0");
-            return false;
-        }
-        return true;
-    }
-    
-    /* case >= 1, UA_VALUERANK_ONE_DIMENSION: the value is an array with the specified number of dimensions */
-    if(arrayDimensionsSize != (size_t)valueRank) {
-        UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "The number of ArrayDimensions is not equal to the (positive) ValueRank");
-        return false;
-    }
-    return true;
-}
-
-UA_Boolean
-compatibleValueRanks(UA_Int32 valueRank, UA_Int32 constraintValueRank) {
-    /* Check if the valuerank of the variabletype allows the change. */
-    switch(constraintValueRank) {
-    case UA_VALUERANK_SCALAR_OR_ONE_DIMENSION: /* the value can be a scalar or a one dimensional array */
-        if(valueRank != UA_VALUERANK_SCALAR && valueRank != UA_VALUERANK_ONE_DIMENSION)
-            return false;
-        break;
-    case UA_VALUERANK_ANY: /* the value can be a scalar or an array with any number of dimensions */
-        break;
-    case UA_VALUERANK_SCALAR: /* the value is a scalar */
-        if(valueRank != UA_VALUERANK_SCALAR)
-            return false;
-        break;
-    case UA_VALUERANK_ONE_OR_MORE_DIMENSIONS: /* the value is an array with one or more dimensions */
-        if(valueRank < (UA_Int32) UA_VALUERANK_ONE_OR_MORE_DIMENSIONS)
-            return false;
-        break;
-    default: /* >= 1: the value is an array with the specified number of dimensions */
-        if(valueRank != constraintValueRank)
-            return false;
-        break;
-    }
-    return true;
-}
-
-/* Check if the ValueRank allows for the value dimension. This is more
- * permissive than checking for the ArrayDimensions attribute. Because the value
- * can have dimensions if the ValueRank < 0 */
-static UA_Boolean
-compatibleValueRankValue(UA_Int32 valueRank, const UA_Variant *value) {
-    /* Invalid ValueRank */
-    if(valueRank < UA_VALUERANK_SCALAR_OR_ONE_DIMENSION)
-        return false;
-
-    /* Empty arrays (-1) always match */
-    if(!value->data)
-        return true;
-
-    size_t arrayDims = value->arrayDimensionsSize;
-    if(arrayDims == 0 && !UA_Variant_isScalar(value))
-        arrayDims = 1; /* array but no arraydimensions -> implicit array dimension 1 */
-
-    /* We cannot simply use compatibleValueRankArrayDimensions since we can have
-     * defined ArrayDimensions for the value if the ValueRank is -2 */
-    switch(valueRank) {
-    case UA_VALUERANK_SCALAR_OR_ONE_DIMENSION: /* The value can be a scalar or a one dimensional array */
-        return (arrayDims <= 1);
-    case UA_VALUERANK_ANY: /* The value can be a scalar or an array with any number of dimensions */
-        return true;
-    case UA_VALUERANK_SCALAR: /* The value is a scalar */
-        return (arrayDims == 0);
-    default:
-        break;
-    }
-
-    UA_assert(valueRank >= UA_VALUERANK_ONE_OR_MORE_DIMENSIONS);
-
-    /* case 0:  the value is an array with one or more dimensions */
-    return (arrayDims == (UA_UInt32)valueRank);
-}
-
-UA_Boolean
-compatibleArrayDimensions(size_t constraintArrayDimensionsSize,
-                          const UA_UInt32 *constraintArrayDimensions,
-                          size_t testArrayDimensionsSize,
-                          const UA_UInt32 *testArrayDimensions) {
-    /* No array dimensions defined -> everything is permitted if the value rank fits */
-    if(constraintArrayDimensionsSize == 0)
-        return true;
-
-    /* Dimension count must match */
-    if(testArrayDimensionsSize != constraintArrayDimensionsSize)
-        return false;
-
-    /* Dimension lengths must not be larger than the constraint. Zero in the
-     * constraint indicates a wildcard. */
-    for(size_t i = 0; i < constraintArrayDimensionsSize; ++i) {
-        if(constraintArrayDimensions[i] < testArrayDimensions[i] &&
-           constraintArrayDimensions[i] != 0)
-            return false;
-    }
-    return true;
-}
-
-UA_Boolean
-compatibleValueArrayDimensions(const UA_Variant *value, size_t targetArrayDimensionsSize,
-                               const UA_UInt32 *targetArrayDimensions) {
-    size_t valueArrayDimensionsSize = value->arrayDimensionsSize;
-    UA_UInt32 *valueArrayDimensions = value->arrayDimensions;
-    UA_UInt32 tempArrayDimensions;
-    if(!valueArrayDimensions && !UA_Variant_isScalar(value)) {
-        valueArrayDimensionsSize = 1;
-        tempArrayDimensions = (UA_UInt32)value->arrayLength;
-        valueArrayDimensions = &tempArrayDimensions;
-    }
-    UA_assert(valueArrayDimensionsSize == 0 || valueArrayDimensions != NULL);
-    return compatibleArrayDimensions(targetArrayDimensionsSize, targetArrayDimensions,
-                                     valueArrayDimensionsSize, valueArrayDimensions);
-}
-
-UA_Boolean
-compatibleValue(UA_Server *server, UA_Session *session, const UA_NodeId *targetDataTypeId,
-                UA_Int32 targetValueRank, size_t targetArrayDimensionsSize,
-                const UA_UInt32 *targetArrayDimensions, const UA_Variant *value,
-                const UA_NumericRange *range) {
-    /* Empty value */
-    if(!value->type) {
-        /* Empty value is allowed for BaseDataType */
-        if(UA_NodeId_equal(targetDataTypeId, &UA_TYPES[UA_TYPES_VARIANT].typeId) ||
-           UA_NodeId_equal(targetDataTypeId, &UA_NODEID_NULL))
-            return true;
-
-        /* Allow empty node values since existing information models may have
-         * variables with no value, e.g. OldValues - ns=0;i=3024. See also
-         * #1889, https://github.com/open62541/open62541/pull/1889#issuecomment-403506538 */
-        if(server->config.relaxEmptyValueConstraint) {
-            UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                                 "Only Variables with data type BaseDataType can contain an "
-                                 "empty value. Allow via explicit constraint relaxation.");
-            return true;
-        }
-
-        UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "Only Variables with data type BaseDataType can contain an empty value");
-        return false;
-    }
-
-    /* Has the value a subtype of the required type? BaseDataType (Variant) can
-     * be anything... */
-    if(!compatibleDataType(server, &value->type->typeId, targetDataTypeId, true))
-        return false;
-
-    /* Array dimensions are checked later when writing the range */
-    if(range)
-        return true;
-
-    /* See if the array dimensions match. */
-    if(!compatibleValueArrayDimensions(value, targetArrayDimensionsSize, targetArrayDimensions))
-        return false;
-
-    /* Check if the valuerank allows for the value dimension */
-    return compatibleValueRankValue(targetValueRank, value);
-}
-
-/*****************/
-/* Write Service */
-/*****************/
-
-static void
-adjustValue(UA_Server *server, UA_Variant *value,
-            const UA_NodeId *targetDataTypeId) {
-    const UA_DataType *targetDataType = UA_findDataType(targetDataTypeId);
-    if(!targetDataType)
-        return;
-
-    /* A string is written to a byte array. the valuerank and array dimensions
-     * are checked later */
-    if(targetDataType == &UA_TYPES[UA_TYPES_BYTE] &&
-       value->type == &UA_TYPES[UA_TYPES_BYTESTRING] &&
-       UA_Variant_isScalar(value)) {
-        UA_ByteString *str = (UA_ByteString*)value->data;
-        value->type = &UA_TYPES[UA_TYPES_BYTE];
-        value->arrayLength = str->length;
-        value->data = str->data;
-        return;
-    }
-
-    /* An enum was sent as an int32, or an opaque type as a bytestring. This
-     * is detected with the typeIndex indicating the "true" datatype. */
-    UA_DataTypeKind te1 = typeEquivalence(targetDataType);
-    UA_DataTypeKind te2 = typeEquivalence(value->type);
-    if(te1 == te2 && te1 <= UA_DATATYPEKIND_ENUM) {
-        value->type = targetDataType;
-        return;
-    }
-
-    /* No more possible equivalencies */
-}
-
-static UA_StatusCode
-writeArrayDimensionsAttribute(UA_Server *server, UA_Session *session,
-                              UA_VariableNode *node, const UA_VariableTypeNode *type,
-                              size_t arrayDimensionsSize, UA_UInt32 *arrayDimensions) {
-    UA_assert(node != NULL);
-    UA_assert(type != NULL);
-
-    /* If this is a variabletype, there must be no instances or subtypes of it
-     * when we do the change */
-    if(node->nodeClass == UA_NODECLASS_VARIABLETYPE &&
-       UA_Node_hasSubTypeOrInstances((UA_Node*)node)) {
-        UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                    "Cannot change a variable type with existing instances");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    /* Check that the array dimensions match with the valuerank */
-    if(!compatibleValueRankArrayDimensions(server, session, node->valueRank, arrayDimensionsSize)) {
-        UA_LOG_DEBUG(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "Cannot write the ArrayDimensions. The ValueRank does not match.");
-        return UA_STATUSCODE_BADTYPEMISMATCH;
-    }
-
-    /* Check if the array dimensions match with the wildcards in the
-     * variabletype (dimension length 0) */
-    if(type->arrayDimensions &&
-       !compatibleArrayDimensions(type->arrayDimensionsSize, type->arrayDimensions,
-                                  arrayDimensionsSize, arrayDimensions)) {
-       UA_LOG_DEBUG(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                    "Array dimensions in the variable type do not match");
-       return UA_STATUSCODE_BADTYPEMISMATCH;
-    }
-
-    /* Check if the current value is compatible with the array dimensions */
-    UA_DataValue value;
-    UA_DataValue_init(&value);
-    UA_StatusCode retval = readValueAttribute(server, session, node, &value);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    if(value.hasValue) {
-        if(!compatibleValueArrayDimensions(&value.value, arrayDimensionsSize, arrayDimensions))
-            retval = UA_STATUSCODE_BADTYPEMISMATCH;
-        UA_DataValue_deleteMembers(&value);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_DEBUG(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                         "Array dimensions in the current value do not match");
-            return retval;
-        }
-    }
-
-    /* Ok, apply */
-    UA_UInt32 *oldArrayDimensions = node->arrayDimensions;
-    size_t oldArrayDimensionsSize = node->arrayDimensionsSize;
-    retval = UA_Array_copy(arrayDimensions, arrayDimensionsSize,
-                           (void**)&node->arrayDimensions,
-                           &UA_TYPES[UA_TYPES_UINT32]);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    UA_Array_delete(oldArrayDimensions, oldArrayDimensionsSize, &UA_TYPES[UA_TYPES_UINT32]);
-    node->arrayDimensionsSize = arrayDimensionsSize;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Stack layout: ... | node | type */
-static UA_StatusCode
-writeValueRankAttribute(UA_Server *server, UA_Session *session,
-                        UA_VariableNode *node, const UA_VariableTypeNode *type,
-                        UA_Int32 valueRank) {
-    UA_assert(node != NULL);
-    UA_assert(type != NULL);
-
-    UA_Int32 constraintValueRank = type->valueRank;
-
-    /* If this is a variabletype, there must be no instances or subtypes of it
-     * when we do the change */
-    if(node->nodeClass == UA_NODECLASS_VARIABLETYPE &&
-       UA_Node_hasSubTypeOrInstances((const UA_Node*)node))
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Check if the valuerank of the variabletype allows the change. */
-    if(!compatibleValueRanks(valueRank, constraintValueRank))
-        return UA_STATUSCODE_BADTYPEMISMATCH;
-
-    /* Check if the new valuerank is compatible with the array dimensions. Use
-     * the read service to handle data sources. */
-    size_t arrayDims = node->arrayDimensionsSize;
-    if(arrayDims == 0) {
-        /* the value could be an array with no arrayDimensions defined.
-           dimensions zero indicate a scalar for compatibleValueRankArrayDimensions. */
-        UA_DataValue value;
-        UA_DataValue_init(&value);
-        UA_StatusCode retval = readValueAttribute(server, session, node, &value);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-        if(!value.hasValue || !value.value.type) {
-            /* no value -> apply */
-            node->valueRank = valueRank;
-            return UA_STATUSCODE_GOOD;
-        }
-        if(!UA_Variant_isScalar(&value.value))
-            arrayDims = 1;
-        UA_DataValue_deleteMembers(&value);
-    }
-    if(!compatibleValueRankArrayDimensions(server, session, valueRank, arrayDims))
-        return UA_STATUSCODE_BADTYPEMISMATCH;
-
-    /* All good, apply the change */
-    node->valueRank = valueRank;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-writeDataTypeAttribute(UA_Server *server, UA_Session *session,
-                       UA_VariableNode *node, const UA_VariableTypeNode *type,
-                       const UA_NodeId *dataType) {
-    UA_assert(node != NULL);
-    UA_assert(type != NULL);
-
-    /* If this is a variabletype, there must be no instances or subtypes of it
-       when we do the change */
-    if(node->nodeClass == UA_NODECLASS_VARIABLETYPE &&
-       UA_Node_hasSubTypeOrInstances((const UA_Node*)node))
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Does the new type match the constraints of the variabletype? */
-    if(!compatibleDataType(server, dataType, &type->dataType, false))
-        return UA_STATUSCODE_BADTYPEMISMATCH;
-
-    /* Check if the current value would match the new type */
-    UA_DataValue value;
-    UA_DataValue_init(&value);
-    UA_StatusCode retval = readValueAttribute(server, session, node, &value);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    if(value.hasValue) {
-        if(!compatibleValue(server, session, dataType, node->valueRank,
-                            node->arrayDimensionsSize, node->arrayDimensions,
-                            &value.value, NULL))
-            retval = UA_STATUSCODE_BADTYPEMISMATCH;
-        UA_DataValue_deleteMembers(&value);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_DEBUG(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                         "The current value does not match the new data type");
-            return retval;
-        }
-    }
-
-    /* Replace the datatype nodeid */
-    UA_NodeId dtCopy = node->dataType;
-    retval = UA_NodeId_copy(dataType, &node->dataType);
-    if(retval != UA_STATUSCODE_GOOD) {
-        node->dataType = dtCopy;
-        return retval;
-    }
-    UA_NodeId_deleteMembers(&dtCopy);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-writeValueAttributeWithoutRange(UA_VariableNode *node, const UA_DataValue *value) {
-    UA_DataValue new_value;
-    UA_StatusCode retval = UA_DataValue_copy(value, &new_value);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    UA_DataValue_deleteMembers(&node->value.data.value);
-    node->value.data.value = new_value;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-writeValueAttributeWithRange(UA_VariableNode *node, const UA_DataValue *value,
-                             const UA_NumericRange *rangeptr) {
-    /* Value on both sides? */
-    if(value->status != node->value.data.value.status ||
-       !value->hasValue || !node->value.data.value.hasValue)
-        return UA_STATUSCODE_BADINDEXRANGEINVALID;
-
-    /* Make scalar a one-entry array for range matching */
-    UA_Variant editableValue;
-    const UA_Variant *v = &value->value;
-    if(UA_Variant_isScalar(&value->value)) {
-        editableValue = value->value;
-        editableValue.arrayLength = 1;
-        v = &editableValue;
-    }
-
-    /* Check that the type is an exact match and not only "compatible" */
-    if(!node->value.data.value.value.type || !v->type ||
-       !UA_NodeId_equal(&node->value.data.value.value.type->typeId,
-                        &v->type->typeId))
-        return UA_STATUSCODE_BADTYPEMISMATCH;
-
-    /* Write the value */
-    UA_StatusCode retval = UA_Variant_setRangeCopy(&node->value.data.value.value,
-                                                   v->data, v->arrayLength, *rangeptr);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Write the status and timestamps */
-    node->value.data.value.hasStatus = value->hasStatus;
-    node->value.data.value.status = value->status;
-    node->value.data.value.hasSourceTimestamp = value->hasSourceTimestamp;
-    node->value.data.value.sourceTimestamp = value->sourceTimestamp;
-    node->value.data.value.hasSourcePicoseconds = value->hasSourcePicoseconds;
-    node->value.data.value.sourcePicoseconds = value->sourcePicoseconds;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Stack layout: ... | node */
-static UA_StatusCode
-writeValueAttribute(UA_Server *server, UA_Session *session,
-                    UA_VariableNode *node, const UA_DataValue *value,
-                    const UA_String *indexRange) {
-    UA_assert(node != NULL);
-
-    /* Parse the range */
-    UA_NumericRange range;
-    UA_NumericRange *rangeptr = NULL;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(indexRange && indexRange->length > 0) {
-        retval = UA_NumericRange_parseFromString(&range, indexRange);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-        rangeptr = &range;
-    }
-
-    /* Created an editable version. The data is not touched. Only the variant
-     * "container". */
-    UA_DataValue adjustedValue = *value;
-
-    /* Type checking. May change the type of editableValue */
-    if(value->hasValue && value->value.type) {
-        adjustValue(server, &adjustedValue.value, &node->dataType);
-
-        /* The value may be an extension object, especially the nodeset compiler
-         * uses extension objects to write variable values. If value is an
-         * extension object we check if the current node value is also an
-         * extension object. */
-        const UA_NodeId nodeDataType = UA_NODEID_NUMERIC(0, UA_NS0ID_STRUCTURE);
-        const UA_NodeId *nodeDataTypePtr = &node->dataType;
-        if(value->value.type->typeId.identifierType == UA_NODEIDTYPE_NUMERIC &&
-           value->value.type->typeId.identifier.numeric == UA_NS0ID_STRUCTURE)
-            nodeDataTypePtr = &nodeDataType;
-
-        if(!compatibleValue(server, session, nodeDataTypePtr, node->valueRank,
-                            node->arrayDimensionsSize, node->arrayDimensions,
-                            &adjustedValue.value, rangeptr)) {
-            if(rangeptr)
-                UA_free(range.dimensions);
-            return UA_STATUSCODE_BADTYPEMISMATCH;
-        }
-    }
-
-    /* Set the source timestamp if there is none */
-    UA_DateTime now = UA_DateTime_now();
-    if(!adjustedValue.hasSourceTimestamp) {
-        adjustedValue.sourceTimestamp = now;
-        adjustedValue.hasSourceTimestamp = true;
-    }
-
-    if(!adjustedValue.hasServerTimestamp) {
-        adjustedValue.serverTimestamp = now;
-        adjustedValue.hasServerTimestamp = true;
-    }
-
-    /* Ok, do it */
-    if(node->valueSource == UA_VALUESOURCE_DATA) {
-        if(!rangeptr)
-            retval = writeValueAttributeWithoutRange(node, &adjustedValue);
-        else
-            retval = writeValueAttributeWithRange(node, &adjustedValue, rangeptr);
-
-#ifdef UA_ENABLE_HISTORIZING
-        /* node is a UA_VariableNode*, but it may also point to a UA_VariableTypeNode */
-        /* UA_VariableTypeNode doesn't have the historizing attribute */
-        if(retval == UA_STATUSCODE_GOOD && node->nodeClass == UA_NODECLASS_VARIABLE &&
-                server->config.historyDatabase.setValue) {
-            UA_UNLOCK(server->serviceMutex);
-            server->config.historyDatabase.setValue(server, server->config.historyDatabase.context,
-                                                    &session->sessionId, session->sessionHandle,
-                                                    &node->nodeId, node->historizing, &adjustedValue);
-            UA_LOCK(server->serviceMutex);
-        }
-#endif
-        /* Callback after writing */
-        if(retval == UA_STATUSCODE_GOOD && node->value.data.callback.onWrite) {
-            UA_UNLOCK(server->serviceMutex)
-            node->value.data.callback.onWrite(server, &session->sessionId,
-                                              session->sessionHandle, &node->nodeId,
-                                              node->context, rangeptr,
-                                              &adjustedValue);
-            UA_LOCK(server->serviceMutex);
-
-        }
-    } else {
-        if(node->value.dataSource.write) {
-            UA_UNLOCK(server->serviceMutex);
-            retval = node->value.dataSource.write(server, &session->sessionId,
-                                                  session->sessionHandle, &node->nodeId,
-                                                  node->context, rangeptr, &adjustedValue);
-            UA_LOCK(server->serviceMutex);
-        } else {
-            retval = UA_STATUSCODE_BADWRITENOTSUPPORTED;
-        }
-    }
-
-    /* Clean up */
-    if(rangeptr)
-        UA_free(range.dimensions);
-    return retval;
-}
-
-static UA_StatusCode
-writeIsAbstractAttribute(UA_Node *node, UA_Boolean value) {
-    switch(node->nodeClass) {
-    case UA_NODECLASS_OBJECTTYPE:
-        ((UA_ObjectTypeNode*)node)->isAbstract = value;
-        break;
-    case UA_NODECLASS_REFERENCETYPE:
-        ((UA_ReferenceTypeNode*)node)->isAbstract = value;
-        break;
-    case UA_NODECLASS_VARIABLETYPE:
-        ((UA_VariableTypeNode*)node)->isAbstract = value;
-        break;
-    case UA_NODECLASS_DATATYPE:
-        ((UA_DataTypeNode*)node)->isAbstract = value;
-        break;
-    default:
-        return UA_STATUSCODE_BADNODECLASSINVALID;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-/*****************/
-/* Write Service */
-/*****************/
-
-#define CHECK_DATATYPE_SCALAR(EXP_DT)                                   \
-    if(!wvalue->value.hasValue ||                                       \
-       &UA_TYPES[UA_TYPES_##EXP_DT] != wvalue->value.value.type ||      \
-       !UA_Variant_isScalar(&wvalue->value.value)) {                    \
-        retval = UA_STATUSCODE_BADTYPEMISMATCH;                         \
-        break;                                                          \
-    }
-
-#define CHECK_DATATYPE_ARRAY(EXP_DT)                                    \
-    if(!wvalue->value.hasValue ||                                       \
-       &UA_TYPES[UA_TYPES_##EXP_DT] != wvalue->value.value.type ||      \
-       UA_Variant_isScalar(&wvalue->value.value)) {                     \
-        retval = UA_STATUSCODE_BADTYPEMISMATCH;                         \
-        break;                                                          \
-    }
-
-#define CHECK_NODECLASS_WRITE(CLASS)                                    \
-    if((node->nodeClass & (CLASS)) == 0) {                              \
-        retval = UA_STATUSCODE_BADNODECLASSINVALID;                     \
-        break;                                                          \
-    }
-
-#define CHECK_USERWRITEMASK(mask)                           \
-    if(!(userWriteMask & (mask))) {                         \
-        retval = UA_STATUSCODE_BADUSERACCESSDENIED;         \
-        break;                                              \
-    }
-
-#define GET_NODETYPE                                \
-    type = (const UA_VariableTypeNode*)             \
-        getNodeType(server, node);                  \
-    if(!type) {                                     \
-        retval = UA_STATUSCODE_BADTYPEMISMATCH;     \
-        break;                                      \
-    }
-
-/* This function implements the main part of the write service and operates on a
-   copy of the node (not in single-threaded mode). */
-static UA_StatusCode
-copyAttributeIntoNode(UA_Server *server, UA_Session *session,
-                      UA_Node *node, const UA_WriteValue *wvalue) {
-    const void *value = wvalue->value.value.data;
-    UA_UInt32 userWriteMask = getUserWriteMask(server, session, node);
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-
-    const UA_VariableTypeNode *type;
-
-    switch(wvalue->attributeId) {
-    case UA_ATTRIBUTEID_NODEID:
-    case UA_ATTRIBUTEID_NODECLASS:
-    case UA_ATTRIBUTEID_USERWRITEMASK:
-    case UA_ATTRIBUTEID_USERACCESSLEVEL:
-    case UA_ATTRIBUTEID_USEREXECUTABLE:
-        retval = UA_STATUSCODE_BADWRITENOTSUPPORTED;
-        break;
-    case UA_ATTRIBUTEID_BROWSENAME:
-        CHECK_USERWRITEMASK(UA_WRITEMASK_BROWSENAME);
-        CHECK_DATATYPE_SCALAR(QUALIFIEDNAME);
-        UA_QualifiedName_deleteMembers(&node->browseName);
-        UA_QualifiedName_copy((const UA_QualifiedName *)value, &node->browseName);
-        break;
-    case UA_ATTRIBUTEID_DISPLAYNAME:
-        CHECK_USERWRITEMASK(UA_WRITEMASK_DISPLAYNAME);
-        CHECK_DATATYPE_SCALAR(LOCALIZEDTEXT);
-        UA_LocalizedText_deleteMembers(&node->displayName);
-        UA_LocalizedText_copy((const UA_LocalizedText *)value, &node->displayName);
-        break;
-    case UA_ATTRIBUTEID_DESCRIPTION:
-        CHECK_USERWRITEMASK(UA_WRITEMASK_DESCRIPTION);
-        CHECK_DATATYPE_SCALAR(LOCALIZEDTEXT);
-        UA_LocalizedText_deleteMembers(&node->description);
-        UA_LocalizedText_copy((const UA_LocalizedText *)value, &node->description);
-        break;
-    case UA_ATTRIBUTEID_WRITEMASK:
-        CHECK_USERWRITEMASK(UA_WRITEMASK_WRITEMASK);
-        CHECK_DATATYPE_SCALAR(UINT32);
-        node->writeMask = *(const UA_UInt32*)value;
-        break;
-    case UA_ATTRIBUTEID_ISABSTRACT:
-        CHECK_USERWRITEMASK(UA_WRITEMASK_ISABSTRACT);
-        CHECK_DATATYPE_SCALAR(BOOLEAN);
-        retval = writeIsAbstractAttribute(node, *(const UA_Boolean*)value);
-        break;
-    case UA_ATTRIBUTEID_SYMMETRIC:
-        CHECK_NODECLASS_WRITE(UA_NODECLASS_REFERENCETYPE);
-        CHECK_USERWRITEMASK(UA_WRITEMASK_SYMMETRIC);
-        CHECK_DATATYPE_SCALAR(BOOLEAN);
-        ((UA_ReferenceTypeNode*)node)->symmetric = *(const UA_Boolean*)value;
-        break;
-    case UA_ATTRIBUTEID_INVERSENAME:
-        CHECK_NODECLASS_WRITE(UA_NODECLASS_REFERENCETYPE);
-        CHECK_USERWRITEMASK(UA_WRITEMASK_INVERSENAME);
-        CHECK_DATATYPE_SCALAR(LOCALIZEDTEXT);
-        UA_LocalizedText_deleteMembers(&((UA_ReferenceTypeNode*)node)->inverseName);
-        UA_LocalizedText_copy((const UA_LocalizedText *)value,
-                              &((UA_ReferenceTypeNode*)node)->inverseName);
-        break;
-    case UA_ATTRIBUTEID_CONTAINSNOLOOPS:
-        CHECK_NODECLASS_WRITE(UA_NODECLASS_VIEW);
-        CHECK_USERWRITEMASK(UA_WRITEMASK_CONTAINSNOLOOPS);
-        CHECK_DATATYPE_SCALAR(BOOLEAN);
-        ((UA_ViewNode*)node)->containsNoLoops = *(const UA_Boolean*)value;
-        break;
-    case UA_ATTRIBUTEID_EVENTNOTIFIER:
-        CHECK_NODECLASS_WRITE(UA_NODECLASS_VIEW | UA_NODECLASS_OBJECT);
-        CHECK_USERWRITEMASK(UA_WRITEMASK_EVENTNOTIFIER);
-        CHECK_DATATYPE_SCALAR(BYTE);
-        if(node->nodeClass == UA_NODECLASS_VIEW) {
-            ((UA_ViewNode*)node)->eventNotifier = *(const UA_Byte*)value;
-        } else {
-            ((UA_ObjectNode*)node)->eventNotifier = *(const UA_Byte*)value;
-        }
-        break;
-    case UA_ATTRIBUTEID_VALUE:
-        CHECK_NODECLASS_WRITE(UA_NODECLASS_VARIABLE | UA_NODECLASS_VARIABLETYPE);
-        if(node->nodeClass == UA_NODECLASS_VARIABLE) {
-            /* The access to a value variable is granted via the AccessLevel
-             * and UserAccessLevel attributes */
-            UA_Byte accessLevel = getAccessLevel(server, session, (const UA_VariableNode*)node);
-            if(!(accessLevel & (UA_ACCESSLEVELMASK_WRITE))) {
-                retval = UA_STATUSCODE_BADNOTWRITABLE;
-                break;
-            }
-            accessLevel = getUserAccessLevel(server, session,
-                                             (const UA_VariableNode*)node);
-            if(!(accessLevel & (UA_ACCESSLEVELMASK_WRITE))) {
-                retval = UA_STATUSCODE_BADUSERACCESSDENIED;
-                break;
-            }
-        } else { /* UA_NODECLASS_VARIABLETYPE */
-            CHECK_USERWRITEMASK(UA_WRITEMASK_VALUEFORVARIABLETYPE);
-        }
-        retval = writeValueAttribute(server, session, (UA_VariableNode*)node,
-                                     &wvalue->value, &wvalue->indexRange);
-        break;
-    case UA_ATTRIBUTEID_DATATYPE:
-        CHECK_NODECLASS_WRITE(UA_NODECLASS_VARIABLE | UA_NODECLASS_VARIABLETYPE);
-        CHECK_USERWRITEMASK(UA_WRITEMASK_DATATYPE);
-        CHECK_DATATYPE_SCALAR(NODEID);
-        GET_NODETYPE
-        retval = writeDataTypeAttribute(server, session, (UA_VariableNode*)node,
-                                        type, (const UA_NodeId*)value);
-        UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node*)type);
-        break;
-    case UA_ATTRIBUTEID_VALUERANK:
-        CHECK_NODECLASS_WRITE(UA_NODECLASS_VARIABLE | UA_NODECLASS_VARIABLETYPE);
-        CHECK_USERWRITEMASK(UA_WRITEMASK_VALUERANK);
-        CHECK_DATATYPE_SCALAR(INT32);
-        GET_NODETYPE
-        retval = writeValueRankAttribute(server, session, (UA_VariableNode*)node,
-                                         type, *(const UA_Int32*)value);
-        UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node*)type);
-        break;
-    case UA_ATTRIBUTEID_ARRAYDIMENSIONS:
-        CHECK_NODECLASS_WRITE(UA_NODECLASS_VARIABLE | UA_NODECLASS_VARIABLETYPE);
-        CHECK_USERWRITEMASK(UA_WRITEMASK_ARRRAYDIMENSIONS);
-        CHECK_DATATYPE_ARRAY(UINT32);
-        GET_NODETYPE
-        retval = writeArrayDimensionsAttribute(server, session, (UA_VariableNode*)node,
-                                               type, wvalue->value.value.arrayLength,
-                                               (UA_UInt32 *)wvalue->value.value.data);
-        UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node*)type);
-        break;
-    case UA_ATTRIBUTEID_ACCESSLEVEL:
-        CHECK_NODECLASS_WRITE(UA_NODECLASS_VARIABLE);
-        CHECK_USERWRITEMASK(UA_WRITEMASK_ACCESSLEVEL);
-        CHECK_DATATYPE_SCALAR(BYTE);
-        ((UA_VariableNode*)node)->accessLevel = *(const UA_Byte*)value;
-        break;
-    case UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL:
-        CHECK_NODECLASS_WRITE(UA_NODECLASS_VARIABLE);
-        CHECK_USERWRITEMASK(UA_WRITEMASK_MINIMUMSAMPLINGINTERVAL);
-        CHECK_DATATYPE_SCALAR(DOUBLE);
-        ((UA_VariableNode*)node)->minimumSamplingInterval = *(const UA_Double*)value;
-        break;
-    case UA_ATTRIBUTEID_HISTORIZING:
-        CHECK_NODECLASS_WRITE(UA_NODECLASS_VARIABLE);
-        CHECK_USERWRITEMASK(UA_WRITEMASK_HISTORIZING);
-        CHECK_DATATYPE_SCALAR(BOOLEAN);
-        ((UA_VariableNode*)node)->historizing = *(const UA_Boolean*)value;
-        break;
-    case UA_ATTRIBUTEID_EXECUTABLE:
-        CHECK_NODECLASS_WRITE(UA_NODECLASS_METHOD);
-        CHECK_USERWRITEMASK(UA_WRITEMASK_EXECUTABLE);
-        CHECK_DATATYPE_SCALAR(BOOLEAN);
-        ((UA_MethodNode*)node)->executable = *(const UA_Boolean*)value;
-        break;
-    default:
-        retval = UA_STATUSCODE_BADATTRIBUTEIDINVALID;
-        break;
-    }
-    if(retval != UA_STATUSCODE_GOOD)
-        UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "WriteRequest returned status code %s",
-                            UA_StatusCode_name(retval));
-    return retval;
-}
-
-static void
-Operation_Write(UA_Server *server, UA_Session *session, void *context,
-                UA_WriteValue *wv, UA_StatusCode *result) {
-    *result = UA_Server_editNode(server, session, &wv->nodeId,
-                        (UA_EditNodeCallback)copyAttributeIntoNode, wv);
-}
-
-void
-Service_Write(UA_Server *server, UA_Session *session,
-              const UA_WriteRequest *request,
-              UA_WriteResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Processing WriteRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    if(server->config.maxNodesPerWrite != 0 &&
-       request->nodesToWriteSize > server->config.maxNodesPerWrite) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYOPERATIONS;
-        return;
-    }
-
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    response->responseHeader.serviceResult =
-        UA_Server_processServiceOperations(server, session, (UA_ServiceOperation)Operation_Write, NULL,
-                                           &request->nodesToWriteSize, &UA_TYPES[UA_TYPES_WRITEVALUE],
-                                           &response->resultsSize, &UA_TYPES[UA_TYPES_STATUSCODE]);
-}
-
-UA_StatusCode
-writeWithSession(UA_Server *server, UA_Session *session,
-                           const UA_WriteValue *value) {
-    return UA_Server_editNode(server, session, &value->nodeId,
-                              (UA_EditNodeCallback)copyAttributeIntoNode,
-                              /* casting away const qualifier because callback uses const anyway */
-                              (UA_WriteValue *)(uintptr_t)value);
-}
-
-UA_StatusCode
-writeAttribute(UA_Server *server, const UA_WriteValue *value) {
-    return UA_Server_editNode(server, &server->adminSession, &value->nodeId,
-                              (UA_EditNodeCallback)copyAttributeIntoNode,
-                               /* casting away const qualifier because callback uses const anyway */
-                              (UA_WriteValue *)(uintptr_t)value);
-}
-
-UA_StatusCode
-UA_Server_write(UA_Server *server, const UA_WriteValue *value) {
-    UA_LOCK(server->serviceMutex);
-    UA_StatusCode retval = writeAttribute(server, value);
-    UA_UNLOCK(server->serviceMutex);
-    return retval;
-}
-
-UA_StatusCode
-writeWithWriteValue(UA_Server *server, const UA_NodeId *nodeId,
-                  const UA_AttributeId attributeId,
-                  const UA_DataType *attr_type,
-                  const void *attr) {
-    UA_WriteValue wvalue;
-    UA_WriteValue_init(&wvalue);
-    wvalue.nodeId = *nodeId;
-    wvalue.attributeId = attributeId;
-    wvalue.value.hasValue = true;
-    if(attr_type != &UA_TYPES[UA_TYPES_VARIANT]) {
-        /* hacked cast. the target WriteValue is used as const anyway */
-        UA_Variant_setScalar(&wvalue.value.value,
-                             (void*)(uintptr_t)attr, attr_type);
-    } else {
-        wvalue.value.value = *(const UA_Variant*)attr;
-    }
-    return writeAttribute(server, &wvalue);
-}
-
-/* Convenience function to be wrapped into inline functions */
-UA_StatusCode
-__UA_Server_write(UA_Server *server, const UA_NodeId *nodeId,
-                  const UA_AttributeId attributeId,
-                  const UA_DataType *attr_type,
-                  const void *attr) {
-    UA_LOCK(server->serviceMutex);
-    UA_StatusCode retval = writeWithWriteValue(server, nodeId, attributeId, attr_type, attr);
-    UA_UNLOCK(server->serviceMutex);
-    return retval;
-}
-
-#ifdef UA_ENABLE_HISTORIZING
-void
-Service_HistoryRead(UA_Server *server, UA_Session *session,
-                    const UA_HistoryReadRequest *request,
-                    UA_HistoryReadResponse *response) {
-    if(request->historyReadDetails.encoding != UA_EXTENSIONOBJECT_DECODED) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADNOTSUPPORTED;
-        return;
-    }
-
-    if(request->historyReadDetails.content.decoded.type != &UA_TYPES[UA_TYPES_READRAWMODIFIEDDETAILS]) {
-        /* TODO handle more request->historyReadDetails.content.decoded.type types */
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADHISTORYOPERATIONUNSUPPORTED;
-        return;
-    }
-
-    /* History read with ReadRawModifiedDetails */
-    UA_ReadRawModifiedDetails * details = (UA_ReadRawModifiedDetails*)
-        request->historyReadDetails.content.decoded.data;
-    if(details->isReadModified) {
-        // TODO add server->config.historyReadService.read_modified
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADHISTORYOPERATIONUNSUPPORTED;
-        return;
-    }
-
-    /* Something to do? */
-    if(request->nodesToReadSize == 0) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADNOTHINGTODO;
-        return;
-    }
-
-    /* Check if there are too many operations */
-    if(server->config.maxNodesPerRead != 0 &&
-       request->nodesToReadSize > server->config.maxNodesPerRead) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYOPERATIONS;
-        return;
-    }
-
-    /* The history database is not configured */
-    if(!server->config.historyDatabase.readRaw) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADHISTORYOPERATIONUNSUPPORTED;
-        return;
-    }
-
-    /* Allocate a temporary array to forward the result pointers to the
-     * backend */
-    UA_HistoryData ** historyData = (UA_HistoryData **)
-        UA_calloc(request->nodesToReadSize, sizeof(UA_HistoryData*));
-    if(!historyData) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
-        return;
-    }
-
-    /* Allocate the results array */
-    response->results = (UA_HistoryReadResult*)UA_Array_new(request->nodesToReadSize,
-                                                            &UA_TYPES[UA_TYPES_HISTORYREADRESULT]);
-    if(!response->results) {
-        UA_free(historyData);
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
-        return;
-    }
-    response->resultsSize = request->nodesToReadSize;
-
-    for(size_t i = 0; i < response->resultsSize; ++i) {
-        UA_HistoryData * data = UA_HistoryData_new();
-        response->results[i].historyData.encoding = UA_EXTENSIONOBJECT_DECODED;
-        response->results[i].historyData.content.decoded.type = &UA_TYPES[UA_TYPES_HISTORYDATA];
-        response->results[i].historyData.content.decoded.data = data;
-        historyData[i] = data;
-    }
-    UA_UNLOCK(server->serviceMutex);
-    server->config.historyDatabase.readRaw(server, server->config.historyDatabase.context,
-                                           &session->sessionId, session->sessionHandle,
-                                           &request->requestHeader, details,
-                                           request->timestampsToReturn,
-                                           request->releaseContinuationPoints,
-                                           request->nodesToReadSize, request->nodesToRead,
-                                           response, historyData);
-    UA_LOCK(server->serviceMutex);
-    UA_free(historyData);
-}
-
-void
-Service_HistoryUpdate(UA_Server *server, UA_Session *session,
-                    const UA_HistoryUpdateRequest *request,
-                    UA_HistoryUpdateResponse *response) {
-    response->resultsSize = request->historyUpdateDetailsSize;
-    response->results = (UA_HistoryUpdateResult*)UA_Array_new(response->resultsSize, &UA_TYPES[UA_TYPES_HISTORYUPDATERESULT]);
-    if (!response->results) {
-        response->resultsSize = 0;
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
-        return;
-    }
-    for (size_t i = 0; i < request->historyUpdateDetailsSize; ++i) {
-        UA_HistoryUpdateResult_init(&response->results[i]);
-        if(request->historyUpdateDetails[i].encoding != UA_EXTENSIONOBJECT_DECODED) {
-            response->results[i].statusCode = UA_STATUSCODE_BADNOTSUPPORTED;
-            continue;
-        }
-        if (request->historyUpdateDetails[i].content.decoded.type
-                == &UA_TYPES[UA_TYPES_UPDATEDATADETAILS]) {
-            if (server->config.historyDatabase.updateData) {
-                UA_UNLOCK(server->serviceMutex);
-                server->config.historyDatabase.updateData(server,
-                                                          server->config.historyDatabase.context,
-                                                          &session->sessionId, session->sessionHandle,
-                                                          &request->requestHeader,
-                                                          (UA_UpdateDataDetails*)request->historyUpdateDetails[i].content.decoded.data,
-                                                          &response->results[i]);
-                UA_LOCK(server->serviceMutex);
-            } else {
-                response->results[i].statusCode = UA_STATUSCODE_BADNOTSUPPORTED;
-            }
-            continue;
-        } else
-        if (request->historyUpdateDetails[i].content.decoded.type
-                == &UA_TYPES[UA_TYPES_DELETERAWMODIFIEDDETAILS]) {
-            if (server->config.historyDatabase.deleteRawModified) {
-                UA_UNLOCK(server->serviceMutex);
-                server->config.historyDatabase.deleteRawModified(server,
-                                                                 server->config.historyDatabase.context,
-                                                                 &session->sessionId, session->sessionHandle,
-                                                                 &request->requestHeader,
-                                                                 (UA_DeleteRawModifiedDetails*)request->historyUpdateDetails[i].content.decoded.data,
-                                                                 &response->results[i]);
-                UA_LOCK(server->serviceMutex);
-            } else {
-                response->results[i].statusCode = UA_STATUSCODE_BADNOTSUPPORTED;
-            }
-            continue;
-        } else {
-            response->results[i].statusCode = UA_STATUSCODE_BADNOTSUPPORTED;
-            continue;
-        }
-    }
-    response->responseHeader.serviceResult = UA_STATUSCODE_GOOD;
-}
-
-#endif
-
-UA_StatusCode UA_EXPORT
-UA_Server_writeObjectProperty(UA_Server *server, const UA_NodeId objectId,
-                              const UA_QualifiedName propertyName,
-                              const UA_Variant value) {
-    UA_RelativePathElement rpe;
-    UA_RelativePathElement_init(&rpe);
-    rpe.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY);
-    rpe.isInverse = false;
-    rpe.includeSubtypes = false;
-    rpe.targetName = propertyName;
-
-    UA_BrowsePath bp;
-    UA_BrowsePath_init(&bp);
-    bp.startingNode = objectId;
-    bp.relativePath.elementsSize = 1;
-    bp.relativePath.elements = &rpe;
-
-    UA_StatusCode retval;
-    UA_BrowsePathResult bpr = translateBrowsePathToNodeIds(server, &bp);
-    if(bpr.statusCode != UA_STATUSCODE_GOOD || bpr.targetsSize < 1) {
-        retval = bpr.statusCode;
-        UA_BrowsePathResult_deleteMembers(&bpr);
-        return retval;
-    }
-
-    retval = UA_Server_writeValue(server, bpr.targets[0].targetId.nodeId, value);
-
-    UA_BrowsePathResult_deleteMembers(&bpr);
-    return retval;
-}
-
-UA_StatusCode UA_EXPORT
-UA_Server_writeObjectProperty_scalar(UA_Server *server, const UA_NodeId objectId,
-                                     const UA_QualifiedName propertyName,
-                                     const void *value, const UA_DataType *type) {
-    UA_Variant var;
-    UA_Variant_init(&var);
-    UA_Variant_setScalar(&var, (void*)(uintptr_t)value, type);
-    return UA_Server_writeObjectProperty(server, objectId, propertyName, var);
-}
diff --git a/ext/open62541/src/server/ua_services_discovery.c b/ext/open62541/src/server/ua_services_discovery.c
deleted file mode 100644
index 9983375..0000000
--- a/ext/open62541/src/server/ua_services_discovery.c
+++ /dev/null
@@ -1,723 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014-2016 (c) Sten Grüner
- *    Copyright 2014, 2017 (c) Florian Palm
- *    Copyright 2016 (c) Oleksiy Vasylyev
- *    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) frax2222
- *    Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
- */
-
-#include "ua_server_internal.h"
-#include "ua_services.h"
-
-#ifdef UA_ENABLE_DISCOVERY
-
-#include "ua_client_internal.h"
-
-static UA_StatusCode
-setApplicationDescriptionFromRegisteredServer(const UA_FindServersRequest *request,
-                                              UA_ApplicationDescription *target,
-                                              const UA_RegisteredServer *registeredServer) {
-    UA_ApplicationDescription_init(target);
-    UA_StatusCode retval = UA_String_copy(&registeredServer->serverUri, &target->applicationUri);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    retval = UA_String_copy(&registeredServer->productUri, &target->productUri);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    // if the client requests a specific locale, select the corresponding server name
-    if(request->localeIdsSize) {
-        UA_Boolean appNameFound = false;
-        for(size_t i =0; i<request->localeIdsSize && !appNameFound; i++) {
-            for(size_t j =0; j<registeredServer->serverNamesSize; j++) {
-                if(UA_String_equal(&request->localeIds[i], &registeredServer->serverNames[j].locale)) {
-                    retval = UA_LocalizedText_copy(&registeredServer->serverNames[j],
-                                                   &target->applicationName);
-                    if(retval != UA_STATUSCODE_GOOD)
-                        return retval;
-                    appNameFound = true;
-                    break;
-                }
-            }
-        }
-
-        // server does not have the requested local, therefore we can select the
-        // most suitable one
-        if(!appNameFound && registeredServer->serverNamesSize) {
-            retval = UA_LocalizedText_copy(&registeredServer->serverNames[0],
-                                           &target->applicationName);
-            if(retval != UA_STATUSCODE_GOOD)
-                return retval;
-        }
-    } else if(registeredServer->serverNamesSize) {
-        // just take the first name
-        retval = UA_LocalizedText_copy(&registeredServer->serverNames[0], &target->applicationName);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-    }
-
-    target->applicationType = registeredServer->serverType;
-    retval = UA_String_copy(&registeredServer->gatewayServerUri, &target->gatewayServerUri);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    // TODO where do we get the discoveryProfileUri for application data?
-
-    target->discoveryUrlsSize = registeredServer->discoveryUrlsSize;
-    if(registeredServer->discoveryUrlsSize) {
-        size_t duSize = sizeof(UA_String) * registeredServer->discoveryUrlsSize;
-        target->discoveryUrls = (UA_String *)UA_malloc(duSize);
-        if(!target->discoveryUrls)
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        for(size_t i = 0; i < registeredServer->discoveryUrlsSize; i++) {
-            retval = UA_String_copy(&registeredServer->discoveryUrls[i], &target->discoveryUrls[i]);
-            if(retval != UA_STATUSCODE_GOOD)
-                return retval;
-        }
-    }
-
-    return retval;
-}
-#endif
-
-static UA_StatusCode
-setApplicationDescriptionFromServer(UA_ApplicationDescription *target, const UA_Server *server) {
-    /* Copy ApplicationDescription from the config */
-    UA_StatusCode result = UA_ApplicationDescription_copy(&server->config.applicationDescription, target);
-    if(result != UA_STATUSCODE_GOOD)
-        return result;
-
-    /* Add the discoveryUrls from the networklayers only if discoveryUrl
-     * not already present and to avoid redundancy */
-    if(!target->discoveryUrlsSize) {
-        size_t discSize = sizeof(UA_String) * (target->discoveryUrlsSize + server->config.networkLayersSize);
-        UA_String* disc = (UA_String *)UA_realloc(target->discoveryUrls, discSize);
-        if(!disc)
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        size_t existing = target->discoveryUrlsSize;
-        target->discoveryUrls = disc;
-        target->discoveryUrlsSize += server->config.networkLayersSize;
-
-        for(size_t i = 0; i < server->config.networkLayersSize; i++) {
-            UA_ServerNetworkLayer* nl = &server->config.networkLayers[i];
-            UA_String_copy(&nl->discoveryUrl, &target->discoveryUrls[existing + i]);
-        }
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-void Service_FindServers(UA_Server *server, UA_Session *session,
-                         const UA_FindServersRequest *request,
-                         UA_FindServersResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session, "Processing FindServersRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    /* Return the server itself? */
-    UA_Boolean foundSelf = false;
-    if(request->serverUrisSize) {
-        for(size_t i = 0; i < request->serverUrisSize; i++) {
-            if(UA_String_equal(&request->serverUris[i],
-                               &server->config.applicationDescription.applicationUri)) {
-                foundSelf = true;
-                break;
-            }
-        }
-    } else {
-        foundSelf = true;
-    }
-
-#ifndef UA_ENABLE_DISCOVERY
-    if(!foundSelf)
-        return;
-
-    UA_ApplicationDescription *ad = UA_ApplicationDescription_new();
-    if(!ad) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
-        return;
-    }
-
-    UA_StatusCode retval = setApplicationDescriptionFromServer(ad, server);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ApplicationDescription_delete(ad);
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
-        return;
-    }
-
-    response->servers = ad;
-    response->serversSize = 1;
-    return;
-
-#else
-
-    /* Temporarily store all the pointers which we found to avoid reiterating
-     * through the list */
-    size_t foundServersSize = 0;
-    UA_STACKARRAY(UA_RegisteredServer*, foundServers, server->discoveryManager.registeredServersSize+1);
-
-    registeredServer_list_entry* current;
-    LIST_FOREACH(current, &server->discoveryManager.registeredServers, pointers) {
-        if(request->serverUrisSize) {
-            /* If client only requested a specific set of servers */
-            for(size_t i = 0; i < request->serverUrisSize; i++) {
-                if(UA_String_equal(&current->registeredServer.serverUri, &request->serverUris[i])) {
-                    foundServers[foundServersSize] = &current->registeredServer;
-                    foundServersSize++;
-                    break;
-                }
-            }
-        } else {
-            /* Return all registered servers */
-            foundServers[foundServersSize] = &current->registeredServer;
-            foundServersSize++;
-        }
-    }
-
-    size_t allocSize = foundServersSize;
-    if(foundSelf)
-        allocSize++;
-
-    /* Nothing to do? */
-    if(allocSize == 0)
-        return;
-
-    /* Allocate memory */
-    response->servers = (UA_ApplicationDescription*)UA_Array_new(allocSize, &UA_TYPES[UA_TYPES_APPLICATIONDESCRIPTION]);
-    if(!response->servers) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
-        return;
-    }
-    response->serversSize = allocSize;
-
-    /* Copy into the response. TODO: Evaluate return codes */
-    size_t pos = 0;
-    if(foundSelf) {
-        setApplicationDescriptionFromServer(&response->servers[pos++], server);
-    }
-    for(size_t i = 0; i < foundServersSize; i++) {
-        setApplicationDescriptionFromRegisteredServer(request, &response->servers[pos++], foundServers[i]);
-    }
-
-#endif
-}
-
-void
-Service_GetEndpoints(UA_Server *server, UA_Session *session,
-                     const UA_GetEndpointsRequest *request,
-                     UA_GetEndpointsResponse *response) {
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    /* If the client expects to see a specific endpointurl, mirror it back. If
-       not, clone the endpoints with the discovery url of all networklayers. */
-    const UA_String *endpointUrl = &request->endpointUrl;
-    if(endpointUrl->length > 0) {
-        UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                             "Processing GetEndpointsRequest with endpointUrl "
-                             UA_PRINTF_STRING_FORMAT, UA_PRINTF_STRING_DATA(*endpointUrl));
-    } else {
-        UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                             "Processing GetEndpointsRequest with an empty endpointUrl");
-    }
-
-    /* test if the supported binary profile shall be returned */
-    size_t reSize = sizeof(UA_Boolean) * server->config.endpointsSize;
-    UA_STACKARRAY(UA_Boolean, relevant_endpoints, reSize);
-    memset(relevant_endpoints, 0, reSize);
-    size_t relevant_count = 0;
-    if(request->profileUrisSize == 0) {
-        for(size_t j = 0; j < server->config.endpointsSize; ++j)
-            relevant_endpoints[j] = true;
-        relevant_count = server->config.endpointsSize;
-    } else {
-        for(size_t j = 0; j < server->config.endpointsSize; ++j) {
-            for(size_t i = 0; i < request->profileUrisSize; ++i) {
-                if(!UA_String_equal(&request->profileUris[i],
-                                    &server->config.endpoints[j].transportProfileUri))
-                    continue;
-                relevant_endpoints[j] = true;
-                ++relevant_count;
-                break;
-            }
-        }
-    }
-
-    if(relevant_count == 0) {
-        response->endpointsSize = 0;
-        return;
-    }
-
-    /* Clone the endpoint for each networklayer? */
-    size_t clone_times = 1;
-    UA_Boolean nl_endpointurl = false;
-    if(endpointUrl->length == 0) {
-        clone_times = server->config.networkLayersSize;
-        nl_endpointurl = true;
-    }
-
-    response->endpoints =
-        (UA_EndpointDescription*)UA_Array_new(relevant_count * clone_times,
-                                              &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
-    if(!response->endpoints) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
-        return;
-    }
-    response->endpointsSize = relevant_count * clone_times;
-
-    size_t k = 0;
-    UA_StatusCode retval;
-    for(size_t i = 0; i < clone_times; ++i) {
-        if(nl_endpointurl)
-            endpointUrl = &server->config.networkLayers[i].discoveryUrl;
-        for(size_t j = 0; j < server->config.endpointsSize; ++j) {
-            if(!relevant_endpoints[j])
-                continue;
-            retval = UA_EndpointDescription_copy(&server->config.endpoints[j],
-                                                 &response->endpoints[k]);
-            if(retval != UA_STATUSCODE_GOOD)
-                goto error;
-            retval = UA_String_copy(endpointUrl, &response->endpoints[k].endpointUrl);
-            if(retval != UA_STATUSCODE_GOOD)
-                goto error;
-            ++k;
-        }
-    }
-
-    return;
-error:
-    response->responseHeader.serviceResult = retval;
-    UA_Array_delete(response->endpoints, response->endpointsSize,
-                    &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
-    response->endpoints = NULL;
-    response->endpointsSize = 0;
-}
-
-#ifdef UA_ENABLE_DISCOVERY
-
-static void
-process_RegisterServer(UA_Server *server, UA_Session *session,
-                       const UA_RequestHeader* requestHeader,
-                       const UA_RegisteredServer *requestServer,
-                       const size_t requestDiscoveryConfigurationSize,
-                       const UA_ExtensionObject *requestDiscoveryConfiguration,
-                       UA_ResponseHeader* responseHeader,
-                       size_t *responseConfigurationResultsSize,
-                       UA_StatusCode **responseConfigurationResults,
-                       size_t *responseDiagnosticInfosSize,
-                       UA_DiagnosticInfo *responseDiagnosticInfos) {
-    /* Find the server from the request in the registered list */
-    registeredServer_list_entry* current;
-    registeredServer_list_entry *registeredServer_entry = NULL;
-    LIST_FOREACH(current, &server->discoveryManager.registeredServers, pointers) {
-        if(UA_String_equal(&current->registeredServer.serverUri, &requestServer->serverUri)) {
-            registeredServer_entry = current;
-            break;
-        }
-    }
-
-    UA_MdnsDiscoveryConfiguration *mdnsConfig = NULL;
-
-    const UA_String* mdnsServerName = NULL;
-    if(requestDiscoveryConfigurationSize) {
-        *responseConfigurationResults =
-            (UA_StatusCode *)UA_Array_new(requestDiscoveryConfigurationSize,
-                                          &UA_TYPES[UA_TYPES_STATUSCODE]);
-        if(!(*responseConfigurationResults)) {
-            responseHeader->serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
-            return;
-        }
-        *responseConfigurationResultsSize = requestDiscoveryConfigurationSize;
-
-        for(size_t i = 0; i < requestDiscoveryConfigurationSize; i++) {
-            const UA_ExtensionObject *object = &requestDiscoveryConfiguration[i];
-            if(!mdnsConfig && (object->encoding == UA_EXTENSIONOBJECT_DECODED ||
-                               object->encoding == UA_EXTENSIONOBJECT_DECODED_NODELETE) &&
-               (object->content.decoded.type == &UA_TYPES[UA_TYPES_MDNSDISCOVERYCONFIGURATION])) {
-                mdnsConfig = (UA_MdnsDiscoveryConfiguration *)object->content.decoded.data;
-                mdnsServerName = &mdnsConfig->mdnsServerName;
-                (*responseConfigurationResults)[i] = UA_STATUSCODE_GOOD;
-            } else {
-                (*responseConfigurationResults)[i] = UA_STATUSCODE_BADNOTSUPPORTED;
-            }
-        }
-    }
-
-    if(!mdnsServerName && requestServer->serverNamesSize)
-        mdnsServerName = &requestServer->serverNames[0].text;
-
-    if(!mdnsServerName) {
-        responseHeader->serviceResult = UA_STATUSCODE_BADSERVERNAMEMISSING;
-        return;
-    }
-
-    if(requestServer->discoveryUrlsSize == 0) {
-        responseHeader->serviceResult = UA_STATUSCODE_BADDISCOVERYURLMISSING;
-        return;
-    }
-
-    if(requestServer->semaphoreFilePath.length) {
-#ifdef UA_ENABLE_DISCOVERY_SEMAPHORE
-        char* filePath = (char*)
-            UA_malloc(sizeof(char)*requestServer->semaphoreFilePath.length+1);
-        if(!filePath) {
-            UA_LOG_ERROR_SESSION(&server->config.logger, session,
-                                 "Cannot allocate memory for semaphore path. Out of memory.");
-            responseHeader->serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
-            return;
-        }
-        memcpy(filePath, requestServer->semaphoreFilePath.data, requestServer->semaphoreFilePath.length );
-        filePath[requestServer->semaphoreFilePath.length] = '\0';
-        if(!UA_fileExists( filePath )) {
-            responseHeader->serviceResult = UA_STATUSCODE_BADSEMPAHOREFILEMISSING;
-            UA_free(filePath);
-            return;
-        }
-        UA_free(filePath);
-#else
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_CLIENT,
-                       "Ignoring semaphore file path. open62541 not compiled "
-                       "with UA_ENABLE_DISCOVERY_SEMAPHORE=ON");
-#endif
-    }
-
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-    if(server->config.discovery.mdnsEnable) {
-        for(size_t i = 0; i < requestServer->discoveryUrlsSize; i++) {
-            /* create TXT if is online and first index, delete TXT if is offline and last index */
-            UA_Boolean updateTxt = (requestServer->isOnline && i==0) ||
-                (!requestServer->isOnline && i==requestServer->discoveryUrlsSize);
-            UA_Server_updateMdnsForDiscoveryUrl(server, mdnsServerName, mdnsConfig,
-                                                &requestServer->discoveryUrls[i],
-                                                requestServer->isOnline, updateTxt);
-        }
-    }
-#endif
-
-    if(!requestServer->isOnline) {
-        // server is shutting down. Remove it from the registered servers list
-        if(!registeredServer_entry) {
-            // server not found, show warning
-            UA_LOG_WARNING_SESSION(&server->config.logger, session,
-                                   "Could not unregister server %.*s. Not registered.",
-                                   (int)requestServer->serverUri.length, requestServer->serverUri.data);
-            responseHeader->serviceResult = UA_STATUSCODE_BADNOTHINGTODO;
-            return;
-        }
-
-        if(server->discoveryManager.registerServerCallback)
-            server->discoveryManager.
-                registerServerCallback(requestServer,
-                                       server->discoveryManager.registerServerCallbackData);
-
-        // server found, remove from list
-        LIST_REMOVE(registeredServer_entry, pointers);
-        UA_RegisteredServer_deleteMembers(&registeredServer_entry->registeredServer);
-#if UA_MULTITHREADING >= 200
-        UA_atomic_subSize(&server->discoveryManager.registeredServersSize, 1);
-        registeredServer_entry->delayedCleanup.callback = NULL; /* only free the structure */
-        UA_WorkQueue_enqueueDelayed(&server->workQueue, &registeredServer_entry->delayedCleanup);
-#else
-        UA_free(registeredServer_entry);
-        server->discoveryManager.registeredServersSize--;
-#endif
-        responseHeader->serviceResult = UA_STATUSCODE_GOOD;
-        return;
-    }
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(!registeredServer_entry) {
-        // server not yet registered, register it by adding it to the list
-        UA_LOG_DEBUG_SESSION(&server->config.logger, session, "Registering new server: %.*s",
-                             (int)requestServer->serverUri.length, requestServer->serverUri.data);
-
-        registeredServer_entry =
-            (registeredServer_list_entry *)UA_malloc(sizeof(registeredServer_list_entry));
-        if(!registeredServer_entry) {
-            responseHeader->serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
-            return;
-        }
-
-        LIST_INSERT_HEAD(&server->discoveryManager.registeredServers, registeredServer_entry, pointers);
-#if UA_MULTITHREADING >= 200
-        UA_atomic_addSize(&server->discoveryManager.registeredServersSize, 1);
-#else
-        server->discoveryManager.registeredServersSize++;
-#endif
-    } else {
-        UA_RegisteredServer_deleteMembers(&registeredServer_entry->registeredServer);
-    }
-
-    // Always call the callback, if it is set.
-    // Previously we only called it if it was a new register call. It may be the case that this endpoint
-    // registered before, then crashed, restarts and registeres again. In that case the entry is not deleted
-    // and the callback would not be called.
-    if(server->discoveryManager.registerServerCallback)
-        server->discoveryManager.
-            registerServerCallback(requestServer,
-                                   server->discoveryManager.registerServerCallbackData);
-
-    // copy the data from the request into the list
-    UA_RegisteredServer_copy(requestServer, &registeredServer_entry->registeredServer);
-    registeredServer_entry->lastSeen = UA_DateTime_nowMonotonic();
-    responseHeader->serviceResult = retval;
-}
-
-void Service_RegisterServer(UA_Server *server, UA_Session *session,
-                            const UA_RegisterServerRequest *request,
-                            UA_RegisterServerResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Processing RegisterServerRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-    process_RegisterServer(server, session, &request->requestHeader, &request->server, 0,
-                           NULL, &response->responseHeader, 0, NULL, 0, NULL);
-}
-
-void Service_RegisterServer2(UA_Server *server, UA_Session *session,
-                            const UA_RegisterServer2Request *request,
-                             UA_RegisterServer2Response *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Processing RegisterServer2Request");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-    process_RegisterServer(server, session, &request->requestHeader, &request->server,
-                           request->discoveryConfigurationSize, request->discoveryConfiguration,
-                           &response->responseHeader, &response->configurationResultsSize,
-                           &response->configurationResults, &response->diagnosticInfosSize,
-                           response->diagnosticInfos);
-}
-
-/* Cleanup server registration: If the semaphore file path is set, then it just
- * checks the existence of the file. When it is deleted, the registration is
- * removed. If there is no semaphore file, then the registration will be removed
- * if it is older than 60 minutes. */
-void UA_Discovery_cleanupTimedOut(UA_Server *server, UA_DateTime nowMonotonic) {
-    UA_DateTime timedOut = nowMonotonic;
-    // registration is timed out if lastSeen is older than 60 minutes (default
-    // value, can be modified by user).
-    if(server->config.discovery.cleanupTimeout)
-        timedOut -= server->config.discovery.cleanupTimeout*UA_DATETIME_SEC;
-
-    registeredServer_list_entry* current, *temp;
-    LIST_FOREACH_SAFE(current, &server->discoveryManager.registeredServers, pointers, temp) {
-        UA_Boolean semaphoreDeleted = false;
-
-#ifdef UA_ENABLE_DISCOVERY_SEMAPHORE
-        if(current->registeredServer.semaphoreFilePath.length) {
-            size_t fpSize = sizeof(char)*current->registeredServer.semaphoreFilePath.length+1;
-            // todo: malloc may fail: return a statuscode
-            char* filePath = (char *)UA_malloc(fpSize);
-            if(filePath) {
-                memcpy(filePath, current->registeredServer.semaphoreFilePath.data,
-                       current->registeredServer.semaphoreFilePath.length );
-                filePath[current->registeredServer.semaphoreFilePath.length] = '\0';
-                semaphoreDeleted = UA_fileExists(filePath) == false;
-                UA_free(filePath);
-            } else {
-                UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                             "Cannot check registration semaphore. Out of memory");
-            }
-        }
-#endif
-
-        if(semaphoreDeleted || (server->config.discovery.cleanupTimeout &&
-                                current->lastSeen < timedOut)) {
-            if(semaphoreDeleted) {
-                UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                            "Registration of server with URI %.*s is removed because "
-                            "the semaphore file '%.*s' was deleted.",
-                            (int)current->registeredServer.serverUri.length,
-                            current->registeredServer.serverUri.data,
-                            (int)current->registeredServer.semaphoreFilePath.length,
-                            current->registeredServer.semaphoreFilePath.data);
-            } else {
-                // cppcheck-suppress unreadVariable
-                UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                            "Registration of server with URI %.*s has timed out and is removed.",
-                            (int)current->registeredServer.serverUri.length,
-                            current->registeredServer.serverUri.data);
-            }
-            LIST_REMOVE(current, pointers);
-            UA_RegisteredServer_deleteMembers(&current->registeredServer);
-#if UA_MULTITHREADING >= 200
-            UA_atomic_subSize(&server->discoveryManager.registeredServersSize, 1);
-            current->delayedCleanup.callback = NULL; /* Only free the structure */
-            UA_WorkQueue_enqueueDelayed(&server->workQueue, &current->delayedCleanup);
-#else
-            UA_free(current);
-            server->discoveryManager.registeredServersSize--;
-#endif
-        }
-    }
-}
-
-/* Called by the UA_Server callback. The OPC UA specification says:
- *
- * > If an error occurs during registration (e.g. the Discovery Server is not running) then the Server
- * > must periodically re-attempt registration. The frequency of these attempts should start at 1 second
- * > but gradually increase until the registration frequency is the same as what it would be if not
- * > errors occurred. The recommended approach would double the period each attempt until reaching the maximum.
- *
- * We will do so by using the additional data parameter which holds information
- * if the next interval is default or if it is a repeated call. */
-static void
-periodicServerRegister(UA_Server *server, void *data) {
-    UA_assert(data != NULL);
-
-    struct PeriodicServerRegisterCallback *cb = (struct PeriodicServerRegisterCallback *)data;
-
-    UA_StatusCode retval = UA_Client_connect_noSession(cb->client, cb->discovery_server_url);
-    if (retval == UA_STATUSCODE_GOOD) {
-        /* Register
-           You can also use a semaphore file. That file must exist. When the file is
-           deleted, the server is automatically unregistered. The semaphore file has
-           to be accessible by the discovery server
-
-           UA_StatusCode retval = UA_Server_register_discovery(server,
-           "opc.tcp://localhost:4840", "/path/to/some/file");
-        */
-        retval = UA_Server_register_discovery(server, cb->client, NULL);
-    }
-    if (cb->client->state == UA_CLIENTSTATE_CONNECTED) {
-        UA_StatusCode retval1 = UA_Client_disconnect(cb->client);
-        if(retval1 != UA_STATUSCODE_GOOD) {
-            UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                         "Could not disconnect client from register server. StatusCode %s",
-                         UA_StatusCode_name(retval));
-        }
-    }
-    /* Registering failed */
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "Could not register server with discovery server. "
-                     "Is the discovery server started? StatusCode %s",
-                     UA_StatusCode_name(retval));
-
-        /* If the server was previously registered, retry in one second,
-         * else, double the previous interval */
-        UA_Double nextInterval = 1000.0;
-        if(!cb->registered)
-            nextInterval = cb->this_interval * 2;
-
-        /* The interval should be smaller than the default interval */
-        if(nextInterval > cb->default_interval)
-            nextInterval = cb->default_interval;
-
-        cb->this_interval = nextInterval;
-        UA_Server_changeRepeatedCallbackInterval(server, cb->id, nextInterval);
-        return;
-    }
-
-    /* Registering succeeded */
-    UA_LOG_DEBUG(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                 "Server successfully registered. Next periodical register will be in %d seconds",
-                 (int)(cb->default_interval/1000));
-
-    if(!cb->registered) {
-        retval = UA_Server_changeRepeatedCallbackInterval(server, cb->id, cb->default_interval);
-        /* If changing the interval fails, try again after the next registering */
-        if(retval == UA_STATUSCODE_GOOD)
-            cb->registered = true;
-    }
-}
-
-UA_StatusCode
-UA_Server_addPeriodicServerRegisterCallback(UA_Server *server,
-                                            struct UA_Client *client,
-                                            const char* discoveryServerUrl,
-                                            UA_Double intervalMs,
-                                            UA_Double delayFirstRegisterMs,
-                                            UA_UInt64 *periodicCallbackId) {
-
-    /* No valid server URL */
-    if(!discoveryServerUrl) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "No discovery server URL provided");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-
-    if (client->connection.state != UA_CONNECTION_CLOSED)
-        return UA_STATUSCODE_BADINVALIDSTATE;
-
-    /* check if we are already registering with the given discovery url and remove the old periodic call */
-    {
-        periodicServerRegisterCallback_entry *rs, *rs_tmp;
-        LIST_FOREACH_SAFE(rs, &server->discoveryManager.
-                          periodicServerRegisterCallbacks, pointers, rs_tmp) {
-            if(strcmp(rs->callback->discovery_server_url, discoveryServerUrl) == 0) {
-                UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                            "There is already a register callback for '%s' in place. Removing the older one.", discoveryServerUrl);
-                UA_Server_removeRepeatedCallback(server, rs->callback->id);
-                LIST_REMOVE(rs, pointers);
-                UA_free(rs->callback->discovery_server_url);
-                UA_free(rs->callback);
-                UA_free(rs);
-                break;
-            }
-        }
-    }
-
-    /* Allocate and initialize */
-    struct PeriodicServerRegisterCallback* cb =
-        (struct PeriodicServerRegisterCallback*)
-        UA_malloc(sizeof(struct PeriodicServerRegisterCallback));
-    if(!cb)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    /* Start repeating a failed register after 1s, then increase the delay. Set
-     * to 500ms, as the delay is doubled before changing the callback
-     * interval.*/
-    cb->this_interval = 500.0;
-    cb->default_interval = intervalMs;
-    cb->registered = false;
-    cb->client = client;
-    size_t len = strlen(discoveryServerUrl);
-    cb->discovery_server_url = (char*)UA_malloc(len+1);
-    if (!cb->discovery_server_url) {
-        UA_free(cb);
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-    memcpy(cb->discovery_server_url, discoveryServerUrl, len+1);
-
-    /* Add the callback */
-    UA_StatusCode retval =
-        UA_Server_addRepeatedCallback(server, periodicServerRegister,
-                                      cb, delayFirstRegisterMs, &cb->id);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "Could not create periodic job for server register. "
-                     "StatusCode %s", UA_StatusCode_name(retval));
-        UA_free(cb);
-        return retval;
-    }
-
-#ifndef __clang_analyzer__
-    // the analyzer reports on LIST_INSERT_HEAD a use after free false positive
-    periodicServerRegisterCallback_entry *newEntry =
-            (periodicServerRegisterCallback_entry *)UA_malloc(sizeof(periodicServerRegisterCallback_entry));
-    if(!newEntry) {
-        UA_Server_removeRepeatedCallback(server, cb->id);
-        UA_free(cb);
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-    newEntry->callback = cb;
-    LIST_INSERT_HEAD(&server->discoveryManager.periodicServerRegisterCallbacks, newEntry, pointers);
-#endif
-
-    if(periodicCallbackId)
-        *periodicCallbackId = cb->id;
-    return UA_STATUSCODE_GOOD;
-}
-
-void
-UA_Server_setRegisterServerCallback(UA_Server *server,
-                                    UA_Server_registerServerCallback cb,
-                                    void* data) {
-    server->discoveryManager.registerServerCallback = cb;
-    server->discoveryManager.registerServerCallbackData = data;
-}
-
-#endif /* UA_ENABLE_DISCOVERY */
diff --git a/ext/open62541/src/server/ua_services_discovery_multicast.c b/ext/open62541/src/server/ua_services_discovery_multicast.c
deleted file mode 100644
index d0f5934..0000000
--- a/ext/open62541/src/server/ua_services_discovery_multicast.c
+++ /dev/null
@@ -1,533 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Thomas Stalder, Blue Time Concept SA
- */
-
-#include "ua_server_internal.h"
-#include "ua_services.h"
-
-#if defined(UA_ENABLE_DISCOVERY) && defined(UA_ENABLE_DISCOVERY_MULTICAST)
-
-#if UA_MULTITHREADING >= 200
-
-static void *
-multicastWorkerLoop(UA_Server *server) {
-    struct timeval next_sleep = {.tv_sec = 0, .tv_usec = 0};
-    volatile UA_Boolean *running = &server->discoveryManager.mdnsRunning;
-    fd_set fds;
-
-    while(*running) {
-        FD_ZERO(&fds);
-        UA_fd_set(server->discoveryManager.mdnsSocket, &fds);
-        select(server->discoveryManager.mdnsSocket + 1, &fds, 0, 0, &next_sleep);
-
-        if(!*running)
-            break;
-
-        unsigned short retVal =
-            mdnsd_step(server->discoveryManager.mdnsDaemon, server->discoveryManager.mdnsSocket,
-                       FD_ISSET(server->discoveryManager.mdnsSocket, &fds), true, &next_sleep);
-        if(retVal == 1) {
-            UA_LOG_SOCKET_ERRNO_WRAP(
-                UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                          "Multicast error: Can not read from socket. %s", errno_str));
-            break;
-        } else if (retVal == 2) {
-            UA_LOG_SOCKET_ERRNO_WRAP(
-                UA_LOG_DEBUG(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                         "Multicast error: Can not write to socket. %s", errno_str));
-            break;
-        }
-    }
-    return NULL;
-}
-
-static UA_StatusCode
-multicastListenStart(UA_Server* server) {
-    int err = pthread_create(&server->discoveryManager.mdnsThread, NULL,
-                             (void* (*)(void*))multicastWorkerLoop, server);
-    if(err != 0) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "Multicast error: Can not create multicast thread.");
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-multicastListenStop(UA_Server* server) {
-    mdnsd_shutdown(server->discoveryManager.mdnsDaemon);
-    // wake up select
-    if (write(server->discoveryManager.mdnsSocket, "\0", 1)) {
-        // TODO: if makes no sense here?
-    }  // TODO: move to arch?
-    if (pthread_join(server->discoveryManager.mdnsThread, NULL)) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER, "Multicast error: Can not stop thread.");
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-    return UA_STATUSCODE_BADNOTIMPLEMENTED;
-}
-
-# endif /* UA_MULTITHREADING */
-
-static UA_StatusCode
-addMdnsRecordForNetworkLayer(UA_Server *server, const UA_String *appName,
-                             const UA_ServerNetworkLayer* nl) {
-    UA_String hostname = UA_STRING_NULL;
-    UA_UInt16 port = 4840;
-    UA_String path = UA_STRING_NULL;
-    UA_StatusCode retval = UA_parseEndpointUrl(&nl->discoveryUrl, &hostname,
-                                               &port, &path);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_NETWORK,
-                       "Server url is invalid: %.*s",
-                       (int)nl->discoveryUrl.length, nl->discoveryUrl.data);
-        return retval;
-    }
-
-    retval = UA_Discovery_addRecord(server, appName, &hostname, port,
-                                    &path, UA_DISCOVERY_TCP, true,
-                                    server->config.discovery.mdns.serverCapabilities,
-                                    server->config.discovery.mdns.serverCapabilitiesSize);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_NETWORK,
-                       "Cannot add mDNS Record: %s",
-                       UA_StatusCode_name(retval));
-        return retval;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-void startMulticastDiscoveryServer(UA_Server *server) {
-    UA_String *appName = &server->config.discovery.mdns.mdnsServerName;
-    for(size_t i = 0; i < server->config.networkLayersSize; i++)
-        addMdnsRecordForNetworkLayer(server, appName, &server->config.networkLayers[i]);
-
-    /* find any other server on the net */
-    UA_Discovery_multicastQuery(server);
-
-#if UA_MULTITHREADING >= 200
-    multicastListenStart(server);
-# endif
-}
-
-void
-stopMulticastDiscoveryServer(UA_Server *server) {
-    if (!server->discoveryManager.mdnsDaemon)
-        return;
-
-    char hostname[256];
-    if(UA_gethostname(hostname, 255) == 0) {
-        UA_String hnString = UA_STRING(hostname);
-        UA_Discovery_removeRecord(server, &server->config.discovery.mdns.mdnsServerName,
-                                  &hnString, 4840, true);
-    } else {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "Could not get hostname for multicast discovery.");
-    }
-
-#if UA_MULTITHREADING >= 200
-    multicastListenStop(server);
-# else
-    // send out last package with TTL = 0
-    iterateMulticastDiscoveryServer(server, NULL, false);
-# endif
-}
-
-/* All filter criteria must be fulfilled */
-static UA_Boolean
-filterServerRecord(size_t serverCapabilityFilterSize, UA_String *serverCapabilityFilter,
-                   serverOnNetwork_list_entry* current) {
-    for(size_t i = 0; i < serverCapabilityFilterSize; i++) {
-        for(size_t j = 0; j < current->serverOnNetwork.serverCapabilitiesSize; j++)
-            if(!UA_String_equal(&serverCapabilityFilter[i],
-                                &current->serverOnNetwork.serverCapabilities[j]))
-                return false;
-    }
-    return true;
-}
-
-void Service_FindServersOnNetwork(UA_Server *server, UA_Session *session,
-                                  const UA_FindServersOnNetworkRequest *request,
-                                  UA_FindServersOnNetworkResponse *response) {
-    if (!server->config.discovery.mdnsEnable) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADNOTIMPLEMENTED;
-        return;
-    }
-
-    /* Set LastCounterResetTime */
-    UA_DateTime_copy(&server->discoveryManager.serverOnNetworkRecordIdLastReset,
-                     &response->lastCounterResetTime);
-
-    /* Compute the max number of records to return */
-    UA_UInt32 recordCount = 0;
-    if(request->startingRecordId < server->discoveryManager.serverOnNetworkRecordIdCounter)
-        recordCount = server->discoveryManager.serverOnNetworkRecordIdCounter -
-            request->startingRecordId;
-    if(request->maxRecordsToReturn && recordCount > request->maxRecordsToReturn)
-        recordCount = UA_MIN(recordCount, request->maxRecordsToReturn);
-    if(recordCount == 0) {
-        response->serversSize = 0;
-        return;
-    }
-
-    /* Iterate over all records and add to filtered list */
-    UA_UInt32 filteredCount = 0;
-    UA_STACKARRAY(UA_ServerOnNetwork*, filtered, recordCount);
-    serverOnNetwork_list_entry* current;
-    LIST_FOREACH(current, &server->discoveryManager.serverOnNetwork, pointers) {
-        if(filteredCount >= recordCount)
-            break;
-        if(current->serverOnNetwork.recordId < request->startingRecordId)
-            continue;
-        if(!filterServerRecord(request->serverCapabilityFilterSize,
-                               request->serverCapabilityFilter, current))
-            continue;
-        filtered[filteredCount++] = &current->serverOnNetwork;
-    }
-
-    if(filteredCount == 0)
-        return;
-
-    /* Allocate the array for the response */
-    response->servers =
-        (UA_ServerOnNetwork*)UA_malloc(sizeof(UA_ServerOnNetwork)*filteredCount);
-    if(!response->servers) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
-        return;
-    }
-    response->serversSize = filteredCount;
-
-    /* Copy the server names */
-    for(size_t i = 0; i < filteredCount; i++)
-        UA_ServerOnNetwork_copy(filtered[i], &response->servers[filteredCount-i-1]);
-}
-
-void
-UA_Server_updateMdnsForDiscoveryUrl(UA_Server *server, const UA_String *serverName,
-                                    const UA_MdnsDiscoveryConfiguration *mdnsConfig,
-                                    const UA_String *discoveryUrl,
-                                    UA_Boolean isOnline, UA_Boolean updateTxt) {
-    UA_String hostname = UA_STRING_NULL;
-    UA_UInt16 port = 4840;
-    UA_String path = UA_STRING_NULL;
-    UA_StatusCode retval = UA_parseEndpointUrl(discoveryUrl, &hostname, &port, &path);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_NETWORK,
-                       "Server url invalid: %.*s",
-                       (int)discoveryUrl->length, discoveryUrl->data);
-        return;
-    }
-
-    if(!isOnline) {
-        UA_StatusCode removeRetval =
-                UA_Discovery_removeRecord(server, serverName, &hostname,
-                                          port, updateTxt);
-        if(removeRetval != UA_STATUSCODE_GOOD)
-            UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                           "Could not remove mDNS record for hostname %.*s.",
-                           (int)serverName->length, serverName->data);
-        return;
-    }
-
-    UA_String *capabilities = NULL;
-    size_t capabilitiesSize = 0;
-    if(mdnsConfig) {
-        capabilities = mdnsConfig->serverCapabilities;
-        capabilitiesSize = mdnsConfig->serverCapabilitiesSize;
-    }
-
-    UA_StatusCode addRetval =
-        UA_Discovery_addRecord(server, serverName, &hostname,
-                               port, &path, UA_DISCOVERY_TCP, updateTxt,
-                               capabilities, capabilitiesSize);
-    if(addRetval != UA_STATUSCODE_GOOD)
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                       "Could not add mDNS record for hostname %.*s.",
-                       (int)serverName->length, serverName->data);
-}
-
-void
-UA_Server_setServerOnNetworkCallback(UA_Server *server,
-                                     UA_Server_serverOnNetworkCallback cb,
-                                     void* data) {
-    server->discoveryManager.serverOnNetworkCallback = cb;
-    server->discoveryManager.serverOnNetworkCallbackData = data;
-}
-
-static void
-UA_Discovery_multicastConflict(char *name, int type, void *arg) {
-    // cppcheck-suppress unreadVariable
-    UA_Server *server = (UA_Server*) arg;
-    UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                 "Multicast DNS name conflict detected: "
-                 "'%s' for type %d", name, type);
-}
-
-/* Create a service domain with the format [servername]-[hostname]._opcua-tcp._tcp.local. */
-static void
-createFullServiceDomain(char *outServiceDomain, size_t maxLen,
-                        const UA_String *servername, const UA_String *hostname) {
-    size_t hostnameLen = hostname->length;
-    size_t servernameLen = servername->length;
-
-    maxLen -= 24; /* the length we have remaining before the opc ua postfix and
-                   * the trailing zero */
-
-    /* Can we use hostname and servername with full length? */
-    if(hostnameLen + servernameLen + 1 > maxLen) {
-        if(servernameLen + 2 > maxLen) {
-            servernameLen = maxLen;
-            hostnameLen = 0;
-        } else {
-            hostnameLen = maxLen - servernameLen - 1;
-        }
-    }
-
-    size_t offset = 0;
-    if (hostnameLen > 0) {
-        UA_snprintf(outServiceDomain, maxLen + 1, "%.*s-%.*s",
-                    (int) servernameLen, (char *) servername->data,
-                    (int) hostnameLen, (char *) hostname->data);
-        offset = servernameLen + hostnameLen + 1;
-    }
-    else {
-        UA_snprintf(outServiceDomain, maxLen + 1, "%.*s",
-                    (int) servernameLen, (char *) servername->data);
-        offset = servernameLen;
-    }
-    UA_snprintf(&outServiceDomain[offset], 24, "._opcua-tcp._tcp.local.");
-}
-
-/* Check if mDNS already has an entry for given hostname and port combination */
-static UA_Boolean
-UA_Discovery_recordExists(UA_Server* server, const char* fullServiceDomain,
-                          unsigned short port, const UA_DiscoveryProtocol protocol) {
-    // [servername]-[hostname]._opcua-tcp._tcp.local. 86400 IN SRV 0 5 port [hostname].
-    mdns_record_t *r  = mdnsd_get_published(server->discoveryManager.mdnsDaemon, fullServiceDomain);
-    while(r) {
-        const mdns_answer_t *data = mdnsd_record_data(r);
-        if(data->type == QTYPE_SRV && (port == 0 || data->srv.port == port))
-            return true;
-        r = mdnsd_record_next(r);
-    }
-    return false;
-}
-
-static int
-discovery_multicastQueryAnswer(mdns_answer_t *a, void *arg) {
-    UA_Server *server = (UA_Server*) arg;
-    if(a->type != QTYPE_PTR)
-        return 0;
-
-    if(a->rdname == NULL)
-        return 0;
-
-    /* Skip, if we already know about this server */
-    UA_Boolean exists =
-        UA_Discovery_recordExists(server, a->rdname, 0, UA_DISCOVERY_TCP);
-    if(exists == true)
-        return 0;
-
-    if(mdnsd_has_query(server->discoveryManager.mdnsDaemon, a->rdname))
-        return 0;
-
-    UA_LOG_DEBUG(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                 "mDNS send query for: %s SRV&TXT %s", a->name, a->rdname);
-
-    mdnsd_query(server->discoveryManager.mdnsDaemon, a->rdname, QTYPE_SRV,
-                discovery_multicastQueryAnswer, server);
-    mdnsd_query(server->discoveryManager.mdnsDaemon, a->rdname, QTYPE_TXT,
-                discovery_multicastQueryAnswer, server);
-    return 0;
-}
-
-UA_StatusCode
-UA_Discovery_multicastQuery(UA_Server* server) {
-    mdnsd_query(server->discoveryManager.mdnsDaemon, "_opcua-tcp._tcp.local.",
-                QTYPE_PTR,discovery_multicastQueryAnswer, server);
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_Discovery_addRecord(UA_Server *server, const UA_String *servername,
-                       const UA_String *hostname, UA_UInt16 port,
-                       const UA_String *path, const UA_DiscoveryProtocol protocol,
-                       UA_Boolean createTxt, const UA_String* capabilites,
-                       const size_t capabilitiesSize) {
-    // we assume that the hostname is not an IP address, but a valid domain name
-    // It is required by the OPC UA spec (see Part 12, DiscoveryURL to DNS SRV mapping)
-    // to always use the hostname instead of the IP address
-
-    if(capabilitiesSize > 0 && !capabilites)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-
-    size_t hostnameLen = hostname->length;
-    size_t servernameLen = servername->length;
-    if(hostnameLen == 0 || servernameLen == 0)
-        return UA_STATUSCODE_BADOUTOFRANGE;
-
-    // use a limit for the hostname length to make sure full string fits into 63
-    // chars (limited by DNS spec)
-    if(hostnameLen+servernameLen + 1 > 63) { // include dash between servername-hostname
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                       "Multicast DNS: Combination of hostname+servername exceeds "
-                       "maximum of 62 chars. It will be truncated.");
-    } else if(hostnameLen > 63) {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                       "Multicast DNS: Hostname length exceeds maximum of 63 chars. "
-                       "It will be truncated.");
-    }
-
-    if(!server->discoveryManager.mdnsMainSrvAdded) {
-        mdns_record_t *r =
-            mdnsd_shared(server->discoveryManager.mdnsDaemon, "_services._dns-sd._udp.local.",
-                         QTYPE_PTR, 600);
-        mdnsd_set_host(server->discoveryManager.mdnsDaemon, r, "_opcua-tcp._tcp.local.");
-        server->discoveryManager.mdnsMainSrvAdded = true;
-    }
-
-    // [servername]-[hostname]._opcua-tcp._tcp.local.
-    char fullServiceDomain[63+24];
-    createFullServiceDomain(fullServiceDomain, 63+24, servername, hostname);
-
-    UA_Boolean exists = UA_Discovery_recordExists(server, fullServiceDomain, port, protocol);
-    if(exists == true)
-        return UA_STATUSCODE_GOOD;
-
-    UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                "Multicast DNS: add record for domain: %s", fullServiceDomain);
-
-    // _services._dns-sd._udp.local. PTR _opcua-tcp._tcp.local
-
-    // check if there is already a PTR entry for the given service.
-
-    // _opcua-tcp._tcp.local. PTR [servername]-[hostname]._opcua-tcp._tcp.local.
-    mdns_record_t *r = mdns_find_record(server->discoveryManager.mdnsDaemon, QTYPE_PTR,
-                                        "_opcua-tcp._tcp.local.", fullServiceDomain);
-    if(!r) {
-        r = mdnsd_shared(server->discoveryManager.mdnsDaemon, "_opcua-tcp._tcp.local.", QTYPE_PTR, 600);
-        mdnsd_set_host(server->discoveryManager.mdnsDaemon, r, fullServiceDomain);
-    }
-
-    /* The first 63 characters of the hostname (or less) */
-    size_t maxHostnameLen = UA_MIN(hostnameLen, 63);
-    char localDomain[65];
-    memcpy(localDomain, hostname->data, maxHostnameLen);
-    localDomain[maxHostnameLen] = '.';
-    localDomain[maxHostnameLen+1] = '\0';
-
-    // [servername]-[hostname]._opcua-tcp._tcp.local. 86400 IN SRV 0 5 port [hostname].
-    r = mdnsd_unique(server->discoveryManager.mdnsDaemon, fullServiceDomain, QTYPE_SRV, 600,
-                     UA_Discovery_multicastConflict, server);
-    mdnsd_set_srv(server->discoveryManager.mdnsDaemon, r, 0, 0, port, localDomain);
-
-    // A/AAAA record for all ip addresses.
-    // [servername]-[hostname]._opcua-tcp._tcp.local. A [ip].
-    // [hostname]. A [ip].
-    mdns_set_address_record(server, fullServiceDomain, localDomain);
-
-    // TXT record: [servername]-[hostname]._opcua-tcp._tcp.local. TXT path=/ caps=NA,DA,...
-    UA_STACKARRAY(char, pathChars, path->length + 1);
-    if(createTxt) {
-        if(path->length > 0)
-            memcpy(pathChars, path->data, path->length);
-        pathChars[path->length] = 0;
-        mdns_create_txt(server, fullServiceDomain, pathChars, capabilites,
-                        capabilitiesSize, UA_Discovery_multicastConflict);
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_Discovery_removeRecord(UA_Server *server, const UA_String *servername,
-                          const UA_String *hostname, UA_UInt16 port,
-                          UA_Boolean removeTxt) {
-    // use a limit for the hostname length to make sure full string fits into 63
-    // chars (limited by DNS spec)
-    size_t hostnameLen = hostname->length;
-    size_t servernameLen = servername->length;
-    if(hostnameLen == 0 || servernameLen == 0)
-        return UA_STATUSCODE_BADOUTOFRANGE;
-
-    if(hostnameLen+servernameLen+1 > 63) { // include dash between servername-hostname
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                       "Multicast DNS: Combination of hostname+servername exceeds "
-                       "maximum of 62 chars. It will be truncated.");
-    }
-
-    // [servername]-[hostname]._opcua-tcp._tcp.local.
-    char fullServiceDomain[63 + 24];
-    createFullServiceDomain(fullServiceDomain, 63+24, servername, hostname);
-
-    UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                "Multicast DNS: remove record for domain: %s", fullServiceDomain);
-
-    // _opcua-tcp._tcp.local. PTR [servername]-[hostname]._opcua-tcp._tcp.local.
-    mdns_record_t *r = mdns_find_record(server->discoveryManager.mdnsDaemon, QTYPE_PTR,
-                                        "_opcua-tcp._tcp.local.", fullServiceDomain);
-    if(!r) {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                       "Multicast DNS: could not remove record. "
-                       "PTR Record not found for domain: %s", fullServiceDomain);
-        return UA_STATUSCODE_BADNOTHINGTODO;
-    }
-    mdnsd_done(server->discoveryManager.mdnsDaemon, r);
-
-    // looks for [servername]-[hostname]._opcua-tcp._tcp.local. 86400 IN SRV 0 5 port hostname.local.
-    // and TXT record: [servername]-[hostname]._opcua-tcp._tcp.local. TXT path=/ caps=NA,DA,...
-    // and A record: [servername]-[hostname]._opcua-tcp._tcp.local. A [ip]
-    mdns_record_t *r2 = mdnsd_get_published(server->discoveryManager.mdnsDaemon, fullServiceDomain);
-    if(!r2) {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                       "Multicast DNS: could not remove record. Record not "
-                       "found for domain: %s", fullServiceDomain);
-        return UA_STATUSCODE_BADNOTHINGTODO;
-    }
-
-    while(r2) {
-        const mdns_answer_t *data = mdnsd_record_data(r2);
-        mdns_record_t *next = mdnsd_record_next(r2);
-        if((removeTxt && data->type == QTYPE_TXT) ||
-           (removeTxt && data->type == QTYPE_A) ||
-           data->srv.port == port) {
-            mdnsd_done(server->discoveryManager.mdnsDaemon, r2);
-        }
-        r2 = next;
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-iterateMulticastDiscoveryServer(UA_Server* server, UA_DateTime *nextRepeat,
-                                UA_Boolean processIn) {
-    struct timeval next_sleep = { 0, 0 };
-    unsigned short retval = mdnsd_step(server->discoveryManager.mdnsDaemon,
-                                       (int)server->discoveryManager.mdnsSocket,
-                                       processIn, true, &next_sleep);
-    if(retval == 1) {
-        UA_LOG_SOCKET_ERRNO_WRAP(
-               UA_LOG_DEBUG(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "Multicast error: Can not read from socket. %s", errno_str));
-        return UA_STATUSCODE_BADNOCOMMUNICATION;
-    } else if(retval == 2) {
-        UA_LOG_SOCKET_ERRNO_WRAP(
-                UA_LOG_DEBUG(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                     "Multicast error: Can not write to socket. %s", errno_str));
-        return UA_STATUSCODE_BADNOCOMMUNICATION;
-    }
-
-    if(nextRepeat)
-        *nextRepeat = UA_DateTime_now() +
-            (UA_DateTime)((next_sleep.tv_sec * UA_DATETIME_SEC) +
-                          (next_sleep.tv_usec * UA_DATETIME_USEC));
-    return UA_STATUSCODE_GOOD;
-}
-
-#endif /* defined(UA_ENABLE_DISCOVERY) && defined(UA_ENABLE_DISCOVERY_MULTICAST) */
diff --git a/ext/open62541/src/server/ua_services_method.c b/ext/open62541/src/server/ua_services_method.c
deleted file mode 100644
index 49cc97c..0000000
--- a/ext/open62541/src/server/ua_services_method.c
+++ /dev/null
@@ -1,290 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015-2017 (c) Florian Palm
- *    Copyright 2015-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2016 (c) LEvertz
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Julian Grothoff
- */
-
-#include "ua_services.h"
-#include "ua_server_internal.h"
-
-#ifdef UA_ENABLE_METHODCALLS /* conditional compilation */
-
-static const UA_VariableNode *
-getArgumentsVariableNode(UA_Server *server, const UA_MethodNode *ofMethod,
-                         UA_String withBrowseName) {
-    UA_NodeId hasProperty = UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY);
-    for(size_t i = 0; i < ofMethod->referencesSize; ++i) {
-        UA_NodeReferenceKind *rk = &ofMethod->references[i];
-
-        if(rk->isInverse != false)
-            continue;
-
-        if(!UA_NodeId_equal(&hasProperty, &rk->referenceTypeId))
-            continue;
-
-        for(size_t j = 0; j < rk->targetIdsSize; ++j) {
-            const UA_Node *refTarget =
-                UA_Nodestore_getNode(server->nsCtx, &rk->targetIds[j].nodeId);
-            if(!refTarget)
-                continue;
-            if(refTarget->nodeClass == UA_NODECLASS_VARIABLE &&
-               refTarget->browseName.namespaceIndex == 0 &&
-               UA_String_equal(&withBrowseName, &refTarget->browseName.name)) {
-                return (const UA_VariableNode*)refTarget;
-            }
-            UA_Nodestore_releaseNode(server->nsCtx, refTarget);
-        }
-    }
-    return NULL;
-}
-
-/* inputArgumentResults has the length request->inputArgumentsSize */
-static UA_StatusCode
-typeCheckArguments(UA_Server *server, UA_Session *session,
-                   const UA_VariableNode *argRequirements, size_t argsSize,
-                   UA_Variant *args, UA_StatusCode *inputArgumentResults) {
-    /* Verify that we have a Variant containing UA_Argument (scalar or array) in
-     * the "InputArguments" node */
-    if(argRequirements->valueSource != UA_VALUESOURCE_DATA)
-        return UA_STATUSCODE_BADINTERNALERROR;
-    if(!argRequirements->value.data.value.hasValue)
-        return UA_STATUSCODE_BADINTERNALERROR;
-    if(argRequirements->value.data.value.value.type != &UA_TYPES[UA_TYPES_ARGUMENT])
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Verify the number of arguments. A scalar argument value is interpreted as
-     * an array of length 1. */
-    size_t argReqsSize = argRequirements->value.data.value.value.arrayLength;
-    if(UA_Variant_isScalar(&argRequirements->value.data.value.value))
-        argReqsSize = 1;
-    if(argReqsSize > argsSize)
-        return UA_STATUSCODE_BADARGUMENTSMISSING;
-    if(argReqsSize < argsSize)
-        return UA_STATUSCODE_BADTOOMANYARGUMENTS;
-
-    /* Type-check every argument against the definition */
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    UA_Argument *argReqs = (UA_Argument*)argRequirements->value.data.value.value.data;
-    for(size_t i = 0; i < argReqsSize; ++i) {
-        if(!compatibleValue(server, session, &argReqs[i].dataType, argReqs[i].valueRank,
-                            argReqs[i].arrayDimensionsSize, argReqs[i].arrayDimensions,
-                            &args[i], NULL)) {
-            inputArgumentResults[i] = UA_STATUSCODE_BADTYPEMISMATCH;
-            retval = UA_STATUSCODE_BADINVALIDARGUMENT;
-        }
-    }
-    return retval;
-}
-
-/* inputArgumentResults has the length request->inputArgumentsSize */
-static UA_StatusCode
-validMethodArguments(UA_Server *server, UA_Session *session, const UA_MethodNode *method,
-                     const UA_CallMethodRequest *request,
-                     UA_StatusCode *inputArgumentResults) {
-    /* Get the input arguments node */
-    const UA_VariableNode *inputArguments =
-        getArgumentsVariableNode(server, method, UA_STRING("InputArguments"));
-    if(!inputArguments) {
-        if(request->inputArgumentsSize > 0)
-            return UA_STATUSCODE_BADTOOMANYARGUMENTS;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* Verify the request */
-    UA_StatusCode retval = typeCheckArguments(server, session, inputArguments,
-                                              request->inputArgumentsSize,
-                                              request->inputArguments,
-                                              inputArgumentResults);
-
-    /* Release the input arguments node */
-    UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node*)inputArguments);
-    return retval;
-}
-
-static const UA_NodeId hasComponentNodeId = {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_HASCOMPONENT}};
-static const UA_NodeId hasSubTypeNodeId = {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_HASSUBTYPE}};
-
-static void
-callWithMethodAndObject(UA_Server *server, UA_Session *session,
-                        const UA_CallMethodRequest *request, UA_CallMethodResult *result,
-                        const UA_MethodNode *method, const UA_ObjectNode *object) {
-    /* Verify the object's NodeClass */
-    if(object->nodeClass != UA_NODECLASS_OBJECT &&
-       object->nodeClass != UA_NODECLASS_OBJECTTYPE) {
-        result->statusCode = UA_STATUSCODE_BADNODECLASSINVALID;
-        return;
-    }
-
-    /* Verify the method's NodeClass */
-    if(method->nodeClass != UA_NODECLASS_METHOD) {
-        result->statusCode = UA_STATUSCODE_BADNODECLASSINVALID;
-        return;
-    }
-
-    /* Is there a method to execute? */
-    if(!method->method) {
-        result->statusCode = UA_STATUSCODE_BADINTERNALERROR;
-        return;
-    }
-
-    /* Verify method/object relations. Object must have a hasComponent or a
-     * subtype of hasComponent reference to the method node. Therefore, check
-     * every reference between the parent object and the method node if there is
-     * a hasComponent (or subtype) reference */
-    UA_Boolean found = false;
-    for(size_t i = 0; i < object->referencesSize && !found; ++i) {
-        UA_NodeReferenceKind *rk = &object->references[i];
-        if(rk->isInverse)
-            continue;
-        if(!isNodeInTree(server->nsCtx, &rk->referenceTypeId,
-                         &hasComponentNodeId, &hasSubTypeNodeId, 1))
-            continue;
-        for(size_t j = 0; j < rk->targetIdsSize; ++j) {
-            if(UA_NodeId_equal(&rk->targetIds[j].nodeId, &request->methodId)) {
-                found = true;
-                break;
-            }
-        }
-    }
-    if(!found) {
-        result->statusCode = UA_STATUSCODE_BADMETHODINVALID;
-        return;
-    }
-
-    /* Verify access rights */
-    UA_Boolean executable = method->executable;
-    if(session != &server->adminSession) {
-        UA_UNLOCK(server->serviceMutex);
-        executable = executable &&
-                     server->config.accessControl.getUserExecutableOnObject(server,
-                                                                            &server->config.accessControl, &session->sessionId,
-                                                                            session->sessionHandle, &request->methodId, method->context,
-                                                                            &request->objectId, object->context);
-        UA_LOCK(server->serviceMutex);
-    }
-
-    if(!executable) {
-        result->statusCode = UA_STATUSCODE_BADNOTEXECUTABLE;
-        return;
-    }
-
-    /* Allocate the inputArgumentResults array */
-    result->inputArgumentResults = (UA_StatusCode*)
-        UA_Array_new(request->inputArgumentsSize, &UA_TYPES[UA_TYPES_STATUSCODE]);
-    if(!result->inputArgumentResults) {
-        result->statusCode = UA_STATUSCODE_BADOUTOFMEMORY;
-        return;
-    }
-    result->inputArgumentResultsSize = request->inputArgumentsSize;
-
-    /* Verify Input Arguments */
-    result->statusCode = validMethodArguments(server, session, method, request, result->inputArgumentResults);
-
-    /* Return inputArgumentResults only for BADINVALIDARGUMENT */
-    if(result->statusCode != UA_STATUSCODE_BADINVALIDARGUMENT) {
-        UA_Array_delete(result->inputArgumentResults, result->inputArgumentResultsSize,
-                        &UA_TYPES[UA_TYPES_STATUSCODE]);
-        result->inputArgumentResults = NULL;
-        result->inputArgumentResultsSize = 0;
-    }
-
-    /* Error during type-checking? */
-    if(result->statusCode != UA_STATUSCODE_GOOD)
-        return;
-
-    /* Get the output arguments node */
-    const UA_VariableNode *outputArguments =
-        getArgumentsVariableNode(server, method, UA_STRING("OutputArguments"));
-
-    /* Allocate the output arguments array */
-    size_t outputArgsSize = 0;
-    if(outputArguments)
-        outputArgsSize = outputArguments->value.data.value.value.arrayLength;
-    result->outputArguments = (UA_Variant*)
-        UA_Array_new(outputArgsSize, &UA_TYPES[UA_TYPES_VARIANT]);
-    if(!result->outputArguments) {
-        result->statusCode = UA_STATUSCODE_BADOUTOFMEMORY;
-        return;
-    }
-    result->outputArgumentsSize = outputArgsSize;
-
-    /* Release the output arguments node */
-    UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node*)outputArguments);
-
-    UA_UNLOCK(server->serviceMutex);
-    /* Call the method */
-    result->statusCode = method->method(server, &session->sessionId, session->sessionHandle,
-                                        &method->nodeId, method->context,
-                                        &object->nodeId, object->context,
-                                        request->inputArgumentsSize, request->inputArguments,
-                                        result->outputArgumentsSize, result->outputArguments);
-    UA_LOCK(server->serviceMutex);
-    /* TODO: Verify Output matches the argument definition */
-}
-
-static void
-Operation_CallMethod(UA_Server *server, UA_Session *session, void *context,
-                     const UA_CallMethodRequest *request, UA_CallMethodResult *result) {
-    /* Get the method node */
-    const UA_MethodNode *method = (const UA_MethodNode*)
-        UA_Nodestore_getNode(server->nsCtx, &request->methodId);
-    if(!method) {
-        result->statusCode = UA_STATUSCODE_BADNODEIDUNKNOWN;
-        return;
-    }
-
-    /* Get the object node */
-    const UA_ObjectNode *object = (const UA_ObjectNode*)
-        UA_Nodestore_getNode(server->nsCtx, &request->objectId);
-    if(!object) {
-        result->statusCode = UA_STATUSCODE_BADNODEIDUNKNOWN;
-        UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node*)method);
-        return;
-    }
-
-    /* Continue with method and object as context */
-    callWithMethodAndObject(server, session, request, result, method, object);
-
-    /* Release the method and object node */
-    UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node*)method);
-    UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node*)object);
-}
-
-void Service_Call(UA_Server *server, UA_Session *session,
-                  const UA_CallRequest *request,
-                  UA_CallResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Processing CallRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    if(server->config.maxNodesPerMethodCall != 0 &&
-       request->methodsToCallSize > server->config.maxNodesPerMethodCall) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYOPERATIONS;
-        return;
-    }
-
-    response->responseHeader.serviceResult =
-        UA_Server_processServiceOperations(server, session, (UA_ServiceOperation)Operation_CallMethod, NULL,
-                                           &request->methodsToCallSize, &UA_TYPES[UA_TYPES_CALLMETHODREQUEST],
-                                           &response->resultsSize, &UA_TYPES[UA_TYPES_CALLMETHODRESULT]);
-}
-
-UA_CallMethodResult UA_EXPORT
-UA_Server_call(UA_Server *server, const UA_CallMethodRequest *request) {
-    UA_CallMethodResult result;
-    UA_CallMethodResult_init(&result);
-    UA_LOCK(server->serviceMutex);
-    Operation_CallMethod(server, &server->adminSession, NULL, request, &result);
-    UA_UNLOCK(server->serviceMutex);
-    return result;
-}
-
-#endif /* UA_ENABLE_METHODCALLS */
diff --git a/ext/open62541/src/server/ua_services_monitoreditem.c b/ext/open62541/src/server/ua_services_monitoreditem.c
deleted file mode 100644
index 047621f..0000000
--- a/ext/open62541/src/server/ua_services_monitoreditem.c
+++ /dev/null
@@ -1,579 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2016-2017 (c) Florian Palm
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2018 (c) Ari Breitkreuz, fortiss GmbH
- *    Copyright 2017 (c) Mattias Bornhager
- *    Copyright 2017 (c) Henrik Norrman
- *    Copyright 2017-2018 (c) Thomas Stalder, Blue Time Concept SA
- *    Copyright 2018 (c) Fabian Arndt, Root-Core
- */
-
-#include "ua_server_internal.h"
-#include "ua_services.h"
-#include "ua_subscription.h"
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS /* conditional compilation */
-
-static UA_StatusCode
-setMonitoredItemSettings(UA_Server *server, UA_MonitoredItem *mon,
-                         UA_MonitoringMode monitoringMode,
-                         const UA_MonitoringParameters *params,
-                         const UA_DataType* dataType) {
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-
-    if(mon->attributeId == UA_ATTRIBUTEID_EVENTNOTIFIER) {
-        /* Event MonitoredItem */
-#ifndef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-        return UA_STATUSCODE_BADNOTSUPPORTED;
-#else
-        if(params->filter.encoding != UA_EXTENSIONOBJECT_DECODED &&
-           params->filter.encoding != UA_EXTENSIONOBJECT_DECODED_NODELETE)
-            return UA_STATUSCODE_BADEVENTFILTERINVALID;
-        if(params->filter.content.decoded.type != &UA_TYPES[UA_TYPES_EVENTFILTER])
-            return UA_STATUSCODE_BADEVENTFILTERINVALID;
-        UA_EventFilter_clear(&mon->filter.eventFilter);
-        retval = UA_EventFilter_copy((UA_EventFilter *)params->filter.content.decoded.data,
-                                     &mon->filter.eventFilter);
-#endif
-    } else {
-        /* DataChange MonitoredItem */
-        if(params->filter.encoding != UA_EXTENSIONOBJECT_DECODED &&
-           params->filter.encoding != UA_EXTENSIONOBJECT_DECODED_NODELETE) {
-            /* Default: Look for status and value */
-            UA_DataChangeFilter_clear(&mon->filter.dataChangeFilter);
-            mon->filter.dataChangeFilter.trigger = UA_DATACHANGETRIGGER_STATUSVALUE;
-        } else if(params->filter.content.decoded.type == &UA_TYPES[UA_TYPES_DATACHANGEFILTER]) {
-            UA_DataChangeFilter *filter = (UA_DataChangeFilter *)params->filter.content.decoded.data;
-            // TODO implement EURange to support UA_DEADBANDTYPE_PERCENT
-            switch(filter->deadbandType) {
-            case UA_DEADBANDTYPE_NONE:
-                break;
-            case UA_DEADBANDTYPE_ABSOLUTE:
-                if(!dataType || !UA_DataType_isNumeric(dataType))
-                    return UA_STATUSCODE_BADFILTERNOTALLOWED;
-                break;
-            case UA_DEADBANDTYPE_PERCENT:
-                return UA_STATUSCODE_BADMONITOREDITEMFILTERUNSUPPORTED;
-            default:
-                return UA_STATUSCODE_BADMONITOREDITEMFILTERUNSUPPORTED;
-            }
-            retval = UA_DataChangeFilter_copy(filter, &mon->filter.dataChangeFilter);
-        } else {
-            return UA_STATUSCODE_BADMONITOREDITEMFILTERUNSUPPORTED;
-        }
-    }
-
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* <-- The point of no return --> */
-
-    /* Unregister the callback */
-    UA_MonitoredItem_unregisterSampleCallback(server, mon);
-
-    /* Remove the old samples */
-    UA_ByteString_deleteMembers(&mon->lastSampledValue);
-    UA_Variant_deleteMembers(&mon->lastValue);
-
-    /* ClientHandle */
-    mon->clientHandle = params->clientHandle;
-
-    /* SamplingInterval */
-    UA_Double samplingInterval = params->samplingInterval;
-
-    if(mon->attributeId == UA_ATTRIBUTEID_VALUE) {
-        const UA_VariableNode *vn = (const UA_VariableNode *)
-            UA_Nodestore_getNode(server->nsCtx, &mon->monitoredNodeId);
-        if(vn) {
-            if(vn->nodeClass == UA_NODECLASS_VARIABLE &&
-               samplingInterval < vn->minimumSamplingInterval)
-                samplingInterval = vn->minimumSamplingInterval;
-            UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node *)vn);
-        }
-    }
-
-    UA_BOUNDEDVALUE_SETWBOUNDS(server->config.samplingIntervalLimits,
-                               samplingInterval, mon->samplingInterval);
-    if(samplingInterval != samplingInterval) /* Check for nan */
-        mon->samplingInterval = server->config.samplingIntervalLimits.min;
-
-    /* QueueSize */
-    UA_BOUNDEDVALUE_SETWBOUNDS(server->config.queueSizeLimits,
-                               params->queueSize, mon->maxQueueSize);
-
-    /* DiscardOldest */
-    mon->discardOldest = params->discardOldest;
-
-    /* Register sample callback if reporting is enabled */
-    mon->monitoringMode = monitoringMode;
-    if(monitoringMode == UA_MONITORINGMODE_SAMPLING ||
-       monitoringMode == UA_MONITORINGMODE_REPORTING)
-        return UA_MonitoredItem_registerSampleCallback(server, mon);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static const UA_String binaryEncoding = {sizeof("Default Binary") - 1, (UA_Byte *)"Default Binary"};
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-static UA_StatusCode
-UA_Server_addMonitoredItemToNodeEditNodeCallback(UA_Server *server, UA_Session *session,
-                                                 UA_Node *node, void *data) {
-    /* data is the MonitoredItem */
-    /* SLIST_INSERT_HEAD */
-    ((UA_MonitoredItem *)data)->next = ((UA_ObjectNode *)node)->monitoredItemQueue;
-    ((UA_ObjectNode *)node)->monitoredItemQueue = (UA_MonitoredItem *)data;
-    return UA_STATUSCODE_GOOD;
-}
-#endif
-
-/* Thread-local variables to pass additional arguments into the operation */
-struct createMonContext {
-    UA_Subscription *sub;
-    UA_TimestampsToReturn timestampsToReturn;
-
-    /* If sub is NULL, use local callbacks */
-    UA_Server_DataChangeNotificationCallback dataChangeCallback;
-    void *context;
-};
-
-static void
-Operation_CreateMonitoredItem(UA_Server *server, UA_Session *session, struct createMonContext *cmc,
-                              const UA_MonitoredItemCreateRequest *request,
-                              UA_MonitoredItemCreateResult *result) {
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    /* Check available capacity */
-    if(cmc->sub &&
-       (((server->config.maxMonitoredItems != 0) &&
-         (server->numMonitoredItems >= server->config.maxMonitoredItems)) ||
-        ((server->config.maxMonitoredItemsPerSubscription != 0) &&
-         (cmc->sub->monitoredItemsSize >= server->config.maxMonitoredItemsPerSubscription)))) {
-        result->statusCode = UA_STATUSCODE_BADTOOMANYMONITOREDITEMS;
-        return;
-    }
-
-    /* Make an example read to get errors in the itemToMonitor. Allow return
-     * codes "good" and "uncertain", as well as a list of statuscodes that might
-     * be repaired inside the data source. */
-    UA_DataValue v = UA_Server_readWithSession(server, session, &request->itemToMonitor,
-                                               cmc->timestampsToReturn);
-    if(v.hasStatus && (v.status >> 30) > 1 &&
-       v.status != UA_STATUSCODE_BADRESOURCEUNAVAILABLE &&
-       v.status != UA_STATUSCODE_BADCOMMUNICATIONERROR &&
-       v.status != UA_STATUSCODE_BADWAITINGFORINITIALDATA &&
-       v.status != UA_STATUSCODE_BADUSERACCESSDENIED &&
-       v.status != UA_STATUSCODE_BADNOTREADABLE &&
-       v.status != UA_STATUSCODE_BADINDEXRANGENODATA) {
-        result->statusCode = v.status;
-        UA_DataValue_deleteMembers(&v);
-        return;
-    }
-
-    /* Check if the encoding is supported */
-    if(request->itemToMonitor.dataEncoding.name.length > 0 &&
-       (!UA_String_equal(&binaryEncoding, &request->itemToMonitor.dataEncoding.name) ||
-        request->itemToMonitor.dataEncoding.namespaceIndex != 0)) {
-        result->statusCode = UA_STATUSCODE_BADDATAENCODINGUNSUPPORTED;
-        UA_DataValue_deleteMembers(&v);
-        return;
-    }
-
-    /* Check if the encoding is set for a value */
-    if(request->itemToMonitor.attributeId != UA_ATTRIBUTEID_VALUE &&
-       request->itemToMonitor.dataEncoding.name.length > 0) {
-        result->statusCode = UA_STATUSCODE_BADDATAENCODINGINVALID;
-        UA_DataValue_deleteMembers(&v);
-        return;
-    }
-
-    /* Allocate the MonitoredItem */
-    size_t nmsize = sizeof(UA_MonitoredItem);
-    if(!cmc->sub)
-        nmsize = sizeof(UA_LocalMonitoredItem);
-    UA_MonitoredItem *newMon = (UA_MonitoredItem*)UA_malloc(nmsize);
-    if(!newMon) {
-        result->statusCode = UA_STATUSCODE_BADOUTOFMEMORY;
-        UA_DataValue_deleteMembers(&v);
-        return;
-    }
-
-    /* Initialize the MonitoredItem */
-    UA_MonitoredItem_init(newMon, cmc->sub);
-    newMon->attributeId = request->itemToMonitor.attributeId;
-    newMon->timestampsToReturn = cmc->timestampsToReturn;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    retval |= UA_NodeId_copy(&request->itemToMonitor.nodeId, &newMon->monitoredNodeId);
-    retval |= UA_String_copy(&request->itemToMonitor.indexRange, &newMon->indexRange);
-    retval |= setMonitoredItemSettings(server, newMon, request->monitoringMode,
-                                       &request->requestedParameters, v.value.type);
-    UA_DataValue_deleteMembers(&v);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "Subscription %u | Could not create a MonitoredItem "
-                            "with StatusCode %s", cmc->sub ? cmc->sub->subscriptionId : 0,
-                            UA_StatusCode_name(retval));
-        result->statusCode = retval;
-        UA_MonitoredItem_delete(server, newMon);
-        return;
-    }
-
-    /* Add to the subscriptions or the local MonitoredItems */
-    if(cmc->sub) {
-        newMon->monitoredItemId = ++cmc->sub->lastMonitoredItemId;
-        UA_Subscription_addMonitoredItem(server, cmc->sub, newMon);
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-        if(newMon->attributeId == UA_ATTRIBUTEID_EVENTNOTIFIER) {
-            /* Insert the monitored item into the node's queue */
-            UA_Server_editNode(server, NULL, &newMon->monitoredNodeId,
-                               UA_Server_addMonitoredItemToNodeEditNodeCallback, newMon);
-        }
-#endif
-    } else {
-        //TODO support events for local monitored items
-        UA_LocalMonitoredItem *localMon = (UA_LocalMonitoredItem*)newMon;
-        localMon->context = cmc->context;
-        localMon->callback.dataChangeCallback = cmc->dataChangeCallback;
-        newMon->monitoredItemId = ++server->lastLocalMonitoredItemId;
-        LIST_INSERT_HEAD(&server->localMonitoredItems, newMon, listEntry);
-    }
-
-    /* Register MonitoredItem in userland */
-    if(server->config.monitoredItemRegisterCallback) {
-        void *targetContext = NULL;
-        UA_Server_getNodeContext(server, request->itemToMonitor.nodeId, &targetContext);
-        UA_UNLOCK(server->serviceMutex);
-        server->config.monitoredItemRegisterCallback(server, &session->sessionId,
-                                                     session->sessionHandle,
-                                                     &request->itemToMonitor.nodeId,
-                                                     targetContext, newMon->attributeId, false);
-        UA_LOCK(server->serviceMutex);
-        newMon->registered = true;
-    }
-
-    UA_LOG_INFO_SESSION(&server->config.logger, session,
-                        "Subscription %u | MonitoredItem %i | "
-                        "Created the MonitoredItem",
-                        cmc->sub ? cmc->sub->subscriptionId : 0,
-                        newMon->monitoredItemId);
-
-    /* Create the first sample */
-    if(request->monitoringMode == UA_MONITORINGMODE_REPORTING &&
-       newMon->attributeId != UA_ATTRIBUTEID_EVENTNOTIFIER)
-        monitoredItem_sampleCallback(server, newMon);
-
-    /* Prepare the response */
-    result->revisedSamplingInterval = newMon->samplingInterval;
-    result->revisedQueueSize = newMon->maxQueueSize;
-    result->monitoredItemId = newMon->monitoredItemId;
-}
-
-void
-Service_CreateMonitoredItems(UA_Server *server, UA_Session *session,
-                             const UA_CreateMonitoredItemsRequest *request,
-                             UA_CreateMonitoredItemsResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session, "Processing CreateMonitoredItemsRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    if(server->config.maxMonitoredItemsPerCall != 0 &&
-       request->itemsToCreateSize > server->config.maxMonitoredItemsPerCall) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYOPERATIONS;
-        return;
-    }
-
-    /* Check if the timestampstoreturn is valid */
-    struct createMonContext cmc;
-    cmc.timestampsToReturn = request->timestampsToReturn;
-    if(cmc.timestampsToReturn > UA_TIMESTAMPSTORETURN_NEITHER) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTIMESTAMPSTORETURNINVALID;
-        return;
-    }
-
-    /* Find the subscription */
-    cmc.sub = UA_Session_getSubscriptionById(session, request->subscriptionId);
-    if(!cmc.sub) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
-        return;
-    }
-
-    /* Reset the subscription lifetime */
-    cmc.sub->currentLifetimeCount = 0;
-
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    response->responseHeader.serviceResult =
-        UA_Server_processServiceOperations(server, session, (UA_ServiceOperation)Operation_CreateMonitoredItem, &cmc,
-                                           &request->itemsToCreateSize, &UA_TYPES[UA_TYPES_MONITOREDITEMCREATEREQUEST],
-                                           &response->resultsSize, &UA_TYPES[UA_TYPES_MONITOREDITEMCREATERESULT]);
-}
-
-UA_MonitoredItemCreateResult
-UA_Server_createDataChangeMonitoredItem(UA_Server *server,
-                                        UA_TimestampsToReturn timestampsToReturn,
-                                        const UA_MonitoredItemCreateRequest item,
-                                        void *monitoredItemContext,
-                                        UA_Server_DataChangeNotificationCallback callback) {
-    struct createMonContext cmc;
-    cmc.sub = NULL;
-    cmc.context = monitoredItemContext;
-    cmc.dataChangeCallback = callback;
-    cmc.timestampsToReturn = timestampsToReturn;
-
-    UA_MonitoredItemCreateResult result;
-    UA_MonitoredItemCreateResult_init(&result);
-    UA_LOCK(server->serviceMutex);
-    Operation_CreateMonitoredItem(server, &server->adminSession, &cmc, &item, &result);
-    UA_UNLOCK(server->serviceMutex);
-    return result;
-}
-
-static void
-Operation_ModifyMonitoredItem(UA_Server *server, UA_Session *session, UA_Subscription *sub,
-                              const UA_MonitoredItemModifyRequest *request,
-                              UA_MonitoredItemModifyResult *result) {
-    /* Get the MonitoredItem */
-    UA_MonitoredItem *mon = UA_Subscription_getMonitoredItem(sub, request->monitoredItemId);
-    if(!mon) {
-        result->statusCode = UA_STATUSCODE_BADMONITOREDITEMIDINVALID;
-        return;
-    }
-
-    /* Read the current value to test if filters are possible.
-     * Can return an empty value (v.value.type == NULL). */
-    UA_ReadValueId rvid;
-    UA_ReadValueId_init(&rvid);
-    rvid.nodeId = mon->monitoredNodeId;
-    rvid.attributeId = mon->attributeId;
-    rvid.indexRange = mon->indexRange;
-    UA_DataValue v = UA_Server_readWithSession(server, session, &rvid, mon->timestampsToReturn);
-    UA_StatusCode retval = setMonitoredItemSettings(server, mon, mon->monitoringMode,
-                                                    &request->requestedParameters,
-                                                    v.value.type);
-    UA_DataValue_deleteMembers(&v);
-    if(retval != UA_STATUSCODE_GOOD) {
-        result->statusCode = retval;
-        return;
-    }
-
-    result->revisedSamplingInterval = mon->samplingInterval;
-    result->revisedQueueSize = mon->maxQueueSize;
-
-    /* Remove some notifications if the queue is now too small */
-    UA_MonitoredItem_ensureQueueSpace(server, mon);
-}
-
-void
-Service_ModifyMonitoredItems(UA_Server *server, UA_Session *session,
-                             const UA_ModifyMonitoredItemsRequest *request,
-                             UA_ModifyMonitoredItemsResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session, "Processing ModifyMonitoredItemsRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    if(server->config.maxMonitoredItemsPerCall != 0 &&
-       request->itemsToModifySize > server->config.maxMonitoredItemsPerCall) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYOPERATIONS;
-        return;
-    }
-
-    /* Check if the timestampstoreturn is valid */
-    if(request->timestampsToReturn > UA_TIMESTAMPSTORETURN_NEITHER) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTIMESTAMPSTORETURNINVALID;
-        return;
-    }
-
-    /* Get the subscription */
-    UA_Subscription *sub = UA_Session_getSubscriptionById(session, request->subscriptionId);
-    if(!sub) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
-        return;
-    }
-
-    sub->currentLifetimeCount = 0; /* Reset the subscription lifetime */
-
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    response->responseHeader.serviceResult =
-        UA_Server_processServiceOperations(server, session,
-                  (UA_ServiceOperation)Operation_ModifyMonitoredItem, sub,
-                  &request->itemsToModifySize, &UA_TYPES[UA_TYPES_MONITOREDITEMMODIFYREQUEST],
-                  &response->resultsSize, &UA_TYPES[UA_TYPES_MONITOREDITEMMODIFYRESULT]);
-}
-
-struct setMonitoringContext {
-    UA_Subscription *sub;
-    UA_MonitoringMode monitoringMode;
-};
-
-static void
-Operation_SetMonitoringMode(UA_Server *server, UA_Session *session,
-                            struct setMonitoringContext *smc,
-                            const UA_UInt32 *monitoredItemId, UA_StatusCode *result) {
-    UA_MonitoredItem *mon = UA_Subscription_getMonitoredItem(smc->sub, *monitoredItemId);
-    if(!mon) {
-        *result = UA_STATUSCODE_BADMONITOREDITEMIDINVALID;
-        return;
-    }
-    UA_Subscription *sub = mon->subscription;
-
-    /* Check if the MonitoringMode is valid or not */
-    if(smc->monitoringMode > UA_MONITORINGMODE_REPORTING) {
-        *result = UA_STATUSCODE_BADMONITORINGMODEINVALID;
-        return;
-    }
-
-    /* Nothing has changed */
-    if(mon->monitoringMode == smc->monitoringMode)
-        return;
-
-    mon->monitoringMode = smc->monitoringMode;
-
-    /* When reporting is enabled, put all notifications that were already
-     * sampled into the global queue of the subscription. When sampling is
-     * enabled, remove all notifications from the global queue. !!! This needs
-     * to be the same operation as in UA_Notification_enqueue !!! */
-    if(mon->monitoringMode == UA_MONITORINGMODE_REPORTING) {
-        UA_Notification *notification;
-        TAILQ_FOREACH(notification, &mon->queue, listEntry) {
-            TAILQ_INSERT_TAIL(&sub->notificationQueue, notification, globalEntry);
-            ++sub->notificationQueueSize;
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-            if(mon->attributeId == UA_ATTRIBUTEID_EVENTNOTIFIER) {
-                ++sub->eventNotifications;
-            } else
-#endif
-            {
-                ++sub->dataChangeNotifications;
-            }
-        }
-        /* Register the sampling callback with an interval */
-        *result = UA_MonitoredItem_registerSampleCallback(server, mon);
-    } else if(mon->monitoringMode == UA_MONITORINGMODE_SAMPLING) {
-        UA_Notification *notification;
-        TAILQ_FOREACH(notification, &mon->queue, listEntry) {
-            TAILQ_REMOVE(&sub->notificationQueue, notification, globalEntry);
-            TAILQ_NEXT(notification, globalEntry) = UA_SUBSCRIPTION_QUEUE_SENTINEL;
-            --sub->notificationQueueSize;
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-            if(mon->attributeId == UA_ATTRIBUTEID_EVENTNOTIFIER) {
-                --sub->eventNotifications;
-            } else
-#endif
-            {
-                --sub->dataChangeNotifications;
-            }
-        }
-        /* Register the sampling callback with an interval */
-        *result = UA_MonitoredItem_registerSampleCallback(server, mon);
-    } else {
-        /* UA_MONITORINGMODE_DISABLED */
-        UA_MonitoredItem_unregisterSampleCallback(server, mon);
-
-        /* Setting the mode to DISABLED or SAMPLING causes all queued Notifications to be deleted */
-        UA_Notification *notification, *notification_tmp;
-        TAILQ_FOREACH_SAFE(notification, &mon->queue, listEntry, notification_tmp) {
-            UA_Notification_dequeue(server, notification);
-            UA_Notification_delete(notification);
-        }
-
-        /* Initialize lastSampledValue */
-        UA_ByteString_deleteMembers(&mon->lastSampledValue);
-        UA_Variant_deleteMembers(&mon->lastValue);
-    }
-}
-
-void
-Service_SetMonitoringMode(UA_Server *server, UA_Session *session,
-                          const UA_SetMonitoringModeRequest *request,
-                          UA_SetMonitoringModeResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session, "Processing SetMonitoringMode");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    if(server->config.maxMonitoredItemsPerCall != 0 &&
-       request->monitoredItemIdsSize > server->config.maxMonitoredItemsPerCall) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYOPERATIONS;
-        return;
-    }
-
-    /* Get the subscription */
-    struct setMonitoringContext smc;
-    smc.sub = UA_Session_getSubscriptionById(session, request->subscriptionId);
-    if(!smc.sub) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
-        return;
-    }
-
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    smc.sub->currentLifetimeCount = 0; /* Reset the subscription lifetime */
-
-    smc.monitoringMode = request->monitoringMode;
-    response->responseHeader.serviceResult =
-        UA_Server_processServiceOperations(server, session,
-                  (UA_ServiceOperation)Operation_SetMonitoringMode, &smc,
-                  &request->monitoredItemIdsSize, &UA_TYPES[UA_TYPES_UINT32],
-                  &response->resultsSize, &UA_TYPES[UA_TYPES_STATUSCODE]);
-}
-
-static void
-Operation_DeleteMonitoredItem(UA_Server *server, UA_Session *session, UA_Subscription *sub,
-                              const UA_UInt32 *monitoredItemId, UA_StatusCode *result) {
-    *result = UA_Subscription_deleteMonitoredItem(server, sub, *monitoredItemId);
-}
-
-void
-Service_DeleteMonitoredItems(UA_Server *server, UA_Session *session,
-                             const UA_DeleteMonitoredItemsRequest *request,
-                             UA_DeleteMonitoredItemsResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Processing DeleteMonitoredItemsRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    if(server->config.maxMonitoredItemsPerCall != 0 &&
-       request->monitoredItemIdsSize > server->config.maxMonitoredItemsPerCall) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYOPERATIONS;
-        return;
-    }
-
-    /* Get the subscription */
-    UA_Subscription *sub = UA_Session_getSubscriptionById(session, request->subscriptionId);
-    if(!sub) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
-        return;
-    }
-
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    /* Reset the subscription lifetime */
-    sub->currentLifetimeCount = 0;
-
-    response->responseHeader.serviceResult =
-        UA_Server_processServiceOperations(server, session,
-                  (UA_ServiceOperation)Operation_DeleteMonitoredItem, sub,
-                  &request->monitoredItemIdsSize, &UA_TYPES[UA_TYPES_UINT32],
-                  &response->resultsSize, &UA_TYPES[UA_TYPES_STATUSCODE]);
-}
-
-UA_StatusCode
-UA_Server_deleteMonitoredItem(UA_Server *server, UA_UInt32 monitoredItemId) {
-    UA_LOCK(server->serviceMutex);
-    UA_MonitoredItem *mon;
-    LIST_FOREACH(mon, &server->localMonitoredItems, listEntry) {
-        if(mon->monitoredItemId != monitoredItemId)
-            continue;
-        LIST_REMOVE(mon, listEntry);
-        UA_MonitoredItem_delete(server, mon);
-        UA_UNLOCK(server->serviceMutex);
-        return UA_STATUSCODE_GOOD;
-    }
-    UA_UNLOCK(server->serviceMutex);
-    return UA_STATUSCODE_BADMONITOREDITEMIDINVALID;
-}
-
-#endif /* UA_ENABLE_SUBSCRIPTIONS */
diff --git a/ext/open62541/src/server/ua_services_nodemanagement.c b/ext/open62541/src/server/ua_services_nodemanagement.c
deleted file mode 100644
index 5f5aed9..0000000
--- a/ext/open62541/src/server/ua_services_nodemanagement.c
+++ /dev/null
@@ -1,2227 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014-2017 (c) Florian Palm
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015-2016 (c) Chris Iatrou
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Julian Grothoff
- *    Copyright 2016 (c) LEvertz
- *    Copyright 2016 (c) Lorenz Haas
- *    Copyright 2017 (c) frax2222
- *    Copyright 2017-2018 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Christian von Arnim
- *    Copyright 2017 (c) Henrik Norrman
- */
-
-#include "ua_server_internal.h"
-#include "ua_services.h"
-
-#define UA_LOG_NODEID_WRAP(NODEID, LOG) {   \
-    UA_String nodeIdStr = UA_STRING_NULL;   \
-    UA_NodeId_toString(NODEID, &nodeIdStr); \
-    LOG;                                    \
-    UA_String_deleteMembers(&nodeIdStr);    \
-}
-
-/*********************/
-/* Edit Node Context */
-/*********************/
-
-UA_StatusCode
-UA_Server_getNodeContext(UA_Server *server, UA_NodeId nodeId,
-                         void **nodeContext) {
-    const UA_Node *node = UA_Nodestore_getNode(server->nsCtx, &nodeId);
-    if(!node)
-        return UA_STATUSCODE_BADNODEIDUNKNOWN;
-    *nodeContext = node->context;
-    UA_Nodestore_releaseNode(server->nsCtx, node);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-setDeconstructedNode(UA_Server *server, UA_Session *session,
-                     UA_Node *node, void *context) {
-    node->constructed = false;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-setConstructedNodeContext(UA_Server *server, UA_Session *session,
-                          UA_Node *node, void *context) {
-    node->context = context;
-    node->constructed = true;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-editNodeContext(UA_Server *server, UA_Session* session,
-                UA_Node* node, void *context) {
-    node->context = context;
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_Server_setNodeContext(UA_Server *server, UA_NodeId nodeId,
-                         void *nodeContext) {
-    return UA_Server_editNode(server, &server->adminSession, &nodeId,
-                              (UA_EditNodeCallback)editNodeContext, nodeContext);
-}
-
-/**********************/
-/* Consistency Checks */
-/**********************/
-
-#define UA_PARENT_REFERENCES_COUNT 2
-
-const UA_NodeId parentReferences[UA_PARENT_REFERENCES_COUNT] = {
-    {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_HASSUBTYPE}},
-    {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_HASCOMPONENT}}
-};
-
-/* Check if the requested parent node exists, has the right node class and is
- * referenced with an allowed (hierarchical) reference type. For "type" nodes,
- * only hasSubType references are allowed. */
-static UA_StatusCode
-checkParentReference(UA_Server *server, UA_Session *session, UA_NodeClass nodeClass,
-                     const UA_NodeId *parentNodeId, const UA_NodeId *referenceTypeId) {
-    /* Objects do not need a parent (e.g. mandatory/optional modellingrules) */
-    /* Also, there are some variables which do not have parents, e.g. EnumStrings, EnumValues */
-    if((nodeClass == UA_NODECLASS_OBJECT || nodeClass == UA_NODECLASS_VARIABLE) &&
-       UA_NodeId_isNull(parentNodeId) && UA_NodeId_isNull(referenceTypeId))
-        return UA_STATUSCODE_GOOD;
-
-    /* See if the parent exists */
-    const UA_Node *parent = UA_Nodestore_getNode(server->nsCtx, parentNodeId);
-    if(!parent) {
-        UA_LOG_NODEID_WRAP(parentNodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "AddNodes: Parent node %.*s not found",
-                            (int)nodeIdStr.length, nodeIdStr.data));
-        return UA_STATUSCODE_BADPARENTNODEIDINVALID;
-    }
-
-    UA_NodeClass parentNodeClass = parent->nodeClass;
-    UA_Nodestore_releaseNode(server->nsCtx, parent);
-
-    /* Check the referencetype exists */
-    const UA_ReferenceTypeNode *referenceType = (const UA_ReferenceTypeNode*)
-        UA_Nodestore_getNode(server->nsCtx, referenceTypeId);
-    if(!referenceType) {
-        UA_LOG_NODEID_WRAP(referenceTypeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                           "AddNodes: Reference type %.*s to the parent not found",
-                           (int)nodeIdStr.length, nodeIdStr.data));
-        return UA_STATUSCODE_BADREFERENCETYPEIDINVALID;
-    }
-
-    /* Check if the referencetype is a reference type node */
-    if(referenceType->nodeClass != UA_NODECLASS_REFERENCETYPE) {
-        UA_LOG_NODEID_WRAP(referenceTypeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                           "AddNodes: Reference type %.*s to the parent is not a ReferenceTypeNode",
-                           (int)nodeIdStr.length, nodeIdStr.data));
-        UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node*)referenceType);
-        return UA_STATUSCODE_BADREFERENCETYPEIDINVALID;
-    }
-
-    UA_Boolean referenceTypeIsAbstract = referenceType->isAbstract;
-    UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node*)referenceType);
-    /* Check that the reference type is not abstract */
-    if(referenceTypeIsAbstract == true) {
-        UA_LOG_NODEID_WRAP(referenceTypeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                           "AddNodes: Abstract reference type %.*s to the parent not allowed",
-                           (int)nodeIdStr.length, nodeIdStr.data));
-        return UA_STATUSCODE_BADREFERENCENOTALLOWED;
-    }
-
-    /* Check hassubtype relation for type nodes */
-    if(nodeClass == UA_NODECLASS_DATATYPE ||
-       nodeClass == UA_NODECLASS_VARIABLETYPE ||
-       nodeClass == UA_NODECLASS_OBJECTTYPE ||
-       nodeClass == UA_NODECLASS_REFERENCETYPE) {
-        /* type needs hassubtype reference to the supertype */
-        if(!UA_NodeId_equal(referenceTypeId, &subtypeId)) {
-            UA_LOG_INFO_SESSION(&server->config.logger, session,
-                                "AddNodes: Type nodes need to have a HasSubType "
-                                "reference to the parent");
-            return UA_STATUSCODE_BADREFERENCENOTALLOWED;
-        }
-        /* supertype needs to be of the same node type  */
-        if(parentNodeClass != nodeClass) {
-            UA_LOG_INFO_SESSION(&server->config.logger, session,
-                                "AddNodes: Type nodes needs to be of the same node "
-                                "type as their parent");
-            return UA_STATUSCODE_BADPARENTNODEIDINVALID;
-        }
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* Test if the referencetype is hierarchical */
-    if(!isNodeInTree(server->nsCtx, referenceTypeId,
-                     &hierarchicalReferences, &subtypeId, 1)) {
-        UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "AddNodes: Reference type to the parent is not hierarchical");
-        return UA_STATUSCODE_BADREFERENCETYPEIDINVALID;
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-typeCheckVariableNode(UA_Server *server, UA_Session *session,
-                      const UA_VariableNode *node,
-                      const UA_VariableTypeNode *vt) {
-    /* The value might come from a datasource, so we perform a
-     * regular read. */
-    UA_DataValue value;
-    UA_DataValue_init(&value);
-    UA_StatusCode retval = readValueAttribute(server, session, node, &value);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    UA_NodeId baseDataType = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATATYPE);
-
-    /* Check the datatype against the vt */
-    /* If the node does not have any value and the dataType is BaseDataType,
-     * then it's also fine. This is the default for empty nodes. */
-    if(!compatibleDataType(server, &node->dataType, &vt->dataType, false) &&
-       (value.hasValue || !UA_NodeId_equal(&node->dataType, &baseDataType))) {
-        UA_LOG_NODEID_WRAP(&node->nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                              "AddNodes: The value of %.*s is incompatible with "
-                              "the datatype of the VariableType",
-                              (int)nodeIdStr.length, nodeIdStr.data));
-        UA_DataValue_deleteMembers(&value);
-        return UA_STATUSCODE_BADTYPEMISMATCH;
-    }
-
-    /* Check valueRank against array dimensions */
-    if(!compatibleValueRankArrayDimensions(server, session, node->valueRank,
-                                           node->arrayDimensionsSize)) {
-        UA_LOG_NODEID_WRAP(&node->nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                           "AddNodes: The value rank of %.*s is incomatible "
-                           "with its array dimensions", (int)nodeIdStr.length, nodeIdStr.data));
-        UA_DataValue_deleteMembers(&value);
-        return UA_STATUSCODE_BADTYPEMISMATCH;
-    }
-
-    /* Check valueRank against the vt */
-    if(!compatibleValueRanks(node->valueRank, vt->valueRank)) {
-        UA_LOG_NODEID_WRAP(&node->nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                           "AddNodes: The value rank of %.*s is incomatible "
-                           "with the value rank of the VariableType",
-                           (int)nodeIdStr.length, nodeIdStr.data));
-        UA_DataValue_deleteMembers(&value);
-        return UA_STATUSCODE_BADTYPEMISMATCH;
-    }
-
-    /* Check array dimensions against the vt */
-    if(!compatibleArrayDimensions(vt->arrayDimensionsSize, vt->arrayDimensions,
-                                  node->arrayDimensionsSize, node->arrayDimensions)) {
-        UA_LOG_NODEID_WRAP(&node->nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                           "AddNodes: The array dimensions of %.*s are "
-                           "incomatible with the array dimensions of the VariableType",
-                           (int)nodeIdStr.length, nodeIdStr.data));
-        UA_DataValue_deleteMembers(&value);
-        return UA_STATUSCODE_BADTYPEMISMATCH;
-    }
-
-    /* Typecheck the value */
-    if(value.hasValue && value.value.data) {
-        /* If the type-check failed write the same value again. The
-         * write-service tries to convert to the correct type... */
-        if(!compatibleValue(server, session, &node->dataType, node->valueRank,
-                            node->arrayDimensionsSize, node->arrayDimensions,
-                            &value.value, NULL)) {
-            retval = writeWithWriteValue(server, &node->nodeId, UA_ATTRIBUTEID_VALUE, &UA_TYPES[UA_TYPES_VARIANT], &value.value);
-        }
-
-        UA_DataValue_deleteMembers(&value);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_NODEID_WRAP(&node->nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                               "AddNodes: The value of of %.*s is incomatible with the "
-                               "variable definition", (int)nodeIdStr.length, nodeIdStr.data));
-        }
-    }
-
-    return retval;
-}
-
-/********************/
-/* Instantiate Node */
-/********************/
-
-static const UA_NodeId baseDataVariableType =
-    {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_BASEDATAVARIABLETYPE}};
-static const UA_NodeId baseObjectType =
-    {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_BASEOBJECTTYPE}};
-static const UA_NodeId hasTypeDefinition =
-    {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_HASTYPEDEFINITION}};
-
-/* Use attributes from the variable type wherever required. Reload the node if
- * changes were made. */
-static UA_StatusCode
-useVariableTypeAttributes(UA_Server *server, UA_Session *session,
-                          const UA_VariableNode **node_ptr,
-                          const UA_VariableTypeNode *vt) {
-    const UA_VariableNode *node = *node_ptr;
-    UA_Boolean modified = false;
-
-    /* If no value is set, see if the vt provides one and copy it. This needs to
-     * be done before copying the datatype from the vt, as setting the datatype
-     * triggers a typecheck. */
-    UA_DataValue orig;
-    UA_DataValue_init(&orig);
-    UA_StatusCode retval = readValueAttribute(server, session, node, &orig);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    if(orig.value.type) {
-        /* A value is present */
-        UA_DataValue_deleteMembers(&orig);
-    } else {
-        UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                             "AddNodes: No value given; Copy the value "
-                             "from the TypeDefinition");
-        UA_WriteValue v;
-        UA_WriteValue_init(&v);
-        retval = readValueAttribute(server, session, (const UA_VariableNode*)vt, &v.value);
-        if(retval == UA_STATUSCODE_GOOD && v.value.hasValue) {
-            v.nodeId = node->nodeId;
-            v.attributeId = UA_ATTRIBUTEID_VALUE;
-            retval = writeWithSession(server, session, &v);
-            modified = true;
-        }
-        UA_DataValue_deleteMembers(&v.value);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-    }
-
-    /* If no datatype is given, use the datatype of the vt */
-    if(UA_NodeId_isNull(&node->dataType)) {
-        UA_LOG_INFO_SESSION(&server->config.logger, session, "AddNodes: "
-                            "No datatype given; Copy the datatype attribute "
-                            "from the TypeDefinition");
-        UA_WriteValue v;
-        UA_WriteValue_init(&v);
-        v.nodeId = node->nodeId;
-        v.attributeId = UA_ATTRIBUTEID_DATATYPE;
-        v.value.hasValue = true;
-        UA_Variant_setScalar(&v.value.value, (void*)(uintptr_t)&vt->dataType,
-                             &UA_TYPES[UA_TYPES_NODEID]);
-        retval = writeWithSession(server, session, &v);
-        modified = true;
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-    }
-
-    /* Use the ArrayDimensions of the vt */
-    if(node->arrayDimensionsSize == 0 && vt->arrayDimensionsSize > 0) {
-        UA_WriteValue v;
-        UA_WriteValue_init(&v);
-        v.nodeId = node->nodeId;
-        v.attributeId = UA_ATTRIBUTEID_ARRAYDIMENSIONS;
-        v.value.hasValue = true;
-        UA_Variant_setArray(&v.value.value, vt->arrayDimensions,
-                            vt->arrayDimensionsSize, &UA_TYPES[UA_TYPES_UINT32]);
-        retval = writeWithSession(server, session, &v);
-        modified = true;
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-    }
-
-    /* If the node was modified, update the pointer to the new version */
-    if(modified) {
-        const UA_VariableNode *updated = (const UA_VariableNode*)
-            UA_Nodestore_getNode(server->nsCtx, &node->nodeId);
-
-        if(!updated)
-            return UA_STATUSCODE_BADINTERNALERROR;
-
-        UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node*)node);
-        *node_ptr = updated;
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Search for an instance of "browseName" in node searchInstance. Used during
- * copyChildNodes to find overwritable/mergable nodes. Does not touch
- * outInstanceNodeId if no child is found. */
-static UA_StatusCode
-findChildByBrowsename(UA_Server *server, UA_Session *session,
-                      const UA_NodeId *searchInstance,
-                      const UA_QualifiedName *browseName,
-                      UA_NodeId *outInstanceNodeId) {
-    UA_BrowseDescription bd;
-    UA_BrowseDescription_init(&bd);
-    bd.nodeId = *searchInstance;
-    bd.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_AGGREGATES);
-    bd.includeSubtypes = true;
-    bd.browseDirection = UA_BROWSEDIRECTION_FORWARD;
-    bd.nodeClassMask = UA_NODECLASS_OBJECT | UA_NODECLASS_VARIABLE | UA_NODECLASS_METHOD;
-    bd.resultMask = UA_BROWSERESULTMASK_BROWSENAME;
-
-    UA_BrowseResult br;
-    UA_BrowseResult_init(&br);
-    UA_UInt32 maxrefs = 0;
-    Operation_Browse(server, session, &maxrefs, &bd, &br);
-    if(br.statusCode != UA_STATUSCODE_GOOD)
-        return br.statusCode;
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    for(size_t i = 0; i < br.referencesSize; ++i) {
-        UA_ReferenceDescription *rd = &br.references[i];
-        if(rd->browseName.namespaceIndex == browseName->namespaceIndex &&
-           UA_String_equal(&rd->browseName.name, &browseName->name)) {
-            retval = UA_NodeId_copy(&rd->nodeId.nodeId, outInstanceNodeId);
-            break;
-        }
-    }
-
-    UA_BrowseResult_deleteMembers(&br);
-    return retval;
-}
-
-static const UA_NodeId mandatoryId =
-    {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_MODELLINGRULE_MANDATORY}};
-static const UA_NodeId hasModellingRuleId =
-    {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_HASMODELLINGRULE}};
-
-static UA_Boolean
-isMandatoryChild(UA_Server *server, UA_Session *session,
-                 const UA_NodeId *childNodeId) {
-    /* Get the child */
-    const UA_Node *child = UA_Nodestore_getNode(server->nsCtx, childNodeId);
-    if(!child)
-        return false;
-
-    /* Look for the reference making the child mandatory */
-    for(size_t i = 0; i < child->referencesSize; ++i) {
-        UA_NodeReferenceKind *refs = &child->references[i];
-        if(!UA_NodeId_equal(&hasModellingRuleId, &refs->referenceTypeId))
-            continue;
-        if(refs->isInverse)
-            continue;
-        for(size_t j = 0; j < refs->targetIdsSize; ++j) {
-            if(UA_NodeId_equal(&mandatoryId, &refs->targetIds[j].nodeId)) {
-                UA_Nodestore_releaseNode(server->nsCtx, child);
-                return true;
-            }
-        }
-    }
-
-    UA_Nodestore_releaseNode(server->nsCtx, child);
-    return false;
-}
-
-static UA_StatusCode
-copyAllChildren(UA_Server *server, UA_Session *session,
-                const UA_NodeId *source, const UA_NodeId *destination);
-
-static UA_StatusCode
-recursiveTypeCheckAddChildren(UA_Server *server, UA_Session *session,
-                              const UA_Node **node, const UA_Node *type);
-
-static void
-Operation_addReference(UA_Server *server, UA_Session *session, void *context,
-                       const UA_AddReferencesItem *item, UA_StatusCode *retval);
-
-static UA_StatusCode
-copyChild(UA_Server *server, UA_Session *session, const UA_NodeId *destinationNodeId,
-          const UA_ReferenceDescription *rd) {
-    /* Is there an existing child with the browsename? */
-    UA_NodeId existingChild = UA_NODEID_NULL;
-    UA_StatusCode retval = findChildByBrowsename(server, session, destinationNodeId,
-                                                 &rd->browseName, &existingChild);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Have a child with that browseName. Deep-copy missing members. */
-    if(!UA_NodeId_isNull(&existingChild)) {
-        if(rd->nodeClass == UA_NODECLASS_VARIABLE ||
-           rd->nodeClass == UA_NODECLASS_OBJECT)
-            retval = copyAllChildren(server, session, &rd->nodeId.nodeId, &existingChild);
-        UA_NodeId_deleteMembers(&existingChild);
-        return retval;
-    }
-
-    /* Is the child mandatory? If not, ask callback whether child should be instantiated.
-     * If not, skip. */
-    if(!isMandatoryChild(server, session, &rd->nodeId.nodeId)) {
-        if(!server->config.nodeLifecycle.createOptionalChild)
-            return UA_STATUSCODE_GOOD;
-
-        UA_UNLOCK(server->serviceMutex);
-        retval = server->config.nodeLifecycle.createOptionalChild(server,
-                                                                 &session->sessionId,
-                                                                 session->sessionHandle,
-                                                                 &rd->nodeId.nodeId,
-                                                                 destinationNodeId,
-                                                                 &rd->referenceTypeId);
-        UA_LOCK(server->serviceMutex);
-        if(retval == UA_FALSE) {
-            return UA_STATUSCODE_GOOD;
-        }
-    }
-
-    /* Child is a method -> create a reference */
-    if(rd->nodeClass == UA_NODECLASS_METHOD) {
-        UA_AddReferencesItem newItem;
-        UA_AddReferencesItem_init(&newItem);
-        newItem.sourceNodeId = *destinationNodeId;
-        newItem.referenceTypeId = rd->referenceTypeId;
-        newItem.isForward = true;
-        newItem.targetNodeId = rd->nodeId;
-        newItem.targetNodeClass = UA_NODECLASS_METHOD;
-        Operation_addReference(server, session, NULL, &newItem, &retval);
-        return retval;
-    }
-
-    /* Child is a variable or object */
-    if(rd->nodeClass == UA_NODECLASS_VARIABLE ||
-       rd->nodeClass == UA_NODECLASS_OBJECT) {
-        /* Make a copy of the node */
-        UA_Node *node;
-        retval = UA_Nodestore_getNodeCopy(server->nsCtx, &rd->nodeId.nodeId, &node);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-
-        /* Remove the context of the copied node */
-        node->context = NULL;
-        node->constructed = false;
-
-        /* Reset the NodeId (random numeric id will be assigned in the nodestore) */
-        UA_NodeId_deleteMembers(&node->nodeId);
-        node->nodeId.namespaceIndex = destinationNodeId->namespaceIndex;
-
-        if (server->config.nodeLifecycle.generateChildNodeId) {
-            UA_UNLOCK(server->serviceMutex);
-            retval = server->config.nodeLifecycle.generateChildNodeId(server,
-                                                                      &session->sessionId, session->sessionHandle,
-                                                                      &rd->nodeId.nodeId,
-                                                                      destinationNodeId,
-                                                                      &rd->referenceTypeId,
-                                                                      &node->nodeId);
-            UA_LOCK(server->serviceMutex);
-            if(retval != UA_STATUSCODE_GOOD) {
-                UA_Nodestore_deleteNode(server->nsCtx, node);
-                return retval;
-            }
-        }
-
-
-        /* Remove references, they are re-created from scratch in addnode_finish */
-        /* TODO: Be more clever in removing references that are re-added during
-         * addnode_finish. That way, we can call addnode_finish also on children that were
-         * manually added by the user during addnode_begin and addnode_finish. */
-        /* For now we keep all the modelling rule references and delete all others */
-        UA_NodeId modellingRuleReferenceId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE);
-        UA_Node_deleteReferencesSubset(node, 1, &modellingRuleReferenceId);
-
-        /* Add the node to the nodestore */
-        UA_NodeId newNodeId;
-        retval = UA_Nodestore_insertNode(server->nsCtx, node, &newNodeId);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-
-        /* Add the node references */
-        retval = AddNode_addRefs(server, session, &newNodeId, destinationNodeId,
-                                 &rd->referenceTypeId, &rd->typeDefinition.nodeId);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_Nodestore_removeNode(server->nsCtx, &newNodeId);
-            return retval;
-        }
-
-        /* For the new child, recursively copy the members of the original. No
-         * typechecking is performed here. Assuming that the original is
-         * consistent. */
-        retval = copyAllChildren(server, session, &rd->nodeId.nodeId, &newNodeId);
-    }
-
-    return retval;
-}
-
-/* Copy any children of Node sourceNodeId to another node destinationNodeId. */
-static UA_StatusCode
-copyAllChildren(UA_Server *server, UA_Session *session,
-                const UA_NodeId *source, const UA_NodeId *destination) {
-    /* Browse to get all children of the source */
-    UA_BrowseDescription bd;
-    UA_BrowseDescription_init(&bd);
-    bd.nodeId = *source;
-    bd.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_AGGREGATES);
-    bd.includeSubtypes = true;
-    bd.browseDirection = UA_BROWSEDIRECTION_FORWARD;
-    bd.nodeClassMask = UA_NODECLASS_OBJECT | UA_NODECLASS_VARIABLE | UA_NODECLASS_METHOD;
-    bd.resultMask = UA_BROWSERESULTMASK_REFERENCETYPEID | UA_BROWSERESULTMASK_NODECLASS |
-        UA_BROWSERESULTMASK_BROWSENAME | UA_BROWSERESULTMASK_TYPEDEFINITION;
-
-    UA_BrowseResult br;
-    UA_BrowseResult_init(&br);
-    UA_UInt32 maxrefs = 0;
-    Operation_Browse(server, session, &maxrefs, &bd, &br);
-    if(br.statusCode != UA_STATUSCODE_GOOD)
-        return br.statusCode;
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    for(size_t i = 0; i < br.referencesSize; ++i) {
-        UA_ReferenceDescription *rd = &br.references[i];
-        retval = copyChild(server, session, destination, rd);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-    }
-
-    UA_BrowseResult_deleteMembers(&br);
-    return retval;
-}
-
-static UA_StatusCode
-addTypeChildren(UA_Server *server, UA_Session *session,
-                const UA_Node *node, const UA_Node *type) {
-    /* Get the hierarchy of the type and all its supertypes */
-    UA_NodeId *hierarchy = NULL;
-    size_t hierarchySize = 0;
-    UA_StatusCode retval = getParentTypeAndInterfaceHierarchy(server, &type->nodeId,
-                                                              &hierarchy, &hierarchySize);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    UA_assert(hierarchySize < 1000);
-
-    /* Copy members of the type and supertypes (and instantiate them) */
-    for(size_t i = 0; i < hierarchySize; ++i) {
-        retval = copyAllChildren(server, session, &hierarchy[i], &node->nodeId);
-        if(retval != UA_STATUSCODE_GOOD)
-            break;
-    }
-
-    UA_Array_delete(hierarchy, hierarchySize, &UA_TYPES[UA_TYPES_NODEID]);
-    return retval;
-}
-
-static UA_StatusCode
-addRef(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId,
-       const UA_NodeId *referenceTypeId, const UA_NodeId *parentNodeId,
-       UA_Boolean forward) {
-    UA_AddReferencesItem ref_item;
-    UA_AddReferencesItem_init(&ref_item);
-    ref_item.sourceNodeId = *nodeId;
-    ref_item.referenceTypeId = *referenceTypeId;
-    ref_item.isForward = forward;
-    ref_item.targetNodeId.nodeId = *parentNodeId;
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    Operation_addReference(server, session, NULL, &ref_item, &retval);
-    return retval;
-}
-
-/************/
-/* Add Node */
-/************/
-
-static const UA_NodeId hasSubtype = {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_HASSUBTYPE}};
-
-UA_StatusCode
-AddNode_addRefs(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId,
-                const UA_NodeId *parentNodeId, const UA_NodeId *referenceTypeId,
-                const UA_NodeId *typeDefinitionId) {
-    /* Get the node */
-    const UA_Node *type = NULL;
-    const UA_Node *node = UA_Nodestore_getNode(server->nsCtx, nodeId);
-    if(!node)
-        return UA_STATUSCODE_BADNODEIDUNKNOWN;
-
-    /* Use the typeDefinition as parent for type-nodes */
-    if(node->nodeClass == UA_NODECLASS_VARIABLETYPE ||
-       node->nodeClass == UA_NODECLASS_OBJECTTYPE ||
-       node->nodeClass == UA_NODECLASS_REFERENCETYPE ||
-       node->nodeClass == UA_NODECLASS_DATATYPE) {
-        if(UA_NodeId_equal(referenceTypeId, &UA_NODEID_NULL))
-            referenceTypeId = &hasSubtype;
-        const UA_Node *parentNode = UA_Nodestore_getNode(server->nsCtx, parentNodeId);
-        if(parentNode) {
-            if(parentNode->nodeClass == node->nodeClass)
-                typeDefinitionId = parentNodeId;
-            UA_Nodestore_releaseNode(server->nsCtx, parentNode);
-        }
-    }
-
-    /* Check parent reference. Objects may have no parent. */
-    UA_StatusCode retval = checkParentReference(server, session, node->nodeClass,
-                                                parentNodeId, referenceTypeId);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_NODEID_WRAP(nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "AddNodes: The parent reference for %.*s is invalid "
-                            "with status code %s",
-                            (int)nodeIdStr.length, nodeIdStr.data,
-                            UA_StatusCode_name(retval)));
-        goto cleanup;
-    }
-
-    /* Replace empty typeDefinition with the most permissive default */
-    if((node->nodeClass == UA_NODECLASS_VARIABLE ||
-        node->nodeClass == UA_NODECLASS_OBJECT) &&
-       UA_NodeId_isNull(typeDefinitionId)) {
-        UA_LOG_NODEID_WRAP(nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "AddNodes: No TypeDefinition for %.*s; Use the default "
-                            "TypeDefinition for the Variable/Object",
-                            (int)nodeIdStr.length, nodeIdStr.data));
-        if(node->nodeClass == UA_NODECLASS_VARIABLE)
-            typeDefinitionId = &baseDataVariableType;
-        else
-            typeDefinitionId = &baseObjectType;
-    }
-
-    /* Get the node type. There must be a typedefinition for variables, objects
-     * and type-nodes. See the above checks. */
-    if(!UA_NodeId_isNull(typeDefinitionId)) {
-        /* Get the type node */
-        type = UA_Nodestore_getNode(server->nsCtx, typeDefinitionId);
-        if(!type) {
-            UA_LOG_NODEID_WRAP(typeDefinitionId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                                "AddNodes: Node type %.*s not found",
-                                (int)nodeIdStr.length, nodeIdStr.data));
-            retval = UA_STATUSCODE_BADTYPEDEFINITIONINVALID;
-            goto cleanup;
-        }
-
-        UA_Boolean typeOk = false;
-        switch(node->nodeClass) {
-            case UA_NODECLASS_DATATYPE:
-                typeOk = type->nodeClass == UA_NODECLASS_DATATYPE;
-                break;
-            case UA_NODECLASS_METHOD:
-                typeOk = type->nodeClass == UA_NODECLASS_METHOD;
-                break;
-            case UA_NODECLASS_OBJECT:
-                typeOk = type->nodeClass == UA_NODECLASS_OBJECTTYPE;
-                break;
-            case UA_NODECLASS_OBJECTTYPE:
-                typeOk = type->nodeClass == UA_NODECLASS_OBJECTTYPE;
-                break;
-            case UA_NODECLASS_REFERENCETYPE:
-                typeOk = type->nodeClass == UA_NODECLASS_REFERENCETYPE;
-                break;
-            case UA_NODECLASS_VARIABLE:
-                typeOk = type->nodeClass == UA_NODECLASS_VARIABLETYPE;
-                break;
-            case UA_NODECLASS_VARIABLETYPE:
-                typeOk = type->nodeClass == UA_NODECLASS_VARIABLETYPE;
-                break;
-            case UA_NODECLASS_VIEW:
-                typeOk = type->nodeClass == UA_NODECLASS_VIEW;
-                break;
-            default:
-                typeOk = false;
-        }
-        if(!typeOk) {
-            UA_LOG_NODEID_WRAP(nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                                "AddNodes: Type for %.*s does not match node class",
-                                (int)nodeIdStr.length, nodeIdStr.data));
-            retval = UA_STATUSCODE_BADTYPEDEFINITIONINVALID;
-            goto cleanup;
-        }
-
-        /* See if the type has the correct node class. For type-nodes, we know
-         * that type has the same nodeClass from checkParentReference. */
-        if(node->nodeClass == UA_NODECLASS_VARIABLE) {
-            if(((const UA_VariableTypeNode*)type)->isAbstract) {
-                /* Get subtypes of the parent reference types */
-                UA_NodeId *parentTypeHierarchy = NULL;
-                size_t parentTypeHierarchySize = 0;
-                retval |= referenceSubtypes(server, &parentReferences[0],
-                                            &parentTypeHierarchySize, &parentTypeHierarchy);
-                retval |= referenceSubtypes(server, &parentReferences[1],
-                                            &parentTypeHierarchySize, &parentTypeHierarchy);
-                if(retval != UA_STATUSCODE_GOOD) {
-                    UA_Array_delete(parentTypeHierarchy, parentTypeHierarchySize,
-                                    &UA_TYPES[UA_TYPES_NODEID]);
-                    goto cleanup;
-                }
-
-                /* Abstract variable is allowed if parent is a children of a
-                 * base data variable. An abstract variable may be part of an
-                 * object type which again is below BaseObjectType */
-                const UA_NodeId variableTypes = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE);
-                const UA_NodeId objectTypes = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE);
-                if(!isNodeInTree(server->nsCtx, parentNodeId, &variableTypes,
-                                 parentTypeHierarchy, parentTypeHierarchySize) &&
-                   !isNodeInTree(server->nsCtx, parentNodeId, &objectTypes,
-                                 parentTypeHierarchy, parentTypeHierarchySize)) {
-                    UA_LOG_NODEID_WRAP(nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                                        "AddNodes: Type of variable node %.*s must "
-                                        "be VariableType and not cannot be abstract",
-                                        (int)nodeIdStr.length, nodeIdStr.data));
-                    retval = UA_STATUSCODE_BADTYPEDEFINITIONINVALID;
-                }
-                UA_Array_delete(parentTypeHierarchy, parentTypeHierarchySize,
-                                &UA_TYPES[UA_TYPES_NODEID]);
-                if(retval != UA_STATUSCODE_GOOD)
-                    goto cleanup;
-            }
-        }
-
-        if(node->nodeClass == UA_NODECLASS_OBJECT) {
-            if(((const UA_ObjectTypeNode*)type)->isAbstract) {
-                /* Get subtypes of the parent reference types */
-                UA_NodeId *parentTypeHierarchy = NULL;
-                size_t parentTypeHierarchySize = 0;
-                retval |= referenceSubtypes(server, &parentReferences[0],
-                                            &parentTypeHierarchySize, &parentTypeHierarchy);
-                retval |= referenceSubtypes(server, &parentReferences[1],
-                                            &parentTypeHierarchySize, &parentTypeHierarchy);
-                if(retval != UA_STATUSCODE_GOOD) {
-                    UA_Array_delete(parentTypeHierarchy, parentTypeHierarchySize,
-                                    &UA_TYPES[UA_TYPES_NODEID]);
-                    goto cleanup;
-                }
-
-                /* Object node created of an abstract ObjectType. Only allowed
-                 * if within BaseObjectType folder or if it's an event (subType of BaseEventType) */
-                const UA_NodeId objectTypes = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE);
-                UA_Boolean isInBaseObjectType = isNodeInTree(server->nsCtx, parentNodeId, &objectTypes,
-                                                             parentTypeHierarchy, parentTypeHierarchySize);
-
-                const UA_NodeId eventTypes = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEEVENTTYPE);
-                UA_Boolean isInBaseEventType = isNodeInTree(server->nsCtx, &type->nodeId, &eventTypes, &hasSubtype, 1);
-
-                if(!isInBaseObjectType && !(isInBaseEventType && UA_NodeId_isNull(parentNodeId))) {
-                    UA_LOG_NODEID_WRAP(nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                                        "AddNodes: Type of object node %.*s must "
-                                        "be ObjectType and not be abstract",
-                                        (int)nodeIdStr.length, nodeIdStr.data));
-                    retval = UA_STATUSCODE_BADTYPEDEFINITIONINVALID;
-                }
-                UA_Array_delete(parentTypeHierarchy, parentTypeHierarchySize,
-                                &UA_TYPES[UA_TYPES_NODEID]);
-                if(retval != UA_STATUSCODE_GOOD)
-                    goto cleanup;
-            }
-        }
-    }
-
-    /* Add reference to the parent */
-    if(!UA_NodeId_isNull(parentNodeId)) {
-        if(UA_NodeId_isNull(referenceTypeId)) {
-            UA_LOG_NODEID_WRAP(nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                                "AddNodes: Reference to parent of %.*s cannot be null",
-                                (int)nodeIdStr.length, nodeIdStr.data));
-            retval = UA_STATUSCODE_BADTYPEDEFINITIONINVALID;
-            goto cleanup;
-        }
-
-        retval = addRef(server, session, &node->nodeId, referenceTypeId, parentNodeId, false);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_NODEID_WRAP(nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                                "AddNodes: Adding reference to parent of %.*s failed",
-                                (int)nodeIdStr.length, nodeIdStr.data));
-            goto cleanup;
-        }
-    }
-
-    /* Add a hasTypeDefinition reference */
-    if(node->nodeClass == UA_NODECLASS_VARIABLE ||
-       node->nodeClass == UA_NODECLASS_OBJECT) {
-        UA_assert(type != NULL); /* see above */
-        retval = addRef(server, session, &node->nodeId, &hasTypeDefinition, &type->nodeId, true);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_NODEID_WRAP(nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                                "AddNodes: Adding a reference to the type "
-                                "definition of %.*s failed with error code %s",
-                                (int)nodeIdStr.length, nodeIdStr.data,
-                                UA_StatusCode_name(retval)));
-        }
-    }
-
- cleanup:
-    UA_Nodestore_releaseNode(server->nsCtx, node);
-    if(type)
-        UA_Nodestore_releaseNode(server->nsCtx, type);
-    return retval;
-}
-
-/* Create the node and add it to the nodestore. But don't typecheck and add
- * references so far */
-UA_StatusCode
-AddNode_raw(UA_Server *server, UA_Session *session, void *nodeContext,
-            const UA_AddNodesItem *item, UA_NodeId *outNewNodeId) {
-    /* Do not check access for server */
-    if(session != &server->adminSession && server->config.accessControl.allowAddNode) {
-        UA_UNLOCK(server->serviceMutex)
-        if (!server->config.accessControl.allowAddNode(server, &server->config.accessControl,
-                                                       &session->sessionId, session->sessionHandle, item)) {
-            UA_LOCK(server->serviceMutex);
-            return UA_STATUSCODE_BADUSERACCESSDENIED;
-        }
-        UA_LOCK(server->serviceMutex);
-    }
-
-    /* Check the namespaceindex */
-    if(item->requestedNewNodeId.nodeId.namespaceIndex >= server->namespacesSize) {
-        UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "AddNodes: Namespace invalid");
-        return UA_STATUSCODE_BADNODEIDINVALID;
-    }
-
-    if(item->nodeAttributes.encoding != UA_EXTENSIONOBJECT_DECODED &&
-       item->nodeAttributes.encoding != UA_EXTENSIONOBJECT_DECODED_NODELETE) {
-        UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "AddNodes: Node attributes invalid");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    /* Create a node */
-    UA_Node *node = UA_Nodestore_newNode(server->nsCtx, item->nodeClass);
-    if(!node) {
-        UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "AddNodes: Node could not create a node "
-                            "in the nodestore");
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-
-    /* Fill the node attributes */
-    node->context = nodeContext;
-    UA_StatusCode retval = UA_NodeId_copy(&item->requestedNewNodeId.nodeId, &node->nodeId);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto create_error;
-
-    retval = UA_QualifiedName_copy(&item->browseName, &node->browseName);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto create_error;
-
-    retval = UA_Node_setAttributes(node, item->nodeAttributes.content.decoded.data,
-                                   item->nodeAttributes.content.decoded.type);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto create_error;
-
-    /* Add the node to the nodestore */
-    retval = UA_Nodestore_insertNode(server->nsCtx, node, outNewNodeId);
-    if(retval != UA_STATUSCODE_GOOD)
-        UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "AddNodes: Node could not add the new node "
-                            "to the nodestore with error code %s",
-                            UA_StatusCode_name(retval));
-    return retval;
-
-create_error:
-    UA_LOG_INFO_SESSION(&server->config.logger, session,
-                        "AddNodes: Node could not create a node "
-                        "with error code %s", UA_StatusCode_name(retval));
-    UA_Nodestore_deleteNode(server->nsCtx, node);
-    return retval;
-}
-
-/* Prepare the node, then add it to the nodestore */
-static UA_StatusCode
-Operation_addNode_begin(UA_Server *server, UA_Session *session, void *nodeContext,
-                        const UA_AddNodesItem *item, const UA_NodeId *parentNodeId,
-                        const UA_NodeId *referenceTypeId, UA_NodeId *outNewNodeId) {
-    /* Create a temporary NodeId if none is returned */
-    UA_NodeId newId;
-    if(!outNewNodeId) {
-        UA_NodeId_init(&newId);
-        outNewNodeId = &newId;
-    }
-
-    /* Create the node and add it to the nodestore */
-    UA_StatusCode retval = AddNode_raw(server, session, nodeContext, item, outNewNodeId);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Typecheck and add references to parent and type definition */
-    retval = AddNode_addRefs(server, session, outNewNodeId, parentNodeId,
-                             referenceTypeId, &item->typeDefinition.nodeId);
-    if(retval != UA_STATUSCODE_GOOD)
-        deleteNode(server, *outNewNodeId, true);
-
-    if(outNewNodeId == &newId)
-        UA_NodeId_deleteMembers(&newId);
-    return retval;
-}
-
-static UA_StatusCode
-recursiveTypeCheckAddChildren(UA_Server *server, UA_Session *session,
-                              const UA_Node **nodeptr, const UA_Node *type) {
-    UA_assert(type != NULL);
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    const UA_Node *node = *nodeptr;
-
-    /* Use attributes from the type. The value and value constraints are the
-     * same for the variable and variabletype attribute structs. */
-    if(node->nodeClass == UA_NODECLASS_VARIABLE ||
-       node->nodeClass == UA_NODECLASS_VARIABLETYPE) {
-        retval = useVariableTypeAttributes(server, session, (const UA_VariableNode**)nodeptr,
-                                           (const UA_VariableTypeNode*)type);
-        node = *nodeptr; /* If the node was replaced */
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_NODEID_WRAP(&node->nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                               "AddNodes: Using attributes for %.*s from the variable type "
-                               "failed with error code %s", (int)nodeIdStr.length,
-                               nodeIdStr.data, UA_StatusCode_name(retval)));
-            return retval;
-        }
-
-        /* Check NodeClass for 'hasSubtype'. UA_NODECLASS_VARIABLE not allowed to have subtype */
-        if((node->nodeClass == UA_NODECLASS_VARIABLE) && (UA_NodeId_equal(
-                &node->references->referenceTypeId, &hasSubtype))) {
-            UA_LOG_INFO_SESSION(&server->config.logger, session,
-                                            "AddNodes: VariableType not allowed to have HasSubType");
-            return UA_STATUSCODE_BADREFERENCENOTALLOWED;
-        }
-
-        /* Check if all attributes hold the constraints of the type now. The initial
-         * attributes must type-check. The constructor might change the attributes
-         * again. Then, the changes are type-checked by the normal write service. */
-        retval = typeCheckVariableNode(server, session, (const UA_VariableNode*)node,
-                                       (const UA_VariableTypeNode*)type);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_NODEID_WRAP(&node->nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                               "AddNodes: Type-checking the variable node %.*s "
-                               "failed with error code %s", (int)nodeIdStr.length,
-                               nodeIdStr.data, UA_StatusCode_name(retval)));
-            return retval;
-        }
-    }
-
-    /* Add (mandatory) child nodes from the type definition */
-    if(node->nodeClass == UA_NODECLASS_VARIABLE ||
-       node->nodeClass == UA_NODECLASS_OBJECT) {
-        retval = addTypeChildren(server, session, node, type);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_NODEID_WRAP(&node->nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                               "AddNodes: Adding child nodes of  %.*s failed with error code %s",
-                               (int)nodeIdStr.length, nodeIdStr.data, UA_StatusCode_name(retval)));
-        }
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-findDefaultInstanceBrowseNameNode(UA_Server *server,
-                    UA_NodeId startingNode, UA_NodeId *foundId){
-
-    UA_NodeId_init(foundId);
-    UA_RelativePathElement rpe;
-    UA_RelativePathElement_init(&rpe);
-    rpe.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY);
-    rpe.isInverse = false;
-    rpe.includeSubtypes = false;
-    rpe.targetName = UA_QUALIFIEDNAME(0, "DefaultInstanceBrowseName");
-    UA_BrowsePath bp;
-    UA_BrowsePath_init(&bp);
-    bp.startingNode = startingNode;
-    bp.relativePath.elementsSize = 1;
-    bp.relativePath.elements = &rpe;
-    UA_BrowsePathResult bpr =
-            translateBrowsePathToNodeIds(server, &bp);
-    UA_StatusCode retval = bpr.statusCode;
-    if (retval == UA_STATUSCODE_GOOD &&
-        bpr.targetsSize > 0) {
-        retval = UA_NodeId_copy(&bpr.targets[0].targetId.nodeId, foundId);
-    }
-    UA_BrowsePathResult_deleteMembers(&bpr);
-    return retval;
-}
-
-/* Check if we got a valid browse name for the new node.
- * For object nodes the BrowseName may only be null if the parent type has a
- * 'DefaultInstanceBrowseName' property.
- * */
-static UA_StatusCode
-checkValidBrowseName(UA_Server *server, UA_Session *session,
-                     const UA_Node *node, const UA_Node *type) {
-
-    UA_assert(type != NULL);
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-
-    if(node->nodeClass != UA_NODECLASS_OBJECT) {
-        /* nodes other than Objects must have a browseName */
-        if (UA_QualifiedName_isNull(&node->browseName))
-            return UA_STATUSCODE_BADBROWSENAMEINVALID;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* If the object node already has a browse name we are done here. */
-    if(!UA_QualifiedName_isNull(&node->browseName))
-        return UA_STATUSCODE_GOOD;
-
-    /* at this point we have an object with an empty browse name.
-     * Check the type node if it has a DefaultInstanceBrowseName property
-     */
-
-    UA_NodeId defaultBrowseNameNode;
-    retval = findDefaultInstanceBrowseNameNode(server, type->nodeId, &defaultBrowseNameNode);
-    if (retval != UA_STATUSCODE_GOOD) {
-        if (retval == UA_STATUSCODE_BADNOMATCH)
-            /* the DefaultBrowseName property is not found, return the corresponding status code */
-            return UA_STATUSCODE_BADBROWSENAMEINVALID;
-        return retval;
-    }
-
-    UA_Variant defaultBrowseName;
-    retval = readWithReadValue(server, &defaultBrowseNameNode, UA_ATTRIBUTEID_VALUE, &defaultBrowseName);
-    if (retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    UA_QualifiedName *defaultValue = (UA_QualifiedName *) defaultBrowseName.data;
-    retval = writeWithWriteValue(server, &node->nodeId, UA_ATTRIBUTEID_BROWSENAME, &UA_TYPES[UA_TYPES_QUALIFIEDNAME], defaultValue);
-    UA_Variant_clear(&defaultBrowseName);
-
-    return retval;
-}
-
-/* Construct children first */
-static UA_StatusCode
-recursiveCallConstructors(UA_Server *server, UA_Session *session,
-                          const UA_Node *node, const UA_Node *type) {
-    if(node->constructed)
-        return UA_STATUSCODE_GOOD;
-    
-    /* Construct the children */
-    UA_BrowseDescription bd;
-    UA_BrowseDescription_init(&bd);
-    bd.nodeId = node->nodeId;
-    bd.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_AGGREGATES);
-    bd.includeSubtypes = true;
-    bd.browseDirection = UA_BROWSEDIRECTION_FORWARD;
-
-    UA_BrowseResult br;
-    UA_BrowseResult_init(&br);
-    UA_UInt32 maxrefs = 0;
-    Operation_Browse(server, session, &maxrefs, &bd, &br);
-    if(br.statusCode != UA_STATUSCODE_GOOD)
-        return br.statusCode;
-
-    /* Call the constructor for every unconstructed node */
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    for(size_t i = 0; i < br.referencesSize; ++i) {
-        UA_ReferenceDescription *rd = &br.references[i];
-        const UA_Node *target = UA_Nodestore_getNode(server->nsCtx, &rd->nodeId.nodeId);
-        if(!target)
-            continue;
-        if(target->constructed) {
-            UA_Nodestore_releaseNode(server->nsCtx, target);
-            continue;
-        }
-
-        const UA_Node *targetType = NULL;
-        if(node->nodeClass == UA_NODECLASS_VARIABLE ||
-           node->nodeClass == UA_NODECLASS_OBJECT) {
-            targetType = getNodeType(server, target);
-            if(!targetType) {
-                UA_Nodestore_releaseNode(server->nsCtx, target);
-                retval = UA_STATUSCODE_BADTYPEDEFINITIONINVALID;
-                break;
-            }
-        }
-        retval = recursiveCallConstructors(server, session, target, targetType);
-        UA_Nodestore_releaseNode(server->nsCtx, target);
-        if(targetType)
-            UA_Nodestore_releaseNode(server->nsCtx, targetType);
-        if(retval != UA_STATUSCODE_GOOD)
-            break;
-    }
-
-    UA_BrowseResult_deleteMembers(&br);
-
-    /* If a child could not be constructed or the node is already constructed */
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Get the node type constructor */
-    const UA_NodeTypeLifecycle *lifecycle = NULL;
-    if(type && node->nodeClass == UA_NODECLASS_OBJECT) {
-        const UA_ObjectTypeNode *ot = (const UA_ObjectTypeNode*)type;
-        lifecycle = &ot->lifecycle;
-    } else if(type && node->nodeClass == UA_NODECLASS_VARIABLE) {
-        const UA_VariableTypeNode *vt = (const UA_VariableTypeNode*)type;
-        lifecycle = &vt->lifecycle;
-    }
-
-    /* Call the global constructor */
-    void *context = node->context;
-    if(server->config.nodeLifecycle.constructor) {
-        UA_UNLOCK(server->serviceMutex);
-        retval = server->config.nodeLifecycle.constructor(server, &session->sessionId,
-                                                          session->sessionHandle,
-                                                          &node->nodeId, &context);
-        UA_LOCK(server->serviceMutex);
-    }
-
-    /* Call the type constructor */
-    if(retval == UA_STATUSCODE_GOOD && lifecycle && lifecycle->constructor) {
-        UA_UNLOCK(server->serviceMutex)
-        retval = lifecycle->constructor(server, &session->sessionId,
-                                        session->sessionHandle, &type->nodeId,
-                                        type->context, &node->nodeId, &context);
-        UA_LOCK(server->serviceMutex);
-    }
-
-    if(retval != UA_STATUSCODE_GOOD)
-        goto fail1;
-
-    /* Set the context *and* mark the node as constructed */
-    if(retval == UA_STATUSCODE_GOOD)
-        retval = UA_Server_editNode(server, &server->adminSession, &node->nodeId,
-                                    (UA_EditNodeCallback)setConstructedNodeContext,
-                                    context);
-
-    /* All good, return */
-    if(retval == UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Fail. Call the destructors. */
-    if(lifecycle && lifecycle->destructor) {
-        UA_UNLOCK(server->serviceMutex);
-        lifecycle->destructor(server, &session->sessionId,
-                              session->sessionHandle, &type->nodeId,
-                              type->context, &node->nodeId, &context);
-        UA_LOCK(server->serviceMutex)
-    }
-
-
- fail1:
-    if(server->config.nodeLifecycle.destructor) {
-        UA_UNLOCK(server->serviceMutex);
-        server->config.nodeLifecycle.destructor(server, &session->sessionId,
-                                                session->sessionHandle,
-                                                &node->nodeId, context);
-        UA_LOCK(server->serviceMutex);
-    }
-
-    return retval;
-}
-
-static void
-recursiveDeconstructNode(UA_Server *server, UA_Session *session,
-                         size_t hierarchicalReferencesSize,
-                         UA_ExpandedNodeId *hierarchicalReferences,
-                         const UA_Node *node);
-
-static void
-recursiveDeleteNode(UA_Server *server, UA_Session *session,
-                    size_t hierarchicalReferencesSize,
-                    UA_ExpandedNodeId *hierarchicalReferences,
-                    const UA_Node *node, UA_Boolean removeTargetRefs);
-
-/* Children, references, type-checking, constructors. */
-UA_StatusCode
-AddNode_finish(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId) {
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-
-    /* Get the node */
-    const UA_Node *node = UA_Nodestore_getNode(server->nsCtx, nodeId);
-    if(!node)
-        return UA_STATUSCODE_BADNODEIDUNKNOWN;
-
-    const UA_Node *type = NULL;
-
-    /* Instantiate variables and objects */
-    if(node->nodeClass == UA_NODECLASS_VARIABLE ||
-       node->nodeClass == UA_NODECLASS_VARIABLETYPE ||
-       node->nodeClass == UA_NODECLASS_OBJECT) {
-        /* Get the type node */
-        type = getNodeType(server, node);
-        if(!type) {
-            if(server->bootstrapNS0)
-                goto constructor;
-            UA_LOG_NODEID_WRAP(&node->nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                               "AddNodes: Node type for %.*s not found",
-                               (int)nodeIdStr.length, nodeIdStr.data));
-            retval = UA_STATUSCODE_BADTYPEDEFINITIONINVALID;
-            goto cleanup;
-        }
-
-        retval = checkValidBrowseName(server, session, node, type);
-        if(retval != UA_STATUSCODE_GOOD)
-            goto cleanup;
-
-        retval = recursiveTypeCheckAddChildren(server, session, &node, type);
-        if(retval != UA_STATUSCODE_GOOD)
-            goto cleanup;
-    }
-
-    /* Call the constructor(s) */
- constructor:
-    retval = recursiveCallConstructors(server, session, node, type);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_NODEID_WRAP(&node->nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
-                           "AddNodes: Calling the node constructor(s) of %.*s failed "
-                           "with status code %s", (int)nodeIdStr.length,
-                           nodeIdStr.data, UA_StatusCode_name(retval)));
-    }
-
- cleanup:
-    if(type)
-        UA_Nodestore_releaseNode(server->nsCtx, type);
-    if(retval != UA_STATUSCODE_GOOD) {
-        recursiveDeconstructNode(server, session, 0, NULL, node);
-        recursiveDeleteNode(server, session, 0, NULL, node, true);
-    }
-    UA_Nodestore_releaseNode(server->nsCtx, node);
-    return retval;
-}
-
-static void
-Operation_addNode(UA_Server *server, UA_Session *session, void *nodeContext,
-                  const UA_AddNodesItem *item, UA_AddNodesResult *result) {
-    result->statusCode =
-        Operation_addNode_begin(server, session, nodeContext, item, &item->parentNodeId.nodeId,
-                                &item->referenceTypeId, &result->addedNodeId);
-    if(result->statusCode != UA_STATUSCODE_GOOD)
-        return;
-
-    /* AddNodes_finish */
-    result->statusCode = AddNode_finish(server, session, &result->addedNodeId);
-
-    /* If finishing failed, the node was deleted */
-    if(result->statusCode != UA_STATUSCODE_GOOD)
-        UA_NodeId_deleteMembers(&result->addedNodeId);
-}
-
-void
-Service_AddNodes(UA_Server *server, UA_Session *session,
-                 const UA_AddNodesRequest *request,
-                 UA_AddNodesResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session, "Processing AddNodesRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    if(server->config.maxNodesPerNodeManagement != 0 &&
-       request->nodesToAddSize > server->config.maxNodesPerNodeManagement) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYOPERATIONS;
-        return;
-    }
-
-    response->responseHeader.serviceResult =
-        UA_Server_processServiceOperations(server, session,
-                                           (UA_ServiceOperation)Operation_addNode, NULL,
-                                           &request->nodesToAddSize, &UA_TYPES[UA_TYPES_ADDNODESITEM],
-                                           &response->resultsSize, &UA_TYPES[UA_TYPES_ADDNODESRESULT]);
-}
-
-UA_StatusCode
-addNode(UA_Server *server, const UA_NodeClass nodeClass,
-        const UA_NodeId *requestedNewNodeId,
-        const UA_NodeId *parentNodeId,
-        const UA_NodeId *referenceTypeId,
-        const UA_QualifiedName browseName,
-        const UA_NodeId *typeDefinition,
-        const UA_NodeAttributes *attr,
-        const UA_DataType *attributeType,
-        void *nodeContext, UA_NodeId *outNewNodeId) {
-    /* Create the AddNodesItem */
-    UA_AddNodesItem item;
-    UA_AddNodesItem_init(&item);
-    item.nodeClass = nodeClass;
-    item.requestedNewNodeId.nodeId = *requestedNewNodeId;
-    item.browseName = browseName;
-    item.parentNodeId.nodeId = *parentNodeId;
-    item.referenceTypeId = *referenceTypeId;
-    item.typeDefinition.nodeId = *typeDefinition;
-    item.nodeAttributes.encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
-    item.nodeAttributes.content.decoded.type = attributeType;
-    item.nodeAttributes.content.decoded.data = (void*)(uintptr_t)attr;
-
-    /* Call the normal addnodes service */
-    UA_AddNodesResult result;
-    UA_AddNodesResult_init(&result);
-    Operation_addNode(server, &server->adminSession, nodeContext, &item, &result);
-    if(outNewNodeId)
-        *outNewNodeId = result.addedNodeId;
-    else
-        UA_NodeId_deleteMembers(&result.addedNodeId);
-    return result.statusCode;
-}
-
-UA_StatusCode
-__UA_Server_addNode(UA_Server *server, const UA_NodeClass nodeClass,
-                    const UA_NodeId *requestedNewNodeId,
-                    const UA_NodeId *parentNodeId,
-                    const UA_NodeId *referenceTypeId,
-                    const UA_QualifiedName browseName,
-                    const UA_NodeId *typeDefinition,
-                    const UA_NodeAttributes *attr,
-                    const UA_DataType *attributeType,
-                    void *nodeContext, UA_NodeId *outNewNodeId) {
-    UA_LOCK(server->serviceMutex)
-    UA_StatusCode  reval = addNode(server, nodeClass, requestedNewNodeId, parentNodeId,
-            referenceTypeId, browseName, typeDefinition, attr, attributeType, nodeContext, outNewNodeId);
-    UA_UNLOCK(server->serviceMutex);
-    return reval;
-}
-
-UA_StatusCode
-UA_Server_addNode_begin(UA_Server *server, const UA_NodeClass nodeClass,
-                        const UA_NodeId requestedNewNodeId,
-                        const UA_NodeId parentNodeId,
-                        const UA_NodeId referenceTypeId,
-                        const UA_QualifiedName browseName,
-                        const UA_NodeId typeDefinition,
-                        const void *attr, const UA_DataType *attributeType,
-                        void *nodeContext, UA_NodeId *outNewNodeId) {
-    UA_AddNodesItem item;
-    UA_AddNodesItem_init(&item);
-    item.nodeClass = nodeClass;
-    item.requestedNewNodeId.nodeId = requestedNewNodeId;
-    item.browseName = browseName;
-    item.typeDefinition.nodeId = typeDefinition;
-    item.nodeAttributes.encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
-    item.nodeAttributes.content.decoded.type = attributeType;
-    item.nodeAttributes.content.decoded.data = (void*)(uintptr_t)attr;
-
-    UA_LOCK(server->serviceMutex);
-    UA_StatusCode retval = Operation_addNode_begin(server, &server->adminSession, nodeContext, &item,
-                                   &parentNodeId, &referenceTypeId, outNewNodeId);
-    UA_UNLOCK(server->serviceMutex);
-    return retval;
-}
-
-UA_StatusCode
-UA_Server_addNode_finish(UA_Server *server, const UA_NodeId nodeId) {
-    UA_LOCK(server->serviceMutex);
-    UA_StatusCode retval = AddNode_finish(server, &server->adminSession, &nodeId);
-    UA_UNLOCK(server->serviceMutex);
-    return retval;
-}
-
-/****************/
-/* Delete Nodes */
-/****************/
-
-static void
-Operation_deleteReference(UA_Server *server, UA_Session *session, void *context,
-                          const UA_DeleteReferencesItem *item, UA_StatusCode *retval);
-
-/* Remove references to this node (in the other nodes) */
-static void
-removeIncomingReferences(UA_Server *server, UA_Session *session,
-                         const UA_Node *node) {
-    UA_DeleteReferencesItem item;
-    UA_DeleteReferencesItem_init(&item);
-    item.targetNodeId.nodeId = node->nodeId;
-    item.deleteBidirectional = false;
-    UA_StatusCode dummy;
-    for(size_t i = 0; i < node->referencesSize; ++i) {
-        UA_NodeReferenceKind *refs = &node->references[i];
-        item.isForward = refs->isInverse;
-        item.referenceTypeId = refs->referenceTypeId;
-        for(size_t j = 0; j < refs->targetIdsSize; ++j) {
-            item.sourceNodeId = refs->targetIds[j].nodeId;
-            Operation_deleteReference(server, session, NULL, &item, &dummy);
-        }
-    }
-}
-
-/* A node can only be deleted if it has at most one incoming hierarchical
- * reference. If hierarchicalReferences is NULL, always remove. */
-static UA_Boolean
-multipleHierarchies(size_t hierarchicalRefsSize, UA_ExpandedNodeId *hierarchicalRefs,
-                    const UA_Node *node) {
-    if(!hierarchicalRefs)
-        return false;
-
-    size_t incomingRefs = 0;
-    for(size_t i = 0; i < node->referencesSize; i++) {
-        const UA_NodeReferenceKind *k = &node->references[i];
-        if(!k->isInverse)
-            continue;
-
-        UA_Boolean hierarchical = false;
-        for(size_t j = 0; j < hierarchicalRefsSize; j++) {
-            if(UA_NodeId_equal(&hierarchicalRefs[j].nodeId,
-                               &k->referenceTypeId)) {
-                hierarchical = true;
-                break;
-            }
-        }
-        if(!hierarchical)
-            continue;
-
-        incomingRefs += k->targetIdsSize;
-        if(incomingRefs > 1)
-            return true;
-    }
-
-    return false;
-}
-
-/* Recursively call the destructors of this node and all child nodes.
- * Deconstructs the parent before its children. */
-static void
-recursiveDeconstructNode(UA_Server *server, UA_Session *session,
-                         size_t hierarchicalRefsSize,
-                         UA_ExpandedNodeId *hierarchicalRefs,
-                         const UA_Node *node) {
-    /* Was the constructor called for the node? */
-    if(!node->constructed)
-        return;
-
-    /* Call the type-level destructor */
-    void *context = node->context; /* No longer needed after this function */
-    if(node->nodeClass == UA_NODECLASS_OBJECT ||
-       node->nodeClass == UA_NODECLASS_VARIABLE) {
-        const UA_Node *type = getNodeType(server, node);
-        if(type) {
-            const UA_NodeTypeLifecycle *lifecycle;
-            if(node->nodeClass == UA_NODECLASS_OBJECT)
-                lifecycle = &((const UA_ObjectTypeNode*)type)->lifecycle;
-            else
-                lifecycle = &((const UA_VariableTypeNode*)type)->lifecycle;
-            if(lifecycle->destructor)
-                lifecycle->destructor(server,
-                                      &session->sessionId, session->sessionHandle,
-                                      &type->nodeId, type->context,
-                                      &node->nodeId, &context);
-            UA_Nodestore_releaseNode(server->nsCtx, type);
-        }
-    }
-
-    /* Call the global destructor */
-    if(server->config.nodeLifecycle.destructor)
-        server->config.nodeLifecycle.destructor(server, &session->sessionId,
-                                                session->sessionHandle,
-                                                &node->nodeId, context);
-
-    /* Set the constructed flag to false */
-    UA_Server_editNode(server, &server->adminSession, &node->nodeId,
-                       (UA_EditNodeCallback)setDeconstructedNode, context);
-
-    /* Browse to get all children of the node */
-    UA_BrowseDescription bd;
-    UA_BrowseDescription_init(&bd);
-    bd.nodeId = node->nodeId;
-    bd.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_AGGREGATES);
-    bd.includeSubtypes = true;
-    bd.browseDirection = UA_BROWSEDIRECTION_FORWARD;
-
-    UA_BrowseResult br;
-    UA_BrowseResult_init(&br);
-    UA_UInt32 maxrefs = 0;
-    Operation_Browse(server, session, &maxrefs, &bd, &br);
-    if(br.statusCode != UA_STATUSCODE_GOOD)
-        return;
-
-    /* Deconstruct every child node */
-    for(size_t i = 0; i < br.referencesSize; ++i) {
-        UA_ReferenceDescription *rd = &br.references[i];
-        const UA_Node *child = UA_Nodestore_getNode(server->nsCtx, &rd->nodeId.nodeId);
-        if(!child)
-            continue;
-        /* Only delete child nodes that have no other parent */
-        if(!multipleHierarchies(hierarchicalRefsSize, hierarchicalRefs, child))
-            recursiveDeconstructNode(server, session, hierarchicalRefsSize,
-                                     hierarchicalRefs, child);
-        UA_Nodestore_releaseNode(server->nsCtx, child);
-    }
-
-    UA_BrowseResult_deleteMembers(&br);
-}
-
-static void
-recursiveDeleteNode(UA_Server *server, UA_Session *session,
-                    size_t hierarchicalRefsSize,
-                    UA_ExpandedNodeId *hierarchicalRefs,
-                    const UA_Node *node, UA_Boolean removeTargetRefs) {
-    /* Browse to get all children of the node */
-    UA_BrowseDescription bd;
-    UA_BrowseDescription_init(&bd);
-    bd.nodeId = node->nodeId;
-    bd.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_AGGREGATES);
-    bd.includeSubtypes = true;
-    bd.browseDirection = UA_BROWSEDIRECTION_FORWARD;
-
-    UA_BrowseResult br;
-    UA_BrowseResult_init(&br);
-    UA_UInt32 maxrefs = 0;
-    Operation_Browse(server, session, &maxrefs, &bd, &br);
-    if(br.statusCode != UA_STATUSCODE_GOOD)
-        return;
-
-    /* Remove every child */
-    for(size_t i = 0; i < br.referencesSize; ++i) {
-        UA_ReferenceDescription *rd = &br.references[i];
-        /* Check for self-reference to avoid endless loop */
-        if(UA_NodeId_equal(&node->nodeId, &rd->nodeId.nodeId))
-            continue;
-        const UA_Node *child = UA_Nodestore_getNode(server->nsCtx, &rd->nodeId.nodeId);
-        if(!child)
-            continue;
-        /* Only delete child nodes that have no other parent */
-        if(!multipleHierarchies(hierarchicalRefsSize, hierarchicalRefs, child))
-            recursiveDeleteNode(server, session, hierarchicalRefsSize,
-                                hierarchicalRefs, child, true);
-        UA_Nodestore_releaseNode(server->nsCtx, child);
-    }
-
-    UA_BrowseResult_deleteMembers(&br);
-
-    if(removeTargetRefs)
-        removeIncomingReferences(server, session, node);
-
-    UA_Nodestore_removeNode(server->nsCtx, &node->nodeId);
-}
-
-static void
-deleteNodeOperation(UA_Server *server, UA_Session *session, void *context,
-                    const UA_DeleteNodesItem *item, UA_StatusCode *result) {
-    /* Do not check access for server */
-    if(session != &server->adminSession && server->config.accessControl.allowDeleteNode) {
-        UA_UNLOCK(server->serviceMutex);
-        if ( !server->config.accessControl.allowDeleteNode(server, &server->config.accessControl,
-                &session->sessionId, session->sessionHandle, item)) {
-            UA_LOCK(server->serviceMutex);
-            *result = UA_STATUSCODE_BADUSERACCESSDENIED;
-            return;
-        }
-        UA_LOCK(server->serviceMutex);
-    }
-
-    const UA_Node *node = UA_Nodestore_getNode(server->nsCtx, &item->nodeId);
-    if(!node) {
-        *result = UA_STATUSCODE_BADNODEIDUNKNOWN;
-        return;
-    }
-
-    if(UA_Node_hasSubTypeOrInstances(node)) {
-        UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "Delete Nodes: Cannot delete a type node "
-                            "with active instances or subtypes");
-        UA_Nodestore_releaseNode(server->nsCtx, node);
-        *result = UA_STATUSCODE_BADINTERNALERROR;
-        return;
-    }
-
-    /* TODO: Check if the information model consistency is violated */
-    /* TODO: Check if the node is a mandatory child of a parent */
-
-    /* A node can be referenced with hierarchical references from several
-     * parents in the information model. (But not in a circular way.) The
-     * hierarchical references are checked to see if a node can be deleted.
-     * Getting the type hierarchy can fail in case of low RAM. In that case the
-     * nodes are always deleted. */
-    UA_ExpandedNodeId *hierarchicalRefs = NULL;
-    size_t hierarchicalRefsSize = 0;
-    UA_NodeId hr = UA_NODEID_NUMERIC(0, UA_NS0ID_HIERARCHICALREFERENCES);
-    browseRecursive(server, 1, &hr, 1, &subtypeId, UA_BROWSEDIRECTION_FORWARD, true,
-                    &hierarchicalRefsSize, &hierarchicalRefs);
-    if(!hierarchicalRefs) {
-        UA_LOG_WARNING_SESSION(&server->config.logger, session,
-                               "Delete Nodes: Cannot test for hierarchical "
-                               "references. Deleting the node and all child nodes.");
-    }
-    recursiveDeconstructNode(server, session, hierarchicalRefsSize, hierarchicalRefs, node);
-    recursiveDeleteNode(server, session, hierarchicalRefsSize, hierarchicalRefs, node,
-                        item->deleteTargetReferences);
-    UA_Array_delete(hierarchicalRefs, hierarchicalRefsSize, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-    
-    UA_Nodestore_releaseNode(server->nsCtx, node);
-}
-
-void Service_DeleteNodes(UA_Server *server, UA_Session *session,
-                         const UA_DeleteNodesRequest *request,
-                         UA_DeleteNodesResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Processing DeleteNodesRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    if(server->config.maxNodesPerNodeManagement != 0 &&
-       request->nodesToDeleteSize > server->config.maxNodesPerNodeManagement) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYOPERATIONS;
-        return;
-    }
-
-    response->responseHeader.serviceResult =
-        UA_Server_processServiceOperations(server, session,
-                                           (UA_ServiceOperation)deleteNodeOperation,
-                                           NULL, &request->nodesToDeleteSize,
-                                           &UA_TYPES[UA_TYPES_DELETENODESITEM],
-                                           &response->resultsSize, &UA_TYPES[UA_TYPES_STATUSCODE]);
-}
-
-UA_StatusCode
-UA_Server_deleteNode(UA_Server *server, const UA_NodeId nodeId,
-                     UA_Boolean deleteReferences) {
-    UA_LOCK(server->serviceMutex)
-    UA_StatusCode retval = deleteNode(server, nodeId, deleteReferences);
-    UA_UNLOCK(server->serviceMutex);
-    return retval;
-}
-
-UA_StatusCode
-deleteNode(UA_Server *server, const UA_NodeId nodeId,
-                     UA_Boolean deleteReferences) {
-    UA_DeleteNodesItem item;
-    item.deleteTargetReferences = deleteReferences;
-    item.nodeId = nodeId;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    deleteNodeOperation(server, &server->adminSession, NULL, &item, &retval);
-    return retval;
-}
-
-/******************/
-/* Add References */
-/******************/
-
-static UA_StatusCode
-addOneWayReference(UA_Server *server, UA_Session *session,
-             UA_Node *node, const UA_AddReferencesItem *item) {
-    return UA_Node_addReference(node, item);
-}
-
-static UA_StatusCode
-deleteOneWayReference(UA_Server *server, UA_Session *session, UA_Node *node,
-                      const UA_DeleteReferencesItem *item) {
-    return UA_Node_deleteReference(node, item);
-}
-
-static void
-Operation_addReference(UA_Server *server, UA_Session *session, void *context,
-                       const UA_AddReferencesItem *item, UA_StatusCode *retval) {
-    /* Do not check access for server */
-    if(session != &server->adminSession && server->config.accessControl.allowAddReference) {
-        UA_UNLOCK(server->serviceMutex);
-        if (!server->config.accessControl.
-                allowAddReference(server, &server->config.accessControl,
-                                  &session->sessionId, session->sessionHandle, item)) {
-            UA_LOCK(server->serviceMutex);
-            *retval = UA_STATUSCODE_BADUSERACCESSDENIED;
-            return;
-        }
-        UA_LOCK(server->serviceMutex);
-    }
-
-    /* Currently no expandednodeids are allowed */
-    if(item->targetServerUri.length > 0) {
-        *retval = UA_STATUSCODE_BADNOTIMPLEMENTED;
-        return;
-    }
-
-    /* Add the first direction */
-    *retval = UA_Server_editNode(server, session, &item->sourceNodeId,
-                                 (UA_EditNodeCallback)addOneWayReference,
-                                 /* cast away const because callback uses const anyway */
-                                 (UA_AddReferencesItem *)(uintptr_t)item);
-    UA_Boolean firstExisted = false;
-    if(*retval == UA_STATUSCODE_BADDUPLICATEREFERENCENOTALLOWED) {
-        *retval = UA_STATUSCODE_GOOD;
-        firstExisted = true;
-    } else if(*retval != UA_STATUSCODE_GOOD)
-        return;
-
-    /* Add the second direction */
-    UA_AddReferencesItem secondItem;
-    UA_AddReferencesItem_init(&secondItem);
-    secondItem.sourceNodeId = item->targetNodeId.nodeId;
-    secondItem.referenceTypeId = item->referenceTypeId;
-    secondItem.isForward = !item->isForward;
-    secondItem.targetNodeId.nodeId = item->sourceNodeId;
-    /* keep default secondItem.targetNodeClass = UA_NODECLASS_UNSPECIFIED */
-    *retval = UA_Server_editNode(server, session, &secondItem.sourceNodeId,
-                                 (UA_EditNodeCallback)addOneWayReference, &secondItem);
-
-    /* remove reference if the second direction failed */
-    UA_Boolean secondExisted = false;
-    if(*retval == UA_STATUSCODE_BADDUPLICATEREFERENCENOTALLOWED) {
-        *retval = UA_STATUSCODE_GOOD;
-        secondExisted = true;
-    } else if(*retval != UA_STATUSCODE_GOOD && !firstExisted) {
-        UA_DeleteReferencesItem deleteItem;
-        deleteItem.sourceNodeId = item->sourceNodeId;
-        deleteItem.referenceTypeId = item->referenceTypeId;
-        deleteItem.isForward = item->isForward;
-        deleteItem.targetNodeId = item->targetNodeId;
-        deleteItem.deleteBidirectional = false;
-        /* ignore returned status code */
-        UA_Server_editNode(server, session, &item->sourceNodeId,
-                           (UA_EditNodeCallback)deleteOneWayReference, &deleteItem);
-    }
-
-    /* Calculate common duplicate reference not allowed result and set bad result
-     * if BOTH directions already existed */
-    if(firstExisted && secondExisted)
-        *retval = UA_STATUSCODE_BADDUPLICATEREFERENCENOTALLOWED;
-}
-
-void Service_AddReferences(UA_Server *server, UA_Session *session,
-                           const UA_AddReferencesRequest *request,
-                           UA_AddReferencesResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Processing AddReferencesRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    if(server->config.maxNodesPerNodeManagement != 0 &&
-       request->referencesToAddSize > server->config.maxNodesPerNodeManagement) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYOPERATIONS;
-        return;
-    }
-
-    response->responseHeader.serviceResult =
-        UA_Server_processServiceOperations(server, session,
-                                           (UA_ServiceOperation)Operation_addReference,
-                                           NULL, &request->referencesToAddSize,
-                                           &UA_TYPES[UA_TYPES_ADDREFERENCESITEM],
-                                           &response->resultsSize, &UA_TYPES[UA_TYPES_STATUSCODE]);
-}
-
-UA_StatusCode
-UA_Server_addReference(UA_Server *server, const UA_NodeId sourceId,
-                       const UA_NodeId refTypeId,
-                       const UA_ExpandedNodeId targetId,
-                       UA_Boolean isForward) {
-    UA_AddReferencesItem item;
-    UA_AddReferencesItem_init(&item);
-    item.sourceNodeId = sourceId;
-    item.referenceTypeId = refTypeId;
-    item.isForward = isForward;
-    item.targetNodeId = targetId;
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    UA_LOCK(server->serviceMutex);
-    Operation_addReference(server, &server->adminSession, NULL, &item, &retval);
-    UA_UNLOCK(server->serviceMutex)
-    return retval;
-}
-
-/*********************/
-/* Delete References */
-/*********************/
-
-static void
-Operation_deleteReference(UA_Server *server, UA_Session *session, void *context,
-                          const UA_DeleteReferencesItem *item, UA_StatusCode *retval) {
-    /* Do not check access for server */
-    if(session != &server->adminSession && server->config.accessControl.allowDeleteReference) {
-        UA_UNLOCK(server->serviceMutex);
-        if (!server->config.accessControl.
-                allowDeleteReference(server, &server->config.accessControl,
-                                     &session->sessionId, session->sessionHandle, item)){
-            UA_LOCK(server->serviceMutex);
-            *retval = UA_STATUSCODE_BADUSERACCESSDENIED;
-            return;
-        }
-        UA_LOCK(server->serviceMutex)
-    }
-
-    // TODO: Check consistency constraints, remove the references.
-    *retval = UA_Server_editNode(server, session, &item->sourceNodeId,
-                                 (UA_EditNodeCallback)deleteOneWayReference,
-                                 /* cast away const qualifier because callback uses it anyway */
-                                 (UA_DeleteReferencesItem *)(uintptr_t)item);
-    if(*retval != UA_STATUSCODE_GOOD)
-        return;
-
-    if(!item->deleteBidirectional || item->targetNodeId.serverIndex != 0)
-        return;
-
-    UA_DeleteReferencesItem secondItem;
-    UA_DeleteReferencesItem_init(&secondItem);
-    secondItem.isForward = !item->isForward;
-    secondItem.sourceNodeId = item->targetNodeId.nodeId;
-    secondItem.targetNodeId.nodeId = item->sourceNodeId;
-    secondItem.referenceTypeId = item->referenceTypeId;
-    *retval = UA_Server_editNode(server, session, &secondItem.sourceNodeId,
-                                 (UA_EditNodeCallback)deleteOneWayReference,
-                                 &secondItem);
-}
-
-void
-Service_DeleteReferences(UA_Server *server, UA_Session *session,
-                         const UA_DeleteReferencesRequest *request,
-                         UA_DeleteReferencesResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Processing DeleteReferencesRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    if(server->config.maxNodesPerNodeManagement != 0 &&
-       request->referencesToDeleteSize > server->config.maxNodesPerNodeManagement) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYOPERATIONS;
-        return;
-    }
-
-    response->responseHeader.serviceResult =
-        UA_Server_processServiceOperations(server, session,
-                                           (UA_ServiceOperation)Operation_deleteReference,
-                                           NULL, &request->referencesToDeleteSize,
-                                           &UA_TYPES[UA_TYPES_DELETEREFERENCESITEM],
-                                           &response->resultsSize, &UA_TYPES[UA_TYPES_STATUSCODE]);
-}
-
-UA_StatusCode
-UA_Server_deleteReference(UA_Server *server, const UA_NodeId sourceNodeId,
-                          const UA_NodeId referenceTypeId, UA_Boolean isForward,
-                          const UA_ExpandedNodeId targetNodeId,
-                          UA_Boolean deleteBidirectional) {
-    UA_DeleteReferencesItem item;
-    item.sourceNodeId = sourceNodeId;
-    item.referenceTypeId = referenceTypeId;
-    item.isForward = isForward;
-    item.targetNodeId = targetNodeId;
-    item.deleteBidirectional = deleteBidirectional;
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    UA_LOCK(server->serviceMutex);
-    Operation_deleteReference(server, &server->adminSession, NULL, &item, &retval);
-    UA_UNLOCK(server->serviceMutex);
-    return retval;
-}
-
-/**********************/
-/* Set Value Callback */
-/**********************/
-
-static UA_StatusCode
-setValueCallback(UA_Server *server, UA_Session *session,
-                 UA_VariableNode *node, const UA_ValueCallback *callback) {
-    if(node->nodeClass != UA_NODECLASS_VARIABLE)
-        return UA_STATUSCODE_BADNODECLASSINVALID;
-    node->value.data.callback = *callback;
-    return UA_STATUSCODE_GOOD;
-}
-
-
-
-UA_StatusCode
-UA_Server_setVariableNode_valueCallback(UA_Server *server,
-                                        const UA_NodeId nodeId,
-                                        const UA_ValueCallback callback) {
-    UA_LOCK(server->serviceMutex);
-    UA_StatusCode retval = UA_Server_editNode(server, &server->adminSession, &nodeId,
-                                              (UA_EditNodeCallback)setValueCallback,
-                                              /* cast away const because callback uses const anyway */
-                                              (UA_ValueCallback *)(uintptr_t) &callback);
-    UA_UNLOCK(server->serviceMutex);
-    return retval;
-}
-
-/***************************************************/
-/* Special Handling of Variables with Data Sources */
-/***************************************************/
-
-UA_StatusCode
-UA_Server_addDataSourceVariableNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
-                                    const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId,
-                                    const UA_QualifiedName browseName, const UA_NodeId typeDefinition,
-                                    const UA_VariableAttributes attr, const UA_DataSource dataSource,
-                                    void *nodeContext, UA_NodeId *outNewNodeId) {
-    UA_AddNodesItem item;
-    UA_AddNodesItem_init(&item);
-    item.nodeClass = UA_NODECLASS_VARIABLE;
-    item.requestedNewNodeId.nodeId = requestedNewNodeId;
-    item.browseName = browseName;
-    UA_ExpandedNodeId typeDefinitionId;
-    UA_ExpandedNodeId_init(&typeDefinitionId);
-    typeDefinitionId.nodeId = typeDefinition;
-    item.typeDefinition = typeDefinitionId;
-    item.nodeAttributes.encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
-    item.nodeAttributes.content.decoded.data = (void*)(uintptr_t)&attr;
-    item.nodeAttributes.content.decoded.type = &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES];
-    UA_NodeId newNodeId;
-    if(!outNewNodeId) {
-        newNodeId = UA_NODEID_NULL;
-        outNewNodeId = &newNodeId;
-    }
-
-    UA_LOCK(server->serviceMutex);
-    /* Create the node and add it to the nodestore */
-    UA_StatusCode retval = AddNode_raw(server, &server->adminSession, nodeContext,
-                                       &item, outNewNodeId);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    /* Set the data source */
-    retval = setVariableNode_dataSource(server, *outNewNodeId, dataSource);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    /* Typecheck and add references to parent and type definition */
-    retval = AddNode_addRefs(server, &server->adminSession, outNewNodeId, &parentNodeId,
-                             &referenceTypeId, &typeDefinition);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    /* Call the constructors */
-    retval = AddNode_finish(server, &server->adminSession, outNewNodeId);
-
- cleanup:
-    UA_UNLOCK(server->serviceMutex);
-    if(outNewNodeId == &newNodeId)
-        UA_NodeId_deleteMembers(&newNodeId);
-
-    return retval;
-}
-
-static UA_StatusCode
-setDataSource(UA_Server *server, UA_Session *session,
-              UA_VariableNode* node, const UA_DataSource *dataSource) {
-    if(node->nodeClass != UA_NODECLASS_VARIABLE)
-        return UA_STATUSCODE_BADNODECLASSINVALID;
-    if(node->valueSource == UA_VALUESOURCE_DATA)
-        UA_DataValue_deleteMembers(&node->value.data.value);
-    node->value.dataSource = *dataSource;
-    node->valueSource = UA_VALUESOURCE_DATASOURCE;
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-setVariableNode_dataSource(UA_Server *server, const UA_NodeId nodeId,
-                                     const UA_DataSource dataSource) {
-    return UA_Server_editNode(server, &server->adminSession, &nodeId,
-                              (UA_EditNodeCallback)setDataSource,
-                              /* casting away const because callback casts it back anyway */
-                              (UA_DataSource *) (uintptr_t)&dataSource);
-}
-
-UA_StatusCode
-UA_Server_setVariableNode_dataSource(UA_Server *server, const UA_NodeId nodeId,
-                                     const UA_DataSource dataSource) {
-    UA_LOCK(server->serviceMutex);
-    UA_StatusCode retval = setVariableNode_dataSource(server, nodeId, dataSource);
-    UA_UNLOCK(server->serviceMutex);
-    return retval;
-}
-
-/************************************/
-/* Special Handling of Method Nodes */
-/************************************/
-
-#ifdef UA_ENABLE_METHODCALLS
-
-static const UA_NodeId hasproperty = {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_HASPROPERTY}};
-static const UA_NodeId propertytype = {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_PROPERTYTYPE}};
-
-static UA_StatusCode
-UA_Server_addMethodNodeEx_finish(UA_Server *server, const UA_NodeId nodeId, UA_MethodCallback method,
-                                 const size_t inputArgumentsSize, const UA_Argument *inputArguments,
-                                 const UA_NodeId inputArgumentsRequestedNewNodeId,
-                                 UA_NodeId *inputArgumentsOutNewNodeId,
-                                 const size_t outputArgumentsSize, const UA_Argument *outputArguments,
-                                 const UA_NodeId outputArgumentsRequestedNewNodeId,
-                                 UA_NodeId *outputArgumentsOutNewNodeId) {
-    /* Browse to see which argument nodes exist */
-    UA_BrowseDescription bd;
-    UA_BrowseDescription_init(&bd);
-    bd.nodeId = nodeId;
-    bd.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY);
-    bd.includeSubtypes = false;
-    bd.browseDirection = UA_BROWSEDIRECTION_FORWARD;
-    bd.nodeClassMask = UA_NODECLASS_VARIABLE;
-    bd.resultMask = UA_BROWSERESULTMASK_BROWSENAME;
-
-    UA_BrowseResult br;
-    UA_BrowseResult_init(&br);
-    UA_UInt32 maxrefs = 0;
-    Operation_Browse(server, &server->adminSession, &maxrefs, &bd, &br);
-
-    UA_StatusCode retval = br.statusCode;
-    if(retval != UA_STATUSCODE_GOOD) {
-        deleteNode(server, nodeId, true);
-        UA_BrowseResult_deleteMembers(&br);
-        return retval;
-    }
-
-    /* Filter out the argument nodes */
-    UA_NodeId inputArgsId = UA_NODEID_NULL;
-    UA_NodeId outputArgsId = UA_NODEID_NULL;
-    const UA_QualifiedName inputArgsName = UA_QUALIFIEDNAME(0, "InputArguments");
-    const UA_QualifiedName outputArgsName = UA_QUALIFIEDNAME(0, "OutputArguments");
-    for(size_t i = 0; i < br.referencesSize; i++) {
-        UA_ReferenceDescription *rd = &br.references[i];
-        if(rd->browseName.namespaceIndex == 0 &&
-           UA_String_equal(&rd->browseName.name, &inputArgsName.name))
-            inputArgsId = rd->nodeId.nodeId;
-        else if(rd->browseName.namespaceIndex == 0 &&
-                UA_String_equal(&rd->browseName.name, &outputArgsName.name))
-            outputArgsId = rd->nodeId.nodeId;
-    }
-
-    /* Add the Input Arguments VariableNode */
-    if(inputArgumentsSize > 0 && UA_NodeId_isNull(&inputArgsId)) {
-        UA_VariableAttributes attr = UA_VariableAttributes_default;
-        char *name = "InputArguments";
-        attr.displayName = UA_LOCALIZEDTEXT("", name);
-        attr.dataType = UA_TYPES[UA_TYPES_ARGUMENT].typeId;
-        attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
-        UA_UInt32 inputArgsSize32 = (UA_UInt32)inputArgumentsSize;
-        attr.arrayDimensions = &inputArgsSize32;
-        attr.arrayDimensionsSize = 1;
-        UA_Variant_setArray(&attr.value, (void *)(uintptr_t)inputArguments,
-                            inputArgumentsSize, &UA_TYPES[UA_TYPES_ARGUMENT]);
-        retval = addNode(server, UA_NODECLASS_VARIABLE, &inputArgumentsRequestedNewNodeId,
-                         &nodeId, &hasproperty, UA_QUALIFIEDNAME(0, name),
-                         &propertytype, (const UA_NodeAttributes*)&attr,
-                         &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES],
-                         NULL, &inputArgsId);
-        if(retval != UA_STATUSCODE_GOOD)
-            goto error;
-    }
-
-    /* Add the Output Arguments VariableNode */
-    if(outputArgumentsSize > 0 && UA_NodeId_isNull(&outputArgsId)) {
-        UA_VariableAttributes attr = UA_VariableAttributes_default;
-        char *name = "OutputArguments";
-        attr.displayName = UA_LOCALIZEDTEXT("", name);
-        attr.dataType = UA_TYPES[UA_TYPES_ARGUMENT].typeId;
-        attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
-        UA_UInt32 outputArgsSize32 = (UA_UInt32)outputArgumentsSize;
-        attr.arrayDimensions = &outputArgsSize32;
-        attr.arrayDimensionsSize = 1;
-        UA_Variant_setArray(&attr.value, (void *)(uintptr_t)outputArguments,
-                            outputArgumentsSize, &UA_TYPES[UA_TYPES_ARGUMENT]);
-        retval = addNode(server, UA_NODECLASS_VARIABLE, &outputArgumentsRequestedNewNodeId,
-                         &nodeId, &hasproperty, UA_QUALIFIEDNAME(0, name),
-                         &propertytype, (const UA_NodeAttributes*)&attr,
-                         &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES],
-                         NULL, &outputArgsId);
-        if(retval != UA_STATUSCODE_GOOD)
-            goto error;
-    }
-
-    retval = setMethodNode_callback(server, nodeId, method);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-
-    /* Call finish to add the parent reference */
-    retval = AddNode_finish(server, &server->adminSession, &nodeId);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-
-    if(inputArgumentsOutNewNodeId != NULL) {
-        UA_NodeId_copy(&inputArgsId, inputArgumentsOutNewNodeId);
-    }
-    if(outputArgumentsOutNewNodeId != NULL) {
-        UA_NodeId_copy(&outputArgsId, outputArgumentsOutNewNodeId);
-    }
-    UA_BrowseResult_deleteMembers(&br);
-    return retval;
-
-error:
-    deleteNode(server, nodeId, true);
-    deleteNode(server, inputArgsId, true);
-    deleteNode(server, outputArgsId, true);
-    UA_BrowseResult_deleteMembers(&br);
-
-    return retval;
-}
-
-UA_StatusCode
-UA_Server_addMethodNode_finish(UA_Server *server, const UA_NodeId nodeId,
-                               UA_MethodCallback method,
-                               size_t inputArgumentsSize, const UA_Argument* inputArguments,
-                               size_t outputArgumentsSize, const UA_Argument* outputArguments) {
-    UA_LOCK(server->serviceMutex)
-    UA_StatusCode retval = UA_Server_addMethodNodeEx_finish(server, nodeId, method,
-                                            inputArgumentsSize, inputArguments, UA_NODEID_NULL, NULL,
-                                            outputArgumentsSize, outputArguments, UA_NODEID_NULL, NULL);
-    UA_UNLOCK(server->serviceMutex)
-    return retval;
-}
-
-UA_StatusCode
-UA_Server_addMethodNodeEx(UA_Server *server, const UA_NodeId requestedNewNodeId,
-                          const UA_NodeId parentNodeId,
-                          const UA_NodeId referenceTypeId,
-                          const UA_QualifiedName browseName,
-                          const UA_MethodAttributes attr, UA_MethodCallback method,
-                          size_t inputArgumentsSize, const UA_Argument *inputArguments,
-                          const UA_NodeId inputArgumentsRequestedNewNodeId,
-                          UA_NodeId *inputArgumentsOutNewNodeId,
-                          size_t outputArgumentsSize, const UA_Argument *outputArguments,
-                          const UA_NodeId outputArgumentsRequestedNewNodeId,
-                          UA_NodeId *outputArgumentsOutNewNodeId,
-                          void *nodeContext, UA_NodeId *outNewNodeId) {
-    UA_AddNodesItem item;
-    UA_AddNodesItem_init(&item);
-    item.nodeClass = UA_NODECLASS_METHOD;
-    item.requestedNewNodeId.nodeId = requestedNewNodeId;
-    item.browseName = browseName;
-    item.nodeAttributes.encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
-    item.nodeAttributes.content.decoded.data = (void*)(uintptr_t)&attr;
-    item.nodeAttributes.content.decoded.type = &UA_TYPES[UA_TYPES_METHODATTRIBUTES];
-
-    UA_NodeId newId;
-    if(!outNewNodeId) {
-        UA_NodeId_init(&newId);
-        outNewNodeId = &newId;
-    }
-    UA_LOCK(server->serviceMutex);
-    UA_StatusCode retval = Operation_addNode_begin(server, &server->adminSession,
-                                                   nodeContext, &item, &parentNodeId,
-                                                   &referenceTypeId, outNewNodeId);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_UNLOCK(server->serviceMutex);
-        return retval;
-    }
-
-    retval = UA_Server_addMethodNodeEx_finish(server, *outNewNodeId, method,
-                                              inputArgumentsSize, inputArguments,
-                                              inputArgumentsRequestedNewNodeId,
-                                              inputArgumentsOutNewNodeId,
-                                              outputArgumentsSize, outputArguments,
-                                              outputArgumentsRequestedNewNodeId,
-                                              outputArgumentsOutNewNodeId);
-    UA_UNLOCK(server->serviceMutex);
-    if(outNewNodeId == &newId)
-        UA_NodeId_deleteMembers(&newId);
-    return retval;
-}
-
-static UA_StatusCode
-editMethodCallback(UA_Server *server, UA_Session* session,
-                   UA_Node* node, void* handle) {
-    if(node->nodeClass != UA_NODECLASS_METHOD)
-        return UA_STATUSCODE_BADNODECLASSINVALID;
-    UA_MethodNode *mnode = (UA_MethodNode*) node;
-    mnode->method = (UA_MethodCallback)(uintptr_t)handle;
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-setMethodNode_callback(UA_Server *server,
-                                 const UA_NodeId methodNodeId,
-                                 UA_MethodCallback methodCallback) {
-    return UA_Server_editNode(server, &server->adminSession, &methodNodeId,
-                                              (UA_EditNodeCallback)editMethodCallback,
-                                              (void*)(uintptr_t)methodCallback);
-}
-
-UA_StatusCode
-UA_Server_setMethodNode_callback(UA_Server *server,
-                                 const UA_NodeId methodNodeId,
-                                 UA_MethodCallback methodCallback) {
-    UA_LOCK(server->serviceMutex);
-    UA_StatusCode retVal = setMethodNode_callback(server, methodNodeId, methodCallback);
-    UA_UNLOCK(server->serviceMutex);
-    return retVal;
-}
-
-#endif
-
-/************************/
-/* Lifecycle Management */
-/************************/
-
-static UA_StatusCode
-setNodeTypeLifecycle(UA_Server *server, UA_Session *session,
-                     UA_Node* node, UA_NodeTypeLifecycle *lifecycle) {
-    if(node->nodeClass == UA_NODECLASS_OBJECTTYPE) {
-        UA_ObjectTypeNode *ot = (UA_ObjectTypeNode*)node;
-        ot->lifecycle = *lifecycle;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    if(node->nodeClass == UA_NODECLASS_VARIABLETYPE) {
-        UA_VariableTypeNode *vt = (UA_VariableTypeNode*)node;
-        vt->lifecycle = *lifecycle;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    return UA_STATUSCODE_BADNODECLASSINVALID;
-}
-
-UA_StatusCode
-UA_Server_setNodeTypeLifecycle(UA_Server *server, UA_NodeId nodeId,
-                               UA_NodeTypeLifecycle lifecycle) {
-    return UA_Server_editNode(server, &server->adminSession, &nodeId,
-                              (UA_EditNodeCallback)setNodeTypeLifecycle,
-                              &lifecycle);
-}
diff --git a/ext/open62541/src/server/ua_services_securechannel.c b/ext/open62541/src/server/ua_services_securechannel.c
deleted file mode 100644
index f86b19e..0000000
--- a/ext/open62541/src/server/ua_services_securechannel.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014, 2017 (c) Florian Palm
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
- */
-
-#include "ua_server_internal.h"
-#include "ua_services.h"
-#include "ua_securechannel_manager.h"
-
-void
-Service_OpenSecureChannel(UA_Server *server, UA_SecureChannel *channel,
-                          const UA_OpenSecureChannelRequest *request,
-                          UA_OpenSecureChannelResponse *response) {
-    if(request->requestType == UA_SECURITYTOKENREQUESTTYPE_RENEW) {
-        /* Renew the channel */
-        response->responseHeader.serviceResult =
-            UA_SecureChannelManager_renew(&server->secureChannelManager,
-                                          channel, request, response);
-
-        /* Logging */
-        if(response->responseHeader.serviceResult == UA_STATUSCODE_GOOD) {
-            UA_LOG_DEBUG_CHANNEL(&server->config.logger, channel,
-                                 "SecureChannel renewed");
-        } else {
-            UA_LOG_DEBUG_CHANNEL(&server->config.logger, channel,
-                                 "Renewing SecureChannel failed");
-        }
-        return;
-    }
-
-    /* Must be ISSUE or RENEW */
-    if(request->requestType != UA_SECURITYTOKENREQUESTTYPE_ISSUE) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADINTERNALERROR;
-        return;
-    }
-
-    /* Open the channel */
-    response->responseHeader.serviceResult =
-        UA_SecureChannelManager_open(&server->secureChannelManager, channel,
-                                     request, response);
-
-    /* Logging */
-    if(response->responseHeader.serviceResult == UA_STATUSCODE_GOOD) {
-        UA_LOG_INFO_CHANNEL(&server->config.logger, channel,
-                            "Opened SecureChannel");
-    } else {
-        UA_LOG_INFO_CHANNEL(&server->config.logger, channel,
-                            "Opening a SecureChannel failed");
-    }
-}
-
-/* The server does not send a CloseSecureChannel response */
-void
-Service_CloseSecureChannel(UA_Server *server, UA_SecureChannel *channel) {
-    UA_LOG_INFO_CHANNEL(&server->config.logger, channel, "CloseSecureChannel");
-    UA_SecureChannelManager_close(&server->secureChannelManager,
-                                  channel->securityToken.channelId);
-}
diff --git a/ext/open62541/src/server/ua_services_session.c b/ext/open62541/src/server/ua_services_session.c
deleted file mode 100644
index c62f0d4..0000000
--- a/ext/open62541/src/server/ua_services_session.c
+++ /dev/null
@@ -1,530 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2014-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014-2017 (c) Florian Palm
- *    Copyright 2014-2016 (c) Sten Grüner
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017-2018 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2019 (c) Kalycito Infotech Private Limited
- */
-
-#include "ua_services.h"
-#include "ua_server_internal.h"
-#include "ua_session_manager.h"
-
-static UA_StatusCode
-signCreateSessionResponse(UA_Server *server, UA_SecureChannel *channel,
-                          const UA_CreateSessionRequest *request,
-                          UA_CreateSessionResponse *response) {
-    if(channel->securityMode != UA_MESSAGESECURITYMODE_SIGN &&
-       channel->securityMode != UA_MESSAGESECURITYMODE_SIGNANDENCRYPT)
-        return UA_STATUSCODE_GOOD;
-
-    const UA_SecurityPolicy *const securityPolicy = channel->securityPolicy;
-    UA_SignatureData *signatureData = &response->serverSignature;
-
-    /* Prepare the signature */
-    size_t signatureSize = securityPolicy->certificateSigningAlgorithm.
-        getLocalSignatureSize(securityPolicy, channel->channelContext);
-    UA_StatusCode retval = UA_String_copy(&securityPolicy->certificateSigningAlgorithm.uri,
-                                          &signatureData->algorithm);
-    retval |= UA_ByteString_allocBuffer(&signatureData->signature, signatureSize);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Allocate a temp buffer */
-    size_t dataToSignSize = request->clientCertificate.length + request->clientNonce.length;
-    UA_ByteString dataToSign;
-    retval = UA_ByteString_allocBuffer(&dataToSign, dataToSignSize);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval; /* signatureData->signature is cleaned up with the response */
-
-    /* Sign the signature */
-    memcpy(dataToSign.data, request->clientCertificate.data, request->clientCertificate.length);
-    memcpy(dataToSign.data + request->clientCertificate.length,
-           request->clientNonce.data, request->clientNonce.length);
-    retval = securityPolicy->certificateSigningAlgorithm.
-        sign(securityPolicy, channel->channelContext, &dataToSign, &signatureData->signature);
-
-    /* Clean up */
-    UA_ByteString_deleteMembers(&dataToSign);
-    return retval;
-}
-
-void
-Service_CreateSession(UA_Server *server, UA_SecureChannel *channel,
-                      const UA_CreateSessionRequest *request,
-                      UA_CreateSessionResponse *response) {
-    if(!channel) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADINTERNALERROR;
-        return;
-    }
-
-    if(!channel->connection) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADINTERNALERROR;
-        return;
-    }
-
-    UA_LOG_DEBUG_CHANNEL(&server->config.logger, channel, "Trying to create session");
-
-    if(channel->securityMode == UA_MESSAGESECURITYMODE_SIGN ||
-       channel->securityMode == UA_MESSAGESECURITYMODE_SIGNANDENCRYPT) {
-        /* Compare the clientCertificate with the remoteCertificate of the channel.
-         * Both the clientCertificate of this request and the remoteCertificate
-         * of the channel may contain a partial or a complete certificate chain.
-         * The compareCertificate function of the channelModule will compare the
-         * first certificate of each chain. The end certificate shall be located
-         * first in the chain according to the OPC UA specification Part 6 (1.04),
-         * chapter 6.2.3.*/
-        UA_StatusCode retval = channel->securityPolicy->channelModule.
-            compareCertificate(channel->channelContext, &request->clientCertificate);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_WARNING_CHANNEL(&server->config.logger, channel,
-                                   "The client certificate did not validate");
-            response->responseHeader.serviceResult = UA_STATUSCODE_BADCERTIFICATEINVALID;
-            return;
-        }
-    }
-
-    if(channel->securityToken.channelId == 0) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADSECURECHANNELIDINVALID;
-        return;
-    }
-
-    if(!UA_ByteString_equal(&channel->securityPolicy->policyUri,
-                            &UA_SECURITY_POLICY_NONE_URI) &&
-       request->clientNonce.length < 32) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADNONCEINVALID;
-        return;
-    }
-
-    /* TODO: Compare application URI with certificate uri (decode certificate) */
-    UA_CertificateVerification *cv = channel->securityPolicy->certificateVerification;
-    if(cv && cv->verifyApplicationURI) {
-        response->responseHeader.serviceResult =
-            cv->verifyApplicationURI(cv->context, &request->clientCertificate,
-                                     &request->clientDescription.applicationUri);
-        if(response->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-            UA_LOG_WARNING_CHANNEL(&server->config.logger, channel,
-                                   "The client's ApplicationURI did not match the certificate");
-            return;
-        }
-    }
-
-    UA_Session *newSession = NULL;
-    response->responseHeader.serviceResult =
-        UA_SessionManager_createSession(&server->sessionManager, channel, request, &newSession);
-    if(response->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-        UA_LOG_WARNING_CHANNEL(&server->config.logger, channel,
-                               "Processing CreateSessionRequest failed");
-        return;
-    }
-
-    UA_assert(newSession != NULL);
-
-    /* Allocate the response */
-    response->serverEndpoints = (UA_EndpointDescription *)
-        UA_Array_new(server->config.endpointsSize,
-                     &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
-    if(!response->serverEndpoints) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
-        UA_SessionManager_removeSession(&server->sessionManager,
-                                        &newSession->header.authenticationToken);
-        return;
-    }
-    response->serverEndpointsSize = server->config.endpointsSize;
-
-    /* Copy the server's endpointdescriptions into the response */
-    for(size_t i = 0; i < server->config.endpointsSize; ++i)
-        response->responseHeader.serviceResult |=
-            UA_EndpointDescription_copy(&server->config.endpoints[i],
-                                        &response->serverEndpoints[i]);
-    if(response->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-        UA_SessionManager_removeSession(&server->sessionManager,
-                                        &newSession->header.authenticationToken);
-        return;
-    }
-
-    /* Mirror back the endpointUrl */
-    for(size_t i = 0; i < response->serverEndpointsSize; ++i) {
-        UA_String_deleteMembers(&response->serverEndpoints[i].endpointUrl);
-        response->responseHeader.serviceResult |=
-            UA_String_copy(&request->endpointUrl,
-                           &response->serverEndpoints[i].endpointUrl);
-    }
-
-    /* Attach the session to the channel. But don't activate for now. */
-    UA_Session_attachToSecureChannel(newSession, channel);
-
-    /* Fill the session information */
-    newSession->maxResponseMessageSize = request->maxResponseMessageSize;
-    newSession->maxRequestMessageSize =
-        channel->connection->config.maxMessageSize;
-    response->responseHeader.serviceResult |=
-        UA_ApplicationDescription_copy(&request->clientDescription,
-                                       &newSession->clientDescription);
-
-    /* Prepare the response */
-    response->sessionId = newSession->sessionId;
-    response->revisedSessionTimeout = (UA_Double)newSession->timeout;
-    response->authenticationToken = newSession->header.authenticationToken;
-    response->responseHeader.serviceResult |=
-        UA_String_copy(&request->sessionName, &newSession->sessionName);
-
-    UA_ByteString_init(&response->serverCertificate);
-
-    if(server->config.endpointsSize > 0)
-       for(size_t i = 0; i < response->serverEndpointsSize; ++i) {
-          if(response->serverEndpoints[i].securityMode==channel->securityMode &&
-             UA_ByteString_equal(&response->serverEndpoints[i].securityPolicyUri,
-                                 &channel->securityPolicy->policyUri) &&
-             UA_String_equal(&response->serverEndpoints[i].endpointUrl,
-                             &request->endpointUrl))
-          {
-             response->responseHeader.serviceResult |=
-                 UA_ByteString_copy(&response->serverEndpoints[i].serverCertificate,
-                                    &response->serverCertificate);
-          }
-       }
-
-    /* Create a session nonce */
-    response->responseHeader.serviceResult |= UA_Session_generateNonce(newSession);
-    response->responseHeader.serviceResult |=
-        UA_ByteString_copy(&newSession->serverNonce, &response->serverNonce);
-
-    /* Sign the signature */
-    response->responseHeader.serviceResult |=
-       signCreateSessionResponse(server, channel, request, response);
-
-    /* Failure -> remove the session */
-    if(response->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-        UA_SessionManager_removeSession(&server->sessionManager,
-                                        &newSession->header.authenticationToken);
-        return;
-    }
-
-    UA_LOG_INFO_CHANNEL(&server->config.logger, channel,
-                        "Session " UA_PRINTF_GUID_FORMAT " created",
-                        UA_PRINTF_GUID_DATA(newSession->sessionId.identifier.guid));
-}
-
-static UA_StatusCode
-checkSignature(const UA_Server *server, const UA_SecureChannel *channel,
-               UA_Session *session, const UA_ActivateSessionRequest *request) {
-    if(channel->securityMode != UA_MESSAGESECURITYMODE_SIGN &&
-       channel->securityMode != UA_MESSAGESECURITYMODE_SIGNANDENCRYPT)
-        return UA_STATUSCODE_GOOD;
-
-    /* Check for zero signature length in client signature */
-    if(request->clientSignature.signature.length == 0) {
-        return UA_STATUSCODE_BADAPPLICATIONSIGNATUREINVALID;
-    }
-
-    if(!channel->securityPolicy)
-        return UA_STATUSCODE_BADINTERNALERROR;
-    const UA_SecurityPolicy *securityPolicy = channel->securityPolicy;
-    const UA_ByteString *localCertificate = &securityPolicy->localCertificate;
-
-    size_t dataToVerifySize = localCertificate->length + session->serverNonce.length;
-
-    UA_ByteString dataToVerify;
-    UA_StatusCode retval = UA_ByteString_allocBuffer(&dataToVerify, dataToVerifySize);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    memcpy(dataToVerify.data, localCertificate->data, localCertificate->length);
-    memcpy(dataToVerify.data + localCertificate->length,
-           session->serverNonce.data, session->serverNonce.length);
-
-    retval = securityPolicy->certificateSigningAlgorithm.verify(securityPolicy, channel->channelContext, &dataToVerify,
-                                                                &request->clientSignature.signature);
-    UA_ByteString_deleteMembers(&dataToVerify);
-    return retval;
-}
-
-#ifdef UA_ENABLE_ENCRYPTION
-static UA_StatusCode
-decryptPassword(UA_SecurityPolicy *securityPolicy, void *tempChannelContext,
-                const UA_ByteString *serverNonce, UA_UserNameIdentityToken *userToken) {
-    UA_SecurityPolicyEncryptionAlgorithm *asymEnc =
-        &securityPolicy->asymmetricModule.cryptoModule.encryptionAlgorithm;
-    if(!UA_String_equal(&userToken->encryptionAlgorithm, &asymEnc->uri))
-        return UA_STATUSCODE_BADIDENTITYTOKENINVALID;
-
-    UA_UInt32 tokenSecretLength;
-    UA_ByteString decryptedTokenSecret, tokenServerNonce;
-    if(UA_ByteString_copy(&userToken->password, &decryptedTokenSecret) != UA_STATUSCODE_GOOD)
-        return UA_STATUSCODE_BADIDENTITYTOKENINVALID;
-
-    UA_StatusCode retval = UA_STATUSCODE_BADIDENTITYTOKENINVALID;
-    if(asymEnc->decrypt(securityPolicy, tempChannelContext,
-                        &decryptedTokenSecret) != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    memcpy(&tokenSecretLength, decryptedTokenSecret.data, sizeof(UA_UInt32));
-
-    /* The decrypted data must be large enough to include the Encrypted Token
-     * Secret Format and the length field must indicate enough data to include
-     * the server nonce. */
-    if(decryptedTokenSecret.length < sizeof(UA_UInt32) + serverNonce->length ||
-       decryptedTokenSecret.length < sizeof(UA_UInt32) + tokenSecretLength ||
-       tokenSecretLength < serverNonce->length)
-        goto cleanup;
-
-    /* If the Encrypted Token Secret contains padding, the padding must be
-     * zeroes according to the 1.04.1 specification errata, chapter 3. */
-    for(size_t i = sizeof(UA_UInt32) + tokenSecretLength; i < decryptedTokenSecret.length; i++) {
-        if(decryptedTokenSecret.data[i] != 0)
-            goto cleanup;
-    }
-
-    /* The server nonce must match according to the 1.04.1 specification errata,
-     * chapter 3. */
-    tokenServerNonce.length = serverNonce->length;
-    tokenServerNonce.data = &decryptedTokenSecret.data[sizeof(UA_UInt32) + tokenSecretLength - serverNonce->length];
-    if(!UA_ByteString_equal(serverNonce, &tokenServerNonce))
-        goto cleanup;
-
-    /* The password was decrypted successfully. Replace usertoken with the
-     * decrypted password. The encryptionAlgorithm and policyId fields are left
-     * in the UserToken as an indication for the AccessControl plugin that
-     * evaluates the decrypted content. */
-    memcpy(userToken->password.data, &decryptedTokenSecret.data[sizeof(UA_UInt32)],
-           tokenSecretLength - serverNonce->length);
-    userToken->password.length = tokenSecretLength - serverNonce->length;
-    retval = UA_STATUSCODE_GOOD;
-
- cleanup:
-    UA_ByteString_deleteMembers(&decryptedTokenSecret);
-    return retval;
-}
-#endif
-
-/* TODO: Check all of the following:
- *
- * Part 4, §5.6.3: When the ActivateSession Service is called for the first time
- * then the Server shall reject the request if the SecureChannel is not same as
- * the one associated with the CreateSession request. Subsequent calls to
- * ActivateSession may be associated with different SecureChannels. If this is
- * the case then the Server shall verify that the Certificate the Client used to
- * create the new SecureChannel is the same as the Certificate used to create
- * the original SecureChannel. In addition, the Server shall verify that the
- * Client supplied a UserIdentityToken that is identical to the token currently
- * associated with the Session. Once the Server accepts the new SecureChannel it
- * shall reject requests sent via the old SecureChannel. */
-
-void
-Service_ActivateSession(UA_Server *server, UA_SecureChannel *channel,
-                        UA_Session *session, const UA_ActivateSessionRequest *request,
-                        UA_ActivateSessionResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session, "Execute ActivateSession");
-
-    if(session->validTill < UA_DateTime_nowMonotonic()) {
-        UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "ActivateSession: SecureChannel %i wants "
-                            "to activate, but the session has timed out",
-                            channel->securityToken.channelId);
-        response->responseHeader.serviceResult =
-            UA_STATUSCODE_BADSESSIONIDINVALID;
-        return;
-    }
-
-    /* Check if the signature corresponds to the ServerNonce that was last sent
-     * to the client */
-    response->responseHeader.serviceResult = checkSignature(server, channel, session, request);
-    if(response->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-        UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "Signature check failed with status code %s",
-                            UA_StatusCode_name(response->responseHeader.serviceResult));
-        return;
-    }
-
-    /* Find the matching endpoint */
-    const UA_EndpointDescription *ed = NULL;
-    for(size_t i = 0; ed == NULL && i < server->config.endpointsSize; ++i) {
-        const UA_EndpointDescription *e = &server->config.endpoints[i];
-
-        /* Match the Security Mode */
-        if(e->securityMode != channel->securityMode)
-            continue;
-
-        /* Match the SecurityPolicy */
-        if(!UA_String_equal(&e->securityPolicyUri, &channel->securityPolicy->policyUri))
-            continue;
-
-        /* Match the UserTokenType */
-        for(size_t j = 0; j < e->userIdentityTokensSize; j++) {
-            const UA_UserTokenPolicy *u = &e->userIdentityTokens[j];
-            if(u->tokenType == UA_USERTOKENTYPE_ANONYMOUS) {
-                /* Part 4, Section 5.6.3.2, Table 17: A NULL or empty
-                 * UserIdentityToken should be treated as Anonymous */
-                if(request->userIdentityToken.content.decoded.type != &UA_TYPES[UA_TYPES_ANONYMOUSIDENTITYTOKEN] &&
-                   request->userIdentityToken.encoding != UA_EXTENSIONOBJECT_ENCODED_NOBODY)
-                    continue;
-            } else if(u->tokenType == UA_USERTOKENTYPE_USERNAME) {
-                if(request->userIdentityToken.content.decoded.type != &UA_TYPES[UA_TYPES_USERNAMEIDENTITYTOKEN])
-                    continue;
-            } else if(u->tokenType == UA_USERTOKENTYPE_CERTIFICATE) {
-                if(request->userIdentityToken.content.decoded.type != &UA_TYPES[UA_TYPES_X509IDENTITYTOKEN])
-                    continue;
-            } else if(u->tokenType == UA_USERTOKENTYPE_ISSUEDTOKEN) {
-                if(request->userIdentityToken.content.decoded.type != &UA_TYPES[UA_TYPES_ISSUEDIDENTITYTOKEN])
-                    continue;
-            } else {
-                response->responseHeader.serviceResult = UA_STATUSCODE_BADIDENTITYTOKENINVALID;
-                return;
-            }
-
-            /* Match found */
-            ed = e;
-            break;
-        }
-
-    }
-
-    /* No matching endpoint found */
-    if(!ed) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADIDENTITYTOKENINVALID;
-        return;
-    }
-
-#ifdef UA_ENABLE_ENCRYPTION
-    /* If it is a UserNameIdentityToken, decrypt the password if encrypted */
-    if((request->userIdentityToken.encoding == UA_EXTENSIONOBJECT_DECODED) &&
-       (request->userIdentityToken.content.decoded.type == &UA_TYPES[UA_TYPES_USERNAMEIDENTITYTOKEN])) {
-       UA_UserNameIdentityToken *userToken = (UA_UserNameIdentityToken *)
-           request->userIdentityToken.content.decoded.data;
-
-       /* Find the UserTokenPolicy */
-       UA_Byte tokenIndex = 0;
-       for(; tokenIndex < ed->userIdentityTokensSize; tokenIndex++) {
-           if(ed->userIdentityTokens[tokenIndex].tokenType != UA_USERTOKENTYPE_USERNAME)
-               continue;
-           if(UA_String_equal(&userToken->policyId, &ed->userIdentityTokens[tokenIndex].policyId))
-               break;
-       }
-       if(tokenIndex == ed->userIdentityTokensSize) {
-           response->responseHeader.serviceResult = UA_STATUSCODE_BADIDENTITYTOKENINVALID;
-           return;
-       }
-
-       /* Get the SecurityPolicy. If the userTokenPolicy doesn't specify a
-        * security policy the security policy of the secure channel is used. */
-       UA_SecurityPolicy* securityPolicy;
-       if(ed->userIdentityTokens[tokenIndex].securityPolicyUri.data == NULL)
-           securityPolicy = UA_SecurityPolicy_getSecurityPolicyByUri(server, &ed->securityPolicyUri);
-       else
-           securityPolicy = UA_SecurityPolicy_getSecurityPolicyByUri(server, &ed->userIdentityTokens[tokenIndex].securityPolicyUri);
-       if(!securityPolicy) {
-          response->responseHeader.serviceResult = UA_STATUSCODE_BADINTERNALERROR;
-          return;
-       }
-
-       /* Encrypted password? */
-       if(!UA_String_equal(&securityPolicy->policyUri, &UA_SECURITY_POLICY_NONE_URI)) {
-           /* Test if the encryption algorithm is correctly specified */
-           if(!UA_String_equal(&userToken->encryptionAlgorithm,
-                               &securityPolicy->asymmetricModule.cryptoModule.
-                               encryptionAlgorithm.uri)) {
-               response->responseHeader.serviceResult = UA_STATUSCODE_BADIDENTITYTOKENINVALID;
-               return;
-           }
-
-           /* Create a temporary channel context if a different SecurityPolicy is
-            * used for the password from the SecureChannel */
-           void *tempChannelContext = channel->channelContext;
-           if(securityPolicy != channel->securityPolicy) {
-               /* TODO: This is a hack. We use our own certificate to create a
-                * channel context. Because the client does not provide one in a
-                * #None SecureChannel. We should not need a ChannelContext at all
-                * for asymmetric decryption where the remote certificate is not
-                * used. */
-               response->responseHeader.serviceResult =
-                   securityPolicy->channelModule.newContext(securityPolicy,
-                                                            &securityPolicy->localCertificate,
-                                                            &tempChannelContext);
-               if(response->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-                   UA_LOG_WARNING_SESSION(&server->config.logger, session, "ActivateSession: "
-                                          "Failed to create a context for the SecurityPolicy %.*s",
-                                          (int)securityPolicy->policyUri.length,
-                                          securityPolicy->policyUri.data);
-                   return;
-               }
-           }
-
-           /* Decrypt */
-           response->responseHeader.serviceResult =
-               decryptPassword(securityPolicy, tempChannelContext, &session->serverNonce, userToken);
-
-           /* Remove the temporary channel context */
-           if(securityPolicy != channel->securityPolicy)
-               securityPolicy->channelModule.deleteContext(tempChannelContext);
-       }
-
-       if(response->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-           UA_LOG_INFO_SESSION(&server->config.logger, session, "ActivateSession: "
-                               "Failed to decrypt the password with the status code %s",
-                               UA_StatusCode_name(response->responseHeader.serviceResult));
-       }
-
-    }
-#endif
-
-    /* Callback into userland access control */
-    response->responseHeader.serviceResult =
-        server->config.accessControl.activateSession(server, &server->config.accessControl,
-                                                     ed, &channel->remoteCertificate,
-                                                     &session->sessionId,
-                                                     &request->userIdentityToken,
-                                                     &session->sessionHandle);
-    if(response->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-        UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "ActivateSession: The AccessControl plugin "
-                            "denied the access with the status code %s",
-                            UA_StatusCode_name(response->responseHeader.serviceResult));
-        return;
-    }
-
-    if(session->header.channel && session->header.channel != channel) {
-        UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "ActivateSession: Detach from old channel");
-        /* Detach the old SecureChannel and attach the new */
-        UA_Session_detachFromSecureChannel(session);
-        UA_Session_attachToSecureChannel(session, channel);
-    }
-
-    /* Activate the session */
-    session->activated = true;
-    UA_Session_updateLifetime(session);
-
-    /* Generate a new session nonce for the next time ActivateSession is called */
-    response->responseHeader.serviceResult = UA_Session_generateNonce(session);
-    response->responseHeader.serviceResult |=
-        UA_ByteString_copy(&session->serverNonce, &response->serverNonce);
-    if(response->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
-        UA_Session_detachFromSecureChannel(session);
-        session->activated = false;
-        UA_LOG_INFO_SESSION(&server->config.logger, session,
-                            "ActivateSession: Could not generate a server nonce");
-        return;
-    }
-
-    UA_LOG_INFO_SESSION(&server->config.logger, session,
-                        "ActivateSession: Session activated");
-}
-
-void
-Service_CloseSession(UA_Server *server, UA_Session *session,
-                     const UA_CloseSessionRequest *request,
-                     UA_CloseSessionResponse *response) {
-    UA_LOG_INFO_SESSION(&server->config.logger, session, "CloseSession");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    response->responseHeader.serviceResult =
-        UA_SessionManager_removeSession(&server->sessionManager,
-                                        &session->header.authenticationToken);
-}
diff --git a/ext/open62541/src/server/ua_services_subscription.c b/ext/open62541/src/server/ua_services_subscription.c
deleted file mode 100644
index 94923df..0000000
--- a/ext/open62541/src/server/ua_services_subscription.c
+++ /dev/null
@@ -1,374 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2016-2017 (c) Florian Palm
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2018 (c) Ari Breitkreuz, fortiss GmbH
- *    Copyright 2017 (c) Mattias Bornhager
- *    Copyright 2017 (c) Henrik Norrman
- *    Copyright 2017-2018 (c) Thomas Stalder, Blue Time Concept SA
- *    Copyright 2018 (c) Fabian Arndt, Root-Core
- */
-
-#include "ua_server_internal.h"
-#include "ua_services.h"
-#include "ua_subscription.h"
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS /* conditional compilation */
-
-static UA_StatusCode
-setSubscriptionSettings(UA_Server *server, UA_Subscription *subscription,
-                        UA_Double requestedPublishingInterval,
-                        UA_UInt32 requestedLifetimeCount,
-                        UA_UInt32 requestedMaxKeepAliveCount,
-                        UA_UInt32 maxNotificationsPerPublish, UA_Byte priority) {
-    /* deregister the callback if required */
-    Subscription_unregisterPublishCallback(server, subscription);
-
-    /* re-parameterize the subscription */
-    UA_BOUNDEDVALUE_SETWBOUNDS(server->config.publishingIntervalLimits,
-                               requestedPublishingInterval, subscription->publishingInterval);
-    /* check for nan*/
-    if(requestedPublishingInterval != requestedPublishingInterval)
-        subscription->publishingInterval = server->config.publishingIntervalLimits.min;
-    UA_BOUNDEDVALUE_SETWBOUNDS(server->config.keepAliveCountLimits,
-                               requestedMaxKeepAliveCount, subscription->maxKeepAliveCount);
-    UA_BOUNDEDVALUE_SETWBOUNDS(server->config.lifeTimeCountLimits,
-                               requestedLifetimeCount, subscription->lifeTimeCount);
-    if(subscription->lifeTimeCount < 3 * subscription->maxKeepAliveCount)
-        subscription->lifeTimeCount = 3 * subscription->maxKeepAliveCount;
-    subscription->notificationsPerPublish = maxNotificationsPerPublish;
-    if(maxNotificationsPerPublish == 0 ||
-       maxNotificationsPerPublish > server->config.maxNotificationsPerPublish)
-        subscription->notificationsPerPublish = server->config.maxNotificationsPerPublish;
-    subscription->priority = priority;
-
-    UA_StatusCode retval = Subscription_registerPublishCallback(server, subscription);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_DEBUG_SESSION(&server->config.logger, subscription->session,
-                             "Subscription %u | Could not register publish callback with error code %s",
-                             subscription->subscriptionId, UA_StatusCode_name(retval));
-    }
-    return retval;
-}
-
-void
-Service_CreateSubscription(UA_Server *server, UA_Session *session,
-                           const UA_CreateSubscriptionRequest *request,
-                           UA_CreateSubscriptionResponse *response) {
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    /* Check limits for the number of subscriptions */
-    if(((server->config.maxSubscriptions != 0) &&
-        (server->numSubscriptions >= server->config.maxSubscriptions)) ||
-       ((server->config.maxSubscriptionsPerSession != 0) &&
-        (session->numSubscriptions >= server->config.maxSubscriptionsPerSession))) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYSUBSCRIPTIONS;
-        return;
-    }
-
-    /* Create the subscription */
-    UA_Subscription *newSubscription = UA_Subscription_new(session, response->subscriptionId);
-    if(!newSubscription) {
-        UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                             "Processing CreateSubscriptionRequest failed");
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
-        return;
-    }
-
-    UA_Session_addSubscription(server, session, newSubscription); /* Also assigns the subscription id */
-
-    /* Set the subscription parameters */
-    newSubscription->publishingEnabled = request->publishingEnabled;
-    UA_StatusCode retval = setSubscriptionSettings(server, newSubscription, request->requestedPublishingInterval,
-                                                   request->requestedLifetimeCount, request->requestedMaxKeepAliveCount,
-                                                   request->maxNotificationsPerPublish, request->priority);
-
-    if(retval != UA_STATUSCODE_GOOD) {
-        response->responseHeader.serviceResult = retval;
-        return;
-    }
-
-    newSubscription->currentKeepAliveCount = newSubscription->maxKeepAliveCount; /* set settings first */
-
-    /* Prepare the response */
-    response->subscriptionId = newSubscription->subscriptionId;
-    response->revisedPublishingInterval = newSubscription->publishingInterval;
-    response->revisedLifetimeCount = newSubscription->lifeTimeCount;
-    response->revisedMaxKeepAliveCount = newSubscription->maxKeepAliveCount;
-
-    UA_LOG_INFO_SESSION(&server->config.logger, session, "Subscription %u | "
-                        "Created the Subscription with a publishing interval of %.2f ms",
-                        response->subscriptionId, newSubscription->publishingInterval);
-}
-
-void
-Service_ModifySubscription(UA_Server *server, UA_Session *session,
-                           const UA_ModifySubscriptionRequest *request,
-                           UA_ModifySubscriptionResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session, "Processing ModifySubscriptionRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    UA_Subscription *sub = UA_Session_getSubscriptionById(session, request->subscriptionId);
-    if(!sub) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
-        return;
-    }
-
-    UA_StatusCode retval = setSubscriptionSettings(server, sub, request->requestedPublishingInterval,
-                                                   request->requestedLifetimeCount, request->requestedMaxKeepAliveCount,
-                                                   request->maxNotificationsPerPublish, request->priority);
-
-    if(retval != UA_STATUSCODE_GOOD) {
-        response->responseHeader.serviceResult = retval;
-        return;
-    }
-
-    sub->currentLifetimeCount = 0; /* Reset the subscription lifetime */
-    response->revisedPublishingInterval = sub->publishingInterval;
-    response->revisedLifetimeCount = sub->lifeTimeCount;
-    response->revisedMaxKeepAliveCount = sub->maxKeepAliveCount;
-}
-
-static void
-Operation_SetPublishingMode(UA_Server *Server, UA_Session *session,
-                            const UA_Boolean *publishingEnabled, const UA_UInt32 *subscriptionId,
-                            UA_StatusCode *result) {
-    UA_Subscription *sub = UA_Session_getSubscriptionById(session, *subscriptionId);
-    if(!sub) {
-        *result = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
-        return;
-    }
-
-    sub->currentLifetimeCount = 0; /* Reset the subscription lifetime */
-    sub->publishingEnabled = *publishingEnabled; /* Set the publishing mode */
-}
-
-void
-Service_SetPublishingMode(UA_Server *server, UA_Session *session,
-                          const UA_SetPublishingModeRequest *request,
-                          UA_SetPublishingModeResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session, "Processing SetPublishingModeRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    UA_Boolean publishingEnabled = request->publishingEnabled; /* request is const */
-    response->responseHeader.serviceResult =
-        UA_Server_processServiceOperations(server, session, (UA_ServiceOperation)Operation_SetPublishingMode,
-                                           &publishingEnabled,
-                                           &request->subscriptionIdsSize, &UA_TYPES[UA_TYPES_UINT32],
-                                           &response->resultsSize, &UA_TYPES[UA_TYPES_STATUSCODE]);
-}
-
-/* TODO: Unify with senderror in ua_server_binary.c */
-static void
-subscriptionSendError(UA_SecureChannel *channel, UA_UInt32 requestHandle,
-                      UA_UInt32 requestId, UA_StatusCode error) {
-    UA_PublishResponse err_response;
-    UA_PublishResponse_init(&err_response);
-    err_response.responseHeader.requestHandle = requestHandle;
-    err_response.responseHeader.timestamp = UA_DateTime_now();
-    err_response.responseHeader.serviceResult = error;
-    UA_SecureChannel_sendSymmetricMessage(channel, requestId, UA_MESSAGETYPE_MSG,
-                                          &err_response, &UA_TYPES[UA_TYPES_PUBLISHRESPONSE]);
-}
-
-void
-Service_Publish(UA_Server *server, UA_Session *session,
-                const UA_PublishRequest *request, UA_UInt32 requestId) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session, "Processing PublishRequest");
-
-    /* Return an error if the session has no subscription */
-    if(LIST_EMPTY(&session->serverSubscriptions)) {
-        subscriptionSendError(session->header.channel, request->requestHeader.requestHandle,
-                              requestId, UA_STATUSCODE_BADNOSUBSCRIPTION);
-        return;
-    }
-
-    /* Handle too many subscriptions to free resources before trying to allocate
-     * resources for the new publish request. If the limit has been reached the
-     * oldest publish request shall be responded */
-    if((server->config.maxPublishReqPerSession != 0) &&
-       (session->numPublishReq >= server->config.maxPublishReqPerSession)) {
-        if(!UA_Subscription_reachedPublishReqLimit(server, session)) {
-            subscriptionSendError(session->header.channel, requestId,
-                                  request->requestHeader.requestHandle,
-                                  UA_STATUSCODE_BADINTERNALERROR);
-            return;
-        }
-    }
-
-    /* Allocate the response to store it in the retransmission queue */
-    UA_PublishResponseEntry *entry = (UA_PublishResponseEntry *)
-        UA_malloc(sizeof(UA_PublishResponseEntry));
-    if(!entry) {
-        subscriptionSendError(session->header.channel, requestId,
-                              request->requestHeader.requestHandle,
-                              UA_STATUSCODE_BADOUTOFMEMORY);
-        return;
-    }
-
-    /* Prepare the response */
-    entry->requestId = requestId;
-    UA_PublishResponse *response = &entry->response;
-    UA_PublishResponse_init(response);
-    response->responseHeader.requestHandle = request->requestHeader.requestHandle;
-
-    /* Allocate the results array to acknowledge the acknowledge */
-    if(request->subscriptionAcknowledgementsSize > 0) {
-        response->results = (UA_StatusCode *)
-            UA_Array_new(request->subscriptionAcknowledgementsSize,
-                         &UA_TYPES[UA_TYPES_STATUSCODE]);
-        if(!response->results) {
-            UA_free(entry);
-            subscriptionSendError(session->header.channel, requestId,
-                                  request->requestHeader.requestHandle,
-                                  UA_STATUSCODE_BADOUTOFMEMORY);
-            return;
-        }
-        response->resultsSize = request->subscriptionAcknowledgementsSize;
-    }
-
-    /* Delete Acknowledged Subscription Messages */
-    for(size_t i = 0; i < request->subscriptionAcknowledgementsSize; ++i) {
-        UA_SubscriptionAcknowledgement *ack = &request->subscriptionAcknowledgements[i];
-        UA_Subscription *sub = UA_Session_getSubscriptionById(session, ack->subscriptionId);
-        if(!sub) {
-            response->results[i] = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
-            UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                                 "Cannot process acknowledgements subscription %u",
-                                 ack->subscriptionId);
-            continue;
-        }
-        /* Remove the acked transmission from the retransmission queue */
-        response->results[i] = UA_Subscription_removeRetransmissionMessage(sub, ack->sequenceNumber);
-    }
-
-    /* Queue the publish response. It will be dequeued in a repeated publish
-     * callback. This can also be triggered right now for a late
-     * subscription. */
-    UA_Session_queuePublishReq(session, entry, false);
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session, "Queued a publication message");
-
-    /* If there are late subscriptions, the new publish request is used to
-     * answer them immediately. However, a single subscription that generates
-     * many notifications must not "starve" other late subscriptions. Therefore
-     * we keep track of the last subscription that got preferential treatment.
-     * We start searching for late subscriptions **after** the last one. */
-
-    UA_Subscription *immediate = NULL;
-    if(session->lastSeenSubscriptionId > 0) {
-        LIST_FOREACH(immediate, &session->serverSubscriptions, listEntry) {
-            if(immediate->subscriptionId == session->lastSeenSubscriptionId) {
-                immediate = LIST_NEXT(immediate, listEntry);
-                break;
-            }
-        }
-    }
-
-    /* If no entry was found, start at the beginning and don't restart  */
-    UA_Boolean found = false;
-    if(!immediate)
-        immediate = LIST_FIRST(&session->serverSubscriptions);
-    else
-        found = true;
-
- repeat:
-    while(immediate) {
-        if(immediate->state == UA_SUBSCRIPTIONSTATE_LATE) {
-            session->lastSeenSubscriptionId = immediate->subscriptionId;
-            UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                                 "Subscription %u | Response on a late subscription",
-                                 immediate->subscriptionId);
-            UA_Subscription_publish(server, immediate);
-            return;
-        }
-        immediate = LIST_NEXT(immediate, listEntry);
-    }
-
-    /* Restart at the beginning of the list */
-    if(found) {
-        immediate = LIST_FIRST(&session->serverSubscriptions);
-        found = false;
-        goto repeat;
-    }
-
-    /* No late subscription this time */
-    session->lastSeenSubscriptionId = 0;
-}
-
-static void
-Operation_DeleteSubscription(UA_Server *server, UA_Session *session, void *_,
-                             const UA_UInt32 *subscriptionId, UA_StatusCode *result) {
-    *result = UA_Session_deleteSubscription(server, session, *subscriptionId);
-    if(*result == UA_STATUSCODE_GOOD) {
-        UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                             "Subscription %u | Subscription deleted",
-                             *subscriptionId);
-    } else {
-        UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                             "Deleting Subscription with Id %u failed with error code %s",
-                             *subscriptionId, UA_StatusCode_name(*result));
-    }
-}
-
-void
-Service_DeleteSubscriptions(UA_Server *server, UA_Session *session,
-                            const UA_DeleteSubscriptionsRequest *request,
-                            UA_DeleteSubscriptionsResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Processing DeleteSubscriptionsRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    response->responseHeader.serviceResult =
-        UA_Server_processServiceOperations(server, session,
-                  (UA_ServiceOperation)Operation_DeleteSubscription, NULL,
-                  &request->subscriptionIdsSize, &UA_TYPES[UA_TYPES_UINT32],
-                  &response->resultsSize, &UA_TYPES[UA_TYPES_STATUSCODE]);
-
-    /* The session has at least one subscription */
-    if(LIST_FIRST(&session->serverSubscriptions))
-        return;
-
-    /* Send remaining publish responses if the last subscription was removed */
-    UA_Subscription_answerPublishRequestsNoSubscription(server, session);
-}
-
-void
-Service_Republish(UA_Server *server, UA_Session *session,
-                  const UA_RepublishRequest *request,
-                  UA_RepublishResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Processing RepublishRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    /* Get the subscription */
-    UA_Subscription *sub = UA_Session_getSubscriptionById(session, request->subscriptionId);
-    if(!sub) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
-        return;
-    }
-
-    /* Reset the subscription lifetime */
-    sub->currentLifetimeCount = 0;
-
-    /* Find the notification in the retransmission queue  */
-    UA_NotificationMessageEntry *entry;
-    TAILQ_FOREACH(entry, &sub->retransmissionQueue, listEntry) {
-        if(entry->message.sequenceNumber == request->retransmitSequenceNumber)
-            break;
-    }
-    if(!entry) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADMESSAGENOTAVAILABLE;
-        return;
-    }
-
-    response->responseHeader.serviceResult =
-        UA_NotificationMessage_copy(&entry->message, &response->notificationMessage);
-}
-
-#endif /* UA_ENABLE_SUBSCRIPTIONS */
diff --git a/ext/open62541/src/server/ua_services_view.c b/ext/open62541/src/server/ua_services_view.c
deleted file mode 100644
index 15dcd65..0000000
--- a/ext/open62541/src/server/ua_services_view.c
+++ /dev/null
@@ -1,1240 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014-2019 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014-2017 (c) Florian Palm
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015 (c) LEvertz
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015 (c) Ecosmos
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2016 (c) Lorenz Haas
- *    Copyright 2017 (c) pschoppe
- *    Copyright 2017 (c) Julian Grothoff
- *    Copyright 2017 (c) Henrik Norrman
- */
-
-#include "ua_server_internal.h"
-#include "ua_services.h"
-#include "ziptree.h"
-
-/********************/
-/* Browse Recursive */
-/********************/
-
-/* A RefTree holds a single array for both the NodeIds encountered during
- * recursive browsing and the entries for a tree-structure to check for
- * duplicates. Once the (recursive) browse has finished, the tree-structure part
- * can be simply cut away. A single realloc operation (with some pointer
- * repairing) can be used to increase the capacity of the RefTree.
- *
- * If an ExpandedNodeId is encountered, it has to be processed right away.
- * Remote ExpandedNodeId are not put into the tree, since it is not possible to
- * recurse into them anyway.
- *
- * The layout of the results array is as follows:
- *
- * | Targets [ExpandedNodeId] | Tree [RefEntry] | */
-
-#define UA_BROWSE_INITIAL_SIZE 16
-
-typedef struct RefEntry {
-    ZIP_ENTRY(RefEntry) zipfields;
-    const UA_ExpandedNodeId *target;
-    UA_UInt32 targetHash; /* Hash of the target nodeid */
-} RefEntry;
- 
-static enum ZIP_CMP
-cmpTarget(const void *a, const void *b) {
-    const RefEntry *aa = (const RefEntry*)a;
-    const RefEntry *bb = (const RefEntry*)b;
-    if(aa->targetHash < bb->targetHash)
-        return ZIP_CMP_LESS;
-    if(aa->targetHash > bb->targetHash)
-        return ZIP_CMP_MORE;
-    return (enum ZIP_CMP)UA_ExpandedNodeId_order(aa->target, bb->target);
-}
-
-ZIP_HEAD(RefHead, RefEntry);
-typedef struct RefHead RefHead;
-ZIP_PROTTYPE(RefHead, RefEntry, RefEntry)
-ZIP_IMPL(RefHead, RefEntry, zipfields, RefEntry, zipfields, cmpTarget)
-
-typedef struct {
-    UA_ExpandedNodeId *targets;
-    RefHead head;
-    size_t capacity; /* available space */
-    size_t size;     /* used space */
-} RefTree;
-
-static UA_StatusCode UA_FUNC_ATTR_WARN_UNUSED_RESULT
-RefTree_init(RefTree *rt) {
-    size_t space = (sizeof(UA_ExpandedNodeId) + sizeof(RefEntry)) * UA_BROWSE_INITIAL_SIZE;
-    rt->targets = (UA_ExpandedNodeId*)UA_malloc(space);
-    if(!rt->targets)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    rt->capacity = UA_BROWSE_INITIAL_SIZE;
-    rt->size = 0;
-    ZIP_INIT(&rt->head);
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-RefTree_clear(RefTree *rt) {
-    for(size_t i = 0; i < rt->size; i++)
-        UA_ExpandedNodeId_deleteMembers(&rt->targets[i]);
-    UA_free(rt->targets);
-}
-
-/* Double the capacity of the reftree */
-static UA_StatusCode UA_FUNC_ATTR_WARN_UNUSED_RESULT
-RefTree_double(RefTree *rt) {
-    size_t capacity = rt->capacity * 2;
-    UA_assert(capacity > 0);
-    size_t space = (sizeof(UA_ExpandedNodeId) + sizeof(RefEntry)) * capacity;
-    UA_ExpandedNodeId *newTargets = (UA_ExpandedNodeId*)UA_realloc(rt->targets, space);
-    if(!newTargets)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    /* Repair the pointers for the realloced array+tree  */
-    uintptr_t arraydiff = (uintptr_t)newTargets - (uintptr_t)rt->targets;
-    RefEntry *reArray = (RefEntry*)
-        ((uintptr_t)newTargets + (capacity * sizeof(UA_ExpandedNodeId)));
-    uintptr_t entrydiff = (uintptr_t)reArray -
-        ((uintptr_t)rt->targets + (rt->capacity * sizeof(UA_ExpandedNodeId)));
-    RefEntry *oldReArray = (RefEntry*)
-        ((uintptr_t)newTargets + (rt->capacity * sizeof(UA_ExpandedNodeId)));
-    memmove(reArray, oldReArray, rt->size * sizeof(RefEntry));
-    for(size_t i = 0; i < rt->size; i++) {
-        if(reArray[i].zipfields.zip_left)
-            *(uintptr_t*)&reArray[i].zipfields.zip_left += entrydiff;
-        if(reArray[i].zipfields.zip_right)
-            *(uintptr_t*)&reArray[i].zipfields.zip_right += entrydiff;
-        *(uintptr_t*)&reArray[i].target += arraydiff;
-    }
-
-    rt->head.zip_root = (RefEntry*)((uintptr_t)rt->head.zip_root + entrydiff);
-    rt->capacity = capacity;
-    rt->targets = newTargets;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode UA_FUNC_ATTR_WARN_UNUSED_RESULT
-RefTree_add(RefTree *rt, const UA_ExpandedNodeId *target) {
-    UA_StatusCode s = UA_STATUSCODE_GOOD;
-    if(rt->capacity <= rt->size) {
-        s = RefTree_double(rt);
-        if(s != UA_STATUSCODE_GOOD)
-            return s;
-    }
-    s = UA_ExpandedNodeId_copy(target, &rt->targets[rt->size]);
-    if(s != UA_STATUSCODE_GOOD)
-        return s;
-    RefEntry *re = (RefEntry*)((uintptr_t)rt->targets +
-                               (sizeof(UA_ExpandedNodeId) * rt->capacity) +
-                               (sizeof(RefEntry) * rt->size));
-    re->target = &rt->targets[rt->size];
-    re->targetHash = UA_ExpandedNodeId_hash(target);
-    ZIP_INSERT(RefHead, &rt->head, re, ZIP_FFS32(UA_UInt32_random()));
-    rt->size++;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_Boolean
-relevantReference(const UA_NodeId *refType, size_t relevantRefsSize,
-                  const UA_NodeId *relevantRefs) {
-    if(!relevantRefs)
-        return true;
-    for(size_t i = 0; i < relevantRefsSize; i++) {
-        if(UA_NodeId_equal(refType, &relevantRefs[i]))
-            return true;
-    }
-    return false;
-}
-
-static UA_StatusCode
-addRelevantReferences(UA_Server *server, RefTree *rt, const UA_NodeId *nodeId,
-                      size_t refTypesSize, const UA_NodeId *refTypes,
-                      UA_BrowseDirection browseDirection) {
-    const UA_Node *node = UA_Nodestore_getNode(server->nsCtx, nodeId);
-    if(!node)
-        return UA_STATUSCODE_BADNODEIDUNKNOWN;
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    for(size_t i = 0; i < node->referencesSize; i++) {
-        UA_NodeReferenceKind *rk = &node->references[i];
-
-        /* Reference in the right direction? */
-        if(rk->isInverse && browseDirection == UA_BROWSEDIRECTION_FORWARD)
-            continue;
-        if(!rk->isInverse && browseDirection == UA_BROWSEDIRECTION_INVERSE)
-            continue;
-
-        /* Is the reference part of the hierarchy of references we look for? */
-        if(!relevantReference(&rk->referenceTypeId, refTypesSize, refTypes))
-            continue;
-
-        for(size_t k = 0; k < rk->targetIdsSize; k++) {
-            retval = RefTree_add(rt ,&rk->targetIds[k]);
-            if(retval != UA_STATUSCODE_GOOD)
-                goto cleanup;
-        }
-    }
-
- cleanup:
-    UA_Nodestore_releaseNode(server->nsCtx, node);
-    return retval;
-}
-
-UA_StatusCode
-browseRecursive(UA_Server *server,
-                size_t startNodesSize, const UA_NodeId *startNodes,
-                size_t refTypesSize, const UA_NodeId *refTypes,
-                UA_BrowseDirection browseDirection, UA_Boolean includeStartNodes,
-                size_t *resultsSize, UA_ExpandedNodeId **results) {
-    RefTree rt;
-    UA_StatusCode retval = RefTree_init(&rt);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Add the start nodes? */
-    UA_ExpandedNodeId en = UA_EXPANDEDNODEID_NULL;
-    for(size_t i = 0; i < startNodesSize && retval == UA_STATUSCODE_GOOD; i++) {
-        if(includeStartNodes) {
-            en.nodeId = startNodes[i];
-            retval = RefTree_add(&rt, &en);
-        } else {
-            retval = addRelevantReferences(server, &rt, &startNodes[i],
-                                           refTypesSize, refTypes, browseDirection);
-        }
-    }
-    if(retval != UA_STATUSCODE_GOOD) {
-        RefTree_clear(&rt);
-        return retval;
-    }
-
-    /* Loop over the targets we have so far. This recurses, as new targets are
-     * added to rt. */
-    for(size_t i = 0; i < rt.size; i++) {
-        /* Dont recurse into remote nodes */
-        if(rt.targets[i].serverIndex > 0)
-            continue;
-        if(rt.targets[i].namespaceUri.data != NULL)
-            continue;
-
-        retval = addRelevantReferences(server, &rt, &rt.targets[i].nodeId,
-                                       refTypesSize, refTypes, browseDirection);
-        if(retval != UA_STATUSCODE_GOOD) {
-            RefTree_clear(&rt);
-            return retval;
-        }
-    }
-
-    if(rt.size > 0) {
-        *results = rt.targets;
-        *resultsSize = rt.size;
-    } else {
-        RefTree_clear(&rt);
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Only if IncludeSubtypes is selected */
-UA_StatusCode
-referenceSubtypes(UA_Server *server, const UA_NodeId *refType,
-                  size_t *refTypesSize, UA_NodeId **refTypes) {
-    /* Leave refTypes == NULL */
-    if(UA_NodeId_isNull(refType))
-        return UA_STATUSCODE_GOOD;
-
-    /* Browse recursive for the hierarchy of sub-references */
-    UA_ExpandedNodeId *rt = NULL;
-    size_t rtSize = 0;
-    UA_NodeId hasSubtype = UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE);
-    UA_StatusCode retval = browseRecursive(server, 1, refType, 1, &hasSubtype,
-                                           UA_BROWSEDIRECTION_FORWARD, true, &rtSize, &rt);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    UA_assert(rtSize > 0);
-
-    /* Allocate space (realloc if non-NULL) */
-    UA_NodeId *newRt = NULL;
-    if(!*refTypes) {
-        newRt = (UA_NodeId*)UA_malloc(rtSize * UA_TYPES[UA_TYPES_NODEID].memSize);
-    } else {
-        newRt = (UA_NodeId*)UA_realloc(*refTypes, (*refTypesSize + rtSize) *
-                                           UA_TYPES[UA_TYPES_NODEID].memSize);
-    }
-    if(!newRt) {
-        UA_Array_delete(rt, rtSize, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-    *refTypes = newRt;
-
-    /* Move NodeIds */
-    for(size_t i = 0; i < rtSize; i++) {
-        (*refTypes)[*refTypesSize + i] = rt[i].nodeId;
-        UA_NodeId_init(&rt[i].nodeId);
-    }
-    *refTypesSize += rtSize;
-    UA_Array_delete(rt, rtSize, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_Server_browseRecursive(UA_Server *server, const UA_BrowseDescription *bd,
-                          size_t *resultsSize, UA_ExpandedNodeId **results) {
-    /* Set the list of relevant reference types */
-    UA_LOCK(server->serviceMutex);
-    UA_NodeId *refTypes = NULL;
-    size_t refTypesSize = 0;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(!UA_NodeId_isNull(&bd->referenceTypeId)) {
-        if(!bd->includeSubtypes) {
-            refTypes = (UA_NodeId*)(uintptr_t)&bd->referenceTypeId;
-            refTypesSize = 1;
-        } else {
-            retval = referenceSubtypes(server, &bd->referenceTypeId,
-                                       &refTypesSize, &refTypes);
-            if(retval != UA_STATUSCODE_GOOD) {
-                UA_UNLOCK(server->serviceMutex);
-                return retval;
-            }
-        }
-    }
-
-    /* Browse */
-    retval = browseRecursive(server, 1, &bd->nodeId, refTypesSize, refTypes,
-                             bd->browseDirection, false, resultsSize, results);
-
-    /* Clean up */
-    if(refTypes && bd->includeSubtypes)
-        UA_Array_delete(refTypes, refTypesSize, &UA_TYPES[UA_TYPES_NODEID]);
-
-    UA_UNLOCK(server->serviceMutex);
-    return retval;
-}
-
-/**********/
-/* Browse */
-/**********/
-
-typedef struct {
-    size_t size;
-    size_t capacity;
-    UA_ReferenceDescription *descr;
-} RefResult;
-
-static UA_StatusCode UA_FUNC_ATTR_WARN_UNUSED_RESULT
-RefResult_init(RefResult *rr) {
-    memset(rr, 0, sizeof(RefResult));
-    rr->descr = (UA_ReferenceDescription*)
-        UA_Array_new(UA_BROWSE_INITIAL_SIZE, &UA_TYPES[UA_TYPES_REFERENCEDESCRIPTION]);
-    if(!rr->descr)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    rr->capacity = UA_BROWSE_INITIAL_SIZE;
-    rr->size = 0;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode UA_FUNC_ATTR_WARN_UNUSED_RESULT
-RefResult_double(RefResult *rr) {
-    size_t newSize = rr->capacity * 2;
-    UA_ReferenceDescription *rd = (UA_ReferenceDescription*)
-        UA_realloc(rr->descr, newSize * sizeof(UA_ReferenceDescription));
-    if(!rd)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    memset(&rd[rr->size], 0, sizeof(UA_ReferenceDescription) * (newSize - rr->size));
-    rr->descr = rd;
-    rr->capacity = newSize;
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-RefResult_clear(RefResult *rr) {
-    UA_assert(rr->descr != NULL);
-    for(size_t i = 0; i < rr->size; i++)
-        UA_ReferenceDescription_clear(&rr->descr[i]);
-    UA_free(rr->descr);
-}
-
-struct ContinuationPoint {
-    ContinuationPoint *next;
-    UA_ByteString identifier;
-    UA_BrowseDescription browseDescription;
-    UA_UInt32 maxReferences;
-
-    size_t relevantReferencesSize;
-    UA_NodeId *relevantReferences;
-
-    /* The last point in the node references? */
-    size_t referenceKindIndex;
-    size_t targetIndex;
-};
-
-ContinuationPoint *
-ContinuationPoint_clear(ContinuationPoint *cp) {
-    UA_ByteString_deleteMembers(&cp->identifier);
-    UA_BrowseDescription_deleteMembers(&cp->browseDescription);
-    UA_Array_delete(cp->relevantReferences, cp->relevantReferencesSize,
-                    &UA_TYPES[UA_TYPES_NODEID]);
-    return cp->next;
-}
-
-/* Target node on top of the stack */
-static UA_StatusCode UA_FUNC_ATTR_WARN_UNUSED_RESULT
-addReferenceDescription(UA_Server *server, RefResult *rr, const UA_NodeReferenceKind *ref,
-                        UA_UInt32 mask, const UA_ExpandedNodeId *nodeId, const UA_Node *curr) {
-    /* Ensure capacity is left */
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(rr->size >= rr->capacity) {
-        retval = RefResult_double(rr);
-        if(retval != UA_STATUSCODE_GOOD)
-           return retval;
-    }
-
-    UA_ReferenceDescription *descr = &rr->descr[rr->size];
-
-    /* Fields without access to the actual node */
-    retval = UA_ExpandedNodeId_copy(nodeId, &descr->nodeId);
-    if(mask & UA_BROWSERESULTMASK_REFERENCETYPEID)
-        retval |= UA_NodeId_copy(&ref->referenceTypeId, &descr->referenceTypeId);
-    if(mask & UA_BROWSERESULTMASK_ISFORWARD)
-        descr->isForward = !ref->isInverse;
-
-    /* Remote references (ExpandedNodeId) are not further looked up here */
-    if(!curr) {
-        UA_ReferenceDescription_deleteMembers(descr);
-        return retval;
-    }
-    
-    /* Fields that require the actual node */
-    if(mask & UA_BROWSERESULTMASK_NODECLASS)
-        retval |= UA_NodeClass_copy(&curr->nodeClass, &descr->nodeClass);
-    if(mask & UA_BROWSERESULTMASK_BROWSENAME)
-        retval |= UA_QualifiedName_copy(&curr->browseName, &descr->browseName);
-    if(mask & UA_BROWSERESULTMASK_DISPLAYNAME)
-        retval |= UA_LocalizedText_copy(&curr->displayName, &descr->displayName);
-    if(mask & UA_BROWSERESULTMASK_TYPEDEFINITION) {
-        if(curr->nodeClass == UA_NODECLASS_OBJECT ||
-           curr->nodeClass == UA_NODECLASS_VARIABLE) {
-            const UA_Node *type = getNodeType(server, curr);
-            if(type) {
-                retval |= UA_NodeId_copy(&type->nodeId, &descr->typeDefinition.nodeId);
-                UA_Nodestore_releaseNode(server->nsCtx, type);
-            }
-        }
-    }
-
-    if(retval == UA_STATUSCODE_GOOD)
-        rr->size++; /* Increase the counter */
-    else
-        UA_ReferenceDescription_deleteMembers(descr);
-    return retval;
-}
-
-static UA_Boolean
-matchClassMask(const UA_Node *node, UA_UInt32 nodeClassMask) {
-    if(nodeClassMask != UA_NODECLASS_UNSPECIFIED &&
-       (node->nodeClass & nodeClassMask) == 0)
-        return false;
-    return true;
-}
-
-/* Returns whether the node / continuationpoint is done */
-static UA_StatusCode
-browseReferences(UA_Server *server, const UA_Node *node,
-                 ContinuationPoint *cp, RefResult *rr, UA_Boolean *done) {
-    UA_assert(cp != NULL);
-    const UA_BrowseDescription *bd= &cp->browseDescription;
-
-    size_t referenceKindIndex = cp->referenceKindIndex;
-    size_t targetIndex = cp->targetIndex;
-
-    /* Loop over the node's references */
-    const UA_Node *target = NULL;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    for(; referenceKindIndex < node->referencesSize; ++referenceKindIndex) {
-        UA_NodeReferenceKind *rk = &node->references[referenceKindIndex];
-
-        /* Reference in the right direction? */
-        if(rk->isInverse && bd->browseDirection == UA_BROWSEDIRECTION_FORWARD)
-            continue;
-        if(!rk->isInverse && bd->browseDirection == UA_BROWSEDIRECTION_INVERSE)
-            continue;
-
-        /* Is the reference part of the hierarchy of references we look for? */
-        if(!relevantReference(&rk->referenceTypeId, cp->relevantReferencesSize,
-                              cp->relevantReferences))
-            continue;
-
-        /* Loop over the targets */
-        for(; targetIndex < rk->targetIdsSize; ++targetIndex) {
-            target = NULL;
-
-            /* Get the node if it is not a remote reference */
-            if(rk->targetIds[targetIndex].serverIndex == 0 &&
-               rk->targetIds[targetIndex].namespaceUri.data == NULL) {
-                target = UA_Nodestore_getNode(server->nsCtx, &rk->targetIds[targetIndex].nodeId);
-
-                /* Test if the node class matches */
-                if(target && !matchClassMask(target, bd->nodeClassMask)) {
-                    if(target)
-                        UA_Nodestore_releaseNode(server->nsCtx, target);
-                    continue;
-                }
-            }
-
-            /* A match! Did we reach maxrefs? */
-            if(rr->size >= cp->maxReferences) {
-                cp->referenceKindIndex = referenceKindIndex;
-                cp->targetIndex = targetIndex;
-                if(target)
-                    UA_Nodestore_releaseNode(server->nsCtx, target);
-                return UA_STATUSCODE_GOOD;
-            }
-
-            /* Copy the node description. Target is on top of the stack */
-            retval = addReferenceDescription(server, rr, rk, bd->resultMask,
-                                             &rk->targetIds[targetIndex], target);
-            UA_Nodestore_releaseNode(server->nsCtx, target);
-            if(retval != UA_STATUSCODE_GOOD)
-                return retval;
-        }
-
-        targetIndex = 0; /* Start at index 0 for the next reference kind */
-    }
-
-    /* The node is done */
-    *done = true;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Results for a single browsedescription. This is the inner loop for both
- * Browse and BrowseNext. The ContinuationPoint contains all the data used.
- * Including the BrowseDescription. Returns whether there are remaining
- * references. */
-static UA_Boolean
-browseWithContinuation(UA_Server *server, UA_Session *session,
-                       ContinuationPoint *cp, UA_BrowseResult *result) {
-    const UA_BrowseDescription *descr = &cp->browseDescription;
-
-    /* Is the browsedirection valid? */
-    if(descr->browseDirection != UA_BROWSEDIRECTION_BOTH &&
-       descr->browseDirection != UA_BROWSEDIRECTION_FORWARD &&
-       descr->browseDirection != UA_BROWSEDIRECTION_INVERSE) {
-        result->statusCode = UA_STATUSCODE_BADBROWSEDIRECTIONINVALID;
-        return true;
-    }
-
-    /* Is the reference type valid? */
-    if(!UA_NodeId_isNull(&descr->referenceTypeId)) {
-        const UA_Node *reftype = UA_Nodestore_getNode(server->nsCtx, &descr->referenceTypeId);
-        if(!reftype) {
-            result->statusCode = UA_STATUSCODE_BADREFERENCETYPEIDINVALID;
-            return true;
-        }
-
-        UA_Boolean isRef = (reftype->nodeClass == UA_NODECLASS_REFERENCETYPE);
-        UA_Nodestore_releaseNode(server->nsCtx, reftype);
-
-        if(!isRef) {
-            result->statusCode = UA_STATUSCODE_BADREFERENCETYPEIDINVALID;
-            return true;
-        }
-    }
-
-    const UA_Node *node = UA_Nodestore_getNode(server->nsCtx, &descr->nodeId);
-    if(!node) {
-        result->statusCode = UA_STATUSCODE_BADNODEIDUNKNOWN;
-        return true;
-    }
-
-    RefResult rr;
-    result->statusCode = RefResult_init(&rr);
-    if(result->statusCode != UA_STATUSCODE_GOOD) {
-        UA_Nodestore_releaseNode(server->nsCtx, node);
-        return true;
-    }
-
-    /* Browse the references */
-    UA_Boolean done = false;
-    result->statusCode = browseReferences(server, node, cp, &rr, &done);
-    UA_Nodestore_releaseNode(server->nsCtx, node);
-    if(result->statusCode != UA_STATUSCODE_GOOD) {
-        RefResult_clear(&rr);
-        return true;
-    }
-
-    /* Move results */
-    if(rr.size > 0) {
-        result->references = rr.descr;
-        result->referencesSize = rr.size;
-    } else {
-        /* No relevant references, return array of length zero */
-        RefResult_clear(&rr);
-        result->references = (UA_ReferenceDescription*)UA_EMPTY_ARRAY_SENTINEL;
-    }
-
-    return done;
-}
-
-/* Start to browse with no previous cp */
-void
-Operation_Browse(UA_Server *server, UA_Session *session, const UA_UInt32 *maxrefs,
-                 const UA_BrowseDescription *descr, UA_BrowseResult *result) {
-    /* Stack-allocate a temporary cp */
-    UA_STACKARRAY(ContinuationPoint, cp, 1);
-    memset(cp, 0, sizeof(ContinuationPoint));
-    cp->maxReferences = *maxrefs;
-    cp->browseDescription = *descr; /* Shallow copy. Deep-copy later if we persist the cp. */
-
-    /* How many references can we return at most? */
-    if(cp->maxReferences == 0) {
-        if(server->config.maxReferencesPerNode != 0) {
-            cp->maxReferences = server->config.maxReferencesPerNode;
-        } else {
-            cp->maxReferences = UA_INT32_MAX;
-        }
-    } else {
-        if(server->config.maxReferencesPerNode != 0 &&
-           cp->maxReferences > server->config.maxReferencesPerNode) {
-            cp->maxReferences= server->config.maxReferencesPerNode;
-        }
-    }
-
-    /* Get the list of relevant reference types */
-    if(!UA_NodeId_isNull(&descr->referenceTypeId)) {
-        if(!descr->includeSubtypes) {
-            cp->relevantReferences = (UA_NodeId*)(uintptr_t)&descr->referenceTypeId;
-            cp->relevantReferencesSize = 1;
-        } else {
-            result->statusCode =
-                referenceSubtypes(server, &descr->referenceTypeId,
-                                  &cp->relevantReferencesSize, &cp->relevantReferences);
-            if(result->statusCode != UA_STATUSCODE_GOOD)
-                return;
-        }
-    }
-
-    UA_Boolean done = browseWithContinuation(server, session, cp, result);
-
-    /* Exit early if done or an error occurred */
-    if(done || result->statusCode != UA_STATUSCODE_GOOD) {
-        if(descr->includeSubtypes)
-            UA_Array_delete(cp->relevantReferences, cp->relevantReferencesSize,
-                            &UA_TYPES[UA_TYPES_NODEID]);
-        return;
-    }
-
-    /* Persist the new continuation point */
-
-    ContinuationPoint *cp2 = NULL;
-    UA_Guid *ident = NULL;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-
-    /* Enough space for the continuation point? */
-    if(session->availableContinuationPoints <= 0) {
-        retval = UA_STATUSCODE_BADNOCONTINUATIONPOINTS;
-        goto cleanup;
-    }
-
-    /* Allocate and fill the data structure */
-    cp2 = (ContinuationPoint*)UA_malloc(sizeof(ContinuationPoint));
-    if(!cp2) {
-        retval = UA_STATUSCODE_BADOUTOFMEMORY;
-        goto cleanup;
-    }
-    memset(cp2, 0, sizeof(ContinuationPoint));
-    cp2->referenceKindIndex = cp->referenceKindIndex;
-    cp2->targetIndex = cp->targetIndex;
-    cp2->maxReferences = cp->maxReferences;
-
-    if(descr->includeSubtypes) {
-        cp2->relevantReferences = cp->relevantReferences;
-        cp2->relevantReferencesSize = cp->relevantReferencesSize;
-    } else {
-        retval = UA_Array_copy(cp->relevantReferences, cp->relevantReferencesSize,
-                               (void**)&cp2->relevantReferences, &UA_TYPES[UA_TYPES_NODEID]);
-        if(retval != UA_STATUSCODE_GOOD)
-            goto cleanup;
-        cp2->relevantReferencesSize = cp->relevantReferencesSize;
-    }
-
-    /* Copy the description */
-    retval = UA_BrowseDescription_copy(descr, &cp2->browseDescription);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    /* Create a random bytestring via a Guid */
-    ident = UA_Guid_new();
-    if(!ident) {
-        retval = UA_STATUSCODE_BADOUTOFMEMORY;
-        goto cleanup;
-    }
-    *ident = UA_Guid_random();
-    cp2->identifier.data = (UA_Byte*)ident;
-    cp2->identifier.length = sizeof(UA_Guid);
-
-    /* Return the cp identifier */
-    retval = UA_ByteString_copy(&cp2->identifier, &result->continuationPoint);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    /* Attach the cp to the session */
-    cp2->next = session->continuationPoints;
-    session->continuationPoints = cp2;
-    --session->availableContinuationPoints;
-    return;
-
- cleanup:
-    if(cp2) {
-        ContinuationPoint_clear(cp2);
-        UA_free(cp2);
-    }
-    UA_BrowseResult_deleteMembers(result);
-    result->statusCode = retval;
-}
-
-void Service_Browse(UA_Server *server, UA_Session *session,
-                    const UA_BrowseRequest *request, UA_BrowseResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session, "Processing BrowseRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    /* Test the number of operations in the request */
-    if(server->config.maxNodesPerBrowse != 0 &&
-       request->nodesToBrowseSize > server->config.maxNodesPerBrowse) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYOPERATIONS;
-        return;
-    }
-
-    /* No views supported at the moment */
-    if(!UA_NodeId_isNull(&request->view.viewId)) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADVIEWIDUNKNOWN;
-        return;
-    }
-
-    response->responseHeader.serviceResult =
-        UA_Server_processServiceOperations(server, session, (UA_ServiceOperation)Operation_Browse,
-                                           &request->requestedMaxReferencesPerNode,
-                                           &request->nodesToBrowseSize, &UA_TYPES[UA_TYPES_BROWSEDESCRIPTION],
-                                           &response->resultsSize, &UA_TYPES[UA_TYPES_BROWSERESULT]);
-}
-
-UA_BrowseResult
-UA_Server_browse(UA_Server *server, UA_UInt32 maxReferences,
-                 const UA_BrowseDescription *bd) {
-    UA_BrowseResult result;
-    UA_BrowseResult_init(&result);
-    UA_LOCK(server->serviceMutex);
-    Operation_Browse(server, &server->adminSession, &maxReferences, bd, &result);
-    UA_UNLOCK(server->serviceMutex);
-    return result;
-}
-
-static void
-Operation_BrowseNext(UA_Server *server, UA_Session *session,
-                     const UA_Boolean *releaseContinuationPoints,
-                     const UA_ByteString *continuationPoint, UA_BrowseResult *result) {
-    /* Find the continuation point */
-    ContinuationPoint **prev = &session->continuationPoints, *cp;
-    while((cp = *prev)) {
-        if(UA_ByteString_equal(&cp->identifier, continuationPoint))
-            break;
-        prev = &cp->next;
-    }
-    if(!cp) {
-        result->statusCode = UA_STATUSCODE_BADCONTINUATIONPOINTINVALID;
-        return;
-    }
-
-    /* Remove the cp */
-    if(*releaseContinuationPoints) {
-        *prev = ContinuationPoint_clear(cp);
-        UA_free(cp);
-        ++session->availableContinuationPoints;
-        return;
-    }
-
-    /* Continue browsing */
-    UA_Boolean done = browseWithContinuation(server, session, cp, result);
-
-    if(done) {
-        /* Remove the cp if there are no references left */
-        *prev = ContinuationPoint_clear(cp);
-        UA_free(cp);
-        ++session->availableContinuationPoints;
-    } else {
-        /* Return the cp identifier */
-        UA_StatusCode retval = UA_ByteString_copy(&cp->identifier, &result->continuationPoint);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_BrowseResult_deleteMembers(result);
-            result->statusCode = retval;
-        }
-    }
-}
-
-void
-Service_BrowseNext(UA_Server *server, UA_Session *session,
-                   const UA_BrowseNextRequest *request,
-                   UA_BrowseNextResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Processing BrowseNextRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    UA_Boolean releaseContinuationPoints = request->releaseContinuationPoints; /* request is const */
-    response->responseHeader.serviceResult =
-        UA_Server_processServiceOperations(server, session, (UA_ServiceOperation)Operation_BrowseNext,
-                                           &releaseContinuationPoints,
-                                           &request->continuationPointsSize, &UA_TYPES[UA_TYPES_BYTESTRING],
-                                           &response->resultsSize, &UA_TYPES[UA_TYPES_BROWSERESULT]);
-}
-
-UA_BrowseResult
-UA_Server_browseNext(UA_Server *server, UA_Boolean releaseContinuationPoint,
-                     const UA_ByteString *continuationPoint) {
-    UA_BrowseResult result;
-    UA_BrowseResult_init(&result);
-    UA_LOCK(server->serviceMutex);
-    Operation_BrowseNext(server, &server->adminSession, &releaseContinuationPoint,
-                         continuationPoint, &result);
-    UA_UNLOCK(server->serviceMutex);
-    return result;
-}
-
-/***********************/
-/* TranslateBrowsePath */
-/***********************/
-
-static void
-walkBrowsePathElementReferenceTargets(UA_BrowsePathResult *result, size_t *targetsSize,
-                                      UA_NodeId **next, size_t *nextSize, size_t *nextCount,
-                                      UA_UInt32 elemDepth, const UA_NodeReferenceKind *rk) {
-    /* Loop over the targets */
-    for(size_t i = 0; i < rk->targetIdsSize; i++) {
-        UA_ExpandedNodeId *targetId = &rk->targetIds[i];
-
-        /* Does the reference point to an external server? Then add to the
-         * targets with the right path depth. */
-        if(targetId->serverIndex != 0) {
-            UA_BrowsePathTarget *tempTargets =
-                (UA_BrowsePathTarget*)UA_realloc(result->targets,
-                             sizeof(UA_BrowsePathTarget) * (*targetsSize) * 2);
-            if(!tempTargets) {
-                result->statusCode = UA_STATUSCODE_BADOUTOFMEMORY;
-                return;
-            }
-            result->targets = tempTargets;
-            (*targetsSize) *= 2;
-            result->statusCode = UA_ExpandedNodeId_copy(targetId,
-                       &result->targets[result->targetsSize].targetId);
-            result->targets[result->targetsSize].remainingPathIndex = elemDepth;
-            continue;
-        }
-
-        /* Can we store the node in the array of candidates for deep-search? */
-        if(*nextSize <= *nextCount) {
-            UA_NodeId *tempNext =
-                (UA_NodeId*)UA_realloc(*next, sizeof(UA_NodeId) * (*nextSize) * 2);
-            if(!tempNext) {
-                result->statusCode = UA_STATUSCODE_BADOUTOFMEMORY;
-                return;
-            }
-            *next = tempNext;
-            (*nextSize) *= 2;
-        }
-
-        /* Add the node to the next array for the following path element */
-        result->statusCode = UA_NodeId_copy(&targetId->nodeId,
-                                            &(*next)[*nextCount]);
-        if(result->statusCode != UA_STATUSCODE_GOOD)
-            return;
-        ++(*nextCount);
-    }
-}
-
-static void
-walkBrowsePathElement(UA_Server *server, UA_Session *session, UA_UInt32 nodeClassMask,
-                      UA_BrowsePathResult *result, size_t *targetsSize,
-                      const UA_RelativePathElement *elem, UA_UInt32 elemDepth,
-                      const UA_QualifiedName *targetName,
-                      const UA_NodeId *current, const size_t currentCount,
-                      UA_NodeId **next, size_t *nextSize, size_t *nextCount) {
-    /* Return all references? */
-    UA_Boolean all_refs = UA_NodeId_isNull(&elem->referenceTypeId);
-    if(!all_refs) {
-        const UA_Node *rootRef = UA_Nodestore_getNode(server->nsCtx, &elem->referenceTypeId);
-        if(!rootRef)
-            return;
-        UA_Boolean match = (rootRef->nodeClass == UA_NODECLASS_REFERENCETYPE);
-        UA_Nodestore_releaseNode(server->nsCtx, rootRef);
-        if(!match)
-            return;
-    }
-
-    /* Iterate over all nodes at the current depth-level */
-    for(size_t i = 0; i < currentCount; ++i) {
-        /* Get the node */
-        const UA_Node *node = UA_Nodestore_getNode(server->nsCtx, &current[i]);
-        if(!node) {
-            /* If we cannot find the node at depth 0, the starting node does not exist */
-            if(elemDepth == 0)
-                result->statusCode = UA_STATUSCODE_BADNODEIDUNKNOWN;
-            continue;
-        }
-
-        /* Test whether the node fits the class mask */
-        if(!matchClassMask(node, nodeClassMask)) {
-            UA_Nodestore_releaseNode(server->nsCtx, node);
-            continue;
-        }
-
-        /* Test whether the node has the target name required in the previous
-         * path element */
-        if(targetName && (targetName->namespaceIndex != node->browseName.namespaceIndex ||
-                          !UA_String_equal(&targetName->name, &node->browseName.name))) {
-            UA_Nodestore_releaseNode(server->nsCtx, node);
-            continue;
-        }
-
-        /* Loop over the nodes references */
-        for(size_t r = 0; r < node->referencesSize &&
-                result->statusCode == UA_STATUSCODE_GOOD; ++r) {
-            UA_NodeReferenceKind *rk = &node->references[r];
-
-            /* Does the direction of the reference match? */
-            if(rk->isInverse != elem->isInverse)
-                continue;
-
-            /* Is the node relevant? */
-            if(!all_refs) {
-                if(!elem->includeSubtypes && !UA_NodeId_equal(&rk->referenceTypeId, &elem->referenceTypeId))
-                    continue;
-                if(!isNodeInTree(server->nsCtx, &rk->referenceTypeId, &elem->referenceTypeId, &subtypeId, 1))
-                    continue;
-            }
-
-            /* Walk over the reference targets */
-            walkBrowsePathElementReferenceTargets(result, targetsSize, next, nextSize,
-                                                  nextCount, elemDepth, rk);
-        }
-
-        UA_Nodestore_releaseNode(server->nsCtx, node);
-    }
-}
-
-/* This assumes that result->targets has enough room for all currentCount elements */
-static void
-addBrowsePathTargets(UA_Server *server, UA_Session *session, UA_UInt32 nodeClassMask,
-                     UA_BrowsePathResult *result, const UA_QualifiedName *targetName,
-                     UA_NodeId *current, size_t currentCount) {
-    for(size_t i = 0; i < currentCount; i++) {
-        const UA_Node *node = UA_Nodestore_getNode(server->nsCtx, &current[i]);
-        if(!node) {
-            UA_NodeId_deleteMembers(&current[i]);
-            continue;
-        }
-
-        /* Test whether the node fits the class mask */
-        UA_Boolean skip = !matchClassMask(node, nodeClassMask);
-
-        /* Test whether the node has the target name required in the
-         * previous path element */
-        if(targetName->namespaceIndex != node->browseName.namespaceIndex ||
-           !UA_String_equal(&targetName->name, &node->browseName.name))
-            skip = true;
-
-        UA_Nodestore_releaseNode(server->nsCtx, node);
-
-        if(skip) {
-            UA_NodeId_deleteMembers(&current[i]);
-            continue;
-        }
-
-        /* Move the nodeid to the target array */
-        UA_BrowsePathTarget_init(&result->targets[result->targetsSize]);
-        result->targets[result->targetsSize].targetId.nodeId = current[i];
-        result->targets[result->targetsSize].remainingPathIndex = UA_UINT32_MAX;
-        ++result->targetsSize;
-    }
-}
-
-static void
-walkBrowsePath(UA_Server *server, UA_Session *session, const UA_BrowsePath *path,
-               UA_UInt32 nodeClassMask, UA_BrowsePathResult *result, size_t targetsSize,
-               UA_NodeId **current, size_t *currentSize, size_t *currentCount,
-               UA_NodeId **next, size_t *nextSize, size_t *nextCount) {
-    UA_assert(*currentCount == 1);
-    UA_assert(*nextCount == 0);
-
-    /* Points to the targetName of the _previous_ path element */
-    const UA_QualifiedName *targetName = NULL;
-
-    /* Iterate over path elements */
-    UA_assert(path->relativePath.elementsSize > 0);
-    for(UA_UInt32 i = 0; i < path->relativePath.elementsSize; ++i) {
-        walkBrowsePathElement(server, session, nodeClassMask, result, &targetsSize,
-                              &path->relativePath.elements[i], i, targetName,
-                              *current, *currentCount, next, nextSize, nextCount);
-
-        /* Clean members of current */
-        for(size_t j = 0; j < *currentCount; j++)
-            UA_NodeId_deleteMembers(&(*current)[j]);
-        *currentCount = 0;
-
-        /* When no targets are left or an error occurred. None of next's
-         * elements will be copied to result->targets */
-        if(*nextCount == 0 || result->statusCode != UA_STATUSCODE_GOOD) {
-            UA_assert(*currentCount == 0);
-            UA_assert(*nextCount == 0);
-            return;
-        }
-
-        /* Exchange current and next for the next depth */
-        size_t tSize = *currentSize; size_t tCount = *currentCount; UA_NodeId *tT = *current;
-        *currentSize = *nextSize; *currentCount = *nextCount; *current = *next;
-        *nextSize = tSize; *nextCount = tCount; *next = tT;
-
-        /* Store the target name of the previous path element */
-        targetName = &path->relativePath.elements[i].targetName;
-    }
-
-    UA_assert(targetName != NULL);
-    UA_assert(*nextCount == 0);
-
-    /* After the last BrowsePathElement, move members from current to the
-     * result targets */
-
-    /* Realloc if more space is needed */
-    if(targetsSize < result->targetsSize + (*currentCount)) {
-        UA_BrowsePathTarget *newTargets =
-            (UA_BrowsePathTarget*)UA_realloc(result->targets, sizeof(UA_BrowsePathTarget) *
-                                             (result->targetsSize + (*currentCount)));
-        if(!newTargets) {
-            result->statusCode = UA_STATUSCODE_BADOUTOFMEMORY;
-            for(size_t i = 0; i < *currentCount; ++i)
-                UA_NodeId_deleteMembers(&(*current)[i]);
-            *currentCount = 0;
-            return;
-        }
-        result->targets = newTargets;
-    }
-
-    /* Move the elements of current to the targets */
-    addBrowsePathTargets(server, session, nodeClassMask, result, targetName, *current, *currentCount);
-    *currentCount = 0;
-}
-
-static void
-Operation_TranslateBrowsePathToNodeIds(UA_Server *server, UA_Session *session,
-                                       const UA_UInt32 *nodeClassMask, const UA_BrowsePath *path,
-                                       UA_BrowsePathResult *result) {
-    if(path->relativePath.elementsSize <= 0) {
-        result->statusCode = UA_STATUSCODE_BADNOTHINGTODO;
-        return;
-    }
-
-    /* RelativePath elements must not have an empty targetName */
-    for(size_t i = 0; i < path->relativePath.elementsSize; ++i) {
-        if(UA_QualifiedName_isNull(&path->relativePath.elements[i].targetName)) {
-            result->statusCode = UA_STATUSCODE_BADBROWSENAMEINVALID;
-            return;
-        }
-    }
-
-    /* Allocate memory for the targets */
-    size_t targetsSize = 10; /* When to realloc; the member count is stored in
-                              * result->targetsSize */
-    result->targets =
-        (UA_BrowsePathTarget*)UA_malloc(sizeof(UA_BrowsePathTarget) * targetsSize);
-    if(!result->targets) {
-        result->statusCode = UA_STATUSCODE_BADOUTOFMEMORY;
-        return;
-    }
-
-    /* Allocate memory for two temporary arrays. One with the results for the
-     * previous depth of the path. The other for the new results at the current
-     * depth. The two arrays alternate as we descend down the tree. */
-    size_t currentSize = 10; /* When to realloc */
-    size_t currentCount = 0; /* Current elements */
-    UA_NodeId *current = (UA_NodeId*)UA_malloc(sizeof(UA_NodeId) * currentSize);
-    if(!current) {
-        result->statusCode = UA_STATUSCODE_BADOUTOFMEMORY;
-        UA_free(result->targets);
-        return;
-    }
-    size_t nextSize = 10; /* When to realloc */
-    size_t nextCount = 0; /* Current elements */
-    UA_NodeId *next = (UA_NodeId*)UA_malloc(sizeof(UA_NodeId) * nextSize);
-    if(!next) {
-        result->statusCode = UA_STATUSCODE_BADOUTOFMEMORY;
-        UA_free(result->targets);
-        UA_free(current);
-        return;
-    }
-
-    /* Copy the starting node into current */
-    result->statusCode = UA_NodeId_copy(&path->startingNode, &current[0]);
-    if(result->statusCode != UA_STATUSCODE_GOOD) {
-        UA_free(result->targets);
-        UA_free(current);
-        UA_free(next);
-        return;
-    }
-    currentCount = 1;
-
-    /* Walk the path elements */
-    walkBrowsePath(server, session, path, *nodeClassMask, result, targetsSize,
-                   &current, &currentSize, &currentCount,
-                   &next, &nextSize, &nextCount);
-
-    UA_assert(currentCount == 0);
-    UA_assert(nextCount == 0);
-
-    /* No results => BadNoMatch status code */
-    if(result->targetsSize == 0 && result->statusCode == UA_STATUSCODE_GOOD)
-        result->statusCode = UA_STATUSCODE_BADNOMATCH;
-
-    /* Clean up the temporary arrays and the targets */
-    UA_free(current);
-    UA_free(next);
-    if(result->statusCode != UA_STATUSCODE_GOOD) {
-        for(size_t i = 0; i < result->targetsSize; ++i)
-            UA_BrowsePathTarget_deleteMembers(&result->targets[i]);
-        UA_free(result->targets);
-        result->targets = NULL;
-        result->targetsSize = 0;
-    }
-}
-
-UA_BrowsePathResult
-translateBrowsePathToNodeIds(UA_Server *server,
-                                       const UA_BrowsePath *browsePath) {
-    UA_BrowsePathResult result;
-    UA_BrowsePathResult_init(&result);
-    UA_UInt32 nodeClassMask = 0; /* All node classes */
-    Operation_TranslateBrowsePathToNodeIds(server, &server->adminSession, &nodeClassMask,
-                                           browsePath, &result);
-    return result;
-}
-
-UA_BrowsePathResult
-UA_Server_translateBrowsePathToNodeIds(UA_Server *server,
-                                       const UA_BrowsePath *browsePath) {
-    UA_LOCK(server->serviceMutex);
-    UA_BrowsePathResult result = translateBrowsePathToNodeIds(server, browsePath);
-    UA_UNLOCK(server->serviceMutex);
-    return result;
-}
-
-void
-Service_TranslateBrowsePathsToNodeIds(UA_Server *server, UA_Session *session,
-                                      const UA_TranslateBrowsePathsToNodeIdsRequest *request,
-                                      UA_TranslateBrowsePathsToNodeIdsResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Processing TranslateBrowsePathsToNodeIdsRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    /* Test the number of operations in the request */
-    if(server->config.maxNodesPerTranslateBrowsePathsToNodeIds != 0 &&
-       request->browsePathsSize > server->config.maxNodesPerTranslateBrowsePathsToNodeIds) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYOPERATIONS;
-        return;
-    }
-
-    UA_UInt32 nodeClassMask = 0; /* All node classes */
-    response->responseHeader.serviceResult =
-        UA_Server_processServiceOperations(server, session,
-                                           (UA_ServiceOperation)Operation_TranslateBrowsePathToNodeIds,
-                                           &nodeClassMask,
-                                           &request->browsePathsSize, &UA_TYPES[UA_TYPES_BROWSEPATH],
-                                           &response->resultsSize, &UA_TYPES[UA_TYPES_BROWSEPATHRESULT]);
-}
-
-UA_BrowsePathResult
-browseSimplifiedBrowsePath(UA_Server *server, const UA_NodeId origin,
-                           size_t browsePathSize, const UA_QualifiedName *browsePath) {
-    /* Construct the BrowsePath */
-    UA_BrowsePath bp;
-    UA_BrowsePath_init(&bp);
-    bp.startingNode = origin;
-    UA_STACKARRAY(UA_RelativePathElement, rpe, browsePathSize);
-    memset(rpe, 0, sizeof(UA_RelativePathElement) * browsePathSize);
-    for(size_t j = 0; j < browsePathSize; j++) {
-        rpe[j].referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HIERARCHICALREFERENCES);
-        rpe[j].includeSubtypes = true;
-        rpe[j].targetName = browsePath[j];
-    }
-    bp.relativePath.elements = rpe;
-    bp.relativePath.elementsSize = browsePathSize;
-
-    /* Browse */
-    UA_BrowsePathResult bpr;
-    UA_BrowsePathResult_init(&bpr);
-    UA_UInt32 nodeClassMask = UA_NODECLASS_OBJECT | UA_NODECLASS_VARIABLE;
-    Operation_TranslateBrowsePathToNodeIds(server, &server->adminSession, &nodeClassMask, &bp, &bpr);
-    return bpr;
-}
-
-UA_BrowsePathResult
-UA_Server_browseSimplifiedBrowsePath(UA_Server *server, const UA_NodeId origin,
-                           size_t browsePathSize, const UA_QualifiedName *browsePath) {
-    UA_LOCK(server->serviceMutex);
-    UA_BrowsePathResult bpr = browseSimplifiedBrowsePath(server, origin, browsePathSize, browsePath);;
-    UA_UNLOCK(server->serviceMutex);
-    return bpr;
-}
-
-/************/
-/* Register */
-/************/
-
-void Service_RegisterNodes(UA_Server *server, UA_Session *session,
-                           const UA_RegisterNodesRequest *request,
-                           UA_RegisterNodesResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Processing RegisterNodesRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    //TODO: hang the nodeids to the session if really needed
-    if(request->nodesToRegisterSize == 0) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADNOTHINGTODO;
-        return;
-    }
-
-    /* Test the number of operations in the request */
-    if(server->config.maxNodesPerRegisterNodes != 0 &&
-       request->nodesToRegisterSize > server->config.maxNodesPerRegisterNodes) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYOPERATIONS;
-        return;
-    }
-
-    response->responseHeader.serviceResult =
-        UA_Array_copy(request->nodesToRegister, request->nodesToRegisterSize,
-                      (void**)&response->registeredNodeIds, &UA_TYPES[UA_TYPES_NODEID]);
-    if(response->responseHeader.serviceResult == UA_STATUSCODE_GOOD)
-        response->registeredNodeIdsSize = request->nodesToRegisterSize;
-}
-
-void Service_UnregisterNodes(UA_Server *server, UA_Session *session,
-                             const UA_UnregisterNodesRequest *request,
-                             UA_UnregisterNodesResponse *response) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Processing UnRegisterNodesRequest");
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    //TODO: remove the nodeids from the session if really needed
-    if(request->nodesToUnregisterSize == 0)
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADNOTHINGTODO;
-
-    /* Test the number of operations in the request */
-    if(server->config.maxNodesPerRegisterNodes != 0 &&
-       request->nodesToUnregisterSize > server->config.maxNodesPerRegisterNodes) {
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYOPERATIONS;
-        return;
-    }
-}
diff --git a/ext/open62541/src/server/ua_session.c b/ext/open62541/src/server/ua_session.c
deleted file mode 100644
index cf6ff1a..0000000
--- a/ext/open62541/src/server/ua_session.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2018 (c) Thomas Stalder, Blue Time Concept SA
- */
-
-#include "ua_session.h"
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-#include "ua_server_internal.h"
-#include "ua_subscription.h"
-#endif
-
-#define UA_SESSION_NONCELENTH 32
-
-void UA_Session_init(UA_Session *session) {
-    memset(session, 0, sizeof(UA_Session));
-    session->availableContinuationPoints = UA_MAXCONTINUATIONPOINTS;
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    SIMPLEQ_INIT(&session->responseQueue);
-#endif
-}
-
-void UA_Session_deleteMembersCleanup(UA_Session *session, UA_Server* server) {
-    UA_Session_detachFromSecureChannel(session);
-    UA_ApplicationDescription_deleteMembers(&session->clientDescription);
-    UA_NodeId_deleteMembers(&session->header.authenticationToken);
-    UA_NodeId_deleteMembers(&session->sessionId);
-    UA_String_deleteMembers(&session->sessionName);
-    UA_ByteString_deleteMembers(&session->serverNonce);
-    struct ContinuationPoint *cp, *next = session->continuationPoints;
-    while((cp = next)) {
-        next = ContinuationPoint_clear(cp);
-        UA_free(cp);
-    }
-    session->continuationPoints = NULL;
-    session->availableContinuationPoints = UA_MAXCONTINUATIONPOINTS;
-}
-
-void UA_Session_attachToSecureChannel(UA_Session *session, UA_SecureChannel *channel) {
-    LIST_INSERT_HEAD(&channel->sessions, &session->header, pointers);
-    session->header.channel = channel;
-}
-
-void UA_Session_detachFromSecureChannel(UA_Session *session) {
-    if(!session->header.channel)
-        return;
-    session->header.channel = NULL;
-    LIST_REMOVE(&session->header, pointers);
-}
-
-UA_StatusCode
-UA_Session_generateNonce(UA_Session *session) {
-    UA_SecureChannel *channel = session->header.channel;
-    if(!channel || !channel->securityPolicy)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Is the length of the previous nonce correct? */
-    if(session->serverNonce.length != UA_SESSION_NONCELENTH) {
-        UA_ByteString_deleteMembers(&session->serverNonce);
-        UA_StatusCode retval =
-            UA_ByteString_allocBuffer(&session->serverNonce, UA_SESSION_NONCELENTH);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-    }
-
-    return channel->securityPolicy->symmetricModule.
-        generateNonce(channel->securityPolicy, &session->serverNonce);
-}
-
-void UA_Session_updateLifetime(UA_Session *session) {
-    session->validTill = UA_DateTime_nowMonotonic() +
-        (UA_DateTime)(session->timeout * UA_DATETIME_MSEC);
-}
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-
-void UA_Session_addSubscription(UA_Server *server, UA_Session *session, UA_Subscription *newSubscription) {
-    newSubscription->subscriptionId = ++session->lastSubscriptionId;
-
-    LIST_INSERT_HEAD(&session->serverSubscriptions, newSubscription, listEntry);
-    session->numSubscriptions++;
-    server->numSubscriptions++;
-}
-
-UA_StatusCode
-UA_Session_deleteSubscription(UA_Server *server, UA_Session *session,
-                              UA_UInt32 subscriptionId) {
-    UA_Subscription *sub = UA_Session_getSubscriptionById(session, subscriptionId);
-    if(!sub)
-        return UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
-
-    UA_Subscription_deleteMembers(server, sub);
-
-    /* Add a delayed callback to remove the subscription when the currently
-     * scheduled jobs have completed. There is no actual delayed callback. Just
-     * free the structure. */
-    sub->delayedFreePointers.callback = NULL;
-    UA_WorkQueue_enqueueDelayed(&server->workQueue, &sub->delayedFreePointers);
-
-    /* Remove from the session */
-    LIST_REMOVE(sub, listEntry);
-    UA_assert(session->numSubscriptions > 0);
-    UA_assert(server->numSubscriptions > 0);
-    session->numSubscriptions--;
-    server->numSubscriptions--;
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_Subscription *
-UA_Session_getSubscriptionById(UA_Session *session, UA_UInt32 subscriptionId) {
-    UA_Subscription *sub;
-    LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
-        if(sub->subscriptionId == subscriptionId)
-            break;
-    }
-    return sub;
-}
-
-UA_PublishResponseEntry*
-UA_Session_dequeuePublishReq(UA_Session *session) {
-    UA_PublishResponseEntry* entry = SIMPLEQ_FIRST(&session->responseQueue);
-    if(entry) {
-        SIMPLEQ_REMOVE_HEAD(&session->responseQueue, listEntry);
-        session->numPublishReq--;
-    }
-    return entry;
-}
-
-void
-UA_Session_queuePublishReq(UA_Session *session, UA_PublishResponseEntry* entry, UA_Boolean head) {
-    if(!head)
-        SIMPLEQ_INSERT_TAIL(&session->responseQueue, entry, listEntry);
-    else
-        SIMPLEQ_INSERT_HEAD(&session->responseQueue, entry, listEntry);
-    session->numPublishReq++;
-}
-
-#endif
diff --git a/ext/open62541/src/server/ua_session.h b/ext/open62541/src/server/ua_session.h
deleted file mode 100644
index 5a1a202..0000000
--- a/ext/open62541/src/server/ua_session.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- */
-
-#ifndef UA_SESSION_H_
-#define UA_SESSION_H_
-
-#include <open62541/util.h>
-
-#include "ua_securechannel.h"
-
-_UA_BEGIN_DECLS
-
-#define UA_MAXCONTINUATIONPOINTS 5
-
-struct ContinuationPoint;
-typedef struct ContinuationPoint ContinuationPoint;
-
-/* Returns the next entry in the linked list */
-ContinuationPoint *
-ContinuationPoint_clear(ContinuationPoint *cp);
-
-struct UA_Subscription;
-typedef struct UA_Subscription UA_Subscription;
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-typedef struct UA_PublishResponseEntry {
-    SIMPLEQ_ENTRY(UA_PublishResponseEntry) listEntry;
-    UA_UInt32 requestId;
-    UA_PublishResponse response;
-} UA_PublishResponseEntry;
-#endif
-
-typedef struct {
-    UA_SessionHeader  header;
-    UA_ApplicationDescription clientDescription;
-    UA_String         sessionName;
-    UA_Boolean        activated;
-    void             *sessionHandle; // pointer assigned in userland-callback
-    UA_NodeId         sessionId;
-    UA_UInt32         maxRequestMessageSize;
-    UA_UInt32         maxResponseMessageSize;
-    UA_Double         timeout; // [ms]
-    UA_DateTime       validTill;
-    UA_ByteString     serverNonce;
-    UA_UInt16 availableContinuationPoints;
-    ContinuationPoint *continuationPoints;
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    UA_UInt32 lastSubscriptionId;
-    UA_UInt32 lastSeenSubscriptionId;
-    LIST_HEAD(UA_ListOfUASubscriptions, UA_Subscription) serverSubscriptions;
-    SIMPLEQ_HEAD(UA_ListOfQueuedPublishResponses, UA_PublishResponseEntry) responseQueue;
-    UA_UInt32        numSubscriptions;
-    UA_UInt32        numPublishReq;
-    size_t           totalRetransmissionQueueSize; /* Retransmissions of all subscriptions */
-#endif
-} UA_Session;
-
-/**
- * Session Lifecycle
- * ----------------- */
-
-void UA_Session_init(UA_Session *session);
-void UA_Session_deleteMembersCleanup(UA_Session *session, UA_Server *server);
-void UA_Session_attachToSecureChannel(UA_Session *session, UA_SecureChannel *channel);
-void UA_Session_detachFromSecureChannel(UA_Session *session);
-UA_StatusCode UA_Session_generateNonce(UA_Session *session);
-
-/* If any activity on a session happens, the timeout is extended */
-void UA_Session_updateLifetime(UA_Session *session);
-
-/**
- * Subscription handling
- * --------------------- */
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-
-void
-UA_Session_addSubscription(UA_Server *server,
-                           UA_Session *session,
-                           UA_Subscription *newSubscription);
-
-UA_Subscription *
-UA_Session_getSubscriptionById(UA_Session *session,
-                               UA_UInt32 subscriptionId);
-
-UA_StatusCode
-UA_Session_deleteSubscription(UA_Server *server, UA_Session *session,
-                              UA_UInt32 subscriptionId);
-
-void
-UA_Session_queuePublishReq(UA_Session *session,
-                           UA_PublishResponseEntry* entry,
-                           UA_Boolean head);
-
-UA_PublishResponseEntry *
-UA_Session_dequeuePublishReq(UA_Session *session);
-
-#endif
-
-/**
- * Log Helper
- * ----------
- * We have to jump through some hoops to enable the use of format strings
- * without arguments since (pedantic) C99 does not allow variadic macros with
- * zero arguments. So we add a dummy argument that is not printed (%.0s is
- * string of length zero). */
-
-#define UA_LOG_SESSION_INTERNAL(LOGGER, LEVEL, SESSION, MSG, ...) do {  \
-        UA_String idString = UA_STRING_NULL;                            \
-        UA_NodeId_toString(&(SESSION)->sessionId, &idString);           \
-        UA_LOG_##LEVEL(LOGGER, UA_LOGCATEGORY_SESSION,                  \
-                       "Connection %i | SecureChannel %i | Session %.*s | " MSG "%.0s", \
-                       ((SESSION)->header.channel ?                     \
-                        ((SESSION)->header.channel->connection ?        \
-                         (int)((SESSION)->header.channel->connection->sockfd) : 0) : 0), \
-                       ((SESSION)->header.channel ?                     \
-                        (SESSION)->header.channel->securityToken.channelId : 0), \
-                       (int)idString.length, idString.data, __VA_ARGS__); \
-        UA_String_deleteMembers(&idString);                             \
-    } while(0)
-
-#if UA_LOGLEVEL <= 100
-#define UA_LOG_TRACE_SESSION(LOGGER, SESSION, ...)                      \
-    UA_MACRO_EXPAND(UA_LOG_SESSION_INTERNAL(LOGGER, TRACE, SESSION, __VA_ARGS__, ""))
-#else
-#define UA_LOG_TRACE_SESSION(LOGGER, SESSION, ...) do {} while(0)
-#endif
-
-#if UA_LOGLEVEL <= 200
-#define UA_LOG_DEBUG_SESSION(LOGGER, SESSION, ...)                      \
-    UA_MACRO_EXPAND(UA_LOG_SESSION_INTERNAL(LOGGER, DEBUG, SESSION, __VA_ARGS__, ""))
-#else
-#define UA_LOG_DEBUG_SESSION(LOGGER, SESSION, ...) do {} while(0)
-#endif
-
-#if UA_LOGLEVEL <= 300
-#define UA_LOG_INFO_SESSION(LOGGER, SESSION, ...)                      \
-    UA_MACRO_EXPAND(UA_LOG_SESSION_INTERNAL(LOGGER, INFO, SESSION, __VA_ARGS__, ""))
-#else
-#define UA_LOG_INFO_SESSION(LOGGER, SESSION, ...) do {} while(0)
-#endif
-
-#if UA_LOGLEVEL <= 400
-#define UA_LOG_WARNING_SESSION(LOGGER, SESSION, ...)                      \
-    UA_MACRO_EXPAND(UA_LOG_SESSION_INTERNAL(LOGGER, WARNING, SESSION, __VA_ARGS__, ""))
-#else
-#define UA_LOG_WARNING_SESSION(LOGGER, SESSION, ...) do {} while(0)
-#endif
-
-#if UA_LOGLEVEL <= 500
-#define UA_LOG_ERROR_SESSION(LOGGER, SESSION, ...)                      \
-    UA_MACRO_EXPAND(UA_LOG_SESSION_INTERNAL(LOGGER, ERROR, SESSION, __VA_ARGS__, ""))
-#else
-#define UA_LOG_ERROR_SESSION(LOGGER, SESSION, ...) do {} while(0)
-#endif
-
-#if UA_LOGLEVEL <= 600
-#define UA_LOG_FATAL_SESSION(LOGGER, SESSION, ...)                      \
-    UA_MACRO_EXPAND(UA_LOG_SESSION_INTERNAL(LOGGER, FATAL, SESSION, __VA_ARGS__, ""))
-#else
-#define UA_LOG_FATAL_SESSION(LOGGER, SESSION, ...) do {} while(0)
-#endif
-
-_UA_END_DECLS
-
-#endif /* UA_SESSION_H_ */
diff --git a/ext/open62541/src/server/ua_session_manager.c b/ext/open62541/src/server/ua_session_manager.c
deleted file mode 100644
index c6ceed9..0000000
--- a/ext/open62541/src/server/ua_session_manager.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2014-2019 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014, 2017 (c) Florian Palm
- *    Copyright 2015 (c) Sten Grüner
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#include "ua_session_manager.h"
-#include "ua_server_internal.h"
-#include "ua_subscription.h"
-
-UA_StatusCode
-UA_SessionManager_init(UA_SessionManager *sm, UA_Server *server) {
-    LIST_INIT(&sm->sessions);
-    sm->currentSessionCount = 0;
-    sm->server = server;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Delayed callback to free the session memory */
-static void
-removeSessionCallback(UA_Server *server, session_list_entry *entry) {
-    UA_Session_deleteMembersCleanup(&entry->session, server);
-}
-
-static void
-removeSession(UA_SessionManager *sm, session_list_entry *sentry) {
-    UA_Server *server = sm->server;
-    UA_Session *session = &sentry->session;
-
-    /* Remove the Subscriptions */
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    UA_Subscription *sub, *tempsub;
-    LIST_FOREACH_SAFE(sub, &session->serverSubscriptions, listEntry, tempsub) {
-        UA_Session_deleteSubscription(server, session, sub->subscriptionId);
-    }
-
-    UA_PublishResponseEntry *entry;
-    while((entry = UA_Session_dequeuePublishReq(session))) {
-        UA_PublishResponse_deleteMembers(&entry->response);
-        UA_free(entry);
-    }
-#endif
-
-    /* Callback into userland access control */
-    if(server->config.accessControl.closeSession)
-        server->config.accessControl.closeSession(server, &server->config.accessControl,
-                                                  &session->sessionId, session->sessionHandle);
-
-    /* Detach the Session from the SecureChannel */
-    UA_Session_detachFromSecureChannel(session);
-
-    /* Deactivate the session */
-    sentry->session.activated = false;
-
-    /* Detach the session from the session manager and make the capacity
-     * available */
-    LIST_REMOVE(sentry, pointers);
-    UA_atomic_subUInt32(&sm->currentSessionCount, 1);
-
-    /* Add a delayed callback to remove the session when the currently
-     * scheduled jobs have completed */
-    sentry->cleanupCallback.callback = (UA_ApplicationCallback)removeSessionCallback;
-    sentry->cleanupCallback.application = sm->server;
-    sentry->cleanupCallback.data = sentry;
-    UA_WorkQueue_enqueueDelayed(&server->workQueue, &sentry->cleanupCallback);
-}
-
-void UA_SessionManager_deleteMembers(UA_SessionManager *sm) {
-    session_list_entry *current, *temp;
-    LIST_FOREACH_SAFE(current, &sm->sessions, pointers, temp) {
-        removeSession(sm, current);
-    }
-}
-
-void
-UA_SessionManager_cleanupTimedOut(UA_SessionManager *sm,
-                                  UA_DateTime nowMonotonic) {
-    session_list_entry *sentry, *temp;
-    LIST_FOREACH_SAFE(sentry, &sm->sessions, pointers, temp) {
-        /* Session has timed out? */
-        if(sentry->session.validTill >= nowMonotonic)
-            continue;
-        UA_LOG_INFO_SESSION(&sm->server->config.logger, &sentry->session,
-                            "Session has timed out");
-        removeSession(sm, sentry);
-    }
-}
-
-UA_Session *
-UA_SessionManager_getSessionByToken(UA_SessionManager *sm, const UA_NodeId *token) {
-    session_list_entry *current = NULL;
-    LIST_FOREACH(current, &sm->sessions, pointers) {
-        /* Token does not match */
-        if(!UA_NodeId_equal(&current->session.header.authenticationToken, token))
-            continue;
-
-        /* Session has timed out */
-        if(UA_DateTime_nowMonotonic() > current->session.validTill) {
-            UA_LOG_INFO_SESSION(&sm->server->config.logger, &current->session,
-                                "Client tries to use a session that has timed out");
-            return NULL;
-        }
-
-        /* Ok, return */
-        return &current->session;
-    }
-
-    /* Session not found */
-#if UA_LOGLEVEL <= 300
-    UA_String nodeIdStr = UA_STRING_NULL;
-    UA_NodeId_toString(token, &nodeIdStr);
-    UA_LOG_INFO(&sm->server->config.logger, UA_LOGCATEGORY_SESSION,
-                "Try to use Session with token %.*s but is not found",
-                (int)nodeIdStr.length, nodeIdStr.data);
-    UA_String_deleteMembers(&nodeIdStr);
-#endif
-    return NULL;
-}
-
-UA_Session *
-UA_SessionManager_getSessionById(UA_SessionManager *sm, const UA_NodeId *sessionId) {
-    session_list_entry *current = NULL;
-    LIST_FOREACH(current, &sm->sessions, pointers) {
-        /* Token does not match */
-        if(!UA_NodeId_equal(&current->session.sessionId, sessionId))
-            continue;
-
-        /* Session has timed out */
-        if(UA_DateTime_nowMonotonic() > current->session.validTill) {
-            UA_LOG_INFO_SESSION(&sm->server->config.logger, &current->session,
-                                "Client tries to use a session that has timed out");
-            return NULL;
-        }
-
-        /* Ok, return */
-        return &current->session;
-    }
-
-    /* Session not found */
-    UA_String sessionIdStr = UA_STRING_NULL;
-    UA_NodeId_toString(sessionId, &sessionIdStr);
-    UA_LOG_INFO(&sm->server->config.logger, UA_LOGCATEGORY_SESSION,
-                "Try to use Session with identifier %.*s but is not found",
-                (int)sessionIdStr.length, sessionIdStr.data);
-    UA_String_deleteMembers(&sessionIdStr);
-    return NULL;
-}
-
-/* Creates and adds a session. But it is not yet attached to a secure channel. */
-UA_StatusCode
-UA_SessionManager_createSession(UA_SessionManager *sm, UA_SecureChannel *channel,
-                                const UA_CreateSessionRequest *request, UA_Session **session) {
-    if(sm->currentSessionCount >= sm->server->config.maxSessions)
-        return UA_STATUSCODE_BADTOOMANYSESSIONS;
-
-    session_list_entry *newentry = (session_list_entry *)UA_malloc(sizeof(session_list_entry));
-    if(!newentry)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    UA_atomic_addUInt32(&sm->currentSessionCount, 1);
-    UA_Session_init(&newentry->session);
-    newentry->session.sessionId = UA_NODEID_GUID(1, UA_Guid_random());
-    newentry->session.header.authenticationToken = UA_NODEID_GUID(1, UA_Guid_random());
-
-    if(request->requestedSessionTimeout <= sm->server->config.maxSessionTimeout &&
-       request->requestedSessionTimeout > 0)
-        newentry->session.timeout = request->requestedSessionTimeout;
-    else
-        newentry->session.timeout = sm->server->config.maxSessionTimeout;
-
-    UA_Session_updateLifetime(&newentry->session);
-    LIST_INSERT_HEAD(&sm->sessions, newentry, pointers);
-    *session = &newentry->session;
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_SessionManager_removeSession(UA_SessionManager *sm, const UA_NodeId *token) {
-    session_list_entry *current;
-    LIST_FOREACH(current, &sm->sessions, pointers) {
-        if(UA_NodeId_equal(&current->session.header.authenticationToken, token))
-            break;
-    }
-    if(!current)
-        return UA_STATUSCODE_BADSESSIONIDINVALID;
-
-    removeSession(sm, current);
-    return UA_STATUSCODE_GOOD;
-}
diff --git a/ext/open62541/src/server/ua_session_manager.h b/ext/open62541/src/server/ua_session_manager.h
deleted file mode 100644
index 4a24e99..0000000
--- a/ext/open62541/src/server/ua_session_manager.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014, 2017 (c) Florian Palm
- *    Copyright 2015 (c) Sten Grüner
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifndef UA_SESSION_MANAGER_H_
-#define UA_SESSION_MANAGER_H_
-
-#include <open62541/server.h>
-
-#include "open62541_queue.h"
-#include "ua_session.h"
-#include "ua_util_internal.h"
-#include "ua_workqueue.h"
-
-_UA_BEGIN_DECLS
-
-typedef struct session_list_entry {
-    UA_DelayedCallback cleanupCallback;
-    LIST_ENTRY(session_list_entry) pointers;
-    UA_Session session;
-} session_list_entry;
-
-typedef struct UA_SessionManager {
-    LIST_HEAD(session_list, session_list_entry) sessions; // doubly-linked list of sessions
-    UA_UInt32 currentSessionCount;
-    UA_Server *server;
-} UA_SessionManager;
-
-UA_StatusCode
-UA_SessionManager_init(UA_SessionManager *sm, UA_Server *server);
-
-/* Deletes all sessions */
-void UA_SessionManager_deleteMembers(UA_SessionManager *sm);
-
-/* Deletes all sessions that have timed out. Deletion is implemented via a
- * delayed callback. So all currently scheduled jobs with a pointer to the
- * session can complete. */
-void UA_SessionManager_cleanupTimedOut(UA_SessionManager *sm,
-                                       UA_DateTime nowMonotonic);
-
-UA_StatusCode
-UA_SessionManager_createSession(UA_SessionManager *sm, UA_SecureChannel *channel,
-                                const UA_CreateSessionRequest *request, UA_Session **session);
-
-UA_StatusCode
-UA_SessionManager_removeSession(UA_SessionManager *sm, const UA_NodeId *token);
-
-UA_Session *
-UA_SessionManager_getSessionByToken(UA_SessionManager *sm, const UA_NodeId *token);
-
-UA_Session *
-UA_SessionManager_getSessionById(UA_SessionManager *sm, const UA_NodeId *sessionId);
-
-_UA_END_DECLS
-
-#endif /* UA_SESSION_MANAGER_H_ */
diff --git a/ext/open62541/src/server/ua_subscription.c b/ext/open62541/src/server/ua_subscription.c
deleted file mode 100644
index 07e8cff..0000000
--- a/ext/open62541/src/server/ua_subscription.c
+++ /dev/null
@@ -1,608 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2015-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2017-2018 (c) Thomas Stalder, Blue Time Concept SA
- *    Copyright 2015 (c) Joakim L. Gilje
- *    Copyright 2016-2017 (c) Florian Palm
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) frax2222
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Ari Breitkreuz, fortiss GmbH
- *    Copyright 2017 (c) Mattias Bornhager
- *    Copyright 2018 (c) Hilscher Gesellschaft für Systemautomation mbH (Author: Martin Lang)
- */
-
-#include "ua_server_internal.h"
-#include "ua_subscription.h"
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS /* conditional compilation */
-
-UA_Subscription *
-UA_Subscription_new(UA_Session *session, UA_UInt32 subscriptionId) {
-    /* Allocate the memory */
-    UA_Subscription *newSub =
-        (UA_Subscription*)UA_calloc(1, sizeof(UA_Subscription));
-    if(!newSub)
-        return NULL;
-
-    /* Remaining members are covered by calloc zeroing out the memory */
-    newSub->session = session;
-    newSub->subscriptionId = subscriptionId;
-    newSub->state = UA_SUBSCRIPTIONSTATE_NORMAL; /* The first publish response is sent immediately */
-    /* Even if the first publish response is a keepalive the sequence number is 1.
-     * This can happen by a subscription without a monitored item (see CTT test scripts). */
-    newSub->nextSequenceNumber = 1;
-    TAILQ_INIT(&newSub->retransmissionQueue);
-    TAILQ_INIT(&newSub->notificationQueue);
-    return newSub;
-}
-
-void
-UA_Subscription_deleteMembers(UA_Server *server, UA_Subscription *sub) {
-    Subscription_unregisterPublishCallback(server, sub);
-
-    /* Delete monitored Items */
-    UA_MonitoredItem *mon, *tmp_mon;
-    LIST_FOREACH_SAFE(mon, &sub->monitoredItems, listEntry, tmp_mon) {
-        LIST_REMOVE(mon, listEntry);
-        UA_LOG_INFO_SESSION(&server->config.logger, sub->session,
-                            "Subscription %u | MonitoredItem %i | "
-                            "Deleted the MonitoredItem", sub->subscriptionId,
-                            mon->monitoredItemId);
-        UA_MonitoredItem_delete(server, mon);
-    }
-    UA_assert(server->numMonitoredItems >= sub->monitoredItemsSize);
-    server->numMonitoredItems -= sub->monitoredItemsSize;
-    sub->monitoredItemsSize = 0;
-
-    /* Delete Retransmission Queue */
-    UA_NotificationMessageEntry *nme, *nme_tmp;
-    TAILQ_FOREACH_SAFE(nme, &sub->retransmissionQueue, listEntry, nme_tmp) {
-        TAILQ_REMOVE(&sub->retransmissionQueue, nme, listEntry);
-        UA_NotificationMessage_deleteMembers(&nme->message);
-        UA_free(nme);
-        --sub->session->totalRetransmissionQueueSize;
-        --sub->retransmissionQueueSize;
-    }
-    UA_assert(sub->retransmissionQueueSize == 0);
-
-    UA_LOG_INFO_SESSION(&server->config.logger, sub->session,
-                        "Subscription %u | Deleted the Subscription",
-                        sub->subscriptionId);
-}
-
-UA_MonitoredItem *
-UA_Subscription_getMonitoredItem(UA_Subscription *sub, UA_UInt32 monitoredItemId) {
-    UA_MonitoredItem *mon;
-    LIST_FOREACH(mon, &sub->monitoredItems, listEntry) {
-        if(mon->monitoredItemId == monitoredItemId)
-            break;
-    }
-    return mon;
-}
-
-UA_StatusCode
-UA_Subscription_deleteMonitoredItem(UA_Server *server, UA_Subscription *sub,
-                                    UA_UInt32 monitoredItemId) {
-    /* Find the MonitoredItem */
-    UA_MonitoredItem *mon;
-    LIST_FOREACH(mon, &sub->monitoredItems, listEntry) {
-        if(mon->monitoredItemId == monitoredItemId)
-            break;
-    }
-    if(!mon)
-        return UA_STATUSCODE_BADMONITOREDITEMIDINVALID;
-
-    UA_LOG_INFO_SESSION(&server->config.logger, sub->session,
-                        "Subscription %u | MonitoredItem %i | "
-                        "Delete the MonitoredItem", sub->subscriptionId,
-                        mon->monitoredItemId);
-
-    /* Remove the MonitoredItem */
-    LIST_REMOVE(mon, listEntry);
-    UA_assert(sub->monitoredItemsSize > 0);
-    UA_assert(server->numMonitoredItems > 0);
-    sub->monitoredItemsSize--;
-    server->numMonitoredItems--;
-
-    /* Remove content and delayed free */
-    UA_MonitoredItem_delete(server, mon);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-void
-UA_Subscription_addMonitoredItem(UA_Server *server, UA_Subscription *sub, UA_MonitoredItem *newMon) {
-    sub->monitoredItemsSize++;
-    server->numMonitoredItems++;
-    LIST_INSERT_HEAD(&sub->monitoredItems, newMon, listEntry);
-}
-
-static void
-removeOldestRetransmissionMessage(UA_Session *session) {
-    UA_NotificationMessageEntry *oldestEntry = NULL;
-    UA_Subscription *oldestSub = NULL;
-
-    UA_Subscription *sub;
-    LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
-        UA_NotificationMessageEntry *first =
-            TAILQ_LAST(&sub->retransmissionQueue, ListOfNotificationMessages);
-        if(!first)
-            continue;
-        if(!oldestEntry || oldestEntry->message.publishTime > first->message.publishTime) {
-            oldestEntry = first;
-            oldestSub = sub;
-        }
-    }
-    UA_assert(oldestEntry);
-    UA_assert(oldestSub);
-
-    TAILQ_REMOVE(&oldestSub->retransmissionQueue, oldestEntry, listEntry);
-    UA_NotificationMessage_deleteMembers(&oldestEntry->message);
-    UA_free(oldestEntry);
-    --session->totalRetransmissionQueueSize;
-    --oldestSub->retransmissionQueueSize;
-}
-
-static void
-UA_Subscription_addRetransmissionMessage(UA_Server *server, UA_Subscription *sub,
-                                         UA_NotificationMessageEntry *entry) {
-    /* Release the oldest entry if there is not enough space */
-    if(server->config.maxRetransmissionQueueSize > 0 &&
-       sub->session->totalRetransmissionQueueSize >= server->config.maxRetransmissionQueueSize) {
-        UA_LOG_WARNING_SESSION(&server->config.logger, sub->session, "Subscription %u | "
-                               "Retransmission queue overflow", sub->subscriptionId);
-        removeOldestRetransmissionMessage(sub->session);
-    }
-
-    /* Add entry */
-    TAILQ_INSERT_TAIL(&sub->retransmissionQueue, entry, listEntry);
-    ++sub->session->totalRetransmissionQueueSize;
-    ++sub->retransmissionQueueSize;
-}
-
-UA_StatusCode
-UA_Subscription_removeRetransmissionMessage(UA_Subscription *sub, UA_UInt32 sequenceNumber) {
-    /* Find the retransmission message */
-    UA_NotificationMessageEntry *entry;
-    TAILQ_FOREACH(entry, &sub->retransmissionQueue, listEntry) {
-        if(entry->message.sequenceNumber == sequenceNumber)
-            break;
-    }
-    if(!entry)
-        return UA_STATUSCODE_BADSEQUENCENUMBERUNKNOWN;
-
-    /* Remove the retransmission message */
-    TAILQ_REMOVE(&sub->retransmissionQueue, entry, listEntry);
-    --sub->session->totalRetransmissionQueueSize;
-    --sub->retransmissionQueueSize;
-    UA_NotificationMessage_deleteMembers(&entry->message);
-    UA_free(entry);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-prepareNotificationMessage(UA_Server *server, UA_Subscription *sub,
-                           UA_NotificationMessage *message, size_t notifications) {
-    UA_assert(notifications > 0);
-
-    /* Allocate an ExtensionObject for events and data */
-    message->notificationData = (UA_ExtensionObject*)
-        UA_Array_new(2, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
-    if(!message->notificationData)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    message->notificationDataSize = 2;
-
-    /* Pre-allocate DataChangeNotifications */
-    size_t notificationDataIdx = 0;
-    UA_DataChangeNotification *dcn = NULL;
-    if(sub->dataChangeNotifications > 0) {
-        dcn = UA_DataChangeNotification_new();
-        if(!dcn) {
-            UA_NotificationMessage_deleteMembers(message);
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        message->notificationData->encoding = UA_EXTENSIONOBJECT_DECODED;
-        message->notificationData->content.decoded.data = dcn;
-        message->notificationData->content.decoded.type = &UA_TYPES[UA_TYPES_DATACHANGENOTIFICATION];
-
-        size_t dcnSize = sub->dataChangeNotifications;
-        if(dcnSize > notifications)
-            dcnSize = notifications;
-        dcn->monitoredItems = (UA_MonitoredItemNotification*)
-            UA_Array_new(dcnSize, &UA_TYPES[UA_TYPES_MONITOREDITEMNOTIFICATION]);
-        if(!dcn->monitoredItems) {
-            UA_NotificationMessage_deleteMembers(message);
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        dcn->monitoredItemsSize = dcnSize;
-        notificationDataIdx++;
-    }
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-    UA_EventNotificationList *enl = NULL;
-    UA_StatusChangeNotification *scn = NULL;
-    /* Pre-allocate either StatusChange or EventNotifications. Sending a
-     * (single) StatusChangeNotification has priority. */
-    if(sub->statusChangeNotifications > 0) {
-        scn = UA_StatusChangeNotification_new();
-        if(!scn) {
-            UA_NotificationMessage_deleteMembers(message);
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        message->notificationData[notificationDataIdx].encoding = UA_EXTENSIONOBJECT_DECODED;
-        message->notificationData[notificationDataIdx].content.decoded.data = scn;
-        message->notificationData[notificationDataIdx].content.decoded.type = &UA_TYPES[UA_TYPES_STATUSCHANGENOTIFICATION];
-        notificationDataIdx++;
-    } else if(sub->eventNotifications > 0) {
-        enl = UA_EventNotificationList_new();
-        if(!enl) {
-            UA_NotificationMessage_deleteMembers(message);
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        message->notificationData[notificationDataIdx].encoding = UA_EXTENSIONOBJECT_DECODED;
-        message->notificationData[notificationDataIdx].content.decoded.data = enl;
-        message->notificationData[notificationDataIdx].content.decoded.type = &UA_TYPES[UA_TYPES_EVENTNOTIFICATIONLIST];
-
-        size_t enlSize = sub->eventNotifications;
-        if(enlSize > notifications)
-            enlSize = notifications;
-        enl->events = (UA_EventFieldList*) UA_Array_new(enlSize, &UA_TYPES[UA_TYPES_EVENTFIELDLIST]);
-        if(!enl->events) {
-            UA_NotificationMessage_deleteMembers(message);
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        enl->eventsSize = enlSize;
-        notificationDataIdx++;
-    }
-#endif
-
-    UA_assert(notificationDataIdx > 0);
-    message->notificationDataSize = notificationDataIdx;
-
-    /* <-- The point of no return --> */
-
-    size_t totalNotifications = 0; /* How many notifications were moved to the response overall? */
-    size_t dcnPos = 0; /* How many DataChangeNotifications were put into the list? */
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-    size_t enlPos = 0; /* How many EventNotifications were moved into the list */
-#endif
-    UA_Notification *notification, *notification_tmp;
-    TAILQ_FOREACH_SAFE(notification, &sub->notificationQueue, globalEntry, notification_tmp) {
-        if(totalNotifications >= notifications)
-            break;
-
-        UA_MonitoredItem *mon = notification->mon;
-
-        /* Remove from the queues and decrease the counters */
-        UA_Notification_dequeue(server, notification);
-
-        /* Move the content to the response */
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-        if(mon->attributeId == UA_ATTRIBUTEID_EVENTNOTIFIER) {
-
-            UA_assert(enl != NULL); /* Have at least one event notification */
-
-            /* Move the content to the response */
-            UA_EventFieldList *efl = &enl->events[enlPos];
-            *efl = notification->data.event.fields;
-            UA_EventFieldList_init(&notification->data.event.fields);
-            efl->clientHandle = mon->clientHandle;
-
-            enlPos++;
-        } else
-#endif
-        {
-            UA_assert(dcn != NULL); /* Have at least one change notification */
-            /* Move the content to the response */
-            UA_MonitoredItemNotification *min = &dcn->monitoredItems[dcnPos];
-            min->clientHandle = mon->clientHandle;
-            min->value = notification->data.value;
-            UA_DataValue_init(&notification->data.value); /* Reset after the value has been moved */
-            dcnPos++;
-        }
-
-        UA_Notification_delete(notification);
-        totalNotifications++;
-    }
-
-    /* Set sizes */
-    if(dcn) {
-        dcn->monitoredItemsSize = dcnPos;
-        if(dcnPos == 0) {
-            UA_free(dcn->monitoredItems);
-            dcn->monitoredItems = NULL;
-        }
-    }
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-    if(enl) {
-        enl->eventsSize = enlPos;
-        if(enlPos == 0) {
-            UA_free(enl->events);
-            enl->events = NULL;
-        }
-    }
-#endif
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/* According to OPC Unified Architecture, Part 4 5.13.1.1 i) The value 0 is
- * never used for the sequence number */
-static UA_UInt32
-UA_Subscription_nextSequenceNumber(UA_UInt32 sequenceNumber) {
-    UA_UInt32 nextSequenceNumber = sequenceNumber + 1;
-    if(nextSequenceNumber == 0)
-        nextSequenceNumber = 1;
-    return nextSequenceNumber;
-}
-
-static void
-publishCallback(UA_Server *server, UA_Subscription *sub) {
-    sub->readyNotifications = sub->notificationQueueSize;
-    UA_Subscription_publish(server, sub);
-}
-
-void
-UA_Subscription_publish(UA_Server *server, UA_Subscription *sub) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, sub->session, "Subscription %u | "
-                         "Publish Callback", sub->subscriptionId);
-    /* Dequeue a response */
-    UA_PublishResponseEntry *pre = UA_Session_dequeuePublishReq(sub->session);
-    if(pre) {
-        sub->currentLifetimeCount = 0; /* Reset the LifetimeCounter */
-    } else {
-        UA_LOG_DEBUG_SESSION(&server->config.logger, sub->session,
-                             "Subscription %u | The publish queue is empty",
-                             sub->subscriptionId);
-        ++sub->currentLifetimeCount;
-
-        if(sub->currentLifetimeCount > sub->lifeTimeCount) {
-            UA_LOG_DEBUG_SESSION(&server->config.logger, sub->session,
-                                 "Subscription %u | End of lifetime "
-                                 "for subscription", sub->subscriptionId);
-            UA_Session_deleteSubscription(server, sub->session, sub->subscriptionId);
-            /* TODO: send a StatusChangeNotification with Bad_Timeout */
-            return;
-        }
-    }
-
-    /* If there are several late publish responses... */
-    if(sub->readyNotifications > sub->notificationQueueSize)
-        sub->readyNotifications = sub->notificationQueueSize;
-
-    /* Count the available notifications */
-    UA_UInt32 notifications = sub->readyNotifications;
-    if(!sub->publishingEnabled)
-        notifications = 0;
-
-    UA_Boolean moreNotifications = false;
-    if(notifications > sub->notificationsPerPublish) {
-        notifications = sub->notificationsPerPublish;
-        moreNotifications = true;
-    }
-
-    /* Return if no notifications and no keepalive */
-    if(notifications == 0) {
-        ++sub->currentKeepAliveCount;
-        if(sub->currentKeepAliveCount < sub->maxKeepAliveCount) {
-            if(pre)
-                UA_Session_queuePublishReq(sub->session, pre, true); /* Re-enqueue */
-            return;
-        }
-        UA_LOG_DEBUG_SESSION(&server->config.logger, sub->session,
-                             "Subscription %u | Sending a KeepAlive",
-                             sub->subscriptionId);
-    }
-
-    /* We want to send a response. Is the channel open? */
-    UA_SecureChannel *channel = sub->session->header.channel;
-    if(!channel || !pre) {
-        UA_LOG_DEBUG_SESSION(&server->config.logger, sub->session,
-                             "Subscription %u | Want to send a publish response but can't. "
-                             "The subscription is late.", sub->subscriptionId);
-        sub->state = UA_SUBSCRIPTIONSTATE_LATE;
-        if(pre)
-            UA_Session_queuePublishReq(sub->session, pre, true); /* Re-enqueue */
-        return;
-    }
-
-    /* Prepare the response */
-    UA_PublishResponse *response = &pre->response;
-    UA_NotificationMessage *message = &response->notificationMessage;
-    UA_NotificationMessageEntry *retransmission = NULL;
-    if(notifications > 0) {
-        if(server->config.enableRetransmissionQueue) {
-            /* Allocate the retransmission entry */
-            retransmission = (UA_NotificationMessageEntry*)UA_malloc(sizeof(UA_NotificationMessageEntry));
-            if(!retransmission) {
-                UA_LOG_WARNING_SESSION(&server->config.logger, sub->session,
-                                       "Subscription %u | Could not allocate memory for retransmission. "
-                                       "The subscription is late.", sub->subscriptionId);
-                sub->state = UA_SUBSCRIPTIONSTATE_LATE;
-                UA_Session_queuePublishReq(sub->session, pre, true); /* Re-enqueue */
-                return;
-            }
-        }
-
-        /* Prepare the response */
-        UA_StatusCode retval = prepareNotificationMessage(server, sub, message, notifications);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_WARNING_SESSION(&server->config.logger, sub->session,
-                                   "Subscription %u | Could not prepare the notification message. "
-                                   "The subscription is late.", sub->subscriptionId);
-            /* If the retransmission queue is enabled a retransmission message is allocated */
-            if(retransmission)
-                UA_free(retransmission);
-            sub->state = UA_SUBSCRIPTIONSTATE_LATE;
-            UA_Session_queuePublishReq(sub->session, pre, true); /* Re-enqueue */
-            return;
-        }
-    }
-
-    /* <-- The point of no return --> */
-
-    /* Adjust the number of ready notifications */
-    UA_assert(sub->readyNotifications >= notifications);
-    sub->readyNotifications -= notifications;
-
-    /* Set up the response */
-    response->responseHeader.timestamp = UA_DateTime_now();
-    response->subscriptionId = sub->subscriptionId;
-    response->moreNotifications = moreNotifications;
-    message->publishTime = response->responseHeader.timestamp;
-
-    /* Set sequence number to message. Started at 1 which is given
-     * during creating a new subscription. The 1 is required for
-     * initial publish response with or without an monitored item. */
-    message->sequenceNumber = sub->nextSequenceNumber;
-
-    if(notifications > 0) {
-        /* If the retransmission queue is enabled a retransmission message is allocated */
-        if(retransmission) {
-            /* Put the notification message into the retransmission queue. This
-             * needs to be done here, so that the message itself is included in the
-             * available sequence numbers for acknowledgement. */
-            retransmission->message = response->notificationMessage;
-            UA_Subscription_addRetransmissionMessage(server, sub, retransmission);
-        }
-        /* Only if a notification was created, the sequence number must be increased.
-         * For a keepalive the sequence number can be reused. */
-        sub->nextSequenceNumber = UA_Subscription_nextSequenceNumber(sub->nextSequenceNumber);
-    }
-
-    /* Get the available sequence numbers from the retransmission queue */
-    size_t available = sub->retransmissionQueueSize;
-    UA_STACKARRAY(UA_UInt32, seqNumbers, available);
-    if(available > 0) {
-        response->availableSequenceNumbers = seqNumbers;
-        response->availableSequenceNumbersSize = available;
-        size_t i = 0;
-        UA_NotificationMessageEntry *nme;
-        TAILQ_FOREACH(nme, &sub->retransmissionQueue, listEntry) {
-            response->availableSequenceNumbers[i] = nme->message.sequenceNumber;
-            ++i;
-        }
-    }
-
-    /* Send the response */
-    UA_LOG_DEBUG_SESSION(&server->config.logger, sub->session,
-                         "Subscription %u | Sending out a publish response "
-                         "with %u notifications", sub->subscriptionId,
-                         (UA_UInt32)notifications);
-    UA_SecureChannel_sendSymmetricMessage(sub->session->header.channel, pre->requestId,
-                                          UA_MESSAGETYPE_MSG, response,
-                                          &UA_TYPES[UA_TYPES_PUBLISHRESPONSE]);
-
-    /* Reset subscription state to normal */
-    sub->state = UA_SUBSCRIPTIONSTATE_NORMAL;
-    sub->currentKeepAliveCount = 0;
-
-    /* Free the response */
-    UA_Array_delete(response->results, response->resultsSize, &UA_TYPES[UA_TYPES_UINT32]);
-    UA_free(pre); /* No need for UA_PublishResponse_deleteMembers */
-
-    /* Repeat sending responses if there are more notifications to send */
-    if(moreNotifications)
-        UA_Subscription_publish(server, sub);
-}
-
-UA_Boolean
-UA_Subscription_reachedPublishReqLimit(UA_Server *server,  UA_Session *session) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Reached number of publish request limit");
-
-    /* Dequeue a response */
-    UA_PublishResponseEntry *pre = UA_Session_dequeuePublishReq(session);
-
-    /* Cannot publish without a response */
-    if(!pre) {
-        UA_LOG_FATAL_SESSION(&server->config.logger, session, "No publish requests available");
-        return false;
-    }
-
-    /* <-- The point of no return --> */
-
-    UA_PublishResponse *response = &pre->response;
-    UA_NotificationMessage *message = &response->notificationMessage;
-
-    /* Set up the response. Note that this response has no related subscription id */
-    response->responseHeader.timestamp = UA_DateTime_now();
-    response->responseHeader.serviceResult = UA_STATUSCODE_BADTOOMANYPUBLISHREQUESTS;
-    response->subscriptionId = 0;
-    response->moreNotifications = false;
-    message->publishTime = response->responseHeader.timestamp;
-    message->sequenceNumber = 0;
-    response->availableSequenceNumbersSize = 0;
-
-    /* Send the response */
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session,
-                         "Sending out a publish response triggered by too many publish requests");
-    UA_SecureChannel_sendSymmetricMessage(session->header.channel, pre->requestId,
-                     UA_MESSAGETYPE_MSG, response, &UA_TYPES[UA_TYPES_PUBLISHRESPONSE]);
-
-    /* Free the response */
-    UA_Array_delete(response->results, response->resultsSize, &UA_TYPES[UA_TYPES_UINT32]);
-    UA_free(pre); /* no need for UA_PublishResponse_deleteMembers */
-
-    return true;
-}
-
-UA_StatusCode
-Subscription_registerPublishCallback(UA_Server *server, UA_Subscription *sub) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, sub->session,
-                         "Subscription %u | Register subscription "
-                         "publishing callback", sub->subscriptionId);
-
-    if(sub->publishCallbackIsRegistered)
-        return UA_STATUSCODE_GOOD;
-
-    UA_StatusCode retval =
-        UA_Server_addRepeatedCallback(server, (UA_ServerCallback)publishCallback,
-                                      sub, (UA_UInt32)sub->publishingInterval, &sub->publishCallbackId);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    sub->publishCallbackIsRegistered = true;
-    return UA_STATUSCODE_GOOD;
-}
-
-void
-Subscription_unregisterPublishCallback(UA_Server *server, UA_Subscription *sub) {
-    UA_LOG_DEBUG_SESSION(&server->config.logger, sub->session, "Subscription %u | "
-                         "Unregister subscription publishing callback", sub->subscriptionId);
-
-    if(!sub->publishCallbackIsRegistered)
-        return;
-
-    UA_Server_removeRepeatedCallback(server, sub->publishCallbackId);
-    sub->publishCallbackIsRegistered = false;
-}
-
-/* When the session has publish requests stored but the last subscription is
- * deleted... Send out empty responses */
-void
-UA_Subscription_answerPublishRequestsNoSubscription(UA_Server *server, UA_Session *session) {
-    /* No session or there are remaining subscriptions */
-    if(!session || LIST_FIRST(&session->serverSubscriptions))
-        return;
-
-    /* Send a response for every queued request */
-    UA_PublishResponseEntry *pre;
-    while((pre = UA_Session_dequeuePublishReq(session))) {
-        UA_PublishResponse *response = &pre->response;
-        response->responseHeader.serviceResult = UA_STATUSCODE_BADNOSUBSCRIPTION;
-        response->responseHeader.timestamp = UA_DateTime_now();
-        UA_SecureChannel_sendSymmetricMessage(session->header.channel, pre->requestId, UA_MESSAGETYPE_MSG,
-                                              response, &UA_TYPES[UA_TYPES_PUBLISHRESPONSE]);
-        UA_PublishResponse_deleteMembers(response);
-        UA_free(pre);
-    }
-}
-
-#endif /* UA_ENABLE_SUBSCRIPTIONS */
diff --git a/ext/open62541/src/server/ua_subscription.h b/ext/open62541/src/server/ua_subscription.h
deleted file mode 100644
index 2efb336..0000000
--- a/ext/open62541/src/server/ua_subscription.h
+++ /dev/null
@@ -1,244 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2015-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Florian Palm
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Mattias Bornhager
- */
-
-#ifndef UA_SUBSCRIPTION_H_
-#define UA_SUBSCRIPTION_H_
-
-#include <open62541/types.h>
-#include <open62541/types_generated.h>
-#include <open62541/plugin/nodestore.h>
-
-#include "ua_session.h"
-#include "ua_util_internal.h"
-#include "ua_workqueue.h"
-
-_UA_BEGIN_DECLS
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-
-#define UA_BOUNDEDVALUE_SETWBOUNDS(BOUNDS, SRC, DST) { \
-        if(SRC > BOUNDS.max) DST = BOUNDS.max;         \
-        else if(SRC < BOUNDS.min) DST = BOUNDS.min;    \
-        else DST = SRC;                                \
-    }
-
-/* Set to the TAILQ_NEXT pointer of a notification, the sentinel that the
- * notification was not added to the global queue */
-#define UA_SUBSCRIPTION_QUEUE_SENTINEL ((UA_Notification*)0x01)
-
-/**
- * MonitoredItems create Notifications. Subscriptions collect Notifications from
- * (several) MonitoredItems and publish them to the client.
- *
- * Notifications are put into two queues at the same time. One for the
- * MonitoredItem that generated the notification. Here we can remove it if the
- * space reserved for the MonitoredItem runs full. The second queue is the
- * "global" queue for all Notifications generated in a Subscription. For
- * publication, the notifications are taken out of the "global" queue in the
- * order of their creation.
- */
-
-/*****************/
-/* MonitoredItem */
-/*****************/
-
-struct UA_MonitoredItem;
-typedef struct UA_MonitoredItem UA_MonitoredItem;
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-typedef struct UA_EventNotification {
-    UA_EventFieldList fields;
-    /* EventFilterResult currently isn't being used
-    UA_EventFilterResult result; */
-} UA_EventNotification;
-#endif
-
-typedef struct UA_Notification {
-    TAILQ_ENTRY(UA_Notification) listEntry; /* Notification list for the MonitoredItem */
-    TAILQ_ENTRY(UA_Notification) globalEntry; /* Notification list for the Subscription */
-
-    UA_MonitoredItem *mon;
-
-    /* See the monitoredItemType of the MonitoredItem */
-    union {
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-        UA_EventNotification event;
-#endif
-        UA_DataValue value;
-    } data;
-} UA_Notification;
-
-/* Ensure enough space is available; Add notification to the linked lists;
- * Increase the counters */
-void UA_Notification_enqueue(UA_Server *server, UA_Subscription *sub,
-                             UA_MonitoredItem *mon, UA_Notification *n);
-
-/* Remove the notification from the MonitoredItem's queue and the Subscriptions
- * global queue. Reduce the respective counters. */
-void UA_Notification_dequeue(UA_Server *server, UA_Notification *n);
-
-/* Delete the notification. Must be dequeued first. */
-void UA_Notification_delete(UA_Notification *n);
-
-typedef TAILQ_HEAD(NotificationQueue, UA_Notification) NotificationQueue;
-
-struct UA_MonitoredItem {
-    UA_DelayedCallback delayedFreePointers;
-    LIST_ENTRY(UA_MonitoredItem) listEntry;
-    UA_Subscription *subscription; /* Local MonitoredItem if the subscription is NULL */
-    UA_UInt32 monitoredItemId;
-    UA_UInt32 clientHandle;
-    UA_Boolean registered; /* Was the MonitoredItem registered in Userland with
-                              the callback? */
-
-    /* Settings */
-    UA_TimestampsToReturn timestampsToReturn;
-    UA_MonitoringMode monitoringMode;
-    UA_NodeId monitoredNodeId;
-    UA_UInt32 attributeId;
-    UA_String indexRange;
-    UA_Double samplingInterval; // [ms]
-    UA_Boolean discardOldest;
-    union {
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-        UA_EventFilter eventFilter; /* If attributeId == UA_ATTRIBUTEID_EVENTNOTIFIER */
-#endif
-        UA_DataChangeFilter dataChangeFilter;
-    } filter;
-    UA_Variant lastValue;
-    // TODO: dataEncoding is hardcoded to UA binary
-
-    /* Sample Callback */
-    UA_UInt64 sampleCallbackId;
-    UA_ByteString lastSampledValue;
-    UA_Boolean sampleCallbackIsRegistered;
-
-    /* Notification Queue */
-    NotificationQueue queue;
-    UA_UInt32 maxQueueSize; /* The max number of enqueued notifications (not
-                             * counting overflow events) */
-    UA_UInt32 queueSize;
-    UA_UInt32 eventOverflows; /* Separate counter for the queue. Can at most
-                               * double the queue size */
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-    UA_MonitoredItem *next;
-#endif
-
-#ifdef UA_ENABLE_DA
-    UA_StatusCode lastStatus;
-#endif
-};
-
-void UA_MonitoredItem_init(UA_MonitoredItem *mon, UA_Subscription *sub);
-void UA_MonitoredItem_delete(UA_Server *server, UA_MonitoredItem *monitoredItem);
-void UA_MonitoredItem_sampleCallback(UA_Server *server, UA_MonitoredItem *monitoredItem);
-UA_StatusCode UA_MonitoredItem_registerSampleCallback(UA_Server *server, UA_MonitoredItem *mon);
-void UA_MonitoredItem_unregisterSampleCallback(UA_Server *server, UA_MonitoredItem *mon);
-
-/* Remove entries until mon->maxQueueSize is reached. Sets infobits for lost
- * data if required. */
-UA_StatusCode UA_MonitoredItem_ensureQueueSpace(UA_Server *server, UA_MonitoredItem *mon);
-
-UA_StatusCode UA_MonitoredItem_removeNodeEventCallback(UA_Server *server, UA_Session *session,
-                                                       UA_Node *node, void *data);
-
-/****************/
-/* Subscription */
-/****************/
-
-typedef struct UA_NotificationMessageEntry {
-    TAILQ_ENTRY(UA_NotificationMessageEntry) listEntry;
-    UA_NotificationMessage message;
-} UA_NotificationMessageEntry;
-
-/* We use only a subset of the states defined in the standard */
-typedef enum {
-    /* UA_SUBSCRIPTIONSTATE_CLOSED */
-    /* UA_SUBSCRIPTIONSTATE_CREATING */
-    UA_SUBSCRIPTIONSTATE_NORMAL,
-    UA_SUBSCRIPTIONSTATE_LATE,
-    UA_SUBSCRIPTIONSTATE_KEEPALIVE
-} UA_SubscriptionState;
-
-typedef TAILQ_HEAD(ListOfNotificationMessages, UA_NotificationMessageEntry) ListOfNotificationMessages;
-
-struct UA_Subscription {
-    UA_DelayedCallback delayedFreePointers;
-    LIST_ENTRY(UA_Subscription) listEntry;
-    UA_Session *session;
-    UA_UInt32 subscriptionId;
-
-    /* Settings */
-    UA_UInt32 lifeTimeCount;
-    UA_UInt32 maxKeepAliveCount;
-    UA_Double publishingInterval; /* in ms */
-    UA_UInt32 notificationsPerPublish;
-    UA_Boolean publishingEnabled;
-    UA_UInt32 priority;
-
-    /* Runtime information */
-    UA_SubscriptionState state;
-    UA_UInt32 nextSequenceNumber;
-    UA_UInt32 currentKeepAliveCount;
-    UA_UInt32 currentLifetimeCount;
-
-    /* Publish Callback */
-    UA_UInt64 publishCallbackId;
-    UA_Boolean publishCallbackIsRegistered;
-
-    /* MonitoredItems */
-    UA_UInt32 lastMonitoredItemId; /* increase the identifiers */
-    LIST_HEAD(, UA_MonitoredItem) monitoredItems;
-    UA_UInt32 monitoredItemsSize;
-
-    /* Global list of notifications from the MonitoredItems */
-    NotificationQueue notificationQueue;
-    UA_UInt32 notificationQueueSize; /* Total queue size */
-    UA_UInt32 dataChangeNotifications;
-    UA_UInt32 eventNotifications;
-    UA_UInt32 statusChangeNotifications;
-
-    /* Notifications to be sent out now (already late). In a regular publish
-     * callback, all queued notifications are sent out. In a late publish
-     * response, only the notifications left from the last regular publish
-     * callback are sent. */
-    UA_UInt32 readyNotifications;
-
-    /* Retransmission Queue */
-    ListOfNotificationMessages retransmissionQueue;
-    size_t retransmissionQueueSize;
-};
-
-UA_Subscription * UA_Subscription_new(UA_Session *session, UA_UInt32 subscriptionId);
-void UA_Subscription_deleteMembers(UA_Server *server, UA_Subscription *sub);
-UA_StatusCode Subscription_registerPublishCallback(UA_Server *server, UA_Subscription *sub);
-void Subscription_unregisterPublishCallback(UA_Server *server, UA_Subscription *sub);
-void UA_Subscription_addMonitoredItem(UA_Server *server, UA_Subscription *sub, UA_MonitoredItem *newMon);
-UA_MonitoredItem * UA_Subscription_getMonitoredItem(UA_Subscription *sub, UA_UInt32 monitoredItemId);
-
-UA_StatusCode
-UA_Subscription_deleteMonitoredItem(UA_Server *server, UA_Subscription *sub,
-                                    UA_UInt32 monitoredItemId);
-
-void UA_Subscription_publish(UA_Server *server, UA_Subscription *sub);
-UA_StatusCode UA_Subscription_removeRetransmissionMessage(UA_Subscription *sub,
-                                                          UA_UInt32 sequenceNumber);
-void UA_Subscription_answerPublishRequestsNoSubscription(UA_Server *server, UA_Session *session);
-UA_Boolean UA_Subscription_reachedPublishReqLimit(UA_Server *server,  UA_Session *session);
-
-#endif /* UA_ENABLE_SUBSCRIPTIONS */
-
-_UA_END_DECLS
-
-#endif /* UA_SUBSCRIPTION_H_ */
diff --git a/ext/open62541/src/server/ua_subscription_datachange.c b/ext/open62541/src/server/ua_subscription_datachange.c
deleted file mode 100644
index 08c5a9f..0000000
--- a/ext/open62541/src/server/ua_subscription_datachange.c
+++ /dev/null
@@ -1,379 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2018 (c) Ari Breitkreuz, fortiss GmbH
- *    Copyright 2018 (c) Thomas Stalder, Blue Time Concept SA
- *    Copyright 2018 (c) Fabian Arndt, Root-Core
- */
-
-#include "ua_server_internal.h"
-#include "ua_subscription.h"
-#include "ua_types_encoding_binary.h"
-
-#ifdef UA_ENABLE_DA
-#include <math.h> // fabs
-#endif
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS /* conditional compilation */
-
-#define UA_VALUENCODING_MAXSTACK 512
-
-#define ABS_SUBTRACT_TYPE_INDEPENDENT(a,b) ((a)>(b)?(a)-(b):(b)-(a))
-
-static UA_Boolean
-outOfDeadBand(const void *data1, const void *data2,
-              const UA_DataType *type, const UA_Double deadbandValue) {
-    if(type == &UA_TYPES[UA_TYPES_BOOLEAN]) {
-        if(ABS_SUBTRACT_TYPE_INDEPENDENT(*(const UA_Boolean*)data1, *(const UA_Boolean*)data2) <= deadbandValue)
-            return false;
-    } else if(type == &UA_TYPES[UA_TYPES_SBYTE]) {
-        if(ABS_SUBTRACT_TYPE_INDEPENDENT(*(const UA_SByte*)data1, *(const UA_SByte*)data2) <= deadbandValue)
-            return false;
-    } else if(type == &UA_TYPES[UA_TYPES_BYTE]) {
-        if(ABS_SUBTRACT_TYPE_INDEPENDENT(*(const UA_Byte*)data1, *(const UA_Byte*)data2) <= deadbandValue)
-                return false;
-    } else if(type == &UA_TYPES[UA_TYPES_INT16]) {
-        if(ABS_SUBTRACT_TYPE_INDEPENDENT(*(const UA_Int16*)data1, *(const UA_Int16*)data2) <= deadbandValue)
-            return false;
-    } else if(type == &UA_TYPES[UA_TYPES_UINT16]) {
-        if(ABS_SUBTRACT_TYPE_INDEPENDENT(*(const UA_UInt16*)data1, *(const UA_UInt16*)data2) <= deadbandValue)
-            return false;
-    } else if(type == &UA_TYPES[UA_TYPES_INT32]) {
-        if(ABS_SUBTRACT_TYPE_INDEPENDENT(*(const UA_Int32*)data1, *(const UA_Int32*)data2) <= deadbandValue)
-            return false;
-    } else if(type == &UA_TYPES[UA_TYPES_UINT32]) {
-        if(ABS_SUBTRACT_TYPE_INDEPENDENT(*(const UA_UInt32*)data1, *(const UA_UInt32*)data2) <= deadbandValue)
-            return false;
-    } else if(type == &UA_TYPES[UA_TYPES_INT64]) {
-        if(ABS_SUBTRACT_TYPE_INDEPENDENT(*(const UA_Int64*)data1, *(const UA_Int64*)data2) <= deadbandValue)
-            return false;
-    } else if(type == &UA_TYPES[UA_TYPES_UINT64]) {
-        if(ABS_SUBTRACT_TYPE_INDEPENDENT(*(const UA_UInt64*)data1, *(const UA_UInt64*)data2) <= deadbandValue)
-            return false;
-    } else if(type == &UA_TYPES[UA_TYPES_FLOAT]) {
-        if(ABS_SUBTRACT_TYPE_INDEPENDENT(*(const UA_Float*)data1, *(const UA_Float*)data2) <= deadbandValue)
-            return false;
-    } else if(type == &UA_TYPES[UA_TYPES_DOUBLE]) {
-        if(ABS_SUBTRACT_TYPE_INDEPENDENT(*(const UA_Double*)data1, *(const UA_Double*)data2) <= deadbandValue)
-            return false;
-    }
-    return true;
-}
-
-static UA_INLINE UA_Boolean
-updateNeededForFilteredValue(const UA_Variant *value, const UA_Variant *oldValue,
-                             const UA_Double deadbandValue) {
-    if(value->arrayLength != oldValue->arrayLength)
-        return true;
-
-    if(value->type != oldValue->type)
-        return true;
-
-    size_t length = 1;
-    if(!UA_Variant_isScalar(value))
-        length = value->arrayLength;
-    uintptr_t data = (uintptr_t)value->data;
-    for(size_t i = 0; i < length; ++i) {
-        if(outOfDeadBand((const void*)data, oldValue->data, value->type, deadbandValue))
-            return true;
-        data += value->type->memSize;
-    }
-
-    return false;
-}
-
-#ifdef UA_ENABLE_DA
-static UA_Boolean
-updateNeededForStatusCode(const UA_DataValue *value, const UA_MonitoredItem *mon) {
-    if(UA_Variant_isScalar(&value->value) && value->status != mon->lastStatus)
-        return true;
-    return false;
-}
-#endif
-
-
-/* When a change is detected, encoding contains the heap-allocated binary
- * encoded value. The default for changed is false. */
-static UA_StatusCode
-detectValueChangeWithFilter(UA_Server *server, UA_Session *session, UA_MonitoredItem *mon,
-                            UA_DataValue *value, UA_ByteString *encoding, UA_Boolean *changed) {
-    if(UA_DataType_isNumeric(value->value.type) &&
-       (mon->filter.dataChangeFilter.trigger == UA_DATACHANGETRIGGER_STATUSVALUE ||
-        mon->filter.dataChangeFilter.trigger == UA_DATACHANGETRIGGER_STATUSVALUETIMESTAMP)) {
-        if(mon->filter.dataChangeFilter.deadbandType == UA_DEADBANDTYPE_ABSOLUTE) {
-            if(!updateNeededForFilteredValue(&value->value, &mon->lastValue,
-                                             mon->filter.dataChangeFilter.deadbandValue))
-                return UA_STATUSCODE_GOOD;
-        }
-#ifdef UA_ENABLE_DA
-        else if(mon->filter.dataChangeFilter.deadbandType == UA_DEADBANDTYPE_PERCENT) {
-            /* Browse for the percent range */
-            UA_QualifiedName qn = UA_QUALIFIEDNAME(0, "EURange");
-            UA_BrowsePathResult bpr = browseSimplifiedBrowsePath(server, mon->monitoredNodeId, 1, &qn);
-            if(bpr.statusCode != UA_STATUSCODE_GOOD || bpr.targetsSize < 1) {
-                  UA_BrowsePathResult_deleteMembers(&bpr);
-                  return UA_STATUSCODE_GOOD;
-            }
-
-            /* Read the range */
-            UA_ReadValueId rvi;
-            UA_ReadValueId_init(&rvi);
-            rvi.nodeId = bpr.targets->targetId.nodeId;
-            rvi.attributeId = UA_ATTRIBUTEID_VALUE;
-            UA_DataValue rangeVal = UA_Server_readWithSession(server, session, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-            if(!UA_Variant_isScalar(&rangeVal.value) || rangeVal.value.type != &UA_TYPES[UA_TYPES_RANGE]) {
-                UA_DataValue_clear(&rangeVal);
-                return UA_STATUSCODE_GOOD;
-            }
-
-            /* Compute the max change */
-            UA_Range* euRange = (UA_Range*)rangeVal.value.data;
-            UA_Double maxDist = (mon->filter.dataChangeFilter.deadbandValue/100.0) * (euRange->high - euRange->low);
-            UA_DataValue_clear(&rangeVal);
-
-            /* Relevant change? */
-            if(!updateNeededForFilteredValue(&value->value, &mon->lastValue, maxDist) &&
-               !updateNeededForStatusCode(value, mon))
-                return UA_STATUSCODE_GOOD;
-        }
-#endif
-    }
-
-    /* Stack-allocate some memory for the value encoding. We might heap-allocate
-     * more memory if needed. This is just enough for scalars and small
-     * structures. */
-    UA_STACKARRAY(UA_Byte, stackValueEncoding, UA_VALUENCODING_MAXSTACK);
-    UA_ByteString valueEncoding;
-    valueEncoding.data = stackValueEncoding;
-    valueEncoding.length = UA_VALUENCODING_MAXSTACK;
-
-    /* Encode the value */
-    UA_Byte *bufPos = valueEncoding.data;
-    const UA_Byte *bufEnd = &valueEncoding.data[valueEncoding.length];
-    UA_StatusCode retval = UA_encodeBinary(value, &UA_TYPES[UA_TYPES_DATAVALUE],
-                                           &bufPos, &bufEnd, NULL, NULL);
-    if(retval == UA_STATUSCODE_BADENCODINGERROR) {
-        size_t binsize = UA_calcSizeBinary(value, &UA_TYPES[UA_TYPES_DATAVALUE]);
-        if(binsize == 0)
-            return UA_STATUSCODE_BADENCODINGERROR;
-
-        if(binsize > UA_VALUENCODING_MAXSTACK) {
-            retval = UA_ByteString_allocBuffer(&valueEncoding, binsize);
-            if(retval == UA_STATUSCODE_GOOD) {
-                bufPos = valueEncoding.data;
-                bufEnd = &valueEncoding.data[valueEncoding.length];
-                retval = UA_encodeBinary(value, &UA_TYPES[UA_TYPES_DATAVALUE],
-                                         &bufPos, &bufEnd, NULL, NULL);
-            }
-        }
-    }
-    if(retval != UA_STATUSCODE_GOOD) {
-        if(valueEncoding.data != stackValueEncoding)
-            UA_ByteString_deleteMembers(&valueEncoding);
-        return retval;
-    }
-
-    /* Has the value changed? */
-    valueEncoding.length = (uintptr_t)bufPos - (uintptr_t)valueEncoding.data;
-    *changed = (!mon->lastSampledValue.data ||
-                !UA_String_equal(&valueEncoding, &mon->lastSampledValue));
-
-    /* No change */
-    if(!(*changed)) {
-        if(valueEncoding.data != stackValueEncoding)
-            UA_ByteString_deleteMembers(&valueEncoding);
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* Change detected. Copy encoding on the heap if necessary. */
-    if(valueEncoding.data == stackValueEncoding)
-        return UA_ByteString_copy(&valueEncoding, encoding);
-
-    *encoding = valueEncoding;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Has this sample changed from the last one? The method may allocate additional
- * space for the encoding buffer. Detect the change in encoding->data. */
-static UA_StatusCode
-    detectValueChange(UA_Server *server, UA_Session *session, UA_MonitoredItem *mon,
-                  UA_DataValue value, UA_ByteString *encoding, UA_Boolean *changed) {
-    UA_LOCK_ASSERT(server->serviceMutex, 1);
-
-    /* Apply Filter */
-    if(mon->filter.dataChangeFilter.trigger == UA_DATACHANGETRIGGER_STATUS)
-        value.hasValue = false;
-
-    value.hasServerTimestamp = false;
-    value.hasServerPicoseconds = false;
-    if(mon->filter.dataChangeFilter.trigger < UA_DATACHANGETRIGGER_STATUSVALUETIMESTAMP) {
-        value.hasSourceTimestamp = false;
-        value.hasSourcePicoseconds = false;
-    }
-
-    /* Detect the value change */
-    return detectValueChangeWithFilter(server, session, mon, &value, encoding, changed);
-}
-
-/* movedValue returns whether the sample was moved to the notification. The
- * default is false. */
-static UA_StatusCode
-sampleCallbackWithValue(UA_Server *server, UA_Session *session,
-                        UA_Subscription *sub, UA_MonitoredItem *mon,
-                        UA_DataValue *value, UA_Boolean *movedValue) {
-    UA_assert(mon->attributeId != UA_ATTRIBUTEID_EVENTNOTIFIER);
-
-    /* Contains heap-allocated binary encoding of the value if a change was detected */
-    UA_ByteString binValueEncoding = UA_BYTESTRING_NULL;
-
-    /* Has the value changed? Allocates memory in binValueEncoding if necessary.
-     * value is edited internally so we make a shallow copy. */
-    UA_Boolean changed = false;
-    UA_StatusCode retval = detectValueChange(server, session, mon, *value, &binValueEncoding, &changed);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_WARNING_SESSION(&server->config.logger, session, "Subscription %u | "
-                               "MonitoredItem %i | Value change detection failed with StatusCode %s",
-                               sub ? sub->subscriptionId : 0, mon->monitoredItemId,
-                               UA_StatusCode_name(retval));
-        return retval;
-    }
-    if(!changed) {
-        UA_LOG_DEBUG_SESSION(&server->config.logger, session, "Subscription %u | "
-                             "MonitoredItem %i | The value has not changed",
-                             sub ? sub->subscriptionId : 0, mon->monitoredItemId);
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* The MonitoredItem is attached to a subscription (not server-local).
-     * Prepare a notification and enqueue it. */
-    if(sub) {
-        /* Allocate a new notification */
-        UA_Notification *newNotification = (UA_Notification *)UA_malloc(sizeof(UA_Notification));
-        if(!newNotification) {
-            UA_ByteString_deleteMembers(&binValueEncoding);
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-
-        if(value->value.storageType == UA_VARIANT_DATA) {
-            newNotification->data.value = *value; /* Move the value to the notification */
-            *movedValue = true;
-        } else { /* => (value->value.storageType == UA_VARIANT_DATA_NODELETE) */
-            retval = UA_DataValue_copy(value, &newNotification->data.value);
-            if(retval != UA_STATUSCODE_GOOD) {
-                UA_ByteString_deleteMembers(&binValueEncoding);
-                UA_free(newNotification);
-                return retval;
-            }
-        }
-
-        /* <-- Point of no return --> */
-
-        UA_LOG_DEBUG_SESSION(&server->config.logger, session, "Subscription %u | "
-                             "MonitoredItem %i | Enqueue a new notification",
-                             sub ? sub->subscriptionId : 0, mon->monitoredItemId);
-
-        newNotification->mon = mon;
-        UA_Notification_enqueue(server, sub, mon, newNotification);
-    }
-
-    /* Store the encoding for comparison */
-    UA_ByteString_deleteMembers(&mon->lastSampledValue);
-    mon->lastSampledValue = binValueEncoding;
-
-    /* Store the value for filter comparison (we don't want to decode
-     * lastSampledValue in every iteration). Don't test the return code here. If
-     * this fails, lastValue is empty and a notification will be forced for the
-     * next deadband comparison. */
-    if((mon->filter.dataChangeFilter.deadbandType == UA_DEADBANDTYPE_NONE ||
-        mon->filter.dataChangeFilter.deadbandType == UA_DEADBANDTYPE_ABSOLUTE ||
-        mon->filter.dataChangeFilter.deadbandType == UA_DEADBANDTYPE_PERCENT) &&
-       (mon->filter.dataChangeFilter.trigger == UA_DATACHANGETRIGGER_STATUS ||
-        mon->filter.dataChangeFilter.trigger == UA_DATACHANGETRIGGER_STATUSVALUE ||
-        mon->filter.dataChangeFilter.trigger == UA_DATACHANGETRIGGER_STATUSVALUETIMESTAMP)) {
-        UA_Variant_deleteMembers(&mon->lastValue);
-        UA_Variant_copy(&value->value, &mon->lastValue);
-#ifdef UA_ENABLE_DA
-        UA_StatusCode_deleteMembers(&mon->lastStatus);
-        UA_StatusCode_copy(&value->status, &mon->lastStatus);
-#endif
-    }
-
-    /* Call the local callback if the MonitoredItem is not attached to a
-     * subscription. Do this at the very end. Because the callback might delete
-     * the subscription. */
-    if(!sub) {
-        UA_LocalMonitoredItem *localMon = (UA_LocalMonitoredItem*) mon;
-        void *nodeContext = NULL;
-        UA_Server_getNodeContext(server, mon->monitoredNodeId, &nodeContext);
-        UA_UNLOCK(server->serviceMutex);
-        localMon->callback.dataChangeCallback(server, mon->monitoredItemId,
-                                              localMon->context,
-                                              &mon->monitoredNodeId,
-                                              nodeContext, mon->attributeId,
-                                              value);
-        UA_LOCK(server->serviceMutex);
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-void
-UA_MonitoredItem_sampleCallback(UA_Server *server, UA_MonitoredItem *monitoredItem)
-{
-    UA_LOCK(server->serviceMutex);
-    monitoredItem_sampleCallback(server, monitoredItem);
-    UA_UNLOCK(server->serviceMutex)
-}
-
-void
-monitoredItem_sampleCallback(UA_Server *server, UA_MonitoredItem *monitoredItem) {
-    UA_Subscription *sub = monitoredItem->subscription;
-    UA_Session *session = &server->adminSession;
-    if(sub)
-        session = sub->session;
-
-    UA_LOG_DEBUG_SESSION(&server->config.logger, session, "Subscription %u | "
-                         "MonitoredItem %i | Sample callback called",
-                         sub ? sub->subscriptionId : 0, monitoredItem->monitoredItemId);
-
-    UA_assert(monitoredItem->attributeId != UA_ATTRIBUTEID_EVENTNOTIFIER);
-
-    /* Get the node */
-    const UA_Node *node = UA_Nodestore_getNode(server->nsCtx, &monitoredItem->monitoredNodeId);
-
-    /* Sample the value. The sample can still point into the node. */
-    UA_DataValue value;
-    UA_DataValue_init(&value);
-    if(node) {
-        UA_ReadValueId rvid;
-        UA_ReadValueId_init(&rvid);
-        rvid.nodeId = monitoredItem->monitoredNodeId;
-        rvid.attributeId = monitoredItem->attributeId;
-        rvid.indexRange = monitoredItem->indexRange;
-        ReadWithNode(node, server, session, monitoredItem->timestampsToReturn, &rvid, &value);
-    } else {
-        value.hasStatus = true;
-        value.status = UA_STATUSCODE_BADNODEIDUNKNOWN;
-    }
-
-    /* Operate on the sample */
-    UA_Boolean movedValue = false;
-    UA_StatusCode retval = sampleCallbackWithValue(server, session, sub, monitoredItem, &value, &movedValue);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_WARNING_SESSION(&server->config.logger, session, "Subscription %u | "
-                               "MonitoredItem %i | Sampling returned the statuscode %s",
-                               sub ? sub->subscriptionId : 0, monitoredItem->monitoredItemId,
-                               UA_StatusCode_name(retval));
-    }
-
-    /* Delete the sample if it was not moved to the notification. */
-    if(!movedValue)
-        UA_DataValue_deleteMembers(&value); /* Does nothing for UA_VARIANT_DATA_NODELETE */
-    if(node)
-        UA_Nodestore_releaseNode(server->nsCtx, node);
-}
-
-#endif /* UA_ENABLE_SUBSCRIPTIONS */
diff --git a/ext/open62541/src/server/ua_subscription_events.c b/ext/open62541/src/server/ua_subscription_events.c
deleted file mode 100644
index 24911eb..0000000
--- a/ext/open62541/src/server/ua_subscription_events.c
+++ /dev/null
@@ -1,466 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) Ari Breitkreuz, fortiss GmbH
- */
-
-#include "ua_server_internal.h"
-#include "ua_subscription.h"
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-
-UA_StatusCode
-UA_MonitoredItem_removeNodeEventCallback(UA_Server *server, UA_Session *session,
-                                         UA_Node *node, void *data) {
-    UA_assert(node->nodeClass == UA_NODECLASS_OBJECT);
-    UA_ObjectNode *on = (UA_ObjectNode*)node;
-    UA_MonitoredItem *remove = (UA_MonitoredItem*)data;
-
-    if(!on->monitoredItemQueue)
-        return UA_STATUSCODE_GOOD;
-
-    /* Edge case that it's the first element */
-    if(on->monitoredItemQueue == remove) {
-        on->monitoredItemQueue = remove->next;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    UA_MonitoredItem *prev = on->monitoredItemQueue;
-    UA_MonitoredItem *entry = prev->next;
-    for(; entry != NULL; prev = entry, entry = entry->next) {
-        if(entry == remove) {
-            prev->next = entry->next;
-            return UA_STATUSCODE_GOOD;
-        }
-    }
-
-    return UA_STATUSCODE_BADNOTFOUND;
-}
-
-/* We use a 16-Byte ByteString as an identifier */
-static UA_StatusCode
-generateEventId(UA_ByteString *generatedId) {
-    generatedId->data = (UA_Byte *) UA_malloc(16 * sizeof(UA_Byte));
-    if(!generatedId->data)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    generatedId->length = 16;
-
-    UA_UInt32 *ids = (UA_UInt32*)generatedId->data;
-    ids[0] = UA_UInt32_random();
-    ids[1] = UA_UInt32_random();
-    ids[2] = UA_UInt32_random();
-    ids[3] = UA_UInt32_random();
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_Server_createEvent(UA_Server *server, const UA_NodeId eventType,
-                      UA_NodeId *outNodeId) {
-    UA_LOCK(server->serviceMutex);
-    if(!outNodeId) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_USERLAND,
-                     "outNodeId must not be NULL. The event's NodeId must be returned "
-                     "so it can be triggered.");
-        UA_UNLOCK(server->serviceMutex);
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-
-    /* Make sure the eventType is a subtype of BaseEventType */
-    UA_NodeId hasSubtypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE);
-    UA_NodeId baseEventTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEEVENTTYPE);
-    if(!isNodeInTree(server->nsCtx, &eventType, &baseEventTypeId, &hasSubtypeId, 1)) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_USERLAND,
-                     "Event type must be a subtype of BaseEventType!");
-        UA_UNLOCK(server->serviceMutex);
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-
-    /* Create an ObjectNode which represents the event */
-    UA_QualifiedName name;
-    // set a dummy name. This is not used.
-    name = UA_QUALIFIEDNAME(0,"E");
-    UA_NodeId newNodeId = UA_NODEID_NULL;
-    UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-    UA_StatusCode retval = addNode(server, UA_NODECLASS_OBJECT,
-                                   &UA_NODEID_NULL, /* Set a random unused NodeId */
-                                   &UA_NODEID_NULL, /* No parent */
-                                   &UA_NODEID_NULL, /* No parent reference */
-                                   name,            /* an event does not have a name */
-                                   &eventType,      /* the type of the event */
-                                   (const UA_NodeAttributes*)&oAttr, /* default attributes are fine */
-                                   &UA_TYPES[UA_TYPES_OBJECTATTRIBUTES],
-                                   NULL,           /* no node context */
-                                   &newNodeId);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_USERLAND,
-                     "Adding event failed. StatusCode %s", UA_StatusCode_name(retval));
-        return retval;
-    }
-
-    /* Find the eventType variable */
-    name = UA_QUALIFIEDNAME(0, "EventType");
-    UA_BrowsePathResult bpr = browseSimplifiedBrowsePath(server, newNodeId, 1, &name);
-    if(bpr.statusCode != UA_STATUSCODE_GOOD || bpr.targetsSize < 1) {
-        retval = bpr.statusCode;
-        UA_BrowsePathResult_deleteMembers(&bpr);
-        deleteNode(server, newNodeId, true);
-        UA_NodeId_deleteMembers(&newNodeId);
-        UA_UNLOCK(server->serviceMutex);
-        return retval;
-    }
-
-    /* Set the EventType */
-    UA_Variant value;
-    UA_Variant_init(&value);
-    UA_Variant_setScalar(&value, (void*)(uintptr_t)&eventType, &UA_TYPES[UA_TYPES_NODEID]);
-    retval = writeWithWriteValue(server, &bpr.targets[0].targetId.nodeId, UA_ATTRIBUTEID_VALUE, &UA_TYPES[UA_TYPES_VARIANT], &value);
-    UA_BrowsePathResult_deleteMembers(&bpr);
-    if(retval != UA_STATUSCODE_GOOD) {
-        deleteNode(server, newNodeId, true);
-        UA_NodeId_deleteMembers(&newNodeId);
-        UA_UNLOCK(server->serviceMutex);
-        return retval;
-    }
-
-    *outNodeId = newNodeId;
-    UA_UNLOCK(server->serviceMutex);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_Boolean
-isValidEvent(UA_Server *server, const UA_NodeId *validEventParent,
-             const UA_NodeId *eventId) {
-    /* find the eventType variableNode */
-    UA_QualifiedName findName = UA_QUALIFIEDNAME(0, "EventType");
-    UA_BrowsePathResult bpr = browseSimplifiedBrowsePath(server, *eventId, 1, &findName);
-    if(bpr.statusCode != UA_STATUSCODE_GOOD || bpr.targetsSize < 1) {
-        UA_BrowsePathResult_deleteMembers(&bpr);
-        return false;
-    }
-    
-    /* Get the EventType Property Node */
-    UA_Variant tOutVariant;
-    UA_Variant_init(&tOutVariant);
-
-    /* Read the Value of EventType Property Node (the Value should be a NodeId) */
-    UA_StatusCode retval =
-            readWithReadValue(server, &bpr.targets[0].targetId.nodeId, UA_ATTRIBUTEID_VALUE, &tOutVariant);
-    if(retval != UA_STATUSCODE_GOOD ||
-       !UA_Variant_hasScalarType(&tOutVariant, &UA_TYPES[UA_TYPES_NODEID])) {
-        UA_BrowsePathResult_deleteMembers(&bpr);
-        return false;
-    }
-
-    const UA_NodeId *tEventType = (UA_NodeId*)tOutVariant.data;
-
-    /* Make sure the EventType is not a Subtype of CondtionType
-     * First check for filter set using UaExpert
-     * (ConditionId Clause won't be present in Events, which are not Conditions)
-     * Second check for Events which are Conditions or Alarms (Part 9 not supported yet) */
-    UA_NodeId conditionTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_CONDITIONTYPE);
-    UA_NodeId hasSubtypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE);
-    if(UA_NodeId_equal(validEventParent, &conditionTypeId) ||
-       isNodeInTree(server->nsCtx, tEventType, &conditionTypeId, &hasSubtypeId, 1)) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_USERLAND,
-                     "Alarms and Conditions are not supported yet!");
-        UA_BrowsePathResult_deleteMembers(&bpr);
-        UA_Variant_deleteMembers(&tOutVariant);
-        return false;
-    }
-
-    /* check whether Valid Event other than Conditions */
-    UA_NodeId baseEventTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEEVENTTYPE);
-    UA_Boolean isSubtypeOfBaseEvent = isNodeInTree(server->nsCtx, tEventType,
-                                                   &baseEventTypeId, &hasSubtypeId, 1);
-
-    UA_BrowsePathResult_deleteMembers(&bpr);
-    UA_Variant_deleteMembers(&tOutVariant);
-    return isSubtypeOfBaseEvent;
-}
-
-/* Part 4: 7.4.4.5 SimpleAttributeOperand
- * The clause can point to any attribute of nodes. Either a child of the event
- * node and also the event type. */
-static UA_StatusCode
-resolveSimpleAttributeOperand(UA_Server *server, UA_Session *session, const UA_NodeId *origin,
-                              const UA_SimpleAttributeOperand *sao, UA_Variant *value) {
-    /* Prepare the ReadValueId */
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.indexRange = sao->indexRange;
-    rvi.attributeId = sao->attributeId;
-
-    /* If this list (browsePath) is empty the Node is the instance of the
-     * TypeDefinition. */
-    if(sao->browsePathSize == 0) {
-        rvi.nodeId = sao->typeDefinitionId;
-        UA_DataValue v = UA_Server_readWithSession(server, session, &rvi,
-                                                   UA_TIMESTAMPSTORETURN_NEITHER);
-        if(v.status == UA_STATUSCODE_GOOD && v.hasValue)
-            *value = v.value;
-        return v.status;
-    }
-
-    /* Resolve the browse path */
-    UA_BrowsePathResult bpr =
-        browseSimplifiedBrowsePath(server, *origin, sao->browsePathSize,
-                                             sao->browsePath);
-    if(bpr.targetsSize == 0 && bpr.statusCode == UA_STATUSCODE_GOOD)
-        bpr.statusCode = UA_STATUSCODE_BADNOTFOUND;
-    if(bpr.statusCode != UA_STATUSCODE_GOOD) {
-        UA_StatusCode retval = bpr.statusCode;
-        UA_BrowsePathResult_deleteMembers(&bpr);
-        return retval;
-    }
-
-    /* Read the first matching element. Move the value to the output. */
-    rvi.nodeId = bpr.targets[0].targetId.nodeId;
-    UA_DataValue v = UA_Server_readWithSession(server, session, &rvi,
-                                               UA_TIMESTAMPSTORETURN_NEITHER);
-    if(v.status == UA_STATUSCODE_GOOD && v.hasValue)
-        *value = v.value;
-
-    UA_BrowsePathResult_deleteMembers(&bpr);
-    return v.status;
-}
-
-/* Filters the given event with the given filter and writes the results into a
- * notification */
-static UA_StatusCode
-UA_Server_filterEvent(UA_Server *server, UA_Session *session,
-                      const UA_NodeId *eventNode, UA_EventFilter *filter,
-                      UA_EventNotification *notification) {
-    if (filter->selectClausesSize == 0)
-        return UA_STATUSCODE_BADEVENTFILTERINVALID;
-
-    UA_EventFieldList_init(&notification->fields);
-    /* EventFilterResult isn't being used currently
-    UA_EventFilterResult_init(&notification->result); */
-
-    notification->fields.eventFields = (UA_Variant *)
-        UA_Array_new(filter->selectClausesSize, &UA_TYPES[UA_TYPES_VARIANT]);
-    if(!notification->fields.eventFields) {
-        /* EventFilterResult currently isn't being used
-        UA_EventFiterResult_deleteMembers(&notification->result); */
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-    notification->fields.eventFieldsSize = filter->selectClausesSize;
-
-    /* EventFilterResult currently isn't being used
-    notification->result.selectClauseResultsSize = filter->selectClausesSize;
-    notification->result.selectClauseResults = (UA_StatusCode *)
-        UA_Array_new(filter->selectClausesSize, &UA_TYPES[UA_TYPES_STATUSCODE]);
-    if(!notification->result->selectClauseResults) {
-        UA_EventFieldList_deleteMembers(&notification->fields);
-        UA_EventFilterResult_deleteMembers(&notification->result);
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-    */
-
-    /* Apply the filter */
-
-    /* Check if the browsePath is BaseEventType, in which case nothing more
-     * needs to be checked */
-    UA_NodeId baseEventTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEEVENTTYPE);
-    for(size_t i = 0; i < filter->selectClausesSize; i++) {
-        if(!UA_NodeId_equal(&filter->selectClauses[i].typeDefinitionId, &baseEventTypeId) &&
-           !isValidEvent(server, &filter->selectClauses[i].typeDefinitionId, eventNode)) {
-            UA_Variant_init(&notification->fields.eventFields[i]);
-            /* EventFilterResult currently isn't being used
-            notification->result.selectClauseResults[i] = UA_STATUSCODE_BADTYPEDEFINITIONINVALID; */
-            continue;
-        }
-
-        /* TODO: Put the result into the selectClausResults */
-        resolveSimpleAttributeOperand(server, session, eventNode,
-                                      &filter->selectClauses[i],
-                                      &notification->fields.eventFields[i]);
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-eventSetStandardFields(UA_Server *server, const UA_NodeId *event,
-                       const UA_NodeId *origin, UA_ByteString *outEventId) {
-    /* Set the SourceNode */
-    UA_StatusCode retval;
-    UA_QualifiedName name = UA_QUALIFIEDNAME(0, "SourceNode");
-    UA_BrowsePathResult bpr = browseSimplifiedBrowsePath(server, *event, 1, &name);
-    if(bpr.statusCode != UA_STATUSCODE_GOOD || bpr.targetsSize < 1) {
-        retval = bpr.statusCode;
-        UA_BrowsePathResult_deleteMembers(&bpr);
-        return retval;
-    }
-    UA_Variant value;
-    UA_Variant_init(&value);
-    UA_Variant_setScalarCopy(&value, origin, &UA_TYPES[UA_TYPES_NODEID]);
-    retval = writeWithWriteValue(server, &bpr.targets[0].targetId.nodeId, UA_ATTRIBUTEID_VALUE, &UA_TYPES[UA_TYPES_VARIANT], &value);
-    UA_Variant_deleteMembers(&value);
-    UA_BrowsePathResult_deleteMembers(&bpr);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Set the ReceiveTime */
-    name = UA_QUALIFIEDNAME(0, "ReceiveTime");
-    bpr = browseSimplifiedBrowsePath(server, *event, 1, &name);
-    if(bpr.statusCode != UA_STATUSCODE_GOOD || bpr.targetsSize < 1) {
-        retval = bpr.statusCode;
-        UA_BrowsePathResult_deleteMembers(&bpr);
-        return retval;
-    }
-    UA_DateTime rcvTime = UA_DateTime_now();
-    UA_Variant_setScalar(&value, &rcvTime, &UA_TYPES[UA_TYPES_DATETIME]);
-    retval = writeWithWriteValue(server, &bpr.targets[0].targetId.nodeId, UA_ATTRIBUTEID_VALUE, &UA_TYPES[UA_TYPES_VARIANT], &value);
-    UA_BrowsePathResult_deleteMembers(&bpr);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Set the EventId */
-    UA_ByteString eventId = UA_BYTESTRING_NULL;
-    retval = generateEventId(&eventId);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    name = UA_QUALIFIEDNAME(0, "EventId");
-    bpr = browseSimplifiedBrowsePath(server, *event, 1, &name);
-    if(bpr.statusCode != UA_STATUSCODE_GOOD || bpr.targetsSize < 1) {
-        retval = bpr.statusCode;
-        UA_ByteString_deleteMembers(&eventId);
-        UA_BrowsePathResult_deleteMembers(&bpr);
-        return retval;
-    }
-    UA_Variant_init(&value);
-    UA_Variant_setScalar(&value, &eventId, &UA_TYPES[UA_TYPES_BYTESTRING]);
-    retval = writeWithWriteValue(server, &bpr.targets[0].targetId.nodeId, UA_ATTRIBUTEID_VALUE, &UA_TYPES[UA_TYPES_VARIANT], &value);
-    UA_BrowsePathResult_deleteMembers(&bpr);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ByteString_deleteMembers(&eventId);
-        return retval;
-    }
-
-    /* Return the EventId */
-    if(outEventId)
-        *outEventId = eventId;
-    else
-        UA_ByteString_deleteMembers(&eventId);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Filters an event according to the filter specified by mon and then adds it to
- * mons notification queue */
-static UA_StatusCode
-UA_Event_addEventToMonitoredItem(UA_Server *server, const UA_NodeId *event,
-                                 UA_MonitoredItem *mon) {
-    UA_Notification *notification = (UA_Notification *) UA_malloc(sizeof(UA_Notification));
-    if(!notification)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    /* Get the session */
-    UA_Subscription *sub = mon->subscription;
-    UA_Session *session = sub->session;
-
-    /* Apply the filter */
-    UA_StatusCode retval = UA_Server_filterEvent(server, session, event,
-                                                 &mon->filter.eventFilter,
-                                                 &notification->data.event);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_free(notification);
-        return retval;
-    }
-
-    /* Enqueue the notification */
-    notification->mon = mon;
-    UA_Notification_enqueue(server, mon->subscription, mon, notification);
-    return UA_STATUSCODE_GOOD;
-}
-
-static const UA_NodeId objectsFolderId = {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_OBJECTSFOLDER}};
-static const UA_NodeId parentReferences_events[2] =
-    {{0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_ORGANIZES}},
-     {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_HASCOMPONENT}}};
-
-UA_StatusCode
-UA_Server_triggerEvent(UA_Server *server, const UA_NodeId eventNodeId, const UA_NodeId origin,
-                       UA_ByteString *outEventId, const UA_Boolean deleteEventNode) {
-    UA_LOCK(server->serviceMutex);
-    /* Check that the origin node exists */
-    const UA_Node *originNode = UA_Nodestore_getNode(server->nsCtx, &origin);
-    if(!originNode) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_USERLAND,
-                     "Origin node for event does not exist.");
-        UA_UNLOCK(server->serviceMutex);
-        return UA_STATUSCODE_BADNOTFOUND;
-    }
-    UA_Nodestore_releaseNode(server->nsCtx, originNode);
-
-    /* Make sure the origin is in the ObjectsFolder (TODO: or in the ViewsFolder) */
-    if(!isNodeInTree(server->nsCtx, &origin, &objectsFolderId,
-                     parentReferences_events, 2)) {
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_USERLAND,
-                     "Node for event must be in ObjectsFolder!");
-        UA_UNLOCK(server->serviceMutex);
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    }
-
-    UA_StatusCode retval = eventSetStandardFields(server, &eventNodeId, &origin, outEventId);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                       "Events: Could not set the standard event fields with StatusCode %s",
-                       UA_StatusCode_name(retval));
-        UA_UNLOCK(server->serviceMutex);
-        return retval;
-    }
-
-    /* Get the parents */
-    UA_ExpandedNodeId *parents = NULL;
-    size_t parentsSize = 0;
-    retval = browseRecursive(server, 1, &origin, 2, parentReferences_events,
-                             UA_BROWSEDIRECTION_INVERSE, true, &parentsSize, &parents);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                       "Events: Could not create the list of nodes listening on the "
-                       "event with StatusCode %s", UA_StatusCode_name(retval));
-        UA_UNLOCK(server->serviceMutex);
-        return retval;
-    }
-
-    /* Add the event to each node's monitored items */
-    for(size_t i = 0; i < parentsSize; i++) {
-        const UA_ObjectNode *node = (const UA_ObjectNode*)
-            UA_Nodestore_getNode(server->nsCtx, &parents[i].nodeId);
-        if(!node)
-            continue;
-        if(node->nodeClass != UA_NODECLASS_OBJECT) {
-            UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node*)node);
-            continue;
-        }
-        UA_MonitoredItem *monIter = node->monitoredItemQueue;
-        for(; monIter != NULL; monIter = monIter->next) {
-            retval = UA_Event_addEventToMonitoredItem(server, &eventNodeId, monIter);
-            if(retval != UA_STATUSCODE_GOOD)
-                UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                               "Events: Could not add the event to a listening node with StatusCode %s",
-                               UA_StatusCode_name(retval));
-        }
-        UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node*)node);
-    }
-    UA_Array_delete(parents, parentsSize, &UA_TYPES[UA_TYPES_NODEID]);
-
-    /* Delete the node representation of the event */
-    if(deleteEventNode) {
-        retval = deleteNode(server, eventNodeId, true);
-        if(retval != UA_STATUSCODE_GOOD) {
-            UA_LOG_WARNING(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                           "Attempt to remove event using deleteNode failed. StatusCode %s",
-                           UA_StatusCode_name(retval));
-            UA_UNLOCK(server->serviceMutex);
-            return retval;
-        }
-    }
-    UA_UNLOCK(server->serviceMutex);
-    return UA_STATUSCODE_GOOD;
-}
-
-#endif /* UA_ENABLE_SUBSCRIPTIONS_EVENTS */
diff --git a/ext/open62541/src/server/ua_subscription_monitoreditem.c b/ext/open62541/src/server/ua_subscription_monitoreditem.c
deleted file mode 100644
index 21ab945..0000000
--- a/ext/open62541/src/server/ua_subscription_monitoreditem.c
+++ /dev/null
@@ -1,370 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2017-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2018 (c) Ari Breitkreuz, fortiss GmbH
- *    Copyright 2018 (c) Thomas Stalder, Blue Time Concept SA
- *    Copyright 2018 (c) Fabian Arndt, Root-Core
- */
-
-#include "ua_server_internal.h"
-#include "ua_subscription.h"
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS /* conditional compilation */
-
-/****************/
-/* Notification */
-/****************/
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-
-static const UA_NodeId overflowEventType =
-    {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_EVENTQUEUEOVERFLOWEVENTTYPE}};
-static const UA_NodeId simpleOverflowEventType =
-    {0, UA_NODEIDTYPE_NUMERIC, {UA_NS0ID_SIMPLEOVERFLOWEVENTTYPE}};
-
-static UA_Boolean
-UA_Notification_isOverflowEvent(UA_Server *server, UA_Notification *n) {
-    UA_MonitoredItem *mon = n->mon;
-    if(mon->attributeId != UA_ATTRIBUTEID_EVENTNOTIFIER)
-        return false;
-
-    UA_EventFieldList *efl = &n->data.event.fields;
-    if(efl->eventFieldsSize >= 1 &&
-       efl->eventFields[0].type == &UA_TYPES[UA_TYPES_NODEID] &&
-       isNodeInTree(server->nsCtx, (const UA_NodeId *)efl->eventFields[0].data,
-                    &overflowEventType, &subtypeId, 1)) {
-        return true;
-    }
-
-    return false;
-}
-
-/* The specification states in Part 4 5.12.1.5 that an EventQueueOverflowEvent
- * "is generated when the first Event has to be discarded [...] without
- * discarding any other event". So only generate one for all deleted events. */
-static UA_StatusCode
-createEventOverflowNotification(UA_Server *server, UA_Subscription *sub,
-                                UA_MonitoredItem *mon, UA_Notification *indicator) {
-    /* Avoid two redundant overflow events in a row */
-    if(UA_Notification_isOverflowEvent(server, indicator))
-        return UA_STATUSCODE_GOOD;
-
-    /* A notification is inserted into the queue which includes only the
-     * NodeId of the overflowEventType. It is up to the client to check for
-     * possible overflows. */
-
-    /* Allocate the notification */
-    UA_Notification *overflowNotification = (UA_Notification *)
-        UA_malloc(sizeof(UA_Notification));
-    if(!overflowNotification)
-        return UA_STATUSCODE_BADOUTOFMEMORY;;
-
-    /* Set the notification fields */
-    overflowNotification->mon = mon;
-    UA_EventFieldList_init(&overflowNotification->data.event.fields);
-    overflowNotification->data.event.fields.eventFields = UA_Variant_new();
-    if(!overflowNotification->data.event.fields.eventFields) {
-        UA_free(overflowNotification);
-        return UA_STATUSCODE_BADOUTOFMEMORY;;
-    }
-    overflowNotification->data.event.fields.eventFieldsSize = 1;
-    UA_StatusCode retval =
-        UA_Variant_setScalarCopy(overflowNotification->data.event.fields.eventFields,
-                                 &simpleOverflowEventType, &UA_TYPES[UA_TYPES_NODEID]);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_EventFieldList_deleteMembers(&overflowNotification->data.event.fields);
-        UA_free(overflowNotification);
-        return retval;
-    }
-
-    /* Insert before the "indicator notification". This is either first in the
-     * queue (if the oldest notification was removed) or before the new event
-     * that remains the last element of the queue. */
-    TAILQ_INSERT_BEFORE(indicator, overflowNotification, listEntry);
-    ++mon->eventOverflows;
-    ++mon->queueSize;
-
-    TAILQ_NEXT(overflowNotification, globalEntry) = UA_SUBSCRIPTION_QUEUE_SENTINEL;
-    if(mon->monitoringMode == UA_MONITORINGMODE_REPORTING) {
-        TAILQ_INSERT_BEFORE(indicator, overflowNotification, globalEntry);
-        ++sub->notificationQueueSize;
-        ++sub->eventNotifications;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-#endif
-
-/* !!! The enqueue and dequeue operations need to match the reporting
- * disable/enable logic in Operation_SetMonitoringMode !!! */
-
-void
-UA_Notification_enqueue(UA_Server *server, UA_Subscription *sub,
-                        UA_MonitoredItem *mon, UA_Notification *n) {
-    /* Add to the MonitoredItem */
-    TAILQ_INSERT_TAIL(&mon->queue, n, listEntry);
-    ++mon->queueSize;
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-    if(mon->attributeId == UA_ATTRIBUTEID_EVENTNOTIFIER &&
-       UA_Notification_isOverflowEvent(server, n))
-        ++mon->eventOverflows;
-#endif
-
-    /* Add to the subscription if reporting is enabled */
-    TAILQ_NEXT(n, globalEntry) = UA_SUBSCRIPTION_QUEUE_SENTINEL;
-    if(mon->monitoringMode == UA_MONITORINGMODE_REPORTING) {
-        TAILQ_INSERT_TAIL(&sub->notificationQueue, n, globalEntry);
-        ++sub->notificationQueueSize;
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-        if(mon->attributeId == UA_ATTRIBUTEID_EVENTNOTIFIER) {
-            ++sub->eventNotifications;
-        } else
-#endif
-        {
-            ++sub->dataChangeNotifications;
-        }
-    }
-
-    /* Ensure enough space is available in the MonitoredItem. Do this only after
-     * adding the new Notification. */
-    UA_MonitoredItem_ensureQueueSpace(server, mon);
-}
-
-void
-UA_Notification_dequeue(UA_Server *server, UA_Notification *n) {
-    UA_MonitoredItem *mon = n->mon;
-    UA_Subscription *sub = mon->subscription;
-
-    /* Remove from the MonitoredItem queue */
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-    if(mon->attributeId == UA_ATTRIBUTEID_EVENTNOTIFIER &&
-       UA_Notification_isOverflowEvent(server, n))
-            --mon->eventOverflows;
-#endif
-    TAILQ_REMOVE(&mon->queue, n, listEntry);
-    --mon->queueSize;
-
-    /* Remove from the subscription's queue */
-    if(TAILQ_NEXT(n, globalEntry) != UA_SUBSCRIPTION_QUEUE_SENTINEL) {
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-        if(mon->attributeId == UA_ATTRIBUTEID_EVENTNOTIFIER) {
-            --sub->eventNotifications;
-        } else
-#endif
-        {
-            --sub->dataChangeNotifications;
-        }
-        TAILQ_REMOVE(&sub->notificationQueue, n, globalEntry);
-        --sub->notificationQueueSize;
-    }
-}
-
-void
-UA_Notification_delete(UA_Notification *n) {
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-    UA_MonitoredItem *mon = n->mon;
-    if(mon->attributeId == UA_ATTRIBUTEID_EVENTNOTIFIER) {
-        UA_EventFieldList_deleteMembers(&n->data.event.fields);
-        /* EventFilterResult currently isn't being used
-         * UA_EventFilterResult_delete(notification->data.event->result); */
-    } else
-#endif
-    {
-        UA_DataValue_deleteMembers(&n->data.value);
-    }
-    UA_free(n);
-}
-
-/*****************/
-/* MonitoredItem */
-/*****************/
-
-void
-UA_MonitoredItem_init(UA_MonitoredItem *mon, UA_Subscription *sub) {
-    memset(mon, 0, sizeof(UA_MonitoredItem));
-    mon->subscription = sub;
-    TAILQ_INIT(&mon->queue);
-}
-
-void
-UA_MonitoredItem_delete(UA_Server *server, UA_MonitoredItem *monitoredItem) {
-    /* Remove the sampling callback */
-    UA_MonitoredItem_unregisterSampleCallback(server, monitoredItem);
-
-    /* Remove the queued notifications if attached to a subscription (not a
-     * local MonitoredItem) */
-    if(monitoredItem->subscription) {
-        UA_Notification *notification, *notification_tmp;
-        TAILQ_FOREACH_SAFE(notification, &monitoredItem->queue,
-                           listEntry, notification_tmp) {
-            /* Remove the item from the queues and free the memory */
-            UA_Notification_dequeue(server, notification);
-            UA_Notification_delete(notification);
-        }
-    }
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-    if(monitoredItem->attributeId == UA_ATTRIBUTEID_EVENTNOTIFIER) {
-        /* Remove the monitored item from the node queue */
-        UA_Server_editNode(server, NULL, &monitoredItem->monitoredNodeId,
-                           UA_MonitoredItem_removeNodeEventCallback, monitoredItem);
-        UA_EventFilter_clear(&monitoredItem->filter.eventFilter);
-    } else
-#endif
-    {
-        /* UA_DataChangeFilter does not hold dynamic content we need to free */
-        /* UA_DataChangeFilter_clear(&monitoredItem->filter.dataChangeFilter); */
-    }
-
-    /* Deregister MonitoredItem in userland */
-    if(server->config.monitoredItemRegisterCallback && monitoredItem->registered) {
-        /* Get the session context. Local MonitoredItems don't have a subscription. */
-        UA_Session *session = NULL;
-        if(monitoredItem->subscription)
-            session = monitoredItem->subscription->session;
-        if(!session)
-            session = &server->adminSession;
-
-        /* Get the node context */
-        void *targetContext = NULL;
-        UA_Server_getNodeContext(server, monitoredItem->monitoredNodeId, &targetContext);
-
-        /* Deregister */
-        server->config.monitoredItemRegisterCallback(server, &session->sessionId,
-                                                     session->sessionHandle,
-                                                     &monitoredItem->monitoredNodeId,
-                                                     targetContext, monitoredItem->attributeId, true);
-    }
-
-    /* Remove the monitored item */
-    if(monitoredItem->listEntry.le_prev != NULL)
-        LIST_REMOVE(monitoredItem, listEntry);
-    UA_String_deleteMembers(&monitoredItem->indexRange);
-    UA_ByteString_deleteMembers(&monitoredItem->lastSampledValue);
-    UA_Variant_deleteMembers(&monitoredItem->lastValue);
-    UA_NodeId_deleteMembers(&monitoredItem->monitoredNodeId);
-
-    /* No actual callback, just remove the structure */
-    monitoredItem->delayedFreePointers.callback = NULL;
-    UA_WorkQueue_enqueueDelayed(&server->workQueue, &monitoredItem->delayedFreePointers);
-}
-
-UA_StatusCode
-UA_MonitoredItem_ensureQueueSpace(UA_Server *server, UA_MonitoredItem *mon) {
-    /* Assert: The eventoverflow are counted in the queue size; There can be
-     * only one eventoverflow more than normal entries */
-    UA_assert(mon->queueSize >= mon->eventOverflows);
-    UA_assert(mon->eventOverflows <= mon->queueSize - mon->eventOverflows + 1);
-
-    /* Nothing to do */
-    if(mon->queueSize - mon->eventOverflows <= mon->maxQueueSize)
-        return UA_STATUSCODE_GOOD;
-
-#ifdef __clang_analyzer__
-    return UA_STATUSCODE_GOOD;
-#endif
-    
-    /* Remove notifications until the queue size is reached */
-    UA_Subscription *sub = mon->subscription;
-    while(mon->queueSize - mon->eventOverflows > mon->maxQueueSize) {
-        /* At least two notifications that are not eventOverflows in the queue */
-        UA_assert(mon->queueSize - mon->eventOverflows >= 2);
-
-        /* Select the next notification to delete. Skip over overflow events. */
-        UA_Notification *del = NULL;
-        if(mon->discardOldest) {
-            /* Remove the oldest */
-            del = TAILQ_FIRST(&mon->queue);
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-            while(UA_Notification_isOverflowEvent(server, del))
-                del = TAILQ_NEXT(del, listEntry); /* skip overflow events */
-#endif
-        } else {
-            /* Remove the second newest (to keep the up-to-date notification).
-             * The last entry is not an OverflowEvent -- we just added it. */
-            del = TAILQ_LAST(&mon->queue, NotificationQueue);
-            del = TAILQ_PREV(del, NotificationQueue, listEntry);
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-            while(UA_Notification_isOverflowEvent(server, del))
-                del = TAILQ_PREV(del, NotificationQueue, listEntry); /* skip overflow events */
-#endif
-        }
-
-        UA_assert(del); /* There must have been one entry that can be deleted */
-
-        /* If reporting is activated (entries are also in the subscriptions
-         * global queue): Move the entry after del in the per-MonitoredItem
-         * queue right after del in the global queue. (It is already right after
-         * del in the per-MonitoredItem queue.) This is required so we don't
-         * starve MonitoredItems with a high sampling interval by always
-         * removing their first appearance in the gloal queue for the
-         * Subscription. */
-        if(TAILQ_NEXT(del, globalEntry) != UA_SUBSCRIPTION_QUEUE_SENTINEL) {
-            UA_Notification *after_del = TAILQ_NEXT(del, listEntry);
-            UA_assert(after_del); /* There must be one remaining element after del */
-            TAILQ_REMOVE(&sub->notificationQueue, after_del, globalEntry);
-            TAILQ_INSERT_AFTER(&sub->notificationQueue, del, after_del, globalEntry);
-        }
-
-        /* Delete the notification */
-        UA_Notification_dequeue(server, del);
-        UA_Notification_delete(del);
-    }
-
-    /* Get the element where the overflow shall be announced (infobits or
-     * overflowevent) */
-    UA_Notification *indicator;
-    if(mon->discardOldest)
-        indicator = TAILQ_FIRST(&mon->queue);
-    else
-        indicator = TAILQ_LAST(&mon->queue, NotificationQueue);
-    UA_assert(indicator);
-
-    /* Create an overflow notification */
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-    if(mon->attributeId == UA_ATTRIBUTEID_EVENTNOTIFIER) {
-        return createEventOverflowNotification(server, sub, mon, indicator);
-    } else
-#endif
-    {
-        /* Set the infobits of a datachange notification */
-        if(mon->maxQueueSize > 1) {
-            /* Add the infobits either to the newest or the new last entry */
-            indicator->data.value.hasStatus = true;
-            indicator->data.value.status |=
-                (UA_STATUSCODE_INFOTYPE_DATAVALUE | UA_STATUSCODE_INFOBITS_OVERFLOW);
-        }
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_MonitoredItem_registerSampleCallback(UA_Server *server, UA_MonitoredItem *mon) {
-    if(mon->sampleCallbackIsRegistered)
-        return UA_STATUSCODE_GOOD;
-
-    /* Only DataChange MonitoredItems have a callback with a sampling interval */
-    if(mon->attributeId == UA_ATTRIBUTEID_EVENTNOTIFIER)
-        return UA_STATUSCODE_GOOD;
-
-    UA_StatusCode retval =
-        UA_Server_addRepeatedCallback(server, (UA_ServerCallback)UA_MonitoredItem_sampleCallback,
-                                      mon, mon->samplingInterval, &mon->sampleCallbackId);
-    if(retval == UA_STATUSCODE_GOOD)
-        mon->sampleCallbackIsRegistered = true;
-    return retval;
-}
-
-void
-UA_MonitoredItem_unregisterSampleCallback(UA_Server *server, UA_MonitoredItem *mon) {
-    if(!mon->sampleCallbackIsRegistered)
-        return;
-    UA_Server_removeRepeatedCallback(server, mon->sampleCallbackId);
-    mon->sampleCallbackIsRegistered = false;
-}
-
-#endif /* UA_ENABLE_SUBSCRIPTIONS */
diff --git a/ext/open62541/src/ua_connection.c b/ext/open62541/src/ua_connection.c
deleted file mode 100644
index 269ebd1..0000000
--- a/ext/open62541/src/ua_connection.c
+++ /dev/null
@@ -1,302 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014, 2016-2017 (c) Florian Palm
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2019 (c) Kalycito Infotech Private Limited
- */
-
-#include <open62541/transport_generated_encoding_binary.h>
-#include <open62541/types_generated_encoding_binary.h>
-#include <open62541/types_generated_handling.h>
-
-#include "ua_connection_internal.h"
-#include "ua_securechannel.h"
-#include "ua_types_encoding_binary.h"
-#include "ua_util_internal.h"
-
-void UA_Connection_deleteMembers(UA_Connection *connection) {
-    UA_ByteString_deleteMembers(&connection->incompleteChunk);
-}
-
-UA_StatusCode
-UA_Connection_processHELACK(UA_Connection *connection,
-                            const UA_ConnectionConfig *localConfig,
-                            const UA_ConnectionConfig *remoteConfig) {
-    connection->config = *remoteConfig;
-
-    /* The lowest common version is used by both sides */
-    if(connection->config.protocolVersion > localConfig->protocolVersion)
-        connection->config.protocolVersion = localConfig->protocolVersion;
-
-    /* Can we receive the max send size? */
-    if(connection->config.sendBufferSize > localConfig->recvBufferSize)
-        connection->config.sendBufferSize = localConfig->recvBufferSize;
-
-    /* Can we send the max receive size? */
-    if(connection->config.recvBufferSize > localConfig->sendBufferSize)
-        connection->config.recvBufferSize = localConfig->sendBufferSize;
-
-    /* Chunks of at least 8192 bytes must be permissible.
-     * See Part 6, Clause 6.7.1 */
-    if(connection->config.recvBufferSize < 8192 ||
-       connection->config.sendBufferSize < 8192 ||
-       (connection->config.maxMessageSize != 0 &&
-        connection->config.maxMessageSize < 8192))
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    connection->state = UA_CONNECTION_ESTABLISHED;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Hides some errors before sending them to a client according to the
- * standard. */
-static void
-hideErrors(UA_TcpErrorMessage *const error) {
-    switch(error->error) {
-    case UA_STATUSCODE_BADCERTIFICATEUNTRUSTED:
-    case UA_STATUSCODE_BADCERTIFICATEREVOKED:
-        error->error = UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-        error->reason = UA_STRING_NULL;
-        break;
-        // TODO: Check if these are all cases that need to be covered.
-    default:
-        break;
-    }
-}
-
-void
-UA_Connection_sendError(UA_Connection *connection, UA_TcpErrorMessage *error) {
-    hideErrors(error);
-
-    UA_TcpMessageHeader header;
-    header.messageTypeAndChunkType = UA_MESSAGETYPE_ERR + UA_CHUNKTYPE_FINAL;
-    // Header + ErrorMessage (error + reasonLength_field + length)
-    header.messageSize = 8 + (4 + 4 + (UA_UInt32)error->reason.length);
-
-    /* Get the send buffer from the network layer */
-    UA_ByteString msg = UA_BYTESTRING_NULL;
-    UA_StatusCode retval = connection->getSendBuffer(connection, header.messageSize, &msg);
-    if(retval != UA_STATUSCODE_GOOD)
-        return;
-
-    /* Encode and send the response */
-    UA_Byte *bufPos = msg.data;
-    const UA_Byte *bufEnd = &msg.data[msg.length];
-    UA_TcpMessageHeader_encodeBinary(&header, &bufPos, bufEnd);
-    UA_TcpErrorMessage_encodeBinary(error, &bufPos, bufEnd);
-    msg.length = header.messageSize;
-    connection->send(connection, &msg);
-}
-
-static UA_StatusCode
-bufferIncompleteChunk(UA_Connection *connection, const UA_Byte *pos,
-                      const UA_Byte *end) {
-    UA_assert(connection->incompleteChunk.length == 0);
-    UA_assert(pos < end);
-    size_t length = (uintptr_t)end - (uintptr_t)pos;
-    UA_StatusCode retval = UA_ByteString_allocBuffer(&connection->incompleteChunk, length);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    memcpy(connection->incompleteChunk.data, pos, length);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-processChunk(UA_Connection *connection, void *application,
-             UA_Connection_processChunk processCallback,
-             const UA_Byte **posp, const UA_Byte *end, UA_Boolean *done) {
-    const UA_Byte *pos = *posp;
-    const size_t remaining = (uintptr_t)end - (uintptr_t)pos;
-
-    /* At least 8 byte needed for the header. Wait for the next chunk. */
-    if(remaining < 8) {
-        *done = true;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* Check the message type */
-    UA_MessageType msgtype = (UA_MessageType)
-        ((UA_UInt32)pos[0] + ((UA_UInt32)pos[1] << 8) + ((UA_UInt32)pos[2] << 16));
-    if(msgtype != UA_MESSAGETYPE_MSG && msgtype != UA_MESSAGETYPE_ERR &&
-       msgtype != UA_MESSAGETYPE_OPN && msgtype != UA_MESSAGETYPE_HEL &&
-       msgtype != UA_MESSAGETYPE_ACK && msgtype != UA_MESSAGETYPE_CLO) {
-        /* The message type is not recognized */
-        return UA_STATUSCODE_BADTCPMESSAGETYPEINVALID;
-    }
-
-    UA_Byte isFinal = pos[3];
-    if(isFinal != 'C' && isFinal != 'F' && isFinal != 'A') {
-        /* The message type is not recognized */
-        return UA_STATUSCODE_BADTCPMESSAGETYPEINVALID;
-    }
-
-    UA_UInt32 chunk_length = 0;
-    UA_ByteString temp = { 8, (UA_Byte*)(uintptr_t)pos }; /* At least 8 byte left */
-    size_t temp_offset = 4;
-    /* Decoding the UInt32 cannot fail */
-    UA_UInt32_decodeBinary(&temp, &temp_offset, &chunk_length);
-
-    /* The message size is not allowed */
-    if(chunk_length < 16 || chunk_length > connection->config.recvBufferSize)
-        return UA_STATUSCODE_BADTCPMESSAGETOOLARGE;
-
-    /* Have an the complete chunk */
-    if(chunk_length > remaining) {
-        *done = true;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* Process the chunk; forward the position pointer */
-    temp.length = chunk_length;
-    *posp += chunk_length;
-    *done = false;
-    return processCallback(application, connection, &temp);
-}
-
-UA_StatusCode
-UA_Connection_processChunks(UA_Connection *connection, void *application,
-                            UA_Connection_processChunk processCallback,
-                            const UA_ByteString *packet) {
-    const UA_Byte *pos = packet->data;
-    const UA_Byte *end = &packet->data[packet->length];
-    UA_ByteString appended = connection->incompleteChunk;
-
-    /* Prepend the incomplete last chunk. This is usually done in the
-     * networklayer. But we test for a buffered incomplete chunk here again to
-     * work around "lazy" network layers. */
-    if(appended.length > 0) {
-        connection->incompleteChunk = UA_BYTESTRING_NULL;
-        UA_Byte *t = (UA_Byte*)UA_realloc(appended.data, appended.length + packet->length);
-        if(!t) {
-            UA_ByteString_deleteMembers(&appended);
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        memcpy(&t[appended.length], pos, packet->length);
-        appended.data = t;
-        appended.length += packet->length;
-        pos = t;
-        end = &t[appended.length];
-    }
-
-    UA_assert(connection->incompleteChunk.length == 0);
-
-    /* Loop over the received chunks. pos is increased with each chunk. */
-    UA_Boolean done = false;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    while(!done) {
-        retval = processChunk(connection, application, processCallback, &pos, end, &done);
-        /* If an irrecoverable error happens: do not buffer incomplete chunk */
-        if(retval != UA_STATUSCODE_GOOD)
-            goto cleanup;
-    }
-
-    if(end > pos)
-        retval = bufferIncompleteChunk(connection, pos, end);
-
- cleanup:
-    UA_ByteString_deleteMembers(&appended);
-    return retval;
-}
-
-/* In order to know whether a chunk was processed, we insert an redirection into
- * the callback. */
-struct completeChunkTrampolineData {
-    UA_Boolean called;
-    void *application;
-    UA_Connection_processChunk processCallback;
-};
-
-static UA_StatusCode
-completeChunkTrampoline(void *application, UA_Connection *connection,
-                        UA_ByteString *chunk) {
-    struct completeChunkTrampolineData *data =
-        (struct completeChunkTrampolineData*)application;
-    data->called = true;
-    return data->processCallback(data->application, connection, chunk);
-}
-
-UA_StatusCode
-UA_Connection_receiveChunksBlocking(UA_Connection *connection, void *application,
-                                    UA_Connection_processChunk processCallback,
-                                    UA_UInt32 timeout) {
-    UA_DateTime now = UA_DateTime_nowMonotonic();
-    UA_DateTime maxDate = now + (timeout * UA_DATETIME_MSEC);
-
-    struct completeChunkTrampolineData data;
-    data.called = false;
-    data.application = application;
-    data.processCallback = processCallback;
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    while(true) {
-        /* Listen for messages to arrive */
-        UA_ByteString packet = UA_BYTESTRING_NULL;
-        retval = connection->recv(connection, &packet, timeout);
-        if(retval != UA_STATUSCODE_GOOD)
-            break;
-
-        /* Try to process one complete chunk */
-        retval = UA_Connection_processChunks(connection, &data,
-                                             completeChunkTrampoline, &packet);
-        connection->releaseRecvBuffer(connection, &packet);
-        if(data.called)
-            break;
-
-        /* We received a message. But the chunk is incomplete. Compute the
-         * remaining timeout. */
-        now = UA_DateTime_nowMonotonic();
-
-        /* >= avoid timeout to be set to 0 */
-        if(now >= maxDate)
-            return UA_STATUSCODE_GOODNONCRITICALTIMEOUT;
-
-        /* round always to upper value to avoid timeout to be set to 0
-         * if(maxDate - now) < (UA_DATETIME_MSEC/2) */
-        timeout = (UA_UInt32)(((maxDate - now) + (UA_DATETIME_MSEC - 1)) / UA_DATETIME_MSEC);
-    }
-    return retval;
-}
-
-UA_StatusCode
-UA_Connection_receiveChunksNonBlocking(UA_Connection *connection, void *application,
-                                    UA_Connection_processChunk processCallback) {
-    struct completeChunkTrampolineData data;
-    data.called = false;
-    data.application = application;
-    data.processCallback = processCallback;
-
-    /* Listen for messages to arrive */
-    UA_ByteString packet = UA_BYTESTRING_NULL;
-    UA_StatusCode retval = connection->recv(connection, &packet, 1);
-
-    if((retval != UA_STATUSCODE_GOOD) && (retval != UA_STATUSCODE_GOODNONCRITICALTIMEOUT))
-        return retval;
-
-    /* Try to process one complete chunk */
-    retval = UA_Connection_processChunks(connection, &data, completeChunkTrampoline, &packet);
-    connection->releaseRecvBuffer(connection, &packet);
-
-    return retval;
-}
-
-void UA_Connection_detachSecureChannel(UA_Connection *connection) {
-    UA_SecureChannel *channel = connection->channel;
-    if(channel)
-        /* only replace when the channel points to this connection */
-        UA_atomic_cmpxchg((void**)&channel->connection, connection, NULL);
-    UA_atomic_xchg((void**)&connection->channel, NULL);
-}
-
-// TODO: Return an error code
-void
-UA_Connection_attachSecureChannel(UA_Connection *connection, UA_SecureChannel *channel) {
-    if(UA_atomic_cmpxchg((void**)&channel->connection, NULL, connection) == NULL)
-        UA_atomic_xchg((void**)&connection->channel, (void*)channel);
-}
diff --git a/ext/open62541/src/ua_connection_internal.h b/ext/open62541/src/ua_connection_internal.h
deleted file mode 100644
index 3cef035..0000000
--- a/ext/open62541/src/ua_connection_internal.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2016-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Florian Palm
- *    Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
- */
-
-#ifndef UA_CONNECTION_INTERNAL_H_
-#define UA_CONNECTION_INTERNAL_H_
-
-#include <open62541/plugin/network.h>
-#include <open62541/transport_generated.h>
-
-_UA_BEGIN_DECLS
-
-/* Process the remote configuration in the HEL/ACK handshake. The connection
- * config is initialized with the local settings. */
-UA_StatusCode
-UA_Connection_processHELACK(UA_Connection *connection,
-                            const UA_ConnectionConfig *localConfig,
-                            const UA_ConnectionConfig *remoteConfig);
-
-/* The application can be the client or the server */
-typedef UA_StatusCode (*UA_Connection_processChunk)(void *application,
-                                                    UA_Connection *connection,
-                                                    UA_ByteString *chunk);
-
-/* The network layer may receive several chunks in one packet since TCP is a
- * streaming protocol. The last chunk in the packet may be only partial. This
- * method calls the processChunk callback on all full chunks that were received.
- * The last incomplete chunk is buffered in the connection for the next
- * iteration.
- *
- * The packet itself is not edited in this method. But possibly in the callback
- * that is executed on complete chunks.
- *
- * @param connection The connection
- * @param application The client or server application
- * @param processCallback The function pointer for processing each chunk
- * @param packet The received packet.
- * @return Returns UA_STATUSCODE_GOOD or an error code. When an error occurs,
- *         the current buffer in the connection are
- *         freed. */
-UA_StatusCode
-UA_Connection_processChunks(UA_Connection *connection, void *application,
-                            UA_Connection_processChunk processCallback,
-                            const UA_ByteString *packet);
-
-/* Try to receive at least one complete chunk on the connection. This blocks the
- * current thread up to the given timeout.
- *
- * @param connection The connection
- * @param application The client or server application
- * @param processCallback The function pointer for processing each chunk
- * @param timeout The timeout (in milliseconds) the method will block at most.
- * @return Returns UA_STATUSCODE_GOOD or an error code. When an timeout occurs,
- *         UA_STATUSCODE_GOODNONCRITICALTIMEOUT is returned. */
-UA_StatusCode
-UA_Connection_receiveChunksBlocking(UA_Connection *connection, void *application,
-                                    UA_Connection_processChunk processCallback,
-                                    UA_UInt32 timeout);
-
-UA_StatusCode
-UA_Connection_receiveChunksNonBlocking(UA_Connection *connection, void *application,
-                                       UA_Connection_processChunk processCallback);
-
-/* When a fatal error occurs the Server shall send an Error Message to the
- * Client and close the socket. When a Client encounters one of these errors, it
- * shall also close the socket but does not send an Error Message. After the
- * socket is closed a Client shall try to reconnect automatically using the
- * mechanisms described in [...]. */
-void
-UA_Connection_sendError(UA_Connection *connection,
-                        UA_TcpErrorMessage *error);
-
-void UA_Connection_detachSecureChannel(UA_Connection *connection);
-void UA_Connection_attachSecureChannel(UA_Connection *connection,
-                                       UA_SecureChannel *channel);
-
-_UA_END_DECLS
-
-#endif /* UA_CONNECTION_INTERNAL_H_ */
diff --git a/ext/open62541/src/ua_securechannel.c b/ext/open62541/src/ua_securechannel.c
deleted file mode 100644
index 8340441..0000000
--- a/ext/open62541/src/ua_securechannel.c
+++ /dev/null
@@ -1,1525 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2014-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014, 2016-2017 (c) Florian Palm
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015 (c) Oleksiy Vasylyev
- *    Copyright 2016 (c) TorbenD
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017-2018 (c) Mark Giraud, Fraunhofer IOSB
- */
-
-#include "ua_securechannel.h"
-
-#include <open62541/plugin/securitypolicy.h>
-#include <open62541/transport_generated_encoding_binary.h>
-#include <open62541/transport_generated_handling.h>
-#include <open62541/types_generated_encoding_binary.h>
-#include <open62541/types_generated_handling.h>
-
-#include "ua_types_encoding_binary.h"
-#include "ua_util_internal.h"
-
-#define UA_BITMASK_MESSAGETYPE 0x00ffffffu
-#define UA_BITMASK_CHUNKTYPE 0xff000000u
-#define UA_ASYMMETRIC_ALG_SECURITY_HEADER_FIXED_LENGTH 12
-#define UA_SYMMETRIC_ALG_SECURITY_HEADER_LENGTH 4
-#define UA_SEQUENCE_HEADER_LENGTH 8
-#define UA_SECUREMH_AND_SYMALGH_LENGTH              \
-    (UA_SECURE_CONVERSATION_MESSAGE_HEADER_LENGTH + \
-    UA_SYMMETRIC_ALG_SECURITY_HEADER_LENGTH)
-
-const UA_ByteString UA_SECURITY_POLICY_NONE_URI =
-    {47, (UA_Byte *)"http://opcfoundation.org/UA/SecurityPolicy#None"};
-
-#ifdef UA_ENABLE_UNIT_TEST_FAILURE_HOOKS
-UA_StatusCode decrypt_verifySignatureFailure;
-UA_StatusCode sendAsym_sendFailure;
-UA_StatusCode processSym_seqNumberFailure;
-#endif
-
-void
-UA_SecureChannel_init(UA_SecureChannel *channel) {
-    /* Linked lists are also initialized by zeroing out */
-    memset(channel, 0, sizeof(UA_SecureChannel));
-    channel->state = UA_SECURECHANNELSTATE_FRESH;
-    TAILQ_INIT(&channel->messages);
-}
-
-UA_StatusCode
-UA_SecureChannel_setSecurityPolicy(UA_SecureChannel *channel,
-                                   const UA_SecurityPolicy *securityPolicy,
-                                   const UA_ByteString *remoteCertificate) {
-    /* Is a policy already configured? */
-    if(channel->securityPolicy) {
-        UA_LOG_ERROR(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                     "Security policy already configured");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    UA_StatusCode retval;
-    if(securityPolicy->certificateVerification != NULL) {
-        retval = securityPolicy->certificateVerification->
-            verifyCertificate(securityPolicy->certificateVerification->context,
-                              remoteCertificate);
-
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-    } else {
-        UA_LOG_WARNING(securityPolicy->logger, UA_LOGCATEGORY_SECURITYPOLICY,
-                       "Security policy None is used to create SecureChannel. Accepting all certificates");
-    }
-
-    retval = securityPolicy->channelModule.
-        newContext(securityPolicy, remoteCertificate, &channel->channelContext);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    retval = UA_ByteString_copy(remoteCertificate, &channel->remoteCertificate);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    UA_ByteString remoteCertificateThumbprint = {20, channel->remoteCertificateThumbprint};
-    retval = securityPolicy->asymmetricModule.
-        makeCertificateThumbprint(securityPolicy, &channel->remoteCertificate,
-                                  &remoteCertificateThumbprint);
-
-    if(retval == UA_STATUSCODE_GOOD)
-        channel->securityPolicy = securityPolicy;
-
-    return retval;
-}
-
-static void
-deleteMessage(UA_Message *me) {
-    UA_ChunkPayload *cp;
-    while((cp = SIMPLEQ_FIRST(&me->chunkPayloads))) {
-        if(cp->copied)
-            UA_ByteString_deleteMembers(&cp->bytes);
-        SIMPLEQ_REMOVE_HEAD(&me->chunkPayloads, pointers);
-        UA_free(cp);
-    }
-    UA_free(me);
-}
-
-static void
-deleteLatestMessage(UA_SecureChannel *channel, UA_UInt32 requestId) {
-    UA_Message *me = TAILQ_LAST(&channel->messages, UA_MessageQueue);
-    if(!me)
-        return;
-    if(me->requestId != requestId)
-        return;
-
-    TAILQ_REMOVE(&channel->messages, me, pointers);
-    deleteMessage(me);
-}
-
-void
-UA_SecureChannel_deleteMessages(UA_SecureChannel *channel) {
-    UA_Message *me, *me_tmp;
-    TAILQ_FOREACH_SAFE(me, &channel->messages, pointers, me_tmp) {
-        TAILQ_REMOVE(&channel->messages, me, pointers);
-        deleteMessage(me);
-    }
-}
-
-void
-UA_SecureChannel_deleteMembers(UA_SecureChannel *channel) {
-    /* Delete members */
-    UA_ByteString_deleteMembers(&channel->remoteCertificate);
-    UA_ByteString_deleteMembers(&channel->localNonce);
-    UA_ByteString_deleteMembers(&channel->remoteNonce);
-    UA_ChannelSecurityToken_deleteMembers(&channel->securityToken);
-    UA_ChannelSecurityToken_deleteMembers(&channel->nextSecurityToken);
-
-    /* Delete the channel context for the security policy */
-    if(channel->securityPolicy) {
-        channel->securityPolicy->channelModule.deleteContext(channel->channelContext);
-        channel->securityPolicy = NULL;
-    }
-
-    /* Remove the buffered messages */
-    UA_SecureChannel_deleteMessages(channel);
-
-    UA_SecureChannel_init(channel);
-}
-
-void
-UA_SecureChannel_close(UA_SecureChannel *channel) {
-    /* Set the status to closed */
-    channel->state = UA_SECURECHANNELSTATE_CLOSED;
-
-    /* Detach from the connection and close the connection */
-    if(channel->connection) {
-        if(channel->connection->state != UA_CONNECTION_CLOSED)
-            channel->connection->close(channel->connection);
-        UA_Connection_detachSecureChannel(channel->connection);
-    }
-
-    /* Remove session pointers (not the sessions) and NULL the pointers back to
-     * the SecureChannel in the Session */
-    UA_SessionHeader *sh, *temp;
-    LIST_FOREACH_SAFE(sh, &channel->sessions, pointers, temp) {
-        sh->channel = NULL;
-        LIST_REMOVE(sh, pointers);
-    }
-}
-
-UA_StatusCode
-UA_SecureChannel_generateLocalNonce(UA_SecureChannel *channel) {
-    if(!channel->securityPolicy)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Is the length of the previous nonce correct? */
-    size_t nonceLength = channel->securityPolicy->symmetricModule.secureChannelNonceLength;
-    if(channel->localNonce.length != nonceLength) {
-        UA_ByteString_deleteMembers(&channel->localNonce);
-        UA_StatusCode retval = UA_ByteString_allocBuffer(&channel->localNonce, nonceLength);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-    }
-
-    return channel->securityPolicy->symmetricModule.
-        generateNonce(channel->securityPolicy, &channel->localNonce);
-}
-
-static UA_StatusCode
-UA_SecureChannel_generateLocalKeys(const UA_SecureChannel *const channel,
-                                   const UA_SecurityPolicy *const securityPolicy) {
-    UA_LOG_TRACE_CHANNEL(securityPolicy->logger, channel, "Generating new local keys");
-    const UA_SecurityPolicyChannelModule *channelModule = &securityPolicy->channelModule;
-    const UA_SecurityPolicySymmetricModule *symmetricModule = &securityPolicy->symmetricModule;
-    const UA_SecurityPolicyCryptoModule *const cryptoModule =
-        &securityPolicy->symmetricModule.cryptoModule;
-
-    /* Symmetric key length */
-    size_t encryptionKeyLength =
-        cryptoModule->encryptionAlgorithm.getLocalKeyLength(securityPolicy, channel->channelContext);
-    size_t encryptionBlockSize =
-        cryptoModule->encryptionAlgorithm.getLocalBlockSize(securityPolicy, channel->channelContext);
-    size_t signingKeyLength =
-        cryptoModule->signatureAlgorithm.getLocalKeyLength(securityPolicy, channel->channelContext);
-    const size_t bufSize = encryptionBlockSize + signingKeyLength + encryptionKeyLength;
-    UA_STACKARRAY(UA_Byte, bufBytes, bufSize);
-    UA_ByteString buffer = {bufSize, bufBytes};
-
-    /* Local keys */
-    UA_StatusCode retval = symmetricModule->generateKey(securityPolicy, &channel->remoteNonce,
-                                                        &channel->localNonce, &buffer);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    const UA_ByteString localSigningKey = {signingKeyLength, buffer.data};
-    const UA_ByteString localEncryptingKey = {encryptionKeyLength,
-                                              buffer.data + signingKeyLength};
-    const UA_ByteString localIv = {encryptionBlockSize,
-                                   buffer.data + signingKeyLength +
-                                   encryptionKeyLength};
-
-    retval = channelModule->setLocalSymSigningKey(channel->channelContext, &localSigningKey);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    retval = channelModule->setLocalSymEncryptingKey(channel->channelContext, &localEncryptingKey);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    retval = channelModule->setLocalSymIv(channel->channelContext, &localIv);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    return retval;
-}
-
-static UA_StatusCode
-UA_SecureChannel_generateRemoteKeys(const UA_SecureChannel *const channel,
-                                    const UA_SecurityPolicy *const securityPolicy) {
-    UA_LOG_TRACE_CHANNEL(securityPolicy->logger, channel, "Generating new remote keys");
-    const UA_SecurityPolicyChannelModule *channelModule = &securityPolicy->channelModule;
-    const UA_SecurityPolicySymmetricModule *symmetricModule = &securityPolicy->symmetricModule;
-    const UA_SecurityPolicyCryptoModule *const cryptoModule =
-        &securityPolicy->symmetricModule.cryptoModule;
-
-    /* Symmetric key length */
-    size_t encryptionKeyLength =
-        cryptoModule->encryptionAlgorithm.getRemoteKeyLength(securityPolicy, channel->channelContext);
-    size_t encryptionBlockSize =
-        cryptoModule->encryptionAlgorithm.getRemoteBlockSize(securityPolicy, channel->channelContext);
-    size_t signingKeyLength =
-        cryptoModule->signatureAlgorithm.getRemoteKeyLength(securityPolicy, channel->channelContext);
-    const size_t bufSize = encryptionBlockSize + signingKeyLength + encryptionKeyLength;
-    UA_STACKARRAY(UA_Byte, bufBytes, bufSize);
-    UA_ByteString buffer = {bufSize, bufBytes};
-
-    /* Remote keys */
-    UA_StatusCode retval = symmetricModule->generateKey(securityPolicy, &channel->localNonce,
-                                                        &channel->remoteNonce, &buffer);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    const UA_ByteString remoteSigningKey = {signingKeyLength, buffer.data};
-    const UA_ByteString remoteEncryptingKey = {encryptionKeyLength,
-                                               buffer.data + signingKeyLength};
-    const UA_ByteString remoteIv = {encryptionBlockSize,
-                                    buffer.data + signingKeyLength +
-                                    encryptionKeyLength};
-
-    retval = channelModule->setRemoteSymSigningKey(channel->channelContext, &remoteSigningKey);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    retval = channelModule->setRemoteSymEncryptingKey(channel->channelContext, &remoteEncryptingKey);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    retval = channelModule->setRemoteSymIv(channel->channelContext, &remoteIv);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    return retval;
-}
-
-UA_StatusCode
-UA_SecureChannel_generateNewKeys(UA_SecureChannel *channel) {
-    UA_StatusCode retval =
-        UA_SecureChannel_generateLocalKeys(channel, channel->securityPolicy);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(channel->securityPolicy->logger, UA_LOGCATEGORY_SECURECHANNEL,
-            "Could not generate a local key");
-        return retval;
-    }
-
-    retval = UA_SecureChannel_generateRemoteKeys(channel, channel->securityPolicy);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_LOG_ERROR(channel->securityPolicy->logger, UA_LOGCATEGORY_SECURECHANNEL,
-            "Could not generate a remote key");
-        return retval;
-    }
-
-    return retval;
-}
-
-UA_SessionHeader *
-UA_SecureChannel_getSession(UA_SecureChannel *channel,
-                            const UA_NodeId *authenticationToken) {
-    UA_SessionHeader *sh;
-    LIST_FOREACH(sh, &channel->sessions, pointers) {
-        if(UA_NodeId_equal(&sh->authenticationToken, authenticationToken))
-            break;
-    }
-    return sh;
-}
-
-UA_StatusCode
-UA_SecureChannel_revolveTokens(UA_SecureChannel *channel) {
-    if(channel->nextSecurityToken.tokenId == 0) // no security token issued
-        return UA_STATUSCODE_BADSECURECHANNELTOKENUNKNOWN;
-
-    //FIXME: not thread-safe ???? Why is this not thread safe?
-    UA_ChannelSecurityToken_deleteMembers(&channel->previousSecurityToken);
-    UA_ChannelSecurityToken_copy(&channel->securityToken, &channel->previousSecurityToken);
-
-    UA_ChannelSecurityToken_deleteMembers(&channel->securityToken);
-    UA_ChannelSecurityToken_copy(&channel->nextSecurityToken, &channel->securityToken);
-
-    UA_ChannelSecurityToken_deleteMembers(&channel->nextSecurityToken);
-    UA_ChannelSecurityToken_init(&channel->nextSecurityToken);
-
-    /* remote keys are generated later on */
-    return UA_SecureChannel_generateLocalKeys(channel, channel->securityPolicy);
-}
-/***************************/
-/* Send Asymmetric Message */
-/***************************/
-
-static size_t
-calculateAsymAlgSecurityHeaderLength(const UA_SecureChannel *channel) {
-    size_t asymHeaderLength = UA_ASYMMETRIC_ALG_SECURITY_HEADER_FIXED_LENGTH +
-                              channel->securityPolicy->policyUri.length;
-    if(channel->securityMode != UA_MESSAGESECURITYMODE_SIGN &&
-       channel->securityMode != UA_MESSAGESECURITYMODE_SIGNANDENCRYPT)
-        return asymHeaderLength;
-
-    /* OPN is always encrypted even if the mode is sign only */
-    asymHeaderLength += 20; /* Thumbprints are always 20 byte long */
-    asymHeaderLength += channel->securityPolicy->localCertificate.length;
-    return asymHeaderLength;
-}
-
-static UA_StatusCode
-prependHeadersAsym(UA_SecureChannel *const channel, UA_Byte *header_pos,
-                   const UA_Byte *buf_end, size_t totalLength,
-                   size_t securityHeaderLength, UA_UInt32 requestId,
-                   size_t *const finalLength) {
-    UA_StatusCode retval;
-    size_t dataToEncryptLength =
-        totalLength - (UA_SECURE_CONVERSATION_MESSAGE_HEADER_LENGTH + securityHeaderLength);
-
-    UA_SecureConversationMessageHeader respHeader;
-    respHeader.messageHeader.messageTypeAndChunkType = UA_MESSAGETYPE_OPN + UA_CHUNKTYPE_FINAL;
-    respHeader.messageHeader.messageSize = (UA_UInt32)
-        (totalLength +
-         UA_SecurityPolicy_getRemoteAsymEncryptionBufferLengthOverhead(channel->securityPolicy,
-                                                                       channel->channelContext,
-                                                                       dataToEncryptLength));
-    respHeader.secureChannelId = channel->securityToken.channelId;
-    retval = UA_encodeBinary(&respHeader,
-                             &UA_TRANSPORT[UA_TRANSPORT_SECURECONVERSATIONMESSAGEHEADER],
-                             &header_pos, &buf_end, NULL, NULL);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    UA_AsymmetricAlgorithmSecurityHeader asymHeader;
-    UA_AsymmetricAlgorithmSecurityHeader_init(&asymHeader);
-    asymHeader.securityPolicyUri = channel->securityPolicy->policyUri;
-    if(channel->securityMode == UA_MESSAGESECURITYMODE_SIGN ||
-       channel->securityMode == UA_MESSAGESECURITYMODE_SIGNANDENCRYPT) {
-        asymHeader.senderCertificate = channel->securityPolicy->localCertificate;
-        asymHeader.receiverCertificateThumbprint.length = 20;
-        asymHeader.receiverCertificateThumbprint.data = channel->remoteCertificateThumbprint;
-    }
-    retval = UA_encodeBinary(&asymHeader,
-                             &UA_TRANSPORT[UA_TRANSPORT_ASYMMETRICALGORITHMSECURITYHEADER],
-                             &header_pos, &buf_end, NULL, NULL);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    UA_SequenceHeader seqHeader;
-    seqHeader.requestId = requestId;
-    seqHeader.sequenceNumber = UA_atomic_addUInt32(&channel->sendSequenceNumber, 1);
-    retval = UA_encodeBinary(&seqHeader, &UA_TRANSPORT[UA_TRANSPORT_SEQUENCEHEADER],
-                             &header_pos, &buf_end, NULL, NULL);
-
-    *finalLength = respHeader.messageHeader.messageSize;
-
-    return retval;
-}
-
-static void
-hideBytesAsym(const UA_SecureChannel *channel, UA_Byte **buf_start,
-              const UA_Byte **buf_end) {
-    *buf_start += UA_SECURE_CONVERSATION_MESSAGE_HEADER_LENGTH;
-    *buf_start += calculateAsymAlgSecurityHeaderLength(channel);
-    *buf_start += UA_SEQUENCE_HEADER_LENGTH;
-
-#ifdef UA_ENABLE_ENCRYPTION
-    if(channel->securityMode != UA_MESSAGESECURITYMODE_SIGN &&
-       channel->securityMode != UA_MESSAGESECURITYMODE_SIGNANDENCRYPT)
-        return;
-
-    const UA_SecurityPolicy *securityPolicy = channel->securityPolicy;
-
-    /* Hide bytes for signature and padding */
-    size_t potentialEncryptMaxSize = (size_t)(*buf_end - *buf_start) + UA_SEQUENCE_HEADER_LENGTH;
-    *buf_end -= securityPolicy->asymmetricModule.cryptoModule.signatureAlgorithm.
-        getLocalSignatureSize(securityPolicy, channel->channelContext);
-    *buf_end -= 2; /* padding byte and extraPadding byte */
-
-    /* Add some overhead length due to RSA implementations adding a signature themselves */
-    *buf_end -= UA_SecurityPolicy_getRemoteAsymEncryptionBufferLengthOverhead(securityPolicy,
-                                                                              channel->channelContext,
-                                                                              potentialEncryptMaxSize);
-#endif
-}
-
-#ifdef UA_ENABLE_ENCRYPTION
-
-static void
-padChunkAsym(UA_SecureChannel *channel, const UA_ByteString *const buf,
-             size_t securityHeaderLength, UA_Byte **buf_pos) {
-    const UA_SecurityPolicy *const securityPolicy = channel->securityPolicy;
-
-    /* Also pad if the securityMode is SIGN_ONLY, since we are using
-     * asymmetric communication to exchange keys and thus need to encrypt. */
-    if(channel->securityMode != UA_MESSAGESECURITYMODE_SIGN &&
-       channel->securityMode != UA_MESSAGESECURITYMODE_SIGNANDENCRYPT)
-        return;
-
-    const UA_Byte *buf_body_start =
-        &buf->data[UA_SECURE_CONVERSATION_MESSAGE_HEADER_LENGTH +
-                   UA_SEQUENCE_HEADER_LENGTH + securityHeaderLength];
-    const size_t bytesToWrite =
-        (uintptr_t)*buf_pos - (uintptr_t)buf_body_start + UA_SEQUENCE_HEADER_LENGTH;
-
-    /* Compute the padding length */
-    size_t plainTextBlockSize = securityPolicy->asymmetricModule.cryptoModule.encryptionAlgorithm.
-        getRemotePlainTextBlockSize(securityPolicy, channel->channelContext);
-    size_t signatureSize = securityPolicy->asymmetricModule.cryptoModule.signatureAlgorithm.
-        getLocalSignatureSize(securityPolicy, channel->channelContext);
-    size_t paddingBytes = 1;
-    if(securityPolicy->asymmetricModule.cryptoModule.encryptionAlgorithm.
-        getRemoteKeyLength(securityPolicy, channel->channelContext) > 2048)
-        ++paddingBytes; /* extra padding */
-    size_t totalPaddingSize =
-        (plainTextBlockSize - ((bytesToWrite + signatureSize + paddingBytes) % plainTextBlockSize));
-
-    /* Write the padding. This is <= because the paddingSize byte also has to be written */
-    UA_Byte paddingSize = (UA_Byte)(totalPaddingSize & 0xffu);
-    for(UA_UInt16 i = 0; i <= totalPaddingSize; ++i) {
-        **buf_pos = paddingSize;
-        ++*buf_pos;
-    }
-
-    /* Write the extra padding byte if required */
-    if(securityPolicy->asymmetricModule.cryptoModule.encryptionAlgorithm.
-       getRemoteKeyLength(securityPolicy, channel->channelContext) > 2048) {
-        UA_Byte extraPaddingSize = (UA_Byte)(totalPaddingSize >> 8u);
-        **buf_pos = extraPaddingSize;
-        ++*buf_pos;
-    }
-}
-
-static UA_StatusCode
-signAndEncryptAsym(UA_SecureChannel *const channel, size_t preSignLength,
-                   UA_ByteString *buf, size_t securityHeaderLength,
-                   size_t totalLength) {
-    if(channel->securityMode != UA_MESSAGESECURITYMODE_SIGN &&
-       channel->securityMode != UA_MESSAGESECURITYMODE_SIGNANDENCRYPT)
-        return UA_STATUSCODE_GOOD;
-
-    const UA_SecurityPolicy *const securityPolicy = channel->securityPolicy;
-    
-    /* Sign message */
-    const UA_ByteString dataToSign = {preSignLength, buf->data};
-    size_t sigsize = securityPolicy->asymmetricModule.cryptoModule.signatureAlgorithm.
-        getLocalSignatureSize(securityPolicy, channel->channelContext);
-    UA_ByteString signature = {sigsize, buf->data + preSignLength};
-    UA_StatusCode retval = securityPolicy->asymmetricModule.cryptoModule.signatureAlgorithm.
-        sign(securityPolicy, channel->channelContext, &dataToSign, &signature);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Specification part 6, 6.7.4: The OpenSecureChannel Messages are
-     * signed and encrypted if the SecurityMode is not None (even if the
-     * SecurityMode is SignOnly). */
-    size_t unencrypted_length =
-        UA_SECURE_CONVERSATION_MESSAGE_HEADER_LENGTH + securityHeaderLength;
-    UA_ByteString dataToEncrypt = {totalLength - unencrypted_length,
-                                   &buf->data[unencrypted_length]};
-    return securityPolicy->asymmetricModule.cryptoModule.encryptionAlgorithm.
-        encrypt(securityPolicy, channel->channelContext, &dataToEncrypt);
-}
-
-#endif /* UA_ENABLE_ENCRYPTION */
-
-/* Sends an OPN message using asymmetric encryption if defined */
-UA_StatusCode
-UA_SecureChannel_sendAsymmetricOPNMessage(UA_SecureChannel *channel,
-                                          UA_UInt32 requestId, const void *content,
-                                          const UA_DataType *contentType) {
-    if(channel->securityMode == UA_MESSAGESECURITYMODE_INVALID)
-        return UA_STATUSCODE_BADSECURITYMODEREJECTED;
-
-    const UA_SecurityPolicy *const securityPolicy = channel->securityPolicy;
-    UA_Connection *connection = channel->connection;
-    if(!connection)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Allocate the message buffer */
-    UA_ByteString buf = UA_BYTESTRING_NULL;
-    UA_StatusCode retval =
-        connection->getSendBuffer(connection, connection->config.sendBufferSize, &buf);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Restrict buffer to the available space for the payload */
-    UA_Byte *buf_pos = buf.data;
-    const UA_Byte *buf_end = &buf.data[buf.length];
-    hideBytesAsym(channel, &buf_pos, &buf_end);
-
-    /* Encode the message type and content */
-    UA_NodeId typeId = UA_NODEID_NUMERIC(0, contentType->binaryEncodingId);
-    retval |= UA_encodeBinary(&typeId, &UA_TYPES[UA_TYPES_NODEID],
-                              &buf_pos, &buf_end, NULL, NULL);
-    retval |= UA_encodeBinary(content, contentType,
-                              &buf_pos, &buf_end, NULL, NULL);
-    if(retval != UA_STATUSCODE_GOOD) {
-        connection->releaseSendBuffer(connection, &buf);
-        return retval;
-    }
-
-    const size_t securityHeaderLength = calculateAsymAlgSecurityHeaderLength(channel);
-
-    /* Add padding to the chunk */
-#ifdef UA_ENABLE_ENCRYPTION
-    padChunkAsym(channel, &buf, securityHeaderLength, &buf_pos);
-#endif
-
-    /* The total message length */
-    size_t pre_sig_length = (uintptr_t)buf_pos - (uintptr_t)buf.data;
-    size_t total_length = pre_sig_length;
-    if(channel->securityMode == UA_MESSAGESECURITYMODE_SIGN ||
-       channel->securityMode == UA_MESSAGESECURITYMODE_SIGNANDENCRYPT)
-        total_length += securityPolicy->asymmetricModule.cryptoModule.signatureAlgorithm.
-            getLocalSignatureSize(securityPolicy, channel->channelContext);
-
-    /* The total message length is known here which is why we encode the headers
-     * at this step and not earlier. */
-    size_t finalLength = 0;
-    retval = prependHeadersAsym(channel, buf.data, buf_end, total_length,
-                                securityHeaderLength, requestId, &finalLength);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-
-#ifdef UA_ENABLE_ENCRYPTION
-    retval = signAndEncryptAsym(channel, pre_sig_length, &buf, securityHeaderLength, total_length);
-    if(retval != UA_STATUSCODE_GOOD)
-        goto error;
-#endif
-
-    /* Send the message, the buffer is freed in the network layer */
-    buf.length = finalLength;
-    retval = connection->send(connection, &buf);
-#ifdef UA_ENABLE_UNIT_TEST_FAILURE_HOOKS
-    retval |= sendAsym_sendFailure;
-#endif
-    return retval;
-
-error:
-    connection->releaseSendBuffer(connection, &buf);
-    return retval;
-}
-
-/**************************/
-/* Send Symmetric Message */
-/**************************/
-
-#ifdef UA_ENABLE_ENCRYPTION
-
-static UA_UInt16
-calculatePaddingSym(const UA_SecurityPolicy *securityPolicy, const void *channelContext,
-                    size_t bytesToWrite, UA_Byte *paddingSize, UA_Byte *extraPaddingSize) {
-    size_t encryptionBlockSize = securityPolicy->symmetricModule.cryptoModule.
-        encryptionAlgorithm.getLocalBlockSize(securityPolicy, channelContext);
-    size_t signatureSize = securityPolicy->symmetricModule.cryptoModule.signatureAlgorithm.
-        getLocalSignatureSize(securityPolicy, channelContext);
-
-    size_t padding = (encryptionBlockSize -
-                      ((bytesToWrite + signatureSize + 1) % encryptionBlockSize));
-    *paddingSize = (UA_Byte)padding;
-    *extraPaddingSize = (UA_Byte)(padding >> 8u);
-    return (UA_UInt16)padding;
-}
-
-static void
-padChunkSym(UA_MessageContext *messageContext, size_t bodyLength) {
-    if(messageContext->channel->securityMode != UA_MESSAGESECURITYMODE_SIGNANDENCRYPT)
-        return;
-
-    /* The bytes for the padding and signature were removed from buf_end before
-     * encoding the payload. So we don't have to check if there is enough
-     * space. */
-
-    size_t bytesToWrite = bodyLength + UA_SEQUENCE_HEADER_LENGTH;
-    UA_Byte paddingSize = 0;
-    UA_Byte extraPaddingSize = 0;
-    UA_UInt16 totalPaddingSize =
-        calculatePaddingSym(messageContext->channel->securityPolicy,
-                            messageContext->channel->channelContext,
-                            bytesToWrite, &paddingSize, &extraPaddingSize);
-
-    /* This is <= because the paddingSize byte also has to be written. */
-    for(UA_UInt16 i = 0; i <= totalPaddingSize; ++i) {
-        *messageContext->buf_pos = paddingSize;
-        ++(messageContext->buf_pos);
-    }
-    if(extraPaddingSize > 0) {
-        *messageContext->buf_pos = extraPaddingSize;
-        ++(messageContext->buf_pos);
-    }
-}
-
-static UA_StatusCode
-signChunkSym(UA_MessageContext *const messageContext, size_t preSigLength) {
-    const UA_SecureChannel *channel = messageContext->channel;
-    if(channel->securityMode != UA_MESSAGESECURITYMODE_SIGN &&
-       channel->securityMode != UA_MESSAGESECURITYMODE_SIGNANDENCRYPT)
-        return UA_STATUSCODE_GOOD;
-
-    const UA_SecurityPolicy *securityPolicy = channel->securityPolicy;
-    UA_ByteString dataToSign = messageContext->messageBuffer;
-    dataToSign.length = preSigLength;
-    UA_ByteString signature;
-    signature.length = securityPolicy->symmetricModule.cryptoModule.signatureAlgorithm.
-        getLocalSignatureSize(securityPolicy, channel->channelContext);
-    signature.data = messageContext->buf_pos;
-
-    return securityPolicy->symmetricModule.cryptoModule.signatureAlgorithm.
-        sign(securityPolicy, channel->channelContext, &dataToSign, &signature);
-}
-
-static UA_StatusCode
-encryptChunkSym(UA_MessageContext *const messageContext, size_t totalLength) {
-    const UA_SecureChannel *channel = messageContext->channel;
-    if(channel->securityMode != UA_MESSAGESECURITYMODE_SIGNANDENCRYPT)
-        return UA_STATUSCODE_GOOD;
-        
-    UA_ByteString dataToEncrypt;
-    dataToEncrypt.data = messageContext->messageBuffer.data + UA_SECUREMH_AND_SYMALGH_LENGTH;
-    dataToEncrypt.length = totalLength - UA_SECUREMH_AND_SYMALGH_LENGTH;
-
-    const UA_SecurityPolicy *securityPolicy = channel->securityPolicy;
-    return securityPolicy->symmetricModule.cryptoModule.encryptionAlgorithm.
-        encrypt(securityPolicy, channel->channelContext, &dataToEncrypt);
-}
-
-#endif /* UA_ENABLE_ENCRYPTION */
-
-static void
-setBufPos(UA_MessageContext *mc) {
-    /* Forward the data pointer so that the payload is encoded after the
-     * message header */
-    mc->buf_pos = &mc->messageBuffer.data[UA_SECURE_MESSAGE_HEADER_LENGTH];
-    mc->buf_end = &mc->messageBuffer.data[mc->messageBuffer.length];
-
-#ifdef UA_ENABLE_ENCRYPTION
-    const UA_SecureChannel *channel = mc->channel;
-    const UA_SecurityPolicy *securityPolicy = channel->securityPolicy;
-
-    /* Reserve space for the message footer at the end of the chunk if the chunk
-     * is signed and/or encrypted. The footer includes the fields PaddingSize,
-     * Padding, ExtraPadding and Signature. The padding fields are only present
-     * if the chunk is encrypted. */
-    if(channel->securityMode == UA_MESSAGESECURITYMODE_SIGN ||
-       channel->securityMode == UA_MESSAGESECURITYMODE_SIGNANDENCRYPT)
-        mc->buf_end -= securityPolicy->symmetricModule.cryptoModule.signatureAlgorithm.
-            getLocalSignatureSize(securityPolicy, channel->channelContext);
-
-    /* The size of the padding depends on the amount of data that shall be sent
-     * and is unknown at this point. Reserve space for the PaddingSize byte,
-     * the maximum amount of Padding which equals the block size of the
-     * symmetric encryption algorithm and last 1 byte for the ExtraPaddingSize
-     * field that is present if the encryption key is larger than 2048 bits.
-     * The actual padding size is later calculated by the function
-     * calculatePaddingSym(). */
-    if(channel->securityMode == UA_MESSAGESECURITYMODE_SIGNANDENCRYPT) {
-        /* PaddingSize and ExtraPaddingSize fields */
-        size_t encryptionBlockSize = securityPolicy->symmetricModule.cryptoModule.
-            encryptionAlgorithm.getLocalBlockSize(securityPolicy, channel->channelContext);
-        mc->buf_end -= 1 + ((encryptionBlockSize >> 8u) ? 1 : 0);
-
-        /* Reduce the message body size with the remainder of the operation
-         * maxEncryptedDataSize modulo EncryptionBlockSize to get a whole
-         * number of blocks to encrypt later. Also reserve one byte for
-         * padding (1 <= paddingSize <= encryptionBlockSize). */
-        size_t maxEncryptDataSize = mc->messageBuffer.length -
-            UA_SECURE_CONVERSATION_MESSAGE_HEADER_LENGTH -
-            UA_SYMMETRIC_ALG_SECURITY_HEADER_LENGTH;
-        mc->buf_end -= (maxEncryptDataSize % encryptionBlockSize) + 1;
-    }
-#endif
-}
-
-static UA_StatusCode
-checkLimitsSym(UA_MessageContext *const messageContext, size_t *const bodyLength) {
-    /* Will this chunk surpass the capacity of the SecureChannel for the message? */
-    UA_Connection *const connection = messageContext->channel->connection;
-    if(!connection)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_Byte *buf_body_start = messageContext->messageBuffer.data + UA_SECURE_MESSAGE_HEADER_LENGTH;
-    const UA_Byte *buf_body_end = messageContext->buf_pos;
-    *bodyLength = (uintptr_t)buf_body_end - (uintptr_t)buf_body_start;
-    messageContext->messageSizeSoFar += *bodyLength;
-    messageContext->chunksSoFar++;
-
-    if(messageContext->messageSizeSoFar > connection->config.maxMessageSize &&
-       connection->config.maxMessageSize != 0)
-        return UA_STATUSCODE_BADRESPONSETOOLARGE;
-
-    if(messageContext->chunksSoFar > connection->config.maxChunkCount &&
-       connection->config.maxChunkCount != 0)
-        return UA_STATUSCODE_BADRESPONSETOOLARGE;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-encodeHeadersSym(UA_MessageContext *const messageContext, size_t totalLength) {
-    UA_SecureChannel *channel = messageContext->channel;
-    UA_Byte *header_pos = messageContext->messageBuffer.data;
-
-    UA_SecureConversationMessageHeader respHeader;
-    respHeader.secureChannelId = channel->securityToken.channelId;
-    respHeader.messageHeader.messageTypeAndChunkType = messageContext->messageType;
-    respHeader.messageHeader.messageSize = (UA_UInt32)totalLength;
-    if(messageContext->final)
-        respHeader.messageHeader.messageTypeAndChunkType += UA_CHUNKTYPE_FINAL;
-    else
-        respHeader.messageHeader.messageTypeAndChunkType += UA_CHUNKTYPE_INTERMEDIATE;
-
-    UA_StatusCode res =
-        UA_encodeBinary(&respHeader, &UA_TRANSPORT[UA_TRANSPORT_SECURECONVERSATIONMESSAGEHEADER],
-                        &header_pos, &messageContext->buf_end, NULL, NULL);
-
-    UA_SymmetricAlgorithmSecurityHeader symSecHeader;
-    symSecHeader.tokenId = channel->securityToken.tokenId;
-    res |= UA_encodeBinary(&symSecHeader.tokenId,
-                           &UA_TRANSPORT[UA_TRANSPORT_SYMMETRICALGORITHMSECURITYHEADER],
-                           &header_pos, &messageContext->buf_end, NULL, NULL);
-
-    UA_SequenceHeader seqHeader;
-    seqHeader.requestId = messageContext->requestId;
-    seqHeader.sequenceNumber = UA_atomic_addUInt32(&channel->sendSequenceNumber, 1);
-    res |= UA_encodeBinary(&seqHeader, &UA_TRANSPORT[UA_TRANSPORT_SEQUENCEHEADER],
-                           &header_pos, &messageContext->buf_end, NULL, NULL);
-
-    return res;
-}
-
-static UA_StatusCode
-sendSymmetricChunk(UA_MessageContext *messageContext) {
-    UA_SecureChannel *const channel = messageContext->channel;
-    const UA_SecurityPolicy *securityPolicy = channel->securityPolicy;
-    UA_Connection *const connection = channel->connection;
-    if(!connection)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    size_t bodyLength = 0;
-    UA_StatusCode res = checkLimitsSym(messageContext, &bodyLength);
-    if(res != UA_STATUSCODE_GOOD)
-        goto error;
-
-    /* Add padding */
-#ifdef UA_ENABLE_ENCRYPTION
-    padChunkSym(messageContext, bodyLength);
-#endif
-
-    /* The total message length */
-    size_t pre_sig_length = (uintptr_t)(messageContext->buf_pos) -
-        (uintptr_t)messageContext->messageBuffer.data;
-    size_t total_length = pre_sig_length;
-    if(channel->securityMode == UA_MESSAGESECURITYMODE_SIGN ||
-       channel->securityMode == UA_MESSAGESECURITYMODE_SIGNANDENCRYPT)
-        total_length += securityPolicy->symmetricModule.cryptoModule.signatureAlgorithm.
-            getLocalSignatureSize(securityPolicy, channel->channelContext);
-    /* Space for the padding and the signature have been reserved in setBufPos() */
-    UA_assert(total_length <= connection->config.sendBufferSize);
-
-    /* For giving the buffer to the network layer */
-    messageContext->messageBuffer.length = total_length;
-
-    UA_assert(res == UA_STATUSCODE_GOOD);
-    res = encodeHeadersSym(messageContext, total_length);
-    if(res != UA_STATUSCODE_GOOD)
-        goto error;
-
-#ifdef UA_ENABLE_ENCRYPTION
-    res = signChunkSym(messageContext, pre_sig_length);
-    if(res != UA_STATUSCODE_GOOD)
-        goto error;
-
-    res = encryptChunkSym(messageContext, total_length);
-    if(res != UA_STATUSCODE_GOOD)
-        goto error;
-#endif
-
-    /* Send the chunk, the buffer is freed in the network layer */
-    return connection->send(channel->connection, &messageContext->messageBuffer);
-
-error:
-    connection->releaseSendBuffer(channel->connection, &messageContext->messageBuffer);
-    return res;
-}
-
-/* Callback from the encoding layer. Send the chunk and replace the buffer. */
-static UA_StatusCode
-sendSymmetricEncodingCallback(void *data, UA_Byte **buf_pos, const UA_Byte **buf_end) {
-    /* Set buf values from encoding in the messagecontext */
-    UA_MessageContext *mc = (UA_MessageContext *)data;
-    mc->buf_pos = *buf_pos;
-    mc->buf_end = *buf_end;
-
-    /* Send out */
-    UA_StatusCode retval = sendSymmetricChunk(mc);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Set a new buffer for the next chunk */
-    UA_Connection *connection = mc->channel->connection;
-    if(!connection)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    retval = connection->getSendBuffer(connection, connection->config.sendBufferSize,
-                                       &mc->messageBuffer);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Hide bytes for header, padding and signature */
-    setBufPos(mc);
-    *buf_pos = mc->buf_pos;
-    *buf_end = mc->buf_end;
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_MessageContext_begin(UA_MessageContext *mc, UA_SecureChannel *channel,
-                        UA_UInt32 requestId, UA_MessageType messageType) {
-    UA_Connection *connection = channel->connection;
-    if(!connection)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    if(messageType != UA_MESSAGETYPE_MSG && messageType != UA_MESSAGETYPE_CLO)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Create the chunking info structure */
-    mc->channel = channel;
-    mc->requestId = requestId;
-    mc->chunksSoFar = 0;
-    mc->messageSizeSoFar = 0;
-    mc->final = false;
-    mc->messageBuffer = UA_BYTESTRING_NULL;
-    mc->messageType = messageType;
-
-    /* Allocate the message buffer */
-    UA_StatusCode retval =
-        connection->getSendBuffer(connection, connection->config.sendBufferSize,
-                                  &mc->messageBuffer);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Hide bytes for header, padding and signature */
-    setBufPos(mc);
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_MessageContext_encode(UA_MessageContext *mc, const void *content,
-                         const UA_DataType *contentType) {
-    UA_StatusCode retval = UA_encodeBinary(content, contentType, &mc->buf_pos, &mc->buf_end,
-                                           sendSymmetricEncodingCallback, mc);
-    if(retval != UA_STATUSCODE_GOOD && mc->messageBuffer.length > 0)
-        UA_MessageContext_abort(mc);
-    return retval;
-}
-
-UA_StatusCode
-UA_MessageContext_finish(UA_MessageContext *mc) {
-    mc->final = true;
-    return sendSymmetricChunk(mc);
-}
-
-void
-UA_MessageContext_abort(UA_MessageContext *mc) {
-    UA_Connection *connection = mc->channel->connection;
-    connection->releaseSendBuffer(connection, &mc->messageBuffer);
-}
-
-UA_StatusCode
-UA_SecureChannel_sendSymmetricMessage(UA_SecureChannel *channel, UA_UInt32 requestId,
-                                      UA_MessageType messageType, void *payload,
-                                      const UA_DataType *payloadType) {
-    if(!channel || !channel->connection || !payload || !payloadType)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    if(channel->connection->state == UA_CONNECTION_CLOSED)
-        return UA_STATUSCODE_BADCONNECTIONCLOSED;
-
-    UA_MessageContext mc;
-    UA_StatusCode retval = UA_MessageContext_begin(&mc, channel, requestId, messageType);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Assert's required for clang-analyzer */
-    UA_assert(mc.buf_pos == &mc.messageBuffer.data[UA_SECURE_MESSAGE_HEADER_LENGTH]);
-    UA_assert(mc.buf_end <= &mc.messageBuffer.data[mc.messageBuffer.length]);
-
-    UA_NodeId typeId = UA_NODEID_NUMERIC(0, payloadType->binaryEncodingId);
-    retval = UA_MessageContext_encode(&mc, &typeId, &UA_TYPES[UA_TYPES_NODEID]);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    retval = UA_MessageContext_encode(&mc, payload, payloadType);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    return UA_MessageContext_finish(&mc);
-}
-
-/*****************************/
-/* Assemble Complete Message */
-/*****************************/
-
-static UA_StatusCode
-addChunkPayload(UA_SecureChannel *channel, UA_UInt32 requestId,
-                UA_MessageType messageType, UA_ByteString *chunkPayload,
-                UA_Boolean final) {
-    UA_Message *latest = TAILQ_LAST(&channel->messages, UA_MessageQueue);
-    if(latest) {
-        if(latest->requestId != requestId) {
-            /* Start of a new message */
-            if(!latest->final)
-                return UA_STATUSCODE_BADTCPMESSAGETYPEINVALID;
-            latest = NULL;
-        } else {
-            if(latest->messageType != messageType) /* MessageType mismatch */
-                return UA_STATUSCODE_BADTCPMESSAGETYPEINVALID;
-            if(latest->final) /* Correct message, but already finalized */
-                return UA_STATUSCODE_BADTCPMESSAGETYPEINVALID;
-        }
-    }
-
-    /* Create a new message entry */
-    if(!latest) {
-        latest = (UA_Message *)UA_malloc(sizeof(UA_Message));
-        if(!latest)
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        memset(latest, 0, sizeof(UA_Message));
-        latest->requestId = requestId;
-        latest->messageType = messageType;
-        SIMPLEQ_INIT(&latest->chunkPayloads);
-        TAILQ_INSERT_TAIL(&channel->messages, latest, pointers);
-    }
-
-    /* Test against the connection settings */
-    const UA_ConnectionConfig *config = &channel->connection->config;
-    UA_assert(config != NULL); /* clang-analyzer false positive */
-
-    if(config->maxChunkCount > 0 &&
-       config->maxChunkCount <= latest->chunkPayloadsSize)
-        return UA_STATUSCODE_BADRESPONSETOOLARGE;
-
-    if(config->maxMessageSize > 0 &&
-       config->maxMessageSize < latest->messageSize + chunkPayload->length)
-        return UA_STATUSCODE_BADRESPONSETOOLARGE;
-
-    /* Create a new chunk entry */
-    UA_ChunkPayload *cp = (UA_ChunkPayload *)UA_malloc(sizeof(UA_ChunkPayload));
-    if(!cp)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    cp->bytes = *chunkPayload;
-    cp->copied = false;
-
-    /* Add the chunk */
-    SIMPLEQ_INSERT_TAIL(&latest->chunkPayloads, cp, pointers);
-    latest->chunkPayloadsSize += 1;
-    latest->messageSize += chunkPayload->length;
-    latest->final = final;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-processMessage(UA_SecureChannel *channel, const UA_Message *message,
-               void *application, UA_ProcessMessageCallback callback) {
-    if(message->chunkPayloadsSize == 1) {
-        /* No need to combine chunks */
-        UA_ChunkPayload *cp = SIMPLEQ_FIRST(&message->chunkPayloads);
-        callback(application, channel, message->messageType, message->requestId, &cp->bytes);
-    } else {
-        /* Allocate memory */
-        UA_ByteString bytes;
-        bytes.data = (UA_Byte *)UA_malloc(message->messageSize);
-        if(!bytes.data) {
-            UA_LOG_ERROR(channel->securityPolicy->logger, UA_LOGCATEGORY_SECURECHANNEL,
-                         "Could not allocate the memory to assemble the message");
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        bytes.length = message->messageSize;
-
-        /* Assemble the full message */
-        size_t curPos = 0;
-        UA_ChunkPayload *cp;
-        SIMPLEQ_FOREACH(cp, &message->chunkPayloads, pointers) {
-            memcpy(&bytes.data[curPos], cp->bytes.data, cp->bytes.length);
-            curPos += cp->bytes.length;
-        }
-
-        /* Process the message */
-        callback(application, channel, message->messageType, message->requestId, &bytes);
-        UA_ByteString_deleteMembers(&bytes);
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_SecureChannel_processCompleteMessages(UA_SecureChannel *channel, void *application,
-                                         UA_ProcessMessageCallback callback) {
-    UA_Message *message, *tmp_message;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    TAILQ_FOREACH_SAFE(message, &channel->messages, pointers, tmp_message) {
-        /* Stop at the first incomplete message */
-        if(!message->final)
-            break;
-
-        /* Has the channel been closed (during the last message)? */
-        if(channel->state == UA_SECURECHANNELSTATE_CLOSED)
-            break;
-
-        /* Remove the current message before processing */
-        TAILQ_REMOVE(&channel->messages, message, pointers);
-
-        /* Process */
-        retval = processMessage(channel, message, application, callback);
-        if(retval != UA_STATUSCODE_GOOD)
-            break;
-
-        /* Clean up the message */
-        UA_ChunkPayload *payload;
-        while((payload = SIMPLEQ_FIRST(&message->chunkPayloads))) {
-            if(payload->copied)
-                UA_ByteString_deleteMembers(&payload->bytes);
-            SIMPLEQ_REMOVE_HEAD(&message->chunkPayloads, pointers);
-            UA_free(payload);
-        }
-        UA_free(message);
-    }
-    return retval;
-}
-
-/****************************/
-/* Process a received Chunk */
-/****************************/
-
-static UA_StatusCode
-decryptChunk(const UA_SecureChannel *const channel,
-             const UA_SecurityPolicyCryptoModule *const cryptoModule,
-             UA_MessageType const messageType, const UA_ByteString *const chunk,
-             size_t const offset, size_t *const chunkSizeAfterDecryption) {
-    UA_LOG_TRACE_CHANNEL(channel->securityPolicy->logger, channel, "Decrypting chunk");
-
-    UA_ByteString cipherText = {chunk->length - offset, chunk->data + offset};
-    size_t sizeBeforeDecryption = cipherText.length;
-    size_t chunkSizeBeforeDecryption = *chunkSizeAfterDecryption;
-
-    /* Always decrypt opn messages if mode not none */
-    if(channel->securityMode == UA_MESSAGESECURITYMODE_SIGNANDENCRYPT ||
-       messageType == UA_MESSAGETYPE_OPN) {
-        UA_StatusCode retval = cryptoModule->encryptionAlgorithm.
-            decrypt(channel->securityPolicy, channel->channelContext, &cipherText);
-        *chunkSizeAfterDecryption -= (sizeBeforeDecryption - cipherText.length);
-        if(retval != UA_STATUSCODE_GOOD) {
-            return retval;
-        }
-    }
-
-    UA_LOG_TRACE_CHANNEL(channel->securityPolicy->logger, channel,
-                         "Chunk size before and after decryption: %lu, %lu",
-                         (long unsigned int)chunkSizeBeforeDecryption,
-                         (long unsigned int)*chunkSizeAfterDecryption);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_UInt16
-decodeChunkPaddingSize(const UA_SecureChannel *const channel,
-                       const UA_SecurityPolicyCryptoModule *const cryptoModule,
-                       UA_MessageType const messageType, const UA_ByteString *const chunk,
-                       size_t const chunkSizeAfterDecryption, size_t sigsize) {
-    /* Is padding used? */
-    if(channel->securityMode != UA_MESSAGESECURITYMODE_SIGNANDENCRYPT &&
-       !(messageType == UA_MESSAGETYPE_OPN && channel->securityMode > UA_MESSAGESECURITYMODE_NONE))
-        return 0;
-
-    size_t paddingSize = chunk->data[chunkSizeAfterDecryption - sigsize - 1];
-
-    /* Extra padding size */
-    size_t keyLength = cryptoModule->encryptionAlgorithm.
-        getRemoteKeyLength(channel->securityPolicy, channel->channelContext);
-    if(keyLength > 2048) {
-        paddingSize <<= 8u;
-        paddingSize += 1;
-        paddingSize += chunk->data[chunkSizeAfterDecryption - sigsize - 2];
-    }
-
-    /* We need to add one to the padding size since the paddingSize byte itself
-     * need to be removed as well. */
-    paddingSize += 1;
-
-    UA_LOG_TRACE_CHANNEL(channel->securityPolicy->logger, channel,
-                         "Calculated padding size to be %lu",
-                         (long unsigned int)paddingSize);
-    return (UA_UInt16)paddingSize;
-}
-
-static UA_StatusCode
-verifyChunk(const UA_SecureChannel *const channel,
-            const UA_SecurityPolicyCryptoModule *const cryptoModule,
-            const UA_ByteString *const chunk,
-            size_t const chunkSizeAfterDecryption, size_t sigsize) {
-    UA_LOG_TRACE_CHANNEL(channel->securityPolicy->logger, channel,
-                         "Verifying chunk signature");
-
-    /* Verify the signature */
-    const UA_ByteString chunkDataToVerify = {chunkSizeAfterDecryption - sigsize, chunk->data};
-    const UA_ByteString signature = {sigsize, chunk->data + chunkSizeAfterDecryption - sigsize};
-    UA_StatusCode retval = cryptoModule->signatureAlgorithm.
-        verify(channel->securityPolicy, channel->channelContext, &chunkDataToVerify, &signature);
-#ifdef UA_ENABLE_UNIT_TEST_FAILURE_HOOKS
-    retval |= decrypt_verifySignatureFailure;
-#endif
-
-    return retval;
-}
-
-/* Sets the payload to a pointer inside the chunk buffer. Returns the requestId
- * and the sequenceNumber */
-static UA_StatusCode
-decryptAndVerifyChunk(const UA_SecureChannel *channel,
-                      const UA_SecurityPolicyCryptoModule *cryptoModule,
-                      UA_MessageType messageType, const UA_ByteString *chunk,
-                      size_t offset, UA_UInt32 *requestId,
-                      UA_UInt32 *sequenceNumber, UA_ByteString *payload) {
-    size_t chunkSizeAfterDecryption = chunk->length;
-    UA_StatusCode retval = decryptChunk(channel, cryptoModule, messageType,
-                                        chunk, offset, &chunkSizeAfterDecryption);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Verify the chunk signature */
-    size_t sigsize = 0;
-    size_t paddingSize = 0;
-    const UA_SecurityPolicy *securityPolicy = channel->securityPolicy;
-    if(channel->securityMode == UA_MESSAGESECURITYMODE_SIGN ||
-       channel->securityMode == UA_MESSAGESECURITYMODE_SIGNANDENCRYPT ||
-       messageType == UA_MESSAGETYPE_OPN) {
-        sigsize = cryptoModule->signatureAlgorithm.
-            getRemoteSignatureSize(securityPolicy, channel->channelContext);
-        paddingSize = decodeChunkPaddingSize(channel, cryptoModule, messageType, chunk,
-                                             chunkSizeAfterDecryption, sigsize);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-
-        if(offset + paddingSize + sigsize >= chunkSizeAfterDecryption)
-            return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-
-        retval = verifyChunk(channel, cryptoModule, chunk, chunkSizeAfterDecryption, sigsize);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-    }
-
-    /* Decode the sequence header */
-    UA_SequenceHeader sequenceHeader;
-    retval = UA_SequenceHeader_decodeBinary(chunk, &offset, &sequenceHeader);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    if(offset + paddingSize + sigsize >= chunk->length)
-        return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-
-    *requestId = sequenceHeader.requestId;
-    *sequenceNumber = sequenceHeader.sequenceNumber;
-    payload->data = chunk->data + offset;
-    payload->length = chunkSizeAfterDecryption - offset - sigsize - paddingSize;
-    UA_LOG_TRACE_CHANNEL(channel->securityPolicy->logger, channel,
-                         "Decrypted and verified chunk with request id %u and "
-                         "sequence number %u", *requestId, *sequenceNumber);
-    return UA_STATUSCODE_GOOD;
-}
-
-typedef UA_StatusCode
-(*UA_SequenceNumberCallback)(UA_SecureChannel *channel, UA_UInt32 sequenceNumber);
-
-static UA_StatusCode
-processSequenceNumberAsym(UA_SecureChannel *channel, UA_UInt32 sequenceNumber) {
-    UA_LOG_TRACE_CHANNEL(channel->securityPolicy->logger, channel,
-                         "Sequence Number processed: %i", sequenceNumber);
-    channel->receiveSequenceNumber = sequenceNumber;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-processSequenceNumberSym(UA_SecureChannel *channel, UA_UInt32 sequenceNumber) {
-    /* Failure mode hook for unit tests */
-#ifdef UA_ENABLE_UNIT_TEST_FAILURE_HOOKS
-    if(processSym_seqNumberFailure != UA_STATUSCODE_GOOD)
-        return processSym_seqNumberFailure;
-#endif
-
-    UA_LOG_TRACE_CHANNEL(channel->securityPolicy->logger, channel,
-                         "Sequence Number processed: %i", sequenceNumber);
-    /* Does the sequence number match? */
-    if(sequenceNumber != channel->receiveSequenceNumber + 1) {
-        /* FIXME: Remove magic numbers :( */
-        if(channel->receiveSequenceNumber + 1 > 4294966271 && sequenceNumber < 1024)
-            channel->receiveSequenceNumber = sequenceNumber - 1; /* Roll over */
-        else
-            return UA_STATUSCODE_BADSECURITYCHECKSFAILED;
-    }
-    ++channel->receiveSequenceNumber;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-checkAsymHeader(UA_SecureChannel *const channel,
-                UA_AsymmetricAlgorithmSecurityHeader *const asymHeader) {
-    const UA_SecurityPolicy *const securityPolicy = channel->securityPolicy;
-
-    if(!UA_ByteString_equal(&securityPolicy->policyUri,
-                            &asymHeader->securityPolicyUri)) {
-        return UA_STATUSCODE_BADSECURITYPOLICYREJECTED;
-    }
-
-    // TODO: Verify certificate using certificate plugin. This will come with a new PR
-    /* Something like this
-    retval = certificateManager->verify(certificateStore??, &asymHeader->senderCertificate);
-    if(retval != UA_STATUSCODE_GOOD)
-    return retval;
-    */
-    UA_StatusCode retval = securityPolicy->asymmetricModule.
-        compareCertificateThumbprint(securityPolicy,
-                                     &asymHeader->receiverCertificateThumbprint);
-    if(retval != UA_STATUSCODE_GOOD) {
-        return retval;
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-checkPreviousToken(UA_SecureChannel *const channel, const UA_UInt32 tokenId) {
-    if(tokenId != channel->previousSecurityToken.tokenId)
-        return UA_STATUSCODE_BADSECURECHANNELTOKENUNKNOWN;
-
-    UA_DateTime timeout = channel->previousSecurityToken.createdAt +
-        (UA_DateTime)((UA_Double)channel->previousSecurityToken.revisedLifetime *
-                      (UA_Double)UA_DATETIME_MSEC * 1.25);
-
-    if(timeout < UA_DateTime_nowMonotonic())
-        return UA_STATUSCODE_BADSECURECHANNELTOKENUNKNOWN;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-checkSymHeader(UA_SecureChannel *const channel,
-               const UA_UInt32 tokenId, UA_Boolean allowPreviousToken) {
-
-    /* If the message uses the currently active token, check if it is still valid */
-    if(tokenId == channel->securityToken.tokenId) {
-        if(channel->state == UA_SECURECHANNELSTATE_OPEN &&
-           (channel->securityToken.createdAt +
-            (channel->securityToken.revisedLifetime * UA_DATETIME_MSEC))
-           < UA_DateTime_nowMonotonic()) {
-            UA_SecureChannel_close(channel);
-            return UA_STATUSCODE_BADSECURECHANNELCLOSED;
-        }
-    }
-
-    /* If the message uses a different token, check if it is the next token. */
-    if(tokenId != channel->securityToken.tokenId) {
-        /* If it isn't the next token, we might be dealing with a message, that
-         * still uses the old token, so check if the old one is still valid.*/
-        if(tokenId != channel->nextSecurityToken.tokenId) {
-            if(allowPreviousToken)
-                return checkPreviousToken(channel, tokenId);
-
-            return UA_STATUSCODE_BADSECURECHANNELTOKENUNKNOWN;
-        }
-        /* If the token is indeed the next token, revolve the tokens */
-        UA_StatusCode retval = UA_SecureChannel_revolveTokens(channel);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-
-        /* If the message now uses the currently active token also generate
-         * new remote keys to correctly decrypt. */
-        if(channel->securityToken.tokenId == tokenId) {
-            retval = UA_SecureChannel_generateRemoteKeys(channel, channel->securityPolicy);
-            UA_ChannelSecurityToken_deleteMembers(&channel->previousSecurityToken);
-            return retval;
-        }
-    }
-
-    /* It is possible that the sent messages already use the new token, but
-     * the received messages still use the old token. If we receive a message
-     * with the new token, we will need to generate the keys and discard the
-     * old token now*/
-    if(channel->previousSecurityToken.tokenId != 0) {
-        UA_StatusCode retval =
-            UA_SecureChannel_generateRemoteKeys(channel, channel->securityPolicy);
-        UA_ChannelSecurityToken_deleteMembers(&channel->previousSecurityToken);
-        return retval;
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-putPayload(UA_SecureChannel *const channel, UA_UInt32 const requestId,
-           UA_MessageType const messageType, UA_ChunkType const chunkType,
-           UA_ByteString *chunkPayload) {
-    switch(chunkType) {
-    case UA_CHUNKTYPE_INTERMEDIATE:
-    case UA_CHUNKTYPE_FINAL:
-        return addChunkPayload(channel, requestId, messageType,
-                               chunkPayload, chunkType == UA_CHUNKTYPE_FINAL);
-    case UA_CHUNKTYPE_ABORT:
-        deleteLatestMessage(channel, requestId);
-        return UA_STATUSCODE_GOOD;
-    default:
-        return UA_STATUSCODE_BADTCPMESSAGETYPEINVALID;
-    }
-}
-
-/* The chunk body begins after the SecureConversationMessageHeader */
-static UA_StatusCode
-decryptAddChunk(UA_SecureChannel *channel, const UA_ByteString *chunk,
-                UA_Boolean allowPreviousToken) {
-    /* Decode the MessageHeader */
-    size_t offset = 0;
-    UA_SecureConversationMessageHeader messageHeader;
-    UA_StatusCode retval =
-        UA_SecureConversationMessageHeader_decodeBinary(chunk, &offset, &messageHeader);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-#if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
-    /* The wrong ChannelId. Non-opened channels have the id zero. */
-    if(messageHeader.secureChannelId != channel->securityToken.channelId &&
-       channel->state != UA_SECURECHANNELSTATE_FRESH)
-        return UA_STATUSCODE_BADSECURECHANNELIDINVALID;
-#endif
-
-    UA_MessageType messageType = (UA_MessageType)
-        (messageHeader.messageHeader.messageTypeAndChunkType & UA_BITMASK_MESSAGETYPE);
-    UA_ChunkType chunkType = (UA_ChunkType)
-        (messageHeader.messageHeader.messageTypeAndChunkType & UA_BITMASK_CHUNKTYPE);
-    UA_UInt32 requestId = 0;
-    UA_UInt32 sequenceNumber = 0;
-    UA_ByteString chunkPayload;
-    const UA_SecurityPolicyCryptoModule *cryptoModule = NULL;
-    UA_SequenceNumberCallback sequenceNumberCallback = NULL;
-
-    switch(messageType) {
-        /* ERR message (not encrypted) */
-    case UA_MESSAGETYPE_ERR:
-        if(chunkType != UA_CHUNKTYPE_FINAL)
-            return UA_STATUSCODE_BADTCPMESSAGETYPEINVALID;
-        chunkPayload.length = chunk->length - offset;
-        chunkPayload.data = chunk->data + offset;
-        return putPayload(channel, requestId, messageType, chunkType, &chunkPayload);
-
-        /* MSG and CLO: Symmetric encryption */
-    case UA_MESSAGETYPE_MSG:
-    case UA_MESSAGETYPE_CLO: {
-        /* Decode and check the symmetric security header (tokenId) */
-        UA_SymmetricAlgorithmSecurityHeader symmetricSecurityHeader;
-        UA_SymmetricAlgorithmSecurityHeader_init(&symmetricSecurityHeader);
-        retval = UA_SymmetricAlgorithmSecurityHeader_decodeBinary(chunk, &offset,
-                                                                  &symmetricSecurityHeader);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-
-#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
-        /* Help fuzzing by always setting the correct tokenId */
-        symmetricSecurityHeader.tokenId = channel->securityToken.tokenId;
-#endif
-
-        retval = checkSymHeader(channel, symmetricSecurityHeader.tokenId, allowPreviousToken);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-
-        cryptoModule = &channel->securityPolicy->symmetricModule.cryptoModule;
-        sequenceNumberCallback = processSequenceNumberSym;
-        break;
-    }
-
-        /* OPN: Asymmetric encryption */
-    case UA_MESSAGETYPE_OPN: {
-        /* Chunking not allowed for OPN */
-        if(chunkType != UA_CHUNKTYPE_FINAL)
-            return UA_STATUSCODE_BADTCPMESSAGETYPEINVALID;
-
-        /* Decode the asymmetric algorithm security header and call the callback
-         * to perform checks. */
-        UA_AsymmetricAlgorithmSecurityHeader asymHeader;
-        UA_AsymmetricAlgorithmSecurityHeader_init(&asymHeader);
-        offset = UA_SECURE_CONVERSATION_MESSAGE_HEADER_LENGTH;
-        retval = UA_AsymmetricAlgorithmSecurityHeader_decodeBinary(chunk, &offset, &asymHeader);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-
-        retval = checkAsymHeader(channel, &asymHeader);
-        UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-
-        cryptoModule = &channel->securityPolicy->asymmetricModule.cryptoModule;
-        sequenceNumberCallback = processSequenceNumberAsym;
-        break;
-    }
-
-        /* Invalid message type */
-    default:return UA_STATUSCODE_BADTCPMESSAGETYPEINVALID;
-    }
-
-    UA_assert(cryptoModule != NULL);
-    retval = decryptAndVerifyChunk(channel, cryptoModule, messageType, chunk, offset,
-                                   &requestId, &sequenceNumber, &chunkPayload);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Check the sequence number. Skip sequence number checking for fuzzer to
-     * improve coverage */
-    if(sequenceNumberCallback == NULL)
-        return UA_STATUSCODE_BADINTERNALERROR;
-#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
-    retval = UA_STATUSCODE_GOOD;
-#else
-    retval = sequenceNumberCallback(channel, sequenceNumber);
-#endif
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    return putPayload(channel, requestId, messageType, chunkType, &chunkPayload);
-}
-
-UA_StatusCode
-UA_SecureChannel_decryptAddChunk(UA_SecureChannel *channel, const UA_ByteString *chunk,
-                                 UA_Boolean allowPreviousToken) {
-    /* Has the SecureChannel timed out? */
-    if(channel->state == UA_SECURECHANNELSTATE_CLOSED)
-        return UA_STATUSCODE_BADSECURECHANNELCLOSED;
-
-    /* Is the SecureChannel configured? */
-    if(!channel->connection)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_StatusCode retval = decryptAddChunk(channel, chunk, allowPreviousToken);
-    if(retval != UA_STATUSCODE_GOOD)
-        UA_SecureChannel_close(channel);
-
-    return retval;
-}
-
-UA_StatusCode
-UA_SecureChannel_persistIncompleteMessages(UA_SecureChannel *channel) {
-    UA_Message *me;
-    TAILQ_FOREACH(me, &channel->messages, pointers) {
-        UA_ChunkPayload *cp;
-        SIMPLEQ_FOREACH(cp, &me->chunkPayloads, pointers) {
-            if(cp->copied)
-                continue;
-            UA_ByteString copy;
-            UA_StatusCode retval = UA_ByteString_copy(&cp->bytes, &copy);
-            if(retval != UA_STATUSCODE_GOOD) {
-                UA_SecureChannel_close(channel);
-                return retval;
-            }
-            cp->bytes = copy;
-            cp->copied = true;
-        }
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Functionality used by both the SecureChannel and the SecurityPolicy */
-
-size_t
-UA_SecurityPolicy_getRemoteAsymEncryptionBufferLengthOverhead(const UA_SecurityPolicy *securityPolicy,
-                                                              const void *channelContext,
-                                                              size_t maxEncryptionLength) {
-    if(maxEncryptionLength == 0)
-        return 0;
-
-    size_t plainTextBlockSize = securityPolicy->asymmetricModule.cryptoModule.
-        encryptionAlgorithm.getRemotePlainTextBlockSize(securityPolicy, channelContext);
-    size_t encryptedBlockSize = securityPolicy->asymmetricModule.cryptoModule.
-        encryptionAlgorithm.getRemoteBlockSize(securityPolicy, channelContext);
-    if(plainTextBlockSize == 0)
-        return 0;
-
-    size_t maxNumberOfBlocks = maxEncryptionLength / plainTextBlockSize;
-    return maxNumberOfBlocks * (encryptedBlockSize - plainTextBlockSize);
-}
diff --git a/ext/open62541/src/ua_securechannel.h b/ext/open62541/src/ua_securechannel.h
deleted file mode 100644
index 48cc9f1..0000000
--- a/ext/open62541/src/ua_securechannel.h
+++ /dev/null
@@ -1,297 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Florian Palm
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
- */
-
-#ifndef UA_SECURECHANNEL_H_
-#define UA_SECURECHANNEL_H_
-
-#include <open62541/plugin/log.h>
-#include <open62541/plugin/securitypolicy.h>
-#include <open62541/transport_generated.h>
-#include <open62541/types.h>
-
-#include "open62541_queue.h"
-#include "ua_connection_internal.h"
-
-_UA_BEGIN_DECLS
-
-#define UA_SECURE_CONVERSATION_MESSAGE_HEADER_LENGTH 12
-#define UA_SECURE_MESSAGE_HEADER_LENGTH 24
-
-/* Thread-local variables to force failure modes during testing */
-#ifdef UA_ENABLE_UNIT_TEST_FAILURE_HOOKS
-extern UA_StatusCode decrypt_verifySignatureFailure;
-extern UA_StatusCode sendAsym_sendFailure;
-extern UA_StatusCode processSym_seqNumberFailure;
-#endif
-
-/* The Session implementation differs between client and server. Still, it is
- * expected that the Session structure begins with the SessionHeader. This is
- * the interface that will be used by the SecureChannel. The lifecycle of
- * Sessions is independent of the underlying SecureChannel. But every Session
- * can be attached to only one SecureChannel. */
-typedef struct UA_SessionHeader {
-    LIST_ENTRY(UA_SessionHeader) pointers;
-    UA_NodeId authenticationToken;
-    UA_SecureChannel *channel; /* The pointer back to the SecureChannel in the session. */
-} UA_SessionHeader;
-
-/* For chunked requests */
-typedef struct UA_ChunkPayload {
-    SIMPLEQ_ENTRY(UA_ChunkPayload) pointers;
-    UA_ByteString bytes;
-    UA_Boolean copied; /* Do the bytes point to a buffer from the network or was
-                          memory allocated for the chunk separately */
-} UA_ChunkPayload;
-
-/* Receieved messages. Process them only in order. The Chunk payload has all
- * headers and the padding stripped out. The payload begins at the
- * ExtensionObject prefix.*/
-typedef struct UA_Message {
-    TAILQ_ENTRY(UA_Message) pointers;
-    UA_UInt32 requestId;
-    UA_MessageType messageType;
-    SIMPLEQ_HEAD(pp, UA_ChunkPayload) chunkPayloads;
-    size_t chunkPayloadsSize; /* No of chunks received so far */
-    size_t messageSize; /* Total length of the chunks received so far */
-    UA_Boolean final; /* All chunks for the message have been received */
-} UA_Message;
-
-typedef enum {
-    UA_SECURECHANNELSTATE_FRESH,
-    UA_SECURECHANNELSTATE_OPEN,
-    UA_SECURECHANNELSTATE_CLOSED
-} UA_SecureChannelState;
-
-typedef TAILQ_HEAD(UA_MessageQueue, UA_Message) UA_MessageQueue;
-
-struct UA_SecureChannel {
-    UA_SecureChannelState   state;
-    UA_MessageSecurityMode  securityMode;
-    /* We use three tokens because when switching tokens the client is allowed to accept
-     * messages with the old token for up to 25% of the lifetime after the token would have timed out.
-     * For messages that are sent, the new token is already used, which is contained in the securityToken
-     * variable. The nextSecurityToken variable holds a newly issued token, that will be automatically
-     * revolved into the securityToken variable. This could be done with two variables, but would require
-     * greater changes to the current code. This could be done in the future after the client and networking
-     * structure has been reworked, which would make this easier to implement. */
-    UA_ChannelSecurityToken securityToken; /* the channelId is contained in the securityToken */
-    UA_ChannelSecurityToken nextSecurityToken;
-    UA_ChannelSecurityToken previousSecurityToken;
-
-    /* The endpoint and context of the channel */
-    const UA_SecurityPolicy *securityPolicy;
-    void *channelContext; /* For interaction with the security policy */
-    UA_Connection *connection;
-
-    /* Asymmetric encryption info */
-    UA_ByteString remoteCertificate;
-    UA_Byte remoteCertificateThumbprint[20]; /* The thumbprint of the remote certificate */
-
-    /* Symmetric encryption info */
-    UA_ByteString remoteNonce;
-    UA_ByteString localNonce;
-
-    UA_UInt32 receiveSequenceNumber;
-    UA_UInt32 sendSequenceNumber;
-
-    LIST_HEAD(, UA_SessionHeader) sessions;
-    UA_MessageQueue messages;
-};
-
-void UA_SecureChannel_init(UA_SecureChannel *channel);
-
-void UA_SecureChannel_close(UA_SecureChannel *channel);
-
-UA_StatusCode
-UA_SecureChannel_setSecurityPolicy(UA_SecureChannel *channel,
-                                   const UA_SecurityPolicy *securityPolicy,
-                                   const UA_ByteString *remoteCertificate);
-
-/* Remove (partially) received unprocessed messages */
-void UA_SecureChannel_deleteMessages(UA_SecureChannel *channel);
-
-void UA_SecureChannel_deleteMembers(UA_SecureChannel *channel);
-
-/* Generates new keys and sets them in the channel context */
-UA_StatusCode
-UA_SecureChannel_generateNewKeys(UA_SecureChannel* channel);
-
-/* Wrapper function for generating a local nonce for the supplied channel. Uses
- * the random generator of the channels security policy to allocate and generate
- * a nonce with the specified length. */
-UA_StatusCode
-UA_SecureChannel_generateLocalNonce(UA_SecureChannel *channel);
-
-UA_SessionHeader *
-UA_SecureChannel_getSession(UA_SecureChannel *channel,
-                            const UA_NodeId *authenticationToken);
-
-UA_StatusCode
-UA_SecureChannel_revolveTokens(UA_SecureChannel *channel);
-
-/**
- * Sending Messages
- * ---------------- */
-
-UA_StatusCode
-UA_SecureChannel_sendAsymmetricOPNMessage(UA_SecureChannel *channel, UA_UInt32 requestId,
-                                          const void *content, const UA_DataType *contentType);
-
-UA_StatusCode
-UA_SecureChannel_sendSymmetricMessage(UA_SecureChannel *channel, UA_UInt32 requestId,
-                                      UA_MessageType messageType, void *payload,
-                                      const UA_DataType *payloadType);
-
-/* The MessageContext is forwarded into the encoding layer so that we can send
- * chunks before continuing to encode. This lets us reuse a fixed chunk-sized
- * messages buffer. */
-typedef struct {
-    UA_SecureChannel *channel;
-    UA_UInt32 requestId;
-    UA_UInt32 messageType;
-
-    UA_UInt16 chunksSoFar;
-    size_t messageSizeSoFar;
-
-    UA_ByteString messageBuffer;
-    UA_Byte *buf_pos;
-    const UA_Byte *buf_end;
-
-    UA_Boolean final;
-} UA_MessageContext;
-
-/* Start the context of a new symmetric message. */
-UA_StatusCode
-UA_MessageContext_begin(UA_MessageContext *mc, UA_SecureChannel *channel,
-                        UA_UInt32 requestId, UA_MessageType messageType);
-
-/* Encode the content and send out full chunks. If the return code is good, then
- * the ChunkInfo contains encoded content that has not been sent. If the return
- * code is bad, then the ChunkInfo has been cleaned up internally. */
-UA_StatusCode
-UA_MessageContext_encode(UA_MessageContext *mc, const void *content,
-                         const UA_DataType *contentType);
-
-/* Sends a symmetric message already encoded in the context. The context is
- * cleaned up, also in case of errors. */
-UA_StatusCode
-UA_MessageContext_finish(UA_MessageContext *mc);
-
-/* To be used when a failure occures when a MessageContext is open. Note that
- * the _encode and _finish methods will clean up internally. _abort can be run
- * on a MessageContext that has already been cleaned up before. */
-void
-UA_MessageContext_abort(UA_MessageContext *mc);
-
-/**
- * Receive Message
- * --------------- */
-
-/* Decrypt a chunk and add it to the message. Create a new message if necessary. */
-UA_StatusCode
-UA_SecureChannel_decryptAddChunk(UA_SecureChannel *channel, const UA_ByteString *chunk,
-                                 UA_Boolean allowPreviousToken);
-
-/* The network buffer is about to be cleared. Copy all chunks that point into
- * the network buffer into dedicated memory. */
-UA_StatusCode
-UA_SecureChannel_persistIncompleteMessages(UA_SecureChannel *channel);
-
-typedef void
-(UA_ProcessMessageCallback)(void *application, UA_SecureChannel *channel,
-                            UA_MessageType messageType, UA_UInt32 requestId,
-                            const UA_ByteString *message);
-
-/* Process received complete messages in-order. The callback function is called
- * with the complete message body if the message is complete. The message is
- * removed afterwards.
- *
- * Symmetric callback is ERR, MSG, CLO only
- * Asymmetric callback is OPN only
- *
- * @param channel the channel the chunks were received on.
- * @param application data pointer to application specific data that gets passed
- *                    on to the callback function.
- * @param callback the callback function that gets called with the complete
- *                 message body, once a final chunk is processed.
- * @return Returns if an irrecoverable error occured. Maybe close the channel. */
-UA_StatusCode
-UA_SecureChannel_processCompleteMessages(UA_SecureChannel *channel, void *application,
-                                         UA_ProcessMessageCallback callback);
-
-/**
- * Log Helper
- * ----------
- * C99 requires at least one element for the variadic argument. If the log
- * statement has no variable arguments, supply an additional NULL. It will be
- * ignored by printf.
- *
- * We have to jump through some hoops to enable the use of format strings
- * without arguments since (pedantic) C99 does not allow variadic macros with
- * zero arguments. So we add a dummy argument that is not printed (%.0s is
- * string of length zero). */
-
-#define UA_LOG_TRACE_CHANNEL_INTERNAL(LOGGER, CHANNEL, MSG, ...)              \
-    UA_LOG_TRACE(LOGGER, UA_LOGCATEGORY_SECURECHANNEL,                        \
-                 "Connection %i | SecureChannel %i | " MSG "%.0s",            \
-                 ((CHANNEL)->connection ? (int)((CHANNEL)->connection->sockfd) : 0), \
-                 (CHANNEL)->securityToken.channelId, __VA_ARGS__)
-
-#define UA_LOG_TRACE_CHANNEL(LOGGER, CHANNEL, ...)        \
-    UA_MACRO_EXPAND(UA_LOG_TRACE_CHANNEL_INTERNAL(LOGGER, CHANNEL, __VA_ARGS__, ""))
-
-#define UA_LOG_DEBUG_CHANNEL_INTERNAL(LOGGER, CHANNEL, MSG, ...)              \
-    UA_LOG_DEBUG(LOGGER, UA_LOGCATEGORY_SECURECHANNEL,                        \
-                 "Connection %i | SecureChannel %i | " MSG "%.0s",            \
-                 ((CHANNEL)->connection ? (int)((CHANNEL)->connection->sockfd) : 0), \
-                 (CHANNEL)->securityToken.channelId, __VA_ARGS__)
-
-#define UA_LOG_DEBUG_CHANNEL(LOGGER, CHANNEL, ...)        \
-    UA_MACRO_EXPAND(UA_LOG_DEBUG_CHANNEL_INTERNAL(LOGGER, CHANNEL, __VA_ARGS__, ""))
-
-#define UA_LOG_INFO_CHANNEL_INTERNAL(LOGGER, CHANNEL, MSG, ...)               \
-    UA_LOG_INFO(LOGGER, UA_LOGCATEGORY_SECURECHANNEL,                         \
-                 "Connection %i | SecureChannel %i | " MSG "%.0s",            \
-                 ((CHANNEL)->connection ? (int)((CHANNEL)->connection->sockfd) : 0), \
-                 (CHANNEL)->securityToken.channelId, __VA_ARGS__)
-
-#define UA_LOG_INFO_CHANNEL(LOGGER, CHANNEL, ...)        \
-    UA_MACRO_EXPAND(UA_LOG_INFO_CHANNEL_INTERNAL(LOGGER, CHANNEL, __VA_ARGS__, ""))
-
-#define UA_LOG_WARNING_CHANNEL_INTERNAL(LOGGER, CHANNEL, MSG, ...)            \
-    UA_LOG_WARNING(LOGGER, UA_LOGCATEGORY_SECURECHANNEL,                      \
-                 "Connection %i | SecureChannel %i | " MSG "%.0s",            \
-                 ((CHANNEL)->connection ? (int)((CHANNEL)->connection->sockfd) : 0), \
-                 (CHANNEL)->securityToken.channelId, __VA_ARGS__)
-
-#define UA_LOG_WARNING_CHANNEL(LOGGER, CHANNEL, ...)        \
-    UA_MACRO_EXPAND(UA_LOG_WARNING_CHANNEL_INTERNAL(LOGGER, CHANNEL, __VA_ARGS__, ""))
-
-#define UA_LOG_ERROR_CHANNEL_INTERNAL(LOGGER, CHANNEL, MSG, ...)              \
-    UA_LOG_ERROR(LOGGER, UA_LOGCATEGORY_SECURECHANNEL,                        \
-                 "Connection %i | SecureChannel %i | " MSG "%.0s",            \
-                 ((CHANNEL)->connection ? (int)((CHANNEL)->connection->sockfd) : 0), \
-                 (CHANNEL)->securityToken.channelId, __VA_ARGS__)
-
-#define UA_LOG_ERROR_CHANNEL(LOGGER, CHANNEL, ...)        \
-    UA_MACRO_EXPAND(UA_LOG_ERROR_CHANNEL_INTERNAL(LOGGER, CHANNEL, __VA_ARGS__, ""))
-
-#define UA_LOG_FATAL_CHANNEL_INTERNAL(LOGGER, CHANNEL, MSG, ...)              \
-    UA_LOG_FATAL(LOGGER, UA_LOGCATEGORY_SECURECHANNEL,                        \
-                 "Connection %i | SecureChannel %i | " MSG "%.0s",            \
-                 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \
-                 (CHANNEL)->securityToken.channelId, __VA_ARGS__)
-
-#define UA_LOG_FATAL_CHANNEL(LOGGER, CHANNEL, ...)        \
-    UA_MACRO_EXPAND(UA_LOG_FATAL_CHANNEL_INTERNAL(LOGGER, CHANNEL, __VA_ARGS__, ""))
-
-_UA_END_DECLS
-
-#endif /* UA_SECURECHANNEL_H_ */
diff --git a/ext/open62541/src/ua_timer.c b/ext/open62541/src/ua_timer.c
deleted file mode 100644
index 2956ddc..0000000
--- a/ext/open62541/src/ua_timer.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2017, 2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#include "ua_util_internal.h"
-#include "ua_timer.h"
-
-struct UA_TimerEntry {
-    ZIP_ENTRY(UA_TimerEntry) zipfields;
-    UA_DateTime nextTime;                    /* The next time when the callback
-                                              * is to be executed */
-    UA_UInt64 interval;                      /* Interval in 100ns resolution */
-    UA_Boolean repeated;                     /* Repeated callback? */
-
-    UA_ApplicationCallback callback;
-    void *application;
-    void *data;
-
-    ZIP_ENTRY(UA_TimerEntry) idZipfields;
-    UA_UInt64 id;                            /* Id of the entry */
-};
-
-/* There may be several entries with the same nextTime in the tree. We give them
- * an absolute order by considering the memory address to break ties. Because of
- * this, the nextTime property cannot be used to lookup specific entries. */
-static enum ZIP_CMP
-cmpDateTime(const UA_DateTime *a, const UA_DateTime *b) {
-    if(*a < *b)
-        return ZIP_CMP_LESS;
-    if(*a > *b)
-        return ZIP_CMP_MORE;
-    if(a == b)
-        return ZIP_CMP_EQ;
-    if(a < b)
-        return ZIP_CMP_LESS;
-    return ZIP_CMP_MORE;
-}
-
-ZIP_PROTTYPE(UA_TimerZip, UA_TimerEntry, UA_DateTime)
-ZIP_IMPL(UA_TimerZip, UA_TimerEntry, zipfields, UA_DateTime, nextTime, cmpDateTime)
-
-/* The identifiers of entries are unique */
-static enum ZIP_CMP
-cmpId(const UA_UInt64 *a, const UA_UInt64 *b) {
-    if(*a < *b)
-        return ZIP_CMP_LESS;
-    if(*a == *b)
-        return ZIP_CMP_EQ;
-    return ZIP_CMP_MORE;
-}
-
-ZIP_PROTTYPE(UA_TimerIdZip, UA_TimerEntry, UA_UInt64)
-ZIP_IMPL(UA_TimerIdZip, UA_TimerEntry, idZipfields, UA_UInt64, id, cmpId)
-
-void
-UA_Timer_init(UA_Timer *t) {
-    memset(t, 0, sizeof(UA_Timer));
-}
-
-static UA_StatusCode
-addCallback(UA_Timer *t, UA_ApplicationCallback callback, void *application, void *data,
-            UA_DateTime nextTime, UA_UInt64 interval, UA_Boolean repeated,
-            UA_UInt64 *callbackId) {
-    /* A callback method needs to be present */
-    if(!callback)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Allocate the repeated callback structure */
-    UA_TimerEntry *te = (UA_TimerEntry*)UA_malloc(sizeof(UA_TimerEntry));
-    if(!te)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    /* Set the repeated callback */
-    te->interval = (UA_UInt64)interval;
-    te->id = ++t->idCounter;
-    te->callback = callback;
-    te->application = application;
-    te->data = data;
-    te->repeated = repeated;
-    te->nextTime = nextTime;
-
-    /* Set the output identifier */
-    if(callbackId)
-        *callbackId = te->id;
-
-    ZIP_INSERT(UA_TimerZip, &t->root, te, ZIP_FFS32(UA_UInt32_random()));
-    ZIP_INSERT(UA_TimerIdZip, &t->idRoot, te, ZIP_RANK(te, zipfields));
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_Timer_addTimedCallback(UA_Timer *t, UA_ApplicationCallback callback,
-                          void *application, void *data, UA_DateTime date,
-                          UA_UInt64 *callbackId) {
-    return addCallback(t, callback, application, data, date, 0, false, callbackId);
-}
-
-/* Adding repeated callbacks: Add an entry with the "nextTime" timestamp in the
- * future. This will be picked up in the next iteration and inserted at the
- * correct place. So that the next execution takes place ät "nextTime". */
-UA_StatusCode
-UA_Timer_addRepeatedCallback(UA_Timer *t, UA_ApplicationCallback callback,
-                             void *application, void *data, UA_Double interval_ms,
-                             UA_UInt64 *callbackId) {
-    /* The interval needs to be positive */
-    if(interval_ms <= 0.0)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    UA_UInt64 interval = (UA_UInt64)(interval_ms * UA_DATETIME_MSEC);
-    UA_DateTime nextTime = UA_DateTime_nowMonotonic() + (UA_DateTime)interval;
-    return addCallback(t, callback, application, data, nextTime,
-                       interval, true, callbackId);
-}
-
-UA_StatusCode
-UA_Timer_changeRepeatedCallbackInterval(UA_Timer *t, UA_UInt64 callbackId,
-                                        UA_Double interval_ms) {
-    /* The interval needs to be positive */
-    if(interval_ms <= 0.0)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Remove from the sorted list */
-    UA_TimerEntry *te = ZIP_FIND(UA_TimerIdZip, &t->idRoot, &callbackId);
-    if(!te)
-        return UA_STATUSCODE_BADNOTFOUND;
-
-    /* Set the repeated callback */
-    ZIP_REMOVE(UA_TimerZip, &t->root, te);
-    te->interval = (UA_UInt64)(interval_ms * UA_DATETIME_MSEC); /* in 100ns resolution */
-    te->nextTime = UA_DateTime_nowMonotonic() + (UA_DateTime)te->interval;
-    ZIP_INSERT(UA_TimerZip, &t->root, te, ZIP_RANK(te, zipfields));
-    return UA_STATUSCODE_GOOD;
-}
-
-void
-UA_Timer_removeCallback(UA_Timer *t, UA_UInt64 callbackId) {
-    UA_TimerEntry *te = ZIP_FIND(UA_TimerIdZip, &t->idRoot, &callbackId);
-    if(!te)
-        return;
-
-    ZIP_REMOVE(UA_TimerZip, &t->root, te);
-    ZIP_REMOVE(UA_TimerIdZip, &t->idRoot, te);
-    UA_free(te);
-}
-
-UA_DateTime
-UA_Timer_process(UA_Timer *t, UA_DateTime nowMonotonic,
-                 UA_TimerExecutionCallback executionCallback,
-                 void *executionApplication) {
-    UA_TimerEntry *first;
-    while((first = ZIP_MIN(UA_TimerZip, &t->root)) &&
-          first->nextTime <= nowMonotonic) {
-        ZIP_REMOVE(UA_TimerZip, &t->root, first);
-
-        /* Reinsert / remove to their new position first. Because the callback
-         * can interact with the zip tree and expects the same entries in the
-         * root and idRoot trees. */
-
-        if(!first->repeated) {
-            ZIP_REMOVE(UA_TimerIdZip, &t->idRoot, first);
-            executionCallback(executionApplication, first->callback,
-                              first->application, first->data);
-            UA_free(first);
-            continue;
-        }
-
-        /* Set the time for the next execution. Prevent an infinite loop by
-         * forcing the next processing into the next iteration. */
-        first->nextTime += (UA_Int64)first->interval;
-        if(first->nextTime < nowMonotonic)
-            first->nextTime = nowMonotonic + 1;
-        ZIP_INSERT(UA_TimerZip, &t->root, first, ZIP_RANK(first, zipfields));
-        executionCallback(executionApplication, first->callback,
-                          first->application, first->data);
-    }
-
-    /* Return the timestamp of the earliest next callback */
-    first = ZIP_MIN(UA_TimerZip, &t->root);
-    return (first) ? first->nextTime : UA_INT64_MAX;
-}
-
-static void
-freeEntry(UA_TimerEntry *te, void *data) {
-    UA_free(te);
-}
-
-void
-UA_Timer_deleteMembers(UA_Timer *t) {
-    /* Free all nodes and reset the root */
-    ZIP_ITER(UA_TimerZip, &t->root, freeEntry, NULL);
-    ZIP_INIT(&t->root);
-}
diff --git a/ext/open62541/src/ua_timer.h b/ext/open62541/src/ua_timer.h
deleted file mode 100644
index 2204051..0000000
--- a/ext/open62541/src/ua_timer.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2017, 2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifndef UA_TIMER_H_
-#define UA_TIMER_H_
-
-#include "ua_util_internal.h"
-#include "ua_workqueue.h"
-#include "ziptree.h"
-
-_UA_BEGIN_DECLS
-
-struct UA_TimerEntry;
-typedef struct UA_TimerEntry UA_TimerEntry;
-
-ZIP_HEAD(UA_TimerZip, UA_TimerEntry);
-typedef struct UA_TimerZip UA_TimerZip;
-
-ZIP_HEAD(UA_TimerIdZip, UA_TimerEntry);
-typedef struct UA_TimerIdZip UA_TimerIdZip;
-
-/* Only for a single thread. Protect by a mutex if required. */
-typedef struct {
-    UA_TimerZip root; /* The root of the time-sorted zip tree */
-    UA_TimerIdZip idRoot; /* The root of the id-sorted zip tree */
-    UA_UInt64 idCounter;
-} UA_Timer;
-
-void UA_Timer_init(UA_Timer *t);
-
-UA_StatusCode
-UA_Timer_addTimedCallback(UA_Timer *t, UA_ApplicationCallback callback,
-                          void *application, void *data, UA_DateTime date,
-                          UA_UInt64 *callbackId);
-
-UA_StatusCode
-UA_Timer_addRepeatedCallback(UA_Timer *t, UA_ApplicationCallback callback,
-                             void *application, void *data, UA_Double interval_ms,
-                             UA_UInt64 *callbackId);
-
-/* Change the callback interval. If this is called from within the callback. The
- * adjustment is made during the next _process call. */
-UA_StatusCode
-UA_Timer_changeRepeatedCallbackInterval(UA_Timer *t, UA_UInt64 callbackId,
-                                        UA_Double interval_ms);
-
-void
-UA_Timer_removeCallback(UA_Timer *t, UA_UInt64 callbackId);
-
-/* Process (dispatch) the repeated callbacks that have timed out. Returns the
- * timestamp of the next scheduled repeated callback. Not thread-safe.
- * Application is a pointer to the client / server environment for the callback.
- * Dispatched is set to true when at least one callback was run / dispatched. */
-typedef void
-(*UA_TimerExecutionCallback)(void *executionApplication, UA_ApplicationCallback cb,
-                             void *callbackApplication, void *data);
-
-UA_DateTime
-UA_Timer_process(UA_Timer *t, UA_DateTime nowMonotonic,
-                 UA_TimerExecutionCallback executionCallback,
-                 void *executionApplication);
-
-void UA_Timer_deleteMembers(UA_Timer *t);
-
-_UA_END_DECLS
-
-#endif /* UA_TIMER_H_ */
diff --git a/ext/open62541/src/ua_types.c b/ext/open62541/src/ua_types.c
deleted file mode 100644
index 08e32cd..0000000
--- a/ext/open62541/src/ua_types.c
+++ /dev/null
@@ -1,1264 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014, 2016-2017 (c) Florian Palm
- *    Copyright 2014-2016 (c) Sten Grüner
- *    Copyright 2014 (c) Leon Urbas
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015 (c) Markus Graube
- *    Copyright 2015 (c) Reza Ebrahimi
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2016 (c) Lorenz Haas
- */
-
-#include <open62541/types.h>
-#include <open62541/types_generated.h>
-#include <open62541/types_generated_handling.h>
-
-#include "ua_util_internal.h"
-
-#include "libc_time.h"
-#include "pcg_basic.h"
-
-/* Datatype Handling
- * -----------------
- * This file contains handling functions for the builtin types and functions
- * handling of structured types and arrays. These need type descriptions in a
- * UA_DataType structure. The UA_DataType structures as well as all non-builtin
- * datatypes are autogenerated. */
-
-/* Global definition of NULL type instances. These are always zeroed out, as
- * mandated by the C/C++ standard for global values with no initializer. */
-const UA_String UA_STRING_NULL = {0, NULL};
-const UA_ByteString UA_BYTESTRING_NULL = {0, NULL};
-const UA_Guid UA_GUID_NULL = {0, 0, 0, {0,0,0,0,0,0,0,0}};
-const UA_NodeId UA_NODEID_NULL = {0, UA_NODEIDTYPE_NUMERIC, {0}};
-const UA_ExpandedNodeId UA_EXPANDEDNODEID_NULL = {{0, UA_NODEIDTYPE_NUMERIC, {0}}, {0, NULL}, 0};
-
-typedef UA_StatusCode (*UA_copySignature)(const void *src, void *dst,
-                                          const UA_DataType *type);
-typedef void (*UA_clearSignature)(void *p, const UA_DataType *type);
-
-extern const UA_copySignature copyJumpTable[UA_DATATYPEKINDS];
-extern const UA_clearSignature clearJumpTable[UA_DATATYPEKINDS];
-
-/* TODO: The standard-defined types are ordered. See if binary search is
- * more efficient. */
-const UA_DataType *
-UA_findDataType(const UA_NodeId *typeId) {
-    if(typeId->identifierType != UA_NODEIDTYPE_NUMERIC)
-        return NULL;
-
-    /* Always look in built-in types first
-     * (may contain data types from all namespaces) */
-    for(size_t i = 0; i < UA_TYPES_COUNT; ++i) {
-        if(UA_TYPES[i].typeId.identifier.numeric == typeId->identifier.numeric
-           && UA_TYPES[i].typeId.namespaceIndex == typeId->namespaceIndex)
-            return &UA_TYPES[i];
-    }
-
-    /* TODO When other namespace look in custom types, too, requires access to custom types array here! */
-    /*if(typeId->namespaceIndex != 0) {
-        size_t customTypesArraySize;
-        const UA_DataType *customTypesArray;
-        UA_getCustomTypes(&customTypesArraySize, &customTypesArray);
-        for(size_t i = 0; i < customTypesArraySize; ++i) {
-            if(customTypesArray[i].typeId.identifier.numeric == typeId->identifier.numeric
-               && customTypesArray[i].typeId.namespaceIndex == typeId->namespaceIndex)
-                return &customTypesArray[i];
-        }
-    }*/
-
-    return NULL;
-}
-
-/***************************/
-/* Random Number Generator */
-/***************************/
-
-//TODO is this safe for multithreading?
-static pcg32_random_t UA_rng = PCG32_INITIALIZER;
-
-void
-UA_random_seed(u64 seed) {
-    pcg32_srandom_r(&UA_rng, seed, (u64)UA_DateTime_now());
-}
-
-u32
-UA_UInt32_random(void) {
-    return (u32)pcg32_random_r(&UA_rng);
-}
-
-/*****************/
-/* Builtin Types */
-/*****************/
-
-UA_String
-UA_String_fromChars(const char *src) {
-    UA_String s; s.length = 0; s.data = NULL;
-    if(!src)
-        return s;
-    s.length = strlen(src);
-    if(s.length > 0) {
-        s.data = (u8*)UA_malloc(s.length);
-        if(!s.data) {
-            s.length = 0;
-            return s;
-        }
-        memcpy(s.data, src, s.length);
-    } else {
-        s.data = (u8*)UA_EMPTY_ARRAY_SENTINEL;
-    }
-    return s;
-}
-
-UA_Boolean
-UA_String_equal(const UA_String *s1, const UA_String *s2) {
-    if(s1->length != s2->length)
-        return false;
-    if(s1->length == 0)
-        return true;
-    i32 is = memcmp((char const*)s1->data,
-                    (char const*)s2->data, s1->length);
-    return (is == 0) ? true : false;
-}
-
-static UA_StatusCode
-String_copy(UA_String const *src, UA_String *dst, const UA_DataType *_) {
-    UA_StatusCode retval = UA_Array_copy(src->data, src->length, (void**)&dst->data,
-                                         &UA_TYPES[UA_TYPES_BYTE]);
-    if(retval == UA_STATUSCODE_GOOD)
-        dst->length = src->length;
-    return retval;
-}
-
-static void
-String_clear(UA_String *s, const UA_DataType *_) {
-    UA_Array_delete(s->data, s->length, &UA_TYPES[UA_TYPES_BYTE]);
-}
-
-/* QualifiedName */
-static UA_StatusCode
-QualifiedName_copy(const UA_QualifiedName *src, UA_QualifiedName *dst, const UA_DataType *_) {
-    dst->namespaceIndex = src->namespaceIndex;
-    return String_copy(&src->name, &dst->name, NULL);
-}
-
-static void
-QualifiedName_clear(UA_QualifiedName *p, const UA_DataType *_) {
-    String_clear(&p->name, NULL);
-}
-
-UA_Boolean
-UA_QualifiedName_equal(const UA_QualifiedName *qn1,
-                       const UA_QualifiedName *qn2) {
-    if(qn1 == NULL || qn2 == NULL)
-        return false;
-    if(qn1->namespaceIndex != qn2->namespaceIndex)
-        return false;
-    if(qn1->name.length != qn2->name.length)
-        return false;
-    return (memcmp((char const*)qn1->name.data,
-                   (char const*)qn2->name.data, qn1->name.length) == 0);
-}
-
-/* DateTime */
-UA_DateTimeStruct
-UA_DateTime_toStruct(UA_DateTime t) {
-    /* Calculating the the milli-, micro- and nanoseconds */
-    UA_DateTimeStruct dateTimeStruct;
-    dateTimeStruct.nanoSec  = (u16)((t % 10) * 100);
-    dateTimeStruct.microSec = (u16)((t % 10000) / 10);
-    dateTimeStruct.milliSec = (u16)((t % 10000000) / 10000);
-
-    /* Calculating the unix time with #include <time.h> */
-    long long secSinceUnixEpoch = (long long)
-        ((t - UA_DATETIME_UNIX_EPOCH) / UA_DATETIME_SEC);
-    struct mytm ts;
-    memset(&ts, 0, sizeof(struct mytm));
-    __secs_to_tm(secSinceUnixEpoch, &ts);
-    dateTimeStruct.sec    = (u16)ts.tm_sec;
-    dateTimeStruct.min    = (u16)ts.tm_min;
-    dateTimeStruct.hour   = (u16)ts.tm_hour;
-    dateTimeStruct.day    = (u16)ts.tm_mday;
-    dateTimeStruct.month  = (u16)(ts.tm_mon + 1);
-    dateTimeStruct.year   = (u16)(ts.tm_year + 1900);
-    return dateTimeStruct;
-}
-
-/* Guid */
-UA_Boolean
-UA_Guid_equal(const UA_Guid *g1, const UA_Guid *g2) {
-    if(memcmp(g1, g2, sizeof(UA_Guid)) == 0)
-        return true;
-    return false;
-}
-
-UA_Guid
-UA_Guid_random(void) {
-    UA_Guid result;
-    result.data1 = (u32)pcg32_random_r(&UA_rng);
-    u32 r = (u32)pcg32_random_r(&UA_rng);
-    result.data2 = (u16) r;
-    result.data3 = (u16) (r >> 16);
-    r = (u32)pcg32_random_r(&UA_rng);
-    result.data4[0] = (u8)r;
-    result.data4[1] = (u8)(r >> 4);
-    result.data4[2] = (u8)(r >> 8);
-    result.data4[3] = (u8)(r >> 12);
-    r = (u32)pcg32_random_r(&UA_rng);
-    result.data4[4] = (u8)r;
-    result.data4[5] = (u8)(r >> 4);
-    result.data4[6] = (u8)(r >> 8);
-    result.data4[7] = (u8)(r >> 12);
-    return result;
-}
-
-/* ByteString */
-UA_StatusCode
-UA_ByteString_allocBuffer(UA_ByteString *bs, size_t length) {
-    UA_ByteString_init(bs);
-    if(length == 0)
-        return UA_STATUSCODE_GOOD;
-    bs->data = (u8*)UA_malloc(length);
-    if(!bs->data)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    bs->length = length;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* NodeId */
-static void
-NodeId_clear(UA_NodeId *p, const UA_DataType *_) {
-    switch(p->identifierType) {
-    case UA_NODEIDTYPE_STRING:
-    case UA_NODEIDTYPE_BYTESTRING:
-        String_clear(&p->identifier.string, NULL);
-        break;
-    default: break;
-    }
-}
-
-static UA_StatusCode
-NodeId_copy(UA_NodeId const *src, UA_NodeId *dst, const UA_DataType *_) {
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    switch(src->identifierType) {
-    case UA_NODEIDTYPE_NUMERIC:
-        *dst = *src;
-        return UA_STATUSCODE_GOOD;
-    case UA_NODEIDTYPE_STRING:
-        retval |= UA_String_copy(&src->identifier.string,
-                                 &dst->identifier.string);
-        break;
-    case UA_NODEIDTYPE_GUID:
-        retval |= UA_Guid_copy(&src->identifier.guid, &dst->identifier.guid);
-        break;
-    case UA_NODEIDTYPE_BYTESTRING:
-        retval |= UA_ByteString_copy(&src->identifier.byteString,
-                                     &dst->identifier.byteString);
-        break;
-    default:
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    dst->namespaceIndex = src->namespaceIndex;
-    dst->identifierType = src->identifierType;
-    return retval;
-}
-
-UA_Boolean
-UA_NodeId_isNull(const UA_NodeId *p) {
-    if(p->namespaceIndex != 0)
-        return false;
-    switch (p->identifierType) {
-    case UA_NODEIDTYPE_NUMERIC:
-        return (p->identifier.numeric == 0);
-    case UA_NODEIDTYPE_STRING:
-        return UA_String_equal(&p->identifier.string, &UA_STRING_NULL);
-    case UA_NODEIDTYPE_GUID:
-        return UA_Guid_equal(&p->identifier.guid, &UA_GUID_NULL);
-    case UA_NODEIDTYPE_BYTESTRING:
-        return UA_ByteString_equal(&p->identifier.byteString, &UA_BYTESTRING_NULL);
-    }
-    return false;
-}
-
-/* Absolute ordering for NodeIds */
-UA_Order
-UA_NodeId_order(const UA_NodeId *n1, const UA_NodeId *n2) {
-    /* Compare namespaceIndex */
-    if(n1->namespaceIndex < n2->namespaceIndex)
-        return UA_ORDER_LESS;
-    if(n1->namespaceIndex > n2->namespaceIndex)
-        return UA_ORDER_MORE;
-
-    /* Compare identifierType */
-    if(n1->identifierType < n2->identifierType)
-        return UA_ORDER_LESS;
-    if(n1->identifierType > n2->identifierType)
-        return UA_ORDER_MORE;
-
-    /* Compare the identifier */
-    switch(n1->identifierType) {
-    case UA_NODEIDTYPE_NUMERIC:
-        if(n1->identifier.numeric < n2->identifier.numeric)
-            return UA_ORDER_LESS;
-        if(n1->identifier.numeric > n2->identifier.numeric)
-            return UA_ORDER_MORE;
-        break;
-    case UA_NODEIDTYPE_GUID:
-        if(n1->identifier.guid.data1 < n2->identifier.guid.data1) {
-            return UA_ORDER_LESS;
-        } else if(n1->identifier.guid.data1 > n2->identifier.guid.data1) {
-            return UA_ORDER_MORE;
-        } else if(n1->identifier.guid.data2 < n2->identifier.guid.data2) {
-            return UA_ORDER_LESS;
-        } else if(n1->identifier.guid.data2 > n2->identifier.guid.data2) {
-            return UA_ORDER_MORE;
-        } else if(n1->identifier.guid.data3 < n2->identifier.guid.data3) {
-            return UA_ORDER_LESS;
-        } else if(n1->identifier.guid.data3 > n2->identifier.guid.data3) {
-            return UA_ORDER_MORE;
-        } else {
-            int cmp = memcmp(n1->identifier.guid.data4, n2->identifier.guid.data4, 8);
-
-            if(cmp < 0) return UA_ORDER_LESS;
-            if(cmp > 0) return UA_ORDER_MORE;
-
-        }
-
-        break;
-    case UA_NODEIDTYPE_STRING:
-    case UA_NODEIDTYPE_BYTESTRING: {
-        size_t minLength = UA_MIN(n1->identifier.string.length, n2->identifier.string.length);
-        int cmp = strncmp((const char*)n1->identifier.string.data,
-                          (const char*)n2->identifier.string.data,
-                          minLength);
-        if(cmp < 0)
-            return UA_ORDER_LESS;
-        if(cmp > 0)
-            return UA_ORDER_MORE;
-
-        if(n1->identifier.string.length < n2->identifier.string.length)
-            return UA_ORDER_LESS;
-        if(n1->identifier.string.length > n2->identifier.string.length)
-            return UA_ORDER_MORE;
-        break;
-    }
-    default:
-        break;
-    }
-
-    return UA_ORDER_EQ;
-}
-
-/* FNV non-cryptographic hash function. See
- * https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function */
-#define FNV_PRIME_32 16777619
-static u32
-fnv32(u32 fnv, const u8 *buf, size_t size) {
-    for(size_t i = 0; i < size; ++i) {
-        fnv = fnv ^ (buf[i]);
-        fnv = fnv * FNV_PRIME_32;
-    }
-    return fnv;
-}
-
-u32
-UA_NodeId_hash(const UA_NodeId *n) {
-    switch(n->identifierType) {
-    case UA_NODEIDTYPE_NUMERIC:
-    default:
-        // shift knuth multiplication to use highest 32 bits and after addition make sure we don't have an integer overflow
-        return (u32)((n->namespaceIndex + ((n->identifier.numeric * (u64)2654435761) >> (32))) & UINT32_C(4294967295)); /*  Knuth's multiplicative hashing */
-    case UA_NODEIDTYPE_STRING:
-    case UA_NODEIDTYPE_BYTESTRING:
-        return fnv32(n->namespaceIndex, n->identifier.string.data, n->identifier.string.length);
-    case UA_NODEIDTYPE_GUID:
-        return fnv32(n->namespaceIndex, (const u8*)&n->identifier.guid, sizeof(UA_Guid));
-    }
-}
-
-/* ExpandedNodeId */
-static void
-ExpandedNodeId_clear(UA_ExpandedNodeId *p, const UA_DataType *_) {
-    NodeId_clear(&p->nodeId, _);
-    String_clear(&p->namespaceUri, NULL);
-}
-
-static UA_StatusCode
-ExpandedNodeId_copy(UA_ExpandedNodeId const *src, UA_ExpandedNodeId *dst,
-                    const UA_DataType *_) {
-    UA_StatusCode retval = NodeId_copy(&src->nodeId, &dst->nodeId, NULL);
-    retval |= UA_String_copy(&src->namespaceUri, &dst->namespaceUri);
-    dst->serverIndex = src->serverIndex;
-    return retval;
-}
-
-UA_Order
-UA_ExpandedNodeId_order(const UA_ExpandedNodeId *n1,
-                        const UA_ExpandedNodeId *n2) {
-    if(n1->serverIndex > n2->serverIndex)
-        return UA_ORDER_MORE;
-    if(n1->serverIndex < n2->serverIndex)
-        return UA_ORDER_LESS;
-    if(n1->namespaceUri.length > 0) {
-        if(n1->namespaceUri.length > n2->namespaceUri.length)
-            return UA_ORDER_MORE;
-        if(n1->namespaceUri.length < n2->namespaceUri.length)
-            return UA_ORDER_LESS;
-        int cmp = strncmp((const char*)n1->namespaceUri.data,
-                          (const char*)n2->namespaceUri.data,
-                          n1->namespaceUri.length);
-        if(cmp < 0)
-            return UA_ORDER_LESS;
-        if(cmp > 0)
-            return UA_ORDER_MORE;
-    }
-    return UA_NodeId_order(&n1->nodeId, &n2->nodeId);
-}
-
-u32
-UA_ExpandedNodeId_hash(const UA_ExpandedNodeId *n) {
-    u32 h = UA_NodeId_hash(&n->nodeId);
-    h = fnv32(h, (const UA_Byte*)&n->serverIndex, 4);
-    return fnv32(h, n->namespaceUri.data, n->namespaceUri.length);
-}
-
-/* ExtensionObject */
-static void
-ExtensionObject_clear(UA_ExtensionObject *p, const UA_DataType *_) {
-    switch(p->encoding) {
-    case UA_EXTENSIONOBJECT_ENCODED_NOBODY:
-    case UA_EXTENSIONOBJECT_ENCODED_BYTESTRING:
-    case UA_EXTENSIONOBJECT_ENCODED_XML:
-        NodeId_clear(&p->content.encoded.typeId, NULL);
-        String_clear(&p->content.encoded.body, NULL);
-        break;
-    case UA_EXTENSIONOBJECT_DECODED:
-        if(p->content.decoded.data)
-            UA_delete(p->content.decoded.data, p->content.decoded.type);
-        break;
-    default:
-        break;
-    }
-}
-
-static UA_StatusCode
-ExtensionObject_copy(UA_ExtensionObject const *src, UA_ExtensionObject *dst,
-                     const UA_DataType *_) {
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    switch(src->encoding) {
-    case UA_EXTENSIONOBJECT_ENCODED_NOBODY:
-    case UA_EXTENSIONOBJECT_ENCODED_BYTESTRING:
-    case UA_EXTENSIONOBJECT_ENCODED_XML:
-        dst->encoding = src->encoding;
-        retval = NodeId_copy(&src->content.encoded.typeId,
-                             &dst->content.encoded.typeId, NULL);
-        retval |= UA_ByteString_copy(&src->content.encoded.body,
-                                     &dst->content.encoded.body);
-        break;
-    case UA_EXTENSIONOBJECT_DECODED:
-    case UA_EXTENSIONOBJECT_DECODED_NODELETE:
-        if(!src->content.decoded.type || !src->content.decoded.data)
-            return UA_STATUSCODE_BADINTERNALERROR;
-        dst->encoding = UA_EXTENSIONOBJECT_DECODED;
-        dst->content.decoded.type = src->content.decoded.type;
-        retval = UA_Array_copy(src->content.decoded.data, 1,
-            &dst->content.decoded.data, src->content.decoded.type);
-        break;
-    default:
-        break;
-    }
-    return retval;
-}
-
-/* Variant */
-static void
-Variant_clear(UA_Variant *p, const UA_DataType *_) {
-    if(p->storageType != UA_VARIANT_DATA)
-        return;
-    if(p->type && p->data > UA_EMPTY_ARRAY_SENTINEL) {
-        if(p->arrayLength == 0)
-            p->arrayLength = 1;
-        UA_Array_delete(p->data, p->arrayLength, p->type);
-        p->data = NULL;
-    }
-    if((void*)p->arrayDimensions > UA_EMPTY_ARRAY_SENTINEL)
-        UA_free(p->arrayDimensions);
-}
-
-static UA_StatusCode
-Variant_copy(UA_Variant const *src, UA_Variant *dst, const UA_DataType *_) {
-    size_t length = src->arrayLength;
-    if(UA_Variant_isScalar(src))
-        length = 1;
-    UA_StatusCode retval = UA_Array_copy(src->data, length,
-                                         &dst->data, src->type);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    dst->arrayLength = src->arrayLength;
-    dst->type = src->type;
-    if(src->arrayDimensions) {
-        retval = UA_Array_copy(src->arrayDimensions, src->arrayDimensionsSize,
-            (void**)&dst->arrayDimensions, &UA_TYPES[UA_TYPES_INT32]);
-        if(retval != UA_STATUSCODE_GOOD)
-            return retval;
-        dst->arrayDimensionsSize = src->arrayDimensionsSize;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-void
-UA_Variant_setScalar(UA_Variant *v, void * UA_RESTRICT p,
-                     const UA_DataType *type) {
-    UA_Variant_init(v);
-    v->type = type;
-    v->arrayLength = 0;
-    v->data = p;
-}
-
-UA_StatusCode
-UA_Variant_setScalarCopy(UA_Variant *v, const void *p,
-                         const UA_DataType *type) {
-    void *n = UA_malloc(type->memSize);
-    if(!n)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    UA_StatusCode retval = UA_copy(p, n, type);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_free(n);
-        //cppcheck-suppress memleak
-        return retval;
-    }
-    UA_Variant_setScalar(v, n, type);
-    //cppcheck-suppress memleak
-    return UA_STATUSCODE_GOOD;
-}
-
-void UA_Variant_setArray(UA_Variant *v, void * UA_RESTRICT array,
-                         size_t arraySize, const UA_DataType *type) {
-    UA_Variant_init(v);
-    v->data = array;
-    v->arrayLength = arraySize;
-    v->type = type;
-}
-
-UA_StatusCode
-UA_Variant_setArrayCopy(UA_Variant *v, const void *array,
-                        size_t arraySize, const UA_DataType *type) {
-    UA_Variant_init(v);
-    UA_StatusCode retval = UA_Array_copy(array, arraySize, &v->data, type);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    v->arrayLength = arraySize;
-    v->type = type;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Test if a range is compatible with a variant. If yes, the following values
- * are set:
- * - total: how many elements are in the range
- * - block: how big is each contiguous block of elements in the variant that
- *   maps into the range
- * - stride: how many elements are between the blocks (beginning to beginning)
- * - first: where does the first block begin */
-static UA_StatusCode
-computeStrides(const UA_Variant *v, const UA_NumericRange range,
-               size_t *total, size_t *block, size_t *stride, size_t *first) {
-    /* Test for max array size (64bit only) */
-#if (SIZE_MAX > 0xffffffff)
-    if(v->arrayLength > UA_UINT32_MAX)
-        return UA_STATUSCODE_BADINTERNALERROR;
-#endif
-
-    /* Test the integrity of the source variant dimensions, make dimensions
-     * vector of one dimension if none defined */
-    u32 arrayLength = (u32)v->arrayLength;
-    const u32 *dims = &arrayLength;
-    size_t dims_count = 1;
-    if(v->arrayDimensionsSize > 0) {
-        size_t elements = 1;
-        dims_count = v->arrayDimensionsSize;
-        dims = (u32*)v->arrayDimensions;
-        for(size_t i = 0; i < dims_count; ++i)
-            elements *= dims[i];
-        if(elements != v->arrayLength)
-            return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    UA_assert(dims_count > 0);
-
-    /* Test the integrity of the range and compute the max index used for every
-     * dimension. The standard says in Part 4, Section 7.22:
-     *
-     * When reading a value, the indexes may not specify a range that is within
-     * the bounds of the array. The Server shall return a partial result if some
-     * elements exist within the range. */
-    size_t count = 1;
-    UA_STACKARRAY(UA_UInt32, realmax, dims_count);
-    if(range.dimensionsSize != dims_count)
-        return UA_STATUSCODE_BADINDEXRANGENODATA;
-    for(size_t i = 0; i < dims_count; ++i) {
-        if(range.dimensions[i].min > range.dimensions[i].max)
-            return UA_STATUSCODE_BADINDEXRANGEINVALID;
-        if(range.dimensions[i].min >= dims[i])
-            return UA_STATUSCODE_BADINDEXRANGENODATA;
-
-        if(range.dimensions[i].max < dims[i])
-            realmax[i] = range.dimensions[i].max;
-        else
-            realmax[i] = dims[i] - 1;
-
-        count *= (realmax[i] - range.dimensions[i].min) + 1;
-    }
-
-    *total = count;
-
-    /* Compute the stride length and the position of the first element */
-    *block = count;           /* Assume the range describes the entire array. */
-    *stride = v->arrayLength; /* So it can be copied as a contiguous block.   */
-    *first = 0;
-    size_t running_dimssize = 1;
-    UA_Boolean found_contiguous = false;
-    for(size_t k = dims_count; k > 0;) {
-        --k;
-        size_t dimrange = 1 + realmax[k] - range.dimensions[k].min;
-        if(!found_contiguous && dimrange != dims[k]) {
-            /* Found the maximum block that can be copied contiguously */
-            found_contiguous = true;
-            *block = running_dimssize * dimrange;
-            *stride = running_dimssize * dims[k];
-        }
-        *first += running_dimssize * range.dimensions[k].min;
-        running_dimssize *= dims[k];
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Is the type string-like? */
-static UA_Boolean
-isStringLike(const UA_DataType *type) {
-    if(type == &UA_TYPES[UA_TYPES_STRING] ||
-       type == &UA_TYPES[UA_TYPES_BYTESTRING] ||
-       type == &UA_TYPES[UA_TYPES_XMLELEMENT])
-        return true;
-    return false;
-}
-
-/* Returns the part of the string that lies within the rangedimension */
-static UA_StatusCode
-copySubString(const UA_String *src, UA_String *dst,
-              const UA_NumericRangeDimension *dim) {
-    if(dim->min > dim->max)
-        return UA_STATUSCODE_BADINDEXRANGEINVALID;
-    if(dim->min >= src->length)
-        return UA_STATUSCODE_BADINDEXRANGENODATA;
-
-    size_t length;
-    if(dim->max < src->length)
-       length = dim->max - dim->min + 1;
-    else
-        length = src->length - dim->min;
-
-    UA_StatusCode retval = UA_ByteString_allocBuffer(dst, length);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    memcpy(dst->data, &src->data[dim->min], length);
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_Variant_copyRange(const UA_Variant *src, UA_Variant *dst,
-                     const UA_NumericRange range) {
-    if(!src->type)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    UA_Boolean isScalar = UA_Variant_isScalar(src);
-    UA_Boolean stringLike = isStringLike(src->type);
-    UA_Variant arraySrc;
-
-    /* Extract the range for copying at this level. The remaining range is dealt
-     * with in the "scalar" type that may define an array by itself (string,
-     * variant, ...). */
-    UA_NumericRange thisrange, nextrange;
-    UA_NumericRangeDimension scalarThisDimension = {0,0}; /* a single entry */
-    if(isScalar) {
-        /* Replace scalar src with array of length 1 */
-        arraySrc = *src;
-        arraySrc.arrayLength = 1;
-        src = &arraySrc;
-        /* Deal with all range dimensions within the scalar */
-        thisrange.dimensions = &scalarThisDimension;
-        thisrange.dimensionsSize = 1;
-        nextrange = range;
-    } else {
-        /* Deal with as many range dimensions as possible right now */
-        size_t dims = src->arrayDimensionsSize;
-        if(dims == 0)
-            dims = 1;
-        if(dims > range.dimensionsSize)
-            return UA_STATUSCODE_BADINDEXRANGEINVALID;
-       thisrange = range;
-       thisrange.dimensionsSize = dims;
-       nextrange.dimensions = &range.dimensions[dims];
-       nextrange.dimensionsSize = range.dimensionsSize - dims;
-    }
-
-    /* Compute the strides */
-    size_t count, block, stride, first;
-    UA_StatusCode retval = computeStrides(src, thisrange, &count,
-                                          &block, &stride, &first);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    /* Allocate the array */
-    UA_Variant_init(dst);
-    dst->data = UA_Array_new(count, src->type);
-    if(!dst->data)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    /* Copy the range */
-    size_t block_count = count / block;
-    size_t elem_size = src->type->memSize;
-    uintptr_t nextdst = (uintptr_t)dst->data;
-    uintptr_t nextsrc = (uintptr_t)src->data + (elem_size * first);
-    if(nextrange.dimensionsSize == 0) {
-        /* no nextrange */
-        if(src->type->pointerFree) {
-            for(size_t i = 0; i < block_count; ++i) {
-                memcpy((void*)nextdst, (void*)nextsrc, elem_size * block);
-                nextdst += block * elem_size;
-                nextsrc += stride * elem_size;
-            }
-        } else {
-            for(size_t i = 0; i < block_count; ++i) {
-                for(size_t j = 0; j < block; ++j) {
-                    retval = UA_copy((const void*)nextsrc,
-                                     (void*)nextdst, src->type);
-                    nextdst += elem_size;
-                    nextsrc += elem_size;
-                }
-                nextsrc += (stride - block) * elem_size;
-            }
-        }
-    } else {
-        /* nextrange can only be used for variants and stringlike with remaining
-         * range of dimension 1 */
-        if(src->type != &UA_TYPES[UA_TYPES_VARIANT]) {
-            if(!stringLike)
-                retval = UA_STATUSCODE_BADINDEXRANGENODATA;
-            if(nextrange.dimensionsSize != 1)
-                retval = UA_STATUSCODE_BADINDEXRANGENODATA;
-        }
-
-        /* Copy the content */
-        for(size_t i = 0; i < block_count; ++i) {
-            for(size_t j = 0; j < block && retval == UA_STATUSCODE_GOOD; ++j) {
-                if(stringLike)
-                    retval = copySubString((const UA_String*)nextsrc,
-                                           (UA_String*)nextdst,
-                                           nextrange.dimensions);
-                else
-                    retval = UA_Variant_copyRange((const UA_Variant*)nextsrc,
-                                                  (UA_Variant*)nextdst,
-                                                  nextrange);
-                nextdst += elem_size;
-                nextsrc += elem_size;
-            }
-            nextsrc += (stride - block) * elem_size;
-        }
-    }
-
-    /* Clean up if copying failed */
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Array_delete(dst->data, count, src->type);
-        dst->data = NULL;
-        return retval;
-    }
-
-    /* Done if scalar */
-    dst->type = src->type;
-    if(isScalar)
-        return retval;
-
-    /* Copy array dimensions */
-    dst->arrayLength = count;
-    if(src->arrayDimensionsSize > 0) {
-        dst->arrayDimensions =
-            (u32*)UA_Array_new(thisrange.dimensionsSize, &UA_TYPES[UA_TYPES_UINT32]);
-        if(!dst->arrayDimensions) {
-            Variant_clear(dst, NULL);
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        dst->arrayDimensionsSize = thisrange.dimensionsSize;
-        for(size_t k = 0; k < thisrange.dimensionsSize; ++k)
-            dst->arrayDimensions[k] =
-                thisrange.dimensions[k].max - thisrange.dimensions[k].min + 1;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-/* TODO: Allow ranges to reach inside a scalars that are array-like, e.g.
- * variant and strings. This is already possible for reading... */
-static UA_StatusCode
-Variant_setRange(UA_Variant *v, void *array, size_t arraySize,
-                 const UA_NumericRange range, UA_Boolean copy) {
-    /* Compute the strides */
-    size_t count, block, stride, first;
-    UA_StatusCode retval = computeStrides(v, range, &count,
-                                          &block, &stride, &first);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    if(count != arraySize)
-        return UA_STATUSCODE_BADINDEXRANGEINVALID;
-
-    /* Move/copy the elements */
-    size_t block_count = count / block;
-    size_t elem_size = v->type->memSize;
-    uintptr_t nextdst = (uintptr_t)v->data + (first * elem_size);
-    uintptr_t nextsrc = (uintptr_t)array;
-    if(v->type->pointerFree || !copy) {
-        for(size_t i = 0; i < block_count; ++i) {
-            memcpy((void*)nextdst, (void*)nextsrc, elem_size * block);
-            nextsrc += block * elem_size;
-            nextdst += stride * elem_size;
-        }
-    } else {
-        for(size_t i = 0; i < block_count; ++i) {
-            for(size_t j = 0; j < block; ++j) {
-                clearJumpTable[v->type->typeKind]((void*)nextdst, v->type);
-                retval |= UA_copy((void*)nextsrc, (void*)nextdst, v->type);
-                nextdst += elem_size;
-                nextsrc += elem_size;
-            }
-            nextdst += (stride - block) * elem_size;
-        }
-    }
-
-    /* If members were moved, initialize original array to prevent reuse */
-    if(!copy && !v->type->pointerFree)
-        memset(array, 0, sizeof(elem_size)*arraySize);
-
-    return retval;
-}
-
-UA_StatusCode
-UA_Variant_setRange(UA_Variant *v, void * UA_RESTRICT array,
-                    size_t arraySize, const UA_NumericRange range) {
-    return Variant_setRange(v, array, arraySize, range, false);
-}
-
-UA_StatusCode
-UA_Variant_setRangeCopy(UA_Variant *v, const void *array,
-                        size_t arraySize, const UA_NumericRange range) {
-    return Variant_setRange(v, (void*)(uintptr_t)array,
-                            arraySize, range, true);
-}
-
-/* LocalizedText */
-static void
-LocalizedText_clear(UA_LocalizedText *p, const UA_DataType *_) {
-    String_clear(&p->locale, NULL);
-    String_clear(&p->text, NULL);
-}
-
-static UA_StatusCode
-LocalizedText_copy(UA_LocalizedText const *src, UA_LocalizedText *dst,
-                   const UA_DataType *_) {
-    UA_StatusCode retval = UA_String_copy(&src->locale, &dst->locale);
-    retval |= UA_String_copy(&src->text, &dst->text);
-    return retval;
-}
-
-/* DataValue */
-static void
-DataValue_clear(UA_DataValue *p, const UA_DataType *_) {
-    Variant_clear(&p->value, NULL);
-}
-
-static UA_StatusCode
-DataValue_copy(UA_DataValue const *src, UA_DataValue *dst,
-               const UA_DataType *_) {
-    memcpy(dst, src, sizeof(UA_DataValue));
-    UA_Variant_init(&dst->value);
-    UA_StatusCode retval = Variant_copy(&src->value, &dst->value, NULL);
-    if(retval != UA_STATUSCODE_GOOD)
-        DataValue_clear(dst, NULL);
-    return retval;
-}
-
-/* DiagnosticInfo */
-static void
-DiagnosticInfo_clear(UA_DiagnosticInfo *p, const UA_DataType *_) {
-    String_clear(&p->additionalInfo, NULL);
-    if(p->hasInnerDiagnosticInfo && p->innerDiagnosticInfo) {
-        DiagnosticInfo_clear(p->innerDiagnosticInfo, NULL);
-        UA_free(p->innerDiagnosticInfo);
-    }
-}
-
-static UA_StatusCode
-DiagnosticInfo_copy(UA_DiagnosticInfo const *src, UA_DiagnosticInfo *dst,
-                    const UA_DataType *_) {
-    memcpy(dst, src, sizeof(UA_DiagnosticInfo));
-    UA_String_init(&dst->additionalInfo);
-    dst->innerDiagnosticInfo = NULL;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(src->hasAdditionalInfo)
-       retval = UA_String_copy(&src->additionalInfo, &dst->additionalInfo);
-    if(src->hasInnerDiagnosticInfo && src->innerDiagnosticInfo) {
-        dst->innerDiagnosticInfo = (UA_DiagnosticInfo*)UA_malloc(sizeof(UA_DiagnosticInfo));
-        if(dst->innerDiagnosticInfo) {
-            retval |= DiagnosticInfo_copy(src->innerDiagnosticInfo,
-                                          dst->innerDiagnosticInfo, NULL);
-            dst->hasInnerDiagnosticInfo = true;
-        } else {
-            dst->hasInnerDiagnosticInfo = false;
-            retval |= UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-    }
-    return retval;
-}
-
-/********************/
-/* Structured Types */
-/********************/
-
-void *
-UA_new(const UA_DataType *type) {
-    void *p = UA_calloc(1, type->memSize);
-    return p;
-}
-
-static UA_StatusCode
-copyByte(const u8 *src, u8 *dst, const UA_DataType *_) {
-    *dst = *src;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-copy2Byte(const u16 *src, u16 *dst, const UA_DataType *_) {
-    *dst = *src;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-copy4Byte(const u32 *src, u32 *dst, const UA_DataType *_) {
-    *dst = *src;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-copy8Byte(const u64 *src, u64 *dst, const UA_DataType *_) {
-    *dst = *src;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-copyGuid(const UA_Guid *src, UA_Guid *dst, const UA_DataType *_) {
-    *dst = *src;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-copyStructure(const void *src, void *dst, const UA_DataType *type) {
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    uintptr_t ptrs = (uintptr_t)src;
-    uintptr_t ptrd = (uintptr_t)dst;
-    const UA_DataType *typelists[2] = { UA_TYPES, &type[-type->typeIndex] };
-    for(size_t i = 0; i < type->membersSize; ++i) {
-        const UA_DataTypeMember *m= &type->members[i];
-        const UA_DataType *mt = &typelists[!m->namespaceZero][m->memberTypeIndex];
-        if(!m->isArray) {
-            ptrs += m->padding;
-            ptrd += m->padding;
-            retval |= copyJumpTable[mt->typeKind]((const void*)ptrs, (void*)ptrd, mt);
-            ptrs += mt->memSize;
-            ptrd += mt->memSize;
-        } else {
-            ptrs += m->padding;
-            ptrd += m->padding;
-            size_t *dst_size = (size_t*)ptrd;
-            const size_t size = *((const size_t*)ptrs);
-            ptrs += sizeof(size_t);
-            ptrd += sizeof(size_t);
-            retval |= UA_Array_copy(*(void* const*)ptrs, size, (void**)ptrd, mt);
-            if(retval == UA_STATUSCODE_GOOD)
-                *dst_size = size;
-            else
-                *dst_size = 0;
-            ptrs += sizeof(void*);
-            ptrd += sizeof(void*);
-        }
-    }
-    return retval;
-}
-
-static UA_StatusCode
-copyNotImplemented(const void *src, void *dst, const UA_DataType *type) {
-    return UA_STATUSCODE_BADNOTIMPLEMENTED;
-}
-
-const UA_copySignature copyJumpTable[UA_DATATYPEKINDS] = {
-    (UA_copySignature)copyByte, /* Boolean */
-    (UA_copySignature)copyByte, /* SByte */
-    (UA_copySignature)copyByte, /* Byte */
-    (UA_copySignature)copy2Byte, /* Int16 */
-    (UA_copySignature)copy2Byte, /* UInt16 */
-    (UA_copySignature)copy4Byte, /* Int32 */
-    (UA_copySignature)copy4Byte, /* UInt32 */
-    (UA_copySignature)copy8Byte, /* Int64 */
-    (UA_copySignature)copy8Byte, /* UInt64 */
-    (UA_copySignature)copy4Byte, /* Float */
-    (UA_copySignature)copy8Byte, /* Double */
-    (UA_copySignature)String_copy,
-    (UA_copySignature)copy8Byte, /* DateTime */
-    (UA_copySignature)copyGuid, /* Guid */
-    (UA_copySignature)String_copy, /* ByteString */
-    (UA_copySignature)String_copy, /* XmlElement */
-    (UA_copySignature)NodeId_copy,
-    (UA_copySignature)ExpandedNodeId_copy,
-    (UA_copySignature)copy4Byte, /* StatusCode */
-    (UA_copySignature)QualifiedName_copy,
-    (UA_copySignature)LocalizedText_copy,
-    (UA_copySignature)ExtensionObject_copy,
-    (UA_copySignature)DataValue_copy,
-    (UA_copySignature)Variant_copy,
-    (UA_copySignature)DiagnosticInfo_copy,
-    (UA_copySignature)copyNotImplemented, /* Decimal */
-    (UA_copySignature)copy4Byte, /* Enumeration */
-    (UA_copySignature)copyStructure,
-    (UA_copySignature)copyNotImplemented, /* Structure with Optional Fields */
-    (UA_copySignature)copyNotImplemented, /* Union */
-    (UA_copySignature)copyNotImplemented /* BitfieldCluster*/
-};
-
-UA_StatusCode
-UA_copy(const void *src, void *dst, const UA_DataType *type) {
-    memset(dst, 0, type->memSize); /* init */
-    UA_StatusCode retval = copyJumpTable[type->typeKind](src, dst, type);
-    if(retval != UA_STATUSCODE_GOOD)
-        UA_clear(dst, type);
-    return retval;
-}
-
-static void
-clearStructure(void *p, const UA_DataType *type) {
-    uintptr_t ptr = (uintptr_t)p;
-    const UA_DataType *typelists[2] = { UA_TYPES, &type[-type->typeIndex] };
-    for(size_t i = 0; i < type->membersSize; ++i) {
-        const UA_DataTypeMember *m = &type->members[i];
-        const UA_DataType *mt = &typelists[!m->namespaceZero][m->memberTypeIndex];
-        if(!m->isArray) {
-            ptr += m->padding;
-            clearJumpTable[mt->typeKind]((void*)ptr, mt);
-            ptr += mt->memSize;
-        } else {
-            ptr += m->padding;
-            size_t length = *(size_t*)ptr;
-            ptr += sizeof(size_t);
-            UA_Array_delete(*(void**)ptr, length, mt);
-            ptr += sizeof(void*);
-        }
-    }
-}
-
-static void nopClear(void *p, const UA_DataType *type) { }
-
-const
-UA_clearSignature clearJumpTable[UA_DATATYPEKINDS] = {
-    (UA_clearSignature)nopClear, /* Boolean */
-    (UA_clearSignature)nopClear, /* SByte */
-    (UA_clearSignature)nopClear, /* Byte */
-    (UA_clearSignature)nopClear, /* Int16 */
-    (UA_clearSignature)nopClear, /* UInt16 */
-    (UA_clearSignature)nopClear, /* Int32 */
-    (UA_clearSignature)nopClear, /* UInt32 */
-    (UA_clearSignature)nopClear, /* Int64 */
-    (UA_clearSignature)nopClear, /* UInt64 */
-    (UA_clearSignature)nopClear, /* Float */
-    (UA_clearSignature)nopClear, /* Double */
-    (UA_clearSignature)String_clear, /* String */
-    (UA_clearSignature)nopClear, /* DateTime */
-    (UA_clearSignature)nopClear, /* Guid */
-    (UA_clearSignature)String_clear, /* ByteString */
-    (UA_clearSignature)String_clear, /* XmlElement */
-    (UA_clearSignature)NodeId_clear,
-    (UA_clearSignature)ExpandedNodeId_clear,
-    (UA_clearSignature)nopClear, /* StatusCode */
-    (UA_clearSignature)QualifiedName_clear,
-    (UA_clearSignature)LocalizedText_clear,
-    (UA_clearSignature)ExtensionObject_clear,
-    (UA_clearSignature)DataValue_clear,
-    (UA_clearSignature)Variant_clear,
-    (UA_clearSignature)DiagnosticInfo_clear,
-    (UA_clearSignature)nopClear, /* Decimal, not implemented */
-    (UA_clearSignature)nopClear, /* Enumeration */
-    (UA_clearSignature)clearStructure,
-    (UA_clearSignature)nopClear, /* Struct with Optional Fields, not implemented*/
-    (UA_clearSignature)nopClear, /* Union, not implemented*/
-    (UA_clearSignature)nopClear /* BitfieldCluster, not implemented*/
-};
-
-void
-UA_clear(void *p, const UA_DataType *type) {
-    clearJumpTable[type->typeKind](p, type);
-    memset(p, 0, type->memSize); /* init */
-}
-
-void
-UA_delete(void *p, const UA_DataType *type) {
-    clearJumpTable[type->typeKind](p, type);
-    UA_free(p);
-}
-
-/******************/
-/* Array Handling */
-/******************/
-
-void *
-UA_Array_new(size_t size, const UA_DataType *type) {
-    if(size > UA_INT32_MAX)
-        return NULL;
-    if(size == 0)
-        return UA_EMPTY_ARRAY_SENTINEL;
-    return UA_calloc(size, type->memSize);
-}
-
-UA_StatusCode
-UA_Array_copy(const void *src, size_t size,
-              void **dst, const UA_DataType *type) {
-    if(size == 0) {
-        if(src == NULL)
-            *dst = NULL;
-        else
-            *dst= UA_EMPTY_ARRAY_SENTINEL;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    if(!type)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* calloc, so we don't have to check retval in every iteration of copying */
-    *dst = UA_calloc(size, type->memSize);
-    if(!*dst)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    if(type->pointerFree) {
-        memcpy(*dst, src, type->memSize * size);
-        return UA_STATUSCODE_GOOD;
-    }
-
-    uintptr_t ptrs = (uintptr_t)src;
-    uintptr_t ptrd = (uintptr_t)*dst;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    for(size_t i = 0; i < size; ++i) {
-        retval |= UA_copy((void*)ptrs, (void*)ptrd, type);
-        ptrs += type->memSize;
-        ptrd += type->memSize;
-    }
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Array_delete(*dst, size, type);
-        *dst = NULL;
-    }
-    return retval;
-}
-
-void
-UA_Array_delete(void *p, size_t size, const UA_DataType *type) {
-    if(!type->pointerFree) {
-        uintptr_t ptr = (uintptr_t)p;
-        for(size_t i = 0; i < size; ++i) {
-            UA_clear((void*)ptr, type);
-            ptr += type->memSize;
-        }
-    }
-    UA_free((void*)((uintptr_t)p & ~(uintptr_t)UA_EMPTY_ARRAY_SENTINEL));
-}
-
-UA_Boolean
-UA_DataType_isNumeric(const UA_DataType *type) {
-    /* All data types between UA_TYPES_BOOLEAN and UA_TYPES_DOUBLE are numeric */
-    for(size_t i = UA_TYPES_BOOLEAN; i <= UA_TYPES_DOUBLE; ++i)
-        if(&UA_TYPES[i] == type)
-            return true;
-    return false;
-}
-
-/**********************/
-/* Parse NumericRange */
-/**********************/
-
-static size_t
-readDimension(UA_Byte *buf, size_t buflen, UA_NumericRangeDimension *dim) {
-    size_t progress = UA_readNumber(buf, buflen, &dim->min);
-    if(progress == 0)
-        return 0;
-    if(buflen <= progress + 1 || buf[progress] != ':') {
-        dim->max = dim->min;
-        return progress;
-    }
-
-    ++progress;
-    size_t progress2 = UA_readNumber(&buf[progress], buflen - progress, &dim->max);
-    if(progress2 == 0)
-        return 0;
-
-    /* invalid range */
-    if(dim->min >= dim->max)
-        return 0;
-
-    return progress + progress2;
-}
-
-UA_StatusCode
-UA_NumericRange_parseFromString(UA_NumericRange *range, const UA_String *str) {
-    size_t idx = 0;
-    size_t dimensionsMax = 0;
-    UA_NumericRangeDimension *dimensions = NULL;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    size_t offset = 0;
-    while(true) {
-        /* alloc dimensions */
-        if(idx >= dimensionsMax) {
-            UA_NumericRangeDimension *newds;
-            size_t newdssize = sizeof(UA_NumericRangeDimension) * (dimensionsMax + 2);
-            newds = (UA_NumericRangeDimension*)UA_realloc(dimensions, newdssize);
-            if(!newds) {
-                retval = UA_STATUSCODE_BADOUTOFMEMORY;
-                break;
-            }
-            dimensions = newds;
-            dimensionsMax = dimensionsMax + 2;
-        }
-
-        /* read the dimension */
-        size_t progress = readDimension(&str->data[offset], str->length - offset,
-                                        &dimensions[idx]);
-        if(progress == 0) {
-            retval = UA_STATUSCODE_BADINDEXRANGEINVALID;
-            break;
-        }
-        offset += progress;
-        ++idx;
-
-        /* loop into the next dimension */
-        if(offset >= str->length)
-            break;
-
-        if(str->data[offset] != ',') {
-            retval = UA_STATUSCODE_BADINDEXRANGEINVALID;
-            break;
-        }
-        ++offset;
-    }
-
-    if(retval == UA_STATUSCODE_GOOD && idx > 0) {
-        range->dimensions = dimensions;
-        range->dimensionsSize = idx;
-    } else
-        UA_free(dimensions);
-
-    return retval;
-}
diff --git a/ext/open62541/src/ua_types_encoding_binary.c b/ext/open62541/src/ua_types_encoding_binary.c
deleted file mode 100644
index f652f5c..0000000
--- a/ext/open62541/src/ua_types_encoding_binary.c
+++ /dev/null
@@ -1,1764 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014-2017 (c) Florian Palm
- *    Copyright 2014-2016 (c) Sten Grüner
- *    Copyright 2014 (c) Leon Urbas
- *    Copyright 2015 (c) LEvertz
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2016 (c) Lorenz Haas
- *    Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
- *    Copyright 2017 (c) Henrik Norrman
- */
-
-#include "ua_types_encoding_binary.h"
-
-#include <open62541/types_generated.h>
-#include <open62541/types_generated_handling.h>
-
-#include "ua_util_internal.h"
-
-/**
- * Type Encoding and Decoding
- * --------------------------
- * The following methods contain encoding and decoding functions for the builtin
- * data types and generic functions that operate on all types and arrays. This
- * requires the type description from a UA_DataType structure.
- *
- * Encoding Context
- * ^^^^^^^^^^^^^^^^
- * If possible, the encoding context is stored in a thread-local variable to
- * speed up encoding. If thread-local variables are not supported, the context
- * is "looped through" every method call. The ``_``-macro accesses either the
- * thread-local or the "looped through" context . */
-
-/* Part 6 §5.1.5: Decoders shall support at least 100 nesting levels */
-#define UA_ENCODING_MAX_RECURSION 100
-
-typedef struct {
-    /* Pointers to the current position and the last position in the buffer */
-    u8 *pos;
-    const u8 *end;
-
-    u8 **oldpos; /* Sentinel for a lower stacktrace exchanging the buffer */
-    u16 depth;   /* How often did we en-/decoding recurse? */
-
-    const UA_DataTypeArray *customTypes;
-    UA_exchangeEncodeBuffer exchangeBufferCallback;
-    void *exchangeBufferCallbackHandle;
-} Ctx;
-
-typedef status
-(*encodeBinarySignature)(const void *UA_RESTRICT src, const UA_DataType *type,
-                         Ctx *UA_RESTRICT ctx);
-typedef status
-(*decodeBinarySignature)(void *UA_RESTRICT dst, const UA_DataType *type,
-                         Ctx *UA_RESTRICT ctx);
-typedef size_t
-(*calcSizeBinarySignature)(const void *UA_RESTRICT p, const UA_DataType *contenttype);
-
-#define ENCODE_BINARY(TYPE) static status                               \
-    TYPE##_encodeBinary(const UA_##TYPE *UA_RESTRICT src,               \
-                        const UA_DataType *type, Ctx *UA_RESTRICT ctx)
-#define DECODE_BINARY(TYPE) static status                               \
-    TYPE##_decodeBinary(UA_##TYPE *UA_RESTRICT dst,                     \
-                        const UA_DataType *type, Ctx *UA_RESTRICT ctx)
-#define CALCSIZE_BINARY(TYPE) static size_t                             \
-    TYPE##_calcSizeBinary(const UA_##TYPE *UA_RESTRICT src,             \
-                          const UA_DataType *_)
-#define ENCODE_DIRECT(SRC, TYPE) TYPE##_encodeBinary((const UA_##TYPE*)SRC, NULL, ctx)
-#define DECODE_DIRECT(DST, TYPE) TYPE##_decodeBinary((UA_##TYPE*)DST, NULL, ctx)
-
-/* Jumptables for de-/encoding and computing the buffer length. The methods in
- * the decoding jumptable do not all clean up their allocated memory when an
- * error occurs. So a final _clear needs to be called before returning to the
- * user. */
-extern const encodeBinarySignature encodeBinaryJumpTable[UA_DATATYPEKINDS];
-extern const decodeBinarySignature decodeBinaryJumpTable[UA_DATATYPEKINDS];
-extern const calcSizeBinarySignature calcSizeBinaryJumpTable[UA_DATATYPEKINDS];
-
-/* Breaking a message up into chunks is integrated with the encoding. When the
- * end of a buffer is reached, a callback is executed that sends the current
- * buffer as a chunk and exchanges the encoding buffer "underneath" the ongoing
- * encoding. This reduces the RAM requirements and unnecessary copying. */
-
-/* Send the current chunk and replace the buffer */
-static status exchangeBuffer(Ctx *ctx) {
-    if(!ctx->exchangeBufferCallback)
-        return UA_STATUSCODE_BADENCODINGERROR;
-    return ctx->exchangeBufferCallback(ctx->exchangeBufferCallbackHandle,
-                                       &ctx->pos, &ctx->end);
-}
-
-/* If encoding fails, exchange the buffer and try again. */
-static status
-encodeWithExchangeBuffer(const void *ptr, const UA_DataType *type, Ctx *ctx) {
-    u8 *oldpos = ctx->pos; /* Last known good position */
-    ctx->oldpos = &oldpos;
-    status ret = encodeBinaryJumpTable[type->typeKind](ptr, type, ctx);
-    if(ret == UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED && ctx->oldpos == &oldpos) {
-        ctx->pos = oldpos; /* Send the position to the last known good position
-                            * and switch */
-        ret = exchangeBuffer(ctx);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-        ret = encodeBinaryJumpTable[type->typeKind](ptr, type, ctx);
-    }
-    return ret;
-}
-
-#define ENCODE_WITHEXCHANGE(VAR, TYPE) \
-    encodeWithExchangeBuffer((const void*)VAR, &UA_TYPES[TYPE], ctx)
-
-/*****************/
-/* Integer Types */
-/*****************/
-
-#if !UA_BINARY_OVERLAYABLE_INTEGER
-
-#pragma message "Integer endianness could not be detected to be little endian. Use slow generic encoding."
-
-/* These en/decoding functions are only used when the architecture isn't little-endian. */
-static void
-UA_encode16(const u16 v, u8 buf[2]) {
-    buf[0] = (u8)v;
-    buf[1] = (u8)(v >> 8);
-}
-
-static void
-UA_decode16(const u8 buf[2], u16 *v) {
-    *v = (u16)((u16)buf[0] + (((u16)buf[1]) << 8));
-}
-
-static void
-UA_encode32(const u32 v, u8 buf[4]) {
-    buf[0] = (u8)v;
-    buf[1] = (u8)(v >> 8);
-    buf[2] = (u8)(v >> 16);
-    buf[3] = (u8)(v >> 24);
-}
-
-static void
-UA_decode32(const u8 buf[4], u32 *v) {
-    *v = (u32)((u32)buf[0] + (((u32)buf[1]) << 8) +
-             (((u32)buf[2]) << 16) + (((u32)buf[3]) << 24));
-}
-
-static void
-UA_encode64(const u64 v, u8 buf[8]) {
-    buf[0] = (u8)v;
-    buf[1] = (u8)(v >> 8);
-    buf[2] = (u8)(v >> 16);
-    buf[3] = (u8)(v >> 24);
-    buf[4] = (u8)(v >> 32);
-    buf[5] = (u8)(v >> 40);
-    buf[6] = (u8)(v >> 48);
-    buf[7] = (u8)(v >> 56);
-}
-
-static void
-UA_decode64(const u8 buf[8], u64 *v) {
-    *v = (u64)((u64)buf[0] + (((u64)buf[1]) << 8) +
-             (((u64)buf[2]) << 16) + (((u64)buf[3]) << 24) +
-             (((u64)buf[4]) << 32) + (((u64)buf[5]) << 40) +
-             (((u64)buf[6]) << 48) + (((u64)buf[7]) << 56));
-}
-
-#endif /* !UA_BINARY_OVERLAYABLE_INTEGER */
-
-/* Boolean */
-/* Note that sizeof(bool) != 1 on some platforms. Overlayable integer encoding
- * is disabled in those cases. */
-ENCODE_BINARY(Boolean) {
-    if(ctx->pos + 1 > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-    *ctx->pos = *(const u8*)src;
-    ++ctx->pos;
-    return UA_STATUSCODE_GOOD;
-}
-
-DECODE_BINARY(Boolean) {
-    if(ctx->pos + 1 > ctx->end)
-        return UA_STATUSCODE_BADDECODINGERROR;
-    *dst = (*ctx->pos > 0) ? true : false;
-    ++ctx->pos;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Byte */
-ENCODE_BINARY(Byte) {
-    if(ctx->pos + sizeof(u8) > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-    *ctx->pos = *(const u8*)src;
-    ++ctx->pos;
-    return UA_STATUSCODE_GOOD;
-}
-
-DECODE_BINARY(Byte) {
-    if(ctx->pos + sizeof(u8) > ctx->end)
-        return UA_STATUSCODE_BADDECODINGERROR;
-    *dst = *ctx->pos;
-    ++ctx->pos;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* UInt16 */
-ENCODE_BINARY(UInt16) {
-    if(ctx->pos + sizeof(u16) > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-#if UA_BINARY_OVERLAYABLE_INTEGER
-    memcpy(ctx->pos, src, sizeof(u16));
-#else
-    UA_encode16(*src, ctx->pos);
-#endif
-    ctx->pos += 2;
-    return UA_STATUSCODE_GOOD;
-}
-
-DECODE_BINARY(UInt16) {
-    if(ctx->pos + sizeof(u16) > ctx->end)
-        return UA_STATUSCODE_BADDECODINGERROR;
-#if UA_BINARY_OVERLAYABLE_INTEGER
-    memcpy(dst, ctx->pos, sizeof(u16));
-#else
-    UA_decode16(ctx->pos, dst);
-#endif
-    ctx->pos += 2;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* UInt32 */
-ENCODE_BINARY(UInt32) {
-    if(ctx->pos + sizeof(u32) > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-#if UA_BINARY_OVERLAYABLE_INTEGER
-    memcpy(ctx->pos, src, sizeof(u32));
-#else
-    UA_encode32(*src, ctx->pos);
-#endif
-    ctx->pos += 4;
-    return UA_STATUSCODE_GOOD;
-}
-
-DECODE_BINARY(UInt32) {
-    if(ctx->pos + sizeof(u32) > ctx->end)
-        return UA_STATUSCODE_BADDECODINGERROR;
-#if UA_BINARY_OVERLAYABLE_INTEGER
-    memcpy(dst, ctx->pos, sizeof(u32));
-#else
-    UA_decode32(ctx->pos, dst);
-#endif
-    ctx->pos += 4;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* UInt64 */
-ENCODE_BINARY(UInt64) {
-    if(ctx->pos + sizeof(u64) > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-#if UA_BINARY_OVERLAYABLE_INTEGER
-    memcpy(ctx->pos, src, sizeof(u64));
-#else
-    UA_encode64(*src, ctx->pos);
-#endif
-    ctx->pos += 8;
-    return UA_STATUSCODE_GOOD;
-}
-
-DECODE_BINARY(UInt64) {
-    if(ctx->pos + sizeof(u64) > ctx->end)
-        return UA_STATUSCODE_BADDECODINGERROR;
-#if UA_BINARY_OVERLAYABLE_INTEGER
-    memcpy(dst, ctx->pos, sizeof(u64));
-#else
-    UA_decode64(ctx->pos, dst);
-#endif
-    ctx->pos += 8;
-    return UA_STATUSCODE_GOOD;
-}
-
-/************************/
-/* Floating Point Types */
-/************************/
-
-/* Can we reuse the integer encoding mechanism by casting floating point
- * values? */
-#if (UA_FLOAT_IEEE754 == 1) && (UA_LITTLE_ENDIAN == UA_FLOAT_LITTLE_ENDIAN)
-# define Float_encodeBinary UInt32_encodeBinary
-# define Float_decodeBinary UInt32_decodeBinary
-# define Double_encodeBinary UInt64_encodeBinary
-# define Double_decodeBinary UInt64_decodeBinary
-#else
-
-#include <math.h>
-
-#pragma message "No native IEEE 754 format detected. Use slow generic encoding."
-
-/* Handling of IEEE754 floating point values was taken from Beej's Guide to
- * Network Programming (http://beej.us/guide/bgnet/) and enhanced to cover the
- * edge cases +/-0, +/-inf and nan. */
-static uint64_t
-pack754(long double f, unsigned bits, unsigned expbits) {
-    unsigned significandbits = bits - expbits - 1;
-    long double fnorm;
-    long long sign;
-    if(f < 0) { sign = 1; fnorm = -f; }
-    else { sign = 0; fnorm = f; }
-    int shift = 0;
-    while(fnorm >= 2.0) { fnorm /= 2.0; ++shift; }
-    while(fnorm < 1.0) { fnorm *= 2.0; --shift; }
-    fnorm = fnorm - 1.0;
-    long long significand = (long long)(fnorm * ((float)(1LL<<significandbits) + 0.5f));
-    long long exponent = shift + ((1<<(expbits-1)) - 1);
-    return (uint64_t)((sign<<(bits-1)) | (exponent<<(bits-expbits-1)) | significand);
-}
-
-static long double
-unpack754(uint64_t i, unsigned bits, unsigned expbits) {
-    unsigned significandbits = bits - expbits - 1;
-    long double result = (long double)(i&(uint64_t)((1LL<<significandbits)-1));
-    result /= (1LL<<significandbits);
-    result += 1.0f;
-    unsigned bias = (unsigned)(1<<(expbits-1)) - 1;
-    long long shift = (long long)((i>>significandbits) & (uint64_t)((1LL<<expbits)-1)) - bias;
-    while(shift > 0) { result *= 2.0; --shift; }
-    while(shift < 0) { result /= 2.0; ++shift; }
-    result *= ((i>>(bits-1))&1)? -1.0: 1.0;
-    return result;
-}
-
-/* Float */
-#define FLOAT_NAN 0xffc00000
-#define FLOAT_INF 0x7f800000
-#define FLOAT_NEG_INF 0xff800000
-#define FLOAT_NEG_ZERO 0x80000000
-
-ENCODE_BINARY(Float) {
-    UA_Float f = *src;
-    u32 encoded;
-    /* cppcheck-suppress duplicateExpression */
-    if(f != f) encoded = FLOAT_NAN;
-    else if(f == 0.0f) encoded = signbit(f) ? FLOAT_NEG_ZERO : 0;
-    else if(f/f != f/f) encoded = f > 0 ? FLOAT_INF : FLOAT_NEG_INF;
-    else encoded = (u32)pack754(f, 32, 8);
-    return ENCODE_DIRECT(&encoded, UInt32);
-}
-
-DECODE_BINARY(Float) {
-    u32 decoded;
-    status ret = DECODE_DIRECT(&decoded, UInt32);
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-    if(decoded == 0) *dst = 0.0f;
-    else if(decoded == FLOAT_NEG_ZERO) *dst = -0.0f;
-    else if(decoded == FLOAT_INF) *dst = INFINITY;
-    else if(decoded == FLOAT_NEG_INF) *dst = -INFINITY;
-    else if((decoded >= 0x7f800001 && decoded <= 0x7fffffff) ||
-       (decoded >= 0xff800001)) *dst = NAN;
-    else *dst = (UA_Float)unpack754(decoded, 32, 8);
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Double */
-#define DOUBLE_NAN 0xfff8000000000000L
-#define DOUBLE_INF 0x7ff0000000000000L
-#define DOUBLE_NEG_INF 0xfff0000000000000L
-#define DOUBLE_NEG_ZERO 0x8000000000000000L
-
-ENCODE_BINARY(Double) {
-    UA_Double d = *src;
-    u64 encoded;
-    /* cppcheck-suppress duplicateExpression */
-    if(d != d) encoded = DOUBLE_NAN;
-    else if(d == 0.0) encoded = signbit(d) ? DOUBLE_NEG_ZERO : 0;
-    else if(d/d != d/d) encoded = d > 0 ? DOUBLE_INF : DOUBLE_NEG_INF;
-    else encoded = pack754(d, 64, 11);
-    return ENCODE_DIRECT(&encoded, UInt64);
-}
-
-DECODE_BINARY(Double) {
-    u64 decoded;
-    status ret = DECODE_DIRECT(&decoded, UInt64);
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-    if(decoded == 0) *dst = 0.0;
-    else if(decoded == DOUBLE_NEG_ZERO) *dst = -0.0;
-    else if(decoded == DOUBLE_INF) *dst = INFINITY;
-    else if(decoded == DOUBLE_NEG_INF) *dst = -INFINITY;
-    else if((decoded >= 0x7ff0000000000001L && decoded <= 0x7fffffffffffffffL) ||
-       (decoded >= 0xfff0000000000001L)) *dst = NAN;
-    else *dst = (UA_Double)unpack754(decoded, 64, 11);
-    return UA_STATUSCODE_GOOD;
-}
-
-#endif
-
-/******************/
-/* Array Handling */
-/******************/
-
-static status
-Array_encodeBinaryOverlayable(uintptr_t ptr, size_t length,
-                              size_t elementMemSize, Ctx *ctx) {
-    /* Store the number of already encoded elements */
-    size_t finished = 0;
-
-    /* Loop as long as more elements remain than fit into the chunk */
-    while(ctx->end < ctx->pos + (elementMemSize * (length-finished))) {
-        size_t possible = ((uintptr_t)ctx->end - (uintptr_t)ctx->pos) / (sizeof(u8) * elementMemSize);
-        size_t possibleMem = possible * elementMemSize;
-        memcpy(ctx->pos, (void*)ptr, possibleMem);
-        ctx->pos += possibleMem;
-        ptr += possibleMem;
-        finished += possible;
-        status ret = exchangeBuffer(ctx);
-        ctx->oldpos = NULL; /* Set the sentinel so that no upper stack frame
-                             * with a saved pos attempts to exchange from an
-                             * invalid position in the old buffer. */
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    /* Encode the remaining elements */
-    memcpy(ctx->pos, (void*)ptr, elementMemSize * (length-finished));
-    ctx->pos += elementMemSize * (length-finished);
-    return UA_STATUSCODE_GOOD;
-}
-
-static status
-Array_encodeBinaryComplex(uintptr_t ptr, size_t length,
-                          const UA_DataType *type, Ctx *ctx) {
-    /* Encode every element */
-    for(size_t i = 0; i < length; ++i) {
-        status ret = encodeWithExchangeBuffer((const void*)ptr, type, ctx);
-        ptr += type->memSize;
-
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret; /* Unrecoverable fail */
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static status
-Array_encodeBinary(const void *src, size_t length,
-                   const UA_DataType *type, Ctx *ctx) {
-    /* Check and convert the array length to int32 */
-    i32 signed_length = -1;
-    if(length > UA_INT32_MAX)
-        return UA_STATUSCODE_BADINTERNALERROR;
-    if(length > 0)
-        signed_length = (i32)length;
-    else if(src == UA_EMPTY_ARRAY_SENTINEL)
-        signed_length = 0;
-
-    /* Encode the array length */
-    status ret = ENCODE_WITHEXCHANGE(&signed_length, UA_TYPES_INT32);
-
-    /* Quit early? */
-    if(ret != UA_STATUSCODE_GOOD || length == 0)
-        return ret;
-
-    /* Encode the content */
-    if(!type->overlayable)
-        return Array_encodeBinaryComplex((uintptr_t)src, length, type, ctx);
-    return Array_encodeBinaryOverlayable((uintptr_t)src, length, type->memSize, ctx);
-}
-
-static status
-Array_decodeBinary(void *UA_RESTRICT *UA_RESTRICT dst, size_t *out_length,
-                   const UA_DataType *type, Ctx *ctx) {
-    /* Decode the length */
-    i32 signed_length;
-    status ret = DECODE_DIRECT(&signed_length, UInt32); /* Int32 */
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-
-    /* Return early for empty arrays */
-    if(signed_length <= 0) {
-        *out_length = 0;
-        if(signed_length < 0)
-            *dst = NULL;
-        else
-            *dst = UA_EMPTY_ARRAY_SENTINEL;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* Filter out arrays that can obviously not be decoded, because the message
-     * is too small for the array length. This prevents the allocation of very
-     * long arrays for bogus messages.*/
-    size_t length = (size_t)signed_length;
-    if(ctx->pos + ((type->memSize * length) / 32) > ctx->end)
-        return UA_STATUSCODE_BADDECODINGERROR;
-
-    /* Allocate memory */
-    *dst = UA_calloc(length, type->memSize);
-    if(!*dst)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    if(type->overlayable) {
-        /* memcpy overlayable array */
-        if(ctx->end < ctx->pos + (type->memSize * length)) {
-            UA_free(*dst);
-            *dst = NULL;
-            return UA_STATUSCODE_BADDECODINGERROR;
-        }
-        memcpy(*dst, ctx->pos, type->memSize * length);
-        ctx->pos += type->memSize * length;
-    } else {
-        /* Decode array members */
-        uintptr_t ptr = (uintptr_t)*dst;
-        for(size_t i = 0; i < length; ++i) {
-            ret = decodeBinaryJumpTable[type->typeKind]((void*)ptr, type, ctx);
-            if(ret != UA_STATUSCODE_GOOD) {
-                /* +1 because last element is also already initialized */
-                UA_Array_delete(*dst, i+1, type);
-                *dst = NULL;
-                return ret;
-            }
-            ptr += type->memSize;
-        }
-    }
-    *out_length = length;
-    return UA_STATUSCODE_GOOD;
-}
-
-/*****************/
-/* Builtin Types */
-/*****************/
-
-ENCODE_BINARY(String) {
-    return Array_encodeBinary(src->data, src->length, &UA_TYPES[UA_TYPES_BYTE], ctx);
-}
-
-DECODE_BINARY(String) {
-    return Array_decodeBinary((void**)&dst->data, &dst->length, &UA_TYPES[UA_TYPES_BYTE], ctx);
-}
-
-/* Guid */
-ENCODE_BINARY(Guid) {
-    status ret = UA_STATUSCODE_GOOD;
-    ret |= ENCODE_DIRECT(&src->data1, UInt32);
-    ret |= ENCODE_DIRECT(&src->data2, UInt16);
-    ret |= ENCODE_DIRECT(&src->data3, UInt16);
-    if(ctx->pos + (8*sizeof(u8)) > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-    memcpy(ctx->pos, src->data4, 8*sizeof(u8));
-    ctx->pos += 8;
-    return ret;
-}
-
-DECODE_BINARY(Guid) {
-    status ret = UA_STATUSCODE_GOOD;
-    ret |= DECODE_DIRECT(&dst->data1, UInt32);
-    ret |= DECODE_DIRECT(&dst->data2, UInt16);
-    ret |= DECODE_DIRECT(&dst->data3, UInt16);
-    if(ctx->pos + (8*sizeof(u8)) > ctx->end)
-        return UA_STATUSCODE_BADDECODINGERROR;
-    memcpy(dst->data4, ctx->pos, 8*sizeof(u8));
-    ctx->pos += 8;
-    return ret;
-}
-
-/* NodeId */
-#define UA_NODEIDTYPE_NUMERIC_TWOBYTE 0u
-#define UA_NODEIDTYPE_NUMERIC_FOURBYTE 1u
-#define UA_NODEIDTYPE_NUMERIC_COMPLETE 2u
-
-#define UA_EXPANDEDNODEID_SERVERINDEX_FLAG 0x40u
-#define UA_EXPANDEDNODEID_NAMESPACEURI_FLAG 0x80u
-
-/* For ExpandedNodeId, we prefill the encoding mask. */
-static status
-NodeId_encodeBinaryWithEncodingMask(UA_NodeId const *src, u8 encoding, Ctx *ctx) {
-    status ret = UA_STATUSCODE_GOOD;
-    switch(src->identifierType) {
-    case UA_NODEIDTYPE_NUMERIC:
-        if(src->identifier.numeric > UA_UINT16_MAX || src->namespaceIndex > UA_BYTE_MAX) {
-            encoding |= UA_NODEIDTYPE_NUMERIC_COMPLETE;
-            ret |= ENCODE_DIRECT(&encoding, Byte);
-            ret |= ENCODE_DIRECT(&src->namespaceIndex, UInt16);
-            ret |= ENCODE_DIRECT(&src->identifier.numeric, UInt32);
-        } else if(src->identifier.numeric > UA_BYTE_MAX || src->namespaceIndex > 0) {
-            encoding |= UA_NODEIDTYPE_NUMERIC_FOURBYTE;
-            ret |= ENCODE_DIRECT(&encoding, Byte);
-            u8 nsindex = (u8)src->namespaceIndex;
-            ret |= ENCODE_DIRECT(&nsindex, Byte);
-            u16 identifier16 = (u16)src->identifier.numeric;
-            ret |= ENCODE_DIRECT(&identifier16, UInt16);
-        } else {
-            encoding |= UA_NODEIDTYPE_NUMERIC_TWOBYTE;
-            ret |= ENCODE_DIRECT(&encoding, Byte);
-            u8 identifier8 = (u8)src->identifier.numeric;
-            ret |= ENCODE_DIRECT(&identifier8, Byte);
-        }
-        break;
-    case UA_NODEIDTYPE_STRING:encoding |= (u8)UA_NODEIDTYPE_STRING;
-        ret |= ENCODE_DIRECT(&encoding, Byte);
-        ret |= ENCODE_DIRECT(&src->namespaceIndex, UInt16);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-        ret = ENCODE_DIRECT(&src->identifier.string, String);
-        break;
-    case UA_NODEIDTYPE_GUID:encoding |= (u8)UA_NODEIDTYPE_GUID;
-        ret |= ENCODE_DIRECT(&encoding, Byte);
-        ret |= ENCODE_DIRECT(&src->namespaceIndex, UInt16);
-        ret |= ENCODE_DIRECT(&src->identifier.guid, Guid);
-        break;
-    case UA_NODEIDTYPE_BYTESTRING:encoding |= (u8)UA_NODEIDTYPE_BYTESTRING;
-        ret |= ENCODE_DIRECT(&encoding, Byte);
-        ret |= ENCODE_DIRECT(&src->namespaceIndex, UInt16);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-        ret = ENCODE_DIRECT(&src->identifier.byteString, String); /* ByteString */
-        break;
-    default:
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    return ret;
-}
-
-ENCODE_BINARY(NodeId) {
-    return NodeId_encodeBinaryWithEncodingMask(src, 0, ctx);
-}
-
-DECODE_BINARY(NodeId) {
-    u8 dstByte = 0, encodingByte = 0;
-    u16 dstUInt16 = 0;
-
-    /* Decode the encoding bitfield */
-    status ret = DECODE_DIRECT(&encodingByte, Byte);
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-
-    /* Filter out the bits used only for ExpandedNodeIds */
-    encodingByte &= (u8)~(u8)(UA_EXPANDEDNODEID_SERVERINDEX_FLAG |
-                              UA_EXPANDEDNODEID_NAMESPACEURI_FLAG);
-
-    /* Decode the namespace and identifier */
-    switch(encodingByte) {
-    case UA_NODEIDTYPE_NUMERIC_TWOBYTE:
-        dst->identifierType = UA_NODEIDTYPE_NUMERIC;
-        ret = DECODE_DIRECT(&dstByte, Byte);
-        dst->identifier.numeric = dstByte;
-        dst->namespaceIndex = 0;
-        break;
-    case UA_NODEIDTYPE_NUMERIC_FOURBYTE:
-        dst->identifierType = UA_NODEIDTYPE_NUMERIC;
-        ret |= DECODE_DIRECT(&dstByte, Byte);
-        dst->namespaceIndex = dstByte;
-        ret |= DECODE_DIRECT(&dstUInt16, UInt16);
-        dst->identifier.numeric = dstUInt16;
-        break;
-    case UA_NODEIDTYPE_NUMERIC_COMPLETE:
-        dst->identifierType = UA_NODEIDTYPE_NUMERIC;
-        ret |= DECODE_DIRECT(&dst->namespaceIndex, UInt16);
-        ret |= DECODE_DIRECT(&dst->identifier.numeric, UInt32);
-        break;
-    case UA_NODEIDTYPE_STRING:
-        dst->identifierType = UA_NODEIDTYPE_STRING;
-        ret |= DECODE_DIRECT(&dst->namespaceIndex, UInt16);
-        ret |= DECODE_DIRECT(&dst->identifier.string, String);
-        break;
-    case UA_NODEIDTYPE_GUID:
-        dst->identifierType = UA_NODEIDTYPE_GUID;
-        ret |= DECODE_DIRECT(&dst->namespaceIndex, UInt16);
-        ret |= DECODE_DIRECT(&dst->identifier.guid, Guid);
-        break;
-    case UA_NODEIDTYPE_BYTESTRING:
-        dst->identifierType = UA_NODEIDTYPE_BYTESTRING;
-        ret |= DECODE_DIRECT(&dst->namespaceIndex, UInt16);
-        ret |= DECODE_DIRECT(&dst->identifier.byteString, String); /* ByteString */
-        break;
-    default:
-        ret |= UA_STATUSCODE_BADINTERNALERROR;
-        break;
-    }
-    return ret;
-}
-
-/* ExpandedNodeId */
-ENCODE_BINARY(ExpandedNodeId) {
-    /* Set up the encoding mask */
-    u8 encoding = 0;
-    if((void*)src->namespaceUri.data > UA_EMPTY_ARRAY_SENTINEL)
-        encoding |= UA_EXPANDEDNODEID_NAMESPACEURI_FLAG;
-    if(src->serverIndex > 0)
-        encoding |= UA_EXPANDEDNODEID_SERVERINDEX_FLAG;
-
-    /* Encode the NodeId */
-    status ret = NodeId_encodeBinaryWithEncodingMask(&src->nodeId, encoding, ctx);
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-
-    /* Encode the namespace. */
-    if((void*)src->namespaceUri.data > UA_EMPTY_ARRAY_SENTINEL) {
-        ret = ENCODE_DIRECT(&src->namespaceUri, String);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    /* Encode the serverIndex */
-    if(src->serverIndex > 0)
-        ret = ENCODE_WITHEXCHANGE(&src->serverIndex, UA_TYPES_UINT32);
-    return ret;
-}
-
-DECODE_BINARY(ExpandedNodeId) {
-    /* Decode the encoding mask */
-    if(ctx->pos >= ctx->end)
-        return UA_STATUSCODE_BADDECODINGERROR;
-    u8 encoding = *ctx->pos;
-
-    /* Decode the NodeId */
-    status ret = DECODE_DIRECT(&dst->nodeId, NodeId);
-
-    /* Decode the NamespaceUri */
-    if(encoding & UA_EXPANDEDNODEID_NAMESPACEURI_FLAG) {
-        dst->nodeId.namespaceIndex = 0;
-        ret |= DECODE_DIRECT(&dst->namespaceUri, String);
-    }
-
-    /* Decode the ServerIndex */
-    if(encoding & UA_EXPANDEDNODEID_SERVERINDEX_FLAG)
-        ret |= DECODE_DIRECT(&dst->serverIndex, UInt32);
-    return ret;
-}
-
-/* QualifiedName */
-ENCODE_BINARY(QualifiedName) {
-    status ret = ENCODE_DIRECT(&src->namespaceIndex, UInt16);
-    ret |= ENCODE_DIRECT(&src->name, String);
-    return ret;
-}
-
-DECODE_BINARY(QualifiedName) {
-    status ret = DECODE_DIRECT(&dst->namespaceIndex, UInt16);
-    ret |= DECODE_DIRECT(&dst->name, String);
-    return ret;
-}
-
-/* LocalizedText */
-#define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_LOCALE 0x01u
-#define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_TEXT 0x02u
-
-ENCODE_BINARY(LocalizedText) {
-    /* Set up the encoding mask */
-    u8 encoding = 0;
-    if(src->locale.data)
-        encoding |= UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_LOCALE;
-    if(src->text.data)
-        encoding |= UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_TEXT;
-
-    /* Encode the encoding byte */
-    status ret = ENCODE_DIRECT(&encoding, Byte);
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-
-    /* Encode the strings */
-    if(encoding & UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_LOCALE)
-        ret |= ENCODE_DIRECT(&src->locale, String);
-    if(encoding & UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_TEXT)
-        ret |= ENCODE_DIRECT(&src->text, String);
-    return ret;
-}
-
-DECODE_BINARY(LocalizedText) {
-    /* Decode the encoding mask */
-    u8 encoding = 0;
-    status ret = DECODE_DIRECT(&encoding, Byte);
-
-    /* Decode the content */
-    if(encoding & UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_LOCALE)
-        ret |= DECODE_DIRECT(&dst->locale, String);
-    if(encoding & UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_TEXT)
-        ret |= DECODE_DIRECT(&dst->text, String);
-    return ret;
-}
-
-/* The binary encoding has a different nodeid from the data type. So it is not
- * possible to reuse UA_findDataType */
-static const UA_DataType *
-UA_findDataTypeByBinaryInternal(const UA_NodeId *typeId, Ctx *ctx) {
-    /* We only store a numeric identifier for the encoding nodeid of data types */
-    if(typeId->identifierType != UA_NODEIDTYPE_NUMERIC)
-        return NULL;
-
-    /* Always look in built-in types first
-     * (may contain data types from all namespaces) */
-    for(size_t i = 0; i < UA_TYPES_COUNT; ++i) {
-        if(UA_TYPES[i].binaryEncodingId == typeId->identifier.numeric &&
-           UA_TYPES[i].typeId.namespaceIndex == typeId->namespaceIndex)
-            return &UA_TYPES[i];
-    }
-
-    const UA_DataTypeArray *customTypes = ctx->customTypes;
-    while(customTypes) {
-        for(size_t i = 0; i < customTypes->typesSize; ++i) {
-            if(customTypes->types[i].binaryEncodingId == typeId->identifier.numeric &&
-               customTypes->types[i].typeId.namespaceIndex == typeId->namespaceIndex)
-                return &customTypes->types[i];
-        }
-        customTypes = customTypes->next;
-    }
-
-    return NULL;
-}
-
-const UA_DataType *
-UA_findDataTypeByBinary(const UA_NodeId *typeId) {
-    Ctx ctx;
-    ctx.customTypes = NULL;
-    return UA_findDataTypeByBinaryInternal(typeId, &ctx);
-}
-
-/* ExtensionObject */
-ENCODE_BINARY(ExtensionObject) {
-    u8 encoding = (u8)src->encoding;
-
-    /* No content or already encoded content. */
-    if(encoding <= UA_EXTENSIONOBJECT_ENCODED_XML) {
-        status ret = ENCODE_DIRECT(&src->content.encoded.typeId, NodeId);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-        ret = ENCODE_WITHEXCHANGE(&encoding, UA_TYPES_BYTE);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-        switch(src->encoding) {
-        case UA_EXTENSIONOBJECT_ENCODED_NOBODY:
-            break;
-        case UA_EXTENSIONOBJECT_ENCODED_BYTESTRING:
-        case UA_EXTENSIONOBJECT_ENCODED_XML:
-            ret = ENCODE_DIRECT(&src->content.encoded.body, String); /* ByteString */
-            break;
-        default:
-            ret = UA_STATUSCODE_BADINTERNALERROR;
-        }
-        return ret;
-    }
-
-    /* Cannot encode with no data or no type description */
-    if(!src->content.decoded.type || !src->content.decoded.data)
-        return UA_STATUSCODE_BADENCODINGERROR;
-
-    /* Write the NodeId for the binary encoded type. The NodeId is always
-     * numeric, so no buffer replacement is taking place. */
-    UA_NodeId typeId = src->content.decoded.type->typeId;
-    if(typeId.identifierType != UA_NODEIDTYPE_NUMERIC)
-        return UA_STATUSCODE_BADENCODINGERROR;
-    typeId.identifier.numeric = src->content.decoded.type->binaryEncodingId;
-    status ret = ENCODE_DIRECT(&typeId, NodeId);
-
-    /* Write the encoding byte */
-    encoding = UA_EXTENSIONOBJECT_ENCODED_BYTESTRING;
-    ret |= ENCODE_DIRECT(&encoding, Byte);
-
-    /* Compute the content length */
-    const UA_DataType *contentType = src->content.decoded.type;
-    size_t len = UA_calcSizeBinary(src->content.decoded.data, contentType);
-
-    /* Encode the content length */
-    if(len > UA_INT32_MAX)
-        return UA_STATUSCODE_BADENCODINGERROR;
-    i32 signed_len = (i32)len;
-    ret |= ENCODE_DIRECT(&signed_len, UInt32); /* Int32 */
-
-    /* Return early upon failures (no buffer exchange until here) */
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-
-    /* Encode the content */
-    return encodeWithExchangeBuffer(src->content.decoded.data, contentType, ctx);
-}
-
-static status
-ExtensionObject_decodeBinaryContent(UA_ExtensionObject *dst, const UA_NodeId *typeId, Ctx *ctx) {
-    /* Lookup the datatype */
-    const UA_DataType *type = UA_findDataTypeByBinaryInternal(typeId, ctx);
-
-    /* Unknown type, just take the binary content */
-    if(!type) {
-        dst->encoding = UA_EXTENSIONOBJECT_ENCODED_BYTESTRING;
-        UA_NodeId_copy(typeId, &dst->content.encoded.typeId);
-        return DECODE_DIRECT(&dst->content.encoded.body, String); /* ByteString */
-    }
-
-    /* Allocate memory */
-    dst->content.decoded.data = UA_new(type);
-    if(!dst->content.decoded.data)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    /* Jump over the length field (TODO: check if the decoded length matches) */
-    ctx->pos += 4;
-
-    /* Decode */
-    dst->encoding = UA_EXTENSIONOBJECT_DECODED;
-    dst->content.decoded.type = type;
-    return decodeBinaryJumpTable[type->typeKind](dst->content.decoded.data, type, ctx);
-}
-
-DECODE_BINARY(ExtensionObject) {
-    u8 encoding = 0;
-    UA_NodeId binTypeId; /* Can contain a string nodeid. But no corresponding
-                          * type is then found in open62541. We only store
-                          * numerical nodeids of the binary encoding identifier.
-                          * The extenionobject will be decoded to contain a
-                          * binary blob. */
-    UA_NodeId_init(&binTypeId);
-    status ret = UA_STATUSCODE_GOOD;
-    ret |= DECODE_DIRECT(&binTypeId, NodeId);
-    ret |= DECODE_DIRECT(&encoding, Byte);
-    if(ret != UA_STATUSCODE_GOOD) {
-        UA_NodeId_clear(&binTypeId);
-        return ret;
-    }
-
-    switch(encoding) {
-    case UA_EXTENSIONOBJECT_ENCODED_BYTESTRING:
-        ret = ExtensionObject_decodeBinaryContent(dst, &binTypeId, ctx);
-        UA_NodeId_deleteMembers(&binTypeId);
-        break;
-    case UA_EXTENSIONOBJECT_ENCODED_NOBODY:
-        dst->encoding = (UA_ExtensionObjectEncoding)encoding;
-        dst->content.encoded.typeId = binTypeId; /* move to dst */
-        dst->content.encoded.body = UA_BYTESTRING_NULL;
-        break;
-    case UA_EXTENSIONOBJECT_ENCODED_XML:
-        dst->encoding = (UA_ExtensionObjectEncoding)encoding;
-        dst->content.encoded.typeId = binTypeId; /* move to dst */
-        ret = DECODE_DIRECT(&dst->content.encoded.body, String); /* ByteString */
-        if(ret != UA_STATUSCODE_GOOD)
-            UA_NodeId_clear(&dst->content.encoded.typeId);
-        break;
-    default:
-        UA_NodeId_clear(&binTypeId);
-        ret = UA_STATUSCODE_BADDECODINGERROR;
-        break;
-    }
-
-    return ret;
-}
-
-/* Variant */
-
-static status
-Variant_encodeBinaryWrapExtensionObject(const UA_Variant *src,
-                                        const UA_Boolean isArray, Ctx *ctx) {
-    /* Default to 1 for a scalar. */
-    size_t length = 1;
-
-    /* Encode the array length if required */
-    status ret = UA_STATUSCODE_GOOD;
-    if(isArray) {
-        if(src->arrayLength > UA_INT32_MAX)
-            return UA_STATUSCODE_BADENCODINGERROR;
-        length = src->arrayLength;
-        i32 encodedLength = (i32)src->arrayLength;
-        ret = ENCODE_DIRECT(&encodedLength, UInt32); /* Int32 */
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    /* Set up the ExtensionObject */
-    UA_ExtensionObject eo;
-    UA_ExtensionObject_init(&eo);
-    eo.encoding = UA_EXTENSIONOBJECT_DECODED;
-    eo.content.decoded.type = src->type;
-    const u16 memSize = src->type->memSize;
-    uintptr_t ptr = (uintptr_t)src->data;
-
-    /* Iterate over the array */
-    for(size_t i = 0; i < length && ret == UA_STATUSCODE_GOOD; ++i) {
-        eo.content.decoded.data = (void*)ptr;
-        ret = encodeWithExchangeBuffer(&eo, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT], ctx);
-        ptr += memSize;
-    }
-    return ret;
-}
-
-enum UA_VARIANT_ENCODINGMASKTYPE {
-    UA_VARIANT_ENCODINGMASKTYPE_TYPEID_MASK = 0x3Fu,        /* bits 0:5 */
-    UA_VARIANT_ENCODINGMASKTYPE_DIMENSIONS = (u8)(0x01u << 6u), /* bit 6 */
-    UA_VARIANT_ENCODINGMASKTYPE_ARRAY = (u8)(0x01u << 7u)  /* bit 7 */
-};
-
-ENCODE_BINARY(Variant) {
-    /* Quit early for the empty variant */
-    u8 encoding = 0;
-    if(!src->type)
-        return ENCODE_DIRECT(&encoding, Byte);
-
-    /* Set the content type in the encoding mask */
-    const UA_Boolean isBuiltin = (src->type->typeKind <= UA_DATATYPEKIND_DIAGNOSTICINFO);
-    const UA_Boolean isEnum = (src->type->typeKind == UA_DATATYPEKIND_ENUM);
-    if(isBuiltin)
-        encoding = (u8)(encoding | (u8)((u8)UA_VARIANT_ENCODINGMASKTYPE_TYPEID_MASK & (u8)(src->type->typeKind + 1u)));
-    else if(isEnum)
-        encoding = (u8)(encoding | (u8)((u8)UA_VARIANT_ENCODINGMASKTYPE_TYPEID_MASK & (u8)(UA_TYPES_INT32 + 1u)));
-    else
-        encoding = (u8)(encoding | (u8)((u8)UA_VARIANT_ENCODINGMASKTYPE_TYPEID_MASK & (u8)(UA_TYPES_EXTENSIONOBJECT + 1u)));
-
-    /* Set the array type in the encoding mask */
-    const UA_Boolean isArray = src->arrayLength > 0 || src->data <= UA_EMPTY_ARRAY_SENTINEL;
-    const UA_Boolean hasDimensions = isArray && src->arrayDimensionsSize > 0;
-    if(isArray) {
-        encoding |= (u8)UA_VARIANT_ENCODINGMASKTYPE_ARRAY;
-        if(hasDimensions)
-            encoding |= (u8)UA_VARIANT_ENCODINGMASKTYPE_DIMENSIONS;
-    }
-
-    /* Encode the encoding byte */
-    status ret = ENCODE_DIRECT(&encoding, Byte);
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-
-    /* Encode the content */
-    if(!isBuiltin && !isEnum)
-        ret = Variant_encodeBinaryWrapExtensionObject(src, isArray, ctx);
-    else if(!isArray)
-        ret = encodeWithExchangeBuffer(src->data, src->type, ctx);
-    else
-        ret = Array_encodeBinary(src->data, src->arrayLength, src->type, ctx);
-
-    /* Encode the array dimensions */
-    if(hasDimensions && ret == UA_STATUSCODE_GOOD)
-        ret = Array_encodeBinary(src->arrayDimensions, src->arrayDimensionsSize,
-                                 &UA_TYPES[UA_TYPES_INT32], ctx);
-    return ret;
-}
-
-static status
-Variant_decodeBinaryUnwrapExtensionObject(UA_Variant *dst, Ctx *ctx) {
-    /* Save the position in the ByteString. If unwrapping is not possible, start
-     * from here to decode a normal ExtensionObject. */
-    u8 *old_pos = ctx->pos;
-
-    /* Decode the DataType */
-    UA_NodeId typeId;
-    UA_NodeId_init(&typeId);
-    status ret = DECODE_DIRECT(&typeId, NodeId);
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-
-    /* Decode the EncodingByte */
-    u8 encoding;
-    ret = DECODE_DIRECT(&encoding, Byte);
-    if(ret != UA_STATUSCODE_GOOD) {
-        UA_NodeId_clear(&typeId);
-        return ret;
-    }
-
-    /* Search for the datatype. Default to ExtensionObject. */
-    if(encoding == UA_EXTENSIONOBJECT_ENCODED_BYTESTRING &&
-       (dst->type = UA_findDataTypeByBinaryInternal(&typeId, ctx)) != NULL) {
-        /* Jump over the length field (TODO: check if length matches) */
-        ctx->pos += 4;
-    } else {
-        /* Reset and decode as ExtensionObject */
-        dst->type = &UA_TYPES[UA_TYPES_EXTENSIONOBJECT];
-        ctx->pos = old_pos;
-        UA_NodeId_clear(&typeId);
-    }
-
-    /* Allocate memory */
-    dst->data = UA_new(dst->type);
-    if(!dst->data)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    /* Decode the content */
-    return decodeBinaryJumpTable[dst->type->typeKind](dst->data, dst->type, ctx);
-}
-
-/* The resulting variant always has the storagetype UA_VARIANT_DATA. */
-DECODE_BINARY(Variant) {
-    /* Decode the encoding byte */
-    u8 encodingByte;
-    status ret = DECODE_DIRECT(&encodingByte, Byte);
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-
-    /* Return early for an empty variant (was already _inited) */
-    if(encodingByte == 0)
-        return UA_STATUSCODE_GOOD;
-
-    /* Does the variant contain an array? */
-    const UA_Boolean isArray = (encodingByte & (u8)UA_VARIANT_ENCODINGMASKTYPE_ARRAY) > 0;
-
-    /* Get the datatype of the content. The type must be a builtin data type.
-     * All not-builtin types are wrapped in an ExtensionObject. The "type kind"
-     * for types up to DiagnsticInfo equals to the index in the encoding
-     * byte. */
-    size_t typeKind = (size_t)((encodingByte & (u8)UA_VARIANT_ENCODINGMASKTYPE_TYPEID_MASK) - 1);
-    if(typeKind > UA_DATATYPEKIND_DIAGNOSTICINFO)
-        return UA_STATUSCODE_BADDECODINGERROR;
-
-    /* A variant cannot contain a variant. But it can contain an array of
-     * variants */
-    if(typeKind == UA_DATATYPEKIND_VARIANT && !isArray)
-        return UA_STATUSCODE_BADDECODINGERROR;
-
-    /* Check the recursion limit */
-    if(ctx->depth > UA_ENCODING_MAX_RECURSION)
-        return UA_STATUSCODE_BADENCODINGERROR;
-    ctx->depth++;
-
-    /* Decode the content */
-    dst->type = &UA_TYPES[typeKind];
-    if(isArray) {
-        ret = Array_decodeBinary(&dst->data, &dst->arrayLength, dst->type, ctx);
-    } else if(typeKind != UA_DATATYPEKIND_EXTENSIONOBJECT) {
-        dst->data = UA_new(dst->type);
-        if(!dst->data)
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        ret = decodeBinaryJumpTable[typeKind](dst->data, dst->type, ctx);
-    } else {
-        ret = Variant_decodeBinaryUnwrapExtensionObject(dst, ctx);
-    }
-
-    /* Decode array dimensions */
-    if(isArray && (encodingByte & (u8)UA_VARIANT_ENCODINGMASKTYPE_DIMENSIONS) > 0)
-        ret |= Array_decodeBinary((void**)&dst->arrayDimensions, &dst->arrayDimensionsSize,
-                                  &UA_TYPES[UA_TYPES_INT32], ctx);
-
-    ctx->depth--;
-    return ret;
-}
-
-/* DataValue */
-ENCODE_BINARY(DataValue) {
-    /* Set up the encoding mask */
-    u8 encodingMask = src->hasValue;
-    encodingMask |= (u8)(src->hasStatus << 1u);
-    encodingMask |= (u8)(src->hasSourceTimestamp << 2u);
-    encodingMask |= (u8)(src->hasServerTimestamp << 3u);
-    encodingMask |= (u8)(src->hasSourcePicoseconds << 4u);
-    encodingMask |= (u8)(src->hasServerPicoseconds << 5u);
-
-    /* Encode the encoding byte */
-    status ret = ENCODE_DIRECT(&encodingMask, Byte);
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-
-    /* Encode the variant. */
-    if(src->hasValue) {
-        ret = ENCODE_DIRECT(&src->value, Variant);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    if(src->hasStatus)
-        ret |= ENCODE_WITHEXCHANGE(&src->status, UA_TYPES_STATUSCODE);
-    if(src->hasSourceTimestamp)
-        ret |= ENCODE_WITHEXCHANGE(&src->sourceTimestamp, UA_TYPES_DATETIME);
-    if(src->hasSourcePicoseconds)
-        ret |= ENCODE_WITHEXCHANGE(&src->sourcePicoseconds, UA_TYPES_UINT16);
-    if(src->hasServerTimestamp)
-        ret |= ENCODE_WITHEXCHANGE(&src->serverTimestamp, UA_TYPES_DATETIME);
-    if(src->hasServerPicoseconds)
-        ret |= ENCODE_WITHEXCHANGE(&src->serverPicoseconds, UA_TYPES_UINT16);
-    return ret;
-}
-
-#define MAX_PICO_SECONDS 9999
-
-DECODE_BINARY(DataValue) {
-    /* Decode the encoding mask */
-    u8 encodingMask;
-    status ret = DECODE_DIRECT(&encodingMask, Byte);
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-
-    /* Check the recursion limit */
-    if(ctx->depth > UA_ENCODING_MAX_RECURSION)
-        return UA_STATUSCODE_BADENCODINGERROR;
-    ctx->depth++;
-
-    /* Decode the content */
-    if(encodingMask & 0x01u) {
-        dst->hasValue = true;
-        ret |= DECODE_DIRECT(&dst->value, Variant);
-    }
-    if(encodingMask & 0x02u) {
-        dst->hasStatus = true;
-        ret |= DECODE_DIRECT(&dst->status, UInt32); /* StatusCode */
-    }
-    if(encodingMask & 0x04u) {
-        dst->hasSourceTimestamp = true;
-        ret |= DECODE_DIRECT(&dst->sourceTimestamp, UInt64); /* DateTime */
-    }
-    if(encodingMask & 0x10u) {
-        dst->hasSourcePicoseconds = true;
-        ret |= DECODE_DIRECT(&dst->sourcePicoseconds, UInt16);
-        if(dst->sourcePicoseconds > MAX_PICO_SECONDS)
-            dst->sourcePicoseconds = MAX_PICO_SECONDS;
-    }
-    if(encodingMask & 0x08u) {
-        dst->hasServerTimestamp = true;
-        ret |= DECODE_DIRECT(&dst->serverTimestamp, UInt64); /* DateTime */
-    }
-    if(encodingMask & 0x20u) {
-        dst->hasServerPicoseconds = true;
-        ret |= DECODE_DIRECT(&dst->serverPicoseconds, UInt16);
-        if(dst->serverPicoseconds > MAX_PICO_SECONDS)
-            dst->serverPicoseconds = MAX_PICO_SECONDS;
-    }
-
-    ctx->depth--;
-
-    return ret;
-}
-
-/* DiagnosticInfo */
-ENCODE_BINARY(DiagnosticInfo) {
-    /* Set up the encoding mask */
-    u8 encodingMask = src->hasSymbolicId;
-    encodingMask |= (u8)(src->hasNamespaceUri << 1u);
-    encodingMask |= (u8)(src->hasLocalizedText << 2u);
-    encodingMask |= (u8)(src->hasLocale << 3u);
-    encodingMask |= (u8)(src->hasAdditionalInfo << 4u);
-    encodingMask |= (u8)(src->hasInnerDiagnosticInfo << 5u);
-
-    /* Encode the numeric content */
-    status ret = ENCODE_DIRECT(&encodingMask, Byte);
-    if(src->hasSymbolicId)
-        ret |= ENCODE_DIRECT(&src->symbolicId, UInt32); /* Int32 */
-    if(src->hasNamespaceUri)
-        ret |= ENCODE_DIRECT(&src->namespaceUri, UInt32); /* Int32 */
-    if(src->hasLocalizedText)
-        ret |= ENCODE_DIRECT(&src->localizedText, UInt32); /* Int32 */
-    if(src->hasLocale)
-        ret |= ENCODE_DIRECT(&src->locale, UInt32); /* Int32 */
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-
-    /* Encode the additional info */
-    if(src->hasAdditionalInfo) {
-        ret = ENCODE_DIRECT(&src->additionalInfo, String);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    /* Encode the inner status code */
-    if(src->hasInnerStatusCode) {
-        ret = ENCODE_WITHEXCHANGE(&src->innerStatusCode, UA_TYPES_UINT32);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    /* Encode the inner diagnostic info */
-    if(src->hasInnerDiagnosticInfo)
-        // innerDiagnosticInfo is already a pointer, so don't use the & reference here
-        ret = ENCODE_WITHEXCHANGE(src->innerDiagnosticInfo,
-                                  UA_TYPES_DIAGNOSTICINFO);
-
-    return ret;
-}
-
-DECODE_BINARY(DiagnosticInfo) {
-    /* Decode the encoding mask */
-    u8 encodingMask;
-    status ret = DECODE_DIRECT(&encodingMask, Byte);
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-
-    /* Decode the content */
-    if(encodingMask & 0x01u) {
-        dst->hasSymbolicId = true;
-        ret |= DECODE_DIRECT(&dst->symbolicId, UInt32); /* Int32 */
-    }
-    if(encodingMask & 0x02u) {
-        dst->hasNamespaceUri = true;
-        ret |= DECODE_DIRECT(&dst->namespaceUri, UInt32); /* Int32 */
-    }
-    if(encodingMask & 0x04u) {
-        dst->hasLocalizedText = true;
-        ret |= DECODE_DIRECT(&dst->localizedText, UInt32); /* Int32 */
-    }
-    if(encodingMask & 0x08u) {
-        dst->hasLocale = true;
-        ret |= DECODE_DIRECT(&dst->locale, UInt32); /* Int32 */
-    }
-    if(encodingMask & 0x10u) {
-        dst->hasAdditionalInfo = true;
-        ret |= DECODE_DIRECT(&dst->additionalInfo, String);
-    }
-    if(encodingMask & 0x20u) {
-        dst->hasInnerStatusCode = true;
-        ret |= DECODE_DIRECT(&dst->innerStatusCode, UInt32); /* StatusCode */
-    }
-    if(encodingMask & 0x40u) {
-        /* innerDiagnosticInfo is allocated on the heap */
-        dst->innerDiagnosticInfo = (UA_DiagnosticInfo*)
-            UA_calloc(1, sizeof(UA_DiagnosticInfo));
-        if(!dst->innerDiagnosticInfo)
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        dst->hasInnerDiagnosticInfo = true;
-
-        /* Check the recursion limit */
-        if(ctx->depth > UA_ENCODING_MAX_RECURSION)
-            return UA_STATUSCODE_BADENCODINGERROR;
-
-        ctx->depth++;
-        ret |= DECODE_DIRECT(dst->innerDiagnosticInfo, DiagnosticInfo);
-        ctx->depth--;
-    }
-    return ret;
-}
-
-static status
-encodeBinaryStruct(const void *src, const UA_DataType *type, Ctx *ctx) {
-    /* Check the recursion limit */
-    if(ctx->depth > UA_ENCODING_MAX_RECURSION)
-        return UA_STATUSCODE_BADENCODINGERROR;
-    ctx->depth++;
-
-    uintptr_t ptr = (uintptr_t)src;
-    status ret = UA_STATUSCODE_GOOD;
-    u8 membersSize = type->membersSize;
-    const UA_DataType *typelists[2] = { UA_TYPES, &type[-type->typeIndex] };
-
-    /* Loop over members */
-    for(size_t i = 0; i < membersSize; ++i) {
-        const UA_DataTypeMember *m = &type->members[i];
-        const UA_DataType *mt = &typelists[!m->namespaceZero][m->memberTypeIndex];
-        ptr += m->padding;
-
-        /* Array. Buffer-exchange is done inside Array_encodeBinary if required. */
-        if(m->isArray) {
-            const size_t length = *((const size_t*)ptr);
-            ptr += sizeof(size_t);
-            ret = Array_encodeBinary(*(void *UA_RESTRICT const *)ptr, length, mt, ctx);
-            ptr += sizeof(void*);
-            continue;
-        }
-
-        /* Scalar */
-        ret = encodeWithExchangeBuffer((const void*)ptr, mt, ctx);
-        ptr += mt->memSize;
-    }
-
-    ctx->depth--;
-    return ret;
-}
-
-static status
-encodeBinaryNotImplemented(const void *src, const UA_DataType *type, Ctx *ctx) {
-    (void)src, (void)type, (void)ctx;
-    return UA_STATUSCODE_BADNOTIMPLEMENTED;
-}
-
-/********************/
-/* Structured Types */
-/********************/
-
-const encodeBinarySignature encodeBinaryJumpTable[UA_DATATYPEKINDS] = {
-    (encodeBinarySignature)Boolean_encodeBinary,
-    (encodeBinarySignature)Byte_encodeBinary, /* SByte */
-    (encodeBinarySignature)Byte_encodeBinary,
-    (encodeBinarySignature)UInt16_encodeBinary, /* Int16 */
-    (encodeBinarySignature)UInt16_encodeBinary,
-    (encodeBinarySignature)UInt32_encodeBinary, /* Int32 */
-    (encodeBinarySignature)UInt32_encodeBinary,
-    (encodeBinarySignature)UInt64_encodeBinary, /* Int64 */
-    (encodeBinarySignature)UInt64_encodeBinary,
-    (encodeBinarySignature)Float_encodeBinary,
-    (encodeBinarySignature)Double_encodeBinary,
-    (encodeBinarySignature)String_encodeBinary,
-    (encodeBinarySignature)UInt64_encodeBinary, /* DateTime */
-    (encodeBinarySignature)Guid_encodeBinary,
-    (encodeBinarySignature)String_encodeBinary, /* ByteString */
-    (encodeBinarySignature)String_encodeBinary, /* XmlElement */
-    (encodeBinarySignature)NodeId_encodeBinary,
-    (encodeBinarySignature)ExpandedNodeId_encodeBinary,
-    (encodeBinarySignature)UInt32_encodeBinary, /* StatusCode */
-    (encodeBinarySignature)QualifiedName_encodeBinary,
-    (encodeBinarySignature)LocalizedText_encodeBinary,
-    (encodeBinarySignature)ExtensionObject_encodeBinary,
-    (encodeBinarySignature)DataValue_encodeBinary,
-    (encodeBinarySignature)Variant_encodeBinary,
-    (encodeBinarySignature)DiagnosticInfo_encodeBinary,
-    (encodeBinarySignature)encodeBinaryNotImplemented, /* Decimal */
-    (encodeBinarySignature)UInt32_encodeBinary, /* Enumeration */
-    (encodeBinarySignature)encodeBinaryStruct,
-    (encodeBinarySignature)encodeBinaryNotImplemented, /* Structure with Optional Fields */
-    (encodeBinarySignature)encodeBinaryStruct, /* Union */
-    (encodeBinarySignature)encodeBinaryStruct /* BitfieldCluster */
-};
-
-status
-UA_encodeBinary(const void *src, const UA_DataType *type,
-                u8 **bufPos, const u8 **bufEnd,
-                UA_exchangeEncodeBuffer exchangeCallback, void *exchangeHandle) {
-    /* Set up the context */
-    Ctx ctx;
-    ctx.pos = *bufPos;
-    ctx.end = *bufEnd;
-    ctx.depth = 0;
-    ctx.exchangeBufferCallback = exchangeCallback;
-    ctx.exchangeBufferCallbackHandle = exchangeHandle;
-
-    if(!ctx.pos)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-
-    /* Encode */
-    status ret = encodeWithExchangeBuffer(src, type, &ctx);
-
-    /* Set the new buffer position for the output. Beware that the buffer might
-     * have been exchanged internally. */
-    *bufPos = ctx.pos;
-    *bufEnd = ctx.end;
-    return ret;
-}
-
-static status
-decodeBinaryNotImplemented(void *dst, const UA_DataType *type, Ctx *ctx) {
-    (void)dst, (void)type, (void)ctx;
-    return UA_STATUSCODE_BADNOTIMPLEMENTED;
-}
-
-static status
-decodeBinaryStructure(void *dst, const UA_DataType *type, Ctx *ctx) {
-    /* Check the recursion limit */
-    if(ctx->depth > UA_ENCODING_MAX_RECURSION)
-        return UA_STATUSCODE_BADENCODINGERROR;
-    ctx->depth++;
-
-    uintptr_t ptr = (uintptr_t)dst;
-    status ret = UA_STATUSCODE_GOOD;
-    u8 membersSize = type->membersSize;
-    const UA_DataType *typelists[2] = { UA_TYPES, &type[-type->typeIndex] };
-
-    /* Loop over members */
-    for(size_t i = 0; i < membersSize && ret == UA_STATUSCODE_GOOD; ++i) {
-        const UA_DataTypeMember *m = &type->members[i];
-        const UA_DataType *mt = &typelists[!m->namespaceZero][m->memberTypeIndex];
-        ptr += m->padding;
-
-        /* Array */
-        if(m->isArray) {
-            size_t *length = (size_t*)ptr;
-            ptr += sizeof(size_t);
-            ret = Array_decodeBinary((void *UA_RESTRICT *UA_RESTRICT)ptr, length, mt , ctx);
-            ptr += sizeof(void*);
-            continue;
-        }
-
-        /* Scalar */
-        ret = decodeBinaryJumpTable[mt->typeKind]((void *UA_RESTRICT)ptr, mt, ctx);
-        ptr += mt->memSize;
-    }
-
-    ctx->depth--;
-    return ret;
-}
-
-const decodeBinarySignature decodeBinaryJumpTable[UA_DATATYPEKINDS] = {
-    (decodeBinarySignature)Boolean_decodeBinary,
-    (decodeBinarySignature)Byte_decodeBinary, /* SByte */
-    (decodeBinarySignature)Byte_decodeBinary,
-    (decodeBinarySignature)UInt16_decodeBinary, /* Int16 */
-    (decodeBinarySignature)UInt16_decodeBinary,
-    (decodeBinarySignature)UInt32_decodeBinary, /* Int32 */
-    (decodeBinarySignature)UInt32_decodeBinary,
-    (decodeBinarySignature)UInt64_decodeBinary, /* Int64 */
-    (decodeBinarySignature)UInt64_decodeBinary,
-    (decodeBinarySignature)Float_decodeBinary,
-    (decodeBinarySignature)Double_decodeBinary,
-    (decodeBinarySignature)String_decodeBinary,
-    (decodeBinarySignature)UInt64_decodeBinary, /* DateTime */
-    (decodeBinarySignature)Guid_decodeBinary,
-    (decodeBinarySignature)String_decodeBinary, /* ByteString */
-    (decodeBinarySignature)String_decodeBinary, /* XmlElement */
-    (decodeBinarySignature)NodeId_decodeBinary,
-    (decodeBinarySignature)ExpandedNodeId_decodeBinary,
-    (decodeBinarySignature)UInt32_decodeBinary, /* StatusCode */
-    (decodeBinarySignature)QualifiedName_decodeBinary,
-    (decodeBinarySignature)LocalizedText_decodeBinary,
-    (decodeBinarySignature)ExtensionObject_decodeBinary,
-    (decodeBinarySignature)DataValue_decodeBinary,
-    (decodeBinarySignature)Variant_decodeBinary,
-    (decodeBinarySignature)DiagnosticInfo_decodeBinary,
-    (decodeBinarySignature)decodeBinaryNotImplemented, /* Decimal */
-    (decodeBinarySignature)UInt32_decodeBinary, /* Enumeration */
-    (decodeBinarySignature)decodeBinaryStructure,
-    (decodeBinarySignature)decodeBinaryNotImplemented, /* Structure with optional fields */
-    (decodeBinarySignature)decodeBinaryNotImplemented, /* Union */
-    (decodeBinarySignature)decodeBinaryNotImplemented /* BitfieldCluster */
-};
-
-status
-UA_decodeBinary(const UA_ByteString *src, size_t *offset, void *dst,
-                const UA_DataType *type, const UA_DataTypeArray *customTypes) {
-    /* Set up the context */
-    Ctx ctx;
-    ctx.pos = &src->data[*offset];
-    ctx.end = &src->data[src->length];
-    ctx.depth = 0;
-    ctx.customTypes = customTypes;
-
-    /* Decode */
-    memset(dst, 0, type->memSize); /* Initialize the value */
-    status ret = decodeBinaryJumpTable[type->typeKind](dst, type, &ctx);
-
-    if(ret == UA_STATUSCODE_GOOD) {
-        /* Set the new offset */
-        *offset = (size_t)(ctx.pos - src->data) / sizeof(u8);
-    } else {
-        /* Clean up */
-        UA_clear(dst, type);
-        memset(dst, 0, type->memSize);
-    }
-    return ret;
-}
-
-/**
- * Compute the Message Size
- * ------------------------
- * The following methods are used to compute the length of a datum in binary
- * encoding. */
-
-static size_t
-Array_calcSizeBinary(const void *src, size_t length, const UA_DataType *type) {
-    size_t s = 4; /* length */
-    if(type->overlayable) {
-        s += type->memSize * length;
-        return s;
-    }
-    uintptr_t ptr = (uintptr_t)src;
-    for(size_t i = 0; i < length; ++i) {
-        s += calcSizeBinaryJumpTable[type->typeKind]((const void*)ptr, type);
-        ptr += type->memSize;
-    }
-    return s;
-}
-
-static size_t calcSizeBinary1(const void *_, const UA_DataType *__) { (void)_, (void)__; return 1; }
-static size_t calcSizeBinary2(const void *_, const UA_DataType *__) { (void)_, (void)__; return 2; }
-static size_t calcSizeBinary4(const void *_, const UA_DataType *__) { (void)_, (void)__; return 4; }
-static size_t calcSizeBinary8(const void *_, const UA_DataType *__) { (void)_, (void)__; return 8; }
-
-CALCSIZE_BINARY(String) { return 4 + src->length; }
-
-CALCSIZE_BINARY(Guid) { return 16; }
-
-CALCSIZE_BINARY(NodeId) {
-    size_t s = 1; /* Encoding byte */
-    switch(src->identifierType) {
-    case UA_NODEIDTYPE_NUMERIC:
-        if(src->identifier.numeric > UA_UINT16_MAX || src->namespaceIndex > UA_BYTE_MAX) {
-            s += 6;
-        } else if(src->identifier.numeric > UA_BYTE_MAX || src->namespaceIndex > 0) {
-            s += 3;
-        } else {
-            s += 1;
-        }
-        break;
-    case UA_NODEIDTYPE_BYTESTRING:
-    case UA_NODEIDTYPE_STRING:
-        s += 2;
-        s += String_calcSizeBinary(&src->identifier.string, NULL);
-        break;
-    case UA_NODEIDTYPE_GUID:
-        s += 18;
-        break;
-    default:
-        return 0;
-    }
-    return s;
-}
-
-CALCSIZE_BINARY(ExpandedNodeId) {
-    size_t s = NodeId_calcSizeBinary(&src->nodeId, NULL);
-    if(src->namespaceUri.length > 0)
-        s += String_calcSizeBinary(&src->namespaceUri, NULL);
-    if(src->serverIndex > 0)
-        s += 4;
-    return s;
-}
-
-CALCSIZE_BINARY(QualifiedName) {
-    return 2 + String_calcSizeBinary(&src->name, NULL);
-}
-
-CALCSIZE_BINARY(LocalizedText) {
-    size_t s = 1; /* Encoding byte */
-    if(src->locale.data)
-        s += String_calcSizeBinary(&src->locale, NULL);
-    if(src->text.data)
-        s += String_calcSizeBinary(&src->text, NULL);
-    return s;
-}
-
-CALCSIZE_BINARY(ExtensionObject) {
-    size_t s = 1; /* Encoding byte */
-
-    /* Encoded content */
-    if(src->encoding <= UA_EXTENSIONOBJECT_ENCODED_XML) {
-        s += NodeId_calcSizeBinary(&src->content.encoded.typeId, NULL);
-        switch(src->encoding) {
-        case UA_EXTENSIONOBJECT_ENCODED_NOBODY:
-            break;
-        case UA_EXTENSIONOBJECT_ENCODED_BYTESTRING:
-        case UA_EXTENSIONOBJECT_ENCODED_XML:
-            s += String_calcSizeBinary(&src->content.encoded.body, NULL);
-            break;
-        default:
-            return 0;
-        }
-        return s;
-    }
-
-    /* Decoded content */
-    if(!src->content.decoded.type || !src->content.decoded.data)
-        return 0;
-    if(src->content.decoded.type->typeId.identifierType != UA_NODEIDTYPE_NUMERIC)
-        return 0;
-
-    s += NodeId_calcSizeBinary(&src->content.decoded.type->typeId, NULL); /* Type encoding length */
-    s += 4; /* Encoding length field */
-    const UA_DataType *type = src->content.decoded.type;
-    s += calcSizeBinaryJumpTable[type->typeKind](src->content.decoded.data, type); /* Encoding length */
-    return s;
-}
-
-CALCSIZE_BINARY(Variant) {
-    size_t s = 1; /* Encoding byte */
-    if(!src->type)
-        return s;
-
-    const UA_Boolean isArray = src->arrayLength > 0 || src->data <= UA_EMPTY_ARRAY_SENTINEL;
-    if(isArray)
-        s += Array_calcSizeBinary(src->data, src->arrayLength, src->type);
-    else
-        s += calcSizeBinaryJumpTable[src->type->typeKind](src->data, src->type);
-
-    const UA_Boolean isBuiltin = (src->type->typeKind <= UA_DATATYPEKIND_DIAGNOSTICINFO);
-    const UA_Boolean isEnum = (src->type->typeKind == UA_DATATYPEKIND_ENUM);
-    if(!isBuiltin && !isEnum) {
-        /* The type is wrapped inside an extensionobject */
-        /* (NodeId + encoding byte + extension object length) * array length */
-        size_t length = isArray ? src->arrayLength : 1;
-        s += (NodeId_calcSizeBinary(&src->type->typeId, NULL) + 1 + 4) * length;
-    }
-
-    const UA_Boolean hasDimensions = isArray && src->arrayDimensionsSize > 0;
-    if(hasDimensions)
-        s += Array_calcSizeBinary(src->arrayDimensions, src->arrayDimensionsSize,
-                                  &UA_TYPES[UA_TYPES_INT32]);
-    return s;
-}
-
-CALCSIZE_BINARY(DataValue) {
-    size_t s = 1; /* Encoding byte */
-    if(src->hasValue)
-        s += Variant_calcSizeBinary(&src->value, NULL);
-    if(src->hasStatus)
-        s += 4;
-    if(src->hasSourceTimestamp)
-        s += 8;
-    if(src->hasSourcePicoseconds)
-        s += 2;
-    if(src->hasServerTimestamp)
-        s += 8;
-    if(src->hasServerPicoseconds)
-        s += 2;
-    return s;
-}
-
-CALCSIZE_BINARY(DiagnosticInfo) {
-    size_t s = 1; /* Encoding byte */
-    if(src->hasSymbolicId)
-        s += 4;
-    if(src->hasNamespaceUri)
-        s += 4;
-    if(src->hasLocalizedText)
-        s += 4;
-    if(src->hasLocale)
-        s += 4;
-    if(src->hasAdditionalInfo)
-        s += String_calcSizeBinary(&src->additionalInfo, NULL);
-    if(src->hasInnerStatusCode)
-        s += 4;
-    if(src->hasInnerDiagnosticInfo)
-        s += DiagnosticInfo_calcSizeBinary(src->innerDiagnosticInfo, NULL);
-    return s;
-}
-
-static size_t
-calcSizeBinaryStructure(const void *p, const UA_DataType *type) {
-    size_t s = 0;
-    uintptr_t ptr = (uintptr_t)p;
-    u8 membersSize = type->membersSize;
-    const UA_DataType *typelists[2] = { UA_TYPES, &type[-type->typeIndex] };
-
-    /* Loop over members */
-    for(size_t i = 0; i < membersSize; ++i) {
-        const UA_DataTypeMember *member = &type->members[i];
-        const UA_DataType *membertype = &typelists[!member->namespaceZero][member->memberTypeIndex];
-        ptr += member->padding;
-
-        /* Array */
-        if(member->isArray) {
-            const size_t length = *((const size_t*)ptr);
-            ptr += sizeof(size_t);
-            s += Array_calcSizeBinary(*(void *UA_RESTRICT const *)ptr, length, membertype);
-            ptr += sizeof(void*);
-            continue;
-        }
-
-        /* Scalar */
-        s += calcSizeBinaryJumpTable[membertype->typeKind]((const void*)ptr, membertype);
-        ptr += membertype->memSize;
-    }
-
-    return s;
-}
-
-static size_t
-calcSizeBinaryNotImplemented(const void *p, const UA_DataType *type) {
-    (void)p, (void)type;
-    return 0;
-}
-
-const calcSizeBinarySignature calcSizeBinaryJumpTable[UA_DATATYPEKINDS] = {
-    (calcSizeBinarySignature)calcSizeBinary1, /* Boolean */
-    (calcSizeBinarySignature)calcSizeBinary1, /* SByte */
-    (calcSizeBinarySignature)calcSizeBinary1, /* Byte */
-    (calcSizeBinarySignature)calcSizeBinary2, /* Int16 */
-    (calcSizeBinarySignature)calcSizeBinary2, /* UInt16 */
-    (calcSizeBinarySignature)calcSizeBinary4, /* Int32 */
-    (calcSizeBinarySignature)calcSizeBinary4, /* UInt32 */
-    (calcSizeBinarySignature)calcSizeBinary8, /* Int64 */
-    (calcSizeBinarySignature)calcSizeBinary8, /* UInt64 */
-    (calcSizeBinarySignature)calcSizeBinary4, /* Float */
-    (calcSizeBinarySignature)calcSizeBinary8, /* Double */
-    (calcSizeBinarySignature)String_calcSizeBinary,
-    (calcSizeBinarySignature)calcSizeBinary8, /* DateTime */
-    (calcSizeBinarySignature)Guid_calcSizeBinary,
-    (calcSizeBinarySignature)String_calcSizeBinary, /* ByteString */
-    (calcSizeBinarySignature)String_calcSizeBinary, /* XmlElement */
-    (calcSizeBinarySignature)NodeId_calcSizeBinary,
-    (calcSizeBinarySignature)ExpandedNodeId_calcSizeBinary,
-    (calcSizeBinarySignature)calcSizeBinary4, /* StatusCode */
-    (calcSizeBinarySignature)QualifiedName_calcSizeBinary,
-    (calcSizeBinarySignature)LocalizedText_calcSizeBinary,
-    (calcSizeBinarySignature)ExtensionObject_calcSizeBinary,
-    (calcSizeBinarySignature)DataValue_calcSizeBinary,
-    (calcSizeBinarySignature)Variant_calcSizeBinary,
-    (calcSizeBinarySignature)DiagnosticInfo_calcSizeBinary,
-    (calcSizeBinarySignature)calcSizeBinaryNotImplemented, /* Decimal */
-    (calcSizeBinarySignature)calcSizeBinary4, /* Enumeration */
-    (calcSizeBinarySignature)calcSizeBinaryStructure,
-    (calcSizeBinarySignature)calcSizeBinaryNotImplemented, /* Structure with Optional Fields */
-    (calcSizeBinarySignature)calcSizeBinaryNotImplemented, /* Union */
-    (calcSizeBinarySignature)calcSizeBinaryNotImplemented /* BitfieldCluster */
-};
-
-size_t
-UA_calcSizeBinary(const void *p, const UA_DataType *type) {
-    return calcSizeBinaryJumpTable[type->typeKind](p, type);
-}
diff --git a/ext/open62541/src/ua_types_encoding_binary.h b/ext/open62541/src/ua_types_encoding_binary.h
deleted file mode 100644
index 0270acf..0000000
--- a/ext/open62541/src/ua_types_encoding_binary.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2015 (c) Sten Grüner
- *    Copyright 2014, 2017 (c) Florian Palm
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
- */
-
-#ifndef UA_TYPES_ENCODING_BINARY_H_
-#define UA_TYPES_ENCODING_BINARY_H_
-
-#include <open62541/types.h>
-
-_UA_BEGIN_DECLS
-
-typedef UA_StatusCode (*UA_exchangeEncodeBuffer)(void *handle, UA_Byte **bufPos,
-                                                 const UA_Byte **bufEnd);
-
-/* Encodes the scalar value described by type in the binary encoding. Encoding
- * is thread-safe if thread-local variables are enabled. Encoding is also
- * reentrant and can be safely called from signal handlers or interrupts.
- *
- * @param src The value. Must not be NULL.
- * @param type The value type. Must not be NULL.
- * @param bufPos Points to a pointer to the current position in the encoding
- *        buffer. Must not be NULL. The pointer is advanced by the number of
- *        encoded bytes, or, if the buffer is exchanged, to the position in the
- *        new buffer.
- * @param bufEnd Points to a pointer to the end of the encoding buffer (encoding
- *        always stops before *buf_end). Must not be NULL. The pointer is
- *        changed when the buffer is exchanged.
- * @param exchangeCallback Called when the end of the buffer is reached. This is
-          used to send out a message chunk before continuing with the encoding.
-          Is ignored if NULL.
- * @param exchangeHandle Custom data passed into the exchangeCallback.
- * @return Returns a statuscode whether encoding succeeded. */
-UA_StatusCode 
-UA_encodeBinary(const void *src, const UA_DataType *type,
-                UA_Byte **bufPos, const UA_Byte **bufEnd,
-                UA_exchangeEncodeBuffer exchangeCallback,
-                void *exchangeHandle) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-/* Decodes a scalar value described by type from binary encoding. Decoding
- * is thread-safe if thread-local variables are enabled. Decoding is also
- * reentrant and can be safely called from signal handlers or interrupts.
- *
- * @param src The buffer with the binary encoded value. Must not be NULL.
- * @param offset The current position in the buffer. Must not be NULL. The value
- *        is advanced as decoding progresses.
- * @param dst The target value. Must not be NULL. The target is assumed to have
- *        size type->memSize. The value is reset to zero before decoding. If
- *        decoding fails, members are deleted and the value is reset (zeroed)
- *        again.
- * @param type The value type. Must not be NULL.
- * @param customTypesSize The number of non-standard datatypes contained in the
- *        customTypes array.
- * @param customTypes An array of non-standard datatypes (not included in
- *        UA_TYPES). Can be NULL if customTypesSize is zero.
- * @return Returns a statuscode whether decoding succeeded. */
-UA_StatusCode
-UA_decodeBinary(const UA_ByteString *src, size_t *offset, void *dst,
-                const UA_DataType *type, const UA_DataTypeArray *customTypes)
-    UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-/* Returns the number of bytes the value p takes in binary encoding. Returns
- * zero if an error occurs. UA_calcSizeBinary is thread-safe and reentrant since
- * it does not access global (thread-local) variables. */
-size_t
-UA_calcSizeBinary(const void *p, const UA_DataType *type);
-
-const UA_DataType *
-UA_findDataTypeByBinary(const UA_NodeId *typeId);
-
-_UA_END_DECLS
-
-#endif /* UA_TYPES_ENCODING_BINARY_H_ */
diff --git a/ext/open62541/src/ua_types_encoding_json.c b/ext/open62541/src/ua_types_encoding_json.c
deleted file mode 100644
index b7d8690..0000000
--- a/ext/open62541/src/ua_types_encoding_json.c
+++ /dev/null
@@ -1,3329 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2018 (c) Fraunhofer IOSB (Author: Lukas Meling)
- */
-
-#include "ua_types_encoding_json.h"
-
-#include <open62541/types_generated.h>
-#include <open62541/types_generated_handling.h>
-
-#include "ua_types_encoding_binary.h"
-
-#include <float.h>
-#include <math.h>
-
-#ifdef UA_ENABLE_CUSTOM_LIBC
-#include "../deps/musl/floatscan.h"
-#include "../deps/musl/vfprintf.h"
-#endif
-
-#include "../deps/itoa.h"
-#include "../deps/atoi.h"
-#include "../deps/string_escape.h"
-#include "../deps/base64.h"
-
-#include "../deps/libc_time.h"
-
-#if defined(_MSC_VER)
-# define strtoll _strtoi64
-# define strtoull _strtoui64
-#endif
-
-/* vs2008 does not have INFINITY and NAN defined */
-#ifndef INFINITY
-# define INFINITY ((UA_Double)(DBL_MAX+DBL_MAX))
-#endif
-#ifndef NAN
-# define NAN ((UA_Double)(INFINITY-INFINITY))
-#endif
-
-#if defined(_MSC_VER)
-# pragma warning(disable: 4756)
-# pragma warning(disable: 4056)
-#endif
-
-#define UA_NODEIDTYPE_NUMERIC_TWOBYTE 0
-#define UA_NODEIDTYPE_NUMERIC_FOURBYTE 1
-#define UA_NODEIDTYPE_NUMERIC_COMPLETE 2
-
-#define UA_EXPANDEDNODEID_SERVERINDEX_FLAG 0x40
-#define UA_EXPANDEDNODEID_NAMESPACEURI_FLAG 0x80
-
-#define UA_JSON_DATETIME_LENGTH 30
-
-/* Max length of numbers for the allocation of temp buffers. Don't forget that
- * printf adds an additional \0 at the end!
- *
- * Sources:
- * https://www.exploringbinary.com/maximum-number-of-decimal-digits-in-binary-floating-point-numbers/
- *
- * UInt16: 3 + 1
- * SByte: 3 + 1
- * UInt32:
- * Int32:
- * UInt64:
- * Int64:
- * Float: 149 + 1
- * Double: 767 + 1
- */
-
-/************/
-/* Encoding */
-/************/
-
-#define ENCODE_JSON(TYPE) static status \
-    TYPE##_encodeJson(const UA_##TYPE *src, const UA_DataType *type, CtxJson *ctx)
-
-#define ENCODE_DIRECT_JSON(SRC, TYPE) \
-    TYPE##_encodeJson((const UA_##TYPE*)SRC, NULL, ctx)
-
-extern const encodeJsonSignature encodeJsonJumpTable[UA_DATATYPEKINDS];
-extern const decodeJsonSignature decodeJsonJumpTable[UA_DATATYPEKINDS];
-
-/* Forward declarations */
-UA_String UA_DateTime_toJSON(UA_DateTime t);
-ENCODE_JSON(ByteString);
-
-static status UA_FUNC_ATTR_WARN_UNUSED_RESULT
-writeChar(CtxJson *ctx, char c) {
-    if(ctx->pos >= ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-    if(!ctx->calcOnly)
-        *ctx->pos = (UA_Byte)c;
-    ctx->pos++;
-    return UA_STATUSCODE_GOOD;
-}
-
-#define WRITE_JSON_ELEMENT(ELEM)                            \
-    UA_FUNC_ATTR_WARN_UNUSED_RESULT status                  \
-    writeJson##ELEM(CtxJson *ctx)
-
-static WRITE_JSON_ELEMENT(Quote) {
-    return writeChar(ctx, '\"');
-}
-
-WRITE_JSON_ELEMENT(ObjStart) {
-    /* increase depth, save: before first key-value no comma needed. */
-    ctx->depth++;
-    ctx->commaNeeded[ctx->depth] = false;
-    return writeChar(ctx, '{');
-}
-
-WRITE_JSON_ELEMENT(ObjEnd) {
-    ctx->depth--; //decrease depth
-    ctx->commaNeeded[ctx->depth] = true;
-    return writeChar(ctx, '}');
-}
-
-WRITE_JSON_ELEMENT(ArrStart) {
-    /* increase depth, save: before first array entry no comma needed. */
-    ctx->commaNeeded[++ctx->depth] = false;
-    return writeChar(ctx, '[');
-}
-
-WRITE_JSON_ELEMENT(ArrEnd) {
-    ctx->depth--; //decrease depth
-    ctx->commaNeeded[ctx->depth] = true;
-    return writeChar(ctx, ']');
-}
-
-WRITE_JSON_ELEMENT(CommaIfNeeded) {
-    if(ctx->commaNeeded[ctx->depth])
-        return writeChar(ctx, ',');
-    return UA_STATUSCODE_GOOD;
-}
-
-status
-writeJsonArrElm(CtxJson *ctx, const void *value,
-                const UA_DataType *type) {
-    status ret = writeJsonCommaIfNeeded(ctx);
-    ctx->commaNeeded[ctx->depth] = true;
-    ret |= encodeJsonInternal(value, type, ctx);
-    return ret;
-}
-
-status writeJsonObjElm(CtxJson *ctx, const char *key,
-                       const void *value, const UA_DataType *type){
-    return writeJsonKey(ctx, key) | encodeJsonInternal(value, type, ctx);
-}
-
-status writeJsonNull(CtxJson *ctx) {
-    if(ctx->pos + 4 > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-    if(ctx->calcOnly) {
-        ctx->pos += 4;
-    } else {
-        *(ctx->pos++) = 'n';
-        *(ctx->pos++) = 'u';
-        *(ctx->pos++) = 'l';
-        *(ctx->pos++) = 'l';
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Keys for JSON */
-
-/* LocalizedText */
-static const char* UA_JSONKEY_LOCALE = "Locale";
-static const char* UA_JSONKEY_TEXT = "Text";
-
-/* QualifiedName */
-static const char* UA_JSONKEY_NAME = "Name";
-static const char* UA_JSONKEY_URI = "Uri";
-
-/* NodeId */
-static const char* UA_JSONKEY_ID = "Id";
-static const char* UA_JSONKEY_IDTYPE = "IdType";
-static const char* UA_JSONKEY_NAMESPACE = "Namespace";
-
-/* ExpandedNodeId */
-static const char* UA_JSONKEY_SERVERURI = "ServerUri";
-
-/* Variant */
-static const char* UA_JSONKEY_TYPE = "Type";
-static const char* UA_JSONKEY_BODY = "Body";
-static const char* UA_JSONKEY_DIMENSION = "Dimension";
-
-/* DataValue */
-static const char* UA_JSONKEY_VALUE = "Value";
-static const char* UA_JSONKEY_STATUS = "Status";
-static const char* UA_JSONKEY_SOURCETIMESTAMP = "SourceTimestamp";
-static const char* UA_JSONKEY_SOURCEPICOSECONDS = "SourcePicoseconds";
-static const char* UA_JSONKEY_SERVERTIMESTAMP = "ServerTimestamp";
-static const char* UA_JSONKEY_SERVERPICOSECONDS = "ServerPicoseconds";
-
-/* ExtensionObject */
-static const char* UA_JSONKEY_ENCODING = "Encoding";
-static const char* UA_JSONKEY_TYPEID = "TypeId";
-
-/* StatusCode */
-static const char* UA_JSONKEY_CODE = "Code";
-static const char* UA_JSONKEY_SYMBOL = "Symbol";
-
-/* DiagnosticInfo */
-static const char* UA_JSONKEY_SYMBOLICID = "SymbolicId";
-static const char* UA_JSONKEY_NAMESPACEURI = "NamespaceUri";
-static const char* UA_JSONKEY_LOCALIZEDTEXT = "LocalizedText";
-static const char* UA_JSONKEY_ADDITIONALINFO = "AdditionalInfo";
-static const char* UA_JSONKEY_INNERSTATUSCODE = "InnerStatusCode";
-static const char* UA_JSONKEY_INNERDIAGNOSTICINFO = "InnerDiagnosticInfo";
-
-/* Writes null terminated string to output buffer (current ctx->pos). Writes
- * comma in front of key if needed. Encapsulates key in quotes. */
-status UA_FUNC_ATTR_WARN_UNUSED_RESULT
-writeJsonKey(CtxJson *ctx, const char* key) {
-    size_t size = strlen(key);
-    if(ctx->pos + size + 4 > ctx->end) /* +4 because of " " : and , */
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-    status ret = writeJsonCommaIfNeeded(ctx);
-    ctx->commaNeeded[ctx->depth] = true;
-    if(ctx->calcOnly) {
-        ctx->commaNeeded[ctx->depth] = true;
-        ctx->pos += 3;
-        ctx->pos += size;
-        return ret;
-    }
-
-    ret |= writeChar(ctx, '\"');
-    for(size_t i = 0; i < size; i++) {
-        *(ctx->pos++) = (u8)key[i];
-    }
-    ret |= writeChar(ctx, '\"');
-    ret |= writeChar(ctx, ':');
-    return ret;
-}
-
-/* Boolean */
-ENCODE_JSON(Boolean) {
-    size_t sizeOfJSONBool;
-    if(*src == true) {
-        sizeOfJSONBool = 4; /*"true"*/
-    } else {
-        sizeOfJSONBool = 5; /*"false"*/
-    }
-
-    if(ctx->calcOnly) {
-        ctx->pos += sizeOfJSONBool;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    if(ctx->pos + sizeOfJSONBool > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-
-    if(*src) {
-        *(ctx->pos++) = 't';
-        *(ctx->pos++) = 'r';
-        *(ctx->pos++) = 'u';
-        *(ctx->pos++) = 'e';
-    } else {
-        *(ctx->pos++) = 'f';
-        *(ctx->pos++) = 'a';
-        *(ctx->pos++) = 'l';
-        *(ctx->pos++) = 's';
-        *(ctx->pos++) = 'e';
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-/*****************/
-/* Integer Types */
-/*****************/
-
-/* Byte */
-ENCODE_JSON(Byte) {
-    char buf[4];
-    UA_UInt16 digits = itoaUnsigned(*src, buf, 10);
-
-    /* Ensure destination can hold the data- */
-    if(ctx->pos + digits > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-
-    /* Copy digits to the output string/buffer. */
-    if(!ctx->calcOnly)
-        memcpy(ctx->pos, buf, digits);
-    ctx->pos += digits;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* signed Byte */
-ENCODE_JSON(SByte) {
-    char buf[5];
-    UA_UInt16 digits = itoaSigned(*src, buf);
-    if(ctx->pos + digits > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-    if(!ctx->calcOnly)
-        memcpy(ctx->pos, buf, digits);
-    ctx->pos += digits;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* UInt16 */
-ENCODE_JSON(UInt16) {
-    char buf[6];
-    UA_UInt16 digits = itoaUnsigned(*src, buf, 10);
-
-    if(ctx->pos + digits > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-
-    if(!ctx->calcOnly)
-        memcpy(ctx->pos, buf, digits);
-    ctx->pos += digits;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Int16 */
-ENCODE_JSON(Int16) {
-    char buf[7];
-    UA_UInt16 digits = itoaSigned(*src, buf);
-
-    if(ctx->pos + digits > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-
-    if(!ctx->calcOnly)
-        memcpy(ctx->pos, buf, digits);
-    ctx->pos += digits;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* UInt32 */
-ENCODE_JSON(UInt32) {
-    char buf[11];
-    UA_UInt16 digits = itoaUnsigned(*src, buf, 10);
-
-    if(ctx->pos + digits > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-
-    if(!ctx->calcOnly)
-        memcpy(ctx->pos, buf, digits);
-    ctx->pos += digits;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Int32 */
-ENCODE_JSON(Int32) {
-    char buf[12];
-    UA_UInt16 digits = itoaSigned(*src, buf);
-
-    if(ctx->pos + digits > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-
-    if(!ctx->calcOnly)
-        memcpy(ctx->pos, buf, digits);
-    ctx->pos += digits;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* UInt64 */
-ENCODE_JSON(UInt64) {
-    char buf[23];
-    buf[0] = '\"';
-    UA_UInt16 digits = itoaUnsigned(*src, buf + 1, 10);
-    buf[digits + 1] = '\"';
-    UA_UInt16 length = (UA_UInt16)(digits + 2);
-
-    if(ctx->pos + length > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-
-    if(!ctx->calcOnly)
-        memcpy(ctx->pos, buf, length);
-
-    ctx->pos += length;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Int64 */
-ENCODE_JSON(Int64) {
-    char buf[23];
-    buf[0] = '\"';
-    UA_UInt16 digits = itoaSigned(*src, buf + 1);
-    buf[digits + 1] = '\"';
-    UA_UInt16 length = (UA_UInt16)(digits + 2);
-
-    if(ctx->pos + length > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-
-    if(!ctx->calcOnly)
-        memcpy(ctx->pos, buf, length);
-    ctx->pos += length;
-    return UA_STATUSCODE_GOOD;
-}
-
-/************************/
-/* Floating Point Types */
-/************************/
-
-/* Convert special numbers to string
- * - fmt_fp gives NAN, nan,-NAN, -nan, inf, INF, -inf, -INF
- * - Special floating-point numbers such as positive infinity (INF), negative
- *   infinity (-INF) and not-a-number (NaN) shall be represented by the values
- *   “Infinity”, “-Infinity” and “NaN” encoded as a JSON string. */
-static status
-checkAndEncodeSpecialFloatingPoint(char *buffer, size_t *len) {
-    /*nan and NaN*/
-    if(*len == 3 && 
-            (buffer[0] == 'n' || buffer[0] == 'N') && 
-            (buffer[1] == 'a' || buffer[1] == 'A') && 
-            (buffer[2] == 'n' || buffer[2] == 'N')) {
-        *len = 5;
-        memcpy(buffer, "\"NaN\"", *len);
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /*-nan and -NaN*/
-    if(*len == 4 && buffer[0] == '-' && 
-            (buffer[1] == 'n' || buffer[1] == 'N') && 
-            (buffer[2] == 'a' || buffer[2] == 'A') && 
-            (buffer[3] == 'n' || buffer[3] == 'N')) {
-        *len = 6;
-        memcpy(buffer, "\"-NaN\"", *len);
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /*inf*/
-    if(*len == 3 && 
-            (buffer[0] == 'i' || buffer[0] == 'I') && 
-            (buffer[1] == 'n' || buffer[1] == 'N') && 
-            (buffer[2] == 'f' || buffer[2] == 'F')) {
-        *len = 10;
-        memcpy(buffer, "\"Infinity\"", *len);
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /*-inf*/
-    if(*len == 4 && buffer[0] == '-' && 
-            (buffer[1] == 'i' || buffer[1] == 'I') && 
-            (buffer[2] == 'n' || buffer[2] == 'N') && 
-            (buffer[3] == 'f' || buffer[3] == 'F')) {
-        *len = 11;
-        memcpy(buffer, "\"-Infinity\"", *len);
-        return UA_STATUSCODE_GOOD;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-ENCODE_JSON(Float) {
-    char buffer[200];
-    if(*src == *src) {
-#ifdef UA_ENABLE_CUSTOM_LIBC
-        fmt_fp(buffer, *src, 0, -1, 0, 'g');
-#else
-        UA_snprintf(buffer, 200, "%.149g", (UA_Double)*src);
-#endif
-    } else {
-        strcpy(buffer, "NaN");
-    }
-
-    size_t len = strlen(buffer);
-    if(len == 0)
-        return UA_STATUSCODE_BADENCODINGERROR;
-    
-    checkAndEncodeSpecialFloatingPoint(buffer, &len);
-    
-    if(ctx->pos + len > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-
-    if(!ctx->calcOnly)
-        memcpy(ctx->pos, buffer, len);
-
-    ctx->pos += len;
-    return UA_STATUSCODE_GOOD;
-}
-
-ENCODE_JSON(Double) {
-    char buffer[2000];
-    if(*src == *src) {
-#ifdef UA_ENABLE_CUSTOM_LIBC
-        fmt_fp(buffer, *src, 0, 17, 0, 'g');
-#else
-        UA_snprintf(buffer, 2000, "%.1074g", *src);
-#endif
-    } else {
-        strcpy(buffer, "NaN");
-    }
-
-    size_t len = strlen(buffer);
-    checkAndEncodeSpecialFloatingPoint(buffer, &len);    
-
-    if(ctx->pos + len > ctx->end)
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-
-    if(!ctx->calcOnly)
-        memcpy(ctx->pos, buffer, len);
-
-    ctx->pos += len;
-    return UA_STATUSCODE_GOOD;
-}
-
-static status
-encodeJsonArray(CtxJson *ctx, const void *ptr, size_t length,
-                const UA_DataType *type) {
-    encodeJsonSignature encodeType = encodeJsonJumpTable[type->typeKind];
-    status ret = writeJsonArrStart(ctx);
-    uintptr_t uptr = (uintptr_t)ptr;
-    for(size_t i = 0; i < length && ret == UA_STATUSCODE_GOOD; ++i) {
-        ret |= writeJsonCommaIfNeeded(ctx);
-        ret |= encodeType((const void*)uptr, type, ctx);
-        ctx->commaNeeded[ctx->depth] = true;
-        uptr += type->memSize;
-    }
-    ret |= writeJsonArrEnd(ctx);
-    return ret;
-}
-
-/*****************/
-/* Builtin Types */
-/*****************/
-
-static const u8 hexmapLower[16] =
-    {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
-static const u8 hexmapUpper[16] =
-    {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
-
-ENCODE_JSON(String) {
-    if(!src->data)
-        return writeJsonNull(ctx);
-
-    if(src->length == 0) {
-        status retval = writeJsonQuote(ctx);
-        retval |= writeJsonQuote(ctx);
-        return  retval;
-    }
-
-    UA_StatusCode ret = writeJsonQuote(ctx);
-    
-    /* Escaping adapted from https://github.com/akheron/jansson dump.c */
-
-    const char *str = (char*)src->data;
-    const char *pos = str;
-    const char *end = str;
-    const char *lim = str + src->length;
-    UA_UInt32 codepoint = 0;
-    while(1) {
-        const char *text;
-        u8 seq[13];
-        size_t length;
-
-        while(end < lim) {
-            end = utf8_iterate(pos, (size_t)(lim - pos), (int32_t *)&codepoint);
-            if(!end)
-                return UA_STATUSCODE_BADENCODINGERROR;
-
-            /* mandatory escape or control char */
-            if(codepoint == '\\' || codepoint == '"' || codepoint < 0x20)
-                break;
-
-            /* TODO: Why is this commented? */
-            /* slash 
-            if((flags & JSON_ESCAPE_SLASH) && codepoint == '/')
-                break;*/
-
-            /* non-ASCII
-            if((flags & JSON_ENSURE_ASCII) && codepoint > 0x7F)
-                break;*/
-
-            pos = end;
-        }
-
-        if(pos != str) {
-            if(ctx->pos + (pos - str) > ctx->end)
-                return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-            if(!ctx->calcOnly)
-                memcpy(ctx->pos, str, (size_t)(pos - str));
-            ctx->pos += pos - str;
-        }
-
-        if(end == pos)
-            break;
-
-        /* handle \, /, ", and control codes */
-        length = 2;
-        switch(codepoint) {
-        case '\\': text = "\\\\"; break;
-        case '\"': text = "\\\""; break;
-        case '\b': text = "\\b"; break;
-        case '\f': text = "\\f"; break;
-        case '\n': text = "\\n"; break;
-        case '\r': text = "\\r"; break;
-        case '\t': text = "\\t"; break;
-        case '/':  text = "\\/"; break;
-        default:
-            if(codepoint < 0x10000) {
-                /* codepoint is in BMP */
-                seq[0] = '\\';
-                seq[1] = 'u';
-                UA_Byte b1 = (UA_Byte)(codepoint >> 8u);
-                UA_Byte b2 = (UA_Byte)(codepoint >> 0u);
-                seq[2] = hexmapLower[(b1 & 0xF0u) >> 4u];
-                seq[3] = hexmapLower[b1 & 0x0Fu];
-                seq[4] = hexmapLower[(b2 & 0xF0u) >> 4u];
-                seq[5] = hexmapLower[b2 & 0x0Fu];
-                length = 6;
-            } else {
-                /* not in BMP -> construct a UTF-16 surrogate pair */
-                codepoint -= 0x10000;
-                UA_UInt32 first = 0xD800u | ((codepoint & 0xffc00u) >> 10u);
-                UA_UInt32 last = 0xDC00u | (codepoint & 0x003ffu);
-
-                UA_Byte fb1 = (UA_Byte)(first >> 8u);
-                UA_Byte fb2 = (UA_Byte)(first >> 0u);
-                    
-                UA_Byte lb1 = (UA_Byte)(last >> 8u);
-                UA_Byte lb2 = (UA_Byte)(last >> 0u);
-                    
-                seq[0] = '\\';
-                seq[1] = 'u';
-                seq[2] = hexmapLower[(fb1 & 0xF0u) >> 4u];
-                seq[3] = hexmapLower[fb1 & 0x0Fu];
-                seq[4] = hexmapLower[(fb2 & 0xF0u) >> 4u];
-                seq[5] = hexmapLower[fb2 & 0x0Fu];
-                    
-                seq[6] = '\\';
-                seq[7] = 'u';
-                seq[8] = hexmapLower[(lb1 & 0xF0u) >> 4u];
-                seq[9] = hexmapLower[lb1 & 0x0Fu];
-                seq[10] = hexmapLower[(lb2 & 0xF0u) >> 4u];
-                seq[11] = hexmapLower[lb2 & 0x0Fu];
-                length = 12;
-            }
-            text = (char*)seq;
-            break;
-        }
-
-        if(ctx->pos + length > ctx->end)
-            return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-        if(!ctx->calcOnly)
-            memcpy(ctx->pos, text, length);
-        ctx->pos += length;
-        str = pos = end;
-    }
-
-    ret |= writeJsonQuote(ctx);
-    return ret;
-}
-    
-ENCODE_JSON(ByteString) {
-    if(!src->data)
-        return writeJsonNull(ctx);
-
-    if(src->length == 0) {
-        status retval = writeJsonQuote(ctx);
-        retval |= writeJsonQuote(ctx);
-        return retval;
-    }
-
-    status ret = writeJsonQuote(ctx);
-    size_t flen = 0;
-    unsigned char *ba64 = UA_base64(src->data, src->length, &flen);
-    
-    /* Not converted, no mem */
-    if(!ba64)
-        return UA_STATUSCODE_BADENCODINGERROR;
-
-    if(ctx->pos + flen > ctx->end) {
-        UA_free(ba64);
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-    }
-    
-    /* Copy flen bytes to output stream. */
-    if(!ctx->calcOnly)
-        memcpy(ctx->pos, ba64, flen);
-    ctx->pos += flen;
-
-    /* Base64 result no longer needed */
-    UA_free(ba64);
-    
-    ret |= writeJsonQuote(ctx);
-    return ret;
-}
-
-/* Converts Guid to a hexadecimal represenation */
-static void UA_Guid_to_hex(const UA_Guid *guid, u8* out) {
-    /*
-                          16 byte
-       +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
-       |   data1   |data2|data3|          data4        |
-       +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
-       |aa aa aa aa-bb bb-cc cc-dd dd-ee ee ee ee ee ee|
-       +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
-                          36 character
-    */
-
-#ifdef hexCharlowerCase
-    const u8 *hexmap = hexmapLower;
-#else
-    const u8 *hexmap = hexmapUpper;
-#endif
-    size_t i = 0, j = 28;
-    for(; i<8;i++,j-=4)         /* pos 0-7, 4byte, (a) */
-        out[i] = hexmap[(guid->data1 >> j) & 0x0Fu];
-    out[i++] = '-';             /* pos 8 */
-    for(j=12; i<13;i++,j-=4)    /* pos 9-12, 2byte, (b) */
-        out[i] = hexmap[(uint16_t)(guid->data2 >> j) & 0x0Fu];
-    out[i++] = '-';             /* pos 13 */
-    for(j=12; i<18;i++,j-=4)    /* pos 14-17, 2byte (c) */
-        out[i] = hexmap[(uint16_t)(guid->data3 >> j) & 0x0Fu];
-    out[i++] = '-';             /* pos 18 */
-    for(j=0;i<23;i+=2,j++) {     /* pos 19-22, 2byte (d) */
-        out[i] = hexmap[(guid->data4[j] & 0xF0u) >> 4u];
-        out[i+1] = hexmap[guid->data4[j] & 0x0Fu];
-    }
-    out[i++] = '-';             /* pos 23 */
-    for(j=2; i<36;i+=2,j++) {    /* pos 24-35, 6byte (e) */
-        out[i] = hexmap[(guid->data4[j] & 0xF0u) >> 4u];
-        out[i+1] = hexmap[guid->data4[j] & 0x0Fu];
-    }
-}
-
-/* Guid */
-ENCODE_JSON(Guid) {
-    if(ctx->pos + 38 > ctx->end) /* 36 + 2 (") */
-        return UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED;
-    status ret = writeJsonQuote(ctx);
-    u8 *buf = ctx->pos;
-    if(!ctx->calcOnly)
-        UA_Guid_to_hex(src, buf);
-    ctx->pos += 36;
-    ret |= writeJsonQuote(ctx);
-    return ret;
-}
-
-static void
-printNumber(u16 n, u8 *pos, size_t digits) {
-    for(size_t i = digits; i > 0; --i) {
-        pos[i - 1] = (u8) ((n % 10) + '0');
-        n = n / 10;
-    }
-}
-
-ENCODE_JSON(DateTime) {
-    UA_DateTimeStruct tSt = UA_DateTime_toStruct(*src);
-
-    /* Format: yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS'Z' is used. max 30 bytes.*/
-    UA_Byte buffer[UA_JSON_DATETIME_LENGTH];
-
-    printNumber(tSt.year, &buffer[0], 4);
-    buffer[4] = '-';
-    printNumber(tSt.month, &buffer[5], 2);
-    buffer[7] = '-';
-    printNumber(tSt.day, &buffer[8], 2);
-    buffer[10] = 'T';
-    printNumber(tSt.hour, &buffer[11], 2);
-    buffer[13] = ':';
-    printNumber(tSt.min, &buffer[14], 2);
-    buffer[16] = ':';
-    printNumber(tSt.sec, &buffer[17], 2);
-    buffer[19] = '.';
-    printNumber(tSt.milliSec, &buffer[20], 3);
-    printNumber(tSt.microSec, &buffer[23], 3);
-    printNumber(tSt.nanoSec, &buffer[26], 3);
-
-    size_t length = 28;
-    while (buffer[length] == '0')
-        length--;
-    if (length != 19)
-         length++;
-
-    buffer[length] = 'Z';
-    UA_String str = {length + 1, buffer};
-    return ENCODE_DIRECT_JSON(&str, String);
-}
-
-/* NodeId */
-static status
-NodeId_encodeJsonInternal(UA_NodeId const *src, CtxJson *ctx) {
-    status ret = UA_STATUSCODE_GOOD;
-    switch (src->identifierType) {
-    case UA_NODEIDTYPE_NUMERIC:
-        ret |= writeJsonKey(ctx, UA_JSONKEY_ID);
-        ret |= ENCODE_DIRECT_JSON(&src->identifier.numeric, UInt32);
-        break;
-    case UA_NODEIDTYPE_STRING:
-        ret |= writeJsonKey(ctx, UA_JSONKEY_IDTYPE);
-        ret |= writeChar(ctx, '1');
-        ret |= writeJsonKey(ctx, UA_JSONKEY_ID);
-        ret |= ENCODE_DIRECT_JSON(&src->identifier.string, String);
-        break;
-    case UA_NODEIDTYPE_GUID:
-        ret |= writeJsonKey(ctx, UA_JSONKEY_IDTYPE);
-        ret |= writeChar(ctx, '2');
-        ret |= writeJsonKey(ctx, UA_JSONKEY_ID); /* Id */
-        ret |= ENCODE_DIRECT_JSON(&src->identifier.guid, Guid);
-        break;
-    case UA_NODEIDTYPE_BYTESTRING:
-        ret |= writeJsonKey(ctx, UA_JSONKEY_IDTYPE);
-        ret |= writeChar(ctx, '3');
-        ret |= writeJsonKey(ctx, UA_JSONKEY_ID); /* Id */
-        ret |= ENCODE_DIRECT_JSON(&src->identifier.byteString, ByteString);
-        break;
-    default:
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    return ret;
-}
-
-ENCODE_JSON(NodeId) {
-    UA_StatusCode ret = writeJsonObjStart(ctx);
-    ret |= NodeId_encodeJsonInternal(src, ctx);
-    if(ctx->useReversible) {
-        if(src->namespaceIndex > 0) {
-            ret |= writeJsonKey(ctx, UA_JSONKEY_NAMESPACE);
-            ret |= ENCODE_DIRECT_JSON(&src->namespaceIndex, UInt16);
-        }
-    } else {
-        /* For the non-reversible encoding, the field is the NamespaceUri 
-         * associated with the NamespaceIndex, encoded as a JSON string.
-         * A NamespaceIndex of 1 is always encoded as a JSON number. */
-        if(src->namespaceIndex == 1) {
-            ret |= writeJsonKey(ctx, UA_JSONKEY_NAMESPACE);
-            ret |= ENCODE_DIRECT_JSON(&src->namespaceIndex, UInt16);
-        } else {
-            ret |= writeJsonKey(ctx, UA_JSONKEY_NAMESPACE);
-            
-            /* Check if Namespace given and in range */
-            if(src->namespaceIndex < ctx->namespacesSize && ctx->namespaces != NULL) {
-                UA_String namespaceEntry = ctx->namespaces[src->namespaceIndex];
-                ret |= ENCODE_DIRECT_JSON(&namespaceEntry, String);
-            } else {
-                return UA_STATUSCODE_BADNOTFOUND;
-            }
-        }
-    }
-
-    ret |= writeJsonObjEnd(ctx);
-    return ret;
-}
-
-/* ExpandedNodeId */
-ENCODE_JSON(ExpandedNodeId) {
-    status ret = writeJsonObjStart(ctx);
-    /* Encode the NodeId */
-    ret |= NodeId_encodeJsonInternal(&src->nodeId, ctx);
-    
-    if(ctx->useReversible) {
-        if(src->namespaceUri.data != NULL && src->namespaceUri.length != 0 && 
-           (void*) src->namespaceUri.data > UA_EMPTY_ARRAY_SENTINEL) {
-            /* If the NamespaceUri is specified it is encoded as a JSON string in this field. */ 
-            ret |= writeJsonKey(ctx, UA_JSONKEY_NAMESPACE);
-            ret |= ENCODE_DIRECT_JSON(&src->namespaceUri, String);
-        } else {
-            /* If the NamespaceUri is not specified, the NamespaceIndex is encoded with these rules:
-             * The field is encoded as a JSON number for the reversible encoding.
-             * The field is omitted if the NamespaceIndex equals 0. */
-            if(src->nodeId.namespaceIndex > 0) {
-                ret |= writeJsonKey(ctx, UA_JSONKEY_NAMESPACE);
-                ret |= ENCODE_DIRECT_JSON(&src->nodeId.namespaceIndex, UInt16);
-            }
-        }
-
-        /* Encode the serverIndex/Url 
-         * This field is encoded as a JSON number for the reversible encoding.
-         * This field is omitted if the ServerIndex equals 0. */
-        if(src->serverIndex > 0) {
-            ret |= writeJsonKey(ctx, UA_JSONKEY_SERVERURI);
-            ret |= ENCODE_DIRECT_JSON(&src->serverIndex, UInt32);
-        }
-
-        ret |= writeJsonObjEnd(ctx);
-        return ret;
-    }
-    
-    
-    /* NON-Reversible Case */
-
-    /* If the NamespaceUri is not specified, the NamespaceIndex is encoded with these rules:
-     * For the non-reversible encoding the field is the NamespaceUri associated with the
-     * NamespaceIndex encoded as a JSON string.
-     * A NamespaceIndex of 1 is always encoded as a JSON number. */
-
-    if(src->namespaceUri.data != NULL && src->namespaceUri.length != 0) {
-        ret |= writeJsonKey(ctx, UA_JSONKEY_NAMESPACE);
-        ret |= ENCODE_DIRECT_JSON(&src->namespaceUri, String);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    } else {
-        if(src->nodeId.namespaceIndex == 1) {
-            ret |= writeJsonKey(ctx, UA_JSONKEY_NAMESPACE);
-            ret |= ENCODE_DIRECT_JSON(&src->nodeId.namespaceIndex, UInt16);
-            if(ret != UA_STATUSCODE_GOOD)
-                return ret;
-        } else {
-            ret |= writeJsonKey(ctx, UA_JSONKEY_NAMESPACE);
-
-            /* Check if Namespace given and in range */
-            if(src->nodeId.namespaceIndex < ctx->namespacesSize 
-                    && ctx->namespaces != NULL) {
-
-                UA_String namespaceEntry = ctx->namespaces[src->nodeId.namespaceIndex];
-                ret |= ENCODE_DIRECT_JSON(&namespaceEntry, String);
-                if(ret != UA_STATUSCODE_GOOD)
-                    return ret;
-            } else {
-                return UA_STATUSCODE_BADNOTFOUND;
-            }
-        }
-    }
-
-    /* For the non-reversible encoding, this field is the ServerUri associated
-     * with the ServerIndex portion of the ExpandedNodeId, encoded as a JSON
-     * string. */
-
-    /* Check if Namespace given and in range */
-    if(src->serverIndex < ctx->serverUrisSize && ctx->serverUris != NULL) {
-        UA_String serverUriEntry = ctx->serverUris[src->serverIndex];
-        ret |= writeJsonKey(ctx, UA_JSONKEY_SERVERURI);
-        ret |= ENCODE_DIRECT_JSON(&serverUriEntry, String);
-    } else {
-        return UA_STATUSCODE_BADNOTFOUND;
-    }
-    ret |= writeJsonObjEnd(ctx);
-    return ret;
-}
-
-/* LocalizedText */
-ENCODE_JSON(LocalizedText) {
-    if(ctx->useReversible) {
-        status ret = writeJsonObjStart(ctx);
-        ret |= writeJsonKey(ctx, UA_JSONKEY_LOCALE);
-        ret |= ENCODE_DIRECT_JSON(&src->locale, String);
-        ret |= writeJsonKey(ctx, UA_JSONKEY_TEXT);
-        ret |= ENCODE_DIRECT_JSON(&src->text, String);
-        ret |= writeJsonObjEnd(ctx);
-        return ret;
-    }
-    
-    /* For the non-reversible form, LocalizedText value shall be encoded as a
-     * JSON string containing the Text component.*/
-    return ENCODE_DIRECT_JSON(&src->text, String);
-}
-
-ENCODE_JSON(QualifiedName) {
-    status ret = writeJsonObjStart(ctx);
-    ret |= writeJsonKey(ctx, UA_JSONKEY_NAME);
-    ret |= ENCODE_DIRECT_JSON(&src->name, String);
-
-    if(ctx->useReversible) {
-        if(src->namespaceIndex != 0) {
-            ret |= writeJsonKey(ctx, UA_JSONKEY_URI);
-            ret |= ENCODE_DIRECT_JSON(&src->namespaceIndex, UInt16);
-        }
-    } else {
-        /* For the non-reversible form, the NamespaceUri associated with the
-         * NamespaceIndex portion of the QualifiedName is encoded as JSON string
-         * unless the NamespaceIndex is 1 or if NamespaceUri is unknown. In
-         * these cases, the NamespaceIndex is encoded as a JSON number. */
-        if(src->namespaceIndex == 1) {
-            ret |= writeJsonKey(ctx, UA_JSONKEY_URI);
-            ret |= ENCODE_DIRECT_JSON(&src->namespaceIndex, UInt16);
-        } else {
-            ret |= writeJsonKey(ctx, UA_JSONKEY_URI);
-
-             /* Check if Namespace given and in range */
-            if(src->namespaceIndex < ctx->namespacesSize && ctx->namespaces != NULL) {
-                UA_String namespaceEntry = ctx->namespaces[src->namespaceIndex];
-                ret |= ENCODE_DIRECT_JSON(&namespaceEntry, String);
-            } else {
-                /* If not encode as number */
-                ret |= ENCODE_DIRECT_JSON(&src->namespaceIndex, UInt16);
-            }
-        }
-    }
-
-    return ret | writeJsonObjEnd(ctx);
-}
-
-ENCODE_JSON(StatusCode) {
-    if(!src)
-        return writeJsonNull(ctx);
-
-    if(ctx->useReversible)
-        return ENCODE_DIRECT_JSON(src, UInt32);
-
-    if(*src == UA_STATUSCODE_GOOD)
-        return writeJsonNull(ctx);
-
-    status ret = UA_STATUSCODE_GOOD;
-    ret |= writeJsonObjStart(ctx);
-    ret |= writeJsonKey(ctx, UA_JSONKEY_CODE);
-    ret |= ENCODE_DIRECT_JSON(src, UInt32);
-    ret |= writeJsonKey(ctx, UA_JSONKEY_SYMBOL);
-    const char *codename = UA_StatusCode_name(*src);
-    UA_String statusDescription = UA_STRING((char*)(uintptr_t)codename);
-    ret |= ENCODE_DIRECT_JSON(&statusDescription, String);
-    ret |= writeJsonObjEnd(ctx);
-    return ret;
-}
-
-/* ExtensionObject */
-ENCODE_JSON(ExtensionObject) {
-    u8 encoding = (u8) src->encoding;
-    if(encoding == UA_EXTENSIONOBJECT_ENCODED_NOBODY)
-        return writeJsonNull(ctx);
-    
-    status ret = UA_STATUSCODE_GOOD;
-    /* already encoded content.*/
-    if(encoding <= UA_EXTENSIONOBJECT_ENCODED_XML) {
-        ret |= writeJsonObjStart(ctx);
-        if(ctx->useReversible) {
-            ret |= writeJsonKey(ctx, UA_JSONKEY_TYPEID);
-            ret |= ENCODE_DIRECT_JSON(&src->content.encoded.typeId, NodeId);
-            if(ret != UA_STATUSCODE_GOOD)
-                return ret;
-        }
-        
-        switch (src->encoding) {
-            case UA_EXTENSIONOBJECT_ENCODED_BYTESTRING:
-            {
-                if(ctx->useReversible) {
-                    ret |= writeJsonKey(ctx, UA_JSONKEY_ENCODING);
-                    ret |= writeChar(ctx, '1');
-                }
-                ret |= writeJsonKey(ctx, UA_JSONKEY_BODY);
-                ret |= ENCODE_DIRECT_JSON(&src->content.encoded.body, String);
-                break;
-            }
-            case UA_EXTENSIONOBJECT_ENCODED_XML:
-            {
-                if(ctx->useReversible) {
-                    ret |= writeJsonKey(ctx, UA_JSONKEY_ENCODING);
-                    ret |= writeChar(ctx, '2');
-                }
-                ret |= writeJsonKey(ctx, UA_JSONKEY_BODY);
-                ret |= ENCODE_DIRECT_JSON(&src->content.encoded.body, String);
-                break;
-            }
-            default:
-                ret = UA_STATUSCODE_BADINTERNALERROR;
-        }
-
-        ret |= writeJsonObjEnd(ctx);
-        return ret;
-    } /* encoding <= UA_EXTENSIONOBJECT_ENCODED_XML */
-         
-    /* Cannot encode with no type description */
-    if(!src->content.decoded.type)
-        return UA_STATUSCODE_BADENCODINGERROR;
-
-    if(!src->content.decoded.data)
-        return writeJsonNull(ctx);
-
-    UA_NodeId typeId = src->content.decoded.type->typeId;
-    if(typeId.identifierType != UA_NODEIDTYPE_NUMERIC)
-        return UA_STATUSCODE_BADENCODINGERROR;
-
-    ret |= writeJsonObjStart(ctx);
-    const UA_DataType *contentType = src->content.decoded.type;
-    if(ctx->useReversible) {
-        /* REVERSIBLE */
-        ret |= writeJsonKey(ctx, UA_JSONKEY_TYPEID);
-        ret |= ENCODE_DIRECT_JSON(&typeId, NodeId);
-
-        /* Encode the content */
-        ret |= writeJsonKey(ctx, UA_JSONKEY_BODY);
-        ret |= encodeJsonInternal(src->content.decoded.data, contentType, ctx);
-    } else {
-        /* NON-REVERSIBLE
-         * For the non-reversible form, ExtensionObject values 
-         * shall be encoded as a JSON object containing only the 
-         * value of the Body field. The TypeId and Encoding fields are dropped.
-         * 
-         * TODO: UA_JSONKEY_BODY key in the ExtensionObject?
-         */
-        ret |= writeJsonKey(ctx, UA_JSONKEY_BODY);
-        ret |= encodeJsonInternal(src->content.decoded.data, contentType, ctx);
-    }
-
-    ret |= writeJsonObjEnd(ctx);
-    return ret;
-}
-
-static status
-Variant_encodeJsonWrapExtensionObject(const UA_Variant *src, const bool isArray, CtxJson *ctx) {
-    size_t length = 1;
-
-    status ret = UA_STATUSCODE_GOOD;
-    if(isArray) {
-        if(src->arrayLength > UA_INT32_MAX)
-            return UA_STATUSCODE_BADENCODINGERROR;
-        
-        length = src->arrayLength;
-    }
-
-    /* Set up the ExtensionObject */
-    UA_ExtensionObject eo;
-    UA_ExtensionObject_init(&eo);
-    eo.encoding = UA_EXTENSIONOBJECT_DECODED;
-    eo.content.decoded.type = src->type;
-    const u16 memSize = src->type->memSize;
-    uintptr_t ptr = (uintptr_t) src->data;
-
-    if(isArray) {
-        ret |= writeJsonArrStart(ctx);
-        ctx->commaNeeded[ctx->depth] = false;
-
-        /* Iterate over the array */
-        for(size_t i = 0; i <  length && ret == UA_STATUSCODE_GOOD; ++i) {
-            eo.content.decoded.data = (void*) ptr;
-            ret |= writeJsonArrElm(ctx, &eo, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
-            ptr += memSize;
-        }
-    
-        ret |= writeJsonArrEnd(ctx);
-        return ret;
-    }
-
-    eo.content.decoded.data = (void*) ptr;
-    return encodeJsonInternal(&eo, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT], ctx);
-}
-
-static status
-addMultiArrayContentJSON(CtxJson *ctx, void* array, const UA_DataType *type, 
-                         size_t *index, UA_UInt32 *arrayDimensions, size_t dimensionIndex, 
-                         size_t dimensionSize) {
-    /* Check the recursion limit */
-    if(ctx->depth > UA_JSON_ENCODING_MAX_RECURSION)
-        return UA_STATUSCODE_BADENCODINGERROR;
-    
-    /* Stop recursion: The inner Arrays are written */
-    status ret;
-    if(dimensionIndex == (dimensionSize - 1)) {
-        ret = encodeJsonArray(ctx, ((u8*)array) + (type->memSize * *index),
-                              arrayDimensions[dimensionIndex], type);
-        (*index) += arrayDimensions[dimensionIndex];
-        return ret;
-    }
-
-    /* Recurse to the next dimension */
-    ret = writeJsonArrStart(ctx);
-    for(size_t i = 0; i < arrayDimensions[dimensionIndex]; i++) {
-        ret |= writeJsonCommaIfNeeded(ctx);
-        ret |= addMultiArrayContentJSON(ctx, array, type, index, arrayDimensions,
-                                        dimensionIndex + 1, dimensionSize);
-        ctx->commaNeeded[ctx->depth] = true;
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-    ret |= writeJsonArrEnd(ctx);
-    return ret;
-}
-
-ENCODE_JSON(Variant) {
-    /* If type is 0 (NULL) the Variant contains a NULL value and the containing
-     * JSON object shall be omitted or replaced by the JSON literal ‘null’ (when
-     * an element of a JSON array). */
-    if(!src->type) {
-        return writeJsonNull(ctx);
-    }
-        
-    /* Set the content type in the encoding mask */
-    const UA_Boolean isBuiltin = (src->type->typeKind <= UA_DATATYPEKIND_DIAGNOSTICINFO);
-    const UA_Boolean isEnum = (src->type->typeKind == UA_DATATYPEKIND_ENUM);
-    
-    /* Set the array type in the encoding mask */
-    const bool isArray = src->arrayLength > 0 || src->data <= UA_EMPTY_ARRAY_SENTINEL;
-    const bool hasDimensions = isArray && src->arrayDimensionsSize > 0;
-    status ret = UA_STATUSCODE_GOOD;
-    
-    if(ctx->useReversible) {
-        ret |= writeJsonObjStart(ctx);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-
-        /* Encode the content */
-        if(!isBuiltin && !isEnum) {
-            /* REVERSIBLE:  NOT BUILTIN, can it be encoded? Wrap in extension object.*/
-            ret |= writeJsonKey(ctx, UA_JSONKEY_TYPE);
-            ret |= ENCODE_DIRECT_JSON(&UA_TYPES[UA_TYPES_EXTENSIONOBJECT].typeId.identifier.numeric, UInt32);
-            ret |= writeJsonKey(ctx, UA_JSONKEY_BODY);
-            ret |= Variant_encodeJsonWrapExtensionObject(src, isArray, ctx);
-        } else if(!isArray) {
-            /*REVERSIBLE:  BUILTIN, single value.*/
-            ret |= writeJsonKey(ctx, UA_JSONKEY_TYPE);
-            ret |= ENCODE_DIRECT_JSON(&src->type->typeId.identifier.numeric, UInt32);
-            ret |= writeJsonKey(ctx, UA_JSONKEY_BODY);
-            ret |= encodeJsonInternal(src->data, src->type, ctx);
-        } else {
-            /*REVERSIBLE:   BUILTIN, array.*/
-            ret |= writeJsonKey(ctx, UA_JSONKEY_TYPE);
-            ret |= ENCODE_DIRECT_JSON(&src->type->typeId.identifier.numeric, UInt32);
-            ret |= writeJsonKey(ctx, UA_JSONKEY_BODY);
-            ret |= encodeJsonArray(ctx, src->data, src->arrayLength, src->type);
-        }
-        
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-        
-        /* REVERSIBLE:  Encode the array dimensions */
-        if(hasDimensions && ret == UA_STATUSCODE_GOOD) {
-            ret |= writeJsonKey(ctx, UA_JSONKEY_DIMENSION);
-            ret |= encodeJsonArray(ctx, src->arrayDimensions, src->arrayDimensionsSize, 
-                                   &UA_TYPES[UA_TYPES_INT32]);
-            if(ret != UA_STATUSCODE_GOOD)
-                return ret;
-        }
-
-        ret |= writeJsonObjEnd(ctx);
-        return ret;
-    } /* reversible */
-
-    
-    /* NON-REVERSIBLE
-     * For the non-reversible form, Variant values shall be encoded as a JSON object containing only
-     * the value of the Body field. The Type and Dimensions fields are dropped. Multi-dimensional
-     * arrays are encoded as a multi dimensional JSON array as described in 5.4.5.
-     */
-
-    ret |= writeJsonObjStart(ctx);
-    if(!isBuiltin && !isEnum) {
-        /*NON REVERSIBLE:  NOT BUILTIN, can it be encoded? Wrap in extension object.*/
-        if(src->arrayDimensionsSize > 1) {
-            return UA_STATUSCODE_BADNOTIMPLEMENTED;
-        }
-
-        ret |= writeJsonKey(ctx, UA_JSONKEY_BODY);
-        ret |= Variant_encodeJsonWrapExtensionObject(src, isArray, ctx);
-    } else if(!isArray) {
-        /*NON REVERSIBLE:   BUILTIN, single value.*/
-        ret |= writeJsonKey(ctx, UA_JSONKEY_BODY);
-        ret |= encodeJsonInternal(src->data, src->type, ctx);
-    } else {
-        /*NON REVERSIBLE:   BUILTIN, array.*/
-        ret |= writeJsonKey(ctx, UA_JSONKEY_BODY);
-
-        size_t dimensionSize = src->arrayDimensionsSize;
-        if(dimensionSize > 1) {
-            /*nonreversible multidimensional array*/
-            size_t index = 0;  size_t dimensionIndex = 0;
-            void *ptr = src->data;
-            const UA_DataType *arraytype = src->type;
-            ret |= addMultiArrayContentJSON(ctx, ptr, arraytype, &index, 
-                    src->arrayDimensions, dimensionIndex, dimensionSize);
-        } else {
-            /*nonreversible simple array*/
-            ret |= encodeJsonArray(ctx, src->data, src->arrayLength, src->type);
-        }
-    }
-
-    ret |= writeJsonObjEnd(ctx);
-    return ret;
-}
-
-/* DataValue */
-ENCODE_JSON(DataValue) {
-    UA_Boolean hasValue = src->hasValue && src->value.type != NULL;
-    UA_Boolean hasStatus = src->hasStatus && src->status;
-    UA_Boolean hasSourceTimestamp = src->hasSourceTimestamp && src->sourceTimestamp;
-    UA_Boolean hasSourcePicoseconds = src->hasSourcePicoseconds && src->sourcePicoseconds;
-    UA_Boolean hasServerTimestamp = src->hasServerTimestamp && src->serverTimestamp;
-    UA_Boolean hasServerPicoseconds = src->hasServerPicoseconds && src->serverPicoseconds;
-
-    if(!hasValue && !hasStatus && !hasSourceTimestamp && !hasSourcePicoseconds &&
-       !hasServerTimestamp && !hasServerPicoseconds) {
-        return writeJsonNull(ctx); /*no element, encode as null*/
-    }
-
-    status ret = UA_STATUSCODE_GOOD;
-    ret |= writeJsonObjStart(ctx);
-
-    if(hasValue) {
-        ret |= writeJsonKey(ctx, UA_JSONKEY_VALUE);
-        ret |= ENCODE_DIRECT_JSON(&src->value, Variant);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    if(hasStatus) {
-        ret |= writeJsonKey(ctx, UA_JSONKEY_STATUS);
-        ret |= ENCODE_DIRECT_JSON(&src->status, StatusCode);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    if(hasSourceTimestamp) {
-        ret |= writeJsonKey(ctx, UA_JSONKEY_SOURCETIMESTAMP);
-        ret |= ENCODE_DIRECT_JSON(&src->sourceTimestamp, DateTime);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    if(hasSourcePicoseconds) {
-        ret |= writeJsonKey(ctx, UA_JSONKEY_SOURCEPICOSECONDS);
-        ret |= ENCODE_DIRECT_JSON(&src->sourcePicoseconds, UInt16);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    if(hasServerTimestamp) {
-        ret |= writeJsonKey(ctx, UA_JSONKEY_SERVERTIMESTAMP);
-        ret |= ENCODE_DIRECT_JSON(&src->serverTimestamp, DateTime);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    if(hasServerPicoseconds) {
-        ret |= writeJsonKey(ctx, UA_JSONKEY_SERVERPICOSECONDS);
-        ret |= ENCODE_DIRECT_JSON(&src->serverPicoseconds, UInt16);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    ret |= writeJsonObjEnd(ctx);
-    return ret;
-}
-
-/* DiagnosticInfo */
-ENCODE_JSON(DiagnosticInfo) {
-    status ret = UA_STATUSCODE_GOOD;
-    if(!src->hasSymbolicId && !src->hasNamespaceUri && !src->hasLocalizedText &&
-       !src->hasLocale && !src->hasAdditionalInfo && !src->hasInnerDiagnosticInfo &&
-       !src->hasInnerStatusCode) {
-        return writeJsonNull(ctx); /*no element present, encode as null.*/
-    }
-    
-    ret |= writeJsonObjStart(ctx);
-    
-    if(src->hasSymbolicId) {
-        ret |= writeJsonKey(ctx, UA_JSONKEY_SYMBOLICID);
-        ret |= ENCODE_DIRECT_JSON(&src->symbolicId, UInt32);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    if(src->hasNamespaceUri) {
-        ret |= writeJsonKey(ctx, UA_JSONKEY_NAMESPACEURI);
-        ret |= ENCODE_DIRECT_JSON(&src->namespaceUri, UInt32);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-    
-    if(src->hasLocalizedText) {
-        ret |= writeJsonKey(ctx, UA_JSONKEY_LOCALIZEDTEXT);
-        ret |= ENCODE_DIRECT_JSON(&src->localizedText, UInt32);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-    
-    if(src->hasLocale) {
-        ret |= writeJsonKey(ctx, UA_JSONKEY_LOCALE);
-        ret |= ENCODE_DIRECT_JSON(&src->locale, UInt32);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-    
-    if(src->hasAdditionalInfo) {
-        ret |= writeJsonKey(ctx, UA_JSONKEY_ADDITIONALINFO);
-        ret |= ENCODE_DIRECT_JSON(&src->additionalInfo, String);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    if(src->hasInnerStatusCode) {
-        ret |= writeJsonKey(ctx, UA_JSONKEY_INNERSTATUSCODE);
-        ret |= ENCODE_DIRECT_JSON(&src->innerStatusCode, StatusCode);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    if(src->hasInnerDiagnosticInfo && src->innerDiagnosticInfo) {
-        ret |= writeJsonKey(ctx, UA_JSONKEY_INNERDIAGNOSTICINFO);
-        /* Check recursion depth in encodeJsonInternal */
-        ret |= encodeJsonInternal(src->innerDiagnosticInfo, &UA_TYPES[UA_TYPES_DIAGNOSTICINFO], ctx);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-    }
-
-    ret |= writeJsonObjEnd(ctx);
-    return ret;
-}
-
-static status
-encodeJsonStructure(const void *src, const UA_DataType *type, CtxJson *ctx) {
-    /* Check the recursion limit */
-    if(ctx->depth > UA_JSON_ENCODING_MAX_RECURSION)
-        return UA_STATUSCODE_BADENCODINGERROR;
-    ctx->depth++;
-
-    status ret = writeJsonObjStart(ctx);
-
-    uintptr_t ptr = (uintptr_t) src;
-    u8 membersSize = type->membersSize;
-    const UA_DataType * typelists[2] = {UA_TYPES, &type[-type->typeIndex]};
-    for(size_t i = 0; i < membersSize && ret == UA_STATUSCODE_GOOD; ++i) {
-        const UA_DataTypeMember *m = &type->members[i];
-        const UA_DataType *mt = &typelists[!m->namespaceZero][m->memberTypeIndex];
-
-        if(m->memberName != NULL && *m->memberName != 0)
-            ret |= writeJsonKey(ctx, m->memberName);
-
-        if(!m->isArray) {
-            ptr += m->padding;
-            size_t memSize = mt->memSize;
-            ret |= encodeJsonJumpTable[mt->typeKind]((const void*) ptr, mt, ctx);
-            ptr += memSize;
-        } else {
-            ptr += m->padding;
-            const size_t length = *((const size_t*) ptr);
-            ptr += sizeof (size_t);
-            ret |= encodeJsonArray(ctx, *(void * const *)ptr, length, mt);
-            ptr += sizeof (void*);
-        }
-    }
-
-    ret |= writeJsonObjEnd(ctx);
-
-    ctx->depth--;
-    return ret;
-}
-
-static status
-encodeJsonNotImplemented(const void *src, const UA_DataType *type, CtxJson *ctx) {
-    (void) src, (void) type, (void)ctx;
-    return UA_STATUSCODE_BADNOTIMPLEMENTED;
-}
-
-const encodeJsonSignature encodeJsonJumpTable[UA_DATATYPEKINDS] = {
-    (encodeJsonSignature)Boolean_encodeJson,
-    (encodeJsonSignature)SByte_encodeJson, /* SByte */
-    (encodeJsonSignature)Byte_encodeJson,
-    (encodeJsonSignature)Int16_encodeJson, /* Int16 */
-    (encodeJsonSignature)UInt16_encodeJson,
-    (encodeJsonSignature)Int32_encodeJson, /* Int32 */
-    (encodeJsonSignature)UInt32_encodeJson,
-    (encodeJsonSignature)Int64_encodeJson, /* Int64 */
-    (encodeJsonSignature)UInt64_encodeJson,
-    (encodeJsonSignature)Float_encodeJson,
-    (encodeJsonSignature)Double_encodeJson,
-    (encodeJsonSignature)String_encodeJson,
-    (encodeJsonSignature)DateTime_encodeJson, /* DateTime */
-    (encodeJsonSignature)Guid_encodeJson,
-    (encodeJsonSignature)ByteString_encodeJson, /* ByteString */
-    (encodeJsonSignature)String_encodeJson, /* XmlElement */
-    (encodeJsonSignature)NodeId_encodeJson,
-    (encodeJsonSignature)ExpandedNodeId_encodeJson,
-    (encodeJsonSignature)StatusCode_encodeJson, /* StatusCode */
-    (encodeJsonSignature)QualifiedName_encodeJson, /* QualifiedName */
-    (encodeJsonSignature)LocalizedText_encodeJson,
-    (encodeJsonSignature)ExtensionObject_encodeJson,
-    (encodeJsonSignature)DataValue_encodeJson,
-    (encodeJsonSignature)Variant_encodeJson,
-    (encodeJsonSignature)DiagnosticInfo_encodeJson,
-    (encodeJsonSignature)encodeJsonNotImplemented, /* Decimal */
-    (encodeJsonSignature)Int32_encodeJson, /* Enum */
-    (encodeJsonSignature)encodeJsonStructure,
-    (encodeJsonSignature)encodeJsonNotImplemented, /* Structure with optional fields */
-    (encodeJsonSignature)encodeJsonNotImplemented, /* Union */
-    (encodeJsonSignature)encodeJsonNotImplemented /* BitfieldCluster */
-};
-
-status
-encodeJsonInternal(const void *src, const UA_DataType *type, CtxJson *ctx) {
-    return encodeJsonJumpTable[type->typeKind](src, type, ctx);
-}
-
-status UA_FUNC_ATTR_WARN_UNUSED_RESULT
-UA_encodeJson(const void *src, const UA_DataType *type,
-              u8 **bufPos, const u8 **bufEnd, UA_String *namespaces, 
-              size_t namespaceSize, UA_String *serverUris, 
-              size_t serverUriSize, UA_Boolean useReversible) {
-    if(!src || !type)
-        return UA_STATUSCODE_BADINTERNALERROR;
-    
-    /* Set up the context */
-    CtxJson ctx;
-    memset(&ctx, 0, sizeof(ctx));
-    ctx.pos = *bufPos;
-    ctx.end = *bufEnd;
-    ctx.depth = 0;
-    ctx.namespaces = namespaces;
-    ctx.namespacesSize = namespaceSize;
-    ctx.serverUris = serverUris;
-    ctx.serverUrisSize = serverUriSize;
-    ctx.useReversible = useReversible;
-    ctx.calcOnly = false;
-    
-    /* Encode */
-    status ret = encodeJsonJumpTable[type->typeKind](src, type, &ctx);
-    
-    *bufPos = ctx.pos;
-    *bufEnd = ctx.end;
-    return ret;
-}
-
-/************/
-/* CalcSize */
-/************/
-size_t
-UA_calcSizeJson(const void *src, const UA_DataType *type,
-                UA_String *namespaces, size_t namespaceSize,
-                UA_String *serverUris, size_t serverUriSize,
-                UA_Boolean useReversible) {
-    if(!src || !type)
-        return UA_STATUSCODE_BADINTERNALERROR;
-
-    /* Set up the context */
-    CtxJson ctx;
-    memset(&ctx, 0, sizeof(ctx));
-    ctx.pos = 0;
-    ctx.end = (const UA_Byte*)(uintptr_t)SIZE_MAX;
-    ctx.depth = 0;
-    ctx.namespaces = namespaces;
-    ctx.namespacesSize = namespaceSize;
-    ctx.serverUris = serverUris;
-    ctx.serverUrisSize = serverUriSize;
-    ctx.useReversible = useReversible;
-    ctx.calcOnly = true;
-
-    /* Encode */
-    status ret = encodeJsonJumpTable[type->typeKind](src, type, &ctx);
-    if(ret != UA_STATUSCODE_GOOD)
-        return 0;
-    return (size_t)ctx.pos;
-}
-
-/**********/
-/* Decode */
-/**********/
-
-/* Macro which gets current size and char pointer of current Token. Needs
- * ParseCtx (parseCtx) and CtxJson (ctx). Does NOT increment index of Token. */
-#define GET_TOKEN(data, size) do {                                               \
-    (size) = (size_t)(parseCtx->tokenArray[parseCtx->index].end - parseCtx->tokenArray[parseCtx->index].start); \
-    (data) = (char*)(ctx->pos + parseCtx->tokenArray[parseCtx->index].start); } while(0)
-
-#define ALLOW_NULL do {             \
-    if(isJsonNull(ctx, parseCtx)) { \
-        parseCtx->index++;          \
-        return UA_STATUSCODE_GOOD;  \
-    }} while(0)
-
-#define CHECK_TOKEN_BOUNDS do {                   \
-    if(parseCtx->index >= parseCtx->tokenCount)   \
-        return UA_STATUSCODE_BADDECODINGERROR;    \
-    } while(0)
-
-#define CHECK_PRIMITIVE do {                      \
-    if(getJsmnType(parseCtx) != JSMN_PRIMITIVE) { \
-        return UA_STATUSCODE_BADDECODINGERROR;    \
-    }} while(0)
-
-#define CHECK_STRING do {                      \
-    if(getJsmnType(parseCtx) != JSMN_STRING) { \
-        return UA_STATUSCODE_BADDECODINGERROR; \
-    }} while(0)
-
-#define CHECK_OBJECT do {                      \
-    if(getJsmnType(parseCtx) != JSMN_OBJECT) { \
-        return UA_STATUSCODE_BADDECODINGERROR; \
-    }} while(0)
-
-/* Forward declarations*/
-#define DECODE_JSON(TYPE) static status                        \
-    TYPE##_decodeJson(UA_##TYPE *dst, const UA_DataType *type, \
-                      CtxJson *ctx, ParseCtx *parseCtx, UA_Boolean moveToken)
-
-/* decode without moving the token index */
-#define DECODE_DIRECT_JSON(DST, TYPE) TYPE##_decodeJson((UA_##TYPE*)DST, NULL, ctx, parseCtx, false)
-
-static status
-Array_decodeJson(void *dst, const UA_DataType *type, CtxJson *ctx, 
-        ParseCtx *parseCtx, UA_Boolean moveToken);
-
-static status
-Array_decodeJson_internal(void **dst, const UA_DataType *type, 
-        CtxJson *ctx, ParseCtx *parseCtx, UA_Boolean moveToken);
-
-static status
-Variant_decodeJsonUnwrapExtensionObject(UA_Variant *dst, const UA_DataType *type, 
-        CtxJson *ctx, ParseCtx *parseCtx, UA_Boolean moveToken);
-
-/* Json decode Helper */
-jsmntype_t
-getJsmnType(const ParseCtx *parseCtx) {
-    if(parseCtx->index >= parseCtx->tokenCount)
-        return JSMN_UNDEFINED;
-    return parseCtx->tokenArray[parseCtx->index].type;
-}
-
-static UA_Boolean
-isJsonTokenNull(const CtxJson *ctx, jsmntok_t *token) {
-    if(token->type != JSMN_PRIMITIVE)
-        return false;
-    char* elem = (char*)(ctx->pos + token->start);
-    return (elem[0] == 'n' && elem[1] == 'u' && elem[2] == 'l' && elem[3] == 'l');
-}
-
-UA_Boolean
-isJsonNull(const CtxJson *ctx, const ParseCtx *parseCtx) {
-    if(parseCtx->index >= parseCtx->tokenCount)
-        return false;
-
-    if(parseCtx->tokenArray[parseCtx->index].type != JSMN_PRIMITIVE) {
-        return false;
-    }
-    char* elem = (char*)(ctx->pos + parseCtx->tokenArray[parseCtx->index].start);
-    return (elem[0] == 'n' && elem[1] == 'u' && elem[2] == 'l' && elem[3] == 'l');
-}
-
-static UA_SByte jsoneq(const char *json, jsmntok_t *tok, const char *searchKey) {
-    /* TODO: necessary?
-       if(json == NULL
-            || tok == NULL 
-            || searchKey == NULL) {
-        return -1;
-    } */
-    
-    if(tok->type == JSMN_STRING) {
-         if(strlen(searchKey) == (size_t)(tok->end - tok->start) ) {
-             if(strncmp(json + tok->start,
-                        (const char*)searchKey, (size_t)(tok->end - tok->start)) == 0) {
-                 return 0;
-             }   
-         }
-    }
-    return -1;
-}
-
-DECODE_JSON(Boolean) {
-    CHECK_PRIMITIVE;
-    CHECK_TOKEN_BOUNDS;
-    size_t tokenSize;
-    char* tokenData;
-    GET_TOKEN(tokenData, tokenSize);
-
-    if(tokenSize == 4 &&
-       tokenData[0] == 't' && tokenData[1] == 'r' &&
-       tokenData[2] == 'u' && tokenData[3] == 'e') {
-        *dst = true;
-    } else if(tokenSize == 5 &&
-              tokenData[0] == 'f' && tokenData[1] == 'a' &&
-              tokenData[2] == 'l' && tokenData[3] == 's' &&
-              tokenData[4] == 'e') {
-        *dst = false;
-    } else {
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-    
-    if(moveToken)
-        parseCtx->index++;
-    return UA_STATUSCODE_GOOD;
-}
-
-#ifdef UA_ENABLE_CUSTOM_LIBC
-static UA_StatusCode
-parseUnsignedInteger(char* inputBuffer, size_t sizeOfBuffer,
-                     UA_UInt64 *destinationOfNumber) {
-    UA_UInt64 d = 0;
-    atoiUnsigned(inputBuffer, sizeOfBuffer, &d);
-    if(!destinationOfNumber)
-        return UA_STATUSCODE_BADDECODINGERROR;
-    *destinationOfNumber = d;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-parseSignedInteger(char* inputBuffer, size_t sizeOfBuffer,
-                   UA_Int64 *destinationOfNumber) {
-    UA_Int64 d = 0;
-    atoiSigned(inputBuffer, sizeOfBuffer, &d);
-    if(!destinationOfNumber)
-        return UA_STATUSCODE_BADDECODINGERROR;
-    *destinationOfNumber = d;
-    return UA_STATUSCODE_GOOD;
-}
-#else
-/* Safe strtol variant of unsigned string conversion.
- * Returns UA_STATUSCODE_BADDECODINGERROR in case of overflows.
- * Buffer limit is 20 digits. */
-static UA_StatusCode
-parseUnsignedInteger(char* inputBuffer, size_t sizeOfBuffer,
-                     UA_UInt64 *destinationOfNumber) {
-    /* Check size to avoid huge malicious stack allocation.
-     * No UInt64 can have more digits than 20. */
-    if(sizeOfBuffer > 20) {
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-
-    /* convert to null terminated string  */
-    UA_STACKARRAY(char, string, sizeOfBuffer+1);
-    memcpy(string, inputBuffer, sizeOfBuffer);
-    string[sizeOfBuffer] = 0;
-
-    /* Conversion */
-    char *endptr, *str;
-    str = string;
-    errno = 0;    /* To distinguish success/failure after call */
-    UA_UInt64 val = strtoull(str, &endptr, 10);
-
-    /* Check for various possible errors */
-    if((errno == ERANGE && (val == LLONG_MAX || val == 0))
-          || (errno != 0 )) {
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-
-    /* Check if no digits were found */
-    if(endptr == str)
-        return UA_STATUSCODE_BADDECODINGERROR;
-
-    /* copy to destination */
-    *destinationOfNumber = val;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Safe strtol variant of unsigned string conversion.
- * Returns UA_STATUSCODE_BADDECODINGERROR in case of overflows.
- * Buffer limit is 20 digits. */
-static UA_StatusCode
-parseSignedInteger(char* inputBuffer, size_t sizeOfBuffer,
-                   UA_Int64 *destinationOfNumber) {
-    /* Check size to avoid huge malicious stack allocation.
-     * No UInt64 can have more digits than 20. */
-    if(sizeOfBuffer > 20)
-        return UA_STATUSCODE_BADDECODINGERROR;
-
-    /* convert to null terminated string  */
-    UA_STACKARRAY(char, string, sizeOfBuffer + 1);
-    memcpy(string, inputBuffer, sizeOfBuffer);
-    string[sizeOfBuffer] = 0;
-
-    /* Conversion */
-    char *endptr, *str;
-    str = string;
-    errno = 0;    /* To distinguish success/failure after call */
-    UA_Int64 val = strtoll(str, &endptr, 10);
-
-    /* Check for various possible errors */
-    if((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN))
-          || (errno != 0 )) {
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-
-    /* Check if no digits were found */
-    if(endptr == str)
-        return UA_STATUSCODE_BADDECODINGERROR;
-
-    /* copy to destination */
-    *destinationOfNumber = val;
-    return UA_STATUSCODE_GOOD;
-}
-#endif
-
-DECODE_JSON(Byte) {
-    CHECK_TOKEN_BOUNDS;
-    CHECK_PRIMITIVE;
-    size_t tokenSize;
-    char* tokenData;
-    GET_TOKEN(tokenData, tokenSize);
-
-    UA_UInt64 out = 0;
-    UA_StatusCode s = parseUnsignedInteger(tokenData, tokenSize, &out);
-    *dst = (UA_Byte)out;
-
-    if(moveToken)
-        parseCtx->index++;
-    return s;
-}
-
-DECODE_JSON(UInt16) {
-    CHECK_TOKEN_BOUNDS;
-    CHECK_PRIMITIVE;
-    size_t tokenSize;
-    char* tokenData;
-    GET_TOKEN(tokenData, tokenSize);
-
-    UA_UInt64 out = 0;
-    UA_StatusCode s = parseUnsignedInteger(tokenData, tokenSize, &out);
-    *dst = (UA_UInt16)out;
-
-    if(moveToken)
-        parseCtx->index++;
-    return s;
-}
-
-DECODE_JSON(UInt32) {
-    CHECK_TOKEN_BOUNDS;
-    CHECK_PRIMITIVE;
-    size_t tokenSize;
-    char* tokenData;
-    GET_TOKEN(tokenData, tokenSize);
-
-    UA_UInt64 out = 0;
-    UA_StatusCode s = parseUnsignedInteger(tokenData, tokenSize, &out);
-    *dst = (UA_UInt32)out;
-
-    if(moveToken)
-        parseCtx->index++;
-    return s;
-}
-
-DECODE_JSON(UInt64) {
-    CHECK_TOKEN_BOUNDS;
-    CHECK_STRING;
-    size_t tokenSize;
-    char* tokenData;
-    GET_TOKEN(tokenData, tokenSize);
-
-    UA_UInt64 out = 0;
-    UA_StatusCode s = parseUnsignedInteger(tokenData, tokenSize, &out);
-    *dst = (UA_UInt64)out;
-
-    if(moveToken)
-        parseCtx->index++;
-    return s;
-}
-
-DECODE_JSON(SByte) {
-    CHECK_TOKEN_BOUNDS;
-    CHECK_PRIMITIVE;
-    size_t tokenSize;
-    char* tokenData;
-    GET_TOKEN(tokenData, tokenSize);
-
-    UA_Int64 out = 0;
-    UA_StatusCode s = parseSignedInteger(tokenData, tokenSize, &out);
-    *dst = (UA_SByte)out;
-
-    if(moveToken)
-        parseCtx->index++;
-    return s;
-}
-
-DECODE_JSON(Int16) {
-    CHECK_TOKEN_BOUNDS;
-    CHECK_PRIMITIVE;
-    size_t tokenSize;
-    char* tokenData;
-    GET_TOKEN(tokenData, tokenSize);
-
-    UA_Int64 out = 0;
-    UA_StatusCode s = parseSignedInteger(tokenData, tokenSize, &out);
-    *dst = (UA_Int16)out;
-
-    if(moveToken)
-        parseCtx->index++;
-    return s;
-}
-
-DECODE_JSON(Int32) {
-    CHECK_TOKEN_BOUNDS;
-    CHECK_PRIMITIVE;
-    size_t tokenSize;
-    char* tokenData;
-    GET_TOKEN(tokenData, tokenSize);
-
-    UA_Int64 out = 0;
-    UA_StatusCode s = parseSignedInteger(tokenData, tokenSize, &out);
-    *dst = (UA_Int32)out;
-
-    if(moveToken)
-        parseCtx->index++;
-    return s;
-}
-
-DECODE_JSON(Int64) {
-    CHECK_TOKEN_BOUNDS;
-    CHECK_STRING;
-    size_t tokenSize;
-    char* tokenData;
-    GET_TOKEN(tokenData, tokenSize);
-
-    UA_Int64 out = 0;
-    UA_StatusCode s = parseSignedInteger(tokenData, tokenSize, &out);
-    *dst = (UA_Int64)out;
-
-    if(moveToken)
-        parseCtx->index++;
-    return s;
-}
-
-static UA_UInt32 hex2int(char ch) {
-    if(ch >= '0' && ch <= '9')
-        return (UA_UInt32)(ch - '0');
-    if(ch >= 'A' && ch <= 'F')
-        return (UA_UInt32)(ch - 'A' + 10);
-    if(ch >= 'a' && ch <= 'f')
-        return (UA_UInt32)(ch - 'a' + 10);
-    return 0;
-}
-
-/* Float
-* Either a JSMN_STRING or JSMN_PRIMITIVE
-*/
-DECODE_JSON(Float) {
-    CHECK_TOKEN_BOUNDS;
-    size_t tokenSize;
-    char* tokenData;
-    GET_TOKEN(tokenData, tokenSize);
-    
-    /* https://www.exploringbinary.com/maximum-number-of-decimal-digits-in-binary-floating-point-numbers/
-     * Maximum digit counts for select IEEE floating-point formats: 149
-     * Sanity check. */
-    if(tokenSize > 150)
-        return UA_STATUSCODE_BADDECODINGERROR;
-
-    jsmntype_t tokenType = getJsmnType(parseCtx);
-    if(tokenType == JSMN_STRING) {
-        /*It could be a String with Nan, Infinity*/
-        if(tokenSize == 8 && memcmp(tokenData, "Infinity", 8) == 0) {
-            *dst = (UA_Float)INFINITY;
-            return UA_STATUSCODE_GOOD;
-        }
-        
-        if(tokenSize == 9 && memcmp(tokenData, "-Infinity", 9) == 0) {
-            /* workaround an MSVC 2013 issue */
-            *dst = (UA_Float)-INFINITY;
-            return UA_STATUSCODE_GOOD;
-        }
-        
-        if(tokenSize == 3 && memcmp(tokenData, "NaN", 3) == 0) {
-            *dst = (UA_Float)NAN;
-            return UA_STATUSCODE_GOOD;
-        }
-        
-        if(tokenSize == 4 && memcmp(tokenData, "-NaN", 4) == 0) {
-            *dst = (UA_Float)NAN;
-            return UA_STATUSCODE_GOOD;
-        }
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-    
-    if(tokenType != JSMN_PRIMITIVE)
-        return UA_STATUSCODE_BADDECODINGERROR;
-
-    /* Null-Terminate for sscanf. */
-    UA_STACKARRAY(char, string, tokenSize+1);
-    memcpy(string, tokenData, tokenSize);
-    string[tokenSize] = 0;
-    
-    UA_Float d = 0;
-#ifdef UA_ENABLE_CUSTOM_LIBC
-    d = (UA_Float)__floatscan(string, 1, 0);
-#else
-    char c = 0;
-    /* On success, the function returns the number of variables filled.
-     * In the case of an input failure before any data could be successfully read, EOF is returned. */
-    int ret = sscanf(string, "%f%c", &d, &c);
-
-    /* Exactly one var must be filled. %c acts as a guard for wrong input which is accepted by sscanf.
-    E.g. 1.23.45 is not accepted. */
-    if(ret == EOF || (ret != 1))
-        return UA_STATUSCODE_BADDECODINGERROR;
-#endif
-    
-    *dst = d;
-
-    parseCtx->index++;
-    return UA_STATUSCODE_GOOD;
-}
-
-/* Either a JSMN_STRING or JSMN_PRIMITIVE */
-DECODE_JSON(Double) {
-    CHECK_TOKEN_BOUNDS;
-    size_t tokenSize;
-    char* tokenData;
-    GET_TOKEN(tokenData, tokenSize);
-    
-    /* https://www.exploringbinary.com/maximum-number-of-decimal-digits-in-binary-floating-point-numbers/
-     * Maximum digit counts for select IEEE floating-point formats: 1074
-     * Sanity check.
-     */
-    if(tokenSize > 1075)
-        return UA_STATUSCODE_BADDECODINGERROR;
-
-    jsmntype_t tokenType = getJsmnType(parseCtx);
-    if(tokenType == JSMN_STRING) {
-        /*It could be a String with Nan, Infinity*/
-        if(tokenSize == 8 && memcmp(tokenData, "Infinity", 8) == 0) {
-            *dst = INFINITY;
-            return UA_STATUSCODE_GOOD;
-        }
-        
-        if(tokenSize == 9 && memcmp(tokenData, "-Infinity", 9) == 0) {
-            /* workaround an MSVC 2013 issue */
-            *dst = -INFINITY;
-            return UA_STATUSCODE_GOOD;
-        }
-        
-        if(tokenSize == 3 && memcmp(tokenData, "NaN", 3) == 0) {
-            *dst = NAN;
-            return UA_STATUSCODE_GOOD;
-        }
-        
-        if(tokenSize == 4 && memcmp(tokenData, "-NaN", 4) == 0) {
-            *dst = NAN;
-            return UA_STATUSCODE_GOOD;
-        }
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-    
-    if(tokenType != JSMN_PRIMITIVE)
-        return UA_STATUSCODE_BADDECODINGERROR;
-
-    /* Null-Terminate for sscanf. Should this better be handled on heap? Max
-     * 1075 input chars allowed. Not using heap. */
-    UA_STACKARRAY(char, string, tokenSize+1);
-    memcpy(string, tokenData, tokenSize);
-    string[tokenSize] = 0;
-    
-    UA_Double d = 0;
-#ifdef UA_ENABLE_CUSTOM_LIBC
-    d = (UA_Double)__floatscan(string, 2, 0);
-#else
-    char c = 0;
-    /* On success, the function returns the number of variables filled.
-     * In the case of an input failure before any data could be successfully read, EOF is returned. */
-    int ret = sscanf(string, "%lf%c", &d, &c);
-
-    /* Exactly one var must be filled. %c acts as a guard for wrong input which is accepted by sscanf.
-    E.g. 1.23.45 is not accepted. */
-    if(ret == EOF || (ret != 1))
-        return UA_STATUSCODE_BADDECODINGERROR;
-#endif
-    
-    *dst = d;
-
-    parseCtx->index++;
-    return UA_STATUSCODE_GOOD;
-}
-
-/*
-  Expects 36 chars in format    00000003-0009-000A-0807-060504030201
-                                | data1| |d2| |d3| |d4| |  data4   |
-*/
-static UA_Guid UA_Guid_fromChars(const char* chars) {
-    UA_Guid dst;
-    UA_Guid_init(&dst);
-    for(size_t i = 0; i < 8; i++)
-        dst.data1 |= (UA_UInt32)(hex2int(chars[i]) << (28 - (i*4)));
-    for(size_t i = 0; i < 4; i++) {
-        dst.data2 |= (UA_UInt16)(hex2int(chars[9+i]) << (12 - (i*4)));
-        dst.data3 |= (UA_UInt16)(hex2int(chars[14+i]) << (12 - (i*4)));
-    }
-    dst.data4[0] |= (UA_Byte)(hex2int(chars[19]) << 4u);
-    dst.data4[0] |= (UA_Byte)(hex2int(chars[20]) << 0u);
-    dst.data4[1] |= (UA_Byte)(hex2int(chars[21]) << 4u);
-    dst.data4[1] |= (UA_Byte)(hex2int(chars[22]) << 0u);
-    for(size_t i = 0; i < 6; i++) {
-        dst.data4[2+i] |= (UA_Byte)(hex2int(chars[24 + i*2]) << 4u);
-        dst.data4[2+i] |= (UA_Byte)(hex2int(chars[25 + i*2]) << 0u);
-    }
-    return dst;
-}
-
-DECODE_JSON(Guid) {
-    CHECK_STRING;
-    CHECK_TOKEN_BOUNDS;
-    size_t tokenSize;
-    char* tokenData;
-    GET_TOKEN(tokenData, tokenSize);
-
-    if(tokenSize != 36)
-        return UA_STATUSCODE_BADDECODINGERROR;
-
-    /* check if incorrect chars are present */
-    for(size_t i = 0; i < tokenSize; i++) {
-        if(!(tokenData[i] == '-'
-                || (tokenData[i] >= '0' && tokenData[i] <= '9')
-                || (tokenData[i] >= 'A' && tokenData[i] <= 'F')
-                || (tokenData[i] >= 'a' && tokenData[i] <= 'f'))) {
-            return UA_STATUSCODE_BADDECODINGERROR;
-        }
-    }
-
-    *dst = UA_Guid_fromChars(tokenData);
-
-    if(moveToken)
-        parseCtx->index++;
-    return UA_STATUSCODE_GOOD;
-}
-
-DECODE_JSON(String) {
-    ALLOW_NULL;
-    CHECK_STRING;
-    CHECK_TOKEN_BOUNDS;
-    size_t tokenSize;
-    char* tokenData;
-    GET_TOKEN(tokenData, tokenSize);
-
-    /* Empty string? */
-    if(tokenSize == 0) {
-        dst->data = (UA_Byte*)UA_EMPTY_ARRAY_SENTINEL;
-        dst->length = 0;
-        if(moveToken)
-            parseCtx->index++;
-        return UA_STATUSCODE_GOOD;
-    }
-    
-    /* The actual value is at most of the same length as the source string:
-     * - Shortcut escapes (e.g. "\t") (length 2) are converted to 1 byte
-     * - A single \uXXXX escape (length 6) is converted to at most 3 bytes
-     * - Two \uXXXX escapes (length 12) forming an UTF-16 surrogate pair are
-     *   converted to 4 bytes */
-    char *outputBuffer = (char*)UA_malloc(tokenSize);
-    if(!outputBuffer)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    
-    const char *p = (char*)tokenData;
-    const char *end = (char*)&tokenData[tokenSize];
-    char *pos = outputBuffer;
-    while(p < end) {
-        /* No escaping */
-        if(*p != '\\') {
-            *(pos++) = *(p++);
-            continue;
-        }
-
-        /* Escape character */
-        p++;
-        if(p == end)
-            goto cleanup;
-        
-        if(*p != 'u') {
-            switch(*p) {
-            case '"': case '\\': case '/': *pos = *p; break;
-            case 'b': *pos = '\b'; break;
-            case 'f': *pos = '\f'; break;
-            case 'n': *pos = '\n'; break;
-            case 'r': *pos = '\r'; break;
-            case 't': *pos = '\t'; break;
-            default: goto cleanup;
-            }
-            pos++;
-            p++;
-            continue;
-        }
-            
-        /* Unicode */
-        if(p + 4 >= end)
-            goto cleanup;
-        int32_t value_signed = decode_unicode_escape(p);
-        if(value_signed < 0)
-            goto cleanup;
-        uint32_t value = (uint32_t)value_signed;
-        p += 5;
-
-        if(0xD800 <= value && value <= 0xDBFF) {
-            /* Surrogate pair */
-            if(p + 5 >= end)
-                goto cleanup;
-            if(*p != '\\' || *(p + 1) != 'u')
-                goto cleanup;
-            int32_t value2 = decode_unicode_escape(p + 1);
-            if(value2 < 0xDC00 || value2 > 0xDFFF)
-                goto cleanup;
-            value = ((value - 0xD800u) << 10u) + (uint32_t)((value2 - 0xDC00) + 0x10000);
-            p += 6;
-        } else if(0xDC00 <= value && value <= 0xDFFF) {
-            /* Invalid Unicode '\\u%04X' */
-            goto cleanup;
-        }
-
-        size_t length;
-        if(utf8_encode((int32_t)value, pos, &length))
-            goto cleanup;
-
-        pos += length;
-    }
-
-    dst->length = (size_t)(pos - outputBuffer);
-    if(dst->length > 0) {
-        dst->data = (UA_Byte*)outputBuffer;
-    } else {
-        dst->data = (UA_Byte*)UA_EMPTY_ARRAY_SENTINEL;
-        UA_free(outputBuffer);
-    }
-
-    if(moveToken)
-        parseCtx->index++;
-    return UA_STATUSCODE_GOOD;
-    
-cleanup:
-    UA_free(outputBuffer);  
-    return UA_STATUSCODE_BADDECODINGERROR;
-}
-
-DECODE_JSON(ByteString) {
-    ALLOW_NULL;
-    CHECK_STRING;
-    CHECK_TOKEN_BOUNDS;
-    size_t tokenSize;
-    char* tokenData;
-    GET_TOKEN(tokenData, tokenSize);
-
-    /* Empty bytestring? */
-    if(tokenSize == 0) {
-        dst->data = (UA_Byte*)UA_EMPTY_ARRAY_SENTINEL;
-        dst->length = 0;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    size_t flen = 0;
-    unsigned char* unB64 = UA_unbase64((unsigned char*)tokenData, tokenSize, &flen);
-    if(unB64 == 0)
-        return UA_STATUSCODE_BADDECODINGERROR;
-
-    dst->data = (u8*)unB64;
-    dst->length = flen;
-    
-    if(moveToken)
-        parseCtx->index++;
-    return UA_STATUSCODE_GOOD;
-}
-
-DECODE_JSON(LocalizedText) {
-    ALLOW_NULL;
-    CHECK_OBJECT;
-
-    DecodeEntry entries[2] = {
-        {UA_JSONKEY_LOCALE, &dst->locale, (decodeJsonSignature) String_decodeJson, false, NULL},
-        {UA_JSONKEY_TEXT, &dst->text, (decodeJsonSignature) String_decodeJson, false, NULL}
-    };
-
-    return decodeFields(ctx, parseCtx, entries, 2, type);
-}
-
-DECODE_JSON(QualifiedName) {
-    ALLOW_NULL;
-    CHECK_OBJECT;
-
-    DecodeEntry entries[2] = {
-        {UA_JSONKEY_NAME, &dst->name, (decodeJsonSignature) String_decodeJson, false, NULL},
-        {UA_JSONKEY_URI, &dst->namespaceIndex, (decodeJsonSignature) UInt16_decodeJson, false, NULL}
-    };
-
-    return decodeFields(ctx, parseCtx, entries, 2, type);
-}
-
-/* Function for searching ahead of the current token. Used for retrieving the
- * OPC UA type of a token */
-static status
-searchObjectForKeyRec(const char *searchKey, CtxJson *ctx, 
-                      ParseCtx *parseCtx, size_t *resultIndex, UA_UInt16 depth) {
-    UA_StatusCode ret = UA_STATUSCODE_BADNOTFOUND;
-    
-    CHECK_TOKEN_BOUNDS;
-    
-    if(parseCtx->tokenArray[parseCtx->index].type == JSMN_OBJECT) {
-        size_t objectCount = (size_t)parseCtx->tokenArray[parseCtx->index].size;
-        parseCtx->index++; /*Object to first Key*/
-        
-        for(size_t i = 0; i < objectCount; i++) {
-            CHECK_TOKEN_BOUNDS;
-            if(depth == 0) { /* we search only on first layer */
-                if(jsoneq((char*)ctx->pos, &parseCtx->tokenArray[parseCtx->index], searchKey) == 0) {
-                    /*found*/
-                    parseCtx->index++; /*We give back a pointer to the value of the searched key!*/
-                    *resultIndex = parseCtx->index;
-                    return UA_STATUSCODE_GOOD;
-                }
-            }
-               
-            parseCtx->index++; /* value */
-            CHECK_TOKEN_BOUNDS;
-            
-            if(parseCtx->tokenArray[parseCtx->index].type == JSMN_OBJECT) {
-               ret = searchObjectForKeyRec(searchKey, ctx, parseCtx, resultIndex,
-                                           (UA_UInt16)(depth + 1));
-            } else if(parseCtx->tokenArray[parseCtx->index].type == JSMN_ARRAY) {
-               ret = searchObjectForKeyRec(searchKey, ctx, parseCtx, resultIndex,
-                                           (UA_UInt16)(depth + 1));
-            } else {
-                /* Only Primitive or string */
-                parseCtx->index++;
-            }
-        }
-    } else if(parseCtx->tokenArray[parseCtx->index].type == JSMN_ARRAY) {
-        size_t arraySize = (size_t)parseCtx->tokenArray[parseCtx->index].size;
-        parseCtx->index++; /*Object to first element*/
-        
-        for(size_t i = 0; i < arraySize; i++) {
-            CHECK_TOKEN_BOUNDS;
-            if(parseCtx->tokenArray[parseCtx->index].type == JSMN_OBJECT) {
-               ret = searchObjectForKeyRec(searchKey, ctx, parseCtx, resultIndex,
-                                           (UA_UInt16)(depth + 1));
-            } else if(parseCtx->tokenArray[parseCtx->index].type == JSMN_ARRAY) {
-               ret = searchObjectForKeyRec(searchKey, ctx, parseCtx, resultIndex,
-                                           (UA_UInt16)(depth + 1));
-            } else {
-                /* Only Primitive or string */
-                parseCtx->index++;
-            }
-        }
-    }
-    return ret;
-}
-
-UA_FUNC_ATTR_WARN_UNUSED_RESULT status
-lookAheadForKey(const char* search, CtxJson *ctx,
-                ParseCtx *parseCtx, size_t *resultIndex) {
-    UA_UInt16 oldIndex = parseCtx->index; /* Save index for later restore */
-    
-    UA_UInt16 depth = 0;
-    UA_StatusCode ret  = searchObjectForKeyRec(search, ctx, parseCtx, resultIndex, depth);
-
-    parseCtx->index = oldIndex; /* Restore index */
-    return ret;
-}
-
-/* Function used to jump over an object which cannot be parsed */
-static status
-jumpOverRec(CtxJson *ctx, ParseCtx *parseCtx,
-            size_t *resultIndex, UA_UInt16 depth) {
-    UA_StatusCode ret = UA_STATUSCODE_BADDECODINGERROR;
-    CHECK_TOKEN_BOUNDS;
-    
-    if(parseCtx->tokenArray[parseCtx->index].type == JSMN_OBJECT) {
-        size_t objectCount = (size_t)(parseCtx->tokenArray[parseCtx->index].size);
-        
-        parseCtx->index++; /*Object to first Key*/
-        CHECK_TOKEN_BOUNDS;
-        
-        size_t i;
-        for(i = 0; i < objectCount; i++) {
-            CHECK_TOKEN_BOUNDS;
-             
-            parseCtx->index++; /*value*/
-            CHECK_TOKEN_BOUNDS;
-            
-            if(parseCtx->tokenArray[parseCtx->index].type == JSMN_OBJECT) {
-               jumpOverRec(ctx, parseCtx, resultIndex, (UA_UInt16)(depth + 1));
-            } else if(parseCtx->tokenArray[parseCtx->index].type == JSMN_ARRAY) {
-               jumpOverRec(ctx, parseCtx, resultIndex, (UA_UInt16)(depth + 1));
-            } else {
-                /*Only Primitive or string*/
-                parseCtx->index++;
-            }
-        }
-    } else if(parseCtx->tokenArray[parseCtx->index].type == JSMN_ARRAY) {
-        size_t arraySize = (size_t)(parseCtx->tokenArray[parseCtx->index].size);
-        
-        parseCtx->index++; /*Object to first element*/
-        CHECK_TOKEN_BOUNDS;
-        
-        size_t i;
-        for(i = 0; i < arraySize; i++) {
-            if(parseCtx->tokenArray[parseCtx->index].type == JSMN_OBJECT) {
-               jumpOverRec(ctx, parseCtx, resultIndex, (UA_UInt16)(depth + 1));
-            } else if(parseCtx->tokenArray[parseCtx->index].type == JSMN_ARRAY) {
-               jumpOverRec(ctx, parseCtx, resultIndex, (UA_UInt16)(depth + 1));
-            } else {
-                /*Only Primitive or string*/
-                parseCtx->index++;
-            }
-        }
-    }
-    return ret;
-}
-
-static status
-jumpOverObject(CtxJson *ctx, ParseCtx *parseCtx, size_t *resultIndex) {
-    UA_UInt16 oldIndex = parseCtx->index; /* Save index for later restore */
-    UA_UInt16 depth = 0;
-    jumpOverRec(ctx, parseCtx, resultIndex, depth);
-    *resultIndex = parseCtx->index;
-    parseCtx->index = oldIndex; /* Restore index */
-    return UA_STATUSCODE_GOOD;
-}
-
-static status
-prepareDecodeNodeIdJson(UA_NodeId *dst, CtxJson *ctx, ParseCtx *parseCtx, 
-                        u8 *fieldCount, DecodeEntry *entries) {
-    /* possible keys: Id, IdType*/
-    /* Id must always be present */
-    entries[*fieldCount].fieldName = UA_JSONKEY_ID;
-    entries[*fieldCount].found = false;
-    entries[*fieldCount].type = NULL;
-    
-    /* IdType */
-    UA_Boolean hasIdType = false;
-    size_t searchResult = 0; 
-    status ret = lookAheadForKey(UA_JSONKEY_IDTYPE, ctx, parseCtx, &searchResult);
-    if(ret == UA_STATUSCODE_GOOD) { /*found*/
-         hasIdType = true;
-    }
-    
-    if(hasIdType) {
-        size_t size = (size_t)(parseCtx->tokenArray[searchResult].end -
-                               parseCtx->tokenArray[searchResult].start);
-        if(size < 1) {
-            return UA_STATUSCODE_BADDECODINGERROR;
-        }
-
-        char *idType = (char*)(ctx->pos + parseCtx->tokenArray[searchResult].start);
-      
-        if(idType[0] == '2') {
-            dst->identifierType = UA_NODEIDTYPE_GUID;
-            entries[*fieldCount].fieldPointer = &dst->identifier.guid;
-            entries[*fieldCount].function = (decodeJsonSignature) Guid_decodeJson;
-        } else if(idType[0] == '1') {
-            dst->identifierType = UA_NODEIDTYPE_STRING;
-            entries[*fieldCount].fieldPointer = &dst->identifier.string;
-            entries[*fieldCount].function = (decodeJsonSignature) String_decodeJson;
-        } else if(idType[0] == '3') {
-            dst->identifierType = UA_NODEIDTYPE_BYTESTRING;
-            entries[*fieldCount].fieldPointer = &dst->identifier.byteString;
-            entries[*fieldCount].function = (decodeJsonSignature) ByteString_decodeJson;
-        } else {
-            return UA_STATUSCODE_BADDECODINGERROR;
-        }
-        
-        /* Id always present */
-        (*fieldCount)++;
-        
-        entries[*fieldCount].fieldName = UA_JSONKEY_IDTYPE;
-        entries[*fieldCount].fieldPointer = NULL;
-        entries[*fieldCount].function = NULL;
-        entries[*fieldCount].found = false;
-        entries[*fieldCount].type = NULL;
-        
-        /* IdType */
-        (*fieldCount)++;
-    } else {
-        dst->identifierType = UA_NODEIDTYPE_NUMERIC;
-        entries[*fieldCount].fieldPointer = &dst->identifier.numeric;
-        entries[*fieldCount].function = (decodeJsonSignature) UInt32_decodeJson;
-        entries[*fieldCount].type = NULL;
-        (*fieldCount)++;
-    }
-    
-    return UA_STATUSCODE_GOOD;
-}
-
-DECODE_JSON(NodeId) {
-    ALLOW_NULL;
-    CHECK_OBJECT;
-
-    /* NameSpace */
-    UA_Boolean hasNamespace = false;
-    size_t searchResultNamespace = 0;
-    status ret = lookAheadForKey(UA_JSONKEY_NAMESPACE, ctx, parseCtx, &searchResultNamespace);
-    if(ret != UA_STATUSCODE_GOOD) {
-        dst->namespaceIndex = 0;
-    } else {
-        hasNamespace = true;
-    }
-    
-    /* Keep track over number of keys present, incremented if key found */
-    u8 fieldCount = 0;
-    DecodeEntry entries[3];
-    ret = prepareDecodeNodeIdJson(dst, ctx, parseCtx, &fieldCount, entries);
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-
-    if(hasNamespace) {
-        entries[fieldCount].fieldName = UA_JSONKEY_NAMESPACE;
-        entries[fieldCount].fieldPointer = &dst->namespaceIndex;
-        entries[fieldCount].function = (decodeJsonSignature) UInt16_decodeJson;
-        entries[fieldCount].found = false;
-        entries[fieldCount].type = NULL;
-        fieldCount++;
-    } else {
-        dst->namespaceIndex = 0;
-    }
-    ret = decodeFields(ctx, parseCtx, entries, fieldCount, type);
-    return ret;
-}
-
-DECODE_JSON(ExpandedNodeId) {
-    ALLOW_NULL;
-    CHECK_OBJECT;
-
-    /* Keep track over number of keys present, incremented if key found */
-    u8 fieldCount = 0;
-    
-    /* ServerUri */
-    UA_Boolean hasServerUri = false;
-    size_t searchResultServerUri = 0;
-    status ret = lookAheadForKey(UA_JSONKEY_SERVERURI, ctx, parseCtx, &searchResultServerUri);
-    if(ret != UA_STATUSCODE_GOOD) {
-        dst->serverIndex = 0; 
-    } else {
-        hasServerUri = true;
-    }
-    
-    /* NameSpace */
-    UA_Boolean hasNamespace = false;
-    UA_Boolean isNamespaceString = false;
-    size_t searchResultNamespace = 0;
-    ret = lookAheadForKey(UA_JSONKEY_NAMESPACE, ctx, parseCtx, &searchResultNamespace);
-    if(ret != UA_STATUSCODE_GOOD) {
-        dst->namespaceUri = UA_STRING_NULL;
-    } else {
-        hasNamespace = true;
-        jsmntok_t nsToken = parseCtx->tokenArray[searchResultNamespace];
-        if(nsToken.type == JSMN_STRING)
-            isNamespaceString = true;
-    }
-
-    DecodeEntry entries[4];
-    ret = prepareDecodeNodeIdJson(&dst->nodeId, ctx, parseCtx, &fieldCount, entries);
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-
-    if(hasNamespace) {
-        entries[fieldCount].fieldName = UA_JSONKEY_NAMESPACE;
-        if(isNamespaceString) {
-            entries[fieldCount].fieldPointer = &dst->namespaceUri;
-            entries[fieldCount].function = (decodeJsonSignature) String_decodeJson;
-        } else {
-            entries[fieldCount].fieldPointer = &dst->nodeId.namespaceIndex;
-            entries[fieldCount].function = (decodeJsonSignature) UInt16_decodeJson;
-        }
-        entries[fieldCount].found = false;
-        entries[fieldCount].type = NULL;
-        fieldCount++; 
-    }
-    
-    if(hasServerUri) {
-        entries[fieldCount].fieldName = UA_JSONKEY_SERVERURI;
-        entries[fieldCount].fieldPointer = &dst->serverIndex;
-        entries[fieldCount].function = (decodeJsonSignature) UInt32_decodeJson;
-        entries[fieldCount].found = false;
-        entries[fieldCount].type = NULL;
-        fieldCount++;  
-    } else {
-        dst->serverIndex = 0;
-    }
-    
-    return decodeFields(ctx, parseCtx, entries, fieldCount, type);
-}
-
-DECODE_JSON(DateTime) {
-    CHECK_STRING;
-    CHECK_TOKEN_BOUNDS;
-    size_t tokenSize;
-    char* tokenData;
-    GET_TOKEN(tokenData, tokenSize);
-    
-    /* TODO: proper ISO 8601:2004 parsing, musl strptime!*/
-    /* DateTime  ISO 8601:2004 without milli is 20 Characters, with millis 24 */
-    if(tokenSize != 20 && tokenSize != 24) {
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-    
-    /* sanity check */
-    if(tokenData[4] != '-' || tokenData[7] != '-' || tokenData[10] != 'T' ||
-       tokenData[13] != ':' || tokenData[16] != ':' ||
-       !(tokenData[19] == 'Z' || tokenData[19] == '.')) {
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-    
-    struct mytm dts;
-    memset(&dts, 0, sizeof(dts));
-    
-    UA_UInt64 year = 0;
-    atoiUnsigned(&tokenData[0], 4, &year);
-    dts.tm_year = (UA_UInt16)year - 1900;
-    UA_UInt64 month = 0;
-    atoiUnsigned(&tokenData[5], 2, &month);
-    dts.tm_mon = (UA_UInt16)month - 1;
-    UA_UInt64 day = 0;
-    atoiUnsigned(&tokenData[8], 2, &day);
-    dts.tm_mday = (UA_UInt16)day;
-    UA_UInt64 hour = 0;
-    atoiUnsigned(&tokenData[11], 2, &hour);
-    dts.tm_hour = (UA_UInt16)hour;
-    UA_UInt64 min = 0;
-    atoiUnsigned(&tokenData[14], 2, &min);
-    dts.tm_min = (UA_UInt16)min;
-    UA_UInt64 sec = 0;
-    atoiUnsigned(&tokenData[17], 2, &sec);
-    dts.tm_sec = (UA_UInt16)sec;
-    
-    UA_UInt64 msec = 0;
-    if(tokenSize == 24) {
-        atoiUnsigned(&tokenData[20], 3, &msec);
-    }
-    
-    long long sinceunix = __tm_to_secs(&dts);
-    UA_DateTime dt = (UA_DateTime)((UA_UInt64)(sinceunix*UA_DATETIME_SEC +
-                                               UA_DATETIME_UNIX_EPOCH) +
-                                   (UA_UInt64)(UA_DATETIME_MSEC * msec)); 
-    *dst = dt;
-  
-    if(moveToken)
-        parseCtx->index++;
-    return UA_STATUSCODE_GOOD;
-}
-
-DECODE_JSON(StatusCode) {
-    status ret = DECODE_DIRECT_JSON(dst, UInt32);
-    if(ret != UA_STATUSCODE_GOOD)
-        return ret;
-
-    if(moveToken)
-        parseCtx->index++;
-    return UA_STATUSCODE_GOOD;
-}
-
-static status
-VariantDimension_decodeJson(void * dst, const UA_DataType *type, 
-                            CtxJson *ctx, ParseCtx *parseCtx, UA_Boolean moveToken) {
-    (void) type;
-    const UA_DataType *dimType = &UA_TYPES[UA_TYPES_UINT32];
-    return Array_decodeJson_internal((void**)dst, dimType, ctx, parseCtx, moveToken);
-}
-
-DECODE_JSON(Variant) {
-    ALLOW_NULL;
-    CHECK_OBJECT;
-
-    /* First search for the variant type in the json object. */
-    size_t searchResultType = 0;
-    status ret = lookAheadForKey(UA_JSONKEY_TYPE, ctx, parseCtx, &searchResultType);
-    if(ret != UA_STATUSCODE_GOOD)
-        return UA_STATUSCODE_BADDECODINGERROR;
-
-    size_t size = (size_t)(parseCtx->tokenArray[searchResultType].end - parseCtx->tokenArray[searchResultType].start);
-
-    /* check if size is zero or the type is not a number */
-    if(size < 1 || parseCtx->tokenArray[searchResultType].type != JSMN_PRIMITIVE) {
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-    
-    /*Parse the type*/
-    UA_UInt64 idTypeDecoded = 0;
-    char *idTypeEncoded = (char*)(ctx->pos + parseCtx->tokenArray[searchResultType].start);
-    status typeDecodeStatus = atoiUnsigned(idTypeEncoded, size, &idTypeDecoded);
-    
-    /* value is not a valid number */
-    if(typeDecodeStatus != UA_STATUSCODE_GOOD) {
-        return typeDecodeStatus;
-    }
-
-    /*Set the type, Get the Type by nodeID!*/
-    UA_NodeId typeNodeId = UA_NODEID_NUMERIC(0, (UA_UInt32)idTypeDecoded);
-    const UA_DataType *bodyType = UA_findDataType(&typeNodeId);
-    if(bodyType == NULL) {
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-    
-    /*Set the type*/
-    dst->type = bodyType;
-    
-    /* LookAhead BODY */
-    /* Does the variant contain an array? */
-    UA_Boolean isArray = false;
-    UA_Boolean isBodyNull = false;
-    
-    /* Search for body */
-    size_t searchResultBody = 0;
-    ret = lookAheadForKey(UA_JSONKEY_BODY, ctx, parseCtx, &searchResultBody);
-    if(ret == UA_STATUSCODE_GOOD) { /* body found */
-        /* get body token */
-        jsmntok_t bodyToken = parseCtx->tokenArray[searchResultBody];
-        
-        /*BODY is null?*/
-        if(isJsonTokenNull(ctx, &bodyToken)) {
-            dst->data = NULL;
-            isBodyNull = true;
-        }
-        
-        if(bodyToken.type == JSMN_ARRAY) {
-            isArray = true;
-            
-            size_t arraySize = 0;
-            arraySize = (size_t)parseCtx->tokenArray[searchResultBody].size;
-            dst->arrayLength = arraySize;
-        }
-    } else {
-        /*TODO: no body? set value NULL?*/
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-    
-    /* LookAhead DIMENSION */
-    UA_Boolean hasDimension = false;
-
-    /* Has the variant dimension? */
-    size_t searchResultDim = 0;
-    ret = lookAheadForKey(UA_JSONKEY_DIMENSION, ctx, parseCtx, &searchResultDim);
-    if(ret == UA_STATUSCODE_GOOD) {
-        hasDimension = true;
-        size_t dimensionSize = 0;
-        dimensionSize = (size_t)parseCtx->tokenArray[searchResultDim].size;
-        dst->arrayDimensionsSize = dimensionSize;
-    }
-    
-    /* no array but has dimension. error? */
-    if(!isArray && hasDimension)
-        return UA_STATUSCODE_BADDECODINGERROR;
-    
-    /* Get the datatype of the content. The type must be a builtin data type.
-    * All not-builtin types are wrapped in an ExtensionObject. */
-    if(bodyType->typeKind > UA_TYPES_DIAGNOSTICINFO)
-        return UA_STATUSCODE_BADDECODINGERROR;
-
-    /* A variant cannot contain a variant. But it can contain an array of
-        * variants */
-    if(bodyType->typeKind == UA_DATATYPEKIND_VARIANT && !isArray)
-        return UA_STATUSCODE_BADDECODINGERROR;
-    
-    if(isArray) {
-        DecodeEntry entries[3] = {
-            {UA_JSONKEY_TYPE, NULL, NULL, false, NULL},
-            {UA_JSONKEY_BODY, &dst->data, (decodeJsonSignature) Array_decodeJson, false, NULL},
-            {UA_JSONKEY_DIMENSION, &dst->arrayDimensions,
-             (decodeJsonSignature) VariantDimension_decodeJson, false, NULL}};
-
-        if(!hasDimension) {
-            ret = decodeFields(ctx, parseCtx, entries, 2, bodyType); /*use first 2 fields*/
-        } else {
-            ret = decodeFields(ctx, parseCtx, entries, 3, bodyType); /*use all fields*/
-        }      
-    } else if(bodyType->typeKind != UA_DATATYPEKIND_EXTENSIONOBJECT) {
-        /* Allocate Memory for Body */
-        if(!isBodyNull) {
-            dst->data = UA_new(bodyType);
-            if(!dst->data)
-                return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-        
-        DecodeEntry entries[2] = {{UA_JSONKEY_TYPE, NULL, NULL, false, NULL},
-            {UA_JSONKEY_BODY, dst->data, (decodeJsonSignature) decodeJsonInternal, false, NULL}};
-        ret = decodeFields(ctx, parseCtx, entries, 2, bodyType);
-    } else { /* extensionObject */
-        DecodeEntry entries[2] = {{UA_JSONKEY_TYPE, NULL, NULL, false, NULL},
-            {UA_JSONKEY_BODY, dst,
-             (decodeJsonSignature) Variant_decodeJsonUnwrapExtensionObject, false, NULL}};
-        ret = decodeFields(ctx, parseCtx, entries, 2, bodyType);
-    }
-    return ret;
-}
-
-DECODE_JSON(DataValue) {
-    ALLOW_NULL;
-    CHECK_OBJECT;
-
-    DecodeEntry entries[6] = {
-       {UA_JSONKEY_VALUE, &dst->value, (decodeJsonSignature) Variant_decodeJson, false, NULL},
-       {UA_JSONKEY_STATUS, &dst->status, (decodeJsonSignature) StatusCode_decodeJson, false, NULL},
-       {UA_JSONKEY_SOURCETIMESTAMP, &dst->sourceTimestamp, (decodeJsonSignature) DateTime_decodeJson, false, NULL},
-       {UA_JSONKEY_SOURCEPICOSECONDS, &dst->sourcePicoseconds, (decodeJsonSignature) UInt16_decodeJson, false, NULL},
-       {UA_JSONKEY_SERVERTIMESTAMP, &dst->serverTimestamp, (decodeJsonSignature) DateTime_decodeJson, false, NULL},
-       {UA_JSONKEY_SERVERPICOSECONDS, &dst->serverPicoseconds, (decodeJsonSignature) UInt16_decodeJson, false, NULL}};
-
-    status ret = decodeFields(ctx, parseCtx, entries, 6, type);
-    dst->hasValue = entries[0].found; dst->hasStatus = entries[1].found;
-    dst->hasSourceTimestamp = entries[2].found; dst->hasSourcePicoseconds = entries[3].found;
-    dst->hasServerTimestamp = entries[4].found; dst->hasServerPicoseconds = entries[5].found;
-    return ret;
-}
-
-DECODE_JSON(ExtensionObject) {
-    ALLOW_NULL;
-    CHECK_OBJECT;
-
-    /* Search for Encoding */
-    size_t searchEncodingResult = 0;
-    status ret = lookAheadForKey(UA_JSONKEY_ENCODING, ctx, parseCtx, &searchEncodingResult);
-    
-    /* If no encoding found it is structure encoding */
-    if(ret != UA_STATUSCODE_GOOD) {
-        UA_NodeId typeId;
-        UA_NodeId_init(&typeId);
-
-        size_t searchTypeIdResult = 0;
-        ret = lookAheadForKey(UA_JSONKEY_TYPEID, ctx, parseCtx, &searchTypeIdResult);
-        if(ret != UA_STATUSCODE_GOOD) {
-            /* TYPEID not found, abort */
-            return UA_STATUSCODE_BADENCODINGERROR;
-        }
-
-        /* parse the nodeid */
-        /*for restore*/
-        UA_UInt16 index = parseCtx->index;
-        parseCtx->index = (UA_UInt16)searchTypeIdResult;
-        ret = NodeId_decodeJson(&typeId, &UA_TYPES[UA_TYPES_NODEID], ctx, parseCtx, true);
-        if(ret != UA_STATUSCODE_GOOD)
-            return ret;
-        
-        /*restore*/
-        parseCtx->index = index;
-        const UA_DataType *typeOfBody = UA_findDataType(&typeId);
-        if(!typeOfBody) {
-            /*dont decode body: 1. save as bytestring, 2. jump over*/
-            dst->encoding = UA_EXTENSIONOBJECT_ENCODED_BYTESTRING;
-            UA_NodeId_copy(&typeId, &dst->content.encoded.typeId);
-            
-            /*Check if Object in Extentionobject*/
-            if(getJsmnType(parseCtx) != JSMN_OBJECT) {
-                UA_NodeId_deleteMembers(&typeId);
-                return UA_STATUSCODE_BADDECODINGERROR;
-            }
-            
-            /*Search for Body to save*/
-            size_t searchBodyResult = 0;
-            ret = lookAheadForKey(UA_JSONKEY_BODY, ctx, parseCtx, &searchBodyResult);
-            if(ret != UA_STATUSCODE_GOOD) {
-                /*No Body*/
-                UA_NodeId_deleteMembers(&typeId);
-                return UA_STATUSCODE_BADDECODINGERROR;
-            }
-            
-            if(searchBodyResult >= (size_t)parseCtx->tokenCount) {
-                /*index not in Tokenarray*/
-                UA_NodeId_deleteMembers(&typeId);
-                return UA_STATUSCODE_BADDECODINGERROR;
-            }
-
-            /* Get the size of the Object as a string, not the Object key count! */
-            UA_Int64 sizeOfJsonString =(parseCtx->tokenArray[searchBodyResult].end -
-                    parseCtx->tokenArray[searchBodyResult].start);
-            
-            char* bodyJsonString = (char*)(ctx->pos + parseCtx->tokenArray[searchBodyResult].start);
-            
-            if(sizeOfJsonString <= 0) {
-                UA_NodeId_deleteMembers(&typeId);
-                return UA_STATUSCODE_BADDECODINGERROR;
-            }
-            
-            /* Save encoded as bytestring. */
-            ret = UA_ByteString_allocBuffer(&dst->content.encoded.body, (size_t)sizeOfJsonString);
-            if(ret != UA_STATUSCODE_GOOD) {
-                UA_NodeId_deleteMembers(&typeId);
-                return ret;
-            }
-
-            memcpy(dst->content.encoded.body.data, bodyJsonString, (size_t)sizeOfJsonString);
-            
-            size_t tokenAfteExtensionObject = 0;
-            jumpOverObject(ctx, parseCtx, &tokenAfteExtensionObject);
-            
-            if(tokenAfteExtensionObject == 0) {
-                /*next object token not found*/
-                UA_NodeId_deleteMembers(&typeId);
-                UA_ByteString_deleteMembers(&dst->content.encoded.body);
-                return UA_STATUSCODE_BADDECODINGERROR;
-            }
-            
-            parseCtx->index = (UA_UInt16)tokenAfteExtensionObject;
-            
-            return UA_STATUSCODE_GOOD;
-        }
-        
-        /*Type id not used anymore, typeOfBody has type*/
-        UA_NodeId_deleteMembers(&typeId);
-        
-        /*Set Found Type*/
-        dst->content.decoded.type = typeOfBody;
-        dst->encoding = UA_EXTENSIONOBJECT_DECODED;
-        
-        if(searchTypeIdResult != 0) {
-            dst->content.decoded.data = UA_new(typeOfBody);
-            if(!dst->content.decoded.data)
-                return UA_STATUSCODE_BADOUTOFMEMORY;
-
-            UA_NodeId typeId_dummy;
-            DecodeEntry entries[2] = {
-                {UA_JSONKEY_TYPEID, &typeId_dummy, (decodeJsonSignature) NodeId_decodeJson, false, NULL},
-                {UA_JSONKEY_BODY, dst->content.decoded.data,
-                 (decodeJsonSignature) decodeJsonJumpTable[typeOfBody->typeKind], false, NULL}
-            };
-
-            return decodeFields(ctx, parseCtx, entries, 2, typeOfBody);
-        } else {
-           return UA_STATUSCODE_BADDECODINGERROR;
-        }
-    } else { /* UA_JSONKEY_ENCODING found */
-        /*Parse the encoding*/
-        UA_UInt64 encoding = 0;
-        char *extObjEncoding = (char*)(ctx->pos + parseCtx->tokenArray[searchEncodingResult].start);
-        size_t size = (size_t)(parseCtx->tokenArray[searchEncodingResult].end - parseCtx->tokenArray[searchEncodingResult].start);
-        atoiUnsigned(extObjEncoding, size, &encoding);
-
-        if(encoding == 1) {
-            /* BYTESTRING in Json Body */
-            dst->encoding = UA_EXTENSIONOBJECT_ENCODED_BYTESTRING;
-            UA_UInt16 encodingTypeJson;
-            DecodeEntry entries[3] = {
-                {UA_JSONKEY_ENCODING, &encodingTypeJson, (decodeJsonSignature) UInt16_decodeJson, false, NULL},
-                {UA_JSONKEY_BODY, &dst->content.encoded.body, (decodeJsonSignature) String_decodeJson, false, NULL},
-                {UA_JSONKEY_TYPEID, &dst->content.encoded.typeId, (decodeJsonSignature) NodeId_decodeJson, false, NULL}
-            };
-
-            return decodeFields(ctx, parseCtx, entries, 3, type);
-        } else if(encoding == 2) {
-            /* XmlElement in Json Body */
-            dst->encoding = UA_EXTENSIONOBJECT_ENCODED_XML;
-            UA_UInt16 encodingTypeJson;
-            DecodeEntry entries[3] = {
-                {UA_JSONKEY_ENCODING, &encodingTypeJson, (decodeJsonSignature) UInt16_decodeJson, false, NULL},
-                {UA_JSONKEY_BODY, &dst->content.encoded.body, (decodeJsonSignature) String_decodeJson, false, NULL},
-                {UA_JSONKEY_TYPEID, &dst->content.encoded.typeId, (decodeJsonSignature) NodeId_decodeJson, false, NULL}
-            };
-            return decodeFields(ctx, parseCtx, entries, 3, type);
-        } else {
-            return UA_STATUSCODE_BADDECODINGERROR;
-        }
-    }
-    return UA_STATUSCODE_BADNOTIMPLEMENTED;
-}
-
-static status
-Variant_decodeJsonUnwrapExtensionObject(UA_Variant *dst, const UA_DataType *type, 
-                                        CtxJson *ctx, ParseCtx *parseCtx, UA_Boolean moveToken) {
-    (void) type, (void) moveToken;
-    /*EXTENSIONOBJECT POSITION!*/
-    UA_UInt16 old_index = parseCtx->index;
-    UA_Boolean typeIdFound;
-    
-    /* Decode the DataType */
-    UA_NodeId typeId;
-    UA_NodeId_init(&typeId);
-
-    size_t searchTypeIdResult = 0;
-    status ret = lookAheadForKey(UA_JSONKEY_TYPEID, ctx, parseCtx, &searchTypeIdResult);
-
-    if(ret != UA_STATUSCODE_GOOD) {
-        /*No Typeid found*/
-        typeIdFound = false;
-        /*return UA_STATUSCODE_BADDECODINGERROR;*/
-    } else {
-        typeIdFound = true;
-        /* parse the nodeid */
-        parseCtx->index = (UA_UInt16)searchTypeIdResult;
-        ret = NodeId_decodeJson(&typeId, &UA_TYPES[UA_TYPES_NODEID], ctx, parseCtx, true);
-        if(ret != UA_STATUSCODE_GOOD) {
-            UA_NodeId_deleteMembers(&typeId);
-            return ret;
-        }
-
-        /*restore index, ExtensionObject position*/
-        parseCtx->index = old_index;
-    }
-
-    /* ---Decode the EncodingByte--- */
-    if(!typeIdFound)
-        return UA_STATUSCODE_BADDECODINGERROR;
-
-    UA_Boolean encodingFound = false;
-    /*Search for Encoding*/
-    size_t searchEncodingResult = 0;
-    ret = lookAheadForKey(UA_JSONKEY_ENCODING, ctx, parseCtx, &searchEncodingResult);
-
-    UA_UInt64 encoding = 0;
-    /*If no encoding found it is Structure encoding*/
-    if(ret == UA_STATUSCODE_GOOD) { /*FOUND*/
-        encodingFound = true;
-        char *extObjEncoding = (char*)(ctx->pos + parseCtx->tokenArray[searchEncodingResult].start);
-        size_t size = (size_t)(parseCtx->tokenArray[searchEncodingResult].end 
-                               - parseCtx->tokenArray[searchEncodingResult].start);
-        atoiUnsigned(extObjEncoding, size, &encoding);
-    }
-        
-    const UA_DataType *typeOfBody = UA_findDataType(&typeId);
-        
-    if(encoding == 0 || typeOfBody != NULL) {
-        /*This value is 0 if the body is Structure encoded as a JSON object (see 5.4.6).*/
-        /* Found a valid type and it is structure encoded so it can be unwrapped */
-        dst->type = typeOfBody;
-
-        /* Allocate memory for type*/
-        dst->data = UA_new(dst->type);
-        if(!dst->data) {
-            UA_NodeId_deleteMembers(&typeId);
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        }
-
-        /* Decode the content */
-        UA_NodeId nodeIddummy;
-        DecodeEntry entries[3] =
-            {
-             {UA_JSONKEY_TYPEID, &nodeIddummy, (decodeJsonSignature) NodeId_decodeJson, false, NULL},
-             {UA_JSONKEY_BODY, dst->data,
-              (decodeJsonSignature) decodeJsonJumpTable[dst->type->typeKind], false, NULL},
-             {UA_JSONKEY_ENCODING, NULL, NULL, false, NULL}};
-
-        ret = decodeFields(ctx, parseCtx, entries, encodingFound ? 3:2, typeOfBody);
-        if(ret != UA_STATUSCODE_GOOD) {
-            UA_free(dst->data);
-        }
-    } else if(encoding == 1 || encoding == 2 || typeOfBody == NULL) {
-        UA_NodeId_deleteMembers(&typeId);
-            
-        /* decode as ExtensionObject */
-        dst->type = &UA_TYPES[UA_TYPES_EXTENSIONOBJECT];
-
-        /* Allocate memory for extensionobject*/
-        dst->data = UA_new(dst->type);
-        if(!dst->data)
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-
-        /* decode: Does not move tokenindex. */
-        ret = DECODE_DIRECT_JSON(dst->data, ExtensionObject);
-        if(ret != UA_STATUSCODE_GOOD)
-            UA_free(dst->data);
-    } else {
-        /*no recognized encoding type*/
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-    return ret;
-}
-status DiagnosticInfoInner_decodeJson(void* dst, const UA_DataType* type, 
-        CtxJson* ctx, ParseCtx* parseCtx, UA_Boolean moveToken);
-
-DECODE_JSON(DiagnosticInfo) {
-    ALLOW_NULL;
-    CHECK_OBJECT;
-
-    DecodeEntry entries[7] = {
-       {UA_JSONKEY_SYMBOLICID, &dst->symbolicId, (decodeJsonSignature) Int32_decodeJson, false, NULL},
-       {UA_JSONKEY_NAMESPACEURI, &dst->namespaceUri, (decodeJsonSignature) Int32_decodeJson, false, NULL},
-       {UA_JSONKEY_LOCALIZEDTEXT, &dst->localizedText, (decodeJsonSignature) Int32_decodeJson, false, NULL},
-       {UA_JSONKEY_LOCALE, &dst->locale, (decodeJsonSignature) Int32_decodeJson, false, NULL},
-       {UA_JSONKEY_ADDITIONALINFO, &dst->additionalInfo, (decodeJsonSignature) String_decodeJson, false, NULL},
-       {UA_JSONKEY_INNERSTATUSCODE, &dst->innerStatusCode, (decodeJsonSignature) StatusCode_decodeJson, false, NULL},
-       {UA_JSONKEY_INNERDIAGNOSTICINFO, &dst->innerDiagnosticInfo, (decodeJsonSignature) DiagnosticInfoInner_decodeJson, false, NULL}};
-    status ret = decodeFields(ctx, parseCtx, entries, 7, type);
-
-    dst->hasSymbolicId = entries[0].found; dst->hasNamespaceUri = entries[1].found;
-    dst->hasLocalizedText = entries[2].found; dst->hasLocale = entries[3].found;
-    dst->hasAdditionalInfo = entries[4].found; dst->hasInnerStatusCode = entries[5].found;
-    dst->hasInnerDiagnosticInfo = entries[6].found;
-    return ret;
-}
-
-status
-DiagnosticInfoInner_decodeJson(void* dst, const UA_DataType* type, 
-                               CtxJson* ctx, ParseCtx* parseCtx, UA_Boolean moveToken) {
-    UA_DiagnosticInfo *inner = (UA_DiagnosticInfo*)UA_calloc(1, sizeof(UA_DiagnosticInfo));
-    if(inner == NULL) {
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    }
-    memcpy(dst, &inner, sizeof(UA_DiagnosticInfo*)); /* Copy new Pointer do dest */
-    return DiagnosticInfo_decodeJson(inner, type, ctx, parseCtx, moveToken);
-}
-
-status 
-decodeFields(CtxJson *ctx, ParseCtx *parseCtx, DecodeEntry *entries,
-             size_t entryCount, const UA_DataType *type) {
-    CHECK_TOKEN_BOUNDS;
-    size_t objectCount = (size_t)(parseCtx->tokenArray[parseCtx->index].size);
-    status ret = UA_STATUSCODE_GOOD;
-
-    if(entryCount == 1) {
-        if(*(entries[0].fieldName) == 0) { /*No MemberName*/
-            return entries[0].function(entries[0].fieldPointer, type,
-                                       ctx, parseCtx, true); /*ENCODE DIRECT*/
-        }
-    } else if(entryCount == 0) {
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-
-    parseCtx->index++; /*go to first key*/
-    CHECK_TOKEN_BOUNDS;
-    
-    for (size_t currentObjectCount = 0; currentObjectCount < objectCount &&
-             parseCtx->index < parseCtx->tokenCount; currentObjectCount++) {
-
-        /* start searching at the index of currentObjectCount */
-        for (size_t i = currentObjectCount; i < entryCount + currentObjectCount; i++) {
-            /* Search for KEY, if found outer loop will be one less. Best case
-             * is objectCount if in order! */
-            size_t index = i % entryCount;
-            
-            CHECK_TOKEN_BOUNDS;
-            if(jsoneq((char*) ctx->pos, &parseCtx->tokenArray[parseCtx->index], 
-                       entries[index].fieldName) != 0)
-                continue;
-
-            if(entries[index].found) {
-                /*Duplicate Key found, abort.*/
-                return UA_STATUSCODE_BADDECODINGERROR;
-            }
-
-            entries[index].found = true;
-
-            parseCtx->index++; /*goto value*/
-            CHECK_TOKEN_BOUNDS;
-            
-            /* Find the data type.
-             * TODO: get rid of parameter type. Only forward via DecodeEntry.
-             */
-            const UA_DataType *membertype = type;
-            if(entries[index].type)
-                membertype = entries[index].type;
-
-            if(entries[index].function != NULL) {
-                ret = entries[index].function(entries[index].fieldPointer,
-                                              membertype, ctx, parseCtx, true); /*Move Token True*/
-                if(ret != UA_STATUSCODE_GOOD)
-                    return ret;
-            } else {
-                /*overstep single value, this will not work if object or array
-                 Only used not to double parse pre looked up type, but it has to be overstepped*/
-                parseCtx->index++;
-            }
-            break;
-        }
-    }
-    return ret;
-}
-
-static status
-Array_decodeJson_internal(void **dst, const UA_DataType *type, 
-        CtxJson *ctx, ParseCtx *parseCtx, UA_Boolean moveToken) {
-    (void) moveToken;
-    status ret;
-    
-    if(parseCtx->tokenArray[parseCtx->index].type != JSMN_ARRAY)
-        return UA_STATUSCODE_BADDECODINGERROR;
-    
-    size_t length = (size_t)parseCtx->tokenArray[parseCtx->index].size;
-
-    /* Save the length of the array */
-    size_t *p = (size_t*) dst - 1;
-    *p = length;
-
-    /* Return early for empty arrays */
-    if(length == 0) {
-        *dst = UA_EMPTY_ARRAY_SENTINEL;
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* Allocate memory */
-    *dst = UA_calloc(length, type->memSize);
-    if(*dst == NULL)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    
-    parseCtx->index++; /* We go to first Array member!*/
-    
-    /* Decode array members */
-    uintptr_t ptr = (uintptr_t)*dst;
-    for(size_t i = 0; i < length; ++i) {
-        ret = decodeJsonJumpTable[type->typeKind]((void*)ptr, type, ctx, parseCtx, true);
-        if(ret != UA_STATUSCODE_GOOD) {
-            UA_Array_delete(*dst, i+1, type);
-            *dst = NULL;
-            return ret;
-        }
-        ptr += type->memSize;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-/*Wrapper for array with valid decodingStructure.*/
-static status
-Array_decodeJson(void * dst, const UA_DataType *type, CtxJson *ctx, 
-        ParseCtx *parseCtx, UA_Boolean moveToken) {
-    return Array_decodeJson_internal((void **)dst, type, ctx, parseCtx, moveToken);
-}
-
-static status
-decodeJsonStructure(void *dst, const UA_DataType *type, CtxJson *ctx, 
-                    ParseCtx *parseCtx, UA_Boolean moveToken) {
-    (void) moveToken;
-    /* Check the recursion limit */
-    if(ctx->depth > UA_JSON_ENCODING_MAX_RECURSION)
-        return UA_STATUSCODE_BADENCODINGERROR;
-    ctx->depth++;
-
-    uintptr_t ptr = (uintptr_t)dst;
-    status ret = UA_STATUSCODE_GOOD;
-    u8 membersSize = type->membersSize;
-    const UA_DataType *typelists[2] = { UA_TYPES, &type[-type->typeIndex] };
-    
-    UA_STACKARRAY(DecodeEntry, entries, membersSize);
-
-    for(size_t i = 0; i < membersSize && ret == UA_STATUSCODE_GOOD; ++i) {
-        const UA_DataTypeMember *m = &type->members[i];
-        const UA_DataType *mt = &typelists[!m->namespaceZero][m->memberTypeIndex];
-
-        entries[i].type = mt;
-        if(!m->isArray) {
-            ptr += m->padding;
-            entries[i].fieldName = m->memberName;
-            entries[i].fieldPointer = (void*)ptr;
-            entries[i].function = decodeJsonJumpTable[mt->typeKind];
-            entries[i].found = false;
-            ptr += mt->memSize;
-        } else {
-            ptr += m->padding;
-            ptr += sizeof(size_t);
-            entries[i].fieldName = m->memberName;
-            entries[i].fieldPointer = (void*)ptr;
-            entries[i].function = (decodeJsonSignature)Array_decodeJson;
-            entries[i].found = false;
-            ptr += sizeof(void*);
-        }
-    }
-    
-    ret = decodeFields(ctx, parseCtx, entries, membersSize, type);
-
-    ctx->depth--;
-    return ret;
-}
-
-static status
-decodeJsonNotImplemented(void *dst, const UA_DataType *type, CtxJson *ctx, 
-                         ParseCtx *parseCtx, UA_Boolean moveToken) {
-    (void)dst, (void)type, (void)ctx, (void)parseCtx, (void)moveToken;
-    return UA_STATUSCODE_BADNOTIMPLEMENTED;
-}
-
-const decodeJsonSignature decodeJsonJumpTable[UA_DATATYPEKINDS] = {
-    (decodeJsonSignature)Boolean_decodeJson,
-    (decodeJsonSignature)SByte_decodeJson, /* SByte */
-    (decodeJsonSignature)Byte_decodeJson,
-    (decodeJsonSignature)Int16_decodeJson, /* Int16 */
-    (decodeJsonSignature)UInt16_decodeJson,
-    (decodeJsonSignature)Int32_decodeJson, /* Int32 */
-    (decodeJsonSignature)UInt32_decodeJson,
-    (decodeJsonSignature)Int64_decodeJson, /* Int64 */
-    (decodeJsonSignature)UInt64_decodeJson,
-    (decodeJsonSignature)Float_decodeJson,
-    (decodeJsonSignature)Double_decodeJson,
-    (decodeJsonSignature)String_decodeJson,
-    (decodeJsonSignature)DateTime_decodeJson, /* DateTime */
-    (decodeJsonSignature)Guid_decodeJson,
-    (decodeJsonSignature)ByteString_decodeJson, /* ByteString */
-    (decodeJsonSignature)String_decodeJson, /* XmlElement */
-    (decodeJsonSignature)NodeId_decodeJson,
-    (decodeJsonSignature)ExpandedNodeId_decodeJson,
-    (decodeJsonSignature)StatusCode_decodeJson, /* StatusCode */
-    (decodeJsonSignature)QualifiedName_decodeJson, /* QualifiedName */
-    (decodeJsonSignature)LocalizedText_decodeJson,
-    (decodeJsonSignature)ExtensionObject_decodeJson,
-    (decodeJsonSignature)DataValue_decodeJson,
-    (decodeJsonSignature)Variant_decodeJson,
-    (decodeJsonSignature)DiagnosticInfo_decodeJson,
-    (decodeJsonSignature)decodeJsonNotImplemented, /* Decimal */
-    (decodeJsonSignature)Int32_decodeJson, /* Enum */
-    (decodeJsonSignature)decodeJsonStructure,
-    (decodeJsonSignature)decodeJsonNotImplemented, /* Structure with optional fields */
-    (decodeJsonSignature)decodeJsonNotImplemented, /* Union */
-    (decodeJsonSignature)decodeJsonNotImplemented /* BitfieldCluster */
-};
-
-decodeJsonSignature getDecodeSignature(u8 index) {
-    return decodeJsonJumpTable[index];
-}
-
-status
-tokenize(ParseCtx *parseCtx, CtxJson *ctx, const UA_ByteString *src) {
-    /* Set up the context */
-    ctx->pos = &src->data[0];
-    ctx->end = &src->data[src->length];
-    ctx->depth = 0;
-    parseCtx->tokenCount = 0;
-    parseCtx->index = 0;
-
-    /*Set up tokenizer jsmn*/
-    jsmn_parser p;
-    jsmn_init(&p);
-    parseCtx->tokenCount = (UA_Int32)
-        jsmn_parse(&p, (char*)src->data, src->length,
-                   parseCtx->tokenArray, UA_JSON_MAXTOKENCOUNT);
-    
-    if(parseCtx->tokenCount < 0) {
-        if(parseCtx->tokenCount == JSMN_ERROR_NOMEM)
-            return UA_STATUSCODE_BADOUTOFMEMORY;
-        return UA_STATUSCODE_BADDECODINGERROR;
-    }
-    
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-decodeJsonInternal(void *dst, const UA_DataType *type,
-                   CtxJson *ctx, ParseCtx *parseCtx, UA_Boolean moveToken) {
-
-    return decodeJsonJumpTable[type->typeKind](dst, type, ctx, parseCtx, moveToken);
-}
-
-status UA_FUNC_ATTR_WARN_UNUSED_RESULT
-UA_decodeJson(const UA_ByteString *src, void *dst, const UA_DataType *type) {
-    
-#ifndef UA_ENABLE_TYPEDESCRIPTION
-    return UA_STATUSCODE_BADNOTSUPPORTED;
-#endif
-    
-    if(dst == NULL || src == NULL || type == NULL) {
-        return UA_STATUSCODE_BADARGUMENTSMISSING;
-    }
-    
-    /* Set up the context */
-    CtxJson ctx;
-    ParseCtx parseCtx;
-    parseCtx.tokenArray = (jsmntok_t*)UA_malloc(sizeof(jsmntok_t) * UA_JSON_MAXTOKENCOUNT);
-    if(!parseCtx.tokenArray)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    
-    status ret = tokenize(&parseCtx, &ctx, src);
-    if(ret != UA_STATUSCODE_GOOD)
-        goto cleanup;
-
-    /* Assume the top-level element is an object */
-    if(parseCtx.tokenCount < 1 || parseCtx.tokenArray[0].type != JSMN_OBJECT) {
-        if(parseCtx.tokenCount == 1) {
-            if(parseCtx.tokenArray[0].type == JSMN_PRIMITIVE ||
-               parseCtx.tokenArray[0].type == JSMN_STRING) {
-               /* Only a primitive to parse. Do it directly. */
-               memset(dst, 0, type->memSize); /* Initialize the value */
-               ret = decodeJsonJumpTable[type->typeKind](dst, type, &ctx, &parseCtx, true);
-               goto cleanup;
-            }
-        }
-        ret = UA_STATUSCODE_BADDECODINGERROR;
-        goto cleanup;
-    }
-
-    /* Decode */
-    memset(dst, 0, type->memSize); /* Initialize the value */
-    ret = decodeJsonJumpTable[type->typeKind](dst, type, &ctx, &parseCtx, true);
-
-    cleanup:
-    UA_free(parseCtx.tokenArray);
-    
-    /* sanity check if all Tokens were processed */
-    if(!(parseCtx.index == parseCtx.tokenCount ||
-         parseCtx.index == parseCtx.tokenCount-1)) {
-        ret = UA_STATUSCODE_BADDECODINGERROR;
-    }
-    
-    if(ret != UA_STATUSCODE_GOOD)
-        UA_deleteMembers(dst, type); /* Clean up */
-    return ret;
-}
diff --git a/ext/open62541/src/ua_types_encoding_json.h b/ext/open62541/src/ua_types_encoding_json.h
deleted file mode 100644
index 558c24e..0000000
--- a/ext/open62541/src/ua_types_encoding_json.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2018 (c) Fraunhofer IOSB (Author: Lukas Meling)
- */
-
-#ifndef UA_TYPES_ENCODING_JSON_H_
-#define UA_TYPES_ENCODING_JSON_H_
-
-#include <open62541/types.h>
-
-#include "ua_types_encoding_binary.h"
-#include "ua_types_encoding_json.h"
-#include "ua_util_internal.h"
-
-#include "../deps/jsmn/jsmn.h"
-
-_UA_BEGIN_DECLS
-
-#define UA_JSON_MAXTOKENCOUNT 1000
-    
-size_t
-UA_calcSizeJson(const void *src, const UA_DataType *type,
-                UA_String *namespaces, size_t namespaceSize,
-                UA_String *serverUris, size_t serverUriSize,
-                UA_Boolean useReversible) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-UA_StatusCode
-UA_encodeJson(const void *src, const UA_DataType *type,
-              uint8_t **bufPos, const uint8_t **bufEnd,
-              UA_String *namespaces, size_t namespaceSize,
-              UA_String *serverUris, size_t serverUriSize,
-              UA_Boolean useReversible) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-UA_StatusCode
-UA_decodeJson(const UA_ByteString *src, void *dst,
-              const UA_DataType *type) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-/* Interal Definitions
- *
- * For future by the PubSub encoding */
-
-#define UA_JSON_ENCODING_MAX_RECURSION 100
-typedef struct {
-    uint8_t *pos;
-    const uint8_t *end;
-
-    uint16_t depth; /* How often did we en-/decoding recurse? */
-    UA_Boolean commaNeeded[UA_JSON_ENCODING_MAX_RECURSION];
-    UA_Boolean useReversible;
-    UA_Boolean calcOnly; /* Only compute the length of the decoding */
-
-    size_t namespacesSize;
-    UA_String *namespaces;
-    
-    size_t serverUrisSize;
-    UA_String *serverUris;
-} CtxJson;
-
-UA_StatusCode writeJsonObjStart(CtxJson *ctx);
-UA_StatusCode writeJsonObjElm(CtxJson *ctx, const char *key,
-                              const void *value, const UA_DataType *type);
-UA_StatusCode writeJsonObjEnd(CtxJson *ctx);
-
-UA_StatusCode writeJsonArrStart(CtxJson *ctx);
-UA_StatusCode writeJsonArrElm(CtxJson *ctx, const void *value,
-                              const UA_DataType *type);
-UA_StatusCode writeJsonArrEnd(CtxJson *ctx);
-
-UA_StatusCode writeJsonKey(CtxJson *ctx, const char* key);
-UA_StatusCode writeJsonCommaIfNeeded(CtxJson *ctx);
-UA_StatusCode writeJsonNull(CtxJson *ctx);
-
-/* The encoding length is returned in ctx->pos */
-static UA_INLINE UA_StatusCode
-calcJsonObjStart(CtxJson *ctx) {
-    UA_assert(ctx->calcOnly);
-    return writeJsonObjStart(ctx);
-}
-
-static UA_INLINE UA_StatusCode
-calcJsonObjElm(CtxJson *ctx, const char *key,
-               const void *value, const UA_DataType *type) {
-    UA_assert(ctx->calcOnly);
-    return writeJsonObjElm(ctx, key, value, type);
-}
-
-static UA_INLINE UA_StatusCode
-calcJsonObjEnd(CtxJson *ctx) {
-    UA_assert(ctx->calcOnly);
-    return writeJsonObjEnd(ctx);
-}
-
-static UA_INLINE UA_StatusCode
-calcJsonArrStart(CtxJson *ctx) {
-    UA_assert(ctx->calcOnly);
-    return writeJsonArrStart(ctx);
-}
-
-static UA_INLINE UA_StatusCode
-calcJsonArrElm(CtxJson *ctx, const void *value,
-               const UA_DataType *type) {
-    UA_assert(ctx->calcOnly);
-    return writeJsonArrElm(ctx, value, type);
-}
-
-static UA_INLINE UA_StatusCode
-calcJsonArrEnd(CtxJson *ctx) {
-    UA_assert(ctx->calcOnly);
-    return writeJsonArrEnd(ctx);
-}
-
-status
-encodeJsonInternal(const void *src, const UA_DataType *type, CtxJson *ctx);
-
-typedef struct {
-    jsmntok_t *tokenArray;
-    UA_Int32 tokenCount;
-    UA_UInt16 index;
-
-    /* Additonal data for special cases such as networkmessage/datasetmessage
-     * Currently only used for dataSetWriterIds */
-    size_t numCustom;
-    void * custom;
-    size_t* currentCustomIndex;
-} ParseCtx;
-
-typedef UA_StatusCode
-(*encodeJsonSignature)(const void *src, const UA_DataType *type, CtxJson *ctx);
-
-typedef UA_StatusCode
-(*decodeJsonSignature)(void *dst, const UA_DataType *type, CtxJson *ctx,
-                       ParseCtx *parseCtx, UA_Boolean moveToken);
-
-/* Map for decoding a Json Object. An array of this is passed to the
- * decodeFields function. If the key "fieldName" is found in the json object
- * (mark as found and) decode the value with the "function" and write result
- * into "fieldPointer" (destination). */
-typedef struct {
-    const char * fieldName;
-    void * fieldPointer;
-    decodeJsonSignature function;
-    UA_Boolean found;
-    const UA_DataType *type;
-} DecodeEntry;
-
-UA_StatusCode
-decodeFields(CtxJson *ctx, ParseCtx *parseCtx,
-             DecodeEntry *entries, size_t entryCount,
-             const UA_DataType *type);
-
-UA_StatusCode
-decodeJsonInternal(void *dst, const UA_DataType *type,
-                   CtxJson *ctx, ParseCtx *parseCtx, UA_Boolean moveToken);
-
-/* workaround: TODO generate functions for UA_xxx_decodeJson */
-decodeJsonSignature getDecodeSignature(u8 index);
-UA_StatusCode lookAheadForKey(const char* search, CtxJson *ctx, ParseCtx *parseCtx, size_t *resultIndex);
-jsmntype_t getJsmnType(const ParseCtx *parseCtx);
-UA_StatusCode tokenize(ParseCtx *parseCtx, CtxJson *ctx, const UA_ByteString *src);
-UA_Boolean isJsonNull(const CtxJson *ctx, const ParseCtx *parseCtx);
-
-_UA_END_DECLS
-
-#endif /* UA_TYPES_ENCODING_JSON_H_ */
diff --git a/ext/open62541/src/ua_util.c b/ext/open62541/src/ua_util.c
deleted file mode 100644
index f6d475c..0000000
--- a/ext/open62541/src/ua_util.c
+++ /dev/null
@@ -1,295 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014, 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014 (c) Florian Palm
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#include <open62541/types_generated_handling.h>
-#include <open62541/util.h>
-
-#include "ua_util_internal.h"
-
-#include "base64.h"
-
-size_t
-UA_readNumberWithBase(const UA_Byte *buf, size_t buflen, UA_UInt32 *number, UA_Byte base) {
-    UA_assert(buf);
-    UA_assert(number);
-    u32 n = 0;
-    size_t progress = 0;
-    /* read numbers until the end or a non-number character appears */
-    while(progress < buflen) {
-        u8 c = buf[progress];
-        if(c >= '0' && c <= '9' && c <= '0' + (base-1))
-           n = (n * base) + c - '0';
-        else if(base > 9 && c >= 'a' && c <= 'z' && c <= 'a' + (base-11))
-           n = (n * base) + c-'a' + 10;
-        else if(base > 9 && c >= 'A' && c <= 'Z' && c <= 'A' + (base-11))
-           n = (n * base) + c-'A' + 10;
-        else
-           break;
-        ++progress;
-    }
-    *number = n;
-    return progress;
-}
-
-size_t
-UA_readNumber(UA_Byte *buf, size_t buflen, UA_UInt32 *number)
-{
-    return UA_readNumberWithBase(buf, buflen, number, 10);
-}
-
-UA_StatusCode
-UA_parseEndpointUrl(const UA_String *endpointUrl, UA_String *outHostname,
-                    u16 *outPort, UA_String *outPath) {
-    /* Url must begin with "opc.tcp://" or opc.udp:// (if pubsub enabled) */
-    if(endpointUrl->length < 11) {
-        return UA_STATUSCODE_BADTCPENDPOINTURLINVALID;
-    }
-    if (strncmp((char*)endpointUrl->data, "opc.tcp://", 10) != 0) {
-#ifdef UA_ENABLE_PUBSUB
-        if (strncmp((char*)endpointUrl->data, "opc.udp://", 10) != 0 &&
-                strncmp((char*)endpointUrl->data, "opc.mqtt://", 11) != 0) {
-            return UA_STATUSCODE_BADTCPENDPOINTURLINVALID;
-        }
-#else
-        return UA_STATUSCODE_BADTCPENDPOINTURLINVALID;
-#endif
-    }
-
-    /* Where does the hostname end? */
-    size_t curr = 10;
-    if(endpointUrl->data[curr] == '[') {
-        /* IPv6: opc.tcp://[2001:0db8:85a3::8a2e:0370:7334]:1234/path */
-        for(; curr < endpointUrl->length; ++curr) {
-            if(endpointUrl->data[curr] == ']')
-                break;
-        }
-        if(curr == endpointUrl->length)
-            return UA_STATUSCODE_BADTCPENDPOINTURLINVALID;
-        curr++;
-    } else {
-        /* IPv4 or hostname: opc.tcp://something.something:1234/path */
-        for(; curr < endpointUrl->length; ++curr) {
-            if(endpointUrl->data[curr] == ':' || endpointUrl->data[curr] == '/')
-                break;
-        }
-    }
-
-    /* Set the hostname */
-    outHostname->data = &endpointUrl->data[10];
-    outHostname->length = curr - 10;
-    if(curr == endpointUrl->length)
-        return UA_STATUSCODE_GOOD;
-
-    /* Set the port */
-    if(endpointUrl->data[curr] == ':') {
-        if(++curr == endpointUrl->length)
-            return UA_STATUSCODE_BADTCPENDPOINTURLINVALID;
-        u32 largeNum;
-        size_t progress = UA_readNumber(&endpointUrl->data[curr], endpointUrl->length - curr, &largeNum);
-        if(progress == 0 || largeNum > 65535)
-            return UA_STATUSCODE_BADTCPENDPOINTURLINVALID;
-        /* Test if the end of a valid port was reached */
-        curr += progress;
-        if(curr == endpointUrl->length || endpointUrl->data[curr] == '/')
-            *outPort = (u16)largeNum;
-        if(curr == endpointUrl->length)
-            return UA_STATUSCODE_GOOD;
-    }
-
-    /* Set the path */
-    UA_assert(curr < endpointUrl->length);
-    if(endpointUrl->data[curr] != '/')
-        return UA_STATUSCODE_BADTCPENDPOINTURLINVALID;
-    if(++curr == endpointUrl->length)
-        return UA_STATUSCODE_GOOD;
-    outPath->data = &endpointUrl->data[curr];
-    outPath->length = endpointUrl->length - curr;
-
-    /* Remove trailing slash from the path */
-    if(endpointUrl->data[endpointUrl->length - 1] == '/')
-        outPath->length--;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_parseEndpointUrlEthernet(const UA_String *endpointUrl, UA_String *target,
-                            UA_UInt16 *vid, UA_Byte *pcp) {
-    /* Url must begin with "opc.eth://" */
-    if(endpointUrl->length < 11) {
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    if(strncmp((char*) endpointUrl->data, "opc.eth://", 10) != 0) {
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    /* Where does the host address end? */
-    size_t curr = 10;
-    for(; curr < endpointUrl->length; ++curr) {
-        if(endpointUrl->data[curr] == ':') {
-           break;
-        }
-    }
-
-    /* set host address */
-    target->data = &endpointUrl->data[10];
-    target->length = curr - 10;
-    if(curr == endpointUrl->length) {
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* Set VLAN */
-    u32 value = 0;
-    curr++;  /* skip ':' */
-    size_t progress = UA_readNumber(&endpointUrl->data[curr],
-                                    endpointUrl->length - curr, &value);
-    if(progress == 0 || value > 4096) {
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    curr += progress;
-    if(curr == endpointUrl->length || endpointUrl->data[curr] == '.') {
-        *vid = (UA_UInt16) value;
-    }
-    if(curr == endpointUrl->length) {
-        return UA_STATUSCODE_GOOD;
-    }
-
-    /* Set priority */
-    if(endpointUrl->data[curr] != '.') {
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    curr++;  /* skip '.' */
-    progress = UA_readNumber(&endpointUrl->data[curr],
-                             endpointUrl->length - curr, &value);
-    if(progress == 0 || value > 7) {
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    curr += progress;
-    if(curr != endpointUrl->length) {
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    *pcp = (UA_Byte) value;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode UA_ByteString_toBase64String(const UA_ByteString *byteString, UA_String *str) {
-    if (str->length != 0) {
-        UA_free(str->data);
-        str->data = NULL;
-        str->length = 0;
-    }
-    if (byteString == NULL || byteString->data == NULL)
-        return UA_STATUSCODE_GOOD;
-    if (byteString == str)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-
-    str->data = (UA_Byte*)UA_base64(byteString->data,
-                                    byteString->length, &str->length);
-    if(str->data == NULL)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-UA_StatusCode
-UA_NodeId_toString(const UA_NodeId *nodeId, UA_String *nodeIdStr) {
-    if (nodeIdStr->length != 0) {
-        UA_free(nodeIdStr->data);
-        nodeIdStr->data = NULL;
-        nodeIdStr->length = 0;
-    }
-    if (nodeId == NULL)
-        return UA_STATUSCODE_GOOD;
-
-    char *nsStr = NULL;
-    long snprintfLen = 0;
-    size_t nsLen = 0;
-    if (nodeId->namespaceIndex != 0) {
-        nsStr = (char*)UA_malloc(9+1); // strlen("ns=XXXXX;") = 9 + Nullbyte
-        snprintfLen = UA_snprintf(nsStr, 10, "ns=%d;", nodeId->namespaceIndex);
-        if (snprintfLen < 0 || snprintfLen >= 10) {
-            UA_free(nsStr);
-            return UA_STATUSCODE_BADINTERNALERROR;
-        }
-        nsLen = (size_t)(snprintfLen);
-    }
-
-
-    UA_ByteString byteStr = UA_BYTESTRING_NULL;
-    switch (nodeId->identifierType) {
-        case UA_NODEIDTYPE_NUMERIC:
-            /* ns (2 byte, 65535) = 5 chars, numeric (4 byte, 4294967295) = 10 chars, delim = 1 , nullbyte = 1-> 17 chars */
-            nodeIdStr->length = nsLen + 2 + 10 + 1;
-            nodeIdStr->data = (UA_Byte*)UA_malloc(nodeIdStr->length);
-            if (nodeIdStr->data == NULL) {
-                nodeIdStr->length = 0;
-                UA_free(nsStr);
-                return UA_STATUSCODE_BADOUTOFMEMORY;
-            }
-            snprintfLen =UA_snprintf((char*)nodeIdStr->data, nodeIdStr->length, "%si=%lu",
-                        nsLen > 0 ? nsStr : "",
-                        (unsigned long )nodeId->identifier.numeric);
-            break;
-        case UA_NODEIDTYPE_STRING:
-            /* ns (16bit) = 5 chars, strlen + nullbyte */
-            nodeIdStr->length = nsLen + 2 + nodeId->identifier.string.length + 1;
-            nodeIdStr->data = (UA_Byte*)UA_malloc(nodeIdStr->length);
-            if (nodeIdStr->data == NULL) {
-                nodeIdStr->length = 0;
-                UA_free(nsStr);
-                return UA_STATUSCODE_BADOUTOFMEMORY;
-            }
-            snprintfLen =UA_snprintf((char*)nodeIdStr->data, nodeIdStr->length, "%ss=%.*s",
-                        nsLen > 0 ? nsStr : "",
-                        (int)nodeId->identifier.string.length, nodeId->identifier.string.data);
-            break;
-        case UA_NODEIDTYPE_GUID:
-            /* ns (16bit) = 5 chars + strlen(A123456C-0ABC-1A2B-815F-687212AAEE1B)=36 + nullbyte */
-            nodeIdStr->length = nsLen + 2 + 36 + 1;
-            nodeIdStr->data = (UA_Byte*)UA_malloc(nodeIdStr->length);
-            if (nodeIdStr->data == NULL) {
-                nodeIdStr->length = 0;
-                UA_free(nsStr);
-                return UA_STATUSCODE_BADOUTOFMEMORY;
-            }
-            snprintfLen = UA_snprintf((char*)nodeIdStr->data, nodeIdStr->length, "%sg=" UA_PRINTF_GUID_FORMAT,
-                        nsLen > 0 ? nsStr : "",
-                        UA_PRINTF_GUID_DATA(nodeId->identifier.guid));
-            break;
-        case UA_NODEIDTYPE_BYTESTRING:
-            UA_ByteString_toBase64String(&nodeId->identifier.byteString, &byteStr);
-            /* ns (16bit) = 5 chars + LEN + nullbyte */
-            nodeIdStr->length = nsLen + 2 + byteStr.length + 1;
-            nodeIdStr->data = (UA_Byte*)UA_malloc(nodeIdStr->length);
-            if (nodeIdStr->data == NULL) {
-                nodeIdStr->length = 0;
-                UA_String_deleteMembers(&byteStr);
-                UA_free(nsStr);
-                return UA_STATUSCODE_BADOUTOFMEMORY;
-            }
-            snprintfLen = UA_snprintf((char*)nodeIdStr->data, nodeIdStr->length, "%sb=%.*s",
-                        nsLen > 0 ? nsStr : "",
-                        (int)byteStr.length, byteStr.data);
-            UA_String_deleteMembers(&byteStr);
-            break;
-    }
-    UA_free(nsStr);
-
-    if (snprintfLen < 0 || snprintfLen >= (long) nodeIdStr->length) {
-        UA_free(nodeIdStr->data);
-        nodeIdStr->data = NULL;
-        nodeIdStr->length = 0;
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-    nodeIdStr->length = (size_t)snprintfLen;
-
-    return UA_STATUSCODE_GOOD;
-}
-
diff --git a/ext/open62541/src/ua_util_internal.h b/ext/open62541/src/ua_util_internal.h
deleted file mode 100644
index 4967133..0000000
--- a/ext/open62541/src/ua_util_internal.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014, 2017 (c) Florian Palm
- *    Copyright 2015 (c) LEvertz
- *    Copyright 2015-2016 (c) Sten Grüner
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifndef UA_UTIL_H_
-#define UA_UTIL_H_
-
-#define UA_INTERNAL
-#include <open62541/types.h>
-#include <open62541/util.h>
-
-_UA_BEGIN_DECLS
-
-/* Macro-Expand for MSVC workarounds */
-#define UA_MACRO_EXPAND(x) x
-
-/* Integer Shortnames
- * ------------------
- * These are not exposed on the public API, since many user-applications make
- * the same definitions in their headers. */
-
-typedef UA_Byte u8;
-typedef UA_SByte i8;
-typedef UA_UInt16 u16;
-typedef UA_Int16 i16;
-typedef UA_UInt32 u32;
-typedef UA_Int32 i32;
-typedef UA_UInt64 u64;
-typedef UA_Int64 i64;
-typedef UA_StatusCode status;
-
-/* Utility Functions
- * ----------------- */
-
-#ifdef UA_DEBUG_DUMP_PKGS
-void UA_EXPORT UA_dump_hex_pkg(UA_Byte* buffer, size_t bufferLen);
-#endif
-
-_UA_END_DECLS
-
-#endif /* UA_UTIL_H_ */
diff --git a/ext/open62541/src/ua_workqueue.c b/ext/open62541/src/ua_workqueue.c
deleted file mode 100644
index 0611199..0000000
--- a/ext/open62541/src/ua_workqueue.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2014-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014-2016 (c) Sten Grüner
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015 (c) Nick Goossens
- *    Copyright 2015 (c) Jörg Schüler-Maroldt
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2016-2017 (c) Florian Palm
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2016 (c) Lorenz Haas
- *    Copyright 2017 (c) Jonas Green
- */
-
-#include "ua_workqueue.h"
-
-void UA_WorkQueue_init(UA_WorkQueue *wq) {
-    /* Initialized the linked list for delayed callbacks */
-    SIMPLEQ_INIT(&wq->delayedCallbacks);
-
-#if UA_MULTITHREADING >= 200
-    wq->delayedCallbacks_checkpoint = NULL;
-    pthread_mutex_init(&wq->delayedCallbacks_accessMutex,  NULL);
-
-    /* Initialize the dispatch queue for worker threads */
-    SIMPLEQ_INIT(&wq->dispatchQueue);
-    pthread_mutex_init(&wq->dispatchQueue_accessMutex, NULL);
-    pthread_cond_init(&wq->dispatchQueue_condition, NULL);
-    pthread_mutex_init(&wq->dispatchQueue_conditionMutex, NULL);
-#endif
-}
-
-#if UA_MULTITHREADING >= 200
-/* Forward declaration */
-static void UA_WorkQueue_manuallyProcessDelayed(UA_WorkQueue *wq);
-#endif
-
-void UA_WorkQueue_cleanup(UA_WorkQueue *wq) {
-#if UA_MULTITHREADING >= 200
-    /* Shut down workers */
-    UA_WorkQueue_stop(wq);
-
-    /* Execute remaining work in the dispatch queue */
-    while(true) {
-        pthread_mutex_lock(&wq->dispatchQueue_accessMutex);
-        UA_DelayedCallback *dc = SIMPLEQ_FIRST(&wq->dispatchQueue);
-        if(!dc) {
-            pthread_mutex_unlock(&wq->dispatchQueue_accessMutex);
-            break;
-        }
-        SIMPLEQ_REMOVE_HEAD(&wq->dispatchQueue, next);
-        pthread_mutex_unlock(&wq->dispatchQueue_accessMutex);
-        dc->callback(dc->application, dc->data);
-        UA_free(dc);
-    }
-#endif
-
-    /* All workers are shut down. Execute remaining delayed work here. */
-    UA_WorkQueue_manuallyProcessDelayed(wq);
-
-#if UA_MULTITHREADING >= 200
-    wq->delayedCallbacks_checkpoint = NULL;
-    pthread_mutex_destroy(&wq->dispatchQueue_accessMutex);
-    pthread_cond_destroy(&wq->dispatchQueue_condition);
-    pthread_mutex_destroy(&wq->dispatchQueue_conditionMutex);
-    pthread_mutex_destroy(&wq->delayedCallbacks_accessMutex);
-#endif
-}
-
-/***********/
-/* Workers */
-/***********/
-
-#if UA_MULTITHREADING >= 200
-
-static void *
-workerLoop(UA_Worker *worker) {
-    UA_WorkQueue *wq = worker->queue;
-    UA_UInt32 *counter = &worker->counter;
-    volatile UA_Boolean *running = &worker->running;
-
-    /* Initialize the (thread local) random seed with the ram address
-     * of the worker. Not for security-critical entropy! */
-    UA_random_seed((uintptr_t)worker);
-
-    while(*running) {
-        UA_atomic_addUInt32(counter, 1);
-
-        /* Remove a callback from the queue */
-        pthread_mutex_lock(&wq->dispatchQueue_accessMutex);
-        UA_DelayedCallback *dc = SIMPLEQ_FIRST(&wq->dispatchQueue);
-        if(dc)
-            SIMPLEQ_REMOVE_HEAD(&wq->dispatchQueue, next);
-        pthread_mutex_unlock(&wq->dispatchQueue_accessMutex);
-
-        /* Nothing to do. Sleep until a callback is dispatched */
-        if(!dc) {
-            pthread_mutex_lock(&wq->dispatchQueue_conditionMutex);
-            pthread_cond_wait(&wq->dispatchQueue_condition,
-                              &wq->dispatchQueue_conditionMutex);
-            pthread_mutex_unlock(&wq->dispatchQueue_conditionMutex);
-            continue;
-        }
-
-        /* Execute */
-        if(dc->callback)
-            dc->callback(dc->application, dc->data);
-        UA_free(dc);
-    }
-
-    return NULL;
-}
-
-/* Can be called repeatedly and starts additional workers */
-UA_StatusCode
-UA_WorkQueue_start(UA_WorkQueue *wq, size_t workersCount) {
-    if(wq->workersSize > 0 || workersCount == 0)
-        return UA_STATUSCODE_BADINTERNALERROR;
-    
-    /* Create the worker array */
-    wq->workers = (UA_Worker*)UA_calloc(workersCount, sizeof(UA_Worker));
-    if(!wq->workers)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    wq->workersSize = workersCount;
-
-    /* Spin up the workers */
-    for(size_t i = 0; i < workersCount; ++i) {
-        UA_Worker *w = &wq->workers[i];
-        w->queue = wq;
-        w->counter = 0;
-        w->running = true;
-        pthread_create(&w->thread, NULL, (void* (*)(void*))workerLoop, w);
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-void UA_WorkQueue_stop(UA_WorkQueue *wq) {
-    if(wq->workersSize == 0)
-        return;
-
-    /* Signal the workers to stop */
-    for(size_t i = 0; i < wq->workersSize; ++i)
-        wq->workers[i].running = false;
-
-    /* Wake up all workers */
-    pthread_cond_broadcast(&wq->dispatchQueue_condition);
-
-    /* Wait for the workers to finish, then clean up */
-    for(size_t i = 0; i < wq->workersSize; ++i)
-        pthread_join(wq->workers[i].thread, NULL);
-
-    UA_free(wq->workers);
-    wq->workers = NULL;
-    wq->workersSize = 0;
-}
-
-void UA_WorkQueue_enqueue(UA_WorkQueue *wq, UA_ApplicationCallback cb,
-                          void *application, void *data) {
-    UA_DelayedCallback *dc = (UA_DelayedCallback*)UA_malloc(sizeof(UA_DelayedCallback));
-    if(!dc) {
-        cb(application, data); /* Execute immediately if the memory could not be allocated */
-        return;
-    }
-
-    dc->callback = cb;
-    dc->application = application;
-    dc->data = data;
-
-    /* Enqueue for the worker threads */
-    pthread_mutex_lock(&wq->dispatchQueue_accessMutex);
-    SIMPLEQ_INSERT_TAIL(&wq->dispatchQueue, dc, next);
-    pthread_mutex_unlock(&wq->dispatchQueue_accessMutex);
-
-    /* Wake up sleeping workers */
-    pthread_cond_broadcast(&wq->dispatchQueue_condition);
-}
-
-#endif
-
-/*********************/
-/* Delayed Callbacks */
-/*********************/
-
-#if UA_MULTITHREADING >= 200
-
-/* Delayed Callbacks are called only when all callbacks that were dispatched
- * prior are finished. After every UA_MAX_DELAYED_SAMPLE delayed Callbacks that
- * were added to the queue, we sample the counters from the workers. The
- * counters are compared to the last counters that were sampled. If every worker
- * has proceeded the counter, then we know that all delayed callbacks prior to
- * the last sample-point are safe to execute. */
-
-/* Sample the worker counter for every nth delayed callback. This is used to
- * test that all workers have **finished** their current job before the delayed
- * callback is processed. */
-#define UA_MAX_DELAYED_SAMPLE 100
-
-/* Call only with a held mutex for the delayed callbacks */
-static void
-dispatchDelayedCallbacks(UA_WorkQueue *wq, UA_DelayedCallback *cb) {
-    /* Are callbacks before the last checkpoint ready? */
-    for(size_t i = 0; i < wq->workersSize; ++i) {
-        if(wq->workers[i].counter == wq->workers[i].checkpointCounter)
-            return;
-    }
-
-    /* Dispatch all delayed callbacks up to the checkpoint.
-     * TODO: Move over the entire queue up to the checkpoint in one step. */
-    if(wq->delayedCallbacks_checkpoint != NULL) {
-        UA_DelayedCallback *iter, *tmp_iter;
-        SIMPLEQ_FOREACH_SAFE(iter, &wq->delayedCallbacks, next, tmp_iter) {
-            pthread_mutex_lock(&wq->dispatchQueue_accessMutex);
-            SIMPLEQ_INSERT_TAIL(&wq->dispatchQueue, iter, next);
-            pthread_mutex_unlock(&wq->dispatchQueue_accessMutex);
-            if(iter == wq->delayedCallbacks_checkpoint)
-                break;
-        }
-    }
-
-    /* Create the new sample point */
-    for(size_t i = 0; i < wq->workersSize; ++i)
-        wq->workers[i].checkpointCounter = wq->workers[i].counter;
-    wq->delayedCallbacks_checkpoint = cb;
-}
-
-#endif
-
-void
-UA_WorkQueue_enqueueDelayed(UA_WorkQueue *wq, UA_DelayedCallback *cb) {
-#if UA_MULTITHREADING >= 200
-    pthread_mutex_lock(&wq->dispatchQueue_accessMutex);
-#endif
-
-    SIMPLEQ_INSERT_HEAD(&wq->delayedCallbacks, cb, next);
-
-#if UA_MULTITHREADING >= 200
-    wq->delayedCallbacks_sinceDispatch++;
-    if(wq->delayedCallbacks_sinceDispatch > UA_MAX_DELAYED_SAMPLE) {
-        dispatchDelayedCallbacks(wq, cb);
-        wq->delayedCallbacks_sinceDispatch = 0;
-    }
-    pthread_mutex_unlock(&wq->dispatchQueue_accessMutex);
-#endif
-}
-
-/* Assumes all workers are shut down */
-void UA_WorkQueue_manuallyProcessDelayed(UA_WorkQueue *wq) {
-    UA_DelayedCallback *dc, *dc_tmp;
-    SIMPLEQ_FOREACH_SAFE(dc, &wq->delayedCallbacks, next, dc_tmp) {
-        SIMPLEQ_REMOVE_HEAD(&wq->delayedCallbacks, next);
-        if(dc->callback)
-            dc->callback(dc->application, dc->data);
-        UA_free(dc);
-    }
-#if UA_MULTITHREADING >= 200
-    wq->delayedCallbacks_checkpoint = NULL;
-#endif
-}
diff --git a/ext/open62541/src/ua_workqueue.h b/ext/open62541/src/ua_workqueue.h
deleted file mode 100644
index af6be06..0000000
--- a/ext/open62541/src/ua_workqueue.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2014-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- *    Copyright 2014-2016 (c) Sten Grüner
- *    Copyright 2015 (c) Chris Iatrou
- *    Copyright 2015 (c) Nick Goossens
- *    Copyright 2015 (c) Jörg Schüler-Maroldt
- *    Copyright 2015-2016 (c) Oleksiy Vasylyev
- *    Copyright 2016-2017 (c) Florian Palm
- *    Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- *    Copyright 2016 (c) Lorenz Haas
- *    Copyright 2017 (c) Jonas Green
- */
-
-#ifndef UA_WORKQUEUE_H_
-#define UA_WORKQUEUE_H_
-
-#include "ua_util_internal.h"
-#include "open62541_queue.h"
-
-#if UA_MULTITHREADING >= 200
-#include <pthread.h>
-#endif
-
-_UA_BEGIN_DECLS
-
-/* Callback where the application is either a client or a server */
-typedef void (*UA_ApplicationCallback)(void *application, void *data);
-
-/* Delayed callbacks are executed when all previously enqueue work is finished.
- * This is used to free memory that might used by a parallel worker or where the
- * current threat has remaining pointers to until the current operation
- * finishes. */
-typedef struct UA_DelayedCallback {
-    SIMPLEQ_ENTRY(UA_DelayedCallback) next;
-    UA_ApplicationCallback callback;
-    void *application;
-    void *data;
-} UA_DelayedCallback;
-
-struct UA_WorkQueue;
-typedef struct UA_WorkQueue UA_WorkQueue;
-
-#if UA_MULTITHREADING >= 200
-
-/* Workers take out callbacks from the work queue and execute them.
- *
- * Future Plans: Use work-stealing to load-balance between cores.
- * Le, Nhat Minh, et al. "Correct and efficient work-stealing for weak memory
- * models." ACM SIGPLAN Notices. Vol. 48. No. 8. ACM, 2013. */
-typedef struct {
-    pthread_t thread;
-    volatile UA_Boolean running;
-    UA_WorkQueue *queue;
-    UA_UInt32 counter;
-    UA_UInt32 checkpointCounter; /* Counter when the last checkpoint was made
-                                  * for the delayed callbacks */
-
-    /* separate cache lines */
-    char padding[64 - sizeof(void*) - sizeof(pthread_t) -
-                 sizeof(UA_UInt32) - sizeof(UA_Boolean)];
-} UA_Worker;
-
-#endif
-
-struct UA_WorkQueue {
-    /* Worker threads and work queue. Without multithreading, work is executed
-       immediately. */
-#if UA_MULTITHREADING >= 200
-    UA_Worker *workers;
-    size_t workersSize;
-
-    /* Work queue */
-    SIMPLEQ_HEAD(, UA_DelayedCallback) dispatchQueue; /* Dispatch queue for the worker threads */
-    pthread_mutex_t dispatchQueue_accessMutex; /* mutex for access to queue */
-    pthread_cond_t dispatchQueue_condition; /* so the workers don't spin if the queue is empty */
-    pthread_mutex_t dispatchQueue_conditionMutex; /* mutex for access to condition variable */
-#endif
-
-    /* Delayed callbacks
-     * To be executed after all curretly dispatched works has finished */
-    SIMPLEQ_HEAD(, UA_DelayedCallback) delayedCallbacks;
-#if UA_MULTITHREADING >= 200
-    pthread_mutex_t delayedCallbacks_accessMutex;
-    UA_DelayedCallback *delayedCallbacks_checkpoint;
-    size_t delayedCallbacks_sinceDispatch; /* How many have been added since we
-                                            * tried to dispatch callbacks? */
-#endif
-};
-
-void UA_WorkQueue_init(UA_WorkQueue *wq);
-
-/* Enqueue a delayed callback. It is executed when all previous work in the
- * queue has been finished. The ``cb`` pointer is freed afterwards. ``cb`` can
- * have a NULL callback that is not executed.
- *
- * This method checks internally if existing delayed work can be moved from the
- * delayed queue to the worker dispatch queue. */
-void UA_WorkQueue_enqueueDelayed(UA_WorkQueue *wq, UA_DelayedCallback *cb);
-
-/* Stop the workers, process all enqueued work in the calling thread, clean up
- * mutexes etc. */
-void UA_WorkQueue_cleanup(UA_WorkQueue *wq);
-
-#if UA_MULTITHREADING >= 200
-
-/* Spin up a number of worker threads that listen on the work queue */
-UA_StatusCode UA_WorkQueue_start(UA_WorkQueue *wq, size_t workersCount);
-
-void UA_WorkQueue_stop(UA_WorkQueue *wq);
-
-/* Enqueue work for the worker threads */
-void UA_WorkQueue_enqueue(UA_WorkQueue *wq, UA_ApplicationCallback cb,
-                          void *application, void *data);
-
-#else
-
-/* Process all enqueued delayed work. This is not needed when workers are
- * running for the multithreading case. (UA_WorkQueue_cleanup still calls this
- * method during cleanup when the workers are shut down.) */
-void UA_WorkQueue_manuallyProcessDelayed(UA_WorkQueue *wq);
-
-#endif
-
-_UA_END_DECLS
-
-#endif /* UA_SERVER_WORKQUEUE_H_ */
diff --git a/ext/open62541/tests/CMakeLists.txt b/ext/open62541/tests/CMakeLists.txt
deleted file mode 100644
index 91d03a7..0000000
--- a/ext/open62541/tests/CMakeLists.txt
+++ /dev/null
@@ -1,379 +0,0 @@
-# Load CMake Packages

-find_package(Check REQUIRED)

-set(LIBS ${CHECK_LIBRARIES} ${open62541_LIBRARIES})

-if(NOT WIN32 AND NOT APPLE)

-  list(APPEND LIBS subunit)

-endif()

-

-include_directories(${CHECK_INCLUDE_DIR})

-#find_package(Threads REQUIRED)

-if(NOT MSVC AND UA_ENABLE_UNIT_TESTS_MEMCHECK)

-    find_package(Valgrind REQUIRED)

-endif()

-

-if(CMAKE_HOST_SYSTEM_NAME MATCHES "OpenBSD")

-    link_directories(/usr/local/lib)

-    add_definitions(-Wno-gnu-zero-variadic-macro-arguments)

-endif()

-

-if(APPLE)

-    # CLang on Apple complains about many cases like this:

-    # /Users/travis/build/open62541/open62541/tests/check_chunking.c:148:22: warning: implicit conversion changes signedness: 'size_t' (aka 'unsigned long') to 'intmax_t' (aka 'long') [-Wsign-conversion]

-    #    ck_assert_int_eq(counter,9); //10 chunks allocated - callback called 4 times

-    add_definitions(-Wno-sign-conversion)

-endif()

-

-get_property(open62541_BUILD_INCLUDE_DIRS TARGET open62541 PROPERTY INTERFACE_INCLUDE_DIRECTORIES)

-include_directories(${open62541_BUILD_INCLUDE_DIRS})

-# ua_server_internal.h

-include_directories("${PROJECT_SOURCE_DIR}/src")

-include_directories("${PROJECT_SOURCE_DIR}/src/server")

-# testing_clock.h

-include_directories("${CMAKE_CURRENT_SOURCE_DIR}/testing-plugins")

-# #include <src_generated/<...>.h>

-include_directories("${PROJECT_BINARY_DIR}")

-

-if(UA_ENABLE_ENCRYPTION)

-    # mbedtls includes

-    include_directories(${MBEDTLS_INCLUDE_DIRS})

-endif()

-

-add_definitions(-DUA_sleep_ms=UA_comboSleep)

-

-#############################

-# Compiled binaries folders #

-#############################

-

-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/tests)

-if (MSVC)

-    set(TESTS_BINARY_DIR ${CMAKE_BINARY_DIR}/bin/tests/${CMAKE_BUILD_TYPE})

-else()

-    set(TESTS_BINARY_DIR ${CMAKE_BINARY_DIR}/bin/tests)

-endif()

-

-# Use different plugins for testing

-set(test_plugin_sources ${PROJECT_SOURCE_DIR}/arch/network_tcp.c

-    ${PROJECT_SOURCE_DIR}/tests/testing-plugins/testing_clock.c

-    ${PROJECT_SOURCE_DIR}/plugins/ua_log_stdout.c

-    ${PROJECT_SOURCE_DIR}/plugins/ua_config_default.c

-    ${PROJECT_SOURCE_DIR}/plugins/ua_accesscontrol_default.c

-    ${PROJECT_SOURCE_DIR}/plugins/ua_pki_default.c

-    ${PROJECT_SOURCE_DIR}/plugins/ua_nodestore_default.c

-    ${PROJECT_SOURCE_DIR}/plugins/securityPolicies/ua_securitypolicy_none.c

-    ${PROJECT_SOURCE_DIR}/tests/testing-plugins/testing_policy.c

-    ${PROJECT_SOURCE_DIR}/tests/testing-plugins/testing_networklayers.c

-    )

-

-if(UA_ENABLE_HISTORIZING)

-    set(test_plugin_sources ${test_plugin_sources}

-        ${PROJECT_SOURCE_DIR}/plugins/historydata/ua_history_data_backend_memory.c

-        ${PROJECT_SOURCE_DIR}/plugins/historydata/ua_history_data_gathering_default.c

-        ${PROJECT_SOURCE_DIR}/plugins/historydata/ua_history_database_default.c)

-endif()

-

-if(UA_ENABLE_ENCRYPTION)

-  list(APPEND test_plugin_sources

-       ${PROJECT_SOURCE_DIR}/plugins/securityPolicies/securitypolicy_mbedtls_common.c

-              ${PROJECT_SOURCE_DIR}/plugins/securityPolicies/ua_securitypolicy_basic128rsa15.c

-              ${PROJECT_SOURCE_DIR}/plugins/securityPolicies/ua_securitypolicy_basic256.c

-              ${PROJECT_SOURCE_DIR}/plugins/securityPolicies/ua_securitypolicy_basic256sha256.c)

-endif()

-

-add_library(open62541-testplugins OBJECT ${test_plugin_sources} ${PROJECT_SOURCE_DIR}/arch/${UA_ARCHITECTURE}/ua_architecture_functions.c)

-add_dependencies(open62541-testplugins open62541)

-target_compile_definitions(open62541-testplugins PRIVATE -DUA_DYNAMIC_LINKING_EXPORT)

-

-if(NOT MSVC)

-    add_definitions(-Wno-deprecated-declarations)

-endif()

-# Workaround some clang warnings in the uni tests

-if((NOT ${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD") AND (CMAKE_COMPILER_IS_GNUCC OR "x${CMAKE_C_COMPILER_ID}" STREQUAL "xClang"))

-    add_definitions(-Wno-sign-conversion)

-endif()

-

-# Unit Test Definition Macro

-# For now we need to disable the libc freeres. See https://github.com/open62541/open62541/pull/1003#issuecomment-315045143

-# This also requires to disable the phtread cache with no-nptl-pthread-stackcache

-set(VALGRIND_FLAGS --quiet --trace-children=yes --leak-check=full --run-libc-freeres=no --sim-hints=no-nptl-pthread-stackcache --track-fds=yes)

-macro(add_test_valgrind TEST_NAME)

-    if(UA_ENABLE_UNIT_TESTS_MEMCHECK)

-        if(MSVC)

-            add_test(${TEST_NAME} drmemory -batch -exit_code_if_errors 1 -results_to_stderr -summary -- ${ARGN})

-        else()

-            set(VALGRIND_LOG ${TESTS_BINARY_DIR}/${TEST_NAME}.log)

-            set(VALGRIND_CMD valgrind --error-exitcode=1 --suppressions=${PROJECT_SOURCE_DIR}/tools/valgrind_suppressions.supp ${VALGRIND_FLAGS} --log-file=${VALGRIND_LOG} ${ARGN})

-            add_test(${TEST_NAME} ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/valgrind_check_error.py ${VALGRIND_LOG} ${VALGRIND_CMD})

-        endif()

-    else()

-        add_test(${TEST_NAME} ${ARGN})

-    endif()

-    if (UA_BUILD_FUZZING_CORPUS)

-        target_sources(check_${TEST_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/tests/fuzz/ua_debug_dump_pkgs_file.c)

-        file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/corpus/${TEST_NAME})

-        target_compile_definitions(check_${TEST_NAME} PRIVATE UA_CORPUS_OUTPUT_DIR="${PROJECT_BINARY_DIR}/corpus/${TEST_NAME}")

-    endif()

-endmacro()

-

-add_custom_target(test-verbose COMMAND ${CMAKE_CTEST_COMMAND} --verbose)

-

-# the unit test are built directly on the open62541 object files. so they can

-# access symbols that are hidden/not exported to the shared library

-

-add_executable(check_types_builtin check_types_builtin.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_types_builtin ${LIBS})

-add_test_valgrind(types_builtin ${TESTS_BINARY_DIR}/check_types_builtin)

-

-if(UA_ENABLE_JSON_ENCODING)

-    add_executable(check_types_builtin_json check_types_builtin_json.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    target_link_libraries(check_types_builtin_json ${LIBS})

-    add_test_valgrind(types_builtin_json ${TESTS_BINARY_DIR}/check_types_builtin_json)

-

-    if(UA_ENABLE_PUBSUB)

-        add_executable(check_pubsub_encoding_json pubsub/check_pubsub_encoding_json.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-        target_link_libraries(check_pubsub_encoding_json ${LIBS})

-        add_test_valgrind(pubsub_encoding_json ${TESTS_BINARY_DIR}/check_pubsub_encoding_json)

-

-        add_executable(check_pubsub_publish_json pubsub/check_pubsub_publish_json.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-plugins>)

-        target_link_libraries(check_pubsub_publish_json ${LIBS})

-        add_test_valgrind(pubsub_publish_json ${TESTS_BINARY_DIR}/check_pubsub_publish_json)

-    endif()

-endif()

-

-add_executable(check_types_memory check_types_memory.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_types_memory ${LIBS})

-add_test_valgrind(types_memory ${TESTS_BINARY_DIR}/check_types_memory)

-

-add_executable(check_types_range check_types_range.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_types_range ${LIBS})

-add_test_valgrind(types_range ${TESTS_BINARY_DIR}/check_types_range)

-

-add_executable(check_types_custom check_types_custom.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_types_custom ${LIBS})

-add_test_valgrind(types_custom ${TESTS_BINARY_DIR}/check_types_custom)

-

-add_executable(check_chunking check_chunking.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_chunking ${LIBS})

-add_test_valgrind(chunking ${TESTS_BINARY_DIR}/check_chunking)

-

-add_executable(check_utils check_utils.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_utils ${LIBS})

-add_test_valgrind(utils ${TESTS_BINARY_DIR}/check_utils)

-

-add_executable(check_securechannel check_securechannel.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_securechannel ${LIBS})

-add_test_valgrind(securechannel ${TESTS_BINARY_DIR}/check_securechannel)

-

-add_executable(check_timer check_timer.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_timer ${LIBS})

-add_test_valgrind(timer ${TESTS_BINARY_DIR}/check_timer)

-

-# Test Server

-

-add_executable(check_accesscontrol server/check_accesscontrol.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_accesscontrol ${LIBS})

-add_test_valgrind(accesscontrol ${TESTS_BINARY_DIR}/check_accesscontrol)

-

-add_executable(check_services_view server/check_services_view.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_services_view ${LIBS})

-add_test_valgrind(services_view ${TESTS_BINARY_DIR}/check_services_view)

-

-add_executable(check_services_attributes server/check_services_attributes.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_services_attributes ${LIBS})

-add_test_valgrind(services_attributes ${TESTS_BINARY_DIR}/check_services_attributes)

-

-add_executable(check_services_nodemanagement server/check_services_nodemanagement.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_services_nodemanagement ${LIBS})

-add_test_valgrind(services_nodemanagement ${TESTS_BINARY_DIR}/check_services_nodemanagement)

-

-add_executable(check_server_callbacks server/check_server_callbacks.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_server_callbacks ${LIBS})

-add_test_valgrind(server_callbacks ${TESTS_BINARY_DIR}/check_server_callbacks)

-

-if (UA_MULTITHREADING EQUAL 100)

-    add_executable(check_mt_addVariableNode multithreading/check_mt_addVariableNode.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    target_link_libraries(check_mt_addVariableNode ${LIBS})

-    add_test_valgrind(mt_addVariableNode ${TESTS_BINARY_DIR}/check_mt_addVariableNode)

-

-    add_executable(check_mt_addVariableTypeNode multithreading/check_mt_addVariableTypeNode.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    target_link_libraries(check_mt_addVariableTypeNode ${LIBS})

-    add_test_valgrind(mt_addVariableTypeNode ${TESTS_BINARY_DIR}/check_mt_addVariableTypeNode)

-

-    add_executable(check_mt_addObjectNode multithreading/check_mt_addObjectNode.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    target_link_libraries(check_mt_addObjectNode ${LIBS})

-    add_test_valgrind(mt_addObjectNode ${TESTS_BINARY_DIR}/check_mt_addObjectNode)

-

-    add_executable(check_mt_readValueAttribute multithreading/check_mt_readValueAttribute.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    target_link_libraries(check_mt_readValueAttribute ${LIBS})

-    add_test_valgrind(mt_readValueAttribute ${TESTS_BINARY_DIR}/check_mt_readValueAttribute)

-

-    add_executable(check_mt_writeValueAttribute multithreading/check_mt_writeValueAttribute.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    target_link_libraries(check_mt_writeValueAttribute ${LIBS})

-    add_test_valgrind(mt_writeValueAttribute ${TESTS_BINARY_DIR}/check_mt_readWriteDelete)

-

-    add_executable(check_mt_readWriteDelete multithreading/check_mt_readWriteDelete.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    target_link_libraries(check_mt_readWriteDelete ${LIBS})

-    add_test_valgrind(mt_readWriteDelete ${TESTS_BINARY_DIR}/check_mt_readWriteDelete)

-

-    add_executable(check_mt_readWriteDeleteCallback multithreading/check_mt_readWriteDeleteCallback.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    target_link_libraries(check_mt_readWriteDeleteCallback ${LIBS})

-    add_test_valgrind(mt_readWriteDeleteCallback ${TESTS_BINARY_DIR}/check_mt_readWriteDeleteCallback)

-

-    add_executable(check_mt_addDeleteObject multithreading/check_mt_addDeleteObject.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    target_link_libraries(check_mt_addDeleteObject ${LIBS})

-    add_test_valgrind(mt_addDeleteObject ${TESTS_BINARY_DIR}/check_mt_addDeleteObject)

-endif()

-

-add_executable(check_services_call server/check_services_call.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_services_call ${LIBS})

-add_test_valgrind(services_call ${TESTS_BINARY_DIR}/check_services_call)

-

-add_executable(check_services_subscriptions server/check_services_subscriptions.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_services_subscriptions ${LIBS})

-add_test_valgrind(services_subscriptions ${TESTS_BINARY_DIR}/check_services_subscriptions)

-

-add_executable(check_monitoreditem_filter server/check_monitoreditem_filter.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_monitoreditem_filter ${LIBS})

-add_test_valgrind(monitoreditem_filter ${TESTS_BINARY_DIR}/check_monitoreditem_filter)

-

-add_executable(check_subscription_events server/check_subscription_events.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_subscription_events ${LIBS})

-add_test_valgrind(subscription_events ${TESTS_BINARY_DIR}/check_subscription_events)

-

-add_executable(check_nodestore server/check_nodestore.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_nodestore ${LIBS})

-add_test_valgrind(nodestore ${TESTS_BINARY_DIR}/check_nodestore)

-

-if(UA_ENABLE_HISTORIZING)

-    add_executable(check_server_historical_data server/check_server_historical_data.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    target_link_libraries(check_server_historical_data ${LIBS})

-    add_test_valgrind(server_historical_data ${TESTS_BINARY_DIR}/check_server_historical_data)

-endif()

-

-add_executable(check_session server/check_session.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_session ${LIBS})

-add_test_valgrind(session ${TESTS_BINARY_DIR}/check_session)

-

-add_executable(check_server server/check_server.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_server ${LIBS})

-add_test_valgrind(server ${TESTS_BINARY_DIR}/check_server)

-

-add_executable(check_server_jobs server/check_server_jobs.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_server_jobs ${LIBS})

-add_test_valgrind(server_jobs ${TESTS_BINARY_DIR}/check_server_jobs)

-

-add_executable(check_server_userspace server/check_server_userspace.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_server_userspace ${LIBS})

-add_test_valgrind(server_userspace ${TESTS_BINARY_DIR}/check_server_userspace)

-

-add_executable(check_node_inheritance server/check_node_inheritance.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_node_inheritance ${LIBS})

-add_test_valgrind(node_inheritance ${TESTS_BINARY_DIR}/check_node_inheritance)

-

-add_executable(check_local_monitored_item server/check_local_monitored_item.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_local_monitored_item ${LIBS})

-add_test_valgrind(local_monitored_item ${TESTS_BINARY_DIR}/check_local_monitored_item)

-

-if(UA_ENABLE_DISCOVERY)

-    add_executable(check_discovery server/check_discovery.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    target_link_libraries(check_discovery ${LIBS})

-    add_test_valgrind(discovery ${TESTS_BINARY_DIR}/check_discovery)

-endif()

-

-if(UA_ENABLE_PUBSUB)

-    add_executable(check_pubsub_encoding pubsub/check_pubsub_encoding.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    target_link_libraries(check_pubsub_encoding ${LIBS})

-    add_test_valgrind(pubsub_encoding ${TESTS_BINARY_DIR}/check_pubsub_encoding)

-    add_executable(check_pubsub_pds pubsub/check_pubsub_pds.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-plugins>)

-    target_link_libraries(check_pubsub_pds ${LIBS})

-    add_test_valgrind(pubsub_pds ${TESTS_BINARY_DIR}/check_pubsub_pds)

-    add_executable(check_pubsub_connection_udp pubsub/check_pubsub_connection_udp.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-plugins>)

-    target_link_libraries(check_pubsub_connection_udp ${LIBS})

-    add_test_valgrind(pubsub_connection_udp ${TESTS_BINARY_DIR}/check_pubsub_connection_udp)

-    add_executable(check_pubsub_publish pubsub/check_pubsub_publish.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-plugins>)

-    target_link_libraries(check_pubsub_publish ${LIBS})

-    add_test_valgrind(pubsub_publish ${TESTS_BINARY_DIR}/check_pubsub_publish)

-    add_executable(check_pubsub_publish_uadp pubsub/check_pubsub_publish_uadp.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-plugins>)

-    target_link_libraries(check_pubsub_publish_uadp ${LIBS})

-    add_test_valgrind(pubsub_publish ${TESTS_BINARY_DIR}/check_pubsub_publish_uadp)

-

-    #Link libraries for executing subscriber unit test

-    add_executable(check_pubsub_subscribe pubsub/check_pubsub_subscribe.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-plugins>)

-    target_link_libraries(check_pubsub_subscribe ${LIBS})

-    add_test_valgrind(check_pubsub_subscribe ${TESTS_BINARY_DIR}/check_pubsub_subscribe)

-    add_executable(check_pubsub_publishspeed pubsub/check_pubsub_publishspeed.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-plugins>)

-    target_link_libraries(check_pubsub_publishspeed ${LIBS})

-    add_test_valgrind(pubsub_publishspeed ${TESTS_BINARY_DIR}/check_pubsub_publish)

-

-    add_executable(check_pubsub_multiple_layer pubsub/check_pubsub_multiple_layer.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-plugins>)

-    target_link_libraries(check_pubsub_multiple_layer ${LIBS})

-    add_test_valgrind(pubsub_multiple_layer ${TESTS_BINARY_DIR}/check_pubsub_multiple_layer)

-

-    if(UA_ENABLE_PUBSUB_INFORMATIONMODEL)

-        add_executable(check_pubsub_informationmodel pubsub/check_pubsub_informationmodel.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-plugins>)

-        target_link_libraries(check_pubsub_informationmodel ${LIBS})

-        add_test(check_pubsub_informationmodel ${TESTS_BINARY_DIR}/check_pubsub_informationmodel)

-        if(UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS)

-            add_executable(check_pubsub_informationmodel_methods pubsub/check_pubsub_informationmodel_methods.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-plugins>)

-            target_link_libraries(check_pubsub_informationmodel_methods ${LIBS})

-            add_test(check_pubsub_informationmodel_methods ${TESTS_BINARY_DIR}/check_pubsub_informationmodel_methods)

-

-        endif()

-    endif()

-endif()

-

-add_executable(check_server_readspeed server/check_server_readspeed.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_server_readspeed ${LIBS})

-add_test_valgrind(server_readspeed ${TESTS_BINARY_DIR}/check_server_readspeed)

-

-if(UA_ENABLE_SUBSCRIPTIONS)

-    add_executable(check_server_monitoringspeed server/check_server_monitoringspeed.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    target_link_libraries(check_server_monitoringspeed ${LIBS})

-    add_test_valgrind(server_monitoringspeed ${TESTS_BINARY_DIR}/check_server_monitoringspeed)

-endif()

-

-# Test Client

-

-add_executable(check_client client/check_client.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_client ${LIBS})

-add_test_valgrind(client ${TESTS_BINARY_DIR}/check_client)

-

-add_executable(check_client_securechannel client/check_client_securechannel.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_client_securechannel ${LIBS})

-add_test_valgrind(client_securechannel ${TESTS_BINARY_DIR}/check_client_securechannel)

-

-add_executable(check_client_async client/check_client_async.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_client_async ${LIBS})

-add_test_valgrind(client_async ${TESTS_BINARY_DIR}/check_client_async)

-

-add_executable(check_client_async_connect client/check_client_async_connect.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_client_async_connect ${LIBS})

-add_test_valgrind(client_async_connect ${TESTS_BINARY_DIR}/check_client_async_connect)

-

-add_executable(check_client_subscriptions client/check_client_subscriptions.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_client_subscriptions ${LIBS})

-add_test_valgrind(client_subscriptions ${TESTS_BINARY_DIR}/check_client_subscriptions)

-

-add_executable(check_client_highlevel client/check_client_highlevel.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-target_link_libraries(check_client_highlevel ${LIBS})

-add_test_valgrind(client_highlevel ${TESTS_BINARY_DIR}/check_client_highlevel)

-

-if(UA_ENABLE_HISTORIZING)

-    add_executable(check_client_historical_data client/check_client_historical_data.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    target_link_libraries(check_client_historical_data ${LIBS})

-    add_test_valgrind(client_historical_data ${TESTS_BINARY_DIR}/check_client_historical_data)

-endif()

-

-# Test Encryption

-

-if(UA_ENABLE_ENCRYPTION)

-    add_executable(check_encryption_basic128rsa15 encryption/check_encryption_basic128rsa15.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    target_link_libraries(check_encryption_basic128rsa15 ${LIBS})

-    add_test_valgrind(encryption_basic128rsa15 ${TESTS_BINARY_DIR}/check_encryption_basic128rsa15)

-

-    add_executable(check_encryption_basic256sha256 encryption/check_encryption_basic256sha256.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    target_link_libraries(check_encryption_basic256sha256 ${LIBS})

-    add_test_valgrind(encryption_basic256sha256 ${TESTS_BINARY_DIR}/check_encryption_basic256sha256)

-endif()

-

-# Tests for Nodeset Compiler

-add_subdirectory(nodeset-compiler)

diff --git a/ext/open62541/tests/check_chunking.c b/ext/open62541/tests/check_chunking.c
deleted file mode 100644
index 6513582..0000000
--- a/ext/open62541/tests/check_chunking.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/types.h>
-
-#include "ua_securechannel.h"
-#include "ua_types_encoding_binary.h"
-
-#include <check.h>
-
-UA_ByteString *buffers;
-size_t bufIndex;
-size_t counter;
-size_t dataCount;
-
-static UA_StatusCode
-sendChunkMockUp(void *_, UA_Byte **bufPos, const UA_Byte **bufEnd) {
-    size_t offset = (uintptr_t)(*bufPos - buffers[bufIndex].data);
-    bufIndex++;
-    *bufPos = buffers[bufIndex].data;
-    *bufEnd = &(*bufPos)[buffers[bufIndex].length];
-    counter++;
-    dataCount += offset;
-    return UA_STATUSCODE_GOOD;
-}
-
-START_TEST(encodeArrayIntoFiveChunksShallWork) {
-    size_t arraySize = 30; //number of elements within the array which should be encoded
-    size_t chunkCount = 6; // maximum chunk count
-    size_t chunkSize = 30; //size in bytes of each chunk
-    bufIndex = 0;
-    counter = 0;
-    dataCount = 0;
-    buffers = (UA_ByteString*)UA_Array_new(chunkCount, &UA_TYPES[UA_TYPES_BYTESTRING]);
-    for(size_t i=0;i<chunkCount;i++){
-        UA_ByteString_allocBuffer(&buffers[i],chunkSize);
-    }
-
-    UA_Int32 *ar = (UA_Int32*)UA_Array_new(arraySize,&UA_TYPES[UA_TYPES_INT32]);
-    for(size_t i = 0; i < arraySize; i++)
-        ar[i] = (UA_Int32)i;
-
-    UA_Variant v;
-    UA_Variant_setArrayCopy(&v, ar, arraySize, &UA_TYPES[UA_TYPES_INT32]);
-
-    UA_ByteString workingBuffer = buffers[0];
-    UA_Byte *pos = workingBuffer.data;
-    const UA_Byte *end = &workingBuffer.data[workingBuffer.length];
-    UA_StatusCode retval = UA_encodeBinary(&v,&UA_TYPES[UA_TYPES_VARIANT],
-                                           &pos, &end, sendChunkMockUp, NULL);
-
-    ck_assert_uint_eq(retval,UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(counter,4); //5 chunks allocated - callback called 4 times
-
-    dataCount += (uintptr_t)(pos - buffers[bufIndex].data);
-    ck_assert_int_eq(UA_calcSizeBinary(&v,&UA_TYPES[UA_TYPES_VARIANT]), dataCount);
-
-    UA_Variant_deleteMembers(&v);
-    UA_Array_delete(buffers, chunkCount, &UA_TYPES[UA_TYPES_BYTESTRING]);
-    UA_Array_delete(ar, arraySize, &UA_TYPES[UA_TYPES_INT32]);
-} END_TEST
-
-START_TEST(encodeStringIntoFiveChunksShallWork) {
-    size_t stringLength = 120; //number of elements within the array which should be encoded
-    size_t chunkCount = 6; // maximum chunk count
-    size_t chunkSize = 30; //size in bytes of each chunk
-
-    UA_String string;
-    bufIndex = 0;
-    counter = 0;
-    dataCount = 0;
-    UA_String_init(&string);
-    string.data = (UA_Byte*)UA_malloc(stringLength);
-    string.length = stringLength;
-    char tmpString[9] = {'o','p','e','n','6','2','5','4','1'};
-    //char tmpString[9] = {'1','4','5','2','6','n','e','p','o'};
-    buffers = (UA_ByteString*)UA_Array_new(chunkCount, &UA_TYPES[UA_TYPES_BYTESTRING]);
-    for(size_t i=0;i<chunkCount;i++){
-        UA_ByteString_allocBuffer(&buffers[i],chunkSize);
-    }
-
-    UA_ByteString workingBuffer=buffers[0];
-
-    for(size_t i=0;i<stringLength;i++){
-        size_t tmp = i % 9;
-        string.data[i] =  tmpString[tmp];
-    }
-    UA_Variant v;
-    UA_Variant_setScalarCopy(&v,&string,&UA_TYPES[UA_TYPES_STRING]);
-
-    UA_Byte *pos = workingBuffer.data;
-    const UA_Byte *end = &workingBuffer.data[workingBuffer.length];
-    UA_StatusCode retval = UA_encodeBinary(&v, &UA_TYPES[UA_TYPES_VARIANT],
-                                           &pos, &end, sendChunkMockUp, NULL);
-
-    ck_assert_uint_eq(retval,UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(counter,4); //5 chunks allocated - callback called 4 times
-
-    dataCount += (uintptr_t)(pos - buffers[bufIndex].data);
-    ck_assert_int_eq(UA_calcSizeBinary(&v,&UA_TYPES[UA_TYPES_VARIANT]), dataCount);
-
-    UA_Variant_deleteMembers(&v);
-    UA_Array_delete(buffers, chunkCount, &UA_TYPES[UA_TYPES_BYTESTRING]);
-    UA_String_deleteMembers(&string);
-} END_TEST
-
-START_TEST(encodeTwoStringsIntoTenChunksShallWork) {
-    size_t stringLength = 143; //number of elements within the array which should be encoded
-    size_t chunkCount = 10; // maximum chunk count
-    size_t chunkSize = 30; //size in bytes of each chunk
-
-    UA_String string;
-    bufIndex = 0;
-    counter = 0;
-    dataCount = 0;
-    UA_String_init(&string);
-    string.data = (UA_Byte*)UA_malloc(stringLength);
-    string.length = stringLength;
-    char tmpString[9] = {'o','p','e','n','6','2','5','4','1'};
-    buffers = (UA_ByteString*)UA_Array_new(chunkCount, &UA_TYPES[UA_TYPES_BYTESTRING]);
-    for(size_t i=0;i<chunkCount;i++){
-        UA_ByteString_allocBuffer(&buffers[i],chunkSize);
-    }
-
-    UA_ByteString workingBuffer=buffers[0];
-
-    for(size_t i=0;i<stringLength;i++){
-        size_t tmp = i % 9;
-        string.data[i] =  tmpString[tmp];
-    }
-
-    UA_Byte *pos = workingBuffer.data;
-    const UA_Byte *end = &workingBuffer.data[workingBuffer.length];
-    UA_StatusCode retval = UA_encodeBinary(&string, &UA_TYPES[UA_TYPES_STRING],
-                                           &pos, &end, sendChunkMockUp, NULL);
-    ck_assert_uint_eq(retval,UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(counter,4); //5 chunks allocated - callback called 4 times
-    size_t offset = (uintptr_t)(pos - buffers[bufIndex].data);
-    ck_assert_int_eq(UA_calcSizeBinary(&string,&UA_TYPES[UA_TYPES_STRING]), dataCount + offset);
-
-    retval = UA_encodeBinary(&string,&UA_TYPES[UA_TYPES_STRING],
-                             &pos, &end, sendChunkMockUp, NULL);
-    dataCount += (uintptr_t)(pos - buffers[bufIndex].data);
-    ck_assert_uint_eq(retval,UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(counter,9); //10 chunks allocated - callback called 4 times
-    ck_assert_int_eq(2 * UA_calcSizeBinary(&string,&UA_TYPES[UA_TYPES_STRING]), dataCount);
-
-    UA_Array_delete(buffers, chunkCount, &UA_TYPES[UA_TYPES_BYTESTRING]);
-    UA_String_deleteMembers(&string);
-} END_TEST
-
-int main(void) {
-    Suite *s = suite_create("Chunked encoding");
-    TCase *tc_message = tcase_create("encode chunking");
-    tcase_add_test(tc_message,encodeArrayIntoFiveChunksShallWork);
-    tcase_add_test(tc_message,encodeStringIntoFiveChunksShallWork);
-    tcase_add_test(tc_message,encodeTwoStringsIntoTenChunksShallWork);
-    suite_add_tcase(s, tc_message);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/check_securechannel.c b/ext/open62541/tests/check_securechannel.c
deleted file mode 100644
index dc54467..0000000
--- a/ext/open62541/tests/check_securechannel.c
+++ /dev/null
@@ -1,584 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/transport_generated.h>
-#include <open62541/transport_generated_encoding_binary.h>
-#include <open62541/transport_generated_handling.h>
-#include <open62541/types_generated.h>
-#include <open62541/types_generated_encoding_binary.h>
-
-#include "ua_securechannel.h"
-#include <ua_types_encoding_binary.h>
-
-#include "check.h"
-#include "testing_networklayers.h"
-#include "testing_policy.h"
-
-#define UA_BYTESTRING_STATIC(s) {sizeof(s)-1, (UA_Byte*)(s)}
-
-// Some default testing sizes. Can be overwritten in testing functions.
-#define DEFAULT_SYM_ENCRYPTION_BLOCK_SIZE 2
-#define DEFAULT_SYM_SIGNING_KEY_LENGTH 3
-#define DEFAULT_SYM_ENCRYPTION_KEY_LENGTH 5
-#define DEFAULT_ASYM_REMOTE_SIGNATURE_SIZE 7
-#define DEFAULT_ASYM_LOCAL_SIGNATURE_SIZE 11
-#define DEFAULT_SYM_SIGNATURE_SIZE 13
-#define DEFAULT_ASYM_REMOTE_PLAINTEXT_BLOCKSIZE 256
-#define DEFAULT_ASYM_REMOTE_BLOCKSIZE 256
-
-UA_SecureChannel testChannel;
-UA_ByteString dummyCertificate =
-    UA_BYTESTRING_STATIC("DUMMY CERTIFICATE DUMMY CERTIFICATE DUMMY CERTIFICATE");
-UA_SecurityPolicy dummyPolicy;
-UA_Connection testingConnection;
-UA_ByteString sentData;
-
-
-static funcs_called fCalled;
-static key_sizes keySizes;
-
-static void
-setup_secureChannel(void) {
-    TestingPolicy(&dummyPolicy, dummyCertificate, &fCalled, &keySizes);
-    UA_SecureChannel_init(&testChannel);
-    UA_SecureChannel_setSecurityPolicy(&testChannel, &dummyPolicy, &dummyCertificate);
-
-    testingConnection = createDummyConnection(65535, &sentData);
-    UA_Connection_attachSecureChannel(&testingConnection, &testChannel);
-    testChannel.connection = &testingConnection;
-}
-
-static void
-teardown_secureChannel(void) {
-    UA_SecureChannel_close(&testChannel);
-    UA_SecureChannel_deleteMembers(&testChannel);
-    dummyPolicy.deleteMembers(&dummyPolicy);
-    testingConnection.close(&testingConnection);
-}
-
-static void
-setup_funcs_called(void) {
-    memset(&fCalled, 0, sizeof(struct funcs_called));
-}
-
-static void
-teardown_funcs_called(void) {
-    memset(&fCalled, 0, sizeof(struct funcs_called));
-}
-
-static void
-setup_key_sizes(void) {
-    memset(&keySizes, 0, sizeof(struct key_sizes));
-
-    keySizes.sym_sig_keyLen = DEFAULT_SYM_SIGNING_KEY_LENGTH;
-    keySizes.sym_enc_blockSize = DEFAULT_SYM_ENCRYPTION_BLOCK_SIZE;
-    keySizes.sym_enc_keyLen = DEFAULT_SYM_ENCRYPTION_KEY_LENGTH;
-    keySizes.sym_sig_size = DEFAULT_SYM_SIGNATURE_SIZE;
-
-    keySizes.asym_lcl_sig_size = DEFAULT_ASYM_LOCAL_SIGNATURE_SIZE;
-    keySizes.asym_rmt_sig_size = DEFAULT_ASYM_REMOTE_SIGNATURE_SIZE;
-
-    keySizes.asym_rmt_ptext_blocksize = DEFAULT_ASYM_REMOTE_PLAINTEXT_BLOCKSIZE;
-    keySizes.asym_rmt_blocksize = DEFAULT_ASYM_REMOTE_BLOCKSIZE;
-    keySizes.asym_rmt_enc_key_size = 2048;
-    keySizes.asym_lcl_enc_key_size = 1024;
-}
-
-static void
-teardown_key_sizes(void) {
-    memset(&keySizes, 0, sizeof(struct key_sizes));
-}
-
-START_TEST(SecureChannel_initAndDelete) {
-    TestingPolicy(&dummyPolicy, dummyCertificate, &fCalled, &keySizes);
-    UA_StatusCode retval;
-
-    UA_SecureChannel channel;
-    UA_SecureChannel_init(&channel);
-    retval = UA_SecureChannel_setSecurityPolicy(&channel, &dummyPolicy, &dummyCertificate);
-
-    ck_assert_msg(retval == UA_STATUSCODE_GOOD, "Expected StatusCode to be good");
-    ck_assert_msg(channel.state == UA_SECURECHANNELSTATE_FRESH, "Expected state to be fresh");
-    ck_assert_msg(fCalled.newContext, "Expected newContext to have been called");
-    ck_assert_msg(fCalled.makeCertificateThumbprint,
-                  "Expected makeCertificateThumbprint to have been called");
-    ck_assert_msg(channel.securityPolicy == &dummyPolicy, "SecurityPolicy not set correctly");
-
-    UA_SecureChannel_close(&channel);
-    UA_SecureChannel_deleteMembers(&channel);
-    ck_assert_msg(fCalled.deleteContext, "Expected deleteContext to have been called");
-
-    dummyPolicy.deleteMembers(&dummyPolicy);
-}END_TEST
-
-START_TEST(SecureChannel_generateNewKeys) {
-    UA_StatusCode retval = UA_SecureChannel_generateNewKeys(&testChannel);
-
-    ck_assert_msg(retval == UA_STATUSCODE_GOOD, "Expected Statuscode to be good");
-    ck_assert_msg(fCalled.generateKey, "Expected generateKey to have been called");
-    ck_assert_msg(fCalled.setLocalSymEncryptingKey,
-                  "Expected setLocalSymEncryptingKey to have been called");
-    ck_assert_msg(fCalled.setLocalSymSigningKey,
-                  "Expected setLocalSymSigningKey to have been called");
-    ck_assert_msg(fCalled.setLocalSymIv, "Expected setLocalSymIv to have been called");
-    ck_assert_msg(fCalled.setRemoteSymEncryptingKey,
-                  "Expected setRemoteSymEncryptingKey to have been called");
-    ck_assert_msg(fCalled.setRemoteSymSigningKey,
-                  "Expected setRemoteSymSigningKey to have been called");
-    ck_assert_msg(fCalled.setRemoteSymIv, "Expected setRemoteSymIv to have been called");
-}END_TEST
-
-START_TEST(SecureChannel_revolveTokens) {
-    // Fake that no token was issued by setting 0
-    testChannel.nextSecurityToken.tokenId = 0;
-    UA_StatusCode retval = UA_SecureChannel_revolveTokens(&testChannel);
-    ck_assert_msg(retval == UA_STATUSCODE_BADSECURECHANNELTOKENUNKNOWN,
-                  "Expected failure because tokenId 0 signifies that no token was issued");
-
-    // Fake an issued token by setting an id
-    testChannel.nextSecurityToken.tokenId = 10;
-    retval = UA_SecureChannel_revolveTokens(&testChannel);
-    ck_assert_msg(retval == UA_STATUSCODE_GOOD, "Expected function to return GOOD");
-    ck_assert_msg(fCalled.generateKey,
-                  "Expected generateKey to be called because new keys need to be generated,"
-                  "when switching to the next token.");
-
-    UA_ChannelSecurityToken testToken;
-    UA_ChannelSecurityToken_init(&testToken);
-
-    ck_assert_msg(memcmp(&testChannel.nextSecurityToken, &testToken,
-                         sizeof(UA_ChannelSecurityToken)) == 0,
-                  "Expected the next securityToken to be freshly initialized");
-    ck_assert_msg(testChannel.securityToken.tokenId == 10, "Expected token to have been copied");
-}END_TEST
-
-static void
-createDummyResponse(UA_OpenSecureChannelResponse *response) {
-    UA_OpenSecureChannelResponse_init(response);
-    memset(response, 0, sizeof(UA_OpenSecureChannelResponse));
-}
-
-START_TEST(SecureChannel_sendAsymmetricOPNMessage_withoutConnection) {
-    UA_OpenSecureChannelResponse dummyResponse;
-    createDummyResponse(&dummyResponse);
-    testChannel.securityMode = UA_MESSAGESECURITYMODE_NONE;
-
-    // Remove connection to provoke error
-    UA_Connection_detachSecureChannel(testChannel.connection);
-    testChannel.connection = NULL;
-
-    UA_StatusCode retval =
-        UA_SecureChannel_sendAsymmetricOPNMessage(&testChannel, 42, &dummyResponse,
-                                                  &UA_TYPES[UA_TYPES_OPENSECURECHANNELRESPONSE]);
-
-    ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected failure without a connection");
-}END_TEST
-
-START_TEST(SecureChannel_sendAsymmetricOPNMessage_invalidParameters) {
-    UA_OpenSecureChannelResponse dummyResponse;
-    createDummyResponse(&dummyResponse);
-
-    UA_StatusCode retval =
-        UA_SecureChannel_sendAsymmetricOPNMessage(&testChannel, 42, NULL,
-                                                  &UA_TYPES[UA_TYPES_OPENSECURECHANNELRESPONSE]);
-    ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected failure");
-
-    retval = UA_SecureChannel_sendAsymmetricOPNMessage(&testChannel, 42, &dummyResponse, NULL);
-    ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected failure");
-
-}END_TEST
-
-START_TEST(SecureChannel_sendAsymmetricOPNMessage_SecurityModeInvalid) {
-    // Configure our channel correctly for OPN messages and setup dummy message
-    UA_OpenSecureChannelResponse dummyResponse;
-    createDummyResponse(&dummyResponse);
-
-    testChannel.securityMode = UA_MESSAGESECURITYMODE_INVALID;
-
-    UA_StatusCode retval =
-        UA_SecureChannel_sendAsymmetricOPNMessage(&testChannel, 42, &dummyResponse,
-                                                  &UA_TYPES[UA_TYPES_OPENSECURECHANNELRESPONSE]);
-    ck_assert_msg(retval == UA_STATUSCODE_BADSECURITYMODEREJECTED,
-                  "Expected SecurityMode rejected error");
-}
-END_TEST
-
-START_TEST(SecureChannel_sendAsymmetricOPNMessage_SecurityModeNone) {
-    // Configure our channel correctly for OPN messages and setup dummy message
-    UA_OpenSecureChannelResponse dummyResponse;
-    createDummyResponse(&dummyResponse);
-    testChannel.securityMode = UA_MESSAGESECURITYMODE_NONE;
-
-    UA_StatusCode retval =
-        UA_SecureChannel_sendAsymmetricOPNMessage(&testChannel, 42, &dummyResponse,
-                                                  &UA_TYPES[UA_TYPES_OPENSECURECHANNELRESPONSE]);
-    ck_assert_msg(retval == UA_STATUSCODE_GOOD, "Expected function to succeed");
-    ck_assert_msg(!fCalled.asym_enc, "Message encryption was called but should not have been");
-    ck_assert_msg(!fCalled.asym_sign, "Message signing was called but should not have been");
-}
-END_TEST
-
-#ifdef UA_ENABLE_ENCRYPTION
-
-START_TEST(SecureChannel_sendAsymmetricOPNMessage_SecurityModeSign) {
-    // Configure our channel correctly for OPN messages and setup dummy message
-    UA_OpenSecureChannelResponse dummyResponse;
-    createDummyResponse(&dummyResponse);
-    testChannel.securityMode = UA_MESSAGESECURITYMODE_SIGN;
-
-    UA_StatusCode retval =
-        UA_SecureChannel_sendAsymmetricOPNMessage(&testChannel, 42, &dummyResponse,
-                                                  &UA_TYPES[UA_TYPES_OPENSECURECHANNELRESPONSE]);
-    ck_assert_msg(retval == UA_STATUSCODE_GOOD, "Expected function to succeed");
-    ck_assert_msg(fCalled.asym_enc, "Expected message to have been encrypted but it was not");
-    ck_assert_msg(fCalled.asym_sign, "Expected message to have been signed but it was not");
-}END_TEST
-
-START_TEST(SecureChannel_sendAsymmetricOPNMessage_SecurityModeSignAndEncrypt) {
-    // Configure our channel correctly for OPN messages and setup dummy message
-    UA_OpenSecureChannelResponse dummyResponse;
-    createDummyResponse(&dummyResponse);
-
-    testChannel.securityMode = UA_MESSAGESECURITYMODE_SIGNANDENCRYPT;
-    UA_StatusCode retval =
-        UA_SecureChannel_sendAsymmetricOPNMessage(&testChannel, 42, &dummyResponse,
-                                                  &UA_TYPES[UA_TYPES_OPENSECURECHANNELRESPONSE]);
-    ck_assert_msg(retval == UA_STATUSCODE_GOOD, "Expected function to succeed");
-    ck_assert_msg(fCalled.asym_enc, "Expected message to have been encrypted but it was not");
-    ck_assert_msg(fCalled.asym_sign, "Expected message to have been signed but it was not");
-}END_TEST
-
-#endif /* UA_ENABLE_ENCRYPTION */
-
-START_TEST(SecureChannel_sendAsymmetricOPNMessage_sentDataIsValid) {
-    UA_OpenSecureChannelResponse dummyResponse;
-    createDummyResponse(&dummyResponse);
-
-    /* Enable encryption for the SecureChannel */
-#ifdef UA_ENABLE_ENCRYPTION
-    testChannel.securityMode = UA_MESSAGESECURITYMODE_SIGNANDENCRYPT;
-#else
-    testChannel.securityMode = UA_MESSAGESECURITYMODE_NONE;
-#endif
-
-    UA_UInt32 requestId = UA_UInt32_random();
-
-    UA_StatusCode retval =
-        UA_SecureChannel_sendAsymmetricOPNMessage(&testChannel, requestId, &dummyResponse,
-                                                  &UA_TYPES[UA_TYPES_OPENSECURECHANNELRESPONSE]);
-    ck_assert_msg(retval == UA_STATUSCODE_GOOD, "Expected function to succeed");
-
-    size_t offset = 0;
-    UA_SecureConversationMessageHeader header;
-    UA_SecureConversationMessageHeader_decodeBinary(&sentData, &offset, &header);
-
-    UA_AsymmetricAlgorithmSecurityHeader asymSecurityHeader;
-    UA_AsymmetricAlgorithmSecurityHeader_decodeBinary(&sentData, &offset, &asymSecurityHeader);
-
-    ck_assert_msg(UA_ByteString_equal(&testChannel.securityPolicy->policyUri,
-                                      &asymSecurityHeader.securityPolicyUri),
-                  "Expected securityPolicyUri to be equal to the one used by the secureChannel");
-
-#ifdef UA_ENABLE_ENCRYPTION
-    ck_assert_msg(UA_ByteString_equal(&dummyCertificate, &asymSecurityHeader.senderCertificate),
-                  "Expected the certificate to be equal to the one used  by the secureChannel");
-
-    UA_ByteString thumbPrint = {20, testChannel.remoteCertificateThumbprint};
-    ck_assert_msg(UA_ByteString_equal(&thumbPrint,
-                                      &asymSecurityHeader.receiverCertificateThumbprint),
-                  "Expected receiverCertificateThumbprint to be equal to the one set "
-                  "in the secureChannel");
-
-    /* Dummy encryption */
-    for(size_t i = offset; i < header.messageHeader.messageSize; ++i) {
-        sentData.data[i] = (UA_Byte)((sentData.data[i] - 1) % (UA_BYTE_MAX + 1));
-    }
-#endif
-
-    UA_SequenceHeader sequenceHeader;
-    UA_SequenceHeader_decodeBinary(&sentData, &offset, &sequenceHeader);
-    ck_assert_msg(sequenceHeader.requestId == requestId, "Expected requestId to be %i but was %i",
-                  requestId,
-                  sequenceHeader.requestId);
-
-    UA_NodeId original =
-        UA_NODEID_NUMERIC(0, UA_TYPES[UA_TYPES_OPENSECURECHANNELRESPONSE].binaryEncodingId);
-    UA_NodeId requestTypeId;
-    UA_NodeId_decodeBinary(&sentData, &offset, &requestTypeId);
-    ck_assert_msg(UA_NodeId_equal(&original, &requestTypeId), "Expected nodeIds to be equal");
-
-    UA_OpenSecureChannelResponse sentResponse;
-    UA_OpenSecureChannelResponse_decodeBinary(&sentData, &offset, &sentResponse);
-
-    ck_assert_msg(memcmp(&sentResponse, &dummyResponse, sizeof(UA_OpenSecureChannelResponse)) == 0,
-                  "Expected the sent response to be equal to the one supplied to the send function");
-
-#ifdef UA_ENABLE_ENCRYPTION
-    UA_Byte paddingByte = sentData.data[offset];
-    size_t paddingSize = (size_t)paddingByte;
-
-    for(size_t i = 0; i <= paddingSize; ++i) {
-        ck_assert_msg(sentData.data[offset + i] == paddingByte,
-                      "Expected padding byte %i to be %i but got value %i",
-                      i, paddingByte, sentData.data[offset + i]);
-    }
-
-    ck_assert_msg(sentData.data[offset + paddingSize + 1] == '*', "Expected first byte of signature");
-#endif
-
-    UA_SecureConversationMessageHeader_deleteMembers(&header);
-    UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymSecurityHeader);
-    UA_SequenceHeader_deleteMembers(&sequenceHeader);
-    UA_OpenSecureChannelResponse_deleteMembers(&sentResponse);
-} END_TEST
-
-#ifdef UA_ENABLE_ENCRYPTION
-
-START_TEST(Securechannel_sendAsymmetricOPNMessage_extraPaddingPresentWhenKeyLargerThan2048Bits) {
-    keySizes.asym_rmt_enc_key_size = 4096;
-    keySizes.asym_rmt_blocksize = 4096;
-    keySizes.asym_rmt_ptext_blocksize = 4096;
-
-    UA_OpenSecureChannelResponse dummyResponse;
-    createDummyResponse(&dummyResponse);
-
-    testChannel.securityMode = UA_MESSAGESECURITYMODE_SIGNANDENCRYPT;
-    UA_UInt32 requestId = UA_UInt32_random();
-
-    UA_StatusCode retval =
-        UA_SecureChannel_sendAsymmetricOPNMessage(&testChannel, requestId, &dummyResponse,
-                                                  &UA_TYPES[UA_TYPES_OPENSECURECHANNELRESPONSE]);
-    ck_assert_msg(retval == UA_STATUSCODE_GOOD, "Expected function to succeed");
-
-    size_t offset = 0;
-    UA_SecureConversationMessageHeader header;
-    UA_SecureConversationMessageHeader_decodeBinary(&sentData, &offset, &header);
-
-    UA_AsymmetricAlgorithmSecurityHeader asymSecurityHeader;
-    UA_AsymmetricAlgorithmSecurityHeader_decodeBinary(&sentData, &offset, &asymSecurityHeader);
-    ck_assert_msg(UA_ByteString_equal(&dummyCertificate, &asymSecurityHeader.senderCertificate),
-                  "Expected the certificate to be equal to the one used  by the secureChannel");
-    ck_assert_msg(UA_ByteString_equal(&testChannel.securityPolicy->policyUri,
-                                      &asymSecurityHeader.securityPolicyUri),
-                  "Expected securityPolicyUri to be equal to the one used by the secureChannel");
-    UA_ByteString thumbPrint = {20, testChannel.remoteCertificateThumbprint};
-    ck_assert_msg(UA_ByteString_equal(&thumbPrint,
-                                      &asymSecurityHeader.receiverCertificateThumbprint),
-                  "Expected receiverCertificateThumbprint to be equal to the one set "
-                  "in the secureChannel");
-
-    for(size_t i = offset; i < header.messageHeader.messageSize; ++i) {
-        sentData.data[i] = (UA_Byte)((sentData.data[i] - 1) % (UA_BYTE_MAX + 1));
-    }
-
-    UA_SequenceHeader sequenceHeader;
-    UA_SequenceHeader_decodeBinary(&sentData, &offset, &sequenceHeader);
-    ck_assert_msg(sequenceHeader.requestId == requestId, "Expected requestId to be %i but was %i",
-                  requestId, sequenceHeader.requestId);
-
-    UA_NodeId original =
-        UA_NODEID_NUMERIC(0, UA_TYPES[UA_TYPES_OPENSECURECHANNELRESPONSE].binaryEncodingId);
-    UA_NodeId requestTypeId;
-    UA_NodeId_decodeBinary(&sentData, &offset, &requestTypeId);
-    ck_assert_msg(UA_NodeId_equal(&original, &requestTypeId), "Expected nodeIds to be equal");
-
-    UA_OpenSecureChannelResponse sentResponse;
-    UA_OpenSecureChannelResponse_decodeBinary(&sentData, &offset, &sentResponse);
-
-    ck_assert_msg(memcmp(&sentResponse, &dummyResponse, sizeof(UA_OpenSecureChannelResponse)) == 0,
-                  "Expected the sent response to be equal to the one supplied to the send function");
-
-    UA_Byte paddingByte = sentData.data[offset];
-    UA_Byte extraPaddingByte = sentData.data[sentData.length - keySizes.asym_lcl_sig_size - 1];
-    size_t paddingSize = (size_t)paddingByte;
-    paddingSize |= extraPaddingByte << 8;
-
-    for(size_t i = 0; i <= paddingSize; ++i) {
-        ck_assert_msg(sentData.data[offset + i] == paddingByte,
-                      "Expected padding byte %i to be %i but got value %i",
-                      i,
-                      paddingByte,
-                      sentData.data[offset + i]);
-    }
-
-    ck_assert_msg(sentData.data[offset + paddingSize + 1] == extraPaddingByte,
-                  "Expected extra padding byte to be %i but got %i",
-                  extraPaddingByte, sentData.data[offset + paddingSize + 1]);
-    ck_assert_msg(sentData.data[offset + paddingSize + 2] == '*',
-                  "Expected first byte 42 of signature but got %i",
-                  sentData.data[offset + paddingSize + 2]);
-
-    UA_SecureConversationMessageHeader_deleteMembers(&header);
-    UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymSecurityHeader);
-    UA_SequenceHeader_deleteMembers(&sequenceHeader);
-    UA_OpenSecureChannelResponse_deleteMembers(&sentResponse);
-}END_TEST
-
-#endif /* UA_ENABLE_ENCRYPTION */
-
-START_TEST(SecureChannel_sendSymmetricMessage) {
-    // initialize dummy message
-    UA_ReadRequest dummyMessage;
-    UA_ReadRequest_init(&dummyMessage);
-    UA_DataType dummyType = UA_TYPES[UA_TYPES_READREQUEST];
-
-    UA_StatusCode retval = UA_SecureChannel_sendSymmetricMessage(&testChannel, 42, UA_MESSAGETYPE_MSG,
-                                                                 &dummyMessage, &dummyType);
-    ck_assert_msg(retval == UA_STATUSCODE_GOOD, "Expected success");
-    // TODO: expand test
-}
-END_TEST
-
-START_TEST(SecureChannel_sendSymmetricMessage_modeNone) {
-    // initialize dummy message
-    UA_ReadRequest dummyMessage;
-    UA_ReadRequest_init(&dummyMessage);
-    UA_DataType dummyType = UA_TYPES[UA_TYPES_READREQUEST];
-
-    testChannel.securityMode = UA_MESSAGESECURITYMODE_NONE;
-
-    UA_StatusCode retval = UA_SecureChannel_sendSymmetricMessage(&testChannel, 42, UA_MESSAGETYPE_MSG,
-                                                                 &dummyMessage, &dummyType);
-    ck_assert_msg(retval == UA_STATUSCODE_GOOD, "Expected success");
-    ck_assert_msg(!fCalled.sym_sign, "Expected message to not have been signed");
-    ck_assert_msg(!fCalled.sym_enc, "Expected message to not have been encrypted");
-} END_TEST
-
-#ifdef UA_ENABLE_ENCRYPTION
-
-START_TEST(SecureChannel_sendSymmetricMessage_modeSign) {
-    // initialize dummy message
-    UA_ReadRequest dummyMessage;
-    UA_ReadRequest_init(&dummyMessage);
-    UA_DataType dummyType = UA_TYPES[UA_TYPES_READREQUEST];
-
-    testChannel.securityMode = UA_MESSAGESECURITYMODE_SIGN;
-
-    UA_StatusCode retval = UA_SecureChannel_sendSymmetricMessage(&testChannel, 42, UA_MESSAGETYPE_MSG,
-                                                                 &dummyMessage, &dummyType);
-    ck_assert_msg(retval == UA_STATUSCODE_GOOD, "Expected success");
-    ck_assert_msg(fCalled.sym_sign, "Expected message to have been signed");
-    ck_assert_msg(!fCalled.sym_enc, "Expected message to not have been encrypted");
-} END_TEST
-
-START_TEST(SecureChannel_sendSymmetricMessage_modeSignAndEncrypt)
-{
-    // initialize dummy message
-    UA_ReadRequest dummyMessage;
-    UA_ReadRequest_init(&dummyMessage);
-    UA_DataType dummyType = UA_TYPES[UA_TYPES_READREQUEST];
-
-    testChannel.securityMode = UA_MESSAGESECURITYMODE_SIGNANDENCRYPT;
-
-    UA_StatusCode retval = UA_SecureChannel_sendSymmetricMessage(&testChannel, 42, UA_MESSAGETYPE_MSG,
-                                                                 &dummyMessage, &dummyType);
-    ck_assert_msg(retval == UA_STATUSCODE_GOOD, "Expected success");
-    ck_assert_msg(fCalled.sym_sign, "Expected message to have been signed");
-    ck_assert_msg(fCalled.sym_enc, "Expected message to have been encrypted");
-} END_TEST
-
-#endif /* UA_ENABLE_ENCRYPTION */
-
-START_TEST(SecureChannel_sendSymmetricMessage_invalidParameters) {
-    // initialize dummy message
-    UA_ReadRequest dummyMessage;
-    UA_ReadRequest_init(&dummyMessage);
-    UA_DataType dummyType = UA_TYPES[UA_TYPES_READREQUEST];
-
-    UA_StatusCode retval = UA_SecureChannel_sendSymmetricMessage(NULL, 42, UA_MESSAGETYPE_MSG,
-                                                                 &dummyMessage, &dummyType);
-    ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected failure");
-
-    retval = UA_SecureChannel_sendSymmetricMessage(&testChannel, 42,
-                                                   UA_MESSAGETYPE_HEL, &dummyMessage, &dummyType);
-    ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected failure");
-
-    retval = UA_SecureChannel_sendSymmetricMessage(&testChannel, 42,
-                                                   UA_MESSAGETYPE_ACK, &dummyMessage, &dummyType);
-    ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected failure");
-
-    retval = UA_SecureChannel_sendSymmetricMessage(&testChannel, 42,
-                                                   UA_MESSAGETYPE_ERR, &dummyMessage, &dummyType);
-    ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected failure");
-
-    retval = UA_SecureChannel_sendSymmetricMessage(&testChannel, 42,
-                                                   UA_MESSAGETYPE_OPN, &dummyMessage, &dummyType);
-    ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected failure");
-
-    retval = UA_SecureChannel_sendSymmetricMessage(&testChannel, 42,
-                                                   UA_MESSAGETYPE_MSG, NULL, &dummyType);
-    ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected failure");
-
-    retval = UA_SecureChannel_sendSymmetricMessage(&testChannel, 42,
-                                                   UA_MESSAGETYPE_MSG, &dummyMessage, NULL);
-    ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected failure");
-} END_TEST
-
-static Suite *
-testSuite_SecureChannel(void) {
-    Suite *s = suite_create("SecureChannel");
-
-    TCase *tc_initAndDelete = tcase_create("Initialize and delete Securechannel");
-    tcase_add_checked_fixture(tc_initAndDelete, setup_funcs_called, teardown_funcs_called);
-    tcase_add_checked_fixture(tc_initAndDelete, setup_key_sizes, teardown_key_sizes);
-    tcase_add_test(tc_initAndDelete, SecureChannel_initAndDelete);
-    suite_add_tcase(s, tc_initAndDelete);
-
-    TCase *tc_generateNewKeys = tcase_create("Test generateNewKeys function");
-    tcase_add_checked_fixture(tc_generateNewKeys, setup_funcs_called, teardown_funcs_called);
-    tcase_add_checked_fixture(tc_generateNewKeys, setup_key_sizes, teardown_key_sizes);
-    tcase_add_checked_fixture(tc_generateNewKeys, setup_secureChannel, teardown_secureChannel);
-    tcase_add_test(tc_generateNewKeys, SecureChannel_generateNewKeys);
-    suite_add_tcase(s, tc_generateNewKeys);
-
-    TCase *tc_revolveTokens = tcase_create("Test revolveTokens function");
-    tcase_add_checked_fixture(tc_revolveTokens, setup_funcs_called, teardown_funcs_called);
-    tcase_add_checked_fixture(tc_revolveTokens, setup_key_sizes, teardown_key_sizes);
-    tcase_add_checked_fixture(tc_revolveTokens, setup_secureChannel, teardown_secureChannel);
-    tcase_add_test(tc_revolveTokens, SecureChannel_revolveTokens);
-    suite_add_tcase(s, tc_revolveTokens);
-
-    TCase *tc_sendAsymmetricOPNMessage = tcase_create("Test sendAsymmetricOPNMessage function");
-    tcase_add_checked_fixture(tc_sendAsymmetricOPNMessage, setup_funcs_called, teardown_funcs_called);
-    tcase_add_checked_fixture(tc_sendAsymmetricOPNMessage, setup_key_sizes, teardown_key_sizes);
-    tcase_add_checked_fixture(tc_sendAsymmetricOPNMessage, setup_secureChannel, teardown_secureChannel);
-    tcase_add_test(tc_sendAsymmetricOPNMessage, SecureChannel_sendAsymmetricOPNMessage_withoutConnection);
-    tcase_add_test(tc_sendAsymmetricOPNMessage, SecureChannel_sendAsymmetricOPNMessage_invalidParameters);
-    tcase_add_test(tc_sendAsymmetricOPNMessage, SecureChannel_sendAsymmetricOPNMessage_SecurityModeInvalid);
-    tcase_add_test(tc_sendAsymmetricOPNMessage, SecureChannel_sendAsymmetricOPNMessage_SecurityModeNone);
-    tcase_add_test(tc_sendAsymmetricOPNMessage, SecureChannel_sendAsymmetricOPNMessage_sentDataIsValid);
-#ifdef UA_ENABLE_ENCRYPTION
-    tcase_add_test(tc_sendAsymmetricOPNMessage, SecureChannel_sendAsymmetricOPNMessage_SecurityModeSign);
-    tcase_add_test(tc_sendAsymmetricOPNMessage, SecureChannel_sendAsymmetricOPNMessage_SecurityModeSignAndEncrypt);
-    tcase_add_test(tc_sendAsymmetricOPNMessage,
-                   Securechannel_sendAsymmetricOPNMessage_extraPaddingPresentWhenKeyLargerThan2048Bits);
-#endif
-    suite_add_tcase(s, tc_sendAsymmetricOPNMessage);
-
-    TCase *tc_sendSymmetricMessage = tcase_create("Test sendSymmetricMessage function");
-    tcase_add_checked_fixture(tc_sendSymmetricMessage, setup_funcs_called, teardown_funcs_called);
-    tcase_add_checked_fixture(tc_sendSymmetricMessage, setup_key_sizes, teardown_key_sizes);
-    tcase_add_checked_fixture(tc_sendSymmetricMessage, setup_secureChannel, teardown_secureChannel);
-    tcase_add_test(tc_sendSymmetricMessage, SecureChannel_sendSymmetricMessage);
-    tcase_add_test(tc_sendSymmetricMessage, SecureChannel_sendSymmetricMessage_invalidParameters);
-    tcase_add_test(tc_sendSymmetricMessage, SecureChannel_sendSymmetricMessage_modeNone);
-#ifdef UA_ENABLE_ENCRYPTION
-    tcase_add_test(tc_sendSymmetricMessage, SecureChannel_sendSymmetricMessage_modeSign);
-    tcase_add_test(tc_sendSymmetricMessage, SecureChannel_sendSymmetricMessage_modeSignAndEncrypt);
-#endif
-    suite_add_tcase(s, tc_sendSymmetricMessage);
-
-    return s;
-}
-
-int
-main(void) {
-    Suite *s = testSuite_SecureChannel();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/check_timer.c b/ext/open62541/tests/check_timer.c
deleted file mode 100644
index 24f1bbe..0000000
--- a/ext/open62541/tests/check_timer.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public 
- * License, v. 2.0. If a copy of the MPL was not distributed with this 
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "ua_timer.h"
-#include "check.h"
-
-#include <time.h>
-#include <stdio.h>
-
-#define N_EVENTS 10000
-
-size_t count = 0;
-
-static void
-timerCallback(void *application, void *data) {
-    count++;
-}
-
-static void
-executionCallback(void *executionApplication, UA_ApplicationCallback cb,
-                  void *callbackApplication, void *data) {
-    cb(callbackApplication, data);
-}
-
-/* Create empty events with different callback intervals */
-static void
-createEvents(UA_Timer *t, UA_UInt32 events) {
-    for(size_t i = 0; i < events; i++) {
-        UA_Double interval = (UA_Double)i+1;
-        UA_StatusCode retval =
-            UA_Timer_addRepeatedCallback(t, timerCallback, NULL, NULL, interval, NULL);
-        ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    }
-}
-
-START_TEST(benchmarkTimer) {
-    UA_Timer timer;
-    UA_Timer_init(&timer);
-    createEvents(&timer, N_EVENTS);
-
-    clock_t begin = clock();
-    UA_DateTime now = 0;
-    for(size_t i = 0; i < 1000; i++) {
-        UA_DateTime next = UA_Timer_process(&timer, now, executionCallback, NULL);
-        /* At least 100 msec distance between _process */
-        now = next + (UA_DATETIME_MSEC * 100);
-        if(next > now)
-            now = next;
-    }
-
-    clock_t finish = clock();
-    double time_spent = (double)(finish - begin) / CLOCKS_PER_SEC;
-    printf("duration was %f s\n", time_spent);
-    printf("%lu callbacks\n", (unsigned long)count);
-
-    UA_Timer_deleteMembers(&timer);
-} END_TEST
-
-int main(void) {
-    Suite *s  = suite_create("Test Event Timer");
-    TCase *tc = tcase_create("test cases");
-    tcase_add_test(tc, benchmarkTimer);
-    suite_add_tcase(s, tc);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all (sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/check_types_builtin.c b/ext/open62541/tests/check_types_builtin.c
deleted file mode 100644
index ba00bf2..0000000
--- a/ext/open62541/tests/check_types_builtin.c
+++ /dev/null
@@ -1,1559 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/types.h>
-#include <open62541/types_generated.h>
-#include <open62541/types_generated_encoding_binary.h>
-#include <open62541/types_generated_handling.h>
-#include <open62541/util.h>
-
-#include "ua_types_encoding_binary.h"
-
-#include <check.h>
-#include <float.h>
-#include <math.h>
-
-/* copied here from encoding_binary.c */
-enum UA_VARIANT_ENCODINGMASKTYPE_enum {
-    UA_VARIANT_ENCODINGMASKTYPE_TYPEID_MASK = 0x3F,            // bits 0:5
-    UA_VARIANT_ENCODINGMASKTYPE_DIMENSIONS  = (0x01 << 6),     // bit 6
-    UA_VARIANT_ENCODINGMASKTYPE_ARRAY       = (0x01 << 7)      // bit 7
-};
-
-START_TEST(UA_Byte_decodeShallCopyAndAdvancePosition) {
-    // given
-    UA_Byte dst;
-    UA_Byte data[] = { 0x08 };
-    UA_ByteString src = { 1, data };
-    size_t pos = 0;
-
-    // when
-    UA_StatusCode retval = UA_Byte_decodeBinary(&src, &pos, &dst);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(pos, 1);
-    ck_assert_uint_eq(pos, UA_calcSizeBinary(&dst, &UA_TYPES[UA_TYPES_BYTE]));
-    ck_assert_uint_eq(dst, 0x08);
-}
-END_TEST
-
-START_TEST(UA_Byte_decodeShallModifyOnlyCurrentPosition) {
-    // given
-    UA_Byte dst[]  = { 0xFF, 0xFF, 0xFF };
-    UA_Byte data[] = { 0x08 };
-    UA_ByteString src = { 1, data };
-    size_t pos = 0;
-    // when
-    UA_StatusCode retval = UA_Byte_decodeBinary(&src, &pos, &dst[1]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(pos, 1);
-    ck_assert_uint_eq(dst[0], 0xFF);
-    ck_assert_uint_eq(dst[1], 0x08);
-    ck_assert_uint_eq(dst[2], 0xFF);
-}
-END_TEST
-
-START_TEST(UA_Int16_decodeShallAssumeLittleEndian) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = {
-            0x01, 0x00,     // 1
-            0x00, 0x01      // 256
-    };
-    UA_ByteString src = { 4, data };
-    // when
-    UA_Int16 val_01_00, val_00_01;
-    UA_StatusCode retval = UA_Int16_decodeBinary(&src, &pos, &val_01_00);
-    retval |= UA_Int16_decodeBinary(&src, &pos, &val_00_01);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(val_01_00, 1);
-    ck_assert_int_eq(val_00_01, 256);
-    ck_assert_int_eq(pos, 4);
-}
-END_TEST
-
-START_TEST(UA_Int16_decodeShallRespectSign) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = {
-            0xFF, 0xFF,     // -1
-            0x00, 0x80      // -32768
-    };
-    UA_ByteString src = { 4, data };
-    // when
-    UA_Int16 val_ff_ff, val_00_80;
-    UA_StatusCode retval = UA_Int16_decodeBinary(&src, &pos, &val_ff_ff);
-    retval |= UA_Int16_decodeBinary(&src, &pos, &val_00_80);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(val_ff_ff, -1);
-    ck_assert_int_eq(val_00_80, -32768);
-}
-END_TEST
-
-START_TEST(UA_UInt16_decodeShallNotRespectSign) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = {
-            0xFF, 0xFF,     // (2^16)-1
-            0x00, 0x80      // (2^15)
-    };
-    UA_ByteString src = { 4, data };
-    // when
-    UA_UInt16     val_ff_ff, val_00_80;
-    UA_StatusCode retval = UA_UInt16_decodeBinary(&src, &pos, &val_ff_ff);
-    retval |= UA_UInt16_decodeBinary(&src, &pos, &val_00_80);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(pos, 4);
-    ck_assert_uint_eq(val_ff_ff, (0x01 << 16)-1);
-    ck_assert_uint_eq(val_00_80, (0x01 << 15));
-}
-END_TEST
-
-START_TEST(UA_Int32_decodeShallAssumeLittleEndian) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = {
-            0x01, 0x00, 0x00, 0x00,     // 1
-            0x00, 0x01, 0x00, 0x00      // 256
-    };
-    UA_ByteString src = { 8, data };
-
-    // when
-    UA_Int32 val_01_00, val_00_01;
-    UA_StatusCode retval = UA_Int32_decodeBinary(&src, &pos, &val_01_00);
-    retval |= UA_Int32_decodeBinary(&src, &pos, &val_00_01);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(val_01_00, 1);
-    ck_assert_int_eq(val_00_01, 256);
-    ck_assert_int_eq(pos, 8);
-}
-END_TEST
-
-START_TEST(UA_Int32_decodeShallRespectSign) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = {
-            0xFF, 0xFF, 0xFF, 0xFF,     // -1
-            0x00, 0x80, 0xFF, 0xFF      // -32768
-    };
-    UA_ByteString src = { 8, data };
-
-    // when
-    UA_Int32 val_ff_ff, val_00_80;
-    UA_StatusCode retval = UA_Int32_decodeBinary(&src, &pos, &val_ff_ff);
-    retval |= UA_Int32_decodeBinary(&src, &pos, &val_00_80);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(val_ff_ff, -1);
-    ck_assert_int_eq(val_00_80, -32768);
-}
-END_TEST
-
-START_TEST(UA_UInt32_decodeShallNotRespectSign) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = {
-            0xFF, 0xFF, 0xFF, 0xFF,     // (2^32)-1
-            0x00, 0x00, 0x00, 0x80      // (2^31)
-    };
-    UA_ByteString src = { 8, data };
-
-    // when
-    UA_UInt32 val_ff_ff, val_00_80;
-    UA_StatusCode retval = UA_UInt32_decodeBinary(&src, &pos, &val_ff_ff);
-    retval |= UA_UInt32_decodeBinary(&src, &pos, &val_00_80);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(pos, 8);
-    ck_assert_uint_eq(val_ff_ff, (UA_UInt32)( (0x01LL << 32 ) - 1 ));
-    ck_assert_uint_eq(val_00_80, (UA_UInt32)(0x01) << 31);
-}
-END_TEST
-
-START_TEST(UA_UInt64_decodeShallNotRespectSign) {
-    // given
-    UA_ByteString rawMessage;
-    UA_UInt64     expectedVal = 0xFF;
-    expectedVal = expectedVal << 56;
-    UA_Byte mem[8] = { 00, 00, 00, 00, 0x00, 0x00, 0x00, 0xFF };
-    rawMessage.data   = mem;
-    rawMessage.length = 8;
-    size_t pos = 0;
-    UA_UInt64 val;
-    // when
-    UA_UInt64_decodeBinary(&rawMessage, &pos, &val);
-    // then
-    ck_assert_uint_eq(val, expectedVal);
-}
-END_TEST
-
-START_TEST(UA_Int64_decodeShallRespectSign) {
-    // given
-    UA_ByteString rawMessage;
-    UA_UInt64 expectedVal = (UA_UInt64)0xFF << 56;
-    UA_Byte  mem[8]      = { 00, 00, 00, 00, 0x00, 0x00, 0x00, 0xFF };
-    rawMessage.data   = mem;
-    rawMessage.length = 8;
-
-    size_t pos = 0;
-    UA_Int64 val;
-    // when
-    UA_Int64_decodeBinary(&rawMessage, &pos, &val);
-    //then
-    ck_assert_uint_eq(val, expectedVal);
-}
-END_TEST
-
-START_TEST(UA_Float_decodeShallWorkOnExample) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = { 0x00, 0x00, 0xD0, 0xC0 }; // -6.5
-    UA_ByteString src = { 4, data };
-    UA_Float dst;
-    // when
-    UA_StatusCode retval = UA_Float_decodeBinary(&src, &pos, &dst);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(pos, 4);
-    ck_assert(-6.5000001 < dst);
-    ck_assert(dst < -6.49999999999);
-}
-END_TEST
-
-START_TEST(UA_Double_decodeShallGiveOne) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F }; // 1
-    UA_ByteString src = { 8, data }; // 1
-    UA_Double dst;
-    // when
-    UA_StatusCode retval = UA_Double_decodeBinary(&src, &pos, &dst);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(pos, 8);
-    ck_assert(0.9999999 < dst);
-    ck_assert(dst < 1.00000000001);
-}
-END_TEST
-
-START_TEST(UA_Double_decodeShallGiveZero) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-    UA_ByteString src = { 8, data }; // 1
-    UA_Double dst;
-    // when
-    UA_StatusCode retval = UA_Double_decodeBinary(&src, &pos, &dst);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(pos, 8);
-    ck_assert(-0.00000001 < dst);
-    ck_assert(dst < 0.000000001);
-}
-END_TEST
-
-START_TEST(UA_Double_decodeShallGiveMinusTwo) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0 }; // -2
-    UA_ByteString src = { 8, data };
-    UA_Double dst;
-    // when
-    UA_StatusCode retval = UA_Double_decodeBinary(&src, &pos, &dst);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(pos, 8);
-    ck_assert(-1.9999999 > dst);
-    ck_assert(dst > -2.00000000001);
-}
-END_TEST
-
-START_TEST(UA_Double_decodeShallGive2147483648) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x41 }; //2147483648
-    UA_ByteString src = { 8, data }; // 1
-    UA_Double dst;
-    // when
-    UA_StatusCode retval = UA_Double_decodeBinary(&src, &pos, &dst);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(pos, 8);
-    ck_assert(2147483647.9999999 <= dst);
-    ck_assert(dst <= 2147483648.00000001);
-}
-END_TEST
-
-START_TEST(UA_String_decodeShallAllocateMemoryAndCopyString) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] =
-    { 0x08, 0x00, 0x00, 0x00, 'A', 'C', 'P', 'L', 'T', ' ', 'U', 'A', 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
-    UA_ByteString src = { 16, data };
-    UA_String dst;
-    // when
-    UA_StatusCode retval = UA_String_decodeBinary(&src, &pos, &dst);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(dst.length, 8);
-    ck_assert_int_eq(dst.data[3], 'L');
-    ck_assert_uint_eq(pos, UA_calcSizeBinary(&dst, &UA_TYPES[UA_TYPES_STRING]));
-    // finally
-    UA_String_deleteMembers(&dst);
-}
-END_TEST
-
-START_TEST(UA_String_decodeWithNegativeSizeShallNotAllocateMemoryAndNullPtr) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] =
-    { 0xFF, 0xFF, 0xFF, 0xFF, 'A', 'C', 'P', 'L', 'T', ' ', 'U', 'A', 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
-    UA_ByteString src = { 16, data };
-    UA_String dst;
-    // when
-    UA_StatusCode retval = UA_String_decodeBinary(&src, &pos, &dst);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(dst.length, 0);
-    ck_assert_ptr_eq(dst.data, NULL);
-}
-END_TEST
-
-START_TEST(UA_String_decodeWithZeroSizeShallNotAllocateMemoryAndNullPtr) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] =
-    { 0x00, 0x00, 0x00, 0x00, 'A', 'C', 'P', 'L', 'T', ' ', 'U', 'A', 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
-    UA_ByteString src = { 17, data };
-    UA_String dst;
-    // when
-    UA_StatusCode retval = UA_String_decodeBinary(&src, &pos, &dst);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(dst.length, 0);
-    ck_assert_ptr_eq(dst.data, UA_EMPTY_ARRAY_SENTINEL);
-}
-END_TEST
-
-START_TEST(UA_NodeId_decodeTwoByteShallReadTwoBytesAndSetNamespaceToZero) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = { 0 /* UA_NODEIDTYPE_TWOBYTE */, 0x10 };
-    UA_ByteString src    = { 2, data };
-    UA_NodeId dst;
-    // when
-    UA_StatusCode retval = UA_NodeId_decodeBinary(&src, &pos, &dst);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(pos, 2);
-    ck_assert_uint_eq(pos, UA_calcSizeBinary(&dst, &UA_TYPES[UA_TYPES_NODEID]));
-    ck_assert_int_eq(dst.identifierType, UA_NODEIDTYPE_NUMERIC);
-    ck_assert_int_eq(dst.identifier.numeric, 16);
-    ck_assert_int_eq(dst.namespaceIndex, 0);
-}
-END_TEST
-
-START_TEST(UA_NodeId_decodeFourByteShallReadFourBytesAndRespectNamespace) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = { 1 /* UA_NODEIDTYPE_FOURBYTE */, 0x01, 0x00, 0x01 };
-    UA_ByteString src = { 4, data };
-    UA_NodeId dst;
-    // when
-    UA_StatusCode retval = UA_NodeId_decodeBinary(&src, &pos, &dst);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(pos, 4);
-    ck_assert_uint_eq(pos, UA_calcSizeBinary(&dst, &UA_TYPES[UA_TYPES_NODEID]));
-    ck_assert_int_eq(dst.identifierType, UA_NODEIDTYPE_NUMERIC);
-    ck_assert_int_eq(dst.identifier.numeric, 256);
-    ck_assert_int_eq(dst.namespaceIndex, 1);
-}
-END_TEST
-
-START_TEST(UA_NodeId_decodeStringShallAllocateMemory) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = { UA_NODEIDTYPE_STRING, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 'P', 'L', 'T' };
-    UA_ByteString src = { 10, data };
-    UA_NodeId dst;
-    // when
-    UA_StatusCode retval = UA_NodeId_decodeBinary(&src, &pos, &dst);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(pos, 10);
-    ck_assert_uint_eq(pos, UA_calcSizeBinary(&dst, &UA_TYPES[UA_TYPES_NODEID]));
-    ck_assert_int_eq(dst.identifierType, UA_NODEIDTYPE_STRING);
-    ck_assert_int_eq(dst.namespaceIndex, 1);
-    ck_assert_int_eq(dst.identifier.string.length, 3);
-    ck_assert_int_eq(dst.identifier.string.data[1], 'L');
-    // finally
-    UA_NodeId_deleteMembers(&dst);
-}
-END_TEST
-
-START_TEST(UA_Variant_decodeWithOutArrayFlagSetShallSetVTAndAllocateMemoryForArray) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = { (UA_Byte)UA_TYPES[UA_TYPES_INT32].typeId.identifier.numeric, 0xFF, 0x00, 0x00, 0x00 };
-    UA_ByteString src = { 5, data };
-    UA_Variant dst;
-    // when
-    UA_StatusCode retval = UA_Variant_decodeBinary(&src, &pos, &dst);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(pos, 5);
-    ck_assert_uint_eq(pos, UA_calcSizeBinary(&dst, &UA_TYPES[UA_TYPES_VARIANT]));
-    //ck_assert_ptr_eq((const void *)dst.type, (const void *)&UA_TYPES[UA_TYPES_INT32]); //does not compile in gcc 4.6
-    ck_assert_int_eq((uintptr_t)dst.type, (uintptr_t)&UA_TYPES[UA_TYPES_INT32]);
-    ck_assert_int_eq(dst.arrayLength, 0);
-    ck_assert_int_ne((uintptr_t)dst.data, 0);
-    UA_assert(dst.data != NULL); /* repeat the previous argument so that clang-analyzer is happy */
-    ck_assert_int_eq(*(UA_Int32 *)dst.data, 255);
-    // finally
-    UA_Variant_deleteMembers(&dst);
-}
-END_TEST
-
-START_TEST(UA_Variant_decodeWithArrayFlagSetShallSetVTAndAllocateMemoryForArray) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = { (UA_Byte)(UA_TYPES[UA_TYPES_INT32].typeId.identifier.numeric |
-                                 UA_VARIANT_ENCODINGMASKTYPE_ARRAY),
-                       0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF,
-                       0xFF, 0xFF };
-    UA_ByteString src = { 13, data };
-    UA_Variant dst;
-    // when
-    UA_StatusCode retval = UA_Variant_decodeBinary(&src, &pos, &dst);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(pos, 1+4+2*4);
-    ck_assert_uint_eq(pos, UA_calcSizeBinary(&dst, &UA_TYPES[UA_TYPES_VARIANT]));
-    //ck_assert_ptr_eq((const (void*))dst.type, (const void*)&UA_TYPES[UA_TYPES_INT32]); //does not compile in gcc 4.6
-    ck_assert_int_eq((uintptr_t)dst.type,(uintptr_t)&UA_TYPES[UA_TYPES_INT32]);
-    ck_assert_int_eq(dst.arrayLength, 2);
-    ck_assert_int_eq(((UA_Int32 *)dst.data)[0], 255);
-    ck_assert_int_eq(((UA_Int32 *)dst.data)[1], -1);
-    // finally
-    UA_Variant_deleteMembers(&dst);
-}
-END_TEST
-
-START_TEST(UA_Variant_decodeSingleExtensionObjectShallSetVTAndAllocateMemory){
-    /* // given */
-    /* size_t pos = 0; */
-    /* UA_Variant dst; */
-    /* UA_NodeId tmpNodeId; */
-
-    /* UA_NodeId_init(&tmpNodeId); */
-    /* tmpNodeId.identifier.numeric = 22; */
-    /* tmpNodeId.namespaceIndex = 2; */
-    /* tmpNodeId.identifierType = UA_NODEIDTYPE_NUMERIC; */
-
-    /* UA_ExtensionObject tmpExtensionObject; */
-    /* UA_ExtensionObject_init(&tmpExtensionObject); */
-    /* tmpExtensionObject.encoding = UA_EXTENSIONOBJECT_ENCODED_BYTESTRING; */
-    /* tmpExtensionObject.content.encoded.body = UA_ByteString_withSize(3); */
-    /* tmpExtensionObject.content.encoded.body.data[0]= 10; */
-    /* tmpExtensionObject.content.encoded.body.data[1]= 20; */
-    /* tmpExtensionObject.content.encoded.body.data[2]= 30; */
-    /* tmpExtensionObject.content.encoded.typeId = tmpNodeId; */
-
-    /* UA_Variant tmpVariant; */
-    /* UA_Variant_init(&tmpVariant); */
-    /* tmpVariant.arrayDimensions = NULL; */
-    /* tmpVariant.arrayDimensionsSize = -1; */
-    /* tmpVariant.arrayLength = -1; */
-    /* tmpVariant.storageType = UA_VARIANT_DATA_NODELETE; */
-    /* tmpVariant.type = &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]; */
-    /* tmpVariant.data = &tmpExtensionObject; */
-
-    /* UA_ByteString srcByteString = UA_ByteString_withSize(200); */
-    /* pos = 0; */
-    /* UA_Variant_encodeBinary(&tmpVariant,&srcByteString,pos); */
-
-    /* // when */
-    /* pos = 0; */
-    /* UA_StatusCode retval = UA_Variant_decodeBinary(&srcByteString, &pos, &dst); */
-    /* // then */
-    /* ck_assert_int_eq(retval, UA_STATUSCODE_GOOD); */
-    /* // TODO!! */
-    /* /\* ck_assert_int_eq(dst.encoding, UA_EXTENSIONOBJECT_DECODED); *\/ */
-    /* /\* ck_assert_int_eq((uintptr_t)dst.content.decoded.type, (uintptr_t)&UA_TYPES[UA_TYPES_EXTENSIONOBJECT]); *\/ */
-    /* /\* ck_assert_int_eq(dst.arrayLength, -1); *\/ */
-    /* /\* ck_assert_int_eq(((UA_ExtensionObject *)dst.data)->body.data[0], 10); *\/ */
-    /* /\* ck_assert_int_eq(((UA_ExtensionObject *)dst.data)->body.data[1], 20); *\/ */
-    /* /\* ck_assert_int_eq(((UA_ExtensionObject *)dst.data)->body.data[2], 30); *\/ */
-    /* /\* ck_assert_int_eq(((UA_ExtensionObject *)dst.data)->body.length, 3); *\/ */
-
-
-    /* // finally */
-    /* UA_Variant_deleteMembers(&dst); */
-    /* UA_ByteString_deleteMembers(&srcByteString); */
-    /* UA_ExtensionObject_deleteMembers(&tmpExtensionObject); */
-
-}
-END_TEST
-
-START_TEST(UA_Variant_decodeWithOutDeleteMembersShallFailInCheckMem) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = { (UA_Byte)(UA_TYPES[UA_TYPES_INT32].typeId.identifier.numeric |
-                                 UA_VARIANT_ENCODINGMASKTYPE_ARRAY),
-                       0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF };
-    UA_ByteString src = { 13, data };
-    UA_Variant dst;
-    // when
-    UA_StatusCode retval = UA_Variant_decodeBinary(&src, &pos, &dst);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    // finally
-    UA_Variant_deleteMembers(&dst);
-}
-END_TEST
-
-START_TEST(UA_Variant_decodeWithTooSmallSourceShallReturnWithError) {
-    // given
-    size_t pos = 0;
-    UA_Byte data[] = { (UA_Byte)(UA_TYPES[UA_TYPES_INT32].typeId.identifier.numeric |
-                                 UA_VARIANT_ENCODINGMASKTYPE_ARRAY),
-                       0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF };
-    UA_ByteString src = { 4, data };
-
-    UA_Variant dst;
-    // when
-    UA_StatusCode retval = UA_Variant_decodeBinary(&src, &pos, &dst);
-    // then
-    ck_assert_int_ne(retval, UA_STATUSCODE_GOOD);
-    // finally
-    UA_Variant_deleteMembers(&dst);
-}
-END_TEST
-
-START_TEST(UA_Byte_encode_test) {
-    // given
-    UA_Byte src       = 8;
-    UA_Byte data[]    = { 0x00, 0xFF };
-    UA_ByteString dst = { 2, data };
-    ck_assert_uint_eq(dst.data[1], 0xFF);
-
-    UA_Byte *pos = dst.data;
-    const UA_Byte *end = &dst.data[dst.length];
-    UA_StatusCode retval = UA_Byte_encodeBinary(&src, &pos, end);
-
-    ck_assert_uint_eq(dst.data[0], 0x08);
-    ck_assert_uint_eq(dst.data[1], 0xFF);
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 1);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    // Test2
-    // given
-    src = 0xFF;
-    dst.data[1] = 0x00;
-    pos = dst.data;
-    retval      = UA_Byte_encodeBinary(&src, &pos, end);
-
-    ck_assert_int_eq(dst.data[0], 0xFF);
-    ck_assert_int_eq(dst.data[1], 0x00);
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 1);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-}
-END_TEST
-
-START_TEST(UA_UInt16_encodeNegativeShallEncodeLittleEndian) {
-    // given
-    UA_UInt16     src    = -1;
-    UA_Byte       data[] = { 0x55, 0x55, 0x55, 0x55 };
-    UA_ByteString dst    = { 4, data };
-    UA_Byte *pos = dst.data;
-    const UA_Byte *end = &dst.data[dst.length];
-
-    // when test 1
-    UA_StatusCode retval = UA_UInt16_encodeBinary(&src, &pos, end);
-    // then test 1
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 2);
-    ck_assert_int_eq(dst.data[0], 0xFF);
-    ck_assert_int_eq(dst.data[1], 0xFF);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    // when test 2
-    src    = -32768;
-    retval = UA_UInt16_encodeBinary(&src, &pos, end);
-    // then test 2
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 4);
-    ck_assert_int_eq(dst.data[2], 0x00);
-    ck_assert_int_eq(dst.data[3], 0x80);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(UA_UInt16_encodeShallEncodeLittleEndian) {
-    // given
-    UA_UInt16     src    = 0;
-    UA_Byte       data[] = {  0x55, 0x55, 0x55, 0x55 };
-    UA_ByteString dst    = { 4, data };
-    UA_Byte *pos = dst.data;
-    const UA_Byte *end = &dst.data[dst.length];
-
-    // when test 1
-    UA_StatusCode retval = UA_UInt16_encodeBinary(&src, &pos, end);
-    // then test 1
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 2);
-    ck_assert_int_eq(dst.data[0], 0x00);
-    ck_assert_int_eq(dst.data[1], 0x00);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    // when test 2
-    src    = 32767;
-    retval = UA_UInt16_encodeBinary(&src, &pos, end);
-    // then test 2
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 4);
-    ck_assert_int_eq(dst.data[2], 0xFF);
-    ck_assert_int_eq(dst.data[3], 0x7F);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(UA_UInt32_encodeShallEncodeLittleEndian) {
-    // given
-    UA_UInt32     src    = -1;
-    UA_Byte       data[] = { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
-    UA_ByteString dst    = { 8, data };
-    UA_Byte *pos = dst.data;
-    const UA_Byte *end = &dst.data[dst.length];
-
-    // when test 1
-    UA_StatusCode retval = UA_UInt32_encodeBinary(&src, &pos, end);
-    // then test 1
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 4);
-    ck_assert_int_eq(dst.data[0], 0xFF);
-    ck_assert_int_eq(dst.data[1], 0xFF);
-    ck_assert_int_eq(dst.data[2], 0xFF);
-    ck_assert_int_eq(dst.data[3], 0xFF);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    // when test 2
-    src    = 0x0101FF00;
-    retval = UA_UInt32_encodeBinary(&src, &pos, end);
-    // then test 2
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 8);
-    ck_assert_int_eq(dst.data[4], 0x00);
-    ck_assert_int_eq(dst.data[5], 0xFF);
-    ck_assert_int_eq(dst.data[6], 0x01);
-    ck_assert_int_eq(dst.data[7], 0x01);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(UA_Int32_encodeShallEncodeLittleEndian) {
-    // given
-    UA_Int32 src    = 1;
-    UA_Byte  data[]   = { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
-    UA_ByteString dst = { 8, data };
-    UA_Byte *pos = dst.data;
-    const UA_Byte *end = &dst.data[dst.length];
-
-    // when test 1
-    UA_StatusCode retval = UA_Int32_encodeBinary(&src, &pos, end);
-    // then test 1
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 4);
-    ck_assert_int_eq(dst.data[0], 0x01);
-    ck_assert_int_eq(dst.data[1], 0x00);
-    ck_assert_int_eq(dst.data[2], 0x00);
-    ck_assert_int_eq(dst.data[3], 0x00);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    // when test 2
-    src    = 0x7FFFFFFF;
-    retval = UA_Int32_encodeBinary(&src, &pos, end);
-    // then test 2
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 8);
-    ck_assert_int_eq(dst.data[4], 0xFF);
-    ck_assert_int_eq(dst.data[5], 0xFF);
-    ck_assert_int_eq(dst.data[6], 0xFF);
-    ck_assert_int_eq(dst.data[7], 0x7F);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(UA_Int32_encodeNegativeShallEncodeLittleEndian) {
-    // given
-    UA_Int32 src    = -1;
-    UA_Byte  data[]   = {  0x55, 0x55,    0x55,  0x55, 0x55,  0x55,    0x55,  0x55 };
-    UA_ByteString dst = { 8, data };
-    UA_Byte *pos = dst.data;
-    const UA_Byte *end = &dst.data[dst.length];
-
-    // when test 1
-    UA_StatusCode retval = UA_Int32_encodeBinary(&src, &pos, end);
-    // then test 1
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 4);
-    ck_assert_int_eq(dst.data[0], 0xFF);
-    ck_assert_int_eq(dst.data[1], 0xFF);
-    ck_assert_int_eq(dst.data[2], 0xFF);
-    ck_assert_int_eq(dst.data[3], 0xFF);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(UA_UInt64_encodeShallWorkOnExample) {
-    // given
-    UA_UInt64     src    = -1;
-    UA_Byte       data[] = { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-                             0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
-    UA_ByteString dst    = { 16, data };
-    UA_Byte *pos = dst.data;
-    const UA_Byte *end = &dst.data[dst.length];
-
-    // when test 1
-    UA_StatusCode retval = UA_UInt64_encodeBinary(&src, &pos, end);
-    // then test 1
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 8);
-    ck_assert_int_eq(dst.data[0], 0xFF);
-    ck_assert_int_eq(dst.data[1], 0xFF);
-    ck_assert_int_eq(dst.data[2], 0xFF);
-    ck_assert_int_eq(dst.data[3], 0xFF);
-    ck_assert_int_eq(dst.data[4], 0xFF);
-    ck_assert_int_eq(dst.data[5], 0xFF);
-    ck_assert_int_eq(dst.data[6], 0xFF);
-    ck_assert_int_eq(dst.data[7], 0xFF);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    // when test 2
-    src    = 0x7F0033AA44EE6611;
-    retval = UA_UInt64_encodeBinary(&src, &pos, end);
-    // then test 2
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 16);
-    ck_assert_int_eq(dst.data[8], 0x11);
-    ck_assert_int_eq(dst.data[9], 0x66);
-    ck_assert_int_eq(dst.data[10], 0xEE);
-    ck_assert_int_eq(dst.data[11], 0x44);
-    ck_assert_int_eq(dst.data[12], 0xAA);
-    ck_assert_int_eq(dst.data[13], 0x33);
-    ck_assert_int_eq(dst.data[14], 0x00);
-    ck_assert_int_eq(dst.data[15], 0x7F);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(UA_Int64_encodeShallEncodeLittleEndian) {
-    // given
-    UA_Int64 src    = 0x7F0033AA44EE6611;
-    UA_Byte  data[]   = { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-                          0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
-    UA_ByteString dst = { 16, data };
-    UA_Byte *pos = dst.data;
-    const UA_Byte *end = &dst.data[dst.length];
-
-    // when test 1
-    UA_StatusCode retval = UA_Int64_encodeBinary(&src, &pos, end);
-    // then test 1
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 8);
-    ck_assert_int_eq(dst.data[0], 0x11);
-    ck_assert_int_eq(dst.data[1], 0x66);
-    ck_assert_int_eq(dst.data[2], 0xEE);
-    ck_assert_int_eq(dst.data[3], 0x44);
-    ck_assert_int_eq(dst.data[4], 0xAA);
-    ck_assert_int_eq(dst.data[5], 0x33);
-    ck_assert_int_eq(dst.data[6], 0x00);
-    ck_assert_int_eq(dst.data[7], 0x7F);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(UA_Int64_encodeNegativeShallEncodeLittleEndian) {
-    // given
-    UA_Int64 src    = -1;
-    UA_Byte  data[]   = { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-                          0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
-    UA_ByteString dst = { 16, data };
-    UA_Byte *pos = dst.data;
-    const UA_Byte *end = &dst.data[dst.length];
-
-    // when test 1
-    UA_StatusCode retval = UA_Int64_encodeBinary(&src, &pos, end);
-    // then test 1
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 8);
-    ck_assert_int_eq(dst.data[0], 0xFF);
-    ck_assert_int_eq(dst.data[1], 0xFF);
-    ck_assert_int_eq(dst.data[2], 0xFF);
-    ck_assert_int_eq(dst.data[3], 0xFF);
-    ck_assert_int_eq(dst.data[4], 0xFF);
-    ck_assert_int_eq(dst.data[5], 0xFF);
-    ck_assert_int_eq(dst.data[6], 0xFF);
-    ck_assert_int_eq(dst.data[7], 0xFF);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(UA_Float_encodeShallWorkOnExample) {
-#define UA_FLOAT_TESTS 9
-    /* use -NAN since the UA standard expected specific values for NAN with the
-       negative bit set */
-    UA_Float src[UA_FLOAT_TESTS] = {27.5f, -6.5f, 0.0f, -0.0f, -NAN, FLT_MAX, FLT_MIN, INFINITY, -INFINITY};
-    UA_Byte result[UA_FLOAT_TESTS][4] = {
-        {0x00, 0x00, 0xDC, 0x41}, // 27.5
-        {0x00, 0x00, 0xD0, 0xC0}, // -6.5
-        {0x00, 0x00, 0x00, 0x00}, // 0.0
-        {0x00, 0x00, 0x00, 0x80}, // -0.0
-        {0x00, 0x00, 0xC0, 0xFF}, // -NAN
-        {0xFF, 0xFF, 0x7F, 0x7F}, // FLT_MAX
-        {0x00, 0x00, 0x80, 0x00}, // FLT_MIN
-        {0x00, 0x00, 0x80, 0x7F}, // INF
-        {0x00, 0x00, 0x80, 0xFF} // -INF
-    };
-#if defined(_MSC_VER) || defined(__TINYC__)
-    /* On Visual Studio or TinyCC -NAN is encoded differently */
-    result[4][3] = 127;
-#endif
-
-    UA_Byte data[] = {0x55, 0x55, 0x55,  0x55};
-    UA_ByteString dst = {4, data};
-    const UA_Byte *end = &dst.data[dst.length];
-
-    for(size_t i = 0; i < 7; i++) {
-        UA_Byte *pos = dst.data;
-        UA_Int32 retval = UA_Float_encodeBinary(&src[i], &pos, end);
-        ck_assert_int_eq((uintptr_t)(pos - dst.data), 4);
-        ck_assert_int_eq(dst.data[0], result[i][0]);
-        ck_assert_int_eq(dst.data[1], result[i][1]);
-        ck_assert_int_eq(dst.data[2], result[i][2]);
-        ck_assert_int_eq(dst.data[3], result[i][3]);
-        ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    }
-}
-END_TEST
-
-START_TEST(UA_Double_encodeShallWorkOnExample) {
-    // given
-    UA_Double src = -6.5;
-    UA_Byte data[] = { 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
-                       0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55 };
-    UA_ByteString dst = {16,data};
-    UA_Byte *pos = dst.data;
-    const UA_Byte *end = &dst.data[dst.length];
-
-    // when test 1
-    UA_StatusCode retval = UA_Double_encodeBinary(&src, &pos, end);
-    // then test 1
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 8);
-    ck_assert_int_eq(dst.data[6], 0x1A);
-    ck_assert_int_eq(dst.data[7], 0xC0);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(UA_String_encodeShallWorkOnExample) {
-    // given
-    UA_String src;
-    src.length = 11;
-    UA_Byte mem[12] = "ACPLT OPCUA";
-    src.data = mem;
-
-    UA_Byte data[] = { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-                       0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-                       0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
-    UA_ByteString dst = { 24, data };
-    UA_Byte *pos = dst.data;
-    const UA_Byte *end = &dst.data[dst.length];
-
-    // when
-    UA_StatusCode retval = UA_String_encodeBinary(&src, &pos, end);
-    // then
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), sizeof(UA_Int32)+11);
-    ck_assert_uint_eq(sizeof(UA_Int32)+11, UA_calcSizeBinary(&src, &UA_TYPES[UA_TYPES_STRING]));
-    ck_assert_int_eq(dst.data[0], 11);
-    ck_assert_int_eq(dst.data[sizeof(UA_Int32)+0], 'A');
-    ck_assert_int_eq(dst.data[sizeof(UA_Int32)+1], 'C');
-    ck_assert_int_eq(dst.data[sizeof(UA_Int32)+2], 'P');
-    ck_assert_int_eq(dst.data[sizeof(UA_Int32)+3], 'L');
-    ck_assert_int_eq(dst.data[sizeof(UA_Int32)+4], 'T');
-    ck_assert_int_eq(dst.data[sizeof(UA_Int32)+5], 0x20); //Space
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(UA_ExpandedNodeId_encodeShallWorkOnExample) {
-    // given
-    UA_ExpandedNodeId src = UA_EXPANDEDNODEID_NUMERIC(0, 15);
-    src.namespaceUri = UA_STRING("testUri");
-
-    UA_Byte data[] = { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-                       0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-                       0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-                       0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
-    UA_ByteString dst = { 32, data };
-    UA_Byte *pos = dst.data;
-    const UA_Byte *end = &dst.data[dst.length];
-
-    // when
-    UA_StatusCode retval = UA_ExpandedNodeId_encodeBinary(&src, &pos, end);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 13);
-    ck_assert_uint_eq(13, UA_calcSizeBinary(&src, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]));
-    ck_assert_int_eq(dst.data[0], 0x80); // namespaceuri flag
-}
-END_TEST
-
-START_TEST(UA_DataValue_encodeShallWorkOnExampleWithoutVariant) {
-    // given
-    UA_DataValue src;
-    UA_DataValue_init(&src);
-    src.serverTimestamp = 80;
-    src.hasServerTimestamp = true;
-
-    UA_Byte data[] = { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-                       0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
-                       0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
-    UA_ByteString dst = { 24, data };
-    UA_Byte *pos = dst.data;
-    const UA_Byte *end = &dst.data[dst.length];
-
-    // when
-    UA_StatusCode retval = UA_DataValue_encodeBinary(&src, &pos, end);
-    // then
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 9);
-    ck_assert_uint_eq(9, UA_calcSizeBinary(&src, &UA_TYPES[UA_TYPES_DATAVALUE]));
-    ck_assert_int_eq(dst.data[0], 0x08); // encodingMask
-    ck_assert_int_eq(dst.data[1], 80);   // 8 Byte serverTimestamp
-    ck_assert_int_eq(dst.data[2], 0);
-    ck_assert_int_eq(dst.data[3], 0);
-    ck_assert_int_eq(dst.data[4], 0);
-    ck_assert_int_eq(dst.data[5], 0);
-    ck_assert_int_eq(dst.data[6], 0);
-    ck_assert_int_eq(dst.data[7], 0);
-    ck_assert_int_eq(dst.data[8], 0);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(UA_DataValue_encodeShallWorkOnExampleWithVariant) {
-    // given
-    UA_DataValue src;
-    UA_DataValue_init(&src);
-    src.serverTimestamp    = 80;
-    src.hasValue = true;
-    src.hasServerTimestamp = true;
-    src.value.type = &UA_TYPES[UA_TYPES_INT32];
-    src.value.arrayLength  = 0; // one element (encoded as not an array)
-    UA_Int32 vdata = 45;
-    src.value.data = (void *)&vdata;
-
-    UA_Byte data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-    UA_ByteString dst = { 24, data };
-    UA_Byte *pos = dst.data;
-    const UA_Byte *end = &dst.data[dst.length];
-
-    // when
-    UA_StatusCode retval = UA_DataValue_encodeBinary(&src, &pos, end);
-    // then
-    ck_assert_int_eq((uintptr_t)(pos - dst.data), 1+(1+4)+8);           // represents the length
-    ck_assert_uint_eq(1+(1+4)+8, UA_calcSizeBinary(&src, &UA_TYPES[UA_TYPES_DATAVALUE]));
-    ck_assert_int_eq(dst.data[0], 0x08 | 0x01); // encodingMask
-    ck_assert_int_eq(dst.data[1], 0x06);        // Variant's Encoding Mask - INT32
-    ck_assert_int_eq(dst.data[2], 45);          // the single value
-    ck_assert_int_eq(dst.data[3], 0);
-    ck_assert_int_eq(dst.data[4], 0);
-    ck_assert_int_eq(dst.data[5], 0);
-    ck_assert_int_eq(dst.data[6], 80);  // the server timestamp
-    ck_assert_int_eq(dst.data[7], 0);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(UA_DateTime_toStructShallWorkOnExample) {
-    // given
-    UA_DateTime src = 13974671891234567 + (11644473600 * 10000000); // ua counts since 1601, unix since 1970
-    //1397467189... is Mon, 14 Apr 2014 09:19:49 GMT
-    //...1234567 are the milli-, micro- and nanoseconds
-    UA_DateTimeStruct dst;
-
-    // when
-    dst = UA_DateTime_toStruct(src);
-    // then
-    ck_assert_int_eq(dst.nanoSec, 700);
-    ck_assert_int_eq(dst.microSec, 456);
-    ck_assert_int_eq(dst.milliSec, 123);
-
-    ck_assert_int_eq(dst.sec, 49);
-    ck_assert_int_eq(dst.min, 19);
-    ck_assert_int_eq(dst.hour, 9);
-
-    ck_assert_int_eq(dst.day, 14);
-    ck_assert_int_eq(dst.month, 4);
-    ck_assert_int_eq(dst.year, 2014);
-}
-END_TEST
-
-START_TEST(UA_QualifiedName_equalShallWorkOnExample) {
-    // given
-    UA_QualifiedName qn1 = UA_QUALIFIEDNAME(5, "tEsT123!");
-    UA_QualifiedName qn2 = UA_QUALIFIEDNAME(3, "tEsT123!");
-    UA_QualifiedName qn3 = UA_QUALIFIEDNAME(5, "tEsT1");
-    UA_QualifiedName qn4 = UA_QUALIFIEDNAME(5, "tEsT123!");
-
-    ck_assert(UA_QualifiedName_equal(&qn1, &qn2) == UA_FALSE);
-    ck_assert(UA_QualifiedName_equal(&qn1, &qn3) == UA_FALSE);
-    ck_assert(UA_QualifiedName_equal(&qn1, &qn4) == UA_TRUE);
-}
-END_TEST
-
-START_TEST(UA_ExtensionObject_copyShallWorkOnExample) {
-    // given
-    /* UA_Byte data[3] = { 1, 2, 3 }; */
-
-    /* UA_ExtensionObject value, valueCopied; */
-    /* UA_ExtensionObject_init(&value); */
-    /* UA_ExtensionObject_init(&valueCopied); */
-
-    //Todo!!
-    /* value.typeId = UA_TYPES[UA_TYPES_BYTE].typeId; */
-    /* value.encoding    = UA_EXTENSIONOBJECT_ENCODINGMASK_NOBODYISENCODED; */
-    /* value.encoding    = UA_EXTENSIONOBJECT_ENCODINGMASK_BODYISBYTESTRING; */
-    /* value.body.data   = data; */
-    /* value.body.length = 3; */
-
-    /* //when */
-    /* UA_ExtensionObject_copy(&value, &valueCopied); */
-
-    /* for(UA_Int32 i = 0;i < 3;i++) */
-    /*     ck_assert_int_eq(valueCopied.body.data[i], value.body.data[i]); */
-
-    /* ck_assert_int_eq(valueCopied.encoding, value.encoding); */
-    /* ck_assert_int_eq(valueCopied.typeId.identifierType, value.typeId.identifierType); */
-    /* ck_assert_int_eq(valueCopied.typeId.identifier.numeric, value.typeId.identifier.numeric); */
-
-    /* //finally */
-    /* value.body.data = NULL; // we cannot free the static string */
-    /* UA_ExtensionObject_deleteMembers(&value); */
-    /* UA_ExtensionObject_deleteMembers(&valueCopied); */
-}
-END_TEST
-
-START_TEST(UA_Array_copyByteArrayShallWorkOnExample) {
-    //given
-    UA_String testString;
-    UA_Byte  *dstArray;
-    UA_Int32  size = 5;
-    UA_Int32  i    = 0;
-    testString.data = (UA_Byte*)UA_malloc(size);
-    testString.data[0] = 'O';
-    testString.data[1] = 'P';
-    testString.data[2] = 'C';
-    testString.data[3] = 'U';
-    testString.data[4] = 'A';
-    testString.length  = 5;
-
-    //when
-    UA_StatusCode retval;
-    retval = UA_Array_copy((const void *)testString.data, 5, (void **)&dstArray, &UA_TYPES[UA_TYPES_BYTE]);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    //then
-    for(i = 0;i < size;i++)
-        ck_assert_int_eq(testString.data[i], dstArray[i]);
-
-    //finally
-    UA_String_deleteMembers(&testString);
-    UA_free((void *)dstArray);
-
-}
-END_TEST
-
-START_TEST(UA_Array_copyUA_StringShallWorkOnExample) {
-    // given
-    UA_Int32   i, j;
-    UA_String *srcArray = (UA_String*)UA_Array_new(3, &UA_TYPES[UA_TYPES_STRING]);
-    UA_String *dstArray;
-
-    srcArray[0] = UA_STRING_ALLOC("open");
-    srcArray[1] = UA_STRING_ALLOC("62541");
-    srcArray[2] = UA_STRING_ALLOC("opc ua");
-    //when
-    UA_StatusCode retval;
-    retval = UA_Array_copy((const void *)srcArray, 3, (void **)&dstArray, &UA_TYPES[UA_TYPES_STRING]);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    //then
-    for(i = 0;i < 3;i++) {
-        for(j = 0;j < 3;j++)
-            ck_assert_int_eq(srcArray[i].data[j], dstArray[i].data[j]);
-        ck_assert_int_eq(srcArray[i].length, dstArray[i].length);
-    }
-    //finally
-    UA_Array_delete(srcArray, 3, &UA_TYPES[UA_TYPES_STRING]);
-    UA_Array_delete(dstArray, 3, &UA_TYPES[UA_TYPES_STRING]);
-}
-END_TEST
-
-START_TEST(UA_DiagnosticInfo_copyShallWorkOnExample) {
-    //given
-    UA_DiagnosticInfo value, innerValue, copiedValue;
-    UA_String testString = (UA_String){5, (UA_Byte*)"OPCUA"};
-
-    UA_DiagnosticInfo_init(&value);
-    UA_DiagnosticInfo_init(&innerValue);
-    value.hasInnerDiagnosticInfo = true;
-    value.innerDiagnosticInfo = &innerValue;
-    value.hasAdditionalInfo = true;
-    value.additionalInfo = testString;
-
-    //when
-    UA_DiagnosticInfo_copy(&value, &copiedValue);
-
-    //then
-    for(size_t i = 0;i < testString.length;i++)
-        ck_assert_int_eq(copiedValue.additionalInfo.data[i], value.additionalInfo.data[i]);
-    ck_assert_int_eq(copiedValue.additionalInfo.length, value.additionalInfo.length);
-
-    ck_assert_int_eq(copiedValue.hasInnerDiagnosticInfo, value.hasInnerDiagnosticInfo);
-    ck_assert_int_eq(copiedValue.innerDiagnosticInfo->locale, value.innerDiagnosticInfo->locale);
-    ck_assert_int_eq(copiedValue.innerStatusCode, value.innerStatusCode);
-    ck_assert_int_eq(copiedValue.locale, value.locale);
-    ck_assert_int_eq(copiedValue.localizedText, value.localizedText);
-    ck_assert_int_eq(copiedValue.namespaceUri, value.namespaceUri);
-    ck_assert_int_eq(copiedValue.symbolicId, value.symbolicId);
-
-    //finally
-    value.additionalInfo.data = NULL; // do not delete the static string
-    value.innerDiagnosticInfo = NULL; // do not delete the static innerdiagnosticinfo
-    UA_DiagnosticInfo_deleteMembers(&value);
-    UA_DiagnosticInfo_deleteMembers(&copiedValue);
-
-}
-END_TEST
-
-START_TEST(UA_ApplicationDescription_copyShallWorkOnExample) {
-    //given
-
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    UA_String appString = (UA_String){3, (UA_Byte*)"APP"};
-    UA_String discString = (UA_String){4, (UA_Byte*)"DISC"};
-    UA_String gateWayString = (UA_String){7, (UA_Byte*)"GATEWAY"};
-
-    UA_String srcArray[3];
-    srcArray[0] = (UA_String){ 6, (UA_Byte*)"__open" };
-    srcArray[1] = (UA_String){ 6, (UA_Byte*)"_62541" };
-    srcArray[2] = (UA_String){ 6, (UA_Byte*)"opc ua" };
-
-    UA_ApplicationDescription value, copiedValue;
-    UA_ApplicationDescription_init(&value);
-    value.applicationUri = appString;
-    value.discoveryProfileUri = discString;
-    value.gatewayServerUri = gateWayString;
-    value.discoveryUrlsSize = 3;
-    value.discoveryUrls     = srcArray;
-
-    //when
-    retval = UA_ApplicationDescription_copy(&value, &copiedValue);
-
-    //then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    for(size_t i = 0; i < appString.length; i++)
-        ck_assert_int_eq(copiedValue.applicationUri.data[i], value.applicationUri.data[i]);
-    ck_assert_int_eq(copiedValue.applicationUri.length, value.applicationUri.length);
-
-    for(size_t i = 0; i < discString.length; i++)
-        ck_assert_int_eq(copiedValue.discoveryProfileUri.data[i], value.discoveryProfileUri.data[i]);
-    ck_assert_int_eq(copiedValue.discoveryProfileUri.length, value.discoveryProfileUri.length);
-
-    for(size_t i = 0; i < gateWayString.length; i++)
-        ck_assert_int_eq(copiedValue.gatewayServerUri.data[i], value.gatewayServerUri.data[i]);
-    ck_assert_int_eq(copiedValue.gatewayServerUri.length, value.gatewayServerUri.length);
-
-    //String Array Test
-    for(UA_Int32 i = 0;i < 3;i++) {
-        for(UA_Int32 j = 0;j < 6;j++)
-            ck_assert_int_eq(value.discoveryUrls[i].data[j], copiedValue.discoveryUrls[i].data[j]);
-        ck_assert_int_eq(value.discoveryUrls[i].length, copiedValue.discoveryUrls[i].length);
-    }
-    ck_assert_int_eq(copiedValue.discoveryUrls[0].data[2], 'o');
-    ck_assert_int_eq(copiedValue.discoveryUrls[0].data[3], 'p');
-    ck_assert_int_eq(copiedValue.discoveryUrlsSize, value.discoveryUrlsSize);
-
-    //finally
-    // UA_ApplicationDescription_deleteMembers(&value); // do not free the members as they are statically allocated
-    UA_ApplicationDescription_deleteMembers(&copiedValue);
-}
-END_TEST
-
-START_TEST(UA_QualifiedName_copyShallWorkOnInputExample) {
-    // given
-    UA_QualifiedName src = UA_QUALIFIEDNAME(5, "tEsT123!");
-    UA_QualifiedName dst;
-
-    // when
-    UA_StatusCode ret = UA_QualifiedName_copy(&src, &dst);
-    // then
-    ck_assert_int_eq(ret, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq('E', dst.name.data[1]);
-    ck_assert_int_eq('!', dst.name.data[7]);
-    ck_assert_int_eq(8, dst.name.length);
-    ck_assert_int_eq(5, dst.namespaceIndex);
-    // finally
-    UA_QualifiedName_deleteMembers(&dst);
-}
-END_TEST
-
-START_TEST(UA_Guid_copyShallWorkOnInputExample) {
-    //given
-    const UA_Guid src = {3, 45, 1222, {8, 7, 6, 5, 4, 3, 2, 1}};
-    UA_Guid dst;
-
-    //when
-    UA_StatusCode ret = UA_Guid_copy(&src, &dst);
-
-    //then
-    ck_assert_int_eq(ret, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(src.data1, dst.data1);
-    ck_assert_int_eq(src.data3, dst.data3);
-    ck_assert_int_eq(src.data4[4], dst.data4[4]);
-    //finally
-}
-END_TEST
-
-START_TEST(UA_LocalizedText_copycstringShallWorkOnInputExample) {
-    // given
-    char src[8] = {'t', 'e', 'X', 't', '1', '2', '3', (char)0};
-    const UA_LocalizedText dst = UA_LOCALIZEDTEXT("", src);
-
-    // then
-    ck_assert_int_eq('1', dst.text.data[4]);
-    ck_assert_int_eq(0, dst.locale.length);
-    ck_assert_int_eq(7, dst.text.length);
-}
-END_TEST
-
-START_TEST(UA_DataValue_copyShallWorkOnInputExample) {
-    // given
-    UA_Variant srcVariant;
-    UA_Variant_init(&srcVariant);
-    UA_DataValue src;
-    UA_DataValue_init(&src);
-    src.hasSourceTimestamp = true;
-    src.sourceTimestamp = 4;
-    src.hasSourcePicoseconds = true;
-    src.sourcePicoseconds = 77;
-    src.hasServerPicoseconds = true;
-    src.serverPicoseconds = 8;
-    UA_DataValue dst;
-
-    // when
-    UA_StatusCode ret = UA_DataValue_copy(&src, &dst);
-    // then
-    ck_assert_int_eq(ret, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(4, dst.sourceTimestamp);
-    ck_assert_int_eq(77, dst.sourcePicoseconds);
-    ck_assert_int_eq(8, dst.serverPicoseconds);
-}
-END_TEST
-
-START_TEST(UA_Variant_copyShallWorkOnSingleValueExample) {
-    //given
-    UA_String testString = (UA_String){5, (UA_Byte*)"OPCUA"};
-    UA_Variant value, copiedValue;
-    UA_Variant_init(&value);
-    UA_Variant_init(&copiedValue);
-    value.data = UA_malloc(sizeof(UA_String));
-    *((UA_String*)value.data) = testString;
-    value.type = &UA_TYPES[UA_TYPES_STRING];
-    value.arrayLength = 1;
-
-    //when
-    UA_Variant_copy(&value, &copiedValue);
-
-    //then
-    UA_String copiedString = *(UA_String*)(copiedValue.data);
-    for(UA_Int32 i = 0;i < 5;i++)
-        ck_assert_int_eq(copiedString.data[i], testString.data[i]);
-    ck_assert_int_eq(copiedString.length, testString.length);
-
-    ck_assert_int_eq(value.arrayDimensionsSize, copiedValue.arrayDimensionsSize);
-    ck_assert_int_eq(value.arrayLength, copiedValue.arrayLength);
-
-    //finally
-    ((UA_String*)value.data)->data = NULL; // the string is statically allocated. do not free it.
-    UA_Variant_deleteMembers(&value);
-    UA_Variant_deleteMembers(&copiedValue);
-}
-END_TEST
-
-START_TEST(UA_Variant_copyShallWorkOnByteStringIndexRange) {
-    UA_ByteString text = UA_BYTESTRING("My xml");
-    UA_Variant src;
-    UA_Variant_setScalar(&src, &text, &UA_TYPES[UA_TYPES_BYTESTRING]);
-
-    UA_NumericRangeDimension d1 = {0, 8388607};
-    UA_NumericRange nr;
-    nr.dimensionsSize = 1;
-    nr.dimensions = &d1;
-
-    UA_Variant dst;
-    UA_StatusCode retval = UA_Variant_copyRange(&src, &dst, nr);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Variant_deleteMembers(&dst);
-}
-END_TEST
-
-START_TEST(UA_Variant_copyShallWorkOn1DArrayExample) {
-    // given
-    UA_String *srcArray = (UA_String*)UA_Array_new(3, &UA_TYPES[UA_TYPES_STRING]);
-    srcArray[0] = UA_STRING_ALLOC("__open");
-    srcArray[1] = UA_STRING_ALLOC("_62541");
-    srcArray[2] = UA_STRING_ALLOC("opc ua");
-
-    UA_UInt32 *dimensions;
-    dimensions = (UA_UInt32*)UA_malloc(sizeof(UA_UInt32));
-    dimensions[0] = 3;
-
-    UA_Variant value, copiedValue;
-    UA_Variant_init(&value);
-    UA_Variant_init(&copiedValue);
-
-    value.arrayLength = 3;
-    value.data = (void *)srcArray;
-    value.arrayDimensionsSize = 1;
-    value.arrayDimensions = dimensions;
-    value.type = &UA_TYPES[UA_TYPES_STRING];
-
-    //when
-    UA_Variant_copy(&value, &copiedValue);
-
-    //then
-    UA_Int32 i1 = value.arrayDimensions[0];
-    UA_Int32 i2 = copiedValue.arrayDimensions[0];
-    ck_assert_int_eq(i1, i2);
-
-    for(UA_Int32 i = 0;i < 3;i++) {
-        for(UA_Int32 j = 0;j < 6;j++) {
-            ck_assert_int_eq(((UA_String *)value.data)[i].data[j],
-                    ((UA_String *)copiedValue.data)[i].data[j]);
-        }
-        ck_assert_int_eq(((UA_String *)value.data)[i].length,
-                ((UA_String *)copiedValue.data)[i].length);
-    }
-    ck_assert_int_eq(((UA_String *)copiedValue.data)[0].data[2], 'o');
-    ck_assert_int_eq(((UA_String *)copiedValue.data)[0].data[3], 'p');
-    ck_assert_int_eq(value.arrayDimensionsSize, copiedValue.arrayDimensionsSize);
-    ck_assert_int_eq(value.arrayLength, copiedValue.arrayLength);
-
-    //finally
-    UA_Variant_deleteMembers(&value);
-    UA_Variant_deleteMembers(&copiedValue);
-}
-END_TEST
-
-START_TEST(UA_Variant_copyShallWorkOn2DArrayExample) {
-    // given
-    UA_Int32 *srcArray = (UA_Int32*)UA_Array_new(6, &UA_TYPES[UA_TYPES_INT32]);
-    srcArray[0] = 0;
-    srcArray[1] = 1;
-    srcArray[2] = 2;
-    srcArray[3] = 3;
-    srcArray[4] = 4;
-    srcArray[5] = 5;
-
-    UA_UInt32 *dimensions = (UA_UInt32*)UA_Array_new(2, &UA_TYPES[UA_TYPES_INT32]);
-    UA_UInt32 dim1 = 3;
-    UA_UInt32 dim2 = 2;
-    dimensions[0] = dim1;
-    dimensions[1] = dim2;
-
-    UA_Variant value, copiedValue;
-    UA_Variant_init(&value);
-    UA_Variant_init(&copiedValue);
-
-    value.arrayLength = 6;
-    value.data     = srcArray;
-    value.arrayDimensionsSize = 2;
-    value.arrayDimensions     = dimensions;
-    value.type = &UA_TYPES[UA_TYPES_INT32];
-
-    //when
-    UA_Variant_copy(&value, &copiedValue);
-
-    //then
-    //1st dimension
-    UA_Int32 i1 = value.arrayDimensions[0];
-    UA_Int32 i2 = copiedValue.arrayDimensions[0];
-    ck_assert_int_eq(i1, i2);
-    ck_assert_int_eq(i1, dim1);
-
-
-    //2nd dimension
-    i1 = value.arrayDimensions[1];
-    i2 = copiedValue.arrayDimensions[1];
-    ck_assert_int_eq(i1, i2);
-    ck_assert_int_eq(i1, dim2);
-
-
-    for(UA_Int32 i = 0;i < 6;i++) {
-        i1 = ((UA_Int32 *)value.data)[i];
-        i2 = ((UA_Int32 *)copiedValue.data)[i];
-        ck_assert_int_eq(i1, i2);
-        ck_assert_int_eq(i2, i);
-    }
-
-    ck_assert_int_eq(value.arrayDimensionsSize, copiedValue.arrayDimensionsSize);
-    ck_assert_int_eq(value.arrayLength, copiedValue.arrayLength);
-
-    //finally
-    UA_Variant_deleteMembers(&value);
-    UA_Variant_deleteMembers(&copiedValue);
-}
-END_TEST
-
-START_TEST(UA_ExtensionObject_encodeDecodeShallWorkOnExtensionObject) {
-    /* UA_Int32 val = 42; */
-    /* UA_VariableAttributes varAttr; */
-    /* UA_VariableAttributes_init(&varAttr); */
-    /* varAttr.dataType = UA_TYPES[UA_TYPES_INT32].typeId; */
-    /* UA_Variant_init(&varAttr.value); */
-    /* varAttr.value.type = &UA_TYPES[UA_TYPES_INT32]; */
-    /* varAttr.value.data = &val; */
-    /* varAttr.value.arrayLength = -1; */
-    /* varAttr.userWriteMask = 41; */
-    /* varAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_DATATYPE; */
-    /* varAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_VALUE; */
-    /* varAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_USERWRITEMASK; */
-
-    /* /\* wrap it into a extension object attributes *\/ */
-    /* UA_ExtensionObject extensionObject; */
-    /* UA_ExtensionObject_init(&extensionObject); */
-    /* extensionObject.typeId = UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES].typeId; */
-    /* UA_Byte extensionData[50]; */
-    /* extensionObject.body = (UA_ByteString){.data = extensionData, .length=50}; */
-    /* size_t posEncode = 0; */
-    /* UA_VariableAttributes_encodeBinary(&varAttr, &extensionObject.body, posEncode); */
-    /* extensionObject.body.length = posEncode; */
-    /* extensionObject.encoding = UA_EXTENSIONOBJECT_ENCODINGMASK_BODYISBYTESTRING; */
-
-    /* UA_Byte data[50]; */
-    /* UA_ByteString dst = {.data = data, .length=50}; */
-
-    /* posEncode = 0; */
-    /* UA_ExtensionObject_encodeBinary(&extensionObject, &dst, posEncode); */
-
-    /* UA_ExtensionObject extensionObjectDecoded; */
-    /* size_t posDecode = 0; */
-    /* UA_ExtensionObject_decodeBinary(&dst, &posDecode, &extensionObjectDecoded); */
-
-    /* ck_assert_int_eq(posEncode, posDecode); */
-    /* ck_assert_int_eq(extensionObjectDecoded.body.length, extensionObject.body.length); */
-
-    /* UA_VariableAttributes varAttrDecoded; */
-    /* UA_VariableAttributes_init(&varAttrDecoded); */
-    /* posDecode = 0; */
-    /* UA_VariableAttributes_decodeBinary(&extensionObjectDecoded.body, &posDecode, &varAttrDecoded); */
-    /* ck_assert_uint_eq(41, varAttrDecoded.userWriteMask); */
-    /* ck_assert_int_eq(-1, varAttrDecoded.value.arrayLength); */
-
-    /* // finally */
-    /* UA_ExtensionObject_deleteMembers(&extensionObjectDecoded); */
-    /* UA_Variant_deleteMembers(&varAttrDecoded.value); */
-}
-END_TEST
-
-static Suite *testSuite_builtin(void) {
-    Suite *s = suite_create("Built-in Data Types 62541-6 Table 1");
-
-    TCase *tc_decode = tcase_create("decode");
-    tcase_add_test(tc_decode, UA_Byte_decodeShallCopyAndAdvancePosition);
-    tcase_add_test(tc_decode, UA_Byte_decodeShallModifyOnlyCurrentPosition);
-    tcase_add_test(tc_decode, UA_Int16_decodeShallAssumeLittleEndian);
-    tcase_add_test(tc_decode, UA_Int16_decodeShallRespectSign);
-    tcase_add_test(tc_decode, UA_UInt16_decodeShallNotRespectSign);
-    tcase_add_test(tc_decode, UA_Int32_decodeShallAssumeLittleEndian);
-    tcase_add_test(tc_decode, UA_Int32_decodeShallRespectSign);
-    tcase_add_test(tc_decode, UA_UInt32_decodeShallNotRespectSign);
-    tcase_add_test(tc_decode, UA_UInt64_decodeShallNotRespectSign);
-    tcase_add_test(tc_decode, UA_Int64_decodeShallRespectSign);
-    tcase_add_test(tc_decode, UA_Float_decodeShallWorkOnExample);
-    tcase_add_test(tc_decode, UA_Double_decodeShallGiveOne);
-    tcase_add_test(tc_decode, UA_Double_decodeShallGiveZero);
-    tcase_add_test(tc_decode, UA_Double_decodeShallGiveMinusTwo);
-    tcase_add_test(tc_decode, UA_Double_decodeShallGive2147483648);
-    tcase_add_test(tc_decode, UA_Byte_encode_test);
-    tcase_add_test(tc_decode, UA_String_decodeShallAllocateMemoryAndCopyString);
-    tcase_add_test(tc_decode, UA_String_decodeWithNegativeSizeShallNotAllocateMemoryAndNullPtr);
-    tcase_add_test(tc_decode, UA_String_decodeWithZeroSizeShallNotAllocateMemoryAndNullPtr);
-    tcase_add_test(tc_decode, UA_NodeId_decodeTwoByteShallReadTwoBytesAndSetNamespaceToZero);
-    tcase_add_test(tc_decode, UA_NodeId_decodeFourByteShallReadFourBytesAndRespectNamespace);
-    tcase_add_test(tc_decode, UA_NodeId_decodeStringShallAllocateMemory);
-    tcase_add_test(tc_decode, UA_Variant_decodeSingleExtensionObjectShallSetVTAndAllocateMemory);
-    tcase_add_test(tc_decode, UA_Variant_decodeWithOutArrayFlagSetShallSetVTAndAllocateMemoryForArray);
-    tcase_add_test(tc_decode, UA_Variant_decodeWithArrayFlagSetShallSetVTAndAllocateMemoryForArray);
-    tcase_add_test(tc_decode, UA_Variant_decodeWithOutDeleteMembersShallFailInCheckMem);
-    tcase_add_test(tc_decode, UA_Variant_decodeWithTooSmallSourceShallReturnWithError);
-    suite_add_tcase(s, tc_decode);
-
-    TCase *tc_encode = tcase_create("encode");
-    tcase_add_test(tc_encode, UA_Byte_encode_test);
-    tcase_add_test(tc_encode, UA_UInt16_encodeNegativeShallEncodeLittleEndian);
-    tcase_add_test(tc_encode, UA_UInt16_encodeShallEncodeLittleEndian);
-    tcase_add_test(tc_encode, UA_UInt32_encodeShallEncodeLittleEndian);
-    tcase_add_test(tc_encode, UA_Int32_encodeShallEncodeLittleEndian);
-    tcase_add_test(tc_encode, UA_Int32_encodeNegativeShallEncodeLittleEndian);
-    tcase_add_test(tc_encode, UA_UInt64_encodeShallWorkOnExample);
-    tcase_add_test(tc_encode, UA_Int64_encodeNegativeShallEncodeLittleEndian);
-    tcase_add_test(tc_encode, UA_Int64_encodeShallEncodeLittleEndian);
-    tcase_add_test(tc_encode, UA_Float_encodeShallWorkOnExample);
-    tcase_add_test(tc_encode, UA_Double_encodeShallWorkOnExample);
-    tcase_add_test(tc_encode, UA_String_encodeShallWorkOnExample);
-    tcase_add_test(tc_encode, UA_ExpandedNodeId_encodeShallWorkOnExample);
-    tcase_add_test(tc_encode, UA_DataValue_encodeShallWorkOnExampleWithoutVariant);
-    tcase_add_test(tc_encode, UA_DataValue_encodeShallWorkOnExampleWithVariant);
-    tcase_add_test(tc_encode, UA_ExtensionObject_encodeDecodeShallWorkOnExtensionObject);
-    suite_add_tcase(s, tc_encode);
-
-    TCase *tc_convert = tcase_create("convert");
-    tcase_add_test(tc_convert, UA_DateTime_toStructShallWorkOnExample);
-    suite_add_tcase(s, tc_convert);
-
-    TCase *tc_equal = tcase_create("equal");
-    tcase_add_test(tc_equal, UA_QualifiedName_equalShallWorkOnExample);
-    suite_add_tcase(s, tc_equal);
-
-    TCase *tc_copy = tcase_create("copy");
-    tcase_add_test(tc_copy, UA_Array_copyByteArrayShallWorkOnExample);
-    tcase_add_test(tc_copy, UA_Array_copyUA_StringShallWorkOnExample);
-    tcase_add_test(tc_copy, UA_ExtensionObject_copyShallWorkOnExample);
-    tcase_add_test(tc_copy, UA_Variant_copyShallWorkOnSingleValueExample);
-    tcase_add_test(tc_copy, UA_Variant_copyShallWorkOn1DArrayExample);
-    tcase_add_test(tc_copy, UA_Variant_copyShallWorkOn2DArrayExample);
-    tcase_add_test(tc_copy, UA_Variant_copyShallWorkOnByteStringIndexRange);
-
-    tcase_add_test(tc_copy, UA_DiagnosticInfo_copyShallWorkOnExample);
-    tcase_add_test(tc_copy, UA_ApplicationDescription_copyShallWorkOnExample);
-    tcase_add_test(tc_copy, UA_QualifiedName_copyShallWorkOnInputExample);
-    tcase_add_test(tc_copy, UA_Guid_copyShallWorkOnInputExample);
-    tcase_add_test(tc_copy, UA_LocalizedText_copycstringShallWorkOnInputExample);
-    tcase_add_test(tc_copy, UA_DataValue_copyShallWorkOnInputExample);
-    suite_add_tcase(s, tc_copy);
-    return s;
-}
-
-int main(void) {
-    int      number_failed = 0;
-    Suite   *s;
-    SRunner *sr;
-
-    s  = testSuite_builtin();
-    sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    number_failed += srunner_ntests_failed(sr);
-    srunner_free(sr);
-
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/check_types_builtin_json.c b/ext/open62541/tests/check_types_builtin_json.c
deleted file mode 100644
index e102343..0000000
--- a/ext/open62541/tests/check_types_builtin_json.c
+++ /dev/null
@@ -1,6056 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/types.h>
-#include <open62541/types_generated.h>
-#include <open62541/types_generated_encoding_binary.h>
-#include <open62541/types_generated_handling.h>
-#include <open62541/util.h>
-
-#include "ua_types_encoding_binary.h"
-#include "ua_types_encoding_json.h"
-
-#include <check.h>
-#include <float.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#if defined(_MSC_VER)
-# pragma warning(disable: 4146)
-#endif
-
-/* Test Boolean */
-START_TEST(UA_Boolean_true_json_encode) {
-   
-    UA_Boolean *src = UA_Boolean_new();
-    UA_Boolean_init(src);
-    *src = UA_TRUE;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_BOOLEAN];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "true";
-    ck_assert_str_eq(result, (char*)buf.data);
-    
-    UA_ByteString_deleteMembers(&buf);
-    UA_Boolean_delete(src);
-    
-}
-END_TEST
-
-START_TEST(UA_Boolean_false_json_encode) {
-   
-    UA_Boolean *src = UA_Boolean_new();
-    UA_Boolean_init(src);
-    *src = UA_FALSE;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_BOOLEAN];
-
-    UA_ByteString buf;
-
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    ck_assert_int_eq(size, 5);
-    
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-        
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "false";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Boolean_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Boolean_true_bufferTooSmall_json_encode) {
-   
-    UA_Boolean *src = UA_Boolean_new();
-    UA_Boolean_init(src);
-    *src = UA_FALSE;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_BOOLEAN];
-
-    UA_ByteString buf;
-    UA_ByteString_allocBuffer(&buf, 2);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[2];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    
-    ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    char* result = "";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Boolean_delete(src);
-}
-END_TEST
-
-/* Test String */
-START_TEST(UA_String_json_encode) {
-    // given
-    UA_String src = UA_STRING("hello");
-    
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_STRING];
-    
-    UA_ByteString buf;
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-    // when
-    status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"hello\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-START_TEST(UA_String_Empty_json_encode) {
-    // given
-    UA_String src = UA_STRING("");
-    UA_ByteString buf;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_STRING];
-    
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-    // when
-    status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-START_TEST(UA_String_Null_json_encode) {
-    // given
-    UA_String src = UA_STRING_NULL;
-    UA_ByteString buf;
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_STRING];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString_allocBuffer(&buf, size+1);
- 
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-    // when
-    status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "null";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-START_TEST(UA_String_escapesimple_json_encode) {
-    // given
-    UA_String src = UA_STRING("\b\th\"e\fl\nl\\o\r");
-    UA_ByteString buf;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_STRING];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-    // when
-    status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"\\b\\th\\\"e\\fl\\nl\\\\o\\r\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-START_TEST(UA_String_escapeutf_json_encode) {
-    // given
-    UA_String src = UA_STRING("he\\zsdl\alo€ \x26\x3A asdasd");
-    UA_ByteString buf;
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_STRING];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-    // when
-    status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"he\\\\zsdl\\u0007lo€ &: asdasd\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-START_TEST(UA_String_special_json_encode) {
-    // given
-    UA_String src = UA_STRING("𝄞𠂊𝕥🔍");
-    UA_ByteString buf;
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_STRING];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-    // when
-    status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"𝄞𠂊𝕥🔍\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-/* Byte */
-START_TEST(UA_Byte_Max_Number_json_encode) {
-
-    UA_Byte *src = UA_Byte_new();
-    *src = 255;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_BYTE];
-
-    UA_ByteString buf;
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "255";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Byte_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Byte_Min_Number_json_encode) {
-
-    UA_Byte *src = UA_Byte_new();
-    *src = 0;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_BYTE];
-
-    UA_ByteString buf;
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "0";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_Byte_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Byte_smallbuf_Number_json_encode) {
-
-    UA_Byte *src = UA_Byte_new();
-    *src = 255;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_BYTE];
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, 2);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[2];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Byte_delete(src);
-}
-END_TEST
-
-/* sByte */
-START_TEST(UA_SByte_Max_Number_json_encode) {
-
-    UA_SByte *src = UA_SByte_new();
-    *src = 127;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_SBYTE];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "127";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_SByte_delete(src);
-}
-END_TEST
-
-START_TEST(UA_SByte_Min_Number_json_encode) {
-
-    UA_SByte *src = UA_SByte_new();
-    *src = -128;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_SBYTE];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "-128";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_SByte_delete(src);
-}
-END_TEST
-
-START_TEST(UA_SByte_Zero_Number_json_encode) {
-
-    UA_SByte *src = UA_SByte_new();
-    *src = 0;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_SBYTE];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "0";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_SByte_delete(src);
-}
-END_TEST
-
-START_TEST(UA_SByte_smallbuf_Number_json_encode) {
-
-    UA_SByte *src = UA_SByte_new();
-    *src = 127;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_SBYTE];
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, 2);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[2];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_SByte_delete(src);
-}
-END_TEST
-
-
-/* UInt16 */
-START_TEST(UA_UInt16_Max_Number_json_encode) {
-
-    UA_UInt16 *src = UA_UInt16_new();
-    *src = 65535;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT16];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "65535";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_UInt16_delete(src);
-}
-END_TEST
-
-START_TEST(UA_UInt16_Min_Number_json_encode) {
-
-    UA_UInt16 *src = UA_UInt16_new();
-    *src = 0;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT16];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "0";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_UInt16_delete(src);
-}
-END_TEST
-
-START_TEST(UA_UInt16_smallbuf_Number_json_encode) {
-
-    UA_UInt16 *src = UA_UInt16_new();
-    *src = 255;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT16];
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, 2);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[2];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_UInt16_delete(src);
-}
-END_TEST
-
-/* Int16 */
-START_TEST(UA_Int16_Max_Number_json_encode) {
-
-    UA_Int16 *src = UA_Int16_new();
-    *src = 32767;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_INT16];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "32767";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Int16_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Int16_Min_Number_json_encode) {
-
-    UA_Int16 *src = UA_Int16_new();
-    *src = -32768;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_INT16];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "-32768";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_Int16_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Int16_Zero_Number_json_encode) {
-
-    UA_Int16 *src = UA_Int16_new();
-    *src = 0;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_INT16];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "0";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Int16_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Int16_smallbuf_Number_json_encode) {
-
-    UA_Int16 *src = UA_Int16_new();
-    *src = 127;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_INT16];
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, 2);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[2];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Int16_delete(src);
-}
-END_TEST
-
-
-
-/* UInt32 */
-START_TEST(UA_UInt32_Max_Number_json_encode) {
-
-    UA_UInt32 *src = UA_UInt32_new();
-    *src = 4294967295;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT32];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "4294967295";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_UInt32_delete(src);
-}
-END_TEST
-
-START_TEST(UA_UInt32_Min_Number_json_encode) {
-
-    UA_UInt32 *src = UA_UInt32_new();
-    *src = 0;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT32];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "0";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_UInt32_delete(src);
-}
-END_TEST
-
-START_TEST(UA_UInt32_smallbuf_Number_json_encode) {
-
-    UA_UInt32 *src = UA_UInt32_new();
-    *src = 255;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT32];
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, 2);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[2];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    UA_ByteString_deleteMembers(&buf);
-    UA_UInt32_delete(src);
-}
-END_TEST
-
-
-
-/* Int32 */
-START_TEST(UA_Int32_Max_Number_json_encode) {
-
-    UA_Int32 *src = UA_Int32_new();
-    *src = 2147483647;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_INT32];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "2147483647";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Int32_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Int32_Min_Number_json_encode) {
-    UA_Int32 src = -2147483648;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_INT32];
-    size_t size = UA_calcSizeJson((void *)&src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *)&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "-2147483648";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-START_TEST(UA_Int32_Zero_Number_json_encode) {
-
-    UA_Int32 *src = UA_Int32_new();
-    *src = 0;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_INT32];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "0";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Int32_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Int32_smallbuf_Number_json_encode) {
-
-    UA_Int32 *src = UA_Int32_new();
-    *src = 127;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_INT32];
-
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, 2);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[2];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_Int32_delete(src);
-}
-END_TEST
-
-
-
-/* UINT64*/
-START_TEST(UA_UInt64_Max_Number_json_encode) {
-
-    UA_UInt64 *src = UA_UInt64_new();
-    //*src = 18446744073709551615;
-    ((u8*)src)[0] = 0xFF;
-    ((u8*)src)[1] = 0xFF;
-    ((u8*)src)[2] = 0xFF;
-    ((u8*)src)[3] = 0xFF;
-    ((u8*)src)[4] = 0xFF;
-    ((u8*)src)[5] = 0xFF;
-    ((u8*)src)[6] = 0xFF;
-    ((u8*)src)[7] = 0xFF;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT64];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"18446744073709551615\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_UInt64_delete(src);
-}
-END_TEST
-
-START_TEST(UA_UInt64_Min_Number_json_encode) {
-
-    UA_UInt64 *src = UA_UInt64_new();
-    *src = 0;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT64];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"0\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_UInt64_delete(src);
-}
-END_TEST
-
-START_TEST(UA_UInt64_smallbuf_Number_json_encode) {
-
-    UA_UInt64 *src = UA_UInt64_new();
-    //*src = -9223372036854775808;
-    ((u8*)src)[0] = 0x00;
-    ((u8*)src)[1] = 0x00;
-    ((u8*)src)[2] = 0x00;
-    ((u8*)src)[3] = 0x00;
-    ((u8*)src)[4] = 0x00;
-    ((u8*)src)[5] = 0x00;
-    ((u8*)src)[6] = 0x00;
-    ((u8*)src)[7] = 0x80;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT64];
-
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, 2);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[2];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_UInt64_delete(src);
-}
-END_TEST
-
-/* Int64 */
-START_TEST(UA_Int64_Max_Number_json_encode) {
-
-    UA_Int64 *src = UA_Int64_new();
-    //*src = 9223372036854775808;
-    ((u8*)src)[0] = 0xFF;
-    ((u8*)src)[1] = 0xFF;
-    ((u8*)src)[2] = 0xFF;
-    ((u8*)src)[3] = 0xFF;
-    ((u8*)src)[4] = 0xFF;
-    ((u8*)src)[5] = 0xFF;
-    ((u8*)src)[6] = 0xFF;
-    ((u8*)src)[7] = 0x7F;
-    
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_INT64];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"9223372036854775807\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_Int64_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Int64_Min_Number_json_encode) {
-
-    UA_Int64 *src = UA_Int64_new();
-    
-    // TODO: compiler error: integer constant is so large that it is unsigned [-Werror]
-    //*src = -9223372036854775808;
-  
-    ((u8*)src)[0] = 0x00;
-    ((u8*)src)[1] = 0x00;
-    ((u8*)src)[2] = 0x00;
-    ((u8*)src)[3] = 0x00;
-    ((u8*)src)[4] = 0x00;
-    ((u8*)src)[5] = 0x00;
-    ((u8*)src)[6] = 0x00;
-    ((u8*)src)[7] = 0x80;
-    
-    
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_INT64];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"-9223372036854775808\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_Int64_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Int64_Zero_Number_json_encode) {
-
-    UA_Int64 *src = UA_Int64_new();
-    *src = 0;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_INT64];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"0\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_Int64_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Int64_smallbuf_Number_json_encode) {
-
-    UA_Int64 *src = UA_Int64_new();
-    *src = 127;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_INT64];
-
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, 2);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[2];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_Int64_delete(src);
-}
-END_TEST
-
-
-START_TEST(UA_Double_json_encode) {
-    UA_Double src = 1.1234;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_DOUBLE];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "1.1233999999999999541699935434735380113124847412109375";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-START_TEST(UA_Double_pluszero_json_encode) {
-    UA_Double src = 0;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_DOUBLE];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "0";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-START_TEST(UA_Double_minuszero_json_encode) {
-    UA_Double src = -0;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_DOUBLE];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "0";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-START_TEST(UA_Double_plusInf_json_encode) {
-    UA_Double src = INFINITY;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_DOUBLE];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"Infinity\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-
-
-START_TEST(UA_Double_minusInf_json_encode) {
-    UA_Double src = -INFINITY;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_DOUBLE];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"-Infinity\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-START_TEST(UA_Double_nan_json_encode) {
-    UA_Double src = NAN;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_DOUBLE];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"NaN\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-START_TEST(UA_Double_onesmallest_json_encode) {
-    UA_Double src = 1.0000000000000002220446049250313080847263336181640625;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_DOUBLE];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "1.0000000000000002220446049250313080847263336181640625";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-START_TEST(UA_Float_json_encode) {
-    UA_Float src = 1.0000000000F;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_FLOAT];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "1";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-
-
-/* -------------------------LocalizedText------------------------- */
-START_TEST(UA_LocText_json_encode) {
-
-    UA_LocalizedText *src = UA_LocalizedText_new();
-    UA_LocalizedText_init(src);
-    src->locale = UA_STRING_ALLOC("theLocale");
-    src->text = UA_STRING_ALLOC("theText");
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_LOCALIZEDTEXT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Locale\":\"theLocale\",\"Text\":\"theText\"}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_LocalizedText_delete(src);
-}
-END_TEST
-
-
-START_TEST(UA_LocText_NonReversible_json_encode) {
-
-    UA_LocalizedText *src = UA_LocalizedText_new();
-    UA_LocalizedText_init(src);
-    src->locale = UA_STRING_ALLOC("theLocale");
-    src->text = UA_STRING_ALLOC("theText");
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_LOCALIZEDTEXT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_FALSE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"theText\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_LocalizedText_delete(src);
-}
-END_TEST
-
-
-START_TEST(UA_LocText_smallBuffer_json_encode) {
-    UA_LocalizedText *src = UA_LocalizedText_new();
-    UA_LocalizedText_init(src);
-    src->locale = UA_STRING_ALLOC("theLocale");
-    src->text = UA_STRING_ALLOC("theText");
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_LOCALIZEDTEXT];
-
-    UA_ByteString buf;
-    UA_ByteString_allocBuffer(&buf, 4);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[4];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    UA_ByteString_deleteMembers(&buf);
-    UA_LocalizedText_delete(src);
-}
-END_TEST
-
-/* --------------------------------GUID----------------------------------- */
-START_TEST(UA_Guid_json_encode) {
-    UA_Guid src = {3, 9, 10, {8, 7, 6, 5, 4, 3, 2, 1}};
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_GUID];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"00000003-0009-000A-0807-060504030201\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-START_TEST(UA_Guid_smallbuf_json_encode) {
-    UA_Guid *src = UA_Guid_new();
-    *src = UA_Guid_random();
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_GUID];
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, 1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Guid_delete(src);
-}
-END_TEST
-
-
-
-/* -------------------------DateTime--------------------------------------*/
-START_TEST(UA_DateTime_json_encode) {
-    UA_DateTime *src = UA_DateTime_new();
-    *src = UA_DateTime_fromUnixTime(1234567);
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_DATETIME];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"1970-01-15T06:56:07Z\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_DateTime_delete(src);
-}
-END_TEST
-
-START_TEST(UA_DateTime_with_nanoseconds_json_encode) {
-    UA_DateTime *src = UA_DateTime_new();
-    *src = UA_DateTime_fromUnixTime(1234567) + 8901234;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_DATETIME];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"1970-01-15T06:56:07.8901234Z\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_DateTime_delete(src);
-}
-END_TEST
-
-/* ------------------------Statuscode--------------------------------- */
-START_TEST(UA_StatusCode_json_encode) {
-    UA_StatusCode *src = UA_StatusCode_new();
-    *src = UA_STATUSCODE_BADAGGREGATECONFIGURATIONREJECTED;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_STATUSCODE];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-     *bufPos = 0;
-    
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "2161770496";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_StatusCode_delete(src);
-}
-END_TEST
-
-START_TEST(UA_StatusCode_nonReversible_json_encode) {
-    UA_StatusCode *src = UA_StatusCode_new();
-    *src = UA_STATUSCODE_BADAGGREGATECONFIGURATIONREJECTED;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_STATUSCODE];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_FALSE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
-
-     *bufPos = 0;
-    
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Code\":2161770496,\"Symbol\":\"BadAggregateConfigurationRejected\"}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_StatusCode_delete(src);
-}
-END_TEST
-
-START_TEST(UA_StatusCode_nonReversible_good_json_encode) {
-    UA_StatusCode *src = UA_StatusCode_new();
-    *src = UA_STATUSCODE_GOOD;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_STATUSCODE];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_FALSE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
-
-     *bufPos = 0;
-    
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "null";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_StatusCode_delete(src);
-}
-END_TEST
-
-
-START_TEST(UA_StatusCode_smallbuf_json_encode) {
-    UA_StatusCode *src = UA_StatusCode_new();
-    *src = UA_STATUSCODE_BADAGGREGATECONFIGURATIONREJECTED;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_STATUSCODE];
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, 1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_StatusCode_delete(src);
-}
-END_TEST
-
-
-/* -------------------------------NodeId--------------------------------*/
-
-/* Numeric */
-START_TEST(UA_NodeId_Numeric_json_encode) {
-    UA_NodeId *src = UA_NodeId_new();
-    *src = UA_NODEID_NUMERIC(0, 5555);
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Id\":5555}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_NodeId_delete(src);
-}
-END_TEST
-
-START_TEST(UA_NodeId_Numeric_Namespace_json_encode) {
-    UA_NodeId *src = UA_NodeId_new();
-    *src = UA_NODEID_NUMERIC(4, 5555);
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Id\":5555,\"Namespace\":4}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_NodeId_delete(src);
-}
-END_TEST
-
-/* String */
-START_TEST(UA_NodeId_String_json_encode) {
-    UA_NodeId *src = UA_NodeId_new();
-    *src = UA_NODEID_STRING_ALLOC(0, "foobar");
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"IdType\":1,\"Id\":\"foobar\"}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_NodeId_delete(src);
-}
-END_TEST
-
-START_TEST(UA_NodeId_String_Namespace_json_encode) {
-    UA_NodeId *src = UA_NodeId_new();
-    *src = UA_NODEID_STRING_ALLOC(5, "foobar");
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"IdType\":1,\"Id\":\"foobar\",\"Namespace\":5}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_NodeId_delete(src);
-}
-END_TEST
-
-/* Guid */
-START_TEST(UA_NodeId_Guid_json_encode) {
-    UA_NodeId *src = UA_NodeId_new();
-    UA_NodeId_init(src);
-    UA_Guid g = {3, 9, 10, {8, 7, 6, 5, 4, 3, 2, 1}};
-    *src = UA_NODEID_GUID(0, g);
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"IdType\":2,\"Id\":\"00000003-0009-000A-0807-060504030201\"}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_NodeId_delete(src);
-}
-END_TEST
-
-START_TEST(UA_NodeId_Guid_Namespace_json_encode) {
-    UA_NodeId *src = UA_NodeId_new();
-    UA_Guid g = {3, 9, 10, {8, 7, 6, 5, 4, 3, 2, 1}};
-    *src = UA_NODEID_GUID(5, g);
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    // {"IdType":2,"Id":"00000003-0009-000A-0807-060504030201","Namespace":5}
-    ck_assert_int_eq(size, 70);
-    
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"IdType\":2,\"Id\":\"00000003-0009-000A-0807-060504030201\",\"Namespace\":5}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_NodeId_delete(src);
-}
-END_TEST
-
-/* ByteString */
-START_TEST(UA_NodeId_ByteString_json_encode) {
-    UA_NodeId *src = UA_NodeId_new();
-    *src = UA_NODEID_BYTESTRING_ALLOC(0, "asdfasdf");
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    //{"IdType":3,"Id":"YXNkZmFzZGY="}
-    ck_assert_int_eq(size, 32);
-    
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"IdType\":3,\"Id\":\"YXNkZmFzZGY=\"}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_NodeId_delete(src);
-}
-END_TEST
-
-START_TEST(UA_NodeId_ByteString_Namespace_json_encode) {
-    UA_NodeId *src = UA_NodeId_new();
-    *src = UA_NODEID_BYTESTRING_ALLOC(5, "asdfasdf");
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"IdType\":3,\"Id\":\"YXNkZmFzZGY=\",\"Namespace\":5}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_NodeId_delete(src);
-}
-END_TEST
-
-/* Non-reversible, Namespace */
-START_TEST(UA_NodeId_NonReversible_Numeric_Namespace_json_encode) {
-    UA_NodeId *src = UA_NodeId_new();
-    *src = UA_NODEID_NUMERIC(2, 5555);
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
-    
-    UA_String namespaces[3] = {UA_STRING("ns0"),UA_STRING("ns1"),UA_STRING("ns2")};
-    size_t size = UA_calcSizeJson((void *) src, type, namespaces, 3, NULL, 0, UA_FALSE);
-    ck_assert_int_ne(size, 0);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, namespaces, 3, NULL, 0, UA_FALSE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Id\":5555,\"Namespace\":\"ns2\"}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_NodeId_delete(src);
-}
-END_TEST
-
-/* --------------------Diagnostic Info------------------------- */
-START_TEST(UA_DiagInfo_json_encode) {
-    UA_DiagnosticInfo *src = UA_DiagnosticInfo_new();
-    UA_DiagnosticInfo_init(src);
-    src->hasAdditionalInfo = UA_TRUE;
-    src->hasInnerDiagnosticInfo = UA_FALSE;
-    src->hasInnerStatusCode = UA_TRUE;
-    src->hasLocale = UA_TRUE;
-    src->hasSymbolicId = UA_TRUE;
-    src->hasLocalizedText = UA_TRUE;
-    src->hasNamespaceUri = UA_TRUE;
-
-    UA_StatusCode statusCode = UA_STATUSCODE_BADARGUMENTSMISSING;
-    src->additionalInfo = UA_STRING_ALLOC("additionalInfo");
-    src->innerStatusCode = statusCode;
-    src->locale = 12;
-    src->symbolicId = 13;
-    src->localizedText = 14;
-    src->namespaceUri = 15;
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_DIAGNOSTICINFO];
-
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"SymbolicId\":13,\"NamespaceUri\":15,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_DiagnosticInfo_delete(src);
-}
-END_TEST
-
-
-
-START_TEST(UA_DiagInfo_withInner_json_encode) {
-    UA_DiagnosticInfo *innerDiag = UA_DiagnosticInfo_new();
-    UA_DiagnosticInfo_init(innerDiag);
-    innerDiag->hasAdditionalInfo = UA_TRUE;
-    innerDiag->additionalInfo = UA_STRING_ALLOC("INNER ADDITION INFO");
-    innerDiag->hasInnerDiagnosticInfo = UA_FALSE;
-    innerDiag->hasInnerStatusCode = UA_FALSE;
-    innerDiag->hasLocale = UA_FALSE;
-    innerDiag->hasSymbolicId = UA_FALSE;
-    innerDiag->hasLocalizedText = UA_FALSE;
-    innerDiag->hasNamespaceUri = UA_FALSE;
-
-    UA_DiagnosticInfo *src = UA_DiagnosticInfo_new();
-    UA_DiagnosticInfo_init(src);
-    src->hasAdditionalInfo = UA_TRUE;
-    src->hasInnerDiagnosticInfo = UA_TRUE;
-    src->hasInnerStatusCode = UA_TRUE;
-    src->hasLocale = UA_TRUE;
-    src->hasSymbolicId = UA_TRUE;
-    src->hasLocalizedText = UA_TRUE;
-    src->hasNamespaceUri = UA_FALSE;
-
-    UA_StatusCode statusCode = UA_STATUSCODE_BADARGUMENTSMISSING;
-    src->additionalInfo = UA_STRING_ALLOC("additionalInfo");
-    src->innerDiagnosticInfo = innerDiag;
-    src->innerStatusCode = statusCode;
-    src->locale = 12;
-    src->symbolicId = 13;
-    src->localizedText = 14;
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_DIAGNOSTICINFO];
-
-
-    UA_ByteString buf;
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    //{"SymbolicId":13,"LocalizedText":14,"Locale":12,"AdditionalInfo":"additionalInfo","InnerStatusCode":2155216896,"InnerDiagnosticInfo":{"AdditionalInfo":"INNER ADDITION INFO"}}
-    ck_assert_int_eq(size, 174);
-    
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896,\"InnerDiagnosticInfo\":{\"AdditionalInfo\":\"INNER ADDITION INFO\"}}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_DiagnosticInfo_delete(src);
-}
-END_TEST
-
-START_TEST(UA_DiagInfo_withTwoInner_json_encode) {
-    
-    UA_DiagnosticInfo *innerDiag2 = UA_DiagnosticInfo_new();
-    UA_DiagnosticInfo_init(innerDiag2);
-    innerDiag2->hasAdditionalInfo = UA_TRUE;
-    innerDiag2->additionalInfo = UA_STRING_ALLOC("INNER ADDITION INFO2");
-    innerDiag2->hasInnerDiagnosticInfo = UA_FALSE;
-    innerDiag2->hasInnerStatusCode = UA_FALSE;
-    innerDiag2->hasLocale = UA_FALSE;
-    innerDiag2->hasSymbolicId = UA_FALSE;
-    innerDiag2->hasLocalizedText = UA_FALSE;
-    innerDiag2->hasNamespaceUri = UA_FALSE;
-    
-    UA_DiagnosticInfo *innerDiag = UA_DiagnosticInfo_new();
-    UA_DiagnosticInfo_init(innerDiag);
-    innerDiag->hasAdditionalInfo = UA_TRUE;
-    innerDiag->additionalInfo = UA_STRING_ALLOC("INNER ADDITION INFO");
-    innerDiag->hasInnerDiagnosticInfo = UA_TRUE;
-    innerDiag->innerDiagnosticInfo = innerDiag2;
-    innerDiag->hasInnerStatusCode = UA_FALSE;
-    innerDiag->hasLocale = UA_FALSE;
-    innerDiag->hasSymbolicId = UA_FALSE;
-    innerDiag->hasLocalizedText = UA_FALSE;
-    innerDiag->hasNamespaceUri = UA_FALSE;
-
-    UA_DiagnosticInfo *src = UA_DiagnosticInfo_new();
-    UA_DiagnosticInfo_init(src);
-    
-    src->hasAdditionalInfo = UA_TRUE;
-    src->hasInnerDiagnosticInfo = UA_TRUE;
-    src->hasInnerStatusCode = UA_TRUE;
-    src->hasLocale = UA_TRUE;
-    src->hasSymbolicId = UA_TRUE;
-    src->hasLocalizedText = UA_TRUE;
-    src->hasNamespaceUri = UA_FALSE;
-
-    UA_StatusCode statusCode = UA_STATUSCODE_BADARGUMENTSMISSING;
-    src->additionalInfo = UA_STRING_ALLOC("additionalInfo");
-    src->innerDiagnosticInfo = innerDiag;
-    src->innerStatusCode = statusCode;
-    src->locale = 12;
-    src->symbolicId = 13;
-    src->localizedText = 14;
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_DIAGNOSTICINFO];
-
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896,\"InnerDiagnosticInfo\":{\"AdditionalInfo\":\"INNER ADDITION INFO\",\"InnerDiagnosticInfo\":{\"AdditionalInfo\":\"INNER ADDITION INFO2\"}}}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_DiagnosticInfo_delete(src);
-}
-END_TEST
-
-START_TEST(UA_DiagInfo_noFields_json_encode) {
-    UA_DiagnosticInfo *src = UA_DiagnosticInfo_new();
-    UA_DiagnosticInfo_init(src);
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_DIAGNOSTICINFO];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "null";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_DiagnosticInfo_delete(src);
-}
-END_TEST
-
-START_TEST(UA_DiagInfo_smallBuffer_json_encode) {
-    UA_DiagnosticInfo *src = UA_DiagnosticInfo_new();
-    UA_DiagnosticInfo_init(src);
-    src->hasAdditionalInfo = UA_TRUE;
-    src->hasInnerDiagnosticInfo = UA_FALSE;
-    src->hasInnerStatusCode = UA_TRUE;
-    src->hasLocale = UA_TRUE;
-    src->hasSymbolicId = UA_TRUE;
-    src->hasLocalizedText = UA_TRUE;
-    src->hasNamespaceUri = UA_FALSE;
-
-    UA_StatusCode statusCode = UA_STATUSCODE_BADARGUMENTSMISSING;
-    src->additionalInfo = UA_STRING_ALLOC("additionalInfo");
-    src->innerStatusCode = statusCode;
-    src->locale = 12;
-    src->symbolicId = 13;
-    src->localizedText = 14;
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_DIAGNOSTICINFO];
-
-    
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, 2);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[2];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_DiagnosticInfo_delete(src);
-}
-END_TEST
-
-/* ---------------ByteString----------------- */
-START_TEST(UA_ByteString_json_encode) {
-    UA_ByteString *src = UA_ByteString_new();
-    UA_ByteString_init(src);
-    *src = UA_BYTESTRING_ALLOC("asdfasdf");
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_BYTESTRING];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"YXNkZmFzZGY=\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_ByteString_delete(src);
-}
-END_TEST
-
-START_TEST(UA_ByteString2_json_encode) {
-    UA_ByteString *src = UA_ByteString_new();
-    UA_ByteString_init(src);
-    *src = UA_BYTESTRING_ALLOC("Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_BYTESTRING];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    
-    //s = UA_decodeJson()
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4=\"";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_ByteString_delete(src);
-}
-END_TEST
-
-START_TEST(UA_ByteString3_json_encode) {
-    UA_Variant *src = UA_Variant_new();
-    UA_Variant_init(src);
-    UA_ByteString *variantContent = UA_ByteString_new();
-    *variantContent = UA_BYTESTRING_ALLOC("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");
-    UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_BYTESTRING]);
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status retval = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    //printf("%s\n\n", (char*)buf.data);
-
-    UA_Variant out;
-    UA_Variant_init(&out);
-    retval |= UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_ByteString *srcData = ((UA_ByteString*)src->data);
-    UA_ByteString *outData = ((UA_ByteString*)out.data);
-    ck_assert(UA_ByteString_equal(srcData, outData));
-
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_deleteMembers(&out);
-    UA_Variant_delete(src);
-}
-END_TEST
-
-/* ------------------QualifiedName---------------------------- */
-START_TEST(UA_QualName_json_encode) {
-    UA_QualifiedName *src = UA_QualifiedName_new();
-    UA_QualifiedName_init(src);
-    src->name = UA_STRING_ALLOC("derName");
-    src->namespaceIndex = 1;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_QUALIFIEDNAME];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Name\":\"derName\",\"Uri\":1}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_QualifiedName_delete(src);
-}
-END_TEST
-
-
-
-START_TEST(UA_QualName_NonReversible_json_encode) {
-    UA_QualifiedName *src = UA_QualifiedName_new();
-    UA_QualifiedName_init(src);
-    src->name = UA_STRING_ALLOC("derName");
-    src->namespaceIndex = 1;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_QUALIFIEDNAME];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_FALSE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Name\":\"derName\",\"Uri\":1}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_QualifiedName_delete(src);
-}
-END_TEST
-
-START_TEST(UA_QualName_NonReversible_Namespace_json_encode) {
-    UA_QualifiedName *src = UA_QualifiedName_new();
-    UA_QualifiedName_init(src);
-    src->name = UA_STRING_ALLOC("derName");
-    src->namespaceIndex = 2;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_QUALIFIEDNAME];
-    UA_String namespaces[3] = {UA_STRING("ns0"),UA_STRING("ns1"),UA_STRING("ns2")};
-    size_t size = UA_calcSizeJson((void *) src, type, namespaces, 3, NULL, 0, UA_FALSE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, namespaces, 3, NULL, 0, UA_FALSE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Name\":\"derName\",\"Uri\":\"ns2\"}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_QualifiedName_delete(src);
-}
-END_TEST
-
-START_TEST(UA_QualName_NonReversible_NoNamespaceAsNumber_json_encode) {
-    UA_QualifiedName *src = UA_QualifiedName_new();
-    UA_QualifiedName_init(src);
-    src->name = UA_STRING_ALLOC("derName");
-    src->namespaceIndex = 6789;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_QUALIFIEDNAME];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_FALSE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Name\":\"derName\",\"Uri\":6789}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_QualifiedName_delete(src);
-}
-END_TEST
-
-/* ----------------------------Variant------------------------ */
-
-/* -----Builtin scalar----- */
-START_TEST(UA_Variant_Bool_json_encode) {
-    UA_Variant *src = UA_Variant_new();
-    UA_Variant_init(src);
-    
-    UA_Boolean *variantContent = UA_Boolean_new();
-    *variantContent = true;
-    UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_BOOLEAN]);
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Type\":1,\"Body\":true}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_Variant_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Variant_Number_json_encode) {
-    UA_Variant *src = UA_Variant_new();
-    UA_Variant_init(src);
-    UA_UInt64 *variantContent = UA_UInt64_new();
-    *variantContent = 345634563456;
-    UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_UINT64]);
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Type\":9,\"Body\":\"345634563456\"}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_Variant_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Variant_Double_json_encode) {
-    /* Encode decode cyle of 100 Doubles */
-    UA_Double d = 0.0;
-    for(size_t i = 0; i < 100; i++){
-        d = nextafter(d,1);
-
-        UA_Variant *src = UA_Variant_new();
-        UA_Variant_init(src);
-        UA_Double *variantContent = UA_Double_new();
-        //*variantContent = 1.0000000000000002;
-        *variantContent = d;
-        UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_DOUBLE]);
-
-        const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-        size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-        UA_ByteString buf;
-
-        UA_ByteString_allocBuffer(&buf, size+1);
-
-        UA_Byte *bufPos = &buf.data[0];
-        const UA_Byte *bufEnd = &buf.data[size+1];
-
-        status retval = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-        *bufPos = 0;
-        //printf("%s\n\n", (char*)buf.data);
-
-        UA_Variant out;
-        UA_Variant_init(&out);
-        retval |= UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-        ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-        UA_Double srcData = *((UA_Double*)src->data);
-        UA_Double outData = *((UA_Double*)out.data);
-        ck_assert(memcmp(&srcData, &outData, sizeof(UA_Double)) == 0);
-
-        UA_ByteString_deleteMembers(&buf);
-        UA_Variant_deleteMembers(&out);
-        UA_Variant_delete(src);
-    }
-}
-END_TEST
-
-START_TEST(UA_Variant_Double2_json_encode) {
-    UA_Variant *src = UA_Variant_new();
-    UA_Variant_init(src);
-    UA_Double *variantContent = UA_Double_new();
-    *variantContent = (pow(2,53)-1)*pow(2,-1074);
-    UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_DOUBLE]);
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status retval = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-
-    //printf("%s\n\n", (char*)buf.data);
-    /*{"Type":11,"Body":4.4501477170144022721148195934182639518696390927032912960468522194496444440421538910330590478162701758282983178260792422137401728773891892910553144148156412434867599762821265346585071045737627442980259622449029037796981144446145705102663115100318287949527959668236039986479250965780342141637013812613333119898765515451440315261253813266652951306000184917766328660755595837392240989947807556594098101021612198814605258742579179000071675999344145086087205681577915435923018910334964869420614052182892431445797605163650903606514140377217442262561590244668525767372446430075513332450079650686719491377688478005309963967709758965844137894433796621993967316936280457084866613206797017728916080020698679408551343728867675409720757232455434770912461317493580281734466552734375e-308}*/
-
-    UA_Variant out;
-    UA_Variant_init(&out);
-    retval |= UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Double srcData = *((UA_Double*)src->data);
-    UA_Double outData = *((UA_Double*)out.data);
-    ck_assert(memcmp(&srcData, &outData, sizeof(UA_Double)) == 0);
-
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_deleteMembers(&out);
-    UA_Variant_delete(src);
-}
-END_TEST
-
-
-START_TEST(UA_Variant_Double3_json_encode) {
-    UA_Variant *src = UA_Variant_new();
-    UA_Variant_init(src);
-    UA_Double *variantContent = UA_Double_new();
-    *variantContent = 1.1234;
-    UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_DOUBLE]);
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status retval = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-
-    UA_Variant out;
-    UA_Variant_init(&out);
-    retval |= UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Double srcData = *((UA_Double*)src->data);
-    UA_Double outData = *((UA_Double*)out.data);
-    ck_assert(memcmp(&srcData, &outData, sizeof(UA_Double)) == 0);
-
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_deleteMembers(&out);
-    UA_Variant_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Variant_DoubleInf_json_encode) {
-    UA_Variant *src = UA_Variant_new();
-    UA_Variant_init(src);
-    UA_Double *variantContent = UA_Double_new();
-    *variantContent = (UA_Double)INFINITY;
-    UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_DOUBLE]);
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status retval = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    //printf("%s\n\n", (char*)buf.data);
-
-    UA_Variant out;
-    UA_Variant_init(&out);
-    retval |= UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Double srcData = *((UA_Double*)src->data);
-    UA_Double outData = *((UA_Double*)out.data);
-    ck_assert(memcmp(&srcData, &outData, sizeof(UA_Double)) == 0);
-
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_deleteMembers(&out);
-    UA_Variant_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Variant_DoubleNan_json_encode) {
-    UA_Variant *src = UA_Variant_new();
-    UA_Variant_init(src);
-    UA_Double *variantContent = UA_Double_new();
-    *variantContent = (UA_Double)NAN;
-    UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_DOUBLE]);
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status retval = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    //printf("%s\n\n", (char*)buf.data);
-
-    UA_Variant out;
-    UA_Variant_init(&out);
-    retval |= UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Double srcData = *((UA_Double*)src->data);
-    UA_Double outData = *((UA_Double*)out.data);
-    ck_assert(memcmp(&srcData, &outData, sizeof(UA_Double)) == 0);
-
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_deleteMembers(&out);
-    UA_Variant_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Variant_Float_json_encode) {
-    UA_Variant *src = UA_Variant_new();
-    UA_Variant_init(src);
-    UA_Float *variantContent = UA_Float_new();
-    *variantContent = (UA_Float)((pow(2,23)-1)/pow(2,149));
-    UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_FLOAT]);
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status retval = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-
-    UA_Variant out;
-    UA_Variant_init(&out);
-    retval |= UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Float srcData = *((UA_Float*)src->data);
-    UA_Float outData = *((UA_Float*)out.data);
-    ck_assert(memcmp(&srcData, &outData, sizeof(UA_Float)) == 0);
-
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_deleteMembers(&out);
-    UA_Variant_delete(src);
-}
-END_TEST
-
-
-START_TEST(UA_Variant_NodeId_json_encode) {
-    UA_Variant *src = UA_Variant_new();
-    UA_Variant_init(src);
-    UA_NodeId variantContent = UA_NODEID_STRING(1, "theID");
-    UA_Variant_setScalarCopy(src, &variantContent, &UA_TYPES[UA_TYPES_NODEID]);
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Type\":17,\"Body\":{\"IdType\":1,\"Id\":\"theID\",\"Namespace\":1}}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_Variant_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Variant_LocText_json_encode) {
-    UA_Variant *src = UA_Variant_new();
-    UA_Variant_init(src);
-    UA_LocalizedText variantContent;
-    variantContent.locale = UA_STRING("localeString");
-    variantContent.text = UA_STRING("textString");
-    UA_Variant_setScalarCopy(src, &variantContent, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Type\":21,\"Body\":{\"Locale\":\"localeString\",\"Text\":\"textString\"}}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Variant_QualName_json_encode) {
-    UA_Variant *src = UA_Variant_new();
-    UA_Variant_init(src);
-    UA_QualifiedName variantContent;
-    UA_QualifiedName_init(&variantContent);
-    variantContent.name = UA_STRING("derName");
-    variantContent.namespaceIndex = 1;
-    
-    UA_Variant_setScalarCopy(src, &variantContent, &UA_TYPES[UA_TYPES_QUALIFIEDNAME]);
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Type\":20,\"Body\":{\"Name\":\"derName\",\"Uri\":1}}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_Variant_delete(src);
-}
-END_TEST
-
-
-/* ---Reversible Variant Array---- */
-START_TEST(UA_Variant_Array_UInt16_json_encode) {
-    UA_Variant *src = UA_Variant_new();
-    UA_Variant_init(src);
-    UA_UInt16 zero[2] = {42,43};
-    UA_Variant_setArrayCopy(src, zero, 2, &UA_TYPES[UA_TYPES_UINT16]);
-   
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    ck_assert_int_eq(size, 25);
-    
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Type\":5,\"Body\":[42,43]}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Variant_Array_Byte_json_encode) {
-    UA_Variant *src = UA_Variant_new();
-    UA_Variant_init(src);
-    UA_Byte zero[2] = {42,43};
-    UA_Variant_setArrayCopy(src, zero, 2, &UA_TYPES[UA_TYPES_BYTE]);
-   
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Type\":3,\"Body\":[42,43]}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Variant_Array_String_json_encode) {
-    UA_Variant *src = UA_Variant_new();
-    UA_Variant_init(src);
-    UA_String zero[2] = {UA_STRING("eins"),UA_STRING("zwei")};
-    UA_Variant_setArrayCopy(src, zero, 2, &UA_TYPES[UA_TYPES_STRING]);
-   
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Type\":12,\"Body\":[\"eins\",\"zwei\"]}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Variant_Matrix_UInt16_json_encode) {
-
-     // Set an array value
-    UA_Variant src;
-    UA_Variant_init(&src);
-    UA_UInt16 d[9] = {1, 2, 3,
-                      4, 5, 6,
-                      7, 8, 9};
-    UA_Variant_setArrayCopy(&src, d, 9, &UA_TYPES[UA_TYPES_UINT16]);
-
-    //Set array dimensions
-    src.arrayDimensions = (UA_UInt32 *)UA_Array_new(2, &UA_TYPES[UA_TYPES_UINT32]);
-    src.arrayDimensionsSize = 2;
-    src.arrayDimensions[0] = 3;
-    src.arrayDimensions[1] = 3;
-    
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    //{"Type":5,"Body":[1,2,3,4,5,6,7,8,9],"Dimension":[3,3]}
-    size_t sizeOfBytes = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    ck_assert_int_eq(sizeOfBytes, 55);
-    
-    status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Type\":5,\"Body\":[1,2,3,4,5,6,7,8,9],\"Dimension\":[3,3]}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_deleteMembers(&src);
-}
-END_TEST
-
-
-/* NON-Reversible builtin simple */
-START_TEST(UA_Variant_StatusCode_NonReversible_json_encode) {
-    UA_Variant *src = UA_Variant_new();
-    UA_Variant_init(src);
-    UA_StatusCode variantContent = UA_STATUSCODE_BADAGGREGATECONFIGURATIONREJECTED;
-    UA_Variant_setScalarCopy(src, &variantContent, &UA_TYPES[UA_TYPES_STATUSCODE]);
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_FALSE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Body\":{\"Code\":2161770496,\"Symbol\":\"BadAggregateConfigurationRejected\"}}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf); 
-    UA_Variant_delete(src);
-}
-END_TEST
-
-
-/* NON-Reversible Array */
-START_TEST(UA_Variant_Array_String_NonReversible_json_encode) {
-    UA_Variant src;
-    UA_Variant_init(&src);
-    UA_String d[8] = {UA_STRING("1"), UA_STRING("2"), UA_STRING("3"),
-                      UA_STRING("4"), UA_STRING("5"), UA_STRING("6"),
-                      UA_STRING("7"), UA_STRING("8")};
-    UA_Variant_setArrayCopy(&src, d, 8, &UA_TYPES[UA_TYPES_STRING]);
-
-    src.arrayDimensions = (UA_UInt32 *)UA_Array_new(4, &UA_TYPES[UA_TYPES_UINT32]);
-    src.arrayDimensionsSize = 1;
-    src.arrayDimensions[0] = 8;
-    
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_FALSE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Body\":[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\"]}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_deleteMembers(&src);
-}
-END_TEST
-
-/* NON-Reversible Matrix */
-START_TEST(UA_Variant_Matrix_String_NonReversible_json_encode) {
-    UA_Variant src;
-    UA_Variant_init(&src);
-    UA_String d[8] = {UA_STRING("1"), UA_STRING("2"), UA_STRING("3"),
-                      UA_STRING("4"), UA_STRING("5"), UA_STRING("6"),
-                      UA_STRING("7"), UA_STRING("8")};
-    UA_Variant_setArrayCopy(&src, d, 8, &UA_TYPES[UA_TYPES_STRING]);
-
-    src.arrayDimensions = (UA_UInt32 *)UA_Array_new(4, &UA_TYPES[UA_TYPES_UINT32]);
-    src.arrayDimensionsSize = 4;
-    src.arrayDimensions[0] = 2;
-    src.arrayDimensions[1] = 2;
-    src.arrayDimensions[2] = 2;
-    src.arrayDimensions[3] = 1;
-    
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_FALSE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    //{"Body":[[[["1"],["2"]],[["3"],["4"]]],[[["5"],["6"]],[["7"],["8"]]]]}
-    size_t sizeOfBytes = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_FALSE);
-    ck_assert_int_eq(sizeOfBytes, 70);
-    
-    status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Body\":[[[[\"1\"],[\"2\"]],[[\"3\"],[\"4\"]]],[[[\"5\"],[\"6\"]],[[\"7\"],[\"8\"]]]]}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_deleteMembers(&src);
-}
-END_TEST
-
-START_TEST(UA_Variant_Matrix_NodeId_NonReversible_json_encode) {
-    UA_Variant src;
-    UA_Variant_init(&src);
-    UA_NodeId d[8] = {UA_NODEID_NUMERIC(1,1),UA_NODEID_NUMERIC(1,2),UA_NODEID_NUMERIC(1,3),UA_NODEID_NUMERIC(1,4),UA_NODEID_NUMERIC(1,5),UA_NODEID_NUMERIC(1,6),UA_NODEID_NUMERIC(1,7),UA_NODEID_NUMERIC(1,8)};
-    UA_Variant_setArrayCopy(&src, d, 8, &UA_TYPES[UA_TYPES_NODEID]);
-
-    src.arrayDimensions = (UA_UInt32 *)UA_Array_new(4, &UA_TYPES[UA_TYPES_UINT32]);
-    src.arrayDimensionsSize = 4;
-    src.arrayDimensions[0] = 2;
-    src.arrayDimensions[1] = 2;
-    src.arrayDimensions[2] = 2;
-    src.arrayDimensions[3] = 1;
-    
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_FALSE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Body\":[[[[{\"Id\":1,\"Namespace\":1}],[{\"Id\":2,\"Namespace\":1}]],[[{\"Id\":3,\"Namespace\":1}],[{\"Id\":4,\"Namespace\":1}]]],[[[{\"Id\":5,\"Namespace\":1}],[{\"Id\":6,\"Namespace\":1}]],[[{\"Id\":7,\"Namespace\":1}],[{\"Id\":8,\"Namespace\":1}]]]]}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_deleteMembers(&src);
-}
-END_TEST
-
-
-
-START_TEST(UA_Variant_Wrap_json_encode) {
-    UA_Variant *src = UA_Variant_new();
-    UA_Variant_init(src);
-    UA_ViewDescription variantContent;
-    UA_DateTime srvts = UA_DateTime_fromUnixTime(1234567);
-    variantContent.timestamp = srvts;
-    variantContent.viewVersion = 1236;
-    variantContent.viewId = UA_NODEID_NUMERIC(0,99999);
-    
-    UA_Variant_setScalarCopy(src, &variantContent, &UA_TYPES[UA_TYPES_VIEWDESCRIPTION]);
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Type\":22,\"Body\":{\"TypeId\":{\"Id\":511},\"Body\":{\"ViewId\":{\"Id\":99999},\"Timestamp\":\"1970-01-15T06:56:07Z\",\"ViewVersion\":1236}}}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_delete(src);
-}
-END_TEST
-
-START_TEST(UA_Variant_Wrap_Array_json_encode) {
-    UA_Variant src;
-    UA_Variant_init(&src);
-    //src.arrayDimensions = (UA_UInt32 *)UA_Array_new(1, &UA_TYPES[UA_TYPES_UINT32]);
-    //src.arrayDimensionsSize = 1;
-    //src.arrayDimensions[0] = 2;
-    
-    UA_ViewDescription variantContent1;
-    UA_DateTime srvts1 = UA_DateTime_fromUnixTime(1234567);
-    variantContent1.timestamp = srvts1;
-    variantContent1.viewVersion = 1;
-    variantContent1.viewId = UA_NODEID_NUMERIC(0,1);
-    
-    UA_ViewDescription variantContent2;
-    UA_DateTime srvts2 = UA_DateTime_fromUnixTime(1234567);
-    variantContent2.timestamp = srvts2;
-    variantContent2.viewVersion = 2;
-    variantContent2.viewId = UA_NODEID_NUMERIC(0,2);
-    
-    
-    UA_ViewDescription d[2] = {variantContent1, variantContent2};
-    UA_Variant_setArrayCopy(&src, d, 2, &UA_TYPES[UA_TYPES_VIEWDESCRIPTION]);
-
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Type\":22,\"Body\":[{\"TypeId\":{\"Id\":511},\"Body\":{\"ViewId\":{\"Id\":1},\"Timestamp\":\"1970-01-15T06:56:07Z\",\"ViewVersion\":1}},{\"TypeId\":{\"Id\":511},\"Body\":{\"ViewId\":{\"Id\":2},\"Timestamp\":\"1970-01-15T06:56:07Z\",\"ViewVersion\":2}}]}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_deleteMembers(&src);
-}
-END_TEST
-
-START_TEST(UA_Variant_Wrap_Array_NonReversible_json_encode) {
-    UA_Variant src;
-    UA_Variant_init(&src);
-    //src.arrayDimensions = (UA_UInt32 *)UA_Array_new(1, &UA_TYPES[UA_TYPES_UINT32]);
-    //src.arrayDimensionsSize = 1;
-    //src.arrayDimensions[0] = 2;
-    
-    UA_ViewDescription variantContent1;
-    UA_DateTime srvts1 = UA_DateTime_fromUnixTime(1234567);
-    variantContent1.timestamp = srvts1;
-    variantContent1.viewVersion = 1;
-    variantContent1.viewId = UA_NODEID_NUMERIC(1,1);
-    
-    UA_ViewDescription variantContent2;
-    UA_DateTime srvts2 = UA_DateTime_fromUnixTime(1234567);
-    variantContent2.timestamp = srvts2;
-    variantContent2.viewVersion = 2;
-    variantContent2.viewId = UA_NODEID_NUMERIC(1,2);
-    
-    
-    UA_ViewDescription d[2] = {variantContent1, variantContent2};
-    UA_Variant_setArrayCopy(&src, d, 2, &UA_TYPES[UA_TYPES_VIEWDESCRIPTION]);
-
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_FALSE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Body\":[{\"Body\":{\"ViewId\":{\"Id\":1,\"Namespace\":1},\"Timestamp\":\"1970-01-15T06:56:07Z\",\"ViewVersion\":1}},{\"Body\":{\"ViewId\":{\"Id\":2,\"Namespace\":1},\"Timestamp\":\"1970-01-15T06:56:07Z\",\"ViewVersion\":2}}]}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_Variant_deleteMembers(&src);
-}
-END_TEST
-
-/* -----------ExtensionObject------------------*/
-START_TEST(UA_ExtensionObject_json_encode) {
-    UA_ExtensionObject *src = UA_ExtensionObject_new();
-    UA_ExtensionObject_init(src);
-    src->encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
-    src->content.decoded.type = &UA_TYPES[UA_TYPES_BOOLEAN];
-
-    UA_Boolean b = UA_FALSE;
-    src->content.decoded.data = &b;
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_EXTENSIONOBJECT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"TypeId\":{\"Id\":1},\"Body\":false}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_ExtensionObject_delete(src);
-}
-END_TEST
-
-START_TEST(UA_ExtensionObject_xml_json_encode) {
-    UA_ExtensionObject *src = UA_ExtensionObject_new();
-    UA_ExtensionObject_init(src);
-    src->encoding = UA_EXTENSIONOBJECT_ENCODED_XML;
-    src->content.encoded.typeId = UA_NODEID_NUMERIC(2,1234);
-
-    UA_ByteString b = UA_BYTESTRING_ALLOC("<Elemement></Element>");
-    src->content.encoded.body = b;
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_EXTENSIONOBJECT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"TypeId\":{\"Id\":1234,\"Namespace\":2},\"Encoding\":2,\"Body\":\"<Elemement></Element>\"}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_ExtensionObject_delete(src);
-}
-END_TEST
-
-
-START_TEST(UA_ExtensionObject_byteString_json_encode) {
-    UA_ExtensionObject *src = UA_ExtensionObject_new();
-    UA_ExtensionObject_init(src);
-    src->encoding = UA_EXTENSIONOBJECT_ENCODED_BYTESTRING;
-    src->content.encoded.typeId = UA_NODEID_NUMERIC(2,1234);
-
-    UA_ByteString b = UA_BYTESTRING_ALLOC("123456789012345678901234567890");
-    src->content.encoded.body = b;
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_EXTENSIONOBJECT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"TypeId\":{\"Id\":1234,\"Namespace\":2},\"Encoding\":1,\"Body\":\"123456789012345678901234567890\"}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_ExtensionObject_delete(src);
-}
-END_TEST
-
-
-START_TEST(UA_ExtensionObject_NonReversible_StatusCode_json_encode) {
-    UA_ExtensionObject *src = UA_ExtensionObject_new();
-    UA_ExtensionObject_init(src);
-    src->encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
-    src->content.decoded.type = &UA_TYPES[UA_TYPES_STATUSCODE];
-
-    UA_StatusCode b = UA_STATUSCODE_BADENCODINGERROR;
-    src->content.decoded.data = &b;
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_EXTENSIONOBJECT];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_FALSE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Body\":{\"Code\":2147876864,\"Symbol\":\"BadEncodingError\"}}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_ExtensionObject_delete(src);
-}
-END_TEST
-
-
-
-/* --------------ExpandedNodeId-------------------------- */
-START_TEST(UA_ExpandedNodeId_json_encode) {
-    UA_ExpandedNodeId *src = UA_ExpandedNodeId_new();
-    UA_ExpandedNodeId_init(src);
-    *src = UA_EXPANDEDNODEID_STRING_ALLOC(23, "testtestTest");
-    src->namespaceUri = UA_STRING_ALLOC("asdf");
-    src->serverIndex = 1345;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_EXPANDEDNODEID];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"IdType\":1,\"Id\":\"testtestTest\",\"Namespace\":\"asdf\",\"ServerUri\":1345}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_ExpandedNodeId_delete(src);
-}
-END_TEST
-
-
-START_TEST(UA_ExpandedNodeId_MissingNamespaceUri_json_encode) {
-    UA_ExpandedNodeId *src = UA_ExpandedNodeId_new();
-    UA_ExpandedNodeId_init(src);
-    *src = UA_EXPANDEDNODEID_STRING_ALLOC(23, "testtestTest");
-    src->namespaceUri = UA_STRING_NULL;
-    src->serverIndex = 1345;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_EXPANDEDNODEID];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"IdType\":1,\"Id\":\"testtestTest\",\"Namespace\":23,\"ServerUri\":1345}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_ExpandedNodeId_delete(src);
-}
-END_TEST
-
-START_TEST(UA_ExpandedNodeId_NonReversible_Ns1_json_encode) {
-    UA_ExpandedNodeId *src = UA_ExpandedNodeId_new();
-    UA_ExpandedNodeId_init(src);
-    *src = UA_EXPANDEDNODEID_STRING_ALLOC(1, "testtestTest");
-    src->namespaceUri = UA_STRING_NULL;
-    src->serverIndex = 1;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_EXPANDEDNODEID];
-    
-    UA_String serverUris[3] = {UA_STRING("uri0"),UA_STRING("uri1"),UA_STRING("uri2")};
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, serverUris, 3, UA_FALSE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, serverUris, 3, UA_FALSE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"IdType\":1,\"Id\":\"testtestTest\",\"Namespace\":1,\"ServerUri\":\"uri1\"}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_ExpandedNodeId_delete(src);
-}
-END_TEST
-
-START_TEST(UA_ExpandedNodeId_NonReversible_Namespace_json_encode) {
-    UA_ExpandedNodeId *src = UA_ExpandedNodeId_new();
-    UA_ExpandedNodeId_init(src);
-    *src = UA_EXPANDEDNODEID_STRING_ALLOC(2, "testtestTest");
-    src->namespaceUri = UA_STRING_NULL;
-    src->serverIndex = 1;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_EXPANDEDNODEID];
-    
-    UA_String namespaces[3] = {UA_STRING("ns0"),UA_STRING("ns1"),UA_STRING("ns2")};
-    UA_String serverUris[3] = {UA_STRING("uri0"),UA_STRING("uri1"),UA_STRING("uri2")};
-    
-    size_t size = UA_calcSizeJson((void *) src, type, namespaces, 3, serverUris, 3, UA_FALSE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, namespaces, 3, serverUris, 3, UA_FALSE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"IdType\":1,\"Id\":\"testtestTest\",\"Namespace\":\"ns2\",\"ServerUri\":\"uri1\"}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_ExpandedNodeId_delete(src);
-}
-END_TEST
-
-START_TEST(UA_ExpandedNodeId_NonReversible_NamespaceUriGiven_json_encode) {
-    UA_ExpandedNodeId *src = UA_ExpandedNodeId_new();
-    UA_ExpandedNodeId_init(src);
-    *src = UA_EXPANDEDNODEID_STRING_ALLOC(2, "testtestTest");
-    src->namespaceUri = UA_STRING_ALLOC("NamespaceUri");
-    src->serverIndex = 1;
-    
-    UA_String namespaces[3] = {UA_STRING("ns0"),UA_STRING("ns1"),UA_STRING("ns2")};
-    UA_String serverUris[3] = {UA_STRING("uri0"),UA_STRING("uri1"),UA_STRING("uri2")};
-    
-    
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_EXPANDEDNODEID];
-    size_t size = UA_calcSizeJson((void *) src, type, namespaces, 3, serverUris, 3, UA_FALSE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, namespaces, 3, serverUris, 3, UA_FALSE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"IdType\":1,\"Id\":\"testtestTest\",\"Namespace\":\"NamespaceUri\",\"ServerUri\":\"uri1\"}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_ExpandedNodeId_delete(src);
-}
-END_TEST
-
-/* -------------------------DataValue------------------------ */
-START_TEST(UA_DataValue_json_encode) {
-    UA_DataValue *src = UA_DataValue_new();
-    UA_DataValue_init(src);
-    src->hasServerPicoseconds = UA_TRUE;
-    src->hasServerTimestamp = UA_TRUE;
-    src->hasSourcePicoseconds = UA_TRUE;
-    src->hasSourceTimestamp = UA_TRUE;
-    src->hasStatus = UA_TRUE;
-    src->hasValue = UA_TRUE;
-
-    UA_DateTime srcts = UA_DateTime_fromUnixTime(1234567) + 8901234;
-    UA_DateTime srvts = UA_DateTime_fromUnixTime(2345678) + 9012345;
-
-    src->sourceTimestamp = srcts;
-    src->serverTimestamp = srvts;
-    src->sourcePicoseconds = 5678;
-    src->serverPicoseconds = 6789;
-    
-    UA_Variant variant;
-    UA_Variant_init(&variant);
-    UA_Boolean variantContent = true;
-    UA_Variant_setScalarCopy(&variant, &variantContent, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    src->value = variant;
-
-    src->status = UA_STATUSCODE_BADAPPLICATIONSIGNATUREINVALID;
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_DATAVALUE];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"Value\":{\"Type\":1,\"Body\":true},\"Status\":2153250816,\"SourceTimestamp\":\"1970-01-15T06:56:07.8901234Z\",\"SourcePicoseconds\":5678,\"ServerTimestamp\":\"1970-01-28T03:34:38.9012345Z\",\"ServerPicoseconds\":6789}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_DataValue_delete(src);
-}
-END_TEST
-
-START_TEST(UA_DataValue_null_json_encode) {
-    UA_DataValue *src = UA_DataValue_new();
-    UA_DataValue_init(src);
-    
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_DATAVALUE];
-    size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "null";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_DataValue_delete(src);
-}
-END_TEST
-
-START_TEST(UA_MessageReadResponse_json_encode) {
-    UA_ReadResponse src;
-    UA_ReadResponse_init(&src);
-    UA_DiagnosticInfo innerDiag;
-    innerDiag.hasAdditionalInfo = UA_TRUE;
-    innerDiag.additionalInfo = UA_STRING_ALLOC("INNER ADDITION INFO");
-    innerDiag.hasInnerDiagnosticInfo = UA_FALSE;
-    innerDiag.hasInnerStatusCode = UA_FALSE;
-    innerDiag.hasLocale = UA_FALSE;
-    innerDiag.hasSymbolicId = UA_FALSE;
-    innerDiag.hasLocalizedText = UA_FALSE;
-    innerDiag.hasNamespaceUri = UA_FALSE;
-    
-    UA_DiagnosticInfo *info = (UA_DiagnosticInfo*)UA_calloc(1, sizeof(UA_DiagnosticInfo));
-    info[0] = innerDiag;
-    src.diagnosticInfos = info;
-    src.diagnosticInfosSize = 1;
-    
-    UA_DataValue dv;
-    UA_DataValue_init(&dv);
-    dv.hasServerPicoseconds = UA_TRUE;
-    dv.hasServerTimestamp = UA_TRUE;
-    dv.hasSourcePicoseconds = UA_TRUE;
-    dv.hasSourceTimestamp = UA_TRUE;
-    dv.hasStatus = UA_TRUE;
-    dv.hasValue = UA_TRUE;
-
-    UA_DateTime srcts = UA_DateTime_fromUnixTime(1234567);
-    UA_DateTime srvts = UA_DateTime_fromUnixTime(1234567);
-
-    dv.sourceTimestamp = srcts;
-    dv.serverTimestamp = srvts;
-    dv.sourcePicoseconds = 0;
-    dv.serverPicoseconds = 0;
-    
-    
-    UA_Variant variant;
-    UA_Variant_init(&variant);
-    UA_Boolean variantContent = true;
-    UA_Variant_setScalarCopy(&variant, &variantContent, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    dv.value = variant;
-
-    dv.status = UA_STATUSCODE_BADAPPLICATIONSIGNATUREINVALID;
-    
-    UA_DataValue *values = (UA_DataValue*)UA_calloc(1, sizeof(UA_DataValue));
-    values[0] = dv;
-    src.results = values;
-    src.resultsSize = 1;
-    
-    
-    UA_ResponseHeader rh;
-    UA_ResponseHeader_init(&rh);
-    rh.stringTableSize = 0;
-    rh.requestHandle = 123123;
-    rh.serviceResult = UA_STATUSCODE_GOOD;
-    rh.timestamp = UA_DateTime_fromUnixTime(1234567);
-    
-    
-    UA_DiagnosticInfo serverDiag;
-    UA_DiagnosticInfo_init(&serverDiag);
-    serverDiag.hasAdditionalInfo = UA_TRUE;
-    serverDiag.additionalInfo = UA_STRING_ALLOC("serverDiag");
-    serverDiag.hasInnerDiagnosticInfo = UA_FALSE;
-    serverDiag.hasInnerStatusCode = UA_FALSE;
-    serverDiag.hasLocale = UA_FALSE;
-    serverDiag.hasSymbolicId = UA_FALSE;
-    serverDiag.hasLocalizedText = UA_FALSE;
-    serverDiag.hasNamespaceUri = UA_FALSE;
-    rh.serviceDiagnostics = serverDiag;
-    
-    
-    UA_ExtensionObject e;
-    UA_ExtensionObject_init(&e);
-    e.encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
-    e.content.decoded.type = &UA_TYPES[UA_TYPES_BOOLEAN];
-
-    UA_Boolean b = UA_FALSE;
-    e.content.decoded.data = &b;
-    
-    rh.additionalHeader = e;
-            
-    src.responseHeader = rh;
-    
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_READRESPONSE];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"ResponseHeader\":{\"Timestamp\":\"1970-01-15T06:56:07Z\",\"RequestHandle\":123123,\"ServiceResult\":0,\"ServiceDiagnostics\":{\"AdditionalInfo\":\"serverDiag\"},\"StringTable\":[],\"AdditionalHeader\":{\"TypeId\":{\"Id\":1},\"Body\":false}},\"Results\":[{\"Value\":{\"Type\":1,\"Body\":true},\"Status\":2153250816,\"SourceTimestamp\":\"1970-01-15T06:56:07Z\",\"ServerTimestamp\":\"1970-01-15T06:56:07Z\"}],\"DiagnosticInfos\":[{\"AdditionalInfo\":\"INNER ADDITION INFO\"}]}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_ReadResponse_deleteMembers(&src); //TODO
-}
-END_TEST
-
-START_TEST(UA_ViewDescription_json_encode) {
-    UA_ViewDescription src;
-    UA_ViewDescription_init(&src);
-    UA_DateTime srvts = UA_DateTime_fromUnixTime(1234567);
-    src.timestamp = srvts;
-    src.viewVersion = 1236;
-    src.viewId = UA_NODEID_NUMERIC(0,99999);
-    
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VIEWDESCRIPTION];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"ViewId\":{\"Id\":99999},\"Timestamp\":\"1970-01-15T06:56:07Z\",\"ViewVersion\":1236}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_ViewDescription_deleteMembers(&src);
-}
-END_TEST
-
-START_TEST(UA_WriteRequest_json_encode) {
-    UA_WriteRequest src;
-    UA_WriteRequest_init(&src);
-    
-    UA_RequestHeader rh;
-    rh.returnDiagnostics = 1;
-    rh.auditEntryId = UA_STRING_ALLOC("Auditentryid");
-    rh.requestHandle = 123123;
-    rh.authenticationToken = UA_NODEID_STRING_ALLOC(0,"authToken");
-    rh.timestamp = UA_DateTime_fromUnixTime(1234567);
-    rh.timeoutHint = 120;
-    
-    UA_ExtensionObject e;
-    UA_ExtensionObject_init(&e);
-    e.encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
-    e.content.decoded.type = &UA_TYPES[UA_TYPES_BOOLEAN];
-
-    UA_Boolean b = UA_FALSE;
-    e.content.decoded.data = &b;
-    
-    rh.additionalHeader = e;
-   
-    
-    
-    UA_DataValue dv;
-    UA_DataValue_init(&dv);
-    dv.hasServerPicoseconds = UA_TRUE;
-    dv.hasServerTimestamp = UA_TRUE;
-    dv.hasSourcePicoseconds = UA_TRUE;
-    dv.hasSourceTimestamp = UA_TRUE;
-    dv.hasStatus = UA_TRUE;
-    dv.hasValue = UA_TRUE;
-
-    UA_DateTime srcts = UA_DateTime_fromUnixTime(1234567);
-    UA_DateTime srvts = UA_DateTime_fromUnixTime(1234567);
-
-    dv.sourceTimestamp = srcts;
-    dv.serverTimestamp = srvts;
-    dv.sourcePicoseconds = 0;
-    dv.serverPicoseconds = 0;
-    
-    UA_Variant variant;
-    UA_Variant_init(&variant);
-    UA_Boolean variantContent = true;
-    UA_Variant_setScalarCopy(&variant, &variantContent, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    dv.value = variant;
-
-    dv.status = UA_STATUSCODE_BADAPPLICATIONSIGNATUREINVALID;
-    
-    UA_DataValue dv2;
-    UA_DataValue_init(&dv2);
-    dv2.hasServerPicoseconds = UA_TRUE;
-    dv2.hasServerTimestamp = UA_TRUE;
-    dv2.hasSourcePicoseconds = UA_TRUE;
-    dv2.hasSourceTimestamp = UA_TRUE;
-    dv2.hasStatus = UA_TRUE;
-    dv2.hasValue = UA_TRUE;
-
-    UA_DateTime srcts2 = UA_DateTime_fromUnixTime(1234567);
-    UA_DateTime srvts2 = UA_DateTime_fromUnixTime(1234567);
-
-    dv2.sourceTimestamp = srcts2;
-    dv2.serverTimestamp = srvts2;
-    dv2.sourcePicoseconds = 0;
-    dv2.serverPicoseconds = 0;
-    
-    UA_Variant variant2;
-    UA_Variant_init(&variant2);
-    UA_Boolean variantContent2 = true;
-    UA_Variant_setScalarCopy(&variant2, &variantContent2, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    dv2.value = variant2;
-
-    dv2.status = UA_STATUSCODE_BADAPPLICATIONSIGNATUREINVALID;
-    
-    UA_WriteValue value;
-    UA_WriteValue_init(&value);
-    value.value = dv;
-    value.attributeId = 12;
-    value.indexRange = UA_STRING_ALLOC("BLOAB");
-    value.nodeId = UA_NODEID_STRING_ALLOC(0, "a1111");
-    
-    UA_WriteValue value2;
-    UA_WriteValue_init(&value2);
-    value2.value = dv2;
-    value2.attributeId = 12;
-    value2.indexRange = UA_STRING_ALLOC("BLOAB");
-    value2.nodeId = UA_NODEID_STRING_ALLOC(0, "a2222");
-    
-    UA_WriteValue *values = (UA_WriteValue*)UA_calloc(2,sizeof(UA_WriteValue));
-    values[0] = value;
-    values[1] = value2;
-    
-    src.nodesToWrite = values;
-    src.nodesToWriteSize = 2;
-    src.requestHeader = rh;
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_WRITEREQUEST];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"RequestHeader\":{\"AuthenticationToken\":{\"IdType\":1,\"Id\":\"authToken\"},\"Timestamp\":\"1970-01-15T06:56:07Z\",\"RequestHandle\":123123,\"ReturnDiagnostics\":1,\"AuditEntryId\":\"Auditentryid\",\"TimeoutHint\":120,\"AdditionalHeader\":{\"TypeId\":{\"Id\":1},\"Body\":false}},\"NodesToWrite\":[{\"NodeId\":{\"IdType\":1,\"Id\":\"a1111\"},\"AttributeId\":12,\"IndexRange\":\"BLOAB\",\"Value\":{\"Value\":{\"Type\":1,\"Body\":true},\"Status\":2153250816,\"SourceTimestamp\":\"1970-01-15T06:56:07Z\",\"ServerTimestamp\":\"1970-01-15T06:56:07Z\"}},{\"NodeId\":{\"IdType\":1,\"Id\":\"a2222\"},\"AttributeId\":12,\"IndexRange\":\"BLOAB\",\"Value\":{\"Value\":{\"Type\":1,\"Body\":true},\"Status\":2153250816,\"SourceTimestamp\":\"1970-01-15T06:56:07Z\",\"ServerTimestamp\":\"1970-01-15T06:56:07Z\"}}]}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-    UA_WriteRequest_deleteMembers(&src);
-}
-END_TEST
-
-
-START_TEST(UA_VariableAttributes_json_encode) {
-
-    const UA_VariableTypeAttributes UA_VariableTypeAttributes_default = {
-        0,                           /* specifiedAttributes */
-        {{0, NULL}, {0, NULL}},      /* displayName */
-        {{0, NULL}, {0, NULL}},      /* description */
-        0, 0,                        /* writeMask (userWriteMask) */
-        {NULL, UA_VARIANT_DATA, 0, NULL, 0, NULL},          /* value */
-        {0, UA_NODEIDTYPE_NUMERIC, {0}},   /* dataType */
-        UA_VALUERANK_ANY,            /* valueRank */
-        0, NULL,                     /* arrayDimensions */
-        true                         /* isAbstract */
-    };
-
-    UA_VariableTypeAttributes src = UA_VariableTypeAttributes_default;
-    UA_Int32 myInteger = 42;
-    UA_Variant_setScalar(&src.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    src.description = UA_LOCALIZEDTEXT("en-US","the answer");
-    src.displayName = UA_LOCALIZEDTEXT("en-US","the answer");
-    src.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-
-    const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIABLETYPEATTRIBUTES];
-    size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
-    UA_ByteString buf;
-
-    UA_ByteString_allocBuffer(&buf, size+1);
-
-    UA_Byte *bufPos = &buf.data[0];
-    const UA_Byte *bufEnd = &buf.data[size+1];
-
-    status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
-    char* result = "{\"SpecifiedAttributes\":0,"
-                   "\"DisplayName\":{\"Locale\":\"en-US\",\"Text\":\"the answer\"},"
-                   "\"Description\":{\"Locale\":\"en-US\",\"Text\":\"the answer\"},"
-                   "\"WriteMask\":0,\"UserWriteMask\":0,"
-                   "\"Value\":{\"Type\":6,\"Body\":42},"
-                   "\"DataType\":{\"Id\":6},\"ValueRank\":-2,"
-                   "\"ArrayDimensions\":[],"
-                   "\"IsAbstract\":true}";
-    ck_assert_str_eq(result, (char*)buf.data);
-    UA_ByteString_deleteMembers(&buf);
-}
-END_TEST
-
-// ---------------------------DECODE-------------------------------------
-
-START_TEST(UA_Byte_Min_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":3,\"Body\":0}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_BYTE);
-    ck_assert_uint_eq(*((UA_Byte*)out.data), 0);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Byte_Max_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":3,\"Body\":255}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_BYTE);
-    ck_assert_uint_eq(*((UA_Byte*)out.data), 255);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-/* ----UInt16---- */
-START_TEST(UA_UInt16_Min_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":5,\"Body\":0}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_UINT16);
-    ck_assert_uint_eq(*((UA_UInt16*)out.data), 0);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_UInt16_Max_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":5,\"Body\":65535}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_UINT16);
-    ck_assert_uint_eq(*((UA_UInt16*)out.data), 65535);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_UInt32_Min_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":7,\"Body\":0}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_UINT32);
-    ck_assert_uint_eq(*((UA_UInt32*)out.data), 0);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_UInt32_Max_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":7,\"Body\":4294967295}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_UINT32);
-    ck_assert_uint_eq(*((UA_UInt32*)out.data), 4294967295);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_UInt64_Min_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":9,\"Body\":\"0\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_UINT64);    
-    ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[2], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[3], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[4], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[5], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[6], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[7], 0x00);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_UInt64_Max_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":9,\"Body\":\"18446744073709551615\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_UINT64);
-    ck_assert_int_eq(((u8*)(out.data))[0], 0xFF);
-    ck_assert_int_eq(((u8*)(out.data))[1], 0xFF);
-    ck_assert_int_eq(((u8*)(out.data))[2], 0xFF);
-    ck_assert_int_eq(((u8*)(out.data))[3], 0xFF);
-    ck_assert_int_eq(((u8*)(out.data))[4], 0xFF);
-    ck_assert_int_eq(((u8*)(out.data))[5], 0xFF);
-    ck_assert_int_eq(((u8*)(out.data))[6], 0xFF);
-    ck_assert_int_eq(((u8*)(out.data))[7], 0xFF);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_UInt64_Overflow_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":9,\"Body\":\"18446744073709551616\"}");
-    // when
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_SByte_Min_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":2,\"Body\":-128}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_SBYTE);
-    ck_assert_int_eq(*((UA_SByte*)out.data), -128);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_SByte_Max_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":2,\"Body\":127}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_SBYTE);
-    ck_assert_int_eq(*((UA_SByte*)out.data), 127);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_Int16_Min_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":4,\"Body\":-32768}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_INT16);
-    ck_assert_int_eq(*((UA_Int16*)out.data), -32768);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Int16_Max_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":4,\"Body\":32767}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_INT16);
-    ck_assert_int_eq(*((UA_Int16*)out.data), 32767);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_Int32_Min_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":6,\"Body\":-2147483648}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_INT32);
-    ck_assert(*(UA_Int32*)out.data == -2147483648);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Int32_Max_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":6,\"Body\":2147483647}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_INT32);
-    ck_assert_int_eq(*((UA_Int32*)out.data), 2147483647);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_Int64_Min_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":8,\"Body\":\"-9223372036854775808\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_INT64);    
-    ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[2], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[3], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[4], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[5], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[6], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[7], 0x80);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_Int64_Max_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":8,\"Body\":\"9223372036854775807\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_INT64);    
-    ck_assert_int_eq(((u8*)(out.data))[0], 0xFF);
-    ck_assert_int_eq(((u8*)(out.data))[1], 0xFF);
-    ck_assert_int_eq(((u8*)(out.data))[2], 0xFF);
-    ck_assert_int_eq(((u8*)(out.data))[3], 0xFF);
-    ck_assert_int_eq(((u8*)(out.data))[4], 0xFF);
-    ck_assert_int_eq(((u8*)(out.data))[5], 0xFF);
-    ck_assert_int_eq(((u8*)(out.data))[6], 0xFF);
-    ck_assert_int_eq(((u8*)(out.data))[7], 0x7F);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_Int64_Overflow_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":8,\"Body\":\"9223372036854775808\"}");
-    // when
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Int64_TooBig_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":8,\"Body\":\"111111111111111111111111111111\"}");
-    // when
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Int64_NoDigit_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":8,\"Body\":\"a\"}");
-    // when
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Float_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":10,\"Body\":3.1415927410}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    //0 10000000 10010010000111111011011 = 40 49 0f db
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(((u8*)(out.data))[0], 0xdb);
-    ck_assert_int_eq(((u8*)(out.data))[1], 0x0f);
-    ck_assert_int_eq(((u8*)(out.data))[2], 0x49);
-    ck_assert_int_eq(((u8*)(out.data))[3], 0x40);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Float_json_one_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":10,\"Body\":1}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    //0 01111111 00000000000000000000000 = 3f80 0000
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[2], 0x80);
-    ck_assert_int_eq(((u8*)(out.data))[3], 0x3f);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_Float_json_inf_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":10,\"Body\":\"Infinity\"}");
-    // when
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[2], 0x80);
-    ck_assert_int_eq(((u8*)(out.data))[3], 0x7f);
-
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_Float_json_neginf_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":10,\"Body\":\"-Infinity\"}");
-    // when
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    //0 01111111 00000000000000000000000 = 3f80 0000
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[2], 0x80);
-    ck_assert_int_eq(((u8*)(out.data))[3], 0xff);
-
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Float_json_nan_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":10,\"Body\":\"NaN\"}");
-    // when
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    //0 01111111 00000000000000000000000 = 3f80 0000
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    //ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
-    //ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
-    //ck_assert_int_eq(((u8*)(out.data))[2], 0x80);
-    //ck_assert_int_eq(((u8*)(out.data))[3], 0x3f);
-
-    UA_Float val = *((UA_Float*)out.data);
-    ck_assert(val != val);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Float_json_negnan_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":10,\"Body\":\"-NaN\"}");
-    // when
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    //0 01111111 00000000000000000000000 = 3f80 0000
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    //ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
-    //ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
-    //ck_assert_int_eq(((u8*)(out.data))[2], 0x80);
-    //ck_assert_int_eq(((u8*)(out.data))[3], 0x3f);
-
-    UA_Float val = *((UA_Float*)out.data);
-    ck_assert(val != val); /* check if not a number */
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Double_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":1.1234}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);   
-    ck_assert_int_eq(((u8*)(out.data))[0], 0xef);
-    ck_assert_int_eq(((u8*)(out.data))[1], 0x38);
-    ck_assert_int_eq(((u8*)(out.data))[2], 0x45);
-    ck_assert_int_eq(((u8*)(out.data))[3], 0x47);
-    ck_assert_int_eq(((u8*)(out.data))[4], 0x72);
-    ck_assert_int_eq(((u8*)(out.data))[5], 0xf9);
-    ck_assert_int_eq(((u8*)(out.data))[6], 0xf1);
-    ck_assert_int_eq(((u8*)(out.data))[7], 0x3f);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Double_corrupt_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":1.12.34}");
-    // when
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Double_one_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    //UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":1}");
-    UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":1}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    // 0 01111111111 0000000000000000000000000000000000000000000000000000
-    // 3FF0000000000000
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);       
-    ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[2], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[3], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[4], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[5], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[6], 0xF0);
-    ck_assert_int_eq(((u8*)(out.data))[7], 0x3F);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_Double_onepointsmallest_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":1.0000000000000002}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    // 0 01111111111 0000000000000000000000000000000000000000000000000001
-    // 3FF0000000000001
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);       
-    ck_assert_int_eq(((u8*)(out.data))[0], 0x01);
-    ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[2], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[3], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[4], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[5], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[6], 0xF0);
-    ck_assert_int_eq(((u8*)(out.data))[7], 0x3F);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Double_nan_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":\"NaN\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Double val = *((UA_Double*)out.data);
-    ck_assert(val != val); /* check if not a number */
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Double_negnan_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":\"-NaN\"}");
-    // when
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Double val = *((UA_Double*)out.data);
-    ck_assert(val != val); /* check if not a number */
-
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Double_inf_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":\"Infinity\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    // 0 111 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);       
-    ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[2], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[3], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[4], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[5], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[6], 0xF0);
-    ck_assert_int_eq(((u8*)(out.data))[7], 0x7F);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Double_neginf_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":\"-Infinity\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    // 1 111 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);       
-    ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[2], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[3], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[4], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[5], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[6], 0xF0);
-    ck_assert_int_eq(((u8*)(out.data))[7], 0xFF);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Double_zero_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":0}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    // 0 000 0000 0000 0000 0000 0000 00000000 00000000 00000000 00000000 00000000
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);       
-    ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[2], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[3], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[4], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[5], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[6], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[7], 0x00);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Double_negzero_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":-0}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    // 1 000 0000 0000 0000 00000000 00000000 00000000 00000000 00000000 00000000
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);       
-    ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[2], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[3], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[4], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[5], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[6], 0x00);
-    ck_assert_int_eq(((u8*)(out.data))[7], 0x80);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_String_json_decode) { 
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":\"abcdef\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STRING);
-    ck_assert_int_eq(  ((UA_String*)out.data)->length, 6);
-    ck_assert_int_eq( ((UA_String*)out.data)->data[0], 'a');
-    ck_assert_int_eq(((UA_String*)out.data)->data[1], 'b');
-    ck_assert_int_eq(((UA_String*)out.data)->data[2], 'c');
-    ck_assert_int_eq(((UA_String*)out.data)->data[3], 'd');
-    ck_assert_int_eq(((UA_String*)out.data)->data[4], 'e');
-    ck_assert_int_eq(((UA_String*)out.data)->data[5], 'f');
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_String_empty_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":\"\"}");
-    // when
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STRING);
-    ck_assert_int_eq(  ((UA_String*)out.data)->length, 0);
-    ck_assert_ptr_eq(  ((UA_String*)out.data)->data, UA_EMPTY_ARRAY_SENTINEL);
-
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_String_unescapeBS_json_decode) { 
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":\"ab\\tcdef\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STRING);
-    ck_assert_int_eq(  ((UA_String*)out.data)->length, 7);
-    ck_assert_int_eq( ((UA_String*)out.data)->data[0], 'a');
-    ck_assert_int_eq(((UA_String*)out.data)->data[1], 'b');
-    ck_assert_int_eq(((UA_String*)out.data)->data[2], '\t');
-    ck_assert_int_eq(((UA_String*)out.data)->data[3], 'c');
-    ck_assert_int_eq(((UA_String*)out.data)->data[4], 'd');
-    ck_assert_int_eq(((UA_String*)out.data)->data[5], 'e');
-    ck_assert_int_eq(((UA_String*)out.data)->data[6], 'f');
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_String_escape_unicode_json_decode) { 
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":\"\\u002c\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STRING);
-    ck_assert_int_eq(  ((UA_String*)out.data)->length, 1);
-    ck_assert_int_eq( ((UA_String*)out.data)->data[0], ',');
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_String_escape2_json_decode) { 
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":\"\\b\\th\\\"e\\fl\\nl\\\\o\\r\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STRING);
-    ck_assert_int_eq(  ((UA_String*)out.data)->length, 12);//  \b\th\"e\fl\nl\\o\r
-    ck_assert_int_eq( ((UA_String*)out.data)->data[0], '\b');
-    ck_assert_int_eq( ((UA_String*)out.data)->data[1], '\t');
-    ck_assert_int_eq( ((UA_String*)out.data)->data[2], 'h');
-    ck_assert_int_eq( ((UA_String*)out.data)->data[3], '\"');
-    ck_assert_int_eq( ((UA_String*)out.data)->data[4], 'e');
-    ck_assert_int_eq( ((UA_String*)out.data)->data[5], '\f');
-    ck_assert_int_eq( ((UA_String*)out.data)->data[6], 'l');
-    ck_assert_int_eq( ((UA_String*)out.data)->data[7], '\n');
-    ck_assert_int_eq( ((UA_String*)out.data)->data[8], 'l');
-    ck_assert_int_eq( ((UA_String*)out.data)->data[9], '\\');
-    ck_assert_int_eq( ((UA_String*)out.data)->data[10], 'o');
-    ck_assert_int_eq( ((UA_String*)out.data)->data[11], '\r');
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_String_surrogatePair_json_decode) { 
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":\"\\uD800\\uDC00\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STRING);
-    ck_assert_int_eq(  ((UA_String*)out.data)->length, 4);//U+10000  => 0xF0 0x90 0x80 0x80
-    ck_assert_uint_eq( ((UA_String*)out.data)->data[0], 0xF0);
-    ck_assert_uint_eq( ((UA_String*)out.data)->data[1], 0x90);
-    ck_assert_uint_eq( ((UA_String*)out.data)->data[2], 0x80);
-    ck_assert_uint_eq( ((UA_String*)out.data)->data[3], 0x80);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-/* ---------------ByteString---------------------------*/
-START_TEST(UA_ByteString_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":15,\"Body\":\"YXNkZmFzZGY=\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_BYTESTRING);
-    ck_assert_int_eq(((UA_ByteString*)out.data)->length, 8);
-    ck_assert_int_eq(((UA_ByteString*)out.data)->data[0], 'a');
-    ck_assert_int_eq(((UA_ByteString*)out.data)->data[1], 's');
-    ck_assert_int_eq(((UA_ByteString*)out.data)->data[2], 'd');
-    ck_assert_int_eq(((UA_ByteString*)out.data)->data[3], 'f');
-    ck_assert_int_eq(((UA_ByteString*)out.data)->data[4], 'a');
-    ck_assert_int_eq(((UA_ByteString*)out.data)->data[5], 's');
-    ck_assert_int_eq(((UA_ByteString*)out.data)->data[6], 'd');
-    ck_assert_int_eq(((UA_ByteString*)out.data)->data[7], 'f');
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-
-START_TEST(UA_ByteString_bad_json_decode) {
-    UA_ByteString out;
-    UA_ByteString_init(&out);
-    UA_ByteString buf = UA_STRING("\"\x90!\xc5 c{\",");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_BYTESTRING]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    UA_ByteString_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_ByteString_null_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":15,\"Body\":null}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_BYTESTRING);
-    ck_assert_ptr_eq(out.data, NULL);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-/* ---------GUID---------------------------  */
-START_TEST(UA_Guid_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":14,\"Body\":\"00000001-0002-0003-0405-060708090A0B\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_GUID);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data1, 1);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data2, 2);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data3, 3);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data4[0], 4);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data4[1], 5);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data4[2], 6);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data4[3], 7);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data4[4], 8);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data4[5], 9);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data4[6], 10);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data4[7], 11);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Guid_lower_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":14,\"Body\":\"00000001-0002-0003-0405-060708090a0b\"}");
-    // when
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_GUID);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data1, 1);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data2, 2);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data3, 3);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data4[0], 4);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data4[1], 5);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data4[2], 6);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data4[3], 7);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data4[4], 8);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data4[5], 9);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data4[6], 10);
-    ck_assert_int_eq(((UA_Guid*)out.data)->data4[7], 11);
-
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_Guid_tooShort_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":14,\"Body\":\"00000001-00\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Guid_tooLong_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":14,\"Body\":\"00000001-0002-0003-0405-060708090A0B00000001\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Guid_wrong_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":14,\"Body\":\"00000=01-0002-0003-0405-060708090A0B\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-/* ------Statuscode----------- */
-START_TEST(UA_StatusCode_2_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":19,\"Body\":2}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STATUSCODE);
-    ck_assert_uint_eq(*((UA_StatusCode*)out.data), 2);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_StatusCode_3_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-
-    UA_ByteString buf = UA_STRING("{\"Type\":19,\"Body\":222222222222222222222222222222222222}");
-    // when
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_StatusCode_0_json_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":19,\"Body\":0}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STATUSCODE);
-    ck_assert_uint_eq(*((UA_StatusCode*)out.data), 0);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-/* ----------DateTime---------------- */
-START_TEST(UA_DateTime_json_decode) {
-    // given
-    UA_DateTime out;
-    UA_DateTime_init(&out);
-    UA_ByteString buf = UA_STRING("\"1970-01-02T01:02:03.005Z\"");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_DATETIME]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    UA_DateTimeStruct dts = UA_DateTime_toStruct(out);
-    ck_assert_int_eq(dts.year, 1970);
-    ck_assert_int_eq(dts.month, 1);
-    ck_assert_int_eq(dts.day, 2);
-    ck_assert_int_eq(dts.hour, 1);
-    ck_assert_int_eq(dts.min, 2);
-    ck_assert_int_eq(dts.sec, 3);
-    ck_assert_int_eq(dts.milliSec, 5);
-    ck_assert_int_eq(dts.microSec, 0);
-    ck_assert_int_eq(dts.nanoSec, 0);
-    
-    UA_DateTime_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_DateTime_micro_json_decode) {
-    // given
-    UA_DateTime out;
-    UA_DateTime_init(&out);
-    UA_ByteString buf = UA_STRING("\"1970-01-02T01:02:03.042Z\"");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_DATETIME]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    UA_DateTimeStruct dts = UA_DateTime_toStruct(out);
-    ck_assert_int_eq(dts.year, 1970);
-    ck_assert_int_eq(dts.month, 1);
-    ck_assert_int_eq(dts.day, 2);
-    ck_assert_int_eq(dts.hour, 1);
-    ck_assert_int_eq(dts.min, 2);
-    ck_assert_int_eq(dts.sec, 3);
-    ck_assert_int_eq(dts.milliSec, 42);
-    ck_assert_int_eq(dts.microSec, 0);
-    ck_assert_int_eq(dts.nanoSec, 0);
-    
-    UA_DateTime_deleteMembers(&out);
-}
-END_TEST
-
-
-/* ---------------QualifiedName----------------------- */
-START_TEST(UA_QualifiedName_json_decode) {
-    // given
-    UA_QualifiedName out;
-    UA_QualifiedName_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Name\":\"derName\",\"Uri\":1}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_QUALIFIEDNAME]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.name.length, 7);
-    ck_assert_int_eq(out.name.data[1], 'e');
-    ck_assert_int_eq(out.name.data[6], 'e');
-    ck_assert_int_eq(out.namespaceIndex, 1);
-    
-    UA_QualifiedName_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_QualifiedName_null_json_decode) {
-    
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":20,\"Body\":null}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_QUALIFIEDNAME);
-    ck_assert_ptr_eq(out.data, NULL);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-/* --------LocalizedText------------ */
-START_TEST(UA_LocalizedText_json_decode) {
-    // given
-    UA_LocalizedText out;
-    UA_LocalizedText_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Locale\":\"t1\",\"Text\":\"t2\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.locale.data[0], 't');
-    ck_assert_int_eq(out.text.data[0], 't');
-    ck_assert_int_eq(out.locale.data[1], '1');
-    ck_assert_int_eq(out.text.data[1], '2');
-    
-    UA_LocalizedText_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_LocalizedText_missing_json_decode) {
-    // given
-    UA_LocalizedText out;
-    UA_LocalizedText_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Locale\":\"t1\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.locale.length, 2);
-    ck_assert_int_eq(out.locale.data[0], 't');
-    ck_assert_int_eq(out.locale.data[1], '1');
-    ck_assert_ptr_eq(out.text.data, NULL);
-    ck_assert_int_eq(out.text.length, 0);
-    
-    UA_LocalizedText_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_LocalizedText_null_json_decode) {
-    
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":21,\"Body\":null}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_LOCALIZEDTEXT);
-    ck_assert_ptr_eq(out.data, NULL);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_ViewDescription_json_decode) {
-    // given
-    UA_ViewDescription out;
-    UA_ViewDescription_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Timestamp\":\"1970-01-15T06:56:07Z\",\"ViewVersion\":1236,\"ViewId\":{\"Id\":\"00000009-0002-027C-F3BF-BB7BEEFEEFBE\",\"IdType\":2}}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VIEWDESCRIPTION]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.viewVersion, 1236);
-    ck_assert_int_eq(out.viewId.identifierType, UA_NODEIDTYPE_GUID);
-    UA_DateTimeStruct dts = UA_DateTime_toStruct(out.timestamp);
-    ck_assert_int_eq(dts.year, 1970);
-    ck_assert_int_eq(dts.month, 1);
-    ck_assert_int_eq(dts.day, 15);
-    ck_assert_int_eq(dts.hour, 6);
-    ck_assert_int_eq(dts.min, 56);
-    ck_assert_int_eq(dts.sec, 7);
-    ck_assert_int_eq(dts.milliSec, 0);
-    ck_assert_int_eq(dts.microSec, 0);
-    ck_assert_int_eq(dts.nanoSec, 0);
-    ck_assert_int_eq(out.viewId.identifier.guid.data1, 9);
-    ck_assert_int_eq(out.viewId.identifier.guid.data2, 2);
-    
-    UA_ViewDescription_deleteMembers(&out);
-}
-END_TEST
-
-
-
-/* -----------------NodeId----------------------------- */
-START_TEST(UA_NodeId_Nummeric_json_decode) {
-    // given
-    UA_NodeId out;
-    UA_NodeId_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Id\":42}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_NODEID]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.identifier.numeric, 42);
-    ck_assert_int_eq(out.namespaceIndex, 0);
-    ck_assert_int_eq(out.identifierType, UA_NODEIDTYPE_NUMERIC);
-    
-    UA_NodeId_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_NodeId_Nummeric_Namespace_json_decode) {
-    // given
-    UA_NodeId out;
-    UA_NodeId_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Id\":42,\"Namespace\":123}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_NODEID]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.identifier.numeric, 42);
-    ck_assert_int_eq(out.namespaceIndex, 123);
-    ck_assert_int_eq(out.identifierType, UA_NODEIDTYPE_NUMERIC);
-    
-    UA_NodeId_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_NodeId_String_json_decode) {
-    // given
-    UA_NodeId out;
-    UA_NodeId_init(&out);
-    UA_ByteString buf = UA_STRING("{\"IdType\":1,\"Id\":\"test123\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_NODEID]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.identifier.string.length, 7);
-    ck_assert_int_eq(out.identifier.string.data[0], 't');
-    ck_assert_int_eq(out.identifier.string.data[1], 'e');
-    ck_assert_int_eq(out.identifier.string.data[2], 's');
-    ck_assert_int_eq(out.identifier.string.data[3], 't');
-    ck_assert_int_eq(out.identifier.string.data[4], '1');
-    ck_assert_int_eq(out.identifier.string.data[5], '2');
-    ck_assert_int_eq(out.identifier.string.data[6], '3');
-    ck_assert_int_eq(out.namespaceIndex, 0);
-    ck_assert_int_eq(out.identifierType, UA_NODEIDTYPE_STRING);
-    
-    UA_NodeId_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_NodeId_Guid_json_decode) {
-    // given
-    UA_NodeId out;
-    UA_NodeId_init(&out);
-    UA_ByteString buf = UA_STRING("{\"IdType\":2,\"Id\":\"00000001-0002-0003-0405-060708090A0B\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_NODEID]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    ck_assert_int_eq(out.namespaceIndex, 0);
-    ck_assert_int_eq(out.identifierType, UA_NODEIDTYPE_GUID);
-    ck_assert_int_eq(out.identifier.guid.data1, 1);
-    ck_assert_int_eq(out.identifier.guid.data2, 2);
-    ck_assert_int_eq(out.identifier.guid.data3, 3);
-    ck_assert_int_eq(out.identifier.guid.data4[0], 4);
-    ck_assert_int_eq(out.identifier.guid.data4[1], 5);
-    ck_assert_int_eq(out.identifier.guid.data4[2], 6);
-    ck_assert_int_eq(out.identifier.guid.data4[3], 7);
-    ck_assert_int_eq(out.identifier.guid.data4[4], 8);
-    ck_assert_int_eq(out.identifier.guid.data4[5], 9);
-    ck_assert_int_eq(out.identifier.guid.data4[6], 10);
-    ck_assert_int_eq(out.identifier.guid.data4[7], 11);
-    
-    UA_NodeId_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_NodeId_ByteString_json_decode) {
-    // given
-    UA_NodeId out;
-    UA_NodeId_init(&out);
-    UA_ByteString buf = UA_STRING("{\"IdType\":3,\"Id\":\"YXNkZmFzZGY=\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_NODEID]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    ck_assert_int_eq(out.namespaceIndex, 0);
-    ck_assert_int_eq(out.identifierType, UA_NODEIDTYPE_BYTESTRING);
-    ck_assert_int_eq(out.identifier.byteString.length, 8);
-    ck_assert_int_eq(out.identifier.byteString.data[0], 'a');
-    ck_assert_int_eq(out.identifier.byteString.data[1], 's');
-    ck_assert_int_eq(out.identifier.byteString.data[2], 'd');
-    ck_assert_int_eq(out.identifier.byteString.data[3], 'f');
-    ck_assert_int_eq(out.identifier.byteString.data[4], 'a');
-    ck_assert_int_eq(out.identifier.byteString.data[5], 's');
-    ck_assert_int_eq(out.identifier.byteString.data[6], 'd');
-    ck_assert_int_eq(out.identifier.byteString.data[7], 'f');
-    
-    UA_NodeId_deleteMembers(&out);
-}
-END_TEST
-
-
-/* -----------------------ExpandedNodeId---------------------------*/
-START_TEST(UA_ExpandedNodeId_Nummeric_json_decode) {
-    // given
-    UA_ExpandedNodeId out;
-    UA_ExpandedNodeId_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Id\":42}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.nodeId.identifier.numeric, 42);
-    ck_assert_int_eq(out.nodeId.identifierType, UA_NODEIDTYPE_NUMERIC);
-    ck_assert_ptr_eq(out.namespaceUri.data, NULL);
-    ck_assert_int_eq(out.namespaceUri.length, 0);
-    ck_assert_int_eq(out.serverIndex, 0);
-    
-    UA_ExpandedNodeId_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_ExpandedNodeId_String_json_decode) {
-    // given
-    UA_ExpandedNodeId out;
-    UA_ExpandedNodeId_init(&out);
-    UA_ByteString buf = UA_STRING("{\"IdType\":1,\"Id\":\"test\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.nodeId.identifier.string.length, 4);
-    ck_assert_int_eq(out.nodeId.identifier.string.data[0], 't');
-    ck_assert_int_eq(out.nodeId.identifierType, UA_NODEIDTYPE_STRING);
-    ck_assert_ptr_eq(out.namespaceUri.data, NULL);
-    ck_assert_int_eq(out.namespaceUri.length, 0);
-    ck_assert_int_eq(out.serverIndex, 0);
-    
-    UA_ExpandedNodeId_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_ExpandedNodeId_String_Namespace_json_decode) {
-    // given
-    UA_ExpandedNodeId out;
-    UA_ExpandedNodeId_init(&out);
-    UA_ByteString buf = UA_STRING("{\"IdType\":1,\"Id\":\"test\",\"Namespace\":\"abcdef\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.nodeId.identifier.string.length, 4);
-    ck_assert_int_eq(out.nodeId.identifier.string.data[0], 't');
-    ck_assert_int_eq(out.nodeId.identifier.string.data[1], 'e');
-    ck_assert_int_eq(out.nodeId.identifier.string.data[2], 's');
-    ck_assert_int_eq(out.nodeId.identifier.string.data[3], 't');
-    ck_assert_int_eq(out.nodeId.identifierType, UA_NODEIDTYPE_STRING);
-    ck_assert_int_eq(out.namespaceUri.length, 6);
-    ck_assert_int_eq(out.namespaceUri.data[0], 'a');
-    ck_assert_int_eq(out.namespaceUri.data[1], 'b');
-    ck_assert_int_eq(out.namespaceUri.data[2], 'c');
-    ck_assert_int_eq(out.namespaceUri.data[3], 'd');
-    ck_assert_int_eq(out.namespaceUri.data[4], 'e');
-    ck_assert_int_eq(out.namespaceUri.data[5], 'f');
-    ck_assert_int_eq(out.serverIndex, 0);
-    
-    UA_ExpandedNodeId_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_ExpandedNodeId_String_NamespaceAsIndex_json_decode) {
-    // given
-    UA_ExpandedNodeId out;
-    UA_ExpandedNodeId_init(&out);
-    UA_ByteString buf = UA_STRING("{\"IdType\":1,\"Id\":\"test\",\"Namespace\":42}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.nodeId.identifier.string.length, 4);
-    ck_assert_int_eq(out.nodeId.identifier.string.data[0], 't');
-    ck_assert_int_eq(out.nodeId.identifier.string.data[1], 'e');
-    ck_assert_int_eq(out.nodeId.identifier.string.data[2], 's');
-    ck_assert_int_eq(out.nodeId.identifier.string.data[3], 't');
-    ck_assert_int_eq(out.nodeId.identifierType, UA_NODEIDTYPE_STRING);
-    ck_assert_int_eq(out.namespaceUri.length, 0);
-    ck_assert_ptr_eq(out.namespaceUri.data, NULL);
-    ck_assert_int_eq(out.nodeId.namespaceIndex, 42);
-    ck_assert_int_eq(out.serverIndex, 0);
-    
-    UA_ExpandedNodeId_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_ExpandedNodeId_String_Namespace_ServerUri_json_decode) {
-    // given
-    UA_ExpandedNodeId out;
-    UA_ExpandedNodeId_init(&out);
-    UA_ByteString buf = UA_STRING("{\"IdType\":1,\"Id\":\"test\",\"Namespace\":\"test\",\"ServerUri\":13}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.nodeId.identifier.string.length, 4);
-    ck_assert_int_eq(out.nodeId.identifier.string.data[0], 't');
-    ck_assert_int_eq(out.nodeId.identifier.string.data[1], 'e');
-    ck_assert_int_eq(out.nodeId.identifier.string.data[2], 's');
-    ck_assert_int_eq(out.nodeId.identifier.string.data[3], 't');
-    ck_assert_int_eq(out.nodeId.identifierType, UA_NODEIDTYPE_STRING);
-    ck_assert_int_eq(out.serverIndex, 13);
-    ck_assert_int_eq(out.namespaceUri.data[0], 't');
-    ck_assert_int_eq(out.namespaceUri.data[1], 'e');
-    ck_assert_int_eq(out.namespaceUri.data[2], 's');
-    ck_assert_int_eq(out.namespaceUri.data[3], 't');
-    
-    UA_ExpandedNodeId_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_ExpandedNodeId_ByteString_json_decode) {
-    // given
-    UA_ExpandedNodeId out;
-    UA_ExpandedNodeId_init(&out);
-    UA_ByteString buf = UA_STRING("{\"IdType\":3,\"Id\":\"YXNkZmFzZGY=\",\"Namespace\":\"test\",\"ServerUri\":13}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.nodeId.identifier.string.length, 8);
-    ck_assert_int_eq(out.nodeId.identifier.string.data[0], 'a');
-    ck_assert_int_eq(out.nodeId.identifier.string.data[1], 's');
-    ck_assert_int_eq(out.nodeId.identifier.string.data[2], 'd');
-    ck_assert_int_eq(out.nodeId.identifier.string.data[3], 'f');
-    ck_assert_int_eq(out.nodeId.identifier.string.data[4], 'a');
-    ck_assert_int_eq(out.nodeId.identifier.string.data[5], 's');
-    ck_assert_int_eq(out.nodeId.identifier.string.data[6], 'd');
-    ck_assert_int_eq(out.nodeId.identifier.string.data[7], 'f');
-    ck_assert_int_eq(out.nodeId.identifierType, UA_NODEIDTYPE_BYTESTRING);
-    ck_assert_int_eq(out.serverIndex, 13);
-    ck_assert_int_eq(out.namespaceUri.data[0], 't');
-    ck_assert_int_eq(out.namespaceUri.data[1], 'e');
-    ck_assert_int_eq(out.namespaceUri.data[2], 's');
-    ck_assert_int_eq(out.namespaceUri.data[3], 't');
-    
-    UA_ExpandedNodeId_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_DiagnosticInfo_json_decode) {
-    // given
-    
-    UA_DiagnosticInfo out;
-    UA_DiagnosticInfo_init(&out);
-    out.innerDiagnosticInfo = NULL;
-    UA_ByteString buf = UA_STRING("{\"SymbolicId\":13,"
-            "\"LocalizedText\":14,"
-            "\"Locale\":12,"
-            "\"AdditionalInfo\":\"additionalInfo\","
-            "\"InnerStatusCode\":2155216896,"
-            "\"InnerDiagnosticInfo\":{\"AdditionalInfo\":\"INNER ADDITION INFO\"}}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_DIAGNOSTICINFO]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.locale, 12);
-    ck_assert_int_eq(out.symbolicId, 13);
-    ck_assert_int_eq(out.localizedText, 14);
-    ck_assert_int_eq(out.innerStatusCode, 2155216896);
-    ck_assert_int_eq(out.additionalInfo.length, 14);
-    ck_assert_int_eq(out.innerDiagnosticInfo->additionalInfo.length, 19);
-    UA_DiagnosticInfo_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_DiagnosticInfo_null_json_decode) {
-    
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":25,\"Body\":null}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_DIAGNOSTICINFO);
-    ck_assert_ptr_eq(out.data, NULL);
-    
-    //ck_assert_uint_eq(((UA_DiagnosticInfo*)out.data)->hasAdditionalInfo, 0);
-    //ck_assert_uint_eq(((UA_DiagnosticInfo*)out.data)->hasInnerDiagnosticInfo, 0);
-    //ck_assert_uint_eq(((UA_DiagnosticInfo*)out.data)->hasInnerStatusCode, 0);
-    //ck_assert_uint_eq(((UA_DiagnosticInfo*)out.data)->hasLocale, 0);
-    //ck_assert_uint_eq(((UA_DiagnosticInfo*)out.data)->hasLocalizedText, 0);
-    //ck_assert_uint_eq(((UA_DiagnosticInfo*)out.data)->hasNamespaceUri, 0);
-    //ck_assert_uint_eq(((UA_DiagnosticInfo*)out.data)->hasSymbolicId, 0);
-    
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-/* --------------------DataValue--------------------------- */
-START_TEST(UA_DataValue_json_decode) {
-    // given
-    
-    UA_DataValue out;
-    UA_DataValue_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Value\":{\"Type\":1,\"Body\":true},\"Status\":2153250816,\"SourceTimestamp\":\"1970-01-15T06:56:07Z\",\"SourcePicoseconds\":0,\"ServerTimestamp\":\"1970-01-15T06:56:07Z\",\"ServerPicoseconds\":0}");
-
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    //UA_DiagnosticInfo inner = *out.innerDiagnosticInfo;
-
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.hasStatus, 1);
-    ck_assert_int_eq(out.hasServerPicoseconds, 1);
-    ck_assert_int_eq(out.hasServerTimestamp, 1);
-    ck_assert_int_eq(out.hasSourcePicoseconds, 1);
-    ck_assert_int_eq(out.hasSourceTimestamp, 1);
-    ck_assert_int_eq(out.hasValue, 1);
-    ck_assert_int_eq(out.status, 2153250816);
-    ck_assert_int_eq(out.value.type->typeIndex, 0);
-    ck_assert_int_eq((*((UA_Boolean*)out.value.data)), 1);
-    UA_DataValue_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_DataValueMissingFields_json_decode) {
-    // given
-    
-    UA_DataValue out;
-    UA_DataValue_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Value\":{\"Type\":1,\"Body\":true}}");
-
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    //UA_DiagnosticInfo inner = *out.innerDiagnosticInfo;
-
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.hasStatus, 0);
-    ck_assert_int_eq(out.hasServerPicoseconds, 0);
-    ck_assert_int_eq(out.hasServerTimestamp, 0);
-    ck_assert_int_eq(out.hasSourcePicoseconds, 0);
-    ck_assert_int_eq(out.hasSourceTimestamp, 0);
-    ck_assert_int_eq(out.hasValue, 1);
-    UA_DataValue_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_DataValue_null_json_decode) {
-    // given
-    
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":23,\"Body\":null}");
-
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    //UA_DiagnosticInfo inner = *out.innerDiagnosticInfo;
-
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_ptr_eq(out.data, NULL);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-/*----------------------ExtensionObject------------------------*/
-START_TEST(UA_ExtensionObject_json_decode) {
-    // given
-    
-    UA_ExtensionObject out;
-    UA_ExtensionObject_init(&out);
-    UA_ByteString buf = UA_STRING("{\"TypeId\":{\"Id\":1},\"Body\":true}");
-
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.encoding, UA_EXTENSIONOBJECT_DECODED);
-    ck_assert_int_eq(*((UA_Boolean*)out.content.decoded.data), UA_TRUE);
-    ck_assert_int_eq(out.content.decoded.type->typeIndex, UA_TYPES_BOOLEAN);
-    UA_ExtensionObject_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_ExtensionObject_EncodedByteString_json_decode) {
-    // given
-    
-    UA_ExtensionObject out;
-    UA_ExtensionObject_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Encoding\":1,\"TypeId\":{\"Id\":42},\"Body\":\"YXNkZmFzZGY=\"}");
-
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.encoding, UA_EXTENSIONOBJECT_ENCODED_BYTESTRING);
-    //TODO: Not base64 decoded, correct?
-    ck_assert_int_eq(out.content.encoded.body.data[0], 'Y');
-    ck_assert_int_eq(out.content.encoded.body.data[0], 'Y');
-    ck_assert_int_eq(out.content.encoded.body.data[1], 'X');
-    ck_assert_int_eq(out.content.encoded.body.data[2], 'N');
-    ck_assert_int_eq(out.content.encoded.body.data[3], 'k');
-    ck_assert_int_eq(out.content.encoded.body.data[4], 'Z');
-    ck_assert_int_eq(out.content.encoded.body.data[5], 'm');
-    ck_assert_int_eq(out.content.encoded.body.data[6], 'F');
-    ck_assert_int_eq(out.content.encoded.typeId.identifier.numeric, 42);
-    
-    UA_ExtensionObject_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_ExtensionObject_EncodedXml_json_decode) {
-    // given
-    
-    UA_ExtensionObject out;
-    UA_ExtensionObject_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Encoding\":2,\"TypeId\":{\"Id\":42},\"Body\":\"<Element></Element>\"}");
-
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.encoding, UA_EXTENSIONOBJECT_ENCODED_XML);
-    ck_assert_int_eq(out.content.encoded.body.data[0], '<');
-    ck_assert_int_eq(out.content.encoded.body.data[1], 'E');
-    ck_assert_int_eq(out.content.encoded.body.data[2], 'l');
-    ck_assert_int_eq(out.content.encoded.body.data[3], 'e');
-    ck_assert_int_eq(out.content.encoded.typeId.identifier.numeric, 42);
-    UA_ExtensionObject_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_ExtensionObject_Unkown_json_decode) {
-    // given
-    
-    UA_ExtensionObject out;
-    UA_ExtensionObject_init(&out);
-    UA_ByteString buf = UA_STRING("{\"TypeId\":{\"Id\":4711},\"Body\":{\"unknown\":\"body\",\"saveas\":\"Bytestring\"}}");
-
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.encoding, UA_EXTENSIONOBJECT_ENCODED_BYTESTRING);
-    ck_assert_int_eq(out.content.encoded.typeId.identifier.numeric, 4711);
-    
-    //{"unknown":"body","saveas":"Bytestring"}Q
-    ck_assert_int_eq(out.content.encoded.body.length, 40);
-    ck_assert_int_eq(out.content.encoded.body.data[2], 'u');
-    ck_assert_int_eq(out.content.encoded.body.data[3], 'n');
-    ck_assert_int_eq(out.content.encoded.body.data[4], 'k');
-    ck_assert_int_eq(out.content.encoded.body.data[5], 'n');
-    ck_assert_int_eq(out.content.encoded.body.data[6], 'o');
-    ck_assert_int_eq(out.content.encoded.body.data[7], 'w');
-    UA_ExtensionObject_deleteMembers(&out);
-}
-END_TEST
-
-/* ----------------- Variant ---------------------*/
-START_TEST(UA_VariantBool_json_decode) {
-    // given
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":1,\"Body\":false}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, 0);
-    ck_assert_uint_eq(*((UA_Boolean*)out.data), 0);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_VariantBoolNull_json_decode) {
-    // given
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":1,\"Body\":null}");
-    // when
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_VariantStringArray_json_decode) {
-    // given
-    
-    UA_Variant *out = UA_Variant_new();
-    UA_Variant_init(out);
-    UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\"],\"Dimension\":[2,4]}");
-    //UA_ByteString buf = UA_STRING("{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896}");
-
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, out, &UA_TYPES[UA_TYPES_VARIANT]);
-
-    UA_String *testArray;
-    testArray = (UA_String*)(out->data);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq((char)testArray[0].data[0], '1');
-    ck_assert_int_eq((char)testArray[1].data[0], '2');
-    ck_assert_int_eq((char)testArray[2].data[0], '3');
-    ck_assert_int_eq((char)testArray[3].data[0], '4');
-    ck_assert_int_eq((char)testArray[4].data[0], '5');
-    ck_assert_int_eq((char)testArray[5].data[0], '6');
-    ck_assert_int_eq((char)testArray[6].data[0], '7');
-    ck_assert_int_eq((char)testArray[7].data[0], '8');
-    ck_assert_int_eq(out->arrayDimensionsSize, 2);
-    ck_assert_int_eq(out->arrayDimensions[0], 2);
-    ck_assert_int_eq(out->arrayDimensions[1], 4);
-    ck_assert_int_eq(out->arrayLength, 8);
-    ck_assert_int_eq(out->type->typeIndex, 11);
-    UA_Variant_delete(out);
-}
-END_TEST
-
-START_TEST(UA_VariantStringArrayNull_json_decode) {
-    // given
-    
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":[null, null, null, null, null, null, null, null],\"Dimension\":[2,4]}");
-    //UA_ByteString buf = UA_STRING("{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896}");
-
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-
-    UA_String *testArray;
-    testArray = (UA_String*)(out.data);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_ptr_eq(testArray[0].data, NULL);
-    ck_assert_ptr_eq(testArray[1].data, NULL);
-    ck_assert_ptr_eq(testArray[2].data, NULL);
-    ck_assert_ptr_eq(testArray[3].data, NULL);
-    ck_assert_ptr_eq(testArray[4].data, NULL);
-    ck_assert_ptr_eq(testArray[5].data, NULL);
-    ck_assert_ptr_eq(testArray[6].data, NULL);
-    ck_assert_ptr_eq(testArray[7].data, NULL);
-    ck_assert_int_eq(out.arrayDimensionsSize, 2);
-    ck_assert_int_eq(out.arrayDimensions[0], 2);
-    ck_assert_int_eq(out.arrayDimensions[1], 4);
-    ck_assert_int_eq(out.arrayLength, 8);
-    ck_assert_int_eq(out.type->typeIndex, 11);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_VariantLocalizedTextArrayNull_json_decode) {
-    // given
-    
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":21,\"Body\":[null, null, null, null, null, null, null, null],\"Dimension\":[2,4]}");
-    //UA_ByteString buf = UA_STRING("{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896}");
-
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-
-    UA_LocalizedText *testArray;
-    testArray = (UA_LocalizedText*)(out.data);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_ptr_eq(testArray[0].locale.data, NULL);
-    ck_assert_ptr_eq(testArray[1].locale.data, NULL);
-    ck_assert_ptr_eq(testArray[2].locale.data, NULL);
-    ck_assert_ptr_eq(testArray[3].locale.data, NULL);
-    ck_assert_ptr_eq(testArray[4].locale.data, NULL);
-    ck_assert_ptr_eq(testArray[5].locale.data, NULL);
-    ck_assert_ptr_eq(testArray[6].locale.data, NULL);
-    ck_assert_ptr_eq(testArray[7].locale.data, NULL);
-    ck_assert_int_eq(out.arrayDimensionsSize, 2);
-    ck_assert_int_eq(out.arrayDimensions[0], 2);
-    ck_assert_int_eq(out.arrayDimensions[1], 4);
-    ck_assert_int_eq(out.arrayLength, 8);
-    ck_assert_int_eq(out.type->typeIndex, 20);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_VariantVariantArrayNull_json_decode) {
-    // given
-    
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":22,\"Body\":[null, null, null, null, null, null, null, null],\"Dimension\":[2,4]}");
-    //UA_ByteString buf = UA_STRING("{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896}");
-
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-
-    UA_Variant *testArray;
-    testArray = (UA_Variant*)(out.data);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert(!testArray[0].type);
-    ck_assert_int_eq(out.arrayDimensionsSize, 2);
-    ck_assert_int_eq(out.arrayDimensions[0], 2);
-    ck_assert_int_eq(out.arrayDimensions[1], 4);
-    ck_assert_int_eq(out.arrayLength, 8);
-    ck_assert_int_eq(out.type->typeIndex, 21);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-
-
-START_TEST(UA_VariantVariantArrayEmpty_json_decode) {
-    // given
-
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":22,\"Body\":[]}");
-
-    // when
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.arrayLength, 0);
-    ck_assert_ptr_eq(out.data, UA_EMPTY_ARRAY_SENTINEL);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_VariantStringArray_WithoutDimension_json_decode) {
-    // given
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\"]}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-
-    UA_String *testArray;
-    testArray = (UA_String*)(out.data);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq((char)testArray[0].data[0], '1');
-    ck_assert_int_eq((char)testArray[1].data[0], '2');
-    ck_assert_int_eq((char)testArray[2].data[0], '3');
-    ck_assert_int_eq((char)testArray[3].data[0], '4');
-    ck_assert_int_eq((char)testArray[4].data[0], '5');
-    ck_assert_int_eq((char)testArray[5].data[0], '6');
-    ck_assert_int_eq((char)testArray[6].data[0], '7');
-    ck_assert_int_eq((char)testArray[7].data[0], '8');
-    ck_assert_int_eq(out.arrayDimensionsSize, 0);
-    ck_assert_int_eq(out.arrayLength, 8);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STRING);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_Variant_BooleanArray_json_decode) {
-    // given
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":1,\"Body\":[true, false, true]}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-
-    UA_Boolean *testArray;
-    testArray = (UA_Boolean*)(out.data);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    //decoded as False
-    ck_assert_int_eq(testArray[0], 1);
-    ck_assert_int_eq(testArray[1], 0);
-    ck_assert_int_eq(testArray[2], 1);
-    ck_assert_int_eq(out.arrayDimensionsSize, 0);
-    ck_assert_int_eq(out.arrayLength, 3);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_BOOLEAN);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Variant_bad1_json_decode) {
-    // given
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":1,\"Body\":\"\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    UA_Variant_deleteMembers(&out);
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-}
-END_TEST
-
-START_TEST(UA_Variant_ExtensionObjectWrap_json_decode) {
-    // given
-    
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":22,\"Body\":{\"TypeId\":{\"Id\":511},\"Body\":{\"ViewId\":{\"Id\":99999},\"Timestamp\":\"1970-01-15T06:56:07.000Z\",\"ViewVersion\":1236}}}");
-
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.type->typeIndex, UA_TYPES_VIEWDESCRIPTION);
-    UA_ViewDescription *vd = (UA_ViewDescription*)out.data;
-    ck_assert_int_eq(vd->viewId.identifier.numeric, 99999);
-    ck_assert_int_eq(vd->viewVersion, 1236);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-
-
-
-START_TEST(UA_duplicate_json_decode) {
-    // given
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":1, \"Body\":false, \"Type\":1}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_wrongBoolean_json_decode) {
-    // given
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":1, \"Body\":\"asdfaaaaaaaaaaaaaaaaaaaa\"}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-
-START_TEST(UA_DataTypeAttributes_json_decode) {
-    // given
-    UA_DataTypeAttributes out;
-    UA_DataTypeAttributes_init(&out);
-    UA_ByteString buf = UA_STRING("{\"SpecifiedAttributes\":1,"
-            "\"DisplayName\":{\"Locale\":\"t1\",\"Text\":\"t2\"},"
-            "\"Description\":{\"Locale\":\"t3\",\"Text\":\"t4\"},"
-            "\"WriteMask\":53,"
-            "\"UserWriteMask\":63,"
-            "\"IsAbstract\":false}");
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_DATATYPEATTRIBUTES]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.isAbstract, 0);
-    ck_assert_int_eq(out.writeMask, 53);
-    ck_assert_int_eq(out.userWriteMask, 63);
-    ck_assert_int_eq(out.specifiedAttributes, 1);
-    ck_assert_int_eq(out.displayName.locale.data[1], '1');
-    ck_assert_int_eq(out.displayName.text.data[1], '2');
-    ck_assert_int_eq(out.description.locale.data[1], '3');
-    ck_assert_int_eq(out.description.text.data[1], '4');
-    UA_DataTypeAttributes_deleteMembers(&out);
-}
-END_TEST
-
-//-------------------MISC heap free test cases--------------------------
-START_TEST(UA_VariantStringArrayBad_shouldFreeArray_json_decode) {
-    // given
-    
-    UA_Variant out;
-    UA_Variant_init(&out);                         //not a string     V
-    UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":[\"1\",\"2\",true,\"4\",\"5\",\"6\",\"7\",\"8\"],\"Dimension\":[2,4]}");
-    //UA_ByteString buf = UA_STRING("{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896}");
-
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_VariantFuzzer1_json_decode) {
-    // given
-    
-    UA_Variant out;
-    UA_Variant_init(&out);         
-    UA_ByteString buf = UA_STRING("\\x0a{\"Type\",\"Bode\",\"Body\":{\"se\":}}");
-    //UA_ByteString buf = UA_STRING("{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896}");
-
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-
-
-//This test succeeds: Double will be parsed to zero if unparsable
-// TODO: Verify against the spec
-START_TEST(UA_VariantFuzzer2_json_decode) {
-    // given
-    
-    UA_Variant out;
-    UA_Variant_init(&out);         
-    UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":2E+}");
-    //UA_ByteString buf = UA_STRING("{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896}");
-
-    // when
-    
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-
-    // then
-    ck_assert(retval == UA_STATUSCODE_GOOD || retval == UA_STATUSCODE_BADDECODINGERROR);
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Variant_Bad_Type_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    UA_ByteString buf = UA_STRING("{\"Type\":1000,\"Body\":0}");
-    // when
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-
-    UA_Variant_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Variant_Bad_Type2_decode) {
-    for(int i = 0; i < 100; i++){
-        UA_Variant out;
-        UA_Variant_init(&out);
-        char str[80];
-        sprintf(str, "{\"Type\":%d}", i);
-        UA_ByteString buf = UA_STRING(str);
-        // when
-
-        UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-        // then
-        ck_assert_int_eq(retval, retval);
-        UA_Variant_deleteMembers(&out);
-    }
-}
-END_TEST
-
-START_TEST(UA_Variant_Null_decode) {
-    for(int i = 0; i < 100; i++){
-        UA_Variant out;
-        UA_Variant_init(&out);
-        char str[80];
-        sprintf(str, "{\"Type\":%d, \"Body:\":null}", i);
-        UA_ByteString buf = UA_STRING(str);
-        // when
-
-        UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-        // then
-        ck_assert_int_eq(retval, retval);
-        UA_Variant_deleteMembers(&out);
-    }
-}
-END_TEST
-
-START_TEST(UA_Variant_Malformed_decode) {
-    for(int i = 0; i < 100; i++){
-        UA_Variant out;
-        UA_Variant_init(&out);
-        char str[80];
-        sprintf(str, "{\"Type\":%d, \"Body:\"}", i);
-        UA_ByteString buf = UA_STRING(str);
-        // when
-
-        UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-        // then
-        ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-        UA_Variant_deleteMembers(&out);
-    }
-}
-END_TEST
-
-START_TEST(UA_Variant_Malformed2_decode) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    char str[80];
-    sprintf(str, "{\"Type\":, \"Body:\"}");
-    UA_ByteString buf = UA_STRING(str);
-    // when
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
-    UA_Variant_deleteMembers(&out);
-
-}
-END_TEST
-
-START_TEST(UA_JsonHelper) {
-    // given
-    
-    CtxJson ctx;
-    memset(&ctx, 0, sizeof(ctx));
-    ck_assert_int_eq(writeJsonArrStart(&ctx), UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    ck_assert_int_eq(writeJsonObjStart(&ctx), UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    ck_assert_int_eq(writeJsonObjEnd(&ctx), UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    ck_assert_int_eq(writeJsonArrEnd(&ctx), UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-    ck_assert_int_eq(writeJsonNull(&ctx), UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
-
-    ctx.calcOnly = true;
-    ctx.end = (const UA_Byte*)(uintptr_t)SIZE_MAX;
-    ck_assert_int_eq(calcJsonArrStart(&ctx), UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(calcJsonObjStart(&ctx), UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(calcJsonObjEnd(&ctx), UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(calcJsonArrEnd(&ctx), UA_STATUSCODE_GOOD);
-}   
-END_TEST
-
-
-static Suite *testSuite_builtin_json(void) {
-    Suite *s = suite_create("Built-in Data Types 62541-6 Json");
-    
-    TCase *tc_json_encode = tcase_create("json_encode");
-    tcase_add_test(tc_json_encode, UA_Boolean_true_json_encode);
-    tcase_add_test(tc_json_encode, UA_Boolean_false_json_encode);
-    tcase_add_test(tc_json_encode, UA_Boolean_true_bufferTooSmall_json_encode);
-    
-    tcase_add_test(tc_json_encode, UA_String_json_encode);
-    tcase_add_test(tc_json_encode, UA_String_Empty_json_encode);
-    tcase_add_test(tc_json_encode, UA_String_Null_json_encode);
-    tcase_add_test(tc_json_encode, UA_String_escapesimple_json_encode);
-    tcase_add_test(tc_json_encode, UA_String_escapeutf_json_encode);
-    tcase_add_test(tc_json_encode, UA_String_special_json_encode);
-
-    
-    tcase_add_test(tc_json_encode, UA_Byte_Max_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_Byte_Min_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_Byte_smallbuf_Number_json_encode);
-    
-    tcase_add_test(tc_json_encode, UA_SByte_Max_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_SByte_Min_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_SByte_Zero_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_SByte_smallbuf_Number_json_encode);
-    
- 
-    tcase_add_test(tc_json_encode, UA_UInt16_Max_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_UInt16_Min_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_UInt16_smallbuf_Number_json_encode);
-    
-    tcase_add_test(tc_json_encode, UA_Int16_Max_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_Int16_Min_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_Int16_Zero_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_Int16_smallbuf_Number_json_encode);
-    
-    
-    tcase_add_test(tc_json_encode, UA_UInt32_Max_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_UInt32_Min_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_UInt32_smallbuf_Number_json_encode);
-    
-    tcase_add_test(tc_json_encode, UA_Int32_Max_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_Int32_Min_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_Int32_Zero_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_Int32_smallbuf_Number_json_encode);
-    
-    
-    tcase_add_test(tc_json_encode, UA_UInt64_Max_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_UInt64_Min_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_UInt64_smallbuf_Number_json_encode);
-    
-    tcase_add_test(tc_json_encode, UA_Int64_Max_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_Int64_Min_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_Int64_Zero_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_Int64_smallbuf_Number_json_encode);
-    
-    //Double Float
-    tcase_add_test(tc_json_encode, UA_Double_json_encode);
-    tcase_add_test(tc_json_encode, UA_Double_onesmallest_json_encode);
-    tcase_add_test(tc_json_encode, UA_Double_pluszero_json_encode);
-    tcase_add_test(tc_json_encode, UA_Double_minuszero_json_encode);
-    tcase_add_test(tc_json_encode, UA_Double_plusInf_json_encode);
-    tcase_add_test(tc_json_encode, UA_Double_minusInf_json_encode);
-    tcase_add_test(tc_json_encode, UA_Double_nan_json_encode);
-    tcase_add_test(tc_json_encode, UA_Float_json_encode);
-    tcase_add_test(tc_json_encode, UA_Variant_Float_json_encode);
-    tcase_add_test(tc_json_encode, UA_Variant_DoubleInf_json_encode);
-    tcase_add_test(tc_json_encode, UA_Variant_DoubleNan_json_encode);
-
-
-    
-    //LocalizedText
-    tcase_add_test(tc_json_encode, UA_LocText_json_encode);
-    tcase_add_test(tc_json_encode, UA_LocText_NonReversible_json_encode);
-    tcase_add_test(tc_json_encode, UA_LocText_smallBuffer_json_encode);
-    
-    //Guid
-    tcase_add_test(tc_json_encode, UA_Guid_json_encode);
-    tcase_add_test(tc_json_encode, UA_Guid_smallbuf_json_encode);
-    
-    //DateTime
-    tcase_add_test(tc_json_encode, UA_DateTime_json_encode);
-    tcase_add_test(tc_json_encode, UA_DateTime_with_nanoseconds_json_encode);
-    
-    
-    //StatusCode
-    tcase_add_test(tc_json_encode, UA_StatusCode_json_encode);
-    tcase_add_test(tc_json_encode, UA_StatusCode_nonReversible_json_encode);
-    tcase_add_test(tc_json_encode, UA_StatusCode_nonReversible_good_json_encode);
-    tcase_add_test(tc_json_encode, UA_StatusCode_smallbuf_json_encode);
-    
-    
-    //NodeId
-    tcase_add_test(tc_json_encode, UA_NodeId_Numeric_json_encode);
-    tcase_add_test(tc_json_encode, UA_NodeId_Numeric_Namespace_json_encode);
-    
-    tcase_add_test(tc_json_encode, UA_NodeId_String_json_encode);
-    tcase_add_test(tc_json_encode, UA_NodeId_String_Namespace_json_encode);
-    tcase_add_test(tc_json_encode, UA_NodeId_Guid_json_encode);
-    tcase_add_test(tc_json_encode, UA_NodeId_Guid_Namespace_json_encode);
-    
-    tcase_add_test(tc_json_encode, UA_NodeId_ByteString_json_encode);
-    tcase_add_test(tc_json_encode, UA_NodeId_ByteString_Namespace_json_encode);
-    
-    tcase_add_test(tc_json_encode, UA_NodeId_NonReversible_Numeric_Namespace_json_encode);
-    
-    //ExpandedNodeId
-    tcase_add_test(tc_json_encode, UA_ExpandedNodeId_json_encode);
-    tcase_add_test(tc_json_encode, UA_ExpandedNodeId_MissingNamespaceUri_json_encode);
-    tcase_add_test(tc_json_encode, UA_ExpandedNodeId_NonReversible_Ns1_json_encode);
-    tcase_add_test(tc_json_encode, UA_ExpandedNodeId_NonReversible_Namespace_json_encode);
-    tcase_add_test(tc_json_encode, UA_ExpandedNodeId_NonReversible_NamespaceUriGiven_json_encode);
-    
-    
-    //DiagnosticInfo
-    tcase_add_test(tc_json_encode, UA_DiagInfo_json_encode);
-    tcase_add_test(tc_json_encode, UA_DiagInfo_withInner_json_encode);
-    tcase_add_test(tc_json_encode, UA_DiagInfo_withTwoInner_json_encode);
-    tcase_add_test(tc_json_encode, UA_DiagInfo_noFields_json_encode);
-    tcase_add_test(tc_json_encode, UA_DiagInfo_smallBuffer_json_encode);
-    
-    
-    //ByteString
-    tcase_add_test(tc_json_encode, UA_ByteString_json_encode);
-    tcase_add_test(tc_json_encode, UA_ByteString2_json_encode);
-    tcase_add_test(tc_json_encode, UA_ByteString3_json_encode);
-
-    
-    //QualifiedName
-    tcase_add_test(tc_json_encode, UA_QualName_json_encode);
-    tcase_add_test(tc_json_encode, UA_QualName_NonReversible_json_encode);
-    tcase_add_test(tc_json_encode, UA_QualName_NonReversible_Namespace_json_encode);
-    tcase_add_test(tc_json_encode, UA_QualName_NonReversible_NoNamespaceAsNumber_json_encode);
-           
-    //Variant -REVERSIBLE-
-    tcase_add_test(tc_json_encode, UA_Variant_Bool_json_encode);
-    tcase_add_test(tc_json_encode, UA_Variant_Number_json_encode);
-    tcase_add_test(tc_json_encode, UA_Variant_Double_json_encode);
-    tcase_add_test(tc_json_encode, UA_Variant_Double2_json_encode);
-    tcase_add_test(tc_json_encode, UA_Variant_Double3_json_encode);
-
-    tcase_add_test(tc_json_encode, UA_Variant_NodeId_json_encode);
-    tcase_add_test(tc_json_encode, UA_Variant_LocText_json_encode);
-    tcase_add_test(tc_json_encode, UA_Variant_QualName_json_encode);
-    
-    //Array
-    tcase_add_test(tc_json_encode, UA_Variant_Array_UInt16_json_encode);
-    tcase_add_test(tc_json_encode, UA_Variant_Array_Byte_json_encode);
-    tcase_add_test(tc_json_encode, UA_Variant_Array_String_json_encode);
-    
-    //Matrix
-    tcase_add_test(tc_json_encode, UA_Variant_Matrix_UInt16_json_encode);
-    
-    //Wrap
-    tcase_add_test(tc_json_encode, UA_Variant_Wrap_json_encode);
-    tcase_add_test(tc_json_encode, UA_Variant_Wrap_Array_json_encode);
-    
-    //Variant -NON-REVERSIBLE-
-    tcase_add_test(tc_json_encode, UA_Variant_StatusCode_NonReversible_json_encode);
-    
-    //Array
-    tcase_add_test(tc_json_encode, UA_Variant_Array_String_NonReversible_json_encode);
-    
-    //Matrix
-    tcase_add_test(tc_json_encode, UA_Variant_Matrix_String_NonReversible_json_encode);
-    tcase_add_test(tc_json_encode, UA_Variant_Matrix_NodeId_NonReversible_json_encode);
-    
-    //Wrap non reversible
-    tcase_add_test(tc_json_encode, UA_Variant_Wrap_Array_NonReversible_json_encode);
-    
-    
-    //ExtensionObject
-    tcase_add_test(tc_json_encode, UA_ExtensionObject_json_encode);
-    tcase_add_test(tc_json_encode, UA_ExtensionObject_xml_json_encode);
-    tcase_add_test(tc_json_encode, UA_ExtensionObject_byteString_json_encode);
-    
-    tcase_add_test(tc_json_encode, UA_ExtensionObject_NonReversible_StatusCode_json_encode);
-    
-    //DataValue
-    tcase_add_test(tc_json_encode, UA_DataValue_json_encode);
-    tcase_add_test(tc_json_encode, UA_DataValue_null_json_encode);
-
-    tcase_add_test(tc_json_encode, UA_MessageReadResponse_json_encode);
-    tcase_add_test(tc_json_encode, UA_ViewDescription_json_encode);
-    tcase_add_test(tc_json_encode, UA_WriteRequest_json_encode);
-    tcase_add_test(tc_json_encode, UA_VariableAttributes_json_encode);
-
-    suite_add_tcase(s, tc_json_encode);
-    
-    TCase *tc_json_decode = tcase_create("json_decode");
-    
-    
-    tcase_add_test(tc_json_decode, UA_SByte_Min_json_decode);
-    tcase_add_test(tc_json_decode, UA_SByte_Max_json_decode);
-    
-    tcase_add_test(tc_json_decode, UA_Byte_Min_json_decode);
-    tcase_add_test(tc_json_decode, UA_Byte_Max_json_decode);
-    
-    tcase_add_test(tc_json_decode, UA_Int16_Min_json_decode);
-    tcase_add_test(tc_json_decode, UA_Int16_Max_json_decode);
-    
-    tcase_add_test(tc_json_decode, UA_UInt16_Min_json_decode);
-    tcase_add_test(tc_json_decode, UA_UInt16_Max_json_decode);
-    
-    tcase_add_test(tc_json_decode, UA_UInt32_Min_json_decode);
-    tcase_add_test(tc_json_decode, UA_UInt32_Max_json_decode);
-    
-    tcase_add_test(tc_json_decode, UA_Int32_Min_json_decode);
-    tcase_add_test(tc_json_decode, UA_Int32_Max_json_decode);
-    
-    tcase_add_test(tc_json_decode, UA_Int64_Min_json_decode);
-    tcase_add_test(tc_json_decode, UA_Int64_Max_json_decode);
-    tcase_add_test(tc_json_decode, UA_Int64_Overflow_json_decode);
-    tcase_add_test(tc_json_decode, UA_Int64_TooBig_json_decode);
-    tcase_add_test(tc_json_decode, UA_Int64_NoDigit_json_decode);
-    
-    tcase_add_test(tc_json_decode, UA_UInt64_Min_json_decode);
-    tcase_add_test(tc_json_decode, UA_UInt64_Max_json_decode);
-    tcase_add_test(tc_json_decode, UA_UInt64_Overflow_json_decode);
-
-    
-    
-    tcase_add_test(tc_json_decode, UA_Float_json_decode);
-    tcase_add_test(tc_json_decode, UA_Float_json_one_decode);
-
-    tcase_add_test(tc_json_decode, UA_Float_json_inf_decode);
-    tcase_add_test(tc_json_decode, UA_Float_json_neginf_decode);
-    tcase_add_test(tc_json_decode, UA_Float_json_nan_decode);
-    tcase_add_test(tc_json_decode, UA_Float_json_negnan_decode);
-
-    
-    tcase_add_test(tc_json_decode, UA_Double_json_decode);
-    tcase_add_test(tc_json_decode, UA_Double_one_json_decode);
-    tcase_add_test(tc_json_decode, UA_Double_corrupt_json_decode);
-
-    tcase_add_test(tc_json_decode, UA_Double_onepointsmallest_json_decode);
-    tcase_add_test(tc_json_decode, UA_Double_nan_json_decode);
-    tcase_add_test(tc_json_decode, UA_Double_negnan_json_decode);
-    tcase_add_test(tc_json_decode, UA_Double_negzero_json_decode);
-    tcase_add_test(tc_json_decode, UA_Double_zero_json_decode);
-    tcase_add_test(tc_json_decode, UA_Double_inf_json_decode);
-    tcase_add_test(tc_json_decode, UA_Double_neginf_json_decode);
-    
-    
-    //String
-    tcase_add_test(tc_json_decode, UA_String_json_decode);
-    tcase_add_test(tc_json_decode, UA_String_empty_json_decode);
-    tcase_add_test(tc_json_decode, UA_String_unescapeBS_json_decode);
-    
-    tcase_add_test(tc_json_decode, UA_String_escape_unicode_json_decode);
-    
-    tcase_add_test(tc_json_decode, UA_String_escape2_json_decode);
-    tcase_add_test(tc_json_decode, UA_String_surrogatePair_json_decode);
-    
-    //ByteString
-    tcase_add_test(tc_json_decode, UA_ByteString_json_decode);
-    tcase_add_test(tc_json_decode, UA_ByteString_bad_json_decode);
-    tcase_add_test(tc_json_decode, UA_ByteString_null_json_decode);
-    
-    
-    //DateTime
-    tcase_add_test(tc_json_decode, UA_DateTime_json_decode);
-    tcase_add_test(tc_json_decode, UA_DateTime_micro_json_decode);
-    
-    
-    //Guid
-    tcase_add_test(tc_json_decode, UA_Guid_json_decode);
-    tcase_add_test(tc_json_decode, UA_Guid_lower_json_decode);
-    tcase_add_test(tc_json_decode, UA_Guid_tooShort_json_decode);
-    tcase_add_test(tc_json_decode, UA_Guid_tooLong_json_decode);
-    tcase_add_test(tc_json_decode, UA_Guid_wrong_json_decode);
-    
-    
-    //StatusCode
-    tcase_add_test(tc_json_decode, UA_StatusCode_2_json_decode);
-    tcase_add_test(tc_json_decode, UA_StatusCode_3_json_decode);
-    tcase_add_test(tc_json_decode, UA_StatusCode_0_json_decode);
-    
-    
-    //QualName
-    tcase_add_test(tc_json_decode, UA_QualifiedName_json_decode);
-    tcase_add_test(tc_json_decode, UA_QualifiedName_null_json_decode);
-    
-    
-    //LocalizedText
-    tcase_add_test(tc_json_decode, UA_LocalizedText_json_decode);
-    tcase_add_test(tc_json_decode, UA_LocalizedText_missing_json_decode);
-    tcase_add_test(tc_json_decode, UA_LocalizedText_null_json_decode);
-    
-
-    //-NodeId-
-    tcase_add_test(tc_json_decode, UA_NodeId_Nummeric_json_decode);
-    tcase_add_test(tc_json_decode, UA_NodeId_Nummeric_Namespace_json_decode);
-
-    tcase_add_test(tc_json_decode, UA_NodeId_String_json_decode);
-    
-    tcase_add_test(tc_json_decode, UA_NodeId_Guid_json_decode);
-    
-    tcase_add_test(tc_json_decode, UA_NodeId_ByteString_json_decode);
-    
-    
-    //expandednodeid
-    tcase_add_test(tc_json_decode, UA_ExpandedNodeId_Nummeric_json_decode);
-    tcase_add_test(tc_json_decode, UA_ExpandedNodeId_String_json_decode);
-    tcase_add_test(tc_json_decode, UA_ExpandedNodeId_String_Namespace_json_decode);
-    tcase_add_test(tc_json_decode, UA_ExpandedNodeId_String_NamespaceAsIndex_json_decode);
-    tcase_add_test(tc_json_decode, UA_ExpandedNodeId_String_Namespace_ServerUri_json_decode);
-    tcase_add_test(tc_json_decode, UA_ExpandedNodeId_ByteString_json_decode);
-    
-    //Diaginfo
-    tcase_add_test(tc_json_decode, UA_DiagnosticInfo_json_decode);
-    tcase_add_test(tc_json_decode, UA_DiagnosticInfo_null_json_decode);
-    
-    
-    //Variant
-    tcase_add_test(tc_json_decode, UA_VariantBool_json_decode);
-    tcase_add_test(tc_json_decode, UA_VariantBoolNull_json_decode);
-    tcase_add_test(tc_json_decode, UA_VariantStringArray_json_decode);
-    tcase_add_test(tc_json_decode, UA_VariantStringArrayNull_json_decode);
-    tcase_add_test(tc_json_decode, UA_VariantLocalizedTextArrayNull_json_decode);
-    tcase_add_test(tc_json_decode, UA_VariantVariantArrayNull_json_decode);
-    tcase_add_test(tc_json_decode, UA_VariantVariantArrayEmpty_json_decode);
-    tcase_add_test(tc_json_decode, UA_VariantStringArray_WithoutDimension_json_decode);
-    tcase_add_test(tc_json_decode, UA_Variant_BooleanArray_json_decode);
-    tcase_add_test(tc_json_decode, UA_Variant_bad1_json_decode);
-    tcase_add_test(tc_json_decode, UA_Variant_ExtensionObjectWrap_json_decode);
-    
-    //DataValue
-    tcase_add_test(tc_json_decode, UA_DataValue_json_decode);
-    tcase_add_test(tc_json_decode, UA_DataValueMissingFields_json_decode);
-    tcase_add_test(tc_json_decode, UA_DataValue_null_json_decode);
-            
-    //extensionobject
-    tcase_add_test(tc_json_decode, UA_ExtensionObject_json_decode);
-    tcase_add_test(tc_json_decode, UA_ExtensionObject_EncodedByteString_json_decode);
-    tcase_add_test(tc_json_decode, UA_ExtensionObject_EncodedXml_json_decode);
-    tcase_add_test(tc_json_decode, UA_ExtensionObject_Unkown_json_decode);
-    
-    
-    //Others
-    tcase_add_test(tc_json_decode, UA_duplicate_json_decode);
-    tcase_add_test(tc_json_decode, UA_wrongBoolean_json_decode);
-    
-    tcase_add_test(tc_json_decode, UA_ViewDescription_json_decode);
-    tcase_add_test(tc_json_decode, UA_DataTypeAttributes_json_decode);
-    
-    
-    tcase_add_test(tc_json_decode, UA_VariantStringArrayBad_shouldFreeArray_json_decode);
-    tcase_add_test(tc_json_decode, UA_VariantFuzzer1_json_decode);
-    tcase_add_test(tc_json_decode, UA_VariantFuzzer2_json_decode);
-
-    tcase_add_test(tc_json_decode, UA_Variant_Bad_Type_decode);
-    tcase_add_test(tc_json_decode, UA_Variant_Bad_Type2_decode);
-
-    tcase_add_test(tc_json_decode, UA_Variant_Null_decode);
-
-
-    tcase_add_test(tc_json_decode, UA_Variant_Malformed_decode);
-    tcase_add_test(tc_json_decode, UA_Variant_Malformed2_decode);
-
-
-    suite_add_tcase(s, tc_json_decode);
-    
-    TCase *tc_json_helper = tcase_create("json_helper");
-    tcase_add_test(tc_json_decode, UA_JsonHelper);
-    suite_add_tcase(s, tc_json_helper);
-    return s;
-}
-
-int main(void) {
-    int      number_failed = 0;
-    Suite   *s;
-    SRunner *sr;
-
-    s  = testSuite_builtin_json();
-    sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    number_failed += srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
-
diff --git a/ext/open62541/tests/check_types_custom.c b/ext/open62541/tests/check_types_custom.c
deleted file mode 100644
index ed299ad..0000000
--- a/ext/open62541/tests/check_types_custom.c
+++ /dev/null
@@ -1,218 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public 
- * License, v. 2.0. If a copy of the MPL was not distributed with this 
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/types.h>
-#include <open62541/types_generated_handling.h>
-
-#include "ua_types_encoding_binary.h"
-
-#include "check.h"
-
-#ifdef __clang__
-//required for ck_assert_ptr_eq and const casting
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wincompatible-pointer-types-discards-qualifiers"
-#endif
-
-/* The standard-defined datatypes are stored in the global array UA_TYPES. User
- * can create their own UA_CUSTOM_TYPES array (the name doesn't matter) and
- * provide it to the server / client. The type will be automatically decoded if
- * possible.
- */
-
-/* The custom datatype for describing a 3d position */
-
-typedef struct {
-    UA_Float x;
-    UA_Float y;
-    UA_Float z;
-} Point;
-
-/* The datatype description for the Point datatype */
-
-#define padding_y offsetof(Point,y) - offsetof(Point,x) - sizeof(UA_Float)
-#define padding_z offsetof(Point,z) - offsetof(Point,y) - sizeof(UA_Float)
-
-static UA_DataTypeMember members[3] = {
-    /* x */
-    {
-        UA_TYPENAME("x") /* .memberName */
-        UA_TYPES_FLOAT,  /* .memberTypeIndex, points into UA_TYPES since
-                            .namespaceZero is true */
-        0,               /* .padding */
-        true,            /* .namespaceZero, see .memberTypeIndex */
-        false            /* .isArray */
-    },
-
-    /* y */
-    {
-        UA_TYPENAME("y")
-        UA_TYPES_FLOAT, padding_y, true, false
-    },
-
-    /* z */
-    {
-        UA_TYPENAME("y")
-        UA_TYPES_FLOAT, padding_z, true, false
-    }
-};
-
-static const UA_DataType PointType = {
-    UA_TYPENAME("Point")             /* .typeName */
-    {1, UA_NODEIDTYPE_NUMERIC, {1}}, /* .typeId */
-    sizeof(Point),                   /* .memSize */
-    0,                               /* .typeIndex, in the array of custom types */
-    UA_DATATYPEKIND_STRUCTURE,       /* .typeKind */
-    true,                            /* .pointerFree */
-    false,                           /* .overlayable (depends on endianness and
-                                         the absence of padding) */
-    3,                               /* .membersSize */
-    0,                               /* .binaryEncodingId, the numeric
-                                         identifier used on the wire (the
-                                         namespaceindex is from .typeId) */
-    members
-};
-
-const UA_DataTypeArray customDataTypes = {NULL, 1, &PointType};
-
-START_TEST(parseCustomScalar) {
-    Point p;
-    p.x = 1.0;
-    p.y = 2.0;
-    p.z = 3.0;
-    
-    UA_Variant var;
-    UA_Variant_init(&var);
-    UA_Variant_setScalar(&var, &p, &PointType);
-
-    size_t buflen = UA_calcSizeBinary(&var, &UA_TYPES[UA_TYPES_VARIANT]);
-    UA_ByteString buf;
-    UA_StatusCode retval = UA_ByteString_allocBuffer(&buf, buflen);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Byte *pos = buf.data;
-    const UA_Byte *end = &buf.data[buf.length];
-    retval = UA_encodeBinary(&var, &UA_TYPES[UA_TYPES_VARIANT],
-                             &pos, &end, NULL, NULL);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Variant var2;
-    size_t offset = 0;
-    retval = UA_decodeBinary(&buf, &offset, &var2, &UA_TYPES[UA_TYPES_VARIANT], &customDataTypes);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert(var2.type == &PointType);
-
-    Point *p2 = (Point*)var2.data;
-    ck_assert(p.x == p2->x);
-        
-    UA_Variant_deleteMembers(&var2);
-    UA_ByteString_deleteMembers(&buf);
-} END_TEST
-
-START_TEST(parseCustomScalarExtensionObject) {
-    Point p;
-    p.x = 1.0;
-    p.y = 2.0;
-    p.z = 3.0;
-
-    UA_ExtensionObject eo;
-    UA_ExtensionObject_init(&eo);
-
-    eo.encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
-    eo.content.decoded.data = &p;
-    eo.content.decoded.type = &PointType;
-
-    size_t buflen = UA_calcSizeBinary(&eo, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
-    UA_ByteString buf;
-    UA_StatusCode retval = UA_ByteString_allocBuffer(&buf, buflen);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buf.data;
-    const UA_Byte *bufEnd = &buf.data[buf.length];
-    retval = UA_encodeBinary(&eo, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT], &bufPos, &bufEnd, NULL, NULL);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_ExtensionObject eo2;
-    size_t offset = 0;
-    retval = UA_decodeBinary(&buf, &offset, &eo2, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT], &customDataTypes);
-    ck_assert_int_eq(offset, (uintptr_t)(bufPos - buf.data));
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    ck_assert_int_eq(eo2.encoding, UA_EXTENSIONOBJECT_DECODED);
-    ck_assert(eo2.content.decoded.type == &PointType);
-
-    Point *p2 = (Point*)eo2.content.decoded.data;
-    ck_assert(p.x == p2->x);
-        
-    UA_ExtensionObject_deleteMembers(&eo2);
-    UA_ByteString_deleteMembers(&buf);
-} END_TEST
-
-START_TEST(parseCustomArray) {
-    Point ps[10];
-    for(size_t i = 0; i < 10; ++i) {
-        ps[i].x = (UA_Float)(1*i);
-        ps[i].y = (UA_Float)(2*i);
-        ps[i].z = (UA_Float)(3*i);
-    }
-
-    UA_Variant var;
-    UA_Variant_init(&var);
-    UA_Variant_setArray(&var, (void*)ps, 10, &PointType);
-
-    size_t buflen = UA_calcSizeBinary(&var, &UA_TYPES[UA_TYPES_VARIANT]);
-    UA_ByteString buf;
-    UA_StatusCode retval = UA_ByteString_allocBuffer(&buf, buflen);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Byte *pos = buf.data;
-    const UA_Byte *end = &buf.data[buf.length];
-    retval = UA_encodeBinary(&var, &UA_TYPES[UA_TYPES_VARIANT],
-                             &pos, &end, NULL, NULL);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Variant var2;
-    size_t offset = 0;
-    retval = UA_decodeBinary(&buf, &offset, &var2, &UA_TYPES[UA_TYPES_VARIANT], &customDataTypes);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert(var2.type == &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
-    ck_assert_int_eq(var2.arrayLength, 10);
-
-    for (size_t i = 0; i < 10; i++) {
-        UA_ExtensionObject *eo = &((UA_ExtensionObject*)var2.data)[i];
-        ck_assert_int_eq(eo->encoding, UA_EXTENSIONOBJECT_DECODED);
-        ck_assert(eo->content.decoded.type == &PointType);
-        Point *p2 = (Point*)eo->content.decoded.data;
-
-        // we need to cast floats to int to avoid comparison of floats
-        // which may result into false results
-        ck_assert((int)p2->x == (int)ps[i].x);
-        ck_assert((int)p2->y == (int)ps[i].y);
-        ck_assert((int)p2->z == (int)ps[i].z);
-    }
-        
-    UA_Variant_deleteMembers(&var2);
-    UA_ByteString_deleteMembers(&buf);
-} END_TEST
-
-int main(void) {
-    Suite *s  = suite_create("Test Custom DataType Encoding");
-    TCase *tc = tcase_create("test cases");
-    tcase_add_test(tc, parseCustomScalar);
-    tcase_add_test(tc, parseCustomScalarExtensionObject);
-    tcase_add_test(tc, parseCustomArray);
-    suite_add_tcase(s, tc);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all (sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
-
-#ifdef __clang__
-#pragma clang diagnostic pop
-#endif
diff --git a/ext/open62541/tests/check_types_memory.c b/ext/open62541/tests/check_types_memory.c
deleted file mode 100644
index 1971df0..0000000
--- a/ext/open62541/tests/check_types_memory.c
+++ /dev/null
@@ -1,371 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#define _XOPEN_SOURCE 500
-#include <open62541/server.h>
-#include <open62541/types_generated.h>
-#include <open62541/types_generated_handling.h>
-#include <open62541/util.h>
-
-#include "ua_types_encoding_binary.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "check.h"
-
-/* Define types to a dummy value if they are not available (e.g. not built with
- * NS0 full) */
-#ifndef UA_TYPES_UNION
-#define UA_TYPES_UNION UA_TYPES_COUNT
-#endif
-#ifndef UA_TYPES_HISTORYREADDETAILS
-#define UA_TYPES_HISTORYREADDETAILS UA_TYPES_COUNT
-#endif
-#ifndef UA_TYPES_NOTIFICATIONDATA
-#define UA_TYPES_NOTIFICATIONDATA UA_TYPES_COUNT
-#endif
-#ifndef UA_TYPES_MONITORINGFILTER
-#define UA_TYPES_MONITORINGFILTER UA_TYPES_COUNT
-#endif
-#ifndef UA_TYPES_MONITORINGFILTERRESULT
-#define UA_TYPES_MONITORINGFILTERRESULT UA_TYPES_COUNT
-#endif
-#ifndef UA_TYPES_DATASETREADERMESSAGEDATATYPE
-#define UA_TYPES_DATASETREADERMESSAGEDATATYPE UA_TYPES_COUNT
-#endif
-#ifndef UA_TYPES_WRITERGROUPTRANSPORTDATATYPE
-#define UA_TYPES_WRITERGROUPTRANSPORTDATATYPE UA_TYPES_COUNT
-#endif
-#ifndef UA_TYPES_CONNECTIONTRANSPORTDATATYPE
-#define UA_TYPES_CONNECTIONTRANSPORTDATATYPE UA_TYPES_COUNT
-#endif
-#ifndef UA_TYPES_WRITERGROUPMESSAGEDATATYPE
-#define UA_TYPES_WRITERGROUPMESSAGEDATATYPE UA_TYPES_COUNT
-#endif
-#ifndef UA_TYPES_READERGROUPTRANSPORTDATATYPE
-#define UA_TYPES_READERGROUPTRANSPORTDATATYPE UA_TYPES_COUNT
-#endif
-#ifndef UA_TYPES_PUBLISHEDDATASETSOURCEDATATYPE
-#define UA_TYPES_PUBLISHEDDATASETSOURCEDATATYPE UA_TYPES_COUNT
-#endif
-#ifndef UA_TYPES_DATASETREADERTRANSPORTDATATYPE
-#define UA_TYPES_DATASETREADERTRANSPORTDATATYPE UA_TYPES_COUNT
-#endif
-#ifndef UA_TYPES_DATASETWRITERTRANSPORTDATATYPE
-#define UA_TYPES_DATASETWRITERTRANSPORTDATATYPE UA_TYPES_COUNT
-#endif
-#ifndef UA_TYPES_SUBSCRIBEDDATASETDATATYPE
-#define UA_TYPES_SUBSCRIBEDDATASETDATATYPE UA_TYPES_COUNT
-#endif
-#ifndef UA_TYPES_READERGROUPMESSAGEDATATYPE
-#define UA_TYPES_READERGROUPMESSAGEDATATYPE UA_TYPES_COUNT
-#endif
-#ifndef UA_TYPES_DATASETWRITERMESSAGEDATATYPE
-#define UA_TYPES_DATASETWRITERMESSAGEDATATYPE UA_TYPES_COUNT
-#endif
-
-START_TEST(newAndEmptyObjectShallBeDeleted) {
-    // given
-    void *obj = UA_new(&UA_TYPES[_i]);
-    // then
-    ck_assert_ptr_ne(obj, NULL);
-    // finally
-    UA_delete(obj, &UA_TYPES[_i]);
-}
-END_TEST
-
-START_TEST(arrayCopyShallMakeADeepCopy) {
-    // given
-    UA_String a1[3];
-    a1[0] = (UA_String){1, (UA_Byte*)"a"};
-    a1[1] = (UA_String){2, (UA_Byte*)"bb"};
-    a1[2] = (UA_String){3, (UA_Byte*)"ccc"};
-    // when
-    UA_String *a2;
-    UA_Int32 retval = UA_Array_copy((const void *)a1, 3, (void **)&a2, &UA_TYPES[UA_TYPES_STRING]);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(a1[0].length, 1);
-    ck_assert_int_eq(a1[1].length, 2);
-    ck_assert_int_eq(a1[2].length, 3);
-    ck_assert_int_eq(a1[0].length, a2[0].length);
-    ck_assert_int_eq(a1[1].length, a2[1].length);
-    ck_assert_int_eq(a1[2].length, a2[2].length);
-    ck_assert_ptr_ne(a1[0].data, a2[0].data);
-    ck_assert_ptr_ne(a1[1].data, a2[1].data);
-    ck_assert_ptr_ne(a1[2].data, a2[2].data);
-    ck_assert_int_eq(a1[0].data[0], a2[0].data[0]);
-    ck_assert_int_eq(a1[1].data[0], a2[1].data[0]);
-    ck_assert_int_eq(a1[2].data[0], a2[2].data[0]);
-    // finally
-    UA_Array_delete((void *)a2, 3, &UA_TYPES[UA_TYPES_STRING]);
-}
-END_TEST
-
-START_TEST(encodeShallYieldDecode) {
-    /* floating point types may change the representaton due to several possible NaN values. */
-    if(_i != UA_TYPES_FLOAT || _i != UA_TYPES_DOUBLE ||
-       _i != UA_TYPES_CREATESESSIONREQUEST || _i != UA_TYPES_CREATESESSIONRESPONSE ||
-       _i != UA_TYPES_VARIABLEATTRIBUTES || _i != UA_TYPES_READREQUEST ||
-       _i != UA_TYPES_MONITORINGPARAMETERS || _i != UA_TYPES_MONITOREDITEMCREATERESULT ||
-       _i != UA_TYPES_CREATESUBSCRIPTIONREQUEST || _i != UA_TYPES_CREATESUBSCRIPTIONRESPONSE)
-        return;
-
-    // given
-    UA_ByteString msg1, msg2;
-    void *obj1 = UA_new(&UA_TYPES[_i]);
-    UA_StatusCode retval = UA_ByteString_allocBuffer(&msg1, 65000); // fixed buf size
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Byte *pos = msg1.data;
-    const UA_Byte *end = &msg1.data[msg1.length];
-    retval = UA_encodeBinary(obj1, &UA_TYPES[_i],
-                             &pos, &end, NULL, NULL);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_delete(obj1, &UA_TYPES[_i]);
-        UA_ByteString_deleteMembers(&msg1);
-        return;
-    }
-
-    // when
-    void *obj2 = UA_new(&UA_TYPES[_i]);
-    size_t offset = 0;
-    retval = UA_decodeBinary(&msg1, &offset, obj2, &UA_TYPES[_i], NULL);
-    ck_assert_msg(retval == UA_STATUSCODE_GOOD, "could not decode idx=%d,nodeid=%i",
-                  _i, UA_TYPES[_i].typeId.identifier.numeric);
-    ck_assert(!memcmp(obj1, obj2, UA_TYPES[_i].memSize)); // bit identical decoding
-    retval = UA_ByteString_allocBuffer(&msg2, 65000);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    pos = msg2.data;
-    end = &msg2.data[msg2.length];
-    retval = UA_encodeBinary(obj2, &UA_TYPES[_i], &pos, &end, NULL, NULL);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    // then
-    msg1.length = offset;
-    msg2.length = offset;
-    ck_assert_msg(UA_ByteString_equal(&msg1, &msg2) == true,
-                  "messages differ idx=%d,nodeid=%i", _i,
-                  UA_TYPES[_i].typeId.identifier.numeric);
-
-    // finally
-    UA_delete(obj1, &UA_TYPES[_i]);
-    UA_delete(obj2, &UA_TYPES[_i]);
-    UA_ByteString_deleteMembers(&msg1);
-    UA_ByteString_deleteMembers(&msg2);
-}
-END_TEST
-
-START_TEST(decodeShallFailWithTruncatedBufferButSurvive) {
-    //Skip test for void*
-    if (
-#ifdef UA_ENABLE_DISCOVERY
-        _i == UA_TYPES_DISCOVERYCONFIGURATION ||
-#endif
-        _i == UA_TYPES_FILTEROPERAND ||
-        _i == UA_TYPES_UNION ||
-#ifdef UA_TYPES_FRAME
-        _i == UA_TYPES_FRAME ||
-        _i == UA_TYPES_ORIENTATION ||
-        _i == UA_TYPES_VECTOR ||
-        _i == UA_TYPES_CARTESIANCOORDINATES ||
-#endif
-        _i == UA_TYPES_HISTORYREADDETAILS ||
-        _i == UA_TYPES_NOTIFICATIONDATA ||
-        _i == UA_TYPES_MONITORINGFILTER ||
-        _i == UA_TYPES_MONITORINGFILTERRESULT ||
-        _i == UA_TYPES_DATASETREADERMESSAGEDATATYPE ||
-        _i == UA_TYPES_WRITERGROUPTRANSPORTDATATYPE ||
-        _i == UA_TYPES_CONNECTIONTRANSPORTDATATYPE ||
-        _i == UA_TYPES_WRITERGROUPMESSAGEDATATYPE ||
-        _i == UA_TYPES_READERGROUPTRANSPORTDATATYPE ||
-        _i == UA_TYPES_PUBLISHEDDATASETSOURCEDATATYPE ||
-        _i == UA_TYPES_DATASETREADERTRANSPORTDATATYPE ||
-        _i == UA_TYPES_DATASETWRITERTRANSPORTDATATYPE ||
-        _i == UA_TYPES_SUBSCRIBEDDATASETDATATYPE ||
-        _i == UA_TYPES_READERGROUPMESSAGEDATATYPE ||
-        _i == UA_TYPES_DATASETWRITERMESSAGEDATATYPE)
-        return;
-    // given
-    UA_ByteString msg1;
-    void *obj1 = UA_new(&UA_TYPES[_i]);
-    UA_StatusCode retval = UA_ByteString_allocBuffer(&msg1, 65000); // fixed buf size
-    UA_Byte *pos = msg1.data;
-    const UA_Byte *end = &msg1.data[msg1.length];
-    retval |= UA_encodeBinary(obj1, &UA_TYPES[_i], &pos, &end, NULL, NULL);
-    UA_delete(obj1, &UA_TYPES[_i]);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ByteString_deleteMembers(&msg1);
-        return; // e.g. variants cannot be encoded after an init without failing (no datatype set)
-    }
-
-    size_t half = (uintptr_t)(pos - msg1.data) / 2;
-    msg1.length = half;
-
-    // when
-    void *obj2 = UA_new(&UA_TYPES[_i]);
-    size_t offset = 0;
-    retval = UA_decodeBinary(&msg1, &offset, obj2, &UA_TYPES[_i], NULL);
-    ck_assert_int_ne(retval, UA_STATUSCODE_GOOD);
-    UA_delete(obj2, &UA_TYPES[_i]);
-    UA_ByteString_deleteMembers(&msg1);
-}
-END_TEST
-
-#define RANDOM_TESTS 1000
-
-START_TEST(decodeScalarBasicTypeFromRandomBufferShallSucceed) {
-    // given
-    void *obj1 = NULL;
-    UA_ByteString msg1;
-    UA_Int32 retval = UA_STATUSCODE_GOOD;
-    UA_Int32 buflen = 256;
-    retval = UA_ByteString_allocBuffer(&msg1, buflen); // fixed size
-#ifdef _WIN32
-    srand(42);
-#else
-    srandom(42);
-#endif
-    for(int n = 0;n < RANDOM_TESTS;n++) {
-        for(UA_Int32 i = 0;i < buflen;i++) {
-#ifdef _WIN32
-            UA_UInt32 rnd;
-            rnd = rand();
-            msg1.data[i] = rnd;
-#else
-            msg1.data[i] = (UA_Byte)random();  // when
-#endif
-        }
-        size_t pos = 0;
-        obj1 = UA_new(&UA_TYPES[_i]);
-        retval |= UA_decodeBinary(&msg1, &pos, obj1, &UA_TYPES[_i], NULL);
-        //then
-        ck_assert_msg(retval == UA_STATUSCODE_GOOD,
-                      "Decoding %d from random buffer",
-                      UA_TYPES[_i].typeId.identifier.numeric);
-        // finally
-        UA_delete(obj1, &UA_TYPES[_i]);
-    }
-    UA_ByteString_deleteMembers(&msg1);
-}
-END_TEST
-
-START_TEST(decodeComplexTypeFromRandomBufferShallSurvive) {
-    // given
-    UA_ByteString msg1;
-    UA_Int32 retval = UA_STATUSCODE_GOOD;
-    UA_Int32 buflen = 256;
-    retval = UA_ByteString_allocBuffer(&msg1, buflen); // fixed size
-#ifdef _WIN32
-    srand(42);
-#else
-    srandom(42);
-#endif
-    // when
-    for(int n = 0;n < RANDOM_TESTS;n++) {
-        for(UA_Int32 i = 0;i < buflen;i++) {
-#ifdef _WIN32
-            UA_UInt32 rnd;
-            rnd = rand();
-            msg1.data[i] = rnd;
-#else
-            msg1.data[i] = (UA_Byte)random();  // when
-#endif
-        }
-        size_t pos = 0;
-        void *obj1 = UA_new(&UA_TYPES[_i]);
-        retval |= UA_decodeBinary(&msg1, &pos, obj1, &UA_TYPES[_i], NULL);
-        UA_delete(obj1, &UA_TYPES[_i]);
-    }
-
-    // finally
-    UA_ByteString_deleteMembers(&msg1);
-}
-END_TEST
-
-START_TEST(calcSizeBinaryShallBeCorrect) {
-    /* Empty variants (with no type defined) cannot be encoded. This is
-     * intentional. Discovery configuration is just a base class and void * */
-    if(_i == UA_TYPES_VARIANT ||
-       _i == UA_TYPES_VARIABLEATTRIBUTES ||
-       _i == UA_TYPES_VARIABLETYPEATTRIBUTES ||
-       _i == UA_TYPES_FILTEROPERAND ||
-#ifdef UA_ENABLE_DISCOVERY
-       _i == UA_TYPES_DISCOVERYCONFIGURATION ||
-#endif
-       _i == UA_TYPES_UNION ||
-#ifdef UA_TYPES_FRAME
-       _i == UA_TYPES_FRAME ||
-       _i == UA_TYPES_ORIENTATION ||
-       _i == UA_TYPES_VECTOR ||
-       _i == UA_TYPES_CARTESIANCOORDINATES ||
-#endif
-       _i == UA_TYPES_HISTORYREADDETAILS ||
-       _i == UA_TYPES_NOTIFICATIONDATA ||
-       _i == UA_TYPES_MONITORINGFILTER ||
-        _i == UA_TYPES_MONITORINGFILTERRESULT ||
-        _i == UA_TYPES_DATASETREADERMESSAGEDATATYPE ||
-        _i == UA_TYPES_WRITERGROUPTRANSPORTDATATYPE ||
-        _i == UA_TYPES_CONNECTIONTRANSPORTDATATYPE ||
-        _i == UA_TYPES_WRITERGROUPMESSAGEDATATYPE ||
-        _i == UA_TYPES_READERGROUPTRANSPORTDATATYPE ||
-        _i == UA_TYPES_PUBLISHEDDATASETSOURCEDATATYPE ||
-        _i == UA_TYPES_DATASETREADERTRANSPORTDATATYPE ||
-        _i == UA_TYPES_DATASETWRITERTRANSPORTDATATYPE ||
-        _i == UA_TYPES_SUBSCRIBEDDATASETDATATYPE ||
-        _i == UA_TYPES_READERGROUPMESSAGEDATATYPE ||
-        _i == UA_TYPES_DATASETWRITERMESSAGEDATATYPE)
-        return;
-    void *obj = UA_new(&UA_TYPES[_i]);
-    size_t predicted_size = UA_calcSizeBinary(obj, &UA_TYPES[_i]);
-    ck_assert_int_ne(predicted_size, 0);
-    UA_ByteString msg;
-    UA_StatusCode retval = UA_ByteString_allocBuffer(&msg, predicted_size);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Byte *pos = msg.data;
-    const UA_Byte *end = &msg.data[msg.length];
-    retval = UA_encodeBinary(obj, &UA_TYPES[_i], &pos, &end, NULL, NULL);
-    if(retval)
-        printf("%i\n",_i);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq((uintptr_t)(pos - msg.data), predicted_size);
-    UA_delete(obj, &UA_TYPES[_i]);
-    UA_ByteString_deleteMembers(&msg);
-}
-END_TEST
-
-int main(void) {
-    int number_failed = 0;
-    SRunner *sr;
-
-    Suite *s  = suite_create("testMemoryHandling");
-    TCase *tc = tcase_create("Empty Objects");
-    tcase_add_loop_test(tc, newAndEmptyObjectShallBeDeleted, UA_TYPES_BOOLEAN, UA_TYPES_COUNT - 1);
-    tcase_add_test(tc, arrayCopyShallMakeADeepCopy);
-    tcase_add_loop_test(tc, encodeShallYieldDecode, UA_TYPES_BOOLEAN, UA_TYPES_COUNT - 1);
-    suite_add_tcase(s, tc);
-    tc = tcase_create("Truncated Buffers");
-    tcase_add_loop_test(tc, decodeShallFailWithTruncatedBufferButSurvive,
-                        UA_TYPES_BOOLEAN, UA_TYPES_COUNT - 1);
-    suite_add_tcase(s, tc);
-
-    tc = tcase_create("Fuzzing with Random Buffers");
-    tcase_add_loop_test(tc, decodeScalarBasicTypeFromRandomBufferShallSucceed,
-                        UA_TYPES_BOOLEAN, UA_TYPES_DOUBLE);
-    tcase_add_loop_test(tc, decodeComplexTypeFromRandomBufferShallSurvive,
-                        UA_TYPES_NODEID, UA_TYPES_COUNT - 1);
-    suite_add_tcase(s, tc);
-
-    tc = tcase_create("Test calcSizeBinary");
-    tcase_add_loop_test(tc, calcSizeBinaryShallBeCorrect, UA_TYPES_BOOLEAN, UA_TYPES_COUNT - 1);
-    suite_add_tcase(s, tc);
-
-    sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all (sr, CK_NORMAL);
-    number_failed += srunner_ntests_failed(sr);
-    srunner_free(sr);
-
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/check_types_range.c b/ext/open62541/tests/check_types_range.c
deleted file mode 100644
index e18f441..0000000
--- a/ext/open62541/tests/check_types_range.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/types.h>
-#include <open62541/types_generated_handling.h>
-
-#include "ua_server_internal.h"
-
-#include "check.h"
-
-START_TEST(parseRange) {
-    UA_NumericRange range;
-    UA_String str = UA_STRING("1:2,0:3,5");
-    UA_StatusCode retval = UA_NumericRange_parseFromString(&range, &str);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(range.dimensionsSize,3);
-    ck_assert_int_eq(range.dimensions[0].min,1);
-    ck_assert_int_eq(range.dimensions[0].max,2);
-    ck_assert_int_eq(range.dimensions[1].min,0);
-    ck_assert_int_eq(range.dimensions[1].max,3);
-    ck_assert_int_eq(range.dimensions[2].min,5);
-    ck_assert_int_eq(range.dimensions[2].max,5);
-    UA_free(range.dimensions);
-} END_TEST
-
-START_TEST(parseRangeMinEqualMax) {
-    UA_NumericRange range;
-    UA_String str = UA_STRING("1:2,1");
-    UA_StatusCode retval = UA_NumericRange_parseFromString(&range, &str);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(range.dimensionsSize,2);
-    ck_assert_int_eq(range.dimensions[0].min,1);
-    ck_assert_int_eq(range.dimensions[0].max,2);
-    ck_assert_int_eq(range.dimensions[1].min,1);
-    ck_assert_int_eq(range.dimensions[1].max,1);
-    UA_free(range.dimensions);
-} END_TEST
-
-START_TEST(copySimpleArrayRange) {
-    UA_Variant v, v2;
-    UA_Variant_init(&v);
-    UA_Variant_init(&v2);
-    UA_UInt32 arr[5] = {1,2,3,4,5};
-    UA_Variant_setArray(&v, arr, 5, &UA_TYPES[UA_TYPES_UINT32]);
-
-    UA_NumericRange r;
-    UA_String sr = UA_STRING("1:3");
-    UA_StatusCode retval = UA_NumericRange_parseFromString(&r, &sr);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Variant_copyRange(&v, &v2, r);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(3, v2.arrayLength);
-    ck_assert_int_eq(2, *(UA_UInt32*)v2.data);
-
-    UA_Variant_deleteMembers(&v2);
-    UA_free(r.dimensions);
-}
-END_TEST
-
-START_TEST(copyIntoStringArrayRange) {
-    UA_Variant v, v2;
-    UA_Variant_init(&v);
-    UA_Variant_init(&v2);
-    UA_String arr[2];
-    arr[0] = UA_STRING("abcd");
-    arr[1] = UA_STRING("wxyz");
-    UA_Variant_setArray(&v, arr, 5, &UA_TYPES[UA_TYPES_STRING]);
-
-    UA_NumericRange r;
-    UA_String sr = UA_STRING("0:1,1:2");
-    UA_StatusCode retval = UA_NumericRange_parseFromString(&r, &sr);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Variant_copyRange(&v, &v2, r);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(2, v2.arrayLength);
-
-    UA_String s1 = UA_STRING("bc");
-    UA_String s2 = UA_STRING("xy");
-    UA_String *arr2 = (UA_String*)v2.data;
-    ck_assert(UA_String_equal(&arr2[0], &s1));
-    ck_assert(UA_String_equal(&arr2[1], &s2));
-
-    UA_Variant_deleteMembers(&v2);
-    UA_free(r.dimensions);
-}
-END_TEST
-
-int main(void) {
-    Suite *s  = suite_create("Test Variant Range Access");
-    TCase *tc = tcase_create("test cases");
-    tcase_add_test(tc, parseRange);
-    tcase_add_test(tc, parseRangeMinEqualMax);
-    tcase_add_test(tc, copySimpleArrayRange);
-    tcase_add_test(tc, copyIntoStringArrayRange);
-    suite_add_tcase(s, tc);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all (sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/check_utils.c b/ext/open62541/tests/check_utils.c
deleted file mode 100644
index 09d4a0c..0000000
--- a/ext/open62541/tests/check_utils.c
+++ /dev/null
@@ -1,570 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/client.h>
-
-#include "ua_util_internal.h"
-
-#include <stdlib.h>
-
-#include "check.h"
-
-START_TEST(EndpointUrl_split) {
-    UA_String hostname = UA_STRING_NULL;
-    UA_String path = UA_STRING_NULL;
-    UA_UInt16 port = 0;
-
-    // check for too short url
-    UA_String endPointUrl = UA_STRING("inv.ali:/");
-    ck_assert_uint_eq(UA_parseEndpointUrl(&endPointUrl, &hostname, &port, &path),
-                      UA_STATUSCODE_BADTCPENDPOINTURLINVALID);
-
-    // check for opc.tcp:// protocol
-    endPointUrl = UA_STRING("inv.ali://");
-    ck_assert_uint_eq(UA_parseEndpointUrl(&endPointUrl, &hostname, &port, &path),
-                      UA_STATUSCODE_BADTCPENDPOINTURLINVALID);
-
-    // empty url
-    endPointUrl = UA_STRING("opc.tcp://");
-    ck_assert_uint_eq(UA_parseEndpointUrl(&endPointUrl, &hostname, &port, &path),
-                      UA_STATUSCODE_BADTCPENDPOINTURLINVALID);
-    ck_assert(UA_String_equal(&hostname, &UA_STRING_NULL));
-    ck_assert_uint_eq(port, 0);
-    ck_assert(UA_String_equal(&path, &UA_STRING_NULL));
-
-    // only hostname
-    endPointUrl = UA_STRING("opc.tcp://hostname");
-    ck_assert_uint_eq(UA_parseEndpointUrl(&endPointUrl, &hostname, &port, &path), UA_STATUSCODE_GOOD);
-    UA_String expected = UA_STRING("hostname");
-    ck_assert(UA_String_equal(&hostname, &expected));
-    ck_assert_uint_eq(port, 0);
-    ck_assert(UA_String_equal(&path, &UA_STRING_NULL));
-
-    // empty port
-    endPointUrl = UA_STRING("opc.tcp://hostname:");
-    ck_assert_uint_eq(UA_parseEndpointUrl(&endPointUrl, &hostname, &port, &path),
-                      UA_STATUSCODE_BADTCPENDPOINTURLINVALID);
-    ck_assert(UA_String_equal(&hostname, &expected));
-    ck_assert_uint_eq(port, 0);
-    ck_assert(UA_String_equal(&path, &UA_STRING_NULL));
-
-    // specific port
-    endPointUrl = UA_STRING("opc.tcp://hostname:1234");
-    ck_assert_uint_eq(UA_parseEndpointUrl(&endPointUrl, &hostname, &port, &path),
-                      UA_STATUSCODE_GOOD);
-    ck_assert(UA_String_equal(&hostname, &expected));
-    ck_assert_uint_eq(port, 1234);
-    ck_assert(UA_String_equal(&path, &UA_STRING_NULL));
-
-    // IPv6
-    endPointUrl = UA_STRING("opc.tcp://[2001:0db8:85a3::8a2e:0370:7334]:1234/path");
-    ck_assert_uint_eq(UA_parseEndpointUrl(&endPointUrl, &hostname, &port, &path), UA_STATUSCODE_GOOD);
-    expected = UA_STRING("[2001:0db8:85a3::8a2e:0370:7334]");
-    UA_String expectedPath = UA_STRING("path");
-    ck_assert(UA_String_equal(&hostname, &expected));
-    ck_assert_uint_eq(port, 1234);
-    ck_assert(UA_String_equal(&path, &expectedPath));
-
-    // invalid IPv6: missing ]
-    endPointUrl = UA_STRING("opc.tcp://[2001:0db8:85a3::8a2e:0370:7334");
-    ck_assert_uint_eq(UA_parseEndpointUrl(&endPointUrl, &hostname, &port, &path), UA_STATUSCODE_BADTCPENDPOINTURLINVALID);
-
-    // empty hostname
-    endPointUrl = UA_STRING("opc.tcp://:");
-    port = 0;
-    path = UA_STRING_NULL;
-    ck_assert_uint_eq(UA_parseEndpointUrl(&endPointUrl, &hostname, &port, &path),
-                      UA_STATUSCODE_BADTCPENDPOINTURLINVALID);
-    ck_assert(UA_String_equal(&hostname, &UA_STRING_NULL));
-    ck_assert_uint_eq(port, 0);
-    ck_assert(UA_String_equal(&path, &UA_STRING_NULL));
-
-    // empty hostname and no port
-    endPointUrl = UA_STRING("opc.tcp:///");
-    ck_assert_uint_eq(UA_parseEndpointUrl(&endPointUrl, &hostname, &port, &path), UA_STATUSCODE_GOOD);
-    ck_assert(UA_String_equal(&hostname, &UA_STRING_NULL));
-    ck_assert_uint_eq(port, 0);
-    ck_assert(UA_String_equal(&path, &UA_STRING_NULL));
-
-    // overlength port
-    endPointUrl = UA_STRING("opc.tcp://hostname:12345678");
-    ck_assert_uint_eq(UA_parseEndpointUrl(&endPointUrl, &hostname, &port, &path),
-                      UA_STATUSCODE_BADTCPENDPOINTURLINVALID);
-
-    // port not a number
-    endPointUrl = UA_STRING("opc.tcp://hostname:6x6");
-    ck_assert_uint_eq(UA_parseEndpointUrl(&endPointUrl, &hostname, &port, &path),
-                      UA_STATUSCODE_BADTCPENDPOINTURLINVALID);
-    expected = UA_STRING("hostname");
-    ck_assert(UA_String_equal(&hostname, &expected));
-    ck_assert_uint_eq(port, 0);
-    ck_assert(UA_String_equal(&path, &UA_STRING_NULL));
-
-    // no port but path
-    endPointUrl = UA_STRING("opc.tcp://hostname/");
-    ck_assert_uint_eq(UA_parseEndpointUrl(&endPointUrl, &hostname, &port, &path), UA_STATUSCODE_GOOD);
-    ck_assert(UA_String_equal(&hostname, &expected));
-    ck_assert_uint_eq(port, 0);
-    ck_assert(UA_String_equal(&path, &UA_STRING_NULL));
-
-    // port and path
-    endPointUrl = UA_STRING("opc.tcp://hostname:1234/path");
-    ck_assert_uint_eq(UA_parseEndpointUrl(&endPointUrl, &hostname, &port, &path), UA_STATUSCODE_GOOD);
-    ck_assert(UA_String_equal(&hostname, &expected));
-    ck_assert_uint_eq(port, 1234);
-    ck_assert(UA_String_equal(&path, &expectedPath));
-
-    // port and path with a slash
-    endPointUrl = UA_STRING("opc.tcp://hostname:1234/path/");
-    ck_assert_uint_eq(UA_parseEndpointUrl(&endPointUrl, &hostname, &port, &path), UA_STATUSCODE_GOOD);
-    ck_assert(UA_String_equal(&hostname, &expected));
-    ck_assert_uint_eq(port, 1234);
-    ck_assert(UA_String_equal(&path, &expectedPath));
-}
-END_TEST
-
-START_TEST(EndpointUrl_ethernet) {
-    UA_String target;
-    UA_UInt16 vid = 0;
-    UA_Byte pcp = 0;
-    UA_String expected;
-
-    // check for too short url
-    UA_String endPointUrl = UA_STRING("inv.ali:/");
-    ck_assert_uint_eq(UA_parseEndpointUrlEthernet(&endPointUrl, &target, &vid, &pcp),
-                      UA_STATUSCODE_BADINTERNALERROR);
-    ck_assert_uint_eq(vid, 0);
-    ck_assert_uint_eq(pcp, 0);
-
-    // long enough, but malformed
-    endPointUrl = UA_STRING("opc.eth.//target:");
-    ck_assert_uint_eq(UA_parseEndpointUrlEthernet(&endPointUrl, &target, &vid, &pcp),
-                      UA_STATUSCODE_BADINTERNALERROR);
-
-    // valid without vid and pcp but leading ':'
-    endPointUrl = UA_STRING("opc.eth://target:");
-    ck_assert_uint_eq(UA_parseEndpointUrlEthernet(&endPointUrl, &target, &vid, &pcp),
-                      UA_STATUSCODE_BADINTERNALERROR);
-    ck_assert_uint_eq(vid, 0);
-    ck_assert_uint_eq(pcp, 0);
-
-    // without pcp and vid as non decimal
-    endPointUrl = UA_STRING("opc.eth://target:abc");
-    ck_assert_uint_eq(UA_parseEndpointUrlEthernet(&endPointUrl, &target, &vid, &pcp),
-                      UA_STATUSCODE_BADINTERNALERROR);
-    ck_assert_uint_eq(vid, 0);
-    ck_assert_uint_eq(pcp, 0);
-
-    // pcp as non decimal
-    endPointUrl = UA_STRING("opc.eth://target:100.abc");
-    ck_assert_uint_eq(UA_parseEndpointUrlEthernet(&endPointUrl, &target, &vid, &pcp),
-                      UA_STATUSCODE_BADINTERNALERROR);
-    ck_assert_uint_eq(vid, 100);
-    ck_assert_uint_eq(pcp, 0);
-
-    // valid without pcp but leading '.'
-    endPointUrl = UA_STRING("opc.eth://target:100.");
-    ck_assert_uint_eq(UA_parseEndpointUrlEthernet(&endPointUrl, &target, &vid, &pcp),
-                      UA_STATUSCODE_BADINTERNALERROR);
-    ck_assert_uint_eq(vid, 100);
-    ck_assert_uint_eq(pcp, 0);
-
-    // valid without pcp
-    endPointUrl = UA_STRING("opc.eth://target:100");
-    ck_assert_uint_eq(UA_parseEndpointUrlEthernet(&endPointUrl, &target, &vid, &pcp),
-                      UA_STATUSCODE_GOOD);
-    expected = UA_STRING("target");
-    ck_assert(UA_String_equal(&target, &expected));
-    ck_assert_uint_eq(vid, 100);
-    ck_assert_uint_eq(pcp, 0);
-
-    // valid
-    endPointUrl = UA_STRING("opc.eth://target:100.7");
-    ck_assert_uint_eq(UA_parseEndpointUrlEthernet(&endPointUrl, &target, &vid, &pcp),
-                      UA_STATUSCODE_GOOD);
-    expected = UA_STRING("target");
-    ck_assert(UA_String_equal(&target, &expected));
-    ck_assert_uint_eq(vid, 100);
-    ck_assert_uint_eq(pcp, 7);
-}
-END_TEST
-
-START_TEST(readNumber) {
-    UA_UInt32 result;
-    ck_assert_uint_eq(UA_readNumber((UA_Byte*)"x", 1, &result), 0);
-
-    ck_assert_uint_eq(UA_readNumber((UA_Byte*)"1x", 2, &result), 1);
-    ck_assert_uint_eq(result, 1);
-
-    ck_assert_uint_eq(UA_readNumber((UA_Byte*)"123456789", 9, &result), 9);
-    ck_assert_uint_eq(result, 123456789);
-}
-END_TEST
-
-START_TEST(readNumberWithBase) {
-    UA_UInt32 result;
-    ck_assert_uint_eq(UA_readNumberWithBase((UA_Byte*)"g", 1, &result, 16), 0);
-
-    ck_assert_uint_eq(UA_readNumberWithBase((UA_Byte*)"f", 1, &result, 16), 1);
-    ck_assert_uint_eq(result, 15);
-
-    ck_assert_uint_eq(UA_readNumberWithBase((UA_Byte*)"F", 1, &result, 16), 1);
-    ck_assert_uint_eq(result, 15);
-
-    ck_assert_uint_eq(UA_readNumberWithBase((UA_Byte*)"1x", 2, &result, 16), 1);
-    ck_assert_uint_eq(result, 1);
-
-    ck_assert_uint_eq(UA_readNumberWithBase((UA_Byte*)"12345678", 9, &result, 16), 8);
-    ck_assert_uint_eq(result, 0x12345678);
-
-    ck_assert_uint_eq(UA_readNumberWithBase((UA_Byte*)"123456789", 9, &result, 8), 7);
-    ck_assert_uint_eq(result, 01234567);
-}
-END_TEST
-
-
-START_TEST(StatusCode_msg) {
-#ifndef UA_ENABLE_STATUSCODE_DESCRIPTIONS
-    return;
-#endif
-        // first element in table
-    ck_assert_str_eq(UA_StatusCode_name(UA_STATUSCODE_GOOD), "Good");
-
-        // just some randomly picked status codes
-    ck_assert_str_eq(UA_StatusCode_name(UA_STATUSCODE_BADNOCOMMUNICATION),
-                     "BadNoCommunication");
-
-    ck_assert_str_eq(UA_StatusCode_name(UA_STATUSCODE_GOODNODATA), "GoodNoData");
-
-        // last element in table
-    ck_assert_str_eq(UA_StatusCode_name(UA_STATUSCODE_BADMAXCONNECTIONSREACHED),
-                     "BadMaxConnectionsReached");
-
-        // an invalid status code
-    ck_assert_str_eq(UA_StatusCode_name(0x80123456), "Unknown StatusCode");
-}
-END_TEST
-
-
-static void assertNodeIdString(const UA_String *gotStr, const char* expectedStr) {
-    size_t expectedStringLength = strlen(expectedStr);
-    ck_assert_uint_eq(gotStr->length, expectedStringLength);
-    char *gotChars = (char*)UA_malloc(gotStr->length+1);
-    memcpy(gotChars, gotStr->data, gotStr->length);
-    gotChars[gotStr->length] = 0;
-    ck_assert_str_eq(gotChars, expectedStr);
-    UA_free(gotChars);
-}
-
-START_TEST(idToStringNull) {
-    UA_String str = UA_STRING_NULL;
-    ck_assert_int_eq(UA_NodeId_toString(NULL, &str), UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(idToStringNumeric) {
-    UA_NodeId n;
-    UA_String str = UA_STRING_NULL;
-
-    n = UA_NODEID_NUMERIC(0,0);
-    UA_NodeId_toString(&n, &str);
-    assertNodeIdString(&str, "i=0");
-
-    n = UA_NODEID_NUMERIC(12345,1234567890);
-    UA_NodeId_toString(&n, &str);
-    assertNodeIdString(&str, "ns=12345;i=1234567890");
-
-    n = UA_NODEID_NUMERIC(0xFFFF,0xFFFFFFFF);
-    UA_NodeId_toString(&n, &str);
-    assertNodeIdString(&str, "ns=65535;i=4294967295");
-
-    UA_String_deleteMembers(&str);
-} END_TEST
-
-START_TEST(idToStringString) {
-    UA_NodeId n;
-    UA_String str = UA_STRING_NULL;
-
-    n = UA_NODEID_STRING(0,"");
-    UA_NodeId_toString(&n, &str);
-    assertNodeIdString(&str, "s=");
-
-    n = UA_NODEID_STRING(54321,"Some String");
-    UA_NodeId_toString(&n, &str);
-    assertNodeIdString(&str, "ns=54321;s=Some String");
-
-    n = UA_NODEID_STRING(0,"Some String");
-    UA_NodeId_toString(&n, &str);
-    assertNodeIdString(&str, "s=Some String");
-
-    UA_String_deleteMembers(&str);
-} END_TEST
-
-START_TEST(idToStringGuid) {
-    UA_NodeId n;
-    UA_String str = UA_STRING_NULL;
-
-    UA_Guid g = UA_GUID_NULL;
-
-    n = UA_NODEID_GUID(0,UA_GUID_NULL);
-    UA_NodeId_toString(&n, &str);
-    assertNodeIdString(&str, "g=00000000-0000-0000-0000-000000000000");
-
-    g.data1 = 0xA123456C;
-    g.data2 = 0x0ABC;
-    g.data3 = 0x1A2B;
-    g.data4[0] = 0x81;
-    g.data4[1] = 0x5F;
-    g.data4[2] = 0x68;
-    g.data4[3] = 0x72;
-    g.data4[4] = 0x12;
-    g.data4[5] = 0xAA;
-    g.data4[6] = 0xEE;
-    g.data4[7] = 0x1B;
-
-    n = UA_NODEID_GUID(65535,g);
-    UA_NodeId_toString(&n, &str);
-    assertNodeIdString(&str, "ns=65535;g=a123456c-0abc-1a2b-815f-687212aaee1b");
-
-    g.data1 = 0xFFFFFFFF;
-    g.data2 = 0xFFFF;
-    g.data3 = 0xFFFF;
-    g.data4[0] = 0xFF;
-    g.data4[1] = 0xFF;
-    g.data4[2] = 0xFF;
-    g.data4[3] = 0xFF;
-    g.data4[4] = 0xFF;
-    g.data4[5] = 0xFF;
-    g.data4[6] = 0xFF;
-    g.data4[7] = 0xFF;
-
-    n = UA_NODEID_GUID(65535,g);
-    UA_NodeId_toString(&n, &str);
-    assertNodeIdString(&str, "ns=65535;g=ffffffff-ffff-ffff-ffff-ffffffffffff");
-
-    UA_String_deleteMembers(&str);
-} END_TEST
-
-START_TEST(idToStringByte) {
-    UA_NodeId n;
-    UA_String str = UA_STRING_NULL;
-
-    n.namespaceIndex = 0;
-    n.identifierType = UA_NODEIDTYPE_BYTESTRING;
-    n.identifier.byteString.data = NULL;
-    n.identifier.byteString.length = 0;
-    UA_NodeId_toString(&n, &str);
-    assertNodeIdString(&str, "b=");
-
-    UA_ByteString bs = UA_BYTESTRING_NULL;
-
-    bs.length = 1;
-    bs.data = (UA_Byte*)UA_malloc(bs.length);
-    bs.data[0] = 0x00;
-    n.identifier.byteString = bs;
-    n.namespaceIndex = 123;
-    UA_NodeId_toString(&n, &str);
-    assertNodeIdString(&str, "ns=123;b=AA==");
-    UA_free(bs.data);
-
-    bs.length = 1;
-    bs.data = (UA_Byte*)UA_malloc(bs.length);
-    bs.data[0] = 0x2C;
-    n.identifier.byteString = bs;
-    n.namespaceIndex = 123;
-    UA_NodeId_toString(&n, &str);
-    assertNodeIdString(&str, "ns=123;b=LA==");
-    UA_free(bs.data);
-
-    bs.length = 5;
-    bs.data = (UA_Byte*)UA_malloc(bs.length);
-    bs.data[0] = 0x21;
-    bs.data[1] = 0x83;
-    bs.data[2] = 0xE0;
-    bs.data[3] = 0x54;
-    bs.data[4] = 0x78;
-    n.identifier.byteString = bs;
-    n.namespaceIndex = 599;
-    UA_NodeId_toString(&n, &str);
-    assertNodeIdString(&str, "ns=599;b=IYPgVHg=");
-    UA_free(bs.data);
-
-    UA_String_deleteMembers(&str);
-} END_TEST
-
-
-START_TEST(idOrderNs) {
-    UA_NodeId id_ns1 = UA_NODEID_NUMERIC(1, 12345);
-    UA_NodeId id_ns3 = UA_NODEID_NUMERIC(3, 12345);
-
-    ck_assert(UA_NodeId_order(&id_ns1, &id_ns1) == UA_ORDER_EQ);
-    ck_assert(UA_NodeId_order(&id_ns1, &id_ns3) == UA_ORDER_LESS);
-    ck_assert(UA_NodeId_order(&id_ns3, &id_ns1) == UA_ORDER_MORE);
-} END_TEST
-
-START_TEST(idOrderIdentifier) {
-    UA_NodeId id_num = UA_NODEID_NUMERIC(1, 12345);
-    UA_NodeId id_str = UA_NODEID_STRING(1, "asdf");
-
-    ck_assert(UA_NodeId_order(&id_num, &id_num) == UA_ORDER_EQ);
-    ck_assert(UA_NodeId_order(&id_num, &id_str) == UA_ORDER_LESS);
-    ck_assert(UA_NodeId_order(&id_str, &id_num) == UA_ORDER_MORE);
-} END_TEST
-
-START_TEST(idOrderNumeric) {
-    UA_NodeId id_num_12345 = UA_NODEID_NUMERIC(1, 12345);
-    UA_NodeId id_num_23456 = UA_NODEID_NUMERIC(1, 23456);
-
-    ck_assert(UA_NodeId_order(&id_num_12345, &id_num_12345) == UA_ORDER_EQ);
-    ck_assert(UA_NodeId_order(&id_num_12345, &id_num_23456) == UA_ORDER_LESS);
-    ck_assert(UA_NodeId_order(&id_num_23456, &id_num_12345) == UA_ORDER_MORE);
-} END_TEST
-
-START_TEST(idOrderGuid) {
-
-    // See also https://github.com/open62541/open62541/pull/2904#issuecomment-514111395
-
-    // 00000000-FFFF-FFFF-FFFFFFFFFFFF,
-    UA_Guid guid1 = {
-            0,
-            0xffff,
-            0xffff,
-            { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }
-    };
-    // 00000001-0000-0000-000000000000
-    UA_Guid guid2 = {
-            0x1,
-            0,
-            0,
-            { 0, 0, 0, 0, 0, 0, 0, 0 }
-    };
-    // 00000000-0000-FFFF-FFFFFFFFFFFF
-    UA_Guid guid3 = {
-            0,
-            0,
-            0xffff,
-            { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }
-    };
-    // 00000000-0001-0000-000000000000
-    UA_Guid guid4 = {
-            0,
-            0x1,
-            0,
-            { 0, 0, 0, 0, 0, 0, 0, 0 }
-    };
-    // 00000000-0000-0000-FFFFFFFFFFFF
-    UA_Guid guid5 = {
-            0,
-            0,
-            0,
-            { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }
-    };
-    // 00000000-0000-0001-000000000000
-    UA_Guid guid6 = {
-            0,
-            0,
-            0x1,
-            { 0, 0, 0, 0, 0, 0, 0, 0 }
-    };
-    // 00000000-0000-0000-000000000000
-    UA_Guid guid7 = {
-            0,
-            0,
-            0,
-            { 0, 0, 0, 0, 0, 0, 0, 0 }
-    };
-    // 00000000-0000-0000-000000000001
-    UA_Guid guid8 = {
-            0,
-            0,
-            0,
-            { 0, 0, 0, 0, 0, 0, 0, 0x1 }
-    };
-
-
-    UA_NodeId id_guid_1 = UA_NODEID_GUID(1, guid1);
-    UA_NodeId id_guid_2 = UA_NODEID_GUID(1, guid2);
-    ck_assert(UA_NodeId_order(&id_guid_1, &id_guid_1) == UA_ORDER_EQ);
-    ck_assert(UA_NodeId_order(&id_guid_1, &id_guid_2) == UA_ORDER_LESS);
-    ck_assert(UA_NodeId_order(&id_guid_2, &id_guid_1) == UA_ORDER_MORE);
-
-    UA_NodeId id_guid_3 = UA_NODEID_GUID(1, guid3);
-    UA_NodeId id_guid_4 = UA_NODEID_GUID(1, guid4);
-    ck_assert(UA_NodeId_order(&id_guid_3, &id_guid_3) == UA_ORDER_EQ);
-    ck_assert(UA_NodeId_order(&id_guid_3, &id_guid_4) == UA_ORDER_LESS);
-    ck_assert(UA_NodeId_order(&id_guid_4, &id_guid_3) == UA_ORDER_MORE);
-
-    UA_NodeId id_guid_5 = UA_NODEID_GUID(1, guid5);
-    UA_NodeId id_guid_6 = UA_NODEID_GUID(1, guid6);
-    ck_assert(UA_NodeId_order(&id_guid_5, &id_guid_5) == UA_ORDER_EQ);
-    ck_assert(UA_NodeId_order(&id_guid_5, &id_guid_2) == UA_ORDER_LESS);
-    ck_assert(UA_NodeId_order(&id_guid_6, &id_guid_5) == UA_ORDER_MORE);
-
-    UA_NodeId id_guid_7 = UA_NODEID_GUID(1, guid7);
-    UA_NodeId id_guid_8 = UA_NODEID_GUID(1, guid8);
-    ck_assert(UA_NodeId_order(&id_guid_7, &id_guid_7) == UA_ORDER_EQ);
-    ck_assert(UA_NodeId_order(&id_guid_7, &id_guid_8) == UA_ORDER_LESS);
-    ck_assert(UA_NodeId_order(&id_guid_8, &id_guid_7) == UA_ORDER_MORE);
-
-} END_TEST
-
-START_TEST(idOrderString) {
-    UA_NodeId id_str_a = UA_NODEID_STRING(1, "aaaaa");
-    UA_NodeId id_str_b = UA_NODEID_STRING(1, "baa");
-
-    ck_assert(UA_NodeId_order(&id_str_a, &id_str_a) == UA_ORDER_EQ);
-    ck_assert(UA_NodeId_order(&id_str_a, &id_str_b) == UA_ORDER_LESS);
-    ck_assert(UA_NodeId_order(&id_str_b, &id_str_a) == UA_ORDER_MORE);
-
-    UA_NodeId id_str_c = UA_NODEID_STRING(1, "cddd");
-    UA_NodeId id_str_d = UA_NODEID_STRING(1, "dddd");
-
-    ck_assert(UA_NodeId_order(&id_str_c, &id_str_c) == UA_ORDER_EQ);
-    ck_assert(UA_NodeId_order(&id_str_c, &id_str_d) == UA_ORDER_LESS);
-    ck_assert(UA_NodeId_order(&id_str_d, &id_str_c) == UA_ORDER_MORE);
-} END_TEST
-
-
-static Suite* testSuite_Utils(void) {
-    Suite *s = suite_create("Utils");
-    TCase *tc_endpointUrl_split = tcase_create("EndpointUrl_split");
-    tcase_add_test(tc_endpointUrl_split, EndpointUrl_split);
-    suite_add_tcase(s,tc_endpointUrl_split);
-    TCase *tc_endpointUrl_ethernet = tcase_create("EndpointUrl_ethernet");
-    tcase_add_test(tc_endpointUrl_ethernet, EndpointUrl_ethernet);
-    suite_add_tcase(s,tc_endpointUrl_ethernet);
-    TCase *tc_utils = tcase_create("Utils");
-    tcase_add_test(tc_utils, readNumber);
-    tcase_add_test(tc_utils, readNumberWithBase);
-    tcase_add_test(tc_utils, StatusCode_msg);
-    suite_add_tcase(s,tc_utils);
-
-
-    TCase *tc1 = tcase_create("test nodeid string");
-    tcase_add_test(tc1, idToStringNull);
-    tcase_add_test(tc1, idToStringNumeric);
-    tcase_add_test(tc1, idToStringString);
-    tcase_add_test(tc1, idToStringGuid);
-    tcase_add_test(tc1, idToStringByte);
-    suite_add_tcase(s, tc1);
-
-    TCase *tc2 = tcase_create("test nodeid order");
-    tcase_add_test(tc1, idOrderNs);
-    tcase_add_test(tc1, idOrderIdentifier);
-    tcase_add_test(tc1, idOrderNumeric);
-    tcase_add_test(tc1, idOrderGuid);
-    tcase_add_test(tc1, idOrderString);
-    suite_add_tcase(s, tc2);
-
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_Utils();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/client/check_client.c b/ext/open62541/tests/client/check_client.c
deleted file mode 100644
index 48b5360..0000000
--- a/ext/open62541/tests/client/check_client.c
+++ /dev/null
@@ -1,369 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/client_config_default.h>
-#include <open62541/server_config_default.h>
-
-#include "client/ua_client_internal.h"
-#include "ua_server_internal.h"
-
-#include <check.h>
-#include <stdlib.h>
-
-#include "testing_clock.h"
-#include "testing_networklayers.h"
-#include "thread_wrapper.h"
-
-UA_Server *server;
-UA_Boolean running;
-UA_ServerNetworkLayer nl;
-THREAD_HANDLE server_thread;
-
-static void
-addVariable(size_t size) {
-    /* Define the attribute of the myInteger variable node */
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    UA_Int32* array = (UA_Int32*)UA_malloc(size * sizeof(UA_Int32));
-    memset(array, 0, size * sizeof(UA_Int32));
-    UA_Variant_setArray(&attr.value, array, size, &UA_TYPES[UA_TYPES_INT32]);
-
-    char name[] = "my.variable";
-    attr.description = UA_LOCALIZEDTEXT("en-US", name);
-    attr.displayName = UA_LOCALIZEDTEXT("en-US", name);
-    attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-
-    /* Add the variable node to the information model */
-    UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, name);
-    UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, name);
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId,
-                              parentReferenceNodeId, myIntegerName,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                              attr, NULL, NULL);
-
-    UA_free(array);
-}
-
-THREAD_CALLBACK(serverloop) {
-    while(running)
-        UA_Server_run_iterate(server, true);
-    return 0;
-}
-
-static void setup(void) {
-    running = true;
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-    UA_Server_run_startup(server);
-    addVariable(16366);
-    THREAD_CREATE(server_thread, serverloop);
-}
-
-static void teardown(void) {
-    running = false;
-    THREAD_JOIN(server_thread);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-START_TEST(Client_connect) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-END_TEST
-
-START_TEST(Client_connect_username) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_StatusCode retval = UA_Client_connect_username(client, "opc.tcp://localhost:4840", "user1", "password");
-
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-END_TEST
-
-START_TEST(Client_endpoints) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    UA_EndpointDescription* endpointArray = NULL;
-    size_t endpointArraySize = 0;
-    UA_StatusCode retval = UA_Client_getEndpoints(client, "opc.tcp://localhost:4840",
-                                                  &endpointArraySize, &endpointArray);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert(endpointArraySize > 0);
-
-    UA_Array_delete(endpointArray,endpointArraySize, &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
-
-    UA_Client_delete(client);
-}
-END_TEST
-
-START_TEST(Client_endpoints_empty) {
-    /* Issue a getEndpoints call with empty endpointUrl.
-     * Using UA_Client_getEndpoints automatically passes the client->endpointUrl as requested endpointUrl.
-     * The spec says:
-     * The Server should return a suitable default URL if it does not recognize the HostName in the URL.
-     *
-     * See https://github.com/open62541/open62541/issues/775
-     */
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_GetEndpointsRequest request;
-    UA_GetEndpointsRequest_init(&request);
-    request.requestHeader.timestamp = UA_DateTime_now();
-    request.requestHeader.timeoutHint = 10000;
-
-    UA_GetEndpointsResponse response;
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_GETENDPOINTSREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_GETENDPOINTSRESPONSE]);
-
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-
-    ck_assert(response.endpointsSize > 0);
-
-    UA_GetEndpointsResponse_deleteMembers(&response);
-    UA_GetEndpointsRequest_deleteMembers(&request);
-
-    UA_Client_delete(client);
-}
-END_TEST
-
-START_TEST(Client_read) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Variant val;
-    UA_NodeId nodeId = UA_NODEID_STRING(1, "my.variable");
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Variant_deleteMembers(&val);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-END_TEST
-
-START_TEST(Client_renewSecureChannel) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    /* Forward the time */
-    UA_ClientConfig *cc = UA_Client_getConfig(client);
-    UA_fakeSleep((UA_UInt32)((UA_Double)cc->secureChannelLifeTime * 0.8));
-
-    /* Now read */
-    UA_Variant val;
-    UA_NodeId nodeId = UA_NODEID_STRING(1, "my.variable");
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Variant_deleteMembers(&val);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-
-} END_TEST
-
-START_TEST(Client_renewSecureChannelWithActiveSubscription) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_ClientConfig *cc = UA_Client_getConfig(client);
-    cc->secureChannelLifeTime = 10000;
-
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();
-    request.requestedLifetimeCount = 1000;
-    UA_CreateSubscriptionResponse response = UA_Client_Subscriptions_create(client, request,
-                                                                            NULL, NULL, NULL);
-
-    (void)response;
-
-    for(int i = 0; i < 15; ++i) {
-        UA_sleep_ms(1000);
-        retval = UA_Client_run_iterate(client, 0);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-} END_TEST
-
-START_TEST(Client_reconnect) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Variant val;
-    UA_NodeId nodeId = UA_NODEID_STRING(1, "my.variable");
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Variant_deleteMembers(&val);
-
-    // restart server to test reconnect
-    teardown();
-    setup();
-
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADCONNECTIONCLOSED);
-
-    retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_msg(retval == UA_STATUSCODE_GOOD, UA_StatusCode_name(retval));
-
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Variant_deleteMembers(&val);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-END_TEST
-
-START_TEST(Client_delete_without_connect) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    ck_assert(client != NULL);
-    UA_Client_delete(client);
-}
-END_TEST
-
-// TODO ACTIVATE THE TESTS WHEN SESSION RECOVERY IS GOOD
-#ifdef UA_SESSION_RECOVERY
-
-START_TEST(Client_activateSessionClose) {
-    // restart server
-    teardown();
-    setup();
-    ck_assert_uint_eq(server->sessionManager.currentSessionCount, 0);
-
-    UA_ClientConfig clientConfig = UA_ClientConfig_default;
-    UA_Client *client = UA_Client_new(clientConfig);
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(server->sessionManager.currentSessionCount, 1);
-
-    UA_Variant val;
-    UA_NodeId nodeId = UA_NODEID_STRING(1, "my.variable");
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Variant_deleteMembers(&val);
-
-    UA_Client_disconnect(client);
-
-    retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(server->sessionManager.currentSessionCount, 1);
-
-    nodeId = UA_NODEID_STRING(1, "my.variable");
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Variant_deleteMembers(&val);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-    ck_assert_uint_eq(server->sessionManager.currentSessionCount, 0);
-}
-END_TEST
-
-START_TEST(Client_activateSessionTimeout) {
-    // restart server
-    teardown();
-    setup();
-    ck_assert_uint_eq(server->sessionManager.currentSessionCount, 0);
-
-    UA_Client *client = UA_Client_new(UA_ClientConfig_default);
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    ck_assert_uint_eq(server->sessionManager.currentSessionCount, 1);
-
-    UA_Variant val;
-    UA_Variant_init(&val);
-    UA_NodeId nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE);
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Variant_deleteMembers(&val);
-
-    UA_Client_recv = client->connection.recv;
-    client->connection.recv = UA_Client_recvTesting;
-
-    /* Simulate network cable unplugged (no response from server) */
-    UA_Client_recvTesting_result = UA_STATUSCODE_GOODNONCRITICALTIMEOUT;
-
-    UA_Variant_init(&val);
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADCONNECTIONCLOSED);
-
-    ck_assert_msg(UA_Client_getState(client) == UA_CLIENTSTATE_DISCONNECTED);
-
-    UA_Client_recvTesting_result = UA_STATUSCODE_GOOD;
-    retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(server->sessionManager.currentSessionCount, 1);
-
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Variant_deleteMembers(&val);
-
-    UA_Client_delete(client);
-
-    ck_assert_uint_eq(server->sessionManager.currentSessionCount, 0);
-}
-END_TEST
-
-#endif /* UA_SESSION_RECOVERY */
-
-static Suite* testSuite_Client(void) {
-    Suite *s = suite_create("Client");
-    TCase *tc_client = tcase_create("Client Basic");
-    tcase_add_checked_fixture(tc_client, setup, teardown);
-    tcase_add_test(tc_client, Client_connect);
-    tcase_add_test(tc_client, Client_connect_username);
-    tcase_add_test(tc_client, Client_delete_without_connect);
-    tcase_add_test(tc_client, Client_endpoints);
-    tcase_add_test(tc_client, Client_endpoints_empty);
-    tcase_add_test(tc_client, Client_read);
-    suite_add_tcase(s,tc_client);
-    TCase *tc_client_reconnect = tcase_create("Client Reconnect");
-    tcase_add_checked_fixture(tc_client_reconnect, setup, teardown);
-    tcase_add_test(tc_client_reconnect, Client_renewSecureChannel);
-    tcase_add_test(tc_client_reconnect, Client_renewSecureChannelWithActiveSubscription);
-    tcase_add_test(tc_client_reconnect, Client_reconnect);
-#ifdef UA_SESSION_RECOVERY
-    tcase_add_test(tc_client_reconnect, Client_activateSessionClose);
-    tcase_add_test(tc_client_reconnect, Client_activateSessionTimeout);
-#endif /* UA_SESSION_RECOVERY */
-    suite_add_tcase(s,tc_client_reconnect);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/client/check_client_async.c b/ext/open62541/tests/client/check_client_async.c
deleted file mode 100644
index c17dd3e..0000000
--- a/ext/open62541/tests/client/check_client_async.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel_async.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include "client/ua_client_internal.h"
-
-#include <check.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "testing_clock.h"
-#include "testing_networklayers.h"
-#include "thread_wrapper.h"
-
-UA_Server *server;
-UA_ServerConfig *config;
-UA_Boolean running;
-UA_ServerNetworkLayer nl;
-THREAD_HANDLE server_thread;
-
-THREAD_CALLBACK(serverloop) {
-    while (running)
-        UA_Server_run_iterate(server, true);
-    return 0;
-}
-
-static void setup(void) {
-    running = true;
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    UA_Server_run_startup(server);
-    THREAD_CREATE(server_thread, serverloop);
-}
-
-static void teardown(void) {
-    running = false;
-    THREAD_JOIN(server_thread);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-static void asyncReadCallback(UA_Client *client, void *userdata,
-        UA_UInt32 requestId, const UA_ReadResponse *response) {
-    UA_UInt16 *asyncCounter = (UA_UInt16*) userdata;
-    if (response->responseHeader.serviceResult == UA_STATUSCODE_BADTIMEOUT) {
-        (*asyncCounter) = 9999;
-        UA_fakeSleep(10);
-    } else {
-        (*asyncCounter)++;
-        UA_fakeSleep(10);
-    }
-}
-
-static void asyncReadValueAtttributeCallback(UA_Client *client, void *userdata,
-        UA_UInt32 requestId, UA_Variant *var) {
-    UA_UInt16 *asyncCounter = (UA_UInt16*) userdata;
-    (*asyncCounter)++;
-    UA_fakeSleep(10);
-}
-
-START_TEST(Client_highlevel_async_readValue) {
-        UA_Client *client = UA_Client_new();
-        UA_ClientConfig *clientConfig = UA_Client_getConfig(client);
-        UA_ClientConfig_setDefault(clientConfig);
-        clientConfig->outStandingPublishRequests = 0;
-
-        UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-        UA_Client_recv = client->connection.recv;
-        client->connection.recv = UA_Client_recvTesting;
-
-        UA_UInt16 asyncCounter = 0;
-
-        UA_UInt32 reqId = 0;
-        retval = UA_Client_readValueAttribute_async(client,
-                UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME),
-                (UA_ClientAsyncReadValueAttributeCallback) asyncReadValueAtttributeCallback,
-                (void*)&asyncCounter, &reqId);
-
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-        /* Process async responses during 1s */
-        UA_Client_run_iterate(client, 999 + 1);
-
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-        ck_assert_uint_eq(asyncCounter, 1);
-
-        /* Simulate network cable unplugged (no response from server) */
-        UA_Client_recvTesting_result = UA_STATUSCODE_GOODNONCRITICALTIMEOUT;
-
-        UA_Client_disconnect(client);
-        UA_Client_delete(client);
-} END_TEST
-
-START_TEST(Client_read_async) {
-        UA_Client *client = UA_Client_new();
-        UA_ClientConfig *clientConfig = UA_Client_getConfig(client);
-        UA_ClientConfig_setDefault(clientConfig);
-
-        UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-        UA_UInt16 asyncCounter = 0;
-
-        UA_ReadRequest rr;
-        UA_ReadRequest_init(&rr);
-
-        UA_ReadValueId rvid;
-        UA_ReadValueId_init(&rvid);
-        rvid.attributeId = UA_ATTRIBUTEID_VALUE;
-        rvid.nodeId = UA_NODEID_NUMERIC(0,
-                UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME);
-
-        rr.nodesToRead = &rvid;
-        rr.nodesToReadSize = 1;
-
-        /* Send 100 requests */
-        for (size_t i = 0; i < 100; i++) {
-            retval = __UA_Client_AsyncService(client, &rr,
-                    &UA_TYPES[UA_TYPES_READREQUEST],
-                    (UA_ClientAsyncServiceCallback) asyncReadCallback,
-                    &UA_TYPES[UA_TYPES_READRESPONSE], &asyncCounter, NULL);
-            ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-        }
-
-        /* Process async responses during 1s */
-        retval = UA_Client_run_iterate(client, 999);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-        ck_assert_uint_eq(asyncCounter, 100);
-
-        UA_Client_disconnect(client);
-        UA_Client_delete(client);
-    }END_TEST
-
-START_TEST(Client_read_async_timed) {
-        UA_Client *client = UA_Client_new();
-        UA_ClientConfig *clientConfig = UA_Client_getConfig(client);
-        UA_ClientConfig_setDefault(clientConfig);
-        clientConfig->outStandingPublishRequests = 0;
-
-        UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-        UA_Client_recv = client->connection.recv;
-        client->connection.recv = UA_Client_recvTesting;
-
-        UA_UInt16 asyncCounter = 0;
-
-        UA_ReadRequest rr;
-        UA_ReadRequest_init(&rr);
-
-        UA_ReadValueId rvid;
-        UA_ReadValueId_init(&rvid);
-        rvid.attributeId = UA_ATTRIBUTEID_VALUE;
-        rvid.nodeId = UA_NODEID_NUMERIC(0,
-                UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME);
-
-        rr.nodesToRead = &rvid;
-        rr.nodesToReadSize = 1;
-
-        retval = __UA_Client_AsyncServiceEx(client, &rr,
-                &UA_TYPES[UA_TYPES_READREQUEST],
-                (UA_ClientAsyncServiceCallback) asyncReadCallback,
-                &UA_TYPES[UA_TYPES_READRESPONSE], &asyncCounter, NULL, 999);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-        /* Process async responses during 1s */
-        retval = UA_Client_run_iterate(client, 999 + 1);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-        ck_assert_uint_eq(asyncCounter, 1);
-
-        /* Simulate network cable unplugged (no response from server) */
-        UA_Client_recvTesting_result = UA_STATUSCODE_GOODNONCRITICALTIMEOUT;
-
-        retval = __UA_Client_AsyncServiceEx(client, &rr,
-                &UA_TYPES[UA_TYPES_READREQUEST],
-                (UA_ClientAsyncServiceCallback) asyncReadCallback,
-                &UA_TYPES[UA_TYPES_READRESPONSE], &asyncCounter, NULL, 100);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-        /* Process async responses during 1s */
-        UA_Client_run_iterate(client, 100 + 1);
-        ck_assert_uint_eq(asyncCounter, 9999);
-
-        UA_Client_disconnect(client);
-        UA_Client_delete(client);
-    }END_TEST
-
-static UA_Boolean inactivityCallbackTriggered = false;
-
-static void inactivityCallback(UA_Client *client) {
-    inactivityCallbackTriggered = true;
-}
-
-START_TEST(Client_connectivity_check) {
-        UA_Client *client = UA_Client_new();
-        UA_ClientConfig *clientConfig = UA_Client_getConfig(client);
-        UA_ClientConfig_setDefault(clientConfig);
-        clientConfig->outStandingPublishRequests = 0;
-        clientConfig->inactivityCallback = inactivityCallback;
-        clientConfig->connectivityCheckInterval = 1000;
-
-        UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-        UA_Client_recv = client->connection.recv;
-        client->connection.recv = UA_Client_recvTesting;
-
-        inactivityCallbackTriggered = false;
-
-        retval = UA_Client_run_iterate(client, 1000 + 1);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-        ck_assert_uint_eq(inactivityCallbackTriggered, false);
-
-        /* Simulate network cable unplugged (no response from server) */
-        UA_Client_recvTesting_result = UA_STATUSCODE_GOODNONCRITICALTIMEOUT;
-
-        retval = UA_Client_run_iterate(client,
-                (UA_UInt16) (1000 + 1 + clientConfig->timeout));
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-        ck_assert_uint_eq(inactivityCallbackTriggered, true);
-
-        UA_Client_disconnect(client);
-        UA_Client_delete(client);
-    }END_TEST
-
-static Suite* testSuite_Client(void) {
-    Suite *s = suite_create("Client");
-    TCase *tc_client = tcase_create("Client Basic");
-    tcase_add_checked_fixture(tc_client, setup, teardown);
-    tcase_add_test(tc_client, Client_read_async);
-    tcase_add_test(tc_client, Client_read_async_timed);
-    tcase_add_test(tc_client, Client_connectivity_check);
-    tcase_add_test(tc_client, Client_highlevel_async_readValue);
-
-    suite_add_tcase(s, tc_client);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/client/check_client_async_connect.c b/ext/open62541/tests/client/check_client_async_connect.c
deleted file mode 100644
index aa98850..0000000
--- a/ext/open62541/tests/client/check_client_async_connect.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel_async.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include "client/ua_client_internal.h"
-
-#include <check.h>
-#include <stdlib.h>
-
-#include "testing_clock.h"
-#include "testing_networklayers.h"
-#include "thread_wrapper.h"
-
-UA_Server *server;
-UA_Boolean running;
-UA_ServerNetworkLayer nl;
-THREAD_HANDLE server_thread;
-
-THREAD_CALLBACK(serverloop) {
-    while(running)
-        UA_Server_run_iterate(server, true);
-    return 0;
-}
-
-static void
-onConnect(UA_Client *Client, void *connected,
-          UA_UInt32 requestId, void *response) {
-    if (UA_Client_getState (Client) == UA_CLIENTSTATE_SESSION)
-        *(UA_Boolean *)connected = true;
-}
-
-static void setup(void) {
-    running = true;
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-    UA_Server_run_startup(server);
-    THREAD_CREATE(server_thread, serverloop);
-    /* Waiting server is up */
-    UA_comboSleep(1000);
-}
-
-static void teardown(void) {
-    running = false;
-    THREAD_JOIN(server_thread);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-static void
-asyncBrowseCallback(UA_Client *Client, void *userdata,
-                  UA_UInt32 requestId, UA_BrowseResponse *response) {
-    UA_UInt16 *asyncCounter = (UA_UInt16*)userdata;
-    (*asyncCounter)++;
-}
-
-START_TEST(Client_connect_async){
-    UA_StatusCode retval;
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_Boolean connected = false;
-    UA_Client_connect_async(client, "opc.tcp://localhost:4840", onConnect, &connected);
-    /*Windows needs time to response*/
-    UA_sleep_ms(100);
-    UA_UInt32 reqId = 0;
-    UA_UInt16 asyncCounter = 0;
-    UA_BrowseRequest bReq;
-    UA_BrowseRequest_init (&bReq);
-    bReq.requestedMaxReferencesPerNode = 0;
-    bReq.nodesToBrowse = UA_BrowseDescription_new ();
-    bReq.nodesToBrowseSize = 1;
-    bReq.nodesToBrowse[0].nodeId = UA_NODEID_NUMERIC (0, UA_NS0ID_OBJECTSFOLDER);
-    bReq.nodesToBrowse[0].resultMask = UA_BROWSERESULTMASK_ALL; /* return everything */
-    /* Connected gets updated when client is connected */
-
-    do {
-        if(connected) {
-            /* If not connected requests are not sent */
-            UA_Client_sendAsyncBrowseRequest (client, &bReq, asyncBrowseCallback,
-                                              &asyncCounter, &reqId);
-        }
-        /* Manual clock for unit tests */
-        UA_comboSleep(20);
-        retval = UA_Client_run_iterate(client, 0);
-        /*fix infinite loop, but why is server occasionally shut down in Appveyor?!*/
-        if(retval == UA_STATUSCODE_BADCONNECTIONCLOSED)
-            break;
-    } while(reqId < 10);
-
-    UA_BrowseRequest_deleteMembers(&bReq);
-    ck_assert_uint_eq(connected, true);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    /* With default setting the client uses 4 requests to connect */
-    ck_assert_uint_eq(asyncCounter, 10-4);
-    UA_Client_disconnect(client);
-    UA_Client_delete (client);
-}
-END_TEST
-
-START_TEST(Client_no_connection) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    UA_Boolean connected = false;
-    UA_StatusCode retval =
-        UA_Client_connect_async(client, "opc.tcp://localhost:4840", onConnect, &connected);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Client_recv = client->connection.recv;
-    client->connection.recv = UA_Client_recvTesting;
-    //simulating unconnected server
-    UA_Client_recvTesting_result = UA_STATUSCODE_BADCONNECTIONCLOSED;
-    retval = UA_Client_run_iterate(client, 0);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADCONNECTIONCLOSED);
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-END_TEST
-
-START_TEST(Client_without_run_iterate) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_Boolean connected = false;
-    UA_Client_connect_async(client, "opc.tcp://localhost:4840", onConnect, &connected);
-    UA_Client_delete(client);
-}
-END_TEST
-
-static Suite* testSuite_Client(void) {
-    Suite *s = suite_create("Client");
-    TCase *tc_client_connect = tcase_create("Client Connect Async");
-    tcase_add_checked_fixture(tc_client_connect, setup, teardown);
-    tcase_add_test(tc_client_connect, Client_connect_async);
-    tcase_add_test(tc_client_connect, Client_no_connection);
-    tcase_add_test(tc_client_connect, Client_without_run_iterate);
-    suite_add_tcase(s,tc_client_connect);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/client/check_client_highlevel.c b/ext/open62541/tests/client/check_client_highlevel.c
deleted file mode 100644
index e86d0e1..0000000
--- a/ext/open62541/tests/client/check_client_highlevel.c
+++ /dev/null
@@ -1,1090 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include <check.h>
-
-#include "thread_wrapper.h"
-
-UA_Server *server;
-UA_Boolean running;
-UA_ServerNetworkLayer nl;
-THREAD_HANDLE server_thread;
-
-UA_Client *client;
-
-#define CUSTOM_NS "http://open62541.org/ns/test"
-#define CUSTOM_NS_UPPER "http://open62541.org/ns/Test"
-
-THREAD_CALLBACK(serverloop) {
-    while (running)
-        UA_Server_run_iterate(server, true);
-    return 0;
-}
-
-static void setup(void) {
-    running = true;
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    ck_assert_uint_eq(2, UA_Server_addNamespace(server, CUSTOM_NS));
-
-    UA_Server_run_startup(server);
-    THREAD_CREATE(server_thread, serverloop);
-
-    client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-}
-
-static void teardown(void) {
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-    running = false;
-    THREAD_JOIN(server_thread);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-START_TEST(Misc_State) {
-    UA_ClientState state = UA_Client_getState(client);
-    ck_assert_uint_eq(state, UA_CLIENTSTATE_SESSION);
-}
-END_TEST
-
-START_TEST(Misc_NamespaceGetIndex) {
-    UA_UInt16 idx;
-    UA_String ns = UA_STRING(CUSTOM_NS);
-    UA_StatusCode retval = UA_Client_NamespaceGetIndex(client, &ns, &idx);
-
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(idx, 2);
-
-    // namespace uri is case sensitive
-    ns = UA_STRING(CUSTOM_NS_UPPER);
-    retval = UA_Client_NamespaceGetIndex(client, &ns, &idx);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADNOTFOUND);
-} END_TEST
-
-UA_NodeId newReferenceTypeId;
-UA_NodeId newObjectTypeId;
-UA_NodeId newDataTypeId;
-UA_NodeId newVariableTypeId;
-UA_NodeId newObjectId;
-UA_NodeId newVariableId;
-UA_NodeId newMethodId;
-UA_NodeId newViewId;
-
-#ifdef UA_ENABLE_NODEMANAGEMENT
-
-START_TEST(Node_Add) {
-    UA_StatusCode retval;
-
-    // Create custom reference type 'HasSubSubType' as child of HasSubtype
-    {
-        UA_ReferenceTypeAttributes attr = UA_ReferenceTypeAttributes_default;
-        attr.description = UA_LOCALIZEDTEXT("en-US", "Some HasSubSubType");
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", "HasSubSubType");
-        retval = UA_Client_addReferenceTypeNode(client, UA_NODEID_NULL,
-                                                UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                                UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                                UA_QUALIFIEDNAME(1, "HasSubSubType"), attr,
-                                                &newReferenceTypeId);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-
-    // Create TestObjectType SubType within BaseObjectType
-    {
-        UA_ObjectTypeAttributes attr = UA_ObjectTypeAttributes_default;
-        attr.description = UA_LOCALIZEDTEXT("en-US", "Some TestObjectType");
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", "TestObjectType");
-        retval = UA_Client_addObjectTypeNode(client, UA_NODEID_NULL,
-                                             UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                             UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                             UA_QUALIFIEDNAME(1, "TestObjectType"), attr, &newObjectTypeId);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-
-    /* Minimal nodeset does not contain UA_NS0ID_INTEGER node */
-    #ifdef UA_GENERATED_NAMESPACE_ZERO
-    // Create Int128 DataType within Integer Datatype
-    {
-        UA_DataTypeAttributes attr = UA_DataTypeAttributes_default;
-        attr.description = UA_LOCALIZEDTEXT("en-US", "Some Int128");
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", "Int128");
-        retval = UA_Client_addDataTypeNode(client, UA_NODEID_NULL,
-                                           UA_NODEID_NUMERIC(0, UA_NS0ID_INTEGER),
-                                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                           UA_QUALIFIEDNAME(1, "Int128"), attr, &newDataTypeId);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-    #endif
-
-    // Create PointType VariableType within BaseDataVariableType
-    {
-        UA_VariableTypeAttributes attr = UA_VariableTypeAttributes_default;
-        attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-        attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
-        UA_UInt32 arrayDims[1] = {2};
-        attr.arrayDimensions = arrayDims;
-        attr.arrayDimensionsSize = 1;
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", "PointType");
-
-        /* a matching default value is required */
-        UA_Double zero[2] = {0.0, 0.0};
-        UA_Variant_setArray(&attr.value, zero, 2, &UA_TYPES[UA_TYPES_INT32]);
-        retval = UA_Client_addVariableTypeNode(client, UA_NODEID_NULL,
-                                               UA_NODEID_NUMERIC(0, UA_NS0ID_BASEVARIABLETYPE),
-                                               UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                               UA_QUALIFIEDNAME(1, "PointType"), attr, &newVariableTypeId);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-
-    // create Coordinates Object within ObjectsFolder
-    {
-        UA_ObjectAttributes attr = UA_ObjectAttributes_default;
-        attr.description = UA_LOCALIZEDTEXT("en-US", "Some Coordinates");
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", "Coordinates");
-        retval = UA_Client_addObjectNode(client, UA_NODEID_NULL,
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                         UA_QUALIFIEDNAME(1, "Coordinates"),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), attr, &newObjectId);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-
-    // create Variable 'Top' within Coordinates Object
-    {
-        UA_VariableAttributes attr = UA_VariableAttributes_default;
-        attr.description = UA_LOCALIZEDTEXT("en-US", "Top Coordinate");
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", "Top");
-        UA_Int32 values[2] = {10, 20};
-        UA_Variant_setArray(&attr.value, values, 2, &UA_TYPES[UA_TYPES_INT32]);
-        attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-        attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
-        UA_UInt32 arrayDims[1] = {2};
-        attr.arrayDimensions = arrayDims;
-        attr.arrayDimensionsSize = 1;
-        retval = UA_Client_addVariableNode(client, UA_NODEID_NULL,
-                                           newObjectId,
-                                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                                           UA_QUALIFIEDNAME(1, "Top"),
-                                           newVariableTypeId, attr, &newVariableId);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-
-    // create Method 'Dummy' within Coordinates Object.
-    {
-        UA_MethodAttributes attr = UA_MethodAttributes_default;
-        attr.description = UA_LOCALIZEDTEXT("en-US", "Dummy method");
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", "Dummy");
-        attr.executable = true;
-        attr.userExecutable = true;
-        retval = UA_Client_addMethodNode(client, UA_NODEID_NULL,
-                                         newObjectId,
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_HASORDEREDCOMPONENT),
-                                         UA_QUALIFIEDNAME(1, "Dummy"),
-                                         attr, &newMethodId);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-
-    // create View 'AllTopCoordinates' whithin Views Folder
-    {
-        UA_ViewAttributes attr = UA_ViewAttributes_default;
-        attr.description = UA_LOCALIZEDTEXT("en-US", "List of all top coordinates");
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", "AllTopCoordinates");
-        retval = UA_Client_addViewNode(client, UA_NODEID_NULL,
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_VIEWSFOLDER),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                       UA_QUALIFIEDNAME(1, "AllTopCoordinates"),
-                                       attr, &newViewId);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-
-    UA_ExpandedNodeId target = UA_EXPANDEDNODEID_NULL;
-    target.nodeId = newObjectId;
-
-    // Add 'Top' to view
-    retval = UA_Client_addReference(client, newViewId, UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                    UA_TRUE, UA_STRING_NULL, target, UA_NODECLASS_VARIABLE);
-
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    // Delete 'Top' from view
-    retval = UA_Client_deleteReference(client, newViewId,
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                       true, target, true);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    // Delete 'AllTopCoordinates' view
-    retval = UA_Client_deleteNode(client, newViewId, UA_TRUE);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-unsigned int iteratedNodeCount = 0;
-UA_NodeId iteratedNodes[4];
-
-static UA_StatusCode
-nodeIter(UA_NodeId childId, UA_Boolean isInverse, UA_NodeId referenceTypeId, void *handle) {
-    if (isInverse || (referenceTypeId.identifierType == UA_NODEIDTYPE_NUMERIC &&
-                      referenceTypeId.identifier.numeric == UA_NS0ID_HASTYPEDEFINITION))
-        return UA_STATUSCODE_GOOD;
-
-    if (iteratedNodeCount >= 4)
-        return UA_STATUSCODE_BADINDEXRANGEINVALID;
-
-    UA_NodeId_copy(&childId, &iteratedNodes[iteratedNodeCount]);
-    iteratedNodeCount++;
-    return UA_STATUSCODE_GOOD;
-}
-
-#endif
-
-START_TEST(Node_Browse) {
-    // Browse node in server folder
-    UA_BrowseRequest bReq;
-    UA_BrowseRequest_init(&bReq);
-    // normally is set to 0, to get all the nodes, but we want to test browse next
-    bReq.requestedMaxReferencesPerNode = 1;
-    bReq.nodesToBrowse = UA_BrowseDescription_new();
-    bReq.nodesToBrowseSize = 1;
-    bReq.nodesToBrowse[0].nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
-    bReq.nodesToBrowse[0].resultMask = UA_BROWSERESULTMASK_ALL;
-
-    UA_BrowseResponse bResp = UA_Client_Service_browse(client, bReq);
-    ck_assert_uint_eq(bResp.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(bResp.resultsSize, 1);
-    ck_assert_uint_eq(bResp.results[0].statusCode, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(bResp.results[0].referencesSize, 1);
-
-    /* References might have a different order in generated nodesets */
-    /* UA_ReferenceDescription *ref = &(bResp.results[0].references[0]); */
-    /* ck_assert_uint_eq(ref->nodeId.nodeId.identifier.numeric, UA_NS0ID_SERVERTYPE); */
-
-    // browse next
-    UA_BrowseNextRequest bNextReq;
-    UA_BrowseNextRequest_init(&bNextReq);
-    // normally is set to 0, to get all the nodes, but we want to test browse next
-    bNextReq.releaseContinuationPoints = UA_FALSE;
-    bNextReq.continuationPoints = &bResp.results[0].continuationPoint;
-    bNextReq.continuationPointsSize = 1;
-
-    UA_BrowseNextResponse bNextResp = UA_Client_Service_browseNext(client, bNextReq);
-
-    ck_assert_uint_eq(bNextResp.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(bNextResp.resultsSize, 1);
-    ck_assert_uint_eq(bNextResp.results[0].statusCode, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(bNextResp.results[0].referencesSize, 1);
-
-    /* ref = &(bNextResp.results[0].references[0]); */
-    /* ck_assert_uint_eq(ref->nodeId.nodeId.identifier.numeric, UA_NS0ID_SERVER_NAMESPACEARRAY); */
-
-    UA_BrowseNextResponse_deleteMembers(&bNextResp);
-
-    bNextResp = UA_Client_Service_browseNext(client, bNextReq);
-    ck_assert_uint_eq(bNextResp.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(bNextResp.resultsSize, 1);
-    ck_assert_uint_eq(bNextResp.results[0].statusCode, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(bNextResp.results[0].referencesSize, 1);
-
-    /* ref = &(bNextResp.results[0].references[0]); */
-    /* ck_assert_uint_eq(ref->nodeId.nodeId.identifier.numeric, UA_NS0ID_SERVER_SERVERARRAY); */
-
-    UA_BrowseNextResponse_deleteMembers(&bNextResp);
-
-    // release continuation point. Result is then empty
-    bNextReq.releaseContinuationPoints = UA_TRUE;
-    bNextResp = UA_Client_Service_browseNext(client, bNextReq);
-    UA_BrowseNextResponse_deleteMembers(&bNextResp);
-    ck_assert_uint_eq(bNextResp.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(bNextResp.resultsSize, 0);
-
-    UA_BrowseRequest_deleteMembers(&bReq);
-    UA_BrowseResponse_deleteMembers(&bResp);
-    // already deleted by browse request
-    bNextReq.continuationPoints = NULL;
-    bNextReq.continuationPointsSize = 0;
-    UA_BrowseNextRequest_deleteMembers(&bNextReq);
-}
-END_TEST
-
-START_TEST(Node_Register) {
-    UA_RegisterNodesRequest req;
-    UA_RegisterNodesRequest_init(&req);
-
-    req.nodesToRegister = UA_NodeId_new();
-    req.nodesToRegister[0] = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME);
-    req.nodesToRegisterSize = 1;
-
-    UA_RegisterNodesResponse res = UA_Client_Service_registerNodes(client, req);
-
-    ck_assert_uint_eq(res.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(res.registeredNodeIdsSize, 1);
-
-    UA_UnregisterNodesRequest reqUn;
-    UA_UnregisterNodesRequest_init(&reqUn);
-
-    reqUn.nodesToUnregister = UA_NodeId_new();
-    reqUn.nodesToUnregister[0] = res.registeredNodeIds[0];
-    reqUn.nodesToUnregisterSize = 1;
-
-    UA_UnregisterNodesResponse resUn = UA_Client_Service_unregisterNodes(client, reqUn);
-    ck_assert_uint_eq(resUn.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-
-    UA_UnregisterNodesRequest_deleteMembers(&reqUn);
-    UA_UnregisterNodesResponse_deleteMembers(&resUn);
-    UA_RegisterNodesRequest_deleteMembers(&req);
-    UA_RegisterNodesResponse_deleteMembers(&res);
-}
-END_TEST
-
-
-
-// NodeIds for ReadWrite testing
-UA_NodeId nodeReadWriteUnitTest;
-UA_NodeId nodeReadWriteArray;
-UA_NodeId nodeReadWriteInt;
-UA_NodeId nodeReadWriteGeneric;
-UA_NodeId nodeReadWriteTestObjectType;
-UA_NodeId nodeReadWriteTestHasSubSubType;
-UA_NodeId nodeReadWriteView;
-UA_NodeId nodeReadWriteMethod;
-
-#ifdef UA_ENABLE_NODEMANAGEMENT
-
-START_TEST(Node_AddReadWriteNodes) {
-    UA_StatusCode retval;
-    // Create a folder with two variables for testing
-
-    // create Coordinates Object within ObjectsFolder
-    {
-        UA_ObjectAttributes attr = UA_ObjectAttributes_default;
-        attr.description = UA_LOCALIZEDTEXT("en-US", "UnitTest");
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", "UnitTest");
-        retval = UA_Client_addObjectNode(client, UA_NODEID_NULL,
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                         UA_QUALIFIEDNAME(1, "UnitTest"),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE),
-                                         attr, &nodeReadWriteUnitTest);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-
-    // create Variable 'Top' within UnitTest Object
-    {
-        UA_VariableAttributes attr = UA_VariableAttributes_default;
-        attr.description = UA_LOCALIZEDTEXT("en-US", "Array");
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", "Array");
-        attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-        attr.writeMask = UA_WRITEMASK_ARRRAYDIMENSIONS;
-
-        UA_Int32 values[2];
-        values[0] = 10;
-        values[1] = 20;
-
-        UA_Variant_setArray(&attr.value, values, 2, &UA_TYPES[UA_TYPES_INT32]);
-        attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-        attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
-        UA_UInt32 arrayDims[1] = {2};
-        attr.arrayDimensions = arrayDims;
-        attr.arrayDimensionsSize = 1;
-
-        retval = UA_Client_addVariableNode(client, UA_NODEID_NULL,
-                                           nodeReadWriteUnitTest,
-                                           UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                           UA_QUALIFIEDNAME(1, "Array"),
-                                           UA_NODEID_NULL, attr, &nodeReadWriteArray);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-
-    // create Variable 'Int' within UnitTest Object
-    {
-        UA_VariableAttributes attr = UA_VariableAttributes_default;
-        attr.description = UA_LOCALIZEDTEXT("en-US", "Int");
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", "Int");
-        attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-        attr.writeMask = 0xFFFFFFFF;
-
-        UA_Int32 int_value = 5678;
-        UA_Variant_setScalar(&attr.value, &int_value, &UA_TYPES[UA_TYPES_INT32]);
-        attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-
-        retval = UA_Client_addVariableNode(client, UA_NODEID_NULL,
-                                           nodeReadWriteUnitTest,
-                                           UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                           UA_QUALIFIEDNAME(1, "Int"),
-                                           UA_NODEID_NULL, attr, &nodeReadWriteInt);
-
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-
-    // create Variable 'Generic' within UnitTest Object
-    {
-        UA_VariableAttributes attr = UA_VariableAttributes_default;
-        attr.description = UA_LOCALIZEDTEXT("en-US", "Generic");
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", "Generic");
-        attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-        attr.writeMask = 0xFFFFFFFF;
-
-        // generic datatype
-        attr.dataType = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATATYPE);
-
-        retval = UA_Client_addVariableNode(client, UA_NODEID_NULL,
-                                           nodeReadWriteUnitTest,
-                                           UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                           UA_QUALIFIEDNAME(1, "Generic"),
-                                           UA_NODEID_NULL, attr, &nodeReadWriteGeneric);
-
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-
-    // create Method 'Dummy' within Coordinates Object.
-    {
-        UA_MethodAttributes attr = UA_MethodAttributes_default;
-        attr.description = UA_LOCALIZEDTEXT("en-US", "Dummy method");
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", "Dummy");
-        attr.executable = true;
-        attr.userExecutable = true;
-        attr.writeMask = 0xFFFFFFFF;
-        retval = UA_Client_addMethodNode(client, UA_NODEID_NULL,
-                                         nodeReadWriteUnitTest,
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_HASORDEREDCOMPONENT),
-                                         UA_QUALIFIEDNAME(1, "Dummy"),
-                                         attr, &nodeReadWriteMethod);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-
-    // Create TestObjectType SubType within BaseObjectType
-    {
-        UA_ObjectTypeAttributes attr = UA_ObjectTypeAttributes_default;
-        attr.description = UA_LOCALIZEDTEXT("en-US", "Some TestObjectType");
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", "TestObjectType");
-        attr.writeMask = 0xFFFFFFFF;
-        retval = UA_Client_addObjectTypeNode(client, UA_NODEID_NULL,
-                                             UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                             UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                             UA_QUALIFIEDNAME(1, "TestObjectType"), attr, &nodeReadWriteTestObjectType);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-
-    // Create custom reference type 'HasSubSubType' as child of HasSubtype
-    {
-        UA_ReferenceTypeAttributes attr = UA_ReferenceTypeAttributes_default;
-        attr.description = UA_LOCALIZEDTEXT("en-US", "Some HasSubSubType");
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", "HasSubSubType");
-        attr.inverseName = UA_LOCALIZEDTEXT("en-US", "HasParentParentType");
-        attr.writeMask = 0xFFFFFFFF;
-        retval = UA_Client_addReferenceTypeNode(client, UA_NODEID_NULL,
-                                                UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                                UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                                UA_QUALIFIEDNAME(1, "HasSubSubType"), attr,
-                                                &nodeReadWriteTestHasSubSubType);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-
-
-    // create View 'AllTopCoordinates' whithin Views Folder
-    {
-        UA_ViewAttributes attr = UA_ViewAttributes_default;
-        attr.description = UA_LOCALIZEDTEXT("en-US", "List of all top coordinates");
-        attr.displayName = UA_LOCALIZEDTEXT("en-US", "AllTopCoordinates");
-        attr.writeMask = 0xFFFFFFFF;
-        retval = UA_Client_addViewNode(client, UA_NODEID_NULL,
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_VIEWSFOLDER),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                       UA_QUALIFIEDNAME(1, "AllTopCoordinates"),
-                                       attr, &nodeReadWriteView);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-        
-    // iterate over children
-    retval = UA_Client_forEachChildNodeCall(client, nodeReadWriteUnitTest, nodeIter, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    ck_assert(UA_NodeId_equal(&nodeReadWriteArray, &iteratedNodes[0]));
-    ck_assert(UA_NodeId_equal(&nodeReadWriteInt, &iteratedNodes[1]));
-
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_Id) {
-    UA_NodeId newNodeId;
-
-    // read to check if node id was changed
-    UA_StatusCode retval = UA_Client_readNodeIdAttribute(client, nodeReadWriteInt, &newNodeId);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    ck_assert(UA_NodeId_equal(&newNodeId, &nodeReadWriteInt));
-
-    newNodeId.identifier.numeric = 900;
-    retval = UA_Client_writeNodeIdAttribute(client, nodeReadWriteInt, &newNodeId);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADWRITENOTSUPPORTED);
-
-}
-END_TEST
-
-static void checkNodeClass(UA_Client *clientNc, const UA_NodeId nodeId, const UA_NodeClass expectedClass) {
-    UA_NodeClass nodeClass = UA_NODECLASS_UNSPECIFIED;
-    UA_StatusCode retval = UA_Client_readNodeClassAttribute(clientNc, nodeId, &nodeClass);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(nodeClass, expectedClass);
-}
-
-START_TEST(Node_ReadWrite_Class) {
-    checkNodeClass(client, nodeReadWriteInt, UA_NODECLASS_VARIABLE);
-    checkNodeClass(client, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER), UA_NODECLASS_OBJECT);
-
-    /* Minimal nodeset does not contain UA_NS0ID_SERVER_GETMONITOREDITEMS node */
-#if defined(UA_ENABLE_METHODCALLS) && defined(UA_GENERATED_NAMESPACE_ZERO)
-    checkNodeClass(client, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_GETMONITOREDITEMS), UA_NODECLASS_METHOD);
-#endif
-
-    UA_NodeClass newClass = UA_NODECLASS_METHOD;
-    UA_StatusCode retval = UA_Client_writeNodeClassAttribute(client, nodeReadWriteInt, &newClass);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADWRITENOTSUPPORTED);
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_BrowseName) {
-
-    UA_QualifiedName browseName;
-    UA_StatusCode retval = UA_Client_readBrowseNameAttribute(client, nodeReadWriteInt, &browseName);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_QualifiedName orig = UA_QUALIFIEDNAME(1, "Int");
-    ck_assert_int_eq(browseName.namespaceIndex, orig.namespaceIndex);
-    ck_assert(UA_String_equal(&browseName.name, &orig.name));
-
-    UA_QualifiedName_deleteMembers(&browseName);
-
-    browseName = UA_QUALIFIEDNAME(1,"Int-Changed");
-
-    retval = UA_Client_writeBrowseNameAttribute(client, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER), &browseName);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADUSERACCESSDENIED);
-
-    retval = UA_Client_writeBrowseNameAttribute(client, nodeReadWriteInt, &browseName);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_QualifiedName browseNameChangedRead;
-    retval = UA_Client_readBrowseNameAttribute(client, nodeReadWriteInt, &browseNameChangedRead);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    ck_assert_int_eq(browseName.namespaceIndex, browseNameChangedRead.namespaceIndex);
-    ck_assert(UA_String_equal(&browseName.name, &browseNameChangedRead.name));
-
-    UA_QualifiedName_deleteMembers(&browseNameChangedRead);
-
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_DisplayName) {
-
-    UA_LocalizedText displayName;
-    UA_StatusCode retval = UA_Client_readDisplayNameAttribute(client, nodeReadWriteInt, &displayName);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_LocalizedText orig = UA_LOCALIZEDTEXT("en-US", "Int");
-    ck_assert(UA_String_equal(&displayName.locale, &orig.locale));
-    ck_assert(UA_String_equal(&displayName.text, &orig.text));
-    UA_LocalizedText_deleteMembers(&displayName);
-
-    UA_LocalizedText newLocale = UA_LOCALIZEDTEXT("en-US", "Int-Changed");
-
-    retval = UA_Client_writeDisplayNameAttribute(client, nodeReadWriteInt, &newLocale);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_LocalizedText displayNameChangedRead;
-    retval = UA_Client_readDisplayNameAttribute(client, nodeReadWriteInt, &displayNameChangedRead);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    ck_assert(UA_String_equal(&newLocale.locale, &displayNameChangedRead.locale));
-    ck_assert(UA_String_equal(&newLocale.text, &displayNameChangedRead.text));
-    UA_LocalizedText_deleteMembers(&displayNameChangedRead);
-
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_Description) {
-
-    UA_LocalizedText description;
-    UA_StatusCode retval = UA_Client_readDescriptionAttribute(client, nodeReadWriteInt, &description);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_LocalizedText orig = UA_LOCALIZEDTEXT("en-US", "Int");
-    ck_assert(UA_String_equal(&description.locale, &orig.locale));
-    ck_assert(UA_String_equal(&description.text, &orig.text));
-    UA_LocalizedText_deleteMembers(&description);
-
-    UA_LocalizedText newLocale = UA_LOCALIZEDTEXT("en-US", "Int-Changed");
-
-    retval = UA_Client_writeDescriptionAttribute(client, nodeReadWriteInt, &newLocale);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_LocalizedText descriptionChangedRead;
-    retval = UA_Client_readDescriptionAttribute(client, nodeReadWriteInt, &descriptionChangedRead);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    ck_assert(UA_String_equal(&newLocale.locale, &descriptionChangedRead.locale));
-    ck_assert(UA_String_equal(&newLocale.text, &descriptionChangedRead.text));
-    UA_LocalizedText_deleteMembers(&descriptionChangedRead);
-
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_WriteMask) {
-
-    UA_UInt32 writeMask;
-    UA_StatusCode retval = UA_Client_readWriteMaskAttribute(client, nodeReadWriteInt, &writeMask);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    ck_assert_int_eq(writeMask, 0xFFFFFFFF);
-
-    // Disable a random write mask bit
-    UA_UInt32 newMask = 0xFFFFFFFF & ~UA_WRITEMASK_BROWSENAME;
-
-    retval = UA_Client_writeWriteMaskAttribute(client, nodeReadWriteInt, &newMask);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_UInt32 writeMaskChangedRead;
-    retval = UA_Client_readWriteMaskAttribute(client, nodeReadWriteInt, &writeMaskChangedRead);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(writeMaskChangedRead, newMask);
-
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_UserWriteMask) {
-
-    UA_UInt32 userWriteMask;
-    UA_StatusCode retval = UA_Client_readUserWriteMaskAttribute(client, nodeReadWriteInt, &userWriteMask);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(userWriteMask, 0xFFFFFFFF & ~UA_WRITEMASK_BROWSENAME);
-
-    // Disable a random write mask bit
-    UA_UInt32 newMask = 0xFFFFFFFF & ~UA_WRITEMASK_DISPLAYNAME;
-
-    retval = UA_Client_writeUserWriteMaskAttribute(client, nodeReadWriteInt, &newMask);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADWRITENOTSUPPORTED);
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_IsAbstract) {
-
-    UA_Boolean isAbstract;
-    UA_StatusCode retval = UA_Client_readIsAbstractAttribute(client, nodeReadWriteInt, &isAbstract);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADATTRIBUTEIDINVALID);
-    retval = UA_Client_readIsAbstractAttribute(client, nodeReadWriteTestObjectType, &isAbstract);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(isAbstract, UA_FALSE);
-
-    UA_Boolean newIsAbstract = UA_TRUE;
-
-    retval = UA_Client_writeIsAbstractAttribute(client, nodeReadWriteTestObjectType, &newIsAbstract);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Client_readIsAbstractAttribute(client, nodeReadWriteTestObjectType, &isAbstract);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(isAbstract, newIsAbstract);
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_Symmetric) {
-
-    UA_Boolean symmetric;
-    UA_StatusCode retval = UA_Client_readSymmetricAttribute(client, nodeReadWriteInt, &symmetric);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADATTRIBUTEIDINVALID);
-    retval = UA_Client_readSymmetricAttribute(client, nodeReadWriteTestHasSubSubType, &symmetric);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(symmetric, UA_FALSE);
-
-    UA_Boolean newSymmetric = UA_TRUE;
-
-    retval = UA_Client_writeSymmetricAttribute(client, nodeReadWriteTestHasSubSubType, &newSymmetric);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Client_readSymmetricAttribute(client, nodeReadWriteTestHasSubSubType, &symmetric);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(symmetric, newSymmetric);
-}
-END_TEST
-
-
-START_TEST(Node_ReadWrite_InverseName) {
-
-    UA_LocalizedText inverseName;
-    UA_StatusCode retval = UA_Client_readInverseNameAttribute(client, nodeReadWriteTestHasSubSubType, &inverseName);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_LocalizedText orig = UA_LOCALIZEDTEXT("en-US", "HasParentParentType");
-    ck_assert(UA_String_equal(&inverseName.locale, &orig.locale));
-    ck_assert(UA_String_equal(&inverseName.text, &orig.text));
-    UA_LocalizedText_deleteMembers(&inverseName);
-
-    UA_LocalizedText newLocale = UA_LOCALIZEDTEXT("en-US", "HasParentParentType-Changed");
-
-    retval = UA_Client_writeInverseNameAttribute(client, nodeReadWriteTestHasSubSubType, &newLocale);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_LocalizedText inverseNameChangedRead;
-    retval = UA_Client_readInverseNameAttribute(client, nodeReadWriteTestHasSubSubType, &inverseNameChangedRead);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    ck_assert(UA_String_equal(&newLocale.locale, &inverseNameChangedRead.locale));
-    ck_assert(UA_String_equal(&newLocale.text, &inverseNameChangedRead.text));
-    UA_LocalizedText_deleteMembers(&inverseNameChangedRead);
-
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_ContainsNoLoops) {
-
-    UA_Boolean containsNoLoops;
-    UA_StatusCode retval = UA_Client_readContainsNoLoopsAttribute(client, nodeReadWriteTestHasSubSubType, &containsNoLoops);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADATTRIBUTEIDINVALID);
-    retval = UA_Client_readContainsNoLoopsAttribute(client, nodeReadWriteView, &containsNoLoops);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(containsNoLoops, UA_FALSE);
-
-    UA_Boolean newContainsNoLoops = UA_TRUE;
-
-    retval = UA_Client_writeContainsNoLoopsAttribute(client, nodeReadWriteView, &newContainsNoLoops);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Client_readContainsNoLoopsAttribute(client, nodeReadWriteView, &containsNoLoops);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(containsNoLoops, newContainsNoLoops);
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_EventNotifier) {
-
-    UA_Byte eventNotifier = 0;
-    UA_StatusCode retval = UA_Client_readEventNotifierAttribute(client, nodeReadWriteTestHasSubSubType, &eventNotifier);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADATTRIBUTEIDINVALID);
-    retval = UA_Client_readEventNotifierAttribute(client, nodeReadWriteView, &eventNotifier);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(eventNotifier, 0);
-
-    UA_Byte newEventNotifier = 1;
-
-    retval = UA_Client_writeEventNotifierAttribute(client, nodeReadWriteView, &newEventNotifier);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Client_readEventNotifierAttribute(client, nodeReadWriteView, &eventNotifier);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(eventNotifier, newEventNotifier);
-}
-END_TEST
-
-
-START_TEST(Node_ReadWrite_Value) {
-
-    UA_Int32 value = 0;
-    UA_Variant *val = UA_Variant_new();
-    UA_StatusCode retval = UA_Client_readValueAttribute(client, nodeReadWriteInt, val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    ck_assert(UA_Variant_isScalar(val) && val->type == &UA_TYPES[UA_TYPES_INT32]);
-    value = *(UA_Int32*)val->data;
-    ck_assert_int_eq(value, 5678);
-    UA_Variant_delete(val);
-
-    /* Write attribute */
-    value++;
-    val = UA_Variant_new();
-    UA_Variant_setScalarCopy(val, &value, &UA_TYPES[UA_TYPES_INT32]);
-    retval = UA_Client_writeValueAttribute(client, nodeReadWriteInt, val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Variant_delete(val);
-
-    /* Read again to check value */
-    val = UA_Variant_new();
-    retval = UA_Client_readValueAttribute(client, nodeReadWriteInt, val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    ck_assert(UA_Variant_isScalar(val) && val->type == &UA_TYPES[UA_TYPES_INT32]);
-    value = *(UA_Int32*)val->data;
-    ck_assert_int_eq(value, 5679);
-    UA_Variant_delete(val);
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_DataType) {
-    UA_NodeId dataType;
-
-    // read to check if node id was changed
-    UA_StatusCode retval = UA_Client_readDataTypeAttribute(client, nodeReadWriteInt, &dataType);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    ck_assert(UA_NodeId_equal(&dataType, &UA_TYPES[UA_TYPES_INT32].typeId));
-
-    UA_NodeId newDataType = UA_TYPES[UA_TYPES_VARIANT].typeId;
-    retval = UA_Client_writeDataTypeAttribute(client, nodeReadWriteGeneric, &newDataType);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Client_readDataTypeAttribute(client, nodeReadWriteGeneric, &dataType);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert(UA_NodeId_equal(&dataType, &newDataType));
-
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_ValueRank) {
-
-    UA_Int32 valueRank = UA_VALUERANK_ONE_OR_MORE_DIMENSIONS;
-    UA_StatusCode retval = UA_Client_readValueRankAttribute(client, nodeReadWriteGeneric, &valueRank);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(valueRank, UA_VALUERANK_ANY);
-
-    // set the value to a scalar
-    UA_Double val = 0.0;
-    UA_Variant value;
-    UA_Variant_setScalar(&value, &val, &UA_TYPES[UA_TYPES_DOUBLE]);
-    retval = UA_Client_writeValueAttribute(client, nodeReadWriteGeneric, &value);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    // we want an array
-    UA_Int32 newValueRank = UA_VALUERANK_ONE_DIMENSION;
-
-    // shall fail when the value is not compatible
-    retval = UA_Client_writeValueRankAttribute(client, nodeReadWriteGeneric, &newValueRank);
-    ck_assert(retval != UA_STATUSCODE_GOOD);
-
-    // set the value to an array
-    UA_Double vec[3] = {0.0, 0.0, 0.0};
-    UA_Variant_setArray(&value, vec, 3, &UA_TYPES[UA_TYPES_DOUBLE]);
-    retval = UA_Client_writeValueAttribute(client, nodeReadWriteGeneric, &value);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    // try again
-    retval = UA_Client_writeValueRankAttribute(client, nodeReadWriteGeneric, &newValueRank);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Client_readValueRankAttribute(client, nodeReadWriteGeneric, &valueRank);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(valueRank, newValueRank);
-
-
-    // set the value to no array
-    UA_Variant_init(&value);
-    retval = UA_Client_writeValueAttribute(client, nodeReadWriteGeneric, &value);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-
-START_TEST(Node_ReadWrite_ArrayDimensions) {
-    UA_UInt32 *arrayDimsRead;
-    size_t arrayDimsReadSize;
-    UA_StatusCode retval = UA_Client_readArrayDimensionsAttribute(client, nodeReadWriteGeneric,
-                                                                  &arrayDimsReadSize, &arrayDimsRead);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(arrayDimsReadSize, 0);
-
-    // Set a vector of size 1 as the value
-    UA_Double vec2[2] = {0.0, 0.0};
-    UA_Variant value;
-    UA_Variant_setArray(&value, vec2, 2, &UA_TYPES[UA_TYPES_DOUBLE]);
-    retval = UA_Client_writeValueAttribute(client, nodeReadWriteGeneric, &value);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    // writing the array dimensions shall fail at first
-    // because the current value is not conformant
-    UA_UInt32 arrayDimsNew[] = {1};
-    retval = UA_Client_writeArrayDimensionsAttribute(client, nodeReadWriteGeneric, 1, arrayDimsNew);
-    ck_assert(retval != UA_STATUSCODE_GOOD);
-
-    // Set a vector of size 1 as the value
-    UA_Double vec1[1] = {0.0};
-    UA_Variant_setArray(&value, vec1, 1, &UA_TYPES[UA_TYPES_DOUBLE]);
-    retval = UA_Client_writeValueAttribute(client, nodeReadWriteGeneric, &value);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    // Now we can set matching array-dimensions
-    retval = UA_Client_writeArrayDimensionsAttribute(client, nodeReadWriteGeneric, 1, arrayDimsNew);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Client_readArrayDimensionsAttribute(client, nodeReadWriteGeneric,
-                                                    &arrayDimsReadSize, &arrayDimsRead);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(arrayDimsReadSize, 1);
-    ck_assert_int_eq(arrayDimsRead[0], 1);
-    UA_Array_delete(arrayDimsRead, arrayDimsReadSize, &UA_TYPES[UA_TYPES_UINT32]);
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_AccessLevel) {
-
-    UA_Byte accessLevel;
-    UA_StatusCode retval = UA_Client_readAccessLevelAttribute(client, nodeReadWriteInt, &accessLevel);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    ck_assert_int_eq(accessLevel, UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE);
-
-    UA_Byte newMask = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE | UA_ACCESSLEVELMASK_HISTORYREAD;
-
-    retval = UA_Client_writeAccessLevelAttribute(client, nodeReadWriteInt, &newMask);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Byte accessLevelChangedRead;
-    retval = UA_Client_readAccessLevelAttribute(client, nodeReadWriteInt, &accessLevelChangedRead);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(accessLevelChangedRead, newMask);
-
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_UserAccessLevel) {
-
-    UA_Byte userAccessLevel;
-    UA_StatusCode retval = UA_Client_readUserAccessLevelAttribute(client, nodeReadWriteInt, &userAccessLevel);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    ck_assert_int_eq(userAccessLevel, UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE | UA_ACCESSLEVELMASK_HISTORYREAD);
-
-    UA_Byte newMask = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE | UA_ACCESSLEVELMASK_HISTORYREAD;
-
-    retval = UA_Client_writeUserAccessLevelAttribute(client, nodeReadWriteInt, &newMask);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADWRITENOTSUPPORTED);
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_MinimumSamplingInterval) {
-
-    UA_Double minimumSamplingInterval = 0;
-    UA_StatusCode retval = UA_Client_readMinimumSamplingIntervalAttribute(client, nodeReadWriteGeneric, &minimumSamplingInterval);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert(minimumSamplingInterval == 0);
-
-    // we want an array
-    UA_Double newMinimumSamplingInterval = 1;
-
-    retval = UA_Client_writeMinimumSamplingIntervalAttribute(client, nodeReadWriteGeneric, &newMinimumSamplingInterval);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Client_readMinimumSamplingIntervalAttribute(client, nodeReadWriteGeneric, &minimumSamplingInterval);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert(minimumSamplingInterval == newMinimumSamplingInterval);
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_Historizing) {
-
-    UA_Boolean historizing;
-    UA_StatusCode retval = UA_Client_readHistorizingAttribute(client, nodeReadWriteInt, &historizing);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(historizing, UA_FALSE);
-
-    UA_Boolean newHistorizing = UA_TRUE;
-
-    retval = UA_Client_writeHistorizingAttribute(client, nodeReadWriteInt, &newHistorizing);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Client_readHistorizingAttribute(client, nodeReadWriteInt, &historizing);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(historizing, newHistorizing);
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_Executable) {
-
-    UA_Boolean executable;
-    UA_StatusCode retval = UA_Client_readExecutableAttribute(client, nodeReadWriteMethod, &executable);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(executable, UA_TRUE);
-
-    UA_Boolean newExecutable = UA_FALSE;
-
-    retval = UA_Client_writeExecutableAttribute(client, nodeReadWriteMethod, &newExecutable);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Client_readExecutableAttribute(client, nodeReadWriteMethod, &executable);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(executable, newExecutable);
-}
-END_TEST
-
-START_TEST(Node_ReadWrite_UserExecutable) {
-
-    UA_Boolean userExecutable;
-    UA_StatusCode retval = UA_Client_readUserExecutableAttribute(client, nodeReadWriteMethod, &userExecutable);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(userExecutable, UA_FALSE);
-
-    UA_Boolean newUserExecutable = UA_TRUE;
-
-    retval = UA_Client_writeUserExecutableAttribute(client, nodeReadWriteMethod, &newUserExecutable);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADWRITENOTSUPPORTED);
-
-}
-END_TEST
-
-#endif
-
-static Suite *testSuite_Client(void) {
-    Suite *s = suite_create("Client Highlevel");
-    TCase *tc_misc = tcase_create("Client Highlevel Misc");
-    tcase_add_checked_fixture(tc_misc, setup, teardown);
-    tcase_add_test(tc_misc, Misc_State);
-    tcase_add_test(tc_misc, Misc_NamespaceGetIndex);
-    suite_add_tcase(s, tc_misc);
-
-    TCase *tc_nodes = tcase_create("Client Highlevel Node Management");
-    tcase_add_checked_fixture(tc_nodes, setup, teardown);
-#ifdef UA_ENABLE_NODEMANAGEMENT
-    tcase_add_test(tc_nodes, Node_Add);
-#endif
-    tcase_add_test(tc_nodes, Node_Browse);
-    tcase_add_test(tc_nodes, Node_Register);
-    suite_add_tcase(s, tc_nodes);
-
-#ifdef UA_ENABLE_NODEMANAGEMENT
-    TCase *tc_readwrite = tcase_create("Client Highlevel Read/Write");
-    tcase_add_unchecked_fixture(tc_readwrite, setup, teardown);
-    // first add some nodes where we test on
-    tcase_add_test(tc_readwrite, Node_AddReadWriteNodes);
-    // Now run all the read write tests
-    tcase_add_test(tc_readwrite, Node_ReadWrite_Id);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_Class);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_BrowseName);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_DisplayName);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_Description);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_WriteMask);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_UserWriteMask);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_IsAbstract);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_Symmetric);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_InverseName);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_ContainsNoLoops);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_EventNotifier);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_Value);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_DataType);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_ValueRank);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_ArrayDimensions);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_AccessLevel);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_UserAccessLevel);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_MinimumSamplingInterval);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_Historizing);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_Executable);
-    tcase_add_test(tc_readwrite, Node_ReadWrite_UserExecutable);
-    suite_add_tcase(s, tc_readwrite);
-#endif
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/client/check_client_historical_data.c b/ext/open62541/tests/client/check_client_historical_data.c
deleted file mode 100644
index b3ba714..0000000
--- a/ext/open62541/tests/client/check_client_historical_data.c
+++ /dev/null
@@ -1,672 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
- */
-
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include <open62541/plugin/historydata/history_data_backend.h>
-#include <open62541/plugin/historydata/history_data_backend_memory.h>
-#include <open62541/plugin/historydata/history_data_gathering_default.h>
-#include <open62541/plugin/historydata/history_database_default.h>
-#include <open62541/plugin/historydatabase.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include "client/ua_client_internal.h"
-
-#include <check.h>
-
-#include "testing_clock.h"
-#include "testing_networklayers.h"
-#include "thread_wrapper.h"
-#ifdef UA_ENABLE_HISTORIZING
-#include "historical_read_test_data.h"
-#endif
-#include <stddef.h>
-
-static UA_Server *server;
-#ifdef UA_ENABLE_HISTORIZING
-static UA_HistoryDataGathering *gathering;
-#endif
-static UA_Boolean running;
-static THREAD_HANDLE server_thread;
-
-static UA_Client *client;
-static UA_NodeId parentNodeId;
-static UA_NodeId parentReferenceNodeId;
-static UA_NodeId outNodeId;
-#ifdef UA_ENABLE_HISTORIZING
-static UA_HistoryDataBackend serverBackend;
-
-// to receive data after we inserted data, we need in datavalue more space
-struct ReceiveTupel {
-    UA_DateTime timestamp;
-    UA_Int64 value;
-};
-
-static const size_t receivedDataSize = (sizeof(testData) / sizeof(testData[0])) + 10;
-static struct ReceiveTupel receivedTestData[(sizeof(testData) / sizeof(testData[0])) + 10];
-static size_t receivedTestDataPos;
-#endif
-
-THREAD_CALLBACK(serverloop) {
-    while(running)
-        UA_Server_run_iterate(server, true);
-    return 0;
-}
-
-#ifdef UA_ENABLE_HISTORIZING
-static UA_Boolean
-fillHistoricalDataBackend(UA_HistoryDataBackend backend);
-static void resetReceiveBuffer(void) {
-    receivedTestDataPos = 0;
-    memset(receivedTestData, 0, sizeof(receivedTestData));
-}
-
-static void fillInt64DataValue(UA_DateTime timestamp, UA_Int64 value,
-                               UA_DataValue *dataValue) {
-    UA_DataValue_init(dataValue);
-    dataValue->hasValue = true;
-    UA_Int64 d = value;
-    UA_Variant_setScalarCopy(&dataValue->value, &d, &UA_TYPES[UA_TYPES_INT64]);
-    dataValue->hasSourceTimestamp = true;
-    dataValue->sourceTimestamp = timestamp;
-    dataValue->hasServerTimestamp = true;
-    dataValue->serverTimestamp = timestamp;
-    dataValue->hasStatus = true;
-    dataValue->status = UA_STATUSCODE_GOOD;
-}
-#endif
-
-static void setup(void) {
-    running = true;
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-#ifdef UA_ENABLE_HISTORIZING
-    resetReceiveBuffer();
-    gathering = (UA_HistoryDataGathering*)UA_calloc(1, sizeof(UA_HistoryDataGathering));
-    *gathering = UA_HistoryDataGathering_Default(1);
-    config->historyDatabase = UA_HistoryDatabase_default(*gathering);
-#endif
-
-    UA_StatusCode retval = UA_Server_run_startup(server);
-    ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-    THREAD_CREATE(server_thread, serverloop);
-    /* Define the attribute of the uint32 variable node */
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    UA_UInt32 myUint32 = 40;
-    UA_Variant_setScalar(&attr.value, &myUint32, &UA_TYPES[UA_TYPES_UINT32]);
-    attr.description = UA_LOCALIZEDTEXT("en-US","the answer");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","the answer");
-    attr.dataType = UA_TYPES[UA_TYPES_UINT32].typeId;
-    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE | UA_ACCESSLEVELMASK_HISTORYREAD | UA_ACCESSLEVELMASK_HISTORYWRITE;
-    attr.historizing = true;
-
-    /* Add the variable node to the information model */
-    UA_NodeId uint32NodeId = UA_NODEID_STRING(1, "the.answer");
-    UA_QualifiedName uint32Name = UA_QUALIFIEDNAME(1, "the answer");
-    parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_NodeId_init(&outNodeId);
-    ck_assert_uint_eq(UA_Server_addVariableNode(server,
-                                                uint32NodeId,
-                                                parentNodeId,
-                                                parentReferenceNodeId,
-                                                uint32Name,
-                                                UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                                attr,
-                                                NULL,
-                                                &outNodeId)
-                      , UA_STATUSCODE_GOOD);
-
-#ifdef UA_ENABLE_HISTORIZING
-    UA_HistorizingNodeIdSettings setting;
-    serverBackend = UA_HistoryDataBackend_Memory(1, 100);
-    setting.historizingBackend = serverBackend;
-    setting.maxHistoryDataResponseSize = 100;
-    setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_USER;
-    retval = gathering->registerNodeId(server, gathering->context, &outNodeId, setting);
-    ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert(fillHistoricalDataBackend(setting.historizingBackend));
-#endif
-
-    client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    UA_Client_recv = client->connection.recv;
-    client->connection.recv = UA_Client_recvTesting;
-}
-
-static void
-teardown(void)
-{
-    /* cleanup */
-#ifdef UA_ENABLE_HISTORIZING
-    UA_HistoryDataBackend_Memory_deleteMembers(&serverBackend);
-#endif
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-    UA_NodeId_deleteMembers(&parentNodeId);
-    UA_NodeId_deleteMembers(&parentReferenceNodeId);
-    UA_NodeId_deleteMembers(&outNodeId);
-    running = false;
-    THREAD_JOIN(server_thread);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-#ifdef UA_ENABLE_HISTORIZING
-    UA_free(gathering);
-#endif
-}
-
-#ifdef UA_ENABLE_HISTORIZING
-
-#include <stdio.h>
-#include "ua_session.h"
-
-static UA_Boolean
-fillHistoricalDataBackend(UA_HistoryDataBackend backend)
-{
-    fprintf(stderr, "Adding to historical data backend: ");
-    for (size_t i = 0; i < testDataSize; ++i) {
-        fprintf(stderr, "%lld, ", (long long)testData[i]);
-        UA_DataValue value;
-        fillInt64DataValue(testData[i], testData[i], &value);
-        if (backend.serverSetHistoryData(server, backend.context, NULL, NULL, &outNodeId, UA_FALSE, &value) != UA_STATUSCODE_GOOD) {
-            fprintf(stderr, "\n");
-            UA_DataValue_deleteMembers(&value);
-            return false;
-        }
-        UA_DataValue_deleteMembers(&value);
-    }
-    fprintf(stderr, "\n");
-    return true;
-}
-
-static UA_Boolean checkTestData(UA_Boolean inverse, UA_DateTime *dataA, struct ReceiveTupel *dataB, size_t dataSize) {
-    for (size_t i = 0; i < dataSize; ++i) {
-        if (!inverse && dataA[i] != dataB[i].timestamp)
-            return false;
-        if (inverse && dataA[i] != dataB[dataSize-i-1].timestamp)
-            return false;
-    }
-    return true;
-}
-
-static UA_Boolean checkModifiedData(UA_DateTime *dataA, size_t dataASize, struct ReceiveTupel *dataB, size_t dataBSize) {
-    for (size_t i = 0; i < dataBSize; ++i) {
-        UA_Boolean found = UA_FALSE;
-        for (size_t j = 0; j < dataASize; ++j) {
-            if (dataA[j] == dataB[i].timestamp)
-                found = UA_TRUE;
-        }
-        if (found && dataB[i].timestamp == dataB[i].value) {
-            return false;
-        }
-        if (!found && dataB[i].timestamp != dataB[i].value) {
-            return false;
-        }
-    }
-    return true;
-}
-
-static UA_Boolean
-receiveCallback(UA_Client *clt,
-                const UA_NodeId *nodeId,
-                UA_Boolean moreDataAvailable,
-                const UA_ExtensionObject *_data,
-                void *callbackContext) {
-    UA_HistoryData *data = (UA_HistoryData*)_data->content.decoded.data;
-    fprintf(stderr, "Received %lu at pos %lu. moreDataAvailable %d. Data: ", (unsigned long)data->dataValuesSize, (unsigned long)receivedTestDataPos, moreDataAvailable);
-    if (receivedTestDataPos + data->dataValuesSize > receivedDataSize)
-        return false;
-    for (size_t i = 0; i < data->dataValuesSize; ++i) {
-        receivedTestData[i+receivedTestDataPos].timestamp = data->dataValues[i].sourceTimestamp;
-        receivedTestData[i+receivedTestDataPos].value = *((UA_Int64*)data->dataValues[i].value.data);
-        fprintf(stderr, "%lld/%lld, ",
-                (long long)receivedTestData[i+receivedTestDataPos].timestamp,
-                (long long)receivedTestData[i+receivedTestDataPos].value);
-    }
-    fprintf(stderr, "\n");
-    receivedTestDataPos += data->dataValuesSize;
-    return true;
-}
-
-START_TEST(Client_HistorizingReadRawAll)
-{
-    UA_StatusCode ret = UA_Client_HistoryRead_raw(client,
-                                                  &outNodeId,
-                                                  receiveCallback,
-                                                  TESTDATA_START_TIME,
-                                                  TESTDATA_STOP_TIME,
-                                                  UA_STRING_NULL,
-                                                  false,
-                                                  100,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  (void*)false);
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert_uint_eq(testDataSize, receivedTestDataPos);
-    ck_assert(checkTestData(false, testData, receivedTestData, testDataSize));
-}
-END_TEST
-
-START_TEST(Client_HistorizingReadRawOne)
-{
-    UA_StatusCode ret = UA_Client_HistoryRead_raw(client,
-                                                  &outNodeId,
-                                                  receiveCallback,
-                                                  TESTDATA_START_TIME,
-                                                  TESTDATA_STOP_TIME,
-                                                  UA_STRING_NULL,
-                                                  false,
-                                                  1,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  (void*)false);
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert_uint_eq(testDataSize, receivedTestDataPos);
-    ck_assert(checkTestData(false, testData, receivedTestData, testDataSize));
-}
-END_TEST
-
-START_TEST(Client_HistorizingReadRawTwo)
-{
-    UA_StatusCode ret = UA_Client_HistoryRead_raw(client,
-                                                  &outNodeId,
-                                                  receiveCallback,
-                                                  TESTDATA_START_TIME,
-                                                  TESTDATA_STOP_TIME,
-                                                  UA_STRING_NULL,
-                                                  false,
-                                                  2,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  (void*)false);
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert_uint_eq(testDataSize, receivedTestDataPos);
-    ck_assert(checkTestData(false, testData, receivedTestData, testDataSize));
-}
-END_TEST
-START_TEST(Client_HistorizingReadRawAllInv)
-{
-    UA_StatusCode ret = UA_Client_HistoryRead_raw(client,
-                                                  &outNodeId,
-                                                  receiveCallback,
-                                                  TESTDATA_STOP_TIME,
-                                                  TESTDATA_START_TIME,
-                                                  UA_STRING_NULL,
-                                                  false,
-                                                  100,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  (void*)true);
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert_uint_eq(testDataSize, receivedTestDataPos);
-    ck_assert(checkTestData(true, testData, receivedTestData, testDataSize));
-}
-END_TEST
-
-START_TEST(Client_HistorizingReadRawOneInv)
-{
-    UA_StatusCode ret = UA_Client_HistoryRead_raw(client,
-                                                  &outNodeId,
-                                                  receiveCallback,
-                                                  TESTDATA_STOP_TIME,
-                                                  TESTDATA_START_TIME,
-                                                  UA_STRING_NULL,
-                                                  false,
-                                                  1,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  (void*)true);
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert_uint_eq(testDataSize, receivedTestDataPos);
-    ck_assert(checkTestData(true, testData, receivedTestData, testDataSize));
-}
-END_TEST
-
-START_TEST(Client_HistorizingReadRawTwoInv)
-{
-    UA_StatusCode ret = UA_Client_HistoryRead_raw(client,
-                                                  &outNodeId,
-                                                  receiveCallback,
-                                                  TESTDATA_STOP_TIME,
-                                                  TESTDATA_START_TIME,
-                                                  UA_STRING_NULL,
-                                                  false,
-                                                  2,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  (void*)true);
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert_uint_eq(testDataSize, receivedTestDataPos);
-    ck_assert(checkTestData(true, testData, receivedTestData, testDataSize));
-}
-END_TEST
-
-START_TEST(Client_HistorizingInsertRawSuccess)
-{
-    UA_StatusCode ret = UA_Client_HistoryRead_raw(client,
-                                                  &outNodeId,
-                                                  receiveCallback,
-                                                  TESTDATA_START_TIME,
-                                                  TESTDATA_STOP_TIME,
-                                                  UA_STRING_NULL,
-                                                  false,
-                                                  100,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  (void*)false);
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert(checkTestData(false, testData, receivedTestData, testDataSize));
-    resetReceiveBuffer();
-    // insert values to the database
-    for (size_t i = 0; i < testInsertDataSuccessSize; ++i) {
-        UA_DataValue value;
-        fillInt64DataValue(testInsertDataSuccess[i], 0, &value);
-        ret = UA_Client_HistoryUpdate_insert(client, &outNodeId, &value);
-        ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-        UA_DataValue_deleteMembers(&value);
-    }
-    // check result
-    ret = UA_Client_HistoryRead_raw(client,
-                                    &outNodeId,
-                                    receiveCallback,
-                                    TESTDATA_START_TIME,
-                                    TESTDATA_STOP_TIME,
-                                    UA_STRING_NULL,
-                                    false,
-                                    100,
-                                    UA_TIMESTAMPSTORETURN_BOTH,
-                                    (void*)false);
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert_uint_eq(receivedTestDataPos, testInsertResultDataSize);
-    ck_assert(checkTestData(false, testInsertResultData, receivedTestData, receivedTestDataPos));
-    ck_assert(checkModifiedData(testInsertDataSuccess, testInsertDataSuccessSize, receivedTestData, receivedTestDataPos));
-}
-END_TEST
-
-START_TEST(Client_HistorizingReplaceRawSuccess)
-{
-    UA_StatusCode ret = UA_Client_HistoryRead_raw(client,
-                                                  &outNodeId,
-                                                  receiveCallback,
-                                                  TESTDATA_START_TIME,
-                                                  TESTDATA_STOP_TIME,
-                                                  UA_STRING_NULL,
-                                                  false,
-                                                  100,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  (void*)false);
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert(checkTestData(false, testData, receivedTestData, testDataSize));
-    resetReceiveBuffer();
-    // replace values to the database
-    for (size_t i = 0; i < testReplaceDataSuccessSize; ++i) {
-        UA_DataValue value;
-        fillInt64DataValue(testReplaceDataSuccess[i], 0, &value);
-        ret = UA_Client_HistoryUpdate_replace(client, &outNodeId, &value);
-        ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-        UA_DataValue_deleteMembers(&value);
-    }
-    // check result
-    ret = UA_Client_HistoryRead_raw(client,
-                                    &outNodeId,
-                                    receiveCallback,
-                                    TESTDATA_START_TIME,
-                                    TESTDATA_STOP_TIME,
-                                    UA_STRING_NULL,
-                                    false,
-                                    100,
-                                    UA_TIMESTAMPSTORETURN_BOTH,
-                                    (void*)false);
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert_uint_eq(receivedTestDataPos, testDataSize);
-    ck_assert(checkTestData(false, testData, receivedTestData, receivedTestDataPos));
-    ck_assert(checkModifiedData(testReplaceDataSuccess, testReplaceDataSuccessSize, receivedTestData, receivedTestDataPos));
-}
-END_TEST
-
-START_TEST(Client_HistorizingUpdateRawSuccess)
-{
-    UA_StatusCode ret = UA_Client_HistoryRead_raw(client,
-                                                  &outNodeId,
-                                                  receiveCallback,
-                                                  TESTDATA_START_TIME,
-                                                  TESTDATA_STOP_TIME,
-                                                  UA_STRING_NULL,
-                                                  false,
-                                                  100,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  (void*)false);
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert(checkTestData(false, testData, receivedTestData, testDataSize));
-    resetReceiveBuffer();
-    // insert values to the database
-    for (size_t i = 0; i < testInsertDataSuccessSize; ++i) {
-        UA_DataValue value;
-        fillInt64DataValue(testInsertDataSuccess[i], 0, &value);
-        ret = UA_Client_HistoryUpdate_update(client, &outNodeId, &value);
-        ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOODENTRYINSERTED));
-        UA_DataValue_deleteMembers(&value);
-    }
-    // replace values to the database
-    for (size_t i = 0; i < testReplaceDataSuccessSize; ++i) {
-        UA_DataValue value;
-        fillInt64DataValue(testReplaceDataSuccess[i], 0, &value);
-        ret = UA_Client_HistoryUpdate_update(client, &outNodeId, &value);
-        ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOODENTRYREPLACED));
-        UA_DataValue_deleteMembers(&value);
-    }
-    // check result
-    ret = UA_Client_HistoryRead_raw(client,
-                                    &outNodeId,
-                                    receiveCallback,
-                                    TESTDATA_START_TIME,
-                                    TESTDATA_STOP_TIME,
-                                    UA_STRING_NULL,
-                                    false,
-                                    100,
-                                    UA_TIMESTAMPSTORETURN_BOTH,
-                                    (void*)false);
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert_uint_eq(receivedTestDataPos, testInsertResultDataSize);
-    ck_assert(checkTestData(false, testInsertResultData, receivedTestData, receivedTestDataPos));
-}
-END_TEST
-
-START_TEST(Client_HistorizingDeleteRaw)
-{
-    for (size_t i = 0; i < testDeleteRangeDataSize; ++i) {
-        fprintf(stderr, "Client_HistorizingDeleteRaw: Testing %lu: {%lld, %lld, %lu, %s}\n",
-                (unsigned long)i,
-                (long long)testDeleteRangeData[i].start,
-                (long long)testDeleteRangeData[i].end,
-                (unsigned long)testDeleteRangeData[i].historySize,
-                UA_StatusCode_name(testDeleteRangeData[i].statusCode));
-        resetReceiveBuffer();
-        serverBackend.removeDataValue(server,
-                                      serverBackend.context,
-                                      NULL,
-                                      NULL,
-                                      &outNodeId,
-                                      TESTDATA_START_TIME,
-                                      TESTDATA_STOP_TIME);
-        fillHistoricalDataBackend(serverBackend);
-        // check result
-        UA_StatusCode ret = UA_Client_HistoryRead_raw(client,
-                                        &outNodeId,
-                                        receiveCallback,
-                                        TESTDATA_START_TIME,
-                                        TESTDATA_STOP_TIME,
-                                        UA_STRING_NULL,
-                                        false,
-                                        100,
-                                        UA_TIMESTAMPSTORETURN_BOTH,
-                                        (void*)false);
-        ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-        ck_assert(checkTestData(false, testData, receivedTestData, receivedTestDataPos));
-        resetReceiveBuffer();
-
-        ret = UA_Client_HistoryUpdate_deleteRaw(client,
-                                                &outNodeId,
-                                                testDeleteRangeData[i].start,
-                                                testDeleteRangeData[i].end);
-        if (ret != testDeleteRangeData[i].statusCode)
-                fprintf(stderr, "Error: ret %s != statusCode%s\n", UA_StatusCode_name(ret), UA_StatusCode_name(testDeleteRangeData[i].statusCode));
-        ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(testDeleteRangeData[i].statusCode));
-
-        // check result
-        ret = UA_Client_HistoryRead_raw(client,
-                                        &outNodeId,
-                                        receiveCallback,
-                                        TESTDATA_START_TIME,
-                                        TESTDATA_STOP_TIME,
-                                        UA_STRING_NULL,
-                                        false,
-                                        100,
-                                        UA_TIMESTAMPSTORETURN_BOTH,
-                                        (void*)false);
-        ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-        if (receivedTestDataPos != testDeleteRangeData[i].historySize)
-                fprintf(stderr, "Error: receivedTestDataPos != testDeleteRangeData[i].historySize\n");
-        ck_assert_uint_eq(receivedTestDataPos, testDeleteRangeData[i].historySize);
-    }
-}
-END_TEST
-
-START_TEST(Client_HistorizingInsertRawFail)
-{
-    UA_StatusCode ret = UA_Client_HistoryRead_raw(client,
-                                                  &outNodeId,
-                                                  receiveCallback,
-                                                  TESTDATA_START_TIME,
-                                                  TESTDATA_STOP_TIME,
-                                                  UA_STRING_NULL,
-                                                  false,
-                                                  100,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  (void*)false);
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert(checkTestData(false, testData, receivedTestData, testDataSize));
-    resetReceiveBuffer();
-    // insert values to the database
-    for (size_t i = 0; i < testReplaceDataSuccessSize; ++i) {
-        UA_DataValue value;
-        fillInt64DataValue(testReplaceDataSuccess[i], 0, &value);
-        ret = UA_Client_HistoryUpdate_insert(client, &outNodeId, &value);
-        ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_BADENTRYEXISTS));
-        UA_DataValue_deleteMembers(&value);
-    }
-    // check result
-    ret = UA_Client_HistoryRead_raw(client,
-                                    &outNodeId,
-                                    receiveCallback,
-                                    TESTDATA_START_TIME,
-                                    TESTDATA_STOP_TIME,
-                                    UA_STRING_NULL,
-                                    false,
-                                    100,
-                                    UA_TIMESTAMPSTORETURN_BOTH,
-                                    (void*)false);
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert_uint_eq(receivedTestDataPos, testDataSize);
-    ck_assert(checkTestData(false, testData, receivedTestData, receivedTestDataPos));
-    ck_assert(checkModifiedData(NULL, 0, receivedTestData, receivedTestDataPos));
-}
-END_TEST
-
-START_TEST(Client_HistorizingReplaceRawFail)
-{
-    UA_StatusCode ret = UA_Client_HistoryRead_raw(client,
-                                                  &outNodeId,
-                                                  receiveCallback,
-                                                  TESTDATA_START_TIME,
-                                                  TESTDATA_STOP_TIME,
-                                                  UA_STRING_NULL,
-                                                  false,
-                                                  100,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  (void*)false);
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert(checkTestData(false, testData, receivedTestData, testDataSize));
-    resetReceiveBuffer();
-    // replace values to the database
-    for (size_t i = 0; i < testInsertDataSuccessSize; ++i) {
-        UA_DataValue value;
-        fillInt64DataValue(testInsertDataSuccess[i], 0, &value);
-        ret = UA_Client_HistoryUpdate_replace(client, &outNodeId, &value);
-        ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_BADNOENTRYEXISTS));
-        UA_DataValue_deleteMembers(&value);
-    }
-    // check result
-    ret = UA_Client_HistoryRead_raw(client,
-                                    &outNodeId,
-                                    receiveCallback,
-                                    TESTDATA_START_TIME,
-                                    TESTDATA_STOP_TIME,
-                                    UA_STRING_NULL,
-                                    false,
-                                    100,
-                                    UA_TIMESTAMPSTORETURN_BOTH,
-                                    (void*)false);
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert_uint_eq(receivedTestDataPos, testDataSize);
-    ck_assert(checkTestData(false, testData, receivedTestData, receivedTestDataPos));
-    ck_assert(checkModifiedData(NULL, 0, receivedTestData, receivedTestDataPos));
-}
-END_TEST
-
-#endif /*UA_ENABLE_HISTORIZING*/
-
-static Suite* testSuite_Client(void)
-{
-    Suite *s = suite_create("Client Historical Data");
-    TCase *tc_client = tcase_create("Client Historical Data read_raw");
-    tcase_add_checked_fixture(tc_client, setup, teardown);
-#ifdef UA_ENABLE_HISTORIZING
-    tcase_add_test(tc_client, Client_HistorizingReadRawAll);
-    tcase_add_test(tc_client, Client_HistorizingReadRawOne);
-    tcase_add_test(tc_client, Client_HistorizingReadRawTwo);
-    tcase_add_test(tc_client, Client_HistorizingReadRawAllInv);
-    tcase_add_test(tc_client, Client_HistorizingReadRawOneInv);
-    tcase_add_test(tc_client, Client_HistorizingReadRawTwoInv);
-    tcase_add_test(tc_client, Client_HistorizingInsertRawSuccess);
-    tcase_add_test(tc_client, Client_HistorizingReplaceRawSuccess);
-    tcase_add_test(tc_client, Client_HistorizingUpdateRawSuccess);
-    tcase_add_test(tc_client, Client_HistorizingDeleteRaw);
-    tcase_add_test(tc_client, Client_HistorizingInsertRawFail);
-    tcase_add_test(tc_client, Client_HistorizingReplaceRawFail);
-#endif /* UA_ENABLE_HISTORIZING */
-    suite_add_tcase(s, tc_client);
-
-    return s;
-}
-
-int main(void)
-{
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/client/check_client_securechannel.c b/ext/open62541/tests/client/check_client_securechannel.c
deleted file mode 100644
index 4bed0fe..0000000
--- a/ext/open62541/tests/client/check_client_securechannel.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include "client/ua_client_internal.h"
-
-#include "check.h"
-#include "testing_clock.h"
-#include "testing_networklayers.h"
-#include "thread_wrapper.h"
-
-UA_Server *server;
-UA_Boolean running;
-THREAD_HANDLE server_thread;
-
-THREAD_CALLBACK(serverloop) {
-    while(running)
-        UA_Server_run_iterate(server, true);
-    return 0;
-}
-
-static void setup(void) {
-    running = true;
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-    UA_Server_run_startup(server);
-    THREAD_CREATE(server_thread, serverloop);
-    UA_realSleep(100);
-}
-
-static void teardown(void) {
-    running = false;
-    THREAD_JOIN(server_thread);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-START_TEST(SecureChannel_timeout_max) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_ClientConfig *cconfig = UA_Client_getConfig(client);
-    UA_fakeSleep(cconfig->secureChannelLifeTime);
-
-    UA_Variant val;
-    UA_NodeId nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE);
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Variant_deleteMembers(&val);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-END_TEST
-
-/* Send the next message after the securechannel timed out */
-START_TEST(SecureChannel_timeout_fail) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_ClientConfig *cconfig = UA_Client_getConfig(client);
-    UA_fakeSleep(cconfig->secureChannelLifeTime + 1);
-    UA_realSleep(50 + 1); // UA_MAXTIMEOUT+1 wait to be sure UA_Server_run_iterate can be completely executed
-
-    UA_Variant val;
-    UA_Variant_init(&val);
-    UA_NodeId nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE);
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert(retval != UA_STATUSCODE_GOOD);
-
-    UA_Variant_deleteMembers(&val);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-END_TEST
-
-/* Send an async message and receive the response when the securechannel timed out */
-START_TEST(SecureChannel_networkfail) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_ReadRequest rq;
-    UA_ReadRequest_init(&rq);
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.attributeId = UA_ATTRIBUTEID_VALUE;
-    rvi.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE);
-    rq.nodesToRead = &rvi;
-    rq.nodesToReadSize = 1;
-
-    /* Forward the clock after recv in the client */
-    UA_ClientConfig *cconfig = UA_Client_getConfig(client);
-    UA_Client_recv = client->connection.recv;
-    client->connection.recv = UA_Client_recvTesting;
-    UA_Client_recvSleepDuration = cconfig->secureChannelLifeTime + 1;
-
-    UA_Variant val;
-    UA_Variant_init(&val);
-    UA_NodeId nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE);
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert(retval == UA_STATUSCODE_BADSECURECHANNELCLOSED);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-END_TEST
-
-START_TEST(SecureChannel_reconnect) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    
-    client->state = UA_CLIENTSTATE_CONNECTED;
-
-    retval = UA_Client_disconnect(client);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_ClientConfig *cconfig = UA_Client_getConfig(client);
-    UA_fakeSleep(cconfig->secureChannelLifeTime + 1);
-    UA_realSleep(50 + 1);
-
-    retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Client_delete(client);
-}
-END_TEST
-
-START_TEST(SecureChannel_cableunplugged) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Variant val;
-    UA_Variant_init(&val);
-    UA_NodeId nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE);
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Variant_deleteMembers(&val);
-
-    UA_Client_recv = client->connection.recv;
-    client->connection.recv = UA_Client_recvTesting;
-
-    /* Simulate network cable unplugged (no response from server) */
-    UA_Client_recvTesting_result = UA_STATUSCODE_GOODNONCRITICALTIMEOUT;
-
-    UA_Variant_init(&val);
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADCONNECTIONCLOSED);
-
-    ck_assert(UA_Client_getState(client) == UA_CLIENTSTATE_DISCONNECTED);
-
-    UA_Client_recvTesting_result = UA_STATUSCODE_GOOD;
-
-    UA_Client_delete(client);
-}
-END_TEST
-
-int main(void) {
-    TCase *tc_sc = tcase_create("Client SecureChannel");
-    tcase_add_checked_fixture(tc_sc, setup, teardown);
-    tcase_add_test(tc_sc, SecureChannel_timeout_max);
-    tcase_add_test(tc_sc, SecureChannel_timeout_fail);
-    tcase_add_test(tc_sc, SecureChannel_networkfail);
-    tcase_add_test(tc_sc, SecureChannel_reconnect);
-    tcase_add_test(tc_sc, SecureChannel_cableunplugged);
-
-    Suite *s = suite_create("Client");
-    suite_add_tcase(s, tc_sc);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/client/check_client_subscriptions.c b/ext/open62541/tests/client/check_client_subscriptions.c
deleted file mode 100644
index 1e2fb28..0000000
--- a/ext/open62541/tests/client/check_client_subscriptions.c
+++ /dev/null
@@ -1,588 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include "client/ua_client_internal.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "check.h"
-#include "testing_clock.h"
-#include "testing_networklayers.h"
-#include "thread_wrapper.h"
-
-UA_Server *server;
-UA_Boolean running;
-UA_ServerNetworkLayer nl;
-THREAD_HANDLE server_thread;
-
-THREAD_CALLBACK(serverloop) {
-    while(running)
-        UA_Server_run_iterate(server, true);
-    return 0;
-}
-
-static void setup(void) {
-    running = true;
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-    config->maxPublishReqPerSession = 5;
-    UA_Server_run_startup(server);
-    THREAD_CREATE(server_thread, serverloop);
-}
-
-static void teardown(void) {
-    running = false;
-    THREAD_JOIN(server_thread);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-
-UA_Boolean notificationReceived = false;
-UA_UInt32 countNotificationReceived = 0;
-UA_Double publishingInterval = 500.0;
-
-static void
-dataChangeHandler(UA_Client *client, UA_UInt32 subId, void *subContext,
-                  UA_UInt32 monId, void *monContext, UA_DataValue *value) {
-    notificationReceived = true;
-    countNotificationReceived++;
-}
-
-START_TEST(Client_subscription) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Client_recv = client->connection.recv;
-    client->connection.recv = UA_Client_recvTesting;
-
-    UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();
-    UA_CreateSubscriptionResponse response = UA_Client_Subscriptions_create(client, request,
-                                                                            NULL, NULL, NULL);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    UA_UInt32 subId = response.subscriptionId;
-
-    // a valid UA_Client_Subscriptions_modify
-    UA_ModifySubscriptionRequest modifySubscriptionRequest;
-    UA_ModifySubscriptionRequest_init(&modifySubscriptionRequest);
-    modifySubscriptionRequest.subscriptionId = response.subscriptionId;
-    modifySubscriptionRequest.requestedPublishingInterval = response.revisedPublishingInterval;
-    modifySubscriptionRequest.requestedLifetimeCount = response.revisedLifetimeCount;
-    modifySubscriptionRequest.requestedMaxKeepAliveCount = response.revisedMaxKeepAliveCount;
-    UA_ModifySubscriptionResponse modifySubscriptionResponse = UA_Client_Subscriptions_modify(client,modifySubscriptionRequest);
-    ck_assert_int_eq(modifySubscriptionResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-
-    // an invalid UA_Client_Subscriptions_modify
-    modifySubscriptionRequest.subscriptionId = 99999; // invalid
-    modifySubscriptionResponse = UA_Client_Subscriptions_modify(client,modifySubscriptionRequest);
-    ck_assert_int_eq(modifySubscriptionResponse.responseHeader.serviceResult, UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID);
-
-    /* monitor the server state */
-    UA_MonitoredItemCreateRequest monRequest =
-        UA_MonitoredItemCreateRequest_default(UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE));
-
-    UA_MonitoredItemCreateResult monResponse =
-        UA_Client_MonitoredItems_createDataChange(client, response.subscriptionId,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  monRequest, NULL, dataChangeHandler, NULL);
-    ck_assert_uint_eq(monResponse.statusCode, UA_STATUSCODE_GOOD);
-    UA_UInt32 monId = monResponse.monitoredItemId;
-
-    UA_fakeSleep((UA_UInt32)publishingInterval + 1);
-
-    notificationReceived = false;
-
-    retval = UA_Client_run_iterate(client, (UA_UInt16)(publishingInterval + 1));
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-
-    retval = UA_Client_MonitoredItems_deleteSingle(client, subId, monId);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Client_Subscriptions_deleteSingle(client, subId);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-END_TEST
-
-START_TEST(Client_subscription_createDataChanges) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Client_recv = client->connection.recv;
-    client->connection.recv = UA_Client_recvTesting;
-
-    UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();
-    UA_CreateSubscriptionResponse response = UA_Client_Subscriptions_create(client, request,
-                                                                            NULL, NULL, NULL);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    UA_UInt32 subId = response.subscriptionId;
-
-    UA_MonitoredItemCreateRequest items[3];
-    UA_UInt32 newMonitoredItemIds[3];
-    UA_Client_DataChangeNotificationCallback callbacks[3];
-    UA_Client_DeleteMonitoredItemCallback deleteCallbacks[3];
-    void *contexts[3];
-
-    /* monitor the server state */
-    items[0] = UA_MonitoredItemCreateRequest_default(UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE));
-    callbacks[0] = dataChangeHandler;
-    contexts[0] = NULL;
-    deleteCallbacks[0] = NULL;
-
-    /* monitor invalid node */
-    items[1] = UA_MonitoredItemCreateRequest_default(UA_NODEID_NUMERIC(0, 999999));
-    callbacks[1] = dataChangeHandler;
-    contexts[1] = NULL;
-    deleteCallbacks[1] = NULL;
-
-    /* monitor current time */
-    items[2] = UA_MonitoredItemCreateRequest_default(UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME));
-    callbacks[2] = dataChangeHandler;
-    contexts[2] = NULL;
-    deleteCallbacks[2] = NULL;
-
-    UA_CreateMonitoredItemsRequest createRequest;
-    UA_CreateMonitoredItemsRequest_init(&createRequest);
-    createRequest.subscriptionId = subId;
-    createRequest.timestampsToReturn = UA_TIMESTAMPSTORETURN_BOTH;
-    createRequest.itemsToCreate = items;
-    createRequest.itemsToCreateSize = 3;
-    UA_CreateMonitoredItemsResponse createResponse =
-       UA_Client_MonitoredItems_createDataChanges(client, createRequest, contexts,
-                                                   callbacks, deleteCallbacks);
-
-    ck_assert_uint_eq(createResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(createResponse.resultsSize, 3);
-    ck_assert_uint_eq(createResponse.results[0].statusCode, UA_STATUSCODE_GOOD);
-    newMonitoredItemIds[0] = createResponse.results[0].monitoredItemId;
-    ck_assert_uint_eq(createResponse.results[1].statusCode, UA_STATUSCODE_BADNODEIDUNKNOWN);
-    newMonitoredItemIds[1] = createResponse.results[1].monitoredItemId;
-    ck_assert_uint_eq(newMonitoredItemIds[1], 0);
-    ck_assert_uint_eq(createResponse.results[2].statusCode, UA_STATUSCODE_GOOD);
-    newMonitoredItemIds[2] = createResponse.results[2].monitoredItemId;
-    ck_assert_uint_eq(createResponse.results[2].statusCode, UA_STATUSCODE_GOOD);
-    UA_CreateMonitoredItemsResponse_deleteMembers(&createResponse);
-
-    UA_fakeSleep((UA_UInt32)publishingInterval + 1);
-
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    retval = UA_Client_run_iterate(client, (UA_UInt16)(publishingInterval + 1));
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 2);
-
-    notificationReceived = false;
-    retval = UA_Client_run_iterate(client, (UA_UInt16)(publishingInterval + 1));
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 3);
-
-    UA_DeleteMonitoredItemsRequest deleteRequest;
-    UA_DeleteMonitoredItemsRequest_init(&deleteRequest);
-    deleteRequest.subscriptionId = subId;
-    deleteRequest.monitoredItemIds = newMonitoredItemIds;
-    deleteRequest.monitoredItemIdsSize = 3;
-
-    UA_DeleteMonitoredItemsResponse deleteResponse =
-        UA_Client_MonitoredItems_delete(client, deleteRequest);
-
-    ck_assert_uint_eq(deleteResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(deleteResponse.resultsSize, 3);
-    ck_assert_uint_eq(deleteResponse.results[0], UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(deleteResponse.results[1], UA_STATUSCODE_BADMONITOREDITEMIDINVALID);
-    ck_assert_uint_eq(deleteResponse.results[2], UA_STATUSCODE_GOOD);
-
-    UA_DeleteMonitoredItemsResponse_deleteMembers(&deleteResponse);
-
-    retval = UA_Client_Subscriptions_deleteSingle(client, subId);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-END_TEST
-
-START_TEST(Client_subscription_keepAlive) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();
-    request.requestedMaxKeepAliveCount = 1;
-    UA_CreateSubscriptionResponse response = UA_Client_Subscriptions_create(client, request,
-                                                                            NULL, NULL, NULL);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    UA_UInt32 subId = response.subscriptionId;
-
-    /* monitor the server state */
-    UA_MonitoredItemCreateRequest monRequest =
-        UA_MonitoredItemCreateRequest_default(UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE));
-
-    UA_MonitoredItemCreateResult monResponse =
-        UA_Client_MonitoredItems_createDataChange(client, response.subscriptionId,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  monRequest, NULL, dataChangeHandler, NULL);
-    ck_assert_uint_eq(monResponse.statusCode, UA_STATUSCODE_GOOD);
-    UA_UInt32 monId = monResponse.monitoredItemId;
-
-    /* Ensure that the subscription is late */
-    UA_fakeSleep((UA_UInt32)(publishingInterval + 1));
-
-    /* Manually send a publish request */
-    UA_PublishRequest pr;
-    UA_PublishRequest_init(&pr);
-    pr.subscriptionAcknowledgementsSize = 0;
-    UA_PublishResponse presponse;
-    UA_PublishResponse_init(&presponse);
-    __UA_Client_Service(client, &pr, &UA_TYPES[UA_TYPES_PUBLISHREQUEST],
-                        &presponse, &UA_TYPES[UA_TYPES_PUBLISHRESPONSE]);
-    ck_assert_uint_eq(presponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(presponse.notificationMessage.notificationDataSize, 1);
-    UA_PublishResponse_deleteMembers(&presponse);
-    UA_PublishRequest_deleteMembers(&pr);
-
-    UA_fakeSleep((UA_UInt32)(publishingInterval + 1));
-
-    UA_PublishRequest_init(&pr);
-    pr.subscriptionAcknowledgementsSize = 0;
-    UA_PublishResponse_init(&presponse);
-    __UA_Client_Service(client, &pr, &UA_TYPES[UA_TYPES_PUBLISHREQUEST],
-                        &presponse, &UA_TYPES[UA_TYPES_PUBLISHRESPONSE]);
-
-    ck_assert_uint_eq(presponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(presponse.notificationMessage.notificationDataSize, 0);
-    UA_PublishResponse_deleteMembers(&presponse);
-    UA_PublishRequest_deleteMembers(&pr);
-
-    retval = UA_Client_MonitoredItems_deleteSingle(client, subId, monId);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Client_Subscriptions_deleteSingle(client, subId);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-END_TEST
-
-START_TEST(Client_subscription_connectionClose) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Client_recv = client->connection.recv;
-    client->connection.recv = UA_Client_recvTesting;
-
-    UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();
-    UA_CreateSubscriptionResponse response = UA_Client_Subscriptions_create(client, request,
-                                                                            NULL, NULL, NULL);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-
-    /* monitor the server state */
-    UA_MonitoredItemCreateRequest monRequest =
-        UA_MonitoredItemCreateRequest_default(UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE));
-
-    UA_MonitoredItemCreateResult monResponse =
-        UA_Client_MonitoredItems_createDataChange(client, response.subscriptionId,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  monRequest, NULL, dataChangeHandler, NULL);
-    ck_assert_uint_eq(monResponse.statusCode, UA_STATUSCODE_GOOD);
-
-    UA_fakeSleep((UA_UInt32)publishingInterval + 1);
-
-    retval = UA_Client_run_iterate(client, (UA_UInt16)(publishingInterval + 60));
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    /* Simulate BADCONNECTIONCLOSE */
-    UA_Client_recvTesting_result = UA_STATUSCODE_BADCONNECTIONCLOSED;
-
-    retval = UA_Client_run_iterate(client, (UA_UInt16)(publishingInterval + 60));
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADCONNECTIONCLOSED);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-END_TEST
-
-START_TEST(Client_subscription_without_notification) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Client_recv = client->connection.recv;
-    client->connection.recv = UA_Client_recvTesting;
-
-    UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();
-    request.requestedMaxKeepAliveCount = 1;
-    UA_CreateSubscriptionResponse response = UA_Client_Subscriptions_create(client, request,
-                                                                            NULL, NULL, NULL);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    UA_UInt32 subId = response.subscriptionId;
-
-    /* monitor the server state */
-    UA_MonitoredItemCreateRequest monRequest =
-        UA_MonitoredItemCreateRequest_default(UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE));
-    monRequest.requestedParameters.samplingInterval = 99999999.0;
-
-    UA_MonitoredItemCreateResult monResponse =
-        UA_Client_MonitoredItems_createDataChange(client, response.subscriptionId,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  monRequest, NULL, dataChangeHandler, NULL);
-    UA_UInt32 monId = monResponse.monitoredItemId;
-    ck_assert_uint_eq(monResponse.statusCode, UA_STATUSCODE_GOOD);
-
-    UA_fakeSleep((UA_UInt32)publishingInterval + 1);
-
-    notificationReceived = false;
-    retval = UA_Client_run_iterate(client, (UA_UInt16)(publishingInterval + 1));
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-
-    notificationReceived = false;
-    retval = UA_Client_run_iterate(client, (UA_UInt16)(publishingInterval + 1));
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, false);
-
-    retval = UA_Client_MonitoredItems_deleteSingle(client, subId, monId);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Client_Subscriptions_deleteSingle(client, subId);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-END_TEST
-
-static UA_ClientState callbackClientState;
-
-static void
-stateCallback (UA_Client *client, UA_ClientState clientState){
-    callbackClientState = clientState;
-
-    if (clientState == UA_CLIENTSTATE_SESSION){
-        /* A new session was created. We need to create the subscription. */
-        UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();
-        request.requestedMaxKeepAliveCount = 1;
-        UA_CreateSubscriptionResponse response = UA_Client_Subscriptions_create(client, request,
-                                                                                NULL, NULL, NULL);
-        ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-        UA_UInt32 subId = response.subscriptionId;
-        ck_assert_uint_ne(subId, 0);
-
-        /* Add a MonitoredItem */
-        UA_MonitoredItemCreateRequest monRequest =
-            UA_MonitoredItemCreateRequest_default(UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME));
-    
-        UA_MonitoredItemCreateResult monResponse =
-            UA_Client_MonitoredItems_createDataChange(client, response.subscriptionId,
-                                                      UA_TIMESTAMPSTORETURN_BOTH,
-                                                      monRequest, NULL, dataChangeHandler, NULL);
-        ck_assert_uint_eq(monResponse.statusCode, UA_STATUSCODE_GOOD);
-        UA_UInt32 monId = monResponse.monitoredItemId;
-
-        ck_assert_uint_ne(monId, 0);
-    }
-}
-
-static UA_Boolean inactivityCallbackCalled = false;
-
-static void
-subscriptionInactivityCallback (UA_Client *client, UA_UInt32 subId, void *subContext) {
-    inactivityCallbackCalled = true;
-}
-
-START_TEST(Client_subscription_async_sub) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    /* Set stateCallback */
-    UA_ClientConfig *cc = UA_Client_getConfig(client);
-    cc->stateCallback = stateCallback;
-    cc->subscriptionInactivityCallback = subscriptionInactivityCallback;
-    inactivityCallbackCalled = false;
-
-    /* Activate background publish request */
-    cc->outStandingPublishRequests = 10;
-
-    ck_assert_uint_eq(callbackClientState, UA_CLIENTSTATE_DISCONNECTED);
-
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(callbackClientState, UA_CLIENTSTATE_SESSION);
-
-    UA_Client_recv = client->connection.recv;
-    client->connection.recv = UA_Client_recvTesting;
-
-    UA_fakeSleep((UA_UInt32)publishingInterval + 1);
-
-    countNotificationReceived = 0;
-
-    notificationReceived = false;
-    UA_Client_run_iterate(client, (UA_UInt16)(publishingInterval + 1));
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 1);
-
-    notificationReceived = false;
-    UA_Client_run_iterate(client, (UA_UInt16)(publishingInterval + 1));
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 2);
-
-    notificationReceived = false;
-    UA_Client_run_iterate(client, (UA_UInt16)(publishingInterval + 1));
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 3);
-
-    notificationReceived = false;
-    UA_Client_run_iterate(client, (UA_UInt16)(publishingInterval + 1));
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 4);
-
-    notificationReceived = false;
-    UA_Client_run_iterate(client, (UA_UInt16)(publishingInterval + 1));
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 5);
-
-    ck_assert_uint_lt(client->config.outStandingPublishRequests, 10);
-
-    notificationReceived = false;
-    /* Simulate network cable unplugged (no response from server) */
-    UA_Client_recvTesting_result = UA_STATUSCODE_GOODNONCRITICALTIMEOUT;
-    UA_Client_run_iterate(client, (UA_UInt16)(publishingInterval + 1));
-    ck_assert_uint_eq(notificationReceived, false);
-    ck_assert_uint_eq(callbackClientState, UA_CLIENTSTATE_SESSION);
-
-    /* Simulate network cable unplugged (no response from server) */
-    ck_assert_uint_eq(inactivityCallbackCalled, false);
-    UA_Client_recvTesting_result = UA_STATUSCODE_GOODNONCRITICALTIMEOUT;
-    UA_Client_run_iterate(client, (UA_UInt16)cc->timeout);
-    ck_assert_uint_eq(inactivityCallbackCalled, true);
-    ck_assert_uint_eq(callbackClientState, UA_CLIENTSTATE_SESSION);
-
-    UA_Client_delete(client);
-}
-END_TEST
-
-#ifdef UA_ENABLE_METHODCALLS
-START_TEST(Client_methodcall) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();
-    UA_CreateSubscriptionResponse response = UA_Client_Subscriptions_create(client, request,
-                                                                            NULL, NULL, NULL);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-
-    /* monitor the server state */
-    UA_MonitoredItemCreateRequest monRequest =
-        UA_MonitoredItemCreateRequest_default(UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE));
-
-    UA_MonitoredItemCreateResult monResponse =
-        UA_Client_MonitoredItems_createDataChange(client, response.subscriptionId,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  monRequest, NULL, NULL, NULL);
-    ck_assert_uint_eq(monResponse.statusCode, UA_STATUSCODE_GOOD);
-
-/* Minimal nodeset does not contain any method we can call here */
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-    UA_UInt32 monId = monResponse.monitoredItemId;
-    UA_UInt32 subId = response.subscriptionId;
-
-    /* call a method to get monitored item id */
-    UA_Variant input;
-    UA_Variant_init(&input);
-    UA_Variant_setScalarCopy(&input, &subId, &UA_TYPES[UA_TYPES_UINT32]);
-    size_t outputSize;
-    UA_Variant *output;
-    retval = UA_Client_call(client, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER),
-                UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_GETMONITOREDITEMS), 1, &input, &outputSize, &output);
-
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(outputSize, 2);
-
-    ck_assert_uint_eq(output[0].arrayLength, 1);
-
-    ck_assert_uint_eq(*((UA_UInt32*)output[0].data), monId);
-
-    UA_Array_delete(output, outputSize, &UA_TYPES[UA_TYPES_VARIANT]);
-    UA_Variant_deleteMembers(&input);
-
-    /* call with invalid subscription id */
-    UA_Variant_init(&input);
-    subId = 0;
-    UA_Variant_setScalarCopy(&input, &subId, &UA_TYPES[UA_TYPES_UINT32]);
-    retval = UA_Client_call(client, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER),
-                UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_GETMONITOREDITEMS), 1, &input, &outputSize, &output);
-
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID);
-
-    UA_Variant_deleteMembers(&input);
-#endif
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-END_TEST
-#endif /* UA_ENABLE_METHODCALLS */
-
-#endif /* UA_ENABLE_SUBSCRIPTIONS */
-
-static Suite* testSuite_Client(void) {
-    Suite *s = suite_create("Client Subscription");
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    TCase *tc_client = tcase_create("Client Subscription Basic");
-    tcase_add_checked_fixture(tc_client, setup, teardown);
-    tcase_add_test(tc_client, Client_subscription);
-    tcase_add_test(tc_client, Client_subscription_connectionClose);
-    tcase_add_test(tc_client, Client_subscription_createDataChanges);
-    tcase_add_test(tc_client, Client_subscription_keepAlive);
-    tcase_add_test(tc_client, Client_subscription_without_notification);
-    tcase_add_test(tc_client, Client_subscription_async_sub);
-    suite_add_tcase(s,tc_client);
-#endif /* UA_ENABLE_SUBSCRIPTIONS */
-
-#if defined(UA_ENABLE_SUBSCRIPTIONS) && defined(UA_ENABLE_METHODCALLS)
-    TCase *tc_client2 = tcase_create("Client Subscription + Method Call of GetMonitoredItmes");
-    tcase_add_checked_fixture(tc_client2, setup, teardown);
-    tcase_add_test(tc_client2, Client_methodcall);
-    suite_add_tcase(s,tc_client2);
-#endif
-
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/client/historical_read_test_data.h b/ext/open62541/tests/client/historical_read_test_data.h
deleted file mode 100644
index 7263ddc..0000000
--- a/ext/open62541/tests/client/historical_read_test_data.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
- */
-
-/* Data in this header is gathered from OPC Unified Architecture, Part 11, Release
-1.03 Page 5-6 from OPC Foundation */
-
-#ifndef UA_HISTORICAL_READ_TEST_DATA_H_
-#define UA_HISTORICAL_READ_TEST_DATA_H_
-
-#include <open62541/types.h>
-
-#include <limits.h>
-
-#define TESTDATA_START_TIME 1
-#define TESTDATA_STOP_TIME 601
-static UA_DateTime testData[] = {
-    100,
-    200,
-    300,
-    400,
-    500
-};
-static const size_t testDataSize = (sizeof(testData) / sizeof(testData[0]));
-
-static UA_DateTime testInsertDataSuccess[] = {
-    50,
-    250,
-    550
-};
-static const size_t testInsertDataSuccessSize = (sizeof(testInsertDataSuccess) / sizeof(testInsertDataSuccess[0]));
-
-
-static UA_DateTime testInsertResultData[] = {
-    50,
-    100,
-    200,
-    250,
-    300,
-    400,
-    500,
-    550
-};
-static size_t testInsertResultDataSize = (sizeof(testInsertResultData) / sizeof(testInsertResultData[0]));
-
-static UA_DateTime testReplaceDataSuccess[] = {
-    100,
-    300,
-    500
-};
-static const size_t testReplaceDataSuccessSize = (sizeof(testReplaceDataSuccess) / sizeof(testReplaceDataSuccess[0]));
-
-struct DeleteRange {
-    UA_DateTime start;
-    UA_DateTime end;
-    size_t historySize;
-    UA_StatusCode statusCode;
-};
-
-static struct DeleteRange testDeleteRangeData[] = {
-{200, 400, 3, UA_STATUSCODE_GOOD},
-{100, 400, 2, UA_STATUSCODE_GOOD},
-{200, 500, 2, UA_STATUSCODE_GOOD},
-{100, 500, 1, UA_STATUSCODE_GOOD},
-{100, 550, 0, UA_STATUSCODE_GOOD},
-{50, 550, 0, UA_STATUSCODE_GOOD},
-{500, 550, 4, UA_STATUSCODE_GOOD},
-{50, 150, 4, UA_STATUSCODE_GOOD},
-{100, 100, 4, UA_STATUSCODE_GOOD},
-{500, 500, 4, UA_STATUSCODE_GOOD},
-{200, 200, 4, UA_STATUSCODE_GOOD},
-{50, 50, 5, UA_STATUSCODE_BADNODATA},
-{550, 550, 5, UA_STATUSCODE_BADNODATA},
-{150, 150, 5, UA_STATUSCODE_BADNODATA},
-{200, 100, 5, UA_STATUSCODE_BADTIMESTAMPNOTSUPPORTED},
-{LLONG_MIN, LLONG_MAX, 0, UA_STATUSCODE_GOOD},
-{0, LLONG_MAX, 0, UA_STATUSCODE_GOOD},
-{LLONG_MIN, 0, 5, UA_STATUSCODE_BADNODATA},
-{0, 0, 5, UA_STATUSCODE_BADNODATA},
-{50, 75, 5, UA_STATUSCODE_BADNODATA},
-{50, 100, 5, UA_STATUSCODE_BADNODATA},
-{550, 600, 5, UA_STATUSCODE_BADNODATA}
-};
-static const size_t testDeleteRangeDataSize = (sizeof(testDeleteRangeData) / sizeof(testDeleteRangeData[0]));
-
-#endif /*UA_HISTORICAL_READ_TEST_DATA_H_*/
diff --git a/ext/open62541/tests/encryption/certificates.h b/ext/open62541/tests/encryption/certificates.h
deleted file mode 100644
index 11d226c..0000000
--- a/ext/open62541/tests/encryption/certificates.h
+++ /dev/null
@@ -1,154 +0,0 @@
-#ifndef CERTIFICATES_H_
-#define CERTIFICATES_H_
-
-#include <open62541/types.h>
-
-_UA_BEGIN_DECLS
-
-#define KEY_DER_LENGTH 1193
-UA_Byte KEY_DER_DATA[1193] = {
-    0x30, 0x82, 0x04, 0xa5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xe0, 0xc9, 0x91, 0x62, 
-    0xcd, 0x91, 0x68, 0x75, 0x2c, 0x32, 0x7a, 0xdd, 0xf1, 0xd6, 0x64, 0x77, 0x8b, 0x72, 0x9e, 0x14, 
-    0x2a, 0x62, 0x08, 0xd1, 0x89, 0x7d, 0xe2, 0x17, 0xdc, 0xb3, 0xda, 0xbc, 0x3a, 0x9f, 0x84, 0x03, 
-    0xd3, 0x2e, 0x68, 0xbe, 0xc1, 0x57, 0xcb, 0x2a, 0xe2, 0xd6, 0xcf, 0xc4, 0x7f, 0xbd, 0x53, 0x3f, 
-    0xeb, 0x39, 0x98, 0x69, 0xb0, 0x40, 0x14, 0xbf, 0xf5, 0x5a, 0x23, 0x23, 0xf4, 0x4c, 0xf8, 0xf1, 
-    0x03, 0x56, 0x6d, 0x7d, 0x1b, 0x93, 0xd7, 0x0f, 0xc1, 0x8c, 0x70, 0xe0, 0x2c, 0x55, 0x7e, 0xa1, 
-    0xfc, 0x05, 0xe9, 0xd7, 0xea, 0xb1, 0x5c, 0x0f, 0x9b, 0xac, 0x6a, 0x2e, 0xb4, 0xc5, 0xbf, 0x41, 
-    0x8f, 0xda, 0xfc, 0x85, 0xc6, 0xaa, 0x25, 0xe4, 0xb9, 0x9a, 0xc6, 0xd8, 0x9a, 0x31, 0x8a, 0x17, 
-    0x8b, 0x8c, 0x4e, 0x20, 0xd9, 0x71, 0xfc, 0x66, 0x3a, 0xfd, 0x49, 0x95, 0x54, 0xa8, 0xaf, 0x42, 
-    0x5e, 0xba, 0x26, 0xe6, 0xd3, 0xa0, 0xd2, 0x02, 0x3b, 0x51, 0x8b, 0x39, 0xd3, 0x97, 0xd2, 0xe4, 
-    0xd1, 0x01, 0x65, 0xab, 0x8e, 0xa2, 0x80, 0x5b, 0x5e, 0xbb, 0x11, 0x7f, 0x50, 0x1b, 0x2b, 0x0d, 
-    0x20, 0x40, 0xb5, 0xbf, 0xd1, 0x32, 0xfa, 0x25, 0xe1, 0x0d, 0x75, 0xfc, 0x11, 0xcf, 0x21, 0xdd, 
-    0x45, 0x16, 0xe4, 0x56, 0x58, 0x49, 0x33, 0xca, 0xaf, 0xe3, 0x17, 0x7b, 0x7a, 0x8f, 0xb1, 0xec, 
-    0x1c, 0x4d, 0xa2, 0xc2, 0xce, 0x8b, 0x19, 0x4b, 0xc0, 0xc4, 0x36, 0x6a, 0x7c, 0x5b, 0x89, 0x14, 
-    0x98, 0xcb, 0xa9, 0xca, 0x66, 0xf2, 0xaa, 0xf9, 0x12, 0x40, 0x0e, 0x6a, 0x78, 0x4d, 0x1f, 0x54, 
-    0x3c, 0x03, 0x7a, 0x91, 0xf5, 0xb7, 0x3d, 0xe2, 0xfc, 0x65, 0xb7, 0xaa, 0xa9, 0x39, 0x68, 0xa7, 
-    0xdb, 0x29, 0xc1, 0x40, 0x0b, 0x4e, 0xfb, 0xce, 0x74, 0xa5, 0x46, 0xb9, 0x02, 0x03, 0x01, 0x00, 
-    0x01, 0x02, 0x82, 0x01, 0x01, 0x00, 0xb4, 0xc8, 0x07, 0x60, 0x01, 0xd9, 0xb6, 0xbb, 0xbd, 0x8e, 
-    0xdf, 0x97, 0xcd, 0xde, 0x51, 0xb0, 0x7e, 0xfa, 0xf0, 0x3d, 0x61, 0x94, 0xb4, 0x68, 0xe8, 0x7d, 
-    0xd0, 0x2e, 0xc6, 0xb5, 0xf2, 0xed, 0xbc, 0xeb, 0xfb, 0x3d, 0x24, 0x43, 0x47, 0xc4, 0x5a, 0x34, 
-    0x64, 0x56, 0x1a, 0x57, 0x0e, 0x83, 0x87, 0x04, 0x59, 0x86, 0xa7, 0x84, 0x0b, 0x9a, 0xbc, 0x3f, 
-    0xdd, 0x30, 0x40, 0x7f, 0x7c, 0x91, 0x76, 0xf1, 0xcc, 0xa7, 0xf0, 0xba, 0x3a, 0x96, 0x0a, 0x6e, 
-    0xcc, 0xe0, 0x84, 0x15, 0x91, 0xd6, 0x08, 0x71, 0xbd, 0xc5, 0x42, 0xad, 0xf2, 0xd2, 0x4e, 0x92, 
-    0xd3, 0x6a, 0x4e, 0x15, 0xcc, 0xd3, 0xc1, 0x58, 0xe4, 0x27, 0x33, 0x2d, 0xb8, 0x37, 0x52, 0x7e, 
-    0x16, 0xb9, 0xab, 0xb7, 0xd9, 0xc1, 0xeb, 0xc8, 0x79, 0xb9, 0xd3, 0xe6, 0x44, 0x13, 0x51, 0x2d, 
-    0xc6, 0x02, 0xe5, 0xe0, 0x3c, 0xa3, 0x15, 0x9b, 0x49, 0xae, 0x85, 0xbe, 0x8c, 0x84, 0xf9, 0x87, 
-    0x5d, 0x91, 0x9e, 0xf4, 0xf9, 0xf2, 0x8d, 0x81, 0x77, 0x7c, 0xfc, 0x60, 0x09, 0x48, 0x43, 0x2e, 
-    0xbb, 0xaf, 0xc9, 0xd6, 0x90, 0x2d, 0x40, 0x80, 0x59, 0xbd, 0x3b, 0x04, 0xda, 0x50, 0x2a, 0x53, 
-    0xf5, 0xc0, 0x97, 0x54, 0x04, 0x14, 0xb1, 0x8e, 0xd1, 0x6b, 0x53, 0x9e, 0xa4, 0xaa, 0x5e, 0x6e, 
-    0x1c, 0x11, 0x6b, 0x0a, 0xc4, 0xec, 0x5b, 0x77, 0xa8, 0x00, 0x83, 0x77, 0xdb, 0xf4, 0xfb, 0x00, 
-    0xf4, 0x06, 0x57, 0x25, 0x8e, 0x1c, 0x87, 0xb4, 0xbe, 0xb8, 0x04, 0x35, 0x93, 0x67, 0xaa, 0x36, 
-    0xa5, 0x62, 0xe4, 0xf6, 0xcb, 0xc8, 0xa6, 0x58, 0x77, 0x96, 0xc4, 0x6c, 0x0b, 0xc8, 0x41, 0xe2, 
-    0x36, 0x01, 0x94, 0xa5, 0xe9, 0x46, 0x17, 0xd3, 0x0b, 0x18, 0x7e, 0x06, 0x88, 0x9b, 0x7e, 0xdd, 
-    0x92, 0x20, 0xc6, 0xe3, 0x7e, 0xb1, 0x02, 0x81, 0x81, 0x00, 0xf5, 0xa6, 0xda, 0x32, 0xb9, 0x37, 
-    0x61, 0xe9, 0x7c, 0x99, 0xf7, 0x4a, 0x37, 0xee, 0x52, 0x30, 0x4f, 0xbf, 0x57, 0x6f, 0xfe, 0x20, 
-    0xdc, 0xa3, 0xfe, 0x51, 0xbf, 0x72, 0x13, 0x8a, 0xb1, 0xd7, 0x99, 0x7d, 0x67, 0xa8, 0xd4, 0xb0, 
-    0x35, 0x40, 0x7c, 0xc8, 0xdc, 0x03, 0x6b, 0x90, 0xb5, 0x65, 0x04, 0x7f, 0x97, 0x8b, 0xa8, 0x69, 
-    0x20, 0x04, 0xcb, 0x48, 0x39, 0xb7, 0x57, 0xe0, 0xd9, 0xbb, 0x15, 0xe1, 0x59, 0x16, 0xf3, 0xe1, 
-    0xab, 0x91, 0xea, 0x8a, 0x88, 0xad, 0x8d, 0xa3, 0x24, 0x4a, 0x35, 0xa5, 0xd2, 0x32, 0x19, 0x66, 
-    0xa8, 0xbb, 0x32, 0x9d, 0xf4, 0x94, 0x99, 0xc1, 0x2e, 0x2b, 0xf8, 0x98, 0x6a, 0x6e, 0x72, 0x77, 
-    0xd0, 0xc9, 0xfc, 0x5f, 0xd7, 0x69, 0xd1, 0x08, 0x12, 0xbf, 0x81, 0xc1, 0xa1, 0x1b, 0x3b, 0x41, 
-    0xb0, 0x24, 0x11, 0x0a, 0x65, 0xab, 0x81, 0x39, 0xb3, 0xd5, 0x02, 0x81, 0x81, 0x00, 0xea, 0x41, 
-    0xb5, 0xed, 0xac, 0xa0, 0x43, 0xd7, 0xde, 0x1e, 0x6b, 0x95, 0xbe, 0x88, 0x02, 0xaf, 0x2f, 0xbb, 
-    0x37, 0xf7, 0x2f, 0xf6, 0x4f, 0xa0, 0xaa, 0x43, 0x03, 0x7d, 0x33, 0xdd, 0x1e, 0x7a, 0xba, 0xa0, 
-    0x10, 0x77, 0x1f, 0x4a, 0xc9, 0x88, 0x58, 0x9d, 0x81, 0x3a, 0xe8, 0xac, 0x86, 0x2f, 0x80, 0x6c, 
-    0xc7, 0xa0, 0xe5, 0xed, 0x8d, 0x90, 0xa9, 0xa7, 0x36, 0x23, 0xd7, 0xb5, 0x89, 0xfc, 0xad, 0x4d, 
-    0xae, 0x0e, 0xec, 0xdc, 0xe7, 0x7e, 0x69, 0xfe, 0x62, 0x4b, 0x81, 0xfe, 0x52, 0x81, 0x77, 0x6a, 
-    0x35, 0xab, 0x52, 0x6f, 0x56, 0x41, 0x6c, 0x57, 0x3d, 0x75, 0x92, 0x14, 0x42, 0xa2, 0xc9, 0x50, 
-    0x52, 0x57, 0x9f, 0x26, 0x3c, 0xcd, 0x61, 0xa9, 0xda, 0x9b, 0x2c, 0xda, 0xc1, 0xd0, 0x26, 0x07, 
-    0x90, 0x15, 0x8c, 0x81, 0xe2, 0xde, 0xc0, 0x98, 0x58, 0x9d, 0x96, 0x0f, 0xcd, 0x55, 0x02, 0x81, 
-    0x81, 0x00, 0x87, 0xfb, 0xf8, 0x77, 0xf1, 0xcd, 0xf5, 0xb6, 0xa1, 0xd2, 0x3d, 0x71, 0x69, 0x6a, 
-    0xd5, 0x36, 0x87, 0x3e, 0xdd, 0xb1, 0x52, 0x55, 0x70, 0xae, 0x9b, 0x9f, 0x37, 0x42, 0x78, 0x0c, 
-    0xe4, 0x0b, 0xfc, 0x9c, 0xce, 0x20, 0x48, 0xb4, 0xce, 0x95, 0xc7, 0x3e, 0x0d, 0x85, 0x1b, 0x2b, 
-    0x7d, 0x2e, 0xd1, 0x81, 0xac, 0x2b, 0x94, 0x6b, 0xb5, 0x5c, 0xd2, 0x07, 0x46, 0x63, 0xf7, 0x12, 
-    0xb2, 0x94, 0xfd, 0x34, 0xc4, 0xf3, 0x8e, 0xc8, 0x13, 0x08, 0xf0, 0x74, 0x05, 0xdb, 0x45, 0x37, 
-    0xd5, 0x63, 0xfb, 0x34, 0xb3, 0x1a, 0x26, 0xb3, 0x8c, 0x9e, 0x2c, 0x14, 0x02, 0x8b, 0xac, 0x5d, 
-    0xa3, 0x28, 0x96, 0x32, 0x11, 0x60, 0xd8, 0x9e, 0xf9, 0x06, 0x87, 0x5d, 0xaa, 0xca, 0x99, 0xfb, 
-    0x45, 0x1d, 0x9c, 0x3f, 0xca, 0xe6, 0x5f, 0x34, 0x2a, 0xc4, 0x9c, 0x66, 0x4c, 0x07, 0xd7, 0xbe, 
-    0x50, 0x8d, 0x02, 0x81, 0x80, 0x51, 0xdb, 0x96, 0x6c, 0x30, 0x37, 0x6c, 0x9d, 0xa1, 0x43, 0x76, 
-    0x0a, 0xc4, 0xa2, 0x98, 0x75, 0x89, 0x33, 0x5d, 0xd2, 0x25, 0xd3, 0x67, 0x6d, 0xd8, 0x31, 0x44, 
-    0xa5, 0xda, 0x9a, 0xb9, 0x0c, 0xdf, 0xec, 0x10, 0xf4, 0xdf, 0x5d, 0x6d, 0xe1, 0x14, 0x3e, 0x2d, 
-    0xab, 0x5d, 0x24, 0xf4, 0x5a, 0xe3, 0x00, 0xa0, 0x1d, 0x8c, 0x5b, 0x1f, 0x6d, 0xde, 0xaa, 0xcc, 
-    0x93, 0x67, 0xcc, 0x4b, 0x24, 0x9d, 0x96, 0x98, 0x6d, 0x24, 0xbd, 0xe8, 0xb2, 0xd6, 0xed, 0x0a, 
-    0x82, 0x22, 0x31, 0xb1, 0xb9, 0x05, 0xf6, 0x7a, 0x3c, 0x9c, 0xb8, 0xc5, 0x26, 0x65, 0x6a, 0x72, 
-    0xd2, 0x83, 0xb2, 0x4a, 0xba, 0xc1, 0xa8, 0x2c, 0xad, 0xeb, 0xb2, 0x1b, 0xeb, 0x14, 0xe6, 0x9a, 
-    0xba, 0x40, 0xc9, 0x4c, 0x92, 0xa4, 0xc7, 0x5d, 0xc4, 0xf9, 0xed, 0x65, 0x4e, 0xbb, 0x74, 0x40, 
-    0xfb, 0x08, 0x36, 0x0b, 0x65, 0x02, 0x81, 0x81, 0x00, 0xeb, 0x60, 0x01, 0x21, 0x22, 0xa1, 0xde, 
-    0x89, 0x62, 0xfa, 0x68, 0x03, 0x09, 0xf1, 0xa6, 0x14, 0xf0, 0xbe, 0xf7, 0x71, 0x3a, 0x01, 0x85, 
-    0x1f, 0x2c, 0x86, 0xde, 0x4a, 0xfb, 0x35, 0x16, 0xc4, 0x84, 0x22, 0x83, 0x49, 0xeb, 0x0d, 0xf7, 
-    0x33, 0x47, 0x8f, 0x96, 0x37, 0x32, 0xd3, 0xd2, 0xec, 0xea, 0x0f, 0xd0, 0xde, 0x0d, 0x27, 0x9e, 
-    0xc1, 0xf1, 0xe0, 0x39, 0xa6, 0x3e, 0x6c, 0xd4, 0x39, 0xdf, 0xde, 0xbd, 0x4c, 0xb8, 0xe7, 0xb7, 
-    0x4e, 0x2a, 0x32, 0x92, 0x83, 0xd3, 0x12, 0xb9, 0xa1, 0x91, 0x52, 0x46, 0x24, 0x58, 0x05, 0x35, 
-    0x22, 0x5f, 0x10, 0x3c, 0x13, 0x5b, 0xbe, 0x47, 0x5e, 0xbf, 0x85, 0xd6, 0xac, 0xfc, 0xbb, 0xd9, 
-    0x91, 0xf9, 0x50, 0x8f, 0xfc, 0xc2, 0x2c, 0x81, 0x5c, 0xa5, 0xc3, 0xc2, 0x15, 0xbe, 0xf4, 0x72, 
-    0xfd, 0x4d, 0xf0, 0x10, 0x6f, 0xe5, 0xbf, 0x8c, 0xb1  
-    };
-
-#define CERT_DER_LENGTH 968
-UA_Byte CERT_DER_DATA[968] = {
-    0x30, 0x82, 0x03, 0xc4, 0x30, 0x82, 0x02, 0xac, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 
-    0xa7, 0x17, 0x44, 0x2f, 0x8e, 0x6b, 0x74, 0xba, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 
-    0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x39, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 
-    0x04, 0x06, 0x13, 0x02, 0x44, 0x45, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 
-    0x09, 0x6f, 0x70, 0x65, 0x6e, 0x36, 0x32, 0x35, 0x34, 0x31, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 
-    0x55, 0x04, 0x03, 0x0c, 0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x36, 0x32, 0x35, 0x34, 0x31, 0x2e, 0x6f, 
-    0x72, 0x67, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x38, 0x30, 0x33, 0x32, 0x38, 0x30, 0x38, 0x33, 0x33, 
-    0x35, 0x37, 0x5a, 0x17, 0x0d, 0x32, 0x38, 0x30, 0x33, 0x32, 0x35, 0x30, 0x38, 0x33, 0x33, 0x35, 
-    0x37, 0x5a, 0x30, 0x45, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x44, 
-    0x45, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x6f, 0x70, 0x65, 0x6e, 
-    0x36, 0x32, 0x35, 0x34, 0x31, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x19, 
-    0x6f, 0x70, 0x65, 0x6e, 0x36, 0x32, 0x35, 0x34, 0x31, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x40, 
-    0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 
-    0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 
-    0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xe0, 0xc9, 0x91, 0x62, 0xcd, 0x91, 
-    0x68, 0x75, 0x2c, 0x32, 0x7a, 0xdd, 0xf1, 0xd6, 0x64, 0x77, 0x8b, 0x72, 0x9e, 0x14, 0x2a, 0x62, 
-    0x08, 0xd1, 0x89, 0x7d, 0xe2, 0x17, 0xdc, 0xb3, 0xda, 0xbc, 0x3a, 0x9f, 0x84, 0x03, 0xd3, 0x2e, 
-    0x68, 0xbe, 0xc1, 0x57, 0xcb, 0x2a, 0xe2, 0xd6, 0xcf, 0xc4, 0x7f, 0xbd, 0x53, 0x3f, 0xeb, 0x39, 
-    0x98, 0x69, 0xb0, 0x40, 0x14, 0xbf, 0xf5, 0x5a, 0x23, 0x23, 0xf4, 0x4c, 0xf8, 0xf1, 0x03, 0x56, 
-    0x6d, 0x7d, 0x1b, 0x93, 0xd7, 0x0f, 0xc1, 0x8c, 0x70, 0xe0, 0x2c, 0x55, 0x7e, 0xa1, 0xfc, 0x05, 
-    0xe9, 0xd7, 0xea, 0xb1, 0x5c, 0x0f, 0x9b, 0xac, 0x6a, 0x2e, 0xb4, 0xc5, 0xbf, 0x41, 0x8f, 0xda, 
-    0xfc, 0x85, 0xc6, 0xaa, 0x25, 0xe4, 0xb9, 0x9a, 0xc6, 0xd8, 0x9a, 0x31, 0x8a, 0x17, 0x8b, 0x8c, 
-    0x4e, 0x20, 0xd9, 0x71, 0xfc, 0x66, 0x3a, 0xfd, 0x49, 0x95, 0x54, 0xa8, 0xaf, 0x42, 0x5e, 0xba, 
-    0x26, 0xe6, 0xd3, 0xa0, 0xd2, 0x02, 0x3b, 0x51, 0x8b, 0x39, 0xd3, 0x97, 0xd2, 0xe4, 0xd1, 0x01, 
-    0x65, 0xab, 0x8e, 0xa2, 0x80, 0x5b, 0x5e, 0xbb, 0x11, 0x7f, 0x50, 0x1b, 0x2b, 0x0d, 0x20, 0x40, 
-    0xb5, 0xbf, 0xd1, 0x32, 0xfa, 0x25, 0xe1, 0x0d, 0x75, 0xfc, 0x11, 0xcf, 0x21, 0xdd, 0x45, 0x16, 
-    0xe4, 0x56, 0x58, 0x49, 0x33, 0xca, 0xaf, 0xe3, 0x17, 0x7b, 0x7a, 0x8f, 0xb1, 0xec, 0x1c, 0x4d, 
-    0xa2, 0xc2, 0xce, 0x8b, 0x19, 0x4b, 0xc0, 0xc4, 0x36, 0x6a, 0x7c, 0x5b, 0x89, 0x14, 0x98, 0xcb, 
-    0xa9, 0xca, 0x66, 0xf2, 0xaa, 0xf9, 0x12, 0x40, 0x0e, 0x6a, 0x78, 0x4d, 0x1f, 0x54, 0x3c, 0x03, 
-    0x7a, 0x91, 0xf5, 0xb7, 0x3d, 0xe2, 0xfc, 0x65, 0xb7, 0xaa, 0xa9, 0x39, 0x68, 0xa7, 0xdb, 0x29, 
-    0xc1, 0x40, 0x0b, 0x4e, 0xfb, 0xce, 0x74, 0xa5, 0x46, 0xb9, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 
-    0x81, 0xc2, 0x30, 0x81, 0xbf, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 
-    0x60, 0x6e, 0x44, 0x94, 0xa8, 0xa2, 0x4e, 0x7a, 0x3e, 0xe2, 0x4b, 0x84, 0x5e, 0xec, 0x01, 0xc9, 
-    0xa3, 0xf9, 0x69, 0xaf, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 
-    0x14, 0x53, 0x77, 0xe0, 0xa2, 0xf2, 0x49, 0x38, 0xcf, 0x71, 0x58, 0x0a, 0x67, 0xa6, 0xc0, 0x17, 
-    0xd7, 0xb5, 0xdc, 0x52, 0x4b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x02, 0x30, 0x00, 
-    0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x05, 0xe0, 0x30, 0x1d, 0x06, 
-    0x03, 0x55, 0x1d, 0x25, 0x04, 0x16, 0x30, 0x14, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 
-    0x03, 0x01, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x02, 0x30, 0x46, 0x06, 0x03, 
-    0x55, 0x1d, 0x11, 0x04, 0x3f, 0x30, 0x3d, 0x82, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 
-    0x73, 0x74, 0x82, 0x06, 0x64, 0x65, 0x62, 0x69, 0x61, 0x6e, 0x87, 0x04, 0x7f, 0x00, 0x00, 0x01, 
-    0x87, 0x04, 0x00, 0x00, 0x00, 0x00, 0x86, 0x1c, 0x75, 0x72, 0x6e, 0x3a, 0x75, 0x6e, 0x63, 0x6f, 
-    0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x3a, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 
-    0x74, 0x69, 0x6f, 0x6e, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 
-    0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xa4, 0xc1, 0x4f, 0x0e, 0xfe, 0xce, 0x2d, 0x91, 
-    0x8a, 0x51, 0x25, 0xd2, 0x6c, 0x07, 0x86, 0x95, 0xba, 0xc5, 0xe0, 0xad, 0x9b, 0x09, 0x3e, 0x7f, 
-    0x36, 0xc4, 0xa8, 0x10, 0x5b, 0x33, 0x77, 0xe5, 0xb5, 0x3b, 0xd8, 0x98, 0x7c, 0x42, 0x05, 0xcb, 
-    0xb7, 0x91, 0x07, 0x3f, 0x47, 0xff, 0x13, 0x15, 0x45, 0xff, 0x05, 0x03, 0x3d, 0xed, 0x63, 0x96, 
-    0x3a, 0x5c, 0xf8, 0x59, 0xd0, 0xbc, 0x68, 0x8c, 0xfb, 0xf8, 0x29, 0x07, 0x76, 0x63, 0xa7, 0x39, 
-    0xc1, 0x82, 0xc1, 0x10, 0x8b, 0x17, 0xf2, 0x1d, 0x14, 0xdd, 0x88, 0xe7, 0xdc, 0x2f, 0xa7, 0x9d, 
-    0xa3, 0xaa, 0xfd, 0x1a, 0x70, 0xce, 0x57, 0xb5, 0x9f, 0xc3, 0x7b, 0xd0, 0xc0, 0x6f, 0x73, 0x81, 
-    0x74, 0x41, 0x93, 0x0d, 0x0d, 0x1a, 0x95, 0xf6, 0xe4, 0x1c, 0x04, 0x2b, 0x37, 0x4f, 0xf9, 0x99, 
-    0x82, 0x57, 0xf0, 0x4f, 0x14, 0xcb, 0x0f, 0x3d, 0x1a, 0x52, 0x69, 0x18, 0x3f, 0xbe, 0x1c, 0x1c, 
-    0x1b, 0xca, 0xbd, 0xe7, 0xe0, 0x81, 0x44, 0x6d, 0x4a, 0x08, 0x8a, 0xe2, 0x7e, 0x59, 0x9f, 0x89, 
-    0x44, 0x7e, 0x4d, 0xaf, 0x5a, 0x8e, 0xe8, 0xd2, 0x2e, 0x98, 0x72, 0x86, 0xef, 0x7b, 0xcf, 0x88, 
-    0xd0, 0xe2, 0xd5, 0xd9, 0xd5, 0x19, 0xa2, 0x8c, 0xf4, 0x40, 0x98, 0x86, 0x32, 0x9f, 0x3e, 0x25, 
-    0x05, 0xd0, 0xdc, 0xf8, 0x1a, 0x0f, 0xdf, 0xc0, 0x54, 0x46, 0x20, 0xbd, 0xd4, 0xf6, 0xf5, 0xdd, 
-    0x10, 0x2e, 0xa7, 0x1a, 0xf4, 0xbb, 0xed, 0x5d, 0xf3, 0x1c, 0x96, 0x44, 0x81, 0x69, 0xd4, 0x0b, 
-    0xbe, 0x59, 0x07, 0x1b, 0x7f, 0x93, 0xc3, 0x4e, 0x7b, 0x32, 0x51, 0xd0, 0x13, 0x47, 0x57, 0x52, 
-    0xf0, 0x5c, 0x54, 0x36, 0x22, 0xb6, 0xf5, 0x67, 0xbb, 0xd3, 0xa6, 0x43, 0xf0, 0xca, 0x98, 0x91, 
-    0xda, 0x31, 0x3e, 0xd2, 0x8c, 0xfe, 0xd7, 0x51  
-    };
-
-_UA_END_DECLS
-
-#endif /* CERTIFICATES_H_ */
diff --git a/ext/open62541/tests/encryption/check_encryption_basic128rsa15.c b/ext/open62541/tests/encryption/check_encryption_basic128rsa15.c
deleted file mode 100644
index fe95e8d..0000000
--- a/ext/open62541/tests/encryption/check_encryption_basic128rsa15.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2019 (c) Kalycito Infotech Private Limited
- *
- */
-
-#include <open62541/client_config_default.h>
-#include <open62541/plugin/securitypolicy_default.h>
-#include <open62541/server_config_default.h>
-
-#include "client/ua_client_internal.h"
-#include "ua_server_internal.h"
-
-#include <check.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "certificates.h"
-#include "testing_clock.h"
-#include "testing_networklayers.h"
-#include "thread_wrapper.h"
-
-UA_Server *server;
-UA_Boolean running;
-UA_ServerNetworkLayer nl;
-THREAD_HANDLE server_thread;
-
-THREAD_CALLBACK(serverloop) {
-    while(running)
-        UA_Server_run_iterate(server, true);
-    return 0;
-}
-
-static void setup(void) {
-    running = true;
-
-    /* Load certificate and private key */
-    UA_ByteString certificate;
-    certificate.length = CERT_DER_LENGTH;
-    certificate.data = CERT_DER_DATA;
-
-    UA_ByteString privateKey;
-    privateKey.length = KEY_DER_LENGTH;
-    privateKey.data = KEY_DER_DATA;
-
-    /* Load the trustlist */
-    size_t trustListSize = 0;
-    UA_ByteString *trustList = NULL;
-
-    /* Load the issuerList */
-    size_t issuerListSize = 0;
-    UA_ByteString *issuerList = NULL;
-
-    /* TODO test trustList
-    if(argc > 3)
-        trustListSize = (size_t)argc-3;
-    UA_STACKARRAY(UA_ByteString, trustList, trustListSize);
-    for(size_t i = 0; i < trustListSize; i++)
-        trustList[i] = loadFile(argv[i+3]);
-    */
-
-    /* Loading of a revocation list currently unsupported */
-    UA_ByteString *revocationList = NULL;
-    size_t revocationListSize = 0;
-
-    server = UA_Server_new();
-    UA_ServerConfig_setDefaultWithSecurityPolicies(UA_Server_getConfig(server),
-                                                   4840, &certificate, &privateKey,
-                                                   trustList, trustListSize,
-                                                   issuerList, issuerListSize,
-                                                   revocationList, revocationListSize);
-
-    for(size_t i = 0; i < trustListSize; i++)
-        UA_ByteString_deleteMembers(&trustList[i]);
-
-    UA_Server_run_startup(server);
-    THREAD_CREATE(server_thread, serverloop);
-}
-
-static void teardown(void) {
-    running = false;
-    THREAD_JOIN(server_thread);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-START_TEST(encryption_connect) {
-    UA_Client *client = NULL;
-    UA_EndpointDescription* endpointArray = NULL;
-    size_t endpointArraySize = 0;
-    UA_ByteString *trustList = NULL;
-    size_t trustListSize = 0;
-    UA_ByteString *revocationList = NULL;
-    size_t revocationListSize = 0;
-
-    /* Load certificate and private key */
-    UA_ByteString certificate;
-    certificate.length = CERT_DER_LENGTH;
-    certificate.data = CERT_DER_DATA;
-    ck_assert_int_ne(certificate.length, 0);
-
-    UA_ByteString privateKey;
-    privateKey.length = KEY_DER_LENGTH;
-    privateKey.data = KEY_DER_DATA;
-    ck_assert_int_ne(privateKey.length, 0);
-
-    /* The Get endpoint (discovery service) is done with
-     * security mode as none to see the server's capability
-     * and certificate */
-    client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    ck_assert(client != NULL);
-    UA_StatusCode retval = UA_Client_getEndpoints(client, "opc.tcp://localhost:4840",
-                                                  &endpointArraySize, &endpointArray);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert(endpointArraySize > 0);
-
-    UA_Array_delete(endpointArray, endpointArraySize,
-                    &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
-
-    /* TODO test trustList Load revocationList is not supported now
-    if(argc > MIN_ARGS) {
-        trustListSize = (size_t)argc-MIN_ARGS;
-        retval = UA_ByteString_allocBuffer(trustList, trustListSize);
-        if(retval != UA_STATUSCODE_GOOD) {
-            cleanupClient(client, remoteCertificate);
-            return (int)retval;
-        }
-
-        for(size_t trustListCount = 0; trustListCount < trustListSize; trustListCount++) {
-            trustList[trustListCount] = loadFile(argv[trustListCount+3]);
-        }
-    }
-    */
-
-    UA_Client_delete(client);
-
-    /* Secure client initialization */
-    client = UA_Client_new();
-    UA_ClientConfig *cc = UA_Client_getConfig(client);
-    UA_ClientConfig_setDefaultEncryption(cc, certificate, privateKey,
-                                         trustList, trustListSize,
-                                         revocationList, revocationListSize);
-    cc->securityPolicyUri =
-        UA_STRING_ALLOC("http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15");
-    ck_assert(client != NULL);
-
-    for(size_t deleteCount = 0; deleteCount < trustListSize; deleteCount++) {
-        UA_ByteString_deleteMembers(&trustList[deleteCount]);
-    }
-
-    /* Secure client connect */
-    retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Variant val;
-    UA_Variant_init(&val);
-    UA_NodeId nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE);
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Variant_deleteMembers(&val);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-END_TEST
-
-static Suite* testSuite_encryption(void) {
-    Suite *s = suite_create("Encryption");
-    TCase *tc_encryption = tcase_create("Encryption basic128rsa15");
-    tcase_add_checked_fixture(tc_encryption, setup, teardown);
-#ifdef UA_ENABLE_ENCRYPTION
-    tcase_add_test(tc_encryption, encryption_connect);
-#endif /* UA_ENABLE_ENCRYPTION */
-    suite_add_tcase(s,tc_encryption);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_encryption();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/encryption/check_encryption_basic256sha256.c b/ext/open62541/tests/encryption/check_encryption_basic256sha256.c
deleted file mode 100644
index 8ff39c2..0000000
--- a/ext/open62541/tests/encryption/check_encryption_basic256sha256.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2019 (c) Kalycito Infotech Private Limited
- *
- */
-
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <open62541/plugin/securitypolicy.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include "client/ua_client_internal.h"
-#include "ua_server_internal.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "certificates.h"
-#include "check.h"
-#include "testing_clock.h"
-#include "testing_networklayers.h"
-#include "thread_wrapper.h"
-
-UA_Server *server;
-UA_Boolean running;
-UA_ServerNetworkLayer nl;
-THREAD_HANDLE server_thread;
-
-THREAD_CALLBACK(serverloop) {
-    while(running)
-        UA_Server_run_iterate(server, true);
-    return 0;
-}
-
-static void setup(void) {
-    running = true;
-
-    /* Load certificate and private key */
-    UA_ByteString certificate;
-    certificate.length = CERT_DER_LENGTH;
-    certificate.data = CERT_DER_DATA;
-
-    UA_ByteString privateKey;
-    privateKey.length = KEY_DER_LENGTH;
-    privateKey.data = KEY_DER_DATA;
-
-    /* Load the trustlist */
-    size_t trustListSize = 0;
-    UA_ByteString *trustList = NULL;
-
-    /* Load the issuerList */
-    size_t issuerListSize = 0;
-    UA_ByteString *issuerList = NULL;
-
-    /* TODO test trustList
-    if(argc > 3)
-        trustListSize = (size_t)argc-3;
-    UA_STACKARRAY(UA_ByteString, trustList, trustListSize);
-    for(size_t i = 0; i < trustListSize; i++)
-        trustList[i] = loadFile(argv[i+3]);
-    */
-
-    /* Loading of a revocation list currently unsupported */
-    UA_ByteString *revocationList = NULL;
-    size_t revocationListSize = 0;
-
-    server = UA_Server_new();
-    UA_ServerConfig_setDefaultWithSecurityPolicies(UA_Server_getConfig(server),
-                                                   4840, &certificate, &privateKey,
-                                                   trustList, trustListSize,
-                                                   issuerList, issuerListSize,
-                                                   revocationList, revocationListSize);
-
-    for(size_t i = 0; i < trustListSize; i++)
-        UA_ByteString_deleteMembers(&trustList[i]);
-
-    UA_Server_run_startup(server);
-    THREAD_CREATE(server_thread, serverloop);
-}
-
-static void teardown(void) {
-    running = false;
-    THREAD_JOIN(server_thread);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-START_TEST(encryption_connect) {
-    UA_Client *client = NULL;
-    UA_EndpointDescription* endpointArray = NULL;
-    size_t endpointArraySize = 0;
-    UA_ByteString *trustList = NULL;
-    size_t trustListSize = 0;
-    UA_ByteString *revocationList = NULL;
-    size_t revocationListSize = 0;
-
-    /* Load certificate and private key */
-    UA_ByteString certificate;
-    certificate.length = CERT_DER_LENGTH;
-    certificate.data = CERT_DER_DATA;
-    ck_assert_int_ne(certificate.length, 0);
-
-    UA_ByteString privateKey;
-    privateKey.length = KEY_DER_LENGTH;
-    privateKey.data = KEY_DER_DATA;
-    ck_assert_int_ne(privateKey.length, 0);
-
-    /* The Get endpoint (discovery service) is done with
-     * security mode as none to see the server's capability
-     * and certificate */
-    client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    ck_assert(client != NULL);
-    UA_StatusCode retval = UA_Client_getEndpoints(client, "opc.tcp://localhost:4840",
-                                                  &endpointArraySize, &endpointArray);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert(endpointArraySize > 0);
-
-    UA_Array_delete(endpointArray, endpointArraySize,
-                    &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
-
-    /* TODO test trustList Load revocationList is not supported now
-    if(argc > MIN_ARGS) {
-        trustListSize = (size_t)argc-MIN_ARGS;
-        retval = UA_ByteString_allocBuffer(trustList, trustListSize);
-        if(retval != UA_STATUSCODE_GOOD) {
-            cleanupClient(client, remoteCertificate);
-            return (int)retval;
-        }
-
-        for(size_t trustListCount = 0; trustListCount < trustListSize; trustListCount++) {
-            trustList[trustListCount] = loadFile(argv[trustListCount+3]);
-        }
-    }
-    */
-
-    UA_Client_delete(client);
-
-    /* Secure client initialization */
-    client = UA_Client_new();
-    UA_ClientConfig *cc = UA_Client_getConfig(client);
-    UA_ClientConfig_setDefaultEncryption(cc, certificate, privateKey,
-                                         trustList, trustListSize,
-                                         revocationList, revocationListSize);
-    cc->securityPolicyUri =
-        UA_STRING_ALLOC("http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256");
-    ck_assert(client != NULL);
-
-    for(size_t deleteCount = 0; deleteCount < trustListSize; deleteCount++) {
-        UA_ByteString_deleteMembers(&trustList[deleteCount]);
-    }
-
-    /* Secure client connect */
-    retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Variant val;
-    UA_Variant_init(&val);
-    UA_NodeId nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE);
-    retval = UA_Client_readValueAttribute(client, nodeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Variant_deleteMembers(&val);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-END_TEST
-
-static Suite* testSuite_encryption(void) {
-    Suite *s = suite_create("Encryption");
-    TCase *tc_encryption = tcase_create("Encryption basic256sha256");
-    tcase_add_checked_fixture(tc_encryption, setup, teardown);
-#ifdef UA_ENABLE_ENCRYPTION
-    tcase_add_test(tc_encryption, encryption_connect);
-#endif /* UA_ENABLE_ENCRYPTION */
-    suite_add_tcase(s,tc_encryption);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_encryption();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/fuzz/CMakeLists.txt b/ext/open62541/tests/fuzz/CMakeLists.txt
deleted file mode 100644
index d695f45..0000000
--- a/ext/open62541/tests/fuzz/CMakeLists.txt
+++ /dev/null
@@ -1,111 +0,0 @@
-get_property(open62541_BUILD_INCLUDE_DIRS TARGET open62541 PROPERTY INTERFACE_INCLUDE_DIRECTORIES)

-include_directories(${open62541_BUILD_INCLUDE_DIRS})

-# ua_server_internal.h

-include_directories("${PROJECT_SOURCE_DIR}/src")

-include_directories("${PROJECT_SOURCE_DIR}/src/server")

-# testing_clock.h

-include_directories("${PROJECT_SOURCE_DIR}/tests/testing-plugins")

-

-if(NOT MSVC)

-    add_definitions(-Wno-deprecated-declarations)

-endif()

-

-if (UA_BUILD_FUZZING_CORPUS)

-    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

-

-    add_definitions(-DUA_CORPUS_OUTPUT_DIR="${PROJECT_BINARY_DIR}/corpus/custom")

-    file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/corpus/custom)

-

-    add_executable(corpus_generator ua_debug_dump_pkgs_file.c corpus_generator.c)

-    target_link_libraries(corpus_generator open62541 ${open62541_LIBRARIES})

-    assign_source_group(corpus_generator)

-    set_target_properties(corpus_generator PROPERTIES FOLDER "open62541/corpus_generator")

-    set_target_properties(corpus_generator PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/bin")

-    return()

-endif()

-

-

-remove_definitions(-std=c99 -Wmissing-prototypes -Wstrict-prototypes)

-set (CMAKE_CXX_STANDARD 11)

-

-if (NOT UA_BUILD_OSS_FUZZ)

-

-    if(NOT "x${CMAKE_C_COMPILER_ID}" STREQUAL "xClang")

-        MESSAGE(FATAL_ERROR "To build fuzzing, you need to use Clang as the compiler")

-    endif()

-

-    # oss-fuzz builds already include these flags

-    if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)

-        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O1 -fsanitize=address")

-        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O1 -fsanitize=address")

-    else()

-        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer -gline-tables-only -fsanitize=address -fsanitize-address-use-after-scope -fsanitize-coverage=trace-pc-guard,trace-cmp")

-        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -gline-tables-only -fsanitize=address -fsanitize-address-use-after-scope -fsanitize-coverage=trace-pc-guard,trace-cmp")

-    endif()

-    set(LIBS Fuzzer)

-    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})

-else()

-    set(LIBS $ENV{LIB_FUZZING_ENGINE})

-    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $ENV{OUT})

-endif()

-list(APPEND LIBS "${open62541_LIBRARIES}")

-

-# Use different plugins for testing

-set(fuzzing_plugin_sources ${PROJECT_SOURCE_DIR}/arch/network_tcp.c

-    ${PROJECT_SOURCE_DIR}/tests/testing-plugins/testing_clock.c

-    ${PROJECT_SOURCE_DIR}/tests/testing-plugins/testing_networklayers.c

-    ${PROJECT_SOURCE_DIR}/plugins/ua_log_stdout.c

-    ${PROJECT_SOURCE_DIR}/plugins/ua_config_default.c

-    ${PROJECT_SOURCE_DIR}/plugins/ua_nodestore_default.c

-    ${PROJECT_SOURCE_DIR}/plugins/ua_accesscontrol_default.c

-    ${PROJECT_SOURCE_DIR}/plugins/ua_pki_default.c

-    ${PROJECT_SOURCE_DIR}/plugins/securityPolicies/ua_securitypolicy_none.c

-)

-

-if(UA_ENABLE_ENCRYPTION)

-  list(APPEND fuzzing_plugin_sources

-       ${PROJECT_SOURCE_DIR}/plugins/securityPolicies/securitypolicy_mbedtls_common.c

-              ${PROJECT_SOURCE_DIR}/plugins/securityPolicies/ua_securitypolicy_basic128rsa15.c

-              ${PROJECT_SOURCE_DIR}/plugins/securityPolicies/ua_securitypolicy_basic256.c

-              ${PROJECT_SOURCE_DIR}/plugins/securityPolicies/ua_securitypolicy_basic256sha256.c)

-endif()

-

-add_library(open62541-fuzzplugins OBJECT

-            ${fuzzing_plugin_sources}

-            ${PROJECT_SOURCE_DIR}/arch/${UA_ARCHITECTURE}/ua_architecture_functions.c)

-add_dependencies(open62541-fuzzplugins open62541)

-

-# the fuzzer test are built directly on the open62541 object files. so they can

-# access symbols that are hidden/not exported to the shared library

-

-set(FUZZER_TARGETS)

-

-macro(add_fuzzer FUZZER_NAME FUZZER_SOURCE)

-    add_executable(${FUZZER_NAME} $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-fuzzplugins> ${FUZZER_SOURCE} ${ARGN})

-    target_link_libraries(${FUZZER_NAME} ${LIBS})

-    target_include_directories(${FUZZER_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/src/server)

-    assign_source_group(${FUZZER_SOURCE})

-    list(APPEND FUZZER_TARGETS ${FUZZER_NAME})

-endmacro()

-

-# Add new fuzzers here

-add_fuzzer(fuzz_binary_message fuzz_binary_message.cc)

-add_fuzzer(fuzz_binary_decode fuzz_binary_decode.cc)

-add_fuzzer(fuzz_src_ua_util fuzz_src_ua_util.cc)

-

-if(UA_ENABLE_JSON_ENCODING)

-    add_fuzzer(fuzz_json_decode fuzz_json_decode.cc)

-    add_fuzzer(fuzz_json_decode_encode fuzz_json_decode_encode.cc)

-endif()

-

-file(GLOB CORPUS_FILES ${PROJECT_SOURCE_DIR}/tests/fuzz/fuzz_binary_message_corpus/generated/*)

-

-SET(CORPUS_CMDS "")

-FOREACH(f ${CORPUS_FILES})

-    LIST(APPEND CORPUS_CMDS COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/fuzz_binary_message "${f}")

-ENDFOREACH(f)

-

-add_custom_target(run_fuzzer ${CORPUS_CMDS}

-                  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}

-                  DEPENDS ${FUZZER_TARGETS}

-                  ${MAYBE_USES_TERMINAL})

diff --git a/ext/open62541/tests/fuzz/README.md b/ext/open62541/tests/fuzz/README.md
deleted file mode 100644
index 7cda5f1..0000000
--- a/ext/open62541/tests/fuzz/README.md
+++ /dev/null
@@ -1,63 +0,0 @@
-I Can haz fuzz
-==============
-
-open62541 is continuously tested with the awesome oss-fuzz project from Google:
-https://github.com/google/oss-fuzz
-
-Currently tested is processing of binary messages and encoding/decoding of
-binary encoded data.
-
-Reproduce locally
------------------
-
-### Reproduce build failure
-
-You can just execute the script under `tests/fuzz/check_build.sh`, which does the following:
-
-```bash
-# clone oss-fuzz repo
-cd oss-fuzz
-# Change $OPEN62541_DIR to your local checkout of open62541
-python infra/helper.py build_fuzzers --sanitizer address open62541 $OPEN62541_DIR && python infra/helper.py check_build --sanitizer address open62541
-```
-
-### Reproduce issues
-
-Download the testcase file and store it e.g. in your Download folder.
-
-```bash
-# clone oss-fuzz repo
-cd oss-fuzz
-# Change $OPEN62541_DIR to your local checkout of open62541
-# And change $DOWNLOADS to your download location
-python infra/helper.py build_fuzzers --sanitizer address open62541 $OPEN62541_DIR && python infra/helper.py reproduce open62541 fuzz_binary_decode $DOWNLOADS/clusterfuzz-testcase-minimized-fuzz_binary_decode-5686300273803264
-```
-
-Status
-------
-
-* [Build status](https://oss-fuzz-build-logs.storage.googleapis.com/index.html)
-* [Open issues](https://bugs.chromium.org/p/oss-fuzz/issues/list?q=label:Proj-open62541)
-
-Update the corpus
------------------
-
-To update the current corpus used for fuzzing you need to follow these steps.
-It will execute all the unit tests, dump the received data packages to a directory
-and then update and merge the corpus.
-
-1. The script will create two directories: `open62541/build_fuzz` and `open62541/build_corpus`.
-   Make sure that these directories are not existing or do not contain any important data.
-
-2. Run the generate script:
-
-   `open62541/tests/fuzz/generate_corpus.sh`
-   
-   This script will build all the unit tests, dump the packages and then merge the current 
-   corpus with the new packages. 
-    
-3. If there is new coverage with the generated data there will be new files in the directory:
-
-   `open62541/fuzz/fuzz_binary_message_corpus/generated`
-   
-   Commit the new files and then you can delete the build directories created in step 1.
diff --git a/ext/open62541/tests/fuzz/check_build.sh b/ext/open62541/tests/fuzz/check_build.sh
deleted file mode 100644
index 32587cd..0000000
--- a/ext/open62541/tests/fuzz/check_build.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-git clone https://github.com/google/oss-fuzz $HOME/oss-fuzz
-python $HOME/oss-fuzz/infra/helper.py build_fuzzers --sanitizer address open62541 $TRAVIS_BUILD_DIR && python $HOME/oss-fuzz/infra/helper.py check_build --sanitizer address open62541
diff --git a/ext/open62541/tests/fuzz/corpus_generator.c b/ext/open62541/tests/fuzz/corpus_generator.c
deleted file mode 100644
index 4096d17..0000000
--- a/ext/open62541/tests/fuzz/corpus_generator.c
+++ /dev/null
@@ -1,597 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/**
- * This code is used to generate a binary file for every request type
- * which can be sent from a client to the server.
- * These files form the basic corpus for fuzzing the server.
- * This script is intended to be executed manually and then commit the new
- * corpus to the repository.
- */
-
-#ifndef UA_DEBUG_DUMP_PKGS_FILE
-#error UA_DEBUG_DUMP_PKGS_FILE must be defined
-#endif
-
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <open62541/client_subscriptions.h>
-#include <open62541/server_config_default.h>
-#include <open62541/types.h>
-
-#include "client/ua_client_internal.h"
-#include <server/ua_server_internal.h>
-
-#include <dirent.h>
-#include <fcntl.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <sys/stat.h>
-
-UA_Server *server;
-UA_Boolean running;
-pthread_t server_thread;
-
-static void * serverloop(void *_) {
-    while(running)
-        UA_Server_run_iterate(server, true);
-    return NULL;
-}
-
-static void start_server(void) {
-    running = true;
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    config->applicationDescription.applicationType = UA_APPLICATIONTYPE_SERVER;
-    config->discovery.mdnsEnable = true;
-    config->discovery.mdns.mdnsServerName = UA_String_fromChars("Sample Multicast Server");
-
-    UA_Server_run_startup(server);
-    pthread_create(&server_thread, NULL, serverloop, NULL);
-}
-
-static void teardown_server(void) {
-    running = false;
-    pthread_join(server_thread, NULL);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-static void emptyCorpusDir(void) {
-    DIR *theFolder = opendir(UA_CORPUS_OUTPUT_DIR);
-    struct dirent *next_file;
-    char filepath[400];
-
-    while ( (next_file = readdir(theFolder)) != NULL ) {
-        // build the path for each file in the folder
-        sprintf(filepath, "%s/%s", UA_CORPUS_OUTPUT_DIR, next_file->d_name);
-        remove(filepath);
-    }
-    closedir(theFolder);
-}
-
-#define ASSERT_GOOD(X) if (X != UA_STATUSCODE_GOOD) return X;
-
-/*************************************************
- * The following list of client requests is based
- * on ua_server_binary.c:getServicePointers to
- * cover all possible services and their inputs
- ************************************************/
-
-static UA_StatusCode
-findServersRequest(UA_Client *client) {
-    UA_ApplicationDescription* applicationDescriptionArray = NULL;
-    size_t applicationDescriptionArraySize = 0;
-
-    size_t serverUrisSize = 1;
-    UA_String *serverUris = UA_String_new();
-    serverUris[0] = UA_String_fromChars("urn:some:server:uri");
-
-    size_t localeIdsSize = 1;
-    UA_String *localeIds = UA_String_new();
-    localeIds[0] = UA_String_fromChars("en");
-
-    ASSERT_GOOD(UA_Client_findServers(client, "opc.tcp://localhost:4840",
-                                  serverUrisSize, serverUris, localeIdsSize, localeIds,
-                                  &applicationDescriptionArraySize, &applicationDescriptionArray));
-
-    UA_Array_delete(serverUris, serverUrisSize, &UA_TYPES[UA_TYPES_STRING]);
-    UA_Array_delete(localeIds, localeIdsSize, &UA_TYPES[UA_TYPES_STRING]);
-    UA_Array_delete(applicationDescriptionArray, applicationDescriptionArraySize,
-                    &UA_TYPES[UA_TYPES_APPLICATIONDESCRIPTION]);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-findServersOnNetworkRequest(UA_Client *client) {
-    UA_ServerOnNetwork* serverOnNetwork = NULL;
-    size_t serverOnNetworkSize = 0;
-
-
-    size_t  serverCapabilityFilterSize = 2;
-    UA_String *serverCapabilityFilter = (UA_String*)UA_malloc(sizeof(UA_String) * serverCapabilityFilterSize);
-    serverCapabilityFilter[0] = UA_String_fromChars("LDS");
-    serverCapabilityFilter[1] = UA_String_fromChars("NA");
-
-
-    ASSERT_GOOD(UA_Client_findServersOnNetwork(client, "opc.tcp://localhost:4840", 0, 0,
-                                           serverCapabilityFilterSize, serverCapabilityFilter,
-                                           &serverOnNetworkSize, &serverOnNetwork));
-
-    UA_Array_delete(serverCapabilityFilter, serverCapabilityFilterSize,
-                        &UA_TYPES[UA_TYPES_STRING]);
-    UA_Array_delete(serverOnNetwork, serverOnNetworkSize, &UA_TYPES[UA_TYPES_SERVERONNETWORK]);
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-initUaRegisterServer(UA_RegisteredServer *requestServer) {
-    requestServer->isOnline = UA_TRUE;
-    requestServer->serverUri = server->config.applicationDescription.applicationUri;
-    requestServer->productUri = server->config.applicationDescription.productUri;
-    requestServer->serverType = server->config.applicationDescription.applicationType;
-    requestServer->gatewayServerUri = server->config.applicationDescription.gatewayServerUri;
-
-    // create the semaphore
-    int fd = open("/tmp/open62541-corpus-semaphore", O_RDWR|O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO);
-    close(fd);
-    requestServer->semaphoreFilePath = UA_STRING("/tmp/open62541-corpus-semaphore");
-
-    requestServer->serverNames = &server->config.applicationDescription.applicationName;
-    requestServer->serverNamesSize = 1;
-
-    size_t nl_discurls = server->config.networkLayersSize;
-    requestServer->discoveryUrls = (UA_String*)UA_malloc(sizeof(UA_String) * nl_discurls);
-    requestServer->discoveryUrlsSize = nl_discurls;
-    for(size_t i = 0; i < nl_discurls; ++i) {
-        UA_ServerNetworkLayer *nl = &server->config.networkLayers[i];
-        requestServer->discoveryUrls[i] = nl->discoveryUrl;
-    }
-
-}
-
-static UA_StatusCode
-registerServerRequest(UA_Client *client) {
-    /* Prepare the request. Do not cleanup the request after the service call,
-     * as the members are stack-allocated or point into the server config. */
-    UA_RegisterServerRequest request;
-    UA_RegisterServerRequest_init(&request);
-    /* Copy from RegisterServer2 request */
-    request.requestHeader.timestamp = UA_DateTime_now();
-    request.requestHeader.timeoutHint = 10000;
-
-    initUaRegisterServer(&request.server);
-
-
-    UA_RegisterServerResponse response;
-    UA_RegisterServerResponse_init(&response);
-
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_REGISTERSERVERREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_REGISTERSERVERRESPONSE]);
-
-    UA_free(request.server.discoveryUrls);
-    ASSERT_GOOD(response.responseHeader.serviceResult);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-registerServer2Request(UA_Client *client) {
-    /* Prepare the request. Do not cleanup the request after the service call,
-     * as the members are stack-allocated or point into the server config. */
-    UA_RegisterServer2Request request;
-    UA_RegisterServer2Request_init(&request);
-    request.requestHeader.timestamp = UA_DateTime_now();
-    request.requestHeader.timeoutHint = 10000;
-
-    initUaRegisterServer(&request.server);
-
-    request.discoveryConfigurationSize = 1;
-    request.discoveryConfiguration = UA_ExtensionObject_new();
-    UA_ExtensionObject_init(&request.discoveryConfiguration[0]);
-    // Set to NODELETE so that we can just use a pointer to the mdns config
-    request.discoveryConfiguration[0].encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
-    request.discoveryConfiguration[0].content.decoded.type = &UA_TYPES[UA_TYPES_MDNSDISCOVERYCONFIGURATION];
-    request.discoveryConfiguration[0].content.decoded.data = &server->config.discovery.mdns;
-
-    // First try with RegisterServer2, if that isn't implemented, use RegisterServer
-    UA_RegisterServer2Response response;
-    UA_RegisterServer2Response_init(&response);
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_REGISTERSERVER2REQUEST],
-                        &response, &UA_TYPES[UA_TYPES_REGISTERSERVER2RESPONSE]);
-
-    ASSERT_GOOD(response.responseHeader.serviceResult);
-    UA_free(request.server.discoveryUrls);
-    UA_ExtensionObject_delete(request.discoveryConfiguration);
-
-    UA_RegisterServer2Response_deleteMembers(&response);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-readValueRequest(UA_Client *client) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STARTTIME);
-    rvi.attributeId = UA_ATTRIBUTEID_VALUE;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_BOTH);
-    ASSERT_GOOD(resp.status);
-
-    UA_DataValue_deleteMembers(&resp);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-writeValueRequest(UA_Client *client) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_LocalizedText testValue = UA_LOCALIZEDTEXT("en-EN", "MyServer");
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-    wValue.value.hasValue = true;
-    wValue.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
-    wValue.attributeId = UA_ATTRIBUTEID_DISPLAYNAME;
-    ASSERT_GOOD(UA_Server_write(server, &wValue));
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-browseAndBrowseNextRequest(UA_Client *client) {
-    // Browse node in server folder
-    UA_BrowseRequest bReq;
-    UA_BrowseRequest_init(&bReq);
-    // normally is set to 0, to get all the nodes, but we want to test browse next
-    bReq.requestedMaxReferencesPerNode = 1;
-    bReq.nodesToBrowse = UA_BrowseDescription_new();
-    bReq.nodesToBrowseSize = 1;
-    bReq.nodesToBrowse[0].nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
-    bReq.nodesToBrowse[0].resultMask = UA_BROWSERESULTMASK_ALL;
-
-    UA_BrowseResponse bResp = UA_Client_Service_browse(client, bReq);
-    ASSERT_GOOD(bResp.responseHeader.serviceResult);
-
-    // browse next
-    UA_BrowseNextRequest bNextReq;
-    UA_BrowseNextRequest_init(&bNextReq);
-    // normally is set to 0, to get all the nodes, but we want to test browse next
-    bNextReq.releaseContinuationPoints = UA_FALSE;
-    bNextReq.continuationPoints = &bResp.results[0].continuationPoint;
-    bNextReq.continuationPointsSize = 1;
-
-    UA_BrowseNextResponse bNextResp = UA_Client_Service_browseNext(client, bNextReq);
-    ASSERT_GOOD(bNextResp.responseHeader.serviceResult);
-
-    UA_BrowseNextResponse_deleteMembers(&bNextResp);
-
-    bNextResp = UA_Client_Service_browseNext(client, bNextReq);
-    ASSERT_GOOD(bNextResp.responseHeader.serviceResult);
-
-    UA_BrowseNextResponse_deleteMembers(&bNextResp);
-
-    // release continuation point. Result is then empty
-    bNextReq.releaseContinuationPoints = UA_TRUE;
-    bNextResp = UA_Client_Service_browseNext(client, bNextReq);
-    UA_BrowseNextResponse_deleteMembers(&bNextResp);
-    ASSERT_GOOD(bNextResp.responseHeader.serviceResult);
-
-    UA_BrowseRequest_deleteMembers(&bReq);
-    UA_BrowseResponse_deleteMembers(&bResp);
-    // already deleted by browse request
-    bNextReq.continuationPoints = NULL;
-    bNextReq.continuationPointsSize = 0;
-    UA_BrowseNextRequest_deleteMembers(&bNextReq);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-registerUnregisterNodesRequest(UA_Client *client) {
-    UA_RegisterNodesRequest req;
-    UA_RegisterNodesRequest_init(&req);
-
-    req.nodesToRegister = UA_NodeId_new();
-    req.nodesToRegister[0] = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME);
-    req.nodesToRegisterSize = 1;
-
-    UA_RegisterNodesResponse res = UA_Client_Service_registerNodes(client, req);
-    ASSERT_GOOD(res.responseHeader.serviceResult);
-
-    UA_UnregisterNodesRequest reqUn;
-    UA_UnregisterNodesRequest_init(&reqUn);
-
-    reqUn.nodesToUnregister = UA_NodeId_new();
-    reqUn.nodesToUnregister[0] = res.registeredNodeIds[0];
-    reqUn.nodesToUnregisterSize = 1;
-
-    UA_UnregisterNodesResponse resUn = UA_Client_Service_unregisterNodes(client, reqUn);
-    ASSERT_GOOD(resUn.responseHeader.serviceResult);
-
-    UA_UnregisterNodesRequest_deleteMembers(&reqUn);
-    UA_UnregisterNodesResponse_deleteMembers(&resUn);
-    UA_RegisterNodesRequest_deleteMembers(&req);
-    UA_RegisterNodesResponse_deleteMembers(&res);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-translateBrowsePathsToNodeIdsRequest(UA_Client *client) {
-    // Just for testing we want to translate the following path to its corresponding node id
-    // /Objects/Server/ServerStatus/State
-    // Equals the following node IDs:
-    // /85/2253/2256/2259
-
-    #define BROWSE_PATHS_SIZE 3
-    char *paths[BROWSE_PATHS_SIZE] = {"Server", "ServerStatus", "State"};
-    UA_UInt32 ids[BROWSE_PATHS_SIZE] = {UA_NS0ID_ORGANIZES, UA_NS0ID_HASCOMPONENT, UA_NS0ID_HASCOMPONENT};
-    UA_BrowsePath browsePath;
-    UA_BrowsePath_init(&browsePath);
-    browsePath.startingNode = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    browsePath.relativePath.elements = (UA_RelativePathElement*)UA_Array_new(BROWSE_PATHS_SIZE, &UA_TYPES[UA_TYPES_RELATIVEPATHELEMENT]);
-    browsePath.relativePath.elementsSize = BROWSE_PATHS_SIZE;
-
-    for(size_t i = 0; i < BROWSE_PATHS_SIZE; i++) {
-        UA_RelativePathElement *elem = &browsePath.relativePath.elements[i];
-        elem->referenceTypeId = UA_NODEID_NUMERIC(0, ids[i]);
-        elem->targetName = UA_QUALIFIEDNAME_ALLOC(0, paths[i]);
-    }
-
-    UA_TranslateBrowsePathsToNodeIdsRequest request;
-    UA_TranslateBrowsePathsToNodeIdsRequest_init(&request);
-    request.browsePaths = &browsePath;
-    request.browsePathsSize = 1;
-
-    UA_TranslateBrowsePathsToNodeIdsResponse response = UA_Client_Service_translateBrowsePathsToNodeIds(client, request);
-    ASSERT_GOOD(response.responseHeader.serviceResult);
-
-    UA_BrowsePath_deleteMembers(&browsePath);
-    UA_TranslateBrowsePathsToNodeIdsResponse_deleteMembers(&response);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-
-static void
-monitoredItemHandler(UA_Client *client, UA_UInt32 subId, void *subContext,
-                     UA_UInt32 monId, void *monContext, UA_DataValue *value) {
-}
-
-static UA_StatusCode
-subscriptionRequests(UA_Client *client) {
-    UA_UInt32 subId;
-    // createSubscriptionRequest
-    UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();
-    UA_CreateSubscriptionResponse response = UA_Client_Subscriptions_create(client, request,
-                                                                            NULL, NULL, NULL);
-
-    ASSERT_GOOD(response.responseHeader.serviceResult);
-    subId = response.subscriptionId;
-
-    // modifySubscription
-    UA_ModifySubscriptionRequest modifySubscriptionRequest;
-    UA_ModifySubscriptionRequest_init(&modifySubscriptionRequest);
-    modifySubscriptionRequest.subscriptionId = subId;
-    modifySubscriptionRequest.maxNotificationsPerPublish = request.maxNotificationsPerPublish;
-    modifySubscriptionRequest.priority = request.priority;
-    modifySubscriptionRequest.requestedLifetimeCount = request.requestedLifetimeCount;
-    modifySubscriptionRequest.requestedMaxKeepAliveCount = request.requestedMaxKeepAliveCount;
-    modifySubscriptionRequest.requestedPublishingInterval = request.requestedPublishingInterval;
-    UA_ModifySubscriptionResponse modifySubscriptionResponse;
-    __UA_Client_Service(client, &modifySubscriptionRequest, &UA_TYPES[UA_TYPES_MODIFYSUBSCRIPTIONREQUEST],
-                        &modifySubscriptionResponse, &UA_TYPES[UA_TYPES_MODIFYSUBSCRIPTIONRESPONSE]);
-    ASSERT_GOOD(modifySubscriptionResponse.responseHeader.serviceResult);
-    UA_ModifySubscriptionRequest_deleteMembers(&modifySubscriptionRequest);
-    UA_ModifySubscriptionResponse_deleteMembers(&modifySubscriptionResponse);
-
-    // setPublishingMode
-    UA_SetPublishingModeRequest setPublishingModeRequest;
-    UA_SetPublishingModeRequest_init(&setPublishingModeRequest);
-    setPublishingModeRequest.subscriptionIdsSize = 1;
-    setPublishingModeRequest.subscriptionIds = UA_UInt32_new();
-    setPublishingModeRequest.subscriptionIds[0] = subId;
-    setPublishingModeRequest.publishingEnabled = UA_TRUE;
-    UA_SetPublishingModeResponse setPublishingModeResponse;
-    __UA_Client_Service(client, &setPublishingModeRequest, &UA_TYPES[UA_TYPES_SETPUBLISHINGMODEREQUEST],
-                        &setPublishingModeResponse, &UA_TYPES[UA_TYPES_SETPUBLISHINGMODERESPONSE]);
-    ASSERT_GOOD(setPublishingModeResponse.responseHeader.serviceResult);
-    UA_SetPublishingModeRequest_deleteMembers(&setPublishingModeRequest);
-    UA_SetPublishingModeResponse_deleteMembers(&setPublishingModeResponse);
-    
-
-    // createMonitoredItemsRequest
-    UA_UInt32 monId;
-    UA_MonitoredItemCreateRequest monRequest =
-        UA_MonitoredItemCreateRequest_default(UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STATE));
-
-    UA_MonitoredItemCreateResult monResponse =
-        UA_Client_MonitoredItems_createDataChange(client, response.subscriptionId,
-                                                  UA_TIMESTAMPSTORETURN_BOTH,
-                                                  monRequest, NULL, monitoredItemHandler, NULL);
-
-    ASSERT_GOOD(monResponse.statusCode);
-    monId = monResponse.monitoredItemId;
-
-    // publishRequest
-    UA_PublishRequest publishRequest;
-    UA_PublishRequest_init(&publishRequest);
-    ASSERT_GOOD(UA_Client_preparePublishRequest(client, &publishRequest));
-    UA_PublishResponse publishResponse;
-    __UA_Client_Service(client, &publishRequest, &UA_TYPES[UA_TYPES_PUBLISHREQUEST],
-                        &publishResponse, &UA_TYPES[UA_TYPES_PUBLISHRESPONSE]);
-    // here we don't care about the return value since it may be UA_STATUSCODE_BADMESSAGENOTAVAILABLE
-    // ASSERT_GOOD(publishResponse.responseHeader.serviceResult);
-    UA_PublishRequest_deleteMembers(&publishRequest);
-    UA_PublishResponse_deleteMembers(&publishResponse);
-
-    // republishRequest
-    UA_RepublishRequest republishRequest;
-    UA_RepublishRequest_init(&republishRequest);
-    republishRequest.retransmitSequenceNumber = 0;
-    republishRequest.subscriptionId = subId;
-    UA_RepublishResponse republishResponse;
-    __UA_Client_Service(client, &republishRequest, &UA_TYPES[UA_TYPES_REPUBLISHREQUEST],
-                        &republishResponse, &UA_TYPES[UA_TYPES_REPUBLISHRESPONSE]);
-    // here we don't care about the return value since it may be UA_STATUSCODE_BADMESSAGENOTAVAILABLE
-    // ASSERT_GOOD(republishResponse.responseHeader.serviceResult);
-    UA_RepublishRequest_deleteMembers(&republishRequest);
-    UA_RepublishResponse_deleteMembers(&republishResponse);
-
-    // modifyMonitoredItems
-    UA_ModifyMonitoredItemsRequest modifyMonitoredItemsRequest;
-    UA_ModifyMonitoredItemsRequest_init(&modifyMonitoredItemsRequest);
-    modifyMonitoredItemsRequest.subscriptionId = subId;
-    modifyMonitoredItemsRequest.itemsToModifySize = 1;
-    modifyMonitoredItemsRequest.itemsToModify = UA_MonitoredItemModifyRequest_new();
-    modifyMonitoredItemsRequest.itemsToModify[0].monitoredItemId = monId;
-    UA_MonitoringParameters_init(&modifyMonitoredItemsRequest.itemsToModify[0].requestedParameters);
-    UA_ModifyMonitoredItemsResponse modifyMonitoredItemsResponse;
-    __UA_Client_Service(client, &modifyMonitoredItemsRequest, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSREQUEST],
-                        &modifyMonitoredItemsResponse, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSRESPONSE]);
-    ASSERT_GOOD(modifyMonitoredItemsResponse.responseHeader.serviceResult);
-    UA_ModifyMonitoredItemsRequest_deleteMembers(&modifyMonitoredItemsRequest);
-    UA_ModifyMonitoredItemsResponse_deleteMembers(&modifyMonitoredItemsResponse);
-    
-    // setMonitoringMode
-    UA_SetMonitoringModeRequest setMonitoringModeRequest;
-    UA_SetMonitoringModeRequest_init(&setMonitoringModeRequest);
-    setMonitoringModeRequest.subscriptionId = subId;
-    setMonitoringModeRequest.monitoredItemIdsSize = 1;
-    setMonitoringModeRequest.monitoredItemIds = UA_UInt32_new();
-    setMonitoringModeRequest.monitoredItemIds[0] = monId;
-    setMonitoringModeRequest.monitoringMode = UA_MONITORINGMODE_REPORTING;
-    UA_SetMonitoringModeResponse setMonitoringModeResponse;
-    __UA_Client_Service(client, &setMonitoringModeRequest, &UA_TYPES[UA_TYPES_SETMONITORINGMODEREQUEST],
-                        &setMonitoringModeResponse, &UA_TYPES[UA_TYPES_SETMONITORINGMODERESPONSE]);
-    ASSERT_GOOD(setMonitoringModeResponse.responseHeader.serviceResult);
-    UA_SetMonitoringModeRequest_deleteMembers(&setMonitoringModeRequest);
-    UA_SetMonitoringModeResponse_deleteMembers(&setMonitoringModeResponse);
-
-    // deleteMonitoredItemsRequest
-    ASSERT_GOOD(UA_Client_MonitoredItems_deleteSingle(client, subId, monId));
-
-
-    // deleteSubscriptionRequest
-    ASSERT_GOOD(UA_Client_Subscriptions_deleteSingle(client, subId));
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-callRequest(UA_Client *client) {
-    /* Set up the request */
-    UA_CallRequest request;
-    UA_CallRequest_init(&request);
-    UA_CallMethodRequest item;
-    UA_CallMethodRequest_init(&item);
-    item.methodId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_GETMONITOREDITEMS);
-    item.objectId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
-
-    UA_Variant input;
-    UA_UInt32 subId = 12345;
-    UA_Variant_init(&input);
-    UA_Variant_setScalarCopy(&input, &subId, &UA_TYPES[UA_TYPES_UINT32]);
-    item.inputArgumentsSize = 1;
-    item.inputArguments = &input;
-
-    request.methodsToCall = &item;
-    request.methodsToCallSize = 1;
-
-    /* Call the service */
-    UA_CallResponse response = UA_Client_Service_call(client, request);
-    ASSERT_GOOD(response.responseHeader.serviceResult);
-
-    UA_CallResponse_deleteMembers(&response);
-    UA_Variant_deleteMembers(&input);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-nodemanagementRequests(UA_Client *client) {
-    UA_ObjectAttributes attr = UA_ObjectAttributes_default;
-    attr.description = UA_LOCALIZEDTEXT("en-US", "Some Coordinates");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US", "Coordinates");
-
-    UA_NodeId newObjectId;
-    ASSERT_GOOD(UA_Client_addObjectNode(client, UA_NODEID_NULL,
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                     UA_QUALIFIEDNAME(1, "Coordinates"),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), attr, &newObjectId));
-
-    UA_ExpandedNodeId target = UA_EXPANDEDNODEID_NULL;
-    target.nodeId = newObjectId;
-    ASSERT_GOOD(UA_Client_addReference(client, UA_NODEID_NUMERIC(0, UA_NS0ID_ROOTFOLDER),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                       UA_TRUE, UA_STRING_NULL, target, UA_NODECLASS_OBJECT));
-
-    ASSERT_GOOD(UA_Client_deleteReference(client, UA_NODEID_NUMERIC(0, UA_NS0ID_ROOTFOLDER),
-                                          UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                          true, target, true));
-
-    ASSERT_GOOD(UA_Client_deleteNode(client, newObjectId, UA_TRUE));
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-executeClientServices(UA_Client *client) {
-    ASSERT_GOOD(findServersRequest(client));
-    ASSERT_GOOD(findServersOnNetworkRequest(client));
-    ASSERT_GOOD(registerServerRequest(client));
-    ASSERT_GOOD(registerServer2Request(client));
-    ASSERT_GOOD(readValueRequest(client));
-    ASSERT_GOOD(writeValueRequest(client));
-    ASSERT_GOOD(browseAndBrowseNextRequest(client));
-    ASSERT_GOOD(registerUnregisterNodesRequest(client));
-    ASSERT_GOOD(translateBrowsePathsToNodeIdsRequest(client));
-    ASSERT_GOOD(subscriptionRequests(client));
-    ASSERT_GOOD(callRequest(client));
-    ASSERT_GOOD(nodemanagementRequests(client));
-
-    return UA_STATUSCODE_GOOD;
-}
-
-int main(void) {
-    emptyCorpusDir();
-    start_server();
-
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    // this will also call getEndpointsRequest
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    if(retval == UA_STATUSCODE_GOOD)
-        retval = executeClientServices(client);
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-
-    if(retval == UA_STATUSCODE_GOOD) {
-        // now also connect with user/pass so that fuzzer also knows how to do that
-        client = UA_Client_new();
-        UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-        retval = UA_Client_connect_username(client, "opc.tcp://localhost:4840", "user", "password");
-        retval = retval == UA_STATUSCODE_BADUSERACCESSDENIED ? UA_STATUSCODE_GOOD : retval;
-        UA_Client_disconnect(client);
-        UA_Client_delete(client);
-    }
-
-    teardown_server();
-
-    if(retval != UA_STATUSCODE_GOOD) {
-        printf("\n--------- AN ERROR OCCURRED ----------\nStatus = %s\n", UA_StatusCode_name(retval));
-        exit(1);
-    } else {
-        printf("\n--------- SUCCESS -------\nThe corpus is stored in %s", UA_CORPUS_OUTPUT_DIR);
-    }
-    return 0;
-}
diff --git a/ext/open62541/tests/fuzz/custom_memory_manager.c b/ext/open62541/tests/fuzz/custom_memory_manager.c
deleted file mode 100644
index 05e1000..0000000
--- a/ext/open62541/tests/fuzz/custom_memory_manager.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) Stefan Profanter, fortiss GmbH
- */
-
-/**
- * This memory manager allows to manually reduce the available RAM.
- *
- * It keeps track of malloc and free calls and counts the available RAM.
- * If the requested memory allocation results in hitting the limit,
- * it will return NULL and prevent the new allocation.
- */
-
-#include "custom_memory_manager.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <limits.h>
-
-#include <pthread.h>
-
-pthread_mutex_t mutex;
-
-struct UA_mm_entry {
-    size_t size;
-    void* address;
-    struct UA_mm_entry *next;
-    struct UA_mm_entry *prev;
-};
-
-unsigned long long totalMemorySize = 0;
-unsigned long long memoryLimit = ULONG_MAX;
-
-/*
- * Head and Tail of the double linked list
- */
-struct UA_mm_entry *address_map_first = NULL;
-struct UA_mm_entry *address_map_last = NULL;
-
-void UA_memoryManager_setLimit(unsigned long long newLimit) {
-    memoryLimit = newLimit;
-    //printf("MemoryManager: Setting memory limit to %lld\n", newLimit);
-}
-
-int UA_memoryManager_setLimitFromLast4Bytes(const uint8_t *data, size_t size) {
-    if (size <4)
-        return 0;
-    // just cast the last 4 bytes to uint32
-    const uint32_t *newLimit = (const uint32_t*)(uintptr_t)&(data[size-4]);
-    UA_memoryManager_setLimit(*newLimit);
-    return 1;
-}
-
-/**
- * Add address entry to the linked list after it was allocated.
- *
- * @param size Size of the allocated memory block
- * @param addr Address of the allocated memory block
- * @return 1 on success, 0 if it failed
- */
-static int addToMap(size_t size, void *addr) {
-    struct UA_mm_entry *newEntry = (struct UA_mm_entry*)malloc(sizeof(struct UA_mm_entry));
-    if (!newEntry) {
-        //printf("MemoryManager: Could not allocate memory");
-        return 0;
-    }
-    newEntry->size = size;
-    newEntry->address = addr;
-    newEntry->next = NULL;
-    pthread_mutex_lock(&mutex);
-    newEntry->prev = address_map_last;
-    if (address_map_last)
-        address_map_last->next = newEntry;
-    address_map_last = newEntry;
-    totalMemorySize += size;
-    if (address_map_first == NULL) {
-        address_map_first = newEntry;
-    }
-    pthread_mutex_unlock(&mutex);
-    //printf("Total size (malloc): %lld And new address: %p Entry %p\n", totalMemorySize, addr, (void*)newEntry);
-
-    return 1;
-}
-
-/**
- * Remove entry from the list before the memory block is freed.
- *
- * @param addr Address of the memory block which is freed.
- *
- * @return 1 on success, 0 if the memory block was not found in the list.
- */
-static int removeFromMap(void *addr) {
-    if (addr == NULL)
-        return 1;
-
-
-    pthread_mutex_lock(&mutex);
-
-    struct UA_mm_entry *e = address_map_last;
-
-    while (e) {
-        if (e->address == addr) {
-            if (e == address_map_first)
-                address_map_first = e->next;
-            if (e == address_map_last)
-                address_map_last = e->prev;
-            if (e->prev) {
-                e->prev->next = e->next;
-            }
-            if (e->next) {
-                e->next->prev = e->prev;
-            }
-            totalMemorySize -= e->size;
-
-            //printf("Total size (free): %lld after addr %p and deleting %p\n", totalMemorySize, addr, (void*)e);
-            free(e);
-            pthread_mutex_unlock(&mutex);
-            return 1;
-        }
-        e = e->prev;
-    }
-    pthread_mutex_unlock(&mutex);
-    printf("MemoryManager: Entry with address %p not found", addr);
-    return 0;
-}
-
-void* UA_memoryManager_malloc(size_t size) {
-    if (totalMemorySize + size > memoryLimit)
-        return NULL;
-    void *addr = malloc(size);
-    if (!addr)
-        return NULL;
-    addToMap(size, addr);
-    return addr;
-}
-
-void* UA_memoryManager_calloc(size_t num, size_t size) {
-    if (totalMemorySize + (size * num) > memoryLimit)
-        return NULL;
-    void *addr = calloc(num, size);
-    if (!addr)
-        return NULL;
-    addToMap(size*num, addr);
-    return addr;
-}
-
-void* UA_memoryManager_realloc(void *ptr, size_t new_size) {
-    removeFromMap(ptr);
-    if (totalMemorySize + new_size > memoryLimit)
-        return NULL;
-    void *addr = realloc(ptr, new_size);
-    if (!addr)
-        return NULL;
-    addToMap(new_size, addr);
-    return addr;
-
-}
-
-void UA_memoryManager_free(void* ptr) {
-    removeFromMap(ptr);
-    free(ptr);
-}
-
diff --git a/ext/open62541/tests/fuzz/custom_memory_manager.h b/ext/open62541/tests/fuzz/custom_memory_manager.h
deleted file mode 100644
index 89c0347..0000000
--- a/ext/open62541/tests/fuzz/custom_memory_manager.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifndef OPEN62541_CUSTOM_MEMORY_MANAGER_H
-#define OPEN62541_CUSTOM_MEMORY_MANAGER_H
-
-#include <open62541/types.h>
-
-_UA_BEGIN_DECLS
-
-/**
- * Set memory limit for memory manager.
- * This allows to reduce the available memory (RAM) for fuzzing tests.
- *
- * @param maxMemory Available memory in bytes
- */
-void UA_EXPORT UA_memoryManager_setLimit(unsigned long long maxMemory);
-
-/**
- * Extract the memory limit from the last four bytes of the byte array.
- * The last four bytes will simply be casted to a uint32_t and that value
- * represents the new memory limit.
- *
- * @param data byte array
- * @param size size of the byte array
- * @return 1 on success, 0 if the byte array is too short
- */
-int UA_EXPORT UA_memoryManager_setLimitFromLast4Bytes(const uint8_t *data, size_t size);
-
-_UA_END_DECLS
-
-#endif /* OPEN62541_CUSTOM_MEMORY_MANAGER_H */
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_decode.cc b/ext/open62541/tests/fuzz/fuzz_binary_decode.cc
deleted file mode 100644
index 3057618..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_decode.cc
+++ /dev/null
@@ -1,125 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "custom_memory_manager.h"
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server_config_default.h>
-#include <open62541/types.h>
-
-#include "ua_server_internal.h"
-#include "ua_types_encoding_binary.h"
-
-
-static UA_Boolean tortureEncoding(const uint8_t *data, size_t size, size_t *newOffset) {
-    *newOffset = 0;
-    if (size <= 2)
-        return UA_FALSE;
-
-    // get some random type
-    uint16_t typeIndex = (uint16_t)(data[0] | data[1] << 8);
-    data += 2;
-    size -= 2;
-
-    if (typeIndex >= UA_TYPES_COUNT)
-        return UA_FALSE;
-
-    void *dst = UA_new(&UA_TYPES[typeIndex]);
-
-    if (!dst)
-        return UA_FALSE;
-
-    const UA_ByteString binary = {
-            size, //length
-            (UA_Byte *) (void *) data
-    };
-
-    UA_StatusCode ret = UA_decodeBinary(&binary, newOffset, dst, &UA_TYPES[typeIndex], NULL);
-
-    if (ret == UA_STATUSCODE_GOOD) {
-        // copy the datatype to test
-        void *dstCopy = UA_new(&UA_TYPES[typeIndex]);
-        if (!dstCopy)
-            return UA_FALSE;
-        UA_copy(dst, dstCopy, &UA_TYPES[typeIndex]);
-        UA_delete(dstCopy, &UA_TYPES[typeIndex]);
-
-        // now also test encoding
-        UA_ByteString encoded;
-        UA_ByteString_allocBuffer(&encoded, *newOffset);
-        const UA_Byte *end = &encoded.data[*newOffset];
-        UA_Byte *pos = encoded.data;
-        ret = UA_encodeBinary(dst, &UA_TYPES[typeIndex], &pos, &end, NULL, NULL);
-        if (ret == UA_STATUSCODE_GOOD) {
-            // do nothing
-        }
-        UA_ByteString_deleteMembers(&encoded);
-    }
-    UA_delete(dst, &UA_TYPES[typeIndex]);
-
-    return UA_TRUE;
-}
-
-static UA_Boolean tortureExtensionObject(const uint8_t *data, size_t size, size_t *newOffset) {
-    *newOffset = 0;
-    // check if there is still enough data to create an extension object
-    // we need at least a nodeid.numeric which equals to 4 bytes
-    if (size < 4)
-        return UA_FALSE;
-
-    UA_UInt32 identifier = (UA_UInt32)(data[0] | data[1] << 8 | data[2] << 16 | data[3] << 24);
-    size-= 4;
-
-
-    UA_NodeId objectId = UA_NODEID_NUMERIC(0, identifier);
-
-    UA_ExtensionObject obj;
-    UA_ExtensionObject_init(&obj);
-    obj.encoding = UA_EXTENSIONOBJECT_ENCODED_BYTESTRING;
-    obj.content.encoded.typeId = objectId;
-    obj.content.encoded.body.length = size;
-    obj.content.encoded.body.data = (UA_Byte*)(void*)data; // discard const. We are sure that we don't change it
-
-    const UA_DataType *type = UA_findDataTypeByBinary(&obj.content.encoded.typeId);
-
-    UA_StatusCode ret = UA_STATUSCODE_GOOD;
-    if (type) {
-        void *dstCopy = UA_new(type);
-        if (!dstCopy)
-            return UA_FALSE;
-        ret = UA_decodeBinary(&obj.content.encoded.body, newOffset, dstCopy, type, NULL);
-
-        if (ret == UA_STATUSCODE_GOOD) {
-            UA_Variant var;
-            UA_Variant_init(&var);
-            UA_Variant_setScalar(&var, dstCopy, type);
-        }
-        UA_delete(dstCopy, type);
-    }
-    return ret==UA_STATUSCODE_GOOD;
-}
-
-/*
-** Main entry point.  The fuzzer invokes this function with each
-** fuzzed input.
-*/
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
-
-    if (!UA_memoryManager_setLimitFromLast4Bytes(data, size))
-        return 0;
-    size -= 4;
-
-    size_t offset;
-    if (!tortureEncoding(data, size, &offset)) {
-        return 0;
-    }
-    if (offset >= size)
-        return 0;
-
-
-    tortureExtensionObject(&data[offset], size-offset, &offset);
-
-
-    return 0;
-}
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message.cc b/ext/open62541/tests/fuzz/fuzz_binary_message.cc
deleted file mode 100644
index 599aad6..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message.cc
+++ /dev/null
@@ -1,63 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "custom_memory_manager.h"
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/server_config_default.h>
-#include <open62541/types.h>
-
-#include "ua_server_internal.h"
-
-#include "testing_networklayers.h"
-
-#define RECEIVE_BUFFER_SIZE 65535
-
-/*
-** Main entry point.  The fuzzer invokes this function with each
-** fuzzed input.
-*/
-extern "C" int
-LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
-
-    if (!UA_memoryManager_setLimitFromLast4Bytes(data, size))
-        return 0;
-    size -= 4;
-
-    UA_Connection c = createDummyConnection(RECEIVE_BUFFER_SIZE, NULL);
-    UA_Server *server = UA_Server_new();
-    if(!server) {
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "Could not create server instance using UA_Server_new");
-        return 0;
-    }
-
-    UA_StatusCode retval = UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Server_delete(server);
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "Could not set the server config");
-        return 0;
-    }
-
-    // we need to copy the message because it will be freed in the processing function
-    UA_ByteString msg = UA_ByteString();
-    retval = UA_ByteString_allocBuffer(&msg, size);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Server_delete(server);
-        UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
-                     "Could not allocate message buffer");
-        return 0;
-    }
-    memcpy(msg.data, data, size);
-
-    UA_Server_processBinaryMessage(server, &c, &msg);
-    // if we got an invalid chunk, the message is not deleted, so delete it here
-    UA_ByteString_deleteMembers(&msg);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-    c.close(&c);
-    UA_Connection_deleteMembers(&c);
-    return 0;
-}
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message.options b/ext/open62541/tests/fuzz/fuzz_binary_message.options
deleted file mode 100644
index 5992b0e..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message.options
+++ /dev/null
@@ -1,2 +0,0 @@
-[libfuzzer]
-dict = fuzz_binary_message_header.dict
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/1d6d4004d0a22c324410fd9df02d7477c1c66f79 b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/1d6d4004d0a22c324410fd9df02d7477c1c66f79
deleted file mode 100644
index 55b3f9b..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/1d6d4004d0a22c324410fd9df02d7477c1c66f79
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/2469be236b03b891b0371fc00f659be7ecaf48a5 b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/2469be236b03b891b0371fc00f659be7ecaf48a5
deleted file mode 100644
index 300915d..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/2469be236b03b891b0371fc00f659be7ecaf48a5
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/2bb7608575acec126e3dd72a71c98b45756cdc17 b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/2bb7608575acec126e3dd72a71c98b45756cdc17
deleted file mode 100644
index d1fe312..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/2bb7608575acec126e3dd72a71c98b45756cdc17
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/2e985938f94ec3ffb5d68fdea9f7a57527300c54 b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/2e985938f94ec3ffb5d68fdea9f7a57527300c54
deleted file mode 100644
index 7ec1331..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/2e985938f94ec3ffb5d68fdea9f7a57527300c54
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/3571f2e3699024bbd13426c1c1e0fb6a2be080b7 b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/3571f2e3699024bbd13426c1c1e0fb6a2be080b7
deleted file mode 100644
index 60739c6..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/3571f2e3699024bbd13426c1c1e0fb6a2be080b7
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/3cbe2dd022994d8b2aecf44d85207c45d270283b b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/3cbe2dd022994d8b2aecf44d85207c45d270283b
deleted file mode 100644
index 5703e9b..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/3cbe2dd022994d8b2aecf44d85207c45d270283b
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/3dd5bc5b48941232b09f72ff1fa2f53f1123695e b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/3dd5bc5b48941232b09f72ff1fa2f53f1123695e
deleted file mode 100644
index 4ebde29..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/3dd5bc5b48941232b09f72ff1fa2f53f1123695e
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/4d008f20a34ba50a523a62d6b5449935f1ad3125 b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/4d008f20a34ba50a523a62d6b5449935f1ad3125
deleted file mode 100644
index 28f3432..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/4d008f20a34ba50a523a62d6b5449935f1ad3125
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/55783816d6936aee3ce44915f575a621b8c41f88 b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/55783816d6936aee3ce44915f575a621b8c41f88
deleted file mode 100644
index b966255..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/55783816d6936aee3ce44915f575a621b8c41f88
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/61861286a164b848cf3ba3460ac43de4299e055d b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/61861286a164b848cf3ba3460ac43de4299e055d
deleted file mode 100644
index ea74b45..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/61861286a164b848cf3ba3460ac43de4299e055d
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/6fdcec03ea094f77554f81c634d752d7372176f2 b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/6fdcec03ea094f77554f81c634d752d7372176f2
deleted file mode 100644
index 18d53dd..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/6fdcec03ea094f77554f81c634d752d7372176f2
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/8c7195ba09cde70328ce616296580f88c1868ce9 b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/8c7195ba09cde70328ce616296580f88c1868ce9
deleted file mode 100644
index cd56fdb..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/8c7195ba09cde70328ce616296580f88c1868ce9
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/8c8167bbf8c029729fde0630d4f00873058780a2 b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/8c8167bbf8c029729fde0630d4f00873058780a2
deleted file mode 100644
index 582ff9a..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/8c8167bbf8c029729fde0630d4f00873058780a2
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/92f427417e4c921678f4a65a71dd77feadedb93b b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/92f427417e4c921678f4a65a71dd77feadedb93b
deleted file mode 100644
index c9a3942..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/92f427417e4c921678f4a65a71dd77feadedb93b
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/a64af70c8e80f73918426271b02f2a43dfdf3c58 b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/a64af70c8e80f73918426271b02f2a43dfdf3c58
deleted file mode 100644
index 8214147..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/a64af70c8e80f73918426271b02f2a43dfdf3c58
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/ad7eca3743c2383c57df920f02539f684b3ffcc3 b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/ad7eca3743c2383c57df920f02539f684b3ffcc3
deleted file mode 100644
index b192943..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/ad7eca3743c2383c57df920f02539f684b3ffcc3
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/af1c80d18c06c16ba6067c3cf9526e04c5682f5a b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/af1c80d18c06c16ba6067c3cf9526e04c5682f5a
deleted file mode 100644
index 4fdbb11..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/af1c80d18c06c16ba6067c3cf9526e04c5682f5a
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/b7568f0dc026fa16ca737c6643353ac75b79c149 b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/b7568f0dc026fa16ca737c6643353ac75b79c149
deleted file mode 100644
index 786fa5c..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/b7568f0dc026fa16ca737c6643353ac75b79c149
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/ddf2be2fcdaa07a3d7adf0cd9d3c5c8339d97fff b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/ddf2be2fcdaa07a3d7adf0cd9d3c5c8339d97fff
deleted file mode 100644
index 949e200..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/ddf2be2fcdaa07a3d7adf0cd9d3c5c8339d97fff
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/e7710c8ad29b5310c48e3fcfdf01195c210048f6 b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/e7710c8ad29b5310c48e3fcfdf01195c210048f6
deleted file mode 100644
index 7b09a58..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/e7710c8ad29b5310c48e3fcfdf01195c210048f6
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/fbef981b62c06122e22da3512d733cb51f093795 b/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/fbef981b62c06122e22da3512d733cb51f093795
deleted file mode 100644
index f9299f4..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_corpus/generated/fbef981b62c06122e22da3512d733cb51f093795
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tests/fuzz/fuzz_binary_message_header.dict b/ext/open62541/tests/fuzz/fuzz_binary_message_header.dict
deleted file mode 100644
index 9a107f0..0000000
--- a/ext/open62541/tests/fuzz/fuzz_binary_message_header.dict
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# AFL dictionary for OPC UA messages
-# -----------------------------
-#
-#
-# Stefan Profanter <git@s.profanter.me>
-#
-
-# Message header for final message (see Spec Part 6, Table 26)
-
-header_msg_final="MSGF"
-header_err_final="ERRF"
-header_opn_final="OPNF"
-header_hel_final="HELF"
-header_ack_final="ACKF"
-header_clo_final="CLOF"
-
-# Message header for message chunk (see Spec Part 6, Table 26)
-
-header_msg_chunk="MSGC"
-header_err_chunk="ERRC"
-header_opn_chunk="OPNC"
-header_hel_chunk="HELC"
-header_ack_chunk="ACKC"
-header_clo_chunk="CLOC"
-
-# Message header for message abort (see Spec Part 6, Table 26)
-
-header_msg_abort="MSGA"
-header_err_abort="ERRA"
-header_opn_abort="OPNA"
-header_hel_abort="HELA"
-header_ack_abort="ACKA"
-header_clo_abort="CLOA"
-
-# TODO add dict for Security Header and Sequence Header
\ No newline at end of file
diff --git a/ext/open62541/tests/fuzz/fuzz_json/json_corpus b/ext/open62541/tests/fuzz/fuzz_json/json_corpus
deleted file mode 100644
index f9b67aa..0000000
--- a/ext/open62541/tests/fuzz/fuzz_json/json_corpus
+++ /dev/null
@@ -1,65 +0,0 @@
-{"Locale":"t1","Text":"t2"}
-{"Id":42}
-{"Type":1,"Body":false}
-{"Value":{"Type":1,"Body":true}}
-{"Type":1, "Body":false, "Type":1}
-{"Type":1,"Body":[null, null, null]}
-{"Type":12,"Body":["1","2","3","4","5","6","7","8"]}
-{"Type":12,"Body":["1","2","3","4","5","6","7","8"],"Dimension":[2,4]}
-{"Encoding":2,"TypeId":{"Id":42},"Body":"<Element></Element>"}
-{"Encoding":1,"TypeId":{"Id":42},"Body":"YXNkZmFzZGY="}
-{"TypeId":{"Id":1},"Body":true}
-{"Type":23,"Body":null}
-{"Value":{"Type":1,"Body":true}}
-{"Value":{"Type":1,"Body":true},"Status":2153250816,"SourceTimestamp":"1970-01-15T06:56:07Z","SourcePicoseconds":0,"ServerTimestamp":"1970-01-15T06:56:07Z","ServerPicoseconds":0}
-{"Type":25,"Body":null}
-{"SymbolicId":13,""LocalizedText":14,""Locale":12,"AdditionalInfo":"additionalInfo",""InnerStatusCode":2155216896,""InnerDiagnosticInfo":{"AdditionalInfo":"INNER ADDITION INFO"}}
-{"IdType":3,"Id":"YXNkZmFzZGY=","Namespace":"test","ServerUri":13}
-{"IdType":1,"Id":"test","Namespace":"test","ServerUri":13}
-{"IdType":1,"Id":"test","Namespace":42}
-{"IdType":1,"Id":"test","Namespace":"abcdef"}
-{"IdType":1,"Id":"test"}
-{"Id":42}
-{"IdType":3,"Id":"YXNkZmFzZGY="}
-{"IdType":2,"Id":"00000001-0002-0003-0405-060708090A0B"}
-{"IdType":1,"Id":"test123"}
-{"Id":42,"Namespace":123}
-{"Id":42}
-{"Timestamp":"1970-01-15T06:56:07Z","ViewVersion":1236,"ViewId":{"Id":"00000009-0002-027C-F3BF-BB7BEEFEEFBE","IdType":2}}
-{"Type":21,"Body":null}
-{"Locale":"t1"}
-{"Locale":"t1","Text":"t2"}
-{"Type":20,"Body":null}
-{"Name":"derName","Uri":1}
-1970-01-02T01:02:03.042Z
-1970-01-02T01:02:03.005Z
-{"Type":19,"Body":0}
-{"Type":19,"Body":2}
-{"Type":14,"Body":"00000=01-0002-0003-0405-060708090A0B"}
-{"Type":14,"Body":"00000001-0002-0003-0405-060708090A0B00000001"}
-{"Type":14,"Body":"00000001-00"}
-{"Type":14,"Body":"00000001-0002-0003-0405-060708090A0B"}
-{"Type":15,"Body":null}
-{"Type":15,"Body":"YXNkZmFzZGY="}
-{"Type":12,"Body":"\\u002c"}
-{"Type":12,"Body":"ab\\tcdef"}
-{"Type":12,"Body":"abcdef"}
-{"Type":11,"Body":nan}
-{"Type":11,"Body":1.0000000000000002}
-{"Type":11,"Body":1}
-{"Type":11,"Body":1.1234}
-{"Type":10,"Body":1}
-{"Type":10,"Body":3.1415927410}
-{"Type":8,"Body":9223372036854775807}
-{"Type":8,"Body":-9223372036854775808}
-{"Type":6,"Body":2147483647}
-{"Type":6,"Body":-2147483648}
-{"Type":4,"Body":32767}
-{"Type":4,"Body":-32768}
-{"Type":2,"Body":127}
-{"Type":2,"Body":-128}
-{"Type":9,"Body":18446744073709551615}
-{"Type":9,"Body":0}
-{"Type":7,"Body":4294967295}
-{"Type":7,"Body":0}
-{"Type":5,"Body":65535}
\ No newline at end of file
diff --git a/ext/open62541/tests/fuzz/fuzz_json_decode.cc b/ext/open62541/tests/fuzz/fuzz_json_decode.cc
deleted file mode 100644
index 70e532a..0000000
--- a/ext/open62541/tests/fuzz/fuzz_json_decode.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) Fraunhofer IOSB (Author: Lukas Meling)
- */
-
-
-#include <open62541/types.h>
-#include <open62541/types_generated_handling.h>
-#include "ua_types_encoding_json.h"
-
-/*
-** Main entry point.  The fuzzer invokes this function with each
-** fuzzed input.
-*/
-extern "C" int
-LLVMFuzzerTestOneInput(uint8_t *data, size_t size) {
-    UA_ByteString buf;
-    buf.data = (UA_Byte*)data;
-    buf.length = size;
-
-    UA_Variant out;
-    UA_Variant_init(&out);
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
-    if(retval == UA_STATUSCODE_GOOD)
-        UA_Variant_deleteMembers(&out);
-
-    return 0;
-}
diff --git a/ext/open62541/tests/fuzz/fuzz_json_decode_encode.cc b/ext/open62541/tests/fuzz/fuzz_json_decode_encode.cc
deleted file mode 100644
index b0f4f82..0000000
--- a/ext/open62541/tests/fuzz/fuzz_json_decode_encode.cc
+++ /dev/null
@@ -1,78 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- */
-
-#include <open62541/types.h>
-#include <open62541/types_generated_handling.h>
-#include "ua_types_encoding_json.h"
-
-/* Decode a message, then encode, decode, encode.
- * The two encodings must be bit-equal. */
-extern "C" int
-LLVMFuzzerTestOneInput(uint8_t *data, size_t size) {
-    UA_ByteString buf;
-    buf.data = (UA_Byte*)data;
-    buf.length = size;
-
-    UA_Variant value;
-    UA_Variant_init(&value);
-
-    UA_StatusCode retval = UA_decodeJson(&buf, &value, &UA_TYPES[UA_TYPES_VARIANT]);
-    if(retval != UA_STATUSCODE_GOOD)
-        return 0;
-
-    size_t jsonSize = UA_calcSizeJson(&value, &UA_TYPES[UA_TYPES_VARIANT],
-                                      NULL, 0, NULL, 0, true);
-
-    UA_ByteString buf2 = UA_BYTESTRING_NULL;
-    retval = UA_ByteString_allocBuffer(&buf2, jsonSize);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Variant_deleteMembers(&value);
-        return 0;
-    }
-
-    uint8_t *bufPos = buf2.data;
-    const uint8_t *bufEnd = &buf2.data[buf2.length];
-    retval = UA_encodeJson(&value, &UA_TYPES[UA_TYPES_VARIANT],
-                           &bufPos, &bufEnd, NULL, 0, NULL, 0, true);
-	UA_Variant_deleteMembers(&value);
-	if(retval != UA_STATUSCODE_GOOD || bufPos != bufEnd) {
-		return 0;
-	}
-
-    UA_Variant value2;
-    UA_Variant_init(&value2);
-
-    retval = UA_decodeJson(&buf2, &value2, &UA_TYPES[UA_TYPES_VARIANT]);
-    if(retval != UA_STATUSCODE_GOOD) {
-		return 0;
-	}
-
-    UA_ByteString buf3 = UA_BYTESTRING_NULL;
-    retval = UA_ByteString_allocBuffer(&buf3, jsonSize);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_Variant_deleteMembers(&value2);
-        UA_ByteString_deleteMembers(&buf2);
-        return 0;
-    }
-
-    bufPos = buf3.data;
-    bufEnd = &buf3.data[buf3.length];
-    retval = UA_encodeJson(&value2, &UA_TYPES[UA_TYPES_VARIANT],
-                           &bufPos, &bufEnd, NULL, 0, NULL, 0, true);
-	UA_Variant_deleteMembers(&value2);
-	if(retval != UA_STATUSCODE_GOOD) {
-		UA_ByteString_deleteMembers(&buf2);
-		UA_ByteString_deleteMembers(&buf3);
-		return 0;
-	}
-
-    UA_assert(buf2.length == buf3.length);
-    UA_assert(memcmp(buf2.data, buf3.data, buf2.length) == 0);
-    UA_ByteString_deleteMembers(&buf2);
-    UA_ByteString_deleteMembers(&buf3);
-    return 0;
-}
diff --git a/ext/open62541/tests/fuzz/fuzz_src_ua_util.cc b/ext/open62541/tests/fuzz/fuzz_src_ua_util.cc
deleted file mode 100644
index 5e4cace..0000000
--- a/ext/open62541/tests/fuzz/fuzz_src_ua_util.cc
+++ /dev/null
@@ -1,63 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "custom_memory_manager.h"
-
-#include <open62541/util.h>
-
-
-static int tortureParseEndpointUrl(const uint8_t *data, size_t size) {
-    const UA_String endpointUrl = {
-        size, (UA_Byte* )(void*)data
-    };
-
-    UA_String hostname;
-    UA_UInt16 port;
-    UA_String path;
-    UA_parseEndpointUrl(&endpointUrl, &hostname, &port, &path);
-    return 0;
-}
-
-static int tortureParseEndpointUrlEthernet(const uint8_t *data, size_t size) {
-    const UA_String endpointUrl = {
-        size, (UA_Byte* )(void*)data
-    };
-
-    UA_String target;
-    UA_UInt16 vid;
-    UA_Byte prid;
-    UA_parseEndpointUrlEthernet(&endpointUrl, &target, &vid, &prid);
-    return 0;
-}
-
-/*
-** Main entry point.  The fuzzer invokes this function with each
-** fuzzed input.
-*/
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
-
-    if (!UA_memoryManager_setLimitFromLast4Bytes(data, size))
-        return 0;
-    size -= 4;
-
-    if (size == 0)
-        return 0;
-
-    // use first byte to decide which function should be fuzzed
-
-    const uint8_t select = data[0];
-
-    const uint8_t *newData = &data[1];
-    size_t  newSize = size-1;
-
-    switch(select) {
-        case 0:
-            return tortureParseEndpointUrl(newData, newSize);
-        case 1:
-            return tortureParseEndpointUrlEthernet(newData, newSize);
-        default:
-            return 0;
-    }
-
-}
diff --git a/ext/open62541/tests/fuzz/fuzz_src_ua_util.options b/ext/open62541/tests/fuzz/fuzz_src_ua_util.options
deleted file mode 100644
index ad22743..0000000
--- a/ext/open62541/tests/fuzz/fuzz_src_ua_util.options
+++ /dev/null
@@ -1,2 +0,0 @@
-[libfuzzer]
-dict = fuzz_src_ua_util_endpoints.dict
diff --git a/ext/open62541/tests/fuzz/fuzz_src_ua_util_endpoints.dict b/ext/open62541/tests/fuzz/fuzz_src_ua_util_endpoints.dict
deleted file mode 100644
index 14334b5..0000000
--- a/ext/open62541/tests/fuzz/fuzz_src_ua_util_endpoints.dict
+++ /dev/null
@@ -1,16 +0,0 @@
-#
-# AFL dictionary for OPC UA Endpoints
-# -----------------------------
-#
-#
-# Stefan Profanter <git@s.profanter.me>
-#
-
-endpoint_http="opc.http"
-endpoint_tcp="opc.tcp"
-endpoint_udp="opc.udp"
-endpoint_udp="opc.eth"
-endpoint_proto="://"
-endpoint_host="localhost"
-endpoint_delim="/"
-endpoint_port=":123"
diff --git a/ext/open62541/tests/fuzz/generate_corpus.sh b/ext/open62541/tests/fuzz/generate_corpus.sh
deleted file mode 100644
index cfd6d5e..0000000
--- a/ext/open62541/tests/fuzz/generate_corpus.sh
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-
-BASE_DIR="$( cd "$DIR/../../" && pwd )"
-
-BUILD_DIR_FUZZ_MODE="$DIR/../../build_fuzz"
-if [ ! -d "$BUILD_DIR_FUZZ_MODE" ]; then
-    mkdir $BUILD_DIR_FUZZ_MODE
-fi
-BUILD_DIR_FUZZ_MODE="$( cd "$DIR/../../build_fuzz" && pwd )"
-
-BUILD_DIR_CORPUS="$DIR/../../build_corpus"
-if [ ! -d "$BUILD_DIR_CORPUS" ]; then
-    mkdir $BUILD_DIR_CORPUS
-fi
-BUILD_DIR_CORPUS="$( cd "$DIR/../../build_corpus" && pwd )"
-
-cd $BUILD_DIR_CORPUS
-if [ -d "$BUILD_DIR_CORPUS/corpus" ]; then
-    rm -rf "$BUILD_DIR_CORPUS/corpus"
-fi
-
-if [ -z ${TRAVIS+x} ]; then
-	export CC=clang
-	export CXX=clang++
-else
-	# Travis needs a specific
-	export CC=clang-6.0
-	export CXX=clang++-6.0
-fi
-# First build and run the unit tests without any specific fuzz settings
-cmake -DUA_BUILD_FUZZING_CORPUS=ON -DUA_BUILD_UNIT_TESTS=ON -DUA_ENABLE_DISCOVERY_MULTICAST=ON -DUA_ENABLE_ENCRYPTION=ON ..
-make -j && make test ARGS="-V"
-if [ $? -ne 0 ] ; then exit 1 ; fi
-# Run our special generator
-$BUILD_DIR_CORPUS/bin/corpus_generator
-if [ $? -ne 0 ] ; then exit 1 ; fi
-
-# Now build the fuzzer executables
-cd $BUILD_DIR_FUZZ_MODE
-cmake -DUA_BUILD_FUZZING=ON ..
-make -j
-if [ $? -ne 0 ] ; then exit 1 ; fi
-
-merge_corpus() {
-    local fuzzer="$1"
-    local corpus_existing="$2"
-    local corpus_new="$3"
-
-
-    if [ -d "$corpus_existing" ]; then
-        echo "Merging ${corpus_new} into ${corpus_existing}"
-        "$fuzzer" -merge=1 "$corpus_existing" "${corpus_new}"
-    else
-        echo "Copying ${corpus_new} into ${corpus_existing}"
-        cp -r ${corpus_new} ${corpus_existing}
-    fi
-}
-
-
-# Iterate over all files and combine single message files to a full interaction, i.e.,
-# After running the corpus generator, the output directory contains single files for each
-# message (HEL, OPN, MSG..., CLO). Fuzzer needs these files to be combined into one single file
-
-
-
-
-
-CORPUS_SINGLE=$BUILD_DIR_CORPUS/corpus
-CORPUS_COMBINED=$BUILD_DIR_CORPUS/corpus_combined
-
-if [ -d  $CORPUS_COMBINED ]; then
-	rm -r $CORPUS_COMBINED
-fi
-mkdir $CORPUS_COMBINED
-
-
-
-
-
-# iterate over all the subdirectories
-subDirs=$(find $CORPUS_SINGLE -maxdepth 1 -mindepth 1 -type d)
-for dirPath in $subDirs; do
-	# if empty, skip
-	if ! [ -n "$(ls -A $dirPath)" ]; then
-		#echo "Skipping empty $dirPath"
-		continue
-	fi
-
-	dir=$(basename $dirPath)
-	dirPathTmp=$CORPUS_COMBINED/${dir}
-	if [ -d  $dirPathTmp ]; then
-		rm -r $dirPathTmp
-	fi
-	mkdir $dirPathTmp
-
-	# The files are ordered by interaction. So we start with the first file
-	# and combine all of them until we get the CLO file.
-	# Then we start a new file and combine them again.
-
-	currCount=1
-
-	for binFile in `ls $dirPath/*.bin | sort -V`; do
-
-		#echo "Combining $binFile to $dirPathTmp/msg_${currCount}.bin"
-		cat $binFile >> $dirPathTmp/${dir}_msg_${currCount}.bin
-
-		# if it is a close message, start new message
-		if [[ "$binFile" == *clo.bin ]]; then
-			currCount=$((currCount+1))
-		fi
-	done
-done
-
-
-
-merge_corpus $BUILD_DIR_FUZZ_MODE/bin/fuzz_binary_message $BASE_DIR/tests/fuzz/fuzz_binary_message_corpus/generated $CORPUS_COMBINED
-if [ $? -ne 0 ] ; then exit 1 ; fi
diff --git a/ext/open62541/tests/fuzz/oss-fuzz-copy.sh b/ext/open62541/tests/fuzz/oss-fuzz-copy.sh
deleted file mode 100644
index 5080103..0000000
--- a/ext/open62541/tests/fuzz/oss-fuzz-copy.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env bash
-set -e
-
-# --------------------------------------------------------------------
-# Copies all the corpus files, dict and options to the $OUT directory.
-# This script is only used on oss-fuzz directly
-# --------------------------------------------------------------------
-
-fuzzerFiles=$(find $SRC/open62541/tests/fuzz/ -name "*.cc")
-
-for F in $fuzzerFiles; do
-	fuzzerName=$(basename $F .cc)
-
-	if [ -d "$SRC/open62541/tests/fuzz/${fuzzerName}_corpus" ]; then
-		zip -jr $OUT/${fuzzerName}_seed_corpus.zip $SRC/open62541/tests/fuzz/${fuzzerName}_corpus/
-	fi
-done
-
-cp $SRC/open62541/tests/fuzz/*.dict $SRC/open62541/tests/fuzz/*.options $OUT/
\ No newline at end of file
diff --git a/ext/open62541/tests/fuzz/ua_debug_dump_pkgs_file.c b/ext/open62541/tests/fuzz/ua_debug_dump_pkgs_file.c
deleted file mode 100644
index ee1783c..0000000
--- a/ext/open62541/tests/fuzz/ua_debug_dump_pkgs_file.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/**
- * This code is used to generate a binary file for every request type
- * which can be sent from a client to the server.
- * These files form the basic corpus for fuzzing the server.
- */
-
-#ifndef UA_DEBUG_DUMP_PKGS_FILE
-#error UA_DEBUG_DUMP_PKGS_FILE must be defined
-#endif
-
-#include <open62541/transport_generated_encoding_binary.h>
-#include <open62541/types.h>
-#include <open62541/types_generated_encoding_binary.h>
-
-#include "server/ua_server_internal.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-// This number is added to the end of every corpus data as 4 bytes.
-// It allows to generate valid corpus and then the fuzzer will use
-// these last 4 bytes to determine the simulated available RAM.
-// The fuzzer will then fiddle around with this number and (hopefully)
-// make it smaller, so that we can simulate Out-of-memory errors.
-#define UA_DUMP_RAM_SIZE 8 * 1024 * 1024
-
-unsigned int UA_dump_chunkCount = 0;
-
-char *UA_dump_messageTypes[] = {"ack", "hel", "msg", "opn", "clo", "err", "unk"};
-
-struct UA_dump_filename {
-    const char *messageType;
-    char serviceName[100];
-};
-
-void UA_debug_dumpCompleteChunk(UA_Server *const server, UA_Connection *const connection,
-                                UA_ByteString *messageBuffer);
-
-/**
- * Gets a pointer to the string representing the given message type from UA_dump_messageTypes.
- * Used for naming the dumped file.
- */
-static const char *
-UA_debug_dumpGetMessageTypePrefix(UA_UInt32 messageType) {
-    switch(messageType & 0x00ffffff) {
-        case UA_MESSAGETYPE_ACK:
-            return UA_dump_messageTypes[0];
-        case UA_MESSAGETYPE_HEL:
-            return UA_dump_messageTypes[1];
-        case UA_MESSAGETYPE_MSG:
-            return UA_dump_messageTypes[2];
-        case UA_MESSAGETYPE_OPN:
-            return UA_dump_messageTypes[3];
-        case UA_MESSAGETYPE_CLO:
-            return UA_dump_messageTypes[4];
-        case UA_MESSAGETYPE_ERR:
-            return UA_dump_messageTypes[5];
-        default:
-            return UA_dump_messageTypes[6];
-    }
-}
-
-/**
- * Decode the request message type from the given byte string and
- * set the global requestServiceName variable to the name of the request.
- * E.g. `GetEndpointsRequest`
- */
-static UA_StatusCode
-UA_debug_dumpSetServiceName(const UA_ByteString *msg, char serviceNameTarget[100]) {
-    /* At 0, the nodeid starts... */
-    size_t offset = 0;
-
-    /* Decode the nodeid */
-    UA_NodeId requestTypeId;
-    UA_StatusCode retval = UA_NodeId_decodeBinary(msg, &offset, &requestTypeId);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-    if(requestTypeId.identifierType != UA_NODEIDTYPE_NUMERIC || requestTypeId.namespaceIndex != 0) {
-        snprintf(serviceNameTarget, 100, "invalid_request_id");
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-
-    const UA_DataType *requestType = NULL;
-
-    for (size_t i=0; i<UA_TYPES_COUNT; i++) {
-        if (UA_TYPES[i].binaryEncodingId == requestTypeId.identifier.numeric) {
-            requestType = &UA_TYPES[i];
-            break;
-        }
-    }
-    if (requestType == NULL) {
-        snprintf(serviceNameTarget, 100, "invalid_request_no_type");
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-
-    snprintf(serviceNameTarget, 100, "_%s", requestType->typeName);
-    return UA_STATUSCODE_GOOD;
-}
-
-/**
- * We need to decode the given binary message to get the name of the called service.
- * This method is used if the connection has no channel yet.
- */
-static UA_StatusCode
-UA_debug_dump_setName_withoutChannel(UA_Server *server, UA_Connection *connection,
-                                     UA_ByteString *message, struct UA_dump_filename* dump_filename) {
-    size_t offset = 0;
-    UA_TcpMessageHeader tcpMessageHeader;
-    UA_StatusCode retval =
-            UA_TcpMessageHeader_decodeBinary(message, &offset, &tcpMessageHeader);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    dump_filename->messageType =
-        UA_debug_dumpGetMessageTypePrefix(tcpMessageHeader.messageTypeAndChunkType & 0x00ffffff);
-
-    if ((tcpMessageHeader.messageTypeAndChunkType & 0x00ffffff) == UA_MESSAGETYPE_MSG) {
-        // this should not happen in normal operation
-        UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_SERVER, "Got MSG package without channel.");
-        return UA_STATUSCODE_BADUNEXPECTEDERROR;
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-
-/**
- * We need to decode the given binary message to get the name of the called service.
- * This method is used if the connection an established secure channel.
- *
- * message is the decoded message starting at the nodeid of the content type.
- */
-static void
-UA_debug_dump_setName_withChannel(void *application, UA_SecureChannel *channel,
-                                  UA_MessageType messagetype, UA_UInt32 requestId,
-                                  const UA_ByteString *message) {
-    struct UA_dump_filename *dump_filename = (struct UA_dump_filename *)application;
-    dump_filename->messageType = UA_debug_dumpGetMessageTypePrefix(messagetype);
-    if(messagetype == UA_MESSAGETYPE_MSG)
-        UA_debug_dumpSetServiceName(message, dump_filename->serviceName);
-}
-
-/**
- * Called in processCompleteChunk for every complete chunk which is received by the server.
- *
- * It will first try to decode the message to get the name of the called service.
- * When we have a name the message is dumped as binary to that file.
- * If the file already exists a new file will be created with a counter at the end.
- */
-void
-UA_debug_dumpCompleteChunk(UA_Server *const server, UA_Connection *const connection,
-                           UA_ByteString *messageBuffer) {
-    struct UA_dump_filename dump_filename;
-    dump_filename.messageType = NULL;
-    dump_filename.serviceName[0] = 0;
-
-    if(!connection->channel) {
-        UA_debug_dump_setName_withoutChannel(server, connection, messageBuffer, &dump_filename);
-    } else {
-        UA_SecureChannel dummy = *connection->channel;
-        TAILQ_INIT(&dummy.messages);
-        UA_ByteString messageBufferCopy;
-        UA_ByteString_copy(messageBuffer, &messageBufferCopy);
-        UA_SecureChannel_decryptAddChunk(&dummy, &messageBufferCopy, UA_TRUE);
-        UA_SecureChannel_processCompleteMessages(&dummy, &dump_filename, UA_debug_dump_setName_withChannel);
-        UA_SecureChannel_deleteMessages(&dummy);
-        UA_ByteString_deleteMembers(&messageBufferCopy);
-    }
-
-    char fileName[250];
-    snprintf(fileName, sizeof(fileName), "%s/%05u_%s%s", UA_CORPUS_OUTPUT_DIR, ++UA_dump_chunkCount,
-             dump_filename.messageType ? dump_filename.messageType : "", dump_filename.serviceName);
-
-    char dumpOutputFile[266];
-    snprintf(dumpOutputFile, 255, "%s.bin", fileName);
-    // check if file exists and if yes create a counting filename to avoid overwriting
-    unsigned cnt = 1;
-    while ( access( dumpOutputFile, F_OK ) != -1 ) {
-        snprintf(dumpOutputFile, 266, "%s_%u.bin", fileName, cnt);
-        cnt++;
-    }
-
-    UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER,
-                "Dumping package %s", dumpOutputFile);
-
-    FILE *write_ptr = fopen(dumpOutputFile, "ab");
-    fwrite(messageBuffer->data, messageBuffer->length, 1, write_ptr); // write 10 bytes from our buffer
-    // add the available memory size. See the UA_DUMP_RAM_SIZE define for more info.
-    uint32_t ramSize = UA_DUMP_RAM_SIZE;
-    fwrite(&ramSize, sizeof(ramSize), 1, write_ptr);
-    fclose(write_ptr);
-}
diff --git a/ext/open62541/tests/multithreading/check_mt_addDeleteObject.c b/ext/open62541/tests/multithreading/check_mt_addDeleteObject.c
deleted file mode 100644
index a7a647a..0000000
--- a/ext/open62541/tests/multithreading/check_mt_addDeleteObject.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/server_config_default.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <check.h>
-#include "thread_wrapper.h"
-#include "deviceObjectType.h"
-#include "mt_testing.h"
-
-#define NUMBER_OF_WORKERS 10
-#define ITERATIONS_PER_WORKER 10
-#define NUMBER_OF_CLIENTS 10
-#define ITERATIONS_PER_CLIENT 10
-
-
-static void setup(void) {
-    tc.running = true;
-    tc.server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(tc.server));
-    defineObjectTypes();
-    addPumpTypeConstructor(tc.server);
-    UA_Server_run_startup(tc.server);
-    THREAD_CREATE(server_thread, serverloop);
-}
-
-static void checkServer(void) {
-    for (size_t i = 0; i < NUMBER_OF_WORKERS * ITERATIONS_PER_WORKER; i++) {
-        char string_buf[20];
-        snprintf(string_buf, sizeof(string_buf), "Server %zu", i);
-        UA_NodeId reqNodeId = UA_NODEID_STRING(1, string_buf);
-        UA_NodeId resNodeId;
-        UA_StatusCode ret = UA_Server_readNodeId(tc.server, reqNodeId, &resNodeId);
-
-        ck_assert_int_eq(ret, UA_STATUSCODE_BADNODEIDUNKNOWN);
-    }
-}
-
-static
-void server_addObject(void* value) {
-    ThreadContext tmp = (*(ThreadContext *) value);
-    size_t offset = tmp.index * tmp.upperBound;
-    size_t number = offset + tmp.counter;
-    char string_buf[20];
-    snprintf(string_buf, sizeof(string_buf), "Server %zu", number);
-    UA_NodeId reqId = UA_NODEID_STRING(1, string_buf);
-    UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-    oAttr.displayName = UA_LOCALIZEDTEXT("en-US", string_buf);
-
-    //Entering the constructor of the object (callback to user space) it is possible that a thread deletes the object while initialization
-    UA_StatusCode retval = UA_Server_addObjectNode(tc.server, reqId,
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                            UA_QUALIFIEDNAME(1, string_buf),
-                            pumpTypeId,
-                            oAttr, NULL, NULL);
-    ck_assert(retval == UA_STATUSCODE_GOOD || retval ==  UA_STATUSCODE_BADNODEIDUNKNOWN);
-}
-
-
-static
-void server_deleteObject(void* value){
-    ThreadContext tmp = (*(ThreadContext *) value);
-    size_t offset = tmp.index * tmp.upperBound;
-    size_t number = offset + tmp.counter;
-    char string_buf[20];
-    snprintf(string_buf, sizeof(string_buf), "Server %zu", number);
-    UA_StatusCode ret = UA_STATUSCODE_GOOD;
-    do {
-        ret = UA_Server_deleteNode(tc.server, UA_NODEID_STRING(1, string_buf), true);
-        sleep(1); //for valgrind
-    } while (ret != UA_STATUSCODE_GOOD);
-}
-
-static
-void initTest(void) {
-    initThreadContext(NUMBER_OF_WORKERS, NUMBER_OF_CLIENTS, checkServer);
-
-    for (size_t i = 0; i < tc.numberOfWorkers; i++) {
-        setThreadContext(&tc.workerContext[i], i, ITERATIONS_PER_WORKER, server_addObject);
-    }
-
-    for (size_t i = 0; i < tc.numberofClients; i++) {
-        setThreadContext(&tc.clientContext[i], i, ITERATIONS_PER_CLIENT, server_deleteObject);
-    }
-}
-
-START_TEST(addDeleteObjectTypeNodes) {
-        startMultithreading();
-    }
-END_TEST
-
-static Suite* testSuite_immutableNodes(void) {
-    Suite *s = suite_create("Multithreading");
-    TCase *valueCallback = tcase_create("Add-Delete nodes");
-    initTest();
-    tcase_add_checked_fixture(valueCallback, setup, teardown);
-    tcase_add_test(valueCallback, addDeleteObjectTypeNodes);
-    suite_add_tcase(s,valueCallback);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_immutableNodes();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/multithreading/check_mt_addObjectNode.c b/ext/open62541/tests/multithreading/check_mt_addObjectNode.c
deleted file mode 100644
index f087797..0000000
--- a/ext/open62541/tests/multithreading/check_mt_addObjectNode.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <check.h>
-#include "thread_wrapper.h"
-#include "deviceObjectType.h"
-
-#define NUMBER_OF_WORKERS 10
-#define ITERATIONS_PER_WORKER 10
-#define NUMBER_OF_CLIENTS 10
-#define ITERATIONS_PER_CLIENT 10
-
-static void setup(void) {
-    tc.running = true;
-    tc.server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(tc.server));
-    defineObjectTypes();
-    addPumpTypeConstructor(tc.server);
-    UA_Server_run_startup(tc.server);
-    THREAD_CREATE(server_thread, serverloop);
-}
-
-static
-void checkServer(void) {
-    for (size_t i = 0; i < NUMBER_OF_WORKERS * ITERATIONS_PER_WORKER; i++) {
-        char string_buf[20];
-        snprintf(string_buf, sizeof(string_buf), "Server %zu", i);
-        UA_NodeId reqNodeId = UA_NODEID_STRING(1, string_buf);
-        UA_NodeId resNodeId;
-        UA_StatusCode ret = UA_Server_readNodeId(tc.server, reqNodeId, &resNodeId);
-
-        ck_assert_int_eq(ret, UA_STATUSCODE_GOOD);
-        ck_assert(UA_NodeId_equal(&reqNodeId, &resNodeId) == UA_TRUE);
-        UA_NodeId_deleteMembers(&resNodeId);
-    }
-
-    for (size_t i = 0; i < NUMBER_OF_CLIENTS * ITERATIONS_PER_CLIENT; i++) {
-        char string_buf[20];
-        snprintf(string_buf, sizeof(string_buf), "Client %zu", i);
-        UA_NodeId reqNodeId = UA_NODEID_STRING(1, string_buf);
-        UA_NodeId resNodeId;
-        UA_StatusCode ret = UA_Server_readNodeId(tc.server, reqNodeId, &resNodeId);
-
-        ck_assert_int_eq(ret, UA_STATUSCODE_GOOD);
-        ck_assert(UA_NodeId_equal(&reqNodeId, &resNodeId) == UA_TRUE);
-        UA_NodeId_deleteMembers(&resNodeId);
-    }
-}
-
-static
-void server_addObject(void* value) {
-    ThreadContext tmp = (*(ThreadContext *) value);
-    size_t offset = tmp.index * tmp.upperBound;
-    size_t number = offset + tmp.counter;
-    char string_buf[20];
-    snprintf(string_buf, sizeof(string_buf), "Server %zu", number);
-    UA_NodeId reqId = UA_NODEID_STRING(1, string_buf);
-    UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-    oAttr.displayName = UA_LOCALIZEDTEXT("en-US", string_buf);
-    UA_StatusCode res = UA_Server_addObjectNode(tc.server, reqId,
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                UA_QUALIFIEDNAME(1, string_buf),
-                                pumpTypeId,
-                                oAttr, NULL, NULL);
-
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, res);
-}
-
-static
-void client_addObject(void* value){
-    ThreadContext tmp = (*(ThreadContext *) value);
-    size_t offset = tmp.index * tmp.upperBound;
-    size_t number = offset + tmp.counter;
-    char string_buf[20];
-    snprintf(string_buf, sizeof(string_buf), "Client %zu", number);
-    UA_NodeId reqId = UA_NODEID_STRING(1, string_buf);
-    UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-    oAttr.displayName = UA_LOCALIZEDTEXT("en-US", string_buf);
-    UA_StatusCode retval = UA_Client_addObjectNode(tc.clients[tmp.index], reqId,
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                         UA_QUALIFIEDNAME(1, string_buf), pumpTypeId, oAttr, NULL);
-
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-}
-
-static
-void initTest(void) {
-    initThreadContext(NUMBER_OF_WORKERS, NUMBER_OF_CLIENTS, checkServer);
-
-    for (size_t i = 0; i < tc.numberOfWorkers; i++) {
-        setThreadContext(&tc.workerContext[i], i, ITERATIONS_PER_WORKER, server_addObject);
-    }
-
-    for (size_t i = 0; i < tc.numberofClients; i++) {
-        setThreadContext(&tc.clientContext[i], i, ITERATIONS_PER_CLIENT, client_addObject);
-    }
-}
-
-START_TEST(addObjectTypeNodes) {
-        startMultithreading();
-    }
-END_TEST
-
-
-static Suite* testSuite_immutableNodes(void) {
-    Suite *s = suite_create("Multithreading");
-    TCase *valueCallback = tcase_create("Add object nodes");
-    initTest();
-    tcase_add_checked_fixture(valueCallback, setup, teardown);
-    tcase_add_test(valueCallback, addObjectTypeNodes);
-    suite_add_tcase(s,valueCallback);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_immutableNodes();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/multithreading/check_mt_addVariableNode.c b/ext/open62541/tests/multithreading/check_mt_addVariableNode.c
deleted file mode 100644
index 51ccde9..0000000
--- a/ext/open62541/tests/multithreading/check_mt_addVariableNode.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <check.h>
-#include "thread_wrapper.h"
-#include "mt_testing.h"
-
-#define NUMBER_OF_WORKERS 10
-#define ITERATIONS_PER_WORKER 10
-#define NUMBER_OF_CLIENTS 10
-#define ITERATIONS_PER_CLIENT 10
-
-static void setup(void) {
-    tc.running = true;
-    tc.server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(tc.server));
-    UA_Server_run_startup(tc.server);
-    THREAD_CREATE(server_thread, serverloop);
-}
-
-static
-void checkServer(void) {
-    for (size_t i = 0; i < NUMBER_OF_WORKERS * ITERATIONS_PER_WORKER; i++) {
-        UA_ReadValueId rvi;
-        UA_ReadValueId_init(&rvi);
-        char string_buf[20];
-        snprintf(string_buf, sizeof(string_buf), "Server %zu", i);
-        rvi.nodeId = UA_NODEID_STRING(1, string_buf);
-        rvi.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataValue resp = UA_Server_read(tc.server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-        ck_assert_int_eq(resp.status, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(0, resp.value.arrayLength);
-        ck_assert(&UA_TYPES[UA_TYPES_INT32] == resp.value.type);
-        ck_assert_int_eq(42, *(UA_Int32* )resp.value.data);
-        UA_DataValue_deleteMembers(&resp);
-    }
-
-    for (size_t i = 0; i < NUMBER_OF_CLIENTS * ITERATIONS_PER_CLIENT; i++) {
-        UA_ReadValueId rvi;
-        UA_ReadValueId_init(&rvi);
-        char string_buf[20];
-        snprintf(string_buf, sizeof(string_buf), "Client %zu", i);
-        rvi.nodeId = UA_NODEID_STRING(1, string_buf);
-        rvi.attributeId = UA_ATTRIBUTEID_VALUE;
-
-        UA_DataValue resp = UA_Server_read(tc.server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-        ck_assert_int_eq(resp.status, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(2, resp.value.arrayLength);
-        ck_assert(&UA_TYPES[UA_TYPES_INT32] == resp.value.type);
-        ck_assert_int_eq(10, *(UA_Int32 *)resp.value.data);
-        ck_assert_int_eq(20, *((UA_Int32 *)resp.value.data + 1));
-        UA_DataValue_deleteMembers(&resp);
-    }
-}
-
-static
-void server_addVariable(void* value) {
-        ThreadContext tmp = (*(ThreadContext *) value);
-        size_t offset = tmp.index * tmp.upperBound;
-        size_t number = offset + tmp.counter;
-        char string_buf[20];
-        snprintf(string_buf, sizeof(string_buf), "Server %zu", number);
-        UA_VariableAttributes attr = UA_VariableAttributes_default;
-        UA_Int32 myInteger = 42;
-        UA_Variant_setScalar(&attr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-        attr.description = UA_LOCALIZEDTEXT("en-US",string_buf);
-        attr.displayName = UA_LOCALIZEDTEXT("en-US",string_buf);
-        attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-        attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-
-        UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, string_buf);
-        UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, string_buf);
-        UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-        UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-        UA_StatusCode ret = UA_Server_addVariableNode(tc.server, myIntegerNodeId, parentNodeId,
-                                                      parentReferenceNodeId, myIntegerName,
-                                                      UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), attr, NULL, NULL);
-        ck_assert_uint_eq(ret, UA_STATUSCODE_GOOD);
-}
-
-static
-void client_addVariable(void* value){
-    ThreadContext tmp = (*(ThreadContext *) value);
-    size_t offset = tmp.index * tmp.upperBound;
-    size_t number = offset + tmp.counter;
-    char string_buf[20];
-    snprintf(string_buf, sizeof(string_buf), "Client %zu", number);
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    attr.description = UA_LOCALIZEDTEXT("en-US", string_buf);
-    attr.displayName = UA_LOCALIZEDTEXT("en-US", string_buf);
-    UA_NodeId nodeId = UA_NODEID_STRING(1, string_buf);
-    UA_QualifiedName integerName = UA_QUALIFIEDNAME(1, string_buf);
-    UA_Int32 values[2] = {10, 20};
-    UA_Variant_setArray(&attr.value, values, 2, &UA_TYPES[UA_TYPES_INT32]);
-    attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
-    UA_UInt32 arrayDims[1] = {2};
-    attr.arrayDimensions = arrayDims;
-    attr.arrayDimensionsSize = 1;
-    UA_StatusCode retval = UA_Client_addVariableNode(tc.clients[tmp.index], nodeId,
-                                               UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                               UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                                               integerName,
-                                               UA_NODEID_NULL, attr, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-}
-
-static
-void initTest(void) {
-    initThreadContext(NUMBER_OF_WORKERS, NUMBER_OF_CLIENTS, checkServer);
-
-    for (size_t i = 0; i < tc.numberOfWorkers; i++) {
-        setThreadContext(&tc.workerContext[i], i, ITERATIONS_PER_WORKER, server_addVariable);
-    }
-
-    for (size_t i = 0; i < tc.numberofClients; i++) {
-        setThreadContext(&tc.clientContext[i], i, ITERATIONS_PER_CLIENT, client_addVariable);
-    }
-}
-
-START_TEST(addVariableNodes) {
-        startMultithreading();
-    }
-END_TEST
-
-static Suite* testSuite_immutableNodes(void) {
-    Suite *s = suite_create("Multithreading");
-    TCase *valueCallback = tcase_create("Add variable nodes");
-    initTest();
-    tcase_add_checked_fixture(valueCallback, setup, teardown);
-    tcase_add_test(valueCallback, addVariableNodes);
-    suite_add_tcase(s,valueCallback);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_immutableNodes();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/multithreading/check_mt_addVariableTypeNode.c b/ext/open62541/tests/multithreading/check_mt_addVariableTypeNode.c
deleted file mode 100644
index 24d3905..0000000
--- a/ext/open62541/tests/multithreading/check_mt_addVariableTypeNode.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/server_config_default.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <check.h>
-#include "thread_wrapper.h"
-#include "mt_testing.h"
-
-#define NUMBER_OF_WORKERS 10
-#define ITERATIONS_PER_WORKER 10
-#define NUMBER_OF_CLIENTS 10
-#define ITERATIONS_PER_CLIENT 10
-
-static void setup(void) {
-    tc.running = true;
-    tc.server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(tc.server));
-    UA_Server_run_startup(tc.server);
-    THREAD_CREATE(server_thread, serverloop);
-}
-
-static void checkServer(void) {
-    for (size_t i = 0; i <  NUMBER_OF_WORKERS * ITERATIONS_PER_WORKER; i++) {
-        char string_buf[20];
-        snprintf(string_buf, sizeof(string_buf), "Server %zu", i);
-        UA_NodeId reqNodeId = UA_NODEID_STRING(1, string_buf);
-        UA_NodeId resNodeId;
-        UA_StatusCode ret = UA_Server_readNodeId(tc.server, reqNodeId, &resNodeId);
-
-        ck_assert_int_eq(ret, UA_STATUSCODE_GOOD);
-        ck_assert(UA_NodeId_equal(&reqNodeId, &resNodeId) == UA_TRUE);
-        UA_NodeId_deleteMembers(&resNodeId);
-    }
-
-    for (size_t i = 0; i < NUMBER_OF_CLIENTS * ITERATIONS_PER_CLIENT; i++) {
-        char string_buf[20];
-        snprintf(string_buf, sizeof(string_buf), "Client %zu", i);
-        UA_NodeId reqNodeId = UA_NODEID_STRING(1, string_buf);
-        UA_NodeId resNodeId;
-        UA_StatusCode ret = UA_Server_readNodeId(tc.server, reqNodeId, &resNodeId);
-
-        ck_assert_int_eq(ret, UA_STATUSCODE_GOOD);
-        ck_assert(UA_NodeId_equal(&reqNodeId, &resNodeId) == UA_TRUE);
-        UA_NodeId_deleteMembers(&resNodeId);
-    }
-}
-
-static
-void server_addVariableType(void* value) {
-    ThreadContext tmp = (*(ThreadContext *) value);
-    size_t offset = tmp.index * tmp.upperBound;
-    size_t number = offset + tmp.counter;
-    char string_buf[20];
-    snprintf(string_buf, sizeof(string_buf), "Server %zu", number);
-    UA_NodeId myNodeId = UA_NODEID_STRING(1, string_buf);
-    UA_VariableTypeAttributes vtAttr = UA_VariableTypeAttributes_default;
-    vtAttr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
-    vtAttr.valueRank = UA_VALUERANK_ONE_DIMENSION;
-    UA_UInt32 arrayDims[1] = {2};
-    vtAttr.arrayDimensions = arrayDims;
-    vtAttr.arrayDimensionsSize = 1;
-    vtAttr.displayName = UA_LOCALIZEDTEXT("en-US", "2DPoint Type");
-
-    /* a matching default value is required */
-    UA_Double zero[2] = {0.0, 0.0};
-    UA_Variant_setArray(&vtAttr.value, zero, 2, &UA_TYPES[UA_TYPES_DOUBLE]);
-
-    UA_StatusCode res =
-            UA_Server_addVariableTypeNode(tc.server, myNodeId,
-                                          UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                          UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                          UA_QUALIFIEDNAME(1, "2DPoint Type"), UA_NODEID_NULL,
-                                          vtAttr, NULL, NULL);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, res);
-
-}
-
-static
-void client_addVariableType(void* value){
-    ThreadContext tmp = (*(ThreadContext *) value);
-    size_t offset = tmp.index * tmp.upperBound;
-    size_t number = offset + tmp.counter;
-    char string_buf[20];
-    snprintf(string_buf, sizeof(string_buf), "Client %zu", number);
-    UA_NodeId myNodeId = UA_NODEID_STRING(1, string_buf);
-
-    UA_VariableTypeAttributes attr = UA_VariableTypeAttributes_default;
-    attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
-    UA_UInt32 arrayDims[1] = {2};
-    attr.arrayDimensions = arrayDims;
-    attr.arrayDimensionsSize = 1;
-    attr.displayName = UA_LOCALIZEDTEXT("en-US", "PointType");
-
-    /* a matching default value is required */
-    UA_Double zero[2] = {0.0, 0.0};
-    UA_Variant_setArray(&attr.value, zero, 2, &UA_TYPES[UA_TYPES_INT32]);
-    UA_StatusCode  retval = UA_Client_addVariableTypeNode(tc.clients[tmp.index], myNodeId,
-                                                          UA_NODEID_NUMERIC(0, UA_NS0ID_BASEVARIABLETYPE),
-                                                          UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                                          UA_QUALIFIEDNAME(1, "PointType"), attr, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-}
-
-static
-void initTest(void) {
-    initThreadContext(NUMBER_OF_WORKERS, NUMBER_OF_CLIENTS, checkServer);
-    
-    for (size_t i = 0; i < tc.numberOfWorkers; i++) {
-        setThreadContext(&tc.workerContext[i], i, ITERATIONS_PER_WORKER, server_addVariableType);
-    }
-
-    for (size_t i = 0; i < tc.numberofClients; i++) {
-        setThreadContext(&tc.clientContext[i], i, ITERATIONS_PER_CLIENT, client_addVariableType);
-    }
-}
-
-START_TEST(addVariableTypeNodes) {
-        startMultithreading();
-    }
-END_TEST
-
-static Suite* testSuite_immutableNodes(void) {
-    Suite *s = suite_create("Multithreading");
-    TCase *valueCallback = tcase_create("Add variable type nodes");
-    initTest();
-    tcase_add_checked_fixture(valueCallback, setup, teardown);
-    tcase_add_test(valueCallback, addVariableTypeNodes);
-    suite_add_tcase(s,valueCallback);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_immutableNodes();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/multithreading/check_mt_readValueAttribute.c b/ext/open62541/tests/multithreading/check_mt_readValueAttribute.c
deleted file mode 100644
index 9262bcc..0000000
--- a/ext/open62541/tests/multithreading/check_mt_readValueAttribute.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <check.h>
-#include "thread_wrapper.h"
-#include "mt_testing.h"
-
-
-#define NUMBER_OF_WORKERS 10
-#define ITERATIONS_PER_WORKER 10
-#define NUMBER_OF_CLIENTS 10
-#define ITERATIONS_PER_CLIENT 10
-
-UA_NodeId pumpTypeId = {1, UA_NODEIDTYPE_NUMERIC, {1001}};
-
-static
-void addVariableNode(void) {
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    UA_Int32 myInteger = 42;
-    UA_Variant_setScalar(&attr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    attr.description = UA_LOCALIZEDTEXT("en-US","Temperature");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","Temperature");
-    UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "Temperature");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_StatusCode res =
-            UA_Server_addVariableNode(tc.server, pumpTypeId, parentNodeId,
-                                      parentReferenceNodeId, myIntegerName,
-                                      UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                      attr, NULL, NULL);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, res);
-}
-
-static void setup(void) {
-    tc.running = true;
-    tc.server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(tc.server));
-    addVariableNode();
-    UA_Server_run_startup(tc.server);
-    THREAD_CREATE(server_thread, serverloop);
-}
-
-static
-void server_readValueAttribute(void * value) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = pumpTypeId;
-    rvi.attributeId = UA_ATTRIBUTEID_VALUE;
-
-    // read 1
-    UA_DataValue resp = UA_Server_read(tc.server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, resp.status);
-    ck_assert_int_eq(true, resp.hasValue);
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_INT32] == resp.value.type);
-    ck_assert_int_eq(42, *(UA_Int32* )resp.value.data);
-    UA_DataValue_deleteMembers(&resp);
-
-    // read 2
-    UA_Variant var;
-    UA_Variant_init(&var);
-    UA_StatusCode ret = UA_Server_readValue(tc.server, rvi.nodeId, &var);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, ret);
-    ck_assert_int_eq(42, *(UA_Int32 *)var.data);
-
-    UA_Variant_deleteMembers(&var);
-}
-
-
-static
-void client_readValueAttribute(void * value) {
-    ThreadContext tmp = (*(ThreadContext *) value);
-    UA_Variant val;
-    UA_NodeId nodeId = pumpTypeId;
-    UA_StatusCode retval = UA_Client_readValueAttribute(tc.clients[tmp.index], nodeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(42, *(UA_Int32 *)val.data);
-    UA_Variant_deleteMembers(&val);
-}
-
-static
-void initTest(void) {
-    initThreadContext(NUMBER_OF_WORKERS, NUMBER_OF_CLIENTS, NULL);
-
-    for (size_t i = 0; i < tc.numberOfWorkers; i++) {
-        setThreadContext(&tc.workerContext[i], i, ITERATIONS_PER_WORKER, server_readValueAttribute);
-    }
-
-    for (size_t i = 0; i < tc.numberofClients; i++) {
-        setThreadContext(&tc.clientContext[i], i, ITERATIONS_PER_CLIENT, client_readValueAttribute);
-    }
-}
-
-START_TEST(readValueAttribute) {
-        startMultithreading();
-    }
-END_TEST
-
-static Suite* testSuite_immutableNodes(void) {
-    Suite *s = suite_create("Multithreading");
-    TCase *valueCallback = tcase_create("Read Write attribute");
-    initTest();
-    tcase_add_checked_fixture(valueCallback, setup, teardown);
-    tcase_add_test(valueCallback, readValueAttribute);
-    suite_add_tcase(s,valueCallback);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_immutableNodes();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/multithreading/check_mt_readWriteDelete.c b/ext/open62541/tests/multithreading/check_mt_readWriteDelete.c
deleted file mode 100644
index 0e6f18d..0000000
--- a/ext/open62541/tests/multithreading/check_mt_readWriteDelete.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-#include <open62541/server_config_default.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <check.h>
-#include <testing_clock.h>
-#include "thread_wrapper.h"
-#include "mt_testing.h"
-
-
-#define NUMBER_OF_READ_WORKERS 10
-#define NUMBER_OF_WRITE_WORKERS 10
-#define ITERATIONS_PER_WORKER 100
-
-#define NUMBER_OF_READ_CLIENTS 10
-#define NUMBER_OF_WRITE_CLIENTS 10
-#define ITERATIONS_PER_CLIENT 100
-
-UA_NodeId pumpTypeId = {1, UA_NODEIDTYPE_NUMERIC, {1001}};
-
-static
-void AddVariableNode(void) {
-    /* Add a variable node to the address space */
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    UA_Int32 myInteger = 42;
-    UA_Variant_setScalar(&attr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    attr.description = UA_LOCALIZEDTEXT("en-US","Temperature");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","Temperature");
-    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-    UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "Temperature");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-
-    UA_StatusCode res =
-            UA_Server_addVariableNode(tc.server, pumpTypeId, parentNodeId,
-                                      parentReferenceNodeId, myIntegerName,
-                                      UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                      attr, NULL, NULL);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, res);
-}
-
-static void setup(void) {
-    tc.running = true;
-    tc.server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(tc.server));
-    AddVariableNode();
-    UA_Server_run_startup(tc.server);
-    THREAD_CREATE(server_thread, serverloop);
-}
-
-static
-void server_deleteValue(void *value) {
-    UA_StatusCode ret = UA_Server_deleteNode(tc.server, pumpTypeId, true);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, ret);
-}
-
-static
-void server_readValue(void *value) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = pumpTypeId;
-    rvi.attributeId = UA_ATTRIBUTEID_VALUE;
-
-    UA_Variant var;
-    UA_Variant_init(&var);
-    UA_StatusCode retval = UA_Server_readValue(tc.server, rvi.nodeId, &var);
-    if (retval == UA_STATUSCODE_GOOD) {
-        ck_assert_int_eq(42, *(UA_Int32 *)var.data);
-        UA_Variant_deleteMembers(&var);
-    }
-    else {
-        ck_assert_int_eq(retval, UA_STATUSCODE_BADNODEIDUNKNOWN);
-    }
-}
-
-static
-void server_writeValue(void *value) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Int32 testValue = 42;
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_INT32]);
-    wValue.nodeId = pumpTypeId;
-    wValue.attributeId = UA_ATTRIBUTEID_VALUE;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(tc.server, &wValue);
-    ck_assert(retval == UA_STATUSCODE_BADNODEIDUNKNOWN || retval == UA_STATUSCODE_GOOD);
-}
-
-static
-void client_writeValue(void *value) {
-    ThreadContext tmp = (*(ThreadContext *) value);
-    UA_Variant val;
-    UA_Int32 testValue = 42;
-    UA_Variant_setScalar(&val, &testValue, &UA_TYPES[UA_TYPES_INT32]);
-    UA_StatusCode  retval = UA_Client_writeValueAttribute(tc.clients[tmp.index], pumpTypeId, &val);
-    ck_assert(retval == UA_STATUSCODE_BADNODEIDUNKNOWN || retval == UA_STATUSCODE_GOOD);
-}
-
-static
-void client_readValue(void *value) {
-    ThreadContext tmp = (*(ThreadContext *) value);
-    UA_Variant val;
-    UA_NodeId nodeId = pumpTypeId;
-    UA_StatusCode retval = UA_Client_readValueAttribute(tc.clients[tmp.index], nodeId, &val);
-    if (retval == UA_STATUSCODE_GOOD) {
-        ck_assert_int_eq(42, *(UA_Int32 *)val.data);
-        UA_Variant_deleteMembers(&val);
-    }
-    else {
-        ck_assert_int_eq(retval, UA_STATUSCODE_BADNODEIDUNKNOWN);
-    }
-}
-
-
-static
-void initTest(void) {
-    initThreadContext(NUMBER_OF_READ_WORKERS + NUMBER_OF_WRITE_WORKERS + 1, NUMBER_OF_READ_CLIENTS + NUMBER_OF_WRITE_CLIENTS, NULL);
-
-    size_t i = 0;
-    for (; i < NUMBER_OF_READ_WORKERS; i++) {
-        setThreadContext(&tc.workerContext[i], i, ITERATIONS_PER_WORKER, server_readValue);
-    }
-    for (; i < NUMBER_OF_READ_WORKERS + NUMBER_OF_WRITE_WORKERS; i++) {
-        setThreadContext(&tc.workerContext[i], i, ITERATIONS_PER_WORKER, server_writeValue);
-    }
-
-    //Thread deleting the variable
-    setThreadContext(&tc.workerContext[tc.numberOfWorkers - 1], i, 1, server_deleteValue);
-
-    i = 0;
-    for (; i < NUMBER_OF_READ_CLIENTS; i++) {
-        setThreadContext(&tc.clientContext[i], i, ITERATIONS_PER_CLIENT, client_readValue);
-    }
-    for (; i < NUMBER_OF_READ_CLIENTS + NUMBER_OF_WRITE_CLIENTS; i++) {
-        setThreadContext(&tc.clientContext[i], i, ITERATIONS_PER_CLIENT, client_writeValue);
-    }
-}
-
-START_TEST(readWriteDelete) {
-        startMultithreading();
-    }
-END_TEST
-
-static Suite* testSuite_immutableNodes(void) {
-    Suite *s = suite_create("Multithreading");
-    TCase *valueCallback = tcase_create("Read-Write-Delete attribute");
-    initTest();
-    tcase_add_checked_fixture(valueCallback, setup, teardown);
-    tcase_add_test(valueCallback, readWriteDelete);
-    suite_add_tcase(s,valueCallback);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_immutableNodes();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
-
diff --git a/ext/open62541/tests/multithreading/check_mt_readWriteDeleteCallback.c b/ext/open62541/tests/multithreading/check_mt_readWriteDeleteCallback.c
deleted file mode 100644
index b67df78..0000000
--- a/ext/open62541/tests/multithreading/check_mt_readWriteDeleteCallback.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-#include <open62541/server_config_default.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <check.h>
-#include <testing_clock.h>
-#include "thread_wrapper.h"
-#include "mt_testing.h"
-
-
-#define NUMBER_OF_READ_WORKERS 10
-#define NUMBER_OF_WRITE_WORKERS 10
-#define ITERATIONS_PER_WORKER 100
-
-#define NUMBER_OF_READ_CLIENTS 10
-#define NUMBER_OF_WRITE_CLIENTS 10
-#define ITERATIONS_PER_CLIENT 100
-
-UA_NodeId pumpTypeId = {1, UA_NODEIDTYPE_NUMERIC, {1001}};
-UA_Int32 temperature = 42;
-
-UA_LOCK_TYPE(mu)
-
-static UA_StatusCode
-readTemperature(UA_Server *tmpServer,
-                const UA_NodeId *sessionId, void *sessionContext,
-                const UA_NodeId *nodeId, void *nodeContext,
-                UA_Boolean sourceTimeStamp, const UA_NumericRange *range,
-                UA_DataValue *dataValue) {
-    UA_LOCK(mu);
-    UA_Variant_setScalarCopy(&dataValue->value, &temperature, &UA_TYPES[UA_TYPES_INT32]);
-    UA_UNLOCK(mu);
-    dataValue->hasValue = true;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-writeTemperature(UA_Server *tmpServer,
-                 const UA_NodeId *sessionId, void *sessionContext,
-                 const UA_NodeId *nodeId, void *nodeContext,
-                 const UA_NumericRange *range, const UA_DataValue *data) {
-    UA_LOCK(mu);
-    temperature = *(UA_Int32 *) data->value.data;
-    UA_UNLOCK(mu);
-    return UA_STATUSCODE_GOOD;
-}
-
-static
-void AddVariableNode(void) {
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    attr.displayName = UA_LOCALIZEDTEXT("en-US", "Temperature");
-    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-
-    UA_DataSource temperatureSource;
-    temperatureSource.read = readTemperature;
-    temperatureSource.write = writeTemperature;
-    UA_StatusCode retval = UA_Server_addDataSourceVariableNode(tc.server, pumpTypeId, UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                                               UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), UA_QUALIFIEDNAME(1, "Temperature"),
-                                                               UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), attr,
-                                                               temperatureSource, NULL, NULL);
-
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-}
-
-static void setup(void) {
-    tc.running = true;
-    tc.server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(tc.server));
-    AddVariableNode();
-    UA_Server_run_startup(tc.server);
-    THREAD_CREATE(server_thread, serverloop);
-}
-
-static
-void server_deleteValue(void *value) {
-    //UA_fakeSleep(100);
-    UA_StatusCode ret = UA_Server_deleteNode(tc.server, pumpTypeId, true);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, ret);
-}
-
-static
-void server_readValue(void *value) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = pumpTypeId;
-    rvi.attributeId = UA_ATTRIBUTEID_VALUE;
-
-    UA_Variant var;
-    UA_Variant_init(&var);
-    UA_StatusCode retval = UA_Server_readValue(tc.server, rvi.nodeId, &var);
-    if (retval == UA_STATUSCODE_GOOD) {
-        ck_assert_int_eq(42, *(UA_Int32 *)var.data);
-        ck_assert_int_eq(UA_STATUSCODE_GOOD, retval);
-        UA_Variant_deleteMembers(&var);
-    }
-    else {
-        ck_assert_int_eq(retval, UA_STATUSCODE_BADNODEIDUNKNOWN);
-    }
-}
-
-static
-void server_writeValue(void *value) {
-        UA_WriteValue wValue;
-        UA_WriteValue_init(&wValue);
-        UA_Int32 testValue = 42;
-        UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_INT32]);
-        wValue.nodeId = pumpTypeId;
-        wValue.attributeId = UA_ATTRIBUTEID_VALUE;
-        wValue.value.hasValue = true;
-        UA_StatusCode retval = UA_Server_write(tc.server, &wValue);
-        ck_assert(retval == UA_STATUSCODE_BADNODEIDUNKNOWN || retval == UA_STATUSCODE_GOOD);
-}
-
-static
-void client_writeValue(void *value) {
-    ThreadContext tmp = (*(ThreadContext *) value);
-    UA_Variant val;
-    UA_Int32 testValue = 42;
-    UA_Variant_setScalar(&val, &testValue, &UA_TYPES[UA_TYPES_INT32]);
-    UA_StatusCode retval = UA_Client_writeValueAttribute(tc.clients[tmp.index], pumpTypeId, &val);
-    ck_assert(retval == UA_STATUSCODE_BADNODEIDUNKNOWN || retval == UA_STATUSCODE_GOOD);
-}
-
-static
-void client_readValue(void *value) {
-    ThreadContext tmp = (*(ThreadContext *) value);
-    UA_Variant val;
-    UA_NodeId nodeId = pumpTypeId;
-    UA_StatusCode retval = UA_Client_readValueAttribute(tc.clients[tmp.index], nodeId, &val);
-    if (retval == UA_STATUSCODE_GOOD) {
-        ck_assert_int_eq(42, *(UA_Int32 *)val.data);
-        UA_Variant_deleteMembers(&val);
-    }
-    else {
-        ck_assert_int_eq(retval, UA_STATUSCODE_BADNODEIDUNKNOWN);
-    }
-
-}
-
-static
-void initTest(void) {
-    UA_LOCK_INIT(mu);
-
-    initThreadContext(NUMBER_OF_READ_WORKERS + NUMBER_OF_WRITE_WORKERS + 1, NUMBER_OF_READ_CLIENTS + NUMBER_OF_WRITE_CLIENTS, NULL);
-
-    size_t i = 0;
-    for (; i < NUMBER_OF_READ_WORKERS; i++) {
-        setThreadContext(&tc.workerContext[i], i, ITERATIONS_PER_WORKER, server_readValue);
-    }
-    for (; i < NUMBER_OF_READ_WORKERS + NUMBER_OF_WRITE_WORKERS; i++) {
-        setThreadContext(&tc.workerContext[i], i, ITERATIONS_PER_WORKER, server_writeValue);
-    }
-
-    //Thread deleting the variable
-    setThreadContext(&tc.workerContext[tc.numberOfWorkers - 1], i, 1, server_deleteValue);
-
-    i = 0;
-    for (; i < NUMBER_OF_READ_CLIENTS; i++) {
-        setThreadContext(&tc.clientContext[i], i, ITERATIONS_PER_CLIENT, client_readValue);
-    }
-    for (; i < NUMBER_OF_READ_CLIENTS + NUMBER_OF_WRITE_CLIENTS; i++) {
-        setThreadContext(&tc.clientContext[i], i, ITERATIONS_PER_CLIENT, client_writeValue);
-    }
-}
-
-START_TEST(readWriteDeleteCallback) {
-        startMultithreading();
-    }
-END_TEST
-
-static Suite* testSuite_immutableNodes(void) {
-    Suite *s = suite_create("Multithreading");
-    TCase *valueCallback = tcase_create("Read-Write-Delete-Callback");
-    initTest();
-    tcase_add_checked_fixture(valueCallback, setup, teardown);
-    tcase_add_test(valueCallback, readWriteDeleteCallback);
-    suite_add_tcase(s,valueCallback);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_immutableNodes();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
-
diff --git a/ext/open62541/tests/multithreading/check_mt_writeValueAttribute.c b/ext/open62541/tests/multithreading/check_mt_writeValueAttribute.c
deleted file mode 100644
index 8d6a8cd..0000000
--- a/ext/open62541/tests/multithreading/check_mt_writeValueAttribute.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/server_config_default.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <check.h>
-#include "thread_wrapper.h"
-#include "mt_testing.h"
-
-#define NUMBER_OF_WORKERS 10
-#define ITERATIONS_PER_WORKER 10
-#define NUMBER_OF_CLIENTS 10
-#define ITERATIONS_PER_CLIENT 10
-
-UA_NodeId pumpTypeId = {1, UA_NODEIDTYPE_NUMERIC, {1001}};
-
-static
-void addVariableNode(void) {
-    /* Add a variable node to the address space */
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    UA_Int32 myInteger = 42;
-    UA_Variant_setScalar(&attr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    attr.description = UA_LOCALIZEDTEXT("en-US","Temperature");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","Temperature");
-    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-    UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "Temperature");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-
-    UA_StatusCode res =
-            UA_Server_addVariableNode(tc.server, pumpTypeId, parentNodeId,
-                                      parentReferenceNodeId, myIntegerName,
-                                      UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                      attr, NULL, NULL);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, res);
-}
-
-static void setup(void) {
-    tc.running = true;
-    tc.server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(tc.server));
-    addVariableNode();
-    UA_Server_run_startup(tc.server);
-    THREAD_CREATE(server_thread, serverloop);
-}
-
-static void checkServer(void) {
-    UA_Variant var;
-    UA_Variant_init(&var);
-    UA_StatusCode ret = UA_Server_readValue(tc.server, pumpTypeId, &var);
-    ck_assert_int_eq(42, *(UA_Int32 *)var.data);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, ret);
-    UA_Variant_deleteMembers(&var);
-}
-
-static
-void server_writeValueAttribute(void *value) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Int32 testValue = 42;
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_INT32]);
-    wValue.nodeId = pumpTypeId;
-    wValue.attributeId = UA_ATTRIBUTEID_VALUE;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(tc.server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-}
-
-static
-void client_writeValueAttribute(void *value) {
-    ThreadContext tmp = (*(ThreadContext *) value);
-    UA_Variant val;
-    UA_Int32 testValue = 42;
-    UA_Variant_setScalar(&val, &testValue, &UA_TYPES[UA_TYPES_INT32]);
-    UA_StatusCode retval = UA_Client_writeValueAttribute(tc.clients[tmp.index], pumpTypeId, &val);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-}
-
-static
-void initTest(void) {
-    tc.numberOfWorkers = NUMBER_OF_WORKERS;
-    tc.numberofClients = NUMBER_OF_CLIENTS;
-    tc.checkServerNodes = checkServer;
-    tc.workerContext = (ThreadContext*) UA_calloc(tc.numberOfWorkers, sizeof(ThreadContext));
-    tc.clients =  (UA_Client**) UA_calloc(tc.numberofClients, sizeof(UA_Client*));
-    tc.clientContext = (ThreadContext*) UA_calloc(tc.numberofClients, sizeof(ThreadContext));
-    for (size_t i = 0; i < tc.numberOfWorkers; i++) {
-        tc.workerContext[i].index = i;
-        tc.workerContext[i].upperBound = ITERATIONS_PER_WORKER;
-        tc.workerContext[i].func = server_writeValueAttribute;
-    }
-
-    for (size_t i = 0; i < tc.numberofClients; i++) {
-        tc.clientContext[i].index = i;
-        tc.clientContext[i].upperBound = ITERATIONS_PER_CLIENT;
-        tc.clientContext[i].func = client_writeValueAttribute;
-    }
-}
-
-START_TEST(writeValueAttribute) {
-        startMultithreading();
-    }
-END_TEST
-
-static Suite* testSuite_immutableNodes(void) {
-    Suite *s = suite_create("Multithreading");
-    TCase *valueCallback = tcase_create("Write value attribute");
-    initTest();
-    tcase_add_checked_fixture(valueCallback, setup, teardown);
-    tcase_add_test(valueCallback, writeValueAttribute);
-    suite_add_tcase(s,valueCallback);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_immutableNodes();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
-
diff --git a/ext/open62541/tests/multithreading/deviceObjectType.h b/ext/open62541/tests/multithreading/deviceObjectType.h
deleted file mode 100644
index 925b187..0000000
--- a/ext/open62541/tests/multithreading/deviceObjectType.h
+++ /dev/null
@@ -1,110 +0,0 @@
-#ifndef OPEN62541_MT_COMMON
-#define OPEN62541_MT_COMMON
-
-#include "mt_testing.h"
-
-UA_NodeId pumpTypeId = {1, UA_NODEIDTYPE_NUMERIC, {1001}};
-
-static void
-defineObjectTypes(void) {
-    UA_NodeId deviceTypeId;
-    UA_ObjectTypeAttributes dtAttr = UA_ObjectTypeAttributes_default;
-    dtAttr.displayName = UA_LOCALIZEDTEXT("en-US", "DeviceType");
-    UA_Server_addObjectTypeNode(tc.server, UA_NODEID_NULL,
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                UA_QUALIFIEDNAME(1, "DeviceType"), dtAttr,
-                                NULL, &deviceTypeId);
-
-    UA_VariableAttributes mnAttr = UA_VariableAttributes_default;
-    mnAttr.displayName = UA_LOCALIZEDTEXT("en-US", "ManufacturerName");
-    UA_NodeId manufacturerNameId;
-    UA_Server_addVariableNode(tc.server, UA_NODEID_NULL, deviceTypeId,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                              UA_QUALIFIEDNAME(1, "ManufacturerName"),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), mnAttr, NULL, &manufacturerNameId);
-
-    UA_Server_addReference(tc.server, manufacturerNameId,
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE),
-                           UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORY), true);
-
-
-    UA_VariableAttributes modelAttr = UA_VariableAttributes_default;
-    modelAttr.displayName = UA_LOCALIZEDTEXT("en-US", "ModelName");
-    UA_Server_addVariableNode(tc.server, UA_NODEID_NULL, deviceTypeId,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                              UA_QUALIFIEDNAME(1, "ModelName"),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), modelAttr, NULL, NULL);
-
-    UA_ObjectTypeAttributes ptAttr = UA_ObjectTypeAttributes_default;
-    ptAttr.displayName = UA_LOCALIZEDTEXT("en-US", "PumpType");
-    UA_Server_addObjectTypeNode(tc.server, pumpTypeId,
-                                deviceTypeId, UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                UA_QUALIFIEDNAME(1, "PumpType"), ptAttr,
-                                NULL, NULL);
-
-    UA_VariableAttributes statusAttr = UA_VariableAttributes_default;
-    statusAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Status");
-    statusAttr.valueRank = UA_VALUERANK_SCALAR;
-    UA_NodeId statusId;
-    UA_Server_addVariableNode(tc.server, UA_NODEID_NULL, pumpTypeId,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                              UA_QUALIFIEDNAME(1, "Status"),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), statusAttr, NULL, &statusId);
-
-    UA_Server_addReference(tc.server, statusId,
-                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE),
-                           UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORY), true);
-
-    UA_VariableAttributes rpmAttr = UA_VariableAttributes_default;
-    rpmAttr.displayName = UA_LOCALIZEDTEXT("en-US", "MotorRPM");
-    rpmAttr.valueRank = UA_VALUERANK_SCALAR;
-    UA_Server_addVariableNode(tc.server, UA_NODEID_NULL, pumpTypeId,
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                              UA_QUALIFIEDNAME(1, "MotorRPMs"),
-                              UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), rpmAttr, NULL, NULL);
-}
-
-static UA_StatusCode
-pumpTypeConstructor(UA_Server *servertmp,
-                    const UA_NodeId *sessionId, void *sessionContext,
-                    const UA_NodeId *typeId, void *typeContext,
-                    const UA_NodeId *nodeId, void **nodeContext) {
-    UA_RelativePathElement rpe;
-    UA_RelativePathElement_init(&rpe);
-    rpe.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT);
-    rpe.isInverse = false;
-    rpe.includeSubtypes = false;
-    rpe.targetName = UA_QUALIFIEDNAME(1, "Status");
-
-    UA_BrowsePath bp;
-    UA_BrowsePath_init(&bp);
-    bp.startingNode = *nodeId;
-    bp.relativePath.elementsSize = 1;
-    bp.relativePath.elements = &rpe;
-
-    UA_BrowsePathResult bpr =
-            UA_Server_translateBrowsePathToNodeIds(tc.server, &bp);
-    if(bpr.statusCode != UA_STATUSCODE_GOOD ||
-       bpr.targetsSize < 1)
-        return bpr.statusCode;
-
-    /* Set the status value */
-    UA_Boolean status = true;
-    UA_Variant value;
-    UA_Variant_setScalar(&value, &status, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    UA_Server_writeValue(tc.server, bpr.targets[0].targetId.nodeId, value);
-    UA_BrowsePathResult_clear(&bpr);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-addPumpTypeConstructor(UA_Server *servertmp) {
-    UA_NodeTypeLifecycle lifecycle;
-    lifecycle.constructor = pumpTypeConstructor;
-    lifecycle.destructor = NULL;
-    UA_Server_setNodeTypeLifecycle(tc.server, pumpTypeId, lifecycle);
-}
-
-#endif //OPEN62541_MT_COMMON
diff --git a/ext/open62541/tests/multithreading/mt_testing.h b/ext/open62541/tests/multithreading/mt_testing.h
deleted file mode 100644
index b77723e..0000000
--- a/ext/open62541/tests/multithreading/mt_testing.h
+++ /dev/null
@@ -1,104 +0,0 @@
-#ifndef OPEN62541_MT_TESTING_H
-#define OPEN62541_MT_TESTING_H
-
-#include <open62541/server_config_default.h>
-
-#define THREAD_CALLBACK_PARAM(name, param) static void * name(void *param)
-#define THREAD_CREATE_PARAM(handle, callback, param) pthread_create(&(handle), NULL, callback, (void*) &(param))
-
-typedef struct {
-    void (*func)(void *param); //function to execute
-    size_t counter; //index of the iteration
-    size_t index; // index within workerContext array of global TestContext
-    size_t upperBound; //number of iterations each thread schould execute func
-    THREAD_HANDLE handle;
-} ThreadContext;
-
-typedef struct {
-    size_t numberOfWorkers;
-    ThreadContext *workerContext;
-    size_t numberofClients;
-    ThreadContext *clientContext;
-    UA_Boolean running;
-    UA_Server *server;
-    UA_Client **clients;
-    void (*checkServerNodes)(void);
-} TestContext;
-
-TestContext tc;
-THREAD_HANDLE server_thread;
-
-THREAD_CALLBACK(serverloop) {
-    while(tc.running)
-        UA_Server_run_iterate(tc.server, true);
-    return 0;
-}
-
-static
-void teardown(void) {
-    for (size_t i = 0; i < tc.numberOfWorkers; i++)
-        THREAD_JOIN(tc.workerContext[i].handle);
-
-    for (size_t i = 0; i < tc.numberofClients; i++)
-        THREAD_JOIN(tc.clientContext[i].handle);
-
-    tc.running = false;
-    THREAD_JOIN(server_thread);
-    if (tc.checkServerNodes)
-        tc.checkServerNodes();
-    UA_Server_run_shutdown(tc.server);
-    UA_Server_delete(tc.server);
-}
-
-THREAD_CALLBACK_PARAM(workerLoop, val) {
-    ThreadContext tmp = (*(ThreadContext *) val);
-    for (size_t i = 0; i < tmp.upperBound; i++) {
-        tmp.counter = i;
-        tmp.func(&tmp);
-    }
-    return NULL;
-}
-
-THREAD_CALLBACK_PARAM(clientLoop, val) {
-    ThreadContext tmp = (*(ThreadContext *) val);
-    tc.clients[tmp.index] = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(tc.clients[tmp.index]));
-    UA_StatusCode retval = UA_Client_connect(tc.clients[tmp.index], "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    for(size_t i = 0; i < tmp.upperBound; i++) {
-        tmp.counter = i;
-        tmp.func(&tmp);
-    }
-    UA_Client_disconnect(tc.clients[tmp.index]);
-    UA_Client_delete(tc.clients[tmp.index]);
-    return NULL;
-}
-
-static UA_INLINE void
-initThreadContext(size_t numberOfWorkers, size_t numberOfClients, void (*checkServerNodes)(void)) {
-    tc.numberOfWorkers = numberOfWorkers;
-    tc.numberofClients = numberOfClients;
-    tc.checkServerNodes = checkServerNodes;
-    tc.workerContext = (ThreadContext*) UA_calloc(tc.numberOfWorkers, sizeof(ThreadContext));
-    tc.clients =  (UA_Client**) UA_calloc(tc.numberofClients, sizeof(UA_Client*));
-    tc.clientContext = (ThreadContext*) UA_calloc(tc.numberofClients, sizeof(ThreadContext));
-}
-
-static UA_INLINE void
-setThreadContext(ThreadContext *workerContext, size_t index, size_t upperBound, void (*func)(void *param)) {
-    workerContext->index = index;
-    workerContext->upperBound = upperBound;
-    workerContext->func = func;
-}
-
-static UA_INLINE void
-startMultithreading(void) {
-        for (size_t i = 0; i < tc.numberOfWorkers; i++)
-            THREAD_CREATE_PARAM(tc.workerContext[i].handle, workerLoop, tc.workerContext[i]);
-
-        for (size_t i = 0; i < tc.numberofClients; i++)
-            THREAD_CREATE_PARAM(tc.clientContext[i].handle, clientLoop, tc.clientContext[i]);
-}
-
-#endif //OPEN62541_MT_TESTING_H
diff --git a/ext/open62541/tests/nodeset-compiler/CMakeLists.txt b/ext/open62541/tests/nodeset-compiler/CMakeLists.txt
deleted file mode 100644
index e939ce7..0000000
--- a/ext/open62541/tests/nodeset-compiler/CMakeLists.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-include_directories("${PROJECT_BINARY_DIR}/src_generated/tests")

-

-###############################################

-# Test Companion Specs that need the full NS0 #

-###############################################

-

-if(UA_NAMESPACE_ZERO STREQUAL "FULL")

-

-    set(GENERATE_OUTPUT_DIR "${CMAKE_BINARY_DIR}/src_generated/tests")

-

-    # Generate types and namespace for DI

-    ua_generate_nodeset_and_datatypes(

-        NAME "tests-di"

-        FILE_CSV "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/OpcUaDiModel.csv"

-        FILE_BSD "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.Types.bsd"

-        NAMESPACE_IDX 2

-        OUTPUT_DIR "${GENERATE_OUTPUT_DIR}"

-        FILE_NS "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml"

-        INTERNAL

-    )

-

-    # Generate types and namespace for ADI

-    ua_generate_nodeset_and_datatypes(

-        NAME "tests-adi"

-        FILE_CSV "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/ADI/OpcUaAdiModel.csv"

-        FILE_BSD "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/ADI/Opc.Ua.Adi.Types.bsd"

-        NAMESPACE_IDX 3

-        OUTPUT_DIR "${GENERATE_OUTPUT_DIR}"

-        FILE_NS "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/ADI/Opc.Ua.Adi.NodeSet2.xml"

-        DEPENDS "tests-di"

-        INTERNAL

-    )

-

-    add_executable(check_nodeset_compiler_adi check_nodeset_compiler_adi.c

-                   ${UA_NODESET_TESTS_DI_SOURCES}

-                   ${UA_NODESET_TESTS_ADI_SOURCES}

-                   ${UA_TYPES_TESTS_DI_SOURCES}

-                   ${UA_TYPES_TESTS_ADI_SOURCES}

-                   $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    add_dependencies(check_nodeset_compiler_adi open62541-generator-ns-tests-adi)

-    target_link_libraries(check_nodeset_compiler_adi ${LIBS})

-    add_test_valgrind(nodeset_compiler_adi ${TESTS_BINARY_DIR}/check_nodeset_compiler_adi)

-

-

-    # generate PLCopen namespace which is using DI

-    ua_generate_nodeset_and_datatypes(

-        NAME "tests-plc"

-        # PLCopen does not define custom types. Only generate the nodeset

-        FILE_NS "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/PLCopen/Opc.Ua.Plc.NodeSet2.xml"

-        # PLCopen depends on the di nodeset, which must be generated before

-        OUTPUT_DIR "${GENERATE_OUTPUT_DIR}"

-        DEPENDS "tests-di"

-        INTERNAL

-    )

-

-    add_executable(check_nodeset_compiler_plc check_nodeset_compiler_plc.c

-                   ${UA_NODESET_TESTS_DI_SOURCES}

-                   ${UA_NODESET_TESTS_PLC_SOURCES}

-                   ${UA_TYPES_TESTS_DI_SOURCES}

-                   ${UA_TYPES_TESTS_PLC_SOURCES}

-                   $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    add_dependencies(check_nodeset_compiler_plc open62541-generator-ns-tests-plc)

-    target_link_libraries(check_nodeset_compiler_plc ${LIBS})

-    add_test_valgrind(nodeset_compiler_plc ${TESTS_BINARY_DIR}/check_nodeset_compiler_plc)

-

-    

-endif()

-

-#generate testnodeset

-if(UA_NAMESPACE_ZERO STREQUAL "FULL")

-

-

-    # Generate types and namespace for ADI

-    ua_generate_nodeset_and_datatypes(

-        NAME "tests-testnodeset"

-        FILE_CSV "${PROJECT_SOURCE_DIR}/tests/nodeset-compiler/testnodeset.csv"

-        FILE_BSD "${PROJECT_SOURCE_DIR}/tests/nodeset-compiler/testtypes.bsd"

-        NAMESPACE_IDX 2

-        OUTPUT_DIR "${GENERATE_OUTPUT_DIR}"

-        FILE_NS "${PROJECT_SOURCE_DIR}/tests/nodeset-compiler/testnodeset.xml"

-    )

-

-    add_executable(check_nodeset_compiler_testnodeset check_nodeset_compiler_testnodeset.c

-                   ${UA_NODESET_TESTS_TESTNODESET_SOURCES}

-                   ${UA_TYPES_TESTS_TESTNODESET_SOURCES}

-                $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

-    add_dependencies(check_nodeset_compiler_testnodeset open62541-generator-ns-tests-testnodeset)

-    target_link_libraries(check_nodeset_compiler_testnodeset ${LIBS})

-    add_test_valgrind(nodeset_compiler_testnodeset ${TESTS_BINARY_DIR}/check_nodeset_compiler_testnodeset)

-endif()

diff --git a/ext/open62541/tests/nodeset-compiler/check_nodeset_compiler_adi.c b/ext/open62541/tests/nodeset-compiler/check_nodeset_compiler_adi.c
deleted file mode 100644
index 1a27469..0000000
--- a/ext/open62541/tests/nodeset-compiler/check_nodeset_compiler_adi.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include "check.h"
-#include "namespace_tests_adi_generated.h"
-#include "namespace_tests_di_generated.h"
-#include "testing_clock.h"
-
-UA_Server *server = NULL;
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-    UA_Server_run_startup(server);
-}
-
-static void teardown(void) {
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-
-START_TEST(Server_addDiNodeset) {
-    UA_StatusCode retval = namespace_tests_di_generated(server);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(Server_addAdiNodeset) {
-    UA_StatusCode retval = namespace_tests_adi_generated(server);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-static Suite* testSuite_Client(void) {
-    Suite *s = suite_create("Server Nodeset Compiler");
-    TCase *tc_server = tcase_create("Server DI and ADI nodeset");
-    tcase_add_unchecked_fixture(tc_server, setup, teardown);
-    tcase_add_test(tc_server, Server_addDiNodeset);
-    tcase_add_test(tc_server, Server_addAdiNodeset);
-    suite_add_tcase(s, tc_server);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/nodeset-compiler/check_nodeset_compiler_plc.c b/ext/open62541/tests/nodeset-compiler/check_nodeset_compiler_plc.c
deleted file mode 100644
index 849ed43..0000000
--- a/ext/open62541/tests/nodeset-compiler/check_nodeset_compiler_plc.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-#include <open62541/types.h>
-
-#include "check.h"
-#include "testing_clock.h"
-#include "tests/namespace_tests_di_generated.h"
-#include "tests/namespace_tests_plc_generated.h"
-#include "unistd.h"
-
-UA_Server *server = NULL;
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-    UA_Server_run_startup(server);
-}
-
-static void teardown(void) {
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-START_TEST(Server_addDiNodeset) {
-    UA_StatusCode retval = namespace_tests_di_generated(server);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(Server_addPlcNodeset) {
-    UA_StatusCode retval = namespace_tests_plc_generated(server);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-static Suite* testSuite_Client(void) {
-    Suite *s = suite_create("Server Nodeset Compiler");
-    TCase *tc_server = tcase_create("Server DI and PLCopen nodeset");
-    tcase_add_unchecked_fixture(tc_server, setup, teardown);
-    tcase_add_test(tc_server, Server_addDiNodeset);
-    tcase_add_test(tc_server, Server_addPlcNodeset);
-    suite_add_tcase(s, tc_server);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/nodeset-compiler/check_nodeset_compiler_testnodeset.c b/ext/open62541/tests/nodeset-compiler/check_nodeset_compiler_testnodeset.c
deleted file mode 100644
index 6cbc555..0000000
--- a/ext/open62541/tests/nodeset-compiler/check_nodeset_compiler_testnodeset.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-#include <open62541/types.h>
-
-#include "check.h"
-#include "testing_clock.h"
-#include "tests/namespace_tests_testnodeset_generated.h"
-#include "unistd.h"
-
-UA_Server *server = NULL;
-UA_DataTypeArray customTypesArray = { NULL, UA_TYPES_TESTS_TESTNODESET_COUNT, UA_TYPES_TESTS_TESTNODESET};
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-    config->customDataTypes = &customTypesArray;
-    UA_Server_run_startup(server);
-}
-
-static void teardown(void) {
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-START_TEST(Server_addTestNodeset) {
-    UA_StatusCode retval = namespace_tests_testnodeset_generated(server);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(checkScalarValues) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    // Point_scalar_Init
-    UA_Server_readValue(server, UA_NODEID_NUMERIC(2, 10002), &out);
-    ck_assert(UA_Variant_isScalar(&out));
-    UA_Point *p = (UA_Point *)out.data;
-    ck_assert(p->x == (UA_Double)1.0);
-    ck_assert(p->y == (UA_Double)2.0);
-    UA_Variant_clear(&out);
-    // Point_scalar_noInit
-    UA_Server_readValue(server, UA_NODEID_NUMERIC(2, 10005), &out);
-    ck_assert(out.data == NULL);
-    UA_Variant_clear(&out);
-}
-END_TEST
-
-START_TEST(check1dimValues) {
-    UA_Variant out;
-    UA_Variant_init(&out);
-    // Point_1dim_noInit
-    UA_Server_readValue(server, UA_NODEID_NUMERIC(2, 10007), &out);
-    ck_assert(!UA_Variant_isScalar(&out));
-    ck_assert(out.arrayDimensionsSize == 0);
-    UA_Variant_clear(&out);
-    // Point_1dim_init
-    UA_Server_readValue(server, UA_NODEID_NUMERIC(2, 10004), &out);
-    UA_Point *p = (UA_Point *)out.data;
-    ck_assert(!UA_Variant_isScalar(&out));
-    ck_assert(out.arrayLength == 4);
-    ck_assert(out.arrayDimensionsSize == 0);    // For 1 dimension arrays, initializing arrayDimensionsSize may confuse some OPC clients.
-    ck_assert(p[0].x == (UA_Double)1.0);
-    ck_assert(p[3].y == (UA_Double)8.0);
-    UA_Variant_clear(&out);
-}
-END_TEST
-
-START_TEST(readValueRank) {
-    UA_Int32 rank;
-    UA_Variant dims;
-    // scalar
-    UA_Server_readValueRank(server, UA_NODEID_NUMERIC(2, 10002), &rank);
-    ck_assert_int_eq(rank, -1);
-    UA_Server_readValueRank(server, UA_NODEID_NUMERIC(2, 10002), &rank);
-    ck_assert_int_eq(rank, -1);
-    UA_Variant_init(&dims);
-    UA_Server_readArrayDimensions(server, UA_NODEID_NUMERIC(2, 10002), &dims);
-    ck_assert_int_eq(dims.arrayLength, 0);
-    UA_Variant_clear(&dims);
-    // 1-dim
-    UA_Server_readValueRank(server, UA_NODEID_NUMERIC(2, 10007), &rank);
-    ck_assert_int_eq(rank, 1);
-    UA_Server_readArrayDimensions(server, UA_NODEID_NUMERIC(2, 10007), &dims);
-    ck_assert_int_eq(dims.arrayLength, 1);
-    ck_assert_int_eq(*((UA_UInt32 *)dims.data), 0);
-    UA_Variant_clear(&dims);
-    UA_Server_readValueRank(server, UA_NODEID_NUMERIC(2, 10004), &rank);
-    ck_assert_int_eq(rank, 1);
-    UA_Server_readArrayDimensions(server, UA_NODEID_NUMERIC(2, 10004), &dims);
-    ck_assert_int_eq(dims.arrayLength, 1);
-    ck_assert_int_eq(*((UA_UInt32 *)dims.data), 4);
-    UA_Variant_clear(&dims);
-    // 2-dim
-    UA_Server_readValueRank(server, UA_NODEID_NUMERIC(2, 10006), &rank);
-    ck_assert_int_eq(rank, 2);
-    UA_Server_readArrayDimensions(server, UA_NODEID_NUMERIC(2, 10006), &dims);
-    ck_assert_int_eq(dims.arrayLength, 2);
-    UA_UInt32 *dimensions = (UA_UInt32 *)dims.data;
-    ck_assert_int_eq(dimensions[0], 2);
-    ck_assert_int_eq(dimensions[1], 2);
-    UA_Variant_clear(&dims);
-}
-END_TEST
-
-static Suite *testSuite_Client(void) {
-    Suite *s = suite_create("Server Nodeset Compiler");
-    TCase *tc_server = tcase_create("Server Testnodeset");
-    tcase_add_unchecked_fixture(tc_server, setup, teardown);
-    tcase_add_test(tc_server, Server_addTestNodeset);
-    tcase_add_test(tc_server, checkScalarValues);
-    tcase_add_test(tc_server, check1dimValues);
-    tcase_add_test(tc_server, readValueRank);
-    suite_add_tcase(s, tc_server);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/nodeset-compiler/testnodeset.csv b/ext/open62541/tests/nodeset-compiler/testnodeset.csv
deleted file mode 100644
index 295480a..0000000
--- a/ext/open62541/tests/nodeset-compiler/testnodeset.csv
+++ /dev/null
@@ -1,16 +0,0 @@
-Structs,5001,Object
-Point_Encoding_DefaultBinary,5002,Object
-BaseDataTypes,5100,Object
-BaseDataTypes_Double,5101,Variable
-BaseDataTypes_Uint32,5102,Variable
-Point,10001,DataType
-Structs_PointA,10002,Variable
-Structs_PointC_Array,10004,Variable
-Structs_PointB,10005,Variable
-Structs_InputArguments,11493,Variable
-Structs_StaticNodeIdTypes,15962,Variable
-Structs_StaticNodeIdTypes,15963,Variable
-BaseDataTypes_String1_scalar,16001,Variable
-BaseDataTypes_ByteString_Scalar,16002,Variable
-PointWithArray,3003,DataType
-NestedPoint,10008,DataType
\ No newline at end of file
diff --git a/ext/open62541/tests/nodeset-compiler/testnodeset.xml b/ext/open62541/tests/nodeset-compiler/testnodeset.xml
deleted file mode 100644
index 18d7f9a..0000000
--- a/ext/open62541/tests/nodeset-compiler/testnodeset.xml
+++ /dev/null
@@ -1,491 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<UANodeSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" xmlns:s1="http://yourorganisation.org/test/Types.xsd" xmlns:ua="http://unifiedautomation.com/Configuration/NodeSet.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-    <NamespaceUris>
-        <Uri>http://yourorganisation.org/test/</Uri>
-    </NamespaceUris>
-    <Aliases>
-        <Alias Alias="Int32">i=6</Alias>
-        <Alias Alias="UInt32">i=7</Alias>
-        <Alias Alias="Double">i=11</Alias>
-        <Alias Alias="Organizes">i=35</Alias>
-        <Alias Alias="HasModellingRule">i=37</Alias>
-        <Alias Alias="HasEncoding">i=38</Alias>
-        <Alias Alias="HasTypeDefinition">i=40</Alias>
-        <Alias Alias="HasSubtype">i=45</Alias>
-        <Alias Alias="HasComponent">i=47</Alias>
-        <Alias Alias="IdType">i=256</Alias>
-        <Alias Alias="Argument">i=296</Alias>
-        <Alias Alias="Point3D">ns=1;i=3002</Alias>
-        <Alias Alias="Point">ns=1;i=10001</Alias>
-    </Aliases>
-    <Extensions>
-        <Extension>
-            <ua:ModelInfo Tool="UaModeler" Hash="NY/CbF6sk/OjLXFpjvfTAA==" Version="1.6.2"/>
-        </Extension>
-    </Extensions>
-    <!-->Struct with builtin members<-->
-    <UADataType NodeId="ns=1;i=10001" BrowseName="1:Point">
-        <DisplayName>Point</DisplayName>
-        <References>
-            <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-        </References>
-        <Definition Name="1:Point">
-            <Field DataType="Double" Name="x"/>
-            <Field DataType="Double" Name="y"/>
-        </Definition>
-    </UADataType>
-    <UADataType NodeId="ns=1;i=10008" BrowseName="1:NestedPoint">
-        <DisplayName>NestedPoint</DisplayName>
-        <References>
-            <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-        </References>
-        <Definition Name="1:Point">
-            <Field DataType="Double" Name="x"/>
-            <Field DataType="Double" Name="y"/>
-            <Field DataType="ns=1;i=10001" Name="Point1" />
-        </Definition>
-    </UADataType>
-    <UAObject SymbolicName="DefaultBinary" NodeId="ns=1;i=5002" BrowseName="Default Binary">
-        <DisplayName>Default Binary</DisplayName>
-        <References>
-            <Reference ReferenceType="HasEncoding" IsForward="false">ns=1;i=10001</Reference>
-            <Reference ReferenceType="HasTypeDefinition">i=76</Reference>
-        </References>
-    </UAObject>    
-    <UAObject NodeId="ns=1;i=5100" BrowseName="1:BuiltinTypes">
-        <DisplayName>BuiltinTypes</DisplayName>
-        <References>
-            <Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
-            <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
-        </References>
-    </UAObject>
-    <UAVariable DataType="ByteString" NodeId="ns=1;i=16002" BrowseName="1:ByteString_scalar_init" AccessLevel="3">
-        <DisplayName>ByteString_scalar_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>
-        <Value>
-            <ByteString>SGVsbG9Xb3JsZA==</ByteString>
-        </Value>
-    </UAVariable>
-    <!--ValueRank>
-    OPC UA spec part 3, NodeClass Variable
-    -3: Scalar or 1-dim
-    -2: Any, value can be a scalar or an array with any number of dimensions
-    -1: scalar
-     0: value is array with one or more dimensions
-     1: array with one dimension
-     n>1: array with with the specified numbers of dimensions
-    <-->
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8001" BrowseName="1:Int32_scalar_noInit_withoutValueRank" AccessLevel="3">
-        <DisplayName>Int32_scalar_noInit_withoutValueRank</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>        
-    </UAVariable>
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8002" BrowseName="1:Int32_scalar_Init_ValueRank=-3" AccessLevel="3" ValueRank="-3">
-        <DisplayName>Int32_scalar_Init_ValueRank=-3</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>
-        <Value>            
-            <Int32>1</Int32>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8003" BrowseName="1:Int32_1dim_Init_ValueRank=-3" AccessLevel="3" ValueRank="-3">
-        <DisplayName>Int32_1dim_Init_ValueRank=-3</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>
-        <Value>
-            <ListOfInt32>
-                <Int32>1</Int32>
-                <Int32>2</Int32>
-            </ListOfInt32>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8004" BrowseName="1:Int32_scalar_noInit_ValueRank=-2" AccessLevel="3" ValueRank="-2">
-        <DisplayName>Int32_scalar_noInit_ValueRank=-2</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>        
-    </UAVariable>
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8005" BrowseName="1:Int32_scalar_noInit_ValueRank=-1" AccessLevel="3" ValueRank="-1">
-        <DisplayName>Int32_scalar_noInit_ValueRank=-1</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>
-        <Value>
-            <ListOfInt32>
-                <Int32>1</Int32>
-                <Int32>2</Int32>
-            </ListOfInt32>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8006" BrowseName="1:Int32_OneOrMoreDim_noInit_ValueRank=0" AccessLevel="3" ValueRank="0">
-        <DisplayName>Int32_scalar_noInit_ValueRank=0</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>        
-    </UAVariable>
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8007" BrowseName="1:Int32_1dim_noInit_ValueRank=1" AccessLevel="3" ValueRank="1">
-        <DisplayName>Int32_1dim_noInit_ValueRank=1</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>        
-    </UAVariable>
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8008" BrowseName="1:Int32_2dim_noInit_ValueRank=2" AccessLevel="3" ValueRank="2">
-        <DisplayName>Int32_2dim_noInit_ValueRank=2</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>        
-    </UAVariable>
-    <UAVariable DataType="Int32" NodeId="ns=1;i=8009" BrowseName="1:Int32_3dim_noInit_ValueRank=2" AccessLevel="3" ValueRank="3">
-        <DisplayName>Int32_3dim_noInit_ValueRank=2</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>        
-    </UAVariable>
-    <UAVariable DataType="String" NodeId="ns=1;i=16001" BrowseName="1:String_scalar_init" AccessLevel="3">
-        <DisplayName>String_scalar_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>
-        <Value>
-            <uax:String>Hello World</uax:String>
-        </Value>
-    </UAVariable>
-    <UAObject NodeId="ns=1;i=5001" BrowseName="1:NotBuiltinTypes">
-        <DisplayName>NotBuiltinTypes</DisplayName>
-        <References>            
-            <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
-        </References>
-    </UAObject>   
-    <UAVariable DataType="Argument" NodeId="ns=1;i=11493" BrowseName="InputArguments_scalar_init">
-        <DisplayName>InputArguments_scalar_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=5100</Reference>
-        </References>
-        <Value>
-            <uax:ExtensionObject>
-                <uax:TypeId>
-                    <uax:Identifier>i=297</uax:Identifier>
-                </uax:TypeId>
-                <uax:Body>
-                    <Argument xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-                        <Name>argName</Name>
-                        <DataType>
-                            <Identifier>i=1</Identifier>
-                        </DataType>
-                        <ValueRank>-1</ValueRank>                        
-                        <ArrayDimensions>0</ArrayDimensions>
-                        <Description>
-                            <Locale>en</Locale>
-                            <Text>myDescritipon</Text>
-                        </Description>
-                    </Argument>
-                </uax:Body>
-            </uax:ExtensionObject>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="Point" ParentNodeId="ns=1;i=5001" NodeId="ns=1;i=10002" BrowseName="1:Point_scalar_init" AccessLevel="3">
-        <DisplayName>Point_scalar_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=5001</Reference>            
-        </References>
-        <Value>
-            <uax:ExtensionObject>
-                <uax:TypeId>
-                    <uax:Identifier>ns=1;i=10001</uax:Identifier>
-                </uax:TypeId>
-                <uax:Body>
-                    <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                        <x>1</x>
-                        <y>2</y>
-                    </Point>
-                </uax:Body>
-            </uax:ExtensionObject>
-        </Value>
-    </UAVariable>
-    <!-->uninitialized scalar point<-->
-    <UAVariable DataType="Point" ParentNodeId="ns=1;i=5001" ValueRank="-1" NodeId="ns=1;i=10005" BrowseName="1:Point_scalar_noInit" AccessLevel="3">
-        <DisplayName>Point_scalar_noInit</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=5001</Reference>
-        </References>
-    </UAVariable>
-    <UAVariable DataType="Point" ParentNodeId="ns=1;i=5001" ValueRank="1" NodeId="ns=1;i=10007" BrowseName="1:Point_1dim_noInit" AccessLevel="3">
-        <DisplayName>Point_1dim_noInit</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=5001</Reference>
-        </References>
-    </UAVariable>
-    <UAVariable DataType="Point" ParentNodeId="ns=1;i=5001" ValueRank="1" NodeId="ns=1;i=10004" ArrayDimensions="4" BrowseName="1:Point_1dim_init" AccessLevel="3">
-        <DisplayName>Point_1dim_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=5001</Reference>
-        </References>
-        <Value>
-            <uax:ListOfExtensionObject>
-                <uax:ExtensionObject>
-                    <uax:TypeId>
-                        <uax:Identifier>i=0</uax:Identifier>
-                    </uax:TypeId>
-                    <uax:Body>
-                        <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                            <x>1</x>
-                            <y>2</y>
-                        </Point>
-                    </uax:Body>
-                </uax:ExtensionObject>
-                <uax:ExtensionObject>
-                    <uax:TypeId>
-                        <uax:Identifier>i=0</uax:Identifier>
-                    </uax:TypeId>
-                    <uax:Body>
-                        <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                            <x>3</x>
-                            <y>4</y>
-                        </Point>
-                    </uax:Body>
-                </uax:ExtensionObject>
-                <uax:ExtensionObject>
-                    <uax:TypeId>
-                        <uax:Identifier>i=0</uax:Identifier>
-                    </uax:TypeId>
-                    <uax:Body>
-                        <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                            <x>5</x>
-                            <y>6</y>
-                        </Point>
-                    </uax:Body>
-                </uax:ExtensionObject>
-                <uax:ExtensionObject>
-                    <uax:TypeId>
-                        <uax:Identifier>i=0</uax:Identifier>
-                    </uax:TypeId>
-                    <uax:Body>
-                        <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                            <x>7</x>
-                            <y>8</y>
-                        </Point>
-                    </uax:Body>
-                </uax:ExtensionObject>
-            </uax:ListOfExtensionObject>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="Point" ParentNodeId="ns=1;i=5001" ValueRank="2" NodeId="ns=1;i=10006" ArrayDimensions="2,2" BrowseName="1:Point_2dim_init" AccessLevel="3">
-        <DisplayName>Point_2dim_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=5001</Reference>
-        </References>
-        <Value>
-            <uax:ListOfExtensionObject>
-                <uax:ExtensionObject>
-                    <uax:TypeId>
-                        <uax:Identifier>ns=1;i=10001</uax:Identifier>
-                    </uax:TypeId>
-                    <uax:Body>
-                        <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                            <x>1</x>
-                            <y>2</y>
-                        </Point>
-                    </uax:Body>
-                </uax:ExtensionObject>
-                <uax:ExtensionObject>
-                    <uax:TypeId>
-                        <uax:Identifier>ns=1;i=10001</uax:Identifier>
-                    </uax:TypeId>
-                    <uax:Body>
-                        <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                            <x>3</x>
-                            <y>4</y>
-                        </Point>
-                    </uax:Body>
-                </uax:ExtensionObject>
-                <uax:ExtensionObject>
-                    <uax:TypeId>
-                        <uax:Identifier>ns=1;i=10001</uax:Identifier>
-                    </uax:TypeId>
-                    <uax:Body>
-                        <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                            <x>5</x>
-                            <y>6</y>
-                        </Point>
-                    </uax:Body>
-                </uax:ExtensionObject>
-                <uax:ExtensionObject>
-                    <uax:TypeId>
-                        <uax:Identifier>ns=1;i=10001</uax:Identifier>
-                    </uax:TypeId>
-                    <uax:Body>
-                        <Point xmlns="http://yourorganisation.org/test/Types.xsd">
-                            <x>7</x>
-                            <y>8</y>
-                        </Point>
-                    </uax:Body>
-                </uax:ExtensionObject>
-            </uax:ListOfExtensionObject>
-        </Value>
-    </UAVariable>    
-    <UAVariable DataType="Double" ParentNodeId="ns=1;i=5100" NodeId="ns=1;i=5101" BrowseName="1:Double_init" AccessLevel="3">
-        <DisplayName>Double_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="HasModellingRule">i=78</Reference>
-        </References>
-        <Value>
-            <uax:Double>42</uax:Double>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="UInt32" ParentNodeId="ns=1;i=5100" ValueRank="1" NodeId="ns=1;i=5102" ArrayDimensions="3" BrowseName="1:UInt32_init" AccessLevel="3">
-        <DisplayName>UInt32_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-        </References>
-        <Value>
-            <uax:ListOfUInt32>
-                <uax:UInt32>1</uax:UInt32>
-                <uax:UInt32>2</uax:UInt32>
-                <uax:UInt32>3</uax:UInt32>
-            </uax:ListOfUInt32>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="IdType" ParentNodeId="ns=1;i=5001" ValueRank="1" NodeId="ns=1;i=15962" ArrayDimensions="7" BrowseName="Enum_1dim_init">
-        <DisplayName>Enum_init</DisplayName>
-        <Description>A list of IdTypes for nodes which are the same in every server that exposes them.</Description>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-        </References>
-        <Value>
-            <uax:ListOfInt32>
-                <uax:Int32>0</uax:Int32>
-                <uax:Int32>1</uax:Int32>
-                <uax:Int32>3</uax:Int32>
-                <uax:Int32>4</uax:Int32>
-                <uax:Int32>5</uax:Int32>
-                <uax:Int32>6</uax:Int32>
-                <uax:Int32>7</uax:Int32>
-            </uax:ListOfInt32>
-        </Value>
-    </UAVariable>
-    <UAVariable DataType="IdType" ParentNodeId="ns=1;i=5001" NodeId="ns=1;i=15963" BrowseName="Enum_scalar_noInit">
-        <DisplayName>Enum_scalar_noInit</DisplayName>
-        <Description>A list of IdTypes for nodes which are the same in every server that exposes them.</Description>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-        </References>
-    </UAVariable>
-    <UAVariable DataType="i=307" NodeId="ns=1;i=16003" BrowseName="1:ApplicationTye_1dim_noInit" UserAccessLevel="3" AccessLevel="3" ValueRank="1">
-        <DisplayName>ApplicationTye_1dim_noInit</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>
-        <Value>
-            <ListOfInt32 xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-                <Int32>0</Int32>
-                <Int32>1</Int32>
-                <Int32>2</Int32>
-                <Int32>3</Int32>
-            </ListOfInt32>
-        </Value>
-    </UAVariable>
-    
-    <UAVariable DataType="Int32" ValueRank="2" NodeId="ns=1;i=6003" ArrayDimensions="3,2" BrowseName="1:Int32_2dim_init" AccessLevel="3">
-        <DisplayName>Int32_2dim_init</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5100</Reference>
-        </References>
-        <Value>
-            <uax:ListOfInt32>
-                <uax:Int32>11</uax:Int32>
-                <uax:Int32>21</uax:Int32>
-                <uax:Int32>31</uax:Int32>
-                <uax:Int32>12</uax:Int32>
-                <uax:Int32>22</uax:Int32>
-                <uax:Int32>32</uax:Int32>
-            </uax:ListOfInt32>
-        </Value>
-    </UAVariable>
-    <UADataType NodeId="ns=1;i=3003" BrowseName="1:PointWithArray">
-        <DisplayName>PointWithArray</DisplayName>
-        <References>
-            <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-        </References>
-        <Definition Name="1:PointWithArray">
-            <Field DataType="Double" Name="x"/>
-            <Field DataType="Double" Name="y"/>
-            <Field DataType="Double" Name="z"/>
-            <Field DataType="UInt32" Name="array1Size"/>
-            <Field DataType="Double" ValueRank="1" Name="array1"/>
-        </Definition>
-    </UADataType>
-    <UAVariable DataType="ns=1;i=3003" NodeId="ns=1;i=6008" BrowseName="1:PointWithArray_scalar_noInit" UserAccessLevel="3" AccessLevel="3">
-        <DisplayName>PointWithArray_scalar_noInit</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5001</Reference>
-        </References>
-        <!-->
-        <Value>
-            <uax:ExtensionObject>
-                <uax:TypeId>
-                    <uax:Identifier>ns=1;i=3003</uax:Identifier>
-                </uax:TypeId>
-                <uax:Body>
-                    <PointWithArray xmlns="http://yourorganisation.org/exported2/Types.xsd">
-                        <x>1.1</x>
-                        <y>2.2</y>
-                        <z>3.3</z>
-                        <array1Size>1</array1Size>
-                        <array1><Double>1.1</Double></array1>
-                    </PointWithArray>
-                </uax:Body>
-            </uax:ExtensionObject>
-        </Value>-->
-    </UAVariable>
-    <UAVariable DataType="ns=1;i=10008" NodeId="ns=1;i=6009" BrowseName="1:NestedPoint_scalar_noInit" UserAccessLevel="3" AccessLevel="3">
-        <DisplayName>NestedPoint_scalar_noInit</DisplayName>
-        <References>
-            <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-            <Reference ReferenceType="Organizes" IsForward="false">ns=1;i=5001</Reference>
-        </References>
-        <!-->
-        <Value>
-            <uax:ExtensionObject>
-                <uax:TypeId>
-                    <uax:Identifier>ns=1;i=3003</uax:Identifier>
-                </uax:TypeId>
-                <uax:Body>
-                    <PointWithArray xmlns="http://yourorganisation.org/exported2/Types.xsd">
-                        <x>1.1</x>
-                        <y>2.2</y>
-                        <z>3.3</z>
-                        <array1Size>1</array1Size>
-                        <array1><Double>1.1</Double></array1>
-                    </PointWithArray>
-                </uax:Body>
-            </uax:ExtensionObject>
-        </Value>-->
-    </UAVariable>
-</UANodeSet>
diff --git a/ext/open62541/tests/nodeset-compiler/testtypes.bsd b/ext/open62541/tests/nodeset-compiler/testtypes.bsd
deleted file mode 100644
index 98bc2fb..0000000
--- a/ext/open62541/tests/nodeset-compiler/testtypes.bsd
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!--
- * Copyright (c) 2005-2018 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/
--->
-
-<opc:TypeDictionary
-  xmlns:opc="http://opcfoundation.org/BinarySchema/"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xmlns:ua="http://opcfoundation.org/UA/"
-  xmlns:tns="http://yourorganisation.org/test/"
-  DefaultByteOrder="LittleEndian"
-  TargetNamespace="http://yourorganisation.org/test/"
->
-  <opc:Import Namespace="http://opcfoundation.org/UA/" Location="Opc.Ua.BinarySchema.bsd"/>
-
-  <opc:StructuredType Name="Point" BaseType="ua:ExtensionObject">
-    <opc:Field Name="x" TypeName="opc:Double" />
-    <opc:Field Name="y" TypeName="opc:Double" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="NestedPoint" BaseType="ua:ExtensionObject">
-    <opc:Field Name="x" TypeName="opc:Double" />
-    <opc:Field Name="y" TypeName="opc:Double" />
-    <opc:Field Name="point1" TypeName="tns:Point" />
-  </opc:StructuredType>
-
-   <opc:StructuredType Name="PointWithArray" BaseType="ua:ExtensionObject">
-    <opc:Field Name="x" TypeName="opc:Double" />
-    <opc:Field Name="y" TypeName="opc:Double" />
-    <opc:Field Name="z" TypeName="opc:Double" />
-    <opc:Field Name="array1Size" TypeName="opc:UInt32" />
-    <opc:Field Name="array1" TypeName="opc:Double" LengthField="array1Size" />
-  </opc:StructuredType>
-
-</opc:TypeDictionary>
diff --git a/ext/open62541/tests/pubsub/check_pubsub_connection_udp.c b/ext/open62541/tests/pubsub/check_pubsub_connection_udp.c
deleted file mode 100644
index 7f71439..0000000
--- a/ext/open62541/tests/pubsub/check_pubsub_connection_udp.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017 - 2018 Fraunhofer IOSB (Author: Andreas Ebner)
- */
-
-#include <open62541/plugin/pubsub_udp.h>
-#include <open62541/server_config_default.h>
-#include <open62541/server_pubsub.h>
-#include <open62541/types_generated_encoding_binary.h>
-
-#include "ua_server_internal.h"
-
-#include <check.h>
-
-UA_Server *server = NULL;
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    config->pubsubTransportLayers = (UA_PubSubTransportLayer *)
-        UA_malloc(sizeof(UA_PubSubTransportLayer));
-    config->pubsubTransportLayers[0] = UA_PubSubTransportLayerUDPMP();
-    config->pubsubTransportLayersSize++;
-    UA_Server_run_startup(server);
-}
-
-static void teardown(void) {
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-START_TEST(AddConnectionsWithMinimalValidConfiguration){
-    UA_StatusCode retVal;
-    UA_PubSubConnectionConfig connectionConfig;
-    memset(&connectionConfig, 0, sizeof(UA_PubSubConnectionConfig));
-    connectionConfig.name = UA_STRING("UADP Connection");
-    UA_NetworkAddressUrlDataType networkAddressUrl = {UA_STRING_NULL, UA_STRING("opc.udp://224.0.0.22:4840/")};
-    UA_Variant_setScalar(&connectionConfig.address, &networkAddressUrl,
-                         &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-    connectionConfig.transportProfileUri = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-    retVal = UA_Server_addPubSubConnection(server, &connectionConfig, NULL);
-    ck_assert_int_eq(server->pubSubManager.connectionsSize, 1);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    ck_assert(server->pubSubManager.connections[0].channel != NULL);
-    retVal = UA_Server_addPubSubConnection(server, &connectionConfig, NULL);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    ck_assert(server->pubSubManager.connections[1].channel != NULL);
-    ck_assert_int_eq(server->pubSubManager.connectionsSize, 2);
-} END_TEST
-
-START_TEST(AddRemoveAddConnectionWithMinimalValidConfiguration){
-        UA_StatusCode retVal;
-        UA_PubSubConnectionConfig connectionConfig;
-        memset(&connectionConfig, 0, sizeof(UA_PubSubConnectionConfig));
-        connectionConfig.name = UA_STRING("UADP Connection");
-        UA_NetworkAddressUrlDataType networkAddressUrl = {UA_STRING_NULL, UA_STRING("opc.udp://224.0.0.22:4840/")};
-        UA_Variant_setScalar(&connectionConfig.address, &networkAddressUrl,
-                             &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-        connectionConfig.transportProfileUri = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-        UA_NodeId connectionIdent;
-        retVal = UA_Server_addPubSubConnection(server, &connectionConfig, &connectionIdent);
-        ck_assert_int_eq(server->pubSubManager.connectionsSize, 1);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert(server->pubSubManager.connections[0].channel != NULL);
-        retVal |= UA_Server_removePubSubConnection(server, connectionIdent);
-        ck_assert_int_eq(server->pubSubManager.connectionsSize, 0);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        retVal = UA_Server_addPubSubConnection(server, &connectionConfig, &connectionIdent);
-        ck_assert_int_eq(server->pubSubManager.connectionsSize, 1);
-        ck_assert(server->pubSubManager.connections[0].channel != NULL);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(AddConnectionWithInvalidAddress){
-    UA_StatusCode retVal;
-    UA_PubSubConnectionConfig connectionConfig;
-    memset(&connectionConfig, 0, sizeof(UA_PubSubConnectionConfig));
-    connectionConfig.name = UA_STRING("UADP Connection");
-    UA_NetworkAddressUrlDataType networkAddressUrl = {UA_STRING_NULL, UA_STRING("opc.udp://256.0.0.22:4840/")};
-    UA_Variant_setScalar(&connectionConfig.address, &networkAddressUrl,
-                         &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-    connectionConfig.transportProfileUri = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-    retVal = UA_Server_addPubSubConnection(server, &connectionConfig, NULL);
-    ck_assert_int_eq(server->pubSubManager.connectionsSize, 0);
-    ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-    retVal = UA_Server_addPubSubConnection(server, &connectionConfig, NULL);
-    ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(server->pubSubManager.connectionsSize, 0);
-} END_TEST
-
-START_TEST(AddConnectionWithUnknownTransportURL){
-        UA_StatusCode retVal;
-        UA_PubSubConnectionConfig connectionConfig;
-        memset(&connectionConfig, 0, sizeof(UA_PubSubConnectionConfig));
-        connectionConfig.name = UA_STRING("UADP Connection");
-        UA_NetworkAddressUrlDataType networkAddressUrl = {UA_STRING_NULL, UA_STRING("opc.udp://224.0.0.22:4840/")};
-        UA_Variant_setScalar(&connectionConfig.address, &networkAddressUrl,
-                             &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-        connectionConfig.transportProfileUri = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/unknown-udp-uadp");
-        UA_NodeId connectionIdent;
-        retVal = UA_Server_addPubSubConnection(server, &connectionConfig, &connectionIdent);
-        ck_assert_int_eq(server->pubSubManager.connectionsSize, 0);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(AddConnectionWithNullConfig){
-        UA_StatusCode retVal;
-        retVal = UA_Server_addPubSubConnection(server, NULL, NULL);
-        ck_assert_int_eq(server->pubSubManager.connectionsSize, 0);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-    } END_TEST
-
-START_TEST(AddSingleConnectionWithMaximalConfiguration){
-    UA_NetworkAddressUrlDataType networkAddressUrlData = {UA_STRING("127.0.0.1"), UA_STRING("opc.udp://224.0.0.22:4840/")};
-    UA_Variant address;
-    UA_Variant_setScalar(&address, &networkAddressUrlData, &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-    UA_KeyValuePair connectionOptions[3];
-    connectionOptions[0].key = UA_QUALIFIEDNAME(0, "ttl");
-    UA_UInt32 ttl = 10;
-    UA_Variant_setScalar(&connectionOptions[0].value, &ttl, &UA_TYPES[UA_TYPES_UINT32]);
-    connectionOptions[1].key = UA_QUALIFIEDNAME(0, "loopback");
-    UA_Boolean loopback = UA_FALSE;
-    UA_Variant_setScalar(&connectionOptions[1].value, &loopback, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    connectionOptions[2].key = UA_QUALIFIEDNAME(0, "reuse");
-    UA_Boolean reuse = UA_TRUE;
-    UA_Variant_setScalar(&connectionOptions[2].value, &reuse, &UA_TYPES[UA_TYPES_BOOLEAN]);
-
-    UA_PubSubConnectionConfig connectionConf;
-    memset(&connectionConf, 0, sizeof(UA_PubSubConnectionConfig));
-    connectionConf.name = UA_STRING("UADP Connection");
-    connectionConf.transportProfileUri = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-    connectionConf.enabled = true;
-    connectionConf.publisherId.numeric = 223344;
-    connectionConf.connectionPropertiesSize = 3;
-    connectionConf.connectionProperties = connectionOptions;
-    connectionConf.address = address;
-    UA_NodeId connection;
-    UA_StatusCode retVal = UA_Server_addPubSubConnection(server, &connectionConf, &connection);
-    ck_assert_int_eq(server->pubSubManager.connectionsSize, 1);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    ck_assert(server->pubSubManager.connections[0].channel != NULL);
-} END_TEST
-
-START_TEST(GetMaximalConnectionConfigurationAndCompareValues){
-    UA_NetworkAddressUrlDataType networkAddressUrlData = {UA_STRING("127.0.0.1"), UA_STRING("opc.udp://224.0.0.22:4840/")};
-    UA_Variant address;
-    UA_Variant_setScalar(&address, &networkAddressUrlData, &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-    UA_KeyValuePair connectionOptions[3];
-    connectionOptions[0].key = UA_QUALIFIEDNAME(0, "ttl");
-    UA_UInt32 ttl = 10;
-    UA_Variant_setScalar(&connectionOptions[0].value, &ttl, &UA_TYPES[UA_TYPES_UINT32]);
-    connectionOptions[1].key = UA_QUALIFIEDNAME(0, "loopback");
-    UA_Boolean loopback = UA_FALSE;
-    UA_Variant_setScalar(&connectionOptions[1].value, &loopback, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    connectionOptions[2].key = UA_QUALIFIEDNAME(0, "reuse");
-    UA_Boolean reuse = UA_TRUE;
-    UA_Variant_setScalar(&connectionOptions[2].value, &reuse, &UA_TYPES[UA_TYPES_BOOLEAN]);
-
-    UA_PubSubConnectionConfig connectionConf;
-    memset(&connectionConf, 0, sizeof(UA_PubSubConnectionConfig));
-    connectionConf.name = UA_STRING("UADP Connection");
-    connectionConf.transportProfileUri = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-    connectionConf.enabled = true;
-    connectionConf.publisherId.numeric = 223344;
-    connectionConf.connectionPropertiesSize = 3;
-    connectionConf.connectionProperties = connectionOptions;
-    connectionConf.address = address;
-    UA_NodeId connection;
-    UA_StatusCode retVal = UA_Server_addPubSubConnection(server, &connectionConf, &connection);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    UA_PubSubConnectionConfig connectionConfig;
-    memset(&connectionConfig, 0, sizeof(UA_PubSubConnectionConfig));
-    retVal |= UA_Server_getPubSubConnectionConfig(server, connection, &connectionConfig);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    ck_assert(connectionConfig.connectionPropertiesSize == connectionConf.connectionPropertiesSize);
-    ck_assert(UA_String_equal(&connectionConfig.name, &connectionConf.name) == UA_TRUE);
-    ck_assert(UA_String_equal(&connectionConfig.transportProfileUri, &connectionConf.transportProfileUri) == UA_TRUE);
-    UA_NetworkAddressUrlDataType networkAddressUrlDataCopy = *((UA_NetworkAddressUrlDataType *)connectionConfig.address.data);
-    ck_assert(UA_NetworkAddressUrlDataType_calcSizeBinary(&networkAddressUrlDataCopy) == UA_NetworkAddressUrlDataType_calcSizeBinary(&networkAddressUrlData));
-    for(size_t i = 0; i < connectionConfig.connectionPropertiesSize; i++){
-        ck_assert(UA_String_equal(&connectionConfig.connectionProperties[i].key.name, &connectionConf.connectionProperties[i].key.name) == UA_TRUE);
-        ck_assert(UA_Variant_calcSizeBinary(&connectionConfig.connectionProperties[i].value) == UA_Variant_calcSizeBinary(&connectionConf.connectionProperties[i].value));
-    }
-    UA_PubSubConnectionConfig_deleteMembers(&connectionConfig);
-    } END_TEST
-
-int main(void) {
-    TCase *tc_add_pubsub_connections_minimal_config = tcase_create("Create PubSub UDP Connections with minimal valid config");
-    tcase_add_checked_fixture(tc_add_pubsub_connections_minimal_config, setup, teardown);
-    tcase_add_test(tc_add_pubsub_connections_minimal_config, AddConnectionsWithMinimalValidConfiguration);
-    tcase_add_test(tc_add_pubsub_connections_minimal_config, AddRemoveAddConnectionWithMinimalValidConfiguration);
-
-    TCase *tc_add_pubsub_connections_invalid_config = tcase_create("Create PubSub UDP Connections with invalid configurations");
-    tcase_add_checked_fixture(tc_add_pubsub_connections_invalid_config, setup, teardown);
-    tcase_add_test(tc_add_pubsub_connections_invalid_config, AddConnectionWithInvalidAddress);
-    tcase_add_test(tc_add_pubsub_connections_invalid_config, AddConnectionWithUnknownTransportURL);
-    tcase_add_test(tc_add_pubsub_connections_invalid_config, AddConnectionWithNullConfig);
-
-    TCase *tc_add_pubsub_connections_maximal_config = tcase_create("Create PubSub UDP Connections with maximal valid config");
-    tcase_add_checked_fixture(tc_add_pubsub_connections_maximal_config, setup, teardown);
-    tcase_add_test(tc_add_pubsub_connections_maximal_config, AddSingleConnectionWithMaximalConfiguration);
-    tcase_add_test(tc_add_pubsub_connections_maximal_config, GetMaximalConnectionConfigurationAndCompareValues);
-
-    Suite *s = suite_create("PubSub UDP connection creation");
-    suite_add_tcase(s, tc_add_pubsub_connections_minimal_config);
-    suite_add_tcase(s, tc_add_pubsub_connections_invalid_config);
-    suite_add_tcase(s, tc_add_pubsub_connections_maximal_config);
-    //suite_add_tcase(s, tc_decode);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/pubsub/check_pubsub_encoding.c b/ext/open62541/tests/pubsub/check_pubsub_encoding.c
deleted file mode 100644
index 361a7f2..0000000
--- a/ext/open62541/tests/pubsub/check_pubsub_encoding.c
+++ /dev/null
@@ -1,1380 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017 - 2018 Fraunhofer IOSB (Author: Tino Bischoff)
- */
-
-#include <open62541/client.h>
-#include <open62541/types.h>
-
-#include "ua_pubsub_networkmessage.h"
-
-#include "check.h"
-
-START_TEST(UA_PubSub_EnDecode_ShallWorkOn1DS1ValueVariantKeyFrame) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    UA_DataSetMessage dmkf;
-    memset(&dmkf, 0, sizeof(UA_DataSetMessage));
-    dmkf.header.dataSetMessageValid = true;
-    dmkf.header.fieldEncoding = UA_FIELDENCODING_VARIANT;
-    dmkf.header.dataSetMessageType = UA_DATASETMESSAGE_DATAKEYFRAME;
-    dmkf.data.keyFrameData.fieldCount = 1;
-    dmkf.data.keyFrameData.dataSetFields =
-        (UA_DataValue*)UA_Array_new(dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    UA_DataValue_init(&dmkf.data.keyFrameData.dataSetFields[0]);
-
-    UA_Int32 iv = 27;
-    UA_Variant_setScalarCopy(&dmkf.data.keyFrameData.dataSetFields[0].value, &iv, &UA_TYPES[UA_TYPES_INT32]);
-    dmkf.data.keyFrameData.dataSetFields[0].hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages = &dmkf;
-
-    UA_StatusCode rv = UA_STATUSCODE_UNCERTAININITIALVALUE;
-    UA_ByteString buffer;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&m);
-    rv = UA_ByteString_allocBuffer(&buffer, msgSize);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    //if (rv == UA_STATUSCODE_GOOD) {
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-    rv = UA_NetworkMessage_encodeBinary(&m, &bufPos, bufEnd);
-    
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_NetworkMessage m2;
-    memset(&m2, 0, sizeof(UA_NetworkMessage));
-    size_t offset = 0;
-    rv = UA_NetworkMessage_decodeBinary(&buffer, &offset, &m2);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-    ck_assert(m.version == m2.version);
-    ck_assert(m.networkMessageType == m2.networkMessageType);
-    ck_assert(m.timestampEnabled == m2.timestampEnabled);
-    ck_assert(m.dataSetClassIdEnabled == m2.dataSetClassIdEnabled);
-    ck_assert(m.groupHeaderEnabled == m2.groupHeaderEnabled);
-    ck_assert(m.picosecondsEnabled == m2.picosecondsEnabled);
-    ck_assert(m.promotedFieldsEnabled == m2.promotedFieldsEnabled);
-    ck_assert(m.publisherIdEnabled == m2.publisherIdEnabled);
-    ck_assert(m.securityEnabled == m2.securityEnabled);
-    ck_assert(m.chunkMessage == m2.chunkMessage);
-    ck_assert(m.payloadHeaderEnabled == m2.payloadHeaderEnabled);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding == m2.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding);
-    ck_assert_int_eq(m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount, 1);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue);
-    ck_assert_int_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.type, (uintptr_t)&UA_TYPES[UA_TYPES_INT32]);
-    ck_assert_int_eq(*(UA_Int32 *)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.data, iv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp);
-
-    //}
-
-    UA_DataValue_deleteMembers(&dmkf.data.keyFrameData.dataSetFields[0]);
-    UA_NetworkMessage_deleteMembers(&m2);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_Array_delete(dmkf.data.keyFrameData.dataSetFields, dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-}
-END_TEST
-
-START_TEST(UA_PubSub_EnDecode_ShallWorkOn1DS1ValueDataValueKeyFrame) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    UA_DataSetMessage dmkf;
-    memset(&dmkf, 0, sizeof(UA_DataSetMessage));
-    dmkf.header.dataSetMessageValid = true;
-    dmkf.header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
-    dmkf.header.dataSetMessageType = UA_DATASETMESSAGE_DATAKEYFRAME;
-    dmkf.data.keyFrameData.fieldCount = 1;
-    dmkf.data.keyFrameData.dataSetFields =
-        (UA_DataValue*)UA_Array_new(dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    UA_DataValue_init(&dmkf.data.keyFrameData.dataSetFields[0]);
-
-    UA_Int32 iv = 27;
-    UA_Variant_setScalarCopy(&dmkf.data.keyFrameData.dataSetFields[0].value, &iv, &UA_TYPES[UA_TYPES_INT32]);
-    dmkf.data.keyFrameData.dataSetFields[0].hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages = &dmkf;
-
-    UA_StatusCode rv = UA_STATUSCODE_UNCERTAININITIALVALUE;
-    UA_ByteString buffer;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&m);
-    rv = UA_ByteString_allocBuffer(&buffer, msgSize);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    //if (rv == UA_STATUSCODE_GOOD) {
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-    rv = UA_NetworkMessage_encodeBinary(&m, &bufPos, bufEnd);
-
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_NetworkMessage m2;
-    memset(&m2, 0, sizeof(UA_NetworkMessage));
-    size_t offset = 0;
-    rv = UA_NetworkMessage_decodeBinary(&buffer, &offset, &m2);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-    ck_assert(m.version == m2.version);
-    ck_assert(m.networkMessageType == m2.networkMessageType);
-    ck_assert(m.timestampEnabled == m2.timestampEnabled);
-    ck_assert(m.payloadHeaderEnabled == m2.payloadHeaderEnabled);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding == m2.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding);
-    ck_assert_int_eq(m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount, 1);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue);
-    ck_assert_int_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.type, (uintptr_t)&UA_TYPES[UA_TYPES_INT32]);
-    ck_assert_int_eq(*(UA_Int32 *)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.data, iv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp);
-    ck_assert(m.dataSetClassIdEnabled == m2.dataSetClassIdEnabled);
-    ck_assert(m.groupHeaderEnabled == m2.groupHeaderEnabled);
-    ck_assert(m.picosecondsEnabled == m2.picosecondsEnabled);
-    ck_assert(m.promotedFieldsEnabled == m2.promotedFieldsEnabled);
-    ck_assert(m.publisherIdEnabled == m2.publisherIdEnabled);
-    ck_assert(m.securityEnabled == m2.securityEnabled);
-    ck_assert(m.chunkMessage == m2.chunkMessage);
-
-    //}
-
-    UA_DataValue_deleteMembers(&dmkf.data.keyFrameData.dataSetFields[0]);
-    UA_NetworkMessage_deleteMembers(&m2);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_Array_delete(dmkf.data.keyFrameData.dataSetFields, dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-}
-END_TEST
-
-START_TEST(UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesVariantKeyFrame) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    UA_DataSetMessage dmkf;
-    memset(&dmkf, 0, sizeof(UA_DataSetMessage));
-    dmkf.header.dataSetMessageValid = true;
-    dmkf.header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
-    dmkf.header.dataSetMessageType = UA_DATASETMESSAGE_DATAKEYFRAME;
-    UA_UInt16 anzFields = 2;
-    dmkf.data.keyFrameData.fieldCount = anzFields;
-    dmkf.data.keyFrameData.dataSetFields =
-        (UA_DataValue*)UA_Array_new(dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    UA_DataValue_init(&dmkf.data.keyFrameData.dataSetFields[0]);
-    UA_DataValue_init(&dmkf.data.keyFrameData.dataSetFields[1]);
-
-    UA_Double dv = 231.3;
-    UA_Variant_setScalarCopy(&dmkf.data.keyFrameData.dataSetFields[0].value, &dv, &UA_TYPES[UA_TYPES_DOUBLE]);
-    dmkf.data.keyFrameData.dataSetFields[0].hasValue = true;
-
-    UA_UInt64 uiv = 98412;
-    UA_Variant_setScalarCopy(&dmkf.data.keyFrameData.dataSetFields[1].value, &uiv, &UA_TYPES[UA_TYPES_UINT64]);
-    dmkf.data.keyFrameData.dataSetFields[1].hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages = &dmkf;
-
-    UA_StatusCode rv = UA_STATUSCODE_UNCERTAININITIALVALUE;
-    UA_ByteString buffer;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&m);
-    rv = UA_ByteString_allocBuffer(&buffer, msgSize);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-    rv = UA_NetworkMessage_encodeBinary(&m, &bufPos, bufEnd);
-
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_NetworkMessage m2;
-    memset(&m2, 0, sizeof(UA_NetworkMessage));
-    size_t offset = 0;
-    rv = UA_NetworkMessage_decodeBinary(&buffer, &offset, &m2);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-    ck_assert(m.version == m2.version);
-    ck_assert(m.networkMessageType == m2.networkMessageType);
-    ck_assert(m.timestampEnabled == m2.timestampEnabled);
-    ck_assert(m.payloadHeaderEnabled == m2.payloadHeaderEnabled);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding == m2.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding);
-    ck_assert_int_eq(m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount, anzFields);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue);
-    ck_assert_int_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.type, (uintptr_t)&UA_TYPES[UA_TYPES_DOUBLE]);
-    ck_assert(*(UA_Double*)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.data == dv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue);
-    ck_assert_int_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].value.type, (uintptr_t)&UA_TYPES[UA_TYPES_UINT64]);
-    ck_assert_uint_eq(*(UA_UInt64 *)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].value.data, uiv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp);
-    ck_assert(m.dataSetClassIdEnabled == m2.dataSetClassIdEnabled);
-    ck_assert(m.groupHeaderEnabled == m2.groupHeaderEnabled);
-    ck_assert(m.picosecondsEnabled == m2.picosecondsEnabled);
-    ck_assert(m.promotedFieldsEnabled == m2.promotedFieldsEnabled);
-    ck_assert(m.publisherIdEnabled == m2.publisherIdEnabled);
-    ck_assert(m.securityEnabled == m2.securityEnabled);
-    ck_assert(m.chunkMessage == m2.chunkMessage);
-
-    UA_DataValue_deleteMembers(&dmkf.data.keyFrameData.dataSetFields[0]);
-    UA_DataValue_deleteMembers(&dmkf.data.keyFrameData.dataSetFields[1]);
-    UA_NetworkMessage_deleteMembers(&m2);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_Array_delete(dmkf.data.keyFrameData.dataSetFields, dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-}
-END_TEST
-
-START_TEST(UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesDataValueKeyFrame) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    UA_DataSetMessage dmkf;
-    memset(&dmkf, 0, sizeof(UA_DataSetMessage));
-    dmkf.header.dataSetMessageValid = true;
-    dmkf.header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
-    dmkf.header.dataSetMessageType = UA_DATASETMESSAGE_DATAKEYFRAME;
-    UA_UInt16 anzFields = 2;
-    dmkf.data.keyFrameData.fieldCount = anzFields;
-    dmkf.data.keyFrameData.dataSetFields =
-        (UA_DataValue*)UA_Array_new(dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    UA_DataValue_init(&dmkf.data.keyFrameData.dataSetFields[0]);
-    UA_DataValue_init(&dmkf.data.keyFrameData.dataSetFields[1]);
-
-    UA_Double dv = 231.3;
-    UA_Variant_setScalarCopy(&dmkf.data.keyFrameData.dataSetFields[0].value, &dv, &UA_TYPES[UA_TYPES_DOUBLE]);
-    dmkf.data.keyFrameData.dataSetFields[0].hasValue = true;
-
-    UA_UInt64 uiv = 98412;
-    UA_Variant_setScalarCopy(&dmkf.data.keyFrameData.dataSetFields[1].value, &uiv, &UA_TYPES[UA_TYPES_UINT64]);
-    dmkf.data.keyFrameData.dataSetFields[1].hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages = &dmkf;
-
-    UA_StatusCode rv = UA_STATUSCODE_UNCERTAININITIALVALUE;
-    UA_ByteString buffer;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&m);
-    rv = UA_ByteString_allocBuffer(&buffer, msgSize);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-    rv = UA_NetworkMessage_encodeBinary(&m, &bufPos, bufEnd);
-
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_NetworkMessage m2;
-    memset(&m2, 0, sizeof(UA_NetworkMessage));
-    size_t offset = 0;
-    rv = UA_NetworkMessage_decodeBinary(&buffer, &offset, &m2);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-    ck_assert(m.version == m2.version);
-    ck_assert(m.networkMessageType == m2.networkMessageType);
-    ck_assert(m.timestampEnabled == m2.timestampEnabled);
-    ck_assert(m.payloadHeaderEnabled == m2.payloadHeaderEnabled);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding == m2.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding);
-    ck_assert_int_eq(m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount, anzFields);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue);
-    ck_assert_int_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.type, (uintptr_t)&UA_TYPES[UA_TYPES_DOUBLE]);
-    ck_assert(*(UA_Double*)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.data == dv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue);
-    ck_assert_int_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].value.type, (uintptr_t)&UA_TYPES[UA_TYPES_UINT64]);
-    ck_assert_uint_eq(*(UA_UInt64 *)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].value.data, uiv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp);
-    ck_assert(m.dataSetClassIdEnabled == m2.dataSetClassIdEnabled);
-    ck_assert(m.groupHeaderEnabled == m2.groupHeaderEnabled);
-    ck_assert(m.picosecondsEnabled == m2.picosecondsEnabled);
-    ck_assert(m.promotedFieldsEnabled == m2.promotedFieldsEnabled);
-    ck_assert(m.publisherIdEnabled == m2.publisherIdEnabled);
-    ck_assert(m.securityEnabled == m2.securityEnabled);
-    ck_assert(m.chunkMessage == m2.chunkMessage);
-
-    UA_DataValue_deleteMembers(&dmkf.data.keyFrameData.dataSetFields[0]);
-    UA_DataValue_deleteMembers(&dmkf.data.keyFrameData.dataSetFields[1]);
-    UA_NetworkMessage_deleteMembers(&m2);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_Array_delete(dmkf.data.keyFrameData.dataSetFields, dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-}
-END_TEST
-
-START_TEST(UA_PubSub_EnDecode_ShallWorkOn1DS1ValueVariantDeltaFrame) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    UA_DataSetMessage dmdf;
-    memset(&dmdf, 0, sizeof(UA_DataSetMessage));
-    dmdf.header.dataSetMessageValid = true;
-    dmdf.header.fieldEncoding = UA_FIELDENCODING_VARIANT;
-    dmdf.header.dataSetMessageType = UA_DATASETMESSAGE_DATADELTAFRAME;
-    dmdf.data.deltaFrameData.fieldCount = 1;
-    size_t memsize = sizeof(UA_DataSetMessage_DeltaFrameField) * dmdf.data.deltaFrameData.fieldCount;
-    dmdf.data.deltaFrameData.deltaFrameFields = (UA_DataSetMessage_DeltaFrameField*)UA_malloc(memsize);
-
-    UA_UInt16 fieldIndex = 1;
-    dmdf.data.deltaFrameData.deltaFrameFields[0].fieldIndex = fieldIndex;
-    UA_DataValue_init(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue);
-
-    UA_Int32 iv = 58;
-    UA_Variant_setScalarCopy(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.value, &iv, &UA_TYPES[UA_TYPES_INT32]);
-    dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages = &dmdf;
-
-    UA_StatusCode rv = UA_STATUSCODE_UNCERTAININITIALVALUE;
-    UA_ByteString buffer;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&m);
-    rv = UA_ByteString_allocBuffer(&buffer, msgSize);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-    rv = UA_NetworkMessage_encodeBinary(&m, &bufPos, bufEnd);
-
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_NetworkMessage m2;
-    memset(&m2, 0, sizeof(UA_NetworkMessage));
-    size_t offset = 0;
-    rv = UA_NetworkMessage_decodeBinary(&buffer, &offset, &m2);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-    ck_assert(m.version == m2.version);
-    ck_assert(m.networkMessageType == m2.networkMessageType);
-    ck_assert(m.timestampEnabled == m2.timestampEnabled);
-    ck_assert(m.payloadHeaderEnabled == m2.payloadHeaderEnabled);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding == m2.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding);
-    ck_assert_int_eq(m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.fieldCount, 1);
-    ck_assert_int_eq(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldIndex, fieldIndex);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue);
-    ck_assert_int_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.value.type, (uintptr_t)&UA_TYPES[UA_TYPES_INT32]);
-    ck_assert_int_eq(*(UA_Int32 *)m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.value.data, iv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp);
-    ck_assert(m.dataSetClassIdEnabled == m2.dataSetClassIdEnabled);
-    ck_assert(m.groupHeaderEnabled == m2.groupHeaderEnabled);
-    ck_assert(m.picosecondsEnabled == m2.picosecondsEnabled);
-    ck_assert(m.promotedFieldsEnabled == m2.promotedFieldsEnabled);
-    ck_assert(m.publisherIdEnabled == m2.publisherIdEnabled);
-    ck_assert(m.securityEnabled == m2.securityEnabled);
-    ck_assert(m.chunkMessage == m2.chunkMessage);
-
-    UA_DataValue_deleteMembers(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue);
-    UA_NetworkMessage_deleteMembers(&m2);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_free(dmdf.data.deltaFrameData.deltaFrameFields);
-}
-END_TEST
-
-START_TEST(UA_PubSub_EnDecode_ShallWorkOn1DS1ValueDataValueDeltaFrame) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    UA_DataSetMessage dmdf;
-    memset(&dmdf, 0, sizeof(UA_DataSetMessage));
-    dmdf.header.dataSetMessageValid = true;
-    dmdf.header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
-    dmdf.header.dataSetMessageType = UA_DATASETMESSAGE_DATADELTAFRAME;
-    dmdf.data.deltaFrameData.fieldCount = 1;
-    size_t memsize = sizeof(UA_DataSetMessage_DeltaFrameField) * dmdf.data.deltaFrameData.fieldCount;
-    dmdf.data.deltaFrameData.deltaFrameFields = (UA_DataSetMessage_DeltaFrameField*)UA_malloc(memsize);
-
-    UA_UInt16 fieldIndex = 1;
-    dmdf.data.deltaFrameData.deltaFrameFields[0].fieldIndex = fieldIndex;
-    UA_DataValue_init(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue);
-
-    UA_Int32 iv = 197;
-    UA_Variant_setScalarCopy(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.value, &iv, &UA_TYPES[UA_TYPES_INT32]);
-    dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages = &dmdf;
-
-    UA_StatusCode rv = UA_STATUSCODE_UNCERTAININITIALVALUE;
-    UA_ByteString buffer;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&m);
-    rv = UA_ByteString_allocBuffer(&buffer, msgSize);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-    rv = UA_NetworkMessage_encodeBinary(&m, &bufPos, bufEnd);
-
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_NetworkMessage m2;
-    memset(&m2, 0, sizeof(UA_NetworkMessage));
-    size_t offset = 0;
-    rv = UA_NetworkMessage_decodeBinary(&buffer, &offset, &m2);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-    ck_assert(m.version == m2.version);
-    ck_assert(m.networkMessageType == m2.networkMessageType);
-    ck_assert(m.timestampEnabled == m2.timestampEnabled);
-    ck_assert(m.payloadHeaderEnabled == m2.payloadHeaderEnabled);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding == m2.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding);
-    ck_assert_int_eq(m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.fieldCount, 1);
-    ck_assert_int_eq(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldIndex, fieldIndex);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue);
-    ck_assert_int_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.value.type, (uintptr_t)&UA_TYPES[UA_TYPES_INT32]);
-    ck_assert_int_eq(*(UA_Int32 *)m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.value.data, iv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp);
-    ck_assert(m.dataSetClassIdEnabled == m2.dataSetClassIdEnabled);
-    ck_assert(m.groupHeaderEnabled == m2.groupHeaderEnabled);
-    ck_assert(m.picosecondsEnabled == m2.picosecondsEnabled);
-    ck_assert(m.promotedFieldsEnabled == m2.promotedFieldsEnabled);
-    ck_assert(m.publisherIdEnabled == m2.publisherIdEnabled);
-    ck_assert(m.securityEnabled == m2.securityEnabled);
-    ck_assert(m.chunkMessage == m2.chunkMessage);
-
-    UA_DataValue_deleteMembers(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue);
-    UA_NetworkMessage_deleteMembers(&m2);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_free(dmdf.data.deltaFrameData.deltaFrameFields);
-}
-END_TEST
-
-START_TEST(UA_PubSub_Encode_WithBufferTooSmallShallReturnError) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    UA_DataSetMessage dmkf;
-    memset(&dmkf, 0, sizeof(UA_DataSetMessage));
-    dmkf.header.dataSetMessageValid = true;
-    dmkf.header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
-    dmkf.header.dataSetMessageType = UA_DATASETMESSAGE_DATAKEYFRAME;
-    dmkf.data.keyFrameData.fieldCount = 1;
-    dmkf.data.keyFrameData.dataSetFields =
-        (UA_DataValue*)UA_Array_new(dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    UA_DataValue_init(&dmkf.data.keyFrameData.dataSetFields[0]);
-
-    UA_Int32 iv = 27;
-    UA_Variant_setScalarCopy(&dmkf.data.keyFrameData.dataSetFields[0].value, &iv, &UA_TYPES[UA_TYPES_INT32]);
-    dmkf.data.keyFrameData.dataSetFields[0].hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages = &dmkf;
-
-    UA_StatusCode rv = UA_STATUSCODE_UNCERTAININITIALVALUE;
-    UA_ByteString buffer;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&m);
-
-    // to generate an error we make the buffer too small
-    msgSize -= 5;
-    rv = UA_ByteString_allocBuffer(&buffer, msgSize);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-    rv = UA_NetworkMessage_encodeBinary(&m, &bufPos, bufEnd);
-
-    ck_assert_int_ne(rv, UA_STATUSCODE_GOOD);
-
-    UA_DataValue_deleteMembers(&dmkf.data.keyFrameData.dataSetFields[0]);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_Array_delete(dmkf.data.keyFrameData.dataSetFields, dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-}
-END_TEST
-
-START_TEST(UA_PubSub_Decode_WithBufferTooSmallShallReturnError) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    UA_DataSetMessage dmkf;
-    memset(&dmkf, 0, sizeof(UA_DataSetMessage));
-    dmkf.header.dataSetMessageValid = true;
-    dmkf.header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
-    dmkf.header.dataSetMessageType = UA_DATASETMESSAGE_DATAKEYFRAME;
-    dmkf.data.keyFrameData.fieldCount = 1;
-    dmkf.data.keyFrameData.dataSetFields =
-        (UA_DataValue*)UA_Array_new(dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    UA_DataValue_init(&dmkf.data.keyFrameData.dataSetFields[0]);
-
-    UA_Int32 iv = 27;
-    UA_Variant_setScalarCopy(&dmkf.data.keyFrameData.dataSetFields[0].value, &iv, &UA_TYPES[UA_TYPES_INT32]);
-    dmkf.data.keyFrameData.dataSetFields[0].hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages = &dmkf;
-
-    UA_StatusCode rv = UA_STATUSCODE_UNCERTAININITIALVALUE;
-    UA_ByteString buffer;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&m);
-    rv = UA_ByteString_allocBuffer(&buffer, msgSize);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-    rv = UA_NetworkMessage_encodeBinary(&m, &bufPos, bufEnd);
-
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_NetworkMessage m2;
-    memset(&m2, 0, sizeof(UA_NetworkMessage));
-    size_t offset = 0;
-    UA_ByteString buffer2;
-    UA_ByteString_init(&buffer2);
-    size_t shortLength = buffer.length - 4;
-    UA_ByteString_allocBuffer(&buffer2, shortLength);
-    for (size_t i = 0; i < shortLength; i++)
-    {
-        buffer2.data[i] = buffer.data[i];
-    }
-
-    rv = UA_NetworkMessage_decodeBinary(&buffer2, &offset, &m2);
-    ck_assert_int_ne(rv, UA_STATUSCODE_GOOD);
-
-    UA_DataValue_deleteMembers(&dmkf.data.keyFrameData.dataSetFields[0]);
-    UA_NetworkMessage_deleteMembers(&m2);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_ByteString_deleteMembers(&buffer2);
-    UA_Array_delete(dmkf.data.keyFrameData.dataSetFields, dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-}
-END_TEST
-
-START_TEST(UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesVariantDeltaFrame) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    UA_DataSetMessage dmdf;
-    memset(&dmdf, 0, sizeof(UA_DataSetMessage));
-    dmdf.header.dataSetMessageValid = true;
-    dmdf.header.fieldEncoding = UA_FIELDENCODING_VARIANT;
-    dmdf.header.dataSetMessageType = UA_DATASETMESSAGE_DATADELTAFRAME;
-    dmdf.data.deltaFrameData.fieldCount = 2;
-    size_t memsize = sizeof(UA_DataSetMessage_DeltaFrameField) * dmdf.data.deltaFrameData.fieldCount;
-    dmdf.data.deltaFrameData.deltaFrameFields = (UA_DataSetMessage_DeltaFrameField*)UA_malloc(memsize);
-
-    UA_UInt16 fieldIndex1 = 1;
-    dmdf.data.deltaFrameData.deltaFrameFields[0].fieldIndex = fieldIndex1;
-    UA_DataValue_init(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue);
-    UA_UInt16 fieldIndex2 = 3;
-    dmdf.data.deltaFrameData.deltaFrameFields[1].fieldIndex = fieldIndex2;
-    UA_DataValue_init(&dmdf.data.deltaFrameData.deltaFrameFields[1].fieldValue);
-
-    UA_Int32 iv = 58;
-    UA_Variant_setScalar(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.value, &iv, &UA_TYPES[UA_TYPES_INT32]);
-    dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue = true;
-
-    UA_String testString = (UA_String) { 5, (UA_Byte*)"OPCUA" };
-    UA_Variant value;
-    UA_Variant_init(&value);
-    value.data = UA_malloc(sizeof(UA_String));
-    *((UA_String*)value.data) = testString;
-    value.type = &UA_TYPES[UA_TYPES_STRING];
-    dmdf.data.deltaFrameData.deltaFrameFields[1].fieldValue.value = value;
-    dmdf.data.deltaFrameData.deltaFrameFields[1].fieldValue.hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages = &dmdf;
-
-    UA_StatusCode rv = UA_STATUSCODE_UNCERTAININITIALVALUE;
-    UA_ByteString buffer;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&m);
-    rv = UA_ByteString_allocBuffer(&buffer, msgSize);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-    rv = UA_NetworkMessage_encodeBinary(&m, &bufPos, bufEnd);
-
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_NetworkMessage m2;
-    memset(&m2, 0, sizeof(UA_NetworkMessage));
-    size_t offset = 0;
-    rv = UA_NetworkMessage_decodeBinary(&buffer, &offset, &m2);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-    ck_assert(m.version == m2.version);
-    ck_assert(m.networkMessageType == m2.networkMessageType);
-    ck_assert(m.timestampEnabled == m2.timestampEnabled);
-    ck_assert(m.payloadHeaderEnabled == m2.payloadHeaderEnabled);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding == m2.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding);
-    ck_assert_int_eq(m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.fieldCount, 2);
-    ck_assert_int_eq(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldIndex, fieldIndex1);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue);
-    ck_assert_int_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.value.type, (uintptr_t)&UA_TYPES[UA_TYPES_INT32]);
-    ck_assert_int_eq(*(UA_Int32 *)m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.value.data, iv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp);
-
-    ck_assert_int_eq(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldIndex, fieldIndex2);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasValue);
-    // compare string value
-    UA_String decodedString = *(UA_String*)(m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.value.data);
-    for (UA_Int32 i = 0; i < 5; i++)
-    {
-        ck_assert_int_eq(decodedString.data[i], testString.data[i]);
-    }
-    ck_assert_int_eq(decodedString.length, testString.length);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasSourceTimestamp);
-
-    ck_assert(m.dataSetClassIdEnabled == m2.dataSetClassIdEnabled);
-    ck_assert(m.groupHeaderEnabled == m2.groupHeaderEnabled);
-    ck_assert(m.picosecondsEnabled == m2.picosecondsEnabled);
-    ck_assert(m.promotedFieldsEnabled == m2.promotedFieldsEnabled);
-    ck_assert(m.publisherIdEnabled == m2.publisherIdEnabled);
-    ck_assert(m.securityEnabled == m2.securityEnabled);
-    ck_assert(m.chunkMessage == m2.chunkMessage);
-
-    ((UA_String*)value.data)->data = NULL; // the string is statically allocated. do not free it.
-    UA_Variant_deleteMembers(&value);
-    UA_NetworkMessage_deleteMembers(&m2);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_free(dmdf.data.deltaFrameData.deltaFrameFields);
-}
-END_TEST
-
-START_TEST(UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesDataValueDeltaFrame) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    UA_DataSetMessage dmdf;
-    memset(&dmdf, 0, sizeof(UA_DataSetMessage));
-    dmdf.header.dataSetMessageValid = true;
-    dmdf.header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
-    dmdf.header.dataSetMessageType = UA_DATASETMESSAGE_DATADELTAFRAME;
-    dmdf.data.deltaFrameData.fieldCount = 2;
-    size_t memsize = sizeof(UA_DataSetMessage_DeltaFrameField) * dmdf.data.deltaFrameData.fieldCount;
-    dmdf.data.deltaFrameData.deltaFrameFields = (UA_DataSetMessage_DeltaFrameField*)UA_malloc(memsize);
-
-    UA_UInt16 fieldIndex1 = 1;
-    dmdf.data.deltaFrameData.deltaFrameFields[0].fieldIndex = fieldIndex1;
-    UA_DataValue_init(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue);
-    UA_UInt16 fieldIndex2 = 3;
-    dmdf.data.deltaFrameData.deltaFrameFields[1].fieldIndex = fieldIndex2;
-    UA_DataValue_init(&dmdf.data.deltaFrameData.deltaFrameFields[1].fieldValue);
-
-    UA_Int32 iv = 193;
-    UA_Variant_setScalarCopy(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.value, &iv, &UA_TYPES[UA_TYPES_INT32]);
-    dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue = true;
-    dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.sourceTimestamp = UA_DateTime_now();
-    dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp = true;
-
-    UA_String testString = (UA_String) { 5, (UA_Byte*)"OPCUA" };
-    UA_Variant value;
-    UA_Variant_init(&value);
-    value.data = UA_malloc(sizeof(UA_String));
-    *((UA_String*)value.data) = testString;
-    value.type = &UA_TYPES[UA_TYPES_STRING];
-    dmdf.data.deltaFrameData.deltaFrameFields[1].fieldValue.value = value;
-    dmdf.data.deltaFrameData.deltaFrameFields[1].fieldValue.hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages = &dmdf;
-
-    UA_StatusCode rv = UA_STATUSCODE_UNCERTAININITIALVALUE;
-    UA_ByteString buffer;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&m);
-    rv = UA_ByteString_allocBuffer(&buffer, msgSize);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-    rv = UA_NetworkMessage_encodeBinary(&m, &bufPos, bufEnd);
-
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_NetworkMessage m2;
-    memset(&m2, 0, sizeof(UA_NetworkMessage));
-    size_t offset = 0;
-    rv = UA_NetworkMessage_decodeBinary(&buffer, &offset, &m2);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-    ck_assert(m.version == m2.version);
-    ck_assert(m.networkMessageType == m2.networkMessageType);
-    ck_assert(m.timestampEnabled == m2.timestampEnabled);
-    ck_assert(m.payloadHeaderEnabled == m2.payloadHeaderEnabled);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding == m2.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding);
-    ck_assert_int_eq(m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.fieldCount, 2);
-    ck_assert_int_eq(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldIndex, fieldIndex1);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue);
-    ck_assert_int_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.value.type, (uintptr_t)&UA_TYPES[UA_TYPES_INT32]);
-    ck_assert_int_eq(*(UA_Int32 *)m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.value.data, iv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp);
-
-    ck_assert_int_eq(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldIndex, fieldIndex2);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasValue);
-    // compare string value
-    UA_String decodedString = *(UA_String*)(m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.value.data);
-    for (UA_Int32 i = 0; i < 5; i++)
-    {
-        ck_assert_int_eq(decodedString.data[i], testString.data[i]);
-    }
-    ck_assert_int_eq(decodedString.length, testString.length);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasSourceTimestamp);
-
-    ck_assert(m.dataSetClassIdEnabled == m2.dataSetClassIdEnabled);
-    ck_assert(m.groupHeaderEnabled == m2.groupHeaderEnabled);
-    ck_assert(m.picosecondsEnabled == m2.picosecondsEnabled);
-    ck_assert(m.promotedFieldsEnabled == m2.promotedFieldsEnabled);
-    ck_assert(m.publisherIdEnabled == m2.publisherIdEnabled);
-    ck_assert(m.securityEnabled == m2.securityEnabled);
-    ck_assert(m.chunkMessage == m2.chunkMessage);
-
-    ((UA_String*)value.data)->data = NULL; // the string is statically allocated. do not free it.
-    UA_Variant_deleteMembers(&value);
-    UA_DataValue_deleteMembers(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue);
-    UA_NetworkMessage_deleteMembers(&m2);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_free(dmdf.data.deltaFrameData.deltaFrameFields);
-}
-END_TEST
-
-START_TEST(UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesVariantKeyFrameGroupHeader) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    m.groupHeaderEnabled = true;
-    m.groupHeader.writerGroupIdEnabled = true;
-    UA_UInt16 writerGroupId = 17;
-    m.groupHeader.writerGroupId = writerGroupId;
-    m.groupHeader.groupVersionEnabled = true;
-    UA_UInt32 groupVersion = 573354747; // das sollte irgendwann 2018 sein
-    m.groupHeader.groupVersion = groupVersion;
-
-    UA_DataSetMessage dmkf;
-    memset(&dmkf, 0, sizeof(UA_DataSetMessage));
-    dmkf.header.dataSetMessageValid = true;
-    dmkf.header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
-    dmkf.header.dataSetMessageType = UA_DATASETMESSAGE_DATAKEYFRAME;
-
-    UA_UInt16 anzFields = 2;
-    dmkf.data.keyFrameData.fieldCount = anzFields;
-    dmkf.data.keyFrameData.dataSetFields =
-        (UA_DataValue*)UA_Array_new(dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    UA_DataValue_init(&dmkf.data.keyFrameData.dataSetFields[0]);
-    UA_DataValue_init(&dmkf.data.keyFrameData.dataSetFields[1]);
-
-    UA_Double dv = 231.3;
-    UA_Variant_setScalarCopy(&dmkf.data.keyFrameData.dataSetFields[0].value, &dv, &UA_TYPES[UA_TYPES_DOUBLE]);
-    dmkf.data.keyFrameData.dataSetFields[0].hasValue = true;
-
-    UA_UInt64 uiv = 98412;
-    UA_Variant_setScalarCopy(&dmkf.data.keyFrameData.dataSetFields[1].value, &uiv, &UA_TYPES[UA_TYPES_UINT64]);
-    dmkf.data.keyFrameData.dataSetFields[1].hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages = &dmkf;
-
-    UA_StatusCode rv = UA_STATUSCODE_UNCERTAININITIALVALUE;
-    UA_ByteString buffer;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&m);
-    rv = UA_ByteString_allocBuffer(&buffer, msgSize);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-    rv = UA_NetworkMessage_encodeBinary(&m, &bufPos, bufEnd);
-
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_NetworkMessage m2;
-    memset(&m2, 0, sizeof(UA_NetworkMessage));
-    size_t offset = 0;
-    rv = UA_NetworkMessage_decodeBinary(&buffer, &offset, &m2);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-    ck_assert(m.version == m2.version);
-    ck_assert(m.networkMessageType == m2.networkMessageType);
-    ck_assert(m.timestampEnabled == m2.timestampEnabled);
-    ck_assert(m.dataSetClassIdEnabled == m2.dataSetClassIdEnabled);
-    ck_assert(m.groupHeaderEnabled == m2.groupHeaderEnabled);
-    ck_assert(m.groupHeader.writerGroupIdEnabled == m2.groupHeader.writerGroupIdEnabled);
-    ck_assert(m.groupHeader.groupVersionEnabled == m2.groupHeader.groupVersionEnabled);
-    ck_assert(m.groupHeader.networkMessageNumberEnabled == m2.groupHeader.networkMessageNumberEnabled);
-    ck_assert(m.groupHeader.sequenceNumberEnabled == m2.groupHeader.sequenceNumberEnabled);
-    ck_assert_uint_eq(m2.groupHeader.writerGroupId, writerGroupId);
-    ck_assert_uint_eq(m2.groupHeader.groupVersion, groupVersion);
-    ck_assert(m.picosecondsEnabled == m2.picosecondsEnabled);
-    ck_assert(m.promotedFieldsEnabled == m2.promotedFieldsEnabled);
-    ck_assert(m.publisherIdEnabled == m2.publisherIdEnabled);
-    ck_assert(m.securityEnabled == m2.securityEnabled);
-    ck_assert(m.chunkMessage == m2.chunkMessage);
-    ck_assert(m.payloadHeaderEnabled == m2.payloadHeaderEnabled);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding == m2.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding);
-    ck_assert_int_eq(m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount, anzFields);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue);
-    ck_assert_uint_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.type, (uintptr_t)&UA_TYPES[UA_TYPES_DOUBLE]);
-    ck_assert(*(UA_Double*)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.data == dv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue);
-    ck_assert_uint_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].value.type, (uintptr_t)&UA_TYPES[UA_TYPES_UINT64]);
-    ck_assert_uint_eq(*(UA_UInt64 *)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].value.data, uiv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp);
-
-    UA_DataValue_deleteMembers(&dmkf.data.keyFrameData.dataSetFields[0]);
-    UA_DataValue_deleteMembers(&dmkf.data.keyFrameData.dataSetFields[1]);
-    UA_NetworkMessage_deleteMembers(&m2);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_Array_delete(dmkf.data.keyFrameData.dataSetFields, dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-}
-END_TEST
-
-START_TEST(UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesVariantDeltaFramePublDSCID) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    m.publisherIdEnabled = true;
-    m.publisherIdType = UA_PUBLISHERDATATYPE_UINT32;
-    UA_UInt32 publisherId = 1469;
-    m.publisherId.publisherIdUInt32 = publisherId;
-    m.dataSetClassIdEnabled = true;
-    UA_Guid dataSetClassId = UA_Guid_random();
-    m.dataSetClassId = dataSetClassId;
-
-    UA_DataSetMessage dmdf;
-    memset(&dmdf, 0, sizeof(UA_DataSetMessage));
-    dmdf.header.dataSetMessageValid = true;
-    dmdf.header.fieldEncoding = UA_FIELDENCODING_VARIANT;
-    dmdf.header.dataSetMessageType = UA_DATASETMESSAGE_DATADELTAFRAME;
-    dmdf.data.deltaFrameData.fieldCount = 2;
-    size_t memsize = sizeof(UA_DataSetMessage_DeltaFrameField) * dmdf.data.deltaFrameData.fieldCount;
-    dmdf.data.deltaFrameData.deltaFrameFields = (UA_DataSetMessage_DeltaFrameField*)UA_malloc(memsize);
-
-    UA_UInt16 fieldIndex1 = 1;
-    dmdf.data.deltaFrameData.deltaFrameFields[0].fieldIndex = fieldIndex1;
-    UA_DataValue_init(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue);
-    UA_UInt16 fieldIndex2 = 3;
-    dmdf.data.deltaFrameData.deltaFrameFields[1].fieldIndex = fieldIndex2;
-    UA_DataValue_init(&dmdf.data.deltaFrameData.deltaFrameFields[1].fieldValue);
-
-    UA_Int32 iv = 58;
-    UA_Variant_setScalarCopy(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.value, &iv, &UA_TYPES[UA_TYPES_INT32]);
-    dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue = true;
-
-    UA_String testString = (UA_String) { 5, (UA_Byte*)"OPCUA" };
-    UA_Variant value;
-    UA_Variant_init(&value);
-    value.data = UA_malloc(sizeof(UA_String));
-    *((UA_String*)value.data) = testString;
-    value.type = &UA_TYPES[UA_TYPES_STRING];
-    dmdf.data.deltaFrameData.deltaFrameFields[1].fieldValue.value = value;
-    dmdf.data.deltaFrameData.deltaFrameFields[1].fieldValue.hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages = &dmdf;
-
-    UA_StatusCode rv = UA_STATUSCODE_UNCERTAININITIALVALUE;
-    UA_ByteString buffer;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&m);
-    rv = UA_ByteString_allocBuffer(&buffer, msgSize);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-    rv = UA_NetworkMessage_encodeBinary(&m, &bufPos, bufEnd);
-
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_NetworkMessage m2;
-    memset(&m2, 0, sizeof(UA_NetworkMessage));
-    size_t offset = 0;
-    rv = UA_NetworkMessage_decodeBinary(&buffer, &offset, &m2);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-    ck_assert(m.version == m2.version);
-    ck_assert(m.networkMessageType == m2.networkMessageType);
-    ck_assert(m.timestampEnabled == m2.timestampEnabled);
-    ck_assert(m.dataSetClassIdEnabled == m2.dataSetClassIdEnabled);
-    ck_assert(UA_Guid_equal(&m.dataSetClassId, &m2.dataSetClassId) == true);
-    ck_assert(m.groupHeaderEnabled == m2.groupHeaderEnabled);
-    ck_assert(m.picosecondsEnabled == m2.picosecondsEnabled);
-    ck_assert(m.promotedFieldsEnabled == m2.promotedFieldsEnabled);
-    ck_assert(m.publisherIdEnabled == m2.publisherIdEnabled);
-    ck_assert_int_eq(m2.publisherIdType, m.publisherIdType);
-    ck_assert_uint_eq(m2.publisherId.publisherIdUInt32, publisherId);
-    ck_assert(m.securityEnabled == m2.securityEnabled);
-    ck_assert(m.chunkMessage == m2.chunkMessage);
-
-    ck_assert(m.payloadHeaderEnabled == m2.payloadHeaderEnabled);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding == m2.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding);
-    ck_assert_int_eq(m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.fieldCount, 2);
-    ck_assert_int_eq(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldIndex, fieldIndex1);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue);
-    ck_assert_int_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.value.type, (uintptr_t)&UA_TYPES[UA_TYPES_INT32]);
-    ck_assert_int_eq(*(UA_Int32 *)m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.value.data, iv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp);
-
-    ck_assert_int_eq(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldIndex, fieldIndex2);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasValue);
-    // compare string value
-    UA_String decodedString = *(UA_String*)(m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.value.data);
-    for (UA_Int32 i = 0; i < 5; i++)
-    {
-        ck_assert_int_eq(decodedString.data[i], testString.data[i]);
-    }
-    ck_assert_int_eq(decodedString.length, testString.length);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasSourceTimestamp);
-
-    ((UA_String*)value.data)->data = NULL; // the string is statically allocated. do not free it.
-    UA_Variant_deleteMembers(&value);
-    UA_DataValue_deleteMembers(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue);
-    UA_NetworkMessage_deleteMembers(&m2);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_free(dmdf.data.deltaFrameData.deltaFrameFields);
-}
-END_TEST
-
-START_TEST(UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesDataValueKeyFramePH) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    m.payloadHeaderEnabled = true;
-    m.payloadHeader.dataSetPayloadHeader.count = 1;
-    m.payloadHeader.dataSetPayloadHeader.dataSetWriterIds = (UA_UInt16 *)UA_Array_new(m.payloadHeader.dataSetPayloadHeader.count, &UA_TYPES[UA_TYPES_UINT16]);
-    UA_UInt16 dataSetWriterId = 1698;
-    m.payloadHeader.dataSetPayloadHeader.dataSetWriterIds[0] = dataSetWriterId;
-
-    UA_DataSetMessage dmkf;
-    memset(&dmkf, 0, sizeof(UA_DataSetMessage));
-    dmkf.header.dataSetMessageValid = true;
-    dmkf.header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
-    dmkf.header.dataSetMessageType = UA_DATASETMESSAGE_DATAKEYFRAME;
-    UA_UInt16 anzFields = 2;
-    dmkf.data.keyFrameData.fieldCount = anzFields;
-    dmkf.data.keyFrameData.dataSetFields =
-        (UA_DataValue*)UA_Array_new(dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    UA_DataValue_init(&dmkf.data.keyFrameData.dataSetFields[0]);
-    UA_DataValue_init(&dmkf.data.keyFrameData.dataSetFields[1]);
-
-    UA_Double dv = 231.3;
-    UA_Variant_setScalarCopy(&dmkf.data.keyFrameData.dataSetFields[0].value, &dv, &UA_TYPES[UA_TYPES_DOUBLE]);
-    dmkf.data.keyFrameData.dataSetFields[0].hasValue = true;
-
-    UA_UInt64 uiv = 98412;
-    UA_Variant_setScalarCopy(&dmkf.data.keyFrameData.dataSetFields[1].value, &uiv, &UA_TYPES[UA_TYPES_UINT64]);
-    dmkf.data.keyFrameData.dataSetFields[1].hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages = &dmkf;
-
-    UA_StatusCode rv = UA_STATUSCODE_UNCERTAININITIALVALUE;
-    UA_ByteString buffer;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&m);
-    rv = UA_ByteString_allocBuffer(&buffer, msgSize);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-    rv = UA_NetworkMessage_encodeBinary(&m, &bufPos, bufEnd);
-
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_NetworkMessage m2;
-    memset(&m2, 0, sizeof(UA_NetworkMessage));
-    size_t offset = 0;
-    rv = UA_NetworkMessage_decodeBinary(&buffer, &offset, &m2);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-    ck_assert(m.version == m2.version);
-    ck_assert(m.networkMessageType == m2.networkMessageType);
-    ck_assert(m.timestampEnabled == m2.timestampEnabled);
-    ck_assert(m.payloadHeaderEnabled == m2.payloadHeaderEnabled);
-    ck_assert_uint_eq(m.payloadHeader.dataSetPayloadHeader.count, 1);
-    ck_assert_uint_eq(m.payloadHeader.dataSetPayloadHeader.dataSetWriterIds[0], dataSetWriterId);
-
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding == m2.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding);
-    ck_assert_int_eq(m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount, anzFields);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue);
-    ck_assert_int_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.type, (uintptr_t)&UA_TYPES[UA_TYPES_DOUBLE]);
-    ck_assert(*(UA_Double*)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.data == dv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue);
-    ck_assert_int_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].value.type, (uintptr_t)&UA_TYPES[UA_TYPES_UINT64]);
-    ck_assert_uint_eq(*(UA_UInt64 *)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].value.data, uiv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp);
-    ck_assert(m.dataSetClassIdEnabled == m2.dataSetClassIdEnabled);
-    ck_assert(m.groupHeaderEnabled == m2.groupHeaderEnabled);
-    ck_assert(m.picosecondsEnabled == m2.picosecondsEnabled);
-    ck_assert(m.promotedFieldsEnabled == m2.promotedFieldsEnabled);
-    ck_assert(m.publisherIdEnabled == m2.publisherIdEnabled);
-    ck_assert(m.securityEnabled == m2.securityEnabled);
-    ck_assert(m.chunkMessage == m2.chunkMessage);
-
-    UA_Array_delete(m.payloadHeader.dataSetPayloadHeader.dataSetWriterIds, m.payloadHeader.dataSetPayloadHeader.count, &UA_TYPES[UA_TYPES_UINT16]);
-    UA_DataValue_deleteMembers(&dmkf.data.keyFrameData.dataSetFields[0]);
-    UA_DataValue_deleteMembers(&dmkf.data.keyFrameData.dataSetFields[1]);
-    UA_NetworkMessage_deleteMembers(&m2);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_Array_delete(dmkf.data.keyFrameData.dataSetFields, dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-}
-END_TEST
-
-START_TEST(UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesVariantKeyFrameTSProm) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    m.timestampEnabled = true;
-    UA_DateTime ts = UA_DateTime_now();
-    m.timestamp = ts;
-    m.promotedFieldsEnabled = true;
-    m.promotedFieldsSize = 1;
-    m.promotedFields = (UA_Variant*)UA_Array_new(m.promotedFieldsSize, &UA_TYPES[UA_TYPES_VARIANT]);
-    
-    UA_DataSetMessage dmkf;
-    memset(&dmkf, 0, sizeof(UA_DataSetMessage));
-    dmkf.header.dataSetMessageValid = true;
-    dmkf.header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
-    dmkf.header.dataSetMessageType = UA_DATASETMESSAGE_DATAKEYFRAME;
-    UA_UInt16 anzFields = 2;
-    dmkf.data.keyFrameData.fieldCount = anzFields;
-    dmkf.data.keyFrameData.dataSetFields =
-        (UA_DataValue*)UA_Array_new(dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    UA_DataValue_init(&dmkf.data.keyFrameData.dataSetFields[0]);
-    UA_DataValue_init(&dmkf.data.keyFrameData.dataSetFields[1]);
-
-    UA_Double dv = 231.3;
-    UA_Variant_setScalarCopy(&dmkf.data.keyFrameData.dataSetFields[0].value, &dv, &UA_TYPES[UA_TYPES_DOUBLE]);
-    dmkf.data.keyFrameData.dataSetFields[0].hasValue = true;
-
-    UA_Variant_copy(&dmkf.data.keyFrameData.dataSetFields[0].value, &m.promotedFields[0]);
-
-    UA_UInt64 uiv = 98412;
-    UA_Variant_setScalarCopy(&dmkf.data.keyFrameData.dataSetFields[1].value, &uiv, &UA_TYPES[UA_TYPES_UINT64]);
-    dmkf.data.keyFrameData.dataSetFields[1].hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages = &dmkf;
-
-    UA_StatusCode rv = UA_STATUSCODE_UNCERTAININITIALVALUE;
-    UA_ByteString buffer;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&m);
-    rv = UA_ByteString_allocBuffer(&buffer, msgSize);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-    rv = UA_NetworkMessage_encodeBinary(&m, &bufPos, bufEnd);
-
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_NetworkMessage m2;
-    memset(&m2, 0, sizeof(UA_NetworkMessage));
-    size_t offset = 0;
-    rv = UA_NetworkMessage_decodeBinary(&buffer, &offset, &m2);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-    ck_assert(m.version == m2.version);
-    ck_assert(m.networkMessageType == m2.networkMessageType);
-    ck_assert(m.timestampEnabled == m2.timestampEnabled);
-    ck_assert_int_eq(m.timestamp, ts);
-    ck_assert(m.groupHeaderEnabled == m2.groupHeaderEnabled);
-    ck_assert(m.picosecondsEnabled == m2.picosecondsEnabled);
-    ck_assert(m.promotedFieldsEnabled == m2.promotedFieldsEnabled);
-    ck_assert_uint_eq(m2.promotedFieldsSize, 1);
-    ck_assert(*((UA_Double*)m2.promotedFields[0].data) == dv);
-    ck_assert(m.publisherIdEnabled == m2.publisherIdEnabled);
-    ck_assert(m.securityEnabled == m2.securityEnabled);
-    ck_assert(m.chunkMessage == m2.chunkMessage);
-    ck_assert(m.payloadHeaderEnabled == m2.payloadHeaderEnabled);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding == m2.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding);
-    ck_assert_int_eq(m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount, anzFields);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue);
-    ck_assert_int_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.type, (uintptr_t)&UA_TYPES[UA_TYPES_DOUBLE]);
-    ck_assert(*(UA_Double*)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.data == dv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue);
-    ck_assert_int_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].value.type, (uintptr_t)&UA_TYPES[UA_TYPES_UINT64]);
-    ck_assert_uint_eq(*(UA_UInt64 *)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].value.data, uiv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp);
-    ck_assert(m.dataSetClassIdEnabled == m2.dataSetClassIdEnabled);
-
-    UA_Array_delete(m.promotedFields, m.promotedFieldsSize, &UA_TYPES[UA_TYPES_VARIANT]);
-    UA_DataValue_deleteMembers(&dmkf.data.keyFrameData.dataSetFields[0]);
-    UA_DataValue_deleteMembers(&dmkf.data.keyFrameData.dataSetFields[1]);
-    UA_NetworkMessage_deleteMembers(&m2);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_Array_delete(dmkf.data.keyFrameData.dataSetFields, dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-}
-END_TEST
-
-START_TEST(UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesDataValueDeltaFrameGHProm2) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    m.groupHeaderEnabled = true;
-    m.groupHeader.networkMessageNumberEnabled = true;
-    UA_UInt16 networkMessageNumber = 2175;
-    m.groupHeader.networkMessageNumber = networkMessageNumber;
-
-    m.promotedFieldsEnabled = true;
-    m.promotedFieldsSize = 2;
-    m.promotedFields = (UA_Variant*)UA_Array_new(m.promotedFieldsSize, &UA_TYPES[UA_TYPES_VARIANT]);
-
-    UA_DataSetMessage dmdf;
-    memset(&dmdf, 0, sizeof(UA_DataSetMessage));
-    dmdf.header.dataSetMessageValid = true;
-    dmdf.header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
-    dmdf.header.dataSetMessageType = UA_DATASETMESSAGE_DATADELTAFRAME;
-    dmdf.data.deltaFrameData.fieldCount = 2;
-    size_t memsize = sizeof(UA_DataSetMessage_DeltaFrameField) * dmdf.data.deltaFrameData.fieldCount;
-    dmdf.data.deltaFrameData.deltaFrameFields = (UA_DataSetMessage_DeltaFrameField*)UA_malloc(memsize);
-
-    UA_UInt16 fieldIndex1 = 1;
-    dmdf.data.deltaFrameData.deltaFrameFields[0].fieldIndex = fieldIndex1;
-    UA_DataValue_init(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue);
-    UA_UInt16 fieldIndex2 = 3;
-    dmdf.data.deltaFrameData.deltaFrameFields[1].fieldIndex = fieldIndex2;
-    UA_DataValue_init(&dmdf.data.deltaFrameData.deltaFrameFields[1].fieldValue);
-
-    UA_Int32 iv = 1573;
-    UA_Variant_setScalarCopy(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.value, &iv, &UA_TYPES[UA_TYPES_INT32]);
-    dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue = true;
-    dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.sourceTimestamp = UA_DateTime_now();
-    dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp = true;
-
-    UA_Variant_copy(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue.value, &m.promotedFields[0]);
-
-    UA_Float fv = 197.34f;
-    UA_Variant_setScalarCopy(&m.promotedFields[1], &fv, &UA_TYPES[UA_TYPES_FLOAT]);
-
-    UA_String testString = (UA_String) { 5, (UA_Byte*)"OPC24" };
-    UA_Variant value;
-    UA_Variant_init(&value);
-    value.data = UA_malloc(sizeof(UA_String));
-    *((UA_String*)value.data) = testString;
-    value.type = &UA_TYPES[UA_TYPES_STRING];
-    dmdf.data.deltaFrameData.deltaFrameFields[1].fieldValue.value = value;
-    dmdf.data.deltaFrameData.deltaFrameFields[1].fieldValue.hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages = &dmdf;
-
-    UA_StatusCode rv = UA_STATUSCODE_UNCERTAININITIALVALUE;
-    UA_ByteString buffer;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&m);
-    rv = UA_ByteString_allocBuffer(&buffer, msgSize);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-    rv = UA_NetworkMessage_encodeBinary(&m, &bufPos, bufEnd);
-
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_NetworkMessage m2;
-    memset(&m2, 0, sizeof(UA_NetworkMessage));
-    size_t offset = 0;
-    rv = UA_NetworkMessage_decodeBinary(&buffer, &offset, &m2);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-    ck_assert(m.version == m2.version);
-    ck_assert(m.networkMessageType == m2.networkMessageType);
-    ck_assert(m.timestampEnabled == m2.timestampEnabled);
-    ck_assert(m.dataSetClassIdEnabled == m2.dataSetClassIdEnabled);
-    ck_assert(m.groupHeaderEnabled == m2.groupHeaderEnabled);
-    ck_assert(m.groupHeader.writerGroupIdEnabled == m2.groupHeader.writerGroupIdEnabled);
-    ck_assert(m.groupHeader.groupVersionEnabled == m2.groupHeader.groupVersionEnabled);
-    ck_assert(m.groupHeader.networkMessageNumberEnabled == m2.groupHeader.networkMessageNumberEnabled);
-    ck_assert_uint_eq(m2.groupHeader.networkMessageNumber, networkMessageNumber);
-    ck_assert(m.groupHeader.sequenceNumberEnabled == m2.groupHeader.sequenceNumberEnabled);
-    ck_assert(m.picosecondsEnabled == m2.picosecondsEnabled);
-    ck_assert(m.promotedFieldsEnabled == m2.promotedFieldsEnabled);
-    ck_assert_uint_eq(m2.promotedFieldsSize, 2);
-    ck_assert_int_eq(*((UA_Int32*)m2.promotedFields[0].data), iv);
-    ck_assert(*((UA_Float*)m2.promotedFields[1].data) == fv);
-    ck_assert(m.publisherIdEnabled == m2.publisherIdEnabled);
-    ck_assert(m.securityEnabled == m2.securityEnabled);
-    ck_assert(m.chunkMessage == m2.chunkMessage);
-
-    ck_assert(m.payloadHeaderEnabled == m2.payloadHeaderEnabled);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding == m2.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding);
-    ck_assert_int_eq(m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.fieldCount, 2);
-    ck_assert_int_eq(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldIndex, fieldIndex1);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue);
-    ck_assert_int_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.value.type, (uintptr_t)&UA_TYPES[UA_TYPES_INT32]);
-    ck_assert_int_eq(*(UA_Int32 *)m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.value.data, iv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp);
-
-    ck_assert_int_eq(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldIndex, fieldIndex2);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasValue);
-    // compare string value
-    UA_String decodedString = *(UA_String*)(m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.value.data);
-    for (UA_Int32 i = 0; i < 5; i++)
-    {
-        ck_assert_int_eq(decodedString.data[i], testString.data[i]);
-    }
-    ck_assert_int_eq(decodedString.length, testString.length);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasSourceTimestamp);
-
-    UA_Array_delete(m.promotedFields, m.promotedFieldsSize, &UA_TYPES[UA_TYPES_VARIANT]);
-    ((UA_String*)value.data)->data = NULL; // the string is statically allocated. do not free it.
-    UA_Variant_deleteMembers(&value);
-    UA_DataValue_deleteMembers(&dmdf.data.deltaFrameData.deltaFrameFields[0].fieldValue);
-    UA_NetworkMessage_deleteMembers(&m2);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_free(dmdf.data.deltaFrameData.deltaFrameFields);
-}
-END_TEST
-
-START_TEST(UA_PubSub_EnDecode_ShallWorkOn2DSVariant) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    m.payloadHeaderEnabled = true;
-    m.payloadHeader.dataSetPayloadHeader.count = 2;
-    UA_UInt16 dsWriter1 = 4;
-    UA_UInt16 dsWriter2 = 7;
-    m.payloadHeader.dataSetPayloadHeader.dataSetWriterIds = (UA_UInt16 *)UA_Array_new(m.payloadHeader.dataSetPayloadHeader.count, &UA_TYPES[UA_TYPES_UINT16]);
-    m.payloadHeader.dataSetPayloadHeader.dataSetWriterIds[0] = dsWriter1;
-    m.payloadHeader.dataSetPayloadHeader.dataSetWriterIds[1] = dsWriter2;
-
-    size_t memsize = m.payloadHeader.dataSetPayloadHeader.count * sizeof(UA_DataSetMessage);
-    m.payload.dataSetPayload.dataSetMessages = (UA_DataSetMessage*)UA_malloc(memsize);
-    memset(m.payload.dataSetPayload.dataSetMessages, 0, memsize);
-
-    //UA_DataSetMessage dmkf;
-    //memset(&dmkf, 0, sizeof(UA_DataSetMessage));
-    m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid = true;
-    m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding = UA_FIELDENCODING_VARIANT;
-    m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageType = UA_DATASETMESSAGE_DATAKEYFRAME;
-    UA_UInt16 fieldCountDS1 = 1;
-    m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount = fieldCountDS1;
-    m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields =
-        (UA_DataValue*)UA_Array_new(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    UA_DataValue_init(&m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0]);
-
-    UA_UInt32 iv = 27;
-    UA_Variant_setScalarCopy(&m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value, &iv, &UA_TYPES[UA_TYPES_UINT32]);
-    m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages[1].header.dataSetMessageValid = true;
-    m.payload.dataSetPayload.dataSetMessages[1].header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
-    m.payload.dataSetPayload.dataSetMessages[1].header.dataSetMessageType = UA_DATASETMESSAGE_DATADELTAFRAME;
-    UA_UInt16 fieldCountDS2 = 2;
-    m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.fieldCount = fieldCountDS2;
-    memsize = sizeof(UA_DataSetMessage_DeltaFrameField) * m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.fieldCount;
-    m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields = (UA_DataSetMessage_DeltaFrameField*)UA_malloc(memsize);
-
-    UA_Guid gv = UA_Guid_random();
-    UA_UInt16 fieldIndex1 = 2;
-    m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[0].fieldIndex = fieldIndex1;
-    UA_DataValue_init(&m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[0].fieldValue);
-    UA_Variant_setScalar(&m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[0].fieldValue.value, &gv, &UA_TYPES[UA_TYPES_GUID]);
-    m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue = true;
-
-    UA_UInt16 fieldIndex2 = 5;
-    m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[1].fieldIndex = fieldIndex2;
-    UA_DataValue_init(&m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[1].fieldValue);
-    UA_Int64 iv64 = 152478978534;
-    UA_Variant_setScalar(&m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[1].fieldValue.value, &iv64, &UA_TYPES[UA_TYPES_INT64]);
-    m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasValue = true;
-
-    UA_StatusCode rv = UA_STATUSCODE_UNCERTAININITIALVALUE;
-    UA_ByteString buffer;
-    size_t msgSize = UA_NetworkMessage_calcSizeBinary(&m);
-    rv = UA_ByteString_allocBuffer(&buffer, msgSize);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, msgSize);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-    rv = UA_NetworkMessage_encodeBinary(&m, &bufPos, bufEnd);
-
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_NetworkMessage m2;
-    memset(&m2, 0, sizeof(UA_NetworkMessage));
-    size_t offset = 0;
-    rv = UA_NetworkMessage_decodeBinary(&buffer, &offset, &m2);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-    ck_assert(m.version == m2.version);
-    ck_assert(m.networkMessageType == m2.networkMessageType);
-    ck_assert(m.timestampEnabled == m2.timestampEnabled);
-    ck_assert(m.dataSetClassIdEnabled == m2.dataSetClassIdEnabled);
-    ck_assert(m.groupHeaderEnabled == m2.groupHeaderEnabled);
-    ck_assert(m.picosecondsEnabled == m2.picosecondsEnabled);
-    ck_assert(m.promotedFieldsEnabled == m2.promotedFieldsEnabled);
-    ck_assert(m.publisherIdEnabled == m2.publisherIdEnabled);
-    ck_assert(m.securityEnabled == m2.securityEnabled);
-    ck_assert(m.chunkMessage == m2.chunkMessage);
-    ck_assert(m.payloadHeaderEnabled == m2.payloadHeaderEnabled);
-    ck_assert_uint_eq(m2.payloadHeader.dataSetPayloadHeader.dataSetWriterIds[0], dsWriter1);
-    ck_assert_uint_eq(m2.payloadHeader.dataSetPayloadHeader.dataSetWriterIds[1], dsWriter2);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding == m2.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding);
-    ck_assert_int_eq(m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount, fieldCountDS1);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue);
-    ck_assert_uint_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.type, (uintptr_t)&UA_TYPES[UA_TYPES_UINT32]);
-    ck_assert_uint_eq(*(UA_UInt32 *)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.data, iv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp);
-
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[1].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[1].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[1].header.fieldEncoding == m2.payload.dataSetPayload.dataSetMessages[1].header.fieldEncoding);
-    ck_assert_int_eq(m2.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.fieldCount, fieldCountDS2);
-
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue == m2.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasValue);
-    ck_assert_uint_eq(m2.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[0].fieldIndex, fieldIndex1);
-    ck_assert_uint_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[0].fieldValue.value.type, (uintptr_t)&UA_TYPES[UA_TYPES_GUID]);
-    ck_assert(UA_Guid_equal((UA_Guid*)m2.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[0].fieldValue.value.data, &gv) == true);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp);
-
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasValue == m2.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasValue);
-    ck_assert_uint_eq(m2.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[1].fieldIndex, fieldIndex2);
-    ck_assert_uint_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[1].fieldValue.value.type, (uintptr_t)&UA_TYPES[UA_TYPES_INT64]);
-    ck_assert_int_eq(*(UA_Int64 *)m2.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[1].fieldValue.value.data, iv64);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[1].fieldValue.hasSourceTimestamp);
-
-    UA_Array_delete(m.payloadHeader.dataSetPayloadHeader.dataSetWriterIds, m.payloadHeader.dataSetPayloadHeader.count, &UA_TYPES[UA_TYPES_UINT16]);
-    UA_Array_delete(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields, m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    UA_free(m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields);
-    UA_NetworkMessage_deleteMembers(&m2);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_free(m.payload.dataSetPayload.dataSetMessages);
-    //UA_Array_delete(dmkf.data.keyFrameData.dataSetFields, dmkf.data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-}
-END_TEST
-
-int main(void) {
-    TCase *tc_encode = tcase_create("encode");
-    tcase_add_test(tc_encode, UA_PubSub_Encode_WithBufferTooSmallShallReturnError);
-
-    TCase *tc_decode = tcase_create("decode");
-    tcase_add_test(tc_decode, UA_PubSub_Decode_WithBufferTooSmallShallReturnError);
-
-    TCase *tc_ende1 = tcase_create("encode_decode1DS");
-    tcase_add_test(tc_ende1, UA_PubSub_EnDecode_ShallWorkOn1DS1ValueVariantKeyFrame);
-    tcase_add_test(tc_ende1, UA_PubSub_EnDecode_ShallWorkOn1DS1ValueDataValueKeyFrame);
-    tcase_add_test(tc_ende1, UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesVariantKeyFrame);
-    tcase_add_test(tc_ende1, UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesDataValueKeyFrame);
-    tcase_add_test(tc_ende1, UA_PubSub_EnDecode_ShallWorkOn1DS1ValueVariantDeltaFrame);
-    tcase_add_test(tc_ende1, UA_PubSub_EnDecode_ShallWorkOn1DS1ValueDataValueDeltaFrame);
-    tcase_add_test(tc_ende1, UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesVariantDeltaFrame);
-    tcase_add_test(tc_ende1, UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesDataValueDeltaFrame);
-    tcase_add_test(tc_ende1, UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesVariantKeyFrameGroupHeader);
-    tcase_add_test(tc_ende1, UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesVariantDeltaFramePublDSCID);
-    tcase_add_test(tc_ende1, UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesDataValueKeyFramePH);
-    tcase_add_test(tc_ende1, UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesVariantKeyFrameTSProm);
-    tcase_add_test(tc_ende1, UA_PubSub_EnDecode_ShallWorkOn1DS2ValuesDataValueDeltaFrameGHProm2);
-
-    TCase *tc_ende2 = tcase_create("encode_decode2DS");
-    tcase_add_test(tc_ende2, UA_PubSub_EnDecode_ShallWorkOn2DSVariant);
-    
-    Suite *s = suite_create("PubSub NetworkMessage");   
-    suite_add_tcase(s, tc_encode);
-    suite_add_tcase(s, tc_decode);
-    suite_add_tcase(s, tc_ende1);
-    suite_add_tcase(s, tc_ende2);
-    
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/pubsub/check_pubsub_encoding_json.c b/ext/open62541/tests/pubsub/check_pubsub_encoding_json.c
deleted file mode 100644
index 90484ab..0000000
--- a/ext/open62541/tests/pubsub/check_pubsub_encoding_json.c
+++ /dev/null
@@ -1,407 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2018 Fraunhofer IOSB (Author: Lukas Meling)
- */
-
-#include <open62541/client.h>
-#include <open62541/types.h>
-#include <open62541/util.h>
-
-#include "ua_pubsub_networkmessage.h"
-
-#include <check.h>
-
-START_TEST(UA_PubSub_EncodeAllOptionalFields) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    m.payloadHeaderEnabled = true;
-    m.payloadHeader.dataSetPayloadHeader.count = 1;
-    UA_UInt16 dsWriter1 = 12345;
-    m.payloadHeader.dataSetPayloadHeader.dataSetWriterIds = (UA_UInt16 *)UA_Array_new(m.payloadHeader.dataSetPayloadHeader.count, &UA_TYPES[UA_TYPES_UINT16]);
-    m.payloadHeader.dataSetPayloadHeader.dataSetWriterIds[0] = dsWriter1;
-
-    size_t memsize = m.payloadHeader.dataSetPayloadHeader.count * sizeof(UA_DataSetMessage);
-    m.payload.dataSetPayload.dataSetMessages = (UA_DataSetMessage*)UA_malloc(memsize);
-    memset(m.payload.dataSetPayload.dataSetMessages, 0, memsize);
-
-    /* enable messageId */
-    m.messageIdEnabled = true;
-    m.messageId = UA_STRING_ALLOC("ABCDEFGH");
-
-    /* enable publisherId */
-    m.publisherIdEnabled = true;
-    m.publisherIdType = UA_PUBLISHERDATATYPE_UINT16;
-    m.publisherId.publisherIdUInt16 = 65535;
-
-    /* enable dataSetClassId */
-    m.dataSetClassIdEnabled = true;
-    m.dataSetClassId.data1 = 1;
-    m.dataSetClassId.data2 = 2;
-    m.dataSetClassId.data3 = 3;
-
-    /* DatasetMessage */
-    m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid = true;
-    m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding = UA_FIELDENCODING_VARIANT;
-    m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageType = UA_DATASETMESSAGE_DATAKEYFRAME;
-    UA_UInt16 fieldCountDS1 = 1;
-    m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount = fieldCountDS1;
-    m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields =
-        (UA_DataValue*)UA_Array_new(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    UA_DataValue_init(&m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0]);
-
-    /* enable DataSetMessageSequenceNr */
-    m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageSequenceNrEnabled = true;
-    m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageSequenceNr = 4711;
-
-    /* enable metaDataVersion */
-    m.payload.dataSetPayload.dataSetMessages[0].header.configVersionMajorVersionEnabled = true;
-    m.payload.dataSetPayload.dataSetMessages[0].header.configVersionMinorVersionEnabled = true;
-    m.payload.dataSetPayload.dataSetMessages[0].header.configVersionMajorVersion = 42;
-    m.payload.dataSetPayload.dataSetMessages[0].header.configVersionMinorVersion = 7;
-
-    /* enable timestamp */
-    m.payload.dataSetPayload.dataSetMessages[0].header.timestampEnabled = true;
-    m.payload.dataSetPayload.dataSetMessages[0].header.timestamp = 11111111111111;
-
-    /* enable status */
-    m.payload.dataSetPayload.dataSetMessages[0].header.statusEnabled = true;
-    m.payload.dataSetPayload.dataSetMessages[0].header.status = 12345;
-
-    /* Set fieldnames */
-    m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldNames =
-        (UA_String*)UA_Array_new(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_STRING]);
-    m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldNames[0] = UA_STRING_ALLOC("Field1");
-
-    UA_UInt32 iv = 27;
-    UA_Variant_setScalarCopy(&m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value, &iv, &UA_TYPES[UA_TYPES_UINT32]);
-    m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue = true;
-
-    size_t size = UA_NetworkMessage_calcSizeJson(&m, NULL, 0, NULL, 0, true);
-    ck_assert_int_eq(size, 342);
-
-    UA_ByteString buffer;
-    UA_StatusCode rv = UA_ByteString_allocBuffer(&buffer, size+1);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, size+1);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-
-
-    rv = UA_NetworkMessage_encodeJson(&m, &bufPos, &bufEnd, NULL, 0, NULL, 0, true);
-    *bufPos = 0;
-    // then
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    char* result = "{\"MessageId\":\"ABCDEFGH\",\"MessageType\":\"ua-data\",\"PublisherId\":65535,\"DataSetClassId\":\"00000001-0002-0003-0000-000000000000\",\"Messages\":[{\"DataSetWriterId\":12345,\"SequenceNumber\":4711,\"MetaDataVersion\":{\"MajorVersion\":42,\"MinorVersion\":7},\"Timestamp\":\"1601-01-13T20:38:32.1111111Z\",\"Status\":2764857,\"Payload\":{\"Field1\":{\"Type\":7,\"Body\":27}}}]}";
-    ck_assert_str_eq(result, (char*)buffer.data);
-
-    UA_ByteString_deleteMembers(&buffer);
-    UA_NetworkMessage_deleteMembers(&m);
-}
-END_TEST
-
-START_TEST(UA_PubSub_EnDecode) {
-    UA_NetworkMessage m;
-    memset(&m, 0, sizeof(UA_NetworkMessage));
-    m.version = 1;
-    m.networkMessageType = UA_NETWORKMESSAGE_DATASET;
-    m.payloadHeaderEnabled = true;
-    m.payloadHeader.dataSetPayloadHeader.count = 2;
-    UA_UInt16 dsWriter1 = 4;
-    UA_UInt16 dsWriter2 = 7;
-    m.payloadHeader.dataSetPayloadHeader.dataSetWriterIds = (UA_UInt16 *)UA_Array_new(m.payloadHeader.dataSetPayloadHeader.count, &UA_TYPES[UA_TYPES_UINT16]);
-    m.payloadHeader.dataSetPayloadHeader.dataSetWriterIds[0] = dsWriter1;
-    m.payloadHeader.dataSetPayloadHeader.dataSetWriterIds[1] = dsWriter2;
-
-    size_t memsize = m.payloadHeader.dataSetPayloadHeader.count * sizeof(UA_DataSetMessage);
-    m.payload.dataSetPayload.dataSetMessages = (UA_DataSetMessage*)UA_malloc(memsize);
-    memset(m.payload.dataSetPayload.dataSetMessages, 0, memsize);
-
-    m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid = true;
-    m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding = UA_FIELDENCODING_VARIANT;
-    m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageType = UA_DATASETMESSAGE_DATAKEYFRAME;
-    UA_UInt16 fieldCountDS1 = 1;
-    m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount = fieldCountDS1;
-    m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields =
-        (UA_DataValue*)UA_Array_new(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    UA_DataValue_init(&m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0]);
-
-    /* Set fieldnames */
-    m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldNames =
-        (UA_String*)UA_Array_new(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount, &UA_TYPES[UA_TYPES_STRING]);
-    m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldNames[0] = UA_STRING_ALLOC("Field1");
-
-    UA_UInt32 iv = 27;
-    UA_Variant_setScalarCopy(&m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value, &iv, &UA_TYPES[UA_TYPES_UINT32]);
-    m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue = true;
-
-    m.payload.dataSetPayload.dataSetMessages[1].header.dataSetMessageValid = true;
-    m.payload.dataSetPayload.dataSetMessages[1].header.fieldEncoding = UA_FIELDENCODING_DATAVALUE;
-    m.payload.dataSetPayload.dataSetMessages[1].header.dataSetMessageType = UA_DATASETMESSAGE_DATAKEYFRAME;
-    UA_UInt16 fieldCountDS2 = 2;
-    m.payload.dataSetPayload.dataSetMessages[1].data.keyFrameData.fieldCount = fieldCountDS2;
-    memsize = sizeof(UA_DataSetMessage_DeltaFrameField) * m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.fieldCount;
-    m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields = (UA_DataSetMessage_DeltaFrameField*)UA_malloc(memsize);
-     /* Set fieldnames */
-    m.payload.dataSetPayload.dataSetMessages[1].data.keyFrameData.fieldNames =
-        (UA_String*)UA_Array_new(m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.fieldCount, &UA_TYPES[UA_TYPES_STRING]);
-    m.payload.dataSetPayload.dataSetMessages[1].data.keyFrameData.fieldNames[0] = UA_STRING_ALLOC("Field2.1");
-    m.payload.dataSetPayload.dataSetMessages[1].data.keyFrameData.fieldNames[1] = UA_STRING_ALLOC("Field2.2");
-
-
-    UA_Guid gv = UA_Guid_random();
-    UA_DataValue_init(&m.payload.dataSetPayload.dataSetMessages[1].data.keyFrameData.dataSetFields[0]);
-    UA_Variant_setScalarCopy(&m.payload.dataSetPayload.dataSetMessages[1].data.keyFrameData.dataSetFields[0].value, &gv, &UA_TYPES[UA_TYPES_GUID]);
-    m.payload.dataSetPayload.dataSetMessages[1].data.keyFrameData.dataSetFields[0].hasValue = true;
-
-    UA_DataValue_init(&m.payload.dataSetPayload.dataSetMessages[1].data.keyFrameData.dataSetFields[1]);
-    UA_Int64 iv64 = 152478978534;
-    UA_Variant_setScalarCopy(&m.payload.dataSetPayload.dataSetMessages[1].data.keyFrameData.dataSetFields[1].value, &iv64, &UA_TYPES[UA_TYPES_INT64]);
-    m.payload.dataSetPayload.dataSetMessages[1].data.keyFrameData.dataSetFields[1].hasValue = true;
-
-    size_t size = UA_NetworkMessage_calcSizeJson(&m, NULL, 0, NULL, 0, true);
-
-    UA_ByteString buffer;
-    UA_StatusCode rv = UA_ByteString_allocBuffer(&buffer, size);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_Byte *bufPos = buffer.data;
-    memset(bufPos, 0, size);
-    const UA_Byte *bufEnd = &(buffer.data[buffer.length]);
-
-    rv = UA_NetworkMessage_encodeJson(&m, &bufPos, &bufEnd, NULL, 0, NULL, 0, true);
-    //*bufPos = 0;
-    // then
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-
-    UA_NetworkMessage m2;
-    memset(&m2, 0, sizeof(UA_NetworkMessage));
-    rv = UA_NetworkMessage_decodeJson(&m2, &buffer);
-    ck_assert_int_eq(rv, UA_STATUSCODE_GOOD);
-    ck_assert(m.networkMessageType == m2.networkMessageType);
-    ck_assert(m.timestampEnabled == m2.timestampEnabled);
-    ck_assert(m.dataSetClassIdEnabled == m2.dataSetClassIdEnabled);
-    ck_assert(m.groupHeaderEnabled == m2.groupHeaderEnabled);
-    ck_assert(m.picosecondsEnabled == m2.picosecondsEnabled);
-    ck_assert(m.promotedFieldsEnabled == m2.promotedFieldsEnabled);
-    ck_assert(m.publisherIdEnabled == m2.publisherIdEnabled);
-    ck_assert(m.securityEnabled == m2.securityEnabled);
-    ck_assert(m.chunkMessage == m2.chunkMessage);
-    ck_assert(m.payloadHeaderEnabled == m2.payloadHeaderEnabled);
-    ck_assert_uint_eq(m2.payloadHeader.dataSetPayloadHeader.dataSetWriterIds[0], dsWriter1);
-    ck_assert_uint_eq(m2.payloadHeader.dataSetPayloadHeader.dataSetWriterIds[1], dsWriter2);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding == m2.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding);
-    ck_assert_int_eq(m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldCount, fieldCountDS1);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue);
-    ck_assert_uint_eq((uintptr_t)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.type, (uintptr_t)&UA_TYPES[UA_TYPES_UINT32]);
-    ck_assert_uint_eq(*(UA_UInt32 *)m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.data, iv);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasSourceTimestamp);
-
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[1].header.dataSetMessageValid == m2.payload.dataSetPayload.dataSetMessages[1].header.dataSetMessageValid);
-    ck_assert(m.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp == m2.payload.dataSetPayload.dataSetMessages[1].data.deltaFrameData.deltaFrameFields[0].fieldValue.hasSourceTimestamp);
-    UA_ByteString_deleteMembers(&buffer);
-    UA_NetworkMessage_deleteMembers(&m);
-    UA_NetworkMessage_deleteMembers(&m2);
-}
-END_TEST
-
-
-START_TEST(UA_NetworkMessage_oneMessage_twoFields_json_decode) {
-    // given
-    UA_NetworkMessage out;
-    UA_ByteString buf = UA_STRING("{\"MessageId\":\"5ED82C10-50BB-CD07-0120-22521081E8EE\",\"MessageType\":\"ua-data\",\"Messages\":[{\"DataSetWriterId\":62541,\"MetaDataVersion\":{\"MajorVersion\":1478393530,\"MinorVersion\":12345},\"SequenceNumber\":4711,\"Payload\":{\"Test\":{\"Type\":5,\"Body\":42},\"Server localtime\":{\"Type\":13,\"Body\":\"2018-06-05T05:58:36.000Z\"}}}]}");
-    // when
-    UA_StatusCode retval = UA_NetworkMessage_decodeJson(&out, &buf);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-     //NetworkMessage
-    ck_assert_int_eq(out.chunkMessage, false);
-    ck_assert_int_eq(out.dataSetClassIdEnabled, false);
-    ck_assert_int_eq(out.groupHeaderEnabled, false);
-    ck_assert_int_eq(out.networkMessageType, UA_NETWORKMESSAGE_DATASET);
-    ck_assert_int_eq(out.picosecondsEnabled, false);
-    ck_assert_int_eq(out.promotedFieldsEnabled, false);
-    ck_assert_int_eq(out.securityEnabled, false);
-    ck_assert_int_eq(out.timestampEnabled, false);
-    ck_assert_int_eq(out.publisherIdEnabled, false);
-
-    ck_assert_int_eq(out.payloadHeaderEnabled, true);
-    ck_assert_int_eq(out.payloadHeader.dataSetPayloadHeader.count, 1);
-    ck_assert_int_eq(out.payloadHeader.dataSetPayloadHeader.dataSetWriterIds[0], 62541);
-
-    //dataSetMessage
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageSequenceNrEnabled, true);
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageSequenceNr, 4711);
-
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageType, UA_DATASETMESSAGE_DATAKEYFRAME);
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding, UA_FIELDENCODING_VARIANT);
-
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.picoSecondsIncluded, false);
-
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.configVersionMinorVersionEnabled, true);
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.configVersionMajorVersionEnabled, true);
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.configVersionMinorVersion, 12345);
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.configVersionMajorVersion, 1478393530);
-
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageSequenceNr, 4711);
-    //ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.dataSetWriterId, 62541);
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue, 1);
-    ck_assert_int_eq(*((UA_UInt16*)out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.data), 42);
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].hasValue, 1);
-    UA_DateTime *dt = (UA_DateTime*)out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].value.data;
-    UA_DateTimeStruct dts = UA_DateTime_toStruct(*dt);
-    ck_assert_int_eq(dts.year, 2018);
-    ck_assert_int_eq(dts.month, 6);
-    ck_assert_int_eq(dts.day, 5);
-    ck_assert_int_eq(dts.hour, 5);
-    ck_assert_int_eq(dts.min, 58);
-    ck_assert_int_eq(dts.sec, 36);
-    ck_assert_int_eq(dts.milliSec, 0);
-    ck_assert_int_eq(dts.microSec, 0);
-    ck_assert_int_eq(dts.nanoSec, 0);
-
-    UA_NetworkMessage_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_NetworkMessage_json_decode) {
-    // given
-    UA_NetworkMessage out;
-    memset(&out,0,sizeof(UA_NetworkMessage));
-    UA_ByteString buf = UA_STRING("{\"MessageId\":\"5ED82C10-50BB-CD07-0120-22521081E8EE\",\"MessageType\":\"ua-data\",\"Messages\":[{\"MetaDataVersion\":{\"MajorVersion\": 47, \"MinorVersion\": 47},\"DataSetWriterId\":62541,\"Status\":22,\"SequenceNumber\":4711,\"Payload\":{\"Test\":{\"Type\":5,\"Body\":42},\"Server localtime\":{\"Type\":1,\"Body\":true}}}]}");
-    // when
-    UA_StatusCode retval = UA_NetworkMessage_decodeJson(&out, &buf);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    //NetworkMessage
-    ck_assert_int_eq(out.chunkMessage, false);
-    ck_assert_int_eq(out.dataSetClassIdEnabled, false);
-    ck_assert_int_eq(out.groupHeaderEnabled, false);
-    ck_assert_int_eq(out.networkMessageType, UA_NETWORKMESSAGE_DATASET);
-    ck_assert_int_eq(out.picosecondsEnabled, false);
-    ck_assert_int_eq(out.promotedFieldsEnabled, false);
-    ck_assert_int_eq(out.securityEnabled, false);
-    ck_assert_int_eq(out.timestampEnabled, false);
-    ck_assert_int_eq(out.publisherIdEnabled, false);
-
-    ck_assert_int_eq(out.payloadHeaderEnabled, true);
-    ck_assert_int_eq(out.payloadHeader.dataSetPayloadHeader.count, 1);
-    ck_assert_int_eq(out.payloadHeader.dataSetPayloadHeader.dataSetWriterIds[0], 62541);
-
-    //dataSetMessage
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageSequenceNrEnabled, true);
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageSequenceNr, 4711);
-
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.dataSetMessageType, UA_DATASETMESSAGE_DATAKEYFRAME);
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.fieldEncoding, UA_FIELDENCODING_VARIANT);
-
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.picoSecondsIncluded, false);
-
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.statusEnabled, true);
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.status, 22);
-
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.configVersionMinorVersionEnabled, true);
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.configVersionMajorVersionEnabled, true);
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.configVersionMinorVersion, 47);
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].header.configVersionMajorVersion, 47);
-
-    //dataSetFields
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].hasValue, true);
-    ck_assert_int_eq(*((UA_UInt16*)out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[0].value.data), 42);
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].hasValue, true);
-    ck_assert_int_eq(*((UA_Boolean*)out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.dataSetFields[1].value.data), 1);
-
-    UA_NetworkMessage_deleteMembers(&out);
-}
-END_TEST
-
-START_TEST(UA_Networkmessage_DataSetFieldsNull_json_decode) {
-    // given
-    UA_NetworkMessage out;
-    memset(&out, 0, sizeof(UA_NetworkMessage));
-    UA_ByteString buf = UA_STRING("{ \"MessageId\": \"32235546-05d9-4fd7-97df-ea3ff3408574\",  "
-            "\"MessageType\": \"ua-data\",  \"PublisherId\": \"MQTT-Localhost\",  "
-            "\"DataSetClassId\": \"00000005-cab9-4470-8f8a-2c1ead207e0e\",  \"Messages\": "
-            "[    {      \"DataSetWriterId\": 1,      \"SequenceNumber\": 224,     \"MetaDataVersion\": "
-            "{        \"MajorVersion\": 1,        \"MinorVersion\": 1      },\"Payload\":null}]}");
-    // when
-    UA_StatusCode retval = UA_NetworkMessage_decodeJson(&out, &buf);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(out.dataSetClassId.data1, 5);
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages->header.dataSetMessageSequenceNr, 224);
-    ck_assert_ptr_eq(out.payload.dataSetPayload.dataSetMessages->data.keyFrameData.dataSetFields, NULL);
-
-    UA_NetworkMessage_deleteMembers(&out);
-}
-END_TEST
-
-
-START_TEST(UA_NetworkMessage_fieldNames_json_decode) {
-    // given
-    UA_NetworkMessage out;
-    UA_ByteString buf = UA_STRING("{\"MessageId\":\"5ED82C10-50BB-CD07-0120-22521081E8EE\","
-            "\"MessageType\":\"ua-data\",\"Messages\":"
-            "[{\"DataSetWriterId\":62541,\"MetaDataVersion\":"
-            "{\"MajorVersion\":1478393530,\"MinorVersion\":12345},"
-            "\"SequenceNumber\":4711,\"Payload\":{\"Test\":{\"Type\":5,\"Body\":42},\"Test2\":"
-            "{\"Type\":13,\"Body\":\"2018-06-05T05:58:36.000Z\"}}}]}");
-    // when
-    UA_StatusCode retval = UA_NetworkMessage_decodeJson(&out, &buf);
-    // then
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-     //NetworkMessage
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldNames[0].data[0], 'T');
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldNames[0].data[1], 'e');
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldNames[0].data[2], 's');
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldNames[0].data[3], 't');
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldNames[1].data[0], 'T');
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldNames[1].data[1], 'e');
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldNames[1].data[2], 's');
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldNames[1].data[3], 't');
-    ck_assert_int_eq(out.payload.dataSetPayload.dataSetMessages[0].data.keyFrameData.fieldNames[1].data[4], '2');
-
-    UA_NetworkMessage_deleteMembers(&out);
-}
-END_TEST
-
-static Suite *testSuite_networkmessage(void) {
-    Suite *s = suite_create("Built-in Data Types 62541-6 Json");
-    TCase *tc_json_networkmessage = tcase_create("networkmessage_json");
-
-
-    tcase_add_test(tc_json_networkmessage, UA_PubSub_EncodeAllOptionalFields);
-    tcase_add_test(tc_json_networkmessage, UA_PubSub_EnDecode);
-    tcase_add_test(tc_json_networkmessage, UA_NetworkMessage_oneMessage_twoFields_json_decode);
-    tcase_add_test(tc_json_networkmessage, UA_NetworkMessage_json_decode);
-    tcase_add_test(tc_json_networkmessage, UA_Networkmessage_DataSetFieldsNull_json_decode);
-    tcase_add_test(tc_json_networkmessage, UA_NetworkMessage_fieldNames_json_decode);
-
-    suite_add_tcase(s, tc_json_networkmessage);
-    return s;
-}
-
-int main(void) {
-    int      number_failed = 0;
-    Suite   *s;
-    SRunner *sr;
-
-    s  = testSuite_networkmessage();
-    sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    number_failed += srunner_ntests_failed(sr);
-    srunner_free(sr);
-
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/pubsub/check_pubsub_informationmodel.c b/ext/open62541/tests/pubsub/check_pubsub_informationmodel.c
deleted file mode 100644
index 25e64c8..0000000
--- a/ext/open62541/tests/pubsub/check_pubsub_informationmodel.c
+++ /dev/null
@@ -1,323 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017 - 2018 Fraunhofer IOSB (Author: Andreas Ebner)
- */
-
-#include <open62541/plugin/pubsub.h>
-#include <open62541/plugin/pubsub_udp.h>
-#include <open62541/server_config_default.h>
-#include <open62541/server_pubsub.h>
-#include <open62541/types.h>
-#include <open62541/types_generated.h>
-
-#include "ua_server_internal.h"
-
-#include <math.h>
-#include <string.h>
-
-#include "check.h"
-
-UA_Server *server = NULL;
-
-UA_NodeId connection1, connection2, writerGroup1, writerGroup2, writerGroup3,
-        publishedDataSet1, publishedDataSet2, dataSetWriter1, dataSetWriter2, dataSetWriter3;
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    config->pubsubTransportLayers = (UA_PubSubTransportLayer *)
-        UA_malloc(sizeof(UA_PubSubTransportLayer));
-    config->pubsubTransportLayers[0] = UA_PubSubTransportLayerUDPMP();
-    config->pubsubTransportLayersSize++;
-
-    UA_Server_run_startup(server);
-}
-
-static void teardown(void) {
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-static void addPublishedDataSet(UA_String pdsName, UA_NodeId *assignedId){
-    UA_PublishedDataSetConfig pdsConfig;
-    memset(&pdsConfig, 0, sizeof(UA_PublishedDataSetConfig));
-    pdsConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-    pdsConfig.name = pdsName;
-    UA_Server_addPublishedDataSet(server, &pdsConfig, assignedId);
-}
-
-static void addPubSubConnection(UA_String connectionName, UA_String addressUrl, UA_NodeId *assignedId){
-    UA_PubSubConnectionConfig connectionConfig;
-    memset(&connectionConfig, 0, sizeof(UA_PubSubConnectionConfig));
-    connectionConfig.name = connectionName;
-    UA_NetworkAddressUrlDataType networkAddressUrl = {UA_STRING_NULL, addressUrl};
-    UA_Variant_setScalar(&connectionConfig.address, &networkAddressUrl,
-                         &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-    connectionConfig.transportProfileUri = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-    UA_Server_addPubSubConnection(server, &connectionConfig, assignedId);
-}
-
-static void addWriterGroup(UA_NodeId parentConnection, UA_String name, UA_Duration interval, UA_NodeId *assignedId){
-    UA_WriterGroupConfig writerGroupConfig;
-    memset(&writerGroupConfig, 0, sizeof(writerGroupConfig));
-    writerGroupConfig.name = name;
-    writerGroupConfig.publishingInterval = interval;
-    writerGroupConfig.encodingMimeType = UA_PUBSUB_ENCODING_UADP;
-    UA_Server_addWriterGroup(server, parentConnection, &writerGroupConfig, assignedId);
-}
-
-static void addDataSetWriter(UA_NodeId parentWriterGroup, UA_NodeId connectedPDS, UA_String name, UA_NodeId *assignedId){
-    UA_DataSetWriterConfig dataSetWriterConfig;
-    memset(&dataSetWriterConfig, 0, sizeof(dataSetWriterConfig));
-    dataSetWriterConfig.name = name;
-    UA_Server_addDataSetWriter(server, parentWriterGroup, connectedPDS, &dataSetWriterConfig, assignedId);
-}
-
-static UA_Boolean doubleEqual(UA_Double a, UA_Double b, UA_Double maxAbsDelta){
-    return fabs(a-b) < maxAbsDelta;
-}
-
-static UA_NodeId
-findSingleChildNode(UA_Server *server_, UA_QualifiedName targetName, UA_NodeId referenceTypeId, UA_NodeId startingNode){
-    UA_NodeId resultNodeId;
-    UA_RelativePathElement rpe;
-    UA_RelativePathElement_init(&rpe);
-    rpe.referenceTypeId = referenceTypeId;
-    rpe.isInverse = false;
-    rpe.includeSubtypes = false;
-    rpe.targetName = targetName;
-    UA_BrowsePath bp;
-    UA_BrowsePath_init(&bp);
-    bp.startingNode = startingNode;
-    bp.relativePath.elementsSize = 1;
-    bp.relativePath.elements = &rpe;
-    UA_BrowsePathResult bpr =
-            UA_Server_translateBrowsePathToNodeIds(server_, &bp);
-    if(bpr.statusCode != UA_STATUSCODE_GOOD ||
-       bpr.targetsSize < 1)
-        return UA_NODEID_NULL;
-    UA_NodeId_copy(&bpr.targets[0].targetId.nodeId, &resultNodeId);
-    UA_BrowsePathResult_deleteMembers(&bpr);
-    return resultNodeId;
-}
-
-static void setupBasicPubSubConfiguration(void){
-    addPubSubConnection(UA_STRING("Connection 1"), UA_STRING("opc.udp://224.0.0.22:4840/"), &connection1);
-    addPubSubConnection(UA_STRING("Connection 2"), UA_STRING("opc.udp://224.0.0.22:4840/"), &connection2);
-    addPublishedDataSet(UA_STRING("PublishedDataSet 1"), &publishedDataSet1);
-    addPublishedDataSet(UA_STRING("PublishedDataSet 2"), &publishedDataSet2);
-    addWriterGroup(connection1, UA_STRING("WriterGroup 1"), 10, &writerGroup1);
-    addWriterGroup(connection1, UA_STRING("WriterGroup 2"), 100, &writerGroup2);
-    addWriterGroup(connection2, UA_STRING("WriterGroup 3"), 1000, &writerGroup3);
-    addDataSetWriter(writerGroup1, publishedDataSet1, UA_STRING("DataSetWriter 1"), &dataSetWriter1);
-    addDataSetWriter(writerGroup1, publishedDataSet2, UA_STRING("DataSetWriter 2"), &dataSetWriter2);
-    addDataSetWriter(writerGroup2, publishedDataSet2, UA_STRING("DataSetWriter 3"), &dataSetWriter3);
-}
-
-START_TEST(AddSignlePubSubConnectionAndCheckInformationModelRepresentation){
-    UA_String connectionName = UA_STRING("Connection 1");
-    addPubSubConnection(connectionName, UA_STRING("opc.udp://224.0.0.22:4840/"), &connection1);
-    UA_QualifiedName browseName;
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    retVal |= UA_Server_readBrowseName(server, connection1, &browseName);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(UA_String_equal(&browseName.name, &connectionName), UA_TRUE);
-    UA_QualifiedName_deleteMembers(&browseName);
-    } END_TEST
-
-START_TEST(AddRemoveAddSignlePubSubConnectionAndCheckInformationModelRepresentation){
-    UA_String connectionName = UA_STRING("Connection 1");
-    addPubSubConnection(connectionName, UA_STRING("opc.udp://224.0.0.22:4840/"), &connection1);
-    UA_QualifiedName browseName;
-    UA_StatusCode retVal;
-    ck_assert_int_eq(UA_Server_removePubSubConnection(server, connection1), UA_STATUSCODE_GOOD);
-    retVal = UA_Server_readBrowseName(server, connection1, &browseName);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_BADNODEIDUNKNOWN);
-    addPubSubConnection(connectionName, UA_STRING("opc.udp://224.0.0.22:4840/"), &connection1);
-    retVal = UA_Server_readBrowseName(server, connection1, &browseName);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(UA_String_equal(&browseName.name, &connectionName), UA_TRUE);
-    UA_QualifiedName_deleteMembers(&browseName);
-    } END_TEST
-
-START_TEST(AddSinglePublishedDataSetAndCheckInformationModelRepresentation){
-    UA_String pdsName = UA_STRING("PDS 1");
-    addPublishedDataSet(pdsName, &publishedDataSet1);
-    UA_QualifiedName browseName;
-    ck_assert_int_eq(UA_Server_readBrowseName(server, publishedDataSet1, &browseName), UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(UA_String_equal(&browseName.name, &pdsName), UA_TRUE);
-    UA_QualifiedName_deleteMembers(&browseName);
-    } END_TEST
-
-START_TEST(AddRemoveAddSinglePublishedDataSetAndCheckInformationModelRepresentation){
-    UA_String pdsName = UA_STRING("PDS 1");
-    addPublishedDataSet(pdsName, &publishedDataSet1);
-    UA_QualifiedName browseName;
-    UA_StatusCode retVal;
-    ck_assert_int_eq(UA_Server_removePublishedDataSet(server, publishedDataSet1), UA_STATUSCODE_GOOD);
-    retVal = UA_Server_readBrowseName(server, publishedDataSet1, &browseName);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_BADNODEIDUNKNOWN);
-    addPublishedDataSet(pdsName, &publishedDataSet1);
-    retVal = UA_Server_readBrowseName(server, publishedDataSet1, &browseName);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(UA_String_equal(&browseName.name, &pdsName), UA_TRUE);
-    UA_QualifiedName_deleteMembers(&browseName);
-    } END_TEST
-
-START_TEST(AddSingleWriterGroupAndCheckInformationModelRepresentation){
-    UA_String connectionName = UA_STRING("Connection 1");
-    addPubSubConnection(connectionName, UA_STRING("opc.udp://224.0.0.22:4840/"), &connection1);
-    UA_String pdsName = UA_STRING("PDS 1");
-    addPublishedDataSet(pdsName, &publishedDataSet1);
-    UA_String wgName = UA_STRING("WriterGroup 1");
-    addWriterGroup(connection1, wgName, 10, &writerGroup1);
-    UA_QualifiedName browseName;
-    ck_assert_int_eq(UA_Server_readBrowseName(server, writerGroup1, &browseName), UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(UA_String_equal(&browseName.name, &wgName), UA_TRUE);
-    UA_QualifiedName_deleteMembers(&browseName);
-    } END_TEST
-
-START_TEST(AddRemoveAddSingleWriterGroupAndCheckInformationModelRepresentation){
-    UA_String connectionName = UA_STRING("Connection 1");
-    addPubSubConnection(connectionName, UA_STRING("opc.udp://224.0.0.22:4840/"), &connection1);
-    UA_String pdsName = UA_STRING("PDS 1");
-    addPublishedDataSet(pdsName, &publishedDataSet1);
-    UA_String wgName = UA_STRING("WriterGroup 1");
-    addWriterGroup(connection1, wgName, 10, &writerGroup1);
-    UA_QualifiedName browseName;
-    UA_StatusCode retVal;
-    ck_assert_int_eq(UA_Server_removeWriterGroup(server, writerGroup1), UA_STATUSCODE_GOOD);
-    retVal = UA_Server_readBrowseName(server, writerGroup1, &browseName);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_BADNODEIDUNKNOWN);
-    addWriterGroup(connection1, wgName, 10, &writerGroup1);
-    retVal = UA_Server_readBrowseName(server, writerGroup1, &browseName);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(UA_String_equal(&browseName.name, &wgName), UA_TRUE);
-    UA_QualifiedName_deleteMembers(&browseName);
-    } END_TEST
-
-START_TEST(AddSingleDataSetWriterAndCheckInformationModelRepresentation){
-    UA_String connectionName = UA_STRING("Connection 1");
-    addPubSubConnection(connectionName, UA_STRING("opc.udp://224.0.0.22:4840/"), &connection1);
-    UA_String pdsName = UA_STRING("PDS 1");
-    addPublishedDataSet(pdsName, &publishedDataSet1);
-    UA_String wgName = UA_STRING("WriterGroup 1");
-    addWriterGroup(connection1, wgName, 10, &writerGroup1);
-    UA_String dswName = UA_STRING("DataSetWriter 1");
-    addDataSetWriter(writerGroup1, publishedDataSet1, dswName, &dataSetWriter1);
-    UA_QualifiedName browseName;
-    ck_assert_int_eq(UA_Server_readBrowseName(server, dataSetWriter1, &browseName), UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(UA_String_equal(&browseName.name, &dswName), UA_TRUE);
-    UA_QualifiedName_deleteMembers(&browseName);
-    } END_TEST
-
-START_TEST(AddRemoveAddSingleDataSetWriterAndCheckInformationModelRepresentation){
-    UA_String connectionName = UA_STRING("Connection 1");
-    addPubSubConnection(connectionName, UA_STRING("opc.udp://224.0.0.22:4840/"), &connection1);
-    UA_String pdsName = UA_STRING("PDS 1");
-    addPublishedDataSet(pdsName, &publishedDataSet1);
-    UA_String wgName = UA_STRING("WriterGroup 1");
-    addWriterGroup(connection1, wgName, 10, &writerGroup1);
-    UA_String dswName = UA_STRING("DataSetWriter 1");
-    addDataSetWriter(writerGroup1, publishedDataSet1, dswName, &dataSetWriter1);
-    UA_QualifiedName browseName;
-    UA_StatusCode retVal;
-    ck_assert_int_eq(UA_Server_removeDataSetWriter(server, dataSetWriter1), UA_STATUSCODE_GOOD);
-    retVal = UA_Server_readBrowseName(server, dataSetWriter1, &browseName);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_BADNODEIDUNKNOWN);
-    addDataSetWriter(writerGroup1, publishedDataSet1, dswName, &dataSetWriter1);
-    retVal = UA_Server_readBrowseName(server, dataSetWriter1, &browseName);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(UA_String_equal(&browseName.name, &dswName), UA_TRUE);
-    UA_QualifiedName_deleteMembers(&browseName);
-    } END_TEST
-
-START_TEST(ReadPublishIntervalAndCompareWithInternalValue){
-    setupBasicPubSubConfiguration();
-    UA_NodeId publishIntervalId = findSingleChildNode(server, UA_QUALIFIEDNAME(0, "PublishingInterval"),
-                                                      UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY), writerGroup1);
-    UA_Variant value;
-    UA_Variant_init(&value);
-    ck_assert_int_eq(UA_Server_readValue(server, publishIntervalId, &value), UA_STATUSCODE_GOOD);
-    ck_assert(UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_DURATION]));
-    ck_assert(doubleEqual((UA_Double) *((UA_Duration *) value.data), 10, 0.05));
-    UA_Variant_deleteMembers(&value);
-    } END_TEST
-
-START_TEST(WritePublishIntervalAndCompareWithInternalValue){
-        setupBasicPubSubConfiguration();
-        UA_NodeId publishIntervalId = findSingleChildNode(server, UA_QUALIFIEDNAME(0, "PublishingInterval"),
-                                                          UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY), writerGroup1);
-        UA_Variant value;
-        UA_Variant_init(&value);
-        UA_Duration interval = 100;
-        UA_Variant_setScalar(&value, &interval, &UA_TYPES[UA_TYPES_DURATION]);
-        ck_assert_int_eq(UA_Server_writeValue(server, publishIntervalId, value), UA_STATUSCODE_GOOD);
-
-        ck_assert_int_eq(UA_Server_readValue(server, publishIntervalId, &value), UA_STATUSCODE_GOOD);
-        ck_assert(UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_DURATION]));
-        ck_assert(doubleEqual((UA_Double) *((UA_Duration *) value.data), 100, 0.05));
-        UA_Variant_deleteMembers(&value);
-    } END_TEST
-
-START_TEST(ReadAddressAndCompareWithInternalValue){
-        setupBasicPubSubConfiguration();
-        UA_NodeId address = findSingleChildNode(server, UA_QUALIFIEDNAME(0, "Address"),
-                                                          UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), connection1);
-        UA_NodeId url = findSingleChildNode(server, UA_QUALIFIEDNAME(0, "Url"),
-                                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), address);
-        UA_NodeId networkInterface = findSingleChildNode(server, UA_QUALIFIEDNAME(0, "NetworkInterface"),
-                                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), address);
-        UA_PubSubConnectionConfig connectionConfig;
-        memset(&connectionConfig, 0, sizeof(connectionConfig));
-        UA_Server_getPubSubConnectionConfig(server, connection1, &connectionConfig);
-        UA_Variant value;
-        UA_Variant_init(&value);
-        ck_assert_int_eq(UA_Server_readValue(server, url, &value), UA_STATUSCODE_GOOD);
-        UA_NetworkAddressUrlDataType *networkAddressUrlDataType = (UA_NetworkAddressUrlDataType *)connectionConfig.address.data;
-        ck_assert(UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_STRING]));
-        ck_assert(UA_String_equal(((UA_String *) value.data), &networkAddressUrlDataType->url));
-        UA_Variant_deleteMembers(&value);
-        ck_assert_int_eq(UA_Server_readValue(server, networkInterface, &value), UA_STATUSCODE_GOOD);
-        ck_assert(UA_String_equal(((UA_String *) value.data), &networkAddressUrlDataType->networkInterface));
-        UA_PubSubConnectionConfig_deleteMembers(&connectionConfig);
-        UA_Variant_deleteMembers(&value);
-    } END_TEST
-
-int main(void) {
-    TCase *tc_add_pubsub_informationmodel = tcase_create("PubSub add single elements and check information model representation");
-    tcase_add_checked_fixture(tc_add_pubsub_informationmodel, setup, teardown);
-    tcase_add_test(tc_add_pubsub_informationmodel, AddSignlePubSubConnectionAndCheckInformationModelRepresentation);
-    tcase_add_test(tc_add_pubsub_informationmodel, AddRemoveAddSignlePubSubConnectionAndCheckInformationModelRepresentation);
-    tcase_add_test(tc_add_pubsub_informationmodel, AddSinglePublishedDataSetAndCheckInformationModelRepresentation);
-    tcase_add_test(tc_add_pubsub_informationmodel, AddRemoveAddSinglePublishedDataSetAndCheckInformationModelRepresentation);
-    tcase_add_test(tc_add_pubsub_informationmodel, AddSingleWriterGroupAndCheckInformationModelRepresentation);
-    tcase_add_test(tc_add_pubsub_informationmodel, AddRemoveAddSingleWriterGroupAndCheckInformationModelRepresentation);
-    tcase_add_test(tc_add_pubsub_informationmodel, AddSingleDataSetWriterAndCheckInformationModelRepresentation);
-    tcase_add_test(tc_add_pubsub_informationmodel, AddRemoveAddSingleDataSetWriterAndCheckInformationModelRepresentation);
-
-    TCase *tc_add_pubsub_writergroupelements = tcase_create("PubSub WriterGroup check properties");
-    tcase_add_checked_fixture(tc_add_pubsub_writergroupelements, setup, teardown);
-    tcase_add_test(tc_add_pubsub_writergroupelements, ReadPublishIntervalAndCompareWithInternalValue);
-    tcase_add_test(tc_add_pubsub_writergroupelements, WritePublishIntervalAndCompareWithInternalValue);
-
-    TCase *tc_add_pubsub_pubsubconnectionelements = tcase_create("PubSub Connection check properties");
-    tcase_add_checked_fixture(tc_add_pubsub_pubsubconnectionelements, setup, teardown);
-    tcase_add_test(tc_add_pubsub_pubsubconnectionelements, ReadAddressAndCompareWithInternalValue);
-
-    Suite *s = suite_create("PubSub WriterGroups/Writer/Fields handling and publishing");
-    suite_add_tcase(s, tc_add_pubsub_informationmodel);
-    suite_add_tcase(s, tc_add_pubsub_writergroupelements);
-    suite_add_tcase(s, tc_add_pubsub_pubsubconnectionelements);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/pubsub/check_pubsub_informationmodel_methods.c b/ext/open62541/tests/pubsub/check_pubsub_informationmodel_methods.c
deleted file mode 100644
index 9c27eee..0000000
--- a/ext/open62541/tests/pubsub/check_pubsub_informationmodel_methods.c
+++ /dev/null
@@ -1,382 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017 - 2018 Fraunhofer IOSB (Author: Andreas Ebner)
- */
-
-#include <string.h>
-#include <math.h>
-#include <open62541/plugin/pubsub_udp.h>
-#include <open62541/server_config_default.h>
-#include <open62541/server_pubsub.h>
-#include <open62541/types_generated_encoding_binary.h>
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include "check.h"
-#include "thread_wrapper.h"
-
-UA_Server *server = NULL;
-UA_Boolean running;
-THREAD_HANDLE server_thread;
-
-THREAD_CALLBACK(serverloop) {
-        while (running)
-        UA_Server_run_iterate(server, true);
-        return 0;
-}
-
-static void setup(void) {
-    running = true;
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-    config->pubsubTransportLayers = (UA_PubSubTransportLayer *)
-        UA_malloc(sizeof(UA_PubSubTransportLayer));
-    config->pubsubTransportLayers[0] = UA_PubSubTransportLayerUDPMP();
-    config->pubsubTransportLayersSize++;
-    UA_Server_run_startup(server);
-    THREAD_CREATE(server_thread, serverloop);
-}
-
-static void teardown(void) {
-    running = false;
-    THREAD_JOIN(server_thread);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-static UA_NodeId
-findSingleChildNode(UA_QualifiedName targetName,
-                    UA_NodeId referenceTypeId, UA_NodeId startingNode){
-    UA_NodeId resultNodeId;
-    UA_RelativePathElement rpe;
-    UA_RelativePathElement_init(&rpe);
-    rpe.referenceTypeId = referenceTypeId;
-    rpe.isInverse = false;
-    rpe.includeSubtypes = false;
-    rpe.targetName = targetName;
-    UA_BrowsePath bp;
-    UA_BrowsePath_init(&bp);
-    bp.startingNode = startingNode;
-    bp.relativePath.elementsSize = 1;
-    bp.relativePath.elements = &rpe;
-    UA_BrowsePathResult bpr =
-            UA_Server_translateBrowsePathToNodeIds(server, &bp);
-    if(bpr.statusCode != UA_STATUSCODE_GOOD ||
-       bpr.targetsSize < 1)
-        return UA_NODEID_NULL;
-    if(UA_NodeId_copy(&bpr.targets[0].targetId.nodeId, &resultNodeId) != UA_STATUSCODE_GOOD){
-        UA_BrowsePathResult_deleteMembers(&bpr);
-        return UA_NODEID_NULL;
-    }
-    UA_BrowsePathResult_deleteMembers(&bpr);
-    return resultNodeId;
-}
-
-static UA_NodeId addPubSubConnection(void){
-    UA_Variant publisherId;
-    UA_Variant_init(&publisherId);
-    UA_UInt32 publisherIdValue = 13245;
-    UA_Variant_setScalar(&publisherId, &publisherIdValue , &UA_TYPES[UA_TYPES_UINT32]);
-
-    UA_PubSubConnectionDataType pubSubConnection;
-    UA_PubSubConnectionDataType_init(&pubSubConnection);
-    pubSubConnection.name = UA_STRING("Model Connection 1");
-    pubSubConnection.enabled = UA_TRUE;
-    pubSubConnection.publisherId = publisherId;
-    pubSubConnection.transportProfileUri = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-
-
-    UA_ExtensionObject eo;
-    UA_NetworkAddressUrlDataType networkAddressDataType = {UA_STRING("eth0"), UA_STRING("opc.udp://224.0.0.22:4840/")};
-    UA_NetworkAddressUrlDataType* identityToken = UA_NetworkAddressUrlDataType_new();
-    UA_NetworkAddressUrlDataType_init(identityToken);
-    UA_NetworkAddressUrlDataType_copy(&networkAddressDataType, identityToken);
-    eo.encoding = UA_EXTENSIONOBJECT_DECODED;
-    eo.content.decoded.type = &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE];
-    eo.content.decoded.data = identityToken;
-    pubSubConnection.address = eo;
-    pubSubConnection.connectionPropertiesSize = 2;
-    UA_KeyValuePair connectionOptions[2];
-    memset(connectionOptions, 0, sizeof(UA_KeyValuePair)* 2);
-    connectionOptions[0].key = UA_QUALIFIEDNAME(0, "ttl");
-    UA_UInt32 ttl = 10;
-    UA_Variant_setScalar(&connectionOptions[0].value, &ttl, &UA_TYPES[UA_TYPES_UINT32]);
-    connectionOptions[1].key = UA_QUALIFIEDNAME(0, "loopback");
-    UA_Boolean loopback = UA_FALSE;
-    UA_Variant_setScalar(&connectionOptions[1].value, &loopback, &UA_TYPES[UA_TYPES_UINT32]);
-    pubSubConnection.connectionProperties = connectionOptions;
-
-    UA_Variant inputArguments;
-    UA_Variant_init(&inputArguments);
-    UA_Variant_setScalar(&inputArguments, &pubSubConnection, &UA_TYPES[UA_TYPES_PUBSUBCONNECTIONDATATYPE]);
-
-    UA_CallMethodRequest callMethodRequest;
-    UA_CallMethodRequest_init(&callMethodRequest);
-    callMethodRequest.inputArgumentsSize = 1;
-    callMethodRequest.inputArguments = &inputArguments;
-    callMethodRequest.objectId = UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE);
-    callMethodRequest.methodId = UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE_ADDCONNECTION);
-
-    UA_NodeId connectionId = UA_NODEID_NULL;
-    UA_CallMethodResult result;
-    UA_CallMethodResult_init(&result);
-    result = UA_Server_call(server, &callMethodRequest);
-    ck_assert_int_eq(1, result.outputArgumentsSize);
-    ck_assert_int_eq(result.statusCode, UA_STATUSCODE_GOOD);
-    if(result.outputArguments->type == &UA_TYPES[UA_TYPES_NODEID])
-        connectionId =  *((UA_NodeId *) result.outputArguments->data);
-    UA_ExtensionObject_deleteMembers(&eo);
-    callMethodRequest.inputArguments = NULL;
-    callMethodRequest.inputArgumentsSize = 0;
-    UA_CallMethodRequest_deleteMembers(&callMethodRequest);
-    UA_CallMethodResult_deleteMembers(&result);
-    return connectionId;
-}
-
-START_TEST(AddNewPubSubConnectionUsingTheInformationModelMethod){
-    UA_StatusCode retVal;
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    retVal = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    if(retVal != UA_STATUSCODE_GOOD) {
-        UA_Client_delete(client);
-    }
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-    UA_NodeId createdConnection = addPubSubConnection();
-    UA_LocalizedText connectionDisplayName;
-    UA_LocalizedText_init(&connectionDisplayName);
-    retVal = UA_Server_readDisplayName(server, createdConnection, &connectionDisplayName);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    UA_String compareText = UA_STRING("Model Connection 1");
-    ck_assert(UA_String_equal(&connectionDisplayName.text, &compareText) == UA_TRUE);
-    //todo browse and check childs
-
-    UA_Variant serverPubSubConnectionValues;
-    UA_Variant_init(&serverPubSubConnectionValues);
-    UA_NodeId connectionPublisherId = findSingleChildNode(UA_QUALIFIEDNAME(0, "PublisherId"),
-                                                      UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                                                      createdConnection);
-    ck_assert_int_eq(UA_Server_readValue(server, connectionPublisherId, &serverPubSubConnectionValues),
-                     UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(*((UA_UInt32 *) serverPubSubConnectionValues.data), 13245);
-    UA_Variant_deleteMembers(&serverPubSubConnectionValues);
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-    UA_LocalizedText_deleteMembers(&connectionDisplayName);
-    } END_TEST
-
-START_TEST(AddAndRemovePublishedDataSetFolders){
-        UA_StatusCode retVal;
-        UA_Client *client = UA_Client_new();
-        UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-        retVal = UA_Client_connect(client, "opc.tcp://localhost:4840");
-        if(retVal != UA_STATUSCODE_GOOD) {
-            UA_Client_delete(client);
-        }
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        UA_String folderName = UA_STRING("TestFolder");
-        UA_Variant inputArguments;
-        UA_Variant_init(&inputArguments);
-        UA_Variant_setScalar(&inputArguments, &folderName, &UA_TYPES[UA_TYPES_STRING]);
-
-        UA_CallMethodRequest callMethodRequest;
-        UA_CallMethodRequest_init(&callMethodRequest);
-        callMethodRequest.inputArgumentsSize = 1;
-        callMethodRequest.inputArguments = &inputArguments;
-        callMethodRequest.objectId = UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE_PUBLISHEDDATASETS);
-        callMethodRequest.methodId = UA_NODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_ADDDATASETFOLDER);
-
-        UA_CallMethodResult result;
-        UA_CallMethodResult_init(&result);
-        result = UA_Server_call(server, &callMethodRequest);
-        ck_assert_int_eq(1, result.outputArgumentsSize);
-        ck_assert_int_eq(result.statusCode, UA_STATUSCODE_GOOD);
-
-        UA_NodeId createdFolder = UA_NODEID_NULL;
-        if(result.outputArguments->type == &UA_TYPES[UA_TYPES_NODEID])
-            createdFolder = *((UA_NodeId *) result.outputArguments->data);
-        UA_LocalizedText connectionDisplayName;
-        UA_LocalizedText_init(&connectionDisplayName);
-        retVal = UA_Server_readDisplayName(server, createdFolder, &connectionDisplayName);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_String compareText = UA_STRING("TestFolder");
-        ck_assert(UA_String_equal(&connectionDisplayName.text, &compareText) == UA_TRUE);
-        retVal = UA_Server_readNodeId(server, createdFolder, &createdFolder);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_CallMethodResult_deleteMembers(&result);
-        UA_LocalizedText_deleteMembers(&connectionDisplayName);
-
-        //create folder inside the new folder
-        folderName = UA_STRING("TestFolder2");
-        UA_Variant_init(&inputArguments);
-        UA_Variant_setScalar(&inputArguments, &folderName, &UA_TYPES[UA_TYPES_STRING]);
-        UA_CallMethodRequest_init(&callMethodRequest);
-        callMethodRequest.inputArgumentsSize = 1;
-        callMethodRequest.inputArguments = &inputArguments;
-        callMethodRequest.objectId = createdFolder;
-        callMethodRequest.methodId = UA_NODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_ADDDATASETFOLDER);
-        UA_CallMethodResult_init(&result);
-        result = UA_Server_call(server, &callMethodRequest);
-        ck_assert_int_eq(1, result.outputArgumentsSize);
-        ck_assert_int_eq(result.statusCode, UA_STATUSCODE_GOOD);
-        UA_NodeId createdFolder2 = UA_NODEID_NULL;
-        if(result.outputArguments->type == &UA_TYPES[UA_TYPES_NODEID])
-            createdFolder2 = *((UA_NodeId *) result.outputArguments->data);
-        UA_LocalizedText_init(&connectionDisplayName);
-        retVal = UA_Server_readDisplayName(server, createdFolder2, &connectionDisplayName);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        compareText = UA_STRING("TestFolder2");
-        ck_assert(UA_String_equal(&connectionDisplayName.text, &compareText) == UA_TRUE);
-        retVal = UA_Server_readNodeId(server, createdFolder2, &createdFolder2);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_CallMethodResult_deleteMembers(&result);
-
-        //delete the folder
-        UA_Variant_init(&inputArguments);
-        UA_Variant_setScalar(&inputArguments, &createdFolder, &UA_TYPES[UA_TYPES_NODEID]);
-        UA_CallMethodRequest_init(&callMethodRequest);
-        callMethodRequest.inputArgumentsSize = 1;
-        callMethodRequest.inputArguments = &inputArguments;
-        callMethodRequest.objectId = UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE_PUBLISHEDDATASETS);
-        callMethodRequest.methodId = UA_NODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_REMOVEDATASETFOLDER);
-
-        result = UA_Server_call(server, &callMethodRequest);
-        ck_assert_int_eq(0, result.outputArgumentsSize);
-        ck_assert_int_eq(result.statusCode, UA_STATUSCODE_GOOD);
-        //check if the node is deleted
-        retVal = UA_Server_readNodeId(server, createdFolder, NULL);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_BADNODEIDUNKNOWN);
-
-        UA_CallMethodResult_deleteMembers(&result);
-        UA_Client_disconnect(client);
-        UA_Client_delete(client);
-        UA_LocalizedText_deleteMembers(&connectionDisplayName);
-    } END_TEST
-
-START_TEST(AddAndRemovePublishedDataSetItems){
-        UA_StatusCode retVal;
-        UA_Client *client = UA_Client_new();
-        UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-        retVal = UA_Client_connect(client, "opc.tcp://localhost:4840");
-        if(retVal != UA_STATUSCODE_GOOD) {
-            UA_Client_delete(client);
-        }
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        UA_Variant *inputArguments = (UA_Variant *) UA_calloc(4, (sizeof(UA_Variant)));
-
-        UA_String pdsName = UA_STRING("Test PDS");
-        UA_Variant_setScalar(&inputArguments[0], &pdsName, &UA_TYPES[UA_TYPES_STRING]);
-
-        UA_String *fieldNameAliases = (UA_String *) UA_calloc(2, sizeof(UA_String));
-        fieldNameAliases[0] = UA_STRING("field1");
-        fieldNameAliases[1] = UA_STRING("field2");
-        UA_Variant_setArray(&inputArguments[1], fieldNameAliases, 2, &UA_TYPES[UA_TYPES_STRING]);
-
-        UA_DataSetFieldFlags *dataSetFieldFlags = (UA_DataSetFieldFlags *) UA_calloc(2, sizeof(UA_DataSetFieldFlags));
-        dataSetFieldFlags[0] = UA_DATASETFIELDFLAGS_PROMOTEDFIELD;
-        dataSetFieldFlags[1] = UA_DATASETFIELDFLAGS_PROMOTEDFIELD;
-        UA_Variant_setArray(&inputArguments[2], dataSetFieldFlags, 2, &UA_TYPES[UA_TYPES_DATASETFIELDFLAGS]);
-
-        UA_PublishedVariableDataType *variablesToAdd = (UA_PublishedVariableDataType *) UA_calloc(2, sizeof(UA_PublishedVariableDataType));
-        variablesToAdd[0].publishedVariable = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_LOCALTIME);
-        variablesToAdd[0].attributeId = UA_ATTRIBUTEID_VALUE;
-        variablesToAdd[1].publishedVariable = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERREDUNDANCY_CURRENTSERVERID);
-        variablesToAdd[1].attributeId = UA_ATTRIBUTEID_VALUE;
-        UA_Variant_setArray(&inputArguments[3], variablesToAdd, 2, &UA_TYPES[UA_TYPES_PUBLISHEDVARIABLEDATATYPE]);
-
-        UA_CallMethodRequest callMethodRequest;
-        UA_CallMethodRequest_init(&callMethodRequest);
-        callMethodRequest.inputArgumentsSize = 4;
-        callMethodRequest.inputArguments = inputArguments;
-        callMethodRequest.objectId = UA_NODEID_NUMERIC(0, UA_NS0ID_PUBLISHSUBSCRIBE_PUBLISHEDDATASETS);
-        callMethodRequest.methodId = UA_NODEID_NUMERIC(0, UA_NS0ID_DATASETFOLDERTYPE_ADDPUBLISHEDDATAITEMS);
-
-        UA_CallMethodResult result;
-        UA_CallMethodResult_init(&result);
-        result = UA_Server_call(server, &callMethodRequest);
-        ck_assert_int_eq(3, result.outputArgumentsSize);
-        ck_assert_int_eq(result.statusCode, UA_STATUSCODE_GOOD);
-
-        //TODO checked correctness of created items
-        UA_CallMethodResult_deleteMembers(&result);
-        UA_free(inputArguments);
-        UA_free(fieldNameAliases);
-        UA_free(dataSetFieldFlags);
-        UA_free(variablesToAdd);
-        UA_Client_disconnect(client);
-        UA_Client_delete(client);
-} END_TEST
-
-START_TEST(AddAndRemoveWriterGroups){
-        UA_StatusCode retVal;
-        UA_Client *client = UA_Client_new();
-        UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-        retVal = UA_Client_connect(client, "opc.tcp://localhost:4840");
-        if(retVal != UA_STATUSCODE_GOOD) {
-            UA_Client_delete(client);
-        }
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_NodeId createdConnection = addPubSubConnection();
-
-        UA_Variant *inputArgument = (UA_Variant *) UA_calloc(1, (sizeof(UA_Variant)));
-        UA_WriterGroupDataType writerGroupDataType;
-        UA_WriterGroupDataType_init(&writerGroupDataType);
-        writerGroupDataType.name = UA_STRING("TestWriterGroup");
-        writerGroupDataType.enabled = UA_TRUE;
-        writerGroupDataType.publishingInterval = 500;
-        writerGroupDataType.writerGroupId = 1234;
-        UA_Variant_setScalar(inputArgument, &writerGroupDataType, &UA_TYPES[UA_TYPES_WRITERGROUPDATATYPE]);
-
-        UA_CallMethodRequest callMethodRequest;
-        UA_CallMethodRequest_init(&callMethodRequest);
-        callMethodRequest.inputArgumentsSize = 1;
-        callMethodRequest.inputArguments = inputArgument;
-        callMethodRequest.objectId = createdConnection;
-        callMethodRequest.methodId = UA_NODEID_NUMERIC(0, UA_NS0ID_PUBSUBCONNECTIONTYPE_ADDWRITERGROUP);
-
-        UA_CallMethodResult result;
-        UA_CallMethodResult_init(&result);
-        result = UA_Server_call(server, &callMethodRequest);
-        ck_assert_int_eq(result.statusCode, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(1, result.outputArgumentsSize);
-
-        UA_NodeId createdWriterGroup = UA_NODEID_NULL;
-        if(result.outputArguments->type == &UA_TYPES[UA_TYPES_NODEID])
-            createdWriterGroup = *((UA_NodeId *) result.outputArguments->data);
-        UA_LocalizedText writerGroupDisplayName;
-        UA_LocalizedText_init(&writerGroupDisplayName);
-        retVal = UA_Server_readDisplayName(server, createdWriterGroup, &writerGroupDisplayName);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_String compareText = UA_STRING("TestWriterGroup");
-        ck_assert(UA_String_equal(&writerGroupDisplayName.text, &compareText) == UA_TRUE);
-        UA_free(inputArgument);
-        UA_CallMethodResult_deleteMembers(&result);
-        UA_Client_disconnect(client);
-        UA_Client_delete(client);
-        UA_LocalizedText_deleteMembers(&writerGroupDisplayName);
-} END_TEST
-
-int main(void) {
-    TCase *tc_add_pubsub_informationmodel_methods_connection = tcase_create("PubSub connection delete and creation using the information model methods");
-    tcase_add_checked_fixture(tc_add_pubsub_informationmodel_methods_connection, setup, teardown);
-    tcase_add_test(tc_add_pubsub_informationmodel_methods_connection, AddNewPubSubConnectionUsingTheInformationModelMethod);
-    tcase_add_test(tc_add_pubsub_informationmodel_methods_connection, AddAndRemovePublishedDataSetFolders);
-    tcase_add_test(tc_add_pubsub_informationmodel_methods_connection, AddAndRemovePublishedDataSetItems);
-    tcase_add_test(tc_add_pubsub_informationmodel_methods_connection, AddAndRemoveWriterGroups);
-    //TODO TestCase add publishedDataItems and removePublishedDataItems, writergroup remove
-
-    Suite *s = suite_create("PubSub CRUD configuration by the information model functions");
-    suite_add_tcase(s, tc_add_pubsub_informationmodel_methods_connection);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/pubsub/check_pubsub_multiple_layer.c b/ext/open62541/tests/pubsub/check_pubsub_multiple_layer.c
deleted file mode 100644
index 7cf1c9e..0000000
--- a/ext/open62541/tests/pubsub/check_pubsub_multiple_layer.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017 - 2018 Fraunhofer IOSB (Author: Andreas Ebner)
- */
-
-#include <open62541/plugin/pubsub_udp.h>
-#include <open62541/server_config_default.h>
-#include <open62541/server_pubsub.h>
-
-#include "open62541/types_generated_encoding_binary.h"
-
-#include "ua_server_internal.h"
-
-#include <check.h>
-
-UA_Server *server = NULL;
-UA_NodeId connection1, connection2;
-
-static void setup(void) {
-}
-
-static void teardown(void) {
-}
-
-START_TEST(AddMultipleTransportLayers){
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    UA_PubSubTransportLayer pubsubTransportLayer;
-
-    ck_assert_int_eq(config->pubsubTransportLayersSize, 0);
-
-    pubsubTransportLayer = UA_PubSubTransportLayerUDPMP();
-    UA_ServerConfig_addPubSubTransportLayer(config, &pubsubTransportLayer);
-    ck_assert_int_eq(config->pubsubTransportLayersSize, 1);
-
-    pubsubTransportLayer = UA_PubSubTransportLayerUDPMP();
-    UA_ServerConfig_addPubSubTransportLayer(config, &pubsubTransportLayer);
-    ck_assert_int_eq(config->pubsubTransportLayersSize, 2);
-
-    pubsubTransportLayer = UA_PubSubTransportLayerUDPMP();
-    UA_ServerConfig_addPubSubTransportLayer(config, &pubsubTransportLayer);
-    ck_assert_int_eq(config->pubsubTransportLayersSize, 3);
-
-    UA_Server_delete(server);
-} END_TEST
-
-int main(void) {
-    TCase *tc_add_pubsub_writergroup = tcase_create("PubSub Layer allocation");
-    tcase_add_checked_fixture(tc_add_pubsub_writergroup, setup, teardown);
-    tcase_add_test(tc_add_pubsub_writergroup, AddMultipleTransportLayers);
-
-    Suite *s = suite_create("PubSub Multiple layer handling");
-    suite_add_tcase(s, tc_add_pubsub_writergroup);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/pubsub/check_pubsub_pds.c b/ext/open62541/tests/pubsub/check_pubsub_pds.c
deleted file mode 100644
index 3fd1e8f..0000000
--- a/ext/open62541/tests/pubsub/check_pubsub_pds.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017 - 2018 Fraunhofer IOSB (Author: Andreas Ebner)
- */
-
-#include <open62541/plugin/pubsub_udp.h>
-#include <open62541/server_config_default.h>
-#include <open62541/server_pubsub.h>
-
-#include "open62541/types_generated_encoding_binary.h"
-
-#include "ua_server_internal.h"
-
-#include <check.h>
-
-UA_Server *server = NULL;
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    config->pubsubTransportLayers = (UA_PubSubTransportLayer*)
-        UA_malloc(sizeof(UA_PubSubTransportLayer));
-    config->pubsubTransportLayers[0] = UA_PubSubTransportLayerUDPMP();
-    config->pubsubTransportLayersSize++;
-
-    UA_Server_run_startup(server);
-}
-
-static void teardown(void) {
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-START_TEST(AddPDSWithMinimalValidConfiguration){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    UA_PublishedDataSetConfig pdsConfig;
-    memset(&pdsConfig, 0, sizeof(UA_PublishedDataSetConfig));
-    pdsConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-    pdsConfig.name = UA_STRING("TEST PDS 1");
-    retVal |= UA_Server_addPublishedDataSet(server, &pdsConfig, NULL).addResult;
-    ck_assert_int_eq(server->pubSubManager.publishedDataSetsSize, 1);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    UA_NodeId newPDSNodeID;
-    retVal |= UA_Server_addPublishedDataSet(server, &pdsConfig, &newPDSNodeID).addResult;
-    ck_assert_int_eq(server->pubSubManager.publishedDataSetsSize, 2);
-    ck_assert_int_eq(newPDSNodeID.identifierType, UA_NODEIDTYPE_NUMERIC);
-    ck_assert_int_ne(newPDSNodeID.identifier.numeric, 0);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(AddRemoveAddPDSWithMinimalValidConfiguration){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    UA_PublishedDataSetConfig pdsConfig;
-    memset(&pdsConfig, 0, sizeof(UA_PublishedDataSetConfig));
-    pdsConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-    pdsConfig.name = UA_STRING("TEST PDS 1");
-    UA_NodeId newPDSNodeID;
-    retVal |= UA_Server_addPublishedDataSet(server, &pdsConfig, &newPDSNodeID).addResult;
-    ck_assert_int_eq(server->pubSubManager.publishedDataSetsSize, 1);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    retVal |= UA_Server_removePublishedDataSet(server, newPDSNodeID);
-    ck_assert_int_eq(server->pubSubManager.publishedDataSetsSize, 0);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    retVal |= UA_Server_addPublishedDataSet(server, &pdsConfig, &newPDSNodeID).addResult;
-    ck_assert_int_eq(server->pubSubManager.publishedDataSetsSize, 1);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(AddPDSWithNullConfig){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    retVal |= UA_Server_addPublishedDataSet(server, NULL, NULL).addResult;
-    ck_assert_int_eq(server->pubSubManager.publishedDataSetsSize, 0);
-    ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(AddPDSWithUnsupportedType){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    UA_PublishedDataSetConfig pdsConfig;
-    memset(&pdsConfig, 0, sizeof(UA_PublishedDataSetConfig));
-    pdsConfig.name = UA_STRING("TEST PDS 1");
-    pdsConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS_TEMPLATE;
-    retVal |= UA_Server_addPublishedDataSet(server, &pdsConfig, NULL).addResult;
-    ck_assert_int_eq(server->pubSubManager.publishedDataSetsSize, 0);
-    ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-    pdsConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDEVENTS;
-    ck_assert_int_eq(server->pubSubManager.publishedDataSetsSize, 0);
-    ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-    pdsConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDEVENTS_TEMPLATE;
-    ck_assert_int_eq(server->pubSubManager.publishedDataSetsSize, 0);
-    ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(GetPDSConfigurationAndCompareValues){
-    UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-    UA_PublishedDataSetConfig pdsConfig;
-    memset(&pdsConfig, 0, sizeof(UA_PublishedDataSetConfig));
-    pdsConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-    pdsConfig.name = UA_STRING("TEST PDS 1");
-    UA_NodeId pdsIdentifier;
-    retVal |= UA_Server_addPublishedDataSet(server, &pdsConfig, &pdsIdentifier).addResult;
-    ck_assert_int_eq(server->pubSubManager.publishedDataSetsSize, 1);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    UA_PublishedDataSetConfig pdsConfigCopy;
-    memset(&pdsConfigCopy, 0, sizeof(UA_PublishedDataSetConfig));
-        UA_Server_getPublishedDataSetConfig(server, pdsIdentifier, &pdsConfigCopy);
-    ck_assert_int_eq(UA_String_equal(&pdsConfig.name, &pdsConfigCopy.name), UA_TRUE);
-    UA_PublishedDataSetConfig_deleteMembers(&pdsConfigCopy);
-} END_TEST
-
-int main(void) {
-    TCase *tc_add_pubsub_pds_minimal_config = tcase_create("Create PubSub PublishedDataItem with minimal valid config");
-    tcase_add_checked_fixture(tc_add_pubsub_pds_minimal_config, setup, teardown);
-    tcase_add_test(tc_add_pubsub_pds_minimal_config, AddPDSWithMinimalValidConfiguration);
-    tcase_add_test(tc_add_pubsub_pds_minimal_config, AddRemoveAddPDSWithMinimalValidConfiguration);
-
-    TCase *tc_add_pubsub_pds_invalid_config = tcase_create("Create PubSub PublishedDataItem with minimal invalid config");
-    tcase_add_checked_fixture(tc_add_pubsub_pds_invalid_config, setup, teardown);
-    tcase_add_test(tc_add_pubsub_pds_invalid_config, AddPDSWithNullConfig);
-    tcase_add_test(tc_add_pubsub_pds_invalid_config, AddPDSWithUnsupportedType);
-
-    TCase *tc_add_pubsub_pds_handling_utils = tcase_create("PubSub PublishedDataSet handling");
-    tcase_add_checked_fixture(tc_add_pubsub_pds_handling_utils, setup, teardown);
-    tcase_add_test(tc_add_pubsub_pds_handling_utils, GetPDSConfigurationAndCompareValues);
-    //tcase_add_test(tc_add_pubsub_connections_maximal_config, GetMaximalConnectionConfigurationAndCompareValues);
-
-    Suite *s = suite_create("PubSub PublishedDataSets handling");
-    suite_add_tcase(s, tc_add_pubsub_pds_minimal_config);
-    suite_add_tcase(s, tc_add_pubsub_pds_invalid_config);
-    suite_add_tcase(s, tc_add_pubsub_pds_handling_utils);
-
-
-    //suite_add_tcase(s, tc_add_pubsub_connections_maximal_config);
-    //suite_add_tcase(s, tc_decode);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/pubsub/check_pubsub_publish.c b/ext/open62541/tests/pubsub/check_pubsub_publish.c
deleted file mode 100644
index 551a213..0000000
--- a/ext/open62541/tests/pubsub/check_pubsub_publish.c
+++ /dev/null
@@ -1,458 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017 - 2018 Fraunhofer IOSB (Author: Andreas Ebner)
- */
-
-#include <open62541/plugin/pubsub_udp.h>
-#include <open62541/server_config_default.h>
-#include <open62541/server_pubsub.h>
-
-#include "open62541/types_generated_encoding_binary.h"
-
-#include "ua_pubsub.h"
-#include "ua_server_internal.h"
-
-#include <check.h>
-
-UA_Server *server = NULL;
-UA_NodeId connection1, connection2, writerGroup1, writerGroup2, writerGroup3,
-        publishedDataSet1, publishedDataSet2, dataSetWriter1, dataSetWriter2, dataSetWriter3;
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    config->pubsubTransportLayers = (UA_PubSubTransportLayer*)
-        UA_malloc(sizeof(UA_PubSubTransportLayer));
-    config->pubsubTransportLayers[0] = UA_PubSubTransportLayerUDPMP();
-    config->pubsubTransportLayersSize++;
-
-    UA_Server_run_startup(server);
-    //add 2 connections
-    UA_PubSubConnectionConfig connectionConfig;
-    memset(&connectionConfig, 0, sizeof(UA_PubSubConnectionConfig));
-    connectionConfig.name = UA_STRING("UADP Connection");
-    UA_NetworkAddressUrlDataType networkAddressUrl = {UA_STRING_NULL, UA_STRING("opc.udp://224.0.0.22:4840/")};
-    UA_Variant_setScalar(&connectionConfig.address, &networkAddressUrl,
-                         &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-    connectionConfig.transportProfileUri = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-    UA_Server_addPubSubConnection(server, &connectionConfig, &connection1);
-    UA_Server_addPubSubConnection(server, &connectionConfig, &connection2);
-}
-
-static void teardown(void) {
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-START_TEST(AddWriterGroupWithValidConfiguration){
-        UA_StatusCode retVal;
-        UA_WriterGroupConfig writerGroupConfig;
-        memset(&writerGroupConfig, 0, sizeof(writerGroupConfig));
-        writerGroupConfig.name = UA_STRING("WriterGroup 1");
-        writerGroupConfig.publishingInterval = 10;
-        UA_NodeId localWriterGroup;
-        retVal = UA_Server_addWriterGroup(server, connection1, &writerGroupConfig, &localWriterGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        size_t writerGroupCount = 0;
-        UA_WriterGroup *writerGroup;
-        LIST_FOREACH(writerGroup, &UA_PubSubConnection_findConnectionbyId(server, connection1)->writerGroups, listEntry){
-            writerGroupCount++;
-        }
-        ck_assert_int_eq(writerGroupCount, 1);
-    } END_TEST
-
-START_TEST(AddRemoveAddWriterGroupWithMinimalValidConfiguration){
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_WriterGroupConfig writerGroupConfig;
-        memset(&writerGroupConfig, 0, sizeof(writerGroupConfig));
-        writerGroupConfig.name = UA_STRING("WriterGroup 1");
-        writerGroupConfig.publishingInterval = 10;
-        UA_NodeId localWriterGroup;
-        retVal |= UA_Server_addWriterGroup(server, connection1, &writerGroupConfig, &localWriterGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        retVal |= UA_Server_removeWriterGroup(server, localWriterGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        size_t writerGroupCount = 0;
-        UA_WriterGroup *writerGroup;
-        LIST_FOREACH(writerGroup, &UA_PubSubConnection_findConnectionbyId(server, connection1)->writerGroups, listEntry){
-            writerGroupCount++;
-        }
-        ck_assert_int_eq(writerGroupCount, 0);
-        retVal |= UA_Server_addWriterGroup(server, connection1, &writerGroupConfig, &localWriterGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        writerGroupCount = 0;
-        LIST_FOREACH(writerGroup, &UA_PubSubConnection_findConnectionbyId(server, connection1)->writerGroups, listEntry){
-            writerGroupCount++;
-        }
-        ck_assert_int_eq(writerGroupCount, 1);
-        retVal |= UA_Server_addWriterGroup(server, connection1, &writerGroupConfig, &localWriterGroup);
-        writerGroupCount = 0;
-        LIST_FOREACH(writerGroup, &UA_PubSubConnection_findConnectionbyId(server, connection1)->writerGroups, listEntry){
-            writerGroupCount++;
-        }
-        ck_assert_int_eq(writerGroupCount, 2);
-    } END_TEST
-
-START_TEST(AddWriterGroupWithNullConfig){
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        retVal |= UA_Server_addWriterGroup(server, connection1, NULL, NULL);
-        size_t writerGroupCount = 0;
-        UA_WriterGroup *writerGroup;
-        LIST_FOREACH(writerGroup, &UA_PubSubConnection_findConnectionbyId(server, connection1)->writerGroups, listEntry){
-            writerGroupCount++;
-        }
-        ck_assert_int_eq(writerGroupCount, 0);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-    } END_TEST
-
-START_TEST(AddWriterGroupWithInvalidConnectionId){
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_WriterGroupConfig writerGroupConfig;
-        memset(&writerGroupConfig, 0, sizeof(writerGroupConfig));
-        writerGroupConfig.name = UA_STRING("WriterGroup 1");
-        writerGroupConfig.publishingInterval = 10;
-        retVal |= UA_Server_addWriterGroup(server, UA_NODEID_NUMERIC(0, UA_UINT32_MAX), &writerGroupConfig, NULL);
-        size_t writerGroupCount = 0;
-        UA_WriterGroup *writerGroup;
-        LIST_FOREACH(writerGroup, &UA_PubSubConnection_findConnectionbyId(server, connection1)->writerGroups, listEntry){
-            writerGroupCount++;
-        }
-        ck_assert_int_eq(writerGroupCount, 0);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-    } END_TEST
-
-START_TEST(GetWriterGroupConfigurationAndCompareValues){
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_WriterGroupConfig writerGroupConfig;
-        memset(&writerGroupConfig, 0, sizeof(writerGroupConfig));
-        writerGroupConfig.name = UA_STRING("WriterGroup 1");
-        writerGroupConfig.publishingInterval = 10;
-        UA_NodeId localWriterGroup;
-        retVal |= UA_Server_addWriterGroup(server, connection1, &writerGroupConfig, &localWriterGroup);
-        UA_WriterGroupConfig writerGroupConfigCopy;
-        retVal |= UA_Server_getWriterGroupConfig(server, localWriterGroup, &writerGroupConfigCopy);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(UA_String_equal(&writerGroupConfig.name, &writerGroupConfigCopy.name), UA_TRUE);
-        //todo remove == for floating point compare
-        ck_assert(writerGroupConfig.publishingInterval == writerGroupConfig.publishingInterval);
-        UA_WriterGroupConfig_deleteMembers(&writerGroupConfigCopy);
-    } END_TEST
-
-static void setupDataSetWriterTestEnvironment(void){
-    UA_WriterGroupConfig writerGroupConfig;
-    memset(&writerGroupConfig, 0, sizeof(writerGroupConfig));
-    writerGroupConfig.name = UA_STRING("WriterGroup 1");
-    writerGroupConfig.publishingInterval = 10;
-    writerGroupConfig.encodingMimeType = UA_PUBSUB_ENCODING_UADP;
-    UA_Server_addWriterGroup(server, connection1, &writerGroupConfig, &writerGroup1);
-    writerGroupConfig.name = UA_STRING("WriterGroup 2");
-    writerGroupConfig.publishingInterval = 50;
-    writerGroupConfig.encodingMimeType = UA_PUBSUB_ENCODING_UADP;
-    UA_Server_addWriterGroup(server, connection2, &writerGroupConfig, &writerGroup2);
-    writerGroupConfig.name = UA_STRING("WriterGroup 3");
-    writerGroupConfig.publishingInterval = 100;
-    writerGroupConfig.encodingMimeType = UA_PUBSUB_ENCODING_UADP;
-    UA_Server_addWriterGroup(server, connection2, &writerGroupConfig, &writerGroup3);
-    UA_PublishedDataSetConfig pdsConfig;
-    memset(&pdsConfig, 0, sizeof(UA_PublishedDataSetConfig));
-    pdsConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-    pdsConfig.name = UA_STRING("PublishedDataSet 1");
-    UA_Server_addPublishedDataSet(server, &pdsConfig, &publishedDataSet1);
-    UA_Server_addPublishedDataSet(server, &pdsConfig, &publishedDataSet2);
-}
-
-START_TEST(AddDataSetWriterWithValidConfiguration){
-        setupDataSetWriterTestEnvironment();
-        UA_StatusCode retVal;
-        UA_DataSetWriterConfig dataSetWriterConfig;
-        memset(&dataSetWriterConfig, 0, sizeof(dataSetWriterConfig));
-        dataSetWriterConfig.name = UA_STRING("DataSetWriter 1 ");
-        UA_NodeId localDataSetWriter;
-        retVal = UA_Server_addDataSetWriter(server, writerGroup1, publishedDataSet1, &dataSetWriterConfig, &localDataSetWriter);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_DataSetWriter *dsw1 = UA_DataSetWriter_findDSWbyId(server, localDataSetWriter);
-        ck_assert_ptr_ne(dsw1, NULL);
-        UA_WriterGroup *wg1 = UA_WriterGroup_findWGbyId(server, writerGroup1);
-        ck_assert_ptr_ne(wg1, NULL);
-        ck_assert_int_eq(wg1->writersCount, 1);
-    } END_TEST
-
-START_TEST(AddRemoveAddDataSetWriterWithValidConfiguration){
-        setupDataSetWriterTestEnvironment();
-        UA_StatusCode retVal;
-        UA_WriterGroup *wg1 = UA_WriterGroup_findWGbyId(server, writerGroup1);
-        ck_assert_ptr_ne(wg1, NULL);
-        UA_DataSetWriterConfig dataSetWriterConfig;
-        memset(&dataSetWriterConfig, 0, sizeof(dataSetWriterConfig));
-        dataSetWriterConfig.name = UA_STRING("DataSetWriter 1 ");
-        UA_NodeId dataSetWriter;
-        ck_assert_int_eq(wg1->writersCount, 0);
-        retVal = UA_Server_addDataSetWriter(server, writerGroup1, publishedDataSet1, &dataSetWriterConfig, &dataSetWriter);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(wg1->writersCount, 1);
-        retVal = UA_Server_removeDataSetWriter(server, dataSetWriter);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(wg1->writersCount, 0);
-        retVal = UA_Server_addDataSetWriter(server, writerGroup1, publishedDataSet1, &dataSetWriterConfig, &dataSetWriter);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(wg1->writersCount, 1);
-        retVal = UA_Server_addDataSetWriter(server, writerGroup1, publishedDataSet1, &dataSetWriterConfig, &dataSetWriter);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(wg1->writersCount, 2);
-
-        UA_WriterGroup *wg2 = UA_WriterGroup_findWGbyId(server, writerGroup2);
-        ck_assert_ptr_ne(wg2, NULL);
-        retVal = UA_Server_addDataSetWriter(server, writerGroup2, publishedDataSet1, &dataSetWriterConfig, &dataSetWriter);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(wg2->writersCount, 1);
-    } END_TEST
-
-START_TEST(AddDataSetWriterWithNullConfig){
-        setupDataSetWriterTestEnvironment();
-        UA_StatusCode retVal;
-        retVal = UA_Server_addDataSetWriter(server, writerGroup1, publishedDataSet1, NULL, NULL);
-        UA_WriterGroup *wg1 = UA_WriterGroup_findWGbyId(server, writerGroup1);
-        ck_assert_ptr_ne(wg1, NULL);
-        ck_assert_int_eq(wg1->writersCount, 0);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-    } END_TEST
-
-START_TEST(AddDataSetWriterWithInvalidPDSId){
-        setupDataSetWriterTestEnvironment();
-        UA_StatusCode retVal;
-        UA_DataSetWriterConfig dataSetWriterConfig;
-        memset(&dataSetWriterConfig, 0, sizeof(dataSetWriterConfig));
-        dataSetWriterConfig.name = UA_STRING("DataSetWriter 1 ");
-        retVal = UA_Server_addDataSetWriter(server, writerGroup1, UA_NODEID_NUMERIC(0, UA_UINT32_MAX), &dataSetWriterConfig, NULL);
-        UA_WriterGroup *wg1 = UA_WriterGroup_findWGbyId(server, writerGroup1);
-        ck_assert_ptr_ne(wg1, NULL);
-        ck_assert_int_eq(wg1->writersCount, 0);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-    } END_TEST
-
-START_TEST(GetDataSetWriterConfigurationAndCompareValues){
-        setupDataSetWriterTestEnvironment();
-        UA_StatusCode retVal;
-        UA_DataSetWriterConfig dataSetWriterConfig;
-        memset(&dataSetWriterConfig, 0, sizeof(dataSetWriterConfig));
-        dataSetWriterConfig.name = UA_STRING("DataSetWriter 1 ");
-        UA_NodeId localDataSetWriter;
-        retVal = UA_Server_addDataSetWriter(server, writerGroup1, publishedDataSet1, &dataSetWriterConfig, &localDataSetWriter);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_DataSetWriterConfig dataSetWiterConfigCopy;
-        retVal |= UA_Server_getDataSetWriterConfig(server, localDataSetWriter, &dataSetWiterConfigCopy);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(UA_String_equal(&dataSetWiterConfigCopy.name, &dataSetWiterConfigCopy.name), UA_TRUE);
-        UA_DataSetWriterConfig_deleteMembers(&dataSetWiterConfigCopy);
-    } END_TEST
-
-static void setupDataSetFieldTestEnvironment(void){
-    setupDataSetWriterTestEnvironment();
-    UA_DataSetWriterConfig dataSetWriterConfig;
-    memset(&dataSetWriterConfig, 0, sizeof(dataSetWriterConfig));
-    dataSetWriterConfig.name = UA_STRING("DataSetWriter 1");
-    UA_Server_addDataSetWriter(server, writerGroup1, publishedDataSet1, &dataSetWriterConfig, &dataSetWriter1);
-    dataSetWriterConfig.name = UA_STRING("DataSetWriter 2");
-    UA_Server_addDataSetWriter(server, writerGroup1, publishedDataSet1, &dataSetWriterConfig, &dataSetWriter2);
-    dataSetWriterConfig.name = UA_STRING("DataSetWriter 3");
-    UA_Server_addDataSetWriter(server, writerGroup2, publishedDataSet2, &dataSetWriterConfig, &dataSetWriter3);
-}
-
-START_TEST(AddDataSetFieldWithValidConfiguration){
-        setupDataSetFieldTestEnvironment();
-        UA_StatusCode retVal;
-        UA_DataSetFieldConfig fieldConfig;
-        memset(&fieldConfig, 0, sizeof(UA_DataSetFieldConfig));
-        fieldConfig.dataSetFieldType = UA_PUBSUB_DATASETFIELD_VARIABLE;
-        fieldConfig.field.variable.fieldNameAlias = UA_STRING("field 1");
-        UA_NodeId localDataSetField;
-        UA_PublishedDataSet *pds = UA_PublishedDataSet_findPDSbyId(server, publishedDataSet1);
-        ck_assert_ptr_ne(pds, NULL);
-        ck_assert_int_eq(pds->fieldSize, 0);
-        retVal = UA_Server_addDataSetField(server, publishedDataSet1, &fieldConfig, &localDataSetField).result;
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(pds->fieldSize, 1);
-    } END_TEST
-
-START_TEST(AddRemoveAddDataSetFieldWithValidConfiguration){
-        setupDataSetFieldTestEnvironment();
-        UA_StatusCode retVal;
-        UA_DataSetFieldConfig fieldConfig;
-        memset(&fieldConfig, 0, sizeof(UA_DataSetFieldConfig));
-        fieldConfig.dataSetFieldType = UA_PUBSUB_DATASETFIELD_VARIABLE;
-        fieldConfig.field.variable.fieldNameAlias = UA_STRING("field 1");
-        UA_NodeId localDataSetField;
-        UA_PublishedDataSet *pds1 = UA_PublishedDataSet_findPDSbyId(server, publishedDataSet1);
-        ck_assert_ptr_ne(pds1, NULL);
-        ck_assert_int_eq(pds1->fieldSize, 0);
-        retVal = UA_Server_addDataSetField(server, publishedDataSet1, &fieldConfig, &localDataSetField).result;
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(pds1->fieldSize, 1);
-        retVal = UA_Server_removeDataSetField(server, localDataSetField).result;
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(pds1->fieldSize, 0);
-        retVal = UA_Server_addDataSetField(server, publishedDataSet1, &fieldConfig, &localDataSetField).result;
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(pds1->fieldSize, 1);
-        retVal = UA_Server_addDataSetField(server, publishedDataSet1, &fieldConfig, &localDataSetField).result;
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(pds1->fieldSize, 2);
-        UA_PublishedDataSet *pds2 = UA_PublishedDataSet_findPDSbyId(server, publishedDataSet2);
-        ck_assert_ptr_ne(pds2, NULL);
-        retVal = UA_Server_addDataSetField(server, publishedDataSet2, &fieldConfig, &localDataSetField).result;
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(pds2->fieldSize, 1);
-    } END_TEST
-
-START_TEST(AddDataSetFieldWithNullConfig){
-        setupDataSetFieldTestEnvironment();
-        UA_StatusCode retVal;
-        retVal = UA_Server_addDataSetField(server, publishedDataSet1, NULL, NULL).result;
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-        UA_PublishedDataSet *pds1 = UA_PublishedDataSet_findPDSbyId(server, publishedDataSet1);
-        ck_assert_ptr_ne(pds1, NULL);
-        ck_assert_int_eq(pds1->fieldSize, 0);
-    } END_TEST
-
-START_TEST(AddDataSetFieldWithInvalidPDSId){
-        setupDataSetFieldTestEnvironment();
-        UA_StatusCode retVal;
-        UA_DataSetFieldConfig fieldConfig;
-        memset(&fieldConfig, 0, sizeof(UA_DataSetFieldConfig));
-        fieldConfig.dataSetFieldType = UA_PUBSUB_DATASETFIELD_VARIABLE;
-        fieldConfig.field.variable.fieldNameAlias = UA_STRING("field 1");
-        retVal = UA_Server_addDataSetField(server, UA_NODEID_NUMERIC(0, UA_UINT32_MAX), &fieldConfig, NULL).result;
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-        UA_PublishedDataSet *pds1 = UA_PublishedDataSet_findPDSbyId(server, publishedDataSet1);
-        ck_assert_ptr_ne(pds1, NULL);
-        ck_assert_int_eq(pds1->fieldSize, 0);
-    } END_TEST
-
-START_TEST(GetDataSetFieldConfigurationAndCompareValues){
-        setupDataSetFieldTestEnvironment();
-        UA_StatusCode retVal;
-        UA_DataSetFieldConfig fieldConfig;
-        memset(&fieldConfig, 0, sizeof(UA_DataSetFieldConfig));
-        fieldConfig.dataSetFieldType = UA_PUBSUB_DATASETFIELD_VARIABLE;
-        fieldConfig.field.variable.fieldNameAlias = UA_STRING("field 1");
-        UA_NodeId dataSetFieldId;
-        retVal = UA_Server_addDataSetField(server, publishedDataSet1, &fieldConfig, &dataSetFieldId).result;
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_DataSetFieldConfig fieldConfigCopy;
-        retVal |= UA_Server_getDataSetFieldConfig(server, dataSetFieldId, &fieldConfigCopy);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(fieldConfig.dataSetFieldType, fieldConfigCopy.dataSetFieldType);
-        ck_assert_int_eq(UA_String_equal(&fieldConfig.field.variable.fieldNameAlias, &fieldConfigCopy.field.variable.fieldNameAlias), UA_TRUE);
-        UA_DataSetFieldConfig_deleteMembers(&fieldConfigCopy);
-    } END_TEST
-
-
-START_TEST(SinglePublishDataSetField){
-        UA_WriterGroupConfig writerGroupConfig;
-        memset(&writerGroupConfig, 0, sizeof(writerGroupConfig));
-        writerGroupConfig.name = UA_STRING("WriterGroup 1");
-        writerGroupConfig.publishingInterval = 10;
-        writerGroupConfig.encodingMimeType = UA_PUBSUB_ENCODING_UADP;
-        UA_Server_addWriterGroup(server, connection1, &writerGroupConfig, &writerGroup1);
-        writerGroupConfig.name = UA_STRING("WriterGroup 2");
-        writerGroupConfig.publishingInterval = 50;
-        writerGroupConfig.encodingMimeType = UA_PUBSUB_ENCODING_UADP;
-        UA_Server_addWriterGroup(server, connection2, &writerGroupConfig, &writerGroup2);
-        writerGroupConfig.name = UA_STRING("WriterGroup 3");
-        writerGroupConfig.publishingInterval = 100;
-        writerGroupConfig.encodingMimeType = UA_PUBSUB_ENCODING_UADP;
-        UA_Server_addWriterGroup(server, connection2, &writerGroupConfig, &writerGroup3);
-        UA_PublishedDataSetConfig pdsConfig;
-        memset(&pdsConfig, 0, sizeof(UA_PublishedDataSetConfig));
-        pdsConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-        pdsConfig.name = UA_STRING("PublishedDataSet 1");
-        UA_Server_addPublishedDataSet(server, &pdsConfig, &publishedDataSet1);
-        UA_Server_addPublishedDataSet(server, &pdsConfig, &publishedDataSet2);
-        UA_DataSetWriterConfig dataSetWriterConfig;
-        memset(&dataSetWriterConfig, 0, sizeof(dataSetWriterConfig));
-        dataSetWriterConfig.name = UA_STRING("DataSetWriter 1");
-        UA_Server_addDataSetWriter(server, writerGroup1, publishedDataSet1, &dataSetWriterConfig, &dataSetWriter1);
-        UA_DataSetFieldConfig dataSetFieldConfig;
-        memset(&dataSetFieldConfig, 0, sizeof(UA_DataSetFieldConfig));
-        dataSetFieldConfig.dataSetFieldType = UA_PUBSUB_DATASETFIELD_VARIABLE;
-        dataSetFieldConfig.field.variable.fieldNameAlias = UA_STRING("Server localtime");
-        dataSetFieldConfig.field.variable.promotedField = UA_FALSE;
-        dataSetFieldConfig.field.variable.publishParameters.publishedVariable = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_LOCALTIME);
-        dataSetFieldConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-        UA_Server_addDataSetField(server, publishedDataSet1, &dataSetFieldConfig, NULL);
-
-        UA_WriterGroup *wg = UA_WriterGroup_findWGbyId(server, writerGroup1);
-        UA_WriterGroup_publishCallback(server, wg);
-    } END_TEST
-
-START_TEST(PublishDataSetFieldAsDeltaFrame){
-            setupDataSetFieldTestEnvironment();
-            UA_DataSetFieldConfig dataSetFieldConfig;
-            memset(&dataSetFieldConfig, 0, sizeof(UA_DataSetFieldConfig));
-            dataSetFieldConfig.dataSetFieldType = UA_PUBSUB_DATASETFIELD_VARIABLE;
-            dataSetFieldConfig.field.variable.fieldNameAlias = UA_STRING("Server localtime");
-            dataSetFieldConfig.field.variable.promotedField = UA_FALSE;
-            dataSetFieldConfig.field.variable.publishParameters.publishedVariable = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_LOCALTIME);
-            dataSetFieldConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-            UA_Server_addDataSetField(server, publishedDataSet1, &dataSetFieldConfig, NULL);
-            UA_Server_addDataSetField(server, publishedDataSet1, &dataSetFieldConfig, NULL);
-
-            UA_WriterGroup *wg = UA_WriterGroup_findWGbyId(server, writerGroup1);
-            wg->config.maxEncapsulatedDataSetMessageCount = 3;
-            UA_DataSetWriter *dsw = UA_DataSetWriter_findDSWbyId(server, dataSetWriter1);
-            dsw->config.keyFrameCount = 3;
-
-            UA_WriterGroup_publishCallback(server, wg);
-            UA_WriterGroup_publishCallback(server, wg);
-            UA_WriterGroup_publishCallback(server, wg);
-            UA_WriterGroup_publishCallback(server, wg);
-            UA_WriterGroup_publishCallback(server, wg);
-        } END_TEST
-
-int main(void) {
-    TCase *tc_add_pubsub_writergroup = tcase_create("PubSub WriterGroup items handling");
-    tcase_add_checked_fixture(tc_add_pubsub_writergroup, setup, teardown);
-    tcase_add_test(tc_add_pubsub_writergroup, AddWriterGroupWithValidConfiguration);
-    tcase_add_test(tc_add_pubsub_writergroup, AddRemoveAddWriterGroupWithMinimalValidConfiguration);
-    tcase_add_test(tc_add_pubsub_writergroup, AddWriterGroupWithNullConfig);
-    tcase_add_test(tc_add_pubsub_writergroup, AddWriterGroupWithInvalidConnectionId);
-    tcase_add_test(tc_add_pubsub_writergroup, GetWriterGroupConfigurationAndCompareValues);
-
-    TCase *tc_add_pubsub_datasetwriter = tcase_create("PubSub DataSetWriter items handling");
-    tcase_add_checked_fixture(tc_add_pubsub_datasetwriter, setup, teardown);
-    tcase_add_test(tc_add_pubsub_datasetwriter, AddDataSetWriterWithValidConfiguration);
-    tcase_add_test(tc_add_pubsub_datasetwriter, AddRemoveAddDataSetWriterWithValidConfiguration);
-    tcase_add_test(tc_add_pubsub_datasetwriter, AddDataSetWriterWithNullConfig);
-    tcase_add_test(tc_add_pubsub_datasetwriter, AddDataSetWriterWithInvalidPDSId);
-    tcase_add_test(tc_add_pubsub_datasetwriter, GetDataSetWriterConfigurationAndCompareValues);
-
-    TCase *tc_add_pubsub_datasetfields = tcase_create("PubSub DataSetField items handling");
-    tcase_add_checked_fixture(tc_add_pubsub_datasetfields, setup, teardown);
-    tcase_add_test(tc_add_pubsub_datasetfields, AddDataSetFieldWithValidConfiguration);
-    tcase_add_test(tc_add_pubsub_datasetfields, AddRemoveAddDataSetFieldWithValidConfiguration);
-    tcase_add_test(tc_add_pubsub_datasetfields, AddDataSetFieldWithNullConfig);
-    tcase_add_test(tc_add_pubsub_datasetfields, AddDataSetFieldWithInvalidPDSId);
-    tcase_add_test(tc_add_pubsub_datasetfields, GetDataSetFieldConfigurationAndCompareValues);
-
-    TCase *tc_pubsub_publish = tcase_create("PubSub publish DataSetFields");
-    tcase_add_checked_fixture(tc_pubsub_publish, setup, teardown);
-    tcase_add_test(tc_pubsub_publish, SinglePublishDataSetField);
-    tcase_add_test(tc_pubsub_publish, PublishDataSetFieldAsDeltaFrame);
-
-    Suite *s = suite_create("PubSub WriterGroups/Writer/Fields handling and publishing");
-    suite_add_tcase(s, tc_add_pubsub_writergroup);
-    suite_add_tcase(s, tc_add_pubsub_datasetwriter);
-    suite_add_tcase(s, tc_add_pubsub_datasetfields);
-    suite_add_tcase(s, tc_pubsub_publish);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/pubsub/check_pubsub_publish_json.c b/ext/open62541/tests/pubsub/check_pubsub_publish_json.c
deleted file mode 100644
index ad8b9c9..0000000
--- a/ext/open62541/tests/pubsub/check_pubsub_publish_json.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017 - 2018 Fraunhofer IOSB (Author: Andreas Ebner)
- */
-
-#include <open62541/plugin/pubsub_udp.h>
-#include <open62541/server_config_default.h>
-#include <open62541/server_pubsub.h>
-#include <open62541/types.h>
-#include <open62541/types_generated_encoding_binary.h>
-
-#include "ua_pubsub.h"
-#include "ua_server_internal.h"
-
-#include <check.h>
-
-UA_Server *server = NULL;
-UA_NodeId connection1, writerGroup1, publishedDataSet1, dataSetWriter1;
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    config->pubsubTransportLayers = (UA_PubSubTransportLayer *) UA_malloc(sizeof(UA_PubSubTransportLayer));
-    config->pubsubTransportLayers[0] = UA_PubSubTransportLayerUDPMP();
-    config->pubsubTransportLayersSize++;
-
-    UA_Server_run_startup(server);
-    UA_PubSubConnectionConfig connectionConfig;
-    memset(&connectionConfig, 0, sizeof(UA_PubSubConnectionConfig));
-    connectionConfig.name = UA_STRING("UADP Connection");
-    UA_NetworkAddressUrlDataType networkAddressUrl = {UA_STRING_NULL, UA_STRING("opc.udp://224.0.0.22:4840/")};
-    UA_Variant_setScalar(&connectionConfig.address, &networkAddressUrl,
-                         &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-    connectionConfig.transportProfileUri = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-    UA_Server_addPubSubConnection(server, &connectionConfig, &connection1);
-}
-
-static void teardown(void) {
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-START_TEST(SinglePublishDataSetField){
-        UA_WriterGroupConfig writerGroupConfig;
-        memset(&writerGroupConfig, 0, sizeof(writerGroupConfig));
-
-        writerGroupConfig.messageSettings.encoding = UA_EXTENSIONOBJECT_DECODED;
-        writerGroupConfig.messageSettings.content.decoded.type = &UA_TYPES[UA_TYPES_JSONDATASETWRITERMESSAGEDATATYPE];
-        UA_JsonDataSetWriterMessageDataType d;
-        d.dataSetMessageContentMask = UA_JSONDATASETMESSAGECONTENTMASK_SEQUENCENUMBER;
-        writerGroupConfig.messageSettings.content.decoded.data = &d;
-
-        writerGroupConfig.name = UA_STRING("WriterGroup 1");
-        writerGroupConfig.publishingInterval = 10;
-        writerGroupConfig.encodingMimeType = UA_PUBSUB_ENCODING_JSON;
-        UA_Server_addWriterGroup(server, connection1, &writerGroupConfig, &writerGroup1);
-
-        UA_PublishedDataSetConfig pdsConfig;
-        memset(&pdsConfig, 0, sizeof(UA_PublishedDataSetConfig));
-        pdsConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-        pdsConfig.name = UA_STRING("PublishedDataSet 1");
-        UA_Server_addPublishedDataSet(server, &pdsConfig, &publishedDataSet1);
-        UA_DataSetWriterConfig dataSetWriterConfig;
-        memset(&dataSetWriterConfig, 0, sizeof(dataSetWriterConfig));
-        dataSetWriterConfig.name = UA_STRING("DataSetWriter 1");
-        UA_Server_addDataSetWriter(server, writerGroup1, publishedDataSet1, &dataSetWriterConfig, &dataSetWriter1);
-        UA_DataSetFieldConfig dataSetFieldConfig;
-        memset(&dataSetFieldConfig, 0, sizeof(UA_DataSetFieldConfig));
-        dataSetFieldConfig.dataSetFieldType = UA_PUBSUB_DATASETFIELD_VARIABLE;
-        dataSetFieldConfig.field.variable.fieldNameAlias = UA_STRING("Server localtime");
-        dataSetFieldConfig.field.variable.promotedField = UA_FALSE;
-        dataSetFieldConfig.field.variable.publishParameters.publishedVariable = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_LOCALTIME);
-        dataSetFieldConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-        UA_Server_addDataSetField(server, publishedDataSet1, &dataSetFieldConfig, NULL);
-
-        UA_WriterGroup *wg = UA_WriterGroup_findWGbyId(server, writerGroup1);
-        UA_WriterGroup_publishCallback(server, wg);
-    } END_TEST
-
-int main(void) {
-    TCase *tc_pubsub_publish = tcase_create("PubSub publish");
-    tcase_add_checked_fixture(tc_pubsub_publish, setup, teardown);
-    tcase_add_test(tc_pubsub_publish, SinglePublishDataSetField);
-
-    Suite *s = suite_create("PubSub publishing json via udp");
-    suite_add_tcase(s, tc_pubsub_publish);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/pubsub/check_pubsub_publish_uadp.c b/ext/open62541/tests/pubsub/check_pubsub_publish_uadp.c
deleted file mode 100644
index f4ffe1d..0000000
--- a/ext/open62541/tests/pubsub/check_pubsub_publish_uadp.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2019 Fraunhofer IOSB (Author: Andreas Ebner)
- */
-
-#include <open62541/plugin/pubsub_udp.h>
-#include <open62541/server_config_default.h>
-#include <open62541/server_pubsub.h>
-
-#include "ua_server_internal.h"
-
-#include <check.h>
-
-UA_Server *server = NULL;
-UA_NodeId connection1, publishedDataSetIdent, dataSetFieldIdent, writerGroupIdent, dataSetWriterIdent;
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    config->pubsubTransportLayers = (UA_PubSubTransportLayer*)
-            UA_malloc(sizeof(UA_PubSubTransportLayer));
-    config->pubsubTransportLayers[0] = UA_PubSubTransportLayerUDPMP();
-    config->pubsubTransportLayersSize++;
-
-    UA_Server_run_startup(server);
-    //add connection
-    UA_PubSubConnectionConfig connectionConfig;
-    memset(&connectionConfig, 0, sizeof(UA_PubSubConnectionConfig));
-    connectionConfig.name = UA_STRING("UADP Connection");
-    UA_NetworkAddressUrlDataType networkAddressUrl = {UA_STRING_NULL, UA_STRING("opc.udp://224.0.0.22:4840/")};
-    UA_Variant_setScalar(&connectionConfig.address, &networkAddressUrl,
-                         &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-    connectionConfig.transportProfileUri = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-    connectionConfig.publisherId.numeric = 62541;
-    UA_Server_addPubSubConnection(server, &connectionConfig, &connection1);
-
-    UA_PublishedDataSetConfig publishedDataSetConfig;
-    memset(&publishedDataSetConfig, 0, sizeof(UA_PublishedDataSetConfig));
-    publishedDataSetConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-    publishedDataSetConfig.name = UA_STRING("Test PDS");
-    UA_Server_addPublishedDataSet(server, &publishedDataSetConfig, &publishedDataSetIdent);
-
-    UA_DataSetFieldConfig dataSetFieldConfig;
-    memset(&dataSetFieldConfig, 0, sizeof(UA_DataSetFieldConfig));
-    dataSetFieldConfig.dataSetFieldType = UA_PUBSUB_DATASETFIELD_VARIABLE;
-    dataSetFieldConfig.field.variable.fieldNameAlias = UA_STRING("Server localtime");
-    dataSetFieldConfig.field.variable.promotedField = UA_FALSE;
-    dataSetFieldConfig.field.variable.publishParameters.publishedVariable =
-            UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME);
-    dataSetFieldConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-    UA_Server_addDataSetField(server, publishedDataSetIdent,
-                              &dataSetFieldConfig, &dataSetFieldIdent);
-}
-
-static void teardown(void) {
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-static void receiveSingleMessage(UA_ByteString buffer, UA_PubSubConnection *connection, UA_NetworkMessage *networkMessage) {
-    if (UA_ByteString_allocBuffer(&buffer, 512) != UA_STATUSCODE_GOOD) {
-        ck_abort_msg("Message buffer allocation failed!");
-    }
-    UA_StatusCode retval =
-            connection->channel->receive(connection->channel, &buffer, NULL, 10000);
-    if(retval != UA_STATUSCODE_GOOD || buffer.length == 0) {
-        buffer.length = 512;
-        UA_ByteString_clear(&buffer);
-        ck_abort_msg("Expected message not received!");
-    }
-    memset(networkMessage, 0, sizeof(UA_NetworkMessage));
-    size_t currentPosition = 0;
-    UA_NetworkMessage_decodeBinary(&buffer, &currentPosition, networkMessage);
-    UA_ByteString_clear(&buffer);
-}
-
-START_TEST(CheckNMandDSMcalculation){
-    UA_WriterGroupConfig writerGroupConfig;
-    memset(&writerGroupConfig, 0, sizeof(UA_WriterGroupConfig));
-    writerGroupConfig.name = UA_STRING("Demo WriterGroup");
-    writerGroupConfig.publishingInterval = 10;
-    writerGroupConfig.enabled = UA_FALSE;
-    writerGroupConfig.writerGroupId = 100;
-    writerGroupConfig.encodingMimeType = UA_PUBSUB_ENCODING_UADP;
-
-    UA_UadpWriterGroupMessageDataType *wgm = UA_UadpWriterGroupMessageDataType_new();
-    wgm->networkMessageContentMask = UA_UADPNETWORKMESSAGECONTENTMASK_PAYLOADHEADER;
-    writerGroupConfig.messageSettings.content.decoded.data = wgm;
-    writerGroupConfig.messageSettings.content.decoded.type =
-            &UA_TYPES[UA_TYPES_UADPWRITERGROUPMESSAGEDATATYPE];
-    writerGroupConfig.messageSettings.encoding = UA_EXTENSIONOBJECT_DECODED;
-
-    //maximum DSM in one NM = 10
-    writerGroupConfig.maxEncapsulatedDataSetMessageCount = 10;
-    UA_Server_addWriterGroup(server, connection1, &writerGroupConfig, &writerGroupIdent);
-    UA_UadpWriterGroupMessageDataType_delete(wgm);
-
-    UA_DataSetWriterConfig dataSetWriterConfig;
-    memset(&dataSetWriterConfig, 0, sizeof(UA_DataSetWriterConfig));
-    dataSetWriterConfig.name = UA_STRING("Test DataSetWriter");
-    dataSetWriterConfig.dataSetWriterId = 10;
-    dataSetWriterConfig.keyFrameCount = 1;
-    //add 10 dataSetWriter
-    for(UA_UInt16 i = 0; i < 10; i++){
-        dataSetWriterConfig.dataSetWriterId = (UA_UInt16) (dataSetWriterConfig.dataSetWriterId + 1);
-        UA_Server_addDataSetWriter(server, writerGroupIdent, publishedDataSetIdent,
-                                   &dataSetWriterConfig, &dataSetWriterIdent);
-    }
-
-    UA_PubSubConnection *connection = UA_PubSubConnection_findConnectionbyId(server, connection1);
-    if(connection != NULL) {
-        UA_StatusCode rv = connection->channel->regist(connection->channel, NULL, NULL);
-        ck_assert(rv == UA_STATUSCODE_GOOD);
-    }
-
-    //change publish interval triggers implicit one publish callback run | alternatively run UA_Server_iterate
-    writerGroupConfig.publishingInterval = 100000;
-    UA_Server_updateWriterGroupConfig(server, writerGroupIdent, &writerGroupConfig);
-
-    UA_ByteString buffer = UA_BYTESTRING_ALLOC("");
-    UA_NetworkMessage networkMessage;
-    receiveSingleMessage(buffer, connection, &networkMessage);
-    //ck_assert_int_eq(networkMessage.publisherId.publisherIdUInt32 , 62541);
-    ck_assert_int_eq(networkMessage.payloadHeader.dataSetPayloadHeader.count, 10);
-    for(size_t i = 10; i > 0; i--){
-        ck_assert_int_eq(*(networkMessage.payloadHeader.dataSetPayloadHeader.dataSetWriterIds+(i-1)), 21-i);
-    }
-    UA_NetworkMessage_deleteMembers(&networkMessage);
-
-    //change publish interval triggers implicit one publish callback run | alternatively run UA_Server_iterate
-    writerGroupConfig.publishingInterval = 200000;
-    //maximum DSM in one NM = 5
-    writerGroupConfig.maxEncapsulatedDataSetMessageCount = 5;
-    UA_Server_updateWriterGroupConfig(server, writerGroupIdent, &writerGroupConfig);
-    UA_NetworkMessage networkMessage1, networkMessage2;
-    receiveSingleMessage(buffer, connection, &networkMessage1);
-    receiveSingleMessage(buffer, connection, &networkMessage2);
-    ck_assert_int_eq(networkMessage1.payloadHeader.dataSetPayloadHeader.count, 5);
-    ck_assert_int_eq(networkMessage1.payloadHeader.dataSetPayloadHeader.count, 5);
-    UA_NetworkMessage_deleteMembers(&networkMessage1);
-    UA_NetworkMessage_deleteMembers(&networkMessage2);
-
-    //change publish interval triggers implicit one publish callback run | alternatively run UA_Server_iterate
-    writerGroupConfig.publishingInterval = 300000;
-    //maximum DSM in one NM = 20
-    writerGroupConfig.maxEncapsulatedDataSetMessageCount = 20;
-    UA_Server_updateWriterGroupConfig(server, writerGroupIdent, &writerGroupConfig);
-    UA_NetworkMessage networkMessage3;
-    receiveSingleMessage(buffer, connection, &networkMessage3);
-    ck_assert_int_eq(networkMessage3.payloadHeader.dataSetPayloadHeader.count, 10);
-    UA_NetworkMessage_deleteMembers(&networkMessage3);
-
-    //change publish interval triggers implicit one publish callback run | alternatively run UA_Server_iterate
-    writerGroupConfig.publishingInterval = 400000;
-    //maximum DSM in one NM = 1
-    writerGroupConfig.maxEncapsulatedDataSetMessageCount = 1;
-    UA_Server_updateWriterGroupConfig(server, writerGroupIdent, &writerGroupConfig);
-    UA_NetworkMessage messageArray[10];
-    for (int j = 0; j < 10; ++j) {
-        receiveSingleMessage(buffer, connection, &(messageArray[j]));
-        ck_assert_int_eq(messageArray[j].payloadHeader.dataSetPayloadHeader.count, 1);
-        UA_NetworkMessage_deleteMembers(&messageArray[j]);
-    }
-
-    //change publish interval triggers implicit one publish callback run | alternatively run UA_Server_iterate
-    writerGroupConfig.publishingInterval = 500000;
-    //maximum DSM in one NM = 0 -> should be equal to 1
-    writerGroupConfig.maxEncapsulatedDataSetMessageCount = 0;
-    UA_Server_updateWriterGroupConfig(server, writerGroupIdent, &writerGroupConfig);
-    UA_Server_updateWriterGroupConfig(server, writerGroupIdent, &writerGroupConfig);
-    for (int j = 0; j < 10; ++j) {
-        receiveSingleMessage(buffer, connection, &(messageArray[j]));
-        ck_assert_int_eq(messageArray[j].payloadHeader.dataSetPayloadHeader.count, 1);
-        UA_NetworkMessage_deleteMembers(&messageArray[j]);
-    }
-
-    } END_TEST
-
-int main(void) {
-    TCase *tc_add_pubsub_DSMandNMcalculation = tcase_create("PubSub NM and DSM");
-    tcase_add_checked_fixture(tc_add_pubsub_DSMandNMcalculation, setup, teardown);
-    tcase_add_test(tc_add_pubsub_DSMandNMcalculation, CheckNMandDSMcalculation);
-
-    Suite *s = suite_create("PubSub NM and DSM calculation");
-    suite_add_tcase(s, tc_add_pubsub_DSMandNMcalculation);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/pubsub/check_pubsub_publishspeed.c b/ext/open62541/tests/pubsub/check_pubsub_publishspeed.c
deleted file mode 100644
index 11e866c..0000000
--- a/ext/open62541/tests/pubsub/check_pubsub_publishspeed.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017 - 2018 Fraunhofer IOSB (Author: Andreas Ebner)
- */
-
-#include <open62541/plugin/pubsub_udp.h>
-#include <open62541/server_config_default.h>
-#include <open62541/server_pubsub.h>
-#include <open62541/types_generated_encoding_binary.h>
-
-#include "ua_server_internal.h"
-
-#include <check.h>
-#include <stdio.h>
-#include <time.h>
-
-UA_Server *server = NULL;
-UA_NodeId connection1, connection2, writerGroup1, writerGroup2, writerGroup3,
-        publishedDataSet1, publishedDataSet2, dataSetWriter1, dataSetWriter2, dataSetWriter3;
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    config->pubsubTransportLayers = (UA_PubSubTransportLayer*)
-        UA_malloc(sizeof(UA_PubSubTransportLayer));
-    config->pubsubTransportLayers[0] = UA_PubSubTransportLayerUDPMP();
-    config->pubsubTransportLayersSize++;
-
-    UA_PubSubConnectionConfig connectionConfig;
-    memset(&connectionConfig, 0, sizeof(UA_PubSubConnectionConfig));
-    connectionConfig.name = UA_STRING("UADP Connection");
-    UA_NetworkAddressUrlDataType networkAddressUrl = {UA_STRING_NULL, UA_STRING("opc.udp://224.0.0.22:4840/")};
-    UA_Variant_setScalar(&connectionConfig.address, &networkAddressUrl,
-                         &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-    connectionConfig.transportProfileUri = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-    UA_Server_addPubSubConnection(server, &connectionConfig, &connection1);
-
-    UA_WriterGroupConfig writerGroupConfig;
-    memset(&writerGroupConfig, 0, sizeof(writerGroupConfig));
-    writerGroupConfig.name = UA_STRING("WriterGroup 1");
-    writerGroupConfig.publishingInterval = 10;
-    writerGroupConfig.encodingMimeType = UA_PUBSUB_ENCODING_UADP;
-    UA_Server_addWriterGroup(server, connection1, &writerGroupConfig, &writerGroup1);
-
-    UA_PublishedDataSetConfig pdsConfig;
-    memset(&pdsConfig, 0, sizeof(UA_PublishedDataSetConfig));
-    pdsConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-    pdsConfig.name = UA_STRING("PublishedDataSet 1");
-    UA_Server_addPublishedDataSet(server, &pdsConfig, &publishedDataSet1);
-
-    UA_DataSetWriterConfig dataSetWriterConfig;
-    memset(&dataSetWriterConfig, 0, sizeof(dataSetWriterConfig));
-    dataSetWriterConfig.name = UA_STRING("DataSetWriter 1");
-    UA_Server_addDataSetWriter(server, writerGroup1, publishedDataSet1, &dataSetWriterConfig, &dataSetWriter1);
-
-    UA_Server_run_startup(server);
-}
-
-static void teardown(void) {
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-START_TEST(PublishSpeedTest) {
-    UA_DataSetFieldConfig dataSetFieldConfig;
-    memset(&dataSetFieldConfig, 0, sizeof(UA_DataSetFieldConfig));
-    dataSetFieldConfig.dataSetFieldType = UA_PUBSUB_DATASETFIELD_VARIABLE;
-    dataSetFieldConfig.field.variable.fieldNameAlias = UA_STRING("Server localtime");
-    dataSetFieldConfig.field.variable.promotedField = UA_FALSE;
-    dataSetFieldConfig.field.variable.publishParameters.publishedVariable = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_LOCALTIME);
-    dataSetFieldConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-    UA_Server_addDataSetField(server, publishedDataSet1, &dataSetFieldConfig, NULL);
-
-    UA_WriterGroup *wg = UA_WriterGroup_findWGbyId(server, writerGroup1);
-
-    printf("start sending 8000 publish messages via UDP\n");
-
-    clock_t begin, finish;
-    begin = clock();
-
-    for(int i = 0; i < 8000; i++) {
-        UA_WriterGroup_publishCallback(server, wg);
-    }
-
-    finish = clock();
-    double time_spent = (double)(finish - begin) / CLOCKS_PER_SEC;
-    printf("duration was %f s\n", time_spent);
-
-} END_TEST
-
-int main(void) {
-    TCase *tc_publishspeed = tcase_create("Speed of the publisher");
-    tcase_add_checked_fixture(tc_publishspeed, setup, teardown);
-    tcase_add_test(tc_publishspeed, PublishSpeedTest);
-
-    Suite *s = suite_create("PubSub Speed Test");
-    suite_add_tcase(s, tc_publishspeed);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/pubsub/check_pubsub_subscribe.c b/ext/open62541/tests/pubsub/check_pubsub_subscribe.c
deleted file mode 100644
index c5090d5..0000000
--- a/ext/open62541/tests/pubsub/check_pubsub_subscribe.c
+++ /dev/null
@@ -1,1356 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2019 Kalycito Infotech Private Limited
- */
-
-#include <open62541/plugin/pubsub_udp.h>
-#include <open62541/server_config_default.h>
-#include <open62541/server_pubsub.h>
-#include <check.h>
-#include <time.h>
-
-#include "open62541/types_generated_encoding_binary.h"
-#include "ua_pubsub.h"
-#include "ua_server_internal.h"
-
-#define UA_SUBSCRIBER_PORT       4801    /* Port for Subscriber*/
-#define PUBLISH_INTERVAL         5       /* Publish interval*/
-#define PUBLISHER_ID             2234    /* Publisher Id*/
-#define DATASET_WRITER_ID        62541   /* DataSet Writer Id*/
-#define WRITER_GROUP_ID          100     /* Writer group Id  */
-#define PUBLISHER_DATA           42      /* Published data */
-#define PUBLISHVARIABLE_NODEID   1000    /* Published data nodeId */
-#define SUBSCRIBEOBJECT_NODEID   1001    /* Object nodeId */
-#define SUBSCRIBEVARIABLE_NODEID 1002    /* Subscribed data nodeId */
-#define READERGROUP_COUNT        2       /* Value to add readergroup to connection */
-#define CHECK_READERGROUP_COUNT  3       /* Value to check readergroup count */
-
-/* Global declaration for test cases  */
-UA_Server *server = NULL;
-UA_ServerConfig *config = NULL;
-UA_NodeId connection_test;
-UA_NodeId readerGroupTest;
-
-UA_NodeId publishedDataSetTest;
-
-/* setup() is to create an environment for test cases */
-static void setup(void) {
-    /*Add setup by creating new server with valid configuration */
-    server = UA_Server_new();
-    config = UA_Server_getConfig(server);
-    UA_ServerConfig_setMinimal(config, UA_SUBSCRIBER_PORT, NULL);
-    UA_Server_run_startup(server);
-    config->pubsubTransportLayers = (UA_PubSubTransportLayer *) UA_malloc(sizeof(UA_PubSubTransportLayer));
-    if(!config->pubsubTransportLayers) {
-        UA_ServerConfig_clean(config);
-    }
-
-    config->pubsubTransportLayers[0] = UA_PubSubTransportLayerUDPMP();
-    config->pubsubTransportLayersSize++;
-
-    /* Add connection to the server */
-    UA_PubSubConnectionConfig connectionConfig;
-    memset(&connectionConfig, 0, sizeof(UA_PubSubConnectionConfig));
-    connectionConfig.name = UA_STRING("UADP Test Connection");
-    UA_NetworkAddressUrlDataType networkAddressUrl = {UA_STRING_NULL, UA_STRING("opc.udp://224.0.0.22:4801/")};
-    UA_Variant_setScalar(&connectionConfig.address, &networkAddressUrl,
-                         &UA_TYPES[UA_TYPES_NETWORKADDRESSURLDATATYPE]);
-    connectionConfig.transportProfileUri = UA_STRING("http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp");
-    connectionConfig.publisherId.numeric = PUBLISHER_ID;
-    UA_Server_addPubSubConnection(server, &connectionConfig, &connection_test);
-    UA_PubSubConnection_regist(server, &connection_test);
-}
-
-/* teardown() is to delete the environment set for test cases */
-static void teardown(void) {
-    /*Call server delete functions */
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-START_TEST(AddReaderGroupWithValidConfiguration) {
-        /* To test if ReaderGroup has been added to the connection with valid configuration */
-        UA_StatusCode retVal;
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        UA_NodeId localreaderGroup;
-        retVal =  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        size_t readerGroupCount = 0;
-        UA_ReaderGroup *readerGroup;
-        LIST_FOREACH(readerGroup, &UA_PubSubConnection_findConnectionbyId(server, connection_test)->readerGroups, listEntry){
-            readerGroupCount++;
-        }
-        /* Check readerGroup count */
-        ck_assert_int_eq(readerGroupCount, 1);
-        /* To Do: RemoveReaderGroup operation should be carried out when UA_Server_delete has been called */
-        UA_Server_removeReaderGroup(server, localreaderGroup);
-    } END_TEST
-
-START_TEST(AddReaderGroupWithNullConfig) {
-        /* Check the status of adding ReaderGroup when NULL configuration is given */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, NULL, NULL);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-        size_t readerGroupCount = 0;
-        UA_ReaderGroup *readerGroup;
-        LIST_FOREACH(readerGroup, &UA_PubSubConnection_findConnectionbyId(server, connection_test)->readerGroups, listEntry){
-            readerGroupCount++;
-        }
-        /* Check readerGroup count */
-        ck_assert_int_eq(readerGroupCount, 0);
-    } END_TEST
-
-START_TEST(AddReaderGroupWithInvalidConnectionId) {
-        /* Check status of adding ReaderGroup with invalid connection identifier */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, UA_NODEID_NUMERIC(0, UA_UINT32_MAX), &readerGroupConfig, NULL);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-        size_t readerGroupCount = 0;
-        UA_ReaderGroup *readerGroup;
-        LIST_FOREACH(readerGroup, &UA_PubSubConnection_findConnectionbyId(server, connection_test)->readerGroups, listEntry){
-            readerGroupCount++;
-        }
-        /* Check readerGroup count */
-        ck_assert_int_eq(readerGroupCount, 0);
-    } END_TEST
-
-START_TEST(RemoveReaderGroupWithInvalidIdentifier) {
-        /* Check status of removing ReaderGroup when giving invalid ReaderGroup identifier */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_ReaderGroupConfig readerGroupConfig;
-        UA_NodeId localreaderGroup;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        /* Delete the added readerGroup */
-        retVal |= UA_Server_removeReaderGroup(server, UA_NODEID_NUMERIC(0, UA_UINT32_MAX));
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-        size_t readerGroupCount = 0;
-        UA_ReaderGroup *readerGroup;
-        LIST_FOREACH(readerGroup, &UA_PubSubConnection_findConnectionbyId(server, connection_test)->readerGroups, listEntry){
-            readerGroupCount++;
-        }
-        /* Check readerGroup count */
-        ck_assert_int_eq(readerGroupCount, 1);
-        UA_Server_removeReaderGroup(server, localreaderGroup);
-    } END_TEST
-
-START_TEST(AddRemoveMultipleAddReaderGroupWithValidConfiguration) {
-        UA_StatusCode retVal   = UA_STATUSCODE_GOOD;
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup 1");
-        UA_NodeId localReaderGroup;
-        /* Add ReaderGroup */
-        retVal |= UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localReaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        /* Remove added ReaderGroup */
-        retVal |= UA_Server_removeReaderGroup(server, localReaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        size_t readerGroupCount = 0;
-        UA_ReaderGroup *readerGroup;
-        LIST_FOREACH(readerGroup, &UA_PubSubConnection_findConnectionbyId(server, connection_test)->readerGroups, listEntry) {
-            readerGroupCount++;
-        }
-
-        /* Check ReaderGroup Count */
-        ck_assert_int_eq(readerGroupCount, 0);
-        /* Add Multiple ReaderGroups */
-        for (int iterator = 0; iterator <= READERGROUP_COUNT; iterator++) {
-            retVal |= UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localReaderGroup);
-            ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        }
-
-        readerGroupCount = 0;
-        /* Find ReaderGroup count */
-        LIST_FOREACH(readerGroup, &UA_PubSubConnection_findConnectionbyId(server, connection_test)->readerGroups, listEntry) {
-            readerGroupCount++;
-        }
-        /* Check ReaderGroup Count */
-        ck_assert_int_eq(readerGroupCount, CHECK_READERGROUP_COUNT);
-    } END_TEST
-
-START_TEST(UpdateReaderGroupWithInvalidIdentifier) {
-        /* Check status of updating ReaderGroup with invalid identifier */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_ReaderGroupConfig readerGroupConfig;
-        UA_NodeId localreaderGroup;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        retVal |=  UA_Server_ReaderGroup_updateConfig(server, UA_NODEID_NUMERIC(0, UA_UINT32_MAX), NULL);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-        UA_Server_removeReaderGroup(server, localreaderGroup);
-    } END_TEST
-
-START_TEST(GetReaderGroupConfigWithInvalidConfig) {
-        /* Check status of getting ReaderGroup configuration with invalid configuration */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_ReaderGroupConfig readerGroupConfig;
-        UA_NodeId localreaderGroup;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        retVal |= UA_Server_ReaderGroup_getConfig(server, UA_NODEID_NUMERIC(0, UA_UINT32_MAX), NULL);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-        UA_Server_removeReaderGroup(server, localreaderGroup);
-    } END_TEST
-
-START_TEST(GetReaderGroupConfigWithInvalidIdentifier) {
-        /* Check status of getting ReaderGroup configuration with invlaid identifier */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_ReaderGroupConfig readerGroupConfig;
-        UA_NodeId localreaderGroup;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        retVal |= UA_Server_ReaderGroup_getConfig(server, UA_NODEID_NUMERIC(0, UA_UINT32_MAX), &readerGroupConfig);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-        UA_Server_removeReaderGroup(server, localreaderGroup);
-    } END_TEST
-
-START_TEST(GetReaderGroupConfigWithValidConfig) {
-        /* Check status of getting ReaderGroup configuration with valid parameters */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_NodeId localreaderGroup;
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        retVal |= UA_Server_ReaderGroup_getConfig(server, localreaderGroup, &readerGroupConfig);
-        /* To Do: DeleteMembers of readergroup config has to be a separate function */
-        UA_String_deleteMembers (&readerGroupConfig.name);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    } END_TEST
-
-START_TEST(AddDataSetReaderWithValidConfiguration) {
-        /* Check status of adding DataSetReader to ReaderGroup with valid parameters*/
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_DataSetReaderConfig dataSetreaderConfig;
-        UA_NodeId localreaderGroup;
-        UA_ReaderGroupConfig readerGroupConfig;
-        UA_NodeId localDataSetreader;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        memset(&dataSetreaderConfig, 0, sizeof(dataSetreaderConfig));
-        dataSetreaderConfig.name = UA_STRING("DataSetreader Test");
-        retVal |= UA_Server_addDataSetReader(server, localreaderGroup, &dataSetreaderConfig, &localDataSetreader);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    } END_TEST
-
-START_TEST(AddDataSetReaderWithNullConfig) {
-        /* Check status of adding DataSetReader to ReaderGroup with invalid parameters */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_DataSetReaderConfig dataSetreaderConfig;
-        UA_NodeId localreaderGroup;
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        memset(&dataSetreaderConfig, 0, sizeof(dataSetreaderConfig));
-        dataSetreaderConfig.name = UA_STRING("DataSetreader Test ");
-        /* Remove the added DataSetReader */
-        retVal |= UA_Server_addDataSetReader(server, localreaderGroup, NULL, NULL);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-    } END_TEST
-
-START_TEST(RemoveDataSetReaderWithValidConfiguration) {
-        /* Check status of adding DataSetReader to ReaderGroup with valid parameters */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_DataSetReaderConfig dataSetreaderConfig;
-        UA_NodeId localreaderGroup;
-        UA_ReaderGroupConfig readerGroupConfig;
-        UA_NodeId localDataSetreader;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        memset(&dataSetreaderConfig, 0, sizeof(dataSetreaderConfig));
-        dataSetreaderConfig.name = UA_STRING("DataSetReader Test ");
-        retVal |= UA_Server_addDataSetReader(server, localreaderGroup, &dataSetreaderConfig, &localDataSetreader);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        retVal |= UA_Server_removeDataSetReader(server, localDataSetreader);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    } END_TEST
-
-START_TEST(RemoveDataSetReaderWithInvalidIdentifier) {
-        /* Check status of removing DataSetReader from ReaderGroup with invalid parameters */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_DataSetReaderConfig dataSetreaderConfig;
-        UA_NodeId localreaderGroup;
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        memset(&dataSetreaderConfig, 0, sizeof(dataSetreaderConfig));
-        dataSetreaderConfig.name = UA_STRING("DataSetReader Test ");
-        retVal |= UA_Server_addDataSetReader(server, localreaderGroup, NULL, NULL);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-        /* Remove the added DataSetReader */
-        retVal |= UA_Server_removeDataSetReader(server, UA_NODEID_NUMERIC(0, UA_UINT32_MAX));
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-    } END_TEST
-
-START_TEST(AddMultipleDataSetReaderWithValidConfiguration) {
-        UA_StatusCode retVal    = UA_STATUSCODE_GOOD;
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name  = UA_STRING("ReaderGroup 1");
-        UA_NodeId localReaderGroup;
-        UA_NodeId localReaderGroup2;
-        /* DataSetReader configuration */
-        UA_DataSetReaderConfig readerConfig;
-        memset (&readerConfig, 0, sizeof(readerConfig));
-        readerConfig.name       = UA_STRING("DataSet Reader 1");
-        UA_NodeId dataSetReader;
-        /* Add ReaderGroup */
-        retVal |= UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localReaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        retVal |= UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localReaderGroup2);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_ReaderGroup *readerGroupIdent1 = UA_ReaderGroup_findRGbyId(server, localReaderGroup);
-        UA_ReaderGroup *readerGroupIdent2 = UA_ReaderGroup_findRGbyId(server, localReaderGroup2);
-        /* Add DataSetReaders to first ReaderGroup */
-        retVal = UA_Server_addDataSetReader(server, localReaderGroup, &readerConfig, &dataSetReader);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(readerGroupIdent1->readersCount, 1);
-        retVal = UA_Server_addDataSetReader(server, localReaderGroup, &readerConfig, &dataSetReader);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(readerGroupIdent1->readersCount, 2);
-        /* Add DataSetReaders to second ReaderGroup */
-        retVal = UA_Server_addDataSetReader(server, localReaderGroup2, &readerConfig, &dataSetReader);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(readerGroupIdent2->readersCount, 1);
-        retVal = UA_Server_addDataSetReader(server, localReaderGroup2, &readerConfig, &dataSetReader);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        ck_assert_int_eq(readerGroupIdent2->readersCount, 2);
-    } END_TEST
-
-START_TEST(UpdateDataSetReaderConfigWithInvalidId) {
-        /* Check status of updatting DataSetReader with invalid configuration */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_DataSetReaderConfig dataSetreaderConfig;
-        UA_NodeId localreaderGroup;
-        UA_NodeId localDataSetreader;
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        memset(&dataSetreaderConfig, 0, sizeof(dataSetreaderConfig));
-        retVal |= UA_Server_addDataSetReader(server, localreaderGroup,
-                                                        &dataSetreaderConfig, &localDataSetreader);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        retVal |=  UA_Server_DataSetReader_updateConfig(server, UA_NODEID_NUMERIC(0, UA_UINT32_MAX),
-                                                      localreaderGroup, &dataSetreaderConfig );
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-    } END_TEST
-
-START_TEST(GetDataSetReaderConfigWithValidConfiguration) {
-        /* Check status of getting DataSetReader with Valid configuration */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_DataSetReaderConfig dataSetreaderConfig;
-        UA_NodeId localreaderGroup;
-        UA_NodeId localDataSetreader;
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        memset(&dataSetreaderConfig, 0, sizeof(dataSetreaderConfig));
-        retVal |= UA_Server_addDataSetReader(server, localreaderGroup, &dataSetreaderConfig, &localDataSetreader);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        retVal |= UA_Server_DataSetReader_getConfig(server, localDataSetreader, &dataSetreaderConfig);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    } END_TEST
-
-START_TEST(GetDataSetReaderConfigWithInvalidConfiguration) {
-        /* Check status of getting DataSetReader with Invalid configuration */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_DataSetReaderConfig dataSetreaderConfig;
-        UA_NodeId localreaderGroup;
-        UA_NodeId localDataSetreader;
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        memset(&dataSetreaderConfig, 0, sizeof(dataSetreaderConfig));
-        retVal |= UA_Server_addDataSetReader(server, localreaderGroup, &dataSetreaderConfig, &localDataSetreader);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        retVal |= UA_Server_DataSetReader_getConfig(server, localDataSetreader, NULL);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-    } END_TEST
-
-START_TEST(GetDataSetReaderConfigWithInvalidIdentifier) {
-        /* Check status of getting DataSetReader with Invalid Identifier */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_DataSetReaderConfig dataSetreaderConfig;
-        UA_NodeId localreaderGroup;
-        UA_NodeId localDataSetreader;
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        memset(&dataSetreaderConfig, 0, sizeof(dataSetreaderConfig));
-        retVal |= UA_Server_addDataSetReader(server, localreaderGroup, &dataSetreaderConfig, &localDataSetreader);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        retVal |= UA_Server_DataSetReader_getConfig(server, UA_NODEID_NUMERIC(0, UA_UINT32_MAX), &dataSetreaderConfig);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-    } END_TEST
-
-START_TEST(CreateTargetVariableWithInvalidConfiguration) {
-        /* Check status to create target variable with invalid configuration */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_DataSetReaderConfig dataSetreaderConfig;
-        UA_NodeId localreaderGroup;
-        UA_NodeId localDataSetreader;
-        UA_TargetVariablesDataType localTargetVariable;
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        memset(&dataSetreaderConfig, 0, sizeof(dataSetreaderConfig));
-        retVal |= UA_Server_addDataSetReader(server, localreaderGroup, &dataSetreaderConfig, &localDataSetreader);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        retVal |= UA_Server_DataSetReader_createTargetVariables(server, UA_NODEID_NUMERIC(0, UA_UINT32_MAX), &localTargetVariable);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-    } END_TEST
-
-START_TEST(AddTargetVariableWithInvalidConfiguration) {
-        /* Check status to create target variable with invalid configuration */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_DataSetReaderConfig dataSetreaderConfig;
-        UA_NodeId localreaderGroup;
-        UA_NodeId localDataSetreader;
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        memset(&dataSetreaderConfig, 0, sizeof(dataSetreaderConfig));
-        retVal |= UA_Server_addDataSetReader(server, localreaderGroup, &dataSetreaderConfig, &localDataSetreader);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        retVal |=  UA_Server_DataSetReader_addTargetVariables(NULL, &localreaderGroup, localDataSetreader, UA_PUBSUB_SDS_TARGET);
-        ck_assert_int_ne(retVal, UA_STATUSCODE_GOOD);
-    } END_TEST
-
-START_TEST(AddTargetVariableWithValidConfiguration) {
-        /* Check status after creating target variables with Valid configuration */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_DataSetReaderConfig dataSetReaderConfig;
-        UA_NodeId folderId;
-        UA_QualifiedName folderBrowseName;
-        UA_NodeId localreaderGroupIdentifier;
-        UA_NodeId localDataSetreaderIdentifier;
-        UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset(&readerGroupConfig, 0, sizeof(readerGroupConfig));
-        readerGroupConfig.name = UA_STRING("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &localreaderGroupIdentifier);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        memset(&dataSetReaderConfig, 0, sizeof(UA_DataSetReaderConfig));
-        UA_DataSetMetaDataType *pMetaData = &dataSetReaderConfig.dataSetMetaData;
-        UA_DataSetMetaDataType_init (pMetaData);
-        pMetaData->name = UA_STRING ("DataSet Test");
-        /* Static definition of number of fields size to 2 to create targetVariables
-         * with DateTime and ByteString datatype */
-        pMetaData->fieldsSize = 2;
-        pMetaData->fields = (UA_FieldMetaData*)UA_Array_new (pMetaData->fieldsSize,
-                             &UA_TYPES[UA_TYPES_FIELDMETADATA]);
-
-        /* DateTime DataType */
-        UA_FieldMetaData_init (&pMetaData->fields[0]);
-        UA_NodeId_copy (&UA_TYPES[UA_TYPES_DATETIME].typeId,
-                        &pMetaData->fields[0].dataType);
-        pMetaData->fields[0].builtInType = UA_NS0ID_DATETIME;
-        pMetaData->fields[0].valueRank = -1; /* scalar */
-
-        /* ByteString DataType */
-        UA_FieldMetaData_init (&pMetaData->fields[1]);
-        UA_NodeId_copy (&UA_TYPES[UA_TYPES_BYTESTRING].typeId,
-                        &pMetaData->fields[1].dataType);
-        pMetaData->fields[1].builtInType = UA_NS0ID_BYTESTRING;
-        pMetaData->fields[1].valueRank = -1; /* scalar */
-
-        retVal |= UA_Server_addDataSetReader(server, localreaderGroupIdentifier, &dataSetReaderConfig, &localDataSetreaderIdentifier);
-
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        folderBrowseName = UA_QUALIFIEDNAME (1, "Subscribed Variables");
-        UA_Server_addObjectNode (server, UA_NODEID_NULL,
-                                 UA_NODEID_NUMERIC (0, UA_NS0ID_OBJECTSFOLDER),
-                                 UA_NODEID_NUMERIC (0, UA_NS0ID_ORGANIZES),
-                                 folderBrowseName, UA_NODEID_NUMERIC (0,
-                                 UA_NS0ID_BASEOBJECTTYPE), oAttr, NULL, &folderId);
-        retVal |=  UA_Server_DataSetReader_addTargetVariables(server, &folderId, localDataSetreaderIdentifier, UA_PUBSUB_SDS_TARGET);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_free(pMetaData->fields);
-    } END_TEST
-
-START_TEST(SinglePublishSubscribeDateTime) {
-        /* To check status after running both publisher and subscriber */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_PublishedDataSetConfig pdsConfig;
-        UA_NodeId dataSetWriter;
-        UA_NodeId readerIdentifier;
-        UA_NodeId writerGroup;
-        UA_DataSetReaderConfig readerConfig;
-        memset(&pdsConfig, 0, sizeof(UA_PublishedDataSetConfig));
-        pdsConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-        pdsConfig.name = UA_STRING("PublishedDataSet Test");
-        UA_Server_addPublishedDataSet(server, &pdsConfig, &publishedDataSetTest);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        /* Data Set Field */
-        UA_NodeId dataSetFieldId;
-        UA_DataSetFieldConfig dataSetFieldConfig;
-        memset(&dataSetFieldConfig, 0, sizeof(UA_DataSetFieldConfig));
-        dataSetFieldConfig.dataSetFieldType = UA_PUBSUB_DATASETFIELD_VARIABLE;
-        dataSetFieldConfig.field.variable.fieldNameAlias = UA_STRING("Server localtime");
-        dataSetFieldConfig.field.variable.promotedField = UA_FALSE;
-        dataSetFieldConfig.field.variable.publishParameters.publishedVariable = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_LOCALTIME);
-        dataSetFieldConfig.field.variable.publishParameters.attributeId = UA_ATTRIBUTEID_VALUE;
-        UA_Server_addDataSetField(server, publishedDataSetTest, &dataSetFieldConfig, &dataSetFieldId);
-        /* Writer group */
-        UA_WriterGroupConfig writerGroupConfig;
-        memset(&writerGroupConfig, 0, sizeof(writerGroupConfig));
-        writerGroupConfig.name = UA_STRING("WriterGroup Test");
-        writerGroupConfig.publishingInterval = PUBLISH_INTERVAL;
-        writerGroupConfig.enabled = UA_FALSE;
-        writerGroupConfig.writerGroupId = WRITER_GROUP_ID;
-        writerGroupConfig.encodingMimeType = UA_PUBSUB_ENCODING_UADP;
-        retVal |= UA_Server_addWriterGroup(server, connection_test, &writerGroupConfig, &writerGroup);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        /* DataSetWriter */
-        UA_DataSetWriterConfig dataSetWriterConfig;
-        memset(&dataSetWriterConfig, 0, sizeof(dataSetWriterConfig));
-        dataSetWriterConfig.name = UA_STRING("DataSetWriter Test");
-        dataSetWriterConfig.dataSetWriterId = DATASET_WRITER_ID;
-        dataSetWriterConfig.keyFrameCount = 10;
-        retVal |= UA_Server_addDataSetWriter(server, writerGroup, publishedDataSetTest, &dataSetWriterConfig, &dataSetWriter);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        /* Reader Group */
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset (&readerGroupConfig, 0, sizeof (UA_ReaderGroupConfig));
-        readerGroupConfig.name = UA_STRING ("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup (server, connection_test, &readerGroupConfig,
-                                                      &readerGroupTest);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        /* Data Set Reader */
-        memset (&readerConfig, 0, sizeof (UA_DataSetReaderConfig));
-        readerConfig.name = UA_STRING ("DataSetReader Test");
-        readerConfig.dataSetWriterId = DATASET_WRITER_ID;
-        /* Setting up Meta data configuration in DataSetReader for DateTime DataType */
-        UA_DataSetMetaDataType *pMetaData = &readerConfig.dataSetMetaData;
-        /* FilltestMetadata function in subscriber implementation */
-        UA_DataSetMetaDataType_init (pMetaData);
-        pMetaData->name = UA_STRING ("DataSet Test");
-        /* Static definition of number of fields size to 1 to create one
-        targetVariable */
-        pMetaData->fieldsSize = 1;
-        pMetaData->fields = (UA_FieldMetaData*)UA_Array_new (pMetaData->fieldsSize,
-                             &UA_TYPES[UA_TYPES_FIELDMETADATA]);
-        /* DateTime DataType */
-        UA_FieldMetaData_init (&pMetaData->fields[0]);
-        UA_NodeId_copy (&UA_TYPES[UA_TYPES_DATETIME].typeId,
-                        &pMetaData->fields[0].dataType);
-        pMetaData->fields[0].builtInType = UA_NS0ID_DATETIME;
-        pMetaData->fields[0].valueRank = -1; /* scalar */
-        retVal |= UA_Server_addDataSetReader (server, readerGroupTest, &readerConfig,
-                                                          &readerIdentifier);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        /* Add Subscribed Variables */
-        UA_NodeId folderId;
-        UA_String folderName = readerConfig.dataSetMetaData.name;
-        UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-        UA_QualifiedName folderBrowseName;
-        if (folderName.length > 0) {
-            oAttr.displayName.locale = UA_STRING ("en-US");
-            oAttr.displayName.text = folderName;
-            folderBrowseName.namespaceIndex = 1;
-            folderBrowseName.name = folderName;
-          }
-        else {
-            oAttr.displayName = UA_LOCALIZEDTEXT ("en-US", "Subscribed Variables");
-            folderBrowseName = UA_QUALIFIEDNAME (1, "Subscribed Variables");
-        }
-
-        UA_Server_addObjectNode (server, UA_NODEID_NULL,
-                                 UA_NODEID_NUMERIC (0, UA_NS0ID_OBJECTSFOLDER),
-                                 UA_NODEID_NUMERIC (0, UA_NS0ID_ORGANIZES),
-                                 folderBrowseName, UA_NODEID_NUMERIC (0,
-                                 UA_NS0ID_BASEOBJECTTYPE), oAttr, NULL, &folderId);
-        retVal |=  UA_Server_DataSetReader_addTargetVariables (server, &folderId,
-                                                             readerIdentifier, UA_PUBSUB_SDS_TARGET);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        /* run server - publisher and subscriber */
-        UA_Server_run_iterate(server,true);
-        UA_Server_run_iterate(server,true);
-        UA_free(pMetaData->fields);
-
-   }END_TEST
-
-START_TEST(SinglePublishSubscribeInt32) {
-        /* To check status after running both publisher and subscriber */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_PublishedDataSetConfig pdsConfig;
-        UA_NodeId dataSetWriter;
-        UA_NodeId readerIdentifier;
-        UA_NodeId writerGroup;
-        UA_DataSetReaderConfig readerConfig;
-
-        /* Published DataSet */
-        memset(&pdsConfig, 0, sizeof(UA_PublishedDataSetConfig));
-        pdsConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-        pdsConfig.name = UA_STRING("PublishedDataSet Test");
-        UA_Server_addPublishedDataSet(server, &pdsConfig, &publishedDataSetTest);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Create variable to publish integer data */
-        UA_NodeId publisherNode;
-        UA_VariableAttributes attr = UA_VariableAttributes_default;
-        attr.description           = UA_LOCALIZEDTEXT("en-US","Published Int32");
-        attr.displayName           = UA_LOCALIZEDTEXT("en-US","Published Int32");
-        attr.dataType              = UA_TYPES[UA_TYPES_INT32].typeId;
-        UA_Int32 publisherData     = 42;
-        UA_Variant_setScalar(&attr.value, &publisherData, &UA_TYPES[UA_TYPES_INT32]);
-        retVal                     = UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, PUBLISHVARIABLE_NODEID),
-                                                               UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                                               UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                                               UA_QUALIFIEDNAME(1, "Published Int32"),
-                                                               UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                                               attr, NULL, &publisherNode);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Data Set Field */
-        UA_NodeId dataSetFieldIdent;
-        UA_DataSetFieldConfig dataSetFieldConfig;
-        memset(&dataSetFieldConfig, 0, sizeof(UA_DataSetFieldConfig));
-        dataSetFieldConfig.dataSetFieldType              = UA_PUBSUB_DATASETFIELD_VARIABLE;
-        dataSetFieldConfig.field.variable.fieldNameAlias = UA_STRING("Published Int32");
-        dataSetFieldConfig.field.variable.promotedField  = UA_FALSE;
-        dataSetFieldConfig.field.variable.publishParameters.publishedVariable = publisherNode;
-        dataSetFieldConfig.field.variable.publishParameters.attributeId       = UA_ATTRIBUTEID_VALUE;
-        UA_Server_addDataSetField (server, publishedDataSetTest, &dataSetFieldConfig, &dataSetFieldIdent);
-
-        /* Writer group */
-        UA_WriterGroupConfig writerGroupConfig;
-        memset(&writerGroupConfig, 0, sizeof(writerGroupConfig));
-        writerGroupConfig.name               = UA_STRING("WriterGroup Test");
-        writerGroupConfig.publishingInterval = PUBLISH_INTERVAL;
-        writerGroupConfig.enabled            = UA_FALSE;
-        writerGroupConfig.writerGroupId      = WRITER_GROUP_ID;
-        writerGroupConfig.encodingMimeType   = UA_PUBSUB_ENCODING_UADP;
-        /* Message settings in WriterGroup to include necessary headers */
-        writerGroupConfig.messageSettings.encoding             = UA_EXTENSIONOBJECT_DECODED;
-        writerGroupConfig.messageSettings.content.decoded.type = &UA_TYPES[UA_TYPES_UADPWRITERGROUPMESSAGEDATATYPE];
-        UA_UadpWriterGroupMessageDataType *writerGroupMessage  = UA_UadpWriterGroupMessageDataType_new();
-        writerGroupMessage->networkMessageContentMask          = (UA_UadpNetworkMessageContentMask)(UA_UADPNETWORKMESSAGECONTENTMASK_PUBLISHERID |
-                                                                  (UA_UadpNetworkMessageContentMask)UA_UADPNETWORKMESSAGECONTENTMASK_GROUPHEADER |
-                                                                  (UA_UadpNetworkMessageContentMask)UA_UADPNETWORKMESSAGECONTENTMASK_WRITERGROUPID |
-                                                                  (UA_UadpNetworkMessageContentMask)UA_UADPNETWORKMESSAGECONTENTMASK_PAYLOADHEADER);
-        writerGroupConfig.messageSettings.content.decoded.data = writerGroupMessage;
-        retVal |= UA_Server_addWriterGroup(server, connection_test, &writerGroupConfig, &writerGroup);
-        UA_UadpWriterGroupMessageDataType_delete(writerGroupMessage);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* DataSetWriter */
-        UA_DataSetWriterConfig dataSetWriterConfig;
-        memset(&dataSetWriterConfig, 0, sizeof(dataSetWriterConfig));
-        dataSetWriterConfig.name            = UA_STRING("DataSetWriter Test");
-        dataSetWriterConfig.dataSetWriterId = DATASET_WRITER_ID;
-        dataSetWriterConfig.keyFrameCount   = 10;
-        retVal |= UA_Server_addDataSetWriter(server, writerGroup, publishedDataSetTest, &dataSetWriterConfig, &dataSetWriter);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Reader Group */
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset (&readerGroupConfig, 0, sizeof (UA_ReaderGroupConfig));
-        readerGroupConfig.name = UA_STRING ("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &readerGroupTest);
-
-        /* Data Set Reader */
-        /* Parameters to filter received NetworkMessage */
-        memset (&readerConfig, 0, sizeof (UA_DataSetReaderConfig));
-        readerConfig.name             = UA_STRING ("DataSetReader Test");
-        UA_UInt16 publisherIdentifier = PUBLISHER_ID;
-        readerConfig.publisherId.type = &UA_TYPES[UA_TYPES_UINT16];
-        readerConfig.publisherId.data = &publisherIdentifier;
-        readerConfig.writerGroupId    = WRITER_GROUP_ID;
-        readerConfig.dataSetWriterId  = DATASET_WRITER_ID;
-        /* Setting up Meta data configuration in DataSetReader */
-        UA_DataSetMetaDataType *pMetaData = &readerConfig.dataSetMetaData;
-        /* FilltestMetadata function in subscriber implementation */
-        UA_DataSetMetaDataType_init (pMetaData);
-        pMetaData->name       = UA_STRING ("DataSet Test");
-        /* Static definition of number of fields size to 1 to create one
-           targetVariable */
-        pMetaData->fieldsSize = 1;
-        pMetaData->fields     = (UA_FieldMetaData*)UA_Array_new (pMetaData->fieldsSize,
-                                                                 &UA_TYPES[UA_TYPES_FIELDMETADATA]);
-        /* Unsigned Integer DataType */
-        UA_FieldMetaData_init (&pMetaData->fields[0]);
-        UA_NodeId_copy (&UA_TYPES[UA_TYPES_INT32].typeId,
-                        &pMetaData->fields[0].dataType);
-        pMetaData->fields[0].builtInType = UA_NS0ID_INT32;
-        pMetaData->fields[0].valueRank   = -1; /* scalar */
-        retVal |= UA_Server_addDataSetReader(server, readerGroupTest, &readerConfig,
-                                             &readerIdentifier);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        /* Add Subscribed Variables */
-        UA_NodeId folderId;
-        UA_NodeId newnodeId;
-        UA_String folderName      = readerConfig.dataSetMetaData.name;
-        UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-        UA_QualifiedName folderBrowseName;
-        if (folderName.length > 0) {
-            oAttr.displayName.locale        = UA_STRING ("en-US");
-            oAttr.displayName.text          = folderName;
-            folderBrowseName.namespaceIndex = 1;
-            folderBrowseName.name           = folderName;
-        }
-        else {
-            oAttr.displayName = UA_LOCALIZEDTEXT ("en-US", "Subscribed Variables");
-            folderBrowseName = UA_QUALIFIEDNAME (1, "Subscribed Variables");
-        }
-
-        retVal = UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, SUBSCRIBEOBJECT_NODEID),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                         folderBrowseName, UA_NODEID_NUMERIC(0,
-                                         UA_NS0ID_BASEOBJECTTYPE), oAttr, NULL, &folderId);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Variable to subscribe data */
-        UA_VariableAttributes vAttr = UA_VariableAttributes_default;
-        vAttr.description = UA_LOCALIZEDTEXT ("en-US", "Subscribed Int32");
-        vAttr.displayName = UA_LOCALIZEDTEXT ("en-US", "Subscribed Int32");
-        vAttr.dataType    = UA_TYPES[UA_TYPES_INT32].typeId;
-        retVal = UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, SUBSCRIBEVARIABLE_NODEID),
-                                           UA_NODEID_NUMERIC(1, SUBSCRIBEOBJECT_NODEID),
-                                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),  UA_QUALIFIEDNAME(1, "Subscribed Int32"),
-                                           UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), vAttr, NULL, &newnodeId);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_TargetVariablesDataType targetVars;
-        targetVars.targetVariablesSize = 1;
-        targetVars.targetVariables     = (UA_FieldTargetDataType *)
-                                          UA_calloc(targetVars.targetVariablesSize,
-                                          sizeof(UA_FieldTargetDataType));
-        /* For creating Targetvariable */
-        UA_FieldTargetDataType_init(&targetVars.targetVariables[0]);
-        targetVars.targetVariables[0].attributeId  = UA_ATTRIBUTEID_VALUE;
-        targetVars.targetVariables[0].targetNodeId = newnodeId;
-        retVal |= UA_Server_DataSetReader_createTargetVariables(server, readerIdentifier,
-                                                                &targetVars);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_TargetVariablesDataType_deleteMembers(&targetVars);
-        UA_free(pMetaData->fields);
-        /* run server - publisher and subscriber */
-        UA_Server_run_iterate(server,true);
-
-        /* Read data sent by the Publisher */
-        UA_Variant *publishedNodeData = UA_Variant_new();
-        retVal                        = UA_Server_readValue(server, UA_NODEID_NUMERIC(1, PUBLISHVARIABLE_NODEID), publishedNodeData);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Read data received by the Subscriber */
-        UA_Variant *subscribedNodeData = UA_Variant_new();
-        retVal                         = UA_Server_readValue(server, UA_NODEID_NUMERIC(1, SUBSCRIBEVARIABLE_NODEID), subscribedNodeData);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Check if data sent from Publisher is being received by Subscriber */
-        ck_assert_int_eq(*(UA_Int32 *)publishedNodeData->data, *(UA_Int32 *)subscribedNodeData->data);
-        UA_Variant_delete(subscribedNodeData);
-        UA_Variant_delete(publishedNodeData);
-    } END_TEST
-
-START_TEST(SinglePublishSubscribeInt64) {
-        /* To check status after running both publisher and subscriber */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_PublishedDataSetConfig pdsConfig;
-        UA_NodeId dataSetWriter;
-        UA_NodeId readerIdentifier;
-        UA_NodeId writerGroup;
-        UA_DataSetReaderConfig readerConfig;
-
-        /* Published DataSet */
-        memset(&pdsConfig, 0, sizeof(UA_PublishedDataSetConfig));
-        pdsConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-        pdsConfig.name = UA_STRING("PublishedDataSet Test");
-        UA_Server_addPublishedDataSet(server, &pdsConfig, &publishedDataSetTest);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Create variable to publish integer data */
-        UA_NodeId publisherNode;
-        UA_VariableAttributes attr = UA_VariableAttributes_default;
-        attr.description           = UA_LOCALIZEDTEXT("en-US","Published Int64");
-        attr.displayName           = UA_LOCALIZEDTEXT("en-US","Published Int64");
-        attr.dataType              = UA_TYPES[UA_TYPES_INT64].typeId;
-        UA_Int64 publisherData     = 64;
-        UA_Variant_setScalar(&attr.value, &publisherData, &UA_TYPES[UA_TYPES_INT64]);
-        retVal                     = UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, PUBLISHVARIABLE_NODEID),
-                                                               UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                                               UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                                               UA_QUALIFIEDNAME(1, "Published Int64"),
-                                                               UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                                               attr, NULL, &publisherNode);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Data Set Field */
-        UA_NodeId dataSetFieldIdent;
-        UA_DataSetFieldConfig dataSetFieldConfig;
-        memset(&dataSetFieldConfig, 0, sizeof(UA_DataSetFieldConfig));
-        dataSetFieldConfig.dataSetFieldType              = UA_PUBSUB_DATASETFIELD_VARIABLE;
-        dataSetFieldConfig.field.variable.fieldNameAlias = UA_STRING("Published Int64");
-        dataSetFieldConfig.field.variable.promotedField  = UA_FALSE;
-        dataSetFieldConfig.field.variable.publishParameters.publishedVariable = publisherNode;
-        dataSetFieldConfig.field.variable.publishParameters.attributeId       = UA_ATTRIBUTEID_VALUE;
-        UA_Server_addDataSetField (server, publishedDataSetTest, &dataSetFieldConfig, &dataSetFieldIdent);
-
-        /* Writer group */
-        UA_WriterGroupConfig writerGroupConfig;
-        memset(&writerGroupConfig, 0, sizeof(writerGroupConfig));
-        writerGroupConfig.name               = UA_STRING("WriterGroup Test");
-        writerGroupConfig.publishingInterval = PUBLISH_INTERVAL;
-        writerGroupConfig.enabled            = UA_FALSE;
-        writerGroupConfig.writerGroupId      = WRITER_GROUP_ID;
-        writerGroupConfig.encodingMimeType   = UA_PUBSUB_ENCODING_UADP;
-        /* Message settings in WriterGroup to include necessary headers */
-        writerGroupConfig.messageSettings.encoding             = UA_EXTENSIONOBJECT_DECODED;
-        writerGroupConfig.messageSettings.content.decoded.type = &UA_TYPES[UA_TYPES_UADPWRITERGROUPMESSAGEDATATYPE];
-        UA_UadpWriterGroupMessageDataType *writerGroupMessage  = UA_UadpWriterGroupMessageDataType_new();
-        writerGroupMessage->networkMessageContentMask          = (UA_UadpNetworkMessageContentMask)(UA_UADPNETWORKMESSAGECONTENTMASK_PUBLISHERID |
-                                                                  (UA_UadpNetworkMessageContentMask)UA_UADPNETWORKMESSAGECONTENTMASK_GROUPHEADER |
-                                                                  (UA_UadpNetworkMessageContentMask)UA_UADPNETWORKMESSAGECONTENTMASK_WRITERGROUPID |
-                                                                  (UA_UadpNetworkMessageContentMask)UA_UADPNETWORKMESSAGECONTENTMASK_PAYLOADHEADER);
-        writerGroupConfig.messageSettings.content.decoded.data = writerGroupMessage;
-        retVal |= UA_Server_addWriterGroup(server, connection_test, &writerGroupConfig, &writerGroup);
-        UA_UadpWriterGroupMessageDataType_delete(writerGroupMessage);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* DataSetWriter */
-        UA_DataSetWriterConfig dataSetWriterConfig;
-        memset(&dataSetWriterConfig, 0, sizeof(dataSetWriterConfig));
-        dataSetWriterConfig.name            = UA_STRING("DataSetWriter Test");
-        dataSetWriterConfig.dataSetWriterId = DATASET_WRITER_ID;
-        dataSetWriterConfig.keyFrameCount   = 10;
-        retVal |= UA_Server_addDataSetWriter(server, writerGroup, publishedDataSetTest, &dataSetWriterConfig, &dataSetWriter);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Reader Group */
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset (&readerGroupConfig, 0, sizeof (UA_ReaderGroupConfig));
-        readerGroupConfig.name = UA_STRING ("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &readerGroupTest);
-
-        /* Data Set Reader */
-        /* Parameters to filter received NetworkMessage */
-        memset (&readerConfig, 0, sizeof (UA_DataSetReaderConfig));
-        readerConfig.name             = UA_STRING ("DataSetReader Test");
-        UA_UInt16 publisherIdentifier = PUBLISHER_ID;
-        readerConfig.publisherId.type = &UA_TYPES[UA_TYPES_UINT16];
-        readerConfig.publisherId.data = &publisherIdentifier;
-        readerConfig.writerGroupId    = WRITER_GROUP_ID;
-        readerConfig.dataSetWriterId  = DATASET_WRITER_ID;
-        /* Setting up Meta data configuration in DataSetReader */
-        UA_DataSetMetaDataType *pMetaData = &readerConfig.dataSetMetaData;
-        /* FilltestMetadata function in subscriber implementation */
-        UA_DataSetMetaDataType_init (pMetaData);
-        pMetaData->name       = UA_STRING ("DataSet Test");
-        /* Static definition of number of fields size to 1 to create one
-           targetVariable */
-        pMetaData->fieldsSize = 1;
-        pMetaData->fields     = (UA_FieldMetaData*)UA_Array_new (pMetaData->fieldsSize,
-                                                                 &UA_TYPES[UA_TYPES_FIELDMETADATA]);
-                /* Unsigned Integer DataType */
-        UA_FieldMetaData_init (&pMetaData->fields[0]);
-        UA_NodeId_copy (&UA_TYPES[UA_TYPES_INT64].typeId,
-                        &pMetaData->fields[0].dataType);
-        pMetaData->fields[0].builtInType = UA_NS0ID_INT64;
-        pMetaData->fields[0].valueRank   = -1; /* scalar */
-        retVal |= UA_Server_addDataSetReader(server, readerGroupTest, &readerConfig,
-                                             &readerIdentifier);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        /* Add Subscribed Variables */
-        UA_NodeId folderId;
-        UA_NodeId newnodeId;
-        UA_String folderName      = readerConfig.dataSetMetaData.name;
-        UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-        UA_QualifiedName folderBrowseName;
-        if (folderName.length > 0) {
-            oAttr.displayName.locale        = UA_STRING ("en-US");
-            oAttr.displayName.text          = folderName;
-            folderBrowseName.namespaceIndex = 1;
-            folderBrowseName.name           = folderName;
-        }
-        else {
-            oAttr.displayName = UA_LOCALIZEDTEXT ("en-US", "Subscribed Variables");
-            folderBrowseName = UA_QUALIFIEDNAME (1, "Subscribed Variables");
-        }
-
-        retVal = UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, SUBSCRIBEOBJECT_NODEID),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                         folderBrowseName, UA_NODEID_NUMERIC(0,
-                                         UA_NS0ID_BASEOBJECTTYPE), oAttr, NULL, &folderId);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Variable to subscribe data */
-        UA_VariableAttributes vAttr = UA_VariableAttributes_default;
-        vAttr.description = UA_LOCALIZEDTEXT ("en-US", "Subscribed Int64");
-        vAttr.displayName = UA_LOCALIZEDTEXT ("en-US", "Subscribed Int64");
-        vAttr.dataType    = UA_TYPES[UA_TYPES_INT64].typeId;
-        retVal = UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, SUBSCRIBEVARIABLE_NODEID),
-                                           UA_NODEID_NUMERIC(1, SUBSCRIBEOBJECT_NODEID),
-                                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),  UA_QUALIFIEDNAME(1, "Subscribed Int64"),
-                                           UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), vAttr, NULL, &newnodeId);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_TargetVariablesDataType targetVars;
-        targetVars.targetVariablesSize = 1;
-        targetVars.targetVariables     = (UA_FieldTargetDataType *)
-                                          UA_calloc(targetVars.targetVariablesSize,
-                                          sizeof(UA_FieldTargetDataType));
-        /* For creating Targetvariable */
-        UA_FieldTargetDataType_init(&targetVars.targetVariables[0]);
-        targetVars.targetVariables[0].attributeId  = UA_ATTRIBUTEID_VALUE;
-        targetVars.targetVariables[0].targetNodeId = newnodeId;
-        retVal |= UA_Server_DataSetReader_createTargetVariables(server, readerIdentifier,
-                                                                &targetVars);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_TargetVariablesDataType_deleteMembers(&targetVars);
-        UA_free(pMetaData->fields);
-        /* run server - publisher and subscriber */
-        UA_Server_run_iterate(server,true);
-
-        /* Read data sent by the Publisher */
-        UA_Variant *publishedNodeData = UA_Variant_new();
-        retVal                        = UA_Server_readValue(server, UA_NODEID_NUMERIC(1, PUBLISHVARIABLE_NODEID), publishedNodeData);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Read data received by the Subscriber */
-        UA_Variant *subscribedNodeData = UA_Variant_new();
-        retVal                         = UA_Server_readValue(server, UA_NODEID_NUMERIC(1, SUBSCRIBEVARIABLE_NODEID), subscribedNodeData);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Check if data sent from Publisher is being received by Subscriber */
-        ck_assert_int_eq(*(UA_Int64 *)publishedNodeData->data, *(UA_Int64 *)subscribedNodeData->data);
-        UA_Variant_delete(subscribedNodeData);
-        UA_Variant_delete(publishedNodeData);
-    } END_TEST
-
-START_TEST(SinglePublishSubscribeBool) {
-        /* To check status after running both publisher and subscriber */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_PublishedDataSetConfig pdsConfig;
-        UA_NodeId dataSetWriter;
-        UA_NodeId readerIdentifier;
-        UA_NodeId writerGroup;
-        UA_DataSetReaderConfig readerConfig;
-
-        /* Published DataSet */
-        memset(&pdsConfig, 0, sizeof(UA_PublishedDataSetConfig));
-        pdsConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-        pdsConfig.name = UA_STRING("PublishedDataSet Test");
-        UA_Server_addPublishedDataSet(server, &pdsConfig, &publishedDataSetTest);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Create variable to publish boolean data */
-        UA_NodeId publisherNode;
-        UA_VariableAttributes attr = UA_VariableAttributes_default;
-        attr.description           = UA_LOCALIZEDTEXT("en-US","Published Bool");
-        attr.displayName           = UA_LOCALIZEDTEXT("en-US","Published Bool");
-        attr.dataType              = UA_TYPES[UA_TYPES_BOOLEAN].typeId;
-        UA_Boolean publisherData   = UA_FALSE;
-        UA_Variant_setScalar(&attr.value, &publisherData, &UA_TYPES[UA_TYPES_BOOLEAN]);
-        retVal                     = UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, PUBLISHVARIABLE_NODEID),
-                                                               UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                                               UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                                               UA_QUALIFIEDNAME(1, "Published Bool"),
-                                                               UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                                               attr, NULL, &publisherNode);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Data Set Field */
-        UA_NodeId dataSetFieldIdent;
-        UA_DataSetFieldConfig dataSetFieldConfig;
-        memset(&dataSetFieldConfig, 0, sizeof(UA_DataSetFieldConfig));
-        dataSetFieldConfig.dataSetFieldType              = UA_PUBSUB_DATASETFIELD_VARIABLE;
-        dataSetFieldConfig.field.variable.fieldNameAlias = UA_STRING("Published Bool");
-        dataSetFieldConfig.field.variable.promotedField  = UA_FALSE;
-        dataSetFieldConfig.field.variable.publishParameters.publishedVariable = publisherNode;
-        dataSetFieldConfig.field.variable.publishParameters.attributeId       = UA_ATTRIBUTEID_VALUE;
-        UA_Server_addDataSetField (server, publishedDataSetTest, &dataSetFieldConfig, &dataSetFieldIdent);
-
-        /* Writer group */
-        UA_WriterGroupConfig writerGroupConfig;
-        memset(&writerGroupConfig, 0, sizeof(writerGroupConfig));
-        writerGroupConfig.name               = UA_STRING("WriterGroup Test");
-        writerGroupConfig.publishingInterval = PUBLISH_INTERVAL;
-        writerGroupConfig.enabled            = UA_FALSE;
-        writerGroupConfig.writerGroupId      = WRITER_GROUP_ID;
-        writerGroupConfig.encodingMimeType   = UA_PUBSUB_ENCODING_UADP;
-        /* Message settings in WriterGroup to include necessary headers */
-        writerGroupConfig.messageSettings.encoding             = UA_EXTENSIONOBJECT_DECODED;
-        writerGroupConfig.messageSettings.content.decoded.type = &UA_TYPES[UA_TYPES_UADPWRITERGROUPMESSAGEDATATYPE];
-        UA_UadpWriterGroupMessageDataType *writerGroupMessage  = UA_UadpWriterGroupMessageDataType_new();
-        writerGroupMessage->networkMessageContentMask          = (UA_UadpNetworkMessageContentMask)(UA_UADPNETWORKMESSAGECONTENTMASK_PUBLISHERID |
-                                                                  (UA_UadpNetworkMessageContentMask)UA_UADPNETWORKMESSAGECONTENTMASK_GROUPHEADER |
-                                                                  (UA_UadpNetworkMessageContentMask)UA_UADPNETWORKMESSAGECONTENTMASK_WRITERGROUPID |
-                                                                  (UA_UadpNetworkMessageContentMask)UA_UADPNETWORKMESSAGECONTENTMASK_PAYLOADHEADER);
-        writerGroupConfig.messageSettings.content.decoded.data = writerGroupMessage;
-        retVal |= UA_Server_addWriterGroup(server, connection_test, &writerGroupConfig, &writerGroup);
-        UA_UadpWriterGroupMessageDataType_delete(writerGroupMessage);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* DataSetWriter */
-        UA_DataSetWriterConfig dataSetWriterConfig;
-        memset(&dataSetWriterConfig, 0, sizeof(dataSetWriterConfig));
-        dataSetWriterConfig.name            = UA_STRING("DataSetWriter Test");
-        dataSetWriterConfig.dataSetWriterId = DATASET_WRITER_ID;
-        dataSetWriterConfig.keyFrameCount   = 10;
-        retVal |= UA_Server_addDataSetWriter(server, writerGroup, publishedDataSetTest, &dataSetWriterConfig, &dataSetWriter);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Reader Group */
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset (&readerGroupConfig, 0, sizeof (UA_ReaderGroupConfig));
-        readerGroupConfig.name = UA_STRING ("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &readerGroupTest);
-
-        /* Data Set Reader */
-        /* Parameters to filter received NetworkMessage */
-        memset (&readerConfig, 0, sizeof (UA_DataSetReaderConfig));
-        readerConfig.name             = UA_STRING ("DataSetReader Test");
-        UA_UInt16 publisherIdentifier = PUBLISHER_ID;
-        readerConfig.publisherId.type = &UA_TYPES[UA_TYPES_UINT16];
-        readerConfig.publisherId.data = &publisherIdentifier;
-        readerConfig.writerGroupId    = WRITER_GROUP_ID;
-        readerConfig.dataSetWriterId  = DATASET_WRITER_ID;
-        /* Setting up Meta data configuration in DataSetReader */
-        UA_DataSetMetaDataType *pMetaData = &readerConfig.dataSetMetaData;
-        /* FilltestMetadata function in subscriber implementation */
-        UA_DataSetMetaDataType_init (pMetaData);
-        pMetaData->name       = UA_STRING ("DataSet Test");
-        /* Static definition of number of fields size to 1 to create one
-           targetVariable */
-        pMetaData->fieldsSize = 1;
-        pMetaData->fields     = (UA_FieldMetaData*)UA_Array_new (pMetaData->fieldsSize,
-                                                                 &UA_TYPES[UA_TYPES_FIELDMETADATA]);
-        /* Boolean DataType */
-        UA_FieldMetaData_init (&pMetaData->fields[0]);
-        UA_NodeId_copy (&UA_TYPES[UA_TYPES_BOOLEAN].typeId,
-                        &pMetaData->fields[0].dataType);
-        pMetaData->fields[0].builtInType = UA_NS0ID_BOOLEAN;
-        pMetaData->fields[0].valueRank   = -1; /* scalar */
-        retVal |= UA_Server_addDataSetReader(server, readerGroupTest, &readerConfig,
-                                             &readerIdentifier);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        /* Add Subscribed Variables */
-        UA_NodeId folderId;
-        UA_NodeId newnodeId;
-        UA_String folderName      = readerConfig.dataSetMetaData.name;
-        UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-        UA_QualifiedName folderBrowseName;
-        if (folderName.length > 0) {
-            oAttr.displayName.locale        = UA_STRING ("en-US");
-            oAttr.displayName.text          = folderName;
-            folderBrowseName.namespaceIndex = 1;
-            folderBrowseName.name           = folderName;
-        }
-        else {
-            oAttr.displayName = UA_LOCALIZEDTEXT ("en-US", "Subscribed Variables");
-            folderBrowseName = UA_QUALIFIEDNAME (1, "Subscribed Variables");
-        }
-
-        retVal = UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, SUBSCRIBEOBJECT_NODEID),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                         folderBrowseName, UA_NODEID_NUMERIC(0,
-                                         UA_NS0ID_BASEOBJECTTYPE), oAttr, NULL, &folderId);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Variable to subscribe data */
-        UA_VariableAttributes vAttr = UA_VariableAttributes_default;
-        vAttr.description = UA_LOCALIZEDTEXT ("en-US", "Subscribed Bool");
-        vAttr.displayName = UA_LOCALIZEDTEXT ("en-US", "Subscribed Bool");
-        vAttr.dataType    = UA_TYPES[UA_TYPES_BOOLEAN].typeId;
-        retVal = UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, SUBSCRIBEVARIABLE_NODEID),
-                                           UA_NODEID_NUMERIC(1, SUBSCRIBEOBJECT_NODEID),
-                                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),  UA_QUALIFIEDNAME(1, "Subscribed Bool"),
-                                           UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), vAttr, NULL, &newnodeId);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_TargetVariablesDataType targetVars;
-        targetVars.targetVariablesSize = 1;
-        targetVars.targetVariables     = (UA_FieldTargetDataType *)
-                                          UA_calloc(targetVars.targetVariablesSize,
-                                          sizeof(UA_FieldTargetDataType));
-        /* For creating Targetvariable */
-        UA_FieldTargetDataType_init(&targetVars.targetVariables[0]);
-        targetVars.targetVariables[0].attributeId  = UA_ATTRIBUTEID_VALUE;
-        targetVars.targetVariables[0].targetNodeId = newnodeId;
-        retVal |= UA_Server_DataSetReader_createTargetVariables(server, readerIdentifier,
-                                                                &targetVars);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_TargetVariablesDataType_deleteMembers(&targetVars);
-        UA_free(pMetaData->fields);
-        /* run server - publisher and subscriber */
-        UA_Server_run_iterate(server,true);
-
-        /* Read data sent by the Publisher */
-        UA_Variant *publishedNodeData = UA_Variant_new();
-        retVal                        = UA_Server_readValue(server, UA_NODEID_NUMERIC(1, PUBLISHVARIABLE_NODEID), publishedNodeData);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Read data received by the Subscriber */
-        UA_Variant *subscribedNodeData = UA_Variant_new();
-        retVal                         = UA_Server_readValue(server, UA_NODEID_NUMERIC(1, SUBSCRIBEVARIABLE_NODEID), subscribedNodeData);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Check if data sent from Publisher is being received by Subscriber */
-        ck_assert_int_eq(*(UA_Boolean *)publishedNodeData->data, *(UA_Boolean *)subscribedNodeData->data);
-        UA_Variant_delete(subscribedNodeData);
-        UA_Variant_delete(publishedNodeData);
-    } END_TEST
-
-START_TEST(SinglePublishSubscribewithValidIdentifiers) {
-        /* To check status after running both publisher and subscriber */
-        UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-        UA_PublishedDataSetConfig pdsConfig;
-        UA_NodeId dataSetWriter;
-        UA_NodeId readerIdentifier;
-        UA_NodeId writerGroup;
-        UA_DataSetReaderConfig readerConfig;
-
-        /* Published DataSet */
-        memset(&pdsConfig, 0, sizeof(UA_PublishedDataSetConfig));
-        pdsConfig.publishedDataSetType = UA_PUBSUB_DATASET_PUBLISHEDITEMS;
-        pdsConfig.name = UA_STRING("PublishedDataSet Test");
-        UA_Server_addPublishedDataSet(server, &pdsConfig, &publishedDataSetTest);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Create variable to publish integer data */
-        UA_NodeId publisherNode;
-        UA_VariableAttributes attr = UA_VariableAttributes_default;
-        attr.description           = UA_LOCALIZEDTEXT("en-US","Published Integer");
-        attr.displayName           = UA_LOCALIZEDTEXT("en-US","Published Integer");
-        attr.dataType              = UA_TYPES[UA_TYPES_UINT32].typeId;
-        attr.accessLevel           = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-        UA_UInt32 publisherData    = PUBLISHER_DATA;
-        UA_Variant_setScalar(&attr.value, &publisherData, &UA_TYPES[UA_TYPES_UINT32]);
-        retVal                     = UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, PUBLISHVARIABLE_NODEID),
-                                                               UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                                               UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                                               UA_QUALIFIEDNAME(1, "Published Integer"),
-                                                               UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                                               attr, NULL, &publisherNode);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Data Set Field */
-        UA_NodeId dataSetFieldIdent;
-        UA_DataSetFieldConfig dataSetFieldConfig;
-        memset(&dataSetFieldConfig, 0, sizeof(UA_DataSetFieldConfig));
-        dataSetFieldConfig.dataSetFieldType              = UA_PUBSUB_DATASETFIELD_VARIABLE;
-        dataSetFieldConfig.field.variable.fieldNameAlias = UA_STRING("Published Integer");
-        dataSetFieldConfig.field.variable.promotedField  = UA_FALSE;
-        dataSetFieldConfig.field.variable.publishParameters.publishedVariable = publisherNode;
-        dataSetFieldConfig.field.variable.publishParameters.attributeId       = UA_ATTRIBUTEID_VALUE;
-        UA_Server_addDataSetField (server, publishedDataSetTest, &dataSetFieldConfig, &dataSetFieldIdent);
-
-        /* Writer group */
-        UA_WriterGroupConfig writerGroupConfig;
-        memset(&writerGroupConfig, 0, sizeof(writerGroupConfig));
-        writerGroupConfig.name               = UA_STRING("WriterGroup Test");
-        writerGroupConfig.publishingInterval = PUBLISH_INTERVAL;
-        writerGroupConfig.enabled            = UA_FALSE;
-        writerGroupConfig.writerGroupId      = WRITER_GROUP_ID;
-        writerGroupConfig.encodingMimeType   = UA_PUBSUB_ENCODING_UADP;
-        /* Message settings in WriterGroup to include necessary headers */
-        writerGroupConfig.messageSettings.encoding             = UA_EXTENSIONOBJECT_DECODED;
-        writerGroupConfig.messageSettings.content.decoded.type = &UA_TYPES[UA_TYPES_UADPWRITERGROUPMESSAGEDATATYPE];
-        UA_UadpWriterGroupMessageDataType *writerGroupMessage  = UA_UadpWriterGroupMessageDataType_new();
-        writerGroupMessage->networkMessageContentMask          = (UA_UadpNetworkMessageContentMask)(UA_UADPNETWORKMESSAGECONTENTMASK_PUBLISHERID |
-                                                                  (UA_UadpNetworkMessageContentMask)UA_UADPNETWORKMESSAGECONTENTMASK_GROUPHEADER |
-                                                                  (UA_UadpNetworkMessageContentMask)UA_UADPNETWORKMESSAGECONTENTMASK_WRITERGROUPID |
-                                                                  (UA_UadpNetworkMessageContentMask)UA_UADPNETWORKMESSAGECONTENTMASK_PAYLOADHEADER);
-        writerGroupConfig.messageSettings.content.decoded.data = writerGroupMessage;
-        retVal |= UA_Server_addWriterGroup(server, connection_test, &writerGroupConfig, &writerGroup);
-        UA_UadpWriterGroupMessageDataType_delete(writerGroupMessage);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* DataSetWriter */
-        UA_DataSetWriterConfig dataSetWriterConfig;
-        memset(&dataSetWriterConfig, 0, sizeof(dataSetWriterConfig));
-        dataSetWriterConfig.name            = UA_STRING("DataSetWriter Test");
-        dataSetWriterConfig.dataSetWriterId = DATASET_WRITER_ID;
-        dataSetWriterConfig.keyFrameCount   = 10;
-        retVal |= UA_Server_addDataSetWriter(server, writerGroup, publishedDataSetTest, &dataSetWriterConfig, &dataSetWriter);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Reader Group */
-        UA_ReaderGroupConfig readerGroupConfig;
-        memset (&readerGroupConfig, 0, sizeof (UA_ReaderGroupConfig));
-        readerGroupConfig.name = UA_STRING ("ReaderGroup Test");
-        retVal |=  UA_Server_addReaderGroup(server, connection_test, &readerGroupConfig, &readerGroupTest);
-
-        /* Data Set Reader */
-        /* Parameters to filter received NetworkMessage */
-        memset (&readerConfig, 0, sizeof (UA_DataSetReaderConfig));
-        readerConfig.name             = UA_STRING ("DataSetReader Test");
-        UA_UInt16 publisherIdentifier = PUBLISHER_ID;
-        readerConfig.publisherId.type = &UA_TYPES[UA_TYPES_UINT16];
-        readerConfig.publisherId.data = &publisherIdentifier;
-        readerConfig.writerGroupId    = WRITER_GROUP_ID;
-        readerConfig.dataSetWriterId  = DATASET_WRITER_ID;
-        /* Setting up Meta data configuration in DataSetReader */
-        UA_DataSetMetaDataType *pMetaData = &readerConfig.dataSetMetaData;
-        /* FilltestMetadata function in subscriber implementation */
-        UA_DataSetMetaDataType_init (pMetaData);
-        pMetaData->name       = UA_STRING ("DataSet Test");
-        /* Static definition of number of fields size to 1 to create one
-        targetVariable */
-        pMetaData->fieldsSize = 1;
-        pMetaData->fields     = (UA_FieldMetaData*)UA_Array_new (pMetaData->fieldsSize,
-                                                                 &UA_TYPES[UA_TYPES_FIELDMETADATA]);
-        /* Unsigned Integer DataType */
-        UA_FieldMetaData_init (&pMetaData->fields[0]);
-        UA_NodeId_copy (&UA_TYPES[UA_TYPES_UINT32].typeId,
-                        &pMetaData->fields[0].dataType);
-        pMetaData->fields[0].builtInType = UA_NS0ID_UINT32;
-        pMetaData->fields[0].valueRank   = -1; /* scalar */
-        retVal |= UA_Server_addDataSetReader(server, readerGroupTest, &readerConfig,
-                                             &readerIdentifier);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        /* Add Subscribed Variables */
-        UA_NodeId folderId;
-        UA_NodeId newnodeId;
-        UA_String folderName      = readerConfig.dataSetMetaData.name;
-        UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-        UA_QualifiedName folderBrowseName;
-        if (folderName.length > 0) {
-            oAttr.displayName.locale        = UA_STRING ("en-US");
-            oAttr.displayName.text          = folderName;
-            folderBrowseName.namespaceIndex = 1;
-            folderBrowseName.name           = folderName;
-        }
-        else {
-            oAttr.displayName = UA_LOCALIZEDTEXT ("en-US", "Subscribed Variables");
-            folderBrowseName = UA_QUALIFIEDNAME (1, "Subscribed Variables");
-        }
-
-        retVal = UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, SUBSCRIBEOBJECT_NODEID),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                         folderBrowseName, UA_NODEID_NUMERIC(0,
-                                         UA_NS0ID_BASEOBJECTTYPE), oAttr, NULL, &folderId);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Variable to subscribe data */
-        UA_VariableAttributes vAttr = UA_VariableAttributes_default;
-        vAttr.displayName.locale    = UA_STRING ("en-US");
-        vAttr.displayName.text      = UA_STRING ("Subscribed Integer");
-        vAttr.valueRank             = -1;
-        retVal = UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, SUBSCRIBEVARIABLE_NODEID),
-                                           UA_NODEID_NUMERIC(1, SUBSCRIBEOBJECT_NODEID),
-                                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),  UA_QUALIFIEDNAME(1, "Subscribed Integer"),
-                                           UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), vAttr, NULL, &newnodeId);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_TargetVariablesDataType targetVars;
-        targetVars.targetVariablesSize = 1;
-        targetVars.targetVariables     = (UA_FieldTargetDataType *)
-                                          UA_calloc(targetVars.targetVariablesSize,
-                                          sizeof(UA_FieldTargetDataType));
-        /* For creating Targetvariable */
-        UA_FieldTargetDataType_init(&targetVars.targetVariables[0]);
-        targetVars.targetVariables[0].attributeId  = UA_ATTRIBUTEID_VALUE;
-        targetVars.targetVariables[0].targetNodeId = newnodeId;
-        retVal |= UA_Server_DataSetReader_createTargetVariables(server, readerIdentifier,
-                                                                &targetVars);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-        UA_TargetVariablesDataType_deleteMembers(&targetVars);
-        UA_free(pMetaData->fields);
-        /* run server - publisher and subscriber */
-        UA_Server_run_iterate(server,true);
-
-        /* Read data sent by the Publisher */
-        UA_Variant *publishedNodeData = UA_Variant_new();
-        retVal                        = UA_Server_readValue(server, UA_NODEID_NUMERIC(1, PUBLISHVARIABLE_NODEID), publishedNodeData);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Read data received by the Subscriber */
-        UA_Variant *subscribedNodeData = UA_Variant_new();
-        retVal                         = UA_Server_readValue(server, UA_NODEID_NUMERIC(1, SUBSCRIBEVARIABLE_NODEID), subscribedNodeData);
-        ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-        /* Check if data sent from Publisher is being received by Subscriber */
-        ck_assert_int_eq(*(UA_UInt32 *)publishedNodeData->data, *(UA_UInt32 *)subscribedNodeData->data);
-        UA_Variant_delete(subscribedNodeData);
-        UA_Variant_delete(publishedNodeData);
-    } END_TEST
-
-int main(void) {
-    TCase *tc_add_pubsub_readergroup = tcase_create("PubSub readerGroup items handling");
-    tcase_add_checked_fixture(tc_add_pubsub_readergroup, setup, teardown);
-
-    /* Test cases for ReaderGroup functionality */
-    tcase_add_test(tc_add_pubsub_readergroup, AddReaderGroupWithValidConfiguration);
-    tcase_add_test(tc_add_pubsub_readergroup, AddReaderGroupWithNullConfig);
-    tcase_add_test(tc_add_pubsub_readergroup, AddReaderGroupWithInvalidConnectionId);
-    tcase_add_test(tc_add_pubsub_readergroup, RemoveReaderGroupWithInvalidIdentifier);
-    tcase_add_test(tc_add_pubsub_readergroup, AddRemoveMultipleAddReaderGroupWithValidConfiguration);
-    tcase_add_test(tc_add_pubsub_readergroup, UpdateReaderGroupWithInvalidIdentifier);
-    tcase_add_test(tc_add_pubsub_readergroup, GetReaderGroupConfigWithInvalidConfig);
-    tcase_add_test(tc_add_pubsub_readergroup, GetReaderGroupConfigWithInvalidIdentifier);
-    tcase_add_test(tc_add_pubsub_readergroup, GetReaderGroupConfigWithValidConfig);
-
-    /* Test cases for DataSetReader functionality */
-    tcase_add_test(tc_add_pubsub_readergroup, AddDataSetReaderWithValidConfiguration);
-    tcase_add_test(tc_add_pubsub_readergroup, AddDataSetReaderWithNullConfig);
-    tcase_add_test(tc_add_pubsub_readergroup, RemoveDataSetReaderWithValidConfiguration);
-    tcase_add_test(tc_add_pubsub_readergroup, RemoveDataSetReaderWithInvalidIdentifier);
-    tcase_add_test(tc_add_pubsub_readergroup, AddMultipleDataSetReaderWithValidConfiguration);
-    tcase_add_test(tc_add_pubsub_readergroup, UpdateDataSetReaderConfigWithInvalidId);
-    tcase_add_test(tc_add_pubsub_readergroup, GetDataSetReaderConfigWithValidConfiguration);
-    tcase_add_test(tc_add_pubsub_readergroup, GetDataSetReaderConfigWithInvalidConfiguration);
-    tcase_add_test(tc_add_pubsub_readergroup, GetDataSetReaderConfigWithInvalidIdentifier);
-    tcase_add_test(tc_add_pubsub_readergroup, CreateTargetVariableWithInvalidConfiguration);
-    tcase_add_test(tc_add_pubsub_readergroup, AddTargetVariableWithInvalidConfiguration);
-    tcase_add_test(tc_add_pubsub_readergroup, AddTargetVariableWithValidConfiguration);
-
-    /*Test case to run both publisher and subscriber */
-    TCase *tc_pubsub_publish_subscribe = tcase_create("Publisher publishing and Subscriber subscribing");
-    tcase_add_checked_fixture(tc_pubsub_publish_subscribe, setup, teardown);
-    tcase_add_test(tc_pubsub_publish_subscribe, SinglePublishSubscribeDateTime);
-    tcase_add_test(tc_pubsub_publish_subscribe, SinglePublishSubscribeInt32);
-    tcase_add_test(tc_pubsub_publish_subscribe, SinglePublishSubscribeInt64);
-    tcase_add_test(tc_pubsub_publish_subscribe, SinglePublishSubscribeBool);
-    tcase_add_test(tc_pubsub_publish_subscribe, SinglePublishSubscribewithValidIdentifiers);
-
-    Suite *suite = suite_create("PubSub readerGroups/reader/Fields handling and publishing");
-    suite_add_tcase(suite, tc_add_pubsub_readergroup);
-    suite_add_tcase(suite, tc_pubsub_publish_subscribe);
-
-    SRunner *suiteRunner = srunner_create(suite);
-    srunner_set_fork_status(suiteRunner, CK_NOFORK);
-    srunner_run_all(suiteRunner,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(suiteRunner);
-    srunner_free(suiteRunner);
-
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_accesscontrol.c b/ext/open62541/tests/server/check_accesscontrol.c
deleted file mode 100644
index b96843c..0000000
--- a/ext/open62541/tests/server/check_accesscontrol.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-#include <open62541/types.h>
-
-#include <check.h>
-
-#include "thread_wrapper.h"
-
-UA_Server *server;
-UA_Boolean running;
-UA_ServerNetworkLayer nl;
-THREAD_HANDLE server_thread;
-
-THREAD_CALLBACK(serverloop) {
-    while(running)
-        UA_Server_run_iterate(server, true);
-    return 0;
-}
-
-static void setup(void) {
-    running = true;
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-    UA_Server_run_startup(server);
-    THREAD_CREATE(server_thread, serverloop);
-}
-
-static void teardown(void) {
-    running = false;
-    THREAD_JOIN(server_thread);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-START_TEST(Client_anonymous) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-} END_TEST
-
-START_TEST(Client_user_pass_ok) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_StatusCode retval =
-        UA_Client_connect_username(client, "opc.tcp://localhost:4840", "user1", "password");
-
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-} END_TEST
-
-START_TEST(Client_user_fail) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_StatusCode retval =
-        UA_Client_connect_username(client, "opc.tcp://localhost:4840", "user0", "password");
-
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADUSERACCESSDENIED);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-} END_TEST
-
-START_TEST(Client_pass_fail) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_StatusCode retval =
-        UA_Client_connect_username(client, "opc.tcp://localhost:4840", "user1", "secret");
-
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADUSERACCESSDENIED);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-} END_TEST
-
-
-static Suite* testSuite_Client(void) {
-    Suite *s = suite_create("Client");
-    TCase *tc_client_user = tcase_create("Client User/Password");
-    tcase_add_checked_fixture(tc_client_user, setup, teardown);
-    tcase_add_test(tc_client_user, Client_anonymous);
-    tcase_add_test(tc_client_user, Client_user_pass_ok);
-    tcase_add_test(tc_client_user, Client_user_fail);
-    tcase_add_test(tc_client_user, Client_pass_fail);
-    suite_add_tcase(s,tc_client_user);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_discovery.c b/ext/open62541/tests/server/check_discovery.c
deleted file mode 100644
index 9713d41..0000000
--- a/ext/open62541/tests/server/check_discovery.c
+++ /dev/null
@@ -1,653 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
-*  License, v. 2.0. If a copy of the MPL was not distributed with this
-*  file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include <open62541/server_config_default.h>
-
-#include "server/ua_server_internal.h"
-
-#include <fcntl.h>
-
-#include "testing_clock.h"
-#include "thread_wrapper.h"
-#ifndef WIN32
-#include <sys/stat.h>
-#endif
-#include <check.h>
-
-#ifndef _WIN32
-#include <sys/stat.h>
-#endif
-
-// set register timeout to 1 second so we are able to test it.
-#define registerTimeout 1
-// cleanup is only triggered every 10 seconds, thus wait a bit longer to check
-#define checkWait registerTimeout + 11
-
-UA_Server *server_lds;
-UA_Boolean *running_lds;
-THREAD_HANDLE server_thread_lds;
-UA_Client *clientRegisterRepeated;
-
-THREAD_CALLBACK(serverloop_lds) {
-    while(*running_lds)
-        UA_Server_run_iterate(server_lds, true);
-    return 0;
-}
-
-static void configure_lds_server(UA_Server *pServer)
-{
-    UA_ServerConfig *config_lds = UA_Server_getConfig(pServer);
-    UA_ServerConfig_setDefault(config_lds);
-
-    config_lds->applicationDescription.applicationType = UA_APPLICATIONTYPE_DISCOVERYSERVER;
-    UA_String_deleteMembers(&config_lds->applicationDescription.applicationUri);
-    config_lds->applicationDescription.applicationUri =
-        UA_STRING_ALLOC("urn:open62541.test.local_discovery_server");
-    UA_LocalizedText_deleteMembers(&config_lds->applicationDescription.applicationName);
-    config_lds->applicationDescription.applicationName
-        = UA_LOCALIZEDTEXT_ALLOC("en", "LDS Server");
-    config_lds->discovery.mdnsEnable = true;
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-    config_lds->discovery.mdns.mdnsServerName = UA_String_fromChars("LDS_test");
-    config_lds->discovery.mdns.serverCapabilitiesSize = 1;
-    UA_String *caps = UA_String_new();
-    *caps = UA_String_fromChars("LDS");
-    config_lds->discovery.mdns.serverCapabilities = caps;
-#endif
-    config_lds->discovery.cleanupTimeout = registerTimeout;
-}
-
-static void setup_lds(void) {
-    // start LDS server
-    running_lds = UA_Boolean_new();
-    *running_lds = true;
-
-    server_lds = UA_Server_new();
-    configure_lds_server(server_lds);
-
-    UA_Server_run_startup(server_lds);
-    THREAD_CREATE(server_thread_lds, serverloop_lds);
-
-    // wait until LDS started
-    UA_fakeSleep(1000);
-    UA_realSleep(1000);
-}
-
-static void teardown_lds(void) {
-    *running_lds = false;
-    THREAD_JOIN(server_thread_lds);
-    UA_Server_run_shutdown(server_lds);
-    UA_Boolean_delete(running_lds);
-    UA_Server_delete(server_lds);
-}
-
-UA_Server *server_register;
-UA_Boolean *running_register;
-THREAD_HANDLE server_thread_register;
-
-UA_UInt64 periodicRegisterCallbackId;
-
-THREAD_CALLBACK(serverloop_register) {
-    while(*running_register)
-        UA_Server_run_iterate(server_register, true);
-    return 0;
-}
-
-static void setup_register(void) {
-    // start register server
-    running_register = UA_Boolean_new();
-    *running_register = true;
-
-    server_register = UA_Server_new();
-    UA_ServerConfig *config_register = UA_Server_getConfig(server_register);
-    UA_ServerConfig_setMinimal(config_register, 16664, NULL);
-
-    UA_String_deleteMembers(&config_register->applicationDescription.applicationUri);
-    config_register->applicationDescription.applicationUri =
-        UA_String_fromChars("urn:open62541.test.server_register");
-    UA_LocalizedText_deleteMembers(&config_register->applicationDescription.applicationName);
-    config_register->applicationDescription.applicationName =
-        UA_LOCALIZEDTEXT_ALLOC("de", "Anmeldungsserver");
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-    config_register->discovery.mdns.mdnsServerName = UA_String_fromChars("Register_test");
-#endif
-
-    UA_Server_run_startup(server_register);
-    THREAD_CREATE(server_thread_register, serverloop_register);
-}
-
-static void teardown_register(void) {
-    *running_register = false;
-    THREAD_JOIN(server_thread_register);
-    UA_Server_run_shutdown(server_register);
-    UA_Boolean_delete(running_register);
-    UA_Server_delete(server_register);
-}
-
-START_TEST(Server_new_delete) {
-    UA_Server *pServer = UA_Server_new();
-    configure_lds_server(pServer);
-    UA_Server_delete(pServer);
-}
-END_TEST
-
-START_TEST(Server_new_shutdown_delete) {
-        UA_Server *pServer = UA_Server_new();
-        configure_lds_server(pServer);
-        UA_StatusCode retval = UA_Server_run_shutdown(pServer);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-        UA_Server_delete(pServer);
-}
-END_TEST
-
-START_TEST(Server_register) {
-    UA_Client *clientRegister = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(clientRegister));
-
-    UA_StatusCode retval = UA_Client_connect_noSession(clientRegister, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    retval = UA_Server_register_discovery(server_register, clientRegister , NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Client_disconnect(clientRegister);
-    UA_Client_delete(clientRegister);
-}
-END_TEST
-
-START_TEST(Server_unregister) {
-    UA_Client *clientRegister = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(clientRegister));
-
-    UA_StatusCode retval = UA_Client_connect_noSession(clientRegister, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    retval = UA_Server_unregister_discovery(server_register, clientRegister);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Client_disconnect(clientRegister);
-    UA_Client_delete(clientRegister);
-}
-END_TEST
-
-#ifdef UA_ENABLE_DISCOVERY_SEMAPHORE
-
-#ifndef WIN32
-#define SEMAPHORE_PATH "/tmp/open62541-unit-test-semaphore"
-#else
-#define SEMAPHORE_PATH ".\\open62541-unit-test-semaphore"
-#endif
-
-START_TEST(Server_register_semaphore) {
-    // create the semaphore
-#ifndef WIN32
-    int fd = open(SEMAPHORE_PATH, O_RDWR|O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO);
-    ck_assert_int_ne(fd, -1);
-    close(fd);
-#else
-    FILE *fp;
-    fopen_s(&fp, SEMAPHORE_PATH, "ab+");
-    ck_assert_ptr_ne(fp, NULL);
-    fclose(fp);
-#endif
-
-    UA_Client *clientRegister = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(clientRegister));
-
-    UA_StatusCode retval = UA_Client_connect_noSession(clientRegister, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    retval = UA_Server_register_discovery(server_register, clientRegister, SEMAPHORE_PATH);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Client_disconnect(clientRegister);
-    UA_Client_delete(clientRegister);
-}
-END_TEST
-
-START_TEST(Server_unregister_semaphore) {
-    // delete the semaphore, this should remove the registration automatically on next check
-    ck_assert_int_eq(remove(SEMAPHORE_PATH), 0);
-}
-END_TEST
-
-#endif /* UA_ENABLE_DISCOVERY_SEMAPHORE */
-
-START_TEST(Server_register_periodic) {
-    ck_assert(clientRegisterRepeated == NULL);
-
-    clientRegisterRepeated = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(clientRegisterRepeated));
-
-    ck_assert(clientRegisterRepeated != NULL);
-    // periodic register every minute, first register immediately
-    UA_StatusCode retval = UA_Server_addPeriodicServerRegisterCallback(server_register, clientRegisterRepeated, "opc.tcp://localhost:4840",
-                                                    60*1000, 100, &periodicRegisterCallbackId);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(Server_unregister_periodic) {
-    // wait for first register delay
-    UA_fakeSleep(1000);
-    UA_realSleep(1000);
-    UA_Server_removeRepeatedCallback(server_register, periodicRegisterCallbackId);
-    UA_StatusCode retval = UA_Server_unregister_discovery(server_register, clientRegisterRepeated);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Client_disconnect(clientRegisterRepeated);
-    UA_Client_delete(clientRegisterRepeated);
-    clientRegisterRepeated=NULL;
-}
-END_TEST
-
-static void
-FindAndCheck(const UA_String expectedUris[], size_t expectedUrisSize,
-             const UA_String expectedLocales[],
-             const UA_String expectedNames[],
-             const char *filterUri,
-             const char *filterLocale) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    UA_ApplicationDescription* applicationDescriptionArray = NULL;
-    size_t applicationDescriptionArraySize = 0;
-
-    size_t serverUrisSize = 0;
-    UA_String *serverUris = NULL;
-
-    if(filterUri) {
-        serverUrisSize = 1;
-        serverUris = UA_String_new();
-        serverUris[0] = UA_String_fromChars(filterUri);
-    }
-
-    size_t localeIdsSize = 0;
-    UA_String *localeIds = NULL;
-
-    if(filterLocale) {
-        localeIdsSize = 1;
-        localeIds = UA_String_new();
-        localeIds[0] = UA_String_fromChars(filterLocale);
-    }
-
-    UA_StatusCode retval =
-        UA_Client_findServers(client, "opc.tcp://localhost:4840",
-                              serverUrisSize, serverUris, localeIdsSize, localeIds,
-                              &applicationDescriptionArraySize, &applicationDescriptionArray);
-
-    if(filterUri)
-        UA_Array_delete(serverUris, serverUrisSize, &UA_TYPES[UA_TYPES_STRING]);
-
-    if(filterLocale)
-        UA_Array_delete(localeIds, localeIdsSize, &UA_TYPES[UA_TYPES_STRING]);
-
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    // only the discovery server is expected
-    ck_assert_uint_eq(applicationDescriptionArraySize, expectedUrisSize);
-    ck_assert(applicationDescriptionArray != NULL);
-
-    for(size_t i = 0; i < expectedUrisSize; ++i) {
-        ck_assert(UA_String_equal(&applicationDescriptionArray[i].applicationUri,
-                                  &expectedUris[i]));
-
-        if(expectedNames)
-            ck_assert(UA_String_equal(&applicationDescriptionArray[i].applicationName.text,
-                                      &expectedNames[i]));
-
-        if (expectedLocales)
-            ck_assert(UA_String_equal(&applicationDescriptionArray[i].applicationName.locale,
-                                      &expectedLocales[i]));
-    }
-
-    UA_Array_delete(applicationDescriptionArray, applicationDescriptionArraySize,
-                    &UA_TYPES[UA_TYPES_APPLICATIONDESCRIPTION]);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-
-static void
-FindOnNetworkAndCheck(UA_String expectedServerNames[], size_t expectedServerNamesSize,
-                      const char *filterUri, const char *filterLocale,
-                      const char** filterCapabilities, size_t filterCapabilitiesSize) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    UA_ServerOnNetwork* serverOnNetwork = NULL;
-    size_t serverOnNetworkSize = 0;
-
-    size_t  serverCapabilityFilterSize = 0;
-    UA_String *serverCapabilityFilter = NULL;
-
-    if(filterCapabilitiesSize) {
-        serverCapabilityFilterSize = filterCapabilitiesSize;
-        serverCapabilityFilter = (UA_String*)UA_malloc(sizeof(UA_String) * filterCapabilitiesSize);
-        for(size_t i = 0; i < filterCapabilitiesSize; i++)
-            serverCapabilityFilter[i] = UA_String_fromChars(filterCapabilities[i]);
-    }
-
-
-    UA_StatusCode retval =
-        UA_Client_findServersOnNetwork(client, "opc.tcp://localhost:4840", 0, 0,
-                                       serverCapabilityFilterSize, serverCapabilityFilter,
-                                       &serverOnNetworkSize, &serverOnNetwork);
-
-    if(serverCapabilityFilterSize)
-        UA_Array_delete(serverCapabilityFilter, serverCapabilityFilterSize,
-                        &UA_TYPES[UA_TYPES_STRING]);
-
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    // only the discovery server is expected
-    ck_assert_uint_eq(serverOnNetworkSize , expectedServerNamesSize);
-
-    if(expectedServerNamesSize > 0)
-        ck_assert_ptr_ne(serverOnNetwork, NULL);
-
-    if(serverOnNetwork != NULL) {
-        for(size_t i = 0; i < expectedServerNamesSize; i++) {
-            UA_Boolean expectedServerNameInServerOnNetwork = false;
-            for(size_t j = 0; j < expectedServerNamesSize && !expectedServerNameInServerOnNetwork; j++) {
-                expectedServerNameInServerOnNetwork = UA_String_equal(&serverOnNetwork[j].serverName,
-                                        &expectedServerNames[i]);
-            }
-            ck_assert_msg(expectedServerNameInServerOnNetwork, "Expected %.*s in serverOnNetwork list, but not found",
-                expectedServerNames[i].length, expectedServerNames[i].data);
-        }
-    }
-
-    UA_Array_delete(serverOnNetwork, serverOnNetworkSize, &UA_TYPES[UA_TYPES_SERVERONNETWORK]);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-}
-
-static UA_StatusCode
-GetEndpoints(UA_Client *client, const UA_String* endpointUrl,
-             size_t* endpointDescriptionsSize,
-             UA_EndpointDescription** endpointDescriptions,
-             const char* filterTransportProfileUri) {
-    UA_GetEndpointsRequest request;
-    UA_GetEndpointsRequest_init(&request);
-    //request.requestHeader.authenticationToken = client->authenticationToken;
-    request.requestHeader.timestamp = UA_DateTime_now();
-    request.requestHeader.timeoutHint = 10000;
-    request.endpointUrl = *endpointUrl; // assume the endpointurl outlives the service call
-    if (filterTransportProfileUri) {
-        request.profileUrisSize = 1;
-        request.profileUris = (UA_String*)UA_malloc(sizeof(UA_String));
-        request.profileUris[0] = UA_String_fromChars(filterTransportProfileUri);
-    }
-
-    UA_GetEndpointsResponse response;
-    UA_GetEndpointsResponse_init(&response);
-    __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_GETENDPOINTSREQUEST],
-                        &response, &UA_TYPES[UA_TYPES_GETENDPOINTSRESPONSE]);
-
-    if (filterTransportProfileUri) {
-        UA_Array_delete(request.profileUris, request.profileUrisSize, &UA_TYPES[UA_TYPES_STRING]);
-    }
-
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-
-    *endpointDescriptionsSize = response.endpointsSize;
-    *endpointDescriptions =
-        (UA_EndpointDescription*)UA_Array_new(response.endpointsSize,
-                                              &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
-    for(size_t i=0;i<response.endpointsSize;i++) {
-        UA_EndpointDescription_init(&(*endpointDescriptions)[i]);
-        UA_EndpointDescription_copy(&response.endpoints[i], &(*endpointDescriptions)[i]);
-    }
-    UA_GetEndpointsResponse_deleteMembers(&response);
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-GetEndpointsAndCheck(const char* discoveryUrl, const char* filterTransportProfileUri,
-                     const UA_String expectedEndpointUrls[], size_t expectedEndpointUrlsSize) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    ck_assert_uint_eq(UA_Client_connect(client, discoveryUrl), UA_STATUSCODE_GOOD);
-
-    UA_EndpointDescription* endpointArray = NULL;
-    size_t endpointArraySize = 0;
-    UA_String discoveryUrlUA = UA_String_fromChars(discoveryUrl);
-    UA_StatusCode retval = GetEndpoints(client, &discoveryUrlUA, &endpointArraySize,
-                                        &endpointArray, filterTransportProfileUri);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_String_deleteMembers(&discoveryUrlUA);
-
-    ck_assert_uint_eq(endpointArraySize , expectedEndpointUrlsSize);
-
-    for(size_t j = 0; j < endpointArraySize && j < expectedEndpointUrlsSize; j++) {
-        UA_EndpointDescription* endpoint = &endpointArray[j];
-        ck_assert(UA_String_equal(&endpoint->endpointUrl, &expectedEndpointUrls[j]));
-    }
-
-    UA_Array_delete(endpointArray, endpointArraySize, &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
-    UA_Client_delete(client);
-}
-
-// Test if discovery server lists himself as registered server if it is filtered by his uri
-START_TEST(Client_filter_discovery) {
-    UA_String expectedUris[1];
-    expectedUris[0] = UA_STRING("urn:open62541.test.local_discovery_server");
-    FindAndCheck(expectedUris, 1, NULL, NULL, "urn:open62541.test.local_discovery_server", NULL);
-}
-END_TEST
-
-// Test if server filters locale
-START_TEST(Client_filter_locale) {
-    UA_String expectedUris[2];
-    expectedUris[0] = UA_STRING("urn:open62541.test.local_discovery_server"),
-    expectedUris[1] = UA_STRING("urn:open62541.test.server_register");
-    UA_String expectedNames[2];
-    expectedNames[0]= UA_STRING("LDS Server");
-    expectedNames[1]= UA_STRING("Anmeldungsserver");
-    UA_String expectedLocales[2];
-    expectedLocales[0] = UA_STRING("en");
-    expectedLocales[1] = UA_STRING("de");
-    // even if we request en-US, the server will return de-DE because it only has that name.
-    FindAndCheck(expectedUris, 2, expectedLocales, expectedNames, NULL, "en");
-
-}
-END_TEST
-
-// Test if registered server is returned from LDS using FindServersOnNetwork
-START_TEST(Client_find_on_network_registered) {
-    char urls[2][64];
-    UA_String expectedUris[2];
-    char hostname[256];
-
-    ck_assert_uint_eq(gethostname(hostname, 255), 0);
-
-    //DNS limits name to max 63 chars (+ \0)
-    //We need this ugly casting, otherwise gcc >7.2 will complain about format-truncation, but we want it here
-    void *hostnameVoid = (void*)hostname;
-    snprintf(urls[0], 64, "LDS_test-%s", (char*)hostnameVoid);
-    snprintf(urls[1], 64, "Register_test-%s", (char*)hostnameVoid);
-    expectedUris[0] = UA_STRING(urls[0]);
-    expectedUris[1] = UA_STRING(urls[1]);
-    FindOnNetworkAndCheck(expectedUris, 2, NULL, NULL, NULL, 0);
-
-    // filter by Capabilities
-    const char* capsLDS[] = {"LDS"};
-    const char* capsNA[] = {"NA"};
-    const char* capsMultiple[] = {"LDS", "NA"};
-
-    // only LDS expected
-    FindOnNetworkAndCheck(expectedUris, 1, NULL, NULL, capsLDS, 1);
-    // only register server expected
-    FindOnNetworkAndCheck(&expectedUris[1], 1, NULL, NULL, capsNA, 1);
-    // no server expected
-    FindOnNetworkAndCheck(NULL, 0, NULL, NULL, capsMultiple, 2);
-}
-END_TEST
-
-// Test if filtering with uris works
-START_TEST(Client_find_filter) {
-    UA_String expectedUris[1];
-    expectedUris[0] = UA_STRING("urn:open62541.test.server_register");
-    FindAndCheck(expectedUris, 1, NULL, NULL, "urn:open62541.test.server_register", NULL);
-}
-END_TEST
-
-START_TEST(Client_get_endpoints) {
-    UA_String  expectedEndpoints[1];
-    expectedEndpoints[0] = UA_STRING("opc.tcp://localhost:4840");
-
-    // general check if expected endpoints are returned
-    GetEndpointsAndCheck("opc.tcp://localhost:4840", NULL,expectedEndpoints, 1);
-
-    // check if filtering transport profile still returns the endpoint
-    GetEndpointsAndCheck("opc.tcp://localhost:4840",
-                         "http://opcfoundation.org/UA-Profile/Transport/uatcp-uasc-uabinary",
-                         expectedEndpoints, 1);
-
-    // filter transport profily by HTTPS, which should return no endpoint
-    GetEndpointsAndCheck("opc.tcp://localhost:4840",
-                         "http://opcfoundation.org/UA-Profile/Transport/https-uabinary", NULL, 0);
-}
-END_TEST
-
-#endif
-
-// Test if discovery server lists himself as registered server, before any other registration.
-START_TEST(Client_find_discovery) {
-    UA_String expectedUris[1];
-    expectedUris[0] = UA_STRING("urn:open62541.test.local_discovery_server");
-    FindAndCheck(expectedUris, 1, NULL, NULL, NULL, NULL);
-}
-END_TEST
-
-// Test if registered server is returned from LDS
-START_TEST(Client_find_registered) {
-    UA_String expectedUris[2];
-    expectedUris[0] = UA_STRING("urn:open62541.test.local_discovery_server");
-    expectedUris[1] = UA_STRING("urn:open62541.test.server_register");
-    FindAndCheck(expectedUris, 2, NULL, NULL, NULL, NULL);
-}
-END_TEST
-
-START_TEST(Util_start_lds) {
-    setup_lds();
-}
-END_TEST
-
-START_TEST(Util_stop_lds) {
-    teardown_lds();
-}
-END_TEST
-
-START_TEST(Util_wait_timeout) {
-    // wait until server is removed by timeout. Additionally wait a few seconds more to be sure.
-    UA_fakeSleep(100000 * checkWait);
-    UA_realSleep(1000);
-}
-END_TEST
-
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-START_TEST(Util_wait_mdns) {
-    UA_fakeSleep(5000);
-    UA_realSleep(5000);
-}
-END_TEST
-#endif
-
-START_TEST(Util_wait_startup) {
-    UA_fakeSleep(1000);
-    UA_realSleep(1000);
-}
-END_TEST
-
-START_TEST(Util_wait_retry) {
-    // first retry is after 2 seconds, then 4, so it should be enough to wait 3 seconds
-    UA_fakeSleep(3000);
-    UA_realSleep(3000);
-}
-END_TEST
-
-static Suite* testSuite_Client(void) {
-    Suite *s = suite_create("Register Server and Client");
-
-    TCase *tc_new_del = tcase_create("New Delete");
-    tcase_add_test(tc_new_del, Server_new_delete);
-    tcase_add_test(tc_new_del, Server_new_shutdown_delete);
-    suite_add_tcase(s,tc_new_del);
-
-    TCase *tc_register = tcase_create("RegisterServer");
-    tcase_add_unchecked_fixture(tc_register, setup_lds, teardown_lds);
-    tcase_add_unchecked_fixture(tc_register, setup_register, teardown_register);
-    tcase_add_test(tc_register, Server_register);
-    // register two times, just for fun
-    tcase_add_test(tc_register, Server_register);
-    tcase_add_test(tc_register, Server_unregister);
-    tcase_add_test(tc_register, Server_register_periodic);
-    tcase_add_test(tc_register, Server_unregister_periodic);
-    suite_add_tcase(s,tc_register);
-
-    TCase *tc_register_retry = tcase_create("RegisterServer Retry");
-    //tcase_add_unchecked_fixture(tc_register, setup_lds, teardown_lds);
-    tcase_add_unchecked_fixture(tc_register_retry, setup_register, teardown_register);
-    tcase_add_test(tc_register_retry, Server_register_periodic);
-    tcase_add_test(tc_register_retry, Util_wait_startup); // wait a bit to let first try run through
-    // now start LDS
-    tcase_add_test(tc_register_retry, Util_start_lds);
-    tcase_add_test(tc_register_retry, Util_wait_retry);
-    // check if there
-    tcase_add_test(tc_register_retry, Client_find_registered);
-    tcase_add_test(tc_register_retry, Server_unregister_periodic);
-    tcase_add_test(tc_register_retry, Client_find_discovery);
-    tcase_add_test(tc_register_retry, Util_stop_lds);
-
-    suite_add_tcase(s,tc_register_retry);
-
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-    TCase *tc_register_find = tcase_create("RegisterServer and FindServers");
-    tcase_add_unchecked_fixture(tc_register_find, setup_lds, teardown_lds);
-    tcase_add_unchecked_fixture(tc_register_find, setup_register, teardown_register);
-    tcase_add_test(tc_register_find, Client_find_discovery);
-    tcase_add_test(tc_register_find, Server_register);
-    tcase_add_test(tc_register_find, Client_find_registered);
-    tcase_add_test(tc_register_find, Util_wait_mdns);
-    tcase_add_test(tc_register_find, Client_find_on_network_registered);
-    tcase_add_test(tc_register_find, Client_find_filter);
-    tcase_add_test(tc_register_find, Client_get_endpoints);
-    tcase_add_test(tc_register_find, Client_filter_locale);
-    tcase_add_test(tc_register_find, Server_unregister);
-    tcase_add_test(tc_register_find, Client_find_discovery);
-    tcase_add_test(tc_register_find, Client_filter_discovery);
-    suite_add_tcase(s,tc_register_find);
-#endif
-
-    // register server again, then wait for timeout and auto unregister
-    TCase *tc_register_timeout = tcase_create("RegisterServer timeout");
-    tcase_add_unchecked_fixture(tc_register_timeout, setup_lds, teardown_lds);
-    tcase_add_unchecked_fixture(tc_register_timeout, setup_register, teardown_register);
-    tcase_set_timeout(tc_register_timeout, checkWait+2);
-    tcase_add_test(tc_register_timeout, Server_register);
-    tcase_add_test(tc_register_timeout, Client_find_registered);
-    tcase_add_test(tc_register_timeout, Util_wait_timeout);
-    tcase_add_test(tc_register_timeout, Client_find_discovery);
-#ifdef UA_ENABLE_DISCOVERY_SEMAPHORE
-    // now check if semaphore file works
-    tcase_add_test(tc_register_timeout, Server_register_semaphore);
-    tcase_add_test(tc_register_timeout, Client_find_registered);
-    tcase_add_test(tc_register_timeout, Server_unregister_semaphore);
-    tcase_add_test(tc_register_timeout, Util_wait_timeout);
-    tcase_add_test(tc_register_timeout, Client_find_discovery);
-#endif
-    suite_add_tcase(s,tc_register_timeout);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_local_monitored_item.c b/ext/open62541/tests/server/check_local_monitored_item.c
deleted file mode 100644
index cb606fa..0000000
--- a/ext/open62541/tests/server/check_local_monitored_item.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
- */
-
-#include <open62541/client_subscriptions.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-#include <open62541/types.h>
-
-#include <stddef.h>
-
-#include "check.h"
-#include "testing_clock.h"
-#include "testing_networklayers.h"
-
-#ifdef UA_ENABLE_STATUSCODE_DESCRIPTIONS
-    #define ASSERT_STATUSCODE(a,b) ck_assert_str_eq(UA_StatusCode_name(a),UA_StatusCode_name(b));
-#else
-    #define ASSERT_STATUSCODE(a,b) ck_assert_uint_eq((a),(b));
-#endif
-
-UA_Server *server;
-size_t callbackCount = 0;
-
-UA_NodeId parentNodeId;
-UA_NodeId parentReferenceNodeId;
-UA_NodeId outNodeId;
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    UA_StatusCode retval = UA_Server_run_startup(server);
-    ASSERT_STATUSCODE(retval, UA_STATUSCODE_GOOD);
-    /* Define the attribute of the uint32 variable node */
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    UA_UInt32 myUint32 = 40;
-    UA_Variant_setScalar(&attr.value, &myUint32, &UA_TYPES[UA_TYPES_UINT32]);
-    attr.description = UA_LOCALIZEDTEXT("en-US","the answer");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","the answer");
-    attr.dataType = UA_TYPES[UA_TYPES_UINT32].typeId;
-    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-
-    /* Add the variable node to the information model */
-    UA_NodeId uint32NodeId = UA_NODEID_STRING(1, "the.answer");
-    UA_QualifiedName uint32Name = UA_QUALIFIEDNAME(1, "the answer");
-    parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_NodeId_init(&outNodeId);
-    ASSERT_STATUSCODE(UA_Server_addVariableNode(server,
-                                                uint32NodeId,
-                                                parentNodeId,
-                                                parentReferenceNodeId,
-                                                uint32Name,
-                                                UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                                attr,
-                                                NULL,
-                                                &outNodeId), UA_STATUSCODE_GOOD);
-}
-
-static void teardown(void) {
-    /* cleanup */
-    UA_NodeId_deleteMembers(&parentNodeId);
-    UA_NodeId_deleteMembers(&parentReferenceNodeId);
-    UA_NodeId_deleteMembers(&outNodeId);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-static void
-dataChangeNotificationCallback(UA_Server *thisServer,
-                               UA_UInt32 monitoredItemId,
-                               void *monitoredItemContext,
-                               const UA_NodeId *nodeId,
-                               void *nodeContext,
-                               UA_UInt32 attributeId,
-                               const UA_DataValue *value)
-{
-    static UA_UInt32 lastValue = 100;
-    UA_UInt32 currentValue = *((UA_UInt32*)value->value.data);
-    ck_assert_uint_ne(lastValue, currentValue);
-    lastValue = currentValue;
-    callbackCount++;
-}
-
-START_TEST(Server_LocalMonitoredItem) {
-    ck_assert_uint_eq(callbackCount, 0);
-
-    UA_MonitoredItemCreateRequest monitorRequest =
-            UA_MonitoredItemCreateRequest_default(outNodeId);
-    monitorRequest.requestedParameters.samplingInterval = (double)100;
-    monitorRequest.monitoringMode = UA_MONITORINGMODE_REPORTING;
-    UA_MonitoredItemCreateResult result =
-            UA_Server_createDataChangeMonitoredItem(server,
-                                                    UA_TIMESTAMPSTORETURN_BOTH,
-                                                    monitorRequest,
-                                                    NULL,
-                                                    &dataChangeNotificationCallback);
-
-    ASSERT_STATUSCODE(result.statusCode, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(callbackCount, 1);
-
-    UA_UInt32 count = 0;
-    UA_Variant val;
-    UA_Variant_setScalar(&val, &count, &UA_TYPES[UA_TYPES_UINT32]);
-
-    for(size_t i = 0; i < 10; i++) {
-        count++;
-        UA_Server_writeValue(server, outNodeId, val);
-        UA_fakeSleep(100);
-        UA_Server_run_iterate(server, 1);
-    }
-    ck_assert_uint_eq(callbackCount, 11);
-}
-END_TEST
-
-static Suite* testSuite_Client(void)
-{
-    Suite *s = suite_create("Local Monitored Item");
-    TCase *tc_server = tcase_create("Local Monitored Item Basic");
-    tcase_add_checked_fixture(tc_server, setup, teardown);
-    tcase_add_test(tc_server, Server_LocalMonitoredItem);
-    suite_add_tcase(s, tc_server);
-
-    return s;
-}
-
-int main(void)
-{
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_monitoreditem_filter.c b/ext/open62541/tests/server/check_monitoreditem_filter.c
deleted file mode 100644
index f530b05..0000000
--- a/ext/open62541/tests/server/check_monitoreditem_filter.c
+++ /dev/null
@@ -1,897 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
- */
-
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include "client/ua_client_internal.h"
-
-#include <check.h>
-
-#include "testing_clock.h"
-#include "testing_networklayers.h"
-#include "thread_wrapper.h"
-
-UA_Server *server;
-UA_Boolean running;
-THREAD_HANDLE server_thread;
-
-UA_Client *client;
-UA_UInt32 subId;
-UA_NodeId parentNodeId;
-UA_NodeId parentReferenceNodeId;
-UA_NodeId outNodeId;
-
-UA_Boolean notificationReceived = false;
-UA_UInt32 countNotificationReceived = 0;
-UA_Double publishingInterval = 500.0;
-UA_DataValue lastValue;
-
-THREAD_CALLBACK(serverloop) {
-    while(running)
-        UA_Server_run_iterate(server, true);
-    return 0;
-}
-
-static void setup(void) {
-    UA_DataValue_init(&lastValue);
-    running = true;
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-    UA_Server_run_startup(server);
-    THREAD_CREATE(server_thread, serverloop);
-
-    /* Define the attribute of the double variable node */
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    UA_Double myDouble = 40.0;
-    UA_Variant_setScalar(&attr.value, &myDouble, &UA_TYPES[UA_TYPES_DOUBLE]);
-    attr.description = UA_LOCALIZEDTEXT("en-US","the answer");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","the answer");
-    attr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
-    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-    UA_NodeId doubleNodeId = UA_NODEID_STRING(1, "the.answer");
-    UA_QualifiedName doubleName = UA_QUALIFIEDNAME(1, "the answer");
-    parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_NodeId_init(&outNodeId);
-    ck_assert_uint_eq(UA_Server_addVariableNode(server,
-                                                doubleNodeId, parentNodeId,
-                                                parentReferenceNodeId,
-                                                doubleName,
-                                                UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                                attr,
-                                                NULL,
-                                                &outNodeId)
-                      , UA_STATUSCODE_GOOD);
-
-    /* Add a boolean node */
-    UA_Boolean myBool = false;
-    UA_Variant_setScalar(&attr.value, &myBool, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    attr.description = UA_LOCALIZEDTEXT("en-US","the answer bool");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","the answer bool");
-    attr.dataType = UA_TYPES[UA_TYPES_BOOLEAN].typeId;
-    ck_assert_uint_eq(UA_Server_addVariableNode(server,
-                                                UA_NODEID_STRING(1, "the.bool"),
-                                                parentNodeId, parentReferenceNodeId,
-                                                UA_QUALIFIEDNAME(1, "the bool"),
-                                                UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                                attr, NULL, NULL)
-                      , UA_STATUSCODE_GOOD);
-
-    client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_Client_recv = client->connection.recv;
-    client->connection.recv = UA_Client_recvTesting;
-
-    UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();
-    request.requestedMaxKeepAliveCount = 100;
-    UA_CreateSubscriptionResponse response = UA_Client_Subscriptions_create(client, request,
-                                                                            NULL, NULL, NULL);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    subId = response.subscriptionId;
-    notificationReceived = false;
-    countNotificationReceived = 0;
-}
-
-static void teardown(void) {
-    ck_assert_uint_eq(UA_Client_Subscriptions_deleteSingle(client, subId)
-                      , UA_STATUSCODE_GOOD);
-
-    /* cleanup */
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-    UA_NodeId_deleteMembers(&parentNodeId);
-    UA_NodeId_deleteMembers(&parentReferenceNodeId);
-    UA_NodeId_deleteMembers(&outNodeId);
-    running = false;
-    THREAD_JOIN(server_thread);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-    UA_DataValue_deleteMembers(&lastValue);
-}
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-
-static void
-dataChangeHandler(UA_Client *thisClient, UA_UInt32 thisSubId, void *subContext,
-                  UA_UInt32 monId, void *monContext, UA_DataValue *value) {
-    notificationReceived = true;
-    ++countNotificationReceived;
-    UA_DataValue_deleteMembers(&lastValue);
-    UA_DataValue_copy(value, &lastValue);
-}
-
-static UA_StatusCode
-setDouble(UA_Client *thisClient, UA_NodeId node, UA_Double value) {
-    UA_Variant variant;
-    UA_Variant_setScalar(&variant, &value, &UA_TYPES[UA_TYPES_DOUBLE]);
-    return UA_Client_writeValueAttribute(thisClient, node, &variant);
-}
-
-static UA_StatusCode waitForNotification(UA_UInt32 notifications, UA_UInt32 maxTries) {
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    for (UA_UInt32 i = 0; i < maxTries; ++i) {
-        UA_fakeSleep((UA_UInt32)publishingInterval + 100);
-        retval = UA_Client_run_iterate(client, (UA_UInt16)(publishingInterval + 100));
-        if (retval != UA_STATUSCODE_GOOD)
-            return retval;
-        if (countNotificationReceived == notifications)
-            return retval;
-    }
-    return retval;
-}
-static UA_Boolean fuzzyLastValueIsEqualTo(UA_Double value) {
-    double offset = 0.001;
-    if(lastValue.hasValue
-            && lastValue.value.type == &UA_TYPES[UA_TYPES_DOUBLE]) {
-        double lastDouble = *((UA_Double*)(lastValue.value.data));
-        if (lastDouble > value - offset && lastDouble < value + offset) {
-            return true;
-        }
-    }
-    return false;
-}
-
-START_TEST(Server_MonitoredItemsAbsoluteFilterSetLater) {
-    UA_DataValue_init(&lastValue);
-    /* define a monitored item with no filter */
-    UA_MonitoredItemCreateRequest item = UA_MonitoredItemCreateRequest_default(outNodeId);;
-    UA_UInt32 newMonitoredItemIds[1];
-    UA_Client_DataChangeNotificationCallback callbacks[1];
-    callbacks[0] = dataChangeHandler;
-    UA_Client_DeleteMonitoredItemCallback deleteCallbacks[1] = {NULL};
-    void *contexts[1];
-    contexts[0] = NULL;
-
-    UA_CreateMonitoredItemsRequest createRequest;
-    UA_CreateMonitoredItemsRequest_init(&createRequest);
-    createRequest.subscriptionId = subId;
-    createRequest.timestampsToReturn = UA_TIMESTAMPSTORETURN_BOTH;
-    createRequest.itemsToCreate = &item;
-    createRequest.itemsToCreateSize = 1;
-    UA_CreateMonitoredItemsResponse createResponse =
-       UA_Client_MonitoredItems_createDataChanges(client, createRequest, contexts,
-                                                   callbacks, deleteCallbacks);
-
-    ck_assert_uint_eq(createResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(createResponse.resultsSize, 1);
-    ck_assert_uint_eq(createResponse.results[0].statusCode, UA_STATUSCODE_GOOD);
-    newMonitoredItemIds[0] = createResponse.results[0].monitoredItemId;
-    UA_CreateMonitoredItemsResponse_deleteMembers(&createResponse);
-
-    // Do we get initial value ?
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 1);
-
-    ck_assert(fuzzyLastValueIsEqualTo(40.0));
-
-    // This should trigger because no filter
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 41.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(setDouble(client, outNodeId, 42.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(2, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 2);
-
-    ck_assert(fuzzyLastValueIsEqualTo(42.0));
-
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 43.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(setDouble(client, outNodeId, 44.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(2, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 2);
-
-    ck_assert(fuzzyLastValueIsEqualTo(44.0));
-
-    // set back to 40.0
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 40.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 1);
-
-    ck_assert(fuzzyLastValueIsEqualTo(40.0));
-
-    /* modify the monitored item with an absolute filter with deadbandvalue = 2.0 */
-    UA_MonitoredItemModifyRequest itemModify;
-    UA_MonitoredItemModifyRequest_init(&itemModify);
-
-    itemModify.monitoredItemId = newMonitoredItemIds[0];
-    itemModify.requestedParameters.samplingInterval = 250;
-    itemModify.requestedParameters.discardOldest = true;
-    itemModify.requestedParameters.queueSize = 1;
-    itemModify.requestedParameters.clientHandle = newMonitoredItemIds[0];
-    UA_DataChangeFilter filter;
-    UA_DataChangeFilter_init(&filter);
-    filter.trigger = UA_DATACHANGETRIGGER_STATUSVALUE;
-    filter.deadbandType = UA_DEADBANDTYPE_ABSOLUTE;
-    filter.deadbandValue = 2.0;
-    itemModify.requestedParameters.filter.encoding = UA_EXTENSIONOBJECT_DECODED;
-    itemModify.requestedParameters.filter.content.decoded.type = &UA_TYPES[UA_TYPES_DATACHANGEFILTER];
-    itemModify.requestedParameters.filter.content.decoded.data = &filter;
-
-    UA_ModifyMonitoredItemsRequest modifyRequest;
-    UA_ModifyMonitoredItemsRequest_init(&modifyRequest);
-    modifyRequest.subscriptionId = subId;
-    modifyRequest.timestampsToReturn = UA_TIMESTAMPSTORETURN_BOTH;
-    modifyRequest.itemsToModify = &itemModify;
-    modifyRequest.itemsToModifySize = 1;
-
-    UA_ModifyMonitoredItemsResponse modifyResponse =
-       UA_Client_MonitoredItems_modify(client, modifyRequest);
-
-    ck_assert_uint_eq(modifyResponse.resultsSize, 1);
-    ck_assert_uint_eq(modifyResponse.results[0].statusCode, UA_STATUSCODE_GOOD);
-
-    UA_ModifyMonitoredItemsResponse_deleteMembers(&modifyResponse);
-
-    // This should trigger only once for the new filter
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 39.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 1);
-    ck_assert_uint_eq(setDouble(client, outNodeId, 41.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(2, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(countNotificationReceived, 1);
-
-    ck_assert(fuzzyLastValueIsEqualTo(39.0));
-
-    // This should trigger once at 43.0.
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 43.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(setDouble(client, outNodeId, 44.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 1);
-
-    ck_assert(fuzzyLastValueIsEqualTo(43.0));
-
-    // remove monitored item
-    UA_DeleteMonitoredItemsRequest deleteRequest;
-    UA_DeleteMonitoredItemsRequest_init(&deleteRequest);
-    deleteRequest.subscriptionId = subId;
-    deleteRequest.monitoredItemIds = newMonitoredItemIds;
-    deleteRequest.monitoredItemIdsSize = 1;
-
-    UA_DeleteMonitoredItemsResponse deleteResponse =
-        UA_Client_MonitoredItems_delete(client, deleteRequest);
-
-    ck_assert_uint_eq(deleteResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(deleteResponse.resultsSize, 1);
-    ck_assert_uint_eq(deleteResponse.results[0], UA_STATUSCODE_GOOD);
-
-    UA_DeleteMonitoredItemsResponse_deleteMembers(&deleteResponse);
-
-}
-END_TEST
-
-START_TEST(Server_MonitoredItemsAbsoluteFilterSetOnCreateRemoveLater) {
-    UA_DataValue_init(&lastValue);
-    /* define a monitored item with absolute filter */
-    UA_MonitoredItemCreateRequest item = UA_MonitoredItemCreateRequest_default(outNodeId);;
-    UA_DataChangeFilter filter;
-    UA_DataChangeFilter_init(&filter);
-    filter.trigger = UA_DATACHANGETRIGGER_STATUSVALUE;
-    filter.deadbandType = UA_DEADBANDTYPE_ABSOLUTE;
-    filter.deadbandValue = 2.0;
-    item.requestedParameters.filter.encoding = UA_EXTENSIONOBJECT_DECODED;
-    item.requestedParameters.filter.content.decoded.type = &UA_TYPES[UA_TYPES_DATACHANGEFILTER];
-    item.requestedParameters.filter.content.decoded.data = &filter;
-    UA_UInt32 newMonitoredItemIds[1];
-    UA_Client_DataChangeNotificationCallback callbacks[1];
-    callbacks[0] = dataChangeHandler;
-    UA_Client_DeleteMonitoredItemCallback deleteCallbacks[1] = {NULL};
-    void *contexts[1];
-    contexts[0] = NULL;
-
-    UA_CreateMonitoredItemsRequest createRequest;
-    UA_CreateMonitoredItemsRequest_init(&createRequest);
-    createRequest.subscriptionId = subId;
-    createRequest.timestampsToReturn = UA_TIMESTAMPSTORETURN_BOTH;
-    createRequest.itemsToCreate = &item;
-    createRequest.itemsToCreateSize = 1;
-    UA_CreateMonitoredItemsResponse createResponse =
-       UA_Client_MonitoredItems_createDataChanges(client, createRequest, contexts,
-                                                   callbacks, deleteCallbacks);
-
-    ck_assert_uint_eq(createResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(createResponse.resultsSize, 1);
-    ck_assert_uint_eq(createResponse.results[0].statusCode, UA_STATUSCODE_GOOD);
-    newMonitoredItemIds[0] = createResponse.results[0].monitoredItemId;
-    UA_CreateMonitoredItemsResponse_deleteMembers(&createResponse);
-
-    // Do we get initial value ?
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 1);
-
-    ck_assert(fuzzyLastValueIsEqualTo(40.0));
-
-    // This should not trigger because of filter
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 41.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(0, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(setDouble(client, outNodeId, 42.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(0, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, false);
-    ck_assert_uint_eq(countNotificationReceived, 0);
-
-    ck_assert(fuzzyLastValueIsEqualTo(40.0));
-
-    // This should trigger once at 43.0.
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 43.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(setDouble(client, outNodeId, 44.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 1);
-
-    ck_assert(fuzzyLastValueIsEqualTo(43.0));
-
-    // set back to 40.0
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 40.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 1);
-
-    ck_assert(fuzzyLastValueIsEqualTo(40.0));
-
-    /* modify the monitored item with no filter */
-    UA_MonitoredItemModifyRequest itemModify;
-    UA_MonitoredItemModifyRequest_init(&itemModify);
-
-    itemModify.monitoredItemId = newMonitoredItemIds[0];
-    itemModify.requestedParameters.samplingInterval = 250;
-    itemModify.requestedParameters.discardOldest = true;
-    itemModify.requestedParameters.queueSize = 1;
-    itemModify.requestedParameters.clientHandle = newMonitoredItemIds[0];
-    UA_DataChangeFilter unsetfilter;
-    UA_DataChangeFilter_init(&unsetfilter);
-    unsetfilter.trigger = UA_DATACHANGETRIGGER_STATUSVALUE;
-    unsetfilter.deadbandType = UA_DEADBANDTYPE_NONE;
-    unsetfilter.deadbandValue = 0.0;
-    itemModify.requestedParameters.filter.encoding = UA_EXTENSIONOBJECT_DECODED;
-    itemModify.requestedParameters.filter.content.decoded.type = &UA_TYPES[UA_TYPES_DATACHANGEFILTER];
-    itemModify.requestedParameters.filter.content.decoded.data = &unsetfilter;
-
-    UA_ModifyMonitoredItemsRequest modifyRequest;
-    UA_ModifyMonitoredItemsRequest_init(&modifyRequest);
-    modifyRequest.subscriptionId = subId;
-    modifyRequest.timestampsToReturn = UA_TIMESTAMPSTORETURN_BOTH;
-    modifyRequest.itemsToModify = &itemModify;
-    modifyRequest.itemsToModifySize = 1;
-
-    UA_ModifyMonitoredItemsResponse modifyResponse =
-       UA_Client_MonitoredItems_modify(client, modifyRequest);
-
-    ck_assert_uint_eq(modifyResponse.resultsSize, 1);
-    ck_assert_uint_eq(modifyResponse.results[0].statusCode, UA_STATUSCODE_GOOD);
-
-    UA_ModifyMonitoredItemsResponse_deleteMembers(&modifyResponse);
-
-    // This should trigger because now we do not filter
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 41.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(setDouble(client, outNodeId, 42.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(2, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 2);
-
-    ck_assert(fuzzyLastValueIsEqualTo(42.0));
-
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 43.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(setDouble(client, outNodeId, 44.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(2, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 2);
-
-    ck_assert(fuzzyLastValueIsEqualTo(44.0));
-
-    // remove monitored item
-    UA_DeleteMonitoredItemsRequest deleteRequest;
-    UA_DeleteMonitoredItemsRequest_init(&deleteRequest);
-    deleteRequest.subscriptionId = subId;
-    deleteRequest.monitoredItemIds = newMonitoredItemIds;
-    deleteRequest.monitoredItemIdsSize = 1;
-
-    UA_DeleteMonitoredItemsResponse deleteResponse =
-        UA_Client_MonitoredItems_delete(client, deleteRequest);
-
-    ck_assert_uint_eq(deleteResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(deleteResponse.resultsSize, 1);
-    ck_assert_uint_eq(deleteResponse.results[0], UA_STATUSCODE_GOOD);
-
-    UA_DeleteMonitoredItemsResponse_deleteMembers(&deleteResponse);
-
-}
-END_TEST
-
-START_TEST(Server_MonitoredItemsPercentFilterSetLater) {
-    UA_DataValue_init(&lastValue);
-    /* define a monitored item with no filter */
-    UA_MonitoredItemCreateRequest item = UA_MonitoredItemCreateRequest_default(outNodeId);;
-    UA_UInt32 newMonitoredItemIds[1];
-    UA_Client_DataChangeNotificationCallback callbacks[1];
-    callbacks[0] = dataChangeHandler;
-    UA_Client_DeleteMonitoredItemCallback deleteCallbacks[1] = {NULL};
-    void *contexts[1];
-    contexts[0] = NULL;
-
-    UA_CreateMonitoredItemsRequest createRequest;
-    UA_CreateMonitoredItemsRequest_init(&createRequest);
-    createRequest.subscriptionId = subId;
-    createRequest.timestampsToReturn = UA_TIMESTAMPSTORETURN_BOTH;
-    createRequest.itemsToCreate = &item;
-    createRequest.itemsToCreateSize = 1;
-    UA_CreateMonitoredItemsResponse createResponse =
-       UA_Client_MonitoredItems_createDataChanges(client, createRequest, contexts,
-                                                   callbacks, deleteCallbacks);
-
-    ck_assert_uint_eq(createResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(createResponse.resultsSize, 1);
-    ck_assert_uint_eq(createResponse.results[0].statusCode, UA_STATUSCODE_GOOD);
-    newMonitoredItemIds[0] = createResponse.results[0].monitoredItemId;
-    UA_CreateMonitoredItemsResponse_deleteMembers(&createResponse);
-
-    // Do we get initial value ?
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 1);
-
-    ck_assert(fuzzyLastValueIsEqualTo(40.0));
-
-    // This should trigger because no filter
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 41.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(setDouble(client, outNodeId, 42.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(2, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 2);
-
-    ck_assert(fuzzyLastValueIsEqualTo(42.0));
-
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 43.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(setDouble(client, outNodeId, 44.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(2, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 2);
-
-    ck_assert(fuzzyLastValueIsEqualTo(44.0));
-
-    // set back to 40.0
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 40.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 1);
-
-    ck_assert(fuzzyLastValueIsEqualTo(40.0));
-
-    /* modify the monitored item with an percent filter with deadbandvalue = 2.0 */
-    UA_MonitoredItemModifyRequest itemModify;
-    UA_MonitoredItemModifyRequest_init(&itemModify);
-
-    itemModify.monitoredItemId = newMonitoredItemIds[0];
-    itemModify.requestedParameters.samplingInterval = 250;
-    itemModify.requestedParameters.discardOldest = true;
-    itemModify.requestedParameters.queueSize = 1;
-    itemModify.requestedParameters.clientHandle = newMonitoredItemIds[0];
-    UA_DataChangeFilter filter;
-    UA_DataChangeFilter_init(&filter);
-    filter.trigger = UA_DATACHANGETRIGGER_STATUSVALUE;
-    filter.deadbandType = UA_DEADBANDTYPE_PERCENT;
-    filter.deadbandValue = 2.0;
-    itemModify.requestedParameters.filter.encoding = UA_EXTENSIONOBJECT_DECODED;
-    itemModify.requestedParameters.filter.content.decoded.type = &UA_TYPES[UA_TYPES_DATACHANGEFILTER];
-    itemModify.requestedParameters.filter.content.decoded.data = &filter;
-
-    UA_ModifyMonitoredItemsRequest modifyRequest;
-    UA_ModifyMonitoredItemsRequest_init(&modifyRequest);
-    modifyRequest.subscriptionId = subId;
-    modifyRequest.timestampsToReturn = UA_TIMESTAMPSTORETURN_BOTH;
-    modifyRequest.itemsToModify = &itemModify;
-    modifyRequest.itemsToModifySize = 1;
-
-    UA_ModifyMonitoredItemsResponse modifyResponse =
-       UA_Client_MonitoredItems_modify(client, modifyRequest);
-
-    ck_assert_uint_eq(modifyResponse.resultsSize, 1);
-    ck_assert_uint_eq(modifyResponse.results[0].statusCode, UA_STATUSCODE_BADMONITOREDITEMFILTERUNSUPPORTED);
-
-    UA_ModifyMonitoredItemsResponse_deleteMembers(&modifyResponse);
-
-    // This should trigger because setting filter failed
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 41.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(setDouble(client, outNodeId, 42.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(2, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 2);
-
-    ck_assert(fuzzyLastValueIsEqualTo(42.0));
-
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 43.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(setDouble(client, outNodeId, 44.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(2, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 2);
-
-    ck_assert(fuzzyLastValueIsEqualTo(44.0));
-
-    // remove monitored item
-    UA_DeleteMonitoredItemsRequest deleteRequest;
-    UA_DeleteMonitoredItemsRequest_init(&deleteRequest);
-    deleteRequest.subscriptionId = subId;
-    deleteRequest.monitoredItemIds = newMonitoredItemIds;
-    deleteRequest.monitoredItemIdsSize = 1;
-
-    UA_DeleteMonitoredItemsResponse deleteResponse =
-        UA_Client_MonitoredItems_delete(client, deleteRequest);
-
-    ck_assert_uint_eq(deleteResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(deleteResponse.resultsSize, 1);
-    ck_assert_uint_eq(deleteResponse.results[0], UA_STATUSCODE_GOOD);
-
-    UA_DeleteMonitoredItemsResponse_deleteMembers(&deleteResponse);
-
-}
-END_TEST
-
-START_TEST(Server_MonitoredItemsNoFilter) {
-    UA_DataValue_init(&lastValue);
-    /* define a monitored item with an absolute filter with deadbandvalue = 2.0 */
-    UA_MonitoredItemCreateRequest item = UA_MonitoredItemCreateRequest_default(outNodeId);;
-    UA_UInt32 newMonitoredItemIds[1];
-    UA_Client_DataChangeNotificationCallback callbacks[1];
-    callbacks[0] = dataChangeHandler;
-    UA_Client_DeleteMonitoredItemCallback deleteCallbacks[1] = {NULL};
-    void *contexts[1];
-    contexts[0] = NULL;
-
-    UA_CreateMonitoredItemsRequest createRequest;
-    UA_CreateMonitoredItemsRequest_init(&createRequest);
-    createRequest.subscriptionId = subId;
-    createRequest.timestampsToReturn = UA_TIMESTAMPSTORETURN_BOTH;
-    createRequest.itemsToCreate = &item;
-    createRequest.itemsToCreateSize = 1;
-    UA_CreateMonitoredItemsResponse createResponse =
-       UA_Client_MonitoredItems_createDataChanges(client, createRequest, contexts,
-                                                   callbacks, deleteCallbacks);
-
-    ck_assert_uint_eq(createResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(createResponse.resultsSize, 1);
-    ck_assert_uint_eq(createResponse.results[0].statusCode, UA_STATUSCODE_GOOD);
-    newMonitoredItemIds[0] = createResponse.results[0].monitoredItemId;
-    UA_CreateMonitoredItemsResponse_deleteMembers(&createResponse);
-
-    // Do we get initial value ?
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 1);
-
-    ck_assert(fuzzyLastValueIsEqualTo(40.0));
-
-    // This should trigger because no filter
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 41.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(setDouble(client, outNodeId, 42.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(2, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived,  2);
-
-    ck_assert(fuzzyLastValueIsEqualTo(42.0));
-
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 43.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(setDouble(client, outNodeId, 44.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(2, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 2);
-
-    ck_assert(fuzzyLastValueIsEqualTo(44.0));
-
-    // remove monitored item
-    UA_DeleteMonitoredItemsRequest deleteRequest;
-    UA_DeleteMonitoredItemsRequest_init(&deleteRequest);
-    deleteRequest.subscriptionId = subId;
-    deleteRequest.monitoredItemIds = newMonitoredItemIds;
-    deleteRequest.monitoredItemIdsSize = 1;
-
-    UA_DeleteMonitoredItemsResponse deleteResponse =
-        UA_Client_MonitoredItems_delete(client, deleteRequest);
-
-    ck_assert_uint_eq(deleteResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(deleteResponse.resultsSize, 1);
-    ck_assert_uint_eq(deleteResponse.results[0], UA_STATUSCODE_GOOD);
-
-    UA_DeleteMonitoredItemsResponse_deleteMembers(&deleteResponse);
-}
-END_TEST
-
-/* Test if an absolute filter can be added for boolean variables */
-START_TEST(Server_MonitoredItemsAbsoluteFilterOnBool) {
-    UA_DataValue_init(&lastValue);
-    /* define a monitored item with an absolute filter with deadbandvalue = 2.0 */
-    UA_MonitoredItemCreateRequest item =
-        UA_MonitoredItemCreateRequest_default(UA_NODEID_STRING(1, "the.bool"));;
-    UA_DataChangeFilter filter;
-    UA_DataChangeFilter_init(&filter);
-    filter.trigger = UA_DATACHANGETRIGGER_STATUSVALUE;
-    filter.deadbandType = UA_DEADBANDTYPE_ABSOLUTE;
-    filter.deadbandValue = 0.5;
-    item.requestedParameters.filter.encoding = UA_EXTENSIONOBJECT_DECODED;
-    item.requestedParameters.filter.content.decoded.type = &UA_TYPES[UA_TYPES_DATACHANGEFILTER];
-    item.requestedParameters.filter.content.decoded.data = &filter;
-    UA_Client_DataChangeNotificationCallback callbacks[1];
-    callbacks[0] = dataChangeHandler;
-    UA_Client_DeleteMonitoredItemCallback deleteCallbacks[1] = {NULL};
-    void *contexts[1];
-    contexts[0] = NULL;
-
-    UA_CreateMonitoredItemsRequest createRequest;
-    UA_CreateMonitoredItemsRequest_init(&createRequest);
-    createRequest.subscriptionId = subId;
-    createRequest.timestampsToReturn = UA_TIMESTAMPSTORETURN_BOTH;
-    createRequest.itemsToCreate = &item;
-    createRequest.itemsToCreateSize = 1;
-    UA_CreateMonitoredItemsResponse createResponse =
-       UA_Client_MonitoredItems_createDataChanges(client, createRequest, contexts,
-                                                  callbacks, deleteCallbacks);
-
-    ck_assert_uint_eq(createResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(createResponse.resultsSize, 1);
-    ck_assert_uint_eq(createResponse.results[0].statusCode, UA_STATUSCODE_GOOD);
-    UA_CreateMonitoredItemsResponse_deleteMembers(&createResponse);
-}
-END_TEST
-
-START_TEST(Server_MonitoredItemsAbsoluteFilterSetOnCreate) {
-    UA_DataValue_init(&lastValue);
-    /* define a monitored item with an absolute filter with deadbandvalue = 2.0 */
-    UA_MonitoredItemCreateRequest item = UA_MonitoredItemCreateRequest_default(outNodeId);;
-    UA_DataChangeFilter filter;
-    UA_DataChangeFilter_init(&filter);
-    filter.trigger = UA_DATACHANGETRIGGER_STATUSVALUE;
-    filter.deadbandType = UA_DEADBANDTYPE_ABSOLUTE;
-    filter.deadbandValue = 2.0;
-    item.requestedParameters.filter.encoding = UA_EXTENSIONOBJECT_DECODED;
-    item.requestedParameters.filter.content.decoded.type = &UA_TYPES[UA_TYPES_DATACHANGEFILTER];
-    item.requestedParameters.filter.content.decoded.data = &filter;
-    UA_UInt32 newMonitoredItemIds[1];
-    UA_Client_DataChangeNotificationCallback callbacks[1];
-    callbacks[0] = dataChangeHandler;
-    UA_Client_DeleteMonitoredItemCallback deleteCallbacks[1] = {NULL};
-    void *contexts[1];
-    contexts[0] = NULL;
-
-    UA_CreateMonitoredItemsRequest createRequest;
-    UA_CreateMonitoredItemsRequest_init(&createRequest);
-    createRequest.subscriptionId = subId;
-    createRequest.timestampsToReturn = UA_TIMESTAMPSTORETURN_BOTH;
-    createRequest.itemsToCreate = &item;
-    createRequest.itemsToCreateSize = 1;
-    UA_CreateMonitoredItemsResponse createResponse =
-       UA_Client_MonitoredItems_createDataChanges(client, createRequest, contexts,
-                                                   callbacks, deleteCallbacks);
-
-    ck_assert_uint_eq(createResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(createResponse.resultsSize, 1);
-    ck_assert_uint_eq(createResponse.results[0].statusCode, UA_STATUSCODE_GOOD);
-    newMonitoredItemIds[0] = createResponse.results[0].monitoredItemId;
-    UA_CreateMonitoredItemsResponse_deleteMembers(&createResponse);
-
-    // Do we get initial value ?
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 1);
-
-    ck_assert(fuzzyLastValueIsEqualTo(40.0));
-
-    // This should not trigger because of filter
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 41.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(0, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(setDouble(client, outNodeId, 42.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(0, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, false);
-    ck_assert_uint_eq(countNotificationReceived, 0);
-
-    ck_assert(fuzzyLastValueIsEqualTo(40.0));
-
-    // This should trigger once at 43.0.
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(setDouble(client, outNodeId, 43.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(setDouble(client, outNodeId, 44.0), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(waitForNotification(1, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(countNotificationReceived, 1);
-
-    ck_assert(fuzzyLastValueIsEqualTo(43.0));
-
-    // remove monitored item
-    UA_DeleteMonitoredItemsRequest deleteRequest;
-    UA_DeleteMonitoredItemsRequest_init(&deleteRequest);
-    deleteRequest.subscriptionId = subId;
-    deleteRequest.monitoredItemIds = newMonitoredItemIds;
-    deleteRequest.monitoredItemIdsSize = 1;
-
-    UA_DeleteMonitoredItemsResponse deleteResponse =
-        UA_Client_MonitoredItems_delete(client, deleteRequest);
-
-    ck_assert_uint_eq(deleteResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(deleteResponse.resultsSize, 1);
-    ck_assert_uint_eq(deleteResponse.results[0], UA_STATUSCODE_GOOD);
-
-    UA_DeleteMonitoredItemsResponse_deleteMembers(&deleteResponse);
-
-}
-END_TEST
-
-START_TEST(Server_MonitoredItemsPercentFilterSetOnCreate) {
-    UA_DataValue_init(&lastValue);
-    /* define a monitored item with an percent filter with deadbandvalue = 2.0 */
-    UA_MonitoredItemCreateRequest item = UA_MonitoredItemCreateRequest_default(outNodeId);;
-    UA_DataChangeFilter filter;
-    UA_DataChangeFilter_init(&filter);
-    filter.trigger = UA_DATACHANGETRIGGER_STATUSVALUE;
-    filter.deadbandType = UA_DEADBANDTYPE_PERCENT;
-    filter.deadbandValue = 2.0;
-    item.requestedParameters.filter.encoding = UA_EXTENSIONOBJECT_DECODED;
-    item.requestedParameters.filter.content.decoded.type = &UA_TYPES[UA_TYPES_DATACHANGEFILTER];
-    item.requestedParameters.filter.content.decoded.data = &filter;
-    UA_UInt32 newMonitoredItemIds[1];
-    UA_Client_DataChangeNotificationCallback callbacks[1];
-    callbacks[0] = dataChangeHandler;
-    UA_Client_DeleteMonitoredItemCallback deleteCallbacks[1] = {NULL};
-    void *contexts[1];
-    contexts[0] = NULL;
-
-    UA_CreateMonitoredItemsRequest createRequest;
-    UA_CreateMonitoredItemsRequest_init(&createRequest);
-    createRequest.subscriptionId = subId;
-    createRequest.timestampsToReturn = UA_TIMESTAMPSTORETURN_BOTH;
-    createRequest.itemsToCreate = &item;
-    createRequest.itemsToCreateSize = 1;
-    UA_CreateMonitoredItemsResponse createResponse =
-       UA_Client_MonitoredItems_createDataChanges(client, createRequest, contexts,
-                                                   callbacks, deleteCallbacks);
-
-    ck_assert_uint_eq(createResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(createResponse.resultsSize, 1);
-    ck_assert_uint_eq(createResponse.results[0].statusCode, UA_STATUSCODE_BADMONITOREDITEMFILTERUNSUPPORTED);
-    newMonitoredItemIds[0] = createResponse.results[0].monitoredItemId;
-    UA_CreateMonitoredItemsResponse_deleteMembers(&createResponse);
-
-    // Do we get initial value ? (must fail)
-    notificationReceived = false;
-    countNotificationReceived = 0;
-    ck_assert_uint_eq(waitForNotification(0, 10), UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, false);
-    ck_assert_uint_eq(countNotificationReceived, 0);
-
-    // remove monitored item (must fail)
-    UA_DeleteMonitoredItemsRequest deleteRequest;
-    UA_DeleteMonitoredItemsRequest_init(&deleteRequest);
-    deleteRequest.subscriptionId = subId;
-    deleteRequest.monitoredItemIds = newMonitoredItemIds;
-    deleteRequest.monitoredItemIdsSize = 1;
-
-    UA_DeleteMonitoredItemsResponse deleteResponse =
-        UA_Client_MonitoredItems_delete(client, deleteRequest);
-
-    ck_assert_uint_eq(deleteResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(deleteResponse.resultsSize, 1);
-    ck_assert_uint_eq(deleteResponse.results[0], UA_STATUSCODE_BADMONITOREDITEMIDINVALID);
-
-    UA_DeleteMonitoredItemsResponse_deleteMembers(&deleteResponse);
-}
-END_TEST
-
-#endif /*UA_ENABLE_SUBSCRIPTIONS*/
-
-static Suite* testSuite_Client(void) {
-    Suite *s = suite_create("Server monitored item filter");
-    TCase *tc_server = tcase_create("Server monitored item filter Basic");
-    tcase_add_checked_fixture(tc_server, setup, teardown);
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    tcase_add_test(tc_server, Server_MonitoredItemsNoFilter);
-    tcase_add_test(tc_server, Server_MonitoredItemsAbsoluteFilterSetOnCreate);
-    tcase_add_test(tc_server, Server_MonitoredItemsAbsoluteFilterOnBool);
-    tcase_add_test(tc_server, Server_MonitoredItemsAbsoluteFilterSetLater);
-    tcase_add_test(tc_server, Server_MonitoredItemsAbsoluteFilterSetOnCreateRemoveLater);
-    tcase_add_test(tc_server, Server_MonitoredItemsPercentFilterSetOnCreate);
-    tcase_add_test(tc_server, Server_MonitoredItemsPercentFilterSetLater);
-#endif /* UA_ENABLE_SUBSCRIPTIONS */
-    suite_add_tcase(s, tc_server);
-
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_node_inheritance.c b/ext/open62541/tests/server/check_node_inheritance.c
deleted file mode 100644
index 186230f..0000000
--- a/ext/open62541/tests/server/check_node_inheritance.c
+++ /dev/null
@@ -1,418 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/server_config_default.h>
-
-#include "server/ua_server_internal.h"
-
-#include <check.h>
-
-UA_Server *server = NULL;
-UA_UInt32 valueToBeInherited = 42;
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-    UA_Server_run_startup(server);
-}
-
-static void teardown(void) {
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-/* finds the NodeId of a StateNumber child of a given node id */
-static void
-findChildId(UA_NodeId parentNode, UA_NodeId referenceType,
-            const UA_QualifiedName targetName, UA_NodeId *result) {
-    UA_RelativePathElement rpe;
-    UA_RelativePathElement_init(&rpe);
-    rpe.referenceTypeId = referenceType;
-    rpe.isInverse = false;
-    rpe.includeSubtypes = false;
-    rpe.targetName = targetName;
-
-    UA_BrowsePath bp;
-    UA_BrowsePath_init(&bp);
-    bp.startingNode = parentNode;
-    bp.relativePath.elementsSize = 1;
-    bp.relativePath.elements = &rpe;    //clion complains but is ok
-
-    UA_BrowsePathResult bpr = UA_Server_translateBrowsePathToNodeIds(server, &bp);
-    ck_assert_uint_eq(bpr.statusCode, UA_STATUSCODE_GOOD);
-
-    ck_assert(bpr.targetsSize > 0);
-
-    UA_NodeId_copy(&bpr.targets[0].targetId.nodeId, result);
-    UA_BrowsePathResult_deleteMembers(&bpr);
-}
-#endif
-
-
-
-START_TEST(Nodes_createCustomBrowseNameObjectType)
-{
-    /* Create a custom object type "CustomBrowseNameType" which has a
-     * "DefaultInstanceBrowseName" property. */
-
-    /* create new object type node which has a subcomponent of the type StateType */
-    UA_ObjectTypeAttributes otAttr = UA_ObjectTypeAttributes_default;
-    otAttr.displayName = UA_LOCALIZEDTEXT("", "CustomBrowseNameType");
-    otAttr.description = UA_LOCALIZEDTEXT("", "");
-    UA_StatusCode retval = UA_Server_addObjectTypeNode(server, UA_NODEID_NUMERIC(1, 7010),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                         UA_QUALIFIEDNAME(1, "CustomBrowseNameType"),
-                                         otAttr, NULL, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    // Now add a property "DefaultInstanceBrowseName"
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    attr.minimumSamplingInterval = 0.000000;
-    attr.userAccessLevel = 1;
-    attr.accessLevel = 1;
-    attr.valueRank = UA_VALUERANK_ANY;
-    attr.dataType = UA_NODEID_NUMERIC(0, UA_NS0ID_QUALIFIEDNAME);
-    UA_QualifiedName defaultInstanceBrowseName = UA_QUALIFIEDNAME(1, "MyCustomBrowseName");
-    UA_Variant_setScalar(&attr.value, &defaultInstanceBrowseName, &UA_TYPES[UA_TYPES_QUALIFIEDNAME]);
-    attr.displayName = UA_LOCALIZEDTEXT("", "DefaultInstanceBrowseName");
-    attr.description = UA_LOCALIZEDTEXT("", "");
-    attr.writeMask = 0;
-    attr.userWriteMask = 0;
-    retval = UA_Server_addVariableNode(server,
-                                       UA_NODEID_NUMERIC(1, 7011),
-                                       UA_NODEID_NUMERIC(1, 7010),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                                       UA_QUALIFIEDNAME(0, "DefaultInstanceBrowseName"),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_PROPERTYTYPE),
-                                       attr,
-                                       NULL, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-} END_TEST
-
-
-
-START_TEST(Nodes_checkDefaultInstanceBrowseName) {
-    /* create an object/instance of the CustomDemoType.
-     * This should fail if we do not specifiy a browse name.
-     * CustomDemoType does not have a DefaultInstanceBrowseName
-     * */
-    UA_ObjectAttributes oAttr2 = UA_ObjectAttributes_default;
-    oAttr2.displayName = UA_LOCALIZEDTEXT("", "DemoCustomBrowseNameFail");
-    oAttr2.description = UA_LOCALIZEDTEXT("", "");
-    UA_QualifiedName nullName;
-    UA_QualifiedName_init(&nullName);
-    UA_StatusCode retval =
-            UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, 7020),
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                    nullName, UA_NODEID_NUMERIC(1, 6010),
-                                    oAttr2, NULL, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADBROWSENAMEINVALID);
-
-    /* create an object/instance of the CustomBrowseNameType and set the default browse name */
-    oAttr2 = UA_ObjectAttributes_default;
-    oAttr2.displayName = UA_LOCALIZEDTEXT("", "DemoCustomBrowseName");
-    oAttr2.description = UA_LOCALIZEDTEXT("", "");
-    UA_QualifiedName_init(&nullName);
-    retval =
-            UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, 7021),
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                    nullName, UA_NODEID_NUMERIC(1, 7010),
-                                    oAttr2, NULL, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_QualifiedName receivedBrowseName;
-    UA_QualifiedName_init(&receivedBrowseName);
-
-    UA_QualifiedName defaultInstanceBrowseName = UA_QUALIFIEDNAME(1, "MyCustomBrowseName");
-
-    retval = UA_Server_readBrowseName(server, UA_NODEID_NUMERIC(1, 7021), &receivedBrowseName);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert(UA_QualifiedName_equal(&receivedBrowseName, &defaultInstanceBrowseName) == true);
-    UA_QualifiedName_clear(&receivedBrowseName);
-
-    /* create an object/instance of the CustomBrowseNameType and set a custom browse name */
-    oAttr2 = UA_ObjectAttributes_default;
-    oAttr2.displayName = UA_LOCALIZEDTEXT("", "DemoCustomBrowseName");
-    oAttr2.description = UA_LOCALIZEDTEXT("", "");
-    UA_QualifiedName overriddenBrowseName = UA_QUALIFIEDNAME(1, "MyOverriddenBrowseName");
-    retval =
-            UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, 7022),
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                    overriddenBrowseName, UA_NODEID_NUMERIC(1, 7010),
-                                    oAttr2, NULL, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_QualifiedName_init(&receivedBrowseName);
-
-    retval = UA_Server_readBrowseName(server, UA_NODEID_NUMERIC(1, 7022), &receivedBrowseName);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert(UA_QualifiedName_equal(&receivedBrowseName, &overriddenBrowseName) == true);
-    UA_QualifiedName_clear(&receivedBrowseName);
-}
-END_TEST
-
-START_TEST(Nodes_createCustomStateType) {
-    // Create a type "CustomStateType" with a variable "CustomStateNumber" as property
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-
-    UA_ObjectTypeAttributes attrObject = UA_ObjectTypeAttributes_default;
-    attrObject.displayName = UA_LOCALIZEDTEXT("", "CustomStateType");
-    attrObject.description = UA_LOCALIZEDTEXT("", "");
-    attrObject.writeMask = 0;
-    attrObject.userWriteMask = 0;
-    retval = UA_Server_addObjectTypeNode(server,
-                                         UA_NODEID_NUMERIC(1, 6000),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                         UA_QUALIFIEDNAME(1, "CustomStateType"),
-                                         attrObject,
-                                         NULL, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    // Now add a property "StateNumber"
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    attr.minimumSamplingInterval = 0.000000;
-    attr.userAccessLevel = 1;
-    attr.accessLevel = 1;
-    attr.valueRank = UA_VALUERANK_ANY;
-    attr.dataType = UA_NODEID_NUMERIC(0, UA_NS0ID_UINT32);
-    UA_UInt32 val = 0;
-    UA_Variant_setScalar(&attr.value, &val, &UA_TYPES[UA_TYPES_UINT32]);
-    attr.displayName = UA_LOCALIZEDTEXT("", "CustomStateNumber");
-    attr.description = UA_LOCALIZEDTEXT("", "");
-    attr.writeMask = 0;
-    attr.userWriteMask = 0;
-    retval = UA_Server_addVariableNode(server,
-                                       UA_NODEID_NUMERIC(1, 6001),
-                                       UA_NODEID_NUMERIC(1, 6000),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                                       UA_QUALIFIEDNAME(1, "CustomStateNumber"),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_PROPERTYTYPE),
-                                       attr,
-                                       NULL, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-/* Minimal nodeset does not contain the modelling rule mandatory */
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-    retval = UA_Server_addReference(server, UA_NODEID_NUMERIC(1, 6001),
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE),
-                                    UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORY),
-                                    true);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-#endif
-}
-END_TEST
-
-
-START_TEST(Nodes_createCustomObjectType) {
-    /* Create a custom object type "CustomDemoType" which has a
-     * "CustomStateType" component */
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-
-    /* create new object type node which has a subcomponent of the type StateType */
-    UA_ObjectTypeAttributes otAttr = UA_ObjectTypeAttributes_default;
-    otAttr.displayName = UA_LOCALIZEDTEXT("", "CustomDemoType");
-    otAttr.description = UA_LOCALIZEDTEXT("", "");
-    retval = UA_Server_addObjectTypeNode(server, UA_NODEID_NUMERIC(1, 6010),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                         UA_QUALIFIEDNAME(1, "CustomDemoType"),
-                                         otAttr, NULL, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-    oAttr.displayName = UA_LOCALIZEDTEXT("", "State");
-    oAttr.description = UA_LOCALIZEDTEXT("", "");
-    retval = UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, 6011), UA_NODEID_NUMERIC(1, 6010),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                     UA_QUALIFIEDNAME(1, "State"),
-                                     UA_NODEID_NUMERIC(1, 6000),
-                                     oAttr, NULL, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-/* Minimal nodeset does not contain the modelling rule mandatory */
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-    /* modelling rule is mandatory so it will be inherited for the object
-     * created from CustomDemoType */
-    retval = UA_Server_addReference(server, UA_NODEID_NUMERIC(1, 6011),
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE),
-                                    UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORY),
-                                    true);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-
-    /* assign a default value to the attribute "StateNumber" inside the state
-     * attribute (part of the MyDemoType) */
-    UA_Variant stateNum;
-    UA_Variant_init(&stateNum);
-    UA_Variant_setScalar(&stateNum, &valueToBeInherited, &UA_TYPES[UA_TYPES_UINT32]);
-    UA_NodeId childID;
-    findChildId(UA_NODEID_NUMERIC(1, 6011), UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                UA_QUALIFIEDNAME(1, "CustomStateNumber"), &childID);
-    ck_assert(!UA_NodeId_isNull(&childID));
-
-    retval = UA_Server_writeValue(server, childID, stateNum);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-#endif
-
-}
-END_TEST
-
-START_TEST(Nodes_createInheritedObject) {
-    /* create an object/instance of the demo type */
-    UA_ObjectAttributes oAttr2 = UA_ObjectAttributes_default;
-    oAttr2.displayName = UA_LOCALIZEDTEXT("", "Demo");
-    oAttr2.description = UA_LOCALIZEDTEXT("", "");
-    UA_StatusCode retval =
-        UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, 6020),
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                UA_QUALIFIEDNAME(1, "Demo"), UA_NODEID_NUMERIC(1, 6010),
-                                oAttr2, NULL, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(Nodes_checkInheritedValue) {
-/* Minimal nodeset does not contain the modelling rule mandatory, therefore there is no CustomStateNumber */
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-    UA_NodeId childState;
-    findChildId(UA_NODEID_NUMERIC(1, 6020),
-                UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                UA_QUALIFIEDNAME(1, "State"), &childState);
-    ck_assert(!UA_NodeId_isNull(&childState));
-    UA_NodeId childNumber;
-    findChildId(childState, UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
-                UA_QUALIFIEDNAME(1, "CustomStateNumber"), &childNumber);
-    ck_assert(!UA_NodeId_isNull(&childNumber));
-
-    UA_Variant inheritedValue;
-    UA_Variant_init(&inheritedValue);
-    UA_Server_readValue(server, childNumber, &inheritedValue);
-    ck_assert(inheritedValue.type == &UA_TYPES[UA_TYPES_UINT32]);
-
-    UA_UInt32 *value = (UA_UInt32 *) inheritedValue.data;
-
-    ck_assert_int_eq(*value, valueToBeInherited);
-    UA_Variant_deleteMembers(&inheritedValue);
-#endif
-}
-END_TEST
-
-
-
-START_TEST(Nodes_createCustomInterfaceType) {
-/* Minimal nodeset does not have the Interface definitions */
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-    /* Create a custom interface type */
-
-    UA_ObjectTypeAttributes otAttr = UA_ObjectTypeAttributes_default;
-    otAttr.displayName = UA_LOCALIZEDTEXT("", "ILocationType");
-    otAttr.description = UA_LOCALIZEDTEXT("", "");
-    UA_StatusCode retval = UA_Server_addObjectTypeNode(server, UA_NODEID_NUMERIC(1, 8000),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_BASEINTERFACETYPE),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                         UA_QUALIFIEDNAME(1, "ILocationType"),
-                                         otAttr, NULL, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-    oAttr.displayName = UA_LOCALIZEDTEXT("", "InterfaceChild");
-    oAttr.description = UA_LOCALIZEDTEXT("", "");
-    retval = UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, 8001), UA_NODEID_NUMERIC(1, 8000),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                     UA_QUALIFIEDNAME(1, "InterfaceChild"),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                     oAttr, NULL, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Server_addReference(server, UA_NODEID_NUMERIC(1, 8001),
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE),
-                                    UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORY),
-                                    true);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-
-    /* create an object type which has the interface */
-    otAttr = UA_ObjectTypeAttributes_default;
-    otAttr.displayName = UA_LOCALIZEDTEXT("", "ObjectWithLocation");
-    otAttr.description = UA_LOCALIZEDTEXT("", "");
-    retval = UA_Server_addObjectTypeNode(server, UA_NODEID_NUMERIC(1, 8002),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                         UA_QUALIFIEDNAME(1, "ObjectWithLocation"),
-                                         otAttr, NULL, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    retval = UA_Server_addReference(server, UA_NODEID_NUMERIC(1, 8002), UA_NODEID_NUMERIC(0, UA_NS0ID_HASINTERFACE), UA_EXPANDEDNODEID_NUMERIC(1, 8000), true);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-#endif
-}
-END_TEST
-
-
-
-START_TEST(Nodes_createObjectWithInterface) {
-
-/* Minimal nodeset does not have the Interface definitions */
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-    /* create an object/instance of the demo type */
-    UA_ObjectAttributes oAttr2 = UA_ObjectAttributes_default;
-    oAttr2.displayName = UA_LOCALIZEDTEXT("", "ObjectInstanceOfInterface");
-    oAttr2.description = UA_LOCALIZEDTEXT("", "");
-    UA_StatusCode retval =
-            UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, 8020),
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                    UA_QUALIFIEDNAME(1, "ObjectInstanceOfInterface"), UA_NODEID_NUMERIC(1, 8002),
-                                    oAttr2, NULL, NULL);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-
-    /* Check that object has inherited the interface children */
-
-    UA_NodeId childId;
-    findChildId(UA_NODEID_NUMERIC(1, 8020),
-                UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                UA_QUALIFIEDNAME(1, "InterfaceChild"), &childId);
-    ck_assert(!UA_NodeId_isNull(&childId));
-#endif
-}
-END_TEST
-
-static Suite *testSuite_Client(void) {
-    Suite *s = suite_create("Node inheritance");
-    TCase *tc_inherit_subtype = tcase_create("Inherit subtype value");
-    tcase_add_unchecked_fixture(tc_inherit_subtype, setup, teardown);
-    tcase_add_test(tc_inherit_subtype, Nodes_createCustomStateType);
-    tcase_add_test(tc_inherit_subtype, Nodes_createCustomObjectType);
-    tcase_add_test(tc_inherit_subtype, Nodes_createInheritedObject);
-    tcase_add_test(tc_inherit_subtype, Nodes_checkInheritedValue);
-    tcase_add_test(tc_inherit_subtype, Nodes_createCustomBrowseNameObjectType);
-    tcase_add_test(tc_inherit_subtype, Nodes_checkDefaultInstanceBrowseName);
-    suite_add_tcase(s, tc_inherit_subtype);
-    TCase *tc_interface_addin = tcase_create("Interfaces and Addins");
-    tcase_add_unchecked_fixture(tc_interface_addin, setup, teardown);
-    tcase_add_test(tc_interface_addin, Nodes_createCustomInterfaceType);
-    tcase_add_test(tc_interface_addin, Nodes_createObjectWithInterface);
-    suite_add_tcase(s, tc_interface_addin);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_nodestore.c b/ext/open62541/tests/server/check_nodestore.c
deleted file mode 100644
index ac4b27a..0000000
--- a/ext/open62541/tests/server/check_nodestore.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/types.h>
-#include <open62541/util.h>
-#include <open62541/plugin/nodestore.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-
-#include "check.h"
-#include "ziptree.h"
-
-/* container_of */
-#define container_of(ptr, type, member) \
-    (type *)((uintptr_t)ptr - offsetof(type,member))
-
-#if UA_MULTITHREADING >= 200
-#include <pthread.h>
-#endif
-
-/* Dirty redifinition from ua_nodestore_default.c to check that all nodes were
- * released */
-struct NodeEntry;
-typedef struct NodeEntry NodeEntry;
-
-struct NodeEntry {
-    ZIP_ENTRY(NodeEntry) zipfields;
-    UA_UInt32 nodeIdHash;
-    UA_UInt16 refCount; /* How many consumers have a reference to the node? */
-    UA_Boolean deleted; /* Node was marked as deleted and can be deleted when refCount == 0 */
-    NodeEntry *orig;    /* If a copy is made to replace a node, track that we
-                         * replace only the node from which the copy was made.
-                         * Important for concurrent operations. */
-    UA_NodeId nodeId; /* This is actually a UA_Node that also starts with a NodeId */
-};
-
-static void checkAllReleased(void *context, const UA_Node* node) {
-    NodeEntry *entry = container_of(node, NodeEntry, nodeId);
-    ck_assert_int_eq(entry->refCount, 0); /* The count is increased when the visited node is checked out */
-}
-
-void *nsCtx;
-
-static void setup(void) {
-    UA_Nodestore_new(&nsCtx);
-}
-
-static void teardown(void) {
-    UA_Nodestore_iterate(nsCtx, checkAllReleased, NULL);
-    UA_Nodestore_delete(nsCtx);
-}
-
-static int zeroCnt = 0;
-static int visitCnt = 0;
-static void checkZeroVisitor(void *context, const UA_Node* node) {
-    visitCnt++;
-    if (node == NULL) zeroCnt++;
-}
-
-static UA_Node* createNode(UA_Int16 nsid, UA_Int32 id) {
-    UA_Node *p = UA_Nodestore_newNode(nsCtx, UA_NODECLASS_VARIABLE);
-    p->nodeId.identifierType = UA_NODEIDTYPE_NUMERIC;
-    p->nodeId.namespaceIndex = nsid;
-    p->nodeId.identifier.numeric = id;
-    p->nodeClass = UA_NODECLASS_VARIABLE;
-    return p;
-}
-
-START_TEST(replaceExistingNode) {
-    UA_Node* n1 = createNode(0,2253);
-    UA_Nodestore_insertNode(nsCtx, n1, NULL);
-    UA_NodeId in1 = UA_NODEID_NUMERIC(0, 2253);
-    UA_Node* n2;
-    UA_Nodestore_getNodeCopy(nsCtx, &in1, &n2);
-    UA_StatusCode retval = UA_Nodestore_replaceNode(nsCtx, n2);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(replaceOldNode) {
-    UA_Node* n1 = createNode(0,2253);
-    UA_Nodestore_insertNode(nsCtx, n1, NULL);
-    UA_NodeId in1 = UA_NODEID_NUMERIC(0,2253);
-    UA_Node* n2;
-    UA_Node* n3;
-    UA_Nodestore_getNodeCopy(nsCtx, &in1, &n2);
-    UA_Nodestore_getNodeCopy(nsCtx, &in1, &n3);
-
-    /* shall succeed */
-    UA_StatusCode retval = UA_Nodestore_replaceNode(nsCtx, n2);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    /* shall fail */
-    retval = UA_Nodestore_replaceNode(nsCtx, n3);
-    ck_assert_int_ne(retval, UA_STATUSCODE_GOOD);
-}
-END_TEST
-
-START_TEST(findNodeInUA_NodeStoreWithSingleEntry) {
-    UA_Node* n1 = createNode(0,2253);
-    UA_Nodestore_insertNode(nsCtx, n1, NULL);
-    UA_NodeId in1 = UA_NODEID_NUMERIC(0,2253);
-    const UA_Node* nr = UA_Nodestore_getNode(nsCtx, &in1);
-    ck_assert_int_eq((uintptr_t)n1, (uintptr_t)nr);
-    UA_Nodestore_releaseNode(nsCtx, nr);
-}
-END_TEST
-
-START_TEST(failToFindNodeInOtherUA_NodeStore) {
-    UA_Node* n1 = createNode(0,2255);
-    UA_Nodestore_insertNode(nsCtx, n1, NULL);
-    UA_NodeId in1 = UA_NODEID_NUMERIC(1, 2255);
-    const UA_Node* nr = UA_Nodestore_getNode(nsCtx, &in1);
-    ck_assert_int_eq((uintptr_t)nr, 0);
-}
-END_TEST
-
-START_TEST(findNodeInUA_NodeStoreWithSeveralEntries) {
-    UA_Node* n1 = createNode(0,2253);
-    UA_Nodestore_insertNode(nsCtx, n1, NULL);
-    UA_Node* n2 = createNode(0,2255);
-    UA_Nodestore_insertNode(nsCtx, n2, NULL);
-    UA_Node* n3 = createNode(0,2257);
-    UA_Nodestore_insertNode(nsCtx, n3, NULL);
-    UA_Node* n4 = createNode(0,2200);
-    UA_Nodestore_insertNode(nsCtx, n4, NULL);
-    UA_Node* n5 = createNode(0,1);
-    UA_Nodestore_insertNode(nsCtx, n5, NULL);
-    UA_Node* n6 = createNode(0,12);
-    UA_Nodestore_insertNode(nsCtx, n6, NULL);
-
-    UA_NodeId in3 = UA_NODEID_NUMERIC(0, 2257);
-    const UA_Node* nr = UA_Nodestore_getNode(nsCtx, &in3);
-    ck_assert_int_eq((uintptr_t)nr, (uintptr_t)n3);
-    UA_Nodestore_releaseNode(nsCtx, nr);
-}
-END_TEST
-
-START_TEST(iterateOverUA_NodeStoreShallNotVisitEmptyNodes) {
-    UA_Node* n1 = createNode(0,2253);
-    UA_Nodestore_insertNode(nsCtx, n1, NULL);
-    UA_Node* n2 = createNode(0,2255);
-    UA_Nodestore_insertNode(nsCtx, n2, NULL);
-    UA_Node* n3 = createNode(0,2257);
-    UA_Nodestore_insertNode(nsCtx, n3, NULL);
-    UA_Node* n4 = createNode(0,2200);
-    UA_Nodestore_insertNode(nsCtx, n4, NULL);
-    UA_Node* n5 = createNode(0,1);
-    UA_Nodestore_insertNode(nsCtx, n5, NULL);
-    UA_Node* n6 = createNode(0,12);
-    UA_Nodestore_insertNode(nsCtx, n6, NULL);
-
-    zeroCnt = 0;
-    visitCnt = 0;
-    UA_Nodestore_iterate(nsCtx, checkZeroVisitor, NULL);
-    ck_assert_int_eq(zeroCnt, 0);
-    ck_assert_int_eq(visitCnt, 6);
-}
-END_TEST
-
-START_TEST(findNodeInExpandedNamespace) {
-    for(UA_UInt32 i = 0; i < 200; i++) {
-        UA_Node* n = createNode(0,i);
-        UA_Nodestore_insertNode(nsCtx, n, NULL);
-    }
-    // when
-    UA_Node *n2 = createNode(0,25);
-    const UA_Node* nr = UA_Nodestore_getNode(nsCtx, &n2->nodeId);
-    ck_assert_int_eq(nr->nodeId.identifier.numeric, n2->nodeId.identifier.numeric);
-    UA_Nodestore_releaseNode(nsCtx, nr);
-    UA_Nodestore_deleteNode(nsCtx, n2);
-}
-END_TEST
-
-START_TEST(iterateOverExpandedNamespaceShallNotVisitEmptyNodes) {
-    for(UA_UInt32 i = 0; i < 200; i++) {
-        UA_Node* n = createNode(0,i+1);
-        UA_Nodestore_insertNode(nsCtx, n, NULL);
-    }
-    // when
-    zeroCnt = 0;
-    visitCnt = 0;
-    UA_Nodestore_iterate(nsCtx, checkZeroVisitor, NULL);
-    // then
-    ck_assert_int_eq(zeroCnt, 0);
-    ck_assert_int_eq(visitCnt, 200);
-}
-END_TEST
-
-START_TEST(failToFindNonExistentNodeInUA_NodeStoreWithSeveralEntries) {
-    UA_Node* n1 = createNode(0,2253);
-    UA_Nodestore_insertNode(nsCtx, n1, NULL);
-    UA_Node* n2 = createNode(0,2255);
-    UA_Nodestore_insertNode(nsCtx, n2, NULL);
-    UA_Node* n3 = createNode(0,2257);
-    UA_Nodestore_insertNode(nsCtx, n3, NULL);
-    UA_Node* n4 = createNode(0,2200);
-    UA_Nodestore_insertNode(nsCtx, n4, NULL);
-    UA_Node* n5 = createNode(0,1);
-    UA_Nodestore_insertNode(nsCtx, n5, NULL);
-
-    UA_NodeId id = UA_NODEID_NUMERIC(0, 12);
-    const UA_Node* nr = UA_Nodestore_getNode(nsCtx, &id);
-    ck_assert_int_eq((uintptr_t)nr, 0);
-}
-END_TEST
-
-/************************************/
-/* Performance Profiling Test Cases */
-/************************************/
-
-#if UA_MULTITHREADING >= 200
-struct UA_NodeStoreProfileTest {
-    UA_Int32 min_val;
-    UA_Int32 max_val;
-    UA_Int32 rounds;
-};
-
-static void *profileGetThread(void *arg) {
-    struct UA_NodeStoreProfileTest *test = (struct UA_NodeStoreProfileTest*) arg;
-    UA_NodeId id;
-    UA_NodeId_init(&id);
-    UA_Int32 max_val = test->max_val;
-    for(UA_Int32 x = 0; x<test->rounds; x++) {
-        for(UA_Int32 i=test->min_val; i<max_val; i++) {
-            id.identifier.numeric = i+1;
-            const UA_Node *n = UA_Nodestore_getNode(nsCtx, &id);
-            UA_Nodestore_releaseNode(nsCtx, n);
-        }
-    }
-    return NULL;
-}
-#endif
-
-#define N 1000 /* make bigger to test */
-
-START_TEST(profileGetDelete) {
-    clock_t begin, end;
-    begin = clock();
-
-    for(UA_UInt32 i = 0; i < N; i++) {
-        UA_Node *n = createNode(0,i+1);
-        UA_Nodestore_insertNode(nsCtx, n, NULL);
-    }
-
-#if UA_MULTITHREADING >= 200
-#define THREADS 4
-    pthread_t t[THREADS];
-    struct UA_NodeStoreProfileTest p[THREADS];
-    for (int i = 0; i < THREADS; i++) {
-        p[i] = (struct UA_NodeStoreProfileTest){i*(N/THREADS), (i+1)*(N/THREADS), 50};
-        pthread_create(&t[i], NULL, profileGetThread, &p[i]);
-    }
-    for (int i = 0; i < THREADS; i++)
-        pthread_join(t[i], NULL);
-    end = clock();
-    printf("Time for %d create/get/delete on %d threads in a namespace: %fs.\n", N, THREADS, (double)(end - begin) / CLOCKS_PER_SEC);
-#else
-    UA_NodeId id = UA_NODEID_NULL;
-    for(size_t i = 0; i < N; i++) {
-        id.identifier.numeric = (UA_UInt32)i+1;
-        const UA_Node *node = UA_Nodestore_getNode(nsCtx, &id);
-        UA_Nodestore_releaseNode(nsCtx, node);
-    }
-    end = clock();
-    printf("Time for single-threaded %d create/get/delete in a namespace: %fs.\n", N,
-           (double)(end - begin) / CLOCKS_PER_SEC);
-#endif
-}
-END_TEST
-
-static Suite * namespace_suite (void) {
-    Suite *s = suite_create ("UA_NodeStore");
-
-    TCase* tc_find = tcase_create ("Find");
-    tcase_add_checked_fixture(tc_find, setup, teardown);
-    tcase_add_test (tc_find, findNodeInUA_NodeStoreWithSingleEntry);
-    tcase_add_test (tc_find, findNodeInUA_NodeStoreWithSeveralEntries);
-    tcase_add_test (tc_find, findNodeInExpandedNamespace);
-    tcase_add_test (tc_find, failToFindNonExistentNodeInUA_NodeStoreWithSeveralEntries);
-    tcase_add_test (tc_find, failToFindNodeInOtherUA_NodeStore);
-    suite_add_tcase (s, tc_find);
-
-    TCase *tc_replace = tcase_create("Replace");
-    tcase_add_checked_fixture(tc_replace, setup, teardown);
-    tcase_add_test (tc_replace, replaceExistingNode);
-    tcase_add_test (tc_replace, replaceOldNode);
-    suite_add_tcase (s, tc_replace);
-
-    TCase* tc_iterate = tcase_create ("Iterate");
-    tcase_add_checked_fixture(tc_iterate, setup, teardown);
-    tcase_add_test (tc_iterate, iterateOverUA_NodeStoreShallNotVisitEmptyNodes);
-    tcase_add_test (tc_iterate, iterateOverExpandedNamespaceShallNotVisitEmptyNodes);
-    suite_add_tcase (s, tc_iterate);
-    
-    TCase* tc_profile = tcase_create ("Profile");
-    tcase_add_checked_fixture(tc_profile, setup, teardown);
-    tcase_add_test (tc_profile, profileGetDelete);
-    suite_add_tcase (s, tc_profile);
-
-    return s;
-}
-
-
-int main (void) {
-    int number_failed = 0;
-    Suite *s = namespace_suite();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr,CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    number_failed += srunner_ntests_failed (sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_server.c b/ext/open62541/tests/server/check_server.c
deleted file mode 100644
index 5e2b018..0000000
--- a/ext/open62541/tests/server/check_server.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright 2019 (c) basysKom GmbH <opensource@basyskom.com> (Author: Frank Meerkötter)
- */
-
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-#include <open62541/types.h>
-
-#include "server/ua_server_internal.h"
-#include "server/ua_services.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-
-#include "check.h"
-
-static UA_Server *server = NULL;
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-}
-
-static void teardown(void) {
-    UA_Server_delete(server);
-}
-
-START_TEST(checkGetConfig) {
-    ck_assert_ptr_eq(UA_Server_getConfig(NULL), NULL);
-    ck_assert_ptr_ne(UA_Server_getConfig(server), NULL);
-} END_TEST
-
-START_TEST(checkGetNamespaceByName) {
-    size_t notFoundIndex = 62541;
-    UA_StatusCode notFound = UA_Server_getNamespaceByName(server, UA_STRING("http://opcfoundation.org/UA/invalid"), &notFoundIndex);
-    ck_assert_int_eq(notFoundIndex, 62541); // not changed
-    ck_assert_int_eq(notFound, UA_STATUSCODE_BADNOTFOUND);
-
-    size_t foundIndex = 62541;
-    UA_StatusCode found = UA_Server_getNamespaceByName(server, UA_STRING("http://opcfoundation.org/UA/"), &foundIndex);
-    ck_assert_int_eq(foundIndex, 0); // this namespace always has index 0 (defined by the standard)
-    ck_assert_int_eq(found, UA_STATUSCODE_GOOD);
-} END_TEST
-
-static void timedCallbackHandler(UA_Server *s, void *data) {
-    *((UA_Boolean*)data) = false;  // stop the server via a timedCallback
-}
-
-START_TEST(checkServer_run) {
-    UA_Boolean running = true;
-    // 0 is in the past so the server will terminate on the first iteration
-    UA_StatusCode ret;
-    ret = UA_Server_addTimedCallback(server, &timedCallbackHandler, &running, 0, NULL);
-    ck_assert_int_eq(ret, UA_STATUSCODE_GOOD);
-    ret = UA_Server_run(server, &running);
-    ck_assert_int_eq(ret, UA_STATUSCODE_GOOD);
-} END_TEST
-
-int main(void) {
-    Suite *s = suite_create("server");
-
-    TCase *tc_call = tcase_create("server - basics");
-    tcase_add_checked_fixture(tc_call, setup, teardown);
-    tcase_add_test(tc_call, checkGetConfig);
-    tcase_add_test(tc_call, checkGetNamespaceByName);
-    tcase_add_test(tc_call, checkServer_run);
-    suite_add_tcase(s, tc_call);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_server_callbacks.c b/ext/open62541/tests/server/check_server_callbacks.c
deleted file mode 100644
index 68f985a..0000000
--- a/ext/open62541/tests/server/check_server_callbacks.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/server_config_default.h>
-#include <open62541/plugin/log_stdout.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <check.h>
-#include "thread_wrapper.h"
-
-/* While server initialization, value callbacks are called twice.
- * This counter is used to ensure that the deletion of the variable is triggered by the client (not while the server initialization)*/
-int counter  = 0;
-UA_Server *server;
-UA_Boolean running;
-UA_ServerNetworkLayer nl;
-UA_NodeId temperatureNodeId = {1, UA_NODEIDTYPE_NUMERIC, {1001}};
-UA_Int32 temperature;
-UA_Boolean deleteNodeWhileWriting;
-THREAD_HANDLE server_thread;
-
-static void
-updateCurrentTime(void) {
-    UA_DateTime now = UA_DateTime_now();
-    UA_Variant value;
-    UA_Variant_setScalar(&value, &now, &UA_TYPES[UA_TYPES_DATETIME]);
-    UA_NodeId currentNodeId = UA_NODEID_STRING(1, "current-time-value-callback");
-    UA_Server_writeValue(server, currentNodeId, value);
-}
-
-static void
-addCurrentTimeVariable(void) {
-    UA_DateTime now = 0;
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    attr.displayName = UA_LOCALIZEDTEXT("en-US", "Current time - value callback");
-    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-    UA_Variant_setScalar(&attr.value, &now, &UA_TYPES[UA_TYPES_DATETIME]);
-
-    UA_NodeId currentNodeId = UA_NODEID_STRING(1, "current-time-value-callback");
-    UA_QualifiedName currentName = UA_QUALIFIEDNAME(1, "current-time-value-callback");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_NodeId variableTypeNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE);
-    UA_Server_addVariableNode(server, currentNodeId, parentNodeId,
-                              parentReferenceNodeId, currentName,
-                              variableTypeNodeId, attr, NULL, NULL);
-
-    updateCurrentTime();
-}
-
-static void
-beforeReadTime(UA_Server *tmpserver,
-               const UA_NodeId *sessionId, void *sessionContext,
-               const UA_NodeId *nodeid, void *nodeContext,
-               const UA_NumericRange *range, const UA_DataValue *data) {
-    updateCurrentTime();
-}
-
-static void
-afterWriteTime(UA_Server *tmpServer,
-               const UA_NodeId *sessionId, void *sessionContext,
-               const UA_NodeId *nodeId, void *nodeContext,
-               const UA_NumericRange *range, const UA_DataValue *data) {
-    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "The variable was updated");
-}
-
-static void
-addValueCallbackToCurrentTimeVariable(void) {
-    UA_NodeId currentNodeId = UA_NODEID_STRING(1, "current-time-value-callback");
-    UA_ValueCallback callback ;
-    callback.onRead = beforeReadTime;
-    callback.onWrite = afterWriteTime;
-    UA_Server_setVariableNode_valueCallback(server, currentNodeId, callback);
-}
-
-static UA_StatusCode
-readTemperature(UA_Server *tmpServer,
-                const UA_NodeId *sessionId, void *sessionContext,
-                const UA_NodeId *nodeId, void *nodeContext,
-                UA_Boolean sourceTimeStamp, const UA_NumericRange *range,
-                UA_DataValue *dataValue) {
-    if (counter < 2)
-        counter++;
-    else
-        UA_Server_deleteNode(server, temperatureNodeId, true);
-
-    UA_Variant_setScalarCopy(&dataValue->value, &temperature, &UA_TYPES[UA_TYPES_INT32]);
-    dataValue->hasValue = true;
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-writeTemperature(UA_Server *tmpServer,
-                 const UA_NodeId *sessionId, void *sessionContext,
-                 const UA_NodeId *nodeId, void *nodeContext,
-                 const UA_NumericRange *range, const UA_DataValue *data) {
-    temperature = *(UA_Int32 *) data->value.data;
-    if (deleteNodeWhileWriting)
-        UA_Server_deleteNode(server, temperatureNodeId, true);
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-addDataSourceVariable(void) {
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    attr.displayName = UA_LOCALIZEDTEXT("en-US", "Temperature");
-    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-
-    UA_DataSource temperatureSource;
-    temperatureSource.read = readTemperature;
-    temperatureSource.write = writeTemperature;
-    UA_StatusCode retval = UA_Server_addDataSourceVariableNode(server, temperatureNodeId, UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                        UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), UA_QUALIFIEDNAME(1, "Temperature"),
-                                        UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), attr,
-                                        temperatureSource, NULL, NULL);
-
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-}
-
-THREAD_CALLBACK(serverloop) {
-    while(running)
-        UA_Server_run_iterate(server, true);
-    return 0;
-}
-static void setup(void) {
-    running = true;
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-    UA_Server_run_startup(server);
-    addCurrentTimeVariable();
-    addValueCallbackToCurrentTimeVariable();
-    addDataSourceVariable();
-    THREAD_CREATE(server_thread, serverloop);
-}
-
-static void teardown(void) {
-    running = false;
-    counter = 0;
-    THREAD_JOIN(server_thread);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-START_TEST(client_readValueCallbackAttribute) {
-        UA_Client *client = UA_Client_new();
-        UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-        UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-        UA_Variant val;
-        UA_Variant_init(&val);
-        UA_NodeId nodeId = UA_NODEID_STRING(1, "current-time-value-callback");
-        retval = UA_Client_readValueAttribute(client, nodeId, &val);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-        UA_Variant_deleteMembers(&val);
-
-        UA_Client_disconnect(client);
-        UA_Client_delete(client);
-    }
-END_TEST
-
-START_TEST(client_readMultipleAttributes) {
-        UA_Client *client = UA_Client_new();
-        UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-        UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-        UA_ReadRequest request;
-        UA_ReadRequest_init(&request);
-        UA_ReadValueId ids[3];
-        UA_ReadValueId_init(&ids[0]);
-        ids[0].attributeId = UA_ATTRIBUTEID_DESCRIPTION;
-        ids[0].nodeId = temperatureNodeId;
-
-        UA_ReadValueId_init(&ids[1]);
-        ids[1].attributeId = UA_ATTRIBUTEID_VALUE;
-        ids[1].nodeId = temperatureNodeId;
-
-        UA_ReadValueId_init(&ids[2]);
-        ids[2].attributeId = UA_ATTRIBUTEID_BROWSENAME;
-        ids[2].nodeId = temperatureNodeId;
-
-        request.nodesToRead = ids;
-        request.nodesToReadSize = 3;
-
-        UA_ReadResponse response = UA_Client_Service_read(client, request);
-        retval = response.responseHeader.serviceResult;
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-        ck_assert_int_eq(response.resultsSize, 3);
-        ck_assert_uint_eq(response.results[0].status, UA_STATUSCODE_GOOD);
-        ck_assert_uint_eq(response.results[1].status, UA_STATUSCODE_GOOD);
-        ck_assert_uint_eq(response.results[2].status, UA_STATUSCODE_BADNODEIDUNKNOWN);
-
-        UA_ReadResponse_deleteMembers(&response);
-
-        UA_Client_disconnect(client);
-        UA_Client_delete(client);
-    }
-END_TEST
-
-START_TEST(client_writeValueCallbackAttribute) {
-        UA_Client *client = UA_Client_new();
-        UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-        UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-        UA_Variant *val = UA_Variant_new();
-        UA_Int32 value = 77;
-        UA_Variant_setScalarCopy(val, &value, &UA_TYPES[UA_TYPES_INT32]);
-        retval = UA_Client_writeValueAttribute(client, temperatureNodeId, val);
-
-#ifdef UA_ENABLE_IMMUTABLE_NODES
-        ck_assert_uint_eq(retval, UA_STATUSCODE_BADNODEIDUNKNOWN);
-#else
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-#endif
-        UA_Variant_delete(val);
-
-        UA_Client_disconnect(client);
-        UA_Client_delete(client);
-    }
-END_TEST
-
-START_TEST(client_writeMultipleAttributes) {
-        UA_Client *client = UA_Client_new();
-        UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-        UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-        UA_Int32 value1 = 23;
-        UA_WriteRequest wReq;
-        UA_WriteRequest_init(&wReq);
-        UA_LocalizedText string = UA_LOCALIZEDTEXT("en-US", "Temperature");
-        UA_WriteValue wv[2];
-        UA_WriteValue_init(&wv[0]);
-        UA_WriteValue_init(&wv[1]);
-        wReq.nodesToWrite = wv;
-        wReq.nodesToWriteSize = 2;
-        wReq.nodesToWrite[0].nodeId = temperatureNodeId;
-        wReq.nodesToWrite[0].attributeId = UA_ATTRIBUTEID_DISPLAYNAME;
-        wReq.nodesToWrite[0].value.hasValue = true;
-        wReq.nodesToWrite[0].value.value.type = &UA_TYPES[UA_TYPES_LOCALIZEDTEXT];
-        wReq.nodesToWrite[0].value.value.storageType = UA_VARIANT_DATA_NODELETE;
-        wReq.nodesToWrite[0].value.value.data = &string;
-
-        wReq.nodesToWrite[1].nodeId = temperatureNodeId;
-        wReq.nodesToWrite[1].attributeId = UA_ATTRIBUTEID_VALUE;
-        wReq.nodesToWrite[1].value.hasValue = true;
-        wReq.nodesToWrite[1].value.value.type = &UA_TYPES[UA_TYPES_INT32];
-        wReq.nodesToWrite[1].value.value.storageType = UA_VARIANT_DATA_NODELETE;
-        wReq.nodesToWrite[1].value.value.data = &value1;
-
-
-        UA_WriteResponse wResp = UA_Client_Service_write(client, wReq);
-
-        ck_assert_uint_eq(wResp.responseHeader.serviceResult,UA_STATUSCODE_GOOD);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-        UA_WriteResponse_clear(&wResp);
-        UA_Client_disconnect(client);
-        UA_Client_delete(client);
-    }
-END_TEST
-
-static Suite* testSuite_immutableNodes(void) {
-    Suite *s = suite_create("Immutable Nodes");
-    TCase *valueCallback = tcase_create("ValueCallback");
-
-    deleteNodeWhileWriting = UA_FALSE;
-    tcase_add_checked_fixture(valueCallback, setup, teardown);
-    tcase_add_test(valueCallback, client_readValueCallbackAttribute);
-    tcase_add_test(valueCallback, client_readMultipleAttributes);
-
-    deleteNodeWhileWriting = UA_TRUE;
-    tcase_add_test(valueCallback, client_writeValueCallbackAttribute);
-    tcase_add_test(valueCallback, client_writeMultipleAttributes);
-    suite_add_tcase(s,valueCallback);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_immutableNodes();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_server_historical_data.c b/ext/open62541/tests/server/check_server_historical_data.c
deleted file mode 100644
index 6d7af2a..0000000
--- a/ext/open62541/tests/server/check_server_historical_data.c
+++ /dev/null
@@ -1,1054 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
- */
-
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include <open62541/client_highlevel.h>
-#include <open62541/plugin/historydata/history_data_backend.h>
-#include <open62541/plugin/historydata/history_data_backend_memory.h>
-#include <open62541/plugin/historydata/history_data_gathering_default.h>
-#include <open62541/plugin/historydata/history_database_default.h>
-#include <open62541/plugin/historydatabase.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include "client/ua_client_internal.h"
-#include "server/ua_server_internal.h"
-
-#include <check.h>
-
-#include "testing_clock.h"
-#include "testing_networklayers.h"
-#include "thread_wrapper.h"
-#ifdef UA_ENABLE_HISTORIZING
-#include "historical_read_test_data.h"
-#include "randomindextest_backend.h"
-#endif
-#include <stddef.h>
-
-static UA_Server *server;
-#ifdef UA_ENABLE_HISTORIZING
-static UA_HistoryDataGathering *gathering;
-#endif
-static UA_Boolean running;
-static THREAD_HANDLE server_thread;
-static MUTEX_HANDLE serverMutex;
-
-static UA_Client *client;
-static UA_NodeId parentNodeId;
-static UA_NodeId parentReferenceNodeId;
-static UA_NodeId outNodeId;
-
-static UA_DateTime *testDataSorted;
-
-static void serverMutexLock(void) {
-    if (!(MUTEX_LOCK(serverMutex))) {
-        fprintf(stderr, "Mutex cannot be locked.\n");
-        exit(1);
-    }
-}
-
-static void serverMutexUnlock(void) {
-    if (!(MUTEX_UNLOCK(serverMutex))) {
-        fprintf(stderr, "Mutex cannot be unlocked.\n");
-        exit(1);
-    }
-}
-
-THREAD_CALLBACK(serverloop) {
-    while(running) {
-        serverMutexLock();
-        UA_Server_run_iterate(server, false);
-        serverMutexUnlock();
-    }
-    return 0;
-}
-
-static void setup(void) {
-    if (!(MUTEX_INIT(serverMutex))) {
-        fprintf(stderr, "Server mutex was not created correctly.\n");
-        exit(1);
-    }
-    running = true;
-
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-#ifdef UA_ENABLE_HISTORIZING
-    gathering = (UA_HistoryDataGathering*)UA_calloc(1, sizeof(UA_HistoryDataGathering));
-    *gathering = UA_HistoryDataGathering_Default(1);
-    config->historyDatabase = UA_HistoryDatabase_default(*gathering);
-#endif
-
-    UA_StatusCode retval = UA_Server_run_startup(server);
-    if(retval != UA_STATUSCODE_GOOD) {
-        fprintf(stderr, "Error while calling Server_run_startup. %s\n", UA_StatusCode_name(retval));
-        UA_Server_delete(server);
-        exit(1);
-    }
-
-    THREAD_CREATE(server_thread, serverloop);
-    /* Define the attribute of the uint32 variable node */
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    UA_UInt32 myUint32 = 40;
-    UA_Variant_setScalar(&attr.value, &myUint32, &UA_TYPES[UA_TYPES_UINT32]);
-    attr.description = UA_LOCALIZEDTEXT("en-US","the answer");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","the answer");
-    attr.dataType = UA_TYPES[UA_TYPES_UINT32].typeId;
-    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE | UA_ACCESSLEVELMASK_HISTORYREAD | UA_ACCESSLEVELMASK_HISTORYWRITE;
-    attr.historizing = true;
-
-    /* Add the variable node to the information model */
-    UA_NodeId uint32NodeId = UA_NODEID_STRING(1, "the.answer");
-    UA_QualifiedName uint32Name = UA_QUALIFIEDNAME(1, "the answer");
-    parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_NodeId_init(&outNodeId);
-    retval = UA_Server_addVariableNode(server, uint32NodeId, parentNodeId,
-                                       parentReferenceNodeId, uint32Name,
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                       attr, NULL, &outNodeId);
-    if (retval != UA_STATUSCODE_GOOD) {
-        fprintf(stderr, "Error adding variable node. %s\n", UA_StatusCode_name(retval));
-        UA_Server_delete(server);
-        exit(1);
-    }
-
-    client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-    retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    if (retval != UA_STATUSCODE_GOOD) {
-        fprintf(stderr, "Client can not connect to opc.tcp://localhost:4840. %s\n", UA_StatusCode_name(retval));
-        UA_Client_delete(client);
-        UA_Server_delete(server);
-        exit(1);
-    }
-
-    UA_Client_recv = client->connection.recv;
-    client->connection.recv = UA_Client_recvTesting;
-}
-
-static void teardown(void) {
-    /* cleanup */
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-    running = false;
-    THREAD_JOIN(server_thread);
-    UA_NodeId_deleteMembers(&parentNodeId);
-    UA_NodeId_deleteMembers(&parentReferenceNodeId);
-    UA_NodeId_deleteMembers(&outNodeId);
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-#ifdef UA_ENABLE_HISTORIZING
-    UA_free(gathering);
-#endif
-    if (!MUTEX_DESTROY(serverMutex)) {
-        fprintf(stderr, "Server mutex was not destroyed correctly.\n");
-        exit(1);
-    }
-}
-
-#ifdef UA_ENABLE_HISTORIZING
-
-#include <stdio.h>
-#include "ua_session.h"
-
-static UA_StatusCode
-setUInt32(UA_Client *thisClient, UA_NodeId node, UA_UInt32 value)
-{
-    UA_Variant variant;
-    UA_Variant_setScalar(&variant, &value, &UA_TYPES[UA_TYPES_UINT32]);
-    return UA_Client_writeValueAttribute(thisClient, node, &variant);
-}
-
-static UA_DateTime* sortDateTimes(UA_DateTime *data) {
-    size_t count = 0;
-    while(data[count++]);
-    UA_DateTime* ret;
-    if (UA_Array_copy(data, count, (void**)&ret, &UA_TYPES[UA_TYPES_DATETIME]) != UA_STATUSCODE_GOOD)
-        return NULL;
-    --count;
-    // sort it
-    for (size_t i = 1; i < count; i++) {
-       for (size_t j = 0; j < count - i; j++) {
-           if (ret[j] > ret[j+1]) {
-               UA_DateTime tmp = ret[j];
-               ret[j] = ret[j+1];
-               ret[j+1] = tmp;
-           }
-       }
-    }
-    return ret;
-}
-
-static void
-printTimestamp(UA_DateTime timestamp)
-{
-    if (timestamp == TIMESTAMP_FIRST) {
-        fprintf(stderr, "FIRST,");
-    } else if (timestamp == TIMESTAMP_LAST) {
-        fprintf(stderr, "LAST,");
-    } else {
-        fprintf(stderr, "%3lld,", timestamp / UA_DATETIME_SEC);
-    }
-}
-
-static void
-printResult(UA_DataValue * value)
-{
-    if (value->status != UA_STATUSCODE_GOOD)
-        fprintf(stderr, "%s:", UA_StatusCode_name(value->status));
-    printTimestamp(value->sourceTimestamp);
-}
-
-static UA_Boolean
-resultIsEqual(const UA_DataValue * result, const testTuple * tuple, size_t index)
-{
-    switch (tuple->result[index]) {
-    case TIMESTAMP_FIRST:
-        if (result->status != UA_STATUSCODE_BADBOUNDNOTFOUND
-                || !UA_Variant_isEmpty(&result->value))
-            return false;
-        /* we do not test timestamp if TIMESTAMP_UNSPECIFIED is given for start.
-         * See OPC UA Part 11, Version 1.03, Page 5-6, Table 1, Mark b for details.*/
-        if (tuple->start != TIMESTAMP_UNSPECIFIED
-                && tuple->start != result->sourceTimestamp)
-            return false;
-        break;
-    case TIMESTAMP_LAST:
-        if (result->status != UA_STATUSCODE_BADBOUNDNOTFOUND
-                || !UA_Variant_isEmpty(&result->value))
-            return false;
-        /* we do not test timestamp if TIMESTAMP_UNSPECIFIED is given for end.
-         * See OPC UA Part 11, Version 1.03, Page 5-6, Table 1, Mark a for details.*/
-        if (tuple->end != TIMESTAMP_UNSPECIFIED
-                && tuple->end != result->sourceTimestamp)
-            return false;
-        break;
-    default:
-        if (result->sourceTimestamp != tuple->result[index]
-                || result->value.type != &UA_TYPES[UA_TYPES_INT64]
-                || *((UA_Int64*)result->value.data) != tuple->result[index])
-            return false;
-    }
-    return true;
-}
-
-static UA_Boolean
-fillHistoricalDataBackend(UA_HistoryDataBackend backend)
-{
-    int i = 0;
-    UA_DateTime currentDateTime = testData[i];
-    fprintf(stderr, "Adding to historical data backend: ");
-    while (currentDateTime) {
-        fprintf(stderr, "%lld, ", currentDateTime / UA_DATETIME_SEC);
-        UA_DataValue value;
-        UA_DataValue_init(&value);
-        value.hasValue = true;
-        UA_Int64 d = currentDateTime;
-        UA_Variant_setScalarCopy(&value.value, &d, &UA_TYPES[UA_TYPES_INT64]);
-        value.hasSourceTimestamp = true;
-        value.sourceTimestamp = currentDateTime;
-        value.hasServerTimestamp = true;
-        value.serverTimestamp = currentDateTime;
-        value.hasStatus = true;
-        value.status = UA_STATUSCODE_GOOD;
-        if (backend.serverSetHistoryData(server, backend.context, NULL, NULL, &outNodeId, UA_FALSE, &value) != UA_STATUSCODE_GOOD) {
-            fprintf(stderr, "\n");
-            return false;
-        }
-        UA_DataValue_deleteMembers(&value);
-        currentDateTime = testData[++i];
-    }
-    fprintf(stderr, "\n");
-    return true;
-}
-
-void
-Service_HistoryRead(UA_Server *server, UA_Session *session,
-                    const UA_HistoryReadRequest *request,
-                    UA_HistoryReadResponse *response);
-
-static void
-requestHistory(UA_DateTime start,
-               UA_DateTime end,
-               UA_HistoryReadResponse * response,
-               UA_UInt32 numValuesPerNode,
-               UA_Boolean returnBounds,
-               UA_ByteString *continuationPoint)
-{
-    UA_ReadRawModifiedDetails *details = UA_ReadRawModifiedDetails_new();
-    details->startTime = start;
-    details->endTime = end;
-    details->isReadModified = false;
-    details->numValuesPerNode = numValuesPerNode;
-    details->returnBounds = returnBounds;
-
-    UA_HistoryReadValueId *valueId = UA_HistoryReadValueId_new();
-    UA_NodeId_copy(&outNodeId, &valueId->nodeId);
-    if (continuationPoint)
-        UA_ByteString_copy(continuationPoint, &valueId->continuationPoint);
-
-    UA_HistoryReadRequest request;
-    UA_HistoryReadRequest_init(&request);
-    request.historyReadDetails.encoding = UA_EXTENSIONOBJECT_DECODED;
-    request.historyReadDetails.content.decoded.type = &UA_TYPES[UA_TYPES_READRAWMODIFIEDDETAILS];
-    request.historyReadDetails.content.decoded.data = details;
-
-    request.timestampsToReturn = UA_TIMESTAMPSTORETURN_BOTH;
-
-    request.nodesToReadSize = 1;
-    request.nodesToRead = valueId;
-
-    UA_LOCK(server->serviceMutex);
-    Service_HistoryRead(server, &server->adminSession, &request, response);
-    UA_UNLOCK(server->serviceMutex);
-    UA_HistoryReadRequest_deleteMembers(&request);
-}
-
-static UA_UInt32
-testHistoricalDataBackend(size_t maxResponseSize)
-{
-    const UA_HistorizingNodeIdSettings* setting = gathering->getHistorizingSetting(server, gathering->context, &outNodeId);
-    UA_HistorizingNodeIdSettings newSetting = *setting;
-    newSetting.maxHistoryDataResponseSize = maxResponseSize;
-    gathering->updateNodeIdSetting(server, gathering->context, &outNodeId, newSetting);
-
-    UA_UInt32 retval = 0;
-    size_t i = 0;
-    testTuple *current = &testRequests[i];
-    fprintf(stderr, "Testing with maxResponseSize of %lu\n", maxResponseSize);
-    fprintf(stderr, "Start | End  | numValuesPerNode | returnBounds |ContPoint| {Expected}{Result} Result\n");
-    fprintf(stderr, "------+------+------------------+--------------+---------+----------------\n");
-    size_t j;
-    while (current->start || current->end) {
-        j = 0;
-        if (current->start == TIMESTAMP_UNSPECIFIED) {
-            fprintf(stderr, "UNSPEC|");
-        } else {
-            fprintf(stderr, "  %3lld |", current->start / UA_DATETIME_SEC);
-        }
-        if (current->end == TIMESTAMP_UNSPECIFIED) {
-            fprintf(stderr, "UNSPEC|");
-        } else {
-            fprintf(stderr, "  %3lld |", current->end / UA_DATETIME_SEC);
-        }
-        fprintf(stderr, "               %2u |          %s |     %s | {", current->numValuesPerNode, (current->returnBounds ? "Yes" : " No"), (current->returnContinuationPoint ? "Yes" : " No"));
-        while (current->result[j]) {
-            printTimestamp(current->result[j]);
-            ++j;
-        }
-        fprintf(stderr, "}");
-
-        UA_DataValue *result = NULL;
-        size_t resultSize = 0;
-        UA_ByteString continuous;
-        UA_ByteString_init(&continuous);
-        UA_Boolean readOk = true;
-        size_t reseivedValues = 0;
-        fprintf(stderr, "{");
-        size_t counter = 0;
-        do {
-            UA_HistoryReadResponse response;
-            UA_HistoryReadResponse_init(&response);
-            UA_UInt32 numValuesPerNode = current->numValuesPerNode;
-            if (numValuesPerNode > 0 && numValuesPerNode + (UA_UInt32)reseivedValues > current->numValuesPerNode)
-                numValuesPerNode = current->numValuesPerNode - (UA_UInt32)reseivedValues;
-
-            requestHistory(current->start,
-                           current->end,
-                           &response,
-                           numValuesPerNode,
-                           current->returnBounds,
-                           &continuous);
-            ++counter;
-
-            if(response.resultsSize != 1) {
-                fprintf(stderr, "ResultError:Size %lu %s", response.resultsSize, UA_StatusCode_name(response.responseHeader.serviceResult));
-                readOk = false;
-                UA_HistoryReadResponse_deleteMembers(&response);
-                break;
-            }
-
-            UA_StatusCode stat = response.results[0].statusCode;
-            if (stat == UA_STATUSCODE_BADBOUNDNOTSUPPORTED && current->returnBounds) {
-                fprintf(stderr, "%s", UA_StatusCode_name(stat));
-                UA_HistoryReadResponse_deleteMembers(&response);
-                break;
-            }
-
-            if(response.results[0].historyData.encoding != UA_EXTENSIONOBJECT_DECODED
-                    || response.results[0].historyData.content.decoded.type != &UA_TYPES[UA_TYPES_HISTORYDATA]) {
-                fprintf(stderr, "ResultError:HistoryData");
-                readOk = false;
-                UA_HistoryReadResponse_deleteMembers(&response);
-                break;
-            }
-
-            UA_HistoryData * data = (UA_HistoryData *)response.results[0].historyData.content.decoded.data;
-            resultSize = data->dataValuesSize;
-            result = data->dataValues;
-
-            if (resultSize == 0 && continuous.length > 0) {
-                fprintf(stderr, "continuousResultEmpty");
-                readOk = false;
-                UA_HistoryReadResponse_deleteMembers(&response);
-                break;
-            }
-
-            if (resultSize > maxResponseSize) {
-                fprintf(stderr, "resultToBig");
-                readOk = false;
-                UA_HistoryReadResponse_deleteMembers(&response);
-                break;
-            }
-
-            if (stat != UA_STATUSCODE_GOOD) {
-                fprintf(stderr, "%s", UA_StatusCode_name(stat));
-            } else {
-                for (size_t k = 0; k < resultSize; ++k)
-                    printResult(&result[k]);
-            }
-
-            if (stat == UA_STATUSCODE_GOOD && j >= resultSize + reseivedValues) {
-                for (size_t l = 0; l < resultSize; ++l) {
-                    /* See OPC UA Part 11, Version 1.03, Page 5-6, Table 1, Mark a for details.*/
-                    if (current->result[l + reseivedValues] == TIMESTAMP_LAST && current->end == TIMESTAMP_UNSPECIFIED) {
-                        // This test will work on not continous read, only
-                        if (reseivedValues == 0 && !(l > 0 && result[l].sourceTimestamp == result[l-1].sourceTimestamp + UA_DATETIME_SEC))
-                            readOk = false;
-                    }
-                    /* See OPC UA Part 11, Version 1.03, Page 5-6, Table 1, Mark b for details.*/
-                    if (current->result[l + reseivedValues] == TIMESTAMP_FIRST && current->start == TIMESTAMP_UNSPECIFIED) {
-                        // This test will work on not continous read, only
-                        if (reseivedValues == 0 && !(l > 0 && result[l].sourceTimestamp == result[l-1].sourceTimestamp - UA_DATETIME_SEC))
-                            readOk = false;
-                    }
-                    if (!resultIsEqual(&result[l], current, l + reseivedValues))
-                        readOk = false;
-                }
-                if (response.results[0].continuationPoint.length > 0)
-                    fprintf(stderr, "C,");
-                reseivedValues += resultSize;
-                if (reseivedValues == j) {
-                    if (current->returnContinuationPoint && response.results[0].continuationPoint.length == 0) {
-                        readOk = false;
-                        fprintf(stderr, "missingContinuationPoint");
-                    }
-                    if (!current->returnContinuationPoint && response.results[0].continuationPoint.length > 0) {
-                        readOk = false;
-                        fprintf(stderr, "unexpectedContinuationPoint");
-                    }
-                    UA_HistoryReadResponse_deleteMembers(&response);
-                    break;
-                }
-                UA_ByteString_deleteMembers(&continuous);
-                UA_ByteString_copy(&response.results[0].continuationPoint, &continuous);
-            } else {
-                readOk = false;
-                UA_HistoryReadResponse_deleteMembers(&response);
-                break;
-            }
-            UA_HistoryReadResponse_deleteMembers(&response);
-        } while (continuous.length > 0);
-
-        if (j != reseivedValues) {
-            readOk = false;
-        }
-        UA_ByteString_deleteMembers(&continuous);
-        if (!readOk) {
-            fprintf(stderr, "} Fail (%lu requests)\n", counter);
-            ++retval;
-        } else {
-            fprintf(stderr, "} OK (%lu requests)\n", counter);
-        }
-        current = &testRequests[++i];
-    }
-    return retval;
-}
-
-void
-Service_HistoryUpdate(UA_Server *server, UA_Session *session,
-                      const UA_HistoryUpdateRequest *request,
-                      UA_HistoryUpdateResponse *response);
-
-static UA_StatusCode
-deleteHistory(UA_DateTime start,
-              UA_DateTime end)
-{
-    UA_DeleteRawModifiedDetails *details = UA_DeleteRawModifiedDetails_new();
-    details->startTime = start;
-    details->endTime = end;
-    details->isDeleteModified = false;
-    UA_NodeId_copy(&outNodeId, &details->nodeId);
-
-    UA_HistoryUpdateRequest request;
-    UA_HistoryUpdateRequest_init(&request);
-    request.historyUpdateDetailsSize = 1;
-    request.historyUpdateDetails = UA_ExtensionObject_new();
-    UA_ExtensionObject_init(request.historyUpdateDetails);
-
-    request.historyUpdateDetails[0].encoding = UA_EXTENSIONOBJECT_DECODED;
-    request.historyUpdateDetails[0].content.decoded.type = &UA_TYPES[UA_TYPES_DELETERAWMODIFIEDDETAILS];
-    request.historyUpdateDetails[0].content.decoded.data = details;
-
-    UA_HistoryUpdateResponse response;
-    UA_HistoryUpdateResponse_init(&response);
-    UA_LOCK(server->serviceMutex);
-    Service_HistoryUpdate(server, &server->adminSession, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    UA_HistoryUpdateRequest_deleteMembers(&request);
-    UA_StatusCode ret = UA_STATUSCODE_GOOD;
-    if (response.responseHeader.serviceResult != UA_STATUSCODE_GOOD)
-        ret = response.responseHeader.serviceResult;
-    else if (response.resultsSize != 1)
-        ret = UA_STATUSCODE_BADUNEXPECTEDERROR;
-    else if (response.results[0].statusCode != UA_STATUSCODE_GOOD)
-        ret = response.results[0].statusCode;
-    else if (response.results[0].operationResultsSize != 0)
-        ret = UA_STATUSCODE_BADUNEXPECTEDERROR;
-
-    UA_HistoryUpdateResponse_deleteMembers(&response);
-    return ret;
-}
-
-static UA_StatusCode
-updateHistory(UA_PerformUpdateType updateType, UA_DateTime *updateData, UA_StatusCode ** operationResults, size_t *operationResultsSize)
-{
-    UA_UpdateDataDetails *details = UA_UpdateDataDetails_new();
-    details->performInsertReplace = updateType;
-    UA_NodeId_copy(&outNodeId, &details->nodeId);
-    int updateDataSize = -1;
-    while(updateData[++updateDataSize]);
-    fprintf(stderr, "updateHistory for %d values.\n", updateDataSize);
-    details->updateValuesSize = (size_t)updateDataSize;
-    details->updateValues = (UA_DataValue*)UA_Array_new(details->updateValuesSize, &UA_TYPES[UA_TYPES_DATAVALUE]);
-    for (size_t i = 0; i < details->updateValuesSize; ++i) {
-        UA_DataValue_init(&details->updateValues[i]);
-        details->updateValues[i].hasValue = true;
-        UA_Int64 d = updateType;
-        UA_Variant_setScalarCopy(&details->updateValues[i].value, &d, &UA_TYPES[UA_TYPES_INT64]);
-        details->updateValues[i].hasSourceTimestamp = true;
-        details->updateValues[i].sourceTimestamp = updateData[i];
-        details->updateValues[i].hasServerTimestamp = true;
-        details->updateValues[i].serverTimestamp = updateData[i];
-        details->updateValues[i].hasStatus = true;
-        details->updateValues[i].status = UA_STATUSCODE_GOOD;
-    }
-
-    UA_HistoryUpdateRequest request;
-    UA_HistoryUpdateRequest_init(&request);
-    request.historyUpdateDetailsSize = 1;
-    request.historyUpdateDetails = UA_ExtensionObject_new();
-    UA_ExtensionObject_init(request.historyUpdateDetails);
-
-    request.historyUpdateDetails[0].encoding = UA_EXTENSIONOBJECT_DECODED;
-    request.historyUpdateDetails[0].content.decoded.type = &UA_TYPES[UA_TYPES_UPDATEDATADETAILS];
-    request.historyUpdateDetails[0].content.decoded.data = details;
-
-    UA_HistoryUpdateResponse response;
-    UA_HistoryUpdateResponse_init(&response);
-    UA_LOCK(server->serviceMutex);
-    Service_HistoryUpdate(server, &server->adminSession, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    UA_HistoryUpdateRequest_deleteMembers(&request);
-    UA_StatusCode ret = UA_STATUSCODE_GOOD;
-    if (response.responseHeader.serviceResult != UA_STATUSCODE_GOOD)
-        ret = response.responseHeader.serviceResult;
-    else if (response.resultsSize != 1)
-        ret = UA_STATUSCODE_BADUNEXPECTEDERROR;
-    else if (response.results[0].statusCode != UA_STATUSCODE_GOOD)
-        ret = response.results[0].statusCode;
-    else if (response.results[0].operationResultsSize != (size_t)updateDataSize)
-        ret = UA_STATUSCODE_BADUNEXPECTEDERROR;
-    else {
-        if (operationResults) {
-            *operationResultsSize = response.results[0].operationResultsSize;
-            ret = UA_Array_copy(response.results[0].operationResults, *operationResultsSize, (void**)operationResults, &UA_TYPES[UA_TYPES_STATUSCODE]);
-        } else {
-            for (size_t i = 0; i < response.results[0].operationResultsSize; ++i) {
-                if (response.results[0].operationResults[i] != UA_STATUSCODE_GOOD) {
-                    ret = response.results[0].operationResults[i];
-                    break;
-                }
-            }
-        }
-    }
-    UA_HistoryUpdateResponse_deleteMembers(&response);
-    return ret;
-}
-
-static void
-testResult(UA_DateTime *resultData, UA_HistoryData * historyData) {
-
-    // request
-    UA_HistoryReadResponse localResponse;
-    UA_HistoryReadResponse_init(&localResponse);
-    requestHistory(TIMESTAMP_FIRST, TIMESTAMP_LAST, &localResponse, 0, false, NULL);
-
-    // test the response
-    ck_assert_str_eq(UA_StatusCode_name(localResponse.responseHeader.serviceResult), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-    ck_assert_uint_eq(localResponse.resultsSize, 1);
-    ck_assert_str_eq(UA_StatusCode_name(localResponse.results[0].statusCode), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-    ck_assert_uint_eq(localResponse.results[0].historyData.encoding, UA_EXTENSIONOBJECT_DECODED);
-    ck_assert(localResponse.results[0].historyData.content.decoded.type == &UA_TYPES[UA_TYPES_HISTORYDATA]);
-    UA_HistoryData * data = (UA_HistoryData *)localResponse.results[0].historyData.content.decoded.data;
-    if (historyData)
-        UA_HistoryData_copy(data, historyData);
-    for (size_t j = 0; j < data->dataValuesSize; ++j) {
-        ck_assert(resultData[j] != 0);
-        ck_assert_uint_eq(data->dataValues[j].hasSourceTimestamp, true);
-        ck_assert_uint_eq(data->dataValues[j].sourceTimestamp, resultData[j]);
-    }
-    UA_HistoryReadResponse_deleteMembers(&localResponse);
-}
-
-START_TEST(Server_HistorizingUpdateDelete)
-{
-    UA_HistoryDataBackend backend = UA_HistoryDataBackend_Memory(1, 1);
-    UA_HistorizingNodeIdSettings setting;
-    setting.historizingBackend = backend;
-    setting.maxHistoryDataResponseSize = 1000;
-    setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_USER;
-    serverMutexLock();
-    UA_StatusCode ret = gathering->registerNodeId(server, gathering->context, &outNodeId, setting);
-    serverMutexUnlock();
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    // fill backend
-    ck_assert_uint_eq(fillHistoricalDataBackend(backend), true);
-
-    // delete some values
-    ck_assert_str_eq(UA_StatusCode_name(deleteHistory(DELETE_START_TIME, DELETE_STOP_TIME)),
-                     UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    testResult(testDataAfterDelete, NULL);
-
-    UA_HistoryDataBackend_Memory_deleteMembers(&setting.historizingBackend);
-}
-END_TEST
-
-START_TEST(Server_HistorizingUpdateInsert)
-{
-    UA_HistoryDataBackend backend = UA_HistoryDataBackend_Memory(1, 1);
-    UA_HistorizingNodeIdSettings setting;
-    setting.historizingBackend = backend;
-    setting.maxHistoryDataResponseSize = 1000;
-    setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_USER;
-    serverMutexLock();
-    UA_StatusCode ret = gathering->registerNodeId(server, gathering->context, &outNodeId, setting);
-    serverMutexUnlock();
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    // fill backend with insert
-    ck_assert_str_eq(UA_StatusCode_name(updateHistory(UA_PERFORMUPDATETYPE_INSERT, testData, NULL, NULL))
-                                        , UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    UA_HistoryData data;
-    UA_HistoryData_init(&data);
-
-    testResult(testDataSorted, &data);
-
-    for (size_t i = 0; i < data.dataValuesSize; ++i) {
-        ck_assert_uint_eq(data.dataValues[i].hasValue, true);
-        ck_assert(data.dataValues[i].value.type == &UA_TYPES[UA_TYPES_INT64]);
-        ck_assert_uint_eq(*((UA_Int64*)data.dataValues[i].value.data), UA_PERFORMUPDATETYPE_INSERT);
-    }
-
-    UA_HistoryData_deleteMembers(&data);
-    UA_HistoryDataBackend_Memory_deleteMembers(&setting.historizingBackend);
-}
-END_TEST
-
-START_TEST(Server_HistorizingUpdateReplace)
-{
-    UA_HistoryDataBackend backend = UA_HistoryDataBackend_Memory(1, 1);
-    UA_HistorizingNodeIdSettings setting;
-    setting.historizingBackend = backend;
-    setting.maxHistoryDataResponseSize = 1000;
-    setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_USER;
-    serverMutexLock();
-    UA_StatusCode ret = gathering->registerNodeId(server, gathering->context, &outNodeId, setting);
-    serverMutexUnlock();
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    // fill backend with insert
-    ck_assert_str_eq(UA_StatusCode_name(updateHistory(UA_PERFORMUPDATETYPE_INSERT, testData, NULL, NULL))
-                                        , UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    // replace all
-    ck_assert_str_eq(UA_StatusCode_name(updateHistory(UA_PERFORMUPDATETYPE_REPLACE, testData, NULL, NULL))
-                                        , UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    UA_HistoryData data;
-    UA_HistoryData_init(&data);
-
-    testResult(testDataSorted, &data);
-
-    for (size_t i = 0; i < data.dataValuesSize; ++i) {
-        ck_assert_uint_eq(data.dataValues[i].hasValue, true);
-        ck_assert(data.dataValues[i].value.type == &UA_TYPES[UA_TYPES_INT64]);
-        ck_assert_uint_eq(*((UA_Int64*)data.dataValues[i].value.data), UA_PERFORMUPDATETYPE_REPLACE);
-    }
-
-    UA_HistoryData_deleteMembers(&data);
-    UA_HistoryDataBackend_Memory_deleteMembers(&setting.historizingBackend);
-}
-END_TEST
-
-START_TEST(Server_HistorizingUpdateUpdate)
-{
-    UA_HistoryDataBackend backend = UA_HistoryDataBackend_Memory(1, 1);
-    UA_HistorizingNodeIdSettings setting;
-    setting.historizingBackend = backend;
-    setting.maxHistoryDataResponseSize = 1000;
-    setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_USER;
-    serverMutexLock();
-    UA_StatusCode ret = gathering->registerNodeId(server, gathering->context, &outNodeId, setting);
-    serverMutexUnlock();
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    // fill backend with insert
-    ck_assert_str_eq(UA_StatusCode_name(updateHistory(UA_PERFORMUPDATETYPE_INSERT, testData, NULL, NULL))
-                                        , UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    testResult(testDataSorted, NULL);
-
-    // delete some values
-    ck_assert_str_eq(UA_StatusCode_name(deleteHistory(DELETE_START_TIME, DELETE_STOP_TIME)),
-                     UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    testResult(testDataAfterDelete, NULL);
-
-    // update all and insert some
-    UA_StatusCode *result;
-    size_t resultSize = 0;
-    ck_assert_str_eq(UA_StatusCode_name(updateHistory(UA_PERFORMUPDATETYPE_UPDATE, testDataSorted, &result, &resultSize))
-                                        , UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    for (size_t i = 0; i < resultSize; ++i) {
-        ck_assert_str_eq(UA_StatusCode_name(result[i]), UA_StatusCode_name(testDataUpdateResult[i]));
-    }
-    UA_Array_delete(result, resultSize, &UA_TYPES[UA_TYPES_STATUSCODE]);
-
-    UA_HistoryData data;
-    UA_HistoryData_init(&data);
-
-    testResult(testDataSorted, &data);
-
-    for (size_t i = 0; i < data.dataValuesSize; ++i) {
-        ck_assert_uint_eq(data.dataValues[i].hasValue, true);
-        ck_assert(data.dataValues[i].value.type == &UA_TYPES[UA_TYPES_INT64]);
-        ck_assert_uint_eq(*((UA_Int64*)data.dataValues[i].value.data), UA_PERFORMUPDATETYPE_UPDATE);
-    }
-
-    UA_HistoryData_deleteMembers(&data);
-    UA_HistoryDataBackend_Memory_deleteMembers(&setting.historizingBackend);
-}
-END_TEST
-
-START_TEST(Server_HistorizingStrategyUser)
-{
-    // set a data backend
-    UA_HistorizingNodeIdSettings setting;
-    setting.historizingBackend = UA_HistoryDataBackend_Memory(3, 100);
-    setting.maxHistoryDataResponseSize = 100;
-    setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_USER;
-    UA_StatusCode retval = gathering->registerNodeId(server, gathering->context, &outNodeId, setting);
-    ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    // fill the data
-    UA_DateTime start = UA_DateTime_now();
-    UA_DateTime end = start + (10 * UA_DATETIME_SEC);
-    for (UA_UInt32 i = 0; i < 10; ++i) {
-        UA_DataValue value;
-        UA_DataValue_init(&value);
-        value.hasValue = true;
-        value.hasStatus = true;
-        value.status = UA_STATUSCODE_GOOD;
-        UA_Variant_setScalarCopy(&value.value, &i, &UA_TYPES[UA_TYPES_UINT32]);
-        value.hasSourceTimestamp = true;
-        value.sourceTimestamp = start + (i * UA_DATETIME_SEC);
-        value.hasServerTimestamp = true;
-        value.serverTimestamp = value.sourceTimestamp;
-        retval = setting.historizingBackend.serverSetHistoryData(server,
-                                                                 setting.historizingBackend.context,
-                                                                 NULL,
-                                                                 NULL,
-                                                                 &outNodeId,
-                                                                 UA_FALSE,
-                                                                 &value);
-        ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-        UA_DataValue_deleteMembers(&value);
-    }
-
-    // request
-    UA_HistoryReadResponse response;
-    UA_HistoryReadResponse_init(&response);
-    requestHistory(start, end, &response, 0, false, NULL);
-
-    // test the response
-    ck_assert_str_eq(UA_StatusCode_name(response.responseHeader.serviceResult), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-    ck_assert_uint_eq(response.resultsSize, 1);
-    for (size_t i = 0; i < response.resultsSize; ++i) {
-        ck_assert_str_eq(UA_StatusCode_name(response.results[i].statusCode), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-        ck_assert_uint_eq(response.results[i].historyData.encoding, UA_EXTENSIONOBJECT_DECODED);
-        ck_assert(response.results[i].historyData.content.decoded.type == &UA_TYPES[UA_TYPES_HISTORYDATA]);
-        UA_HistoryData * data = (UA_HistoryData *)response.results[i].historyData.content.decoded.data;
-        ck_assert_uint_eq(data->dataValuesSize, 10);
-        for (size_t j = 0; j < data->dataValuesSize; ++j) {
-            ck_assert_uint_eq(data->dataValues[j].hasSourceTimestamp, true);
-            ck_assert_uint_eq(data->dataValues[j].sourceTimestamp, start + (j * UA_DATETIME_SEC));
-            ck_assert_uint_eq(data->dataValues[j].hasStatus, true);
-            ck_assert_str_eq(UA_StatusCode_name(data->dataValues[j].status), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-            ck_assert_uint_eq(data->dataValues[j].hasValue, true);
-            ck_assert(data->dataValues[j].value.type == &UA_TYPES[UA_TYPES_UINT32]);
-            UA_UInt32 * value = (UA_UInt32 *)data->dataValues[j].value.data;
-            ck_assert_uint_eq(*value, j);
-        }
-    }
-    UA_HistoryReadResponse_deleteMembers(&response);
-    UA_HistoryDataBackend_Memory_deleteMembers(&setting.historizingBackend);
-}
-END_TEST
-
-START_TEST(Server_HistorizingStrategyPoll)
-{
-    // init to a defined value
-    UA_StatusCode retval = setUInt32(client, outNodeId, 43);
-    ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    // set a data backend
-    UA_HistorizingNodeIdSettings setting;
-    setting.historizingBackend = UA_HistoryDataBackend_Memory(3, 100);
-    setting.maxHistoryDataResponseSize = 100;
-    setting.pollingInterval = 100;
-    setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_POLL;
-    serverMutexLock();
-    retval = gathering->registerNodeId(server, gathering->context, &outNodeId, setting);
-    serverMutexUnlock();
-    ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    // fill the data
-    UA_DateTime start = UA_DateTime_now();
-    serverMutexLock();
-    retval = gathering->startPoll(server, gathering->context, &outNodeId);
-    serverMutexUnlock();
-    ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-    for (size_t k = 0; k < 10; ++k) {
-        UA_fakeSleep(50);
-        UA_realSleep(50);
-        if (k == 5) {
-            serverMutexLock();
-            gathering->stopPoll(server, gathering->context, &outNodeId);
-            serverMutexUnlock();
-        }
-        setUInt32(client, outNodeId, (unsigned int)k);
-    }
-
-    ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-    UA_DateTime end = UA_DateTime_now();
-
-    // request
-    UA_HistoryReadResponse response;
-    UA_HistoryReadResponse_init(&response);
-    requestHistory(start, end, &response, 0, false, NULL);
-
-    // test the response
-    ck_assert_str_eq(UA_StatusCode_name(response.responseHeader.serviceResult), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-    ck_assert_uint_eq(response.resultsSize, 1);
-    for (size_t i = 0; i < response.resultsSize; ++i) {
-        ck_assert_str_eq(UA_StatusCode_name(response.results[i].statusCode), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-        ck_assert_uint_eq(response.results[i].historyData.encoding, UA_EXTENSIONOBJECT_DECODED);
-        ck_assert(response.results[i].historyData.content.decoded.type == &UA_TYPES[UA_TYPES_HISTORYDATA]);
-        UA_HistoryData * data = (UA_HistoryData *)response.results[i].historyData.content.decoded.data;
-        ck_assert(data->dataValuesSize > 1);
-        for (size_t j = 0; j < data->dataValuesSize; ++j) {
-            ck_assert_uint_eq(data->dataValues[j].hasSourceTimestamp, true);
-            ck_assert(data->dataValues[j].sourceTimestamp >= start);
-            ck_assert(data->dataValues[j].sourceTimestamp < end);
-            ck_assert_uint_eq(data->dataValues[j].hasValue, true);
-            ck_assert(data->dataValues[j].value.type == &UA_TYPES[UA_TYPES_UINT32]);
-            UA_UInt32 * value = (UA_UInt32 *)data->dataValues[j].value.data;
-            // first need to be 43
-            if (j == 0) {
-                ck_assert(*value == 43);
-            } else {
-                ck_assert(*value < 5);
-            }
-        }
-    }
-    UA_HistoryReadResponse_deleteMembers(&response);
-    UA_HistoryDataBackend_Memory_deleteMembers(&setting.historizingBackend);
-}
-END_TEST
-
-START_TEST(Server_HistorizingStrategyValueSet)
-{
-    // init to a defined value
-    UA_StatusCode retval = setUInt32(client, outNodeId, 43);
-    ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    // set a data backend
-    UA_HistorizingNodeIdSettings setting;
-    setting.historizingBackend = UA_HistoryDataBackend_Memory(3, 100);
-    setting.maxHistoryDataResponseSize = 100;
-    setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_VALUESET;
-    serverMutexLock();
-    retval = gathering->registerNodeId(server, gathering->context, &outNodeId, setting);
-    serverMutexUnlock();
-    ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    // fill the data
-    UA_fakeSleep(100);
-    UA_DateTime start = UA_DateTime_now();
-    UA_fakeSleep(100);
-    for (UA_UInt32 i = 0; i < 10; ++i) {
-        retval = setUInt32(client, outNodeId, i);
-        ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-        UA_fakeSleep(100);
-    }
-    UA_DateTime end = UA_DateTime_now();
-
-    // request
-    UA_HistoryReadResponse response;
-    UA_HistoryReadResponse_init(&response);
-    requestHistory(start, end, &response, 0, false, NULL);
-
-    // test the response
-    ck_assert_str_eq(UA_StatusCode_name(response.responseHeader.serviceResult), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-    ck_assert_uint_eq(response.resultsSize, 1);
-    for (size_t i = 0; i < response.resultsSize; ++i) {
-        ck_assert_str_eq(UA_StatusCode_name(response.results[i].statusCode), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-        ck_assert_uint_eq(response.results[i].historyData.encoding, UA_EXTENSIONOBJECT_DECODED);
-        ck_assert(response.results[i].historyData.content.decoded.type == &UA_TYPES[UA_TYPES_HISTORYDATA]);
-        UA_HistoryData * data = (UA_HistoryData *)response.results[i].historyData.content.decoded.data;
-        ck_assert(data->dataValuesSize > 0);
-        for (size_t j = 0; j < data->dataValuesSize; ++j) {
-            ck_assert(data->dataValues[j].sourceTimestamp >= start && data->dataValues[j].sourceTimestamp < end);
-            ck_assert_uint_eq(data->dataValues[j].hasSourceTimestamp, true);
-            ck_assert_str_eq(UA_StatusCode_name(data->dataValues[j].status), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-            ck_assert_uint_eq(data->dataValues[j].hasValue, true);
-            ck_assert(data->dataValues[j].value.type == &UA_TYPES[UA_TYPES_UINT32]);
-            UA_UInt32 * value = (UA_UInt32 *)data->dataValues[j].value.data;
-            ck_assert_uint_eq(*value, j);
-        }
-    }
-    UA_HistoryReadResponse_deleteMembers(&response);
-    UA_HistoryDataBackend_Memory_deleteMembers(&setting.historizingBackend);
-}
-END_TEST
-
-START_TEST(Server_HistorizingBackendMemory)
-{
-    UA_HistoryDataBackend backend = UA_HistoryDataBackend_Memory(1, 1);
-    UA_HistorizingNodeIdSettings setting;
-    setting.historizingBackend = backend;
-    setting.maxHistoryDataResponseSize = 1000;
-    setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_USER;
-    serverMutexLock();
-    UA_StatusCode ret = gathering->registerNodeId(server, gathering->context, &outNodeId, setting);
-    serverMutexUnlock();
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    // empty backend should not crash
-    UA_UInt32 retval = testHistoricalDataBackend(100);
-    fprintf(stderr, "%d tests expected failed.\n", retval);
-
-    // fill backend
-    ck_assert_uint_eq(fillHistoricalDataBackend(backend), true);
-
-    // read all in one
-    retval = testHistoricalDataBackend(100);
-    fprintf(stderr, "%d tests failed.\n", retval);
-    ck_assert_uint_eq(retval, 0);
-
-    // read continuous one at one request
-    retval = testHistoricalDataBackend(1);
-    fprintf(stderr, "%d tests failed.\n", retval);
-    ck_assert_uint_eq(retval, 0);
-
-    // read continuous two at one request
-    retval = testHistoricalDataBackend(2);
-    fprintf(stderr, "%d tests failed.\n", retval);
-    ck_assert_uint_eq(retval, 0);
-    UA_HistoryDataBackend_Memory_deleteMembers(&setting.historizingBackend);
-}
-END_TEST
-
-START_TEST(Server_HistorizingRandomIndexBackend)
-{
-    UA_HistoryDataBackend backend = UA_HistoryDataBackend_randomindextest(testData);
-    UA_HistorizingNodeIdSettings setting;
-    setting.historizingBackend = backend;
-    setting.maxHistoryDataResponseSize = 1000;
-    setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_USER;
-    serverMutexLock();
-    UA_StatusCode ret = gathering->registerNodeId(server, gathering->context, &outNodeId, setting);
-    serverMutexUnlock();
-    ck_assert_str_eq(UA_StatusCode_name(ret), UA_StatusCode_name(UA_STATUSCODE_GOOD));
-
-    // read all in one
-    UA_UInt32 retval = testHistoricalDataBackend(100);
-    fprintf(stderr, "%d tests failed.\n", retval);
-    ck_assert_uint_eq(retval, 0);
-
-    // read continuous one at one request
-    retval = testHistoricalDataBackend(1);
-    fprintf(stderr, "%d tests failed.\n", retval);
-    ck_assert_uint_eq(retval, 0);
-
-    // read continuous two at one request
-    retval = testHistoricalDataBackend(2);
-    fprintf(stderr, "%d tests failed.\n", retval);
-    ck_assert_uint_eq(retval, 0);
-    UA_HistoryDataBackend_randomindextest_deleteMembers(&backend);
-}
-END_TEST
-
-#endif /*UA_ENABLE_HISTORIZING*/
-
-static Suite* testSuite_Client(void)
-{
-    Suite *s = suite_create("Server Historical Data");
-    TCase *tc_server = tcase_create("Server Historical Data Basic");
-    tcase_add_checked_fixture(tc_server, setup, teardown);
-#ifdef UA_ENABLE_HISTORIZING
-    tcase_add_test(tc_server, Server_HistorizingStrategyPoll);
-    tcase_add_test(tc_server, Server_HistorizingStrategyUser);
-    tcase_add_test(tc_server, Server_HistorizingStrategyValueSet);
-    tcase_add_test(tc_server, Server_HistorizingBackendMemory);
-    tcase_add_test(tc_server, Server_HistorizingRandomIndexBackend);
-    tcase_add_test(tc_server, Server_HistorizingUpdateDelete);
-    tcase_add_test(tc_server, Server_HistorizingUpdateInsert);
-    tcase_add_test(tc_server, Server_HistorizingUpdateReplace);
-    tcase_add_test(tc_server, Server_HistorizingUpdateUpdate);
-#endif /* UA_ENABLE_HISTORIZING */
-    suite_add_tcase(s, tc_server);
-
-    return s;
-}
-
-int main(void)
-{
-#ifdef UA_ENABLE_HISTORIZING
-    testDataSorted = sortDateTimes(testData);
-#endif /* UA_ENABLE_HISTORIZING */
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-#ifdef UA_ENABLE_HISTORIZING
-    UA_free(testDataSorted);
-#endif /* UA_ENABLE_HISTORIZING */
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_server_jobs.c b/ext/open62541/tests/server/check_server_jobs.c
deleted file mode 100644
index 9ed8a54..0000000
--- a/ext/open62541/tests/server/check_server_jobs.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/server_config_default.h>
-
-#include "server/ua_server_internal.h"
-
-#include <check.h>
-
-#include "testing_clock.h"
-
-UA_Server *server = NULL;
-UA_Boolean *executed;
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-    UA_Server_run_startup(server);
-}
-
-static void teardown(void) {
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-
-static void
-dummyCallback(UA_Server *serverPtr, void *data) {
-    *executed = true;
-}
-
-START_TEST(Server_addRemoveRepeatedCallback) {
-    executed = UA_Boolean_new();
-
-    /* The callback is added to the main queue only upon the next run_iterate */
-    UA_UInt64 id;
-    UA_Server_addRepeatedCallback(server, dummyCallback, NULL, 10, &id);
-
-    /* Wait until the callback has surely timed out */
-    UA_fakeSleep(15);
-    UA_Server_run_iterate(server, false);
-
-    /* Wait a bit longer until the workers have picked up the dispatched callback */
-    UA_realSleep(100);
-    ck_assert_uint_eq(*executed, true);
-
-    UA_Server_removeRepeatedCallback(server, id);
-    UA_Boolean_delete(executed);
-}
-END_TEST
-
-UA_UInt64 *cbId;
-
-static void
-removeItselfCallback(UA_Server *serverPtr, void *data) {
-    UA_Server_removeRepeatedCallback(serverPtr, *cbId);
-}
-
-START_TEST(Server_repeatedCallbackRemoveItself) {
-    cbId = UA_UInt64_new();
-    UA_Server_addRepeatedCallback(server, removeItselfCallback, NULL, 10, cbId);
-
-    UA_fakeSleep(15);
-    UA_Server_run_iterate(server, false);
-
-    UA_UInt64_delete(cbId);
-}
-END_TEST
-
-static Suite* testSuite_Client(void) {
-    Suite *s = suite_create("Server Callbacks");
-    TCase *tc_server = tcase_create("Server Repeated Callbacks");
-    tcase_add_checked_fixture(tc_server, setup, teardown);
-    tcase_add_test(tc_server, Server_addRemoveRepeatedCallback);
-    tcase_add_test(tc_server, Server_repeatedCallbackRemoveItself);
-    suite_add_tcase(s, tc_server);
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_server_monitoringspeed.c b/ext/open62541/tests/server/check_server_monitoringspeed.c
deleted file mode 100644
index 42d7b5c..0000000
--- a/ext/open62541/tests/server/check_server_monitoringspeed.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-/* This example is just to see how fast we can monitor value changes. The server does
-   not open a TCP port. */
-
-#include <open62541/server_config_default.h>
-
-#include "server/ua_subscription.h"
-#include "ua_server_internal.h"
-
-#include <check.h>
-#include <stdio.h>
-#include <time.h>
-
-#include "testing_networklayers.h"
-#include "testing_policy.h"
-
-static UA_SecureChannel testChannel;
-static UA_SecurityPolicy dummyPolicy;
-static UA_Connection testingConnection;
-static funcs_called funcsCalled;
-static key_sizes keySizes;
-static UA_Server *server;
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    TestingPolicy(&dummyPolicy, UA_BYTESTRING_NULL, &funcsCalled, &keySizes);
-    UA_SecureChannel_init(&testChannel);
-    UA_SecureChannel_setSecurityPolicy(&testChannel, &dummyPolicy, &UA_BYTESTRING_NULL);
-
-    testingConnection = createDummyConnection(65535, NULL);
-    UA_Connection_attachSecureChannel(&testingConnection, &testChannel);
-    testChannel.connection = &testingConnection;
-}
-
-static void teardown(void) {
-    UA_SecureChannel_close(&testChannel);
-    UA_SecureChannel_deleteMembers(&testChannel);
-    dummyPolicy.deleteMembers(&dummyPolicy);
-    testingConnection.close(&testingConnection);
-
-    UA_Server_delete(server);
-}
-
-static size_t callbackCount = 0;
-
-static void
-dataChangeNotificationCallback(UA_Server *s, UA_UInt32 monitoredItemId,
-                               void *monitoredItemContext, const UA_NodeId *nodeId,
-                               void *nodeContext, UA_UInt32 attributeId,
-                               const UA_DataValue *value) {
-    callbackCount++;
-}
-
-START_TEST(monitorIntegerNoChanges) {
-    /* add a variable node to the address space */
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    UA_Int32 myInteger = 42;
-    UA_Variant_setScalar(&attr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    attr.description = UA_LOCALIZEDTEXT("en-US","the answer");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","the answer");
-    UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "the.answer");
-    UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "the answer");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_StatusCode retval = UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId,
-                                                     parentReferenceNodeId, myIntegerName,
-                                                     UA_NODEID_NULL, attr, NULL, NULL);
-    UA_assert(retval == UA_STATUSCODE_GOOD);
-
-    UA_MonitoredItemCreateRequest item;
-    UA_MonitoredItemCreateRequest_init(&item);
-    item.itemToMonitor.nodeId = myIntegerNodeId;
-    item.itemToMonitor.attributeId = UA_ATTRIBUTEID_VALUE;
-    item.monitoringMode = UA_MONITORINGMODE_REPORTING;
-    UA_Server_createDataChangeMonitoredItem(server, UA_TIMESTAMPSTORETURN_NEITHER,
-                                            item, NULL, dataChangeNotificationCallback);
-
-    callbackCount = 0;
-
-    UA_MonitoredItem *mon = LIST_FIRST(&server->localMonitoredItems);
-
-    clock_t begin, finish;
-    begin = clock();
-
-    for(int i = 0; i < 1000000; i++) {
-        UA_MonitoredItem_sampleCallback(server, mon);
-    }
-
-    finish = clock();
-
-    double time_spent = (double)(finish - begin) / CLOCKS_PER_SEC;
-    printf("duration was %f s\n", time_spent);
-    printf("retval is %s\n", UA_StatusCode_name(retval));
-
-    UA_assert(callbackCount == 0);
-}
-END_TEST
-
-static Suite * monitoring_speed_suite (void) {
-    Suite *s = suite_create ("Monitoring Speed");
-
-    TCase* tc_datachange = tcase_create ("DataChange");
-    tcase_add_checked_fixture(tc_datachange, setup, teardown);
-    tcase_add_test (tc_datachange, monitorIntegerNoChanges);
-    suite_add_tcase (s, tc_datachange);
-
-    return s;
-}
-
-int main (void) {
-    int number_failed = 0;
-    Suite *s = monitoring_speed_suite();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr,CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    number_failed += srunner_ntests_failed (sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_server_readspeed.c b/ext/open62541/tests/server/check_server_readspeed.c
deleted file mode 100644
index 7585ad0..0000000
--- a/ext/open62541/tests/server/check_server_readspeed.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
-
-/* This example is just to see how fast we can process messages. The server does
-   not open a TCP port. */
-
-#include <open62541/server_config_default.h>
-
-#include "server/ua_services.h"
-#include "ua_server_internal.h"
-#include "ua_types_encoding_binary.h"
-
-#include <check.h>
-#include <time.h>
-
-#include "testing_networklayers.h"
-#include "testing_policy.h"
-
-static UA_SecureChannel testChannel;
-static UA_SecurityPolicy dummyPolicy;
-static UA_Connection testingConnection;
-static funcs_called funcsCalled;
-static key_sizes keySizes;
-
-static UA_Server *server;
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    TestingPolicy(&dummyPolicy, UA_BYTESTRING_NULL, &funcsCalled, &keySizes);
-    UA_SecureChannel_init(&testChannel);
-    UA_SecureChannel_setSecurityPolicy(&testChannel, &dummyPolicy, &UA_BYTESTRING_NULL);
-
-    testingConnection = createDummyConnection(65535, NULL);
-    UA_Connection_attachSecureChannel(&testingConnection, &testChannel);
-    testChannel.connection = &testingConnection;
-}
-
-static void teardown(void) {
-    UA_SecureChannel_close(&testChannel);
-    UA_SecureChannel_deleteMembers(&testChannel);
-    dummyPolicy.deleteMembers(&dummyPolicy);
-    testingConnection.close(&testingConnection);
-
-    UA_Server_delete(server);
-}
-
-START_TEST(readSpeed) {
-    /* add a variable node to the address space */
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    UA_Int32 myInteger = 42;
-    UA_Variant_setScalar(&attr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    attr.description = UA_LOCALIZEDTEXT("en-US","the answer");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","the answer");
-    UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "the.answer");
-    UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "the answer");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_StatusCode retval = UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId,
-                                                     parentReferenceNodeId, myIntegerName,
-                                                     UA_NODEID_NULL, attr, NULL, NULL);
-    UA_assert(retval == UA_STATUSCODE_GOOD);
-
-    UA_ReadRequest request;
-    UA_ReadRequest_init(&request);
-    UA_ReadValueId rvi;
-    rvi.nodeId = myIntegerNodeId;
-    rvi.attributeId = UA_ATTRIBUTEID_VALUE;
-    rvi.indexRange = UA_STRING_NULL;
-    rvi.dataEncoding = UA_QUALIFIEDNAME(0, "Default Binary");
-    request.timestampsToReturn = UA_TIMESTAMPSTORETURN_NEITHER;
-    request.nodesToReadSize = 1;
-    request.nodesToRead = &rvi;
-
-    UA_ByteString request_msg;
-    retval |= UA_ByteString_allocBuffer(&request_msg, 1000);
-    UA_ByteString response_msg;
-    retval |= UA_ByteString_allocBuffer(&response_msg, 1000);
-
-    UA_Byte *pos = request_msg.data;
-    const UA_Byte *end = &request_msg.data[request_msg.length];
-    retval |= UA_encodeBinary(&request, &UA_TYPES[UA_TYPES_READREQUEST], &pos, &end, NULL, NULL);
-    ck_assert(retval == UA_STATUSCODE_GOOD);
-
-    UA_ReadRequest req;
-    UA_ReadResponse res;
-    UA_ReadResponse_init(&res);
-
-    clock_t begin, finish;
-    begin = clock();
-
-    for(size_t i = 0; i < 1000000; i++) {
-        size_t offset = 0;
-        retval |= UA_decodeBinary(&request_msg, &offset, &req, &UA_TYPES[UA_TYPES_READREQUEST], NULL);
-
-        UA_LOCK(server->serviceMutex);
-        Service_Read(server, &server->adminSession, &req, &res);
-        UA_UNLOCK(server->serviceMutex);
-
-        UA_Byte *rpos = response_msg.data;
-        const UA_Byte *rend = &response_msg.data[response_msg.length];
-        retval |= UA_encodeBinary(&res, &UA_TYPES[UA_TYPES_READRESPONSE],
-                                  &rpos, &rend, NULL, NULL);
-
-        UA_ReadRequest_deleteMembers(&req);
-        UA_ReadResponse_deleteMembers(&res);
-    }
-
-    finish = clock();
-    ck_assert(retval == UA_STATUSCODE_GOOD);
-
-    double time_spent = (double)(finish - begin) / CLOCKS_PER_SEC;
-    printf("duration was %f s\n", time_spent);
-    printf("retval is %s\n", UA_StatusCode_name(retval));
-
-    UA_ByteString_deleteMembers(&request_msg);
-    UA_ByteString_deleteMembers(&response_msg);
-}
-END_TEST
-
-static Suite * service_speed_suite (void) {
-    Suite *s = suite_create ("Service Speed");
-
-    TCase* tc_read = tcase_create ("Read");
-    tcase_add_checked_fixture(tc_read, setup, teardown);
-    tcase_add_test (tc_read, readSpeed);
-    suite_add_tcase (s, tc_read);
-
-    return s;
-}
-
-int main (void) {
-    int number_failed = 0;
-    Suite *s = service_speed_suite();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr,CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    number_failed += srunner_ntests_failed (sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_server_userspace.c b/ext/open62541/tests/server/check_server_userspace.c
deleted file mode 100644
index 0f69f7d..0000000
--- a/ext/open62541/tests/server/check_server_userspace.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/server_config_default.h>
-#include <open62541/types.h>
-
-#include <check.h>
-
-#ifdef __clang__
-//required for ck_assert_ptr_eq and const casting
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wincompatible-pointer-types-discards-qualifiers"
-#endif
-
-START_TEST(Server_addNamespace_ShallWork) {
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    UA_UInt16 a = UA_Server_addNamespace(server, "http://nameOfNamespace");
-    UA_UInt16 b = UA_Server_addNamespace(server, "http://nameOfNamespace");
-    UA_UInt16 c = UA_Server_addNamespace(server, "http://nameOfNamespace2");
-
-    ck_assert_uint_gt(a, 0);
-    ck_assert_uint_eq(a,b);
-    ck_assert_uint_ne(a,c);
-
-    UA_Server_delete(server);
-}
-END_TEST
-
-START_TEST(Server_addNamespace_writeService) {
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    UA_Variant namespaces;
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    UA_Server_readValue(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_NAMESPACEARRAY),
-                        &namespaces);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert(namespaces.type == &UA_TYPES[UA_TYPES_STRING]);
-
-    namespaces.data = UA_realloc(namespaces.data, (namespaces.arrayLength + 1) * sizeof(UA_String));
-    ++namespaces.arrayLength;
-    UA_String *ns = (UA_String*)namespaces.data;
-    ns[namespaces.arrayLength-1] = UA_STRING_ALLOC("test");
-    size_t nsSize = namespaces.arrayLength;
-
-    retval = UA_Server_writeValue(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_NAMESPACEARRAY),
-                                  namespaces);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_Variant_deleteMembers(&namespaces);
-
-    /* Now read again */
-    UA_Server_readValue(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_NAMESPACEARRAY),
-                        &namespaces);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(namespaces.arrayLength, nsSize);
-
-    UA_Variant_deleteMembers(&namespaces);
-    UA_Server_delete(server);
-}
-END_TEST
-
-struct nodeIterData {
-    UA_NodeId id;
-    UA_Boolean isInverse;
-    UA_NodeId referenceTypeID;
-    UA_Boolean hit;
-};
-#define NODE_ITER_DATA_SIZE 3
-
-static UA_StatusCode
-nodeIter(UA_NodeId childId, UA_Boolean isInverse, UA_NodeId referenceTypeId, void *handle) {
-    struct nodeIterData* objectsFolderChildren = ( struct nodeIterData*)handle;
-
-    ck_assert_int_eq(childId.namespaceIndex, 0);
-    ck_assert(childId.identifierType == UA_NODEIDTYPE_NUMERIC);
-
-    int i;
-
-    for(i=0; i<NODE_ITER_DATA_SIZE; i++) {
-        if(UA_NodeId_equal(&childId, &objectsFolderChildren[i].id)) {
-            break;
-        }
-    }
-    ck_assert_int_lt(i, NODE_ITER_DATA_SIZE);
-
-    ck_assert(objectsFolderChildren[i].isInverse == isInverse);
-
-    ck_assert(!objectsFolderChildren[i].hit);
-    objectsFolderChildren[i].hit = UA_TRUE;
-
-    ck_assert(UA_NodeId_equal(&referenceTypeId, &objectsFolderChildren[i].referenceTypeID));
-
-    return UA_STATUSCODE_GOOD;
-}
-
-START_TEST(Server_forEachChildNodeCall) {
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    /* List all the children/references of the objects folder
-     * The forEachChildNodeCall has to hit all of them */
-    struct nodeIterData objectsFolderChildren[3];
-    objectsFolderChildren[0].id = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
-    objectsFolderChildren[0].isInverse = UA_FALSE;
-    objectsFolderChildren[0].referenceTypeID = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    objectsFolderChildren[0].hit = UA_FALSE;
-
-    objectsFolderChildren[1].id = UA_NODEID_NUMERIC(0, UA_NS0ID_ROOTFOLDER);
-    objectsFolderChildren[1].isInverse = UA_TRUE;
-    objectsFolderChildren[1].referenceTypeID = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    objectsFolderChildren[1].hit = UA_FALSE;
-
-    objectsFolderChildren[2].id = UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE);
-    objectsFolderChildren[2].isInverse = UA_FALSE;
-    objectsFolderChildren[2].referenceTypeID = UA_NODEID_NUMERIC(0, UA_NS0ID_HASTYPEDEFINITION);
-    objectsFolderChildren[2].hit = UA_FALSE;
-
-    UA_StatusCode retval =
-        UA_Server_forEachChildNodeCall(server, UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                       nodeIter, &objectsFolderChildren);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    /* Check if all nodes are hit */
-    for (int i=0; i<NODE_ITER_DATA_SIZE; i++) {
-        ck_assert(objectsFolderChildren[i].hit);
-    }
-
-    UA_Server_delete(server);
-} END_TEST
-
-
-START_TEST(Server_set_customHostname) {
-    UA_String customHost = UA_STRING("fancy-host");
-    UA_UInt16 port = 10042;
-
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setMinimal(config, port, NULL);
-    UA_ServerConfig_setCustomHostname(config, customHost);
-
-    UA_StatusCode retval = UA_Server_run_startup(server);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    // TODO when we have more network layers, extend this
-    ck_assert_uint_ge(config->networkLayersSize, 1);
-    ck_assert_uint_eq(config->applicationDescription.discoveryUrlsSize, config->networkLayersSize);
-
-
-    for (size_t i=0; i<config->networkLayersSize; i++) {
-        const UA_ServerNetworkLayer *nl = &config->networkLayers[i];
-        char discoveryUrl[256];
-        int len = snprintf(discoveryUrl, 255, "opc.tcp://%.*s:%d/", (int)customHost.length, customHost.data, port);
-        ck_assert_int_eq(nl->discoveryUrl.length, len);
-        ck_assert_int_eq(config->applicationDescription.discoveryUrls[i].length, len);
-        ck_assert(strncmp(discoveryUrl, (char*)nl->discoveryUrl.data, len)==0);
-        ck_assert(strncmp(discoveryUrl, (char*)config->applicationDescription.discoveryUrls[i].data, len)==0);
-    }
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-}
-END_TEST
-
-static Suite* testSuite_ServerUserspace(void) {
-    Suite *s = suite_create("ServerUserspace");
-    TCase *tc_core = tcase_create("Core");
-    tcase_add_test(tc_core, Server_addNamespace_ShallWork);
-    tcase_add_test(tc_core, Server_addNamespace_writeService);
-    tcase_add_test(tc_core, Server_forEachChildNodeCall);
-    tcase_add_test(tc_core, Server_set_customHostname);
-
-    suite_add_tcase(s,tc_core);
-    return s;
-}
-
-int main(void) {
-    int number_failed = 0;
-
-    Suite *s;
-    SRunner *sr;
-
-    s = testSuite_ServerUserspace();
-    sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    number_failed += srunner_ntests_failed(sr);
-    srunner_free(sr);
-
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
-
-#ifdef __clang__
-#pragma clang diagnostic pop
-#endif
diff --git a/ext/open62541/tests/server/check_services_attributes.c b/ext/open62541/tests/server/check_services_attributes.c
deleted file mode 100644
index 96c191b..0000000
--- a/ext/open62541/tests/server/check_services_attributes.c
+++ /dev/null
@@ -1,1010 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/server_config_default.h>
-
-#include "server/ua_server_internal.h"
-#include "server/ua_services.h"
-
-#include <check.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-
-#ifdef __clang__
-//required for ck_assert_ptr_eq and const casting
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wincompatible-pointer-types-discards-qualifiers"
-#endif
-
-static UA_Server *server = NULL;
-
-static UA_StatusCode
-readCPUTemperature(UA_Server *server_,
-                   const UA_NodeId *sessionId, void *sessionContext,
-                   const UA_NodeId *nodeId, void *nodeContext,
-                   UA_Boolean sourceTimeStamp, const UA_NumericRange *range,
-                   UA_DataValue *dataValue) {
-    UA_Float temp = 20.5f;
-    UA_Variant_setScalarCopy(&dataValue->value, &temp, &UA_TYPES[UA_TYPES_FLOAT]);
-    dataValue->hasValue = true;
-    return UA_STATUSCODE_GOOD;
-}
-
-static void teardown(void) {
-    UA_Server_delete(server);
-}
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-    UA_StatusCode retval = UA_STATUSCODE_GOOD;
-
-    /* VariableNode */
-    UA_VariableAttributes vattr = UA_VariableAttributes_default;
-    UA_Int32 myInteger = 42;
-    UA_Variant_setScalar(&vattr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    vattr.description = UA_LOCALIZEDTEXT("locale","the answer");
-    vattr.displayName = UA_LOCALIZEDTEXT("locale","the answer");
-    vattr.valueRank = UA_VALUERANK_ANY;
-    UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "the answer");
-    UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "the.answer");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    retval = UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId,
-                                       parentReferenceNodeId, myIntegerName,
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                       vattr, NULL, NULL);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    /* Enum VariableNode */
-    UA_MessageSecurityMode m = UA_MESSAGESECURITYMODE_SIGN;
-    UA_Variant_setScalar(&vattr.value, &m, &UA_TYPES[UA_TYPES_MESSAGESECURITYMODE]);
-    vattr.description = UA_LOCALIZEDTEXT("locale","the enum answer");
-    vattr.displayName = UA_LOCALIZEDTEXT("locale","the enum answer");
-    vattr.valueRank = UA_VALUERANK_ANY;
-    retval = UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "the.enum.answer"),
-                                       parentNodeId, parentReferenceNodeId,
-                                       UA_QUALIFIEDNAME(1, "the enum answer"),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                       vattr, NULL, NULL);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    /* DataSource VariableNode */
-    vattr = UA_VariableAttributes_default;
-    UA_DataSource temperatureDataSource;
-    temperatureDataSource.read = readCPUTemperature;
-    temperatureDataSource.write = NULL;
-    vattr.description = UA_LOCALIZEDTEXT("en-US","temperature");
-    vattr.displayName = UA_LOCALIZEDTEXT("en-US","temperature");
-    retval = UA_Server_addDataSourceVariableNode(server, UA_NODEID_STRING(1, "cpu.temperature"),
-                                                 UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                                 UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                                 UA_QUALIFIEDNAME(1, "cpu temperature"),
-                                                 UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                                 vattr, temperatureDataSource,
-                                                 NULL, NULL);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    /* VariableNode with array */
-    vattr = UA_VariableAttributes_default;
-    UA_Int32 myIntegerArray[9] = {1,2,3,4,5,6,7,8,9};
-    UA_Variant_setArray(&vattr.value, &myIntegerArray, 9, &UA_TYPES[UA_TYPES_INT32]);
-    vattr.valueRank = UA_VALUERANK_ANY;
-    UA_UInt32 myIntegerDimensions[2] = {3,3};
-    vattr.value.arrayDimensions = myIntegerDimensions;
-    vattr.value.arrayDimensionsSize = 2;
-    vattr.displayName = UA_LOCALIZEDTEXT("locale","myarray");
-    myIntegerName = UA_QUALIFIEDNAME(1, "myarray");
-    myIntegerNodeId = UA_NODEID_STRING(1, "myarray");
-    parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    retval = UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId,
-                                       parentReferenceNodeId, myIntegerName,
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                       vattr, NULL, NULL);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    /* ObjectNode */
-    UA_ObjectAttributes obj_attr = UA_ObjectAttributes_default;
-    obj_attr.description = UA_LOCALIZEDTEXT("en-US","Demo");
-    obj_attr.displayName = UA_LOCALIZEDTEXT("en-US","Demo");
-    retval = UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, 50),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                     UA_QUALIFIEDNAME(1, "Demo"),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE),
-                                     obj_attr, NULL, NULL);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    /* ViewNode */
-    UA_ViewAttributes view_attr = UA_ViewAttributes_default;
-    view_attr.description = UA_LOCALIZEDTEXT("en-US", "Viewtest");
-    view_attr.displayName = UA_LOCALIZEDTEXT("en-US", "Viewtest");
-    retval = UA_Server_addViewNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_VIEWNODE),
-                                   UA_NODEID_NUMERIC(0, UA_NS0ID_VIEWSFOLDER),
-                                   UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                   UA_QUALIFIEDNAME(0, "Viewtest"), view_attr, NULL, NULL);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    /* DataTypeNode */
-    UA_DataTypeAttributes typeattr = UA_DataTypeAttributes_default;
-    typeattr.displayName = UA_LOCALIZEDTEXT("en-US", "TestDataType");
-    UA_Server_addDataTypeNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_ARGUMENT),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATATYPE),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                  UA_QUALIFIEDNAME(0, "Argument"), typeattr, NULL, NULL);
-
-#ifdef UA_ENABLE_METHODCALLS
-    /* MethodNode */
-    UA_MethodAttributes ma = UA_MethodAttributes_default;
-    ma.description = UA_LOCALIZEDTEXT("en-US", "Methodtest");
-    ma.displayName = UA_LOCALIZEDTEXT("en-US", "Methodtest");
-    retval = UA_Server_addMethodNode(server, UA_NODEID_NUMERIC(1, UA_NS0ID_METHODNODE),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                     UA_QUALIFIEDNAME(0, "Methodtest"), ma,
-                                     NULL, 0, NULL, 0, NULL, NULL, NULL);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-#endif
-}
-
-static UA_VariableNode* makeCompareSequence(void) {
-    UA_VariableNode *node = (UA_VariableNode*)
-        UA_Nodestore_newNode(server->nsCtx, UA_NODECLASS_VARIABLE);
-
-    UA_Int32 myInteger = 42;
-    UA_Variant_setScalarCopy(&node->value.data.value.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    node->value.data.value.hasValue = true;
-
-    const UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "the answer");
-    UA_QualifiedName_copy(&myIntegerName,&node->browseName);
-
-    const UA_LocalizedText myIntegerDisplName = UA_LOCALIZEDTEXT("locale", "the answer");
-    UA_LocalizedText_copy(&myIntegerDisplName, &node->displayName);
-    UA_LocalizedText_copy(&myIntegerDisplName, &node->description);
-
-    const UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "the.answer");
-    UA_NodeId_copy(&myIntegerNodeId,&node->nodeId);
-
-    return node;
-}
-
-START_TEST(ReadSingleAttributeValueWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_VALUE;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(resp.status, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_INT32] == resp.value.type);
-    ck_assert_int_eq(42, *(UA_Int32* )resp.value.data);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleDataSourceAttributeValueEmptyWithoutTimestamp) {
-    UA_Variant empty;
-    UA_Variant_init(&empty);
-    UA_StatusCode ret =
-        UA_Server_writeValue(server, UA_NODEID_STRING(1, "the.answer"), empty);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, ret);
-
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_VALUE;
-
-    // read 1
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, resp.status);
-    ck_assert_int_eq(true, resp.hasValue);
-    UA_DataValue_deleteMembers(&resp);
-
-    // read 2
-    ret = UA_Server_readValue(server, rvi.nodeId, &empty);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, ret);
-} END_TEST
-
-START_TEST(ReadSingleAttributeValueRangeWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "myarray");
-    rvi.indexRange = UA_STRING("1:2,0:1");
-    rvi.attributeId = UA_ATTRIBUTEID_VALUE;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(4, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_INT32] == resp.value.type);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeNodeIdWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_NODEID;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    const UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "the.answer");
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_NODEID] == resp.value.type);
-    UA_NodeId* respval = (UA_NodeId*) resp.value.data;
-    ck_assert_int_eq(1, respval->namespaceIndex);
-    ck_assert(UA_String_equal(&myIntegerNodeId.identifier.string, &respval->identifier.string));
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeNodeClassWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_NODECLASS;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_NODECLASS] == resp.value.type);
-    ck_assert_int_eq(*(UA_Int32*)resp.value.data,UA_NODECLASS_VARIABLE);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeBrowseNameWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_BROWSENAME;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-    
-    UA_QualifiedName* respval = (UA_QualifiedName*) resp.value.data;
-    const UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "the answer");
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_QUALIFIEDNAME] == resp.value.type);
-    ck_assert_int_eq(1, respval->namespaceIndex);
-    ck_assert(UA_String_equal(&myIntegerName.name, &respval->name));
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeDisplayNameWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_DISPLAYNAME;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    UA_LocalizedText* respval = (UA_LocalizedText*) resp.value.data;
-    const UA_LocalizedText comp = UA_LOCALIZEDTEXT("locale", "the answer");
-    UA_VariableNode* compNode = makeCompareSequence();
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_LOCALIZEDTEXT] == resp.value.type);
-    ck_assert(UA_String_equal(&comp.text, &respval->text));
-    ck_assert(UA_String_equal(&compNode->displayName.locale, &respval->locale));
-    UA_DataValue_deleteMembers(&resp);
-    UA_Nodestore_deleteNode(server->nsCtx, (UA_Node*)compNode);
-} END_TEST
-
-START_TEST(ReadSingleAttributeDescriptionWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_DESCRIPTION;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-    
-    UA_LocalizedText* respval = (UA_LocalizedText*) resp.value.data;
-    UA_VariableNode* compNode = makeCompareSequence();
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_LOCALIZEDTEXT] == resp.value.type);
-    ck_assert(UA_String_equal(&compNode->description.locale, &respval->locale));
-    ck_assert(UA_String_equal(&compNode->description.text, &respval->text));
-    UA_DataValue_deleteMembers(&resp);
-    UA_Nodestore_deleteNode(server->nsCtx, (UA_Node*)compNode);
-} END_TEST
-
-START_TEST(ReadSingleAttributeWriteMaskWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_WRITEMASK;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-    
-    UA_UInt32* respval = (UA_UInt32*) resp.value.data;
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_UINT32] == resp.value.type);
-    ck_assert_int_eq(0,*respval);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeUserWriteMaskWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_USERWRITEMASK;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    /* Uncommented since the userwritemask is always 0xffffffff for the local admin user */
-    /* UA_UInt32* respval = (UA_UInt32*) resp.value.data; */
-    /* ck_assert_int_eq(0, resp.value.arrayLength); */
-    /* ck_assert_ptr_eq(&UA_TYPES[UA_TYPES_UINT32], resp.value.type); */
-    /* ck_assert_int_eq(0,*respval); */
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeIsAbstractWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    rvi.attributeId = UA_ATTRIBUTEID_ISABSTRACT;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_BOOLEAN] == resp.value.type);
-    ck_assert(*(UA_Boolean* )resp.value.data==false);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeSymmetricWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    rvi.attributeId = UA_ATTRIBUTEID_SYMMETRIC;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_BOOLEAN] == resp.value.type);
-    ck_assert(*(UA_Boolean* )resp.value.data==false);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeInverseNameWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    rvi.attributeId = UA_ATTRIBUTEID_INVERSENAME;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    UA_LocalizedText* respval = (UA_LocalizedText*) resp.value.data;
-    const UA_LocalizedText comp = UA_LOCALIZEDTEXT("", "OrganizedBy");
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_LOCALIZEDTEXT] == resp.value.type);
-    ck_assert(UA_String_equal(&comp.text, &respval->text));
-    ck_assert(UA_String_equal(&comp.locale, &respval->locale));
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeContainsNoLoopsWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_VIEWNODE);
-    rvi.attributeId = UA_ATTRIBUTEID_CONTAINSNOLOOPS;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_BOOLEAN] == resp.value.type);
-    ck_assert(*(UA_Boolean* )resp.value.data==false);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeEventNotifierWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_NUMERIC(1, 50);
-    rvi.attributeId = UA_ATTRIBUTEID_EVENTNOTIFIER;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, resp.status);
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_BYTE] == resp.value.type);
-    ck_assert_int_eq(*(UA_Byte*)resp.value.data, 0);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeDataTypeWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_DATATYPE;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, resp.status);
-    ck_assert_int_eq(true, resp.hasValue);
-    ck_assert(&UA_TYPES[UA_TYPES_NODEID] == resp.value.type);
-    UA_NodeId* respval = (UA_NodeId*)resp.value.data;
-    ck_assert_int_eq(respval->namespaceIndex,0);
-    ck_assert_int_eq(respval->identifier.numeric, UA_NS0ID_BASEDATATYPE);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeValueRankWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_VALUERANK;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_INT32] == resp.value.type);
-    ck_assert_int_eq(-2, *(UA_Int32* )resp.value.data);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeArrayDimensionsWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_ARRAYDIMENSIONS;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_UINT32] == resp.value.type);
-    ck_assert_ptr_eq((UA_Int32*)resp.value.data,0);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeAccessLevelWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_ACCESSLEVEL;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_BYTE] == resp.value.type);
-    ck_assert_int_eq(*(UA_Byte*)resp.value.data, UA_ACCESSLEVELMASK_READ); // set by default
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeUserAccessLevelWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_USERACCESSLEVEL;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    /* Uncommented since the accesslevel is always 0xff for the local admin user */
-    /* const UA_VariableNode* compNode = */
-    /*     (const UA_VariableNode*)UA_NodeStore_getNode(server->nsCtx, &rvi.nodeId); */
-    /* ck_assert_int_eq(0, resp.value.arrayLength); */
-    /* ck_assert_ptr_eq(&UA_TYPES[UA_TYPES_BYTE], resp.value.type); */
-    /* ck_assert_int_eq(*(UA_Byte*)resp.value.data, compNode->accessLevel & 0xFF); // 0xFF is the default userAccessLevel */
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeMinimumSamplingIntervalWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-    
-    UA_Double* respval = (UA_Double*) resp.value.data;
-    UA_VariableNode *compNode = makeCompareSequence();
-    UA_Double comp = (UA_Double) compNode->minimumSamplingInterval;
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_DOUBLE] == resp.value.type);
-    ck_assert(*respval == comp);
-    UA_DataValue_deleteMembers(&resp);
-    UA_Nodestore_deleteNode(server->nsCtx, (UA_Node*)compNode);
-} END_TEST
-
-START_TEST(ReadSingleAttributeHistorizingWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_HISTORIZING;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_BOOLEAN] == resp.value.type);
-    ck_assert(*(UA_Boolean*)resp.value.data==false);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeExecutableWithoutTimestamp) {
-#ifdef UA_ENABLE_METHODCALLS
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_NUMERIC(1, UA_NS0ID_METHODNODE);
-    rvi.attributeId = UA_ATTRIBUTEID_EXECUTABLE;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(true, resp.hasValue);
-    ck_assert_int_eq(0, resp.value.arrayLength);
-    ck_assert(&UA_TYPES[UA_TYPES_BOOLEAN] == resp.value.type);
-    ck_assert(*(UA_Boolean*)resp.value.data==true);
-    UA_DataValue_deleteMembers(&resp);
-#endif
-} END_TEST
-
-START_TEST(ReadSingleAttributeUserExecutableWithoutTimestamp) {
-#ifdef UA_ENABLE_METHODCALLS
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_NUMERIC(1, UA_NS0ID_METHODNODE);
-    rvi.attributeId = UA_ATTRIBUTEID_USEREXECUTABLE;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    /* Uncommented since userexecutable is always true for the local admin user */
-    /* ck_assert_int_eq(0, resp.value.arrayLength); */
-    /* ck_assert_ptr_eq(&UA_TYPES[UA_TYPES_BOOLEAN], resp.value.type); */
-    /* ck_assert(*(UA_Boolean*)resp.value.data==false); */
-    UA_DataValue_deleteMembers(&resp);
-#endif
-} END_TEST
-
-START_TEST(ReadSingleDataSourceAttributeValueWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "cpu.temperature");
-    rvi.attributeId = UA_ATTRIBUTEID_VALUE;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, resp.status);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleDataSourceAttributeDataTypeWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "cpu.temperature");
-    rvi.attributeId = UA_ATTRIBUTEID_DATATYPE;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, resp.status);
-    ck_assert_int_eq(resp.hasServerTimestamp, false);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleDataSourceAttributeArrayDimensionsWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "cpu.temperature");
-    rvi.attributeId = UA_ATTRIBUTEID_ARRAYDIMENSIONS;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-    
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, resp.status);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(ReadSingleAttributeDataTypeDefinitionWithoutTimestamp) {
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ARGUMENT);
-    rvi.attributeId = UA_ATTRIBUTEID_DATATYPEDEFINITION;
-
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-
-#ifdef UA_ENABLE_TYPEDESCRIPTION
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, resp.status);
-    ck_assert_uint_eq(resp.value.type->typeIndex, UA_TYPES_STRUCTUREDEFINITION);
-    UA_StructureDefinition *def = (UA_StructureDefinition*)resp.value.data;
-    ck_assert_uint_eq(def->fieldsSize, 5);
-#else
-    ck_assert_int_eq(UA_STATUSCODE_BADATTRIBUTEIDINVALID, resp.status);
-#endif
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-/* Tests for writeValue method */
-
-START_TEST(WriteSingleAttributeNodeId) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_NodeId id;
-    UA_NodeId_init(&id);
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_NODEID;
-    wValue.value.hasValue = true;
-    UA_Variant_setScalar(&wValue.value.value, &id, &UA_TYPES[UA_TYPES_NODEID]);
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADWRITENOTSUPPORTED);
-} END_TEST
-
-START_TEST(WriteSingleAttributeNodeclass) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    UA_NodeClass nc;
-    UA_NodeClass_init(&nc);
-    wValue.attributeId = UA_ATTRIBUTEID_NODECLASS;
-    wValue.value.hasValue = true;
-    UA_Variant_setScalar(&wValue.value.value, &nc, &UA_TYPES[UA_TYPES_NODECLASS]);
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADWRITENOTSUPPORTED);
-} END_TEST
-
-START_TEST(WriteSingleAttributeBrowseName) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_QualifiedName testValue = UA_QUALIFIEDNAME(1, "the.answer");
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_QUALIFIEDNAME]);
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_BROWSENAME;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(WriteSingleAttributeDisplayName) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_LocalizedText testValue = UA_LOCALIZEDTEXT("en-EN", "the.answer");
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-    wValue.value.hasValue = true;
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_DISPLAYNAME;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(WriteSingleAttributeDescription) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_LocalizedText testValue = UA_LOCALIZEDTEXT("en-EN", "the.answer");
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-    wValue.value.hasValue = true;
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_DESCRIPTION;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(WriteSingleAttributeWriteMask) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Int32 testValue = 0;
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_UINT32]);
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_WRITEMASK;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(WriteSingleAttributeIsAbstract) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Boolean testValue = true;
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_ISABSTRACT;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADNODECLASSINVALID);
-} END_TEST
-
-START_TEST(WriteSingleAttributeSymmetric) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Boolean testValue = true;
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_SYMMETRIC;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADNODECLASSINVALID);
-} END_TEST
-
-START_TEST(WriteSingleAttributeInverseName) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_LocalizedText testValue = UA_LOCALIZEDTEXT("en-US", "not.the.answer");
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_INVERSENAME;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADNODECLASSINVALID);
-} END_TEST
-
-START_TEST(WriteSingleAttributeContainsNoLoops) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Boolean testValue = true;
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_CONTAINSNOLOOPS;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADNODECLASSINVALID);
-} END_TEST
-
-START_TEST(WriteSingleAttributeEventNotifier) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Byte testValue = 0;
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_BYTE]);
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_EVENTNOTIFIER;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADNODECLASSINVALID);
-} END_TEST
-
-START_TEST(WriteSingleAttributeValue) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Int32 myInteger = 20;
-    UA_Variant_setScalar(&wValue.value.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    wValue.value.hasValue = true;
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_VALUE;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_VALUE;
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert(resp.hasValue);
-    ck_assert_int_eq(20, *(UA_Int32*)resp.value.data);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(WriteSingleAttributeValueEnum) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Int32 myInteger = 4;
-    UA_Variant_setScalar(&wValue.value.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    wValue.value.hasValue = true;
-    wValue.nodeId = UA_NODEID_STRING(1, "the.enum.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_VALUE;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_STRING(1, "the.enum.answer");
-    rvi.attributeId = UA_ATTRIBUTEID_VALUE;
-    UA_DataValue resp = UA_Server_read(server, &rvi, UA_TIMESTAMPSTORETURN_NEITHER);
-
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert(resp.hasValue);
-    ck_assert_int_eq(4, *(UA_Int32*)resp.value.data);
-    UA_DataValue_deleteMembers(&resp);
-} END_TEST
-
-START_TEST(WriteSingleAttributeValueRangeFromScalar) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Int32 myInteger = 20;
-    UA_Variant_setScalar(&wValue.value.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    wValue.value.hasValue = true;
-    wValue.nodeId = UA_NODEID_STRING(1, "myarray");
-    wValue.indexRange = UA_STRING("0,0");
-    wValue.attributeId = UA_ATTRIBUTEID_VALUE;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(WriteSingleAttributeValueRangeFromArray) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Int32 myInteger = 20;
-    UA_Variant_setArray(&wValue.value.value, &myInteger, 1, &UA_TYPES[UA_TYPES_INT32]);
-    wValue.value.hasValue = true;
-    wValue.nodeId = UA_NODEID_STRING(1, "myarray");
-    wValue.indexRange = UA_STRING("0,0");
-    wValue.attributeId = UA_ATTRIBUTEID_VALUE;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(WriteSingleAttributeDataType) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_NodeId typeId;
-    UA_NodeId_init(&typeId);
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_DATATYPE;
-    wValue.value.hasValue = true;
-    UA_Variant_setScalar(&wValue.value.value, &typeId, &UA_TYPES[UA_TYPES_NODEID]);
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADTYPEMISMATCH);
-} END_TEST
-
-START_TEST(WriteSingleAttributeValueRank) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Int32 testValue = -1;
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_INT32]);
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_VALUERANK;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    // Returns attributeInvalid, since variant/value may be writable
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(WriteSingleAttributeArrayDimensions) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_UInt32 testValue[] = {1,1,1};
-    UA_Variant_setArray(&wValue.value.value, &testValue, 3, &UA_TYPES[UA_TYPES_UINT32]);
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_ARRAYDIMENSIONS;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    // Returns attributeInvalid, since variant/value may be writable
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADTYPEMISMATCH);
-} END_TEST
-
-START_TEST(WriteSingleAttributeAccessLevel) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Byte testValue = 0;
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_BYTE]);
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_ACCESSLEVEL;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(WriteSingleAttributeMinimumSamplingInterval) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Double testValue = 0.0;
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_DOUBLE]);
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(WriteSingleAttributeHistorizing) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Boolean testValue = true;
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_HISTORIZING;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(WriteSingleAttributeExecutable) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Boolean testValue = true;
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_BOOLEAN]);
-    wValue.nodeId = UA_NODEID_STRING(1, "the.answer");
-    wValue.attributeId = UA_ATTRIBUTEID_EXECUTABLE;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADNODECLASSINVALID);
-} END_TEST
-
-START_TEST(WriteSingleDataSourceAttributeValue) {
-    UA_WriteValue wValue;
-    UA_WriteValue_init(&wValue);
-    UA_Int32 testValue = 0;
-    UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_INT32]);
-    wValue.nodeId = UA_NODEID_STRING(1, "cpu.temperature");
-    wValue.attributeId = UA_ATTRIBUTEID_VALUE;
-    wValue.value.hasValue = true;
-    UA_StatusCode retval = UA_Server_write(server, &wValue);
-    ck_assert_int_eq(retval, UA_STATUSCODE_BADWRITENOTSUPPORTED);
-} END_TEST
-
-static Suite * testSuite_services_attributes(void) {
-    Suite *s = suite_create("services_attributes_read");
-
-    TCase *tc_readSingleAttributes = tcase_create("readSingleAttributes");
-    tcase_add_checked_fixture(tc_readSingleAttributes, setup, teardown);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeValueWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeValueRangeWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeNodeIdWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeNodeClassWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeBrowseNameWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeDisplayNameWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeDescriptionWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeWriteMaskWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeUserWriteMaskWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeIsAbstractWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeSymmetricWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeInverseNameWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeContainsNoLoopsWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeEventNotifierWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeDataTypeWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeValueRankWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeArrayDimensionsWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeAccessLevelWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeUserAccessLevelWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeMinimumSamplingIntervalWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeHistorizingWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeExecutableWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeUserExecutableWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleDataSourceAttributeValueWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleDataSourceAttributeValueEmptyWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleDataSourceAttributeDataTypeWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleDataSourceAttributeArrayDimensionsWithoutTimestamp);
-    tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeDataTypeDefinitionWithoutTimestamp);
-
-    suite_add_tcase(s, tc_readSingleAttributes);
-
-    TCase *tc_writeSingleAttributes = tcase_create("writeSingleAttributes");
-    tcase_add_checked_fixture(tc_writeSingleAttributes, setup, teardown);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeNodeId);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeNodeclass);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeBrowseName);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeDisplayName);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeDescription);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeWriteMask);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeIsAbstract);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeSymmetric);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeInverseName);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeContainsNoLoops);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeEventNotifier);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeValue);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeValueEnum);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeDataType);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeValueRangeFromScalar);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeValueRangeFromArray);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeValueRank);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeArrayDimensions);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeAccessLevel);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeMinimumSamplingInterval);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeHistorizing);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeExecutable);
-    tcase_add_test(tc_writeSingleAttributes, WriteSingleDataSourceAttributeValue);
-
-    suite_add_tcase(s, tc_writeSingleAttributes);
-
-    return s;
-}
-
-int main(void) {
-
-    int number_failed = 0;
-    Suite *s;
-    s = testSuite_services_attributes();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-
-    number_failed += srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
-
-
-#ifdef __clang__
-#pragma clang diagnostic pop
-#endif
diff --git a/ext/open62541/tests/server/check_services_call.c b/ext/open62541/tests/server/check_services_call.c
deleted file mode 100644
index b763892..0000000
--- a/ext/open62541/tests/server/check_services_call.c
+++ /dev/null
@@ -1,230 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright 2019 (c) basysKom GmbH <opensource@basyskom.com> (Author: Frank Meerkötter)
- */
-
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-#include <open62541/types.h>
-
-#include "server/ua_server_internal.h"
-#include "server/ua_services.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-
-#include "check.h"
-
-static UA_Server *server = NULL;
-
-static UA_StatusCode
-methodCallback(UA_Server *serverArg,
-         const UA_NodeId *sessionId, void *sessionHandle,
-         const UA_NodeId *methodId, void *methodContext,
-         const UA_NodeId *objectId, void *objectContext,
-         size_t inputSize, const UA_Variant *input,
-         size_t outputSize, UA_Variant *output)
-{
-    return UA_STATUSCODE_GOOD;
-}
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    UA_MethodAttributes noFpAttr = UA_MethodAttributes_default;
-    noFpAttr.description = UA_LOCALIZEDTEXT("en-US","No function pointer attached");
-    noFpAttr.displayName = UA_LOCALIZEDTEXT("en-US","No function pointer attached");
-    noFpAttr.executable = true;
-    noFpAttr.userExecutable = true;
-    UA_Server_addMethodNode(server, UA_NODEID_STRING(1, "nofunctionpointer"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASORDEREDCOMPONENT),
-                            UA_QUALIFIEDNAME(1, "No function pointer"),
-                            noFpAttr, NULL, // no callback
-                            0, NULL, 0, NULL, NULL, NULL);
-
-    UA_MethodAttributes nonExecAttr = UA_MethodAttributes_default;
-    nonExecAttr.description = UA_LOCALIZEDTEXT("en-US","Not executable");
-    nonExecAttr.displayName = UA_LOCALIZEDTEXT("en-US","Not executable");
-    nonExecAttr.executable = false;
-    nonExecAttr.userExecutable = true;
-    UA_Server_addMethodNode(server, UA_NODEID_STRING(1, "nonexec"),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                            UA_NODEID_NUMERIC(0, UA_NS0ID_HASORDEREDCOMPONENT),
-                            UA_QUALIFIEDNAME(1, "Not executable"),
-                            nonExecAttr, &methodCallback,
-                            0, NULL, 0, NULL, NULL, NULL);
-}
-
-static void teardown(void) {
-    UA_Server_delete(server);
-}
-
-START_TEST(callUnknownMethod) {
-    const UA_UInt32 UA_NS0ID_UNKNOWN_METHOD = 60000;
-
-    UA_CallMethodRequest callMethodRequest;
-    UA_CallMethodRequest_init(&callMethodRequest);
-    callMethodRequest.methodId = UA_NODEID_NUMERIC(0, UA_NS0ID_UNKNOWN_METHOD);
-
-    UA_CallMethodResult result;
-    UA_CallMethodResult_init(&result);
-    result = UA_Server_call(server, &callMethodRequest);
-    ck_assert_int_eq(result.statusCode, UA_STATUSCODE_BADNODEIDUNKNOWN);
-} END_TEST
-
-START_TEST(callKnownMethodOnUnknownObject) {
-    const UA_UInt32 UA_NS0ID_UNKNOWN_OBJECT = 60000;
-
-    UA_CallMethodRequest callMethodRequest;
-    UA_CallMethodRequest_init(&callMethodRequest);
-    callMethodRequest.methodId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_REQUESTSERVERSTATECHANGE);
-    callMethodRequest.objectId = UA_NODEID_NUMERIC(0, UA_NS0ID_UNKNOWN_OBJECT);
-
-    UA_CallMethodResult result;
-    UA_CallMethodResult_init(&result);
-    result = UA_Server_call(server, &callMethodRequest);
-    ck_assert_int_eq(result.statusCode, UA_STATUSCODE_BADNODEIDUNKNOWN);
-} END_TEST
-
-START_TEST(callMethodAndObjectExistsButMethodHasWrongNodeClass) {
-    UA_CallMethodRequest callMethodRequest;
-    UA_CallMethodRequest_init(&callMethodRequest);
-    callMethodRequest.methodId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS);  // not a method
-    callMethodRequest.objectId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
-
-    UA_CallMethodResult result;
-    UA_CallMethodResult_init(&result);
-    result = UA_Server_call(server, &callMethodRequest);
-    ck_assert_int_eq(result.statusCode, UA_STATUSCODE_BADNODECLASSINVALID);
-} END_TEST
-
-START_TEST(callMethodOnUnrelatedObject) {
-    /* Minimal nodeset does not add any method nodes we may call here */
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-    UA_CallMethodRequest callMethodRequest;
-    UA_CallMethodRequest_init(&callMethodRequest);
-    callMethodRequest.methodId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_GETMONITOREDITEMS);
-    callMethodRequest.objectId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);  // not connected via hasComponent
-
-    UA_CallMethodResult result;
-    UA_CallMethodResult_init(&result);
-    result = UA_Server_call(server, &callMethodRequest);
-    ck_assert_int_eq(result.statusCode, UA_STATUSCODE_BADMETHODINVALID);
-#endif
-} END_TEST
-
-START_TEST(callMethodAndObjectExistsButNoFunctionPointerAttached) {
-    UA_CallMethodRequest callMethodRequest;
-    UA_CallMethodRequest_init(&callMethodRequest);
-    callMethodRequest.methodId = UA_NODEID_STRING(1, "nofunctionpointer");
-    callMethodRequest.objectId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-
-    UA_CallMethodResult result;
-    UA_CallMethodResult_init(&result);
-    result = UA_Server_call(server, &callMethodRequest);
-    ck_assert_int_eq(result.statusCode, UA_STATUSCODE_BADINTERNALERROR);
-} END_TEST
-
-START_TEST(callMethodNonExecutable) {
-    UA_CallMethodRequest callMethodRequest;
-    UA_CallMethodRequest_init(&callMethodRequest);
-    callMethodRequest.methodId = UA_NODEID_STRING(1, "nonexec");
-    callMethodRequest.objectId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-
-    UA_CallMethodResult result;
-    UA_CallMethodResult_init(&result);
-    result = UA_Server_call(server, &callMethodRequest);
-    ck_assert_int_eq(result.statusCode, UA_STATUSCODE_BADNOTEXECUTABLE);
-} END_TEST
-
-START_TEST(callMethodWithMissingArguments) {
-/* Minimal nodeset does not add any method nodes we may call here */
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-    UA_CallMethodRequest callMethodRequest;
-    UA_CallMethodRequest_init(&callMethodRequest);
-    callMethodRequest.methodId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_GETMONITOREDITEMS);
-    callMethodRequest.objectId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
-
-    UA_CallMethodResult result;
-    UA_CallMethodResult_init(&result);
-    result = UA_Server_call(server, &callMethodRequest);
-    ck_assert_int_eq(result.statusCode, UA_STATUSCODE_BADARGUMENTSMISSING);
-#endif
-} END_TEST
-
-START_TEST(callMethodWithTooManyArguments) {
-/* Minimal nodeset does not add any method nodes we may call here */
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-    UA_Variant inputArguments[2];
-    UA_Variant_init(&inputArguments[0]);
-    UA_Variant_init(&inputArguments[1]);
-
-    UA_CallMethodRequest callMethodRequest;
-    UA_CallMethodRequest_init(&callMethodRequest);
-    callMethodRequest.inputArgumentsSize = 2;         // 1 would be correct
-    callMethodRequest.inputArguments = (UA_Variant*)&inputArguments;
-    callMethodRequest.methodId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_GETMONITOREDITEMS);
-    callMethodRequest.objectId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
-
-    UA_CallMethodResult result;
-    UA_CallMethodResult_init(&result);
-    result = UA_Server_call(server, &callMethodRequest);
-    ck_assert_int_eq(result.statusCode, UA_STATUSCODE_BADTOOMANYARGUMENTS);
-#endif
-} END_TEST
-
-START_TEST(callMethodWithWronglyTypedArguments) {
-/* Minimal nodeset does not add any method nodes we may call here */
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-    UA_Variant inputArgument;
-    UA_Variant_init(&inputArgument);
-    UA_Double wrongType = 1.0;
-    UA_Variant_setScalar(&inputArgument, &wrongType, &UA_TYPES[UA_TYPES_DOUBLE]);  // UA_UInt32 would be correct
-
-    UA_CallMethodRequest callMethodRequest;
-    UA_CallMethodRequest_init(&callMethodRequest);
-    callMethodRequest.inputArgumentsSize = 1;
-    callMethodRequest.inputArguments = &inputArgument;
-    callMethodRequest.methodId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_GETMONITOREDITEMS);
-    callMethodRequest.objectId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
-
-    UA_CallMethodResult result;
-    UA_CallMethodResult_init(&result);
-    result = UA_Server_call(server, &callMethodRequest);
-
-    ck_assert_int_gt(result.inputArgumentResultsSize, 0);
-    ck_assert_int_eq(result.inputArgumentResults[0], UA_STATUSCODE_BADTYPEMISMATCH);
-    ck_assert_int_eq(result.statusCode, UA_STATUSCODE_BADINVALIDARGUMENT);
-
-    UA_Array_delete(result.inputArgumentResults, result.inputArgumentResultsSize, &UA_TYPES[UA_TYPES_STATUSCODE]);
-#endif
-} END_TEST
-
-int main(void) {
-    Suite *s = suite_create("services_call");
-
-    TCase *tc_call = tcase_create("call - error branches");
-    tcase_add_checked_fixture(tc_call, setup, teardown);
-    tcase_add_test(tc_call, callUnknownMethod);
-    tcase_add_test(tc_call, callKnownMethodOnUnknownObject);
-    tcase_add_test(tc_call, callMethodAndObjectExistsButMethodHasWrongNodeClass);
-    tcase_add_test(tc_call, callMethodAndObjectExistsButNoFunctionPointerAttached);
-    tcase_add_test(tc_call, callMethodNonExecutable);
-    tcase_add_test(tc_call, callMethodOnUnrelatedObject);
-    tcase_add_test(tc_call, callMethodWithMissingArguments);
-    tcase_add_test(tc_call, callMethodWithTooManyArguments);
-    tcase_add_test(tc_call, callMethodWithWronglyTypedArguments);
-    suite_add_tcase(s, tc_call);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_services_nodemanagement.c b/ext/open62541/tests/server/check_services_nodemanagement.c
deleted file mode 100644
index bbae3b1..0000000
--- a/ext/open62541/tests/server/check_services_nodemanagement.c
+++ /dev/null
@@ -1,653 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/server_config_default.h>
-
-#include "server/ua_server_internal.h"
-#include "server/ua_services.h"
-
-#include <check.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-
-static UA_Server *server = NULL;
-static UA_Int32 handleCalled = 0;
-
-static UA_StatusCode
-globalInstantiationMethod(UA_Server *server_,
-                          const UA_NodeId *sessionId, void *sessionContext,
-                          const UA_NodeId *nodeId, void **nodeContext) {
-    handleCalled++;
-    return UA_STATUSCODE_GOOD;
-}
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    UA_GlobalNodeLifecycle lifecycle;
-    lifecycle.constructor = globalInstantiationMethod;
-    lifecycle.destructor = NULL;
-    lifecycle.createOptionalChild = NULL;
-    lifecycle.generateChildNodeId = NULL;
-    config->nodeLifecycle = lifecycle;
-}
-
-static void teardown(void) {
-    UA_Server_delete(server);
-}
-
-START_TEST(AddVariableNode) {
-    /* Add a variable node to the address space */
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    UA_Int32 myInteger = 42;
-    UA_Variant_setScalar(&attr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    attr.description = UA_LOCALIZEDTEXT("en-US","the answer");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","the answer");
-    UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "the.answer");
-    UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "the answer");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_StatusCode res =
-        UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId,
-                                  parentReferenceNodeId, myIntegerName,
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                  attr, NULL, NULL);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, res);
-} END_TEST
-
-START_TEST(AddVariableNode_Matrix) {
-    /* Add a variable node to the address space */
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    attr.displayName = UA_LOCALIZEDTEXT("en-US", "Double Matrix");
-    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-
-    attr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
-    attr.valueRank = UA_VALUERANK_TWO_DIMENSIONS;
-    UA_UInt32 arrayDims[2] = {2,2};
-    attr.arrayDimensions = arrayDims;
-    attr.arrayDimensionsSize = 2;
-    UA_Double zero[4] = {0.0, 0.0, 0.0, 0.0};
-    UA_Variant_setArray(&attr.value, zero, 4, &UA_TYPES[UA_TYPES_DOUBLE]);
-    attr.value.arrayDimensions = arrayDims;
-    attr.value.arrayDimensionsSize = 2;
-
-    UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "double.matrix");
-    UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "double matrix");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_StatusCode res =
-        UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId,
-                                  parentReferenceNodeId, myIntegerName,
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                  attr, NULL, NULL);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, res);
-} END_TEST
-
-START_TEST(AddVariableNode_ExtensionObject) {
-        /* Add a variable node to the address space */
-        UA_VariableAttributes attr = UA_VariableAttributes_default;
-        attr.displayName = UA_LOCALIZEDTEXT("en-US","the extensionobject");
-
-        /* Set an ExtensionObject with an unknown binary encoding */
-        UA_ExtensionObject myExtensionObject;
-        UA_ExtensionObject_init(&myExtensionObject);
-        myExtensionObject.encoding = UA_EXTENSIONOBJECT_ENCODED_BYTESTRING;
-        myExtensionObject.content.encoded.typeId = UA_NODEID_NUMERIC(5, 1234);
-        UA_ByteString byteString = UA_BYTESTRING("String Payload as a ByteString extension");
-        myExtensionObject.content.encoded.body = byteString;
-        UA_Variant_setScalar(&attr.value, &myExtensionObject, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
-
-        UA_NodeId myEONodeId = UA_NODEID_STRING(1, "the.extensionobject");
-        UA_QualifiedName myEOName = UA_QUALIFIEDNAME(1, "the extensionobject");
-        UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-        UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-        UA_StatusCode res =
-            UA_Server_addVariableNode(server, myEONodeId, parentNodeId,
-                                      parentReferenceNodeId, myEOName,
-                                      UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                      attr, NULL, NULL);
-        ck_assert_int_eq(UA_STATUSCODE_GOOD, res);
-    } END_TEST
-
-
-static UA_NodeId pointTypeId;
-
-static void
-addVariableTypeNode(void) {
-    UA_VariableTypeAttributes vtAttr = UA_VariableTypeAttributes_default;
-    vtAttr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
-    vtAttr.valueRank = UA_VALUERANK_ONE_DIMENSION;
-    UA_UInt32 arrayDims[1] = {2};
-    vtAttr.arrayDimensions = arrayDims;
-    vtAttr.arrayDimensionsSize = 1;
-    vtAttr.displayName = UA_LOCALIZEDTEXT("en-US", "2DPoint Type");
-
-    /* a matching default value is required */
-    UA_Double zero[2] = {0.0, 0.0};
-    UA_Variant_setArray(&vtAttr.value, zero, 2, &UA_TYPES[UA_TYPES_DOUBLE]);
-
-    UA_StatusCode res =
-        UA_Server_addVariableTypeNode(server, UA_NODEID_NULL,
-                                      UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                      UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                      UA_QUALIFIEDNAME(1, "2DPoint Type"), UA_NODEID_NULL,
-                                      vtAttr, NULL, &pointTypeId);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, res);
-}
-
-START_TEST(InstantiateVariableTypeNode) {
-    addVariableTypeNode();
-    
-    /* Prepare the node attributes */
-    UA_UInt32 arrayDims[1] = {2};
-    UA_VariableAttributes vAttr = UA_VariableAttributes_default;
-    vAttr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
-    vAttr.valueRank = UA_VALUERANK_ONE_DIMENSION;
-    vAttr.arrayDimensions = arrayDims;
-    vAttr.arrayDimensionsSize = 1;
-    vAttr.displayName = UA_LOCALIZEDTEXT("en-US", "2DPoint Variable");
-    vAttr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-    /* vAttr.value is left empty, the server instantiates with the default value */
-
-    /* Add the node */
-    UA_NodeId pointVariableId;
-    UA_StatusCode res =
-        UA_Server_addVariableNode(server, UA_NODEID_NULL,
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                  UA_QUALIFIEDNAME(1, "2DPoint Type"), pointTypeId,
-                                  vAttr, NULL, &pointVariableId);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, res);
-
-    /* Was the value instantiated? */
-    UA_Variant val;
-    UA_Server_readValue(server, pointVariableId, &val);
-    ck_assert(val.type != NULL);
-
-    UA_Variant_deleteMembers(&val);
-} END_TEST
-
-START_TEST(InstantiateVariableTypeNodeWrongDims) {
-    addVariableTypeNode();
-    
-    /* Prepare the node attributes */
-    UA_UInt32 arrayDims[1] = {3}; /* This will fail as the dimensions are too big */
-    UA_VariableAttributes vAttr = UA_VariableAttributes_default;
-    vAttr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
-    vAttr.valueRank = UA_VALUERANK_ONE_DIMENSION;
-    vAttr.arrayDimensions = arrayDims;
-    vAttr.arrayDimensionsSize = 1;
-    vAttr.displayName = UA_LOCALIZEDTEXT("en-US", "2DPoint Variable");
-    vAttr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-    /* vAttr.value is left empty, the server instantiates with the default value */
-
-    /* Add the node */
-    UA_StatusCode res =
-        UA_Server_addVariableNode(server, UA_NODEID_NULL,
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                  UA_QUALIFIEDNAME(1, "2DPoint Type"), pointTypeId,
-                                  vAttr, NULL, NULL);
-    ck_assert_int_eq(UA_STATUSCODE_BADTYPEMISMATCH, res);
-} END_TEST
-
-START_TEST(InstantiateVariableTypeNodeLessDims) {
-    addVariableTypeNode();
-    
-    /* Prepare the node attributes */
-    UA_UInt32 arrayDims[1] = {1}; /* This will match as the dimension constraints are an upper bound */
-    UA_VariableAttributes vAttr = UA_VariableAttributes_default;
-    vAttr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
-    vAttr.valueRank = UA_VALUERANK_ONE_DIMENSION;
-    vAttr.arrayDimensions = arrayDims;
-    vAttr.arrayDimensionsSize = 1;
-    vAttr.displayName = UA_LOCALIZEDTEXT("en-US", "2DPoint Variable");
-    vAttr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
-    /* vAttr.value is left empty, the server instantiates with the default value */
-
-    /* Add the node */
-    UA_StatusCode res =
-        UA_Server_addVariableNode(server, UA_NODEID_NULL,
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                  UA_QUALIFIEDNAME(1, "2DPoint Type"), pointTypeId,
-                                  vAttr, NULL, NULL);
-    ck_assert_int_eq(UA_STATUSCODE_BADTYPEMISMATCH, res);
-} END_TEST
-
-START_TEST(AddComplexTypeWithInheritance) {
-    /* add a variable node to the address space */
-
-    /* Node UA_NS0ID_SERVERTYPE is not available in the minimal NS0 */
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-    UA_ObjectAttributes attr = UA_ObjectAttributes_default;
-    attr.description = UA_LOCALIZEDTEXT("en-US","fakeServerStruct");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","fakeServerStruct");
-  
-    UA_NodeId myObjectNodeId = UA_NODEID_STRING(1, "the.fake.Server.Struct");
-    UA_QualifiedName myObjectName = UA_QUALIFIEDNAME(1, "the.fake.Server.Struct");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_StatusCode res =
-        UA_Server_addObjectNode(server, myObjectNodeId, parentNodeId,
-                                parentReferenceNodeId, myObjectName,
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_SERVERTYPE), attr,
-                                &handleCalled, NULL);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, res);
-    ck_assert_int_gt(handleCalled, 0); // Should be 58, but may depend on NS0 XML detail
-#endif
-} END_TEST
-
-START_TEST(AddNodeTwiceGivesError) {
-    /* add a variable node to the address space */
-    UA_VariableAttributes attr = UA_VariableAttributes_default;
-    UA_Int32 myInteger = 42;
-    UA_Variant_setScalar(&attr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
-    attr.description = UA_LOCALIZEDTEXT("en-US","the answer");
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","the answer");
-    UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "the.answer");
-    UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "the answer");
-    UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    UA_StatusCode res =
-        UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId,
-                                  parentReferenceNodeId, myIntegerName,
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                  attr, NULL, NULL);
-    ck_assert_int_eq(UA_STATUSCODE_GOOD, res);
-    res = UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId,
-                                    parentReferenceNodeId, myIntegerName,
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                    attr, NULL, NULL);
-    ck_assert_int_eq(res, UA_STATUSCODE_BADNODEIDEXISTS);
-} END_TEST
-
-static UA_Boolean constructorCalled = false;
-
-static UA_StatusCode
-objectConstructor(UA_Server *server_,
-                  const UA_NodeId *sessionId, void *sessionContext,
-                  const UA_NodeId *typeId, void *typeContext,
-                  const UA_NodeId *nodeId, void **nodeContext) {
-    constructorCalled = true;
-    return UA_STATUSCODE_GOOD;
-}
-
-START_TEST(AddObjectWithConstructor) {
-    /* Add an object type */
-    UA_NodeId objecttypeid = UA_NODEID_NUMERIC(0, 13371337);
-    UA_ObjectTypeAttributes attr = UA_ObjectTypeAttributes_default;
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","my objecttype");
-    UA_StatusCode res =
-        UA_Server_addObjectTypeNode(server, objecttypeid,
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                    UA_QUALIFIEDNAME(0, "myobjecttype"), attr,
-                                    NULL, NULL);
-    ck_assert_int_eq(res, UA_STATUSCODE_GOOD);
-
-    /* Add a constructor to the object type */
-    UA_NodeTypeLifecycle lifecycle;
-    lifecycle.constructor = objectConstructor;
-    lifecycle.destructor = NULL;
-    res = UA_Server_setNodeTypeLifecycle(server, objecttypeid, lifecycle);
-    ck_assert_int_eq(res, UA_STATUSCODE_GOOD);
-
-    /* Add an object of the type */
-    UA_ObjectAttributes attr2 = UA_ObjectAttributes_default;
-    attr2.displayName = UA_LOCALIZEDTEXT("en-US","my object");
-    res = UA_Server_addObjectNode(server, UA_NODEID_NULL,
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                  UA_QUALIFIEDNAME(0, "MyObjectNode"), objecttypeid,
-                                  attr2, NULL, NULL);
-    ck_assert_int_eq(res, UA_STATUSCODE_GOOD);
-
-    /* Verify that the constructor was called */
-    ck_assert_int_eq(constructorCalled, true);
-} END_TEST
-
-static UA_Boolean destructorCalled = false;
-
-static void
-objectDestructor(UA_Server *server_,
-                 const UA_NodeId *sessionId, void *sessionContext,
-                 const UA_NodeId *typeId, void *typeContext,
-                 const UA_NodeId *nodeId, void **nodeContext) {
-    destructorCalled = true;
-}
-
-START_TEST(DeleteObjectWithDestructor) {
-    /* Add an object type */
-    UA_NodeId objecttypeid = UA_NODEID_NUMERIC(0, 13371337);
-    UA_ObjectTypeAttributes attr = UA_ObjectTypeAttributes_default;
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","my objecttype");
-    UA_StatusCode res =
-        UA_Server_addObjectTypeNode(server, objecttypeid,
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                    UA_QUALIFIEDNAME(0, "myobjecttype"), attr, NULL, NULL);
-    ck_assert_int_eq(res, UA_STATUSCODE_GOOD);
-
-    /* Add a constructor to the object type */
-    UA_NodeTypeLifecycle lifecycle;
-    lifecycle.constructor = NULL;
-    lifecycle.destructor = objectDestructor;
-    res = UA_Server_setNodeTypeLifecycle(server, objecttypeid, lifecycle);
-    ck_assert_int_eq(res, UA_STATUSCODE_GOOD);
-
-    /* Add an object of the type */
-    UA_NodeId objectid = UA_NODEID_NUMERIC(0, 23372337);
-    UA_ObjectAttributes attr2 = UA_ObjectAttributes_default;
-    attr2.displayName = UA_LOCALIZEDTEXT("en-US","my object");
-    res = UA_Server_addObjectNode(server, objectid,
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                  UA_QUALIFIEDNAME(0, "MyObject"), objecttypeid,
-                                  attr2, NULL, NULL);
-    ck_assert_int_eq(res, UA_STATUSCODE_GOOD);
-
-    /* Delete the object */
-    UA_Server_deleteNode(server, objectid, true);
-
-    /* Verify that the destructor was called */
-    ck_assert_int_eq(destructorCalled, true);
-} END_TEST
-
-START_TEST(DeleteObjectAndReferences) {
-    /* Add an object of the type */
-    UA_ObjectAttributes attr = UA_ObjectAttributes_default;
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","my object");
-    UA_NodeId objectid = UA_NODEID_NUMERIC(0, 23372337);
-    UA_StatusCode res;
-    res = UA_Server_addObjectNode(server, objectid,
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                  UA_QUALIFIEDNAME(0, "MyObject"),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                  attr, NULL, NULL);
-    ck_assert_int_eq(res, UA_STATUSCODE_GOOD);
-
-    /* Verify that we have a reference to the node from the objects folder */
-    UA_BrowseDescription bd;
-    UA_BrowseDescription_init(&bd);
-    bd.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    bd.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT);
-    bd.browseDirection = UA_BROWSEDIRECTION_FORWARD;
-    
-    UA_BrowseResult br = UA_Server_browse(server, 0, &bd);
-    ck_assert_int_eq(br.statusCode, UA_STATUSCODE_GOOD);
-    size_t refCount = 0;
-    for(size_t i = 0; i < br.referencesSize; ++i) {
-        if(UA_NodeId_equal(&br.references[i].nodeId.nodeId, &objectid))
-            refCount++;
-    }
-    ck_assert_int_eq(refCount, 1);
-    UA_BrowseResult_deleteMembers(&br);
-
-    /* Delete the object */
-    UA_Server_deleteNode(server, objectid, true);
-
-    /* Browse again, this time we expect that no reference is found */
-    br = UA_Server_browse(server, 0, &bd);
-    ck_assert_int_eq(br.statusCode, UA_STATUSCODE_GOOD);
-    refCount = 0;
-    for(size_t i = 0; i < br.referencesSize; ++i) {
-        if(UA_NodeId_equal(&br.references[i].nodeId.nodeId, &objectid))
-            refCount++;
-    }
-    ck_assert_int_eq(refCount, 0);
-    UA_BrowseResult_deleteMembers(&br);
-
-    /* Add an object the second time */
-    attr = UA_ObjectAttributes_default;
-    attr.displayName = UA_LOCALIZEDTEXT("en-US","my object");
-    objectid = UA_NODEID_NUMERIC(0, 23372337);
-    res = UA_Server_addObjectNode(server, objectid,
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                  UA_QUALIFIEDNAME(0, "MyObject"),
-                                  UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                  attr, NULL, NULL);
-    ck_assert_int_eq(res, UA_STATUSCODE_GOOD);
-
-    /* Browse again, this time we expect that a single reference to the node is found */
-    refCount = 0;
-    br = UA_Server_browse(server, 0, &bd);
-    ck_assert_int_eq(br.statusCode, UA_STATUSCODE_GOOD);
-    for(size_t i = 0; i < br.referencesSize; ++i) {
-        if(UA_NodeId_equal(&br.references[i].nodeId.nodeId, &objectid))
-            refCount++;
-    }
-    ck_assert_int_eq(refCount, 1);
-    UA_BrowseResult_deleteMembers(&br);
-} END_TEST
-
-
-/* Example taken from tutorial_server_object.c */
-START_TEST(InstantiateObjectType) {
-    /* Define the object type */
-    UA_NodeId pumpTypeId = {1, UA_NODEIDTYPE_NUMERIC, {1001}};
-
-    UA_StatusCode retval;
-
-    /* Define the object type for "Device" */
-    UA_NodeId deviceTypeId; /* get the nodeid assigned by the server */
-    UA_ObjectTypeAttributes dtAttr = UA_ObjectTypeAttributes_default;
-    dtAttr.displayName = UA_LOCALIZEDTEXT("en-US", "DeviceType");
-    retval = UA_Server_addObjectTypeNode(server, UA_NODEID_NULL,
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                         UA_QUALIFIEDNAME(1, "DeviceType"), dtAttr,
-                                         NULL, &deviceTypeId);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_VariableAttributes mnAttr = UA_VariableAttributes_default;
-    mnAttr.displayName = UA_LOCALIZEDTEXT("en-US", "ManufacturerName");
-    UA_NodeId manufacturerNameId;
-    retval = UA_Server_addVariableNode(server, UA_NODEID_NULL, deviceTypeId,
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                       UA_QUALIFIEDNAME(1, "ManufacturerName"),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                       mnAttr, NULL, &manufacturerNameId);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    /* UA_NS0ID_MODELLINGRULE_MANDATORY is not available in Minimal Nodeset */
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-    /* Make the manufacturer name mandatory */
-    retval = UA_Server_addReference(server, manufacturerNameId,
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE),
-                                    UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORY), true);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-#endif
-
-    UA_VariableAttributes modelAttr = UA_VariableAttributes_default;
-    modelAttr.displayName = UA_LOCALIZEDTEXT("en-US", "ModelName");
-    retval = UA_Server_addVariableNode(server, UA_NODEID_NULL, deviceTypeId,
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                       UA_QUALIFIEDNAME(1, "ModelName"),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                       modelAttr, NULL, NULL);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    /* Define the object type for "Pump" */
-    UA_ObjectTypeAttributes ptAttr = UA_ObjectTypeAttributes_default;
-    ptAttr.displayName = UA_LOCALIZEDTEXT("en-US", "PumpType");
-    retval = UA_Server_addObjectTypeNode(server, pumpTypeId, deviceTypeId,
-                                         UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                         UA_QUALIFIEDNAME(1, "PumpType"), ptAttr,
-                                         NULL, NULL);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    UA_VariableAttributes statusAttr = UA_VariableAttributes_default;
-    statusAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Status");
-    statusAttr.valueRank = UA_VALUERANK_SCALAR;
-    UA_NodeId statusId;
-    retval = UA_Server_addVariableNode(server, UA_NODEID_NULL, pumpTypeId,
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                       UA_QUALIFIEDNAME(1, "Status"),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                       statusAttr, NULL, &statusId);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-/* UA_NS0ID_MODELLINGRULE_MANDATORY is not available in Minimal Nodeset */
-#ifdef UA_GENERATED_NAMESPACE_ZERO
-    /* Make the status variable mandatory */
-    retval = UA_Server_addReference(server, statusId,
-                                    UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE),
-                                    UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORY), true);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-#endif
-
-    UA_VariableAttributes rpmAttr = UA_VariableAttributes_default;
-    rpmAttr.displayName = UA_LOCALIZEDTEXT("en-US", "MotorRPM");
-    rpmAttr.valueRank = UA_VALUERANK_SCALAR;
-    retval = UA_Server_addVariableNode(server, UA_NODEID_NULL, pumpTypeId,
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                       UA_QUALIFIEDNAME(1, "MotorRPMs"),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
-                                       rpmAttr, NULL, NULL);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-
-    /* Instantiate the variable */
-    UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-    oAttr.displayName = UA_LOCALIZEDTEXT("en-US", "MyPump");
-    retval = UA_Server_addObjectNode(server, UA_NODEID_NULL,
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                     UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                     UA_QUALIFIEDNAME(1, "MyPump"),
-                                     pumpTypeId, /* this refers to the object type
-                                                    identifier */
-                                     oAttr, NULL, NULL);
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-} END_TEST
-
-static UA_NodeId
-findReference(const UA_NodeId sourceId, const UA_NodeId refTypeId) {
-	UA_BrowseDescription * bDesc = UA_BrowseDescription_new();
-	UA_NodeId_copy(&sourceId, &bDesc->nodeId);
-	bDesc->browseDirection = UA_BROWSEDIRECTION_FORWARD;
-	bDesc->includeSubtypes = true;
-	bDesc->resultMask = UA_BROWSERESULTMASK_REFERENCETYPEID;
-	UA_BrowseResult bRes = UA_Server_browse(server, 0, bDesc);
-	ck_assert(bRes.statusCode == UA_STATUSCODE_GOOD);
-
-	UA_NodeId outNodeId = UA_NODEID_NULL;
-    for(size_t i = 0; i < bRes.referencesSize; i++) {
-        UA_ReferenceDescription rDesc = bRes.references[i];
-        if(UA_NodeId_equal(&rDesc.referenceTypeId, &refTypeId)) {
-            UA_NodeId_copy(&rDesc.nodeId.nodeId, &outNodeId);
-            break;
-        }
-    }
-
-	UA_BrowseDescription_deleteMembers(bDesc);
-	UA_BrowseDescription_delete(bDesc);
-	UA_BrowseResult_deleteMembers(&bRes);
-	return outNodeId;
-}
-
-static UA_NodeId
-registerRefType(char *forwName, char *invName) {
-	UA_NodeId outNodeId;
-	UA_ReferenceTypeAttributes refattr = UA_ReferenceTypeAttributes_default;
-	refattr.displayName = UA_LOCALIZEDTEXT(NULL, forwName);
-	refattr.inverseName = UA_LOCALIZEDTEXT(NULL, invName );
-	UA_QualifiedName browseName = UA_QUALIFIEDNAME(1, forwName);
-	UA_StatusCode st =
-        UA_Server_addReferenceTypeNode(server, UA_NODEID_NULL,
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_NONHIERARCHICALREFERENCES),
-                                       UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                       browseName, refattr, NULL, &outNodeId);
-	ck_assert(st == UA_STATUSCODE_GOOD);
-	return outNodeId;
-}
-
-static UA_NodeId
-addObjInstance(const UA_NodeId parentNodeId, char *dispName) {
-	UA_NodeId outNodeId;
-	UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
-	oAttr.displayName = UA_LOCALIZEDTEXT(NULL, dispName);
-	UA_QualifiedName browseName = UA_QUALIFIEDNAME(1, dispName);
-	UA_StatusCode st =
-        UA_Server_addObjectNode(server, UA_NODEID_NULL, 
-                                parentNodeId, UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                browseName, UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),
-                                oAttr, NULL, &outNodeId);
-	ck_assert(st == UA_STATUSCODE_GOOD);
-	return outNodeId;
-}
-
-START_TEST(AddDoubleReference) {
-	// create two different reference types
-	UA_NodeId ref1TypeId = registerRefType("HasRef1", "IsRefOf1");
-	UA_NodeId ref2TypeId = registerRefType("HasRef2", "IsRefOf2");
-
-	// create two different object instances
-    UA_NodeId objectsNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-	UA_NodeId sourceId = addObjInstance(objectsNodeId, "obj1");
-	UA_NodeId targetId = addObjInstance(objectsNodeId, "obj2");
-
-	// connect them twice, one time per reference type
-	UA_ExpandedNodeId targetExpId;
-	targetExpId.nodeId       = targetId;
-	targetExpId.namespaceUri = UA_STRING_NULL;
-	targetExpId.serverIndex  = 0;
-	UA_StatusCode st;
-	st = UA_Server_addReference(server, sourceId, ref1TypeId, targetExpId, true);
-	ck_assert(st == UA_STATUSCODE_GOOD);
-	st = UA_Server_addReference(server, sourceId, ref2TypeId, targetExpId, true);
-	ck_assert(st == UA_STATUSCODE_GOOD);
-    /* repetition fails */
-	st = UA_Server_addReference(server, sourceId, ref2TypeId, targetExpId, true);
-	ck_assert(st != UA_STATUSCODE_GOOD);
-
-	// check references where added
-	UA_NodeId targetCheckId;
-	targetCheckId = findReference(sourceId, ref1TypeId);
-	ck_assert(UA_NodeId_equal(&targetCheckId, &targetId));
-	targetCheckId = findReference(sourceId, ref2TypeId);
-	ck_assert(UA_NodeId_equal(&targetCheckId, &targetId));
-
-
-} END_TEST
-
-int main(void) {
-    Suite *s = suite_create("services_nodemanagement");
-
-    TCase *tc_addnodes = tcase_create("addnodes");
-    tcase_add_checked_fixture(tc_addnodes, setup, teardown);
-    tcase_add_test(tc_addnodes, AddVariableNode);
-    tcase_add_test(tc_addnodes, AddVariableNode_Matrix);
-    tcase_add_test(tc_addnodes, AddVariableNode_ExtensionObject);
-    tcase_add_test(tc_addnodes, InstantiateVariableTypeNode);
-    tcase_add_test(tc_addnodes, InstantiateVariableTypeNodeWrongDims);
-    tcase_add_test(tc_addnodes, InstantiateVariableTypeNodeLessDims);
-    tcase_add_test(tc_addnodes, AddComplexTypeWithInheritance);
-    tcase_add_test(tc_addnodes, AddNodeTwiceGivesError);
-    tcase_add_test(tc_addnodes, AddObjectWithConstructor);
-    tcase_add_test(tc_addnodes, InstantiateObjectType);
-    suite_add_tcase(s, tc_addnodes);
-
-    TCase *tc_deletenodes = tcase_create("deletenodes");
-    tcase_add_checked_fixture(tc_deletenodes, setup, teardown);
-    tcase_add_test(tc_deletenodes, DeleteObjectWithDestructor);
-    tcase_add_test(tc_deletenodes, DeleteObjectAndReferences);
-    suite_add_tcase(s, tc_deletenodes);
-
-    TCase *tc_addreferences = tcase_create("addreferences");
-    tcase_add_checked_fixture(tc_addreferences, setup, teardown);
-    tcase_add_test(tc_addreferences, AddDoubleReference);
-    suite_add_tcase(s, tc_addreferences);
-
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_services_subscriptions.c b/ext/open62541/tests/server/check_services_subscriptions.c
deleted file mode 100644
index 1d3290f..0000000
--- a/ext/open62541/tests/server/check_services_subscriptions.c
+++ /dev/null
@@ -1,881 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include "server/ua_server_internal.h"
-#include "server/ua_services.h"
-#include "server/ua_subscription.h"
-
-#include <check.h>
-
-#include "testing_clock.h"
-
-static UA_Server *server = NULL;
-static UA_Session *session = NULL;
-static UA_UInt32 monitored = 0; /* Number of active MonitoredItems */
-
-static void
-monitoredRegisterCallback(UA_Server *s,
-                          const UA_NodeId *sessionId, void *sessionContext,
-                          const UA_NodeId *nodeId, void *nodeContext,
-                          const UA_UInt32 attrId, const UA_Boolean removed) {
-    if(!removed)
-        monitored++;
-    else
-        monitored--;
-}
-
-static void
-createSession(void) {
-    UA_CreateSessionRequest request;
-    UA_CreateSessionRequest_init(&request);
-    request.requestedSessionTimeout = UA_UINT32_MAX;
-    UA_StatusCode retval = UA_SessionManager_createSession(&server->sessionManager, NULL,
-                                                           &request, &session);
-    ck_assert_uint_eq(retval, 0);
-}
-
-static void setup(void) {
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-    config->monitoredItemRegisterCallback = monitoredRegisterCallback;
-    UA_Server_run_startup(server);
-    createSession();
-}
-
-static void teardown(void) {
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-    ck_assert_uint_eq(monitored, 0); /* All MonitoredItems have been de-registered */
-}
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-
-static UA_UInt32 subscriptionId;
-static UA_UInt32 monitoredItemId;
-
-static void
-createSubscription(void) {
-    UA_CreateSubscriptionRequest request;
-    UA_CreateSubscriptionRequest_init(&request);
-    request.publishingEnabled = true;
-
-    UA_CreateSubscriptionResponse response;
-    UA_CreateSubscriptionResponse_init(&response);
-
-    UA_LOCK(server->serviceMutex);
-    Service_CreateSubscription(server, session, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    subscriptionId = response.subscriptionId;
-
-    UA_CreateSubscriptionResponse_deleteMembers(&response);
-}
-
-static void
-createMonitoredItem(void) {
-    UA_CreateMonitoredItemsRequest request;
-    UA_CreateMonitoredItemsRequest_init(&request);
-    request.subscriptionId = subscriptionId;
-    request.timestampsToReturn = UA_TIMESTAMPSTORETURN_SERVER;
-    UA_MonitoredItemCreateRequest item;
-    UA_MonitoredItemCreateRequest_init(&item);
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
-    rvi.attributeId = UA_ATTRIBUTEID_BROWSENAME;
-    rvi.indexRange = UA_STRING_NULL;
-    item.itemToMonitor = rvi;
-    item.monitoringMode = UA_MONITORINGMODE_REPORTING;
-    UA_MonitoringParameters params;
-    UA_MonitoringParameters_init(&params);
-    item.requestedParameters = params;
-    request.itemsToCreateSize = 1;
-    request.itemsToCreate = &item;
-
-    UA_CreateMonitoredItemsResponse response;
-    UA_CreateMonitoredItemsResponse_init(&response);
-
-    UA_LOCK(server->serviceMutex);
-    Service_CreateMonitoredItems(server, session, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(response.resultsSize, 1);
-    ck_assert_uint_eq(response.results[0].statusCode, UA_STATUSCODE_GOOD);
-
-    monitoredItemId = response.results[0].monitoredItemId;
-    ck_assert_uint_gt(monitoredItemId, 0);
-
-    UA_MonitoredItemCreateRequest_deleteMembers(&item);
-    UA_CreateMonitoredItemsResponse_deleteMembers(&response);
-}
-
-START_TEST(Server_createSubscription) {
-    /* Create a subscription */
-    UA_CreateSubscriptionRequest request;
-    UA_CreateSubscriptionRequest_init(&request);
-    request.publishingEnabled = true;
-
-    UA_CreateSubscriptionResponse response;
-    UA_CreateSubscriptionResponse_init(&response);
-    UA_LOCK(server->serviceMutex);
-    Service_CreateSubscription(server, session, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    subscriptionId = response.subscriptionId;
-
-    UA_CreateSubscriptionResponse_deleteMembers(&response);
-}
-END_TEST
-
-START_TEST(Server_modifySubscription) {
-    /* Create a subscription */
-    createSubscription();
-
-    /* Modify the subscription */
-    UA_ModifySubscriptionRequest request;
-    UA_ModifySubscriptionRequest_init(&request);
-    request.subscriptionId = subscriptionId;
-    // just some arbitrary numbers to test. They have no specific reason
-    request.requestedPublishingInterval = 100; // in ms
-    request.requestedLifetimeCount = 1000;
-    request.requestedMaxKeepAliveCount = 1000;
-    request.maxNotificationsPerPublish = 1;
-    request.priority = 10;
-
-    UA_ModifySubscriptionResponse response;
-    UA_ModifySubscriptionResponse_init(&response);
-
-    UA_LOCK(server->serviceMutex);
-    Service_ModifySubscription(server, session, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-
-    UA_ModifySubscriptionResponse_deleteMembers(&response);
-}
-END_TEST
-
-START_TEST(Server_setPublishingMode) {
-    createSubscription();
-    
-    UA_SetPublishingModeRequest request;
-    UA_SetPublishingModeRequest_init(&request);
-    request.publishingEnabled = UA_TRUE;
-    request.subscriptionIdsSize = 1;
-    request.subscriptionIds = &subscriptionId;
-
-    UA_SetPublishingModeResponse response;
-    UA_SetPublishingModeResponse_init(&response);
-
-    UA_LOCK(server->serviceMutex);
-    Service_SetPublishingMode(server, session, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(response.resultsSize, 1);
-    ck_assert_uint_eq(response.results[0], UA_STATUSCODE_GOOD);
-
-    UA_SetPublishingModeResponse_deleteMembers(&response);
-}
-END_TEST
-
-START_TEST(Server_republish) {
-    createSubscription();
-    
-    UA_RepublishRequest request;
-    UA_RepublishRequest_init(&request);
-    request.subscriptionId = subscriptionId;
-    request.retransmitSequenceNumber = 0;
-
-    UA_RepublishResponse response;
-    UA_RepublishResponse_init(&response);
-
-    UA_LOCK(server->serviceMutex);
-    Service_Republish(server, session, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_BADMESSAGENOTAVAILABLE);
-
-    UA_RepublishResponse_deleteMembers(&response);
-}
-END_TEST
-
-
-START_TEST(Server_republish_invalid) {
-    UA_RepublishRequest request;
-    UA_RepublishRequest_init(&request);
-    request.subscriptionId = subscriptionId;
-    request.retransmitSequenceNumber = 0;
-
-    UA_RepublishResponse response;
-    UA_RepublishResponse_init(&response);
-
-    UA_LOCK(server->serviceMutex);
-    Service_Republish(server, session, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID);
-
-    UA_RepublishResponse_deleteMembers(&response);
-}
-END_TEST
-
-START_TEST(Server_deleteSubscription) {
-    createSubscription();
-    
-    /* Remove the subscription */
-    UA_DeleteSubscriptionsRequest del_request;
-    UA_DeleteSubscriptionsRequest_init(&del_request);
-    del_request.subscriptionIdsSize = 1;
-    del_request.subscriptionIds = &subscriptionId;
-
-    UA_DeleteSubscriptionsResponse del_response;
-    UA_DeleteSubscriptionsResponse_init(&del_response);
-
-    UA_LOCK(server->serviceMutex);
-    Service_DeleteSubscriptions(server, session, &del_request, &del_response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(del_response.resultsSize, 1);
-    ck_assert_uint_eq(del_response.results[0], UA_STATUSCODE_GOOD);
-
-    UA_DeleteSubscriptionsResponse_deleteMembers(&del_response);
-}
-END_TEST
-
-START_TEST(Server_publishCallback) {
-    /* Create a subscription */
-    UA_CreateSubscriptionRequest request;
-    UA_CreateSubscriptionResponse response;
-
-    UA_CreateSubscriptionRequest_init(&request);
-    request.publishingEnabled = true;
-    UA_CreateSubscriptionResponse_init(&response);
-    UA_LOCK(server->serviceMutex);
-    Service_CreateSubscription(server, session, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    UA_UInt32 subscriptionId1 = response.subscriptionId;
-    UA_CreateSubscriptionResponse_deleteMembers(&response);
-
-    /* Create a second subscription */
-    UA_CreateSubscriptionRequest_init(&request);
-    request.publishingEnabled = true;
-    UA_CreateSubscriptionResponse_init(&response);
-    UA_LOCK(server->serviceMutex);
-    Service_CreateSubscription(server, session, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    UA_UInt32 subscriptionId2 = response.subscriptionId;
-    UA_Double publishingInterval = response.revisedPublishingInterval;
-    ck_assert(publishingInterval > 0.0f);
-    UA_CreateSubscriptionResponse_deleteMembers(&response);
-
-    /* Keepalive is set to max initially */
-    UA_Subscription *sub;
-    LIST_FOREACH(sub, &session->serverSubscriptions, listEntry)
-        ck_assert_uint_eq(sub->currentKeepAliveCount, sub->maxKeepAliveCount);
-
-    /* Sleep until the publishing interval times out */
-    UA_fakeSleep((UA_UInt32)publishingInterval + 1);
-    UA_Server_run_iterate(server, false);
-    UA_realSleep(100);
-
-    LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
-        if ((sub->subscriptionId == subscriptionId1) || (sub->subscriptionId == subscriptionId2))
-            ck_assert_uint_eq(sub->currentKeepAliveCount, sub->maxKeepAliveCount+1);
-    }
-
-    /* Remove the subscriptions */
-    UA_DeleteSubscriptionsRequest del_request;
-    UA_DeleteSubscriptionsRequest_init(&del_request);
-    UA_UInt32 removeIds[2] = {subscriptionId1, subscriptionId2};
-    del_request.subscriptionIdsSize = 2;
-    del_request.subscriptionIds = removeIds;
-
-    UA_DeleteSubscriptionsResponse del_response;
-    UA_DeleteSubscriptionsResponse_init(&del_response);
-
-    UA_LOCK(server->serviceMutex);
-    Service_DeleteSubscriptions(server, session, &del_request, &del_response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(del_response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(del_response.resultsSize, 2);
-    ck_assert_uint_eq(del_response.results[0], UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(del_response.results[1], UA_STATUSCODE_GOOD);
-
-    UA_DeleteSubscriptionsResponse_deleteMembers(&del_response);
-}
-END_TEST
-
-START_TEST(Server_createMonitoredItems) {
-    createSubscription();
-    createMonitoredItem();
-}
-END_TEST
-
-START_TEST(Server_modifyMonitoredItems) {
-    createSubscription();
-    createMonitoredItem();
-
-    UA_ModifyMonitoredItemsRequest request;
-    UA_ModifyMonitoredItemsRequest_init(&request);
-    request.subscriptionId = subscriptionId;
-    request.timestampsToReturn = UA_TIMESTAMPSTORETURN_SERVER;
-    UA_MonitoredItemModifyRequest item;
-    UA_MonitoredItemModifyRequest_init(&item);
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
-    rvi.attributeId = UA_ATTRIBUTEID_DESCRIPTION;
-    rvi.indexRange = UA_STRING_NULL;
-    item.monitoredItemId = monitoredItemId;
-    UA_MonitoringParameters params;
-    UA_MonitoringParameters_init(&params);
-    item.requestedParameters = params;
-    request.itemsToModifySize = 1;
-    request.itemsToModify = &item;
-
-    UA_ModifyMonitoredItemsResponse response;
-    UA_ModifyMonitoredItemsResponse_init(&response);
-
-    UA_LOCK(server->serviceMutex);
-    Service_ModifyMonitoredItems(server, session, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(response.resultsSize, 1);
-    ck_assert_uint_eq(response.results[0].statusCode, UA_STATUSCODE_GOOD);
-
-    UA_MonitoredItemModifyRequest_deleteMembers(&item);
-    UA_ModifyMonitoredItemsResponse_deleteMembers(&response);
-}
-END_TEST
-
-START_TEST(Server_overflow) {
-    /* Create a subscription */
-    UA_CreateSubscriptionRequest createSubscriptionRequest;
-    UA_CreateSubscriptionResponse createSubscriptionResponse;
-
-    UA_CreateSubscriptionRequest_init(&createSubscriptionRequest);
-    createSubscriptionRequest.publishingEnabled = true;
-    UA_CreateSubscriptionResponse_init(&createSubscriptionResponse);
-    UA_LOCK(server->serviceMutex);
-    Service_CreateSubscription(server, session, &createSubscriptionRequest, &createSubscriptionResponse);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(createSubscriptionResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    UA_UInt32 localSubscriptionId = createSubscriptionResponse.subscriptionId;
-    UA_Double publishingInterval = createSubscriptionResponse.revisedPublishingInterval;
-    ck_assert(publishingInterval > 0.0f);
-    UA_CreateSubscriptionResponse_deleteMembers(&createSubscriptionResponse);
-
-    /* Create a monitoredItem */
-    UA_CreateMonitoredItemsRequest createMonitoredItemsRequest;
-    UA_CreateMonitoredItemsRequest_init(&createMonitoredItemsRequest);
-    createMonitoredItemsRequest.subscriptionId = localSubscriptionId;
-    createMonitoredItemsRequest.timestampsToReturn = UA_TIMESTAMPSTORETURN_SERVER;
-    UA_MonitoredItemCreateRequest item;
-    UA_MonitoredItemCreateRequest_init(&item);
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME);
-    rvi.attributeId = UA_ATTRIBUTEID_BROWSENAME;
-    rvi.indexRange = UA_STRING_NULL;
-    item.itemToMonitor = rvi;
-    item.monitoringMode = UA_MONITORINGMODE_REPORTING;
-    UA_MonitoringParameters params;
-    UA_MonitoringParameters_init(&params);
-    item.requestedParameters = params;
-    item.requestedParameters.queueSize = 3;
-    item.requestedParameters.discardOldest = true;
-    createMonitoredItemsRequest.itemsToCreateSize = 1;
-    createMonitoredItemsRequest.itemsToCreate = &item;
-
-    UA_CreateMonitoredItemsResponse createMonitoredItemsResponse;
-    UA_CreateMonitoredItemsResponse_init(&createMonitoredItemsResponse);
-
-    UA_LOCK(server->serviceMutex);
-    Service_CreateMonitoredItems(server, session, &createMonitoredItemsRequest, &createMonitoredItemsResponse);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(createMonitoredItemsResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(createMonitoredItemsResponse.resultsSize, 1);
-    ck_assert_uint_eq(createMonitoredItemsResponse.results[0].statusCode, UA_STATUSCODE_GOOD);
-
-    UA_UInt32 localMonitoredItemId = createMonitoredItemsResponse.results[0].monitoredItemId;
-    ck_assert_uint_gt(localMonitoredItemId, 0);
-
-    UA_MonitoredItemCreateRequest_deleteMembers(&item);
-    UA_CreateMonitoredItemsResponse_deleteMembers(&createMonitoredItemsResponse);
-
-    UA_MonitoredItem *mon = NULL;
-    UA_Subscription *sub;
-    LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
-        if(sub->subscriptionId == localSubscriptionId)
-            mon = UA_Subscription_getMonitoredItem(sub, localMonitoredItemId);
-    }
-    ck_assert_ptr_ne(mon, NULL);
-    UA_assert(mon);
-    ck_assert_uint_eq(mon->queueSize, 1); 
-    ck_assert_uint_eq(mon->maxQueueSize, 3); 
-    UA_Notification *notification;
-    notification = TAILQ_LAST(&mon->queue, NotificationQueue);
-    ck_assert_uint_eq(notification->data.value.hasStatus, false);
-
-    UA_ByteString_deleteMembers(&mon->lastSampledValue);
-    UA_MonitoredItem_sampleCallback(server, mon);
-    ck_assert_uint_eq(mon->queueSize, 2); 
-    ck_assert_uint_eq(mon->maxQueueSize, 3); 
-    notification = TAILQ_LAST(&mon->queue, NotificationQueue);
-    ck_assert_uint_eq(notification->data.value.hasStatus, false);
-
-    UA_ByteString_deleteMembers(&mon->lastSampledValue);
-    UA_MonitoredItem_sampleCallback(server, mon);
-    ck_assert_uint_eq(mon->queueSize, 3); 
-    ck_assert_uint_eq(mon->maxQueueSize, 3); 
-    notification = TAILQ_LAST(&mon->queue, NotificationQueue);
-    ck_assert_uint_eq(notification->data.value.hasStatus, false);
-
-    UA_ByteString_deleteMembers(&mon->lastSampledValue);
-    UA_MonitoredItem_sampleCallback(server, mon);
-    ck_assert_uint_eq(mon->queueSize, 3); 
-    ck_assert_uint_eq(mon->maxQueueSize, 3); 
-    notification = TAILQ_FIRST(&mon->queue);
-    ck_assert_uint_eq(notification->data.value.hasStatus, true);
-    ck_assert_uint_eq(notification->data.value.status,
-                      UA_STATUSCODE_INFOTYPE_DATAVALUE | UA_STATUSCODE_INFOBITS_OVERFLOW);
-
-    /* Remove status for next test */
-    notification->data.value.hasStatus = false;
-    notification->data.value.status = 0;
-
-    /* Modify the MonitoredItem */
-    UA_ModifyMonitoredItemsRequest modifyMonitoredItemsRequest;
-    UA_ModifyMonitoredItemsRequest_init(&modifyMonitoredItemsRequest);
-    modifyMonitoredItemsRequest.subscriptionId = localSubscriptionId;
-    modifyMonitoredItemsRequest.timestampsToReturn = UA_TIMESTAMPSTORETURN_SERVER;
-    UA_MonitoredItemModifyRequest itemToModify;
-    UA_MonitoredItemModifyRequest_init(&itemToModify);
-    itemToModify.monitoredItemId = localMonitoredItemId;
-    UA_MonitoringParameters_init(&params);
-    itemToModify.requestedParameters = params;
-    itemToModify.requestedParameters.queueSize = 2;
-    itemToModify.requestedParameters.discardOldest = true;
-    modifyMonitoredItemsRequest.itemsToModifySize = 1;
-    modifyMonitoredItemsRequest.itemsToModify = &itemToModify;
-
-    UA_ModifyMonitoredItemsResponse modifyMonitoredItemsResponse;
-    UA_ModifyMonitoredItemsResponse_init(&modifyMonitoredItemsResponse);
-
-    UA_LOCK(server->serviceMutex);
-    Service_ModifyMonitoredItems(server, session, &modifyMonitoredItemsRequest,
-                                 &modifyMonitoredItemsResponse);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(modifyMonitoredItemsResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(modifyMonitoredItemsResponse.resultsSize, 1);
-    ck_assert_uint_eq(modifyMonitoredItemsResponse.results[0].statusCode, UA_STATUSCODE_GOOD);
-
-    UA_MonitoredItemModifyRequest_deleteMembers(&itemToModify);
-    UA_ModifyMonitoredItemsResponse_deleteMembers(&modifyMonitoredItemsResponse);
-
-    ck_assert_uint_eq(mon->queueSize, 2); 
-    ck_assert_uint_eq(mon->maxQueueSize, 2); 
-    notification = TAILQ_FIRST(&mon->queue);
-    ck_assert_uint_eq(notification->data.value.hasStatus, true);
-    ck_assert_uint_eq(notification->data.value.status,
-                      UA_STATUSCODE_INFOTYPE_DATAVALUE | UA_STATUSCODE_INFOBITS_OVERFLOW);
-
-    /* Modify the MonitoredItem */
-    UA_ModifyMonitoredItemsRequest_init(&modifyMonitoredItemsRequest);
-    modifyMonitoredItemsRequest.subscriptionId = localSubscriptionId;
-    modifyMonitoredItemsRequest.timestampsToReturn = UA_TIMESTAMPSTORETURN_SERVER;
-    UA_MonitoredItemModifyRequest_init(&itemToModify);
-    itemToModify.monitoredItemId = localMonitoredItemId;
-    UA_MonitoringParameters_init(&params);
-    itemToModify.requestedParameters = params;
-    itemToModify.requestedParameters.queueSize = 1;
-    modifyMonitoredItemsRequest.itemsToModifySize = 1;
-    modifyMonitoredItemsRequest.itemsToModify = &itemToModify;
-
-    UA_ModifyMonitoredItemsResponse_init(&modifyMonitoredItemsResponse);
-
-    UA_LOCK(server->serviceMutex);
-    Service_ModifyMonitoredItems(server, session, &modifyMonitoredItemsRequest,
-                                 &modifyMonitoredItemsResponse);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(modifyMonitoredItemsResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(modifyMonitoredItemsResponse.resultsSize, 1);
-    ck_assert_uint_eq(modifyMonitoredItemsResponse.results[0].statusCode, UA_STATUSCODE_GOOD);
-
-    UA_MonitoredItemModifyRequest_deleteMembers(&itemToModify);
-    UA_ModifyMonitoredItemsResponse_deleteMembers(&modifyMonitoredItemsResponse);
-
-    ck_assert_uint_eq(mon->queueSize, 1); 
-    ck_assert_uint_eq(mon->maxQueueSize, 1); 
-    notification = TAILQ_LAST(&mon->queue, NotificationQueue);
-    ck_assert_uint_eq(notification->data.value.hasStatus, false);
-
-    /* Modify the MonitoredItem */
-    UA_ModifyMonitoredItemsRequest_init(&modifyMonitoredItemsRequest);
-    modifyMonitoredItemsRequest.subscriptionId = localSubscriptionId;
-    modifyMonitoredItemsRequest.timestampsToReturn = UA_TIMESTAMPSTORETURN_SERVER;
-    UA_MonitoredItemModifyRequest_init(&itemToModify);
-    itemToModify.monitoredItemId = localMonitoredItemId;
-    UA_MonitoringParameters_init(&params);
-    itemToModify.requestedParameters = params;
-    itemToModify.requestedParameters.discardOldest = false;
-    itemToModify.requestedParameters.queueSize = 1;
-    modifyMonitoredItemsRequest.itemsToModifySize = 1;
-    modifyMonitoredItemsRequest.itemsToModify = &itemToModify;
-
-    UA_ModifyMonitoredItemsResponse_init(&modifyMonitoredItemsResponse);
-
-    UA_LOCK(server->serviceMutex);
-    Service_ModifyMonitoredItems(server, session, &modifyMonitoredItemsRequest,
-                                 &modifyMonitoredItemsResponse);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(modifyMonitoredItemsResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(modifyMonitoredItemsResponse.resultsSize, 1);
-    ck_assert_uint_eq(modifyMonitoredItemsResponse.results[0].statusCode, UA_STATUSCODE_GOOD);
-
-    UA_MonitoredItemModifyRequest_deleteMembers(&itemToModify);
-    UA_ModifyMonitoredItemsResponse_deleteMembers(&modifyMonitoredItemsResponse);
-
-    UA_MonitoredItem_sampleCallback(server, mon);
-    ck_assert_uint_eq(mon->queueSize, 1); 
-    ck_assert_uint_eq(mon->maxQueueSize, 1); 
-    notification = TAILQ_FIRST(&mon->queue);
-    ck_assert_uint_eq(notification->data.value.hasStatus, false); /* the infobit is only set if the queue is larger than one */
-
-    /* Remove the subscriptions */
-    UA_DeleteSubscriptionsRequest deleteSubscriptionsRequest;
-    UA_DeleteSubscriptionsRequest_init(&deleteSubscriptionsRequest);
-    UA_UInt32 removeId = localSubscriptionId;
-    deleteSubscriptionsRequest.subscriptionIdsSize = 1;
-    deleteSubscriptionsRequest.subscriptionIds = &removeId;
-
-    UA_DeleteSubscriptionsResponse deleteSubscriptionsResponse;
-    UA_DeleteSubscriptionsResponse_init(&deleteSubscriptionsResponse);
-
-    UA_LOCK(server->serviceMutex);
-    Service_DeleteSubscriptions(server, session, &deleteSubscriptionsRequest,
-                                &deleteSubscriptionsResponse);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(deleteSubscriptionsResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(deleteSubscriptionsResponse.resultsSize, 1);
-    ck_assert_uint_eq(deleteSubscriptionsResponse.results[0], UA_STATUSCODE_GOOD);
-
-    UA_DeleteSubscriptionsResponse_deleteMembers(&deleteSubscriptionsResponse);
-
-}
-END_TEST
-
-START_TEST(Server_setMonitoringMode) {
-    createSubscription();
-    createMonitoredItem();
-    
-    UA_SetMonitoringModeRequest request;
-    UA_SetMonitoringModeRequest_init(&request);
-    request.subscriptionId = subscriptionId;
-    request.monitoringMode = UA_MONITORINGMODE_DISABLED;
-    request.monitoredItemIdsSize = 1;
-    request.monitoredItemIds = &monitoredItemId;
-
-    UA_SetMonitoringModeResponse response;
-    UA_SetMonitoringModeResponse_init(&response);
-
-    UA_LOCK(server->serviceMutex);
-    Service_SetMonitoringMode(server, session, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(response.resultsSize, 1);
-    ck_assert_uint_eq(response.results[0], UA_STATUSCODE_GOOD);
-
-    UA_SetMonitoringModeResponse_deleteMembers(&response);
-}
-END_TEST
-
-START_TEST(Server_deleteMonitoredItems) {
-    createSubscription();
-    createMonitoredItem();
-    
-    UA_DeleteMonitoredItemsRequest request;
-    UA_DeleteMonitoredItemsRequest_init(&request);
-    request.subscriptionId = subscriptionId;
-    request.monitoredItemIdsSize = 1;
-    request.monitoredItemIds = &monitoredItemId;
-
-    UA_DeleteMonitoredItemsResponse response;
-    UA_DeleteMonitoredItemsResponse_init(&response);
-
-    UA_LOCK(server->serviceMutex);
-    Service_DeleteMonitoredItems(server, session, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(response.resultsSize, 1);
-    ck_assert_uint_eq(response.results[0], UA_STATUSCODE_GOOD);
-
-    UA_DeleteMonitoredItemsResponse_deleteMembers(&response);
-}
-END_TEST
-
-START_TEST(Server_lifeTimeCount) {
-    /* Create a subscription */
-    UA_CreateSubscriptionRequest request;
-    UA_CreateSubscriptionResponse response;
-
-    UA_CreateSubscriptionRequest_init(&request);
-    request.publishingEnabled = true;
-    request.requestedLifetimeCount = 3;
-    request.requestedMaxKeepAliveCount = 1;
-    UA_CreateSubscriptionResponse_init(&response);
-    UA_LOCK(server->serviceMutex);
-    Service_CreateSubscription(server, session, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(response.revisedMaxKeepAliveCount, 1);
-    ck_assert_uint_eq(response.revisedLifetimeCount, 3);
-    UA_CreateSubscriptionResponse_deleteMembers(&response);
-
-    /* Create a second subscription */
-    UA_CreateSubscriptionRequest_init(&request);
-    request.publishingEnabled = true;
-    request.requestedLifetimeCount = 4;
-    request.requestedMaxKeepAliveCount = 2;
-    UA_CreateSubscriptionResponse_init(&response);
-    UA_LOCK(server->serviceMutex);
-    Service_CreateSubscription(server, session, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(response.revisedMaxKeepAliveCount, 2);
-    /* revisedLifetimeCount is revised to 3*MaxKeepAliveCount == 3 */
-    ck_assert_uint_eq(response.revisedLifetimeCount, 6);
-    UA_Double publishingInterval = response.revisedPublishingInterval;
-    ck_assert(publishingInterval > 0.0f);
-    subscriptionId = response.subscriptionId;
-    UA_CreateSubscriptionResponse_deleteMembers(&response);
-
-    /* Add a MonitoredItem to the second subscription */
-    UA_CreateMonitoredItemsRequest mrequest;
-    UA_CreateMonitoredItemsRequest_init(&mrequest);
-    mrequest.subscriptionId = subscriptionId;
-    mrequest.timestampsToReturn = UA_TIMESTAMPSTORETURN_SERVER;
-    UA_MonitoredItemCreateRequest item;
-    UA_MonitoredItemCreateRequest_init(&item);
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
-    rvi.attributeId = UA_ATTRIBUTEID_BROWSENAME;
-    rvi.indexRange = UA_STRING_NULL;
-    item.itemToMonitor = rvi;
-    item.requestedParameters.samplingInterval = publishingInterval / 5.0;
-    item.monitoringMode = UA_MONITORINGMODE_REPORTING;
-    UA_MonitoringParameters params;
-    UA_MonitoringParameters_init(&params);
-    item.requestedParameters = params;
-    mrequest.itemsToCreateSize = 1;
-    mrequest.itemsToCreate = &item;
-
-    UA_CreateMonitoredItemsResponse mresponse;
-    UA_CreateMonitoredItemsResponse_init(&mresponse);
-    UA_LOCK(server->serviceMutex);
-    Service_CreateMonitoredItems(server, session, &mrequest, &mresponse);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(mresponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(mresponse.resultsSize, 1);
-    ck_assert_uint_eq(mresponse.results[0].statusCode, UA_STATUSCODE_GOOD);
-    monitoredItemId = mresponse.results[0].monitoredItemId;
-    ck_assert_uint_gt(monitoredItemId, 0);
-    UA_MonitoredItemCreateRequest_deleteMembers(&item);
-    UA_CreateMonitoredItemsResponse_deleteMembers(&mresponse);
-
-    UA_Server_run_iterate(server, false);
-    UA_UInt32 count = 0;
-    UA_Subscription *sub;
-    LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
-        ck_assert_uint_eq(sub->currentLifetimeCount, 0);
-        count++;
-    }
-    ck_assert_uint_eq(count, 2);
-
-    UA_fakeSleep((UA_UInt32)publishingInterval + 1);
-    UA_Server_run_iterate(server, false);
-
-    count = 0;
-    LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
-        ck_assert_uint_eq(sub->currentLifetimeCount, 1);
-        count++;
-    }
-    ck_assert_uint_eq(count, 2);
-
-    /* Sleep until the publishing interval times out */
-    UA_fakeSleep((UA_UInt32)publishingInterval + 1);
-    UA_Server_run_iterate(server, false);
-
-    count = 0;
-    LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
-        ck_assert_uint_eq(sub->currentLifetimeCount, 2);
-        count++;
-    }
-    ck_assert_uint_eq(count, 2);
-
-    /* Sleep until the publishing interval times out */
-    UA_fakeSleep((UA_UInt32)publishingInterval + 1);
-    UA_Server_run_iterate(server, false);
-
-    count = 0;
-    LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
-        ck_assert_uint_eq(sub->currentLifetimeCount, 3);
-        count++;
-    }
-    ck_assert_uint_eq(count, 2);
-
-    /* Sleep until the publishing interval times out */
-    UA_fakeSleep((UA_UInt32)publishingInterval + 1);
-    UA_Server_run_iterate(server, false);
-
-    count = 0;
-    LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
-        ck_assert_uint_eq(sub->currentLifetimeCount, 4);
-        count++;
-    }
-    ck_assert_uint_eq(count, 1);
-
-    /* Sleep until the publishing interval times out */
-    UA_fakeSleep((UA_UInt32)publishingInterval + 1);
-    UA_Server_run_iterate(server, false);
-
-    count = 0;
-    LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
-        ck_assert_uint_eq(sub->currentLifetimeCount, 5);
-        count++;
-    }
-    ck_assert_uint_eq(count, 1);
-
-    /* Sleep until the publishing interval times out */
-    UA_fakeSleep((UA_UInt32)publishingInterval + 1);
-    UA_Server_run_iterate(server, false);
-
-    count = 0;
-    LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
-        ck_assert_uint_eq(sub->currentLifetimeCount, 6);
-        count++;
-    }
-    ck_assert_uint_eq(count, 1);
-
-    /* Sleep until the publishing interval times out. The next iteration removes
-     * the subscription. */
-    UA_fakeSleep((UA_UInt32)publishingInterval + 1);
-    UA_Server_run_iterate(server, false);
-
-    count = 0;
-    LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
-        count++;
-    }
-    ck_assert_uint_eq(count, 0);
-}
-END_TEST
-
-START_TEST(Server_invalidPublishingInterval) {
-    UA_Double savedPublishingIntervalLimitsMin = server->config.publishingIntervalLimits.min;
-    server->config.publishingIntervalLimits.min = 1;
-    /* Create a subscription */
-    UA_CreateSubscriptionRequest request;
-    UA_CreateSubscriptionResponse response;
-
-    UA_CreateSubscriptionRequest_init(&request);
-    request.publishingEnabled = true;
-    request.requestedPublishingInterval = -5.0; // Must be positive
-    UA_CreateSubscriptionResponse_init(&response);
-    UA_LOCK(server->serviceMutex);
-    Service_CreateSubscription(server, session, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert(response.revisedPublishingInterval ==
-              server->config.publishingIntervalLimits.min);
-    UA_CreateSubscriptionResponse_deleteMembers(&response);
-
-    server->config.publishingIntervalLimits.min = savedPublishingIntervalLimitsMin;
-}
-END_TEST
-
-START_TEST(Server_invalidSamplingInterval) {
-    createSubscription();
-
-    UA_Double savedSamplingIntervalLimitsMin = server->config.samplingIntervalLimits.min;
-    server->config.samplingIntervalLimits.min = 1;
-
-    UA_CreateMonitoredItemsRequest request;
-    UA_CreateMonitoredItemsRequest_init(&request);
-    request.subscriptionId = subscriptionId;
-    request.timestampsToReturn = UA_TIMESTAMPSTORETURN_SERVER;
-    UA_MonitoredItemCreateRequest item;
-    UA_MonitoredItemCreateRequest_init(&item);
-    UA_ReadValueId rvi;
-    UA_ReadValueId_init(&rvi);
-    rvi.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
-    rvi.attributeId = UA_ATTRIBUTEID_BROWSENAME;
-    rvi.indexRange = UA_STRING_NULL;
-    item.itemToMonitor = rvi;
-    item.monitoringMode = UA_MONITORINGMODE_REPORTING;
-    UA_MonitoringParameters params;
-    UA_MonitoringParameters_init(&params);
-    params.samplingInterval = -5.0; // Must be positive
-    item.requestedParameters = params;
-    request.itemsToCreateSize = 1;
-    request.itemsToCreate = &item;
-
-    UA_CreateMonitoredItemsResponse response;
-    UA_CreateMonitoredItemsResponse_init(&response);
-    UA_LOCK(server->serviceMutex);
-    Service_CreateMonitoredItems(server, session, &request, &response);
-    UA_UNLOCK(server->serviceMutex);
-    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(response.resultsSize, 1);
-    ck_assert_uint_eq(response.results[0].statusCode, UA_STATUSCODE_GOOD);
-    ck_assert(response.results[0].revisedSamplingInterval ==
-              server->config.samplingIntervalLimits.min);
-
-    UA_MonitoredItemCreateRequest_deleteMembers(&item);
-    UA_CreateMonitoredItemsResponse_deleteMembers(&response);
-
-    server->config.samplingIntervalLimits.min = savedSamplingIntervalLimitsMin;
-}
-END_TEST
-
-#endif /* UA_ENABLE_SUBSCRIPTIONS */
-
-static Suite* testSuite_Client(void) {
-    Suite *s = suite_create("Server Subscription");
-    TCase *tc_server = tcase_create("Server Subscription Basic");
-    tcase_add_checked_fixture(tc_server, setup, teardown);
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-    tcase_add_test(tc_server, Server_createSubscription);
-    tcase_add_test(tc_server, Server_modifySubscription);
-    tcase_add_test(tc_server, Server_setPublishingMode);
-    tcase_add_test(tc_server, Server_invalidSamplingInterval);
-    tcase_add_test(tc_server, Server_createMonitoredItems);
-    tcase_add_test(tc_server, Server_modifyMonitoredItems);
-    tcase_add_test(tc_server, Server_overflow);
-    tcase_add_test(tc_server, Server_setMonitoringMode);
-    tcase_add_test(tc_server, Server_deleteMonitoredItems);
-    tcase_add_test(tc_server, Server_republish);
-    tcase_add_test(tc_server, Server_republish_invalid);
-    tcase_add_test(tc_server, Server_deleteSubscription);
-    tcase_add_test(tc_server, Server_publishCallback);
-    tcase_add_test(tc_server, Server_lifeTimeCount);
-    tcase_add_test(tc_server, Server_invalidPublishingInterval);
-#endif /* UA_ENABLE_SUBSCRIPTIONS */
-    suite_add_tcase(s, tc_server);
-
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_services_view.c b/ext/open62541/tests/server/check_services_view.c
deleted file mode 100644
index 156c755..0000000
--- a/ext/open62541/tests/server/check_services_view.c
+++ /dev/null
@@ -1,259 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/client.h>
-#include <open62541/client_config_default.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include "server/ua_server_internal.h"
-
-#include <check.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "thread_wrapper.h"
-
-UA_Server *server_translate_browse;
-UA_Boolean *running_translate_browse;
-THREAD_HANDLE server_thread_translate_browse;
-
-THREAD_CALLBACK(serverloop_register) {
-    while (*running_translate_browse)
-        UA_Server_run_iterate(server_translate_browse, true);
-    return 0;
-}
-
-static void setup_server(void) {
-    // start server
-    running_translate_browse = UA_Boolean_new();
-    *running_translate_browse = true;
-
-    server_translate_browse = UA_Server_new();
-    UA_ServerConfig *server_translate_config = UA_Server_getConfig(server_translate_browse);
-    UA_ServerConfig_setDefault(server_translate_config);
-
-    UA_String_deleteMembers(&server_translate_config->applicationDescription.applicationUri);
-    server_translate_config->applicationDescription.applicationUri =
-        UA_String_fromChars("urn:open62541.test.server_translate_browse");
-    UA_Server_run_startup(server_translate_browse);
-    THREAD_CREATE(server_thread_translate_browse, serverloop_register);
-}
-
-static void teardown_server(void) {
-    *running_translate_browse = false;
-    THREAD_JOIN(server_thread_translate_browse);
-    UA_Server_run_shutdown(server_translate_browse);
-    UA_Boolean_delete(running_translate_browse);
-    UA_Server_delete(server_translate_browse);
-}
-
-static size_t
-browseWithMaxResults(UA_Server *server, UA_NodeId nodeId, UA_UInt32 maxResults) {
-    UA_BrowseDescription bd;
-    UA_BrowseDescription_init(&bd);
-    bd.nodeId = nodeId;
-    bd.resultMask = UA_BROWSERESULTMASK_ALL;
-    bd.browseDirection = UA_BROWSEDIRECTION_FORWARD;
-    UA_BrowseResult br = UA_Server_browse(server, maxResults, &bd);
-    ck_assert_int_eq(br.statusCode, UA_STATUSCODE_GOOD);
-    ck_assert(br.referencesSize > 0);
-    ck_assert(br.referencesSize <= maxResults);
-
-    size_t total = br.referencesSize;
-    UA_ByteString cp = br.continuationPoint;
-    br.continuationPoint = UA_BYTESTRING_NULL;
-    UA_BrowseResult_deleteMembers(&br);
-
-    while(cp.length > 0) {
-        br = UA_Server_browseNext(server, false, &cp);
-        ck_assert(br.referencesSize > 0);
-        ck_assert(br.referencesSize <= maxResults);
-        UA_ByteString_deleteMembers(&cp);
-        cp = br.continuationPoint;
-        br.continuationPoint = UA_BYTESTRING_NULL;
-        total += br.referencesSize;
-        UA_BrowseResult_deleteMembers(&br);
-    }
-
-    return total;
-}
-
-START_TEST(Service_Browse_WithMaxResults) {
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    UA_BrowseDescription bd;
-    UA_BrowseDescription_init(&bd);
-    bd.resultMask = UA_BROWSERESULTMASK_ALL;
-    bd.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
-    bd.browseDirection = UA_BROWSEDIRECTION_FORWARD;
-    UA_BrowseResult br = UA_Server_browse(server, 0, &bd);
-
-    ck_assert_int_eq(br.statusCode, UA_STATUSCODE_GOOD);
-    ck_assert(br.referencesSize > 0);
-
-    size_t total = br.referencesSize;
-    UA_BrowseResult_deleteMembers(&br);
-
-    for(UA_UInt32 i = 1; i <= total; i++) {
-        size_t sum_total =
-            browseWithMaxResults(server, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER), i);
-        ck_assert_int_eq(total, sum_total);
-    }
-    
-    UA_Server_delete(server);
-}
-END_TEST
-
-START_TEST(Service_Browse_WithBrowseName) {
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    UA_BrowseDescription bd;
-    UA_BrowseDescription_init(&bd);
-    bd.resultMask = UA_BROWSERESULTMASK_BROWSENAME;
-    bd.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    bd.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-    bd.browseDirection = UA_BROWSEDIRECTION_FORWARD;
-
-    UA_BrowseResult br = UA_Server_browse(server, 0, &bd);
-
-    ck_assert_int_eq(br.statusCode, UA_STATUSCODE_GOOD);
-    ck_assert(br.referencesSize > 0);
-    ck_assert(!UA_String_equal(&br.references[0].browseName.name, &UA_STRING_NULL));
-
-    UA_BrowseResult_deleteMembers(&br);
-    UA_Server_delete(server);
-}
-END_TEST
-
-START_TEST(Service_Browse_Recursive) {
-    UA_Server *server = UA_Server_new();
-    UA_ServerConfig_setDefault(UA_Server_getConfig(server));
-
-    size_t resultSize = 0;
-    UA_ExpandedNodeId *result = NULL;
-
-    UA_BrowseDescription bd;
-    UA_BrowseDescription_init(&bd);
-    bd.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_NAMESPACEARRAY);
-    bd.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HIERARCHICALREFERENCES);
-    bd.includeSubtypes = true;
-    bd.browseDirection = UA_BROWSEDIRECTION_INVERSE;
-    UA_StatusCode retval = UA_Server_browseRecursive(server, &bd, &resultSize, &result);
-
-    ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(resultSize, 3);
-
-    UA_NodeId expected[3];
-    expected[0] = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
-    expected[1] = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    expected[2] = UA_NODEID_NUMERIC(0, UA_NS0ID_ROOTFOLDER);
-
-    for(size_t i = 0; i < resultSize; i++) {
-        ck_assert(UA_NodeId_equal(&expected[i], &result[i].nodeId));
-    }
-
-    UA_Array_delete(result, resultSize, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
-    UA_Server_delete(server);
-}
-END_TEST
-
-START_TEST(Service_TranslateBrowsePathsToNodeIds) {
-    UA_Client *client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    UA_StatusCode retVal = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-
-    // Just for testing we want to translate the following path to its corresponding node id
-    // /Objects/Server/ServerStatus/State
-    // Equals the following node IDs:
-    // /85/2253/2256/2259
-
-#define BROWSE_PATHS_SIZE 3
-    char *paths[BROWSE_PATHS_SIZE] = {"Server", "ServerStatus", "State"};
-    UA_UInt32 ids[BROWSE_PATHS_SIZE] = {UA_NS0ID_ORGANIZES, UA_NS0ID_HASCOMPONENT, UA_NS0ID_HASCOMPONENT};
-    UA_BrowsePath browsePath;
-    UA_BrowsePath_init(&browsePath);
-    browsePath.startingNode = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-    browsePath.relativePath.elements = (UA_RelativePathElement*)UA_Array_new(BROWSE_PATHS_SIZE, &UA_TYPES[UA_TYPES_RELATIVEPATHELEMENT]);
-    browsePath.relativePath.elementsSize = BROWSE_PATHS_SIZE;
-
-    for(size_t i = 0; i < BROWSE_PATHS_SIZE; i++) {
-        UA_RelativePathElement *elem = &browsePath.relativePath.elements[i];
-        elem->referenceTypeId = UA_NODEID_NUMERIC(0, ids[i]);
-        elem->targetName = UA_QUALIFIEDNAME_ALLOC(0, paths[i]);
-    }
-
-    UA_TranslateBrowsePathsToNodeIdsRequest request;
-    UA_TranslateBrowsePathsToNodeIdsRequest_init(&request);
-    request.browsePaths = &browsePath;
-    request.browsePathsSize = 1;
-
-    UA_TranslateBrowsePathsToNodeIdsResponse response = UA_Client_Service_translateBrowsePathsToNodeIds(client, request);
-
-    ck_assert_int_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(response.resultsSize, 1);
-
-    ck_assert_int_eq(response.results[0].targetsSize, 1);
-    ck_assert_int_eq(response.results[0].targets[0].targetId.nodeId.identifierType, UA_NODEIDTYPE_NUMERIC);
-    ck_assert_int_eq(response.results[0].targets[0].targetId.nodeId.identifier.numeric, UA_NS0ID_SERVER_SERVERSTATUS_STATE);
-
-    UA_BrowsePath_deleteMembers(&browsePath);
-    UA_TranslateBrowsePathsToNodeIdsResponse_deleteMembers(&response);
-    retVal = UA_Client_disconnect(client);
-    ck_assert_int_eq(retVal, UA_STATUSCODE_GOOD);
-    UA_Client_delete(client);
-}
-END_TEST
-
-START_TEST(BrowseSimplifiedBrowsePath) {
-    UA_QualifiedName objectsName = UA_QUALIFIEDNAME(0, "Objects");
-    UA_BrowsePathResult bpr =
-        UA_Server_browseSimplifiedBrowsePath(server_translate_browse,
-                                             UA_NODEID_NUMERIC(0, UA_NS0ID_ROOTFOLDER),
-                                             1, &objectsName);
-
-    ck_assert_int_eq(bpr.targetsSize, 1);
-
-    UA_BrowsePathResult_deleteMembers(&bpr);
-}
-END_TEST
-
-static Suite *testSuite_Service_TranslateBrowsePathsToNodeIds(void) {
-    Suite *s = suite_create("Service_TranslateBrowsePathsToNodeIds");
-    TCase *tc_browse = tcase_create("Browse Service");
-    tcase_add_test(tc_browse, Service_Browse_WithBrowseName);
-    tcase_add_test(tc_browse, Service_Browse_WithMaxResults);
-    tcase_add_test(tc_browse, Service_Browse_Recursive);
-    suite_add_tcase(s, tc_browse);
-
-    TCase *tc_translate = tcase_create("TranslateBrowsePathsToNodeIds");
-    tcase_add_unchecked_fixture(tc_translate, setup_server, teardown_server);
-    tcase_add_test(tc_translate, Service_TranslateBrowsePathsToNodeIds);
-    tcase_add_test(tc_translate, BrowseSimplifiedBrowsePath);
-
-    suite_add_tcase(s, tc_translate);
-    return s;
-}
-
-int main(void) {
-    int number_failed = 0;
-
-    Suite *s;
-    SRunner *sr;
-
-    s = testSuite_Service_TranslateBrowsePathsToNodeIds();
-    sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    number_failed += srunner_ntests_failed(sr);
-    srunner_free(sr);
-
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
-
-
diff --git a/ext/open62541/tests/server/check_session.c b/ext/open62541/tests/server/check_session.c
deleted file mode 100644
index b0102df..0000000
--- a/ext/open62541/tests/server/check_session.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/types.h>
-
-#include "server/ua_services.h"
-
-#include <check.h>
-
-START_TEST(Session_init_ShallWork) {
-    UA_Session session;
-    UA_Session_init(&session);
-
-    UA_NodeId tmpNodeId;
-    UA_NodeId_init(&tmpNodeId);
-    UA_ApplicationDescription tmpAppDescription;
-    UA_ApplicationDescription_init(&tmpAppDescription);
-    UA_DateTime tmpDateTime = 0;
-    ck_assert_int_eq(session.activated, false);
-    ck_assert_int_eq(session.header.authenticationToken.identifier.numeric, tmpNodeId.identifier.numeric);
-    ck_assert_int_eq(session.availableContinuationPoints, UA_MAXCONTINUATIONPOINTS);
-    ck_assert_ptr_eq(session.header.channel, NULL);
-    ck_assert_ptr_eq(session.clientDescription.applicationName.locale.data, NULL);
-    ck_assert_ptr_eq(session.continuationPoints, NULL);
-    ck_assert_int_eq(session.maxRequestMessageSize, 0);
-    ck_assert_int_eq(session.maxResponseMessageSize, 0);
-    ck_assert_int_eq(session.sessionId.identifier.numeric, tmpNodeId.identifier.numeric);
-    ck_assert_ptr_eq(session.sessionName.data, NULL);
-    ck_assert_int_eq((int)session.timeout, 0);
-    ck_assert_int_eq(session.validTill, tmpDateTime);
-}
-END_TEST
-
-START_TEST(Session_updateLifetime_ShallWork) {
-    UA_Session session;
-    UA_Session_init(&session);
-    UA_DateTime tmpDateTime;
-    tmpDateTime = session.validTill;
-    UA_Session_updateLifetime(&session);
-
-    UA_Int32 result = (session.validTill >= tmpDateTime);
-    ck_assert_int_gt(result,0);
-}
-END_TEST
-
-static Suite* testSuite_Session(void) {
-    Suite *s = suite_create("Session");
-    TCase *tc_core = tcase_create("Core");
-    tcase_add_test(tc_core, Session_init_ShallWork);
-    tcase_add_test(tc_core, Session_updateLifetime_ShallWork);
-
-    suite_add_tcase(s,tc_core);
-    return s;
-}
-
-int main(void) {
-    int number_failed = 0;
-
-    Suite *s;
-    SRunner *sr;
-
-    s = testSuite_Session();
-    sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr,CK_NORMAL);
-    number_failed += srunner_ntests_failed(sr);
-    srunner_free(sr);
-
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/check_subscription_events.c b/ext/open62541/tests/server/check_subscription_events.c
deleted file mode 100644
index 74f8bfe..0000000
--- a/ext/open62541/tests/server/check_subscription_events.c
+++ /dev/null
@@ -1,698 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <open62541/client_config_default.h>
-#include <open62541/client_subscriptions.h>
-#include <open62541/server.h>
-#include <open62541/server_config_default.h>
-
-#include "server/ua_server_internal.h"
-#include "server/ua_services.h"
-#include "server/ua_subscription.h"
-
-#include <check.h>
-
-#include "testing_clock.h"
-#include "thread_wrapper.h"
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-
-static UA_Server *server;
-static size_t serverIterations;
-static UA_Boolean running;
-static THREAD_HANDLE server_thread;
-static MUTEX_HANDLE serverMutex;
-
-UA_Client *client;
-
-static UA_UInt32 subscriptionId;
-static UA_UInt32 monitoredItemId;
-static UA_NodeId eventType;
-static size_t nSelectClauses = 4;
-static UA_Boolean notificationReceived;
-static UA_Boolean overflowNotificationReceived;
-static UA_SimpleAttributeOperand *selectClauses;
-
-UA_Double publishingInterval = 500.0;
-
-static void
-addNewEventType(void) {
-    UA_ObjectTypeAttributes attr = UA_ObjectTypeAttributes_default;
-    attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", "SimpleEventType");
-    attr.description = UA_LOCALIZEDTEXT_ALLOC("en-US", "The simple event type we created");
-
-    UA_Server_addObjectTypeNode(server, UA_NODEID_NULL,
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_BASEEVENTTYPE),
-                                UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
-                                UA_QUALIFIEDNAME(0, "SimpleEventType"),
-                                attr, NULL, &eventType);
-    UA_LocalizedText_deleteMembers(&attr.displayName);
-    UA_LocalizedText_deleteMembers(&attr.description);
-}
-
-static void
-setupSelectClauses(void) {
-    /* Check for severity (set manually), message (set manually), eventType
-     * (automatic) and sourceNode (automatic) */
-    selectClauses = (UA_SimpleAttributeOperand *)
-            UA_Array_new(nSelectClauses, &UA_TYPES[UA_TYPES_SIMPLEATTRIBUTEOPERAND]);
-    if(!selectClauses)
-        return;
-
-    for(size_t i = 0; i < nSelectClauses; ++i) {
-        UA_SimpleAttributeOperand_init(&selectClauses[i]);
-        selectClauses[i].typeDefinitionId = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEEVENTTYPE);
-        selectClauses[i].browsePathSize = 1;
-        selectClauses[i].attributeId = UA_ATTRIBUTEID_VALUE;
-        selectClauses[i].browsePath = (UA_QualifiedName *)
-                UA_Array_new(selectClauses[i].browsePathSize, &UA_TYPES[UA_TYPES_QUALIFIEDNAME]);
-        if(!selectClauses[i].browsePathSize) {
-            UA_Array_delete(selectClauses, nSelectClauses, &UA_TYPES[UA_TYPES_SIMPLEATTRIBUTEOPERAND]);
-        }
-    }
-
-    selectClauses[0].browsePath[0] = UA_QUALIFIEDNAME_ALLOC(0, "Severity");
-    selectClauses[1].browsePath[0] = UA_QUALIFIEDNAME_ALLOC(0, "Message");
-    selectClauses[2].browsePath[0] = UA_QUALIFIEDNAME_ALLOC(0, "EventType");
-    selectClauses[3].browsePath[0] = UA_QUALIFIEDNAME_ALLOC(0, "SourceNode");
-}
-
-static void
-handler_events_simple(UA_Client *lclient, UA_UInt32 subId, void *subContext,
-                      UA_UInt32 monId, void *monContext,
-                      size_t nEventFields, UA_Variant *eventFields) {
-    UA_Boolean foundSeverity = UA_FALSE;
-    UA_Boolean foundMessage = UA_FALSE;
-    UA_Boolean foundType = UA_FALSE;
-    UA_Boolean foundSource = UA_FALSE;
-    ck_assert_uint_eq(*(UA_UInt32 *) monContext, monitoredItemId);
-    ck_assert_uint_eq(nEventFields, nSelectClauses);
-    // check all event fields
-    for(size_t i = 0; i < nEventFields; i++) {
-        // find out which attribute of the event is being looked at
-        if(UA_Variant_hasScalarType(&eventFields[i], &UA_TYPES[UA_TYPES_UINT16])) {
-            // Severity
-            ck_assert_uint_eq(*((UA_UInt16 *) (eventFields[i].data)), 1000);
-            foundSeverity = UA_TRUE;
-        } else if(UA_Variant_hasScalarType(&eventFields[i], &UA_TYPES[UA_TYPES_LOCALIZEDTEXT])) {
-            // Message
-            UA_LocalizedText comp = UA_LOCALIZEDTEXT("en-US", "Generated Event");
-            ck_assert(UA_String_equal(&((UA_LocalizedText *) eventFields[i].data)->locale, &comp.locale));
-            ck_assert(UA_String_equal(&((UA_LocalizedText *) eventFields[i].data)->text, &comp.text));
-            foundMessage = UA_TRUE;
-        } else if(UA_Variant_hasScalarType(&eventFields[i], &UA_TYPES[UA_TYPES_NODEID])) {
-            // either SourceNode or EventType
-            UA_NodeId serverId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
-            if(UA_NodeId_equal((UA_NodeId *) eventFields[i].data, &eventType)) {
-                // EventType
-                foundType = UA_TRUE;
-            } else if(UA_NodeId_equal((UA_NodeId *) eventFields[i].data, &serverId)) {
-                // SourceNode
-                foundSource = UA_TRUE;
-            } else {
-                ck_assert_msg(UA_FALSE, "NodeId doesn't match");
-            }
-        } else {
-            ck_assert_msg(UA_FALSE, "Field doesn't match");
-        }
-    }
-    ck_assert_uint_eq(foundMessage, UA_TRUE);
-    ck_assert_uint_eq(foundSeverity, UA_TRUE);
-    ck_assert_uint_eq(foundType, UA_TRUE);
-    ck_assert_uint_eq(foundSource, UA_TRUE);
-    notificationReceived = true;
-}
-
-// create a subscription and add a monitored item to it
-static void
-setupSubscription(void) {
-    // Create subscription
-    UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();
-    UA_CreateSubscriptionResponse response =
-        UA_Client_Subscriptions_create(client, request, NULL, NULL, NULL);
-    subscriptionId = response.subscriptionId;
-}
-
-static void
-removeSubscription(void) {
-    UA_DeleteSubscriptionsRequest deleteSubscriptionsRequest;
-    UA_DeleteSubscriptionsRequest_init(&deleteSubscriptionsRequest);
-    UA_UInt32 removeId = subscriptionId;
-    deleteSubscriptionsRequest.subscriptionIdsSize = 1;
-    deleteSubscriptionsRequest.subscriptionIds = &removeId;
-
-    UA_DeleteSubscriptionsResponse deleteSubscriptionsResponse;
-    UA_DeleteSubscriptionsResponse_init(&deleteSubscriptionsResponse);
-    UA_LOCK(server->serviceMutex);
-    Service_DeleteSubscriptions(server, &server->adminSession, &deleteSubscriptionsRequest,
-                                &deleteSubscriptionsResponse);
-    UA_UNLOCK(server->serviceMutex);
-    UA_DeleteSubscriptionsResponse_deleteMembers(&deleteSubscriptionsResponse);
-}
-
-static void serverMutexLock(void) {
-    if (!(MUTEX_LOCK(serverMutex))) {
-        fprintf(stderr, "Mutex cannot be locked.\n");
-        exit(1);
-    }
-}
-
-static void serverMutexUnlock(void) {
-    if (!(MUTEX_UNLOCK(serverMutex))) {
-        fprintf(stderr, "Mutex cannot be unlocked.\n");
-        exit(1);
-    }
-}
-
-THREAD_CALLBACK(serverloop) {
-    while (running) {
-        serverMutexLock();
-        UA_Server_run_iterate(server, false);
-        serverIterations++;
-        serverMutexUnlock();
-    }
-    return 0;
-}
-
-static void
-sleepUntilAnswer(UA_Double sleepMs) {
-    UA_fakeSleep((UA_UInt32)sleepMs);
-    serverMutexLock();
-    size_t oldIterations = serverIterations;
-    size_t newIterations;
-    serverMutexUnlock();
-    while(true) {
-        serverMutexLock();
-        newIterations = serverIterations;
-        serverMutexUnlock();
-        if(oldIterations != newIterations)
-            return;
-        UA_realSleep(1);
-    }
-}
-
-static void
-setup(void) {
-    if (!MUTEX_INIT(serverMutex)) {
-        fprintf(stderr, "Server mutex was not created correctly.");
-        exit(1);
-    }
-    running = true;
-
-    server = UA_Server_new();
-    UA_ServerConfig *config = UA_Server_getConfig(server);
-    UA_ServerConfig_setDefault(config);
-
-    config->maxPublishReqPerSession = 5;
-    UA_Server_run_startup(server);
-
-    addNewEventType();
-    setupSelectClauses();
-    THREAD_CREATE(server_thread, serverloop);
-
-    client = UA_Client_new();
-    UA_ClientConfig_setDefault(UA_Client_getConfig(client));
-
-    UA_StatusCode retval = UA_Client_connect(client, "opc.tcp://localhost:4840");
-    if(retval != UA_STATUSCODE_GOOD) {
-        fprintf(stderr, "Client can not connect to opc.tcp://localhost:4840. %s",
-                UA_StatusCode_name(retval));
-        exit(1);
-    }
-    setupSubscription();
-
-    sleepUntilAnswer(publishingInterval + 100);
-}
-
-static void
-teardown(void) {
-    running = false;
-    THREAD_JOIN(server_thread);
-    removeSubscription();
-    UA_Server_run_shutdown(server);
-    UA_Server_delete(server);
-    UA_Array_delete(selectClauses, nSelectClauses, &UA_TYPES[UA_TYPES_SIMPLEATTRIBUTEOPERAND]);
-
-    UA_Client_disconnect(client);
-    UA_Client_delete(client);
-    if (!MUTEX_DESTROY(serverMutex)) {
-        fprintf(stderr, "Server mutex was not destroyed correctly.");
-        exit(1);
-    }
-}
-
-static UA_StatusCode
-triggerEventLocked(const UA_NodeId eventNodeId, const UA_NodeId origin,
-                   UA_ByteString *outEventId, const UA_Boolean deleteEventNode) {
-    serverMutexLock();
-    UA_StatusCode retval = UA_Server_triggerEvent(server, eventNodeId, origin,
-                                                  outEventId, deleteEventNode);
-    serverMutexUnlock();
-    return retval;
-}
-
-static UA_StatusCode
-eventSetup(UA_NodeId *eventNodeId) {
-    UA_StatusCode retval;
-    serverMutexLock();
-    retval = UA_Server_createEvent(server, eventType, eventNodeId);
-    serverMutexUnlock();
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    // add a severity to the event
-    UA_Variant value;
-    UA_RelativePathElement rpe;
-    UA_RelativePathElement_init(&rpe);
-    rpe.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY);
-    rpe.isInverse = false;
-    rpe.includeSubtypes = false;
-    UA_BrowsePath bp;
-    UA_BrowsePath_init(&bp);
-    bp.startingNode = *eventNodeId;
-    bp.relativePath.elementsSize = 1;
-    bp.relativePath.elements = &rpe;
-    rpe.targetName = UA_QUALIFIEDNAME(0, "Severity");
-    serverMutexLock();
-    UA_BrowsePathResult bpr = UA_Server_translateBrowsePathToNodeIds(server, &bp);
-    serverMutexUnlock();
-    ck_assert_uint_eq(bpr.statusCode, UA_STATUSCODE_GOOD);
-    // number with no special meaning
-    UA_UInt16 eventSeverity = 1000;
-    UA_Variant_setScalar(&value, &eventSeverity, &UA_TYPES[UA_TYPES_UINT16]);
-    serverMutexLock();
-    retval = UA_Server_writeValue(server, bpr.targets[0].targetId.nodeId, value);
-    serverMutexUnlock();
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_BrowsePathResult_deleteMembers(&bpr);
-
-    //add a message to the event
-    rpe.targetName = UA_QUALIFIEDNAME(0, "Message");
-    serverMutexLock();
-    bpr = UA_Server_translateBrowsePathToNodeIds(server, &bp);
-    serverMutexUnlock();
-    ck_assert_uint_eq(bpr.statusCode, UA_STATUSCODE_GOOD);
-    UA_LocalizedText message = UA_LOCALIZEDTEXT("en-US", "Generated Event");
-    UA_Variant_setScalar(&value, &message, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
-    serverMutexLock();
-    retval = UA_Server_writeValue(server, bpr.targets[0].targetId.nodeId, value);
-    serverMutexUnlock();
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    UA_BrowsePathResult_deleteMembers(&bpr);
-
-    return retval;
-}
-
-static UA_MonitoredItemCreateResult
-addMonitoredItem(UA_Client_EventNotificationCallback handler, bool setFilter) {
-    UA_MonitoredItemCreateRequest item;
-    UA_MonitoredItemCreateRequest_init(&item);
-    item.itemToMonitor.nodeId = UA_NODEID_NUMERIC(0, 2253); // Root->Objects->Server
-    item.itemToMonitor.attributeId = UA_ATTRIBUTEID_EVENTNOTIFIER;
-    item.monitoringMode = UA_MONITORINGMODE_REPORTING;
-
-    UA_EventFilter filter;
-    UA_EventFilter_init(&filter);
-    filter.selectClauses = selectClauses;
-    filter.selectClausesSize = nSelectClauses;
-
-    if (setFilter) {
-        item.requestedParameters.filter.encoding = UA_EXTENSIONOBJECT_DECODED;
-        item.requestedParameters.filter.content.decoded.data = &filter;
-        item.requestedParameters.filter.content.decoded.type = &UA_TYPES[UA_TYPES_EVENTFILTER];
-    }
-
-    item.requestedParameters.queueSize = 1;
-    item.requestedParameters.discardOldest = true;
-
-    return UA_Client_MonitoredItems_createEvent(client, subscriptionId,
-                                                UA_TIMESTAMPSTORETURN_BOTH, item,
-                                                &monitoredItemId, handler, NULL);
-}
-
-
-/* Create event with empty filter */
-
-START_TEST(generateEventEmptyFilter) {
-        UA_NodeId eventNodeId;
-        UA_StatusCode retval = eventSetup(&eventNodeId);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-        // add a monitored item
-        UA_MonitoredItemCreateResult createResult = addMonitoredItem(handler_events_simple, false);
-        ck_assert_uint_eq(createResult.statusCode, UA_STATUSCODE_BADEVENTFILTERINVALID);
-} END_TEST
-
-
-/* Ensure events are received with proper values */
-START_TEST(generateEvents) {
-    UA_NodeId eventNodeId;
-    UA_StatusCode retval = eventSetup(&eventNodeId);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    // add a monitored item
-    UA_MonitoredItemCreateResult createResult = addMonitoredItem(handler_events_simple, true);
-    ck_assert_uint_eq(createResult.statusCode, UA_STATUSCODE_GOOD);
-    monitoredItemId = createResult.monitoredItemId;
-    // trigger the event
-    retval = triggerEventLocked(eventNodeId, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER), NULL, UA_TRUE);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    // let the client fetch the event and check if the correct values were received
-    notificationReceived = false;
-    sleepUntilAnswer(publishingInterval + 100);
-    retval = UA_Client_run_iterate(client, 0);
-    sleepUntilAnswer(publishingInterval + 100);
-    retval = UA_Client_run_iterate(client, 0);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(createResult.revisedQueueSize, 1);
-
-    // delete the monitoredItem
-    UA_DeleteMonitoredItemsRequest deleteRequest;
-    UA_DeleteMonitoredItemsRequest_init(&deleteRequest);
-    deleteRequest.subscriptionId = subscriptionId;
-    deleteRequest.monitoredItemIds = &monitoredItemId;
-    deleteRequest.monitoredItemIdsSize = 1;
-
-    UA_DeleteMonitoredItemsResponse deleteResponse =
-        UA_Client_MonitoredItems_delete(client, deleteRequest);
-
-    sleepUntilAnswer(publishingInterval + 100);
-    ck_assert_uint_eq(deleteResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(deleteResponse.resultsSize, 1);
-    ck_assert_uint_eq(*(deleteResponse.results), UA_STATUSCODE_GOOD);
-
-    UA_DeleteMonitoredItemsResponse_deleteMembers(&deleteResponse);
-} END_TEST
-
-static bool hasBaseModelChangeEventType(void) {
-
-    UA_QualifiedName readBrowsename;
-    UA_QualifiedName_init(&readBrowsename);
-    UA_StatusCode retval = UA_Server_readBrowseName(server, UA_NODEID_NUMERIC(0, UA_NS0ID_BASEMODELCHANGEEVENTTYPE), &readBrowsename);
-    UA_QualifiedName_deleteMembers(&readBrowsename);
-    return !(retval == UA_STATUSCODE_BADNODEIDUNKNOWN);
-}
-
-START_TEST(createAbstractEvent) {
-    if (!hasBaseModelChangeEventType())
-        return;
-
-    UA_NodeId eventNodeId = UA_NODEID_NULL;
-    UA_NodeId abstractEventType = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEMODELCHANGEEVENTTYPE);
-    serverMutexLock();
-    UA_StatusCode retval = UA_Server_createEvent(server, abstractEventType, &eventNodeId);
-    serverMutexUnlock();
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-} END_TEST
-
-START_TEST(createAbstractEventWithParent) {
-    if (!hasBaseModelChangeEventType())
-        return;
-    UA_NodeId eventNodeId = UA_NODEID_NULL;
-    UA_NodeId abstractEventType = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEMODELCHANGEEVENTTYPE);
-    serverMutexLock();
-    // createEvent does not use a parent, so we are instead using addObjectNode
-    UA_StatusCode retval = UA_Server_addObjectNode(server, UA_NODEID_NULL, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER),
-                                                   UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                                   UA_QUALIFIEDNAME(0, "Abstract Event"), abstractEventType,
-                                                   UA_ObjectAttributes_default, NULL, &eventNodeId);
-    serverMutexUnlock();
-    ck_assert_uint_eq(retval, UA_STATUSCODE_BADTYPEDEFINITIONINVALID);
-} END_TEST
-
-START_TEST(createNonAbstractEventWithParent) {
-    UA_NodeId eventNodeId = UA_NODEID_NULL;
-    serverMutexLock();
-    // Our SimpleEventType is not abstract
-    UA_StatusCode retval = UA_Server_addObjectNode(server, UA_NODEID_NULL, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER),
-                                                   UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                                                   UA_QUALIFIEDNAME(0, "Non-Abstract Event"), eventType,
-                                                   UA_ObjectAttributes_default, NULL, &eventNodeId);
-    serverMutexUnlock();
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-} END_TEST
-
-static void
-handler_events_propagate(UA_Client *lclient, UA_UInt32 subId, void *subContext,
-                         UA_UInt32 monId, void *monContext,
-                         size_t nEventFields, UA_Variant *eventFields) {
-    UA_Boolean foundSeverity = UA_FALSE;
-    UA_Boolean foundMessage = UA_FALSE;
-    UA_Boolean foundType = UA_FALSE;
-    UA_Boolean foundSource = UA_FALSE;
-    ck_assert_uint_eq(*(UA_UInt32 *) monContext, monitoredItemId);
-    ck_assert_uint_eq(nEventFields, nSelectClauses);
-    // check all event fields
-    for(size_t i = 0; i < nEventFields; i++) {
-        // find out which attribute of the event is being looked at
-        if(UA_Variant_hasScalarType(&eventFields[i], &UA_TYPES[UA_TYPES_UINT16])) {
-            // Severity
-            ck_assert_uint_eq(*((UA_UInt16 *) (eventFields[i].data)), 1000);
-            foundSeverity = UA_TRUE;
-        } else if(UA_Variant_hasScalarType(&eventFields[i], &UA_TYPES[UA_TYPES_LOCALIZEDTEXT])) {
-            // Message
-            UA_LocalizedText comp = UA_LOCALIZEDTEXT("en-US", "Generated Event");
-            ck_assert(UA_String_equal(&((UA_LocalizedText *) eventFields[i].data)->locale, &comp.locale));
-            ck_assert(UA_String_equal(&((UA_LocalizedText *) eventFields[i].data)->text, &comp.text));
-            foundMessage = UA_TRUE;
-        } else if(UA_Variant_hasScalarType(&eventFields[i], &UA_TYPES[UA_TYPES_NODEID])) {
-            // either SourceNode or EventType
-            UA_NodeId serverNameSpaceId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_VENDORSERVERINFO);
-            if(UA_NodeId_equal((UA_NodeId *) eventFields[i].data, &eventType)) {
-                // EventType
-                foundType = UA_TRUE;
-            } else if(UA_NodeId_equal((UA_NodeId *) eventFields[i].data, &serverNameSpaceId)) {
-                // SourceNode
-                foundSource = UA_TRUE;
-            } else {
-                ck_assert_msg(UA_FALSE, "NodeId doesn't match");
-            }
-        } else {
-            ck_assert_msg(UA_FALSE, "Field doesn't match");
-        }
-    }
-    ck_assert_uint_eq(foundMessage, UA_TRUE);
-    ck_assert_uint_eq(foundSeverity, UA_TRUE);
-    ck_assert_uint_eq(foundType, UA_TRUE);
-    ck_assert_uint_eq(foundSource, UA_TRUE);
-    notificationReceived = true;
-}
-
-START_TEST(uppropagation) {
-    // trigger first event
-    UA_NodeId eventNodeId = UA_NODEID_NULL;
-    UA_StatusCode retval = eventSetup(&eventNodeId);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    //add a monitored item
-    UA_MonitoredItemCreateResult createResult = addMonitoredItem(handler_events_propagate, true);
-    ck_assert_uint_eq(createResult.statusCode, UA_STATUSCODE_GOOD);
-    monitoredItemId = createResult.monitoredItemId;
-    // trigger the event on a child of server, using namespaces in this case (no reason in particular)
-    retval = triggerEventLocked(eventNodeId, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_VENDORSERVERINFO), NULL,
-                                UA_TRUE);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    // let the client fetch the event and check if the correct values were received
-    notificationReceived = false;
-    sleepUntilAnswer(publishingInterval + 100);
-    retval = UA_Client_run_iterate(client, 0);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(createResult.revisedQueueSize, 1);
-
-    // delete the monitoredItem
-    UA_DeleteMonitoredItemsRequest deleteRequest;
-    UA_DeleteMonitoredItemsRequest_init(&deleteRequest);
-    deleteRequest.subscriptionId = subscriptionId;
-    deleteRequest.monitoredItemIds = &monitoredItemId;
-    deleteRequest.monitoredItemIdsSize = 1;
-
-    UA_DeleteMonitoredItemsResponse deleteResponse =
-        UA_Client_MonitoredItems_delete(client, deleteRequest);
-
-    ck_assert_uint_eq(deleteResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(deleteResponse.resultsSize, 1);
-    ck_assert_uint_eq(*(deleteResponse.results), UA_STATUSCODE_GOOD);
-
-    UA_DeleteMonitoredItemsResponse_deleteMembers(&deleteResponse);
-} END_TEST
-
-static void
-handler_events_overflow(UA_Client *lclient, UA_UInt32 subId, void *subContext,
-                        UA_UInt32 monId, void *monContext,
-                        size_t nEventFields, UA_Variant *eventFields) {
-    ck_assert_uint_eq(*(UA_UInt32 *) monContext, monitoredItemId);
-    if(nEventFields == 1) {
-        /* overflow was received */
-        ck_assert(eventFields->type == &UA_TYPES[UA_TYPES_NODEID]);
-        UA_NodeId comp = UA_NODEID_NUMERIC(0, UA_NS0ID_SIMPLEOVERFLOWEVENTTYPE);
-        ck_assert((UA_NodeId_equal((UA_NodeId *) eventFields->data, &comp)));
-        overflowNotificationReceived = UA_TRUE;
-    } else if(nEventFields == 4) {
-        /* other event was received */
-        handler_events_simple(lclient, subId, subContext, monId,
-                              monContext, nEventFields, eventFields);
-    }
-}
-
-/* Ensures an eventQueueOverflowEvent is published when appropriate */
-START_TEST(eventOverflow) {
-    // add a monitored item
-    UA_MonitoredItemCreateResult createResult = addMonitoredItem(handler_events_overflow, true);
-    ck_assert_uint_eq(createResult.statusCode, UA_STATUSCODE_GOOD);
-    monitoredItemId = createResult.monitoredItemId;
-
-    // trigger first event
-    UA_NodeId eventNodeId;
-    UA_StatusCode retval = eventSetup(&eventNodeId);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    retval = triggerEventLocked(eventNodeId, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER), NULL, UA_FALSE);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    retval = triggerEventLocked(eventNodeId, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER), NULL, UA_TRUE);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-
-    // fetch the events, ensure both the overflow and the original event are received
-    notificationReceived = false;
-    overflowNotificationReceived = true;
-    sleepUntilAnswer(publishingInterval + 100);
-    retval = UA_Client_run_iterate(client, 0);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(notificationReceived, true);
-    ck_assert_uint_eq(overflowNotificationReceived, true);
-    ck_assert_uint_eq(createResult.revisedQueueSize, 1);
-
-    // delete the monitoredItem
-    UA_DeleteMonitoredItemsRequest deleteRequest;
-    UA_DeleteMonitoredItemsRequest_init(&deleteRequest);
-    deleteRequest.subscriptionId = subscriptionId;
-    deleteRequest.monitoredItemIds = &monitoredItemId;
-    deleteRequest.monitoredItemIdsSize = 1;
-
-    UA_DeleteMonitoredItemsResponse deleteResponse =
-        UA_Client_MonitoredItems_delete(client, deleteRequest);
-
-    ck_assert_uint_eq(deleteResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(deleteResponse.resultsSize, 1);
-    ck_assert_uint_eq(*(deleteResponse.results), UA_STATUSCODE_GOOD);
-
-    UA_DeleteMonitoredItemsResponse_deleteMembers(&deleteResponse);
-} END_TEST
-
-START_TEST(multipleMonitoredItemsOneNode) {
-    UA_UInt32 monitoredItemIdAr[3];
-
-    /* set up monitored items */
-    UA_MonitoredItemCreateRequest item;
-    UA_MonitoredItemCreateRequest_init(&item);
-    item.itemToMonitor.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER); // Root->Objects->Server
-    item.itemToMonitor.attributeId = UA_ATTRIBUTEID_EVENTNOTIFIER;
-    item.monitoringMode = UA_MONITORINGMODE_REPORTING;
-
-    UA_EventFilter filter;
-    UA_EventFilter_init(&filter);
-    filter.selectClauses = selectClauses;
-    filter.selectClausesSize = nSelectClauses;
-
-    item.requestedParameters.filter.encoding = UA_EXTENSIONOBJECT_DECODED;
-    item.requestedParameters.filter.content.decoded.data = &filter;
-    item.requestedParameters.filter.content.decoded.type = &UA_TYPES[UA_TYPES_EVENTFILTER];
-    item.requestedParameters.queueSize = 1;
-    item.requestedParameters.discardOldest = true;
-
-    for(size_t i = 0; i < 3; i++) {
-        UA_MonitoredItemCreateResult result =
-            UA_Client_MonitoredItems_createEvent(client, subscriptionId, UA_TIMESTAMPSTORETURN_BOTH,
-                                                 item, NULL, handler_events_simple, NULL);
-        ck_assert_uint_eq(result.statusCode, UA_STATUSCODE_GOOD);
-        monitoredItemIdAr[i] = result.monitoredItemId;
-    }
-
-    // delete the three monitored items after another
-    UA_DeleteMonitoredItemsRequest deleteRequest;
-    UA_DeleteMonitoredItemsRequest_init(&deleteRequest);
-    deleteRequest.subscriptionId = subscriptionId;
-    deleteRequest.monitoredItemIdsSize = 1;
-    UA_DeleteMonitoredItemsResponse deleteResponse;
-
-    for(size_t i = 0; i < 3; i++) {
-        deleteRequest.monitoredItemIds = &monitoredItemIdAr[i];
-        deleteResponse = UA_Client_MonitoredItems_delete(client, deleteRequest);
-
-        ck_assert_uint_eq(deleteResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-        ck_assert_uint_eq(deleteResponse.resultsSize, 1);
-        ck_assert_uint_eq(*(deleteResponse.results), UA_STATUSCODE_GOOD);
-        UA_DeleteMonitoredItemsResponse_deleteMembers(&deleteResponse);
-    }
-} END_TEST
-
-START_TEST(eventStressing) {
-    // add a monitored item
-    UA_MonitoredItemCreateResult createResult = addMonitoredItem(handler_events_overflow, true);
-    ck_assert_uint_eq(createResult.statusCode, UA_STATUSCODE_GOOD);
-    monitoredItemId = createResult.monitoredItemId;
-
-    // trigger a large amount of events, ensure the server doesnt crash because of it
-    UA_NodeId eventNodeId;
-    UA_StatusCode retval = eventSetup(&eventNodeId);
-    ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    for(size_t i = 0; i < 20; i++) {
-        for(size_t j = 0; j < 5; j++) {
-            retval = triggerEventLocked(eventNodeId,
-                                            UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER), NULL, UA_FALSE);
-            ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-        }
-        retval = UA_Client_run_iterate(client, 0);
-        ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    }
-
-    // delete the monitoredItem
-    UA_DeleteMonitoredItemsRequest deleteRequest;
-    UA_DeleteMonitoredItemsRequest_init(&deleteRequest);
-    deleteRequest.subscriptionId = subscriptionId;
-    deleteRequest.monitoredItemIds = &monitoredItemId;
-    deleteRequest.monitoredItemIdsSize = 1;
-
-    UA_DeleteMonitoredItemsResponse deleteResponse =
-        UA_Client_MonitoredItems_delete(client, deleteRequest);
-
-    ck_assert_uint_eq(deleteResponse.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    ck_assert_uint_eq(deleteResponse.resultsSize, 1);
-    ck_assert_uint_eq(*(deleteResponse.results), UA_STATUSCODE_GOOD);
-
-    UA_DeleteMonitoredItemsResponse_deleteMembers(&deleteResponse);
-} END_TEST
-
-#endif /* UA_ENABLE_SUBSCRIPTIONS_EVENTS */
-
-/* Assumes subscriptions work fine with data change because of other unit test */
-static Suite *testSuite_Client(void) {
-    Suite *s = suite_create("Server Subscription Events");
-    TCase *tc_server = tcase_create("Server Subscription Events");
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-    tcase_add_unchecked_fixture(tc_server, setup, teardown);
-    tcase_add_test(tc_server, generateEventEmptyFilter);
-    tcase_add_test(tc_server, generateEvents);
-    tcase_add_test(tc_server, createAbstractEvent);
-    tcase_add_test(tc_server, createAbstractEventWithParent);
-    tcase_add_test(tc_server, createNonAbstractEventWithParent);
-    tcase_add_test(tc_server, uppropagation);
-    tcase_add_test(tc_server, eventOverflow);
-    tcase_add_test(tc_server, multipleMonitoredItemsOneNode);
-    tcase_add_test(tc_server, eventStressing);
-#endif /* UA_ENABLE_SUBSCRIPTIONS_EVENTS */
-    suite_add_tcase(s, tc_server);
-
-    return s;
-}
-
-int main(void) {
-    Suite *s = testSuite_Client();
-    SRunner *sr = srunner_create(s);
-    srunner_set_fork_status(sr, CK_NOFORK);
-    srunner_run_all(sr, CK_NORMAL);
-    int number_failed = srunner_ntests_failed(sr);
-    srunner_free(sr);
-    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/ext/open62541/tests/server/historical_read_test_data.h b/ext/open62541/tests/server/historical_read_test_data.h
deleted file mode 100644
index 3334df7..0000000
--- a/ext/open62541/tests/server/historical_read_test_data.h
+++ /dev/null
@@ -1,417 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *    Copyright 2018 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
- */
-
-/* Data in this header is gathered from OPC Unified Architecture, Part 11, Release
-1.03 Page 5-6 from OPC Foundation */
-
-#ifndef UA_HISTORICAL_READ_TEST_DATA_H_
-#define UA_HISTORICAL_READ_TEST_DATA_H_
-
-#include <open62541/types.h>
-
-#include <limits.h>
-
-typedef struct {
-    UA_DateTime start;
-    UA_DateTime end;
-    UA_UInt32 numValuesPerNode;
-    UA_Boolean returnBounds;
-    UA_DateTime result[8];
-    UA_Boolean returnContinuationPoint;
-} testTuple;
-
-#define TIMESTAMP_UNSPECIFIED LLONG_MIN
-#define NODATA 0
-#define TIMESTAMP_FIRST 1
-#define TIMESTAMP_4_48 (448 * UA_DATETIME_SEC)
-#define TIMESTAMP_4_58 (458 * UA_DATETIME_SEC)
-#define TIMESTAMP_4_59 (459 * UA_DATETIME_SEC)
-#define TIMESTAMP_5_00 (500 * UA_DATETIME_SEC)
-#define TIMESTAMP_5_01 (501 * UA_DATETIME_SEC)
-#define TIMESTAMP_5_02 (502 * UA_DATETIME_SEC)
-#define TIMESTAMP_5_03 (503 * UA_DATETIME_SEC)
-#define TIMESTAMP_5_04 (504 * UA_DATETIME_SEC)
-#define TIMESTAMP_5_05 (505 * UA_DATETIME_SEC)
-#define TIMESTAMP_5_06 (506 * UA_DATETIME_SEC)
-#define TIMESTAMP_5_07 (507 * UA_DATETIME_SEC)
-#define TIMESTAMP_LAST (600 * UA_DATETIME_SEC)
-
-static UA_DateTime testData[] = {
-    TIMESTAMP_5_03,
-    TIMESTAMP_5_00,
-    TIMESTAMP_5_02,
-    TIMESTAMP_5_06,
-    TIMESTAMP_5_05,
-    0 // last element
-};
-
-#define DELETE_START_TIME TIMESTAMP_5_03
-#define DELETE_STOP_TIME  TIMESTAMP_5_06
-
-static UA_DateTime testDataAfterDelete[] = {
-    TIMESTAMP_5_00,
-    TIMESTAMP_5_02,
-    TIMESTAMP_5_06,
-    0 // last element
-};
-
-static UA_StatusCode testDataUpdateResult[] = {
-    UA_STATUSCODE_GOODENTRYREPLACED,
-    UA_STATUSCODE_GOODENTRYREPLACED,
-    UA_STATUSCODE_GOODENTRYINSERTED,
-    UA_STATUSCODE_GOODENTRYINSERTED,
-    UA_STATUSCODE_GOODENTRYREPLACED
-};
-
-static testTuple testRequests[] =
-{
-    { TIMESTAMP_5_00,
-      TIMESTAMP_5_05,
-      0,
-      true,
-      { TIMESTAMP_5_00, TIMESTAMP_5_02, TIMESTAMP_5_03, TIMESTAMP_5_05, 0 },
-      false
-    },
-    { TIMESTAMP_5_00,
-      TIMESTAMP_5_05,
-      0,
-      false,
-      { TIMESTAMP_5_00, TIMESTAMP_5_02, TIMESTAMP_5_03, 0 },
-      false
-    },
-    { TIMESTAMP_5_01,
-      TIMESTAMP_5_04,
-      0,
-      true,
-      { TIMESTAMP_5_00, TIMESTAMP_5_02, TIMESTAMP_5_03, TIMESTAMP_5_05, 0 },
-      false
-    },
-    { TIMESTAMP_5_01,
-      TIMESTAMP_5_04,
-      0,
-      false,
-      { TIMESTAMP_5_02, TIMESTAMP_5_03, 0 },
-      false
-    },
-    { TIMESTAMP_5_05,
-      TIMESTAMP_5_00,
-      0,
-      true,
-      { TIMESTAMP_5_05, TIMESTAMP_5_03, TIMESTAMP_5_02, TIMESTAMP_5_00, 0 },
-      false
-    },
-    { TIMESTAMP_5_05,
-      TIMESTAMP_5_00,
-      0,
-      false,
-      { TIMESTAMP_5_05, TIMESTAMP_5_03, TIMESTAMP_5_02, 0 },
-      false
-    },
-    { TIMESTAMP_5_04,
-      TIMESTAMP_5_01,
-      0,
-      true,
-      { TIMESTAMP_5_05, TIMESTAMP_5_03, TIMESTAMP_5_02, TIMESTAMP_5_00, 0 },
-      false
-    },
-    { TIMESTAMP_5_04,
-      TIMESTAMP_5_01,
-      0,
-      false,
-      { TIMESTAMP_5_03, TIMESTAMP_5_02, 0 },
-      false
-    },
-    { TIMESTAMP_4_59,
-      TIMESTAMP_5_05,
-      0,
-      true,
-      { TIMESTAMP_FIRST, TIMESTAMP_5_00, TIMESTAMP_5_02, TIMESTAMP_5_03, TIMESTAMP_5_05, 0 },
-      false
-    },
-    { TIMESTAMP_4_59,
-      TIMESTAMP_5_05,
-      0,
-      false,
-      { TIMESTAMP_5_00, TIMESTAMP_5_02, TIMESTAMP_5_03, 0 },
-      false
-    },
-    { TIMESTAMP_5_01,
-      TIMESTAMP_5_07,
-      0,
-      true,
-      { TIMESTAMP_5_00, TIMESTAMP_5_02, TIMESTAMP_5_03, TIMESTAMP_5_05, TIMESTAMP_5_06, TIMESTAMP_LAST, 0 },
-      false
-    },
-    { TIMESTAMP_5_01,
-      TIMESTAMP_5_07,
-      0,
-      false,
-      { TIMESTAMP_5_02, TIMESTAMP_5_03, TIMESTAMP_5_05, TIMESTAMP_5_06, 0 },
-      false
-    },
-    { TIMESTAMP_5_00,
-      TIMESTAMP_5_05,
-      3,
-      true,
-      { TIMESTAMP_5_00, TIMESTAMP_5_02, TIMESTAMP_5_03, 0 },
-      true
-    },
-    { TIMESTAMP_5_00,
-      TIMESTAMP_5_05,
-      3,
-      false,
-      { TIMESTAMP_5_00, TIMESTAMP_5_02, TIMESTAMP_5_03, 0 },
-      false
-    },
-    { TIMESTAMP_5_01,
-      TIMESTAMP_5_04,
-      3,
-      true,
-      { TIMESTAMP_5_00, TIMESTAMP_5_02, TIMESTAMP_5_03, 0 },
-      true
-    },
-    { TIMESTAMP_5_01,
-      TIMESTAMP_5_04,
-      3,
-      false,
-      { TIMESTAMP_5_02, TIMESTAMP_5_03, 0 },
-      false
-    },
-    { TIMESTAMP_5_05,
-      TIMESTAMP_5_00,
-      3,
-      true,
-      { TIMESTAMP_5_05, TIMESTAMP_5_03, TIMESTAMP_5_02, 0 },
-      true
-    },
-    { TIMESTAMP_5_05,
-      TIMESTAMP_5_00,
-      3,
-      false,
-      { TIMESTAMP_5_05, TIMESTAMP_5_03, TIMESTAMP_5_02, 0 },
-      false
-    },
-    { TIMESTAMP_5_04,
-      TIMESTAMP_5_01,
-      3,
-      true,
-      { TIMESTAMP_5_05, TIMESTAMP_5_03, TIMESTAMP_5_02, 0 },
-      true
-    },
-    { TIMESTAMP_5_04,
-      TIMESTAMP_5_01,
-      3,
-      false,
-      { TIMESTAMP_5_03, TIMESTAMP_5_02, 0 },
-      false
-    },
-    { TIMESTAMP_4_59,
-      TIMESTAMP_5_05,
-      3,
-      true,
-      { TIMESTAMP_FIRST, TIMESTAMP_5_00, TIMESTAMP_5_02, 0 },
-      true
-    },
-    { TIMESTAMP_4_59,
-      TIMESTAMP_5_05,
-      3,
-      false,
-      { TIMESTAMP_5_00, TIMESTAMP_5_02, TIMESTAMP_5_03, 0 },
-      false
-    },
-    { TIMESTAMP_5_01,
-      TIMESTAMP_5_07,
-      3,
-      true,
-      { TIMESTAMP_5_00, TIMESTAMP_5_02, TIMESTAMP_5_03, 0 },
-      true
-    },
-    { TIMESTAMP_5_01,
-      TIMESTAMP_5_07,
-      3,
-      false,
-      { TIMESTAMP_5_02, TIMESTAMP_5_03, TIMESTAMP_5_05, 0 },
-      true
-    },
-    { TIMESTAMP_5_00,
-      TIMESTAMP_UNSPECIFIED,
-      3,
-      true,
-      { TIMESTAMP_5_00, TIMESTAMP_5_02, TIMESTAMP_5_03, 0 },
-      true
-    },
-    { TIMESTAMP_5_00,
-      TIMESTAMP_UNSPECIFIED,
-      3,
-      false,
-      { TIMESTAMP_5_00, TIMESTAMP_5_02, TIMESTAMP_5_03, 0 },
-      true
-    },
-    { TIMESTAMP_5_00,
-      TIMESTAMP_UNSPECIFIED,
-      6,
-      true,
-      { TIMESTAMP_5_00, TIMESTAMP_5_02, TIMESTAMP_5_03, TIMESTAMP_5_05, TIMESTAMP_5_06, TIMESTAMP_LAST, 0 },
-      false
-    },
-    { TIMESTAMP_5_00,
-      TIMESTAMP_UNSPECIFIED,
-      6,
-      false,
-      { TIMESTAMP_5_00, TIMESTAMP_5_02, TIMESTAMP_5_03, TIMESTAMP_5_05, TIMESTAMP_5_06, 0 },
-      false
-    },
-    { TIMESTAMP_5_07,
-      TIMESTAMP_UNSPECIFIED,
-      6,
-      true,
-      { TIMESTAMP_5_06, TIMESTAMP_LAST, 0 },
-      false
-    },
-    { TIMESTAMP_5_07,
-      TIMESTAMP_UNSPECIFIED,
-      6,
-      false,
-      { NODATA, 0 },
-      false
-    },
-    { TIMESTAMP_UNSPECIFIED,
-      TIMESTAMP_5_06,
-      3,
-      true,
-      { TIMESTAMP_5_06,TIMESTAMP_5_05,TIMESTAMP_5_03, 0 },
-      true
-    },
-    { TIMESTAMP_UNSPECIFIED,
-      TIMESTAMP_5_06,
-      3,
-      false,
-      { TIMESTAMP_5_06,TIMESTAMP_5_05,TIMESTAMP_5_03, 0 },
-      true
-    },
-    { TIMESTAMP_UNSPECIFIED,
-      TIMESTAMP_5_06,
-      6,
-      true,
-      { TIMESTAMP_5_06,TIMESTAMP_5_05,TIMESTAMP_5_03,TIMESTAMP_5_02,TIMESTAMP_5_00,TIMESTAMP_FIRST, 0 },
-      false
-    },
-    { TIMESTAMP_UNSPECIFIED,
-      TIMESTAMP_5_06,
-      6,
-      false,
-      { TIMESTAMP_5_06, TIMESTAMP_5_05, TIMESTAMP_5_03, TIMESTAMP_5_02, TIMESTAMP_5_00, 0 },
-      false
-    },
-    { TIMESTAMP_UNSPECIFIED,
-      TIMESTAMP_4_48,
-      6,
-      true,
-      { TIMESTAMP_5_00, TIMESTAMP_FIRST, 0 },
-      false
-    },
-    { TIMESTAMP_UNSPECIFIED,
-      TIMESTAMP_4_48,
-      6,
-      false,
-      { NODATA, 0 },
-      false
-    },
-    { TIMESTAMP_4_48,
-      TIMESTAMP_4_48,
-      0,
-      true,
-      { TIMESTAMP_FIRST, TIMESTAMP_5_00, 0 },
-      false
-    },
-    { TIMESTAMP_4_48,
-      TIMESTAMP_4_48,
-      0,
-      false,
-      { NODATA, 0 },
-      false
-    },
-    { TIMESTAMP_4_48,
-      TIMESTAMP_4_48,
-      1,
-      true,
-      { TIMESTAMP_FIRST, 0 },
-      true
-    },
-    { TIMESTAMP_4_48,
-      TIMESTAMP_4_48,
-      1,
-      false,
-      { NODATA, 0 },
-      false
-    },
-    { TIMESTAMP_4_48,
-      TIMESTAMP_4_48,
-      2,
-      true,
-      { TIMESTAMP_FIRST,TIMESTAMP_5_00, 0 },
-      false
-    },
-    { TIMESTAMP_5_00,
-      TIMESTAMP_5_00,
-      0,
-      true,
-      { TIMESTAMP_5_00,TIMESTAMP_5_02, 0 },
-      false
-    },
-    { TIMESTAMP_5_00,
-      TIMESTAMP_5_00,
-      0,
-      false,
-      { TIMESTAMP_5_00, 0 },
-      false
-    },
-    { TIMESTAMP_5_00,
-      TIMESTAMP_5_00,
-      1,
-      true,
-      { TIMESTAMP_5_00, 0 },
-      true
-    },
-    { TIMESTAMP_5_00,
-      TIMESTAMP_5_00,
-      1,
-      false,
-      { TIMESTAMP_5_00, 0 },
-      false
-    },
-    { TIMESTAMP_5_01,
-      TIMESTAMP_5_01,
-      0,
-      true,
-      { TIMESTAMP_5_00, TIMESTAMP_5_02, 0 },
-      false
-    },
-    { TIMESTAMP_5_01,
-      TIMESTAMP_5_01,
-      0,
-      false,
-      { NODATA, 0 },
-      false
-    },
-    { TIMESTAMP_5_01,
-      TIMESTAMP_5_01,
-      1,
-      true,
-      { TIMESTAMP_5_00, 0 },
-      true
-    },
-    { TIMESTAMP_5_01,
-      TIMESTAMP_5_01,
-      1,
-      false,
-      { NODATA },
-      false
-    },
-    {0,0,0,false,{ NODATA }, false} // last element
-};
-#endif /*UA_HISTORICAL_READ_TEST_DATA_H_*/
diff --git a/ext/open62541/tests/server/randomindextest_backend.h b/ext/open62541/tests/server/randomindextest_backend.h
deleted file mode 100644
index 972e360..0000000
--- a/ext/open62541/tests/server/randomindextest_backend.h
+++ /dev/null
@@ -1,345 +0,0 @@
-#ifndef BACKEND_H
-#define BACKEND_H
-
-#include <open62541/plugin/historydata/history_data_backend.h>
-
-struct tupel {
-    size_t index;
-    UA_DataValue value;
-};
-
-// null terminated array
-struct context_randomindextest {
-    // null terminated array
-    struct tupel *tupels;
-    size_t tupelSize;
-};
-
-static size_t
-indexByIndex_randomindextest(struct context_randomindextest *context, size_t index)
-{
-    for (size_t i = 0; i < context->tupelSize; ++i) {
-        if (context->tupels[i].index == index)
-            return i;
-    }
-    return context->tupelSize;
-}
-
-// last value should be NULL, all values must be sorted
-static struct context_randomindextest*
-generateTestContext_randomindextest(const UA_DateTime *data) {
-    size_t count = 0;
-    while(data[count++]);
-    struct context_randomindextest* ret = (struct context_randomindextest*)UA_calloc(1, sizeof(struct context_randomindextest));
-    ret->tupels = (struct tupel*)UA_calloc(count, sizeof(struct tupel));
-    ret->tupelSize = count;
-    UA_DateTime *sortData;
-    UA_StatusCode retval = UA_Array_copy(data, count, (void**)&sortData, &UA_TYPES[UA_TYPES_DATETIME]);
-    if (retval != UA_STATUSCODE_GOOD)
-        return NULL;
-    for (size_t i = 0; i < count; ++i) {
-        size_t current = 0;
-        for (size_t j = 1; j < count-1; ++j){
-            UA_DateTime currentDate = sortData[current];
-            UA_DateTime jDate = sortData[j];
-            if (currentDate > jDate) {
-                current = j;
-            }
-        }
-        UA_DateTime nextValue = i == count-1 ? 0 : sortData[current];
-        sortData[current] = LLONG_MAX;
-        bool unique;
-        do {
-            unique = true;
-            ret->tupels[i].index = UA_UInt32_random();
-            for (size_t j = 0; j < i; ++j)
-                if (i != j && ret->tupels[i].index == ret->tupels[j].index)
-                        unique = false;
-        } while (!unique);
-        UA_DataValue_init(&ret->tupels[i].value);
-        ret->tupels[i].value.hasValue = true;
-        UA_Variant_setScalarCopy(&ret->tupels[i].value.value, &nextValue, &UA_TYPES[UA_TYPES_INT64]);
-        ret->tupels[i].value.hasStatus = true;
-        ret->tupels[i].value.status = UA_STATUSCODE_GOOD;
-        ret->tupels[i].value.hasServerTimestamp = true;
-        ret->tupels[i].value.serverTimestamp = nextValue;
-        ret->tupels[i].value.hasSourceTimestamp = true;
-        ret->tupels[i].value.sourceTimestamp = nextValue;
-    }
-    UA_free(sortData);
-    return ret;
-}
-
-static void
-deleteMembers_randomindextest(UA_HistoryDataBackend *backend)
-{
-    struct context_randomindextest* context = (struct context_randomindextest*)backend->context;
-    for (size_t i = 0; i < context->tupelSize; ++i) {
-        UA_DataValue_deleteMembers(&context->tupels[i].value);
-    }
-    UA_free(context->tupels);
-    UA_free(context);
-}
-
-static UA_StatusCode
-serverSetHistoryData_randomindextest(UA_Server *server,
-                                     void *hdbContext,
-                                     const UA_NodeId *sessionId,
-                                     void *sessionContext,
-                                     const UA_NodeId *nodeId,
-                                     UA_Boolean historizing,
-                                     const UA_DataValue *value)
-{
-    // we do not add data to the test data
-    return UA_STATUSCODE_GOOD;
-}
-
-static size_t
-getEnd_private(struct context_randomindextest* context)
-{
-    return context->tupels[context->tupelSize-1].index;
-}
-
-static size_t
-getEnd_randomindextest(UA_Server *server,
-                       void *hdbContext,
-                       const UA_NodeId *sessionId,
-                       void *sessionContext,
-                       const UA_NodeId *nodeId)
-{
-    struct context_randomindextest* context = (struct context_randomindextest*)hdbContext;
-    return getEnd_private(context);
-}
-
-static size_t
-lastIndex_randomindextest(UA_Server *server,
-                          void *hdbContext,
-                          const UA_NodeId *sessionId,
-                          void *sessionContext,
-                          const UA_NodeId *nodeId)
-{
-    struct context_randomindextest* context = (struct context_randomindextest*)hdbContext;
-    return context->tupels[context->tupelSize-2].index;
-}
-
-static size_t
-firstIndex_randomindextest(UA_Server *server,
-                           void *hdbContext,
-                           const UA_NodeId *sessionId,
-                           void *sessionContext,
-                           const UA_NodeId *nodeId)
-{
-    struct context_randomindextest* context = (struct context_randomindextest*)hdbContext;
-    return context->tupels[0].index;
-}
-
-static UA_Boolean
-search_randomindextest(struct context_randomindextest* ctx,
-                            const UA_DateTime timestamp,
-                            size_t *index) {
-    for (size_t i = 0; i < ctx->tupelSize; ++i) {
-        if (ctx->tupels[i].value.sourceTimestamp == timestamp) {
-            *index = i;
-            return true;
-        }
-        if (ctx->tupels[i].value.sourceTimestamp > timestamp) {
-            *index = i;
-            return false;
-        }
-    }
-    *index = ctx->tupelSize-1;
-    return false;
-}
-
-static size_t
-getDateTimeMatch_randomindextest(UA_Server *server,
-                                 void *hdbContext,
-                                 const UA_NodeId *sessionId,
-                                 void *sessionContext,
-                                 const UA_NodeId *nodeId,
-                                 const UA_DateTime timestamp,
-                                 const MatchStrategy strategy)
-{
-    struct context_randomindextest* context = (struct context_randomindextest*)hdbContext;
-    size_t current;
-
-    UA_Boolean retval = search_randomindextest(context, timestamp, &current);
-
-    if ((strategy == MATCH_EQUAL
-         || strategy == MATCH_EQUAL_OR_AFTER
-         || strategy == MATCH_EQUAL_OR_BEFORE)
-            && retval)
-        return context->tupels[current].index;
-    switch (strategy) {
-    case MATCH_AFTER:
-        if (retval)
-            return context->tupels[current+1].index;
-        return context->tupels[current].index;
-    case MATCH_EQUAL_OR_AFTER:
-        return context->tupels[current].index;
-    case MATCH_EQUAL_OR_BEFORE:
-        // retval == true aka "equal" is handled before
-        // Fall through if !retval
-    case MATCH_BEFORE:
-        if (current > 0)
-            return context->tupels[current-1].index;
-        else
-            return context->tupels[context->tupelSize-1].index;
-    default:
-        break;
-    }
-    return context->tupels[context->tupelSize-1].index;
-}
-
-
-#define MYABSSUB(a,b) ((a)<(b)?((b)-(a)):(a)-(b))
-static size_t
-resultSize_randomindextest(UA_Server *server,
-                           void *hdbContext,
-                           const UA_NodeId *sessionId,
-                           void *sessionContext,
-                           const UA_NodeId *nodeId,
-                           size_t startIndex,
-                           size_t endIndex)
-{
-    struct context_randomindextest* context = (struct context_randomindextest*)hdbContext;
-    if (startIndex == getEnd_private(context)
-            || endIndex == getEnd_private(context))
-        return 0;
-    size_t realEndIndex = indexByIndex_randomindextest(context, endIndex);
-    size_t realStartIndex = indexByIndex_randomindextest(context, startIndex);
-    size_t result = MYABSSUB(realEndIndex,realStartIndex);
-    return result+1;
-}
-
-static UA_StatusCode
-copyDataValues_randomindextest(UA_Server *server,
-                               void *hdbContext,
-                               const UA_NodeId *sessionId,
-                               void *sessionContext,
-                               const UA_NodeId *nodeId,
-                               size_t startIndex,
-                               size_t endIndex,
-                               UA_Boolean reverse,
-                               size_t maxValues,
-                               UA_NumericRange range,
-                               UA_Boolean releaseContinuationPoints,
-                               const UA_ByteString *continuationPoint,
-                               UA_ByteString *outContinuationPoint,
-                               size_t *providedValues,
-                               UA_DataValue *values)
-{
-    size_t skip = 0;
-    if (continuationPoint->length > 0) {
-        if (continuationPoint->length == sizeof(size_t)) {
-            skip = *((size_t*)(continuationPoint->data));
-        } else {
-            return UA_STATUSCODE_BADCONTINUATIONPOINTINVALID;
-        }
-    }
-    struct context_randomindextest* context = (struct context_randomindextest*)hdbContext;
-    size_t index = indexByIndex_randomindextest(context,startIndex);
-    size_t counter = 0;
-    size_t skipedValues = 0;
-    if (reverse) {
-        while (index >= indexByIndex_randomindextest(context,endIndex)
-               && index < context->tupelSize-1
-               && counter < maxValues) {
-            if (skipedValues++ >= skip) {
-                UA_DataValue_copy(&context->tupels[index].value, &values[counter]);
-                ++counter;
-            }
-            --index;
-        }
-    } else {
-        while (index <= indexByIndex_randomindextest(context,endIndex) && counter < maxValues) {
-            if (skipedValues++ >= skip) {
-                UA_DataValue_copy(&context->tupels[index].value, &values[counter]);
-                ++counter;
-            }
-            ++index;
-        }
-    }
-
-    if (providedValues)
-        *providedValues = counter;
-
-    if ((!reverse && (indexByIndex_randomindextest(context,endIndex)-indexByIndex_randomindextest(context,startIndex)-skip+1) > counter)
-            || (reverse && (indexByIndex_randomindextest(context,startIndex)-indexByIndex_randomindextest(context,endIndex)-skip+1) > counter)) {
-        outContinuationPoint->length = sizeof(size_t);
-        size_t t = sizeof(size_t);
-        outContinuationPoint->data = (UA_Byte*)UA_malloc(t);
-        *((size_t*)(outContinuationPoint->data)) = skip + counter;
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static const UA_DataValue*
-getDataValue_randomindextest(UA_Server *server,
-                             void *hdbContext,
-                             const UA_NodeId *sessionId,
-                             void *sessionContext,
-                             const UA_NodeId *nodeId,
-                             size_t index)
-{
-    struct context_randomindextest* context = (struct context_randomindextest*)hdbContext;
-    size_t realIndex = indexByIndex_randomindextest(context, index);
-    return &context->tupels[realIndex].value;
-}
-
-static UA_Boolean
-boundSupported_randomindextest(UA_Server *server,
-                               void *hdbContext,
-                               const UA_NodeId *sessionId,
-                               void *sessionContext,
-                               const UA_NodeId *nodeId)
-{
-    return true;
-}
-
-static UA_Boolean
-timestampsToReturnSupported_randomindextest(UA_Server *server,
-                                            void *hdbContext,
-                                            const UA_NodeId *sessionId,
-                                            void *sessionContext,
-                                            const UA_NodeId *nodeId,
-                                            const UA_TimestampsToReturn timestampsToReturn)
-{
-    return true;
-}
-
-UA_HistoryDataBackend
-UA_HistoryDataBackend_randomindextest(UA_DateTime *data);
-
-UA_HistoryDataBackend
-UA_HistoryDataBackend_randomindextest(UA_DateTime *data)
-{
-    UA_HistoryDataBackend result;
-    memset(&result, 0, sizeof(UA_HistoryDataBackend));
-    result.serverSetHistoryData = &serverSetHistoryData_randomindextest;
-    result.resultSize = &resultSize_randomindextest;
-    result.getEnd = &getEnd_randomindextest;
-    result.lastIndex = &lastIndex_randomindextest;
-    result.firstIndex = &firstIndex_randomindextest;
-    result.getDateTimeMatch = &getDateTimeMatch_randomindextest;
-    result.copyDataValues = &copyDataValues_randomindextest;
-    result.getDataValue = &getDataValue_randomindextest;
-    result.boundSupported = &boundSupported_randomindextest;
-    result.timestampsToReturnSupported = &timestampsToReturnSupported_randomindextest;
-    result.deleteMembers = &deleteMembers_randomindextest;
-    result.getHistoryData = NULL;
-    result.context = generateTestContext_randomindextest(data);
-    return result;
-}
-
-void
-UA_HistoryDataBackend_randomindextest_deleteMembers(UA_HistoryDataBackend *backend);
-
-void
-UA_HistoryDataBackend_randomindextest_deleteMembers(UA_HistoryDataBackend *backend)
-{
-    deleteMembers_randomindextest(backend);
-}
-
-#endif // BACKEND_H
diff --git a/ext/open62541/tests/testing-plugins/testing_clock.c b/ext/open62541/tests/testing-plugins/testing_clock.c
deleted file mode 100644
index 26397f5..0000000
--- a/ext/open62541/tests/testing-plugins/testing_clock.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "testing_clock.h"
-#include <time.h>
-
-/* To avoid zero timestamp value in header, the testingClock
- * is assigned with non-zero timestamp to pass unit tests */
-UA_DateTime testingClock = 0x5C8F735D;
-
-UA_DateTime UA_DateTime_now(void) {
-    return testingClock;
-}
-
-UA_DateTime UA_DateTime_nowMonotonic(void) {
-    return testingClock;
-}
-
-UA_DateTime UA_DateTime_localTimeUtcOffset(void) {
-    return 0;
-}
-
-void
-UA_fakeSleep(UA_UInt32 duration) {
-    testingClock += duration * UA_DATETIME_MSEC;
-}
-
-/* 1 millisecond = 1,000,000 Nanoseconds */
-#define NANO_SECOND_MULTIPLIER 1000000
-
-void
-UA_realSleep(UA_UInt32 duration) {
-#ifdef _WIN32
-    Sleep(duration);
-#else
-    UA_UInt32 sec = duration / 1000;
-    UA_UInt32 ns = (duration % 1000) * NANO_SECOND_MULTIPLIER;
-    struct timespec sleepValue;
-    sleepValue.tv_sec = sec;
-    sleepValue.tv_nsec = ns;
-    nanosleep(&sleepValue, NULL);
-#endif
-}
-
-void
-UA_comboSleep(unsigned long duration) {
-    UA_fakeSleep((UA_UInt32)duration);
-    UA_realSleep((UA_UInt32)duration);
-}
diff --git a/ext/open62541/tests/testing-plugins/testing_clock.h b/ext/open62541/tests/testing-plugins/testing_clock.h
deleted file mode 100644
index e0c5424..0000000
--- a/ext/open62541/tests/testing-plugins/testing_clock.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef TESTING_CLOCK_H_
-#define TESTING_CLOCK_H_
-
-#include <open62541/types.h>
-
-/* The testing clock is used for reproducible unit tests that require precise
- * timings. It implements the following functions from ua_types.h. They return a
- * deterministic time that can be advanced manually with UA_sleep.
- *
- * UA_DateTime UA_EXPORT UA_DateTime_now(void);
- * UA_DateTime UA_EXPORT UA_DateTime_nowMonotonic(void); */
-
-/* Forwards the testing clock by the given duration in ms */
-void UA_fakeSleep(UA_UInt32 duration);
-
-/* Sleep for the duration in milliseconds. Used to wait for workers to complete. */
-void UA_realSleep(UA_UInt32 duration);
-
-#endif /* TESTING_CLOCK_H_ */
diff --git a/ext/open62541/tests/testing-plugins/testing_networklayers.c b/ext/open62541/tests/testing-plugins/testing_networklayers.c
deleted file mode 100644
index 6b6fb68..0000000
--- a/ext/open62541/tests/testing-plugins/testing_networklayers.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "testing_networklayers.h"
-
-#include <open62541/server_config_default.h>
-
-#include <assert.h>
-#include <stdlib.h>
-
-#include "testing_clock.h"
-
-static UA_ByteString *vBuffer;
-static UA_ByteString sendBuffer;
-
-UA_StatusCode UA_Client_recvTesting_result = UA_STATUSCODE_GOOD;
-
-static UA_StatusCode
-dummyGetSendBuffer(UA_Connection *connection, size_t length, UA_ByteString *buf) {
-    if(length > sendBuffer.length)
-        return UA_STATUSCODE_BADCOMMUNICATIONERROR;
-    *buf = sendBuffer;
-    buf->length = length;
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-dummyReleaseSendBuffer(UA_Connection *connection, UA_ByteString *buf) {
-}
-
-static UA_StatusCode
-dummySend(UA_Connection *connection, UA_ByteString *buf) {
-    assert(connection != NULL);
-    assert(buf != NULL);
-
-    if(vBuffer) {
-        UA_ByteString_deleteMembers(vBuffer);
-        UA_ByteString_copy(buf, vBuffer);
-    }
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-dummyReleaseRecvBuffer(UA_Connection *connection, UA_ByteString *buf) {
-}
-
-static void
-dummyClose(UA_Connection *connection) {
-    if(vBuffer)
-        UA_ByteString_deleteMembers(vBuffer);
-    UA_ByteString_deleteMembers(&sendBuffer);
-}
-
-UA_Connection createDummyConnection(size_t sendBufferSize,
-                                    UA_ByteString *verificationBuffer) {
-    vBuffer = verificationBuffer;
-    UA_ByteString_allocBuffer(&sendBuffer, sendBufferSize);
-
-    UA_Connection c;
-    c.state = UA_CONNECTION_ESTABLISHED;
-    c.config = UA_ConnectionConfig_default;
-    c.channel = NULL;
-    c.sockfd = 0;
-    c.handle = NULL;
-    c.incompleteChunk = UA_BYTESTRING_NULL;
-    c.getSendBuffer = dummyGetSendBuffer;
-    c.releaseSendBuffer = dummyReleaseSendBuffer;
-    c.send = dummySend;
-    c.recv = NULL;
-    c.releaseRecvBuffer = dummyReleaseRecvBuffer;
-    c.close = dummyClose;
-    return c;
-}
-
-UA_UInt32 UA_Client_recvSleepDuration;
-UA_StatusCode (*UA_Client_recv)(UA_Connection *connection, UA_ByteString *response,
-                                UA_UInt32 timeout);
-
-UA_StatusCode
-UA_Client_recvTesting(UA_Connection *connection, UA_ByteString *response,
-                    UA_UInt32 timeout) {
-
-    if(UA_Client_recvTesting_result != UA_STATUSCODE_GOOD) {
-        UA_StatusCode temp = UA_Client_recvTesting_result;
-        UA_Client_recvTesting_result = UA_STATUSCODE_GOOD;
-        UA_fakeSleep(timeout);
-        return temp;
-    }
-
-    UA_StatusCode res = UA_Client_recv(connection, response, timeout);
-    if(res == UA_STATUSCODE_GOODNONCRITICALTIMEOUT)
-        UA_fakeSleep(timeout);
-    else
-        UA_fakeSleep(UA_Client_recvSleepDuration);
-    UA_Client_recvSleepDuration = 0;
-    return res;
-}
diff --git a/ext/open62541/tests/testing-plugins/testing_networklayers.h b/ext/open62541/tests/testing-plugins/testing_networklayers.h
deleted file mode 100644
index 8746550..0000000
--- a/ext/open62541/tests/testing-plugins/testing_networklayers.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef TESTING_NETWORKLAYERS_H_
-#define TESTING_NETWORKLAYERS_H_
-
-#include <open62541/server_config.h>
-
-_UA_BEGIN_DECLS
-
-/**
- * Create the TCP networklayer and listen to the specified port
- *
- * @param sendBufferSize The send buffer is reused. This is the max chunk size
- * @param verificationBuffer the send function will copy the data that is sent
- *        to this buffer, so that it is possible to check what the send function
- *        received. */
-UA_Connection createDummyConnection(size_t sendBufferSize,
-                                    UA_ByteString *verificationBuffer);
-
-extern UA_UInt32 UA_Client_recvSleepDuration;
-extern UA_StatusCode (*UA_Client_recv)(UA_Connection *connection, UA_ByteString *response,
-                                       UA_UInt32 timeout);
-
-extern UA_StatusCode UA_Client_recvTesting_result;
-
-/* Override the client recv method to increase the simulated clock after the first recv.
- * UA_Client_recvSleepDuration is set to zero after the first recv.
- * UA_Client_recvTesting_result can be used to simulate an error */
-UA_StatusCode
-UA_Client_recvTesting(UA_Connection *connection, UA_ByteString *response,
-                    UA_UInt32 timeout);
-
-_UA_END_DECLS
-
-#endif /* TESTING_NETWORKLAYERS_H_ */
diff --git a/ext/open62541/tests/testing-plugins/testing_policy.c b/ext/open62541/tests/testing-plugins/testing_policy.c
deleted file mode 100644
index e12e8b0..0000000
--- a/ext/open62541/tests/testing-plugins/testing_policy.c
+++ /dev/null
@@ -1,445 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef __clang_analyzer__
-
-#include "testing_policy.h"
-
-#include <open62541/plugin/log_stdout.h>
-
-#include <check.h>
-
-#define SET_CALLED(func) funcsCalled->func = true
-
-static funcs_called *funcsCalled;
-static const key_sizes *keySizes;
-
-static UA_StatusCode
-verify_testing(const UA_SecurityPolicy *securityPolicy,
-               void *channelContext,
-               const UA_ByteString *message,
-               const UA_ByteString *signature) {
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-asym_sign_testing(const UA_SecurityPolicy *securityPolicy,
-                  void *channelContext,
-                  const UA_ByteString *message,
-                  UA_ByteString *signature) {
-    SET_CALLED(asym_sign);
-    ck_assert(securityPolicy != NULL);
-    ck_assert(channelContext != NULL);
-    ck_assert(message != NULL);
-    ck_assert(signature != NULL);
-
-    ck_assert_msg(signature->length == keySizes->asym_lcl_sig_size,
-                  "Expected signature length to be %i but was %i",
-                  keySizes->asym_lcl_sig_size,
-                  signature->length);
-
-    memset(signature->data, '*', signature->length);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-sym_sign_testing(const UA_SecurityPolicy *securityPolicy,
-                 void *channelContext,
-                 const UA_ByteString *message,
-                 UA_ByteString *signature) {
-    SET_CALLED(sym_sign);
-    ck_assert(securityPolicy != NULL);
-    ck_assert(channelContext != NULL);
-    ck_assert(message != NULL);
-    ck_assert(signature != NULL);
-    ck_assert(signature->length != 0);
-    ck_assert(signature->data != NULL);
-
-    memset(signature->data, 'S', signature->length);
-    return UA_STATUSCODE_GOOD;
-}
-
-static size_t
-asym_getLocalSignatureSize_testing(const UA_SecurityPolicy *securityPolicy,
-                                   const void *channelContext) {
-    ck_assert(securityPolicy != NULL);
-    ck_assert(channelContext != NULL);
-
-    return keySizes->asym_lcl_sig_size;
-}
-
-static size_t
-asym_getRemoteSignatureSize_testing(const UA_SecurityPolicy *securityPolicy,
-                                    const void *channelContext) {
-    ck_assert(securityPolicy != NULL);
-    ck_assert(channelContext != NULL);
-
-    return keySizes->asym_rmt_sig_size;
-}
-
-static size_t
-asym_getLocalEncryptionKeyLength_testing(const UA_SecurityPolicy *securityPolicy,
-                                         const void *channelContext) {
-    ck_assert(securityPolicy != NULL);
-    ck_assert(channelContext != NULL);
-    return keySizes->asym_lcl_enc_key_size;
-}
-
-static size_t
-asym_getRemoteEncryptionKeyLength_testing(const UA_SecurityPolicy *securityPolicy,
-                                          const void *channelContext) {
-    ck_assert(securityPolicy != NULL);
-    ck_assert(channelContext != NULL);
-    return keySizes->asym_rmt_enc_key_size;
-}
-
-static size_t
-sym_getLocalSignatureSize_testing(const UA_SecurityPolicy *securityPolicy,
-                                  const void *channelContext) {
-    ck_assert(securityPolicy != NULL);
-    ck_assert(channelContext != NULL);
-    return keySizes->sym_sig_size;
-}
-
-static size_t
-sym_getRemoteSignatureSize_testing(const UA_SecurityPolicy *securityPolicy,
-                                   const void *channelContext) {
-    ck_assert(securityPolicy != NULL);
-    ck_assert(channelContext != NULL);
-    return keySizes->sym_sig_size;
-}
-
-static size_t
-sym_getLocalSigningKeyLength_testing(const UA_SecurityPolicy *securityPolicy,
-                                     const void *channelContext) {
-    ck_assert(securityPolicy != NULL);
-    ck_assert(channelContext != NULL);
-    return keySizes->sym_sig_keyLen;
-}
-
-static size_t
-sym_getRemoteSigningKeyLength_testing(const UA_SecurityPolicy *securityPolicy,
-                                      const void *channelContext) {
-    ck_assert(securityPolicy != NULL);
-    ck_assert(channelContext != NULL);
-    return keySizes->sym_sig_keyLen; // TODO: Remote sig key len
-}
-
-static size_t
-sym_getLocalEncryptionKeyLength_testing(const UA_SecurityPolicy *securityPolicy,
-                                        const void *channelContext) {
-    ck_assert(securityPolicy != NULL);
-    ck_assert(channelContext != NULL);
-    return keySizes->sym_enc_keyLen;
-}
-
-static size_t
-sym_getRemoteEncryptionKeyLength_testing(const UA_SecurityPolicy *securityPolicy,
-                                         const void *channelContext) {
-    ck_assert(securityPolicy != NULL);
-    ck_assert(channelContext != NULL);
-    return keySizes->sym_enc_keyLen;
-}
-
-static size_t
-sym_getLocalEncryptionBlockSize_testing(const UA_SecurityPolicy *securityPolicy,
-                                        const void *channelContext) {
-    ck_assert(securityPolicy != NULL);
-    ck_assert(channelContext != NULL);
-    return keySizes->sym_enc_blockSize;
-}
-
-static size_t
-sym_getRemoteEncryptionBlockSize_testing(const UA_SecurityPolicy *securityPolicy,
-                                         const void *channelContext) {
-    ck_assert(securityPolicy != NULL);
-    ck_assert(channelContext != NULL);
-    return keySizes->sym_enc_blockSize; // TODO: Different size for remote
-}
-
-static UA_StatusCode
-sym_encrypt_testing(const UA_SecurityPolicy *securityPolicy,
-                    void *channelContext,
-                    UA_ByteString *data) {
-    SET_CALLED(sym_enc);
-    ck_assert(securityPolicy != NULL);
-    ck_assert(channelContext != NULL);
-    ck_assert(data != NULL);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-asym_encrypt_testing(const UA_SecurityPolicy *securityPolicy,
-                     void *channelContext,
-                     UA_ByteString *data) {
-    SET_CALLED(asym_enc);
-    ck_assert(securityPolicy != NULL);
-    ck_assert(channelContext != NULL);
-    ck_assert(data != NULL);
-
-    size_t blockSize =
-        securityPolicy->asymmetricModule.cryptoModule.encryptionAlgorithm.getRemotePlainTextBlockSize(securityPolicy,
-                                                                                                      channelContext);
-    ck_assert_msg(data->length % blockSize == 0,
-                  "Expected the length of the data to be encrypted to be a multiple of the plaintext block size (%i). "
-                      "Remainder was %i",
-                  blockSize,
-                  data->length % blockSize);
-
-    for(size_t i = 0; i < data->length; ++i) {
-        data->data[i] = (UA_Byte)((data->data[i] + 1) % (UA_BYTE_MAX + 1));
-    }
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-decrypt_testing(const UA_SecurityPolicy *securityPolicy,
-                void *channelContext,
-                UA_ByteString *data) {
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-makeThumbprint_testing(const UA_SecurityPolicy *securityPolicy,
-                       const UA_ByteString *certificate,
-                       UA_ByteString *thumbprint) {
-    SET_CALLED(makeCertificateThumbprint);
-
-    ck_assert(securityPolicy != NULL);
-    ck_assert(certificate != NULL);
-    ck_assert(thumbprint != NULL);
-
-    ck_assert_msg(thumbprint->length == 20, "Thumbprints have to be 20 bytes long (current specification)");
-    memset(thumbprint->data, 42, 20);
-
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-compareThumbprint_testing(const UA_SecurityPolicy *securityPolicy,
-                          const UA_ByteString *certificateThumbprint) {
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-generateKey_testing(const UA_SecurityPolicy *securityPolicy,
-                    const UA_ByteString *secret,
-                    const UA_ByteString *seed,
-                    UA_ByteString *out) {
-    ck_assert(securityPolicy != NULL);
-    ck_assert(secret != NULL);
-    ck_assert(seed != NULL);
-    ck_assert(out != NULL);
-    SET_CALLED(generateKey);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-generateNonce_testing(const UA_SecurityPolicy *securityPolicy,
-                      UA_ByteString *out) {
-    ck_assert(securityPolicy != NULL);
-    ck_assert(out != NULL);
-
-    memset(out->data, 'N', out->length);
-
-    SET_CALLED(generateNonce);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-newContext_testing(const UA_SecurityPolicy *securityPolicy,
-                   const UA_ByteString *remoteCertificate,
-                   void **channelContext) {
-    SET_CALLED(newContext);
-    ck_assert(securityPolicy != NULL);
-    ck_assert(remoteCertificate != NULL);
-    ck_assert(channelContext != NULL);
-
-    ck_assert(funcsCalled != NULL);
-    *channelContext = (void *)funcsCalled;
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-deleteContext_testing(void *channelContext) {
-    SET_CALLED(deleteContext);
-    ck_assert(channelContext != NULL);
-}
-
-static UA_StatusCode
-setLocalSymEncryptingKey_testing(void *channelContext,
-                                 const UA_ByteString *val) {
-    SET_CALLED(setLocalSymEncryptingKey);
-    ck_assert(channelContext != NULL);
-    ck_assert(val != NULL);
-    ck_assert(val->data != NULL);
-    ck_assert_msg(val->length == keySizes->sym_enc_keyLen,
-                  "Expected length to be %i but got %i",
-                  keySizes->sym_enc_keyLen,
-                  val->length);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-setLocalSymSigningKey_testing(void *channelContext,
-                              const UA_ByteString *val) {
-    SET_CALLED(setLocalSymSigningKey);
-    ck_assert(channelContext != NULL);
-    ck_assert(val != NULL);
-    ck_assert(val->data != NULL);
-    ck_assert_msg(val->length == keySizes->sym_sig_keyLen,
-                  "Expected length to be %i but got %i",
-                  keySizes->sym_sig_keyLen,
-                  val->length);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-setLocalSymIv_testing(void *channelContext,
-                      const UA_ByteString *val) {
-    SET_CALLED(setLocalSymIv);
-    ck_assert(channelContext != NULL);
-    ck_assert(val != NULL);
-    ck_assert(val->data != NULL);
-    ck_assert_msg(val->length == keySizes->sym_enc_blockSize,
-                  "Expected length to be %i but got %i",
-                  keySizes->sym_enc_blockSize,
-                  val->length);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-setRemoteSymEncryptingKey_testing(void *channelContext,
-                                  const UA_ByteString *val) {
-    SET_CALLED(setRemoteSymEncryptingKey);
-    ck_assert(channelContext != NULL);
-    ck_assert(val != NULL);
-    ck_assert(val->data != NULL);
-    ck_assert_msg(val->length == keySizes->sym_enc_keyLen,
-                  "Expected length to be %i but got %i",
-                  keySizes->sym_enc_keyLen,
-                  val->length);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-setRemoteSymSigningKey_testing(void *channelContext,
-                               const UA_ByteString *val) {
-    SET_CALLED(setRemoteSymSigningKey);
-    ck_assert(channelContext != NULL);
-    ck_assert(val != NULL);
-    ck_assert(val->data != NULL);
-    ck_assert_msg(val->length == keySizes->sym_sig_keyLen,
-                  "Expected length to be %i but got %i",
-                  keySizes->sym_sig_keyLen,
-                  val->length);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-setRemoteSymIv_testing(void *channelContext,
-                       const UA_ByteString *val) {
-    SET_CALLED(setRemoteSymIv);
-    ck_assert(channelContext != NULL);
-    ck_assert(val != NULL);
-    ck_assert(val->data != NULL);
-    ck_assert_msg(val->length == keySizes->sym_enc_blockSize,
-                  "Expected length to be %i but got %i",
-                  keySizes->sym_enc_blockSize,
-                  val->length);
-    return UA_STATUSCODE_GOOD;
-}
-
-static size_t
-asym_getRemotePlainTextBlockSize_testing(const UA_SecurityPolicy *securityPolicy,
-                                         const void *channelContext) {
-    return keySizes->asym_rmt_ptext_blocksize;
-}
-
-static size_t
-asym_getRemoteBlockSize_testing(const UA_SecurityPolicy *securityPolicy,
-                                const void *channelContext) {
-    return keySizes->asym_rmt_blocksize;
-}
-
-static UA_StatusCode
-compareCertificate_testing(const void *channelContext,
-                           const UA_ByteString *certificate) {
-    return UA_STATUSCODE_GOOD;
-}
-
-static void
-policy_deletemembers_testing(UA_SecurityPolicy *policy) {
-    UA_ByteString_deleteMembers(&policy->localCertificate);
-}
-
-UA_StatusCode
-TestingPolicy(UA_SecurityPolicy *policy, UA_ByteString localCertificate,
-              funcs_called *fCalled, const key_sizes *kSizes) {
-    keySizes = kSizes;
-    funcsCalled = fCalled;
-    policy->policyContext = (void *)funcsCalled;
-    policy->policyUri = UA_STRING("http://opcfoundation.org/UA/SecurityPolicy#Testing");
-    policy->logger = UA_Log_Stdout;
-    policy->certificateVerification = NULL;
-    UA_ByteString_copy(&localCertificate, &policy->localCertificate);
-
-    policy->asymmetricModule.makeCertificateThumbprint = makeThumbprint_testing;
-    policy->asymmetricModule.compareCertificateThumbprint = compareThumbprint_testing;
-
-    UA_SecurityPolicySignatureAlgorithm *asym_signatureAlgorithm =
-        &policy->asymmetricModule.cryptoModule.signatureAlgorithm;
-    asym_signatureAlgorithm->uri = UA_STRING_NULL;
-    asym_signatureAlgorithm->verify = verify_testing;
-    asym_signatureAlgorithm->sign = asym_sign_testing;
-    asym_signatureAlgorithm->getLocalSignatureSize = asym_getLocalSignatureSize_testing;
-    asym_signatureAlgorithm->getRemoteSignatureSize = asym_getRemoteSignatureSize_testing;
-
-    UA_SecurityPolicyEncryptionAlgorithm *asym_encryptionAlgorithm =
-        &policy->asymmetricModule.cryptoModule.encryptionAlgorithm;
-    asym_encryptionAlgorithm->encrypt = asym_encrypt_testing;
-    asym_encryptionAlgorithm->decrypt = decrypt_testing;
-    asym_encryptionAlgorithm->getLocalKeyLength = asym_getLocalEncryptionKeyLength_testing;
-    asym_encryptionAlgorithm->getRemoteKeyLength = asym_getRemoteEncryptionKeyLength_testing;
-    asym_encryptionAlgorithm->getRemotePlainTextBlockSize = asym_getRemotePlainTextBlockSize_testing;
-    asym_encryptionAlgorithm->getRemoteBlockSize = asym_getRemoteBlockSize_testing;
-
-    policy->symmetricModule.generateKey = generateKey_testing;
-    policy->symmetricModule.generateNonce = generateNonce_testing;
-
-    UA_SecurityPolicySignatureAlgorithm *sym_signatureAlgorithm =
-        &policy->symmetricModule.cryptoModule.signatureAlgorithm;
-    sym_signatureAlgorithm->uri = UA_STRING_NULL;
-    sym_signatureAlgorithm->verify = verify_testing;
-    sym_signatureAlgorithm->sign = sym_sign_testing;
-    sym_signatureAlgorithm->getLocalSignatureSize = sym_getLocalSignatureSize_testing;
-    sym_signatureAlgorithm->getRemoteSignatureSize = sym_getRemoteSignatureSize_testing;
-    sym_signatureAlgorithm->getLocalKeyLength = sym_getLocalSigningKeyLength_testing;
-    sym_signatureAlgorithm->getRemoteKeyLength = sym_getRemoteSigningKeyLength_testing;
-
-    UA_SecurityPolicyEncryptionAlgorithm *sym_encryptionAlgorithm =
-        &policy->symmetricModule.cryptoModule.encryptionAlgorithm;
-    sym_encryptionAlgorithm->encrypt = sym_encrypt_testing;
-    sym_encryptionAlgorithm->decrypt = decrypt_testing;
-    sym_encryptionAlgorithm->getLocalKeyLength = sym_getLocalEncryptionKeyLength_testing;
-    sym_encryptionAlgorithm->getRemoteKeyLength = sym_getRemoteEncryptionKeyLength_testing;
-    sym_encryptionAlgorithm->getLocalBlockSize = sym_getLocalEncryptionBlockSize_testing;
-    sym_encryptionAlgorithm->getRemoteBlockSize = sym_getRemoteEncryptionBlockSize_testing;
-
-    policy->channelModule.newContext = newContext_testing;
-    policy->channelModule.deleteContext = deleteContext_testing;
-    policy->channelModule.setLocalSymEncryptingKey = setLocalSymEncryptingKey_testing;
-    policy->channelModule.setLocalSymSigningKey = setLocalSymSigningKey_testing;
-    policy->channelModule.setLocalSymIv = setLocalSymIv_testing;
-    policy->channelModule.setRemoteSymEncryptingKey = setRemoteSymEncryptingKey_testing;
-    policy->channelModule.setRemoteSymSigningKey = setRemoteSymSigningKey_testing;
-    policy->channelModule.setRemoteSymIv = setRemoteSymIv_testing;
-    policy->channelModule.compareCertificate = compareCertificate_testing;
-    policy->deleteMembers = policy_deletemembers_testing;
-
-    return UA_STATUSCODE_GOOD;
-}
-
-#endif
diff --git a/ext/open62541/tests/testing-plugins/testing_policy.h b/ext/open62541/tests/testing-plugins/testing_policy.h
deleted file mode 100644
index 31ff8bf..0000000
--- a/ext/open62541/tests/testing-plugins/testing_policy.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef OPEN62541_TESTING_POLICY_H
-#define OPEN62541_TESTING_POLICY_H
-
-#include <open62541/plugin/log.h>
-#include <open62541/plugin/securitypolicy.h>
-
-_UA_BEGIN_DECLS
-
-typedef struct funcs_called {
-    UA_Boolean asym_enc;
-    UA_Boolean asym_dec;
-
-    UA_Boolean sym_enc;
-    UA_Boolean sym_dec;
-
-    UA_Boolean asym_sign;
-    UA_Boolean asym_verify;
-
-    UA_Boolean sym_sign;
-    UA_Boolean sym_verify;
-
-    UA_Boolean newContext;
-    UA_Boolean deleteContext;
-
-    UA_Boolean makeCertificateThumbprint;
-    UA_Boolean generateKey;
-    UA_Boolean generateNonce;
-
-    UA_Boolean setLocalSymEncryptingKey;
-    UA_Boolean setLocalSymSigningKey;
-    UA_Boolean setLocalSymIv;
-    UA_Boolean setRemoteSymEncryptingKey;
-    UA_Boolean setRemoteSymSigningKey;
-    UA_Boolean setRemoteSymIv;
-} funcs_called;
-
-typedef struct key_sizes {
-    size_t sym_enc_blockSize;
-    size_t sym_sig_keyLen;
-    size_t sym_sig_size;
-    size_t sym_enc_keyLen;
-
-    size_t asym_rmt_sig_size;
-    size_t asym_lcl_sig_size;
-    size_t asym_rmt_ptext_blocksize;
-    size_t asym_rmt_blocksize;
-    size_t asym_rmt_enc_key_size;
-    size_t asym_lcl_enc_key_size;
-} key_sizes;
-
-UA_StatusCode UA_EXPORT
-TestingPolicy(UA_SecurityPolicy *policy, UA_ByteString localCertificate,
-              funcs_called *fCalled, const key_sizes *kSizes);
-
-_UA_END_DECLS
-
-#endif //OPEN62541_TESTING_POLICY_H
diff --git a/ext/open62541/tests/testing-plugins/thread_wrapper.h b/ext/open62541/tests/testing-plugins/thread_wrapper.h
deleted file mode 100644
index 99d8d57..0000000
--- a/ext/open62541/tests/testing-plugins/thread_wrapper.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* Simple wrapper for unit test threads */
-
-/* Threads */
-
-#ifndef WIN32
-#include <pthread.h>
-#define THREAD_HANDLE pthread_t
-#define THREAD_CREATE(handle, callback) pthread_create(&handle, NULL, callback, NULL)
-#define THREAD_JOIN(handle) pthread_join(handle, NULL)
-#define THREAD_CALLBACK(name) static void * name(void *_)
-
-#else
-
-#include <windows.h>
-#define THREAD_HANDLE HANDLE
-#define THREAD_CREATE(handle, callback) { handle = CreateThread( NULL, 0, callback, NULL, 0, NULL); }
-#define THREAD_JOIN(handle) WaitForSingleObject(handle, INFINITE)
-
-
-#define THREAD_CALLBACK(name) static DWORD WINAPI name( LPVOID lpParam )
-
-#endif
-
-/* Mutex */
-
-/* Windows returns non-zero on success and pthread returns zero,
- * so compare to zero to achieve consistent return values */
-
-#ifndef WIN32
-#define MUTEX_HANDLE pthread_mutex_t
-
-/* Will return UA_TRUE when zero */
-#define MUTEX_INIT(name) (pthread_mutex_init(&(name), NULL) == 0)
-#define MUTEX_LOCK(name) (pthread_mutex_lock(&(name)) == 0)
-#define MUTEX_UNLOCK(name) (pthread_mutex_unlock(&(name)) == 0)
-#define MUTEX_DESTROY(name) (pthread_mutex_destroy(&(name)) == 0)
-
-#else
-
-#define MUTEX_HANDLE HANDLE
-
-/* Will return UA_FALSE when zero */
-#define MUTEX_INIT(name) (CreateMutex(NULL, FALSE, NULL) != 0)
-#define MUTEX_LOCK(name) (WaitForSingleObject((name), INFINITE) != 0)
-#define MUTEX_UNLOCK(name) (ReleaseMutex((name)) != 0)
-#define MUTEX_DESTROY(name) (CloseHandle((name)) != 0)
-#endif
diff --git a/ext/open62541/tools/amalgamate.py b/ext/open62541/tools/amalgamate.py
deleted file mode 100644
index 1c91388..0000000
--- a/ext/open62541/tools/amalgamate.py
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/usr/bin/env python
-
-# coding: UTF-8
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this 
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-from __future__ import print_function
-import argparse
-import os.path
-import re
-import io
-
-parser = argparse.ArgumentParser()
-parser.add_argument('version', help='file version')
-parser.add_argument('outfile', help='outfile with extension .c/.h')
-parser.add_argument('inputs', nargs='*', action='store', help='input filenames')
-args = parser.parse_args()
-
-outname = args.outfile.split("/")[-1]
-is_c = False
-if outname[-2:] == ".c":
-    is_c = True
-pos = outname.find(".")
-if pos > 0:
-    outname = outname[:pos]
-include_re = re.compile("^#[\s]*include (\".*\").*$|^#[\s]*include (<open62541/.*>).*$")
-guard_re = re.compile("^#(?:(?:ifndef|define)\s*[A-Z_]+_H_|endif /\* [A-Z_]+_H_ \*/|endif // [A-Z_]+_H_|endif\s*/\*\s*!?[A-Z_]+_H[_]+\s*\*/)")
-
-print ("Starting amalgamating file "+ args.outfile)
-
-file = io.open(args.outfile, 'wt', encoding='utf8', errors='replace')
-file.write(u"""/* THIS IS A SINGLE-FILE DISTRIBUTION CONCATENATED FROM THE OPEN62541 SOURCES
- * visit http://open62541.org/ for information about this software
- * Git-Revision: %s
- */
-
-/*
- * Copyright (C) 2014-2018 the contributors as stated in the AUTHORS file
- *
- * This file is part of open62541. open62541 is free software: you can
- * redistribute it and/or modify it under the terms of the Mozilla Public
- * License v2.0 as stated in the LICENSE file provided with open62541.
- *
- * open62541 is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.
- */\n\n""" % args.version)
-
-if is_c:
-    file.write(u'''#ifndef UA_DYNAMIC_LINKING_EXPORT
-# define UA_DYNAMIC_LINKING_EXPORT
-# define MDNSD_DYNAMIC_LINKING
-#endif
-
-/* Disable security warnings for BSD sockets on MSVC */
-#ifdef _MSC_VER
-# define _CRT_SECURE_NO_WARNINGS
-#endif
-
-#include "%s.h"
-''' % outname)
-else:
-    file.write(u'''#ifndef %s
-#define %s
-''' % (outname.upper() + u"_H_", outname.upper() + u"_H_"))
-
-for fname in args.inputs:
-    with io.open(fname, encoding='utf8', errors='replace') as infile:
-        file.write(u"\n/*********************************** amalgamated original file \"" + fname + u"\" ***********************************/\n\n")
-        print ("Integrating file '" + fname + "'...", end=""),
-        for line in infile:
-            inc_res = include_re.match(line)
-            guard_res = guard_re.match(line)
-            if not inc_res and not guard_res:
-                file.write(line)
-        # Ensure file is written to disk.
-        file.flush()
-        os.fsync(file.fileno())
-        print ("done."),
-
-if not is_c:
-    file.write(u"#endif /* %s */\n" % (outname.upper() + u"_H_"))
-
-# Ensure file is written to disk.
-# See https://stackoverflow.com/questions/13761961/large-file-not-flushed-to-disk-immediately-after-calling-close
-file.flush()
-os.fsync(file.fileno())
-file.close()
-
-print ("The size of "+args.outfile+" is "+ str(os.path.getsize(args.outfile))+" Bytes.")
diff --git a/ext/open62541/tools/appveyor/build.ps1 b/ext/open62541/tools/appveyor/build.ps1
deleted file mode 100644
index 0ef4a2e..0000000
--- a/ext/open62541/tools/appveyor/build.ps1
+++ /dev/null
@@ -1,130 +0,0 @@
-
-try {
-    cd $env:APPVEYOR_BUILD_FOLDER
-
-    $vcpkg_toolchain = ""
-    $vcpkg_triplet = ""
-
-    if ($env:CC_SHORTNAME -eq "vs2008" -or $env:CC_SHORTNAME -eq "vs2013") {
-        # on VS2008 mbedtls can not be built since it includes stdint.h which is not available there
-        $build_encryption = "OFF"
-        Write-Host -ForegroundColor Green "`n## Building without encryption on VS2008 or VS2013 #####`n"
-    } else {
-        $build_encryption = "ON"
-    }
-
-    $vcpkg_toolchain = '-DCMAKE_TOOLCHAIN_FILE="C:/Tools/vcpkg/scripts/buildsystems/vcpkg.cmake"'
-    $vcpkg_triplet = '-DVCPKG_TARGET_TRIPLET="x86-windows-static"'
-    # since https://github.com/Microsoft/vcpkg/commit/0334365f516c5f229ff4fcf038c7d0190979a38a#diff-464a170117fa96bf98b2f8d224bf503c
-    # vcpkg need to have  "C:\Tools\vcpkg\installed\x86-windows-static"
-    New-Item -Force -ItemType directory -Path "C:\Tools\vcpkg\installed\x86-windows-static"
-
-    $cmake_cnf="$vcpkg_toolchain", "$vcpkg_triplet", "-G`"$env:GENERATOR`"", "-DUA_COMPILE_AS_CXX:BOOL=$env:FORCE_CXX"
-
-    # Collect files for .zip packing
-    New-Item -ItemType directory -Path pack
-    Copy-Item LICENSE pack
-    Copy-Item AUTHORS pack
-    Copy-Item README.md pack
-
-    Write-Host -ForegroundColor Green "`n###################################################################"
-    Write-Host -ForegroundColor Green "`n##### Testing $env:CC_NAME with amalgamation #####`n"
-    New-Item -ItemType directory -Path "build"
-    cd build
-    & cmake $cmake_cnf `
-            -DCMAKE_BUILD_TYPE=RelWithDebInfo `
-            -DUA_BUILD_EXAMPLES:BOOL=OFF  `
-            -DUA_ENABLE_AMALGAMATION:BOOL=ON `
-            -DUA_ENABLE_ENCRYPTION:BOOL=$build_encryption ..
-    & cmake --build . --config RelWithDebInfo
-    if ($LASTEXITCODE -and $LASTEXITCODE -ne 0) {
-        Write-Host -ForegroundColor Red "`n`n*** Make failed. Exiting ... ***"
-        exit $LASTEXITCODE
-    }
-    cd ..
-    Remove-Item -Path build -Recurse -Force
-
-    Write-Host -ForegroundColor Green "`n###################################################################"
-    Write-Host -ForegroundColor Green "`n##### Testing $env:CC_NAME with full NS0 #####`n"
-    New-Item -ItemType directory -Path "build"
-    cd build
-    & cmake $cmake_cnf `
-            -DCMAKE_BUILD_TYPE=RelWithDebInfo `
-            -DUA_BUILD_EXAMPLES:BOOL=ON `
-            -DUA_ENABLE_DA:BOOL=ON `
-            -DUA_ENABLE_JSON_ENCODING:BOOL=ON `
-            -DUA_ENABLE_PUBSUB:BOOL=ON `
-            -DUA_ENABLE_PUBSUB_DELTAFRAMES:BOOL=ON `
-            -DUA_ENABLE_PUBSUB_INFORMATIONMODEL:BOOL=ON `
-            -DUA_ENABLE_SUBSCRIPTIONS_EVENTS:BOOL=ON `
-            -DUA_NAMESPACE_ZERO:STRING=FULL ..
-    & cmake --build . --config RelWithDebInfo
-    if ($LASTEXITCODE -and $LASTEXITCODE -ne 0) {
-        Write-Host -ForegroundColor Red "`n`n*** Make failed. Exiting ... ***"
-        exit $LASTEXITCODE
-    }
-    cd ..
-    Remove-Item -Path build -Recurse -Force
-
-    Write-Host -ForegroundColor Green "`n###################################################################"
-    Write-Host -ForegroundColor Green "`n##### Testing $env:CC_NAME without amalgamation #####`n"
-    New-Item -ItemType directory -Path "build"
-    cd build
-    & cmake $cmake_cnf `
-            -DBUILD_SHARED_LIBS:BOOL=OFF `
-            -DCMAKE_BUILD_TYPE=RelWithDebInfo `
-            -DCMAKE_INSTALL_PREFIX="$env:APPVEYOR_BUILD_FOLDER-$env:CC_SHORTNAME-static" `
-            -DUA_BUILD_EXAMPLES:BOOL=ON `
-            -DUA_ENABLE_AMALGAMATION:BOOL=OFF ..
-    & cmake --build . --target install --config RelWithDebInfo
-    if ($LASTEXITCODE -and $LASTEXITCODE -ne 0)
-    {
-        Write-Host -ForegroundColor Red "`n`n*** Make install failed. Exiting ... ***"
-        exit $LASTEXITCODE
-    }
-    cd ..
-    & 7z a -tzip open62541-$env:CC_SHORTNAME-static.zip "$env:APPVEYOR_BUILD_FOLDER\pack\*" "$env:APPVEYOR_BUILD_FOLDER-$env:CC_SHORTNAME-static\*"
-    if ($LASTEXITCODE -and $LASTEXITCODE -ne 0)
-    {
-        Write-Host -ForegroundColor Red "`n`n*** Zipping failed. Exiting ... ***"
-        exit $LASTEXITCODE
-    }
-    Remove-Item -Path build -Recurse -Force
-
-    Write-Host -ForegroundColor Green "`n###################################################################"
-    Write-Host -ForegroundColor Green "`n##### Testing $env:CC_NAME (.dll) #####`n"
-    New-Item -ItemType directory -Path "build"
-    cd build
-    & cmake $cmake_cnf `
-            -DBUILD_SHARED_LIBS:BOOL=ON `
-            -DCMAKE_BUILD_TYPE=RelWithDebInfo `
-            -DCMAKE_INSTALL_PREFIX="$env:APPVEYOR_BUILD_FOLDER-$env:CC_SHORTNAME-dynamic" `
-            -DUA_BUILD_EXAMPLES:BOOL=ON `
-            -DUA_ENABLE_AMALGAMATION:BOOL=OFF ..
-    & cmake --build . --target install --config RelWithDebInfo
-    if ($LASTEXITCODE -and $LASTEXITCODE -ne 0)
-    {
-        Write-Host -ForegroundColor Red "`n`n*** Make install failed. Exiting ... ***"
-        exit $LASTEXITCODE
-    }
-    cd ..
-    & 7z a -tzip open62541-$env:CC_SHORTNAME-dynamic.zip "$env:APPVEYOR_BUILD_FOLDER\pack\*" "$env:APPVEYOR_BUILD_FOLDER-$env:CC_SHORTNAME-static\*"
-    if ($LASTEXITCODE -and $LASTEXITCODE -ne 0)
-    {
-        Write-Host -ForegroundColor Red "`n`n*** Zipping failed. Exiting ... ***"
-        exit $LASTEXITCODE
-    }
-    Remove-Item -Path build -Recurse -Force
-
-    # # do not cache log
-    # Remove-Item -Path c:\miktex\texmfs\data\miktex\log -Recurse -Force
-
-} catch {
-    # Print a detailed error message
-    $FullException = ($_.Exception|format-list -force) | Out-String
-    Write-Host -ForegroundColor Red "`n------------------ Exception ------------------`n$FullException`n"
-    [Console]::Out.Flush()
-    # Wait a bit to make sure appveyor shows the error message
-    Start-Sleep 10
-    throw
-}
diff --git a/ext/open62541/tools/appveyor/install.ps1 b/ext/open62541/tools/appveyor/install.ps1
deleted file mode 100644
index 4c5e1b0..0000000
--- a/ext/open62541/tools/appveyor/install.ps1
+++ /dev/null
@@ -1,23 +0,0 @@
-$ErrorActionPreference = "Stop"
-
-try {
-    & git submodule sync
-    & git submodule --quiet update --init --recursive
-
-    Write-Host -ForegroundColor Green "`n### Installing sphinx ###`n"
-    & cinst sphinx --source python
-
-    if ($LASTEXITCODE -and $LASTEXITCODE -ne 0) {
-        Write-Host -ForegroundColor Red "`n`n*** Installing dependencies failed. Exiting ... ***"
-        exit $LASTEXITCODE
-    }
-
-} catch {
-    # Print a detailed error message
-    $FullException = ($_.Exception|format-list -force) | Out-String
-    Write-Host -ForegroundColor Red "`n------------------ Exception ------------------`n$FullException`n"
-    [Console]::Out.Flush()
-    # Wait a bit to make sure appveyor shows the error message
-    Start-Sleep 10
-    throw
-}
diff --git a/ext/open62541/tools/azure-devops/build.ps1 b/ext/open62541/tools/azure-devops/build.ps1
deleted file mode 100644
index 18892c5..0000000
--- a/ext/open62541/tools/azure-devops/build.ps1
+++ /dev/null
@@ -1,183 +0,0 @@
-
-try {
-
-
-    Write-Host -ForegroundColor Green "`n## Build Path $env:Build_Repository_LocalPath #####`n"
-
-    $vcpkg_toolchain = ""
-    $vcpkg_triplet = ""
-
-    if ($env:CC_SHORTNAME -eq "vs2008" -or $env:CC_SHORTNAME -eq "vs2013") {
-        # on VS2008 mbedtls can not be built since it includes stdint.h which is not available there
-        $build_encryption = "OFF"
-        Write-Host -ForegroundColor Green "`n## Building without encryption on VS2008 or VS2013 #####`n"
-    } else {
-        $build_encryption = "ON"
-    }
-
-    if ($env:CC_SHORTNAME -eq "mingw" -or $env:CC_SHORTNAME -eq "clang-mingw") {
-        # Workaround for CMake not wanting sh.exe on PATH for MinGW (necessary for CMake 3.12.2)
-        $env:PATH = ($env:PATH.Split(';') | Where-Object { $_ -ne 'C:\Program Files\Git\bin' }) -join ';'
-        $env:PATH = ($env:PATH.Split(';') | Where-Object { $_ -ne 'C:\Program Files\Git\usr\bin' }) -join ';'
-        # Add mingw to path so that CMake finds e.g. clang
-        $env:PATH = "$env:MSYS2_ROOT\mingw64\bin;$env:PATH"
-        [System.Environment]::SetEnvironmentVariable('Path', $path, 'Machine')
-    }
-
-    if ($env:CC_SHORTNAME -eq "mingw") {
-
-    } elseif ($env:CC_SHORTNAME -eq "clang-mingw") {
-        # Setup clang
-        $env:CC = "clang --target=x86_64-w64-mingw32"
-        $env:CXX = "clang++ --target=x86_64-w64-mingw32"
-        clang --version
-    } else {
-        $vcpkg_toolchain = '-DCMAKE_TOOLCHAIN_FILE="C:/vcpkg/scripts/buildsystems/vcpkg.cmake"'
-        $vcpkg_triplet = '-DVCPKG_TARGET_TRIPLET="x86-windows-static"'
-        # since https://github.com/Microsoft/vcpkg/commit/0334365f516c5f229ff4fcf038c7d0190979a38a#diff-464a170117fa96bf98b2f8d224bf503c
-        # vcpkg need to have  "C:\Tools\vcpkg\installed\x86-windows-static"
-        New-Item -Force -ItemType directory -Path "C:/vcpkg/installed/x86-windows-static"
-    }
-
-    $cmake_cnf="$vcpkg_toolchain", "$vcpkg_triplet", "-G`"$env:GENERATOR`"", "-DUA_COMPILE_AS_CXX:BOOL=$env:FORCE_CXX"
-
-    # Collect files for .zip packing
-    New-Item -ItemType directory -Path pack
-    Copy-Item LICENSE pack
-    Copy-Item AUTHORS pack
-    Copy-Item README.md pack
-
-    Write-Host -ForegroundColor Green "`n###################################################################"
-    Write-Host -ForegroundColor Green "`n##### Testing $env:CC_NAME with amalgamation #####`n"
-    New-Item -ItemType directory -Path "build"
-    cd build
-    & cmake $cmake_cnf `
-            -DCMAKE_BUILD_TYPE=RelWithDebInfo `
-            -DUA_BUILD_EXAMPLES:BOOL=OFF  `
-            -DUA_ENABLE_AMALGAMATION:BOOL=ON `
-            -DUA_ENABLE_ENCRYPTION:BOOL=$build_encryption ..
-    & cmake --build . --config RelWithDebInfo
-    if ($LASTEXITCODE -and $LASTEXITCODE -ne 0) {
-        Write-Host -ForegroundColor Red "`n`n*** Make failed. Exiting ... ***"
-        exit $LASTEXITCODE
-    }
-    cd ..
-    Remove-Item -Path build -Recurse -Force
-
-    Write-Host -ForegroundColor Green "`n###################################################################"
-    Write-Host -ForegroundColor Green "`n##### Testing $env:CC_NAME with full NS0 #####`n"
-    New-Item -ItemType directory -Path "build"
-    cd build
-    # Use build type Debug here, to force `-Werror`
-    & cmake $cmake_cnf `
-            -DCMAKE_BUILD_TYPE=Debug `
-            -DUA_BUILD_EXAMPLES:BOOL=ON `
-            -DUA_ENABLE_DA:BOOL=ON `
-            -DUA_ENABLE_JSON_ENCODING:BOOL=ON `
-            -DUA_ENABLE_PUBSUB:BOOL=ON `
-            -DUA_ENABLE_PUBSUB_DELTAFRAMES:BOOL=ON `
-            -DUA_ENABLE_PUBSUB_INFORMATIONMODEL:BOOL=ON `
-            -DUA_ENABLE_SUBSCRIPTIONS_EVENTS:BOOL=ON `
-            -DUA_NAMESPACE_ZERO:STRING=FULL ..
-    & cmake --build . --config RelWithDebInfo
-    if ($LASTEXITCODE -and $LASTEXITCODE -ne 0) {
-        Write-Host -ForegroundColor Red "`n`n*** Make failed. Exiting ... ***"
-        exit $LASTEXITCODE
-    }
-    cd ..
-    Remove-Item -Path build -Recurse -Force
-
-    Write-Host -ForegroundColor Green "`n###################################################################"
-    Write-Host -ForegroundColor Green "`n##### Testing $env:CC_NAME without amalgamation #####`n"
-    New-Item -ItemType directory -Path "build"
-    cd build
-    & cmake $cmake_cnf `
-            -DBUILD_SHARED_LIBS:BOOL=OFF `
-            -DCMAKE_BUILD_TYPE=RelWithDebInfo `
-            -DCMAKE_INSTALL_PREFIX="$env:Build_Repository_LocalPath-$env:CC_SHORTNAME-static" `
-            -DUA_BUILD_EXAMPLES:BOOL=ON `
-            -DUA_ENABLE_AMALGAMATION:BOOL=OFF ..
-    & cmake --build . --target install --config RelWithDebInfo
-    if ($LASTEXITCODE -and $LASTEXITCODE -ne 0)
-    {
-        Write-Host -ForegroundColor Red "`n`n*** Make install failed. Exiting ... ***"
-        exit $LASTEXITCODE
-    }
-    cd ..
-    & 7z a -tzip "$env:Build_ArtifactStagingDirectory/open62541-$env:CC_SHORTNAME-static.zip" "$env:Build_Repository_LocalPath\pack\*" "$env:Build_Repository_LocalPath-$env:CC_SHORTNAME-static\*"
-    if ($LASTEXITCODE -and $LASTEXITCODE -ne 0)
-    {
-        Write-Host -ForegroundColor Red "`n`n*** Zipping failed. Exiting ... ***"
-        exit $LASTEXITCODE
-    }
-    Remove-Item -Path build -Recurse -Force
-
-    Write-Host -ForegroundColor Green "`n###################################################################"
-    Write-Host -ForegroundColor Green "`n##### Testing $env:CC_NAME (.dll) #####`n"
-    New-Item -ItemType directory -Path "build"
-    cd build
-    & cmake $cmake_cnf `
-            -DBUILD_SHARED_LIBS:BOOL=ON `
-            -DCMAKE_BUILD_TYPE=RelWithDebInfo `
-            -DCMAKE_INSTALL_PREFIX="$env:Build_Repository_LocalPath-$env:CC_SHORTNAME-dynamic" `
-            -DUA_BUILD_EXAMPLES:BOOL=ON `
-            -DUA_ENABLE_AMALGAMATION:BOOL=OFF ..
-    & cmake --build . --target install --config RelWithDebInfo
-    if ($LASTEXITCODE -and $LASTEXITCODE -ne 0)
-    {
-        Write-Host -ForegroundColor Red "`n`n*** Make install failed. Exiting ... ***"
-        exit $LASTEXITCODE
-    }
-    cd ..
-    & 7z a -tzip "$env:Build_ArtifactStagingDirectory/open62541-$env:CC_SHORTNAME-dynamic.zip" "$env:Build_Repository_LocalPath\pack\*" "$env:Build_Repository_LocalPath-$env:CC_SHORTNAME-static\*"
-    if ($LASTEXITCODE -and $LASTEXITCODE -ne 0)
-    {
-        Write-Host -ForegroundColor Red "`n`n*** Zipping failed. Exiting ... ***"
-        exit $LASTEXITCODE
-    }
-    Remove-Item -Path build -Recurse -Force
-
-    # Only execute unit tests on vs2017 to save compilation time
-    if ($env:CC_SHORTNAME -eq "vs2017") {
-        Write-Host -ForegroundColor Green "`n###################################################################"
-        Write-Host -ForegroundColor Green "`n##### Testing $env:CC_NAME with unit tests #####`n"
-        New-Item -ItemType directory -Path "build"
-        cd build
-        & cmake $cmake_cnf `
-                -DBUILD_SHARED_LIBS:BOOL=OFF `
-                -DCMAKE_BUILD_TYPE=Debug `
-                -DUA_BUILD_EXAMPLES=OFF `
-                -DUA_BUILD_UNIT_TESTS=ON `
-                -DUA_ENABLE_DA=ON `
-                -DUA_ENABLE_DISCOVERY=ON `
-                -DUA_ENABLE_DISCOVERY_MULTICAST=ON `
-                -DUA_ENABLE_ENCRYPTION:BOOL=$build_encryption `
-                -DUA_ENABLE_JSON_ENCODING:BOOL=ON `
-                -DUA_ENABLE_PUBSUB:BOOL=ON `
-                -DUA_ENABLE_PUBSUB_DELTAFRAMES:BOOL=ON `
-                -DUA_ENABLE_PUBSUB_INFORMATIONMODEL:BOOL=ON `
-                -DUA_ENABLE_UNIT_TESTS_MEMCHECK=ON ..
-        & cmake --build . --config Debug
-        if ($LASTEXITCODE -and $LASTEXITCODE -ne 0) {
-            Write-Host -ForegroundColor Red "`n`n*** Make failed. Exiting ... ***"
-            exit $LASTEXITCODE
-        }
-        & cmake --build . --target test-verbose --config Debug
-        if ($LASTEXITCODE -and $LASTEXITCODE -ne 0) {
-            Write-Host -ForegroundColor Red "`n`n*** Make failed. Exiting ... ***"
-            exit $LASTEXITCODE
-        }
-    }
-
-    # # do not cache log
-    # Remove-Item -Path c:\miktex\texmfs\data\miktex\log -Recurse -Force
-
-} catch {
-    # Print a detailed error message
-    $FullException = ($_.Exception|format-list -force) | Out-String
-    Write-Host -ForegroundColor Red "`n------------------ Exception ------------------`n$FullException`n"
-    [Console]::Out.Flush()
-    # Wait a bit to make sure appveyor shows the error message
-    Start-Sleep 10
-    throw
-}
diff --git a/ext/open62541/tools/azure-devops/install.ps1 b/ext/open62541/tools/azure-devops/install.ps1
deleted file mode 100644
index 4a252cd..0000000
--- a/ext/open62541/tools/azure-devops/install.ps1
+++ /dev/null
@@ -1,45 +0,0 @@
-$ErrorActionPreference = "Stop"
-
-try {
-
-    Write-Host -ForegroundColor Green "`n### Installing sphinx ###`n"
-    & choco install -y sphinx --no-progress --source python
-
-    if ($env:CC_SHORTNAME -eq "mingw" -or $env:CC_SHORTNAME -eq "clang-mingw") {
-        Write-Host -ForegroundColor Green "`n### Installing msys64 ###`n"
-        & choco install -y msys2 --no-progress --params="/InstallDir:$env:MSYS2_ROOT /NoUpdate /NoPath"
-
-        Write-Host -ForegroundColor Green "`n### Installing mbedtls via PacMan ###`n"
-        # pacman may complain that the directory does not exist, thus create it.
-        # See https://github.com/open62541/open62541/issues/2068
-        & C:\msys64\usr\bin\mkdir -p /var/cache/pacman/pkg
-        & C:\msys64\usr\bin\pacman --noconfirm -S mingw-w64-x86_64-mbedtls
-
-        Write-Host -ForegroundColor Green "`n### Installing clang via PacMan ###`n"
-        & C:\msys64\usr\bin\pacman --noconfirm -S mingw-w64-x86_64-clang mingw-w64-i686-clang
-    } elseif ($env:CC_SHORTNAME -eq "vs2015" -or $env:CC_SHORTNAME -eq "vs2017") {
-        Write-Host -ForegroundColor Green "`n### Installing mbedtls via vcpkg ###`n"
-        & vcpkg install mbedtls:x86-windows-static
-
-        Write-Host -ForegroundColor Green "`n### Installing libcheck via vcpkg ###`n"
-        & vcpkg install check:x86-windows-static
-
-        Write-Host -ForegroundColor Green "`n### Installing DrMemory ###`n"
-        & choco install -y --no-progress drmemory.portable
-        $env:Path = 'C:\Program Files (x86)\Dr. Memory\bin;' + $env:Path        
-    }
-
-    if ($LASTEXITCODE -and $LASTEXITCODE -ne 0) {
-        Write-Host -ForegroundColor Red "`n`n*** Installing dependencies failed. Exiting ... ***"
-        exit $LASTEXITCODE
-    }
-
-} catch {
-    # Print a detailed error message
-    $FullException = ($_.Exception|format-list -force) | Out-String
-    Write-Host -ForegroundColor Red "`n------------------ Exception ------------------`n$FullException`n"
-    [Console]::Out.Flush()
-    # Wait a bit to make sure appveyor shows the error message
-    Start-Sleep 10
-    throw
-}
diff --git a/ext/open62541/tools/c2rst.py b/ext/open62541/tools/c2rst.py
deleted file mode 100644
index b9971e5..0000000
--- a/ext/open62541/tools/c2rst.py
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/usr/bin/env python
-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this 
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-import sys
-import re
-
-# Converts a header file to restructured text documentation
-#
-# All text in /** */ comments becomes restructured text. Everything else is
-# included as a code-block with C syntax highlighting.
-#
-# The beginning and end of the header are removed.
-# - Find the first /** */ comment -> start of the documentation
-# - Find the last line beginning with "#ifdef" -> end of the documentation
-
-remove_keyword = [" UA_EXPORT", " UA_FUNC_ATTR_WARN_UNUSED_RESULT",
-                  " UA_FUNC_ATTR_MALLOC", " UA_RESTRICT "]
-
-def clean_comment(line):
-    m = re.search("^\s*(\* |/\*\* )(.*?)( \*/)?$", line)
-    if not m:
-        return "\n"
-    return m.group(2) + "\n"
-
-def clean_line(line):
-    for keyword in remove_keyword:
-        line = line.replace(keyword, "")
-    return line
-
-def comment_start(line):
-    m = re.search("^\s*/\*\*[ \n]", line)
-    if not m:
-        return False
-    return True
-
-def comment_end(line):
-    m = re.search(" \*/$", line)
-    if not m:
-        return False
-    return True
-
-def first_line(c):
-    "Searches for the first comment"
-    for i in range(len(c)):
-        if comment_start(c[i]):
-            return i
-    return -1
-
-def last_line(c):
-    "Searches for the latest ifdef (closing the include guard)"
-    reg = re.compile("^#ifdef")
-    for i in range(len(c)-1,1,-1):
-        if "_UA_END_DECLS" in c[i]:
-            reg = re.compile("^_UA_END_DECLS")
-    last = 1
-    for i in range(len(c)-1,1,-1):
-        m = reg.match(c[i])
-        if m:
-            last = i
-            break
-    # skip empty lines at the end
-    for i in range(last-1,1,-1):
-        if len(c[i].strip()) > 0:
-            return i
-    return len(c)-1
-
-if len(sys.argv) < 2:
-    print("Usage: python c2rst.py input.c/h output.rst")
-    exit(0)
-
-with open(sys.argv[1]) as f:
-    c = f.readlines()
-
-with open(sys.argv[2], 'w') as rst:
-    in_doc = False
-    last = last_line(c)
-    for i in range(first_line(c), last+1):
-        line = c[i]
-        doc_start = False
-        doc_end = False
-        if in_doc:
-            doc_end = comment_end(line)
-            line = clean_comment(line)
-        else:
-            doc_start = comment_start(line)
-            if doc_start:
-                doc_end = comment_end(line)
-                line = clean_comment(line)
-
-        if doc_start:
-            in_doc = True
-
-        if not ((doc_start or doc_end) and line == "\n"):
-            if not in_doc:
-                line = "   " + line
-            rst.write(clean_line(line))
-
-        if doc_end and i < last:
-            rst.write("\n.. code-block:: c\n\n")
-            in_doc = False
diff --git a/ext/open62541/tools/certs/create_self-signed.py b/ext/open62541/tools/certs/create_self-signed.py
deleted file mode 100644
index 3832a8b..0000000
--- a/ext/open62541/tools/certs/create_self-signed.py
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/env python
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-# Copyright 2019 (c) Kalycito Infotech Private Limited
-#
-
-import netifaces
-import sys
-import os
-import socket
-
-if len(sys.argv) < 2:
-    sys.exit('Usage: %s directory to output certificates' % sys.argv[0])
-
-if not os.path.exists(sys.argv[1]):
-    sys.exit('ERROR: Directory %s was not found!' % sys.argv[1])
-
-keysize = 2048
-
-if len(sys.argv) == 3:
-    keysize = int(sys.argv[2])
-
-certsdir = os.path.dirname(os.path.abspath(__file__))
-print(certsdir)
-
-# Function return TRUE (1) when an IP address is associated with the
-# given interface
-def is_interface_up(interface):
-    addr = netifaces.ifaddresses(interface)
-    return netifaces.AF_INET in addr
-
-# Initialize looping variables
-interfaceNum = 0
-iteratorValue = 0
-
-# Read the number of interfaces available
-numberOfInterfaces = int(format(len(netifaces.interfaces())))
-
-# Traverse through the available network interfaces and store the
-# corresponding IP addresses of the network interface in a variable
-for interfaceNum in range(0, numberOfInterfaces):
-    # Function call which returns whether the given
-    # interface is up or not
-    check = is_interface_up(netifaces.interfaces()[interfaceNum])
-
-    # Check if the interface is up and not the loopback one
-    # If yes set the IP Address for the environmental variables
-    if check != 0 and netifaces.interfaces()[interfaceNum] != 'lo':
-        if iteratorValue == 0:
-            os.environ['IPADDRESS1'] = netifaces.ifaddresses(netifaces.interfaces()[interfaceNum])[netifaces.AF_INET][0]['addr']
-        if iteratorValue == 1:
-            os.environ['IPADDRESS2'] = netifaces.ifaddresses(netifaces.interfaces()[interfaceNum])[netifaces.AF_INET][0]['addr']
-        iteratorValue = iteratorValue + 1
-        if iteratorValue == 2:
-            break
-
-# If there is only one interface available then set the second
-# IP address as loopback IP
-if iteratorValue < 2:
-    os.environ['IPADDRESS2'] = "127.0.0.1"
-
-os.environ['HOSTNAME'] = socket.gethostname()
-openssl_conf = os.path.join(certsdir, "localhost.cnf")
-
-os.chdir(os.path.abspath(sys.argv[1]))
-
-os.system("""openssl req \
-     -config {} \
-     -new \
-     -nodes \
-     -x509 -sha256  \
-     -newkey rsa:{} \
-     -keyout localhost.key -days 365 \
-     -subj "/C=DE/O=open62541/CN=open62541Server@localhost"\
-     -out localhost.crt""".format(openssl_conf, keysize))
-
-os.system("openssl x509 -in localhost.crt -outform der -out server_cert.der")
-os.system("openssl rsa -inform PEM -in localhost.key -outform DER -out server_key.der")
-
-os.remove("localhost.key")
-os.remove("localhost.crt")
-
-print("Certificates generated in " + sys.argv[1])
diff --git a/ext/open62541/tools/certs/localhost.cnf b/ext/open62541/tools/certs/localhost.cnf
deleted file mode 100644
index 89e63cb..0000000
--- a/ext/open62541/tools/certs/localhost.cnf
+++ /dev/null
@@ -1,367 +0,0 @@
-#
-# OpenSSL example configuration file.
-# This is mostly being used for generation of certificate requests.
-#
-
-# This definition stops the following lines choking if HOME isn't
-# defined.
-HOME			= .
-RANDFILE		= $ENV::HOME/.rnd
-
-# Extra OBJECT IDENTIFIER info:
-#oid_file		= $ENV::HOME/.oid
-oid_section		= new_oids
-
-hostname = ${ENV::HOSTNAME}
-ipaddress1 = ${ENV::IPADDRESS1}
-ipaddress2 = ${ENV::IPADDRESS2}
-
-# To use this configuration file with the "-extfile" option of the
-# "openssl x509" utility, name here the section containing the
-# X.509v3 extensions to use:
-# extensions		= 
-# (Alternatively, use a configuration file that has only
-# X.509v3 extensions in its main [= default] section.)
-
-[ new_oids ]
-
-# We can add new OIDs in here for use by 'ca', 'req' and 'ts'.
-# Add a simple OID like this:
-# testoid1=1.2.3.4
-# Or use config file substitution like this:
-# testoid2=${testoid1}.5.6
-
-# Policies used by the TSA examples.
-tsa_policy1 = 1.2.3.4.1
-tsa_policy2 = 1.2.3.4.5.6
-tsa_policy3 = 1.2.3.4.5.7
-
-####################################################################
-[ ca ]
-default_ca	= CA_default		# The default ca section
-
-####################################################################
-[ CA_default ]
-
-dir		= ./ca/			# Where everything is kept
-certs		= $dir/certs		# Where the issued certs are kept
-crl_dir		= $dir/crl		# Where the issued crl are kept
-database	= $dir/database.txt	# database index file.
-#unique_subject	= no			# Set to 'no' to allow creation of
-					# several ctificates with same subject.
-new_certs_dir	= $dir/newcerts		# default place for new certs.
-
-certificate	= $dir/ca.crt	 	# The CA certificate
-serial		= $dir/serial 		# The current serial number
-crlnumber	= $dir/crlnumber	# the current crl number
-					# must be commented out to leave a V1 CRL
-crl		= $dir/crl.pem 		# The current CRL
-private_key	= $dir/ca.key 		# The private key
-RANDFILE	= $dir/.rand		# private random number file
-
-x509_extensions	= usr_cert		# The extensions to add to the cert
-
-# Comment out the following two lines for the "traditional"
-# (and highly broken) format.
-name_opt 	= ca_default		# Subject Name options
-cert_opt 	= ca_default		# Certificate field options
-
-# Extension copying option: use with caution.
-# copy_extensions = copy
-
-# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
-# so this is commented out by default to leave a V1 CRL.
-# crlnumber must also be commented out to leave a V1 CRL.
-crl_extensions	= crl_ext
-
-default_days	= 365			# how long to certify for
-default_crl_days= 30			# how long before next CRL
-default_md	= default		# use public key default MD
-preserve	= no			# keep passed DN ordering
-
-# A few difference way of specifying how similar the request should look
-# For type CA, the listed attributes must be the same, and the optional
-# and supplied fields are just that :-)
-policy		= policy_match
-
-# For the CA policy
-[ policy_match ]
-countryName		= match
-stateOrProvinceName	= match
-organizationName	= match
-organizationalUnitName	= optional
-commonName		= supplied
-emailAddress		= optional
-
-# For the 'anything' policy
-# At this point in time, you must list all acceptable 'object'
-# types.
-[ policy_anything ]
-countryName		= optional
-stateOrProvinceName	= optional
-localityName		= optional
-organizationName	= optional
-organizationalUnitName	= optional
-commonName		= supplied
-emailAddress		= optional
-
-####################################################################
-[ req ]
-default_bits		= 2048
-default_keyfile 	= privkey.pem
-distinguished_name	= req_distinguished_name
-attributes		= req_attributes
-x509_extensions	= v3_ca	# The extensions to add to the self signed cert
-
-# Passwords for private keys if not present they will be prompted for
-# input_password = secret
-# output_password = secret
-
-# This sets a mask for permitted string types. There are several options. 
-# default: PrintableString, T61String, BMPString.
-# pkix	 : PrintableString, BMPString (PKIX recommendation before 2004)
-# utf8only: only UTF8Strings (PKIX recommendation after 2004).
-# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
-# MASK:XXXX a literal mask value.
-# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings.
-string_mask = utf8only
-
-req_extensions = v3_req # The extensions to add to a certificate request
-
-[ req_distinguished_name ]
-countryName			= Country Name (2 letter code)
-countryName_default		= AU
-countryName_min			= 2
-countryName_max			= 2
-
-stateOrProvinceName		= State or Province Name (full name)
-stateOrProvinceName_default	= Some-State
-
-localityName			= Locality Name (eg, city)
-
-0.organizationName		= Organization Name (eg, company)
-0.organizationName_default	= Internet Widgits Pty Ltd
-
-# we can do this but it is not needed normally :-)
-#1.organizationName		= Second Organization Name (eg, company)
-#1.organizationName_default	= World Wide Web Pty Ltd
-
-organizationalUnitName		= Organizational Unit Name (eg, section)
-#organizationalUnitName_default	=
-
-commonName			= Common Name (e.g. server FQDN or YOUR name)
-commonName_max			= 64
-
-emailAddress			= Email Address
-emailAddress_max		= 64
-
-# SET-ex3			= SET extension number 3
-
-[ req_attributes ]
-challengePassword		= A challenge password
-challengePassword_min		= 4
-challengePassword_max		= 20
-
-unstructuredName		= An optional company name
-
-[ usr_cert ]
-
-# These extensions are added when 'ca' signs a request.
-
-# This goes against PKIX guidelines but some CAs do it and some software
-# requires this to avoid interpreting an end user certificate as a CA.
-
-basicConstraints=CA:FALSE
-
-# Here are some examples of the usage of nsCertType. If it is omitted
-# the certificate can be used for anything *except* object signing.
-
-# This is OK for an SSL server.
-# nsCertType			= server
-
-# For an object signing certificate this would be used.
-# nsCertType = objsign
-
-# For normal client use this is typical
-# nsCertType = client, email
-
-# and for everything including object signing:
-# nsCertType = client, email, objsign
-
-# This is typical in keyUsage for a client certificate.
-# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
-
-# This will be displayed in Netscape's comment listbox.
-nsComment			= "OpenSSL Generated Certificate"
-
-# PKIX recommendations harmless if included in all certificates.
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid,issuer
-
-# This stuff is for subjectAltName and issuerAltname.
-# Import the email address.
-# subjectAltName=email:copy
-# An alternative to produce certificates that aren't
-# deprecated according to PKIX.
-# subjectAltName=email:move
-
-# Copy subject details
-# issuerAltName=issuer:copy
-
-#nsCaRevocationUrl		= http://www.domain.dom/ca-crl.pem
-#nsBaseUrl
-#nsRevocationUrl
-#nsRenewalUrl
-#nsCaPolicyUrl
-#nsSslServerName
-
-# This is required for TSA certificates.
-extendedKeyUsage = critical,timeStamping
-
-[ v3_req ]
-
-# Extensions to add to a certificate request
-
-basicConstraints = CA:FALSE
-keyUsage = nonRepudiation, digitalSignature, keyEncipherment
-subjectAltName = @alt_names
-
-[ alt_names ]
-DNS.1 = ${hostname}
-DNS.2 = ${hostname}
-IP.1 = ${ipaddress1}
-IP.2 = ${ipaddress2}
-URI.1 = urn:open62541.server.application
-
-[ v3_ca ]
-
-
-# Extensions for a typical CA
-
-
-# PKIX recommendation.
-
-subjectKeyIdentifier=hash
-
-authorityKeyIdentifier=keyid:always,issuer
-
-# This is what PKIX recommends but some broken software chokes on critical
-# extensions.
-#basicConstraints = critical,CA:true
-# So we do this instead.
-basicConstraints = CA:false
-
-# Key usage: this is typical for a CA certificate. However since it will
-# prevent it being used as an test self-signed certificate it is best
-# left out by default.
-# keyUsage = cRLSign, keyCertSign
-
-keyUsage = nonRepudiation, digitalSignature, keyEncipherment, dataEncipherment, keyCertSign
-extendedKeyUsage = TLS Web Server Authentication, TLS Web Client Authentication
-
-# Some might want this also
-# nsCertType = sslCA, emailCA
-
-# Include email address in subject alt name: another PKIX recommendation
-# subjectAltName=email:copy
-# Copy issuer details
-# issuerAltName=issuer:copy
-
-# DER hex encoding of an extension: beware experts only!
-# obj=DER:02:03
-# Where 'obj' is a standard or added object
-# You can even override a supported extension:
-# basicConstraints= critical, DER:30:03:01:01:FF
-
-subjectAltName         = @alt_names
-
-[ crl_ext ]
-
-# CRL extensions.
-# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
-
-# issuerAltName=issuer:copy
-authorityKeyIdentifier=keyid:always
-
-[ proxy_cert_ext ]
-# These extensions should be added when creating a proxy certificate
-
-# This goes against PKIX guidelines but some CAs do it and some software
-# requires this to avoid interpreting an end user certificate as a CA.
-
-basicConstraints=CA:FALSE
-
-# Here are some examples of the usage of nsCertType. If it is omitted
-# the certificate can be used for anything *except* object signing.
-
-# This is OK for an SSL server.
-# nsCertType			= server
-
-# For an object signing certificate this would be used.
-# nsCertType = objsign
-
-# For normal client use this is typical
-# nsCertType = client, email
-
-# and for everything including object signing:
-# nsCertType = client, email, objsign
-
-# This is typical in keyUsage for a client certificate.
-# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
-
-# This will be displayed in Netscape's comment listbox.
-nsComment			= "OpenSSL Generated Certificate"
-
-# PKIX recommendations harmless if included in all certificates.
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid,issuer
-
-# This stuff is for subjectAltName and issuerAltname.
-# Import the email address.
-# subjectAltName=email:copy
-# An alternative to produce certificates that aren't
-# deprecated according to PKIX.
-# subjectAltName=email:move
-
-# Copy subject details
-# issuerAltName=issuer:copy
-
-#nsCaRevocationUrl		= http://www.domain.dom/ca-crl.pem
-#nsBaseUrl
-#nsRevocationUrl
-#nsRenewalUrl
-#nsCaPolicyUrl
-#nsSslServerName
-
-# This really needs to be in place for it to be a proxy certificate.
-proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
-
-####################################################################
-[ tsa ]
-
-default_tsa = tsa_config1	# the default TSA section
-
-[ tsa_config1 ]
-
-# These are used by the TSA reply generation only.
-dir		= ./demoCA		# TSA root directory
-serial		= $dir/tsaserial	# The current serial number (mandatory)
-crypto_device	= builtin		# OpenSSL engine to use for signing
-signer_cert	= $dir/tsacert.pem 	# The TSA signing certificate
-					# (optional)
-certs		= $dir/cacert.pem	# Certificate chain to include in reply
-					# (optional)
-signer_key	= $dir/private/tsakey.pem # The TSA private key (optional)
-
-default_policy	= tsa_policy1		# Policy if request did not specify it
-					# (optional)
-other_policies	= tsa_policy2, tsa_policy3	# acceptable policies (optional)
-digests		= md5, sha1		# Acceptable message digests (mandatory)
-accuracy	= secs:1, millisecs:500, microsecs:100	# (optional)
-clock_precision_digits  = 0	# number of digits after dot. (optional)
-ordering		= yes	# Is ordering defined for timestamps?
-				# (optional, default: no)
-tsa_name		= yes	# Must the TSA name be included in the reply?
-				# (optional, default: no)
-ess_cert_id_chain	= no	# Must the ESS cert id chain be included?
-				# (optional, default: no)
diff --git a/ext/open62541/tools/clang-format_precommit_hook b/ext/open62541/tools/clang-format_precommit_hook
deleted file mode 100644
index c9110fd..0000000
--- a/ext/open62541/tools/clang-format_precommit_hook
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/sh
-#
-# This pre-commit hook checks if any versions of clang-format
-# are installed, and if so, uses the installed version to format
-# the staged changes.
-#
-# To install, copy this script to `.git/hooks/pre-commit`:
-# cd .git/hooks && ln -s ../../tools/clang-format_precommit_hook pre-commit
-# and make sure that `clang-format` is installed on your system
-
-maj_min=1
-maj_max=8
-
-base=clang-format
-format=""
-
-# Redirect output to stderr.
-exec 1>&2
-
- # check if clang-format is installed
-type "$base" >/dev/null 2>&1 && format="$base"
-
-# if not, check all possible versions
-# (i.e. clang-format-<$maj_min-$maj_max>-<0-9>)
-if [ -z "$format" ]
-then
-    for j in `seq $maj_max -1 $maj_min`
-    do
-        for i in `seq 0 9`
-        do
-            type "$base-$j.$i" >/dev/null 2>&1 && format="$base-$j.$i" && break
-        done
-        [ -z "$format" ] || break
-    done
-fi
-
-# no versions of clang-format are installed
-if [ -z "$format" ]
-then
-    echo "$base is not installed. Pre-commit hook will not be executed."
-    exit 0
-fi
-
-if git rev-parse --verify HEAD >/dev/null 2>&1
-then
-	against=HEAD
-else
-	# Initial commit: diff against an empty tree object
-	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
-fi
-
-# do the formatting
-for file in `git diff-index --cached --name-only $against`
-do
-    case "$file" in
-    *.h | *.hpp | *.c | *.cpp )
-            "$format" -i "$file"
-            ;;
-    *)
-            # do nothing with file
-            ;;
-    esac
-done
diff --git a/ext/open62541/tools/cmake/AssignSourceGroup.cmake b/ext/open62541/tools/cmake/AssignSourceGroup.cmake
deleted file mode 100644
index 66da315..0000000
--- a/ext/open62541/tools/cmake/AssignSourceGroup.cmake
+++ /dev/null
@@ -1,12 +0,0 @@
-function(assign_source_group)

-    foreach(_source IN ITEMS ${ARGN})

-        if (IS_ABSOLUTE "${_source}")

-            file(RELATIVE_PATH _source_rel "${CMAKE_CURRENT_SOURCE_DIR}" "${_source}")

-        else()

-            set(source_rel "${_source}")

-        endif()

-        get_filename_component(_source_path "${_source_rel}" PATH)

-        string(REPLACE "/" "\\" _source_path_msvc "${_source_path}")

-        source_group("${_source_path_msvc}" FILES "${_source}")

-    endforeach()

-endfunction(assign_source_group)
\ No newline at end of file
diff --git a/ext/open62541/tools/cmake/CompilerFlags.cmake b/ext/open62541/tools/cmake/CompilerFlags.cmake
deleted file mode 100644
index 4ef257b..0000000
--- a/ext/open62541/tools/cmake/CompilerFlags.cmake
+++ /dev/null
@@ -1,17 +0,0 @@
-# check if a C compiler flag is possible
-include(CheckCCompilerFlag)
-function(check_cc_flag CC_FLAG)
-    check_c_compiler_flag("${CC_FLAG}" CC_HAS_${CC_FLAG})
-    if(CC_HAS_${CC_FLAG})
-        add_definitions("${CC_FLAG}")
-    endif()
-endfunction()
-
-# check if an untested C compiler flag is possible
-function(check_cc_flag_untested CC_FLAG)
-    check_c_compiler_flag("${CC_FLAG}" CC_HAS_${CC_FLAG})
-    if(CC_HAS_${CC_FLAG})
-        add_definitions("${CC_FLAG}")
-        message(WARNING "Add untested flag: ${CC_FLAG}")
-    endif()
-endfunction()
diff --git a/ext/open62541/tools/cmake/FindCheck.cmake b/ext/open62541/tools/cmake/FindCheck.cmake
deleted file mode 100644
index 34a3be5..0000000
--- a/ext/open62541/tools/cmake/FindCheck.cmake
+++ /dev/null
@@ -1,68 +0,0 @@
-# - Try to find the CHECK libraries
-#  Once done this will define
-#
-#  CHECK_FOUND - system has check
-#  CHECK_INCLUDE_DIR - the check include directory
-#  CHECK_LIBRARIES - check library
-#
-#  This configuration file for finding libcheck is originally from
-#  the opensync project. The originally was downloaded from here:
-#  opensync.org/browser/branches/3rd-party-cmake-modules/modules/FindCheck.cmake
-#
-#  Copyright (c) 2007 Daniel Gollub <dgollub@suse.de>
-#  Copyright (c) 2007 Bjoern Ricks  <b.ricks@fh-osnabrueck.de>
-#
-#  Redistribution and use is allowed according to the terms of the New
-#  BSD license.
-#  For details see the accompanying COPYING-CMAKE-SCRIPTS file.
-
-
-INCLUDE( FindPkgConfig )
-
-# Take care about check.pc settings
-PKG_SEARCH_MODULE( CHECK check )
-
-# Look for CHECK include dir and libraries
-IF( NOT CHECK_FOUND )
-	IF ( CHECK_INSTALL_DIR )
-		MESSAGE ( STATUS "Using override CHECK_INSTALL_DIR to find check" )
-		SET ( CHECK_INCLUDE_DIR  "${CHECK_INSTALL_DIR}/include" )
-		FIND_LIBRARY( CHECK_LIBRARY NAMES check PATHS "${CHECK_INSTALL_DIR}/lib" )
-        IF (WIN32)
-		    FIND_LIBRARY( COMPAT_LIBRARY NAMES compat PATHS "${CHECK_INSTALL_DIR}/lib" )
-        ENDIF (WIN32)
-	ELSE ( CHECK_INSTALL_DIR )
-		FIND_PATH( CHECK_INCLUDE_DIR check.h )
-		FIND_LIBRARY( CHECK_LIBRARY NAMES check )
-        IF (WIN32)
-		    FIND_LIBRARY( COMPAT_LIBRARY NAMES compat )
-        ENDIF (WIN32)
-	ENDIF ( CHECK_INSTALL_DIR )
-
-    IF (WIN32)
-        SET ( CHECK_LIBRARIES "${CHECK_LIBRARY}" "${COMPAT_LIBRARY}" )
-    ELSE ( WIN32)
-        SET ( CHECK_LIBRARIES "${CHECK_LIBRARY}" )
-    ENDIF (WIN32)
-
-	IF ( CHECK_INCLUDE_DIR AND CHECK_LIBRARIES )
-		SET( CHECK_FOUND 1 )
-		IF ( NOT Check_FIND_QUIETLY )
-			MESSAGE ( STATUS "Found CHECK: ${CHECK_LIBRARIES}" )
-		ENDIF ( NOT Check_FIND_QUIETLY )
-	ELSE ( CHECK_INCLUDE_DIR AND CHECK_LIBRARIES )
-		IF ( Check_FIND_REQUIRED )
-			MESSAGE( FATAL_ERROR "Could NOT find CHECK" )
-		ELSE ( Check_FIND_REQUIRED )
-			IF ( NOT Check_FIND_QUIETLY )
-				MESSAGE( STATUS "Could NOT find CHECK" )	
-			ENDIF ( NOT Check_FIND_QUIETLY )
-		ENDIF ( Check_FIND_REQUIRED )
-	ENDIF ( CHECK_INCLUDE_DIR AND CHECK_LIBRARIES )
-ENDIF( NOT CHECK_FOUND )
-
-# Hide advanced variables from CMake GUIs
-MARK_AS_ADVANCED( CHECK_INCLUDE_DIR CHECK_LIBRARIES CHECK_LIBRARY)
-IF( WIN32 )
-    MARK_AS_ADVANCED( COMPAT_LIBRARY)
-ENDIF()
diff --git a/ext/open62541/tools/cmake/FindClangTools.cmake b/ext/open62541/tools/cmake/FindClangTools.cmake
deleted file mode 100644
index a6d73d8..0000000
--- a/ext/open62541/tools/cmake/FindClangTools.cmake
+++ /dev/null
@@ -1,33 +0,0 @@
-# Find Clang Tools
-#
-# This module defines
-#  CLANG_TIDY_PROGRAM, The  path to the clang tidy binary
-#  CLANG_TIDY_FOUND, Whether clang tidy was found
-#  CLANG_FORMAT_PROGRAM, The path to the clang format binary
-#  CLANG_FORMAT_FOUND, Whether clang format was found
-
-find_program(CLANG_TIDY_PROGRAM
-  NAMES clang-tidy-3.9 clang-tidy-3.8 clang-tidy-3.7 clang-tidy-3.6 clang-tidy
-  PATHS $ENV{CLANG_TOOLS_PATH} /usr/local/bin /usr/bin
-  NO_DEFAULT_PATH)
-
-mark_as_advanced(CLANG_TIDY_PROGRAM)
-
-if("${CLANG_TIDY_PROGRAM}" STREQUAL "CLANG_TIDY_PROGRAM-NOTFOUND")
-  set(CLANG_TIDY_FOUND 0)
-else()
-  set(CLANG_TIDY_FOUND 1)
-endif()
-
-find_program(CLANG_FORMAT_PROGRAM
-  NAMES clang-format-3.9 clang-format-3.8 clang-format-3.7 clang-format-3.6 clang-format
-  PATHS $ENV{CLANG_TOOLS_PATH} /usr/local/bin /usr/bin
-  NO_DEFAULT_PATH)
-
-mark_as_advanced(CLANG_FORMAT_PROGRAM)
-
-if("${CLANG_FORMAT_PROGRAM}" STREQUAL "CLANG_FORMAT_PROGRAM-NOTFOUND")
-  set(CLANG_FORMAT_FOUND 0)
-else()
-  set(CLANG_FORMAT_FOUND 1)
-endif()
diff --git a/ext/open62541/tools/cmake/FindMbedTLS.cmake b/ext/open62541/tools/cmake/FindMbedTLS.cmake
deleted file mode 100644
index de86c79..0000000
--- a/ext/open62541/tools/cmake/FindMbedTLS.cmake
+++ /dev/null
@@ -1,28 +0,0 @@
-#check environment variable
-if("$ENV{MBEDTLS_FOLDER_INCLUDE}")
-    set(MBEDTLS_FOLDER_INCLUDE "$ENV{MBEDTLS_FOLDER_INCLUDE}")
-endif()
-if("$ENV{MBEDTLS_FOLDER_LIBRARY}")
-    set(MBEDTLS_FOLDER_LIBRARY "$ENV{MBEDTLS_FOLDER_LIBRARY}")
-endif()
-
-find_path(MBEDTLS_INCLUDE_DIRS mbedtls/ssl.h HINTS ${MBEDTLS_FOLDER_INCLUDE})
-
-if(UA_BUILD_OSS_FUZZ)
-    # oss-fuzz requires static linking of libraries
-    set(MBEDTLS_LIBRARY /usr/lib/x86_64-linux-gnu/libmbedtls.a)
-    set(MBEDX509_LIBRARY /usr/lib/x86_64-linux-gnu/libmbedx509.a)
-    set(MBEDCRYPTO_LIBRARY /usr/lib/x86_64-linux-gnu/libmbedcrypto.a)
-else()
-    find_library(MBEDTLS_LIBRARY mbedtls HINTS ${MBEDTLS_FOLDER_LIBRARY})
-    find_library(MBEDX509_LIBRARY mbedx509 HINTS ${MBEDTLS_FOLDER_LIBRARY})
-    find_library(MBEDCRYPTO_LIBRARY mbedcrypto HINTS ${MBEDTLS_FOLDER_LIBRARY})
-endif()
-
-set(MBEDTLS_LIBRARIES "${MBEDTLS_LIBRARY}" "${MBEDX509_LIBRARY}" "${MBEDCRYPTO_LIBRARY}")
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(MBEDTLS DEFAULT_MSG
-        MBEDTLS_INCLUDE_DIRS MBEDTLS_LIBRARY MBEDX509_LIBRARY MBEDCRYPTO_LIBRARY)
-
-mark_as_advanced(MBEDTLS_INCLUDE_DIRS MBEDTLS_LIBRARY MBEDX509_LIBRARY MBEDCRYPTO_LIBRARY)
diff --git a/ext/open62541/tools/cmake/FindSphinx.cmake b/ext/open62541/tools/cmake/FindSphinx.cmake
deleted file mode 100644
index cce3c56..0000000
--- a/ext/open62541/tools/cmake/FindSphinx.cmake
+++ /dev/null
@@ -1,11 +0,0 @@
-find_program(SPHINX_EXECUTABLE NAMES sphinx-build
-  HINTS
-  $ENV{SPHINX_DIR}
-  PATH_SUFFIXES bin
-  DOC "Sphinx documentation generator")
-
-include(FindPackageHandleStandardArgs)
-
-find_package_handle_standard_args(Sphinx DEFAULT_MSG SPHINX_EXECUTABLE)
-
-mark_as_advanced(SPHINX_EXECUTABLE)
\ No newline at end of file
diff --git a/ext/open62541/tools/cmake/FindValgrind.cmake b/ext/open62541/tools/cmake/FindValgrind.cmake
deleted file mode 100644
index 6ca72e3..0000000
--- a/ext/open62541/tools/cmake/FindValgrind.cmake
+++ /dev/null
@@ -1,18 +0,0 @@
-# Find Valgrind.
-#
-# This module defines:
-#  VALGRIND_INCLUDE_DIR, where to find valgrind/memcheck.h, etc.
-#  VALGRIND_PROGRAM, the valgrind executable.
-#  VALGRIND_FOUND, If false, do not try to use valgrind.
-#
-# If you have valgrind installed in a non-standard place, you can define
-# VALGRIND_PREFIX to tell cmake where it is.
-
-find_path(VALGRIND_INCLUDE_DIR memcheck.h
-  /usr/include /usr/include/valgrind /usr/local/include /usr/local/include/valgrind
-  ${VALGRIND_PREFIX}/include ${VALGRIND_PREFIX}/include/valgrind)
-find_program(VALGRIND_PROGRAM NAMES valgrind PATH /usr/bin /usr/local/bin ${VALGRIND_PREFIX}/bin)
-
-find_package_handle_standard_args(VALGRIND DEFAULT_MSG VALGRIND_INCLUDE_DIR VALGRIND_PROGRAM)
-
-mark_as_advanced(VALGRIND_INCLUDE_DIR VALGRIND_PROGRAM)
diff --git a/ext/open62541/tools/cmake/Findlibwebsockets.cmake b/ext/open62541/tools/cmake/Findlibwebsockets.cmake
deleted file mode 100644
index 1dfe115..0000000
--- a/ext/open62541/tools/cmake/Findlibwebsockets.cmake
+++ /dev/null
@@ -1,33 +0,0 @@
-# This module tries to find libWebsockets library and include files
-#
-# LIBWEBSOCKETS_INCLUDE_DIR, path where to find libwebsockets.h
-# LIBWEBSOCKETS_LIBRARY_DIR, path where to find libwebsockets.so
-# LIBWEBSOCKETS_LIBRARIES, the library to link against
-# LIBWEBSOCKETS_FOUND, If false, do not try to use libWebSockets
-#
-# This currently works probably only for Linux
-
-FIND_PATH ( LIBWEBSOCKETS_INCLUDE_DIR libwebsockets.h
-    /usr/local/include
-    /usr/include
-)
-
-FIND_LIBRARY ( LIBWEBSOCKETS_LIBRARIES websockets
-    /usr/local/lib
-    /usr/lib
-)
-
-GET_FILENAME_COMPONENT( LIBWEBSOCKETS_LIBRARY_DIR ${LIBWEBSOCKETS_LIBRARIES} PATH )
-
-SET ( LIBWEBSOCKETS_FOUND "NO" )
-IF ( LIBWEBSOCKETS_INCLUDE_DIR )
-    IF ( LIBWEBSOCKETS_LIBRARIES )
-        SET ( LIBWEBSOCKETS_FOUND "YES" )
-    ENDIF ( LIBWEBSOCKETS_LIBRARIES )
-ENDIF ( LIBWEBSOCKETS_INCLUDE_DIR )
-
-MARK_AS_ADVANCED(
-    LIBWEBSOCKETS_LIBRARY_DIR
-    LIBWEBSOCKETS_INCLUDE_DIR
-    LIBWEBSOCKETS_LIBRARIES
-)
\ No newline at end of file
diff --git a/ext/open62541/tools/cmake/SetGitBasedVersion.cmake b/ext/open62541/tools/cmake/SetGitBasedVersion.cmake
deleted file mode 100644
index 1816568..0000000
--- a/ext/open62541/tools/cmake/SetGitBasedVersion.cmake
+++ /dev/null
@@ -1,85 +0,0 @@
-get_filename_component(VERSION_SRC_DIR ${CMAKE_CURRENT_LIST_DIR} DIRECTORY)
-set(VERSION_SRC_DIR "${VERSION_SRC_DIR}/..")
-
-find_package(Git)
-
-function(set_open62541_version)
-
-    # Generate a git-describe version string from Git repository tags
-    if(GIT_EXECUTABLE AND NOT DEFINED OPEN62541_VERSION)
-        execute_process(
-            COMMAND ${GIT_EXECUTABLE} describe --tags --dirty --match "v*"
-            WORKING_DIRECTORY "${VERSION_SRC_DIR}"
-            OUTPUT_VARIABLE GIT_DESCRIBE_VERSION
-            RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE
-            OUTPUT_STRIP_TRAILING_WHITESPACE
-        )
-        if(NOT GIT_DESCRIBE_ERROR_CODE)
-
-            # Example values can be:
-            # v1.2
-            # v1.2.3
-            # v1.2.3-rc1
-            # v1.2.3-rc1-dirty
-            # v1.2.3-5-g4538abcd
-            # v1.2.3-5-g4538abcd-dirty
-
-            set(OPEN62541_VERSION ${GIT_DESCRIBE_VERSION})
-        endif()
-    endif()
-
-    if(OPEN62541_VERSION)
-        STRING(REGEX REPLACE "^(v[0-9\\.]+)(.*)$"
-               "\\1"
-               GIT_VERSION_NUMBERS
-               "${OPEN62541_VERSION}" )
-        STRING(REGEX REPLACE "^v([0-9\\.]+)(.*)$"
-               "\\2"
-               GIT_VERSION_LABEL
-               "${OPEN62541_VERSION}" )
-
-        if("${GIT_VERSION_NUMBERS}" MATCHES "^v([0-9]+)(.*)$")
-            STRING(REGEX REPLACE "^v([0-9]+)\\.?(.*)$"
-                   "\\1"
-                   GIT_VER_MAJOR
-                   "${GIT_VERSION_NUMBERS}" )
-            if("${GIT_VERSION_NUMBERS}" MATCHES "^v([0-9]+)\\.([0-9]+)(.*)$")
-                STRING(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)(.*)$"
-                       "\\2"
-                       GIT_VER_MINOR
-                       "${GIT_VERSION_NUMBERS}" )
-                if("${GIT_VERSION_NUMBERS}" MATCHES "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)(.*)$")
-                    STRING(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)(.*)$"
-                           "\\3"
-                           GIT_VER_PATCH
-                           "${GIT_VERSION_NUMBERS}" )
-                else()
-                    set(GIT_VER_PATCH 0)
-                endif()
-            else()
-                set(GIT_VER_MINOR 0)
-                set(GIT_VER_PATCH 0)
-            endif()
-
-        else()
-            set(GIT_VER_MAJOR 0)
-            set(GIT_VER_MINOR 0)
-            set(GIT_VER_PATCH 0)
-        endif()
-        set(OPEN62541_VER_MAJOR ${GIT_VER_MAJOR} PARENT_SCOPE)
-        set(OPEN62541_VER_MINOR ${GIT_VER_MINOR} PARENT_SCOPE)
-        set(OPEN62541_VER_PATCH ${GIT_VER_PATCH} PARENT_SCOPE)
-        set(OPEN62541_VER_LABEL "${GIT_VERSION_LABEL}" PARENT_SCOPE)
-        set(OPEN62541_VER_COMMIT ${OPEN62541_VERSION} PARENT_SCOPE)
-    else()
-        # Final fallback: Just use a bogus version string that is semantically older
-        # than anything else and spit out a warning to the developer.
-        set(OPEN62541_VERSION "v0.0.0-unknown" PARENT_SCOPE)
-        set(OPEN62541_VER_MAJOR 0 PARENT_SCOPE)
-        set(OPEN62541_VER_MINOR 0 PARENT_SCOPE)
-        set(OPEN62541_VER_PATCH 0 PARENT_SCOPE)
-        set(OPEN62541_VER_LABEL "-unknown" PARENT_SCOPE)
-        set(OPEN62541_VER_COMMIT "undefined" PARENT_SCOPE)
-        message(WARNING "Failed to determine OPEN62541_VERSION from repository tags. Using default version \"${OPEN62541_VERSION}\".")
-    endif()
-endfunction()
diff --git a/ext/open62541/tools/cmake/Toolchain-QNX-6.5.0.cmake b/ext/open62541/tools/cmake/Toolchain-QNX-6.5.0.cmake
deleted file mode 100644
index 6ec0777..0000000
--- a/ext/open62541/tools/cmake/Toolchain-QNX-6.5.0.cmake
+++ /dev/null
@@ -1,85 +0,0 @@
-#
-# (C) Copyright 2009 Johns Hopkins University (JHU), All Rights
-# Reserved.
-#
-# --- begin cisst license - do not edit ---
-# 
-# This software is provided "as is" under an open source license, with
-# no warranty.  The complete license can be found in license.txt and
-# http://www.cisst.org/cisst/license.txt.
-# 
-# --- end cisst license ---
-
-SET(CMAKE_SYSTEM_NAME QNX)
-SET(CMAKE_SYSTEM_VERSION 6.5.0)
-SET(CMAKE_SYSTEM_PROCESSOR x86)
-SET(TOOLCHAIN QNX)
-
-#SET(CMAKE_IMPORT_LIBRARY_SUFFIX ".a")
-
-SET(CMAKE_SHARED_LIBRARY_PREFIX "lib")
-SET(CMAKE_SHARED_LIBRARY_SUFFIX ".so")
-SET(CMAKE_STATIC_LIBRARY_PREFIX "lib")
-SET(CMAKE_STATIC_LIBRARY_SUFFIX ".a")
-
-IF(CMAKE_HOST_WIN32)
-  SET(HOST_EXECUTABLE_SUFFIX ".exe")
-ENDIF(CMAKE_HOST_WIN32)
-
-FIND_PATH(QNX_HOST
-  NAME usr/bin/qcc${HOST_EXECUTABLE_SUFFIX}
-  PATHS $ENV{QNX_HOST} C:/QNX650/host/win32/
-  NO_CMAKE_PATH
-  NO_CMAKE_ENVIRONMENT_PATH
-)
-  
-FIND_PATH(QNX_TARGET
-  NAME usr/include/qnx_errno.h
-  PATHS $ENV{QNX_TARGET} C:/QNX650/target/qnx6/
-  NO_CMAKE_PATH
-  NO_CMAKE_ENVIRONMENT_PATH
-)
-
-IF(CMAKE_HOST_WIN32)
-  FIND_PATH(QNX_CONFIGURATION
-    NAME bin/qnxactivate.exe
-    PATHS $ENV{QNX_CONFIGURATION}
-    "C:/Program Files/QNX Software Systems/qconfig"
-    NO_CMAKE_PATH
-    NO_CMAKE_ENVIRONMENT_PATH
- )
-ENDIF(CMAKE_HOST_WIN32)
-
-SET(ENV{QNX_HOST} ${QNX_HOST})
-SET(ENV{QNX_TARGET} ${QNX_TARGET})
-IF(CMAKE_HOST_WIN32)
-  SET(ENV{QNX_CONFIGURATION} ${QNX_CONFIGURATION})
-  SET(ENV{PATH} "$ENV{PATH};${QNX_HOST}/usr/bin")
-ENDIF(CMAKE_HOST_WIN32)
-
-SET(CMAKE_MAKE_PROGRAM "${QNX_HOST}/usr/bin/make${HOST_EXECUTABLE_SUFFIX}"    CACHE PATH "QNX Make Program")
-SET(CMAKE_SH           "${QNX_HOST}/usr/bin/sh${HOST_EXECUTABLE_SUFFIX}"      CACHE PATH "QNX shell Program")
-SET(CMAKE_AR           "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ar${HOST_EXECUTABLE_SUFFIX}"      CACHE PATH "QNX ar Program")
-SET(CMAKE_RANLIB       "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ranlib${HOST_EXECUTABLE_SUFFIX}"      CACHE PATH "QNX ranlib Program")
-SET(CMAKE_NM           "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-nm${HOST_EXECUTABLE_SUFFIX}"      CACHE PATH "QNX nm Program")
-SET(CMAKE_OBJCOPY      "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-objcopy${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX objcopy Program")
-SET(CMAKE_OBJDUMP      "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-objdump${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX objdump Program")
-SET(CMAKE_LINKER       "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ld"     CACHE PATH "QNX Linker Program")
-SET(CMAKE_STRIP        "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-strip${HOST_EXECUTABLE_SUFFIX}"   CACHE PATH "QNX Strip Program")
-
-SET(CMAKE_C_COMPILER ${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-gcc${HOST_EXECUTABLE_SUFFIX})
-SET(CMAKE_C_FLAGS_DEBUG "-g")
-SET(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG")
-SET(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG")
-SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
-
-SET(CMAKE_CXX_COMPILER ${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-c++${HOST_EXECUTABLE_SUFFIX})
-SET(CMAKE_CXX_FLAGS_DEBUG "-g")
-SET(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG")
-SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
-SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
-
-SET(CMAKE_FIND_ROOT_PATH ${QNX_TARGET}) 
-SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
-SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
diff --git a/ext/open62541/tools/cmake/Toolchain-gcc-m32.cmake b/ext/open62541/tools/cmake/Toolchain-gcc-m32.cmake
deleted file mode 100644
index 4062090..0000000
--- a/ext/open62541/tools/cmake/Toolchain-gcc-m32.cmake
+++ /dev/null
@@ -1,6 +0,0 @@
-# the name of the target operating system
-set(CMAKE_SYSTEM_NAME Linux)
-
-# which compilers to use for C and C++
-set(CMAKE_C_COMPILER gcc -m32)
-set(CMAKE_CXX_COMPILER g++ -m32)
diff --git a/ext/open62541/tools/cmake/Toolchain-mingw32.cmake b/ext/open62541/tools/cmake/Toolchain-mingw32.cmake
deleted file mode 100644
index ba500f1..0000000
--- a/ext/open62541/tools/cmake/Toolchain-mingw32.cmake
+++ /dev/null
@@ -1,56 +0,0 @@
-# the name of the target operating system
-set(CMAKE_SYSTEM_NAME Windows)
-
-#remove the runtime dependency for libgcc_s_sjlj-1.dll
-set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -static-libgcc")
-
-# Which compilers to use for C and C++, and location of target
-# environment.
-if(EXISTS /usr/i686-w64-mingw32)
-# First look in standard location as used by Debian/Ubuntu/etc.
-set(CMAKE_STRIP i686-w64-mingw32-strip)
-set(CMAKE_C_COMPILER i686-w64-mingw32-gcc)
-set(CMAKE_CXX_COMPILER i686-w64-mingw32-g++)
-set(CMAKE_RC_COMPILER i686-w64-mingw32-windres)
-set(CMAKE_AR:FILEPATH /usr/bin/i686-w64-mingw32-ar)
-set(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32)
-elseif(EXISTS /usr/i586-mingw32msvc)
-# First look in standard location as used by Debian/Ubuntu/etc.
-set(CMAKE_STRIP i586-mingw32msvc-strip)
-set(CMAKE_C_COMPILER i586-mingw32msvc-gcc)
-set(CMAKE_CXX_COMPILER i586-mingw32msvc-g++)
-set(CMAKE_RC_COMPILER i586-mingw32msvc-windres)
-set(CMAKE_FIND_ROOT_PATH /usr/i586-mingw32msvc)
-elseif(EXISTS /opt/mingw)
-# You can get a MinGW environment using the script at <http://mxe.cc>.
-# It downloads and builds MinGW and most of the dependencies for you.
-# You can use the toolchain file generated by MXE called `mxe-conf.cmake'
-# or you can use this file by adjusting the above and following paths.
-set(CMAKE_STRIP /opt/mingw/usr/bin/i686-pc-mingw32-strip)
-set(CMAKE_C_COMPILER /opt/mingw/usr/bin/i686-pc-mingw32-gcc)
-set(CMAKE_CXX_COMPILER /opt/mingw/usr/bin/i686-pc-mingw32-g++)
-set(CMAKE_RC_COMPILER /opt/mingw/usr/bin/i686-pc-mingw32-windres)
-set(CMAKE_FIND_ROOT_PATH /opt/mingw/usr/i686-pc-mingw32)
-else()
-# Else fill in local path which the user will likely adjust.
-# This is the location assumed by <http://www.libsdl.org/extras/win32/cross/>
-set(CMAKE_STRIP /usr/local/cross-tools/bin/i386-mingw32-strip)
-set(CMAKE_C_COMPILER /usr/local/cross-tools/bin/i386-mingw32-gcc)
-set(CMAKE_CXX_COMPILER /usr/local/cross-tools/bin/i386-mingw32-g++)
-set(CMAKE_RC_COMPILER /usr/local/cross-tools/bin/i386-mingw32-windres)
-set(CMAKE_FIND_ROOT_PATH /usr/local/cross-tools)
-endif() 
-
-# Adjust the default behaviour of the FIND_XXX() commands:
-# search headers and libraries in the target environment, search
-# programs in the host environment
-set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
-set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-# Tell pkg-config not to look at the target environment's .pc files.
-# Setting PKG_CONFIG_LIBDIR sets the default search directory, but we have to
-# set PKG_CONFIG_PATH as well to prevent pkg-config falling back to the host's
-# path.
-set(ENV{PKG_CONFIG_LIBDIR} ${CMAKE_FIND_ROOT_PATH}/lib/pkgconfig)
-set(ENV{PKG_CONFIG_PATH} ${CMAKE_FIND_ROOT_PATH}/lib/pkgconfig)
-set(ENV{MINGDIR} ${CMAKE_FIND_ROOT_PATH}) 
diff --git a/ext/open62541/tools/cmake/Toolchain-mingw64.cmake b/ext/open62541/tools/cmake/Toolchain-mingw64.cmake
deleted file mode 100644
index 6dee6b4..0000000
--- a/ext/open62541/tools/cmake/Toolchain-mingw64.cmake
+++ /dev/null
@@ -1,38 +0,0 @@
-# the name of the target operating system
-set(CMAKE_SYSTEM_NAME Windows)
-
-#remove the runtime dependency for libgcc_s_sjlj-1.dll
-set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -static-libgcc")
-
-# Which compilers to use for C and C++, and location of target
-# environment.
-if(EXISTS /usr/x86_64-w64-mingw32)
-# First look in standard location as used by Debian/Ubuntu/etc.
-set(CMAKE_STRIP x86_64-w64-mingw32-strip)
-set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
-set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
-set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)
-set(CMAKE_AR:FILEPATH /usr/bin/x86_64-w64-mingw32-ar)
-set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32)
-elseif(EXISTS /usr/i586-mingw32msvc)
-# Else fill in local path which the user will likely adjust.
-set(CMAKE_STRIP /usr/local/cross-tools/bin/i386-mingw32-strip)
-set(CMAKE_C_COMPILER /usr/local/cross-tools/bin/i386-mingw32-gcc)
-set(CMAKE_CXX_COMPILER /usr/local/cross-tools/bin/i386-mingw32-g++)
-set(CMAKE_RC_COMPILER /usr/local/cross-tools/bin/i386-mingw32-windres)
-set(CMAKE_FIND_ROOT_PATH /usr/local/cross-tools)
-endif() 
-
-# Adjust the default behaviour of the FIND_XXX() commands:
-# search headers and libraries in the target environment, search
-# programs in the host environment
-set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
-set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-# Tell pkg-config not to look at the target environment's .pc files.
-# Setting PKG_CONFIG_LIBDIR sets the default search directory, but we have to
-# set PKG_CONFIG_PATH as well to prevent pkg-config falling back to the host's
-# path.
-set(ENV{PKG_CONFIG_LIBDIR} ${CMAKE_FIND_ROOT_PATH}/lib/pkgconfig)
-set(ENV{PKG_CONFIG_PATH} ${CMAKE_FIND_ROOT_PATH}/lib/pkgconfig)
-set(ENV{MINGDIR} ${CMAKE_FIND_ROOT_PATH}) 
diff --git a/ext/open62541/tools/cmake/Toolchain-rpi.cmake b/ext/open62541/tools/cmake/Toolchain-rpi.cmake
deleted file mode 100644
index 5fc197d..0000000
--- a/ext/open62541/tools/cmake/Toolchain-rpi.cmake
+++ /dev/null
@@ -1,12 +0,0 @@
-# -- How to cross compile for Raspberry Pi (on a 32bit host) -- 
-# 1) get the toolchain
-# cd ~
-# git clone https://github.com/raspberrypi/tools
-# 2) export path to one of the compilers
-# export PATH=$PATH:~/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/
-# 3) use this toolchain file 
-# cmake -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-rpi.cmake -DEXAMPLESERVER=ON ..
-# make
-set(CMAKE_C_COMPILER arm-bcm2708hardfp-linux-gnueabi-gcc)
-set(CMAKE_CXX_COMPILER arm-bcm2708hardfp-linux-gnueabi-g++)
-set(CMAKE_STRIP arm-bcm2708hardfp-linux-gnueabi-strip)
diff --git a/ext/open62541/tools/cmake/Toolchain-rpi64.cmake b/ext/open62541/tools/cmake/Toolchain-rpi64.cmake
deleted file mode 100644
index ce9381d..0000000
--- a/ext/open62541/tools/cmake/Toolchain-rpi64.cmake
+++ /dev/null
@@ -1,12 +0,0 @@
-# -- How to cross compile for Raspberry Pi (on a 64bit host) -- 
-# 1) get the toolchain
-# cd ~
-# git clone https://github.com/raspberrypi/tools
-# 2) export path to one of the compilers
-# export PATH=$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/
-# 3) use this toolchain file 
-# cmake -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-rpi64.cmake -DEXAMPLESERVER=ON ..
-# make
-set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
-set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
-set(CMAKE_STRIP arm-linux-gnueabihf-strip)
diff --git a/ext/open62541/tools/cmake/linting_build.cmake b/ext/open62541/tools/cmake/linting_build.cmake
deleted file mode 100644
index 1865544..0000000
--- a/ext/open62541/tools/cmake/linting_build.cmake
+++ /dev/null
@@ -1,33 +0,0 @@
-if(UA_ENABLE_STATIC_ANALYZER STREQUAL MINIMAL OR UA_ENABLE_STATIC_ANALYZER STREQUAL REDUCED OR UA_ENABLE_STATIC_ANALYZER STREQUAL FULL)
-    # cpplint just gives warnings about coding style
-    find_program(CPPLINT_EXE NAMES "cpplint")
-    if(CPPLINT_EXE)
-        set(CMAKE_C_CPPLINT "${CPPLINT_EXE};--quiet")
-        set(CMAKE_CXX_CPPLINT "${CPPLINT_EXE};--quiet")
-    endif()
-endif()
-if(UA_ENABLE_STATIC_ANALYZER STREQUAL REDUCED OR UA_ENABLE_STATIC_ANALYZER STREQUAL FULL)
-    # clang-tidy has certain warnings as errors
-    find_program(CLANG_TIDY_EXE NAMES "clang-tidy")
-    if(CLANG_TIDY_EXE)
-        set(CMAKE_C_CLANG_TIDY "${CLANG_TIDY_EXE};-p=compile_commands.json")
-        set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE};-p=compile_commands.json")
-    endif()
-elseif(UA_ENABLE_STATIC_ANALYZER STREQUAL FULL)
-    # cppcheck provides just warnings but checks "all" (for now) - huge CPU impact
-    find_program(CPPCHECK_EXE NAMES "cppcheck")
-    if(CPPCHECK_EXE)
-        set(CMAKE_C_CPPCHECK "${CPPCHECK_EXE};--project=compile_commands.json;--enable=all;--inconclusive;--inline-suppr;\
---suppressions-list=${PROJECT_SOURCE_DIR}/cppcheck-suppressions.txt;-D__GNUC__;-i ${PROJECT_SOURCE_DIR}/build")
-        set(CMAKE_CXX_CPPCHECK "${CPPCHECK_EXE};--project=compile_commands.json;--enable=all;--inconclusive;--inline-suppr;\
---suppressions-list=${PROJECT_SOURCE_DIR}/cppcheck-suppressions.txt;-D__GNUC__;-i ${PROJECT_SOURCE_DIR}/build")
-    endif()
-
-    # "include what you use" requires additional configuration - ignore for now
-    find_program(IWYU_EXE NAMES "iwyu")
-    if(IWYU_EXE)
-        #set(CMAKE_C_INCLUDE_WHAT_YOU_USE "${IWYU_EXE}")
-        #set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE "${IWYU_EXE}")
-    endif()
-endif()
-
diff --git a/ext/open62541/tools/cmake/linting_target.cmake b/ext/open62541/tools/cmake/linting_target.cmake
deleted file mode 100644
index 202ac52..0000000
--- a/ext/open62541/tools/cmake/linting_target.cmake
+++ /dev/null
@@ -1,48 +0,0 @@
-find_package(ClangTools)
-# clang-tidy uses the compile_commands.json file for include dirs and other config
-add_custom_target(clang-tidy ${CLANG_TIDY_PROGRAM}
-                  -p=compile_commands.json
-                  -format-style=file
-                  --
-                  ${lib_sources}
-                  DEPENDS ${lib_sources}
-                  COMMENT "Run clang-tidy on the library")
-add_dependencies(clang-tidy open62541)
-set_target_properties(clang-tidy PROPERTIES FOLDER "CodeAnalysis")
-
-add_custom_target(cpplint cpplint
-                  ${lib_sources}
-                  ${internal_headers}
-                  ${default_plugin_headers}
-                  ${default_plugin_sources}
-                  ${ua_architecture_headers}
-                  ${ua_architecture_sources}
-                  DEPENDS ${lib_sources}
-                          ${internal_headers}
-                          ${default_plugin_headers}
-                          ${default_plugin_sources}
-                          ${ua_architecture_headers}
-                          ${ua_architecture_sources}
-                  COMMENT "Run cpplint code style checker on the library")
-set_target_properties(cpplint PROPERTIES FOLDER "CodeAnalysis")
-
-
-# adds new target "clang-format" to enforce clang-format rules
-find_program(CLANG_FORMAT_EXE NAMES "clang-format")
-if(CLANG_FORMAT_EXE)
-    file(GLOB_RECURSE FILES_TO_FORMAT
-         ${PROJECT_SOURCE_DIR}/arch/*.c
-         ${PROJECT_SOURCE_DIR}/plugins/*.c
-         ${PROJECT_SOURCE_DIR}/src/*.c
-         ${PROJECT_SOURCE_DIR}/arch/*.h
-         ${PROJECT_SOURCE_DIR}/include/*.h
-         ${PROJECT_SOURCE_DIR}/plugins/*.h
-         ${PROJECT_SOURCE_DIR}/src/*.h
-         )
-    add_custom_target(
-        clang-format COMMAND ${CLANG_FORMAT_EXE}
-        -style=file
-        -i
-        ${FILES_TO_FORMAT}
-    )
-endif()
diff --git a/ext/open62541/tools/cmake/macros_internal.cmake b/ext/open62541/tools/cmake/macros_internal.cmake
deleted file mode 100644
index aa8d024..0000000
--- a/ext/open62541/tools/cmake/macros_internal.cmake
+++ /dev/null
@@ -1,55 +0,0 @@
-#Add a new architecture to to the lists of available architectures
-FUNCTION(ua_add_architecture)
-    FOREACH(ARG ${ARGV})
-        set_property(GLOBAL APPEND PROPERTY UA_ARCHITECTURES ${ARG})
-    ENDFOREACH(ARG)
-ENDFUNCTION(ua_add_architecture)
-
-#Include folders to the compilation
-FUNCTION(ua_include_directories)
-    FOREACH(ARG ${ARGV})
-        set_property(GLOBAL APPEND PROPERTY UA_INCLUDE_DIRECTORIES ${ARG})
-    ENDFOREACH(ARG)
-ENDFUNCTION(ua_include_directories)
-
-#Add a new header file to the architecture group
-FUNCTION(ua_add_architecture_header)
-    FOREACH(ARG ${ARGV})
-        set_property(GLOBAL APPEND PROPERTY UA_ARCHITECTURE_HEADERS ${ARG})
-    ENDFOREACH(ARG)
-ENDFUNCTION(ua_add_architecture_header)
-
-#Add a new header file to the architecture group at the beginning of it
-FUNCTION(ua_add_architecture_header_beginning)
-    FOREACH(ARG ${ARGV})
-        set_property(GLOBAL APPEND PROPERTY UA_ARCHITECTURE_HEADERS_BEGINNING ${ARG})
-    ENDFOREACH(ARG)
-ENDFUNCTION(ua_add_architecture_header_beginning)
-
-#Add a new source file to the architecture group
-FUNCTION(ua_add_architecture_file)
-    FOREACH(ARG ${ARGV})
-        set_property(GLOBAL APPEND PROPERTY UA_ARCHITECTURE_SOURCES ${ARG})
-    ENDFOREACH(ARG)
-ENDFUNCTION(ua_add_architecture_file)
-
-#Add definitions to the compilations that are exclusive for the selected architecture
-FUNCTION(ua_architecture_add_definitions)
-    FOREACH(ARG ${ARGV})
-        set_property(GLOBAL APPEND PROPERTY UA_ARCHITECTURE_ADD_DEFINITIONS ${ARG})
-    ENDFOREACH(ARG)
-ENDFUNCTION(ua_architecture_add_definitions)
-
-#Remove definitions from the compilations that are exclusive for the selected architecture
-FUNCTION(ua_architecture_remove_definitions)
-    FOREACH(ARG ${ARGV})
-        set_property(GLOBAL APPEND PROPERTY UA_ARCHITECTURE_REMOVE_DEFINITIONS ${ARG})
-    ENDFOREACH(ARG)
-ENDFUNCTION(ua_architecture_remove_definitions)
-
-#Add libraries to be linked to the comnpilation that are exclusive for the selected architecture
-FUNCTION(ua_architecture_append_to_library)
-    FOREACH(ARG ${ARGV})
-        set_property(GLOBAL APPEND PROPERTY UA_ARCHITECTURE_APPEND_TO_LIBRARY ${ARG})
-    ENDFOREACH(ARG)
-ENDFUNCTION(ua_architecture_append_to_library)
diff --git a/ext/open62541/tools/cmake/macros_public.cmake b/ext/open62541/tools/cmake/macros_public.cmake
deleted file mode 100644
index a6a36f3..0000000
--- a/ext/open62541/tools/cmake/macros_public.cmake
+++ /dev/null
@@ -1,541 +0,0 @@
-
-# --------------- Generate NodeIDs header ---------------------
-#
-# Generates header file from .csv which contains defines for every
-# node id to be used instead of numeric node ids.
-#
-# The resulting files will be put into OUTPUT_DIR with the names:
-# - NAME.h
-#
-#
-# The following arguments are accepted:
-#   Options:
-#
-#   Arguments taking one value:
-#
-#   NAME            Full name of the generated files, e.g. di_nodeids
-#   TARGET_SUFFIX   Suffix for the resulting target. e.g. ids-di
-#   [TARGET_PREFIX] Optional prefix for the resulting target. Default `open62541-generator`
-#   ID_PREFIX       Prefix for the generated node ID defines, e.g. NS_DI
-#   [OUTPUT_DIR]    Optional target directory for the generated files. Default is '${PROJECT_BINARY_DIR}/src_generated'
-#   FILE_CSV        Path to the .csv file containing the node ids, e.g. 'OpcUaDiModel.csv'
-#
-function(ua_generate_nodeid_header)
-    set(options )
-    set(oneValueArgs NAME ID_PREFIX OUTPUT_DIR FILE_CSV TARGET_SUFFIX TARGET_PREFIX)
-    set(multiValueArgs )
-    cmake_parse_arguments(UA_GEN_ID "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
-
-    if(NOT UA_GEN_ID_TARGET_SUFFIX OR "${UA_GEN_ID_TARGET_SUFFIX}" STREQUAL "")
-        message(FATAL_ERROR "ua_generate_nodeid_header function requires a value for the TARGET_SUFFIX argument")
-    endif()
-
-    # Set default value for output dir
-    if(NOT UA_GEN_ID_OUTPUT_DIR OR "${UA_GEN_ID_OUTPUT_DIR}" STREQUAL "")
-        set(UA_GEN_ID_OUTPUT_DIR ${PROJECT_BINARY_DIR}/src_generated/open62541)
-    endif()
-    # Set default target prefix
-    if(NOT UA_GEN_ID_TARGET_PREFIX OR "${UA_GEN_ID_TARGET_PREFIX}" STREQUAL "")
-        set(UA_GEN_ID_TARGET_PREFIX "open62541-generator")
-    endif()
-
-    # Replace dash with underscore to make valid c literal
-    string(REPLACE "-" "_" UA_GEN_ID_NAME ${UA_GEN_ID_NAME})
-
-    add_custom_target(${UA_GEN_ID_TARGET_PREFIX}-${UA_GEN_ID_TARGET_SUFFIX} DEPENDS
-        ${UA_GEN_ID_OUTPUT_DIR}/${UA_GEN_ID_NAME}.h
-    )
-
-    # Make sure that the output directory exists
-    if(NOT EXISTS ${UA_GEN_ID_OUTPUT_DIR})
-        file(MAKE_DIRECTORY ${UA_GEN_ID_OUTPUT_DIR})
-    endif()
-
-    # Header containing defines for all NodeIds
-    add_custom_command(OUTPUT ${UA_GEN_ID_OUTPUT_DIR}/${UA_GEN_ID_NAME}.h
-        PRE_BUILD
-        COMMAND ${PYTHON_EXECUTABLE} ${open62541_TOOLS_DIR}/generate_nodeid_header.py
-        ${UA_GEN_ID_FILE_CSV}  ${UA_GEN_ID_OUTPUT_DIR}/${UA_GEN_ID_NAME} ${UA_GEN_ID_ID_PREFIX}
-        DEPENDS ${open62541_TOOLS_DIR}/generate_nodeid_header.py
-        ${UA_GEN_ID_FILE_CSV})
-endfunction()
-
-
-# --------------- Generate Datatypes ---------------------
-#
-# Generates Datatype definition based on the .csv and .bsd files of a nodeset.
-# The result of the generation will be C Code which can be compiled with the rest of the stack.
-# Some nodesets come with custom datatypes. These datatype structures first need to be
-# generated so that the nodeset can use these types.
-#
-# The resulting files will be put into OUTPUT_DIR with the names:
-# - NAME_generated.c
-# - NAME_generated.h
-# - NAME_generated_encoding_binary.h
-# - NAME_generated_handling.h
-#
-# The cmake resulting cmake target will be named like this:
-#   open62541-generator-${TARGET_SUFFIX}
-#
-# The following arguments are accepted:
-#   Options:
-#
-#   [BUILTIN]       Optional argument. If given, then builtin types will be generated.
-#   [INTERNAL]      Optional argument. If given, then the given types file is seen as internal file (e.g. does not require a .csv)
-#
-#   Arguments taking one value:
-#
-#   NAME            Full name of the generated files, e.g. ua_types_di
-#   TARGET_SUFFIX   Suffix for the resulting target. e.g. types-di
-#   [TARGET_PREFIX] Optional prefix for the resulting target. Default `open62541-generator`
-#   NAMESPACE_IDX   Namespace index of the nodeset, when it is loaded into the server. This index
-#                   is used for the node ids withing the types array and is currently not determined automatically.
-#                   Make sure that it matches the namespace index in the server.
-#   [OUTPUT_DIR]    Optional target directory for the generated files. Default is '${PROJECT_BINARY_DIR}/src_generated'
-#   FILE_CSV        Path to the .csv file containing the node ids, e.g. 'OpcUaDiModel.csv'
-#
-#   Arguments taking multiple values:
-#
-#   FILES_BSD        Path to the .bsd file containing the type definitions, e.g. 'Opc.Ua.Di.Types.bsd'. Multiple files can be
-#                   passed which will all combined to one resulting code.
-#   IMPORT_BSD      Combination of types array and path to the .bsd file containing additional type definitions referenced by
-#                   the FILES_BSD files. The value is separated with a hash sign, i.e.
-#                   'UA_TYPES#${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.Types.bsd'
-#                   Multiple files can be passed which will all be imported.
-#   [FILES_SELECTED] Optional path to a simple text file which contains a list of types which should be included in the generation.
-#                   The file should contain one type per line. Multiple files can be passed to this argument.
-#
-#
-function(ua_generate_datatypes)
-    set(options BUILTIN INTERNAL)
-    set(oneValueArgs NAME TARGET_SUFFIX TARGET_PREFIX NAMESPACE_IDX OUTPUT_DIR FILE_CSV)
-    set(multiValueArgs FILES_BSD IMPORT_BSD FILES_SELECTED)
-    cmake_parse_arguments(UA_GEN_DT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
-
-    if(NOT DEFINED open62541_TOOLS_DIR)
-        message(FATAL_ERROR "open62541_TOOLS_DIR must point to the open62541 tools directory")
-    endif()
-
-    # ------ Argument checking -----
-    if(NOT DEFINED UA_GEN_DT_NAMESPACE_IDX AND NOT "${UA_GEN_DT_NAMESPACE_IDX}" STREQUAL "0")
-        message(FATAL_ERROR "ua_generate_datatype function requires a value for the NAMESPACE_IDX argument")
-    endif()
-    if(NOT UA_GEN_DT_NAME OR "${UA_GEN_DT_NAME}" STREQUAL "")
-        message(FATAL_ERROR "ua_generate_datatype function requires a value for the NAME argument")
-    endif()
-    if(NOT UA_GEN_DT_TARGET_SUFFIX OR "${UA_GEN_DT_TARGET_SUFFIX}" STREQUAL "")
-        message(FATAL_ERROR "ua_generate_datatype function requires a value for the TARGET_SUFFIX argument")
-    endif()
-    if(NOT UA_GEN_DT_FILE_CSV OR "${UA_GEN_DT_FILE_CSV}" STREQUAL "")
-        message(FATAL_ERROR "ua_generate_datatype function requires a value for the FILE_CSV argument")
-    endif()
-    if(NOT UA_GEN_DT_FILES_BSD OR "${UA_GEN_DT_FILES_BSD}" STREQUAL "")
-        message(FATAL_ERROR "ua_generate_datatype function requires a value for the FILES_BSD argument")
-    endif()
-
-    # Set default value for output dir
-    if(NOT UA_GEN_DT_OUTPUT_DIR OR "${UA_GEN_DT_OUTPUT_DIR}" STREQUAL "")
-        set(UA_GEN_DT_OUTPUT_DIR ${PROJECT_BINARY_DIR}/src_generated/open62541)
-    endif()
-    # Set default target prefix
-    if(NOT UA_GEN_DT_TARGET_PREFIX OR "${UA_GEN_DT_TARGET_PREFIX}" STREQUAL "")
-        set(UA_GEN_DT_TARGET_PREFIX "open62541-generator")
-    endif()
-
-    # ------ Add custom command and target -----
-
-    set(UA_GEN_DT_NO_BUILTIN "--no-builtin")
-    if (UA_GEN_DT_BUILTIN)
-        set(UA_GEN_DT_NO_BUILTIN "")
-    endif()
-
-    set(UA_GEN_DT_INTERNAL_ARG "")
-    if (UA_GEN_DT_INTERNAL)
-        set(UA_GEN_DT_INTERNAL_ARG "--internal")
-    endif()
-
-    set(SELECTED_TYPES_TMP "")
-    foreach(f ${UA_GEN_DT_FILES_SELECTED})
-        set(SELECTED_TYPES_TMP ${SELECTED_TYPES_TMP} "--selected-types=${f}")
-    endforeach()
-
-    set(BSD_FILES_TMP "")
-    foreach(f ${UA_GEN_DT_FILES_BSD})
-        set(BSD_FILES_TMP ${BSD_FILES_TMP} "--type-bsd=${f}")
-    endforeach()
-
-    set(IMPORT_BSD_TMP "")
-    foreach(f ${UA_GEN_DT_IMPORT_BSD})
-        set(IMPORT_BSD_TMP ${IMPORT_BSD_TMP} "--import=${f}")
-    endforeach()
-
-    # Make sure that the output directory exists
-    if(NOT EXISTS ${UA_GEN_DT_OUTPUT_DIR})
-        file(MAKE_DIRECTORY ${UA_GEN_DT_OUTPUT_DIR})
-    endif()
-
-    # Replace dash with underscore to make valid c literal
-    string(REPLACE "-" "_" UA_GEN_DT_NAME ${UA_GEN_DT_NAME})
-
-    add_custom_command(OUTPUT ${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}_generated.c
-        ${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}_generated.h
-        ${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}_generated_handling.h
-        ${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}_generated_encoding_binary.h
-        PRE_BUILD
-        COMMAND ${PYTHON_EXECUTABLE} ${open62541_TOOLS_DIR}/generate_datatypes.py
-        --namespace=${UA_GEN_DT_NAMESPACE_IDX}
-        ${SELECTED_TYPES_TMP}
-        ${BSD_FILES_TMP}
-        ${IMPORT_BSD_TMP}
-        --type-csv=${UA_GEN_DT_FILE_CSV}
-        ${UA_GEN_DT_NO_BUILTIN}
-        ${UA_GEN_DT_INTERNAL_ARG}
-        ${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}
-        DEPENDS ${open62541_TOOLS_DIR}/generate_datatypes.py
-        ${UA_GEN_DT_FILES_BSD}
-        ${UA_GEN_DT_FILE_CSV}
-        ${UA_GEN_DT_FILES_SELECTED})
-    add_custom_target(${UA_GEN_DT_TARGET_PREFIX}-${UA_GEN_DT_TARGET_SUFFIX} DEPENDS
-        ${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}_generated.c
-        ${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}_generated.h
-        ${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}_generated_handling.h
-        ${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}_generated_encoding_binary.h
-        )
-
-    string(TOUPPER "${UA_GEN_DT_NAME}" GEN_NAME_UPPER)
-    set(UA_${GEN_NAME_UPPER}_SOURCES "${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}_generated.c" CACHE INTERNAL "${UA_GEN_DT_NAME} source files")
-    set(UA_${GEN_NAME_UPPER}_HEADERS "${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}_generated.h;${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}_generated_handling.h;${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}_generated_encoding_binary.h"
-        CACHE INTERNAL "${UA_GEN_DT_NAME} header files")
-
-    if(UA_COMPILE_AS_CXX)
-        set_source_files_properties(${UA_GEN_DT_OUTPUT_DIR}/${UA_GEN_DT_NAME}_generated.c PROPERTIES LANGUAGE CXX)
-    endif()
-endfunction()
-
-
-# --------------- Generate Nodeset ---------------------
-#
-# Generates C code for the given NodeSet2.xml file.
-# This C code can be used to initialize the server.
-#
-# The resulting files will be put into OUTPUT_DIR with the names:
-# - ua_namespace_NAME.c
-# - ua_namespace_NAME.h
-#
-# The resulting cmake target will be named like this:
-#   open62541-generator-ns-${NAME}
-#
-# The following arguments are accepted:
-#   Options:
-#
-#   [INTERNAL]      Optional argument. If given, then the generated node set code will use internal headers.
-#
-#   Arguments taking one value:
-#
-#   NAME            Name of the nodeset, e.g. 'di'
-#   [TYPES_ARRAY]   Optional name of the types array containing the custom datatypes of this node set.
-#   [OUTPUT_DIR]    Optional target directory for the generated files. Default is '${PROJECT_BINARY_DIR}/src_generated'
-#   [IGNORE]        Optional file containing a list of node ids which should be ignored. The file should have one id per line.
-#   [TARGET_PREFIX] Optional prefix for the resulting target. Default `open62541-generator`
-#
-#   Arguments taking multiple values:
-#
-#   FILE            Path to the NodeSet2.xml file. Multiple values can be passed. These nodesets will be combined into one output.
-#   [DEPENDS_TYPES]   Optional list of types array which match with the DEPENDS_NS node sets. e.g. 'UA_TYPES;UA_TYPES_DI'
-#   [DEPENDS_NS]      Optional list of NodeSet2.xml files which are a dependency of this node set.
-#   [DEPENDS_TARGET]  Optional list of CMake targets this nodeset depends on.
-#
-#
-function(ua_generate_nodeset)
-
-    set(options INTERNAL )
-    set(oneValueArgs NAME TYPES_ARRAY OUTPUT_DIR IGNORE TARGET_PREFIX)
-    set(multiValueArgs FILE DEPENDS_TYPES DEPENDS_NS DEPENDS_TARGET)
-    cmake_parse_arguments(UA_GEN_NS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
-
-
-    if(NOT DEFINED open62541_TOOLS_DIR)
-        message(FATAL_ERROR "open62541_TOOLS_DIR must point to the open62541 tools directory")
-    endif()
-
-    # ------ Argument checking -----
-    if(NOT UA_GEN_NS_NAME OR "${UA_GEN_NS_NAME}" STREQUAL "")
-        message(FATAL_ERROR "ua_generate_nodeset function requires a value for the NAME argument")
-    endif()
-
-    if(NOT UA_GEN_NS_FILE OR "${UA_GEN_NS_FILE}" STREQUAL "")
-        message(FATAL_ERROR "ua_generate_nodeset function requires a value for the FILE argument")
-    endif()
-
-    # Set default value for output dir
-    if(NOT UA_GEN_NS_OUTPUT_DIR OR "${UA_GEN_NS_OUTPUT_DIR}" STREQUAL "")
-        set(UA_GEN_NS_OUTPUT_DIR ${PROJECT_BINARY_DIR}/src_generated/open62541)
-    endif()
-
-    # Set default target prefix
-    if(NOT UA_GEN_NS_TARGET_PREFIX OR "${UA_GEN_NS_TARGET_PREFIX}" STREQUAL "")
-        set(UA_GEN_NS_TARGET_PREFIX "open62541-generator")
-    endif()
-
-    # ------ Add custom command and target -----
-
-    set(GEN_INTERNAL_HEADERS "")
-    if (UA_GEN_NS_INTERNAL)
-        set(GEN_INTERNAL_HEADERS "--internal-headers")
-    endif()
-
-    set(GEN_NS0 "")
-    set(TARGET_SUFFIX "ns-${UA_GEN_NS_NAME}")
-    set(FILE_SUFFIX "_${UA_GEN_NS_NAME}_generated")
-    string(REPLACE "-" "_" FILE_SUFFIX ${FILE_SUFFIX})
-
-    if ("${UA_GEN_NS_NAME}" STREQUAL "ns0")
-        set(TARGET_SUFFIX "namespace")
-        set(FILE_SUFFIX "0_generated")
-    endif()
-
-    set(GEN_IGNORE "")
-    if (UA_GEN_NS_IGNORE)
-        set(GEN_IGNORE "--ignore=${UA_GEN_NS_IGNORE}")
-    endif()
-
-    set(TYPES_ARRAY_LIST "")
-    foreach(f ${UA_GEN_NS_DEPENDS_TYPES})
-        # Replace dash with underscore to make valid c literal
-        string(REPLACE "-" "_" TYPE_ARRAY ${f})
-
-        set(TYPES_ARRAY_LIST ${TYPES_ARRAY_LIST} "--types-array=${TYPE_ARRAY}")
-    endforeach()
-    if(UA_GEN_NS_TYPES_ARRAY)
-        # Replace dash with underscore to make valid c literal
-        string(REPLACE "-" "_" TYPE_ARRAY ${UA_GEN_NS_TYPES_ARRAY})
-        set(TYPES_ARRAY_LIST ${TYPES_ARRAY_LIST} "--types-array=${TYPE_ARRAY}")
-    endif()
-
-    set(DEPENDS_FILE_LIST "")
-    foreach(f ${UA_GEN_NS_DEPENDS_NS})
-        set(DEPENDS_FILE_LIST ${DEPENDS_FILE_LIST} "--existing=${f}")
-    endforeach()
-    set(FILE_LIST "")
-    foreach(f ${UA_GEN_NS_FILE})
-        set(FILE_LIST ${FILE_LIST} "--xml=${f}")
-    endforeach()
-
-    # Make sure that the output directory exists
-    if(NOT EXISTS ${UA_GEN_NS_OUTPUT_DIR})
-        file(MAKE_DIRECTORY ${UA_GEN_NS_OUTPUT_DIR})
-    endif()
-
-    add_custom_command(OUTPUT ${UA_GEN_NS_OUTPUT_DIR}/namespace${FILE_SUFFIX}.c
-                       ${UA_GEN_NS_OUTPUT_DIR}/namespace${FILE_SUFFIX}.h
-                       PRE_BUILD
-                       COMMAND ${PYTHON_EXECUTABLE} ${open62541_TOOLS_DIR}/nodeset_compiler/nodeset_compiler.py
-                       ${GEN_INTERNAL_HEADERS}
-                       ${GEN_NS0}
-                       ${GEN_BIN_SIZE}
-                       ${GEN_IGNORE}
-                       ${TYPES_ARRAY_LIST}
-                       ${DEPENDS_FILE_LIST}
-                       ${FILE_LIST}
-                       ${UA_GEN_NS_OUTPUT_DIR}/namespace${FILE_SUFFIX}
-                       DEPENDS
-                       ${open62541_TOOLS_DIR}/nodeset_compiler/nodeset_compiler.py
-                       ${open62541_TOOLS_DIR}/nodeset_compiler/nodes.py
-                       ${open62541_TOOLS_DIR}/nodeset_compiler/nodeset.py
-                       ${open62541_TOOLS_DIR}/nodeset_compiler/datatypes.py
-                       ${open62541_TOOLS_DIR}/nodeset_compiler/backend_open62541.py
-                       ${open62541_TOOLS_DIR}/nodeset_compiler/backend_open62541_nodes.py
-                       ${open62541_TOOLS_DIR}/nodeset_compiler/backend_open62541_datatypes.py
-                       ${UA_GEN_NS_FILE}
-                       ${UA_GEN_NS_DEPENDS_NS}
-                       )
-
-    add_custom_target(${UA_GEN_NS_TARGET_PREFIX}-${TARGET_SUFFIX}
-                      DEPENDS
-                      ${UA_GEN_NS_OUTPUT_DIR}/namespace${FILE_SUFFIX}.c
-                      ${UA_GEN_NS_OUTPUT_DIR}/namespace${FILE_SUFFIX}.h)
-    if (UA_GEN_NS_DEPENDS_TARGET)
-        add_dependencies(${UA_GEN_NS_TARGET_PREFIX}-${TARGET_SUFFIX} ${UA_GEN_NS_DEPENDS_TARGET})
-    endif()
-
-    if(UA_COMPILE_AS_CXX)
-        set_source_files_properties(${UA_GEN_NS_OUTPUT_DIR}/namespace${FILE_SUFFIX}.c PROPERTIES LANGUAGE CXX)
-    endif()
-
-    string(REPLACE "-" "_" UA_GEN_NS_NAME ${UA_GEN_NS_NAME})
-    string(TOUPPER "${UA_GEN_NS_NAME}" GEN_NAME_UPPER)
-
-    set_property(GLOBAL PROPERTY "UA_GEN_NS_DEPENDS_FILE_${UA_GEN_NS_NAME}" ${UA_GEN_NS_DEPENDS_NS} ${UA_GEN_NS_FILE})
-    set_property(GLOBAL PROPERTY "UA_GEN_NS_DEPENDS_TYPES_${UA_GEN_NS_NAME}" ${UA_GEN_NS_DEPENDS_TYPES} ${UA_GEN_NS_TYPES_ARRAY})
-
-    set(UA_NODESET_${GEN_NAME_UPPER}_SOURCES "${UA_GEN_NS_OUTPUT_DIR}/namespace${FILE_SUFFIX}.c" CACHE INTERNAL "UA_NODESET_${GEN_NAME_UPPER} source files")
-    set(UA_NODESET_${GEN_NAME_UPPER}_HEADERS "${UA_GEN_NS_OUTPUT_DIR}/namespace${FILE_SUFFIX}.h" CACHE INTERNAL "UA_NODESET_${GEN_NAME_UPPER} header files")
-    set(UA_NODESET_${GEN_NAME_UPPER}_TARGET "${UA_GEN_NS_TARGET_PREFIX}-${TARGET_SUFFIX}" CACHE INTERNAL "UA_NODESET_${GEN_NAME_UPPER} target")
-
-endfunction()
-
-
-# --------------- Generate Nodeset and Datatypes ---------------------
-#
-# Generates C code for the given NodeSet2.xml and Datatype file.
-# This C code can be used to initialize the server.
-#
-# This is a combination of the ua_generate_datatypes, ua_generate_nodeset, and
-# ua_generate_nodeid_header macros.
-# This function can also be used to just create a nodeset without datatypes by
-# omitting the CSV, BSD, and NAMESPACE_IDX parameter.
-# If only one of the previous parameters is given, all of them are required.
-#
-# It is possible to define dependencies of nodesets by using the DEPENDS argument.
-# E.g. the PLCOpen nodeset depends on the 'di' nodeset. Thus it is enough to just
-# pass 'DEPENDS di' to the function. The 'di' nodeset then first needs to be generated
-# with this function or with the ua_generate_nodeset function.
-#
-# The resulting cmake target will be named like this:
-#   open62541-generator-ns-${NAME}
-#
-# The following arguments are accepted:
-#
-#   Options:
-#
-#   INTERNAL        Include internal headers. Required if custom datatypes are added.
-#
-#   Arguments taking one value:
-#
-#   NAME            Short name of the nodeset. E.g. 'di'
-#   FILE_NS         Path to the NodeSet2.xml file. Multiple values can be passed. These nodesets will be combined into one output.
-#
-#   [FILE_CSV]      Optional path to the .csv file containing the node ids, e.g. 'OpcUaDiModel.csv'
-#   [FILE_BSD]      Optional path to the .bsd file containing the type definitions, e.g. 'Opc.Ua.Di.Types.bsd'. Multiple files can be
-#                   passed which will all combined to one resulting code.
-#   [NAMESPACE_IDX] Optional namespace index of the nodeset, when it is loaded into the server. This parameter is mandatory if FILE_CSV
-#                   or FILE_BSD is set. See ua_generate_datatypes function.
-#   [TARGET_PREFIX] Optional prefix for the resulting targets. Default `open62541-generator`
-#
-#   Arguments taking multiple values:
-#   [DEPENDS]       Optional list of nodeset names on which this nodeset depends. These names must match any name from a previous
-#                   call to this funtion. E.g. 'di' if you are generating the 'plcopen' nodeset
-#
-#
-function(ua_generate_nodeset_and_datatypes)
-
-    set(options INTERNAL)
-    set(oneValueArgs NAME FILE_NS FILE_CSV FILE_BSD NAMESPACE_IDX OUTPUT_DIR TARGET_PREFIX)
-    set(multiValueArgs DEPENDS)
-    cmake_parse_arguments(UA_GEN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
-
-    if(NOT DEFINED open62541_TOOLS_DIR)
-        message(FATAL_ERROR "open62541_TOOLS_DIR must point to the open62541 tools directory")
-    endif()
-
-    if(NOT DEFINED open62541_NODESET_DIR)
-        message(FATAL_ERROR "open62541_NODESET_DIR must point to the open62541/deps/ua-nodeset directory")
-    endif()
-
-    # ------ Argument checking -----
-    if(NOT UA_GEN_NAME OR "${UA_GEN_NAME}" STREQUAL "")
-        message(FATAL_ERROR "ua_generate_nodeset_and_datatypes function requires a value for the NAME argument")
-    endif()
-    string(TOUPPER "${UA_GEN_NAME}" GEN_NAME_UPPER)
-
-    if(NOT UA_GEN_FILE_NS OR "${UA_GEN_FILE_NS}" STREQUAL "")
-        message(FATAL_ERROR "ua_generate_nodeset_and_datatypes function requires a value for the FILE_NS argument")
-    endif()
-
-    if((NOT UA_GEN_FILE_CSV OR "${UA_GEN_FILE_CSV}" STREQUAL "") AND
-    (NOT "${UA_GEN_FILE_BSD}" STREQUAL "" OR
-        NOT "${UA_GEN_NAMESPACE_IDX}" STREQUAL ""))
-        message(FATAL_ERROR "ua_generate_nodeset_and_datatypes function requires FILE_CSV argument if any of FILE_BSD or NAMESPACE_IDX are set")
-    endif()
-
-    if((NOT UA_GEN_FILE_BSD OR "${UA_GEN_FILE_BSD}" STREQUAL "") AND
-    (NOT "${UA_GEN_FILE_CSV}" STREQUAL "" OR
-        NOT "${UA_GEN_NAMESPACE_IDX}" STREQUAL ""))
-        message(FATAL_ERROR "ua_generate_nodeset_and_datatypes function requires FILE_BSD argument if any of FILE_CSV or NAMESPACE_IDX are set")
-    endif()
-
-    if(NOT UA_GEN_NAMESPACE_IDX OR "${UA_GEN_NAMESPACE_IDX}" STREQUAL "" AND
-    (NOT "${UA_GEN_FILE_CSV}" STREQUAL "" OR
-        NOT "${UA_GEN_FILE_BSD}" STREQUAL ""))
-        message(FATAL_ERROR "ua_generate_nodeset_and_datatypes function requires NAMESPACE_IDX argument if any of FILE_CSV or FILE_BSD are set")
-    endif()
-
-    # Set default value for output dir
-    if(NOT UA_GEN_OUTPUT_DIR OR "${UA_GEN_OUTPUT_DIR}" STREQUAL "")
-        set(UA_GEN_OUTPUT_DIR ${PROJECT_BINARY_DIR}/src_generated/open62541)
-    endif()
-    # Set default target prefix
-    if(NOT UA_GEN_TARGET_PREFIX OR "${UA_GEN_TARGET_PREFIX}" STREQUAL "")
-        set(UA_GEN_TARGET_PREFIX "open62541-generator")
-    endif()
-
-    set(NODESET_DEPENDS_TARGET "")
-    set(NODESET_TYPES_ARRAY "UA_TYPES")
-
-    if(NOT "${UA_GEN_FILE_BSD}" STREQUAL "")
-        # Generate Datatypes for nodeset
-        ua_generate_datatypes(
-            NAME "types_${UA_GEN_NAME}"
-            TARGET_PREFIX "${UA_GEN_TARGET_PREFIX}"
-            TARGET_SUFFIX "types-${UA_GEN_NAME}"
-            NAMESPACE_IDX ${UA_GEN_NAMESPACE_IDX}
-            FILE_CSV "${UA_GEN_FILE_CSV}"
-            FILES_BSD "${UA_GEN_FILE_BSD}"
-            OUTPUT_DIR "${UA_GEN_OUTPUT_DIR}"
-        )
-        set(NODESET_DEPENDS_TARGET "${UA_GEN_TARGET_PREFIX}-types-${UA_GEN_NAME}")
-        set(NODESET_TYPES_ARRAY "UA_TYPES_${GEN_NAME_UPPER}")
-
-        ua_generate_nodeid_header(
-            NAME "${UA_GEN_NAME}_nodeids"
-            ID_PREFIX "${GEN_NAME_UPPER}"
-            FILE_CSV "${UA_GEN_FILE_CSV}"
-            OUTPUT_DIR "${UA_GEN_OUTPUT_DIR}"
-            TARGET_PREFIX "${UA_GEN_TARGET_PREFIX}"
-            TARGET_SUFFIX "ids-${UA_GEN_NAME}"
-        )
-        set(NODESET_DEPENDS_TARGET ${NODESET_DEPENDS_TARGET} "${UA_GEN_TARGET_PREFIX}-ids-${UA_GEN_NAME}")
-    endif()
-
-    # Create a list of nodesets on which this nodeset depends on
-    if (NOT UA_GEN_DEPENDS OR "${UA_GEN_DEPENDS}" STREQUAL "" )
-        set(NODESET_DEPENDS "${open62541_NODESET_DIR}/Schema/Opc.Ua.NodeSet2.xml")
-        set(TYPES_DEPENDS "UA_TYPES")
-    else()
-        foreach(f ${UA_GEN_DEPENDS})
-          if(EXISTS ${f})
-            set(NODESET_DEPENDS ${NODESET_DEPENDS} "${f}")
-          else()
-            string(REPLACE "-" "_" DEPENDS_NAME "${f}")
-            get_property(DEPENDS_FILE GLOBAL PROPERTY "UA_GEN_NS_DEPENDS_FILE_${DEPENDS_NAME}")
-            if(NOT DEPENDS_FILE OR "${DEPENDS_FILE}" STREQUAL "")
-                message(FATAL_ERROR "Nodeset dependency ${f} needs to be generated before ${UA_GEN_NAME}")
-            endif()
-
-            set(NODESET_DEPENDS ${NODESET_DEPENDS} "${DEPENDS_FILE}")
-            get_property(DEPENDS_TYPES GLOBAL PROPERTY "UA_GEN_NS_DEPENDS_TYPES_${DEPENDS_NAME}")
-            set(TYPES_DEPENDS ${TYPES_DEPENDS} "${DEPENDS_TYPES}")
-            set(NODESET_DEPENDS_TARGET ${NODESET_DEPENDS_TARGET} "${UA_GEN_TARGET_PREFIX}-ns-${f}")
-          endif()
-        endforeach()
-    endif()
-
-
-    set(NODESET_INTERNAL "")
-    if (${UA_GEN_INTERNAL})
-        set(NODESET_INTERNAL "INTERNAL")
-    endif()
-
-    ua_generate_nodeset(
-        NAME "${UA_GEN_NAME}"
-        FILE "${UA_GEN_FILE_NS}"
-        TYPES_ARRAY "${NODESET_TYPES_ARRAY}"
-        ${NODESET_INTERNAL}
-        DEPENDS_TYPES ${TYPES_DEPENDS}
-        DEPENDS_NS ${NODESET_DEPENDS}
-        DEPENDS_TARGET ${NODESET_DEPENDS_TARGET}
-        OUTPUT_DIR "${UA_GEN_OUTPUT_DIR}"
-        TARGET_PREFIX "${UA_GEN_TARGET_PREFIX}"
-    )
-
-endfunction()
diff --git a/ext/open62541/tools/cmake/open62541Config.cmake.in b/ext/open62541/tools/cmake/open62541Config.cmake.in
deleted file mode 100644
index c7b0346..0000000
--- a/ext/open62541/tools/cmake/open62541Config.cmake.in
+++ /dev/null
@@ -1,22 +0,0 @@
-@PACKAGE_INIT@
-
-include("${CMAKE_CURRENT_LIST_DIR}/open62541Targets.cmake")
-
-set (open62541_TOOLS_DIR @PACKAGE_open62541_install_tools_dir@ CACHE PATH "Path to the directory that contains the tooling of the stack")
-set (open62541_NODESET_DIR @PACKAGE_open62541_install_nodeset_dir@ CACHE PATH "Path to the directory that contains the OPC UA schema repository")
-
-include(CMakeFindDependencyMacro)
-find_dependency(PythonInterp REQUIRED)
-
-include("${CMAKE_CURRENT_LIST_DIR}/open62541Macros.cmake")
-
-set(open62541_COMPONENTS_ALL @open62541_enabled_components@)
-
-foreach(_comp ${open62541_FIND_COMPONENTS})
-  list (FIND open62541_COMPONENTS_ALL "${_comp}" _index)
-  if (${_index} LESS 0)
-    set(open62541_FOUND False)
-    set(open62541_NOTFOUND_MESSAGE "Unsupported open62541 component: ${_comp}")
-    message(WARNING "${open62541_NOTFOUND_MESSAGE}")
-  endif()
-endforeach()
diff --git a/ext/open62541/tools/gdb-prettyprint.py b/ext/open62541/tools/gdb-prettyprint.py
deleted file mode 100644
index ebc4793..0000000
--- a/ext/open62541/tools/gdb-prettyprint.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env python
-
-# WARNING: This is till work in progress
-#
-# Load into gdb with 'source ../tools/gdb-prettyprint.py'
-# Make sure to also apply 'set print pretty on' to get nice structure printouts
-
-class String:
-    def __init__(self, val):
-        self.val = val
-
-    def to_string (self):
-        length = int(self.val['length'])
-        data = self.val['data']
-
-        if int(data) == 0:
-            return "UA_STRING_NULL"
-        inferior = gdb.selected_inferior()
-        text = inferior.read_memory(data, length).tobytes().decode(errors='replace')
-        return "\"%s\"" % text
-
-class LocalizedText:
-    def __init__(self, val):
-        self.val = val
-
-    def to_string (self):
-        return "UA_LocalizedText(%s, %s)" % (self.val['locale'], self.val['text'])
-
-class QualifiedName:
-    def __init__(self, val):
-        self.val = val
-
-    def to_string (self):
-        return "UA_QualifiedName(%s, %s)" % (int(self.val['namespaceIndex']), self.val['name'])
-
-class Guid:
-    def __init__(self, val):
-        self.val = val
-
-    def to_string (self):
-        return "UA_Guid()"
-
-class NodeId:
-    def __init__(self, val):
-        self.val = val
-
-    def to_string (self):
-        return "UA_NodeId()"
-
-class Variant:
-    def __init__(self, val):
-        self.val = val
-
-    def to_string (self):
-        return "UA_Variant()"
-
-def lookup_type (val):
-    if str(val.type) == 'UA_String':
-        return String(val)
-    if str(val.type) == 'UA_LocalizedText':
-        return LocalizedText(val)
-    if str(val.type) == 'UA_QualifiedName':
-        return QualifiedName(val)
-    if str(val.type) == 'UA_Guid':
-        return Guid(val)
-    if str(val.type) == 'UA_NodeId':
-        return NodeId(val)
-    if str(val.type) == 'UA_Variant':
-        return Variant(val)
-    return None
-
-gdb.pretty_printers.append (lookup_type)
diff --git a/ext/open62541/tools/generate_datatypes.py b/ext/open62541/tools/generate_datatypes.py
deleted file mode 100644
index d5432ec..0000000
--- a/ext/open62541/tools/generate_datatypes.py
+++ /dev/null
@@ -1,709 +0,0 @@
-#!/usr/bin/env python
-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-from __future__ import print_function
-import sys
-import time
-import platform
-import getpass
-from collections import OrderedDict
-import re
-import xml.etree.ElementTree as etree
-import itertools
-import argparse
-import csv
-import json
-from nodeset_compiler.opaque_type_mapping import get_base_type_for_opaque as get_base_type_for_opaque_ns0
-
-types = OrderedDict() # contains types that were already parsed
-types_imported = OrderedDict() # contains types that were already parsed and marked as imported types (do not write to source code)
-typedescriptions = {} # contains type nodeids
-user_opaque_type_mapping = {} # contains user defined opaque type mapping
-
-excluded_types = ["NodeIdType", "InstanceNode", "TypeNode", "Node", "ObjectNode",
-                  "ObjectTypeNode", "VariableNode", "VariableTypeNode", "ReferenceTypeNode",
-                  "MethodNode", "ViewNode", "DataTypeNode",
-                  "NumericRange", "NumericRangeDimensions",
-                  "UA_ServerDiagnosticsSummaryDataType", "UA_SamplingIntervalDiagnosticsDataType",
-                  "UA_SessionSecurityDiagnosticsDataType", "UA_SubscriptionDiagnosticsDataType",
-                  "UA_SessionDiagnosticsDataType"]
-
-builtin_types = ["Boolean", "SByte", "Byte", "Int16", "UInt16", "Int32", "UInt32",
-                 "Int64", "UInt64", "Float", "Double", "String", "DateTime", "Guid",
-                 "ByteString", "XmlElement", "NodeId", "ExpandedNodeId", "StatusCode",
-                 "QualifiedName", "LocalizedText", "ExtensionObject", "DataValue",
-                 "Variant", "DiagnosticInfo"]
-
-# If set to False, every defined datatype must have a corresponding ID entry in the csv file
-isInternalTypes = False
-
-# Some types can be memcpy'd off the binary stream. That's especially important
-# for arrays. But we need to check if they contain padding and whether the
-# endianness is correct. This dict gives the C-statement that must be true for the
-# type to be overlayable. Parsed types are added if they apply.
-builtin_overlayable = {"Boolean": "true",
-                       "SByte": "true", "Byte": "true",
-                       "Int16": "UA_BINARY_OVERLAYABLE_INTEGER",
-                       "UInt16": "UA_BINARY_OVERLAYABLE_INTEGER",
-                       "Int32": "UA_BINARY_OVERLAYABLE_INTEGER",
-                       "UInt32": "UA_BINARY_OVERLAYABLE_INTEGER",
-                       "Int64": "UA_BINARY_OVERLAYABLE_INTEGER",
-                       "UInt64": "UA_BINARY_OVERLAYABLE_INTEGER",
-                       "Float": "UA_BINARY_OVERLAYABLE_FLOAT",
-                       "Double": "UA_BINARY_OVERLAYABLE_FLOAT",
-                       "DateTime": "UA_BINARY_OVERLAYABLE_INTEGER",
-                       "StatusCode": "UA_BINARY_OVERLAYABLE_INTEGER",
-                       "Guid": "(UA_BINARY_OVERLAYABLE_INTEGER && " +
-                       "offsetof(UA_Guid, data2) == sizeof(UA_UInt32) && " +
-                       "offsetof(UA_Guid, data3) == (sizeof(UA_UInt16) + sizeof(UA_UInt32)) && " +
-                       "offsetof(UA_Guid, data4) == (2*sizeof(UA_UInt32)))"}
-
-whitelistFuncAttrWarnUnusedResult = []  # for instances [ "String", "ByteString", "LocalizedText" ]
-
-# Type aliases
-type_aliases = { "CharArray" : "String" }
-def getTypeName(xmlTypeName):
-    typeName = xmlTypeName[xmlTypeName.find(":")+1:]
-    return type_aliases.get(typeName, typeName)
-
-# Escape C strings:
-def makeCLiteral(value):
-    return re.sub(r'(?<!\\)"', r'\\"', value.replace('\\', r'\\\\').replace('\n', r'\\n').replace('\r', r''))
-
-# Strip invalid characters to create valid C identifiers (variable names etc):
-def makeCIdentifier(value):
-    return re.sub(r'[^\w]', '', value)
-
-def get_base_type_for_opaque(name):
-    if name in user_opaque_type_mapping:
-        return user_opaque_type_mapping[name]
-    else:
-        return get_base_type_for_opaque_ns0(name)
-
-################
-# Type Classes #
-################
-
-class StructMember(object):
-    def __init__(self, name, memberType, isArray):
-        self.name = name
-        self.memberType = memberType
-        self.isArray = isArray
-
-def getNodeidTypeAndId(nodeId):
-    if '=' not in nodeId:
-        return "UA_NODEIDTYPE_NUMERIC, {{{0}}}".format(nodeId)
-    if nodeId.startswith("i="):
-        return "UA_NODEIDTYPE_NUMERIC, {{{0}}}".format(nodeId[2:])
-    if nodeId.startswith("s="):
-        strId = nodeId[2:]
-        return "UA_NODEIDTYPE_STRING, {{ .string = UA_STRING_STATIC(\"{id}\") }}".format(id=strId.replace("\"", "\\\""))
-
-
-class Type(object):
-    def __init__(self, outname, xml, namespace):
-        self.name = None
-        if xml is not None:
-            self.name = xml.get("Name")
-            self.typeIndex = "UA_" + makeCIdentifier(outname.upper() + "_" + self.name.upper())
-        else:
-            self.typeIndex = makeCIdentifier(outname.upper())
-        self.ns0 = ("true" if namespace == 0 else "false")
-        self.outname = outname
-        self.kind = None
-        self.description = ""
-        self.pointerfree = "false"
-        self.overlayable = "false"
-        self.members = []
-        if xml is not None:
-            for child in xml:
-                if child.tag == "{http://opcfoundation.org/BinarySchema/}Documentation":
-                    self.description = child.text
-                    break
-
-    def datatype_c(self):
-        # xmlEncodingId = "0"
-        binaryEncodingId = "0"
-        if self.name in typedescriptions:
-            description = typedescriptions[self.name]
-            typeid = "{%s, %s}" % (description.namespaceid, getNodeidTypeAndId(description.nodeid))
-            # xmlEncodingId = description.xmlEncodingId
-            binaryEncodingId = description.binaryEncodingId
-        else:
-            if not isInternalTypes:
-                raise RuntimeError("NodeId for " + self.name + " not found in .csv file")
-            else:
-                typeid = "{0, UA_NODEIDTYPE_NUMERIC, {0}}"
-        idName = makeCIdentifier(self.name)
-        return "{\n    UA_TYPENAME(\"%s\") /* .typeName */\n" % idName + \
-            "    " + typeid + ", /* .typeId */\n" + \
-            "    sizeof(UA_" + idName + "), /* .memSize */\n" + \
-            "    " + self.typeIndex + ", /* .typeIndex */\n" + \
-            "    " + self.kind + ", /* .typeKind */\n" + \
-            "    " + self.pointerfree + ", /* .pointerFree */\n" + \
-            "    " + self.overlayable + ", /* .overlayable */\n" + \
-            "    " + str(len(self.members)) + ", /* .membersSize */\n" + \
-            "    " + binaryEncodingId + ", /* .binaryEncodingId */\n" + \
-            "    %s_members" % idName + " /* .members */\n}"
-
-    def members_c(self):
-        idName = makeCIdentifier(self.name)
-        if len(self.members) == 0:
-            return "#define %s_members NULL" % (idName)
-        members = "static UA_DataTypeMember %s_members[%s] = {" % (idName, len(self.members))
-        before = None
-        size = len(self.members)
-        for i, member in enumerate(self.members):
-            memberName = makeCIdentifier(member.name)
-            memberNameCapital = memberName
-            if len(memberName) > 0:
-                memberNameCapital = memberName[0].upper() + memberName[1:]
-            m = "\n{\n    UA_TYPENAME(\"%s\") /* .memberName */\n" % memberNameCapital
-            m += "    UA_%s_%s, /* .memberTypeIndex */\n" % (member.memberType.outname.upper(), makeCIdentifier(member.memberType.name.upper()))
-            m += "    "
-            if not before:
-                m += "0,"
-            else:
-                if member.isArray:
-                    m += "offsetof(UA_%s, %sSize)" % (idName, memberName)
-                else:
-                    m += "offsetof(UA_%s, %s)" % (idName, memberName)
-                m += " - offsetof(UA_%s, %s)" % (idName, makeCIdentifier(before.name))
-                if before.isArray:
-                    m += " - sizeof(void*),"
-                else:
-                    m += " - sizeof(UA_%s)," % makeCIdentifier(before.memberType.name)
-            m += " /* .padding */\n"
-            m += "    %s, /* .namespaceZero */\n" % member.memberType.ns0
-            m += ("    true" if member.isArray else "    false") + " /* .isArray */\n}"
-            if i != size:
-                m += ","
-            members += m
-            before = member
-        return members + "};"
-
-    def datatype_ptr(self):
-        return "&UA_" + self.outname.upper() + "[UA_" + makeCIdentifier(self.outname.upper() + "_" + self.name.upper()) + "]"
-
-    def functions_c(self):
-        idName = makeCIdentifier(self.name)
-        funcs = "static UA_INLINE void\nUA_%s_init(UA_%s *p) {\n    memset(p, 0, sizeof(UA_%s));\n}\n\n" % (idName, idName, idName)
-        funcs += "static UA_INLINE UA_%s *\nUA_%s_new(void) {\n    return (UA_%s*)UA_new(%s);\n}\n\n" % (idName, idName, idName, self.datatype_ptr())
-        if self.pointerfree == "true":
-            funcs += "static UA_INLINE UA_StatusCode\nUA_%s_copy(const UA_%s *src, UA_%s *dst) {\n    *dst = *src;\n    return UA_STATUSCODE_GOOD;\n}\n\n" % (idName, idName, idName)
-            funcs += "static UA_INLINE void\nUA_%s_deleteMembers(UA_%s *p) {\n    memset(p, 0, sizeof(UA_%s));\n}\n\n" % (idName, idName, idName)
-            funcs += "static UA_INLINE void\nUA_%s_clear(UA_%s *p) {\n    memset(p, 0, sizeof(UA_%s));\n}\n\n" % (idName, idName, idName)
-        else:
-            for entry in whitelistFuncAttrWarnUnusedResult:
-                if idName == entry:
-                    funcs += "UA_INTERNAL_FUNC_ATTR_WARN_UNUSED_RESULT "
-                    break
-
-            funcs += "static UA_INLINE UA_StatusCode\nUA_%s_copy(const UA_%s *src, UA_%s *dst) {\n    return UA_copy(src, dst, %s);\n}\n\n" % (idName, idName, idName, self.datatype_ptr())
-            funcs += "static UA_INLINE void\nUA_%s_deleteMembers(UA_%s *p) {\n    UA_clear(p, %s);\n}\n\n" % (idName, idName, self.datatype_ptr())
-            funcs += "static UA_INLINE void\nUA_%s_clear(UA_%s *p) {\n    UA_clear(p, %s);\n}\n\n" % (idName, idName, self.datatype_ptr())
-        funcs += "static UA_INLINE void\nUA_%s_delete(UA_%s *p) {\n    UA_delete(p, %s);\n}" % (idName, idName, self.datatype_ptr())
-        return funcs
-
-    def encoding_h(self):
-        idName = makeCIdentifier(self.name)
-        enc = "static UA_INLINE size_t\nUA_%s_calcSizeBinary(const UA_%s *src) {\n    return UA_calcSizeBinary(src, %s);\n}\n"
-        enc += "static UA_INLINE UA_StatusCode\nUA_%s_encodeBinary(const UA_%s *src, UA_Byte **bufPos, const UA_Byte *bufEnd) {\n    return UA_encodeBinary(src, %s, bufPos, &bufEnd, NULL, NULL);\n}\n"
-        enc += "static UA_INLINE UA_StatusCode\nUA_%s_decodeBinary(const UA_ByteString *src, size_t *offset, UA_%s *dst) {\n    return UA_decodeBinary(src, offset, dst, %s, NULL);\n}"
-        return enc % tuple(list(itertools.chain(*itertools.repeat([idName, idName, self.datatype_ptr()], 3))))
-
-class BuiltinType(Type):
-    def __init__(self, name):
-        Type.__init__(self, name, None, 0)
-        self.name = name
-        self.ns0 = "true"
-        self.typeIndex = makeCIdentifier("UA_TYPES_" + self.name.upper())
-        self.outname = "types"
-        self.kind = "UA_DATATYPEKIND_" + self.name.upper()
-        self.description = ""
-        self.pointerfree = "false"
-        if self.name in builtin_overlayable.keys():
-            self.pointerfree = "true"
-        self.overlayable = "false"
-        if name in builtin_overlayable:
-            self.overlayable = builtin_overlayable[name]
-        self.members = []
-
-class EnumerationType(Type):
-    def __init__(self, outname, xml, namespace):
-        Type.__init__(self, outname, xml, namespace)
-        self.pointerfree = "true"
-        self.overlayable = "UA_BINARY_OVERLAYABLE_INTEGER"
-        self.members = []
-        self.kind = "UA_DATATYPEKIND_ENUM"
-        self.typeIndex = "UA_TYPES_INT32"
-        self.elements = OrderedDict()
-        for child in xml:
-            if child.tag == "{http://opcfoundation.org/BinarySchema/}EnumeratedValue":
-                self.elements[child.get("Name")] = child.get("Value")
-
-    def typedef_h(self):
-        if sys.version_info[0] < 3:
-            values = self.elements.iteritems()
-        else:
-            values = self.elements.items()
-        return "typedef enum {\n    " + ",\n    ".join(map(lambda kv : makeCIdentifier("UA_" + self.name.upper() + "_" + kv[0].upper()) + \
-                                                           " = " + kv[1], values)) + \
-               ",\n    __UA_{0}_FORCE32BIT = 0x7fffffff\n".format(makeCIdentifier(self.name.upper())) + "} " + \
-               "UA_{0};\nUA_STATIC_ASSERT(sizeof(UA_{0}) == sizeof(UA_Int32), enum_must_be_32bit);".format(makeCIdentifier(self.name))
-
-class OpaqueType(Type):
-    def __init__(self, outname, xml, namespace, baseType):
-        Type.__init__(self, outname, xml, namespace)
-        self.kind = "UA_DATATYPEKIND_" + baseType.upper()
-        self.baseType = baseType
-        self.members = []
-
-    def typedef_h(self):
-        return "typedef UA_" + self.baseType + " UA_%s;" % self.name
-
-class StructType(Type):
-    def __init__(self, outname, xml, namespace):
-        Type.__init__(self, outname, xml, namespace)
-        self.members = []
-        lengthfields = [] # lengthfields of arrays are not included as members
-        for child in xml:
-            if child.get("LengthField"):
-                lengthfields.append(child.get("LengthField"))
-        for child in xml:
-            if not child.tag == "{http://opcfoundation.org/BinarySchema/}Field":
-                continue
-            if child.get("Name") in lengthfields:
-                continue
-            memberName = child.get("Name")
-            memberName = memberName[:1].lower() + memberName[1:]
-            memberTypeName = getTypeName(child.get("TypeName"))
-            memberType = types[memberTypeName]
-            isArray = True if child.get("LengthField") else False
-            self.members.append(StructMember(memberName, memberType, isArray))
-
-        self.pointerfree = "true"
-        self.overlayable = "true"
-        self.kind = "UA_DATATYPEKIND_STRUCTURE"
-        before = None
-        for m in self.members:
-            if m.isArray or m.memberType.pointerfree != "true":
-                self.pointerfree = "false"
-                self.overlayable = "false"
-            else:
-                self.overlayable += "\n\t\t && " + m.memberType.overlayable
-                if before:
-                    self.overlayable += "\n\t\t && offsetof(UA_%s, %s) == (offsetof(UA_%s, %s) + sizeof(UA_%s))" % \
-                                        (makeCIdentifier(self.name), makeCIdentifier(m.name), makeCIdentifier(self.name), makeCIdentifier(before.name), makeCIdentifier(before.memberType.name))
-            if "false" in self.overlayable:
-                self.overlayable = "false"
-            before = m
-
-    def typedef_h(self):
-        if len(self.members) == 0:
-            return "typedef void * UA_%s;" % makeCIdentifier(self.name)
-        returnstr =  "typedef struct {\n"
-        for member in self.members:
-            if member.isArray:
-                returnstr += "    size_t %sSize;\n" % makeCIdentifier(member.name)
-                returnstr += "    UA_%s *%s;\n" % (makeCIdentifier(member.memberType.name), makeCIdentifier(member.name))
-            else:
-                returnstr += "    UA_%s %s;\n" % (makeCIdentifier(member.memberType.name), makeCIdentifier(member.name))
-        return returnstr + "} UA_%s;" % makeCIdentifier(self.name)
-
-#########################
-# Parse Typedefinitions #
-#########################
-
-def parseTypeDefinitions(outname, xmlDescription, namespace, addToTypes=None):
-    def typeReady(element):
-        "Are all member types defined?"
-        for child in element:
-            if child.tag == "{http://opcfoundation.org/BinarySchema/}Field":
-                childname = getTypeName(child.get("TypeName"))
-                if childname not in types:
-                    return False
-        return True
-
-    def unknownTypes(element):
-        "Return all unknown types"
-        unknowns = []
-        for child in element:
-            if child.tag == "{http://opcfoundation.org/BinarySchema/}Field":
-                childname = getTypeName(child.get("TypeName"))
-                if childname not in types:
-                    unknowns.append(childname)
-        return unknowns
-
-    def skipType(name):
-        if name in excluded_types:
-            return True
-        if re.search("NodeId$", name) != None:
-            return True
-        return False
-
-    snippets = {}
-    for typeXml in etree.parse(xmlDescription).getroot():
-        if not typeXml.get("Name"):
-            continue
-        name = typeXml.get("Name")
-        snippets[name] = typeXml
-
-    detectLoop = len(snippets)+1
-    while(len(snippets) > 0):
-        if detectLoop == len(snippets):
-            name, typeXml = (snippets.items())[0]
-            raise RuntimeError("Infinite loop detected trying to processing types " + name + ": unknonwn subtype " + str(unknownTypes(typeXml)))
-        detectLoop = len(snippets)
-        for name, typeXml in list(snippets.items()):
-            if name in types or skipType(name):
-                del snippets[name]
-                continue
-            if not typeReady(typeXml):
-                continue
-            if name in builtin_types:
-                newType = BuiltinType(name)
-            elif typeXml.tag == "{http://opcfoundation.org/BinarySchema/}EnumeratedType":
-                newType = EnumerationType(outname, typeXml, namespace)
-            elif typeXml.tag == "{http://opcfoundation.org/BinarySchema/}OpaqueType":
-                newType = OpaqueType(outname, typeXml, namespace, get_base_type_for_opaque(name)['name'])
-            elif typeXml.tag == "{http://opcfoundation.org/BinarySchema/}StructuredType":
-                newType = StructType(outname, typeXml, namespace)
-            else:
-                raise Exception("Type not known")
-
-            types[name] = newType
-            if addToTypes is not None:
-                addToTypes[name] = newType
-
-            del snippets[name]
-
-##########################
-# Parse TypeDescriptions #
-##########################
-
-class TypeDescription(object):
-    def __init__(self, name, nodeid, namespaceid):
-        self.name = name
-        self.nodeid = nodeid
-        self.namespaceid = namespaceid
-        self.xmlEncodingId = "0"
-        self.binaryEncodingId = "0"
-
-def parseTypeDescriptions(f, namespaceid):
-    definitions = {}
-
-    csvreader = csv.reader(f, delimiter=',')
-    delay_init = []
-
-    for row in csvreader:
-        if len(row) < 3:
-            continue
-        if row[2] == "Object":
-            # Check if node name ends with _Encoding_(DefaultXml|DefaultBinary) and store the node id in the corresponding DataType
-            m = re.match('(.*?)_Encoding_Default(Xml|Binary)$',row[0])
-            if (m):
-                baseType = m.group(1)
-                if baseType not in types:
-                    continue
-
-                delay_init.append({
-                    "baseType": baseType,
-                    "encoding": m.group(2),
-                    "id": row[1]
-                })
-            continue
-        if row[2] != "DataType":
-            continue
-        if row[0] == "BaseDataType":
-            definitions["Variant"] = TypeDescription(row[0], row[1], namespaceid)
-        elif row[0] == "Structure":
-            definitions["ExtensionObject"] = TypeDescription(row[0], row[1], namespaceid)
-        elif row[0] not in types:
-            continue
-        else:
-            definitions[row[0]] = TypeDescription(row[0], row[1], namespaceid)
-    for i in delay_init:
-        if i["baseType"] not in definitions:
-            raise Exception("Type {} not found in definitions file.".format(i["baseType"]))
-        if i["encoding"] == "Xml":
-            definitions[i["baseType"]].xmlEncodingId = i["id"]
-        else:
-            definitions[i["baseType"]].binaryEncodingId = i["id"]
-    return definitions
-
-def merge_dicts(*dict_args):
-    """
-    Given any number of dicts, shallow copy and merge into a new dict,
-    precedence goes to key value pairs in latter dicts.
-    """
-    result = {}
-    for dictionary in dict_args:
-        result.update(dictionary)
-    return result
-
-###############################
-# Parse the Command Line Input#
-###############################
-
-parser = argparse.ArgumentParser()
-parser.add_argument('-c', '--type-csv',
-                    metavar="<typeDescriptions>",
-                    type=argparse.FileType('r'),
-                    dest="type_csv",
-                    action='append',
-                    default=[],
-                    help='csv file with type descriptions')
-
-parser.add_argument('--namespace',
-                    type=int,
-                    dest="namespace",
-                    default=0,
-                    help='namespace id of the generated type nodeids (defaults to 0)')
-
-parser.add_argument('-s', '--selected-types',
-                    metavar="<selectedTypes>",
-                    type=argparse.FileType('r'),
-                    dest="selected_types",
-                    action='append',
-                    default=[],
-                    help='file with list of types (among those parsed) to be generated. If not given, all types are generated')
-
-parser.add_argument('--no-builtin',
-                    action='store_true',
-                    dest="no_builtin",
-                    help='Do not generate builtin types')
-
-parser.add_argument('--opaque-map',
-                    metavar="<opaqueTypeMap>",
-                    type=argparse.FileType('r'),
-                    dest="opaque_map",
-                    action='append',
-                    default=[],
-                    help='JSON file with opaque type mapping: { \'typename\': { \'ns\': 0,  \'id\': 7, \'name\': \'UInt32\' }, ... }')
-
-parser.add_argument('--internal',
-                    action='store_true',
-                    dest="internal",
-                    help='Given bsd are internal types which do not have any .csv file')
-
-parser.add_argument('-t', '--type-bsd',
-                    metavar="<typeBsds>",
-                    type=argparse.FileType('r'),
-                    dest="type_bsd",
-                    action='append',
-                    default=[],
-                    help='bsd file with type definitions')
-
-parser.add_argument('-i', '--import',
-                    metavar="<importBsds>",
-                    type=str,
-                    dest="import_bsd",
-                    action='append',
-                    default=[],
-                    help='combination of TYPE_ARRAY#filepath.bsd with type definitions which should be loaded but not exported/generated')
-
-parser.add_argument('outfile',
-                    metavar='<outputFile>',
-                    help='output file w/o extension')
-args = parser.parse_args()
-
-outname = args.outfile.split("/")[-1]
-inname = ', '.join(list(map(lambda x:x.name.split("/")[-1], args.type_bsd)))
-
-isInternalTypes = args.internal
-
-################
-# Create Types #
-################
-
-for builtin in builtin_types:
-    types[builtin] = BuiltinType(builtin)
-
-for f in args.opaque_map:
-    user_opaque_type_mapping.update(json.load(f))
-
-for i in args.import_bsd:
-    (outname_import, file_import) = i.split("#")
-    outname_import = outname_import.lower()
-    if outname_import.startswith("ua_"):
-        outname_import = outname_import[3:]
-    parseTypeDefinitions(outname_import, file_import, args.namespace, addToTypes=types_imported)
-
-for f in args.type_bsd:
-    parseTypeDefinitions(outname, f, args.namespace)
-
-typedescriptions = {}
-for f in args.type_csv:
-    typedescriptions = merge_dicts(typedescriptions, parseTypeDescriptions(f, args.namespace))
-
-# Read the selected data types
-selected_types = []
-for f in args.selected_types:
-    selected_types += list(filter(len, [line.strip() for line in f]))
-# Use all types if none are selected
-if len(selected_types) == 0:
-    selected_types = types.keys()
-
-#############################
-# Write out the Definitions #
-#############################
-
-fh = open(args.outfile + "_generated.h", 'w')
-ff = open(args.outfile + "_generated_handling.h", 'w')
-fe = open(args.outfile + "_generated_encoding_binary.h", 'w')
-fc = open(args.outfile + "_generated.c",'w')
-def printh(string):
-    print(string, end='\n', file=fh)
-def printf(string):
-    print(string, end='\n', file=ff)
-def printe(string):
-    print(string, end='\n', file=fe)
-def printc(string):
-    print(string, end='\n', file=fc)
-
-def iter_types(v):
-    l = None
-    if sys.version_info[0] < 3:
-        l = list(v.itervalues())
-    else:
-        l = list(v.values())
-    if len(selected_types) > 0:
-        l = list(filter(lambda t: t.name in selected_types, l))
-    if args.no_builtin:
-        l = list(filter(lambda t: type(t) != BuiltinType, l))
-    l = list(filter(lambda t: t.name not in types_imported, l))
-    return l
-
-################
-# Print Header #
-################
-
-printh('''/* Generated from ''' + inname + ''' with script ''' + sys.argv[0] + '''
- * on host ''' + platform.uname()[1] + ''' by user ''' + getpass.getuser() + \
-       ''' at ''' + time.strftime("%Y-%m-%d %I:%M:%S") + ''' */
-
-#ifndef ''' + outname.upper() + '''_GENERATED_H_
-#define ''' + outname.upper() + '''_GENERATED_H_
-
-#ifdef UA_ENABLE_AMALGAMATION
-#include "open62541.h"
-#else
-#include <open62541/types.h>
-''' + ('#include <open62541/types_generated.h>\n' if outname != "types" else '') + '''
-#endif
-
-_UA_BEGIN_DECLS
-
-''')
-
-filtered_types = iter_types(types)
-
-printh('''/**
- * Every type is assigned an index in an array containing the type descriptions.
- * These descriptions are used during type handling (copying, deletion,
- * binary encoding, ...). */''')
-printh("#define UA_" + outname.upper() + "_COUNT %s" % (str(len(filtered_types))))
-printh("extern UA_EXPORT const UA_DataType UA_" + outname.upper() + "[UA_" + outname.upper() + "_COUNT];")
-
-for i, t in enumerate(filtered_types):
-    printh("\n/**\n * " +  t.name)
-    printh(" * " + "^" * len(t.name))
-    if t.description == "":
-        printh(" */")
-    else:
-        printh(" * " + t.description + " */")
-    if type(t) != BuiltinType:
-        printh(t.typedef_h() + "\n")
-    printh("#define UA_" + makeCIdentifier(outname.upper() + "_" + t.name.upper()) + " " + str(i))
-
-printh('''
-
-_UA_END_DECLS
-
-#endif /* %s_GENERATED_H_ */''' % outname.upper())
-
-##################
-# Print Handling #
-##################
-
-printf('''/* Generated from ''' + inname + ''' with script ''' + sys.argv[0] + '''
- * on host ''' + platform.uname()[1] + ''' by user ''' + getpass.getuser() + \
-       ''' at ''' + time.strftime("%Y-%m-%d %I:%M:%S") + ''' */
-
-#ifndef ''' + outname.upper() + '''_GENERATED_HANDLING_H_
-#define ''' + outname.upper() + '''_GENERATED_HANDLING_H_
-
-#include "''' + outname + '''_generated.h"
-
-_UA_BEGIN_DECLS
-
-#if defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wmissing-field-initializers"
-# pragma GCC diagnostic ignored "-Wmissing-braces"
-#endif
-''')
-
-for t in filtered_types:
-    printf("\n/* " + t.name + " */")
-    printf(t.functions_c())
-
-printf('''
-#if defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6
-# pragma GCC diagnostic pop
-#endif
-
-_UA_END_DECLS
-
-#endif /* %s_GENERATED_HANDLING_H_ */''' % outname.upper())
-
-###########################
-# Print Description Array #
-###########################
-
-printc('''/* Generated from ''' + inname + ''' with script ''' + sys.argv[0] + '''
- * on host ''' + platform.uname()[1] + ''' by user ''' + getpass.getuser() + \
-       ''' at ''' + time.strftime("%Y-%m-%d %I:%M:%S") + ''' */
-
-#include "''' + outname + '''_generated.h"''')
-
-for t in filtered_types:
-    printc("")
-    printc("/* " + t.name + " */")
-    printc(t.members_c())
-
-printc("const UA_DataType UA_%s[UA_%s_COUNT] = {" % (outname.upper(), outname.upper()))
-for t in filtered_types:
-    printc("/* " + t.name + " */")
-    printc(t.datatype_c() + ",")
-printc("};\n")
-
-##################
-# Print Encoding #
-##################
-
-printe('''/* Generated from ''' + inname + ''' with script ''' + sys.argv[0] + '''
- * on host ''' + platform.uname()[1] + ''' by user ''' + getpass.getuser() + \
-       ''' at ''' + time.strftime("%Y-%m-%d %I:%M:%S") + ''' */
-
-#ifdef UA_ENABLE_AMALGAMATION
-# include "open62541.h"
-#else
-# include "ua_types_encoding_binary.h"
-# include "''' + outname + '''_generated.h"
-#endif
-
-''')
-
-for t in filtered_types:
-    printe("\n/* " + t.name + " */")
-    printe(t.encoding_h())
-
-fh.close()
-ff.close()
-fc.close()
-fe.close()
diff --git a/ext/open62541/tools/generate_nodeid_header.py b/ext/open62541/tools/generate_nodeid_header.py
deleted file mode 100644
index c608632..0000000
--- a/ext/open62541/tools/generate_nodeid_header.py
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env python
-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this 
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-from __future__ import print_function
-import sys
-import argparse
-from io import open
-
-parser = argparse.ArgumentParser()
-parser.add_argument('statuscodes', help='path/to/Opc.Ua.NodeIds.csv')
-parser.add_argument('outfile', help='outfile w/o extension')
-parser.add_argument('namespace', help='NS0')
-args = parser.parse_args()
-
-rows = []
-with open(args.statuscodes, mode="rt") as f:
-    lines = f.readlines()
-    for l in lines:
-        rows.append(tuple(l.strip().split(',')))
-
-fh = open(args.outfile + ".h", "wt", encoding='utf8')
-def printh(string):
-    print(string, end=u'\n', file=fh)
-
-#########################
-# Print the header file #
-#########################
-
-printh(u'''/*---------------------------------------------------------
- * Autogenerated -- do not modify
- * Generated from {0} with script {1}
- *-------------------------------------------------------*/
-
-#ifndef UA_NODEIDS_{2}_H_
-#define UA_NODEIDS_{2}_H_
-
-/**
- * Namespace Zero NodeIds
- * ----------------------
- * Numeric identifiers of standard-defined nodes in namespace zero. The
- * following definitions are autogenerated from the ``{0}`` file */
-'''.format(args.statuscodes, sys.argv[0], args.namespace))
-
-for row in rows:
-    printh(u"#define UA_{namespace}ID_{name} {id} /* {description} */".format(namespace=args.namespace, name=row[0].upper(), id=row[1], description=row[2]))
-
-printh(u'''#endif /* UA_NODEIDS_{0}_H_ */ '''.format(args.namespace))
-
-fh.close()
diff --git a/ext/open62541/tools/generate_statuscode_descriptions.py b/ext/open62541/tools/generate_statuscode_descriptions.py
deleted file mode 100644
index 39ed3a0..0000000
--- a/ext/open62541/tools/generate_statuscode_descriptions.py
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/usr/bin/env python
-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this 
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-from __future__ import print_function
-import sys
-import argparse
-from io import open
-
-parser = argparse.ArgumentParser()
-parser.add_argument('statuscodes', help='path/to/Opc.Ua.StatusCodes.csv')
-parser.add_argument('outfile', help='outfile w/o extension')
-args = parser.parse_args()
-
-rows = []
-with open(args.statuscodes, mode="rt") as f:
-    lines = f.readlines()
-    for l in lines:
-        rows.append(tuple(l.strip().split(',')))
-
-fh = open(args.outfile + ".h", "wt", encoding='utf8')
-fc = open(args.outfile + ".c", "wt", encoding='utf8')
-def printh(string):
-    print(string, end=u'\n', file=fh)
-def printc(string):
-    print(string, end=u'\n', file=fc)
-
-#########################
-# Print the header file #
-#########################
-
-printh(u'''/*---------------------------------------------------------
- * Autogenerated -- do not modify
- * Generated from %s with script %s
- *-------------------------------------------------------*/
-
-/**
- * .. _statuscodes:
- *
- * StatusCodes
- * -----------
- * StatusCodes are extensively used in the OPC UA protocol and in the open62541
- * API. They are represented by the :ref:`statuscode` data type. The following
- * definitions are autogenerated from the ``Opc.Ua.StatusCodes.csv`` file provided
- * with the OPC UA standard. */
-
-/* These StatusCodes are manually generated. */
-#define UA_STATUSCODE_GOOD 0x00
-#define UA_STATUSCODE_INFOTYPE_DATAVALUE 0x00000400
-#define UA_STATUSCODE_INFOBITS_OVERFLOW 0x00000080
-''' % (args.statuscodes, sys.argv[0]))
-
-for row in rows:
-    printh(u"/* %s */\n#define UA_STATUSCODE_%s %s\n" % (row[2], row[0].upper(), row[1]))
-
-#########################
-# Print the source file #
-#########################
-
-printc(u'''/**********************************************************
- * Autogenerated -- do not modify
- * Generated from %s with script %s
- *********************************************************/
-
-#include <open62541/types.h>''' % (args.statuscodes, sys.argv[0]))
-
-count = 2 + len(rows)
-
-printc(u'''
-typedef struct {
-    UA_StatusCode code;
-    const char *name;
-} UA_StatusCodeName;
-
-#ifndef UA_ENABLE_STATUSCODE_DESCRIPTIONS
-static const char * emptyStatusCodeName = "";
-const char * UA_StatusCode_name(UA_StatusCode code) {
-    return emptyStatusCodeName;
-}
-#else
-static const size_t statusCodeDescriptionsSize = %s;
-static const UA_StatusCodeName statusCodeDescriptions[%i] = {
-    {UA_STATUSCODE_GOOD, \"Good\"},''' % (count, count))
-
-for row in rows:
-    printc(u"    {UA_STATUSCODE_%s, \"%s\"}," % (row[0].upper(), row[0]))
-printc(u'''    {0xffffffff, "Unknown StatusCode"}
-};
-
-const char * UA_StatusCode_name(UA_StatusCode code) {
-    for (size_t i = 0; i < statusCodeDescriptionsSize; ++i) {
-        if (statusCodeDescriptions[i].code == code)
-            return statusCodeDescriptions[i].name;
-    }
-    return statusCodeDescriptions[statusCodeDescriptionsSize-1].name;
-}
-
-#endif''')
-
-fc.close()
-fh.close()
diff --git a/ext/open62541/tools/nodeset_compiler/NodeID_NS0_Base.txt b/ext/open62541/tools/nodeset_compiler/NodeID_NS0_Base.txt
deleted file mode 100644
index 3a15fc4..0000000
--- a/ext/open62541/tools/nodeset_compiler/NodeID_NS0_Base.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-i=24

-i=31

-i=32

-i=33

-i=34

-i=35

-i=36

-i=37

-i=38

-i=39

-i=40

-i=41

-i=44

-i=45

-i=45

-i=46

-i=47

-i=48

-i=49

-i=58

-i=61

-i=62

-i=63

-i=68

-i=84

-i=85

-i=86

-i=87

-i=88

-i=89

-i=90

-i=91

-i=3048

diff --git a/ext/open62541/tools/nodeset_compiler/README.md b/ext/open62541/tools/nodeset_compiler/README.md
deleted file mode 100644
index 887940f..0000000
--- a/ext/open62541/tools/nodeset_compiler/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# open62541 nodeset Compiler
-
-The nodeset compiler is a collection of python scripts that can parse OPC UA XML Namespace definition files and transform them into a class representation. This facilitates both reprinting the namespace in a different non-XML format (such as C-Code or DOT) and analysis of the namespace structure.
-
-The initial implementation has been contributed by a research project of the chair for Process Control Systems Engineering of the TU Dresden. It was not strictly speaking created as a C generator, but could be easily modified to fulfill this role for open62541. Later on it was extended and improved by the core developers of open62541.
-
-## Documentation
-
-Usage documentation and How-Tos can be found on the webpage: <https://open62541.org/doc/current/nodeset_compiler.html> 
diff --git a/ext/open62541/tools/nodeset_compiler/__init__.py b/ext/open62541/tools/nodeset_compiler/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/ext/open62541/tools/nodeset_compiler/__init__.py
+++ /dev/null
diff --git a/ext/open62541/tools/nodeset_compiler/backend_graphviz.py b/ext/open62541/tools/nodeset_compiler/backend_graphviz.py
deleted file mode 100644
index 213e543..0000000
--- a/ext/open62541/tools/nodeset_compiler/backend_graphviz.py
+++ /dev/null
@@ -1,160 +0,0 @@
-from nodeset import *
-import graphviz as gv
-import codecs
-
-def nodePrintDot(node):
-    cleanname = "node_" + str(node.id).replace(";", "").replace("=", "")
-    dot = cleanname + " [label = \"{" + str(node.id) + "|" + str(node.browseName) + \
-          "}\", shape=\"record\"]"
-    for r in node.references:
-        if isinstance(r.target, Node):
-            tgtname = "node_" + str(r.target.id).replace(";", "").replace("=", "")
-            dot = dot + "\n"
-            if r.isForward == True:
-                dot = dot + cleanname + " -> " + tgtname + " [label=\"" + \
-                      str(r.referenceType.browseName) + "\"]\n"
-            else:
-                if len(r.referenceType.inverseName) == 0:
-                    logger.warn("Inverse name of reference is null " + str(r.referenceType.id))
-                dot = dot + cleanname + " -> " + tgtname + \
-                      " [label=\"" + str(r.referenceType.inverseName) + "\"]\n"
-    return dot
-
-def printDotGraphWalk(nodeset, depth=1, filename="out.dot", rootNode=None,
-                      followInverse=False, excludeNodeIds=[]):
-    """ Outputs a graphiz/dot description the nodes centered around rootNode.
-
-        References beginning from rootNode will be followed for depth steps. If
-        "followInverse = True" is passed, then inverse (not Forward) references
-        will also be followed.
-
-        Nodes can be excluded from the graph by passing a list of NodeIds as
-        string representation using excludeNodeIds (ex ["i=53", "ns=2;i=453"]).
-
-        Output is written into filename to be parsed by dot/neato/srfp...
-    """
-    iter = depth
-    processed = []
-    if rootNode is None or not isinstance(rootNode, Node) or not rootNode in nodeset.nodes:
-        root = nodeset.getRoot()
-    else:
-        root = rootNode
-
-    file = codecs.open(filename, 'w+', encoding='utf-8')
-
-    if root is None:
-        return
-
-    file.write("digraph ns {\n")
-    file.write(nodePrintDot(root))
-    refs = []
-    if followInverse == True:
-        refs = root.references  # + root.getInverseReferences()
-    else:
-        for ref in root.references:
-            if ref.isForward:
-                refs.append(ref)
-    while iter > 0:
-        tmp = []
-        for ref in refs:
-            if isinstance(ref.target, NodeId):
-                tgt = nodeset.nodes[ref.target]
-                if not str(tgt.id) in excludeNodeIds:
-                    if not tgt in processed:
-                        file.write(nodePrintDot(tgt))
-                        processed.append(tgt)
-                        if ref.isForward is False and followInverse is True:
-                            for inverseRef in tgt.inverseReferences:
-                                refs.append(inverseRef)
-                            tmp = tmp + tgt.references  # + tgt.getInverseReferences()
-                        elif ref.isForward:
-                            for targetRef in tgt.references:
-                                refs.append(targetRef)
-        refs = tmp
-        iter = iter - 1
-
-    file.write("}\n")
-    file.close()
-
-def getNodeString(node):
-    return node.browseName.name + " (" + str(node.id) + ")"
-
-def getReferenceString(nodeset, ref):
-    refNode = nodeset.nodes[ref.referenceType]
-    return refNode.browseName.name
-
-def getNodeStyle(node):
-    if isinstance(node, ReferenceTypeNode):
-        return {'shape': 'box', 'style': 'filled', 'fillcolor': '1', 'colorscheme': "pastel19"}
-    if isinstance(node, VariableTypeNode):
-        return {'shape': 'box', 'style': 'filled', 'fillcolor': '2', 'colorscheme': "pastel19"}
-    if isinstance(node, ObjectTypeNode):
-        return {'shape': 'box', 'style': 'filled', 'fillcolor': '3', 'colorscheme': "pastel19"}
-    if isinstance(node, DataTypeNode):
-        return {'shape': 'box', 'style': 'filled', 'fillcolor': '4', 'colorscheme': "pastel19"}
-    if isinstance(node, VariableNode):
-        return {'shape': 'ellipse', 'style': 'rounded,filled', 'fillcolor': '5', 'colorscheme': "pastel19"}
-    if isinstance(node, ObjectNode):
-        return {'shape': 'box', 'style': 'rounded,filled', 'fillcolor': '6', 'colorscheme': "pastel19"}
-    if isinstance(node, MethodNode):
-        return {'shape': 'box', 'style': 'rounded,filled', 'fillcolor': '7', 'colorscheme': "pastel19"}
-    if isinstance(node, ViewNode):
-        return {'shape': 'box', 'style': 'rounded,filled', 'fillcolor': '8', 'colorscheme': "pastel19"}
-
-def add_edges(graph, edges):
-    for e in edges:
-        if isinstance(e[0], tuple):
-            graph.edge(*e[0], **e[1])
-        else:
-            graph.edge(*e)
-    return graph
-
-def add_nodes(graph, nodes):
-    for n in nodes:
-        if isinstance(n, tuple):
-            graph.node(n[0], **n[1])
-        else:
-            graph.node(n)
-    return graph
-
-def addReferenceToGraph(nodeset, nodeFrom, nodeTo, reference, graph):
-    add_edges(graph, [((getNodeString(nodeFrom), getNodeString(nodeTo)), {'label': getReferenceString(nodeset, reference)})])
-
-
-def addNodeToGraph(nodeset, node, graph, alreadyAdded=set(), relevantReferences=set(), ignoreNodes=set(), isRoot=False, depth = 0):
-    if node.id in alreadyAdded or node.id in ignoreNodes:
-        return
-    alreadyAdded.add(node.id)
-    add_nodes(graph, [(getNodeString(node), getNodeStyle(node))])
-    for ref in node.references:
-        if ref.referenceType in relevantReferences and ref.isForward:
-            targetNode = nodeset.nodes[ref.target]
-            if targetNode.id in ignoreNodes:
-                continue
-            addNodeToGraph(nodeset, targetNode, graph, alreadyAdded, depth=depth+1, relevantReferences=relevantReferences,
-                           ignoreNodes = ignoreNodes)
-            addReferenceToGraph(nodeset, node, targetNode, ref, graph)
-
-
-def generateGraphvizCode(nodeset, filename="dependencies", rootNode=None, excludeNodeIds=[]):
-    if rootNode is None or not isinstance(rootNode, Node) or not rootNode in nodeset.nodes:
-        root = nodeset.getRoot()
-    else:
-        root = rootNode
-
-    if root is None:
-        return
-
-    g = gv.dot.Digraph(name="NodeSet Dependency", format='pdf', )
-
-    alreadyAdded = set()
-    ignoreNodes = set()
-    # Ignore some nodes since almost all nodes will point to that which messes up the graph
-    ignoreNodes.add(NodeId("i=68")) # PropertyType
-    ignoreNodes.add(NodeId("i=63")) # BaseDataVariableType
-    ignoreNodes.add(NodeId("i=61")) # FolderType
-    addNodeToGraph(nodeset, root, g, alreadyAdded, isRoot=True,
-                   relevantReferences=nodeset.getRelevantOrderingReferences(),
-                   ignoreNodes=ignoreNodes)
-
-    g.render(filename)
diff --git a/ext/open62541/tools/nodeset_compiler/backend_open62541.py b/ext/open62541/tools/nodeset_compiler/backend_open62541.py
deleted file mode 100644
index d9358ae..0000000
--- a/ext/open62541/tools/nodeset_compiler/backend_open62541.py
+++ /dev/null
@@ -1,319 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-### This Source Code Form is subject to the terms of the Mozilla Public
-### License, v. 2.0. If a copy of the MPL was not distributed with this
-### file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-###    Copyright 2014-2015 (c) TU-Dresden (Author: Chris Iatrou)
-###    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
-###    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
-
-
-from __future__ import print_function
-from os.path import basename
-import logging
-import codecs
-import os
-try:
-    from StringIO import StringIO
-except ImportError:
-    from io import StringIO
-
-import sys
-if sys.version_info[0] >= 3:
-    # strings are already parsed to unicode
-    def unicode(s):
-        return s
-
-logger = logging.getLogger(__name__)
-
-from datatypes import NodeId
-from nodes import *
-from nodeset import *
-from backend_open62541_nodes import generateNodeCode_begin, generateNodeCode_finish, generateReferenceCode
-
-# Kahn's algorithm: https://algocoding.wordpress.com/2015/04/05/topological-sorting-python/
-def sortNodes(nodeset):
-    # reverse hastypedefinition references to treat only forward references
-    hasTypeDef = NodeId("ns=0;i=40")
-    for u in nodeset.nodes.values():
-        for ref in u.references:
-            if ref.referenceType == hasTypeDef:
-                ref.isForward = not ref.isForward
-
-    # Only hierarchical types...
-    relevant_refs = nodeset.getRelevantOrderingReferences()
-
-    # determine in-degree of unfulfilled references
-    L = [node for node in nodeset.nodes.values() if node.hidden]  # ordered list of nodes
-    R = {node.id: node for node in nodeset.nodes.values() if not node.hidden} # remaining nodes
-    in_degree = {id: 0 for id in R.keys()}
-    for u in R.values(): # for each node
-        for ref in u.references:
-            if not ref.referenceType in relevant_refs:
-                continue
-            if nodeset.nodes[ref.target].hidden:
-                continue
-            if ref.isForward:
-                continue
-            in_degree[u.id] += 1
-
-    # Print ReferenceType and DataType nodes first. They may be required even
-    # though there is no reference to them. For example if the referencetype is
-    # used in a reference, it must exist. A Variable node may point to a
-    # DataTypeNode in the datatype attribute and not via an explicit reference.
-
-    Q = [node for node in R.values() if in_degree[node.id] == 0 and
-         (isinstance(node, ReferenceTypeNode) or isinstance(node, DataTypeNode))]
-    while Q:
-        u = Q.pop() # choose node of zero in-degree and 'remove' it from graph
-        L.append(u)
-        del R[u.id]
-
-        for ref in u.references:
-            if not ref.referenceType in relevant_refs:
-                continue
-            if nodeset.nodes[ref.target].hidden:
-                continue
-            if not ref.isForward:
-                continue
-            in_degree[ref.target] -= 1
-            if in_degree[ref.target] == 0:
-                Q.append(R[ref.target])
-
-    # Order the remaining nodes
-    Q = [node for node in R.values() if in_degree[node.id] == 0]
-    while Q:
-        u = Q.pop() # choose node of zero in-degree and 'remove' it from graph
-        L.append(u)
-        del R[u.id]
-
-        for ref in u.references:
-            if not ref.referenceType in relevant_refs:
-                continue
-            if nodeset.nodes[ref.target].hidden:
-                continue
-            if not ref.isForward:
-                continue
-            in_degree[ref.target] -= 1
-            if in_degree[ref.target] == 0:
-                Q.append(R[ref.target])
-
-    # reverse hastype references
-    for u in nodeset.nodes.values():
-        for ref in u.references:
-            if ref.referenceType == hasTypeDef:
-                ref.isForward = not ref.isForward
-
-    if len(L) != len(nodeset.nodes.values()):
-        print(len(L))
-        stillOpen = ""
-        for id in in_degree:
-            if in_degree[id] == 0:
-                continue
-            node = nodeset.nodes[id]
-            stillOpen += node.browseName.name + "/" + str(node.id) + " = " + str(in_degree[id]) + \
-                                                                         " " + str(node.references) + "\r\n"
-        raise Exception("Node graph is circular on the specified references. Still open nodes:\r\n" + stillOpen)
-    return L
-
-###################
-# Generate C Code #
-###################
-
-def generateOpen62541Code(nodeset, outfilename, internal_headers=False, typesArray=[]):
-    outfilebase = basename(outfilename)
-    # Printing functions
-    outfileh = codecs.open(outfilename + ".h", r"w+", encoding='utf-8')
-    outfilec = StringIO()
-
-    def writeh(line):
-        print(unicode(line), end='\n', file=outfileh)
-
-    def writec(line):
-        print(unicode(line), end='\n', file=outfilec)
-
-    additionalHeaders = ""
-    if len(typesArray) > 0:
-        for arr in set(typesArray):
-            if arr == "UA_TYPES":
-                continue
-            # remove ua_ prefix if exists
-            typeFile = arr.lower()
-            typeFile = typeFile[typeFile.startswith("ua_") and len("ua_"):]
-            additionalHeaders += """#include "%s_generated.h"\n""" % typeFile
-
-    # Print the preamble of the generated code
-    writeh("""/* WARNING: This is a generated file.
- * Any manual changes will be overwritten. */
-
-#ifndef %s_H_
-#define %s_H_
-""" % (outfilebase.upper(), outfilebase.upper()))
-    if internal_headers:
-        writeh("""
-#ifdef UA_ENABLE_AMALGAMATION
-# include "open62541.h"
-
-/* The following declarations are in the open62541.c file so here's needed when compiling nodesets externally */
-
-# ifndef UA_INTERNAL //this definition is needed to hide this code in the amalgamated .c file
-
-typedef UA_StatusCode (*UA_exchangeEncodeBuffer)(void *handle, UA_Byte **bufPos,
-                                                 const UA_Byte **bufEnd);
-
-UA_StatusCode
-UA_encodeBinary(const void *src, const UA_DataType *type,
-                UA_Byte **bufPos, const UA_Byte **bufEnd,
-                UA_exchangeEncodeBuffer exchangeCallback,
-                void *exchangeHandle) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-UA_StatusCode
-UA_decodeBinary(const UA_ByteString *src, size_t *offset, void *dst,
-                const UA_DataType *type, size_t customTypesSize,
-                const UA_DataType *customTypes) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-
-size_t
-UA_calcSizeBinary(void *p, const UA_DataType *type);
-
-const UA_DataType *
-UA_findDataTypeByBinary(const UA_NodeId *typeId);
-
-# endif // UA_INTERNAL
-
-#else // UA_ENABLE_AMALGAMATION
-# include <open62541/server.h>
-#endif
-
-%s
-""" % (additionalHeaders))
-    else:
-        writeh("""
-#ifdef UA_ENABLE_AMALGAMATION
-# include "open62541.h"
-#else
-# include <open62541/server.h>
-#endif
-%s
-""" % (additionalHeaders))
-    writeh("""
-_UA_BEGIN_DECLS
-
-extern UA_StatusCode %s(UA_Server *server);
-
-_UA_END_DECLS
-
-#endif /* %s_H_ */""" % \
-           (outfilebase, outfilebase.upper()))
-
-    writec("""/* WARNING: This is a generated file.
- * Any manual changes will be overwritten. */
-
-#include "%s.h"
-""" % (outfilebase))
-
-    # Loop over the sorted nodes
-    logger.info("Reordering nodes for minimal dependencies during printing")
-    sorted_nodes = sortNodes(nodeset)
-    logger.info("Writing code for nodes and references")
-    functionNumber = 0
-
-    printed_ids = set()
-    for node in sorted_nodes:
-        printed_ids.add(node.id)
-
-        if not node.hidden:
-            writec("\n/* " + str(node.displayName) + " - " + str(node.id) + " */")
-            code_global = []
-            code = generateNodeCode_begin(node, nodeset, code_global)
-            if code is None:
-                writec("/* Ignored. No parent */")
-                nodeset.hide_node(node.id)
-                continue
-            else:
-                if len(code_global) > 0:
-                    writec("\n".join(code_global))
-                    writec("\n")
-                writec("\nstatic UA_StatusCode function_" + outfilebase + "_" + str(functionNumber) + "_begin(UA_Server *server, UA_UInt16* ns) {")
-                if isinstance(node, MethodNode):
-                    writec("#ifdef UA_ENABLE_METHODCALLS")
-                writec(code)
-
-        # Print inverse references leading to this node
-        for ref in node.references:
-            if ref.target not in printed_ids:
-                continue
-            if node.hidden and nodeset.nodes[ref.target].hidden:
-                continue
-            if node.parent is not None and ref.target == node.parent.id \
-                and ref.referenceType == node.parentReference.id:
-                # Skip parent reference
-                continue
-            writec(generateReferenceCode(ref))
-
-        if node.hidden:
-            continue
-
-        writec("return retVal;")
-
-        if isinstance(node, MethodNode):
-            writec("#else")
-            writec("return UA_STATUSCODE_GOOD;")
-            writec("#endif /* UA_ENABLE_METHODCALLS */")
-        writec("}");
-
-        writec("\nstatic UA_StatusCode function_" + outfilebase + "_" + str(functionNumber) + "_finish(UA_Server *server, UA_UInt16* ns) {")
-
-        if isinstance(node, MethodNode):
-            writec("#ifdef UA_ENABLE_METHODCALLS")
-        writec("return " + generateNodeCode_finish(node))
-        if isinstance(node, MethodNode):
-            writec("#else")
-            writec("return UA_STATUSCODE_GOOD;")
-            writec("#endif /* UA_ENABLE_METHODCALLS */")
-        writec("}");
-
-        functionNumber = functionNumber + 1
-
-    writec("""
-UA_StatusCode %s(UA_Server *server) {
-UA_StatusCode retVal = UA_STATUSCODE_GOOD;""" % (outfilebase))
-
-    # Generate namespaces (don't worry about duplicates)
-    writec("/* Use namespace ids generated by the server */")
-    writec("UA_UInt16 ns[" + str(len(nodeset.namespaces)) + "];")
-    for i, nsid in enumerate(nodeset.namespaces):
-        nsid = nsid.replace("\"", "\\\"")
-        writec("ns[" + str(i) + "] = UA_Server_addNamespace(server, \"" + nsid + "\");")
-
-    if functionNumber > 0:
-
-        # concatenate method calls with "&&" operator.
-        # The first method which does not return UA_STATUSCODE_GOOD (=0) will cause aborting
-        # the remaining calls and retVal will be set to that error code.
-        writec("bool dummy = (")
-        for i in range(0, functionNumber):
-            writec("!(retVal = function_{outfilebase}_{idx}_begin(server, ns)) &&".format(
-                outfilebase=outfilebase, idx=str(i)))
-
-        for i in reversed(range(0, functionNumber)):
-            writec("!(retVal = function_{outfilebase}_{idx}_finish(server, ns)) {concat}".format(
-                outfilebase=outfilebase, idx=str(i), concat= "&&" if i>0 else ""))
-
-        # use (void)(dummy) to avoid unused variable error.
-        writec("); (void)(dummy);")
-
-    writec("return retVal;\n}")
-    outfileh.flush()
-    os.fsync(outfileh)
-    outfileh.close()
-    fullCode = outfilec.getvalue()
-    outfilec.close()
-
-    outfilec = codecs.open(outfilename + ".c", r"w+", encoding='utf-8')
-    outfilec.write(fullCode)
-    outfilec.flush()
-    os.fsync(outfilec)
-    outfilec.close()
-
diff --git a/ext/open62541/tools/nodeset_compiler/backend_open62541_datatypes.py b/ext/open62541/tools/nodeset_compiler/backend_open62541_datatypes.py
deleted file mode 100644
index 89445ee..0000000
--- a/ext/open62541/tools/nodeset_compiler/backend_open62541_datatypes.py
+++ /dev/null
@@ -1,132 +0,0 @@
-from datatypes import *
-import datetime
-import re
-
-import logging
-
-logger = logging.getLogger(__name__)
-
-def generateBooleanCode(value):
-    if value:
-        return "true"
-    return "false"
-
-# Strip invalid characters to create valid C identifiers (variable names etc):
-def makeCIdentifier(value):
-    return re.sub(r'[^\w]', '', value)
-
-# Escape C strings:
-def makeCLiteral(value):
-    return re.sub(r'(?<!\\)"', r'\\"', value.replace('\\', r'\\').replace('"', r'\"').replace('\n', r'\\n').replace('\r', r''))
-
-def splitStringLiterals(value, splitLength=500):
-    """
-    Split a string literal longer than splitLength into smaller literals.
-    E.g. "Some very long text" will be split into "Some ver" "y long te" "xt"
-    On VS2008 there is a maximum allowed length of a single string literal.
-    """
-    value = value.strip()
-    if len(value) < splitLength or splitLength == 0:
-        return "\"" + re.sub(r'(?<!\\)"', r'\\"', value) + "\""
-    ret = ""
-    tmp = value
-    while len(tmp) > splitLength:
-        ret += "\"" + tmp[:splitLength].replace('"', r'\"') + "\" "
-        tmp = tmp[splitLength:]
-    ret += "\"" + re.sub(r'(?<!\\)"', r'\\"', tmp) + "\" "
-    return ret
-
-def generateStringCode(value, alloc=False):
-    value = makeCLiteral(value)
-    return u"UA_STRING{}({})".format("_ALLOC" if alloc else "", splitStringLiterals(value))
-
-def generateXmlElementCode(value, alloc=False):
-    value = makeCLiteral(value)
-    return u"UA_XMLELEMENT{}({})".format("_ALLOC" if alloc else "", splitStringLiterals(value))
-
-def generateByteStringCode(value, valueName, global_var_code, isPointer):
-    if isinstance(value, str):
-        # PY3 returns a byte array for b64decode, while PY2 returns a string.
-        # Therefore convert it to bytes
-        asciiarray = bytearray()
-        asciiarray.extend(value)
-        asciiarray = list(asciiarray)
-    else:
-        asciiarray = list(value)
-
-    asciiarraystr = str(asciiarray).rstrip(']').lstrip('[')
-    cleanValueName = re.sub(r"->", "__", re.sub(r"\.", "_", valueName))
-    global_var_code.append("static const UA_Byte {cleanValueName}_byteArray[{len}] = {{{data}}};".format(
-        len=len(asciiarray), data=asciiarraystr, cleanValueName=cleanValueName
-    ))
-    # Cast away const with '(UA_Byte *)(void*)(uintptr_t)' since we know that UA_Server_addNode_begin will copy the content
-    return "{instance}{accessor}length = {len};\n{instance}{accessor}data = (UA_Byte *)(void*)(uintptr_t){cleanValueName}_byteArray;"\
-                                                .format(len=len(asciiarray), instance=valueName, cleanValueName=cleanValueName,
-                                                        accessor='->' if isPointer else '.')
-
-def generateLocalizedTextCode(value, alloc=False):
-    vt = makeCLiteral(value.text)
-    return u"UA_LOCALIZEDTEXT{}(\"{}\", {})".format("_ALLOC" if alloc else "", '' if value.locale is None else value.locale,
-                                                   splitStringLiterals(vt))
-
-def generateQualifiedNameCode(value, alloc=False,):
-    vn = makeCLiteral(value.name)
-    return u"UA_QUALIFIEDNAME{}(ns[{}], {})".format("_ALLOC" if alloc else "",
-                                                     str(value.ns), splitStringLiterals(vn))
-
-def generateNodeIdCode(value):
-    if not value:
-        return "UA_NODEID_NUMERIC(0, 0)"
-    if value.i != None:
-        return "UA_NODEID_NUMERIC(ns[%s], %s)" % (value.ns, value.i)
-    elif value.s != None:
-        v = makeCLiteral(value.s)
-        return u"UA_NODEID_STRING(ns[%s], \"%s\")" % (value.ns, v)
-    raise Exception(str(value) + " no NodeID generation for bytestring and guid..")
-
-def generateExpandedNodeIdCode(value):
-    if value.i != None:
-        return "UA_EXPANDEDNODEID_NUMERIC(ns[%s], %s)" % (str(value.ns), str(value.i))
-    elif value.s != None:
-        vs = makeCLiteral(value.s)
-        return u"UA_EXPANDEDNODEID_STRING(ns[%s], \"%s\")" % (str(value.ns), vs)
-    raise Exception(str(value) + " no NodeID generation for bytestring and guid..")
-
-def generateDateTimeCode(value):
-    epoch = datetime.datetime.utcfromtimestamp(0)
-    mSecsSinceEpoch = int((value - epoch).total_seconds() * 1000.0)
-    return "( (UA_DateTime)(" + str(mSecsSinceEpoch) + " * UA_DATETIME_MSEC) + UA_DATETIME_UNIX_EPOCH)"
-
-def generateNodeValueCode(prepend , node, instanceName, valueName, global_var_code, asIndirect=False):
-    if type(node) in [Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Float, Double]:
-        return prepend + "(UA_" + node.__class__.__name__ + ") " + str(node.value) + ";"
-    elif type(node) == String:
-        return prepend + generateStringCode(node.value, alloc=asIndirect) + ";"
-    elif type(node) == XmlElement:
-        return prepend + generateXmlElementCode(node.value, alloc=asIndirect) + ";"
-    elif type(node) == ByteString:
-        # replace whitespaces between tags and remove newlines
-        return prepend + "UA_BYTESTRING_NULL;" if not node.value else generateByteStringCode(
-            node.value, valueName, global_var_code, isPointer=asIndirect)
-        # the replacements done here is just for the array form can be workable in C code. It doesn't couses any problem
-        # because the core data used here is already in byte form. So, there is no way we disturb it.
-    elif type(node) == LocalizedText:
-        return prepend + generateLocalizedTextCode(node, alloc=asIndirect) + ";"
-    elif type(node) == NodeId:
-        return prepend + generateNodeIdCode(node) + ";"
-    elif type(node) == ExpandedNodeId:
-        return prepend + generateExpandedNodeIdCode(node) + ";"
-    elif type(node) == DateTime:
-        return prepend + generateDateTimeCode(node.value) + ";"
-    elif type(node) == QualifiedName:
-        return prepend + generateQualifiedNameCode(node.value, alloc=asIndirect) + ";"
-    elif type(node) == StatusCode:
-        raise Exception("generateNodeValueCode for type " + node.__class__.name + " not implemented")
-    elif type(node) == DiagnosticInfo:
-        raise Exception("generateNodeValueCode for type " + node.__class__.name + " not implemented")
-    elif type(node) == Guid:
-        raise Exception("generateNodeValueCode for type " + node.__class__.name + " not implemented")
-    elif type(node) == ExtensionObject:
-        if asIndirect == False:
-            return prepend + "*" + str(instanceName) + ";"
-        return prepend + str(instanceName) + ";"
diff --git a/ext/open62541/tools/nodeset_compiler/backend_open62541_nodes.py b/ext/open62541/tools/nodeset_compiler/backend_open62541_nodes.py
deleted file mode 100644
index d433073..0000000
--- a/ext/open62541/tools/nodeset_compiler/backend_open62541_nodes.py
+++ /dev/null
@@ -1,548 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-### This Source Code Form is subject to the terms of the Mozilla Public
-### License, v. 2.0. If a copy of the MPL was not distributed with this
-### file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-###    Copyright 2014-2015 (c) TU-Dresden (Author: Chris Iatrou)
-###    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
-###    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
-###    Copyright 2019 (c) Andrea Minosu
-###    Copyright 2018 (c) Jannis Volker
-###    Copyright 2018 (c) Ralph Lange
-
-from nodes import *
-from backend_open62541_datatypes import *
-import re
-import logging
-
-import sys
-if sys.version_info[0] >= 3:
-    # strings are already parsed to unicode
-    def unicode(s):
-        return s
-
-logger = logging.getLogger(__name__)
-
-#################
-# Generate Code #
-#################
-
-def generateNodeIdPrintable(node):
-    if isinstance(node.id, NodeId):
-        CodePrintable = node.__class__.__name__ + "_" + str(node.id)
-    else:
-        CodePrintable = node.__class__.__name__ + "_unknown_nid"
-
-    return re.sub('[^0-9a-z_]+', '_', CodePrintable.lower())
-
-def generateNodeValueInstanceName(node, parent, arrayIndex):
-    return generateNodeIdPrintable(parent) + "_" + str(node.alias) + "_" + str(arrayIndex)
-
-def generateReferenceCode(reference):
-    if reference.isForward:
-        return "retVal |= UA_Server_addReference(server, %s, %s, %s, true);" % \
-               (generateNodeIdCode(reference.source),
-                generateNodeIdCode(reference.referenceType),
-                generateExpandedNodeIdCode(reference.target))
-    else:
-        return "retVal |= UA_Server_addReference(server, %s, %s, %s, false);" % \
-               (generateNodeIdCode(reference.source),
-                generateNodeIdCode(reference.referenceType),
-                generateExpandedNodeIdCode(reference.target))
-
-def generateReferenceTypeNodeCode(node):
-    code = []
-    code.append("UA_ReferenceTypeAttributes attr = UA_ReferenceTypeAttributes_default;")
-    if node.isAbstract:
-        code.append("attr.isAbstract = true;")
-    if node.symmetric:
-        code.append("attr.symmetric  = true;")
-    if node.inverseName != "":
-        code.append("attr.inverseName  = UA_LOCALIZEDTEXT(\"\", \"%s\");" % \
-                    node.inverseName)
-    return code
-
-def generateObjectNodeCode(node):
-    code = []
-    code.append("UA_ObjectAttributes attr = UA_ObjectAttributes_default;")
-    if node.eventNotifier:
-        code.append("attr.eventNotifier = true;")
-    return code
-
-def setNodeDatatypeRecursive(node, nodeset):
-
-    if not isinstance(node, VariableNode) and not isinstance(node, VariableTypeNode):
-        raise RuntimeError("Node {}: DataType can only be set for VariableNode and VariableTypeNode".format(str(node.id)))
-
-    if node.dataType is not None:
-        return
-
-    # If BaseVariableType
-    if node.id == NodeId("ns=0;i=62"):
-        if node.dataType is None:
-            # Set to default BaseDataType
-            node.dataType = NodeId("ns=0;i=24")
-        return
-
-    if isinstance(node, VariableNode) and not isinstance(node, VariableTypeNode):
-        typeDefNode = nodeset.getNodeTypeDefinition(node)
-        if typeDefNode is None:
-            # Use the parent type.
-            raise RuntimeError("Cannot get node for HasTypeDefinition of VariableNode " + node.browseName.name + " " + str(node.id))
-
-        setNodeDatatypeRecursive(typeDefNode, nodeset)
-
-        node.dataType = typeDefNode.dataType
-    else:
-        # Use the parent type.
-        if node.parent is None:
-            raise RuntimeError("Parent node not defined for " + node.browseName.name + " " + str(node.id))
-
-        setNodeDatatypeRecursive(node.parent, nodeset)
-        node.dataType = node.parent.dataType
-
-def setNodeValueRankRecursive(node, nodeset):
-
-    if not isinstance(node, VariableNode) and not isinstance(node, VariableTypeNode):
-        raise RuntimeError("Node {}: ValueRank can only be set for VariableNode and VariableTypeNode".format(str(node.id)))
-
-    if node.valueRank is not None:
-        return
-
-    # If BaseVariableType
-    if node.id == NodeId("ns=0;i=62"):
-        if node.valueRank is None:
-            # BaseVariableType always has -2
-            node.valueRank = -2
-        return
-
-    if isinstance(node, VariableNode) and not isinstance(node, VariableTypeNode):
-        typeDefNode = nodeset.getNodeTypeDefinition(node)
-        if typeDefNode is None:
-            # Use the parent type.
-            raise RuntimeError("Cannot get node for HasTypeDefinition of VariableNode " + node.browseName.name + " " + str(node.id))
-        if not isinstance(typeDefNode, VariableTypeNode):
-            raise RuntimeError("Node {} ({}) has an invalid type definition. {} is not a VariableType node.".format(
-                str(node.id), node.browseName.name, str(typeDefNode.id)))
-
-
-        setNodeValueRankRecursive(typeDefNode, nodeset)
-
-        if typeDefNode.valueRank is not None and typeDefNode.valueRank > -1:
-            node.valueRank = typeDefNode.valueRank
-        else:
-            # Default value
-            node.valueRank = -1
-    else:
-        # Check if parent node limits the value rank
-        setNodeValueRankRecursive(node.parent, nodeset)
-
-
-        if node.parent.valueRank is not None and node.parent.valueRank > -1:
-            node.valueRank = node.parent.valueRank
-        else:
-            # Default value
-            node.valueRank = -1
-
-
-def generateCommonVariableCode(node, nodeset):
-    code = []
-    codeCleanup = []
-    codeGlobal = []
-
-    if node.valueRank is None:
-        # Set the constrained value rank from the type/parent node
-        setNodeValueRankRecursive(node, nodeset)
-        code.append("/* Value rank inherited */")
-
-    code.append("attr.valueRank = %d;" % node.valueRank)
-    if node.valueRank > 0:
-        code.append("attr.arrayDimensionsSize = %d;" % node.valueRank)
-        code.append("UA_UInt32 arrayDimensions[{}];".format(node.valueRank))
-        if len(node.arrayDimensions) == node.valueRank:
-            for idx, v in enumerate(node.arrayDimensions):
-                code.append("arrayDimensions[{}] = {};".format(idx, int(str(v))))
-        else:
-            for dim in range(0, node.valueRank):
-                code.append("arrayDimensions[{}] = 0;".format(dim))
-        code.append("attr.arrayDimensions = &arrayDimensions[0];")
-
-    if node.dataType is None:
-        # Inherit the datatype from the HasTypeDefinition reference, as stated in the OPC UA Spec:
-        # 6.4.2
-        # "Instances inherit the initial values for the Attributes that they have in common with the
-        # TypeDefinitionNode from which they are instantiated, with the exceptions of the NodeClass and
-        # NodeId."
-        setNodeDatatypeRecursive(node, nodeset)
-        code.append("/* DataType inherited */")
-
-    dataTypeNode = nodeset.getBaseDataType(nodeset.getDataTypeNode(node.dataType))
-
-    if dataTypeNode is None:
-        raise RuntimeError("Cannot get BaseDataType for dataType : " + str(node.dataType) + " of node " + node.browseName.name + " " + str(node.id))
-
-    code.append("attr.dataType = %s;" % generateNodeIdCode(node.dataType))
-
-    if dataTypeNode.isEncodable():
-        if node.value is not None:
-            [code1, codeCleanup1, codeGlobal1] = generateValueCode(node.value, nodeset.nodes[node.id], nodeset)
-            code += code1
-            codeCleanup += codeCleanup1
-            codeGlobal += codeGlobal1
-            # #1978 Variant arrayDimensions are only required to properly decode multidimensional arrays
-            # (valueRank > 1) from data stored as one-dimensional array of arrayLength elements.
-            # One-dimensional arrays are already completely defined by arraylength attribute so setting
-            # also arrayDimensions, even if not explicitly forbidden, can confuse clients
-            if node.valueRank is not None and node.valueRank > 1 and len(node.arrayDimensions) == node.valueRank and len(node.value.value) > 0:
-                numElements = 1
-                hasZero = False
-                for v in node.arrayDimensions:
-                    dim = int(unicode(v))
-                    if dim > 0:
-                        numElements = numElements * dim
-                    else:
-                        hasZero = True
-                if hasZero == False and len(node.value.value) == numElements:
-                    code.append("attr.value.arrayDimensionsSize = attr.arrayDimensionsSize;")
-                    code.append("attr.value.arrayDimensions = attr.arrayDimensions;")
-    elif node.value is not None:
-        code.append("/* Cannot encode the value */")
-        logger.warn("Cannot encode dataTypeNode: " + dataTypeNode.browseName.name + " for value of node " + node.browseName.name + " " + str(node.id))
-
-    return [code, codeCleanup, codeGlobal]
-
-def generateVariableNodeCode(node, nodeset):
-    code = []
-    codeCleanup = []
-    codeGlobal = []
-    code.append("UA_VariableAttributes attr = UA_VariableAttributes_default;")
-    if node.historizing:
-        code.append("attr.historizing = true;")
-    code.append("attr.minimumSamplingInterval = %f;" % node.minimumSamplingInterval)
-    code.append("attr.userAccessLevel = %d;" % node.userAccessLevel)
-    code.append("attr.accessLevel = %d;" % node.accessLevel)
-    # in order to be compatible with mostly OPC UA client
-    # force valueRank = -1 for scalar VariableNode
-    if node.valueRank == -2 and node.value is not None and len(node.value.value) == 1:
-        node.valueRank = -1
-    [code1, codeCleanup1, codeGlobal1] = generateCommonVariableCode(node, nodeset)
-    code += code1
-    codeCleanup += codeCleanup1
-    codeGlobal += codeGlobal1
-
-    return [code, codeCleanup, codeGlobal]
-
-def generateVariableTypeNodeCode(node, nodeset):
-    code = []
-    codeCleanup = []
-    codeGlobal = []
-    code.append("UA_VariableTypeAttributes attr = UA_VariableTypeAttributes_default;")
-    if node.isAbstract:
-        code.append("attr.isAbstract = true;")
-    [code1, codeCleanup1, codeGlobal1] = generateCommonVariableCode(node, nodeset)
-    code += code1
-    codeCleanup += codeCleanup1
-    codeGlobal += codeGlobal1
-
-    return [code, codeCleanup, codeGlobal]
-
-def lowerFirstChar(inputString):
-    return inputString[0].lower() + inputString[1:]
-
-def generateExtensionObjectSubtypeCode(node, parent, nodeset, global_var_code, instanceName=None, isArrayElement=False):
-    code = [""]
-    codeCleanup = [""]
-
-    logger.debug("Building extensionObject for " + str(parent.id))
-    logger.debug("Value    " + str(node.value))
-    logger.debug("Encoding " + str(node.encodingRule))
-
-    typeBrowseNode = makeCIdentifier(nodeset.getDataTypeNode(parent.dataType).browseName.name)
-    #TODO: review this
-    if typeBrowseNode == "NumericRange":
-        # in the stack we define a separate structure for the numeric range, but
-        # the value itself is just a string
-        typeBrowseNode = "String"
-
-
-    typeString = "UA_" + typeBrowseNode
-    if instanceName is None:
-        instanceName = generateNodeValueInstanceName(node, parent, 0)
-        code.append("UA_STACKARRAY(" + typeString + ", " + instanceName + ", 1);")
-    typeArr = nodeset.getDataTypeNode(parent.dataType).typesArray
-    typeString = nodeset.getDataTypeNode(parent.dataType).browseName.name.upper()
-    typeArrayString = typeArr + "[" + typeArr + "_" + typeString + "]"
-    code.append("UA_init({ref}{instanceName}, &{typeArrayString});".format(ref="&" if isArrayElement else "",
-                                                                           instanceName=instanceName,
-                                                                           typeArrayString=typeArrayString))
-
-    # Assign data to the struct contents
-    # Track the encoding rule definition to detect arrays and/or ExtensionObjects
-    values = node.value
-    if values == None:
-        values = []
-    for idx,subv in enumerate(values):
-        encField = node.encodingRule[idx]
-        memberName = lowerFirstChar(encField[0])
-
-        # Check if this is an array
-        accessor = "." if isArrayElement else "->"
-
-        if isinstance(subv, list):
-            if len(subv) == 0:
-                continue
-            logger.info("ExtensionObject contains array")
-            memberName = lowerFirstChar(encField[0])
-            encTypeString = "UA_" + subv[0].__class__.__name__
-            instanceNameSafe = makeCIdentifier(instanceName)
-            code.append("UA_STACKARRAY(" + encTypeString + ", " + instanceNameSafe + "_" + memberName+", {0});".format(len(subv)))
-            encTypeArr = nodeset.getDataTypeNode(subv[0].__class__.__name__).typesArray
-            encTypeArrayString = encTypeArr + "[" + encTypeArr + "_" + subv[0].__class__.__name__.upper() + "]"
-            code.append("UA_init({instanceName}, &{typeArrayString});".format(instanceName=instanceNameSafe + "_" + memberName,
-                                                                              typeArrayString=encTypeArrayString))
-
-            for subArrayIdx,val in enumerate(subv):
-                code.append(generateNodeValueCode(instanceNameSafe + "_" + memberName + "[" + str(subArrayIdx) + "]" +" = ",
-                                                  val, instanceName,instanceName + "_gehtNed_member", global_var_code, asIndirect=False))
-            code.append(instanceName + accessor + memberName + " = " + instanceNameSafe+"_"+ memberName+";")
-            continue
-
-        logger.debug("Encoding of field " + memberName + " is " + str(subv.encodingRule) + "defined by " + str(encField))
-        if subv.valueRank is None or subv.valueRank == 0:
-            if not subv.isNone():
-                # Some values can be optional
-                valueName = instanceName + accessor + memberName
-                code.append(generateNodeValueCode(valueName + " = " ,
-                            subv, instanceName,valueName, global_var_code, asIndirect=False))
-        else:
-            memberName = lowerFirstChar(encField[0])
-            code.append(generateNodeValueCode(instanceName + accessor + memberName + "Size = ", subv,
-                                              instanceName,valueName, global_var_code, asIndirect=False))
-
-    if not isArrayElement:
-        code.append("UA_Variant_setScalar(&attr.value, " + instanceName + ", &" + typeArrayString + ");")
-
-    return [code, codeCleanup]
-
-def getTypeBrowseName(dataTypeNode):
-    typeBrowseName = makeCIdentifier(dataTypeNode.browseName.name)
-    #TODO: review this
-    if typeBrowseName == "NumericRange":
-        # in the stack we define a separate structure for the numeric range, but
-        # the value itself is just a string
-        typeBrowseName = "String"
-    return typeBrowseName
-
-def getTypesArrayForValue(nodeset, value):
-    typeNode = nodeset.getNodeByBrowseName(value.__class__.__name__)
-    if typeNode is None or value.isInternal:
-        typesArray = "UA_TYPES"
-    else:
-        typesArray = typeNode.typesArray
-    typeName = makeCIdentifier(value.__class__.__name__.upper())
-    return "&" + typesArray + "[" + typesArray + "_" + typeName + "]"
-
-
-def isArrayVariableNode(node, parentNode):
-    return parentNode.valueRank is not None and (parentNode.valueRank != -1 and (parentNode.valueRank >= 0
-                                       or (len(node.value) > 1
-                                           and (parentNode.valueRank != -2 or parentNode.valueRank != -3))))
-
-def generateValueCode(node, parentNode, nodeset, bootstrapping=True):
-    code = []
-    codeCleanup = []
-    codeGlobal = []
-    valueName = generateNodeIdPrintable(parentNode) + "_variant_DataContents"
-
-    # node.value either contains a list of multiple identical BUILTINTYPES, or it
-    # contains a single builtintype (which may be a container); choose if we need
-    # to create an array or a single variable.
-    # Note that some genious defined that there are arrays of size 1, which are
-    # distinctly different then a single value, so we need to check that as well
-    # Semantics:
-    # -3: Scalar or 1-dim
-    # -2: Scalar or x-dim | x>0
-    # -1: Scalar
-    #  0: x-dim | x>0
-    #  n: n-dim | n>0
-    if (len(node.value) == 0):
-        return ["", "", ""]
-    if not isinstance(node.value[0], Value):
-        return ["", "", ""]
-
-    dataTypeNode = nodeset.getDataTypeNode(parentNode.dataType)
-
-    if isArrayVariableNode(node, parentNode):
-        # User the following strategy for all directly mappable values a la 'UA_Type MyInt = (UA_Type) 23;'
-        if isinstance(node.value[0], Guid):
-            logger.warn("Don't know how to print array of GUID in node " + str(parentNode.id))
-        elif isinstance(node.value[0], DiagnosticInfo):
-            logger.warn("Don't know how to print array of DiagnosticInfo in node " + str(parentNode.id))
-        elif isinstance(node.value[0], StatusCode):
-            logger.warn("Don't know how to print array of StatusCode in node " + str(parentNode.id))
-        else:
-            if isinstance(node.value[0], ExtensionObject):
-                code.append("UA_" + getTypeBrowseName(dataTypeNode) + " " + valueName + "[" + str(len(node.value)) + "];")
-                for idx, v in enumerate(node.value):
-                    logger.debug("Building extObj array index " + str(idx))
-                    instanceName = valueName + "[" + str(idx) + "]"
-                    [code1, codeCleanup1] = generateExtensionObjectSubtypeCode(v, parent=parentNode, nodeset=nodeset,
-                                                                               global_var_code=codeGlobal, instanceName=instanceName,
-                                                                               isArrayElement=True)
-                    code = code + code1
-                    codeCleanup = codeCleanup + codeCleanup1
-            else:
-                code.append("UA_" + node.value[0].__class__.__name__ + " " + valueName + "[" + str(len(node.value)) + "];")
-                for idx, v in enumerate(node.value):
-                    instanceName = generateNodeValueInstanceName(v, parentNode, idx)
-                    code.append(generateNodeValueCode(
-                        valueName + "[" + str(idx) + "] = " , v, instanceName, valueName, codeGlobal))
-            code.append("UA_Variant_setArray(&attr.value, &" + valueName +
-                        ", (UA_Int32) " + str(len(node.value)) + ", " + "&" +
-                        dataTypeNode.typesArray + "["+dataTypeNode.typesArray + "_" + getTypeBrowseName(dataTypeNode).upper() +"]);")
-    #scalar value
-    else:
-        # User the following strategy for all directly mappable values a la 'UA_Type MyInt = (UA_Type) 23;'
-        if isinstance(node.value[0], Guid):
-            logger.warn("Don't know how to print scalar GUID in node " + str(parentNode.id))
-        elif isinstance(node.value[0], DiagnosticInfo):
-            logger.warn("Don't know how to print scalar DiagnosticInfo in node " + str(parentNode.id))
-        elif isinstance(node.value[0], StatusCode):
-            logger.warn("Don't know how to print scalar StatusCode in node " + str(parentNode.id))
-        else:
-            # The following strategy applies to all other types, in particular strings and numerics.
-            if isinstance(node.value[0], ExtensionObject):
-                [code1, codeCleanup1] = generateExtensionObjectSubtypeCode(node.value[0], parent=parentNode, nodeset=nodeset,
-                                                                           global_var_code=codeGlobal, isArrayElement=False)
-                code = code + code1
-                codeCleanup = codeCleanup + codeCleanup1
-            instanceName = generateNodeValueInstanceName(node.value[0], parentNode, 0)
-            if not node.value[0].isNone() and not(isinstance(node.value[0], ExtensionObject)):
-                code.append("UA_" + node.value[0].__class__.__name__ + " *" + valueName + " =  UA_" + node.value[
-                    0].__class__.__name__ + "_new();")
-                code.append("if (!" + valueName + ") return UA_STATUSCODE_BADOUTOFMEMORY;")
-                code.append("UA_" + node.value[0].__class__.__name__ + "_init(" + valueName + ");")
-                code.append(generateNodeValueCode("*" + valueName + " = " , node.value[0], instanceName, valueName, codeGlobal, asIndirect=True))
-                code.append(
-                        "UA_Variant_setScalar(&attr.value, " + valueName + ", " +
-                        getTypesArrayForValue(nodeset, node.value[0]) + ");")
-                if node.value[0].__class__.__name__ == "ByteString":
-                    # The data is on the stack, not heap, so we can not delete the ByteString
-                    codeCleanup.append("{}->data = NULL;".format(valueName))
-                    codeCleanup.append("{}->length = 0;".format(valueName))
-                codeCleanup.append("UA_{0}_delete({1});".format(
-                    node.value[0].__class__.__name__, valueName))
-    return [code, codeCleanup, codeGlobal]
-
-def generateMethodNodeCode(node):
-    code = []
-    code.append("UA_MethodAttributes attr = UA_MethodAttributes_default;")
-    if node.executable:
-        code.append("attr.executable = true;")
-    if node.userExecutable:
-        code.append("attr.userExecutable = true;")
-    return code
-
-def generateObjectTypeNodeCode(node):
-    code = []
-    code.append("UA_ObjectTypeAttributes attr = UA_ObjectTypeAttributes_default;")
-    if node.isAbstract:
-        code.append("attr.isAbstract = true;")
-    return code
-
-def generateDataTypeNodeCode(node):
-    code = []
-    code.append("UA_DataTypeAttributes attr = UA_DataTypeAttributes_default;")
-    if node.isAbstract:
-        code.append("attr.isAbstract = true;")
-    return code
-
-def generateViewNodeCode(node):
-    code = []
-    code.append("UA_ViewAttributes attr = UA_ViewAttributes_default;")
-    if node.containsNoLoops:
-        code.append("attr.containsNoLoops = true;")
-    code.append("attr.eventNotifier = (UA_Byte)%s;" % str(node.eventNotifier))
-    return code
-
-def generateSubtypeOfDefinitionCode(node):
-    for ref in node.inverseReferences:
-        # 45 = HasSubtype
-        if ref.referenceType.i == 45:
-            return generateNodeIdCode(ref.target)
-    return "UA_NODEID_NULL"
-
-def generateNodeCode_begin(node, nodeset, code_global):
-    code = []
-    codeCleanup = []
-    code.append("UA_StatusCode retVal = UA_STATUSCODE_GOOD;")
-
-    # Attributes
-    if isinstance(node, ReferenceTypeNode):
-        code.extend(generateReferenceTypeNodeCode(node))
-    elif isinstance(node, ObjectNode):
-        code.extend(generateObjectNodeCode(node))
-    elif isinstance(node, VariableNode) and not isinstance(node, VariableTypeNode):
-        [code1, codeCleanup1, codeGlobal1] = generateVariableNodeCode(node, nodeset)
-        code.extend(code1)
-        codeCleanup.extend(codeCleanup1)
-        code_global.extend(codeGlobal1)
-    elif isinstance(node, VariableTypeNode):
-        [code1, codeCleanup1, codeGlobal1] = generateVariableTypeNodeCode(node, nodeset)
-        code.extend(code1)
-        codeCleanup.extend(codeCleanup1)
-        code_global.extend(codeGlobal1)
-    elif isinstance(node, MethodNode):
-        code.extend(generateMethodNodeCode(node))
-    elif isinstance(node, ObjectTypeNode):
-        code.extend(generateObjectTypeNodeCode(node))
-    elif isinstance(node, DataTypeNode):
-        code.extend(generateDataTypeNodeCode(node))
-    elif isinstance(node, ViewNode):
-        code.extend(generateViewNodeCode(node))
-    if node.displayName is not None:
-        code.append("attr.displayName = " + generateLocalizedTextCode(node.displayName, alloc=False) + ";")
-    if node.description is not None:
-        code.append("#ifdef UA_ENABLE_NODESET_COMPILER_DESCRIPTIONS")
-        code.append("attr.description = " + generateLocalizedTextCode(node.description, alloc=False) + ";")
-        code.append("#endif")
-    if node.writeMask is not None:
-        code.append("attr.writeMask = %d;" % node.writeMask)
-    if node.userWriteMask is not None:
-        code.append("attr.userWriteMask = %d;" % node.userWriteMask)
-
-    # AddNodes call
-    code.append("retVal |= UA_Server_addNode_begin(server, UA_NODECLASS_{},".
-            format(makeCIdentifier(node.__class__.__name__.upper().replace("NODE" ,""))))
-    code.append(generateNodeIdCode(node.id) + ",")
-    code.append(generateNodeIdCode(node.parent.id if node.parent else NodeId()) + ",")
-    code.append(generateNodeIdCode(node.parentReference.id if node.parent else NodeId()) + ",")
-    code.append(generateQualifiedNameCode(node.browseName) + ",")
-    if isinstance(node, VariableNode) or isinstance(node, ObjectNode):
-        typeDefRef = node.popTypeDef()
-        code.append(generateNodeIdCode(typeDefRef.target) + ",")
-    else:
-        code.append(" UA_NODEID_NULL,")
-    code.append("(const UA_NodeAttributes*)&attr, &UA_TYPES[UA_TYPES_{}ATTRIBUTES],NULL, NULL);".
-            format(makeCIdentifier(node.__class__.__name__.upper().replace("NODE" ,""))))
-    code.extend(codeCleanup)
-
-    return "\n".join(code)
-
-def generateNodeCode_finish(node):
-    code = []
-
-    if isinstance(node, MethodNode):
-        code.append("UA_Server_addMethodNode_finish(server, ")
-    else:
-        code.append("UA_Server_addNode_finish(server, ")
-    code.append(generateNodeIdCode(node.id))
-
-    if isinstance(node, MethodNode):
-        code.append(", NULL, 0, NULL, 0, NULL);")
-    else:
-        code.append(");")
-
-    return "\n".join(code)
diff --git a/ext/open62541/tools/nodeset_compiler/datatypes.py b/ext/open62541/tools/nodeset_compiler/datatypes.py
deleted file mode 100644
index dcebe98..0000000
--- a/ext/open62541/tools/nodeset_compiler/datatypes.py
+++ /dev/null
@@ -1,738 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-### This Source Code Form is subject to the terms of the Mozilla Public
-### License, v. 2.0. If a copy of the MPL was not distributed with this
-### file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-###    Copyright 2014-2015 (c) TU-Dresden (Author: Chris Iatrou)
-###    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
-###    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
-
-
-import sys
-import logging
-import re
-from datetime import datetime
-import xml.dom.minidom as dom
-from base64 import *
-
-__all__ = ['valueIsInternalType', 'Value', 'Boolean', 'Number', 'Integer',
-           'UInteger', 'Byte', 'SByte',
-           'Int16', 'UInt16', 'Int32', 'UInt32', 'Int64', 'UInt64', 'Float', 'Double',
-           'String', 'XmlElement', 'ByteString', 'ExtensionObject', 'LocalizedText',
-           'NodeId', 'ExpandedNodeId', 'DateTime', 'QualifiedName', 'StatusCode',
-           'DiagnosticInfo', 'Guid']
-
-logger = logging.getLogger(__name__)
-
-if sys.version_info[0] >= 3:
-    # strings are already parsed to unicode
-    def unicode(s):
-        return s
-
-    string_types = str
-else:
-    string_types = basestring 
-
-def getNextElementNode(xmlvalue):
-    if xmlvalue is None:
-        return None
-    xmlvalue = xmlvalue.nextSibling
-    while not xmlvalue is None and not xmlvalue.nodeType == xmlvalue.ELEMENT_NODE:
-        xmlvalue = xmlvalue.nextSibling
-    return xmlvalue
-
-def valueIsInternalType(valueTypeString):
-    return valueTypeString.lower() in ['boolean', 'number', 'int32', 'uint32', 'int16', 'uint16',
-                   'int64', 'uint64', 'byte', 'sbyte', 'float', 'double',
-                   'string', 'bytestring', 'localizedtext', 'statuscode',
-                   'diagnosticinfo', 'nodeid', 'guid', 'datetime',
-                   'qualifiedname', 'expandednodeid', 'xmlelement', 'integer', 'uinteger']
-
-class Value(object):
-    def __init__(self):
-        self.value = None
-        self.alias = None
-        self.dataType = None
-        self.encodingRule = []
-        self.isInternal = False
-        self.valueRank = None
-
-    def getValueFieldByAlias(self, fieldname):
-        if not isinstance(self.value, list):
-            return None
-        if not isinstance(self.value[0], Value):
-            return None
-        for val in self.value:
-            if val.alias() == fieldname:
-                return val.value
-        return None
-
-    def getTypeByString(self, stringName, encodingRule):
-        stringName = str(stringName.lower())
-        if stringName == 'boolean':
-            t = Boolean()
-        elif stringName == 'number':
-            t = Number()
-        elif stringName == 'integer':
-            t = Integer()
-        elif stringName == 'uinteger':
-            t = UInteger()
-        elif stringName == 'int32':
-            t = Int32()
-        elif stringName == 'uint32':
-            t = UInt32()
-        elif stringName == 'int16':
-            t = Int16()
-        elif stringName == 'uint16':
-            t = UInt16()
-        elif stringName == 'int64':
-            t = Int64()
-        elif stringName == 'uint64':
-            t = UInt64()
-        elif stringName == 'byte':
-            t = Byte()
-        elif stringName == 'sbyte':
-            t = SByte()
-        elif stringName == 'float':
-            t = Float()
-        elif stringName == 'double':
-            t = Double()
-        elif stringName == 'string':
-            t = String()
-        elif stringName == 'bytestring':
-            t = ByteString()
-        elif stringName == 'localizedtext':
-            t = LocalizedText()
-        elif stringName == 'statuscode':
-            t = StatusCode()
-        elif stringName == 'diagnosticinfo':
-            t = DiagnosticInfo()
-        elif stringName == 'nodeid':
-            t = NodeId()
-        elif stringName == 'guid':
-            t = Guid()
-        elif stringName == 'datetime':
-            t = DateTime()
-        elif stringName == 'qualifiedname':
-            t = QualifiedName()
-        elif stringName == 'expandednodeid':
-            t = ExpandedNodeId()
-        elif stringName == 'xmlelement':
-            t = XmlElement()
-        else:
-            logger.debug("No class representing stringName " + stringName + " was found. Cannot create builtinType.")
-            return None
-        t.encodingRule = encodingRule
-        return t
-
-    def checkXML(self, xmlvalue):
-        if xmlvalue is None or xmlvalue.nodeType != xmlvalue.ELEMENT_NODE:
-            logger.error("Expected XML Element, but got junk...")
-            return
-
-    def parseXMLEncoding(self, xmlvalue, parentDataTypeNode, parent):
-        self.checkXML(xmlvalue)
-        if not "value" in xmlvalue.localName.lower():
-            logger.error("Expected <Value> , but found " + xmlvalue.localName + \
-                         " instead. Value will not be parsed.")
-            return
-
-        if len(xmlvalue.childNodes) == 0:
-            logger.error("Expected childnodes for value, but none were found...")
-            return
-
-        for n in xmlvalue.childNodes:
-            if n.nodeType == n.ELEMENT_NODE:
-                xmlvalue = n
-                break
-
-        if "ListOf" in xmlvalue.localName:
-            self.value = []
-            for el in xmlvalue.childNodes:
-                if not el.nodeType == el.ELEMENT_NODE:
-                    continue
-                val = self.__parseXMLSingleValue(el, parentDataTypeNode, parent)
-                if val is None:
-                    self.value = []
-                    return
-                self.value.append(val)
-        else:
-            self.value = [self.__parseXMLSingleValue(xmlvalue, parentDataTypeNode, parent)]
-
-    def __parseXMLSingleValue(self, xmlvalue, parentDataTypeNode, parent, alias=None, encodingPart=None, valueRank=None):
-        # Parse an encoding list such as enc = [[Int32], ['Duration', ['DateTime']]],
-        # returning a possibly aliased variable or list of variables.
-        # Keep track of aliases, as ['Duration', ['Hawaii', ['UtcTime', ['DateTime']]]]
-        # will be of type DateTime, but tagged as <Duration>2013-04-10 12:00 UTC</Duration>,
-        # and not as <Duration><Hawaii><UtcTime><String>2013-04-10 12:00 UTC</String>...
-
-        # Encoding may be partially handed down (iterative call). Only resort to
-        # type definition if we are not given a specific encoding to match
-        if encodingPart is None:
-            enc = parentDataTypeNode.getEncoding()
-        else:
-            enc = encodingPart
-
-        # Check the structure of the encoding list to determine if a type is to be
-        # returned or we need to descend further checking aliases or multipart types
-        # such as extension Objects.
-        if len(enc) == 1:
-            # 0: ['BuiltinType']          either builtin type
-            # 1: [ [ 'Alias', [...], n] ] or single alias for possible multipart
-            if isinstance(enc[0], string_types):
-                # 0: 'BuiltinType'
-                if alias is not None:
-                    if xmlvalue is not None and not xmlvalue.localName == alias and not xmlvalue.localName == enc[0]:
-                        logger.error(str(parent.id) + ": Expected XML element with tag " + alias + " but found " + xmlvalue.localName + " instead")
-                        return ExtensionObject()
-                    else:
-                        t = self.getTypeByString(enc[0], enc)
-                        t.alias = alias
-                        t.valueRank = valueRank
-
-                        if valueRank == 1:
-                            values = []
-                            for el in xmlvalue.childNodes:
-                                if not el.nodeType == el.ELEMENT_NODE:
-                                    continue
-                                val = self.getTypeByString(enc[0], enc)
-                                val.parseXML(el)
-                                values.append(val)
-                            return values
-                        else:
-                            if xmlvalue is not None:
-                                t.parseXML(xmlvalue)
-                            return t
-                else:
-                    if not valueIsInternalType(xmlvalue.localName):
-                        logger.error(str(parent.id) + ": Expected XML describing builtin type " + enc[0] + " but found " + xmlvalue.localName + " instead")
-                    else:
-                        t = self.getTypeByString(enc[0], enc)
-                        t.parseXML(xmlvalue)
-                        t.isInternal = True
-                        return t
-            else:
-                # 1: ['Alias', [...], n]
-                # Let the next elif handle this
-                return self.__parseXMLSingleValue(xmlvalue, parentDataTypeNode, parent,
-                                                  alias=alias, encodingPart=enc[0], valueRank=enc[2] if len(enc)>2 else None)
-        elif len(enc) == 3 and isinstance(enc[0], string_types):
-            # [ 'Alias', [...], 0 ]          aliased multipart
-            if alias is None:
-                alias = enc[0]
-            # if we have an alias and the next field is multipart, keep the alias
-            elif alias is not None and len(enc[1]) > 1:
-                alias = enc[0]
-            # otherwise drop the alias
-            return self.__parseXMLSingleValue(xmlvalue, parentDataTypeNode, parent,
-                                              alias=alias, encodingPart=enc[1], valueRank=enc[2] if len(enc)>2 else None)
-        else:
-            # [ [...], [...], [...]] multifield of unknowns (analyse separately)
-            # create an extension object to hold multipart type
-
-            # FIXME: This implementation expects an extensionobject to be manditory for
-            #        multipart variables. Variants/Structures are not included in the
-            #        OPCUA Namespace 0 nodeset.
-            #        Consider moving this ExtensionObject specific parsing into the
-            #        builtin type and only determining the multipart type at this stage.
-            extobj = ExtensionObject()
-            if not xmlvalue.localName == "ExtensionObject":
-                logger.error(str(parent.id) + ": Expected XML tag <ExtensionObject> for multipart type, but found " + xmlvalue.localName + " instead.")
-                return extobj
-
-            extobj.encodingRule = enc
-            etype = xmlvalue.getElementsByTagName("TypeId")
-            if len(etype) == 0:
-                logger.error(str(parent.id) + ": Did not find <TypeId> for ExtensionObject")
-                return extobj
-            etype = etype[0].getElementsByTagName("Identifier")
-            if len(etype) == 0:
-                logger.error(str(parent.id) + ": Did not find <Identifier> for ExtensionObject")
-                return extobj
-
-            etype = NodeId(etype[0].firstChild.data.strip(' \t\n\r'))
-            extobj.typeId = etype
-
-            ebody = xmlvalue.getElementsByTagName("Body")
-            if len(ebody) == 0:
-                logger.error(str(parent.id) + ": Did not find <Body> for ExtensionObject")
-                return extobj
-            ebody = ebody[0]
-
-            try:
-                # Body must contain an Object of type 'DataType' as defined in Variable
-                ebodypart = ebody.firstChild
-                if not ebodypart.nodeType == ebodypart.ELEMENT_NODE:
-                    ebodypart = getNextElementNode(ebodypart)
-                if ebodypart is None:
-                    logger.error(str(parent.id) + ": Expected ExtensionObject to hold a variable of type " + str(parentDataTypeNode.browseName) + " but found nothing.")
-                    return extobj
-
-                if not ebodypart.localName == "OptionSet" and not ebodypart.localName == parentDataTypeNode.browseName.name:
-                    logger.error(str(parent.id) + ": Expected ExtensionObject to hold a variable of type " + str(parentDataTypeNode.browseName) + " but found " +
-                                 str(ebodypart.localName) + " instead.")
-                    return extobj
-                extobj.alias = ebodypart.localName
-
-                ebodypart = ebodypart.firstChild
-                if not ebodypart.nodeType == ebodypart.ELEMENT_NODE:
-                    ebodypart = getNextElementNode(ebodypart)
-                if ebodypart is None:
-                    logger.error(str(parent.id) + ": Description of dataType " + str(parentDataTypeNode.browseName) + " in ExtensionObject is empty/invalid.")
-                    return extobj
-
-                extobj.value = []
-                for e in enc:
-                    extobj.value.append(extobj.__parseXMLSingleValue(ebodypart, parentDataTypeNode, parent,
-                                                                     alias=None, encodingPart=e))
-                    ebodypart = getNextElementNode(ebodypart)
-            except Exception:
-                logger.error(str(parent.id) + ": Could not parse <Body> for ExtensionObject")
-
-            return extobj
-
-    def __str__(self):
-        return self.__class__.__name__ + "(" + str(self.value) + ")"
-
-    def isNone(self):
-        return self.value is None
-
-    def __repr__(self):
-        return self.__str__()
-
-#################
-# Builtin Types #
-#################
-
-
-def getXmlTextTrimmed(xmlNode):
-    if xmlNode is None or xmlNode.data is None:
-        return None
-    content = xmlNode.data
-    # Check for empty string (including newlines)
-    if not re.sub(r"[\s\n\r]", "", content).strip():
-        return None
-    return unicode(content.strip())
-
-
-class Boolean(Value):
-    def __init__(self, xmlelement=None):
-        Value.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-    def parseXML(self, xmlvalue):
-        # Expect <Boolean>value</Boolean> or
-        #        <Aliasname>value</Aliasname>
-        self.checkXML(xmlvalue)
-        val = getXmlTextTrimmed(xmlvalue.firstChild)
-        if val is None:
-            self.value = "false"  # Catch XML <Boolean /> by setting the value to a default
-        else:
-            if "false" in unicode(xmlvalue.firstChild.data).lower():
-                self.value = "false"
-            else:
-                self.value = "true"
-
-class Number(Value):
-    def __init__(self, xmlelement=None):
-        Value.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-    def parseXML(self, xmlvalue):
-        # Expect <Int16>value</Int16> or any other valid number type, or
-        #        <Aliasname>value</Aliasname>
-        self.checkXML(xmlvalue)
-        val = getXmlTextTrimmed(xmlvalue.firstChild)
-        self.value = val if val is not None else 0
-
-class Integer(Number):
-    def __init__(self, xmlelement=None):
-        Number.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-class UInteger(Number):
-    def __init__(self, xmlelement=None):
-        Number.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-class Byte(UInteger):
-    def __init__(self, xmlelement=None):
-        UInteger.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-class SByte(Integer):
-    def __init__(self, xmlelement=None):
-        Integer.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-class Int16(Integer):
-    def __init__(self, xmlelement=None):
-        Integer.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-class UInt16(UInteger):
-    def __init__(self, xmlelement=None):
-        UInteger.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-class Int32(Integer):
-    def __init__(self, xmlelement=None):
-        Integer.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-class UInt32(UInteger):
-    def __init__(self, xmlelement=None):
-        UInteger.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-class Int64(Integer):
-    def __init__(self, xmlelement=None):
-        Integer.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-class UInt64(UInteger):
-    def __init__(self, xmlelement=None):
-        UInteger.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-class Float(Number):
-    def __init__(self, xmlelement=None):
-        Number.__init__(self)
-        if xmlelement:
-            Float.parseXML(self, xmlelement)
-
-    def parseXML(self, xmlvalue):
-        # Expect <Float>value</Float> or
-        #        <Aliasname>value</Aliasname>
-        self.checkXML(xmlvalue)
-        val = getXmlTextTrimmed(xmlvalue.firstChild)
-        self.value = val if val is not None else 0.0
-
-class Double(Float):
-    def __init__(self, xmlelement=None):
-        Float.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-class String(Value):
-    def __init__(self, xmlelement=None):
-        Value.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-    def pack(self):
-        bin = structpack("I", len(unicode(self.value)))
-        bin = bin + str(self.value)
-        return bin
-
-    def parseXML(self, xmlvalue):
-        # Expect <String>value</String> or
-        #        <Aliasname>value</Aliasname>
-        if not isinstance(xmlvalue, dom.Element):
-            self.value = xmlvalue
-            return
-        self.checkXML(xmlvalue)
-        val = getXmlTextTrimmed(xmlvalue.firstChild)
-        self.value = val if val is not None else ""
-
-
-class XmlElement(String):
-    def __init__(self, xmlelement=None):
-        String.__init__(self, xmlelement)
-
-class ByteString(Value):
-    def __init__(self, xmlelement=None):
-        Value.__init__(self)
-
-    def parseXML(self, xmlvalue):
-        # Expect <ByteString>value</ByteString>
-        if not isinstance(xmlvalue, dom.Element):
-            self.value = xmlvalue
-            return
-        self.checkXML(xmlvalue)
-        if xmlvalue.firstChild is None:
-            self.value = []  # Catch XML <ByteString /> by setting the value to a default
-        else:
-            self.value = b64decode(xmlvalue.firstChild.data)
-
-class ExtensionObject(Value):
-    def __init__(self, xmlelement=None):
-        Value.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-    def parseXML(self, xmlelement):
-        pass
-
-    def __str__(self):
-        return "'ExtensionObject'"
-
-class LocalizedText(Value):
-    def __init__(self, xmlvalue=None):
-        Value.__init__(self)
-        self.locale = None
-        self.text = None
-        if xmlvalue:
-            self.parseXML(xmlvalue)
-
-    def parseXML(self, xmlvalue):
-        # Expect <LocalizedText> or <AliasName>
-        #          <Locale>xx_XX</Locale>
-        #          <Text>TextText</Text>
-        #        <LocalizedText> or </AliasName>
-        if not isinstance(xmlvalue, dom.Element):
-            self.text = xmlvalue
-            return
-        self.checkXML(xmlvalue)
-        tmp = xmlvalue.getElementsByTagName("Locale")
-        if len(tmp) > 0 and tmp[0].firstChild != None:
-            self.locale = tmp[0].firstChild.data.strip(' \t\n\r')
-        tmp = xmlvalue.getElementsByTagName("Text")
-        if len(tmp) > 0 and tmp[0].firstChild != None:
-            self.text = tmp[0].firstChild.data.strip(' \t\n\r')
-
-    def __str__(self):
-        if self.locale is None and self.text is None:
-            return "None"
-        if self.locale is not None and len(self.locale) > 0:
-            return "(" + self.locale + ":" + self.text + ")"
-        else:
-            return self.text
-
-    def isNone(self):
-        return self.text is None
-
-class NodeId(Value):
-    def __init__(self, idstring=None):
-        Value.__init__(self)
-        self.i = None
-        self.b = None
-        self.g = None
-        self.s = None
-        self.ns = 0
-        self.setFromIdString(idstring)
-
-    def setFromIdString(self, idstring):
-
-        if not idstring:
-            self.i = 0
-            return
-
-        # The ID will encoding itself appropriatly as string. If multiple ID's
-        # (numeric, string, guid) are defined, the order of preference for the ID
-        # string is always numeric, guid, bytestring, string. Binary encoding only
-        # applies to numeric values (UInt16).
-        idparts = idstring.strip().split(";")
-        for p in idparts:
-            if p[:2] == "ns":
-                self.ns = int(p[3:])
-            elif p[:2] == "i=":
-                self.i = int(p[2:])
-            elif p[:2] == "o=":
-                self.b = p[2:]
-            elif p[:2] == "g=":
-                tmp = []
-                self.g = p[2:].split("-")
-                for i in self.g:
-                    i = "0x" + i
-                    tmp.append(int(i, 16))
-                self.g = tmp
-            elif p[:2] == "s=":
-                self.s = p[2:]
-            else:
-                raise Exception("no valid nodeid: " + idstring)
-
-    # The parsing can be called with an optional namespace mapping dict.
-    def parseXML(self, xmlvalue):
-        # Expect <NodeId> or <Alias>
-        #           <Identifier> # It is unclear whether or not this is manditory. Identifier tags are used in Namespace 0.
-        #                ns=x;i=y or similar string representation of id()
-        #           </Identifier>
-        #        </NodeId> or </Alias>
-        if not isinstance(xmlvalue, dom.Element):
-            self.text = xmlvalue # Alias
-            return
-        self.checkXML(xmlvalue)
-
-        # Catch XML <NodeId />
-        if xmlvalue.firstChild is None:
-            logger.error("No value is given, which is illegal for Node Types...")
-            self.value = None
-        else:
-            # Check if there is an <Identifier> tag
-            if len(xmlvalue.getElementsByTagName("Identifier")) != 0:
-                xmlvalue = xmlvalue.getElementsByTagName("Identifier")[0]
-            self.setFromIdString(unicode(xmlvalue.firstChild.data))
-
-    def __str__(self):
-        s = "ns=" + str(self.ns) + ";"
-        # Order of preference is numeric, guid, bytestring, string
-        if self.i != None:
-            return s + "i=" + str(self.i)
-        elif self.g != None:
-            s = s + "g="
-            tmp = []
-            for i in self.g:
-                tmp.append(hex(i).replace("0x", ""))
-            for i in tmp:
-                s = s + "-" + i
-            return s.replace("g=-", "g=")
-        elif self.b != None:
-            return s + "b=" + str(self.b)
-        elif self.s != None:
-            return s + "s=" + str(self.s)
-
-    def isNone(self):
-        return self.i is None and self.b is None and self.s is None and self.g is None
-
-    def __eq__(self, nodeId2):
-        return (str(self) == str(nodeId2))
-
-    def __ne__(self, other):
-        return not self.__eq__(other)
-
-    def __repr__(self):
-        return str(self)
-
-    def __hash__(self):
-        return hash(str(self))
-
-class ExpandedNodeId(Value):
-    def __init__(self, xmlelement=None):
-        Value.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-    def parseXML(self, xmlvalue):
-        self.checkXML(xmlvalue)
-        logger.debug("Not implemented", LOG_LEVEL_ERR)
-
-class DateTime(Value):
-    def __init__(self, xmlelement=None):
-        Value.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-    def parseXML(self, xmlvalue):
-        # Expect <DateTime> or <AliasName>
-        #        2013-08-13T21:00:05.0000L
-        #        </DateTime> or </AliasName>
-        self.checkXML(xmlvalue)
-        timestr = getXmlTextTrimmed(xmlvalue.firstChild)
-
-        if timestr is None:
-            # Catch XML <DateTime /> by setting the value to a default
-            self.value = datetime(2001, 1, 1)
-        else:
-            # .NET tends to create this garbage %Y-%m-%dT%H:%M:%S.0000z
-            # strip everything after the "." away for a posix time_struct
-            if "." in timestr:
-                timestr = timestr[:timestr.index(".")]
-            # If the last character is not numeric, remove it
-            while len(timestr) > 0 and not timestr[-1] in "0123456789":
-                timestr = timestr[:-1]
-            try:
-                self.value = datetime.strptime(timestr, "%Y-%m-%dT%H:%M:%S")
-            except Exception:
-                try:
-                    self.value = datetime.strptime(timestr, "%Y-%m-%d")
-                except Exception:
-                    logger.error("Timestring format is illegible. Expected 2001-01-30T21:22:23 or 2001-01-30, but got " + \
-                                 timestr + " instead. Time will be defaultet to now()")
-                    self.value = datetime(2001, 1, 1)
-
-class QualifiedName(Value):
-    def __init__(self, xmlelement=None):
-        Value.__init__(self)
-        self.ns = 0
-        self.name = None
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-    def parseXML(self, xmlvalue):
-        # Expect <QualifiedName> or <AliasName>
-        #           <NamespaceIndex>Int16<NamespaceIndex>
-        #           <Name>SomeString<Name>
-        #        </QualifiedName> or </AliasName>
-        if not isinstance(xmlvalue, dom.Element):
-            colonindex = xmlvalue.find(":")
-            if colonindex == -1:
-                self.name = xmlvalue
-            else:
-                self.name = xmlvalue[colonindex + 1:]
-                self.ns = int(xmlvalue[:colonindex])
-            return
-
-        self.checkXML(xmlvalue)
-        # Is a namespace index passed?
-        if len(xmlvalue.getElementsByTagName("NamespaceIndex")) != 0:
-            self.ns = int(xmlvalue.getElementsByTagName("NamespaceIndex")[0].firstChild.data)
-        if len(xmlvalue.getElementsByTagName("Name")) != 0:
-            self.name = xmlvalue.getElementsByTagName("Name")[0].firstChild.data
-
-
-    def __str__(self):
-        return "ns=" + str(self.ns) + ";" + str(self.name)
-
-    def isNone(self):
-        return self.name is None
-
-class StatusCode(UInt32):
-    def __init__(self, xmlelement=None):
-        UInt32.__init__(self, xmlelement)
-
-class DiagnosticInfo(Value):
-    def __init__(self, xmlelement=None):
-        Value.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-    def parseXML(self, xmlvalue):
-        self.checkXML(xmlvalue)
-        logger.warn("Not implemented")
-
-class Guid(Value):
-    def __init__(self, xmlelement=None):
-        Value.__init__(self)
-        if xmlelement:
-            self.parseXML(xmlelement)
-
-    def parseXML(self, xmlvalue):
-        self.checkXML(xmlvalue)
-
-        val = getXmlTextTrimmed(xmlvalue.firstChild)
-
-        if val is None:
-            self.value = [0, 0, 0, 0]  # Catch XML <Guid /> by setting the value to a default
-        else:
-            self.value = val
-            self.value = self.value.replace("{", "")
-            self.value = self.value.replace("}", "")
-            self.value = self.value.split("-")
-            tmp = []
-            for g in self.value:
-                try:
-                    tmp.append(int("0x" + g, 16))
-                except Exception:
-                    logger.error("Invalid formatting of Guid. Expected {01234567-89AB-CDEF-ABCD-0123456789AB}, got " + \
-                                 unicode(xmlvalue.firstChild.data))
-                    tmp = [0, 0, 0, 0, 0]
-            if len(tmp) != 5:
-                logger.error("Invalid formatting of Guid. Expected {01234567-89AB-CDEF-ABCD-0123456789AB}, got " + \
-                             unicode(xmlvalue.firstChild.data))
-                tmp = [0, 0, 0, 0]
-            self.value = tmp
diff --git a/ext/open62541/tools/nodeset_compiler/nodes.py b/ext/open62541/tools/nodeset_compiler/nodes.py
deleted file mode 100644
index da686ab..0000000
--- a/ext/open62541/tools/nodeset_compiler/nodes.py
+++ /dev/null
@@ -1,636 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-### This Source Code Form is subject to the terms of the Mozilla Public
-### License, v. 2.0. If a copy of the MPL was not distributed with this
-### file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-###    Copyright 2014-2015 (c) TU-Dresden (Author: Chris Iatrou)
-###    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
-###    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
-
-
-import sys
-import logging
-from datatypes import *
-
-__all__ = ['Reference', 'RefOrAlias', 'Node', 'ReferenceTypeNode',
-           'ObjectNode', 'VariableNode', 'VariableTypeNode',
-           'MethodNode', 'ObjectTypeNode', 'DataTypeNode', 'ViewNode']
-
-logger = logging.getLogger(__name__)
-
-if sys.version_info[0] >= 3:
-    # strings are already parsed to unicode
-    def unicode(s):
-        return s
-
-class Reference(object):
-    # all either nodeids or strings with an alias
-    def __init__(self, source, referenceType, target, isForward):
-        self.source = source
-        self.referenceType = referenceType
-        self.target = target
-        self.isForward = isForward
-
-    def __str__(self):
-        retval = str(self.source)
-        if not self.isForward:
-            retval = retval + "<"
-        retval = retval + "--[" + str(self.referenceType) + "]--"
-        if self.isForward:
-            retval = retval + ">"
-        return retval + str(self.target)
-
-    def __repr__(self):
-        return str(self)
-
-    def __eq__(self, other):
-        return str(self) == str(other)
-
-    def __ne__(self, other):
-        return not self.__eq__(other)
-
-    def __hash__(self):
-        return hash(str(self))
-
-def RefOrAlias(s):
-    try:
-        return NodeId(s)
-    except Exception:
-        return s
-
-class Node(object):
-    def __init__(self):
-        self.id = None
-        self.browseName = None
-        self.displayName = None
-        self.description = None
-        self.symbolicName = None
-        self.writeMask = None
-        self.userWriteMask = None
-        self.references = set()
-        self.hidden = False
-        self.modelUri = None
-        self.parent = None
-        self.parentReference = None
-
-    def __str__(self):
-        return self.__class__.__name__ + "(" + str(self.id) + ")"
-
-    def __repr__(self):
-        return str(self)
-
-    def sanitize(self):
-        pass
-
-    def parseXML(self, xmlelement):
-        for idname in ['NodeId', 'NodeID', 'nodeid']:
-            if xmlelement.hasAttribute(idname):
-                self.id = RefOrAlias(xmlelement.getAttribute(idname))
-
-        for (at, av) in xmlelement.attributes.items():
-            if at == "BrowseName":
-                self.browseName = QualifiedName(av)
-            elif at == "DisplayName":
-                self.displayName = LocalizedText(av)
-            elif at == "Description":
-                self.description = LocalizedText(av)
-            elif at == "WriteMask":
-                self.writeMask = int(av)
-            elif at == "UserWriteMask":
-                self.userWriteMask = int(av)
-            elif at == "EventNotifier":
-                self.eventNotifier = int(av)
-            elif at == "SymbolicName":
-                self.symbolicName = String(av)
-
-        for x in xmlelement.childNodes:
-            if x.nodeType != x.ELEMENT_NODE:
-                continue
-            if x.firstChild:
-                if x.localName == "BrowseName":
-                    self.browseName = QualifiedName(x.firstChild.data)
-                elif x.localName == "DisplayName":
-                    self.displayName = LocalizedText(x.firstChild.data)
-                elif x.localName == "Description":
-                    self.description = LocalizedText(x.firstChild.data)
-                elif x.localName == "WriteMask":
-                    self.writeMask = int(unicode(x.firstChild.data))
-                elif x.localName == "UserWriteMask":
-                    self.userWriteMask = int(unicode(x.firstChild.data))
-                if x.localName == "References":
-                    self.parseXMLReferences(x)
-
-    def parseXMLReferences(self, xmlelement):
-        for ref in xmlelement.childNodes:
-            if ref.nodeType != ref.ELEMENT_NODE:
-                continue
-            source = RefOrAlias(str(self.id))  # deep-copy of the nodeid
-            target = RefOrAlias(ref.firstChild.data)
-
-            reftype = None
-            forward = True
-            for (at, av) in ref.attributes.items():
-                if at == "ReferenceType":
-                    reftype = RefOrAlias(av)
-                elif at == "IsForward":
-                    forward = not "false" in av.lower()
-            self.references.add(Reference(source, reftype, target, forward))
-
-    def getParentReference(self, parentreftypes):
-        # HasSubtype has precedence
-        for ref in self.references:
-            if ref.referenceType == NodeId("ns=0;i=45") and not ref.isForward:
-                return ref
-        for ref in self.references:
-            if ref.referenceType in parentreftypes and not ref.isForward:
-                return ref
-        return None
-
-    def popTypeDef(self):
-        for ref in self.references:
-            if ref.referenceType.i == 40 and ref.isForward:
-                self.references.remove(ref)
-                return ref
-        return Reference(NodeId(), NodeId(), NodeId(), False)
-
-    def replaceAliases(self, aliases):
-        if str(self.id) in aliases:
-            self.id = NodeId(aliases[self.id])
-        if isinstance(self, VariableNode) or isinstance(self, VariableTypeNode):
-            if str(self.dataType) in aliases:
-                self.dataType = NodeId(aliases[self.dataType])
-        new_refs = set()
-        for ref in self.references:
-            if str(ref.source) in aliases:
-                ref.source = NodeId(aliases[ref.source])
-            if str(ref.target) in aliases:
-                ref.target = NodeId(aliases[ref.target])
-            if str(ref.referenceType) in aliases:
-                ref.referenceType = NodeId(aliases[ref.referenceType])
-            new_refs.add(ref)
-        self.references = new_refs
-
-    def replaceNamespaces(self, nsMapping):
-        self.id.ns = nsMapping[self.id.ns]
-        self.browseName.ns = nsMapping[self.browseName.ns]
-        if hasattr(self, 'dataType') and isinstance(self.dataType, NodeId):
-            self.dataType.ns = nsMapping[self.dataType.ns]
-        new_refs = set()
-        for ref in self.references:
-            ref.source.ns = nsMapping[ref.source.ns]
-            ref.target.ns = nsMapping[ref.target.ns]
-            ref.referenceType.ns = nsMapping[ref.referenceType.ns]
-            new_refs.add(ref)
-        self.references = new_refs
-
-class ReferenceTypeNode(Node):
-    def __init__(self, xmlelement=None):
-        Node.__init__(self)
-        self.isAbstract = False
-        self.symmetric = False
-        self.inverseName = ""
-        if xmlelement:
-            ReferenceTypeNode.parseXML(self, xmlelement)
-
-    def parseXML(self, xmlelement):
-        Node.parseXML(self, xmlelement)
-        for (at, av) in xmlelement.attributes.items():
-            if at == "Symmetric":
-                self.symmetric = "false" not in av.lower()
-            elif at == "InverseName":
-                self.inverseName = str(av)
-            elif at == "IsAbstract":
-                self.isAbstract = "false" not in av.lower()
-
-        for x in xmlelement.childNodes:
-            if x.nodeType == x.ELEMENT_NODE:
-                if x.localName == "InverseName" and x.firstChild:
-                    self.inverseName = str(unicode(x.firstChild.data))
-
-class ObjectNode(Node):
-    def __init__(self, xmlelement=None):
-        Node.__init__(self)
-        self.eventNotifier = 0
-        if xmlelement:
-            ObjectNode.parseXML(self, xmlelement)
-
-    def parseXML(self, xmlelement):
-        Node.parseXML(self, xmlelement)
-        for (at, av) in xmlelement.attributes.items():
-            if at == "EventNotifier":
-                self.eventNotifier = int(av)
-
-class VariableNode(Node):
-    def __init__(self, xmlelement=None):
-        Node.__init__(self)
-        self.dataType = None
-        self.valueRank = None
-        self.arrayDimensions = []
-        # Set access levels to read by default
-        self.accessLevel = 1
-        self.userAccessLevel = 1
-        self.minimumSamplingInterval = 0.0
-        self.historizing = False
-        self.value = None
-        self.xmlValueDef = None
-        if xmlelement:
-            VariableNode.parseXML(self, xmlelement)
-
-    def parseXML(self, xmlelement):
-        Node.parseXML(self, xmlelement)
-        for (at, av) in xmlelement.attributes.items():
-            if at == "ValueRank":
-                self.valueRank = int(av)
-            elif at == "AccessLevel":
-                self.accessLevel = int(av)
-            elif at == "UserAccessLevel":
-                self.userAccessLevel = int(av)
-            elif at == "MinimumSamplingInterval":
-                self.minimumSamplingInterval = float(av)
-            elif at == "DataType":
-                self.dataType = RefOrAlias(av)
-            elif  at == "ArrayDimensions":
-                self.arrayDimensions = av.split(",")
-
-        for x in xmlelement.childNodes:
-            if x.nodeType != x.ELEMENT_NODE:
-                continue
-            if x.localName == "Value":
-                self.xmlValueDef = x
-            elif x.localName == "DataType":
-                self.dataType = RefOrAlias(av)
-            elif x.localName == "ValueRank":
-                self.valueRank = int(unicode(x.firstChild.data))
-            elif x.localName == "ArrayDimensions" and len(self.arrayDimensions) == 0:
-                elements = x.getElementsByTagName("ListOfUInt32");
-                if len(elements):
-                    for idx, v in enumerate(elements[0].getElementsByTagName("UInt32")):
-                        self.arrayDimensions.append(v.firstChild.data)
-            elif x.localName == "AccessLevel":
-                self.accessLevel = int(unicode(x.firstChild.data))
-            elif x.localName == "UserAccessLevel":
-                self.userAccessLevel = int(unicode(x.firstChild.data))
-            elif x.localName == "MinimumSamplingInterval":
-                self.minimumSamplingInterval = float(unicode(x.firstChild.data))
-            elif x.localName == "Historizing":
-                self.historizing = "false" not in x.lower()
-
-    def allocateValue(self, nodeset):
-        dataTypeNode = nodeset.getDataTypeNode(self.dataType)
-        if dataTypeNode is None:
-            return False
-
-        # FIXME: Don't build at all or allocate "defaults"? I'm for not building at all.
-        if self.xmlValueDef is None:
-            #logger.warn("Variable " + self.browseName() + "/" + str(self.id()) + " is not initialized. No memory will be allocated.")
-            return False
-
-        self.value = Value()
-        self.value.parseXMLEncoding(self.xmlValueDef, dataTypeNode, self)
-        return True
-
-
-class VariableTypeNode(VariableNode):
-    def __init__(self, xmlelement=None):
-        VariableNode.__init__(self)
-        self.isAbstract = False
-        if xmlelement:
-            VariableTypeNode.parseXML(self, xmlelement)
-
-    def parseXML(self, xmlelement):
-        VariableNode.parseXML(self, xmlelement)
-        for (at, av) in xmlelement.attributes.items():
-            if at == "IsAbstract":
-                self.isAbstract = "false" not in av.lower()
-
-        for x in xmlelement.childNodes:
-            if x.nodeType != x.ELEMENT_NODE:
-                continue
-            if x.localName == "IsAbstract":
-                self.isAbstract = "false" not in av.lower()
-
-class MethodNode(Node):
-    def __init__(self, xmlelement=None):
-        Node.__init__(self)
-        self.executable = True
-        self.userExecutable = True
-        self.methodDecalaration = None
-        if xmlelement:
-            MethodNode.parseXML(self, xmlelement)
-
-    def parseXML(self, xmlelement):
-        Node.parseXML(self, xmlelement)
-        for (at, av) in xmlelement.attributes.items():
-            if at == "Executable":
-                self.executable = "false" not in av.lower()
-            if at == "UserExecutable":
-                self.userExecutable = "false" not in av.lower()
-            if at == "MethodDeclarationId":
-                self.methodDeclaration = str(av)
-
-class ObjectTypeNode(Node):
-    def __init__(self, xmlelement=None):
-        Node.__init__(self)
-        self.isAbstract = False
-        if xmlelement:
-            ObjectTypeNode.parseXML(self, xmlelement)
-
-    def parseXML(self, xmlelement):
-        Node.parseXML(self, xmlelement)
-        for (at, av) in xmlelement.attributes.items():
-            if at == "IsAbstract":
-                self.isAbstract = "false" not in av.lower()
-
-class DataTypeNode(Node):
-    """ DataTypeNode is a subtype of Node describing DataType nodes.
-
-        DataType contain definitions and structure information usable for Variables.
-        The format of this structure is determined by buildEncoding()
-        Two definition styles are distinguished in XML:
-        1) A DataType can be a structure of fields, each field having a name and a type.
-           The type must be either an encodable builtin node (ex. UInt32) or point to
-           another DataType node that inherits its encoding from a builtin type using
-           a inverse "hasSubtype" (hasSuperType) reference.
-        2) A DataType may be an enumeration, in which each field has a name and a numeric
-           value.
-        The definition is stored as an ordered list of tuples. Depending on which
-        definition style was used, the __definition__ will hold
-        1) A list of ("Fieldname", Node) tuples.
-        2) A list of ("Fieldname", int) tuples.
-
-        A DataType (and in consequence all Variables using it) shall be deemed not
-        encodable if any of its fields cannot be traced to an encodable builtin type.
-
-        A DataType shall be further deemed not encodable if it contains mixed structure/
-        enumaration definitions.
-
-        If encodable, the encoding can be retrieved using getEncoding().
-    """
-
-    def __init__(self, xmlelement=None):
-        Node.__init__(self)
-        self.isAbstract = False
-        self.__xmlDefinition__ = None
-        self.__baseTypeEncoding__ = []
-        self.__encodable__ = None
-        self.__definition__ = []
-        self.__isEnum__     = False
-        self.__isOptionSet__ = False
-        if xmlelement:
-            DataTypeNode.parseXML(self, xmlelement)
-
-    def parseXML(self, xmlelement):
-        Node.parseXML(self, xmlelement)
-        for (at, av) in xmlelement.attributes.items():
-            if at == "IsAbstract":
-                self.isAbstract = "false" not in av.lower()
-
-        for x in xmlelement.childNodes:
-            if x.nodeType == x.ELEMENT_NODE:
-                if x.localName == "Definition":
-                    self.__xmlDefinition__ = x
-
-    def isEncodable(self):
-        """ Will return True if buildEncoding() was able to determine which builtin
-            type corresponds to all fields of this DataType.
-
-            If no encoding has been build yet an exception will be thrown.
-            Make sure to call buildEncoding() first.
-        """
-        if self.__encodable__ is None:
-            raise Exception("Encoding needs to be built first using buildEncoding()")
-        return self.__encodable__
-
-    def getEncoding(self):
-        """ If the dataType is encodable, getEncoding() returns a nested list
-            containing the encoding the structure definition for this type.
-
-            If no encoding has been build yet an exception will be thrown.
-            Make sure to call buildEncoding() first.
-
-            If buildEncoding() has failed, an empty list will be returned.
-        """
-        if self.__encodable__ is None:
-            raise Exception("Encoding needs to be built first using buildEncoding()")
-        if not self.__encodable__:
-            return []
-        else:
-            return self.__baseTypeEncoding__
-
-
-    def buildEncoding(self, nodeset, indent=0, force=False, namespaceMapping=None):
-        """ buildEncoding() determines the structure and aliases used for variables
-            of this DataType.
-
-            The function will parse the XML <Definition> of the dataType and extract
-            "Name"-"Type" tuples. If successful, buildEncoding will return a nested
-            list of the following format:
-
-            [['Alias1', ['Alias2', ['BuiltinType']]], [Alias2, ['BuiltinType']], ...]
-
-            Aliases are fieldnames defined by this DataType or DataTypes referenced. A
-            list such as ['DataPoint', ['Int32']] indicates that a value will encode
-            an Int32 with the alias 'DataPoint' such as <DataPoint>12827</DataPoint>.
-            Only the first Alias of a nested list is considered valid for the BuiltinType.
-
-            Single-Elemented lists are always BuiltinTypes. Every nested list must
-            converge in a builtin type to be encodable. buildEncoding will follow
-            the first type inheritance reference (hasSupertype) of the dataType if
-            necessary;
-
-            If instead to "DataType" a numeric "Value" attribute is encountered,
-            the DataType will be considered an enumeration and all Variables using
-            it will be encoded as Int32.
-
-            DataTypes can be either structures or enumeration - mixed definitions will
-            be unencodable.
-
-            Calls to getEncoding() will be iterative. buildEncoding() can be called
-            only once per dataType, with all following calls returning the predetermined
-            value. Use of the 'force=True' parameter will force the Definition to be
-            reparsed.
-
-            After parsing, __definition__ holds the field definition as a list. Note
-            that this might deviate from the encoding, especially if inheritance was
-            used.
-        """
-
-        prefix = " " + "|" * indent + "+"
-
-        if force==True:
-            self.__encodable__ = None
-
-        if self.__encodable__ is not None and self.__encodable__:
-            if self.isEncodable():
-                logger.debug(prefix + str(self.__baseTypeEncoding__) + " (already analyzed)")
-            else:
-                logger.debug( prefix + str(self.__baseTypeEncoding__) + "(already analyzed, not encodable!)")
-            return self.__baseTypeEncoding__
-
-        self.__encodable__ = True
-
-        if indent==0:
-            logger.debug("Parsing DataType " + str(self.browseName) + " (" + str(self.id) + ")")
-
-        if valueIsInternalType(self.browseName.name):
-            self.__baseTypeEncoding__ = [self.browseName.name]
-            self.__encodable__ = True
-            logger.debug( prefix + str(self.browseName) + "*")
-            logger.debug("Encodable as: " + str(self.__baseTypeEncoding__))
-            logger.debug("")
-            return self.__baseTypeEncoding__
-
-
-        # Check if there is a supertype available
-        parentType = None
-        for ref in self.references:
-            if ref.isForward:
-                continue
-                # hasSubtype
-            if ref.referenceType.i == 45:
-                targetNode = nodeset.nodes[ref.target]
-                if targetNode is not None and isinstance(targetNode, DataTypeNode):
-                    parentType = targetNode
-                    break
-
-        if self.__xmlDefinition__ is None:
-            if parentType is not None:
-                logger.debug( prefix + "Attempting definition using supertype " + str(targetNode.browseName) + " for DataType " + " " + str(self.browseName))
-                subenc = targetNode.buildEncoding(nodeset=nodeset, indent=indent+1,
-                                                  namespaceMapping=namespaceMapping)
-                if not targetNode.isEncodable():
-                    self.__encodable__ = False
-                else:
-                    self.__baseTypeEncoding__ = self.__baseTypeEncoding__ + [self.browseName.name, subenc, None]
-            if len(self.__baseTypeEncoding__) == 0:
-                logger.debug(prefix + "No viable definition for " + str(self.browseName) + " " + str(self.id) + " found.")
-                self.__encodable__ = False
-
-            if indent==0:
-                if not self.__encodable__:
-                    logger.debug("Not encodable (partial): " + str(self.__baseTypeEncoding__))
-                else:
-                    logger.debug("Encodable as: " + str(self.__baseTypeEncoding__))
-                logger.debug( "")
-
-            return self.__baseTypeEncoding__
-
-        isEnum = False
-        # An option set is at the same time also an enum, at least for the encoding below
-        isOptionSet = parentType is not None and parentType.id.ns == 0 and parentType.id.i==12755
-
-        # We need to store the definition as ordered data, but can't use orderedDict
-        # for backward compatibility with Python 2.6 and 3.4
-        enumDict = []
-        typeDict = []
-
-        # An XML Definition is provided and will be parsed... now
-        for x in self.__xmlDefinition__.childNodes:
-            if x.nodeType == x.ELEMENT_NODE:
-                fname  = ""
-                fdtype = ""
-                enumVal = ""
-                valueRank = None
-                #symbolicName = None
-                for at,av in x.attributes.items():
-                    if at == "DataType":
-                        fdtype = str(av)
-                        if fdtype in nodeset.aliases:
-                            fdtype = nodeset.aliases[fdtype]
-                    elif at == "Name":
-                        fname = str(av)
-                    elif at == "SymbolicName":
-                        # ignore
-                        continue
-                    #    symbolicName = str(av)
-                    elif at == "Value":
-                        enumVal = int(av)
-                        isEnum = True
-                    elif at == "ValueRank":
-                        valueRank = int(av)
-                    else:
-                        logger.warn("Unknown Field Attribute " + str(at))
-                # This can either be an enumeration OR a structure, not both.
-                # Figure out which of the dictionaries gets the newly read value pair
-                if isEnum:
-                    # This is an enumeration
-                    enumDict.append((fname, enumVal))
-                    continue
-                else:
-                    if fdtype == "":
-                        # If no datatype given use base datatype
-                        fdtype = "i=24"
-
-                    # This might be a subtype... follow the node defined as datatype to find out
-                    # what encoding to use
-                    fdTypeNodeId = NodeId(fdtype)
-                    if namespaceMapping != None:
-                        fdTypeNodeId.ns = namespaceMapping[fdTypeNodeId.ns]
-                    if not fdTypeNodeId in nodeset.nodes:
-                        raise Exception("Node {} not found in nodeset".format(fdTypeNodeId))
-                    dtnode = nodeset.nodes[fdTypeNodeId]
-                    # The node in the datatype element was found. we inherit its encoding,
-                    # but must still ensure that the dtnode is itself validly encodable
-                    typeDict.append([fname, dtnode])
-                    fdtype = str(dtnode.browseName.name)
-                    logger.debug( prefix + fname + " : " + fdtype + " -> " + str(dtnode.id))
-                    subenc = dtnode.buildEncoding(nodeset=nodeset, indent=indent+1,
-                                                  namespaceMapping=namespaceMapping)
-                    self.__baseTypeEncoding__ = self.__baseTypeEncoding__ + [[fname, subenc, valueRank]]
-                    if not dtnode.isEncodable():
-                        # If we inherit an encoding from an unencodable node, this node is
-                        # also not encodable
-                        self.__encodable__ = False
-                        break
-
-        # If we used inheritance to determine an encoding without alias, there is a
-        # the possibility that lists got double-nested despite of only one element
-        # being encoded, such as [['Int32']] or [['alias',['int32']]]. Remove that
-        # enclosing list.
-        while len(self.__baseTypeEncoding__) == 1 and isinstance(self.__baseTypeEncoding__[0], list):
-            self.__baseTypeEncoding__ = self.__baseTypeEncoding__[0]
-
-        if isOptionSet == True:
-            self.__isOptionSet__ = True
-            subenc = parentType.buildEncoding(nodeset=nodeset, namespaceMapping=namespaceMapping)
-            if not parentType.isEncodable():
-                self.__encodable__ = False
-            else:
-                self.__baseTypeEncoding__ = self.__baseTypeEncoding__ + [self.browseName.name, subenc, None]
-                self.__definition__ = enumDict
-            return self.__baseTypeEncoding__
-
-        if isEnum == True:
-            self.__baseTypeEncoding__ = self.__baseTypeEncoding__ + ['Int32']
-            self.__definition__ = enumDict
-            self.__isEnum__ = True
-            logger.debug( prefix+"Int32* -> enumeration with dictionary " + str(enumDict) + " encodable " + str(self.__encodable__))
-            return self.__baseTypeEncoding__
-
-        if indent==0:
-            if not self.__encodable__:
-                logger.debug( "Not encodable (partial): " + str(self.__baseTypeEncoding__))
-            else:
-                logger.debug( "Encodable as: " + str(self.__baseTypeEncoding__))
-                self.__isEnum__ = False
-                self.__definition__ = typeDict
-            logger.debug( "")
-        return self.__baseTypeEncoding__
-
-class ViewNode(Node):
-    def __init__(self, xmlelement=None):
-        Node.__init__(self)
-        self.containsNoLoops = False
-        self.eventNotifier = False
-        if xmlelement:
-            ViewNode.parseXML(self, xmlelement)
-
-    def parseXML(self, xmlelement):
-        Node.parseXML(self, xmlelement)
-        for (at, av) in xmlelement.attributes.items():
-            if at == "ContainsNoLoops":
-                self.containsNoLoops = "false" not in av.lower()
-            if at == "EventNotifier":
-                self.eventNotifier = "false" not in av.lower()
diff --git a/ext/open62541/tools/nodeset_compiler/nodeset.py b/ext/open62541/tools/nodeset_compiler/nodeset.py
deleted file mode 100644
index 8024364..0000000
--- a/ext/open62541/tools/nodeset_compiler/nodeset.py
+++ /dev/null
@@ -1,349 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-### This Source Code Form is subject to the terms of the Mozilla Public
-### License, v. 2.0. If a copy of the MPL was not distributed with this
-### file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-###    Copyright 2014-2015 (c) TU-Dresden (Author: Chris Iatrou)
-###    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
-###    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
-
-from __future__ import print_function
-import sys
-import xml.dom.minidom as dom
-import logging
-import codecs
-import re
-from datatypes import *
-from nodes import *
-from opaque_type_mapping import opaque_type_mapping
-
-__all__ = ['NodeSet', 'getSubTypesOf']
-
-logger = logging.getLogger(__name__)
-
-if sys.version_info[0] >= 3:
-    # strings are already parsed to unicode
-    def unicode(s):
-        return s
-    string_types = str
-else:
-    string_types = basestring 
-
-####################
-# Helper Functions #
-####################
-
-hassubtype = NodeId("ns=0;i=45")
-
-def getSubTypesOf(nodeset, node, skipNodes=[]):
-    if node in skipNodes:
-        return []
-    re = set()
-    re.add(node)
-    for ref in node.references:
-        if (ref.referenceType == hassubtype):
-            skipAll = set()
-            skipAll.update(skipNodes)
-            skipAll.update(re)
-            if (ref.source == node.id and ref.isForward):
-                re.update(getSubTypesOf(nodeset, nodeset.nodes[ref.target], skipNodes=skipAll))
-            elif (ref.target == node.id and not ref.isForward):
-                re.update(getSubTypesOf(nodeset, nodeset.nodes[ref.source], skipNodes=skipAll))
-    return re
-
-def extractNamespaces(xmlfile):
-    # Extract a list of namespaces used. The first namespace is always
-    # "http://opcfoundation.org/UA/". minidom gobbles up
-    # <NamespaceUris></NamespaceUris> elements, without a decent way to reliably
-    # access this dom2 <uri></uri> elements (only attribute xmlns= are accessible
-    # using minidom). We need them for dereferencing though... This function
-    # attempts to do just that.
-
-    namespaces = ["http://opcfoundation.org/UA/"]
-    infile = codecs.open(xmlfile.name, encoding='utf-8')
-    foundURIs = False
-    nsline = ""
-    for line in infile:
-        if "<namespaceuris>" in line.lower():
-            foundURIs = True
-        elif "</namespaceuris>" in line.lower():
-            nsline = nsline + line
-            break
-        if foundURIs:
-            nsline = nsline + line
-
-    if len(nsline) > 0:
-        ns = dom.parseString(nsline).getElementsByTagName("NamespaceUris")
-        for uri in ns[0].childNodes:
-            if uri.nodeType != uri.ELEMENT_NODE:
-                continue
-            if uri.firstChild.data in namespaces:
-                continue
-            namespaces.append(uri.firstChild.data)
-    infile.close()
-    return namespaces
-
-def buildAliasList(xmlelement):
-    """Parses the <Alias> XML Element present in must XML NodeSet definitions.
-       Contents the Alias element are stored in a dictionary for further
-       dereferencing during pointer linkage (see linkOpenPointer())."""
-    aliases = {}
-    for al in xmlelement.childNodes:
-        if al.nodeType == al.ELEMENT_NODE:
-            if al.hasAttribute("Alias"):
-                aliasst = al.getAttribute("Alias")
-                aliasnd = unicode(al.firstChild.data)
-                aliases[aliasst] = aliasnd
-    return aliases
-
-class NodeSet(object):
-    """ This class handles parsing XML description of namespaces, instantiating
-        nodes, linking references, graphing the namespace and compiling a binary
-        representation.
-
-        Note that nodes assigned to this class are not restricted to having a
-        single namespace ID. This class represents the entire physical address
-        space of the binary representation and all nodes that are to be included
-        in that segment of memory.
-    """
-
-    def __init__(self):
-        self.nodes = {}
-        self.aliases = {}
-        self.namespaces = ["http://opcfoundation.org/UA/"]
-
-    def sanitize(self):
-        for n in self.nodes.values():
-            if n.sanitize() == False:
-                raise Exception("Failed to sanitize node " + str(n))
-
-        # Sanitize reference consistency
-        for n in self.nodes.values():
-            for ref in n.references:
-                if not ref.source == n.id:
-                    raise Exception("Reference " + str(ref) + " has an invalid source")
-                if not ref.referenceType in self.nodes:
-                    raise Exception("Reference " + str(ref) + " has an unknown reference type")
-                if not ref.target in self.nodes:
-                    print(self.namespaces)
-                    raise Exception("Reference " + str(ref) + " has an unknown target")
-
-    def addNamespace(self, nsURL):
-        if not nsURL in self.namespaces:
-            self.namespaces.append(nsURL)
-
-    def createNamespaceMapping(self, orig_namespaces):
-        """Creates a dict that maps from the nsindex in the original nodeset to the
-           nsindex in the combined nodeset"""
-        m = {}
-        for index, name in enumerate(orig_namespaces):
-            m[index] = self.namespaces.index(name)
-        return m
-
-    def getNodeByBrowseName(self, idstring):
-        return next((n for n in self.nodes.values() if idstring == n.browseName.name), None)
-
-    def getRoot(self):
-        return self.getNodeByBrowseName("Root")
-
-    def createNode(self, xmlelement, modelUri, hidden=False):
-        ndtype = xmlelement.localName.lower()
-        if ndtype[:2] == "ua":
-            ndtype = ndtype[2:]
-
-        node = None
-        if ndtype == 'variable':
-            node = VariableNode(xmlelement)
-        if ndtype == 'object':
-            node = ObjectNode(xmlelement)
-        if ndtype == 'method':
-            node = MethodNode(xmlelement)
-        if ndtype == 'objecttype':
-            node = ObjectTypeNode(xmlelement)
-        if ndtype == 'variabletype':
-            node = VariableTypeNode(xmlelement)
-        if ndtype == 'methodtype':
-            node = MethodNode(xmlelement)
-        if ndtype == 'datatype':
-            node = DataTypeNode(xmlelement)
-        if ndtype == 'referencetype':
-            node = ReferenceTypeNode(xmlelement)
-
-        if node is None:
-            return None
-
-        node.modelUri = modelUri
-        node.hidden = hidden
-        return node
-
-    def hide_node(self, nodeId, hidden=True):
-        if not nodeId in self.nodes:
-            return False
-        node = self.nodes[nodeId]
-        node.hidden = hidden
-        return True
-
-    def merge_dicts(self, *dict_args):
-        """
-        Given any number of dicts, shallow copy and merge into a new dict,
-        precedence goes to key value pairs in latter dicts.
-        """
-        result = {}
-        for dictionary in dict_args:
-            result.update(dictionary)
-        return result
-
-    def addNodeSet(self, xmlfile, hidden=False, typesArray="UA_TYPES"):
-        # Extract NodeSet DOM
-
-        fileContent = xmlfile.read()
-        # Remove BOM since the dom parser cannot handle it on python 3 windows
-        if fileContent.startswith( codecs.BOM_UTF8 ):
-            fileContent = fileContent.lstrip( codecs.BOM_UTF8 )
-        if (sys.version_info >= (3, 0)):
-            fileContent = fileContent.decode("utf-8")
-
-        # Remove the uax namespace from tags. UaModeler adds this namespace to some elements
-        fileContent = re.sub(r"<([/]?)uax:(.+?)([/]?)>", "<\g<1>\g<2>\g<3>>", fileContent)
-
-        nodesets = dom.parseString(fileContent).getElementsByTagName("UANodeSet")
-        if len(nodesets) == 0 or len(nodesets) > 1:
-            raise Exception(self, self.originXML + " contains no or more then 1 nodeset")
-        nodeset = nodesets[0]
-
-
-        # Extract the modelUri
-        try:
-            modelTag = nodeset.getElementsByTagName("Models")[0].getElementsByTagName("Model")[0]
-            modelUri = modelTag.attributes["ModelUri"].nodeValue
-        except Exception:
-            # Ignore exception and try to use namespace array
-            modelUri = None
-
-
-        # Create the namespace mapping
-        orig_namespaces = extractNamespaces(xmlfile)  # List of namespaces used in the xml file
-        if modelUri is None and len(orig_namespaces) > 1:
-            modelUri = orig_namespaces[1]
-
-        if modelUri is None:
-            raise Exception(self, self.originXML + " does not define the nodeset URI in Models/Model/ModelUri or NamespaceUris array.")
-
-        for ns in orig_namespaces:
-            self.addNamespace(ns)
-        namespaceMapping = self.createNamespaceMapping(orig_namespaces) # mapping for this file
-
-        # Extract the aliases
-        for nd in nodeset.childNodes:
-            if nd.nodeType != nd.ELEMENT_NODE:
-                continue
-            ndtype = nd.localName.lower()
-            if 'aliases' in ndtype:
-                self.aliases = self.merge_dicts(self.aliases, buildAliasList(nd))
-
-        # Instantiate nodes
-        newnodes = {}
-        for nd in nodeset.childNodes:
-            if nd.nodeType != nd.ELEMENT_NODE:
-                continue
-            node = self.createNode(nd, modelUri, hidden)
-            if not node:
-                continue
-            node.replaceAliases(self.aliases)
-            node.replaceNamespaces(namespaceMapping)
-            node.typesArray = typesArray
-
-            # Add the node the the global dict
-            if node.id in self.nodes:
-                raise Exception("XMLElement with duplicate ID " + str(node.id))
-            self.nodes[node.id] = node
-            newnodes[node.id] = node
-
-        # Parse Datatypes in order to find out what the XML keyed values actually
-        # represent.
-        # Ex. <rpm>123</rpm> is not encodable
-        #     only after parsing the datatypes, it is known that
-        #     rpm is encoded as a double
-        for n in newnodes.values():
-            if isinstance(n, DataTypeNode):
-                n.buildEncoding(self, namespaceMapping=namespaceMapping)
-
-    def getBinaryEncodingIdForNode(self, nodeId):
-        """
-        The node should have a 'HasEncoding' forward reference which points to the encoding ids.
-        These can be XML Encoding or Binary Encoding. Therefore we also need to check if the SymbolicName
-        of the target node is "DefaultBinary"
-        """
-        node = self.nodes[nodeId]
-        for ref in node.references:
-            if ref.referenceType.ns == 0 and ref.referenceType.i == 38:
-                refNode = self.nodes[ref.target]
-                if refNode.symbolicName.value == "DefaultBinary":
-                    return ref.target
-        raise Exception("No DefaultBinary encoding defined for node " + str(nodeId))
-
-    def allocateVariables(self):
-        for n in self.nodes.values():
-            if isinstance(n, VariableNode):
-                n.allocateValue(self)
-
-    def getBaseDataType(self, node):
-        if node is None:
-            return None
-        if node.browseName.name not in opaque_type_mapping:
-            return node
-        for ref in node.references:
-            if ref.isForward:
-                continue
-            if ref.referenceType.i == 45:
-                return self.getBaseDataType(self.nodes[ref.target])
-        return node
-
-    def getNodeTypeDefinition(self, node):
-        for ref in node.references:
-            # 40 = HasTypeDefinition
-            if ref.referenceType.i == 40 and ref.isForward:
-                return self.nodes[ref.target]
-        return None
-
-    def getDataTypeNode(self, dataType):
-        if isinstance(dataType, string_types):
-            if not valueIsInternalType(dataType):
-                logger.error("Not a valid dataType string: " + dataType)
-                return None
-            return self.nodes[NodeId(self.aliases[dataType])]
-        if isinstance(dataType, NodeId):
-            if dataType.i == 0:
-                return None
-            dataTypeNode = self.nodes[dataType]
-            if not isinstance(dataTypeNode, DataTypeNode):
-                logger.error("Node id " + str(dataType) + " is not reference a valid dataType.")
-                return None
-            return dataTypeNode
-        return None
-
-    def getRelevantOrderingReferences(self):
-        relevant_types = set()
-        relevant_types.update(getSubTypesOf(self, self.getNodeByBrowseName("HierarchicalReferences"), []))
-        relevant_types.update(getSubTypesOf(self, self.getNodeByBrowseName("HasEncoding"), []))
-        relevant_types.update(getSubTypesOf(self, self.getNodeByBrowseName("HasTypeDefinition"), []))
-        return list(map(lambda x: x.id, relevant_types))
-
-    def addInverseReferences(self):
-        # Ensure that every reference has an inverse reference in the target
-        for u in self.nodes.values():
-            for ref in u.references:
-                back = Reference(ref.target, ref.referenceType, ref.source, not ref.isForward)
-                self.nodes[ref.target].references.add(back) # ref set does not make a duplicate entry
-
-    def setNodeParent(self):
-        parentreftypes = getSubTypesOf(self, self.getNodeByBrowseName("HierarchicalReferences"))
-        parentreftypes = list(map(lambda x: x.id, parentreftypes))
-
-        for node in self.nodes.values():
-            parentref = node.getParentReference(parentreftypes)
-            if parentref is not None:
-                node.parent = self.nodes[parentref.target]
-                node.parentReference = self.nodes[parentref.referenceType]
diff --git a/ext/open62541/tools/nodeset_compiler/nodeset_compiler.py b/ext/open62541/tools/nodeset_compiler/nodeset_compiler.py
deleted file mode 100644
index 2aafd9b..0000000
--- a/ext/open62541/tools/nodeset_compiler/nodeset_compiler.py
+++ /dev/null
@@ -1,191 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-### This Source Code Form is subject to the terms of the Mozilla Public
-### License, v. 2.0. If a copy of the MPL was not distributed with this
-### file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-###    Copyright 2014-2015 (c) TU-Dresden (Author: Chris Iatrou)
-###    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
-###    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
-
-
-import logging
-import argparse
-import sys
-from datatypes import NodeId
-from nodeset import *
-
-parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter)
-parser.add_argument('-e', '--existing',
-                    metavar="<existingNodeSetXML>",
-                    type=argparse.FileType('rb'),
-                    dest="existing",
-                    action='append',
-                    default=[],
-                    help='NodeSet XML files with nodes that are already present on the server.')
-
-parser.add_argument('-x', '--xml',
-                    metavar="<nodeSetXML>",
-                    type=argparse.FileType('rb'),
-                    action='append',
-                    dest="infiles",
-                    default=[],
-                    help='NodeSet XML files with nodes that shall be generated.')
-
-parser.add_argument('outputFile',
-                    metavar='<outputFile>',
-                    help='The path/basename for the <output file>.c and <output file>.h files to be generated. This will also be the function name used in the header and c-file.')
-
-parser.add_argument('--internal-headers',
-                    action='store_true',
-                    dest="internal_headers",
-                    help='Include internal headers instead of amalgamated header')
-
-parser.add_argument('-b', '--blacklist',
-                    metavar="<blacklistFile>",
-                    type=argparse.FileType('r'),
-                    action='append',
-                    dest="blacklistFiles",
-                    default=[],
-                    help='Loads a list of NodeIDs stored in blacklistFile (one NodeID per line). Any of the nodeIds encountered in this file will be removed from the nodeset prior to compilation. Any references to these nodes will also be removed')
-
-parser.add_argument('-i', '--ignore',
-                    metavar="<ignoreFile>",
-                    type=argparse.FileType('r'),
-                    action='append',
-                    dest="ignoreFiles",
-                    default=[],
-                    help='Loads a list of NodeIDs stored in ignoreFile (one NodeID per line). Any of the nodeIds encountered in this file will be kept in the nodestore but not printed in the generated code')
-
-parser.add_argument('-t', '--types-array',
-                    metavar="<typesArray>",
-                    action='append',
-                    type=str,
-                    dest="typesArray",
-                    default=[],
-                    help='Types array for the given namespace. Can be used mutliple times to define (in the same order as the .xml files, first for --existing, then --xml) the type arrays')
-
-parser.add_argument('-v', '--verbose', action='count',
-                    default=1,
-                    help='Make the script more verbose. Can be applied up to 4 times')
-
-parser.add_argument('--backend',
-                    default='open62541',
-                    const='open62541',
-                    nargs='?',
-                    choices=['open62541', 'graphviz'],
-                    help='Backend for the output files (default: %(default)s)')
-
-args = parser.parse_args()
-
-# Set up logging
-# By default logging outputs to stderr. We want to redirect it to stdout, otherwise build output from cmake
-# is in stdout and nodeset compiler in stderr
-logging.basicConfig(stream=sys.stdout)
-logger = logging.getLogger(__name__)
-logger.setLevel(logging.INFO)
-verbosity = 0
-if args.verbose:
-    verbosity = int(args.verbose)
-if (verbosity == 1):
-    logging.basicConfig(level=logging.ERROR)
-elif (verbosity == 2):
-    logging.basicConfig(level=logging.WARNING)
-elif (verbosity == 3):
-    logging.basicConfig(level=logging.INFO)
-elif (verbosity >= 4):
-    logging.basicConfig(level=logging.DEBUG)
-else:
-    logging.basicConfig(level=logging.CRITICAL)
-
-# Set up logging
-logger = logging.getLogger(__name__)
-# Create a new nodeset. The nodeset name is not significant.
-# Parse the XML files
-ns = NodeSet()
-nsCount = 0
-loadedFiles = list()
-
-
-def getTypesArray(nsIdx):
-    if nsIdx < len(args.typesArray):
-        return args.typesArray[nsIdx]
-    else:
-        return "UA_TYPES"
-
-for xmlfile in args.existing:
-    if xmlfile.name in loadedFiles:
-        logger.info("Skipping Nodeset since it is already loaded: {} ".format(xmlfile.name))
-        continue
-    loadedFiles.append(xmlfile.name)
-    logger.info("Preprocessing (existing) " + str(xmlfile.name))
-    ns.addNodeSet(xmlfile, True, typesArray=getTypesArray(nsCount))
-    nsCount +=1
-for xmlfile in args.infiles:
-    if xmlfile.name in loadedFiles:
-        logger.info("Skipping Nodeset since it is already loaded: {} ".format(xmlfile.name))
-        continue
-    loadedFiles.append(xmlfile.name)
-    logger.info("Preprocessing " + str(xmlfile.name))
-    ns.addNodeSet(xmlfile, typesArray=getTypesArray(nsCount))
-    nsCount +=1
-
-# # We need to notify the open62541 server of the namespaces used to be able to use i.e. ns=3
-# namespaceArrayNames = preProc.getUsedNamespaceArrayNames()
-# for key in namespaceArrayNames:
-#   ns.addNamespace(key, namespaceArrayNames[key])
-
-# Remove blacklisted nodes from the nodeset
-# Doing this now ensures that unlinkable pointers will be cleanly removed
-# during sanitation.
-for blacklist in args.blacklistFiles:
-    for line in blacklist.readlines():
-        line = line.replace(" ", "")
-        id = line.replace("\n", "")
-        if ns.getNodeByIDString(id) is None:
-            logger.info("Can't blacklist node, namespace does currently not contain a node with id " + str(id))
-        else:
-            ns.removeNodeById(line)
-    blacklist.close()
-
-# Set the nodes from the ignore list to hidden. This removes them from dependency calculation
-# and from printing their generated code.
-# These nodes should be already pre-created on the server to avoid any errors during
-# creation.
-for ignoreFile in args.ignoreFiles:
-    for line in ignoreFile.readlines():
-        line = line.replace(" ", "")
-        id = line.replace("\n", "")
-        ns.hide_node(NodeId(id))
-        #if not ns.hide_node(NodeId(id)):
-        #    logger.info("Can't ignore node, namespace does currently not contain a node with id " + str(id))
-    ignoreFile.close()
-
-# Remove nodes that are not printable or contain parsing errors, such as
-# unresolvable or no references or invalid NodeIDs
-ns.sanitize()
-
-# Allocate/Parse the data values. In order to do this, we must have run
-# buidEncodingRules.
-ns.allocateVariables()
-
-ns.addInverseReferences()
-
-ns.setNodeParent()
-
-logger.info("Generating Code for Backend: {}".format(args.backend))
-
-if args.backend == "open62541":
-    # Create the C code with the open62541 backend of the compiler
-    from backend_open62541 import generateOpen62541Code
-    generateOpen62541Code(ns, args.outputFile, args.internal_headers, args.typesArray)
-elif args.backend == "graphviz":
-    from backend_graphviz import generateGraphvizCode
-    generateGraphvizCode(ns, filename=args.outputFile)
-else:
-    logger.error("Unsupported backend: {}".format(args.backend))
-    exit(1)
-
-
-logger.info("NodeSet generation code successfully printed")
diff --git a/ext/open62541/tools/nodeset_compiler/nodeset_testing.py b/ext/open62541/tools/nodeset_compiler/nodeset_testing.py
deleted file mode 100644
index a112108..0000000
--- a/ext/open62541/tools/nodeset_compiler/nodeset_testing.py
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/usr/bin/env python
-
-### This Source Code Form is subject to the terms of the Mozilla Public
-### License, v. 2.0. If a copy of the MPL was not distributed with this
-### file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-###    Copyright 2014-2015 (c) TU-Dresden (Author: Chris Iatrou)
-###    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
-###    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
-
-import codecs
-from nodeset import *
-
-class testing:
-    def __init__(self):
-        self.ns = NodeSet("testing")
-
-        logger.debug("Phase 1: Reading XML file nodessets")
-        self.ns.parseXML("Opc.Ua.NodeSet2.xml")
-        # self.ns.parseXML("Opc.Ua.NodeSet2.Part4.xml")
-        # self.ns.parseXML("Opc.Ua.NodeSet2.Part5.xml")
-        # self.ns.parseXML("Opc.Ua.SimulationNodeSet2.xml")
-
-        logger.debug("Phase 2: Linking address space references and datatypes")
-        self.ns.linkOpenPointers()
-        self.ns.sanitize()
-
-        logger.debug("Phase 3: Allocating variable value data")
-        self.ns.allocateVariables()
-
-        bin = self.ns.buildBinary()
-        f = codecs.open("binary.base64", "w+", encoding='utf-8')
-        f.write(bin.encode("base64"))
-        f.close()
-
-        allnodes = self.ns.nodes
-        ns = [self.ns.getRoot()]
-
-        i = 0
-        # print "Starting depth search on " + str(len(allnodes)) + " nodes starting
-        # with from " + str(ns)
-        while (len(ns) < len(allnodes)):
-            i = i + 1
-            tmp = []
-            print("Iteration: " + str(i))
-            for n in ns:
-                tmp.append(n)
-                for r in n.getReferences():
-                    if (not r.target() in tmp):
-                        tmp.append(r.target())
-            print("...tmp, " + str(len(tmp)) + " nodes discovered")
-            ns = []
-            for n in tmp:
-                ns.append(n)
-            print("...done, " + str(len(ns)) + " nodes discovered")
-
-class testing_open62541_header:
-    def __init__(self):
-        self.ns = opcua_ns("testing")
-
-        logger.debug("Phase 1: Reading XML file nodessets")
-        self.ns.parseXML("Opc.Ua.NodeSet2.xml")
-        # self.ns.parseXML("Opc.Ua.NodeSet2.Part4.xml")
-        # self.ns.parseXML("Opc.Ua.NodeSet2.Part5.xml")
-        # self.ns.parseXML("Opc.Ua.SimulationNodeSet2.xml")
-
-        logger.debug("Phase 2: Linking address space references and datatypes")
-        self.ns.linkOpenPointers()
-        self.ns.sanitize()
-
-        logger.debug("Phase 3: Calling C Printers")
-        code = self.ns.printOpen62541Header()
-
-        codeout = codecs.open("./open62541_nodeset.c", "w+", encoding='utf-8')
-        for line in code:
-            codeout.write(line + "\n")
-        codeout.close()
-        return
-
-if __name__ == '__main__':
-    tst = testing_open62541_header()
diff --git a/ext/open62541/tools/nodeset_compiler/opaque_type_mapping.py b/ext/open62541/tools/nodeset_compiler/opaque_type_mapping.py
deleted file mode 100644
index 2906ed4..0000000
--- a/ext/open62541/tools/nodeset_compiler/opaque_type_mapping.py
+++ /dev/null
@@ -1,144 +0,0 @@
-### This Source Code Form is subject to the terms of the Mozilla Public
-### License, v. 2.0. If a copy of the MPL was not distributed with this
-### file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-###    Copyright 2014-2015 (c) TU-Dresden (Author: Chris Iatrou)
-###    Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
-###    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
-
-# Opaque types are in general defined as simple byte strings. For the base opaque types there is a corresponding node id definition
-# in the nodeset. E.g. Opc.Ua.Types.bsd contains the simple definition for OpaqueType LocaleId. In Opc.Ua.NodeSet2.xml the LocaleId
-# is defined as a Subtype of String(i=12) thus LocaleId is a String object.
-# TODO we can automate this mapping by loading the NodeSet2.xml and read those mappings automatically. For now we just use this map
-opaque_type_mapping = {
-    'Image': {
-        'ns': 0,
-        'id': 15,
-        'name': 'ByteString'
-    },
-    'Number': {
-        'ns': 0,
-        'id': 24,
-        'name': 'BaseDataType'
-    },
-    'UInteger': {
-        'ns': 0,
-        'id': 24,
-        'name': 'BaseDataType'
-    },
-    'ImageBMP': {
-        'ns': 0,
-        'id': 15,
-        'name': 'ByteString'
-    },
-    'ImageGIF': {
-        'ns': 0,
-        'id': 15,
-        'name': 'ByteString'
-    },
-    'ImageJPG': {
-        'ns': 0,
-        'id': 15,
-        'name': 'ByteString'
-    },
-    'ImagePNG': {
-        'ns': 0,
-        'id': 15,
-        'name': 'ByteString'
-    },
-    'BitFieldMaskDataType': {
-        'ns': 0,
-        'id': 9,
-        'name': 'UInt64'
-    },
-    'NormalizedString': {
-        'ns': 0,
-        'id': 12,
-        'name': 'String'
-    },
-    'DecimalString': {
-        'ns': 0,
-        'id': 12,
-        'name': 'String'
-    },
-    'DurationString': {
-        'ns': 0,
-        'id': 12,
-        'name': 'String'
-    },
-    'TimeString': {
-        'ns': 0,
-        'id': 12,
-        'name': 'String'
-    },
-    'DateString': {
-        'ns': 0,
-        'id': 12,
-        'name': 'String'
-    },
-    'Duration': {
-        'ns': 0,
-        'id': 11,
-        'name': 'Double'
-    },
-    'UtcTime': {
-        'ns': 0,
-        'id': 13,
-        'name': 'DateTime'
-    },
-    'LocaleId': {
-        'ns': 0,
-        'id': 12,
-        'name': 'String'
-    },
-    'IntegerId': {
-        'ns': 0,
-        'id': 7,
-        'name': 'UInt32'
-    },
-    'ApplicationInstanceCertificate': {
-        'ns': 0,
-        'id': 15,
-        'name': 'ByteString'
-    },
-    'SessionAuthenticationToken': {
-        'ns': 0,
-        'id': 17,
-        'name': 'NodeId'
-    },
-    'ContinuationPoint': {
-        'ns': 0,
-        'id': 15,
-        'name': 'ByteString'
-    },
-    'Counter': {
-        'ns': 0,
-        'id': 7,
-        'name': 'UInt32'
-    },
-    'NumericRange': {
-        'ns': 0,
-        'id': 12,
-        'name': 'String'
-    },
-    'Time': {
-        'ns': 0,
-        'id': 12,
-        'name': 'String'
-    },
-    'Date': {
-        'ns': 0,
-        'id': 13,
-        'name': 'DateTime'
-    }
-}
-
-def get_base_type_for_opaque(opaqueTypeName):
-    if opaqueTypeName in opaque_type_mapping:
-        return opaque_type_mapping[opaqueTypeName]
-    # Default if not in mapping is ByteString
-    return {
-        'ns': 0,
-        'id': 15,
-        'name': 'ByteString'
-    }
diff --git a/ext/open62541/tools/packaging/CMakeLists.txt b/ext/open62541/tools/packaging/CMakeLists.txt
deleted file mode 100644
index b1f7966..0000000
--- a/ext/open62541/tools/packaging/CMakeLists.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-##########################

-# Packaging (DEB/RPM)    #

-##########################

-# invoke via `make package`

-

-set(CPACK_GENERATOR "TGZ;DEB;RPM")

-set(CPACK_PACKAGE_VENDOR "open62541 team")

-set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OPC UA implementation")

-set(CPACK_PACKAGE_DESCRIPTION "open62541 is a C-based library (linking with C++ projects is possible) with all necessary tools to implement dedicated OPC UA clients and servers, or to integrate OPC UA-based communication into existing applications.")

-set(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/README.md")

-set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")

-set(CPACK_PACKAGE_VERSION_MAJOR "${OPEN62541_VER_MAJOR}")

-set(CPACK_PACKAGE_VERSION_MINOR "${OPEN62541_VER_MINOR}")

-set(CPACK_PACKAGE_VERSION_PATCH "${OPEN62541_VER_PATCH}${OPEN62541_VER_LABEL}")

-set(CPACK_DEBIAN_PACKAGE_MAINTAINER "open62541 team") #required

-

-include(CPack)

diff --git a/ext/open62541/tools/packaging/tito/tito.props b/ext/open62541/tools/packaging/tito/tito.props
deleted file mode 100644
index eab3f19..0000000
--- a/ext/open62541/tools/packaging/tito/tito.props
+++ /dev/null
@@ -1,5 +0,0 @@
-[buildconfig]
-builder = tito.builder.Builder
-tagger = tito.tagger.VersionTagger
-changelog_do_not_remove_cherrypick = 0
-changelog_format = %s (%ae)
diff --git a/ext/open62541/tools/prepare_packaging.py b/ext/open62541/tools/prepare_packaging.py
deleted file mode 100644
index 99b95f5..0000000
--- a/ext/open62541/tools/prepare_packaging.py
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/usr/bin/env python
-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-import subprocess
-import os
-import re
-from email.utils import formatdate
-
-
-dirpath = os.path.join(os.path.dirname(os.path.realpath(__file__)),"..")
-
-git_describe_version = subprocess.check_output(["git", "describe", "--tags", "--dirty", "--match", "v*"]).decode('utf-8').strip()
-
-# v1.2
-# v1.2.3
-# v1.2.3-rc1
-# v1.2.3-rc1-dirty
-# v1.2.3-5-g4538abcd
-# v1.2.3-5-g4538abcd-dirty
-# git_describe_version = "v1.2.3"
-
-m = re.match(r"^v([0-9]+)(\.[0-9]+)?(\.[0-9]+)?(-(.*)+)?$", git_describe_version)
-version_major = m.group(1) if m.group(1) is not None else "0"
-version_minor = m.group(2).replace(".", "") if m.group(2) is not None else "0"
-version_patch = m.group(3).replace(".", "") if m.group(3) is not None else "0"
-version_label = m.group(4) if m.group(4) is not None else ""
-#print("major {} minor {} patch {} label {}".format(version_major, version_minor, version_patch, version_label))
-
-debian_distribution = "unstable"
-if version_label is not "":
-    debian_distribution = "UNRELEASED"
-
-debian_path = os.path.join(dirpath, "debian")
-changelog_file = os.path.join(debian_path, "changelog")
-
-# remove leading 'v'
-changelog_version = git_describe_version[1:] if git_describe_version[0] == 'v' else git_describe_version
-
-with open(changelog_file, 'r') as original: data = original.read()
-with open(changelog_file, 'w') as modified:
-    new_entry = """open62541 ({version}) {distribution}; urgency=medium
-
-  * Full changelog is available here: https://github.com/open62541/open62541/blob/master/CHANGELOG
-
- -- open62541 Team <open62541-core@googlegroups.com>  {time}
-""".format(version=changelog_version, time=formatdate(), distribution = debian_distribution)
-
-    modified.write(new_entry + "\n" + data)
-
-# Create control file and replace template variables
-control_file_template = os.path.join(debian_path, "control-template")
-control_file = os.path.join(debian_path, "control")
-os.rename(control_file_template, control_file)
-
-with open(control_file, 'r+') as f:
-    content = f.read()
-    f.seek(0)
-    f.truncate()
-    f.write(content.replace('<soname>', "{}".format(version_major)))
-
-
-# rename the install template to match the soname
-install_file_template = os.path.join(debian_path, "libopen62541.install-template")
-install_file = os.path.join(debian_path, "libopen62541-{}.install".format(version_major))
-os.rename(install_file_template, install_file)
-
-install_file_template = os.path.join(debian_path, "libopen62541-dev.install-template")
-install_file = os.path.join(debian_path, "libopen62541-{}-dev.install".format(version_major))
-os.rename(install_file_template, install_file)
-
-
-# Create rule file and replace template variables
-rule_file_template = os.path.join(debian_path, "rules-template")
-rule_file = os.path.join(debian_path, "rules")
-os.rename(rule_file_template, rule_file)
-
-with open(rule_file, 'r+') as f:
-    content = f.read()
-    f.seek(0)
-    f.truncate()
-    content = content.replace('<soname>', "{}".format(version_major))
-    f.write(content)
-
-# Update CMakeLists.txt to include full version string
-
-with open(os.path.join(dirpath,"CMakeLists.txt"), 'r+') as f:
-    lines = f.readlines()
-    f.seek(0)
-    f.truncate()
-    for idx, line in enumerate(lines):
-        if idx == 2:
-            f.write('set(OPEN62541_VERSION "{}")\n'.format(git_describe_version))
-        f.write(line)
diff --git a/ext/open62541/tools/schema/Custom.Opc.Ua.Transport.bsd b/ext/open62541/tools/schema/Custom.Opc.Ua.Transport.bsd
deleted file mode 100644
index 81a880c..0000000
--- a/ext/open62541/tools/schema/Custom.Opc.Ua.Transport.bsd
+++ /dev/null
@@ -1,102 +0,0 @@
-<opc:TypeDictionary
-  xmlns:opc="http://opcfoundation.org/BinarySchema/"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xmlns:ua="http://opcfoundation.org/UA/"
-  xmlns:tns="http://opcfoundation.org/UA/"
-  DefaultByteOrder="LittleEndian"
-  TargetNamespace="http://opcfoundation.org/UA/"
->
-
-  <opc:Import Namespace="http://opcfoundation.org/BinarySchema/" />
-
-<!-- Transport types begin  -->
-
-  <opc:EnumeratedType Name="MessageType" LengthInBits="32">
-    <opc:Documentation>Message Type and whether the message contains an intermediate chunk</opc:Documentation>
-    <opc:EnumeratedValue Name="ACK" Value="0x4B4341" />
-    <opc:EnumeratedValue Name="HEL" Value="0x4C4548" />
-    <opc:EnumeratedValue Name="MSG" Value="0x47534D" />
-    <opc:EnumeratedValue Name="OPN" Value="0x4E504F" />
-    <opc:EnumeratedValue Name="CLO" Value="0x4F4C43" />
-    <opc:EnumeratedValue Name="ERR" Value="0x525245" />
-  </opc:EnumeratedType>
-  
-  <opc:EnumeratedType Name="ChunkType" LengthInBits="32">
-    <opc:Documentation>Type of the chunk</opc:Documentation>
-    <opc:EnumeratedValue Name="FINAL" Value="0x46000000" />
-    <opc:EnumeratedValue Name="INTERMEDIATE" Value="0x43000000" />
-    <opc:EnumeratedValue Name="ABORT" Value="0x41000000" />
-
-  </opc:EnumeratedType>
-
-   <opc:StructuredType Name="TcpMessageHeader">
-    <opc:Documentation>TCP Header</opc:Documentation>
-    <opc:Field Name="MessageTypeAndChunkType" TypeName="opc:UInt32" />
-    <opc:Field Name="MessageSize" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-  
-   <opc:StructuredType Name="TcpHelloMessage">
-    <opc:Documentation>Hello Message</opc:Documentation>
-    <opc:Field Name="ProtocolVersion" TypeName="opc:UInt32" />
-    <opc:Field Name="ReceiveBufferSize" TypeName="opc:UInt32" />
-    <opc:Field Name="SendBufferSize" TypeName="opc:UInt32" />
-    <opc:Field Name="MaxMessageSize" TypeName="opc:UInt32" />
-	<opc:Field Name="MaxChunkCount" TypeName="opc:UInt32" />
-    <opc:Field Name="EndpointUrl" TypeName="opc:String" />
-  </opc:StructuredType>
-  
-   <opc:StructuredType Name="TcpAcknowledgeMessage">
-    <opc:Documentation>Acknowledge Message</opc:Documentation>
-    <opc:Field Name="ProtocolVersion" TypeName="opc:UInt32" />
-    <opc:Field Name="ReceiveBufferSize" TypeName="opc:UInt32" />
-    <opc:Field Name="SendBufferSize" TypeName="opc:UInt32" />
-    <opc:Field Name="MaxMessageSize" TypeName="opc:UInt32" />
-	<opc:Field Name="MaxChunkCount" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="TcpErrorMessage">
-    <opc:Documentation>Error Message</opc:Documentation>
-    <opc:Field Name="Error" TypeName="opc:UInt32" />
-    <opc:Field Name="Reason" TypeName="opc:String" />
-  </opc:StructuredType>
-  
-  <opc:StructuredType Name="SecureConversationMessageHeader">
-    <opc:Documentation>Secure Layer Sequence Header</opc:Documentation>
-    <opc:Field Name="MessageHeader" TypeName="opc:TcpMessageHeader" />
-    <opc:Field Name="SecureChannelId" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-  
-  <opc:StructuredType Name="AsymmetricAlgorithmSecurityHeader">
-    <opc:Documentation>Security Header</opc:Documentation>
-    <opc:Field Name="SecurityPolicyUri" TypeName="opc:ByteString" />
-    <opc:Field Name="SenderCertificate" TypeName="opc:ByteString" />
-    <opc:Field Name="ReceiverCertificateThumbprint" TypeName="opc:ByteString" />
-  </opc:StructuredType>
-  
-  <opc:StructuredType Name="SymmetricAlgorithmSecurityHeader">
-    <opc:Documentation>Secure Layer Symmetric Algorithm Header</opc:Documentation>
-    <opc:Field Name="TokenId" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-  
-  <opc:StructuredType Name="SequenceHeader">
-    <opc:Documentation>Secure Layer Sequence Header</opc:Documentation>
-    <opc:Field Name="SequenceNumber" TypeName="opc:UInt32" />
-    <opc:Field Name="RequestId" TypeName="opc:UInt32"/>
-  </opc:StructuredType>
-  
-  <opc:StructuredType Name="SecureConversationMessageFooter">
-    <opc:Documentation>Secure Conversation Message Footer</opc:Documentation>
-    <opc:Field Name="PaddingSize" TypeName="opc:Byte" />
-    <opc:Field Name="Padding" TypeName="opc:Byte" LengthField="PaddingSize" />
-    <opc:Field Name="Signature" TypeName="opc:Byte"/>
-  </opc:StructuredType>
-  
-  <opc:StructuredType Name="SecureConversationMessageAbortBody">
-    <opc:Documentation>Secure Conversation Message Abort Body</opc:Documentation>
-    <opc:Field Name="Error" TypeName="opc:UInt32" />
-    <opc:Field Name="Reason" TypeName="opc:String" />
-  </opc:StructuredType>
- 
-<!-- Transport types end -->
-
-</opc:TypeDictionary>
diff --git a/ext/open62541/tools/schema/NodeIds.csv b/ext/open62541/tools/schema/NodeIds.csv
deleted file mode 100644
index 760f0c1..0000000
--- a/ext/open62541/tools/schema/NodeIds.csv
+++ /dev/null
@@ -1,10707 +0,0 @@
-Boolean,1,DataType
-SByte,2,DataType
-Byte,3,DataType
-Int16,4,DataType
-UInt16,5,DataType
-Int32,6,DataType
-UInt32,7,DataType
-Int64,8,DataType
-UInt64,9,DataType
-Float,10,DataType
-Double,11,DataType
-String,12,DataType
-DateTime,13,DataType
-Guid,14,DataType
-ByteString,15,DataType
-XmlElement,16,DataType
-NodeId,17,DataType
-ExpandedNodeId,18,DataType
-StatusCode,19,DataType
-QualifiedName,20,DataType
-LocalizedText,21,DataType
-Structure,22,DataType
-DataValue,23,DataType
-BaseDataType,24,DataType
-DiagnosticInfo,25,DataType
-Number,26,DataType
-Integer,27,DataType
-UInteger,28,DataType
-Enumeration,29,DataType
-Image,30,DataType
-References,31,ReferenceType
-NonHierarchicalReferences,32,ReferenceType
-HierarchicalReferences,33,ReferenceType
-HasChild,34,ReferenceType
-Organizes,35,ReferenceType
-HasEventSource,36,ReferenceType
-HasModellingRule,37,ReferenceType
-HasEncoding,38,ReferenceType
-HasDescription,39,ReferenceType
-HasTypeDefinition,40,ReferenceType
-GeneratesEvent,41,ReferenceType
-Aggregates,44,ReferenceType
-HasSubtype,45,ReferenceType
-HasProperty,46,ReferenceType
-HasComponent,47,ReferenceType
-HasNotifier,48,ReferenceType
-HasOrderedComponent,49,ReferenceType
-Decimal,50,DataType
-FromState,51,ReferenceType
-ToState,52,ReferenceType
-HasCause,53,ReferenceType
-HasEffect,54,ReferenceType
-HasHistoricalConfiguration,56,ReferenceType
-BaseObjectType,58,ObjectType
-FolderType,61,ObjectType
-BaseVariableType,62,VariableType
-BaseDataVariableType,63,VariableType
-PropertyType,68,VariableType
-DataTypeDescriptionType,69,VariableType
-DataTypeDictionaryType,72,VariableType
-DataTypeSystemType,75,ObjectType
-DataTypeEncodingType,76,ObjectType
-ModellingRuleType,77,ObjectType
-ModellingRule_Mandatory,78,Object
-ModellingRule_MandatoryShared,79,Object
-ModellingRule_Optional,80,Object
-ModellingRule_ExposesItsArray,83,Object
-RootFolder,84,Object
-ObjectsFolder,85,Object
-TypesFolder,86,Object
-ViewsFolder,87,Object
-ObjectTypesFolder,88,Object
-VariableTypesFolder,89,Object
-DataTypesFolder,90,Object
-ReferenceTypesFolder,91,Object
-XmlSchema_TypeSystem,92,Object
-OPCBinarySchema_TypeSystem,93,Object
-PermissionType,94,DataType
-AccessRestrictionType,95,DataType
-RolePermissionType,96,DataType
-DataTypeDefinition,97,DataType
-StructureType,98,DataType
-StructureDefinition,99,DataType
-EnumDefinition,100,DataType
-StructureField,101,DataType
-EnumField,102,DataType
-DataTypeDescriptionType_DataTypeVersion,104,Variable
-DataTypeDescriptionType_DictionaryFragment,105,Variable
-DataTypeDictionaryType_DataTypeVersion,106,Variable
-DataTypeDictionaryType_NamespaceUri,107,Variable
-ModellingRuleType_NamingRule,111,Variable
-ModellingRule_Mandatory_NamingRule,112,Variable
-ModellingRule_Optional_NamingRule,113,Variable
-ModellingRule_ExposesItsArray_NamingRule,114,Variable
-ModellingRule_MandatoryShared_NamingRule,116,Variable
-HasSubStateMachine,117,ReferenceType
-NamingRuleType,120,DataType
-DataTypeDefinition_Encoding_DefaultBinary,121,Object
-StructureDefinition_Encoding_DefaultBinary,122,Object
-EnumDefinition_Encoding_DefaultBinary,123,Object
-DataSetMetaDataType_Encoding_DefaultBinary,124,Object
-DataTypeDescription_Encoding_DefaultBinary,125,Object
-StructureDescription_Encoding_DefaultBinary,126,Object
-EnumDescription_Encoding_DefaultBinary,127,Object
-RolePermissionType_Encoding_DefaultBinary,128,Object
-HasArgumentDescription,129,ReferenceType
-HasOptionalInputArgumentDescription,131,ReferenceType
-IdType,256,DataType
-NodeClass,257,DataType
-Node,258,DataType
-Node_Encoding_DefaultXml,259,Object
-Node_Encoding_DefaultBinary,260,Object
-ObjectNode,261,DataType
-ObjectNode_Encoding_DefaultXml,262,Object
-ObjectNode_Encoding_DefaultBinary,263,Object
-ObjectTypeNode,264,DataType
-ObjectTypeNode_Encoding_DefaultXml,265,Object
-ObjectTypeNode_Encoding_DefaultBinary,266,Object
-VariableNode,267,DataType
-VariableNode_Encoding_DefaultXml,268,Object
-VariableNode_Encoding_DefaultBinary,269,Object
-VariableTypeNode,270,DataType
-VariableTypeNode_Encoding_DefaultXml,271,Object
-VariableTypeNode_Encoding_DefaultBinary,272,Object
-ReferenceTypeNode,273,DataType
-ReferenceTypeNode_Encoding_DefaultXml,274,Object
-ReferenceTypeNode_Encoding_DefaultBinary,275,Object
-MethodNode,276,DataType
-MethodNode_Encoding_DefaultXml,277,Object
-MethodNode_Encoding_DefaultBinary,278,Object
-ViewNode,279,DataType
-ViewNode_Encoding_DefaultXml,280,Object
-ViewNode_Encoding_DefaultBinary,281,Object
-DataTypeNode,282,DataType
-DataTypeNode_Encoding_DefaultXml,283,Object
-DataTypeNode_Encoding_DefaultBinary,284,Object
-ReferenceNode,285,DataType
-ReferenceNode_Encoding_DefaultXml,286,Object
-ReferenceNode_Encoding_DefaultBinary,287,Object
-IntegerId,288,DataType
-Counter,289,DataType
-Duration,290,DataType
-NumericRange,291,DataType
-Time,292,DataType
-Date,293,DataType
-UtcTime,294,DataType
-LocaleId,295,DataType
-Argument,296,DataType
-Argument_Encoding_DefaultXml,297,Object
-Argument_Encoding_DefaultBinary,298,Object
-StatusResult,299,DataType
-StatusResult_Encoding_DefaultXml,300,Object
-StatusResult_Encoding_DefaultBinary,301,Object
-MessageSecurityMode,302,DataType
-UserTokenType,303,DataType
-UserTokenPolicy,304,DataType
-UserTokenPolicy_Encoding_DefaultXml,305,Object
-UserTokenPolicy_Encoding_DefaultBinary,306,Object
-ApplicationType,307,DataType
-ApplicationDescription,308,DataType
-ApplicationDescription_Encoding_DefaultXml,309,Object
-ApplicationDescription_Encoding_DefaultBinary,310,Object
-ApplicationInstanceCertificate,311,DataType
-EndpointDescription,312,DataType
-EndpointDescription_Encoding_DefaultXml,313,Object
-EndpointDescription_Encoding_DefaultBinary,314,Object
-SecurityTokenRequestType,315,DataType
-UserIdentityToken,316,DataType
-UserIdentityToken_Encoding_DefaultXml,317,Object
-UserIdentityToken_Encoding_DefaultBinary,318,Object
-AnonymousIdentityToken,319,DataType
-AnonymousIdentityToken_Encoding_DefaultXml,320,Object
-AnonymousIdentityToken_Encoding_DefaultBinary,321,Object
-UserNameIdentityToken,322,DataType
-UserNameIdentityToken_Encoding_DefaultXml,323,Object
-UserNameIdentityToken_Encoding_DefaultBinary,324,Object
-X509IdentityToken,325,DataType
-X509IdentityToken_Encoding_DefaultXml,326,Object
-X509IdentityToken_Encoding_DefaultBinary,327,Object
-EndpointConfiguration,331,DataType
-EndpointConfiguration_Encoding_DefaultXml,332,Object
-EndpointConfiguration_Encoding_DefaultBinary,333,Object
-BuildInfo,338,DataType
-BuildInfo_Encoding_DefaultXml,339,Object
-BuildInfo_Encoding_DefaultBinary,340,Object
-SignedSoftwareCertificate,344,DataType
-SignedSoftwareCertificate_Encoding_DefaultXml,345,Object
-SignedSoftwareCertificate_Encoding_DefaultBinary,346,Object
-AttributeWriteMask,347,DataType
-NodeAttributesMask,348,DataType
-NodeAttributes,349,DataType
-NodeAttributes_Encoding_DefaultXml,350,Object
-NodeAttributes_Encoding_DefaultBinary,351,Object
-ObjectAttributes,352,DataType
-ObjectAttributes_Encoding_DefaultXml,353,Object
-ObjectAttributes_Encoding_DefaultBinary,354,Object
-VariableAttributes,355,DataType
-VariableAttributes_Encoding_DefaultXml,356,Object
-VariableAttributes_Encoding_DefaultBinary,357,Object
-MethodAttributes,358,DataType
-MethodAttributes_Encoding_DefaultXml,359,Object
-MethodAttributes_Encoding_DefaultBinary,360,Object
-ObjectTypeAttributes,361,DataType
-ObjectTypeAttributes_Encoding_DefaultXml,362,Object
-ObjectTypeAttributes_Encoding_DefaultBinary,363,Object
-VariableTypeAttributes,364,DataType
-VariableTypeAttributes_Encoding_DefaultXml,365,Object
-VariableTypeAttributes_Encoding_DefaultBinary,366,Object
-ReferenceTypeAttributes,367,DataType
-ReferenceTypeAttributes_Encoding_DefaultXml,368,Object
-ReferenceTypeAttributes_Encoding_DefaultBinary,369,Object
-DataTypeAttributes,370,DataType
-DataTypeAttributes_Encoding_DefaultXml,371,Object
-DataTypeAttributes_Encoding_DefaultBinary,372,Object
-ViewAttributes,373,DataType
-ViewAttributes_Encoding_DefaultXml,374,Object
-ViewAttributes_Encoding_DefaultBinary,375,Object
-AddNodesItem,376,DataType
-AddNodesItem_Encoding_DefaultXml,377,Object
-AddNodesItem_Encoding_DefaultBinary,378,Object
-AddReferencesItem,379,DataType
-AddReferencesItem_Encoding_DefaultXml,380,Object
-AddReferencesItem_Encoding_DefaultBinary,381,Object
-DeleteNodesItem,382,DataType
-DeleteNodesItem_Encoding_DefaultXml,383,Object
-DeleteNodesItem_Encoding_DefaultBinary,384,Object
-DeleteReferencesItem,385,DataType
-DeleteReferencesItem_Encoding_DefaultXml,386,Object
-DeleteReferencesItem_Encoding_DefaultBinary,387,Object
-SessionAuthenticationToken,388,DataType
-RequestHeader,389,DataType
-RequestHeader_Encoding_DefaultXml,390,Object
-RequestHeader_Encoding_DefaultBinary,391,Object
-ResponseHeader,392,DataType
-ResponseHeader_Encoding_DefaultXml,393,Object
-ResponseHeader_Encoding_DefaultBinary,394,Object
-ServiceFault,395,DataType
-ServiceFault_Encoding_DefaultXml,396,Object
-ServiceFault_Encoding_DefaultBinary,397,Object
-FindServersRequest,420,DataType
-FindServersRequest_Encoding_DefaultXml,421,Object
-FindServersRequest_Encoding_DefaultBinary,422,Object
-FindServersResponse,423,DataType
-FindServersResponse_Encoding_DefaultXml,424,Object
-FindServersResponse_Encoding_DefaultBinary,425,Object
-GetEndpointsRequest,426,DataType
-GetEndpointsRequest_Encoding_DefaultXml,427,Object
-GetEndpointsRequest_Encoding_DefaultBinary,428,Object
-GetEndpointsResponse,429,DataType
-GetEndpointsResponse_Encoding_DefaultXml,430,Object
-GetEndpointsResponse_Encoding_DefaultBinary,431,Object
-RegisteredServer,432,DataType
-RegisteredServer_Encoding_DefaultXml,433,Object
-RegisteredServer_Encoding_DefaultBinary,434,Object
-RegisterServerRequest,435,DataType
-RegisterServerRequest_Encoding_DefaultXml,436,Object
-RegisterServerRequest_Encoding_DefaultBinary,437,Object
-RegisterServerResponse,438,DataType
-RegisterServerResponse_Encoding_DefaultXml,439,Object
-RegisterServerResponse_Encoding_DefaultBinary,440,Object
-ChannelSecurityToken,441,DataType
-ChannelSecurityToken_Encoding_DefaultXml,442,Object
-ChannelSecurityToken_Encoding_DefaultBinary,443,Object
-OpenSecureChannelRequest,444,DataType
-OpenSecureChannelRequest_Encoding_DefaultXml,445,Object
-OpenSecureChannelRequest_Encoding_DefaultBinary,446,Object
-OpenSecureChannelResponse,447,DataType
-OpenSecureChannelResponse_Encoding_DefaultXml,448,Object
-OpenSecureChannelResponse_Encoding_DefaultBinary,449,Object
-CloseSecureChannelRequest,450,DataType
-CloseSecureChannelRequest_Encoding_DefaultXml,451,Object
-CloseSecureChannelRequest_Encoding_DefaultBinary,452,Object
-CloseSecureChannelResponse,453,DataType
-CloseSecureChannelResponse_Encoding_DefaultXml,454,Object
-CloseSecureChannelResponse_Encoding_DefaultBinary,455,Object
-SignatureData,456,DataType
-SignatureData_Encoding_DefaultXml,457,Object
-SignatureData_Encoding_DefaultBinary,458,Object
-CreateSessionRequest,459,DataType
-CreateSessionRequest_Encoding_DefaultXml,460,Object
-CreateSessionRequest_Encoding_DefaultBinary,461,Object
-CreateSessionResponse,462,DataType
-CreateSessionResponse_Encoding_DefaultXml,463,Object
-CreateSessionResponse_Encoding_DefaultBinary,464,Object
-ActivateSessionRequest,465,DataType
-ActivateSessionRequest_Encoding_DefaultXml,466,Object
-ActivateSessionRequest_Encoding_DefaultBinary,467,Object
-ActivateSessionResponse,468,DataType
-ActivateSessionResponse_Encoding_DefaultXml,469,Object
-ActivateSessionResponse_Encoding_DefaultBinary,470,Object
-CloseSessionRequest,471,DataType
-CloseSessionRequest_Encoding_DefaultXml,472,Object
-CloseSessionRequest_Encoding_DefaultBinary,473,Object
-CloseSessionResponse,474,DataType
-CloseSessionResponse_Encoding_DefaultXml,475,Object
-CloseSessionResponse_Encoding_DefaultBinary,476,Object
-CancelRequest,477,DataType
-CancelRequest_Encoding_DefaultXml,478,Object
-CancelRequest_Encoding_DefaultBinary,479,Object
-CancelResponse,480,DataType
-CancelResponse_Encoding_DefaultXml,481,Object
-CancelResponse_Encoding_DefaultBinary,482,Object
-AddNodesResult,483,DataType
-AddNodesResult_Encoding_DefaultXml,484,Object
-AddNodesResult_Encoding_DefaultBinary,485,Object
-AddNodesRequest,486,DataType
-AddNodesRequest_Encoding_DefaultXml,487,Object
-AddNodesRequest_Encoding_DefaultBinary,488,Object
-AddNodesResponse,489,DataType
-AddNodesResponse_Encoding_DefaultXml,490,Object
-AddNodesResponse_Encoding_DefaultBinary,491,Object
-AddReferencesRequest,492,DataType
-AddReferencesRequest_Encoding_DefaultXml,493,Object
-AddReferencesRequest_Encoding_DefaultBinary,494,Object
-AddReferencesResponse,495,DataType
-AddReferencesResponse_Encoding_DefaultXml,496,Object
-AddReferencesResponse_Encoding_DefaultBinary,497,Object
-DeleteNodesRequest,498,DataType
-DeleteNodesRequest_Encoding_DefaultXml,499,Object
-DeleteNodesRequest_Encoding_DefaultBinary,500,Object
-DeleteNodesResponse,501,DataType
-DeleteNodesResponse_Encoding_DefaultXml,502,Object
-DeleteNodesResponse_Encoding_DefaultBinary,503,Object
-DeleteReferencesRequest,504,DataType
-DeleteReferencesRequest_Encoding_DefaultXml,505,Object
-DeleteReferencesRequest_Encoding_DefaultBinary,506,Object
-DeleteReferencesResponse,507,DataType
-DeleteReferencesResponse_Encoding_DefaultXml,508,Object
-DeleteReferencesResponse_Encoding_DefaultBinary,509,Object
-BrowseDirection,510,DataType
-ViewDescription,511,DataType
-ViewDescription_Encoding_DefaultXml,512,Object
-ViewDescription_Encoding_DefaultBinary,513,Object
-BrowseDescription,514,DataType
-BrowseDescription_Encoding_DefaultXml,515,Object
-BrowseDescription_Encoding_DefaultBinary,516,Object
-BrowseResultMask,517,DataType
-ReferenceDescription,518,DataType
-ReferenceDescription_Encoding_DefaultXml,519,Object
-ReferenceDescription_Encoding_DefaultBinary,520,Object
-ContinuationPoint,521,DataType
-BrowseResult,522,DataType
-BrowseResult_Encoding_DefaultXml,523,Object
-BrowseResult_Encoding_DefaultBinary,524,Object
-BrowseRequest,525,DataType
-BrowseRequest_Encoding_DefaultXml,526,Object
-BrowseRequest_Encoding_DefaultBinary,527,Object
-BrowseResponse,528,DataType
-BrowseResponse_Encoding_DefaultXml,529,Object
-BrowseResponse_Encoding_DefaultBinary,530,Object
-BrowseNextRequest,531,DataType
-BrowseNextRequest_Encoding_DefaultXml,532,Object
-BrowseNextRequest_Encoding_DefaultBinary,533,Object
-BrowseNextResponse,534,DataType
-BrowseNextResponse_Encoding_DefaultXml,535,Object
-BrowseNextResponse_Encoding_DefaultBinary,536,Object
-RelativePathElement,537,DataType
-RelativePathElement_Encoding_DefaultXml,538,Object
-RelativePathElement_Encoding_DefaultBinary,539,Object
-RelativePath,540,DataType
-RelativePath_Encoding_DefaultXml,541,Object
-RelativePath_Encoding_DefaultBinary,542,Object
-BrowsePath,543,DataType
-BrowsePath_Encoding_DefaultXml,544,Object
-BrowsePath_Encoding_DefaultBinary,545,Object
-BrowsePathTarget,546,DataType
-BrowsePathTarget_Encoding_DefaultXml,547,Object
-BrowsePathTarget_Encoding_DefaultBinary,548,Object
-BrowsePathResult,549,DataType
-BrowsePathResult_Encoding_DefaultXml,550,Object
-BrowsePathResult_Encoding_DefaultBinary,551,Object
-TranslateBrowsePathsToNodeIdsRequest,552,DataType
-TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultXml,553,Object
-TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary,554,Object
-TranslateBrowsePathsToNodeIdsResponse,555,DataType
-TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultXml,556,Object
-TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary,557,Object
-RegisterNodesRequest,558,DataType
-RegisterNodesRequest_Encoding_DefaultXml,559,Object
-RegisterNodesRequest_Encoding_DefaultBinary,560,Object
-RegisterNodesResponse,561,DataType
-RegisterNodesResponse_Encoding_DefaultXml,562,Object
-RegisterNodesResponse_Encoding_DefaultBinary,563,Object
-UnregisterNodesRequest,564,DataType
-UnregisterNodesRequest_Encoding_DefaultXml,565,Object
-UnregisterNodesRequest_Encoding_DefaultBinary,566,Object
-UnregisterNodesResponse,567,DataType
-UnregisterNodesResponse_Encoding_DefaultXml,568,Object
-UnregisterNodesResponse_Encoding_DefaultBinary,569,Object
-QueryDataDescription,570,DataType
-QueryDataDescription_Encoding_DefaultXml,571,Object
-QueryDataDescription_Encoding_DefaultBinary,572,Object
-NodeTypeDescription,573,DataType
-NodeTypeDescription_Encoding_DefaultXml,574,Object
-NodeTypeDescription_Encoding_DefaultBinary,575,Object
-FilterOperator,576,DataType
-QueryDataSet,577,DataType
-QueryDataSet_Encoding_DefaultXml,578,Object
-QueryDataSet_Encoding_DefaultBinary,579,Object
-NodeReference,580,DataType
-NodeReference_Encoding_DefaultXml,581,Object
-NodeReference_Encoding_DefaultBinary,582,Object
-ContentFilterElement,583,DataType
-ContentFilterElement_Encoding_DefaultXml,584,Object
-ContentFilterElement_Encoding_DefaultBinary,585,Object
-ContentFilter,586,DataType
-ContentFilter_Encoding_DefaultXml,587,Object
-ContentFilter_Encoding_DefaultBinary,588,Object
-FilterOperand,589,DataType
-FilterOperand_Encoding_DefaultXml,590,Object
-FilterOperand_Encoding_DefaultBinary,591,Object
-ElementOperand,592,DataType
-ElementOperand_Encoding_DefaultXml,593,Object
-ElementOperand_Encoding_DefaultBinary,594,Object
-LiteralOperand,595,DataType
-LiteralOperand_Encoding_DefaultXml,596,Object
-LiteralOperand_Encoding_DefaultBinary,597,Object
-AttributeOperand,598,DataType
-AttributeOperand_Encoding_DefaultXml,599,Object
-AttributeOperand_Encoding_DefaultBinary,600,Object
-SimpleAttributeOperand,601,DataType
-SimpleAttributeOperand_Encoding_DefaultXml,602,Object
-SimpleAttributeOperand_Encoding_DefaultBinary,603,Object
-ContentFilterElementResult,604,DataType
-ContentFilterElementResult_Encoding_DefaultXml,605,Object
-ContentFilterElementResult_Encoding_DefaultBinary,606,Object
-ContentFilterResult,607,DataType
-ContentFilterResult_Encoding_DefaultXml,608,Object
-ContentFilterResult_Encoding_DefaultBinary,609,Object
-ParsingResult,610,DataType
-ParsingResult_Encoding_DefaultXml,611,Object
-ParsingResult_Encoding_DefaultBinary,612,Object
-QueryFirstRequest,613,DataType
-QueryFirstRequest_Encoding_DefaultXml,614,Object
-QueryFirstRequest_Encoding_DefaultBinary,615,Object
-QueryFirstResponse,616,DataType
-QueryFirstResponse_Encoding_DefaultXml,617,Object
-QueryFirstResponse_Encoding_DefaultBinary,618,Object
-QueryNextRequest,619,DataType
-QueryNextRequest_Encoding_DefaultXml,620,Object
-QueryNextRequest_Encoding_DefaultBinary,621,Object
-QueryNextResponse,622,DataType
-QueryNextResponse_Encoding_DefaultXml,623,Object
-QueryNextResponse_Encoding_DefaultBinary,624,Object
-TimestampsToReturn,625,DataType
-ReadValueId,626,DataType
-ReadValueId_Encoding_DefaultXml,627,Object
-ReadValueId_Encoding_DefaultBinary,628,Object
-ReadRequest,629,DataType
-ReadRequest_Encoding_DefaultXml,630,Object
-ReadRequest_Encoding_DefaultBinary,631,Object
-ReadResponse,632,DataType
-ReadResponse_Encoding_DefaultXml,633,Object
-ReadResponse_Encoding_DefaultBinary,634,Object
-HistoryReadValueId,635,DataType
-HistoryReadValueId_Encoding_DefaultXml,636,Object
-HistoryReadValueId_Encoding_DefaultBinary,637,Object
-HistoryReadResult,638,DataType
-HistoryReadResult_Encoding_DefaultXml,639,Object
-HistoryReadResult_Encoding_DefaultBinary,640,Object
-HistoryReadDetails,641,DataType
-HistoryReadDetails_Encoding_DefaultXml,642,Object
-HistoryReadDetails_Encoding_DefaultBinary,643,Object
-ReadEventDetails,644,DataType
-ReadEventDetails_Encoding_DefaultXml,645,Object
-ReadEventDetails_Encoding_DefaultBinary,646,Object
-ReadRawModifiedDetails,647,DataType
-ReadRawModifiedDetails_Encoding_DefaultXml,648,Object
-ReadRawModifiedDetails_Encoding_DefaultBinary,649,Object
-ReadProcessedDetails,650,DataType
-ReadProcessedDetails_Encoding_DefaultXml,651,Object
-ReadProcessedDetails_Encoding_DefaultBinary,652,Object
-ReadAtTimeDetails,653,DataType
-ReadAtTimeDetails_Encoding_DefaultXml,654,Object
-ReadAtTimeDetails_Encoding_DefaultBinary,655,Object
-HistoryData,656,DataType
-HistoryData_Encoding_DefaultXml,657,Object
-HistoryData_Encoding_DefaultBinary,658,Object
-HistoryEvent,659,DataType
-HistoryEvent_Encoding_DefaultXml,660,Object
-HistoryEvent_Encoding_DefaultBinary,661,Object
-HistoryReadRequest,662,DataType
-HistoryReadRequest_Encoding_DefaultXml,663,Object
-HistoryReadRequest_Encoding_DefaultBinary,664,Object
-HistoryReadResponse,665,DataType
-HistoryReadResponse_Encoding_DefaultXml,666,Object
-HistoryReadResponse_Encoding_DefaultBinary,667,Object
-WriteValue,668,DataType
-WriteValue_Encoding_DefaultXml,669,Object
-WriteValue_Encoding_DefaultBinary,670,Object
-WriteRequest,671,DataType
-WriteRequest_Encoding_DefaultXml,672,Object
-WriteRequest_Encoding_DefaultBinary,673,Object
-WriteResponse,674,DataType
-WriteResponse_Encoding_DefaultXml,675,Object
-WriteResponse_Encoding_DefaultBinary,676,Object
-HistoryUpdateDetails,677,DataType
-HistoryUpdateDetails_Encoding_DefaultXml,678,Object
-HistoryUpdateDetails_Encoding_DefaultBinary,679,Object
-UpdateDataDetails,680,DataType
-UpdateDataDetails_Encoding_DefaultXml,681,Object
-UpdateDataDetails_Encoding_DefaultBinary,682,Object
-UpdateEventDetails,683,DataType
-UpdateEventDetails_Encoding_DefaultXml,684,Object
-UpdateEventDetails_Encoding_DefaultBinary,685,Object
-DeleteRawModifiedDetails,686,DataType
-DeleteRawModifiedDetails_Encoding_DefaultXml,687,Object
-DeleteRawModifiedDetails_Encoding_DefaultBinary,688,Object
-DeleteAtTimeDetails,689,DataType
-DeleteAtTimeDetails_Encoding_DefaultXml,690,Object
-DeleteAtTimeDetails_Encoding_DefaultBinary,691,Object
-DeleteEventDetails,692,DataType
-DeleteEventDetails_Encoding_DefaultXml,693,Object
-DeleteEventDetails_Encoding_DefaultBinary,694,Object
-HistoryUpdateResult,695,DataType
-HistoryUpdateResult_Encoding_DefaultXml,696,Object
-HistoryUpdateResult_Encoding_DefaultBinary,697,Object
-HistoryUpdateRequest,698,DataType
-HistoryUpdateRequest_Encoding_DefaultXml,699,Object
-HistoryUpdateRequest_Encoding_DefaultBinary,700,Object
-HistoryUpdateResponse,701,DataType
-HistoryUpdateResponse_Encoding_DefaultXml,702,Object
-HistoryUpdateResponse_Encoding_DefaultBinary,703,Object
-CallMethodRequest,704,DataType
-CallMethodRequest_Encoding_DefaultXml,705,Object
-CallMethodRequest_Encoding_DefaultBinary,706,Object
-CallMethodResult,707,DataType
-CallMethodResult_Encoding_DefaultXml,708,Object
-CallMethodResult_Encoding_DefaultBinary,709,Object
-CallRequest,710,DataType
-CallRequest_Encoding_DefaultXml,711,Object
-CallRequest_Encoding_DefaultBinary,712,Object
-CallResponse,713,DataType
-CallResponse_Encoding_DefaultXml,714,Object
-CallResponse_Encoding_DefaultBinary,715,Object
-MonitoringMode,716,DataType
-DataChangeTrigger,717,DataType
-DeadbandType,718,DataType
-MonitoringFilter,719,DataType
-MonitoringFilter_Encoding_DefaultXml,720,Object
-MonitoringFilter_Encoding_DefaultBinary,721,Object
-DataChangeFilter,722,DataType
-DataChangeFilter_Encoding_DefaultXml,723,Object
-DataChangeFilter_Encoding_DefaultBinary,724,Object
-EventFilter,725,DataType
-EventFilter_Encoding_DefaultXml,726,Object
-EventFilter_Encoding_DefaultBinary,727,Object
-AggregateFilter,728,DataType
-AggregateFilter_Encoding_DefaultXml,729,Object
-AggregateFilter_Encoding_DefaultBinary,730,Object
-MonitoringFilterResult,731,DataType
-MonitoringFilterResult_Encoding_DefaultXml,732,Object
-MonitoringFilterResult_Encoding_DefaultBinary,733,Object
-EventFilterResult,734,DataType
-EventFilterResult_Encoding_DefaultXml,735,Object
-EventFilterResult_Encoding_DefaultBinary,736,Object
-AggregateFilterResult,737,DataType
-AggregateFilterResult_Encoding_DefaultXml,738,Object
-AggregateFilterResult_Encoding_DefaultBinary,739,Object
-MonitoringParameters,740,DataType
-MonitoringParameters_Encoding_DefaultXml,741,Object
-MonitoringParameters_Encoding_DefaultBinary,742,Object
-MonitoredItemCreateRequest,743,DataType
-MonitoredItemCreateRequest_Encoding_DefaultXml,744,Object
-MonitoredItemCreateRequest_Encoding_DefaultBinary,745,Object
-MonitoredItemCreateResult,746,DataType
-MonitoredItemCreateResult_Encoding_DefaultXml,747,Object
-MonitoredItemCreateResult_Encoding_DefaultBinary,748,Object
-CreateMonitoredItemsRequest,749,DataType
-CreateMonitoredItemsRequest_Encoding_DefaultXml,750,Object
-CreateMonitoredItemsRequest_Encoding_DefaultBinary,751,Object
-CreateMonitoredItemsResponse,752,DataType
-CreateMonitoredItemsResponse_Encoding_DefaultXml,753,Object
-CreateMonitoredItemsResponse_Encoding_DefaultBinary,754,Object
-MonitoredItemModifyRequest,755,DataType
-MonitoredItemModifyRequest_Encoding_DefaultXml,756,Object
-MonitoredItemModifyRequest_Encoding_DefaultBinary,757,Object
-MonitoredItemModifyResult,758,DataType
-MonitoredItemModifyResult_Encoding_DefaultXml,759,Object
-MonitoredItemModifyResult_Encoding_DefaultBinary,760,Object
-ModifyMonitoredItemsRequest,761,DataType
-ModifyMonitoredItemsRequest_Encoding_DefaultXml,762,Object
-ModifyMonitoredItemsRequest_Encoding_DefaultBinary,763,Object
-ModifyMonitoredItemsResponse,764,DataType
-ModifyMonitoredItemsResponse_Encoding_DefaultXml,765,Object
-ModifyMonitoredItemsResponse_Encoding_DefaultBinary,766,Object
-SetMonitoringModeRequest,767,DataType
-SetMonitoringModeRequest_Encoding_DefaultXml,768,Object
-SetMonitoringModeRequest_Encoding_DefaultBinary,769,Object
-SetMonitoringModeResponse,770,DataType
-SetMonitoringModeResponse_Encoding_DefaultXml,771,Object
-SetMonitoringModeResponse_Encoding_DefaultBinary,772,Object
-SetTriggeringRequest,773,DataType
-SetTriggeringRequest_Encoding_DefaultXml,774,Object
-SetTriggeringRequest_Encoding_DefaultBinary,775,Object
-SetTriggeringResponse,776,DataType
-SetTriggeringResponse_Encoding_DefaultXml,777,Object
-SetTriggeringResponse_Encoding_DefaultBinary,778,Object
-DeleteMonitoredItemsRequest,779,DataType
-DeleteMonitoredItemsRequest_Encoding_DefaultXml,780,Object
-DeleteMonitoredItemsRequest_Encoding_DefaultBinary,781,Object
-DeleteMonitoredItemsResponse,782,DataType
-DeleteMonitoredItemsResponse_Encoding_DefaultXml,783,Object
-DeleteMonitoredItemsResponse_Encoding_DefaultBinary,784,Object
-CreateSubscriptionRequest,785,DataType
-CreateSubscriptionRequest_Encoding_DefaultXml,786,Object
-CreateSubscriptionRequest_Encoding_DefaultBinary,787,Object
-CreateSubscriptionResponse,788,DataType
-CreateSubscriptionResponse_Encoding_DefaultXml,789,Object
-CreateSubscriptionResponse_Encoding_DefaultBinary,790,Object
-ModifySubscriptionRequest,791,DataType
-ModifySubscriptionRequest_Encoding_DefaultXml,792,Object
-ModifySubscriptionRequest_Encoding_DefaultBinary,793,Object
-ModifySubscriptionResponse,794,DataType
-ModifySubscriptionResponse_Encoding_DefaultXml,795,Object
-ModifySubscriptionResponse_Encoding_DefaultBinary,796,Object
-SetPublishingModeRequest,797,DataType
-SetPublishingModeRequest_Encoding_DefaultXml,798,Object
-SetPublishingModeRequest_Encoding_DefaultBinary,799,Object
-SetPublishingModeResponse,800,DataType
-SetPublishingModeResponse_Encoding_DefaultXml,801,Object
-SetPublishingModeResponse_Encoding_DefaultBinary,802,Object
-NotificationMessage,803,DataType
-NotificationMessage_Encoding_DefaultXml,804,Object
-NotificationMessage_Encoding_DefaultBinary,805,Object
-MonitoredItemNotification,806,DataType
-MonitoredItemNotification_Encoding_DefaultXml,807,Object
-MonitoredItemNotification_Encoding_DefaultBinary,808,Object
-DataChangeNotification,809,DataType
-DataChangeNotification_Encoding_DefaultXml,810,Object
-DataChangeNotification_Encoding_DefaultBinary,811,Object
-StatusChangeNotification,818,DataType
-StatusChangeNotification_Encoding_DefaultXml,819,Object
-StatusChangeNotification_Encoding_DefaultBinary,820,Object
-SubscriptionAcknowledgement,821,DataType
-SubscriptionAcknowledgement_Encoding_DefaultXml,822,Object
-SubscriptionAcknowledgement_Encoding_DefaultBinary,823,Object
-PublishRequest,824,DataType
-PublishRequest_Encoding_DefaultXml,825,Object
-PublishRequest_Encoding_DefaultBinary,826,Object
-PublishResponse,827,DataType
-PublishResponse_Encoding_DefaultXml,828,Object
-PublishResponse_Encoding_DefaultBinary,829,Object
-RepublishRequest,830,DataType
-RepublishRequest_Encoding_DefaultXml,831,Object
-RepublishRequest_Encoding_DefaultBinary,832,Object
-RepublishResponse,833,DataType
-RepublishResponse_Encoding_DefaultXml,834,Object
-RepublishResponse_Encoding_DefaultBinary,835,Object
-TransferResult,836,DataType
-TransferResult_Encoding_DefaultXml,837,Object
-TransferResult_Encoding_DefaultBinary,838,Object
-TransferSubscriptionsRequest,839,DataType
-TransferSubscriptionsRequest_Encoding_DefaultXml,840,Object
-TransferSubscriptionsRequest_Encoding_DefaultBinary,841,Object
-TransferSubscriptionsResponse,842,DataType
-TransferSubscriptionsResponse_Encoding_DefaultXml,843,Object
-TransferSubscriptionsResponse_Encoding_DefaultBinary,844,Object
-DeleteSubscriptionsRequest,845,DataType
-DeleteSubscriptionsRequest_Encoding_DefaultXml,846,Object
-DeleteSubscriptionsRequest_Encoding_DefaultBinary,847,Object
-DeleteSubscriptionsResponse,848,DataType
-DeleteSubscriptionsResponse_Encoding_DefaultXml,849,Object
-DeleteSubscriptionsResponse_Encoding_DefaultBinary,850,Object
-RedundancySupport,851,DataType
-ServerState,852,DataType
-RedundantServerDataType,853,DataType
-RedundantServerDataType_Encoding_DefaultXml,854,Object
-RedundantServerDataType_Encoding_DefaultBinary,855,Object
-SamplingIntervalDiagnosticsDataType,856,DataType
-SamplingIntervalDiagnosticsDataType_Encoding_DefaultXml,857,Object
-SamplingIntervalDiagnosticsDataType_Encoding_DefaultBinary,858,Object
-ServerDiagnosticsSummaryDataType,859,DataType
-ServerDiagnosticsSummaryDataType_Encoding_DefaultXml,860,Object
-ServerDiagnosticsSummaryDataType_Encoding_DefaultBinary,861,Object
-ServerStatusDataType,862,DataType
-ServerStatusDataType_Encoding_DefaultXml,863,Object
-ServerStatusDataType_Encoding_DefaultBinary,864,Object
-SessionDiagnosticsDataType,865,DataType
-SessionDiagnosticsDataType_Encoding_DefaultXml,866,Object
-SessionDiagnosticsDataType_Encoding_DefaultBinary,867,Object
-SessionSecurityDiagnosticsDataType,868,DataType
-SessionSecurityDiagnosticsDataType_Encoding_DefaultXml,869,Object
-SessionSecurityDiagnosticsDataType_Encoding_DefaultBinary,870,Object
-ServiceCounterDataType,871,DataType
-ServiceCounterDataType_Encoding_DefaultXml,872,Object
-ServiceCounterDataType_Encoding_DefaultBinary,873,Object
-SubscriptionDiagnosticsDataType,874,DataType
-SubscriptionDiagnosticsDataType_Encoding_DefaultXml,875,Object
-SubscriptionDiagnosticsDataType_Encoding_DefaultBinary,876,Object
-ModelChangeStructureDataType,877,DataType
-ModelChangeStructureDataType_Encoding_DefaultXml,878,Object
-ModelChangeStructureDataType_Encoding_DefaultBinary,879,Object
-Range,884,DataType
-Range_Encoding_DefaultXml,885,Object
-Range_Encoding_DefaultBinary,886,Object
-EUInformation,887,DataType
-EUInformation_Encoding_DefaultXml,888,Object
-EUInformation_Encoding_DefaultBinary,889,Object
-ExceptionDeviationFormat,890,DataType
-Annotation,891,DataType
-Annotation_Encoding_DefaultXml,892,Object
-Annotation_Encoding_DefaultBinary,893,Object
-ProgramDiagnosticDataType,894,DataType
-ProgramDiagnosticDataType_Encoding_DefaultXml,895,Object
-ProgramDiagnosticDataType_Encoding_DefaultBinary,896,Object
-SemanticChangeStructureDataType,897,DataType
-SemanticChangeStructureDataType_Encoding_DefaultXml,898,Object
-SemanticChangeStructureDataType_Encoding_DefaultBinary,899,Object
-EventNotificationList,914,DataType
-EventNotificationList_Encoding_DefaultXml,915,Object
-EventNotificationList_Encoding_DefaultBinary,916,Object
-EventFieldList,917,DataType
-EventFieldList_Encoding_DefaultXml,918,Object
-EventFieldList_Encoding_DefaultBinary,919,Object
-HistoryEventFieldList,920,DataType
-HistoryEventFieldList_Encoding_DefaultXml,921,Object
-HistoryEventFieldList_Encoding_DefaultBinary,922,Object
-IssuedIdentityToken,938,DataType
-IssuedIdentityToken_Encoding_DefaultXml,939,Object
-IssuedIdentityToken_Encoding_DefaultBinary,940,Object
-NotificationData,945,DataType
-NotificationData_Encoding_DefaultXml,946,Object
-NotificationData_Encoding_DefaultBinary,947,Object
-AggregateConfiguration,948,DataType
-AggregateConfiguration_Encoding_DefaultXml,949,Object
-AggregateConfiguration_Encoding_DefaultBinary,950,Object
-ImageBMP,2000,DataType
-ImageGIF,2001,DataType
-ImageJPG,2002,DataType
-ImagePNG,2003,DataType
-ServerType,2004,ObjectType
-ServerType_ServerArray,2005,Variable
-ServerType_NamespaceArray,2006,Variable
-ServerType_ServerStatus,2007,Variable
-ServerType_ServiceLevel,2008,Variable
-ServerType_ServerCapabilities,2009,Object
-ServerType_ServerDiagnostics,2010,Object
-ServerType_VendorServerInfo,2011,Object
-ServerType_ServerRedundancy,2012,Object
-ServerCapabilitiesType,2013,ObjectType
-ServerCapabilitiesType_ServerProfileArray,2014,Variable
-ServerCapabilitiesType_LocaleIdArray,2016,Variable
-ServerCapabilitiesType_MinSupportedSampleRate,2017,Variable
-ServerCapabilitiesType_ModellingRules,2019,Object
-ServerDiagnosticsType,2020,ObjectType
-ServerDiagnosticsType_ServerDiagnosticsSummary,2021,Variable
-ServerDiagnosticsType_SamplingIntervalDiagnosticsArray,2022,Variable
-ServerDiagnosticsType_SubscriptionDiagnosticsArray,2023,Variable
-ServerDiagnosticsType_EnabledFlag,2025,Variable
-SessionsDiagnosticsSummaryType,2026,ObjectType
-SessionsDiagnosticsSummaryType_SessionDiagnosticsArray,2027,Variable
-SessionsDiagnosticsSummaryType_SessionSecurityDiagnosticsArray,2028,Variable
-SessionDiagnosticsObjectType,2029,ObjectType
-SessionDiagnosticsObjectType_SessionDiagnostics,2030,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics,2031,Variable
-SessionDiagnosticsObjectType_SubscriptionDiagnosticsArray,2032,Variable
-VendorServerInfoType,2033,ObjectType
-ServerRedundancyType,2034,ObjectType
-ServerRedundancyType_RedundancySupport,2035,Variable
-TransparentRedundancyType,2036,ObjectType
-TransparentRedundancyType_CurrentServerId,2037,Variable
-TransparentRedundancyType_RedundantServerArray,2038,Variable
-NonTransparentRedundancyType,2039,ObjectType
-NonTransparentRedundancyType_ServerUriArray,2040,Variable
-BaseEventType,2041,ObjectType
-BaseEventType_EventId,2042,Variable
-BaseEventType_EventType,2043,Variable
-BaseEventType_SourceNode,2044,Variable
-BaseEventType_SourceName,2045,Variable
-BaseEventType_Time,2046,Variable
-BaseEventType_ReceiveTime,2047,Variable
-BaseEventType_Message,2050,Variable
-BaseEventType_Severity,2051,Variable
-AuditEventType,2052,ObjectType
-AuditEventType_ActionTimeStamp,2053,Variable
-AuditEventType_Status,2054,Variable
-AuditEventType_ServerId,2055,Variable
-AuditEventType_ClientAuditEntryId,2056,Variable
-AuditEventType_ClientUserId,2057,Variable
-AuditSecurityEventType,2058,ObjectType
-AuditChannelEventType,2059,ObjectType
-AuditOpenSecureChannelEventType,2060,ObjectType
-AuditOpenSecureChannelEventType_ClientCertificate,2061,Variable
-AuditOpenSecureChannelEventType_RequestType,2062,Variable
-AuditOpenSecureChannelEventType_SecurityPolicyUri,2063,Variable
-AuditOpenSecureChannelEventType_SecurityMode,2065,Variable
-AuditOpenSecureChannelEventType_RequestedLifetime,2066,Variable
-AuditSessionEventType,2069,ObjectType
-AuditSessionEventType_SessionId,2070,Variable
-AuditCreateSessionEventType,2071,ObjectType
-AuditCreateSessionEventType_SecureChannelId,2072,Variable
-AuditCreateSessionEventType_ClientCertificate,2073,Variable
-AuditCreateSessionEventType_RevisedSessionTimeout,2074,Variable
-AuditActivateSessionEventType,2075,ObjectType
-AuditActivateSessionEventType_ClientSoftwareCertificates,2076,Variable
-AuditActivateSessionEventType_UserIdentityToken,2077,Variable
-AuditCancelEventType,2078,ObjectType
-AuditCancelEventType_RequestHandle,2079,Variable
-AuditCertificateEventType,2080,ObjectType
-AuditCertificateEventType_Certificate,2081,Variable
-AuditCertificateDataMismatchEventType,2082,ObjectType
-AuditCertificateDataMismatchEventType_InvalidHostname,2083,Variable
-AuditCertificateDataMismatchEventType_InvalidUri,2084,Variable
-AuditCertificateExpiredEventType,2085,ObjectType
-AuditCertificateInvalidEventType,2086,ObjectType
-AuditCertificateUntrustedEventType,2087,ObjectType
-AuditCertificateRevokedEventType,2088,ObjectType
-AuditCertificateMismatchEventType,2089,ObjectType
-AuditNodeManagementEventType,2090,ObjectType
-AuditAddNodesEventType,2091,ObjectType
-AuditAddNodesEventType_NodesToAdd,2092,Variable
-AuditDeleteNodesEventType,2093,ObjectType
-AuditDeleteNodesEventType_NodesToDelete,2094,Variable
-AuditAddReferencesEventType,2095,ObjectType
-AuditAddReferencesEventType_ReferencesToAdd,2096,Variable
-AuditDeleteReferencesEventType,2097,ObjectType
-AuditDeleteReferencesEventType_ReferencesToDelete,2098,Variable
-AuditUpdateEventType,2099,ObjectType
-AuditWriteUpdateEventType,2100,ObjectType
-AuditWriteUpdateEventType_IndexRange,2101,Variable
-AuditWriteUpdateEventType_OldValue,2102,Variable
-AuditWriteUpdateEventType_NewValue,2103,Variable
-AuditHistoryUpdateEventType,2104,ObjectType
-AuditUpdateMethodEventType,2127,ObjectType
-AuditUpdateMethodEventType_MethodId,2128,Variable
-AuditUpdateMethodEventType_InputArguments,2129,Variable
-SystemEventType,2130,ObjectType
-DeviceFailureEventType,2131,ObjectType
-BaseModelChangeEventType,2132,ObjectType
-GeneralModelChangeEventType,2133,ObjectType
-GeneralModelChangeEventType_Changes,2134,Variable
-ServerVendorCapabilityType,2137,VariableType
-ServerStatusType,2138,VariableType
-ServerStatusType_StartTime,2139,Variable
-ServerStatusType_CurrentTime,2140,Variable
-ServerStatusType_State,2141,Variable
-ServerStatusType_BuildInfo,2142,Variable
-ServerDiagnosticsSummaryType,2150,VariableType
-ServerDiagnosticsSummaryType_ServerViewCount,2151,Variable
-ServerDiagnosticsSummaryType_CurrentSessionCount,2152,Variable
-ServerDiagnosticsSummaryType_CumulatedSessionCount,2153,Variable
-ServerDiagnosticsSummaryType_SecurityRejectedSessionCount,2154,Variable
-ServerDiagnosticsSummaryType_RejectedSessionCount,2155,Variable
-ServerDiagnosticsSummaryType_SessionTimeoutCount,2156,Variable
-ServerDiagnosticsSummaryType_SessionAbortCount,2157,Variable
-ServerDiagnosticsSummaryType_PublishingIntervalCount,2159,Variable
-ServerDiagnosticsSummaryType_CurrentSubscriptionCount,2160,Variable
-ServerDiagnosticsSummaryType_CumulatedSubscriptionCount,2161,Variable
-ServerDiagnosticsSummaryType_SecurityRejectedRequestsCount,2162,Variable
-ServerDiagnosticsSummaryType_RejectedRequestsCount,2163,Variable
-SamplingIntervalDiagnosticsArrayType,2164,VariableType
-SamplingIntervalDiagnosticsType,2165,VariableType
-SamplingIntervalDiagnosticsType_SamplingInterval,2166,Variable
-SubscriptionDiagnosticsArrayType,2171,VariableType
-SubscriptionDiagnosticsType,2172,VariableType
-SubscriptionDiagnosticsType_SessionId,2173,Variable
-SubscriptionDiagnosticsType_SubscriptionId,2174,Variable
-SubscriptionDiagnosticsType_Priority,2175,Variable
-SubscriptionDiagnosticsType_PublishingInterval,2176,Variable
-SubscriptionDiagnosticsType_MaxKeepAliveCount,2177,Variable
-SubscriptionDiagnosticsType_MaxNotificationsPerPublish,2179,Variable
-SubscriptionDiagnosticsType_PublishingEnabled,2180,Variable
-SubscriptionDiagnosticsType_ModifyCount,2181,Variable
-SubscriptionDiagnosticsType_EnableCount,2182,Variable
-SubscriptionDiagnosticsType_DisableCount,2183,Variable
-SubscriptionDiagnosticsType_RepublishRequestCount,2184,Variable
-SubscriptionDiagnosticsType_RepublishMessageRequestCount,2185,Variable
-SubscriptionDiagnosticsType_RepublishMessageCount,2186,Variable
-SubscriptionDiagnosticsType_TransferRequestCount,2187,Variable
-SubscriptionDiagnosticsType_TransferredToAltClientCount,2188,Variable
-SubscriptionDiagnosticsType_TransferredToSameClientCount,2189,Variable
-SubscriptionDiagnosticsType_PublishRequestCount,2190,Variable
-SubscriptionDiagnosticsType_DataChangeNotificationsCount,2191,Variable
-SubscriptionDiagnosticsType_NotificationsCount,2193,Variable
-SessionDiagnosticsArrayType,2196,VariableType
-SessionDiagnosticsVariableType,2197,VariableType
-SessionDiagnosticsVariableType_SessionId,2198,Variable
-SessionDiagnosticsVariableType_SessionName,2199,Variable
-SessionDiagnosticsVariableType_ClientDescription,2200,Variable
-SessionDiagnosticsVariableType_ServerUri,2201,Variable
-SessionDiagnosticsVariableType_EndpointUrl,2202,Variable
-SessionDiagnosticsVariableType_LocaleIds,2203,Variable
-SessionDiagnosticsVariableType_ActualSessionTimeout,2204,Variable
-SessionDiagnosticsVariableType_ClientConnectionTime,2205,Variable
-SessionDiagnosticsVariableType_ClientLastContactTime,2206,Variable
-SessionDiagnosticsVariableType_CurrentSubscriptionsCount,2207,Variable
-SessionDiagnosticsVariableType_CurrentMonitoredItemsCount,2208,Variable
-SessionDiagnosticsVariableType_CurrentPublishRequestsInQueue,2209,Variable
-SessionDiagnosticsVariableType_ReadCount,2217,Variable
-SessionDiagnosticsVariableType_HistoryReadCount,2218,Variable
-SessionDiagnosticsVariableType_WriteCount,2219,Variable
-SessionDiagnosticsVariableType_HistoryUpdateCount,2220,Variable
-SessionDiagnosticsVariableType_CallCount,2221,Variable
-SessionDiagnosticsVariableType_CreateMonitoredItemsCount,2222,Variable
-SessionDiagnosticsVariableType_ModifyMonitoredItemsCount,2223,Variable
-SessionDiagnosticsVariableType_SetMonitoringModeCount,2224,Variable
-SessionDiagnosticsVariableType_SetTriggeringCount,2225,Variable
-SessionDiagnosticsVariableType_DeleteMonitoredItemsCount,2226,Variable
-SessionDiagnosticsVariableType_CreateSubscriptionCount,2227,Variable
-SessionDiagnosticsVariableType_ModifySubscriptionCount,2228,Variable
-SessionDiagnosticsVariableType_SetPublishingModeCount,2229,Variable
-SessionDiagnosticsVariableType_PublishCount,2230,Variable
-SessionDiagnosticsVariableType_RepublishCount,2231,Variable
-SessionDiagnosticsVariableType_TransferSubscriptionsCount,2232,Variable
-SessionDiagnosticsVariableType_DeleteSubscriptionsCount,2233,Variable
-SessionDiagnosticsVariableType_AddNodesCount,2234,Variable
-SessionDiagnosticsVariableType_AddReferencesCount,2235,Variable
-SessionDiagnosticsVariableType_DeleteNodesCount,2236,Variable
-SessionDiagnosticsVariableType_DeleteReferencesCount,2237,Variable
-SessionDiagnosticsVariableType_BrowseCount,2238,Variable
-SessionDiagnosticsVariableType_BrowseNextCount,2239,Variable
-SessionDiagnosticsVariableType_TranslateBrowsePathsToNodeIdsCount,2240,Variable
-SessionDiagnosticsVariableType_QueryFirstCount,2241,Variable
-SessionDiagnosticsVariableType_QueryNextCount,2242,Variable
-SessionSecurityDiagnosticsArrayType,2243,VariableType
-SessionSecurityDiagnosticsType,2244,VariableType
-SessionSecurityDiagnosticsType_SessionId,2245,Variable
-SessionSecurityDiagnosticsType_ClientUserIdOfSession,2246,Variable
-SessionSecurityDiagnosticsType_ClientUserIdHistory,2247,Variable
-SessionSecurityDiagnosticsType_AuthenticationMechanism,2248,Variable
-SessionSecurityDiagnosticsType_Encoding,2249,Variable
-SessionSecurityDiagnosticsType_TransportProtocol,2250,Variable
-SessionSecurityDiagnosticsType_SecurityMode,2251,Variable
-SessionSecurityDiagnosticsType_SecurityPolicyUri,2252,Variable
-Server,2253,Object
-Server_ServerArray,2254,Variable
-Server_NamespaceArray,2255,Variable
-Server_ServerStatus,2256,Variable
-Server_ServerStatus_StartTime,2257,Variable
-Server_ServerStatus_CurrentTime,2258,Variable
-Server_ServerStatus_State,2259,Variable
-Server_ServerStatus_BuildInfo,2260,Variable
-Server_ServerStatus_BuildInfo_ProductName,2261,Variable
-Server_ServerStatus_BuildInfo_ProductUri,2262,Variable
-Server_ServerStatus_BuildInfo_ManufacturerName,2263,Variable
-Server_ServerStatus_BuildInfo_SoftwareVersion,2264,Variable
-Server_ServerStatus_BuildInfo_BuildNumber,2265,Variable
-Server_ServerStatus_BuildInfo_BuildDate,2266,Variable
-Server_ServiceLevel,2267,Variable
-Server_ServerCapabilities,2268,Object
-Server_ServerCapabilities_ServerProfileArray,2269,Variable
-Server_ServerCapabilities_LocaleIdArray,2271,Variable
-Server_ServerCapabilities_MinSupportedSampleRate,2272,Variable
-Server_ServerDiagnostics,2274,Object
-Server_ServerDiagnostics_ServerDiagnosticsSummary,2275,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount,2276,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount,2277,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount,2278,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount,2279,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount,2281,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount,2282,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount,2284,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount,2285,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount,2286,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount,2287,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount,2288,Variable
-Server_ServerDiagnostics_SamplingIntervalDiagnosticsArray,2289,Variable
-Server_ServerDiagnostics_SubscriptionDiagnosticsArray,2290,Variable
-Server_ServerDiagnostics_EnabledFlag,2294,Variable
-Server_VendorServerInfo,2295,Object
-Server_ServerRedundancy,2296,Object
-StateMachineType,2299,ObjectType
-StateType,2307,ObjectType
-StateType_StateNumber,2308,Variable
-InitialStateType,2309,ObjectType
-TransitionType,2310,ObjectType
-TransitionEventType,2311,ObjectType
-TransitionType_TransitionNumber,2312,Variable
-AuditUpdateStateEventType,2315,ObjectType
-HistoricalDataConfigurationType,2318,ObjectType
-HistoricalDataConfigurationType_Stepped,2323,Variable
-HistoricalDataConfigurationType_Definition,2324,Variable
-HistoricalDataConfigurationType_MaxTimeInterval,2325,Variable
-HistoricalDataConfigurationType_MinTimeInterval,2326,Variable
-HistoricalDataConfigurationType_ExceptionDeviation,2327,Variable
-HistoricalDataConfigurationType_ExceptionDeviationFormat,2328,Variable
-HistoryServerCapabilitiesType,2330,ObjectType
-HistoryServerCapabilitiesType_AccessHistoryDataCapability,2331,Variable
-HistoryServerCapabilitiesType_AccessHistoryEventsCapability,2332,Variable
-HistoryServerCapabilitiesType_InsertDataCapability,2334,Variable
-HistoryServerCapabilitiesType_ReplaceDataCapability,2335,Variable
-HistoryServerCapabilitiesType_UpdateDataCapability,2336,Variable
-HistoryServerCapabilitiesType_DeleteRawCapability,2337,Variable
-HistoryServerCapabilitiesType_DeleteAtTimeCapability,2338,Variable
-AggregateFunctionType,2340,ObjectType
-AggregateFunction_Interpolative,2341,Object
-AggregateFunction_Average,2342,Object
-AggregateFunction_TimeAverage,2343,Object
-AggregateFunction_Total,2344,Object
-AggregateFunction_Minimum,2346,Object
-AggregateFunction_Maximum,2347,Object
-AggregateFunction_MinimumActualTime,2348,Object
-AggregateFunction_MaximumActualTime,2349,Object
-AggregateFunction_Range,2350,Object
-AggregateFunction_AnnotationCount,2351,Object
-AggregateFunction_Count,2352,Object
-AggregateFunction_NumberOfTransitions,2355,Object
-AggregateFunction_Start,2357,Object
-AggregateFunction_End,2358,Object
-AggregateFunction_Delta,2359,Object
-AggregateFunction_DurationGood,2360,Object
-AggregateFunction_DurationBad,2361,Object
-AggregateFunction_PercentGood,2362,Object
-AggregateFunction_PercentBad,2363,Object
-AggregateFunction_WorstQuality,2364,Object
-DataItemType,2365,VariableType
-DataItemType_Definition,2366,Variable
-DataItemType_ValuePrecision,2367,Variable
-AnalogItemType,2368,VariableType
-AnalogItemType_EURange,2369,Variable
-AnalogItemType_InstrumentRange,2370,Variable
-AnalogItemType_EngineeringUnits,2371,Variable
-DiscreteItemType,2372,VariableType
-TwoStateDiscreteType,2373,VariableType
-TwoStateDiscreteType_FalseState,2374,Variable
-TwoStateDiscreteType_TrueState,2375,Variable
-MultiStateDiscreteType,2376,VariableType
-MultiStateDiscreteType_EnumStrings,2377,Variable
-ProgramTransitionEventType,2378,ObjectType
-ProgramTransitionEventType_IntermediateResult,2379,Variable
-ProgramDiagnosticType,2380,VariableType
-ProgramDiagnosticType_CreateSessionId,2381,Variable
-ProgramDiagnosticType_CreateClientName,2382,Variable
-ProgramDiagnosticType_InvocationCreationTime,2383,Variable
-ProgramDiagnosticType_LastTransitionTime,2384,Variable
-ProgramDiagnosticType_LastMethodCall,2385,Variable
-ProgramDiagnosticType_LastMethodSessionId,2386,Variable
-ProgramDiagnosticType_LastMethodInputArguments,2387,Variable
-ProgramDiagnosticType_LastMethodOutputArguments,2388,Variable
-ProgramDiagnosticType_LastMethodCallTime,2389,Variable
-ProgramDiagnosticType_LastMethodReturnStatus,2390,Variable
-ProgramStateMachineType,2391,ObjectType
-ProgramStateMachineType_Creatable,2392,Variable
-ProgramStateMachineType_Deletable,2393,Variable
-ProgramStateMachineType_AutoDelete,2394,Variable
-ProgramStateMachineType_RecycleCount,2395,Variable
-ProgramStateMachineType_InstanceCount,2396,Variable
-ProgramStateMachineType_MaxInstanceCount,2397,Variable
-ProgramStateMachineType_MaxRecycleCount,2398,Variable
-ProgramStateMachineType_ProgramDiagnostic,2399,Variable
-ProgramStateMachineType_Ready,2400,Object
-ProgramStateMachineType_Ready_StateNumber,2401,Variable
-ProgramStateMachineType_Running,2402,Object
-ProgramStateMachineType_Running_StateNumber,2403,Variable
-ProgramStateMachineType_Suspended,2404,Object
-ProgramStateMachineType_Suspended_StateNumber,2405,Variable
-ProgramStateMachineType_Halted,2406,Object
-ProgramStateMachineType_Halted_StateNumber,2407,Variable
-ProgramStateMachineType_HaltedToReady,2408,Object
-ProgramStateMachineType_HaltedToReady_TransitionNumber,2409,Variable
-ProgramStateMachineType_ReadyToRunning,2410,Object
-ProgramStateMachineType_ReadyToRunning_TransitionNumber,2411,Variable
-ProgramStateMachineType_RunningToHalted,2412,Object
-ProgramStateMachineType_RunningToHalted_TransitionNumber,2413,Variable
-ProgramStateMachineType_RunningToReady,2414,Object
-ProgramStateMachineType_RunningToReady_TransitionNumber,2415,Variable
-ProgramStateMachineType_RunningToSuspended,2416,Object
-ProgramStateMachineType_RunningToSuspended_TransitionNumber,2417,Variable
-ProgramStateMachineType_SuspendedToRunning,2418,Object
-ProgramStateMachineType_SuspendedToRunning_TransitionNumber,2419,Variable
-ProgramStateMachineType_SuspendedToHalted,2420,Object
-ProgramStateMachineType_SuspendedToHalted_TransitionNumber,2421,Variable
-ProgramStateMachineType_SuspendedToReady,2422,Object
-ProgramStateMachineType_SuspendedToReady_TransitionNumber,2423,Variable
-ProgramStateMachineType_ReadyToHalted,2424,Object
-ProgramStateMachineType_ReadyToHalted_TransitionNumber,2425,Variable
-ProgramStateMachineType_Start,2426,Method
-ProgramStateMachineType_Suspend,2427,Method
-ProgramStateMachineType_Resume,2428,Method
-ProgramStateMachineType_Halt,2429,Method
-ProgramStateMachineType_Reset,2430,Method
-SessionDiagnosticsVariableType_RegisterNodesCount,2730,Variable
-SessionDiagnosticsVariableType_UnregisterNodesCount,2731,Variable
-ServerCapabilitiesType_MaxBrowseContinuationPoints,2732,Variable
-ServerCapabilitiesType_MaxQueryContinuationPoints,2733,Variable
-ServerCapabilitiesType_MaxHistoryContinuationPoints,2734,Variable
-Server_ServerCapabilities_MaxBrowseContinuationPoints,2735,Variable
-Server_ServerCapabilities_MaxQueryContinuationPoints,2736,Variable
-Server_ServerCapabilities_MaxHistoryContinuationPoints,2737,Variable
-SemanticChangeEventType,2738,ObjectType
-SemanticChangeEventType_Changes,2739,Variable
-ServerType_Auditing,2742,Variable
-ServerDiagnosticsType_SessionsDiagnosticsSummary,2744,Object
-AuditChannelEventType_SecureChannelId,2745,Variable
-AuditOpenSecureChannelEventType_ClientCertificateThumbprint,2746,Variable
-AuditCreateSessionEventType_ClientCertificateThumbprint,2747,Variable
-AuditUrlMismatchEventType,2748,ObjectType
-AuditUrlMismatchEventType_EndpointUrl,2749,Variable
-AuditWriteUpdateEventType_AttributeId,2750,Variable
-AuditHistoryUpdateEventType_ParameterDataTypeId,2751,Variable
-ServerStatusType_SecondsTillShutdown,2752,Variable
-ServerStatusType_ShutdownReason,2753,Variable
-ServerCapabilitiesType_AggregateFunctions,2754,Object
-StateVariableType,2755,VariableType
-StateVariableType_Id,2756,Variable
-StateVariableType_Name,2757,Variable
-StateVariableType_Number,2758,Variable
-StateVariableType_EffectiveDisplayName,2759,Variable
-FiniteStateVariableType,2760,VariableType
-FiniteStateVariableType_Id,2761,Variable
-TransitionVariableType,2762,VariableType
-TransitionVariableType_Id,2763,Variable
-TransitionVariableType_Name,2764,Variable
-TransitionVariableType_Number,2765,Variable
-TransitionVariableType_TransitionTime,2766,Variable
-FiniteTransitionVariableType,2767,VariableType
-FiniteTransitionVariableType_Id,2768,Variable
-StateMachineType_CurrentState,2769,Variable
-StateMachineType_LastTransition,2770,Variable
-FiniteStateMachineType,2771,ObjectType
-FiniteStateMachineType_CurrentState,2772,Variable
-FiniteStateMachineType_LastTransition,2773,Variable
-TransitionEventType_Transition,2774,Variable
-TransitionEventType_FromState,2775,Variable
-TransitionEventType_ToState,2776,Variable
-AuditUpdateStateEventType_OldStateId,2777,Variable
-AuditUpdateStateEventType_NewStateId,2778,Variable
-ConditionType,2782,ObjectType
-RefreshStartEventType,2787,ObjectType
-RefreshEndEventType,2788,ObjectType
-RefreshRequiredEventType,2789,ObjectType
-AuditConditionEventType,2790,ObjectType
-AuditConditionEnableEventType,2803,ObjectType
-AuditConditionCommentEventType,2829,ObjectType
-DialogConditionType,2830,ObjectType
-DialogConditionType_Prompt,2831,Variable
-AcknowledgeableConditionType,2881,ObjectType
-AlarmConditionType,2915,ObjectType
-ShelvedStateMachineType,2929,ObjectType
-ShelvedStateMachineType_Unshelved,2930,Object
-ShelvedStateMachineType_TimedShelved,2932,Object
-ShelvedStateMachineType_OneShotShelved,2933,Object
-ShelvedStateMachineType_UnshelvedToTimedShelved,2935,Object
-ShelvedStateMachineType_UnshelvedToOneShotShelved,2936,Object
-ShelvedStateMachineType_TimedShelvedToUnshelved,2940,Object
-ShelvedStateMachineType_TimedShelvedToOneShotShelved,2942,Object
-ShelvedStateMachineType_OneShotShelvedToUnshelved,2943,Object
-ShelvedStateMachineType_OneShotShelvedToTimedShelved,2945,Object
-ShelvedStateMachineType_Unshelve,2947,Method
-ShelvedStateMachineType_OneShotShelve,2948,Method
-ShelvedStateMachineType_TimedShelve,2949,Method
-LimitAlarmType,2955,ObjectType
-ShelvedStateMachineType_TimedShelve_InputArguments,2991,Variable
-Server_ServerStatus_SecondsTillShutdown,2992,Variable
-Server_ServerStatus_ShutdownReason,2993,Variable
-Server_Auditing,2994,Variable
-Server_ServerCapabilities_ModellingRules,2996,Object
-Server_ServerCapabilities_AggregateFunctions,2997,Object
-SubscriptionDiagnosticsType_EventNotificationsCount,2998,Variable
-AuditHistoryEventUpdateEventType,2999,ObjectType
-AuditHistoryEventUpdateEventType_Filter,3003,Variable
-AuditHistoryValueUpdateEventType,3006,ObjectType
-AuditHistoryDeleteEventType,3012,ObjectType
-AuditHistoryRawModifyDeleteEventType,3014,ObjectType
-AuditHistoryRawModifyDeleteEventType_IsDeleteModified,3015,Variable
-AuditHistoryRawModifyDeleteEventType_StartTime,3016,Variable
-AuditHistoryRawModifyDeleteEventType_EndTime,3017,Variable
-AuditHistoryAtTimeDeleteEventType,3019,ObjectType
-AuditHistoryAtTimeDeleteEventType_ReqTimes,3020,Variable
-AuditHistoryAtTimeDeleteEventType_OldValues,3021,Variable
-AuditHistoryEventDeleteEventType,3022,ObjectType
-AuditHistoryEventDeleteEventType_EventIds,3023,Variable
-AuditHistoryEventDeleteEventType_OldValues,3024,Variable
-AuditHistoryEventUpdateEventType_UpdatedNode,3025,Variable
-AuditHistoryValueUpdateEventType_UpdatedNode,3026,Variable
-AuditHistoryDeleteEventType_UpdatedNode,3027,Variable
-AuditHistoryEventUpdateEventType_PerformInsertReplace,3028,Variable
-AuditHistoryEventUpdateEventType_NewValues,3029,Variable
-AuditHistoryEventUpdateEventType_OldValues,3030,Variable
-AuditHistoryValueUpdateEventType_PerformInsertReplace,3031,Variable
-AuditHistoryValueUpdateEventType_NewValues,3032,Variable
-AuditHistoryValueUpdateEventType_OldValues,3033,Variable
-AuditHistoryRawModifyDeleteEventType_OldValues,3034,Variable
-EventQueueOverflowEventType,3035,ObjectType
-EventTypesFolder,3048,Object
-ServerCapabilitiesType_SoftwareCertificates,3049,Variable
-SessionDiagnosticsVariableType_MaxResponseMessageSize,3050,Variable
-BuildInfoType,3051,VariableType
-BuildInfoType_ProductUri,3052,Variable
-BuildInfoType_ManufacturerName,3053,Variable
-BuildInfoType_ProductName,3054,Variable
-BuildInfoType_SoftwareVersion,3055,Variable
-BuildInfoType_BuildNumber,3056,Variable
-BuildInfoType_BuildDate,3057,Variable
-SessionSecurityDiagnosticsType_ClientCertificate,3058,Variable
-HistoricalDataConfigurationType_AggregateConfiguration,3059,Object
-DefaultBinary,3062,Object
-DefaultXml,3063,Object
-AlwaysGeneratesEvent,3065,ReferenceType
-Icon,3067,Variable
-NodeVersion,3068,Variable
-LocalTime,3069,Variable
-AllowNulls,3070,Variable
-EnumValues,3071,Variable
-InputArguments,3072,Variable
-OutputArguments,3073,Variable
-ServerType_ServerStatus_StartTime,3074,Variable
-ServerType_ServerStatus_CurrentTime,3075,Variable
-ServerType_ServerStatus_State,3076,Variable
-ServerType_ServerStatus_BuildInfo,3077,Variable
-ServerType_ServerStatus_BuildInfo_ProductUri,3078,Variable
-ServerType_ServerStatus_BuildInfo_ManufacturerName,3079,Variable
-ServerType_ServerStatus_BuildInfo_ProductName,3080,Variable
-ServerType_ServerStatus_BuildInfo_SoftwareVersion,3081,Variable
-ServerType_ServerStatus_BuildInfo_BuildNumber,3082,Variable
-ServerType_ServerStatus_BuildInfo_BuildDate,3083,Variable
-ServerType_ServerStatus_SecondsTillShutdown,3084,Variable
-ServerType_ServerStatus_ShutdownReason,3085,Variable
-ServerType_ServerCapabilities_ServerProfileArray,3086,Variable
-ServerType_ServerCapabilities_LocaleIdArray,3087,Variable
-ServerType_ServerCapabilities_MinSupportedSampleRate,3088,Variable
-ServerType_ServerCapabilities_MaxBrowseContinuationPoints,3089,Variable
-ServerType_ServerCapabilities_MaxQueryContinuationPoints,3090,Variable
-ServerType_ServerCapabilities_MaxHistoryContinuationPoints,3091,Variable
-ServerType_ServerCapabilities_SoftwareCertificates,3092,Variable
-ServerType_ServerCapabilities_ModellingRules,3093,Object
-ServerType_ServerCapabilities_AggregateFunctions,3094,Object
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary,3095,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount,3096,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount,3097,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount,3098,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount,3099,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount,3100,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount,3101,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount,3102,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount,3104,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount,3105,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount,3106,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount,3107,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount,3108,Variable
-ServerType_ServerDiagnostics_SamplingIntervalDiagnosticsArray,3109,Variable
-ServerType_ServerDiagnostics_SubscriptionDiagnosticsArray,3110,Variable
-ServerType_ServerDiagnostics_SessionsDiagnosticsSummary,3111,Object
-ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray,3112,Variable
-ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray,3113,Variable
-ServerType_ServerDiagnostics_EnabledFlag,3114,Variable
-ServerType_ServerRedundancy_RedundancySupport,3115,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_ServerViewCount,3116,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSessionCount,3117,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSessionCount,3118,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedSessionCount,3119,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedSessionCount,3120,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_SessionTimeoutCount,3121,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_SessionAbortCount,3122,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_PublishingIntervalCount,3124,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSubscriptionCount,3125,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSubscriptionCount,3126,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedRequestsCount,3127,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedRequestsCount,3128,Variable
-ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionDiagnosticsArray,3129,Variable
-ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray,3130,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_SessionId,3131,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_SessionName,3132,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_ClientDescription,3133,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_ServerUri,3134,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_EndpointUrl,3135,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_LocaleIds,3136,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_ActualSessionTimeout,3137,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_MaxResponseMessageSize,3138,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_ClientConnectionTime,3139,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_ClientLastContactTime,3140,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_CurrentSubscriptionsCount,3141,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_CurrentMonitoredItemsCount,3142,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_CurrentPublishRequestsInQueue,3143,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_ReadCount,3151,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_HistoryReadCount,3152,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_WriteCount,3153,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_HistoryUpdateCount,3154,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_CallCount,3155,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_CreateMonitoredItemsCount,3156,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_ModifyMonitoredItemsCount,3157,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_SetMonitoringModeCount,3158,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_SetTriggeringCount,3159,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_DeleteMonitoredItemsCount,3160,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_CreateSubscriptionCount,3161,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_ModifySubscriptionCount,3162,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_SetPublishingModeCount,3163,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_PublishCount,3164,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_RepublishCount,3165,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_TransferSubscriptionsCount,3166,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_DeleteSubscriptionsCount,3167,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_AddNodesCount,3168,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_AddReferencesCount,3169,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_DeleteNodesCount,3170,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_DeleteReferencesCount,3171,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_BrowseCount,3172,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_BrowseNextCount,3173,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount,3174,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_QueryFirstCount,3175,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_QueryNextCount,3176,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_RegisterNodesCount,3177,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_UnregisterNodesCount,3178,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SessionId,3179,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdOfSession,3180,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdHistory,3181,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_AuthenticationMechanism,3182,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_Encoding,3183,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_TransportProtocol,3184,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityMode,3185,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityPolicyUri,3186,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientCertificate,3187,Variable
-TransparentRedundancyType_RedundancySupport,3188,Variable
-NonTransparentRedundancyType_RedundancySupport,3189,Variable
-BaseEventType_LocalTime,3190,Variable
-EventQueueOverflowEventType_EventId,3191,Variable
-EventQueueOverflowEventType_EventType,3192,Variable
-EventQueueOverflowEventType_SourceNode,3193,Variable
-EventQueueOverflowEventType_SourceName,3194,Variable
-EventQueueOverflowEventType_Time,3195,Variable
-EventQueueOverflowEventType_ReceiveTime,3196,Variable
-EventQueueOverflowEventType_LocalTime,3197,Variable
-EventQueueOverflowEventType_Message,3198,Variable
-EventQueueOverflowEventType_Severity,3199,Variable
-AuditEventType_EventId,3200,Variable
-AuditEventType_EventType,3201,Variable
-AuditEventType_SourceNode,3202,Variable
-AuditEventType_SourceName,3203,Variable
-AuditEventType_Time,3204,Variable
-AuditEventType_ReceiveTime,3205,Variable
-AuditEventType_LocalTime,3206,Variable
-AuditEventType_Message,3207,Variable
-AuditEventType_Severity,3208,Variable
-AuditSecurityEventType_EventId,3209,Variable
-AuditSecurityEventType_EventType,3210,Variable
-AuditSecurityEventType_SourceNode,3211,Variable
-AuditSecurityEventType_SourceName,3212,Variable
-AuditSecurityEventType_Time,3213,Variable
-AuditSecurityEventType_ReceiveTime,3214,Variable
-AuditSecurityEventType_LocalTime,3215,Variable
-AuditSecurityEventType_Message,3216,Variable
-AuditSecurityEventType_Severity,3217,Variable
-AuditSecurityEventType_ActionTimeStamp,3218,Variable
-AuditSecurityEventType_Status,3219,Variable
-AuditSecurityEventType_ServerId,3220,Variable
-AuditSecurityEventType_ClientAuditEntryId,3221,Variable
-AuditSecurityEventType_ClientUserId,3222,Variable
-AuditChannelEventType_EventId,3223,Variable
-AuditChannelEventType_EventType,3224,Variable
-AuditChannelEventType_SourceNode,3225,Variable
-AuditChannelEventType_SourceName,3226,Variable
-AuditChannelEventType_Time,3227,Variable
-AuditChannelEventType_ReceiveTime,3228,Variable
-AuditChannelEventType_LocalTime,3229,Variable
-AuditChannelEventType_Message,3230,Variable
-AuditChannelEventType_Severity,3231,Variable
-AuditChannelEventType_ActionTimeStamp,3232,Variable
-AuditChannelEventType_Status,3233,Variable
-AuditChannelEventType_ServerId,3234,Variable
-AuditChannelEventType_ClientAuditEntryId,3235,Variable
-AuditChannelEventType_ClientUserId,3236,Variable
-AuditOpenSecureChannelEventType_EventId,3237,Variable
-AuditOpenSecureChannelEventType_EventType,3238,Variable
-AuditOpenSecureChannelEventType_SourceNode,3239,Variable
-AuditOpenSecureChannelEventType_SourceName,3240,Variable
-AuditOpenSecureChannelEventType_Time,3241,Variable
-AuditOpenSecureChannelEventType_ReceiveTime,3242,Variable
-AuditOpenSecureChannelEventType_LocalTime,3243,Variable
-AuditOpenSecureChannelEventType_Message,3244,Variable
-AuditOpenSecureChannelEventType_Severity,3245,Variable
-AuditOpenSecureChannelEventType_ActionTimeStamp,3246,Variable
-AuditOpenSecureChannelEventType_Status,3247,Variable
-AuditOpenSecureChannelEventType_ServerId,3248,Variable
-AuditOpenSecureChannelEventType_ClientAuditEntryId,3249,Variable
-AuditOpenSecureChannelEventType_ClientUserId,3250,Variable
-AuditOpenSecureChannelEventType_SecureChannelId,3251,Variable
-AuditSessionEventType_EventId,3252,Variable
-AuditSessionEventType_EventType,3253,Variable
-AuditSessionEventType_SourceNode,3254,Variable
-AuditSessionEventType_SourceName,3255,Variable
-AuditSessionEventType_Time,3256,Variable
-AuditSessionEventType_ReceiveTime,3257,Variable
-AuditSessionEventType_LocalTime,3258,Variable
-AuditSessionEventType_Message,3259,Variable
-AuditSessionEventType_Severity,3260,Variable
-AuditSessionEventType_ActionTimeStamp,3261,Variable
-AuditSessionEventType_Status,3262,Variable
-AuditSessionEventType_ServerId,3263,Variable
-AuditSessionEventType_ClientAuditEntryId,3264,Variable
-AuditSessionEventType_ClientUserId,3265,Variable
-AuditCreateSessionEventType_EventId,3266,Variable
-AuditCreateSessionEventType_EventType,3267,Variable
-AuditCreateSessionEventType_SourceNode,3268,Variable
-AuditCreateSessionEventType_SourceName,3269,Variable
-AuditCreateSessionEventType_Time,3270,Variable
-AuditCreateSessionEventType_ReceiveTime,3271,Variable
-AuditCreateSessionEventType_LocalTime,3272,Variable
-AuditCreateSessionEventType_Message,3273,Variable
-AuditCreateSessionEventType_Severity,3274,Variable
-AuditCreateSessionEventType_ActionTimeStamp,3275,Variable
-AuditCreateSessionEventType_Status,3276,Variable
-AuditCreateSessionEventType_ServerId,3277,Variable
-AuditCreateSessionEventType_ClientAuditEntryId,3278,Variable
-AuditCreateSessionEventType_ClientUserId,3279,Variable
-AuditUrlMismatchEventType_EventId,3281,Variable
-AuditUrlMismatchEventType_EventType,3282,Variable
-AuditUrlMismatchEventType_SourceNode,3283,Variable
-AuditUrlMismatchEventType_SourceName,3284,Variable
-AuditUrlMismatchEventType_Time,3285,Variable
-AuditUrlMismatchEventType_ReceiveTime,3286,Variable
-AuditUrlMismatchEventType_LocalTime,3287,Variable
-AuditUrlMismatchEventType_Message,3288,Variable
-AuditUrlMismatchEventType_Severity,3289,Variable
-AuditUrlMismatchEventType_ActionTimeStamp,3290,Variable
-AuditUrlMismatchEventType_Status,3291,Variable
-AuditUrlMismatchEventType_ServerId,3292,Variable
-AuditUrlMismatchEventType_ClientAuditEntryId,3293,Variable
-AuditUrlMismatchEventType_ClientUserId,3294,Variable
-AuditUrlMismatchEventType_SecureChannelId,3296,Variable
-AuditUrlMismatchEventType_ClientCertificate,3297,Variable
-AuditUrlMismatchEventType_ClientCertificateThumbprint,3298,Variable
-AuditUrlMismatchEventType_RevisedSessionTimeout,3299,Variable
-AuditActivateSessionEventType_EventId,3300,Variable
-AuditActivateSessionEventType_EventType,3301,Variable
-AuditActivateSessionEventType_SourceNode,3302,Variable
-AuditActivateSessionEventType_SourceName,3303,Variable
-AuditActivateSessionEventType_Time,3304,Variable
-AuditActivateSessionEventType_ReceiveTime,3305,Variable
-AuditActivateSessionEventType_LocalTime,3306,Variable
-AuditActivateSessionEventType_Message,3307,Variable
-AuditActivateSessionEventType_Severity,3308,Variable
-AuditActivateSessionEventType_ActionTimeStamp,3309,Variable
-AuditActivateSessionEventType_Status,3310,Variable
-AuditActivateSessionEventType_ServerId,3311,Variable
-AuditActivateSessionEventType_ClientAuditEntryId,3312,Variable
-AuditActivateSessionEventType_ClientUserId,3313,Variable
-AuditActivateSessionEventType_SessionId,3314,Variable
-AuditCancelEventType_EventId,3315,Variable
-AuditCancelEventType_EventType,3316,Variable
-AuditCancelEventType_SourceNode,3317,Variable
-AuditCancelEventType_SourceName,3318,Variable
-AuditCancelEventType_Time,3319,Variable
-AuditCancelEventType_ReceiveTime,3320,Variable
-AuditCancelEventType_LocalTime,3321,Variable
-AuditCancelEventType_Message,3322,Variable
-AuditCancelEventType_Severity,3323,Variable
-AuditCancelEventType_ActionTimeStamp,3324,Variable
-AuditCancelEventType_Status,3325,Variable
-AuditCancelEventType_ServerId,3326,Variable
-AuditCancelEventType_ClientAuditEntryId,3327,Variable
-AuditCancelEventType_ClientUserId,3328,Variable
-AuditCancelEventType_SessionId,3329,Variable
-AuditCertificateEventType_EventId,3330,Variable
-AuditCertificateEventType_EventType,3331,Variable
-AuditCertificateEventType_SourceNode,3332,Variable
-AuditCertificateEventType_SourceName,3333,Variable
-AuditCertificateEventType_Time,3334,Variable
-AuditCertificateEventType_ReceiveTime,3335,Variable
-AuditCertificateEventType_LocalTime,3336,Variable
-AuditCertificateEventType_Message,3337,Variable
-AuditCertificateEventType_Severity,3338,Variable
-AuditCertificateEventType_ActionTimeStamp,3339,Variable
-AuditCertificateEventType_Status,3340,Variable
-AuditCertificateEventType_ServerId,3341,Variable
-AuditCertificateEventType_ClientAuditEntryId,3342,Variable
-AuditCertificateEventType_ClientUserId,3343,Variable
-AuditCertificateDataMismatchEventType_EventId,3344,Variable
-AuditCertificateDataMismatchEventType_EventType,3345,Variable
-AuditCertificateDataMismatchEventType_SourceNode,3346,Variable
-AuditCertificateDataMismatchEventType_SourceName,3347,Variable
-AuditCertificateDataMismatchEventType_Time,3348,Variable
-AuditCertificateDataMismatchEventType_ReceiveTime,3349,Variable
-AuditCertificateDataMismatchEventType_LocalTime,3350,Variable
-AuditCertificateDataMismatchEventType_Message,3351,Variable
-AuditCertificateDataMismatchEventType_Severity,3352,Variable
-AuditCertificateDataMismatchEventType_ActionTimeStamp,3353,Variable
-AuditCertificateDataMismatchEventType_Status,3354,Variable
-AuditCertificateDataMismatchEventType_ServerId,3355,Variable
-AuditCertificateDataMismatchEventType_ClientAuditEntryId,3356,Variable
-AuditCertificateDataMismatchEventType_ClientUserId,3357,Variable
-AuditCertificateDataMismatchEventType_Certificate,3358,Variable
-AuditCertificateExpiredEventType_EventId,3359,Variable
-AuditCertificateExpiredEventType_EventType,3360,Variable
-AuditCertificateExpiredEventType_SourceNode,3361,Variable
-AuditCertificateExpiredEventType_SourceName,3362,Variable
-AuditCertificateExpiredEventType_Time,3363,Variable
-AuditCertificateExpiredEventType_ReceiveTime,3364,Variable
-AuditCertificateExpiredEventType_LocalTime,3365,Variable
-AuditCertificateExpiredEventType_Message,3366,Variable
-AuditCertificateExpiredEventType_Severity,3367,Variable
-AuditCertificateExpiredEventType_ActionTimeStamp,3368,Variable
-AuditCertificateExpiredEventType_Status,3369,Variable
-AuditCertificateExpiredEventType_ServerId,3370,Variable
-AuditCertificateExpiredEventType_ClientAuditEntryId,3371,Variable
-AuditCertificateExpiredEventType_ClientUserId,3372,Variable
-AuditCertificateExpiredEventType_Certificate,3373,Variable
-AuditCertificateInvalidEventType_EventId,3374,Variable
-AuditCertificateInvalidEventType_EventType,3375,Variable
-AuditCertificateInvalidEventType_SourceNode,3376,Variable
-AuditCertificateInvalidEventType_SourceName,3377,Variable
-AuditCertificateInvalidEventType_Time,3378,Variable
-AuditCertificateInvalidEventType_ReceiveTime,3379,Variable
-AuditCertificateInvalidEventType_LocalTime,3380,Variable
-AuditCertificateInvalidEventType_Message,3381,Variable
-AuditCertificateInvalidEventType_Severity,3382,Variable
-AuditCertificateInvalidEventType_ActionTimeStamp,3383,Variable
-AuditCertificateInvalidEventType_Status,3384,Variable
-AuditCertificateInvalidEventType_ServerId,3385,Variable
-AuditCertificateInvalidEventType_ClientAuditEntryId,3386,Variable
-AuditCertificateInvalidEventType_ClientUserId,3387,Variable
-AuditCertificateInvalidEventType_Certificate,3388,Variable
-AuditCertificateUntrustedEventType_EventId,3389,Variable
-AuditCertificateUntrustedEventType_EventType,3390,Variable
-AuditCertificateUntrustedEventType_SourceNode,3391,Variable
-AuditCertificateUntrustedEventType_SourceName,3392,Variable
-AuditCertificateUntrustedEventType_Time,3393,Variable
-AuditCertificateUntrustedEventType_ReceiveTime,3394,Variable
-AuditCertificateUntrustedEventType_LocalTime,3395,Variable
-AuditCertificateUntrustedEventType_Message,3396,Variable
-AuditCertificateUntrustedEventType_Severity,3397,Variable
-AuditCertificateUntrustedEventType_ActionTimeStamp,3398,Variable
-AuditCertificateUntrustedEventType_Status,3399,Variable
-AuditCertificateUntrustedEventType_ServerId,3400,Variable
-AuditCertificateUntrustedEventType_ClientAuditEntryId,3401,Variable
-AuditCertificateUntrustedEventType_ClientUserId,3402,Variable
-AuditCertificateUntrustedEventType_Certificate,3403,Variable
-AuditCertificateRevokedEventType_EventId,3404,Variable
-AuditCertificateRevokedEventType_EventType,3405,Variable
-AuditCertificateRevokedEventType_SourceNode,3406,Variable
-AuditCertificateRevokedEventType_SourceName,3407,Variable
-AuditCertificateRevokedEventType_Time,3408,Variable
-AuditCertificateRevokedEventType_ReceiveTime,3409,Variable
-AuditCertificateRevokedEventType_LocalTime,3410,Variable
-AuditCertificateRevokedEventType_Message,3411,Variable
-AuditCertificateRevokedEventType_Severity,3412,Variable
-AuditCertificateRevokedEventType_ActionTimeStamp,3413,Variable
-AuditCertificateRevokedEventType_Status,3414,Variable
-AuditCertificateRevokedEventType_ServerId,3415,Variable
-AuditCertificateRevokedEventType_ClientAuditEntryId,3416,Variable
-AuditCertificateRevokedEventType_ClientUserId,3417,Variable
-AuditCertificateRevokedEventType_Certificate,3418,Variable
-AuditCertificateMismatchEventType_EventId,3419,Variable
-AuditCertificateMismatchEventType_EventType,3420,Variable
-AuditCertificateMismatchEventType_SourceNode,3421,Variable
-AuditCertificateMismatchEventType_SourceName,3422,Variable
-AuditCertificateMismatchEventType_Time,3423,Variable
-AuditCertificateMismatchEventType_ReceiveTime,3424,Variable
-AuditCertificateMismatchEventType_LocalTime,3425,Variable
-AuditCertificateMismatchEventType_Message,3426,Variable
-AuditCertificateMismatchEventType_Severity,3427,Variable
-AuditCertificateMismatchEventType_ActionTimeStamp,3428,Variable
-AuditCertificateMismatchEventType_Status,3429,Variable
-AuditCertificateMismatchEventType_ServerId,3430,Variable
-AuditCertificateMismatchEventType_ClientAuditEntryId,3431,Variable
-AuditCertificateMismatchEventType_ClientUserId,3432,Variable
-AuditCertificateMismatchEventType_Certificate,3433,Variable
-AuditNodeManagementEventType_EventId,3434,Variable
-AuditNodeManagementEventType_EventType,3435,Variable
-AuditNodeManagementEventType_SourceNode,3436,Variable
-AuditNodeManagementEventType_SourceName,3437,Variable
-AuditNodeManagementEventType_Time,3438,Variable
-AuditNodeManagementEventType_ReceiveTime,3439,Variable
-AuditNodeManagementEventType_LocalTime,3440,Variable
-AuditNodeManagementEventType_Message,3441,Variable
-AuditNodeManagementEventType_Severity,3442,Variable
-AuditNodeManagementEventType_ActionTimeStamp,3443,Variable
-AuditNodeManagementEventType_Status,3444,Variable
-AuditNodeManagementEventType_ServerId,3445,Variable
-AuditNodeManagementEventType_ClientAuditEntryId,3446,Variable
-AuditNodeManagementEventType_ClientUserId,3447,Variable
-AuditAddNodesEventType_EventId,3448,Variable
-AuditAddNodesEventType_EventType,3449,Variable
-AuditAddNodesEventType_SourceNode,3450,Variable
-AuditAddNodesEventType_SourceName,3451,Variable
-AuditAddNodesEventType_Time,3452,Variable
-AuditAddNodesEventType_ReceiveTime,3453,Variable
-AuditAddNodesEventType_LocalTime,3454,Variable
-AuditAddNodesEventType_Message,3455,Variable
-AuditAddNodesEventType_Severity,3456,Variable
-AuditAddNodesEventType_ActionTimeStamp,3457,Variable
-AuditAddNodesEventType_Status,3458,Variable
-AuditAddNodesEventType_ServerId,3459,Variable
-AuditAddNodesEventType_ClientAuditEntryId,3460,Variable
-AuditAddNodesEventType_ClientUserId,3461,Variable
-AuditDeleteNodesEventType_EventId,3462,Variable
-AuditDeleteNodesEventType_EventType,3463,Variable
-AuditDeleteNodesEventType_SourceNode,3464,Variable
-AuditDeleteNodesEventType_SourceName,3465,Variable
-AuditDeleteNodesEventType_Time,3466,Variable
-AuditDeleteNodesEventType_ReceiveTime,3467,Variable
-AuditDeleteNodesEventType_LocalTime,3468,Variable
-AuditDeleteNodesEventType_Message,3469,Variable
-AuditDeleteNodesEventType_Severity,3470,Variable
-AuditDeleteNodesEventType_ActionTimeStamp,3471,Variable
-AuditDeleteNodesEventType_Status,3472,Variable
-AuditDeleteNodesEventType_ServerId,3473,Variable
-AuditDeleteNodesEventType_ClientAuditEntryId,3474,Variable
-AuditDeleteNodesEventType_ClientUserId,3475,Variable
-AuditAddReferencesEventType_EventId,3476,Variable
-AuditAddReferencesEventType_EventType,3477,Variable
-AuditAddReferencesEventType_SourceNode,3478,Variable
-AuditAddReferencesEventType_SourceName,3479,Variable
-AuditAddReferencesEventType_Time,3480,Variable
-AuditAddReferencesEventType_ReceiveTime,3481,Variable
-AuditAddReferencesEventType_LocalTime,3482,Variable
-AuditAddReferencesEventType_Message,3483,Variable
-AuditAddReferencesEventType_Severity,3484,Variable
-AuditAddReferencesEventType_ActionTimeStamp,3485,Variable
-AuditAddReferencesEventType_Status,3486,Variable
-AuditAddReferencesEventType_ServerId,3487,Variable
-AuditAddReferencesEventType_ClientAuditEntryId,3488,Variable
-AuditAddReferencesEventType_ClientUserId,3489,Variable
-AuditDeleteReferencesEventType_EventId,3490,Variable
-AuditDeleteReferencesEventType_EventType,3491,Variable
-AuditDeleteReferencesEventType_SourceNode,3492,Variable
-AuditDeleteReferencesEventType_SourceName,3493,Variable
-AuditDeleteReferencesEventType_Time,3494,Variable
-AuditDeleteReferencesEventType_ReceiveTime,3495,Variable
-AuditDeleteReferencesEventType_LocalTime,3496,Variable
-AuditDeleteReferencesEventType_Message,3497,Variable
-AuditDeleteReferencesEventType_Severity,3498,Variable
-AuditDeleteReferencesEventType_ActionTimeStamp,3499,Variable
-AuditDeleteReferencesEventType_Status,3500,Variable
-AuditDeleteReferencesEventType_ServerId,3501,Variable
-AuditDeleteReferencesEventType_ClientAuditEntryId,3502,Variable
-AuditDeleteReferencesEventType_ClientUserId,3503,Variable
-AuditUpdateEventType_EventId,3504,Variable
-AuditUpdateEventType_EventType,3505,Variable
-AuditUpdateEventType_SourceNode,3506,Variable
-AuditUpdateEventType_SourceName,3507,Variable
-AuditUpdateEventType_Time,3508,Variable
-AuditUpdateEventType_ReceiveTime,3509,Variable
-AuditUpdateEventType_LocalTime,3510,Variable
-AuditUpdateEventType_Message,3511,Variable
-AuditUpdateEventType_Severity,3512,Variable
-AuditUpdateEventType_ActionTimeStamp,3513,Variable
-AuditUpdateEventType_Status,3514,Variable
-AuditUpdateEventType_ServerId,3515,Variable
-AuditUpdateEventType_ClientAuditEntryId,3516,Variable
-AuditUpdateEventType_ClientUserId,3517,Variable
-AuditWriteUpdateEventType_EventId,3518,Variable
-AuditWriteUpdateEventType_EventType,3519,Variable
-AuditWriteUpdateEventType_SourceNode,3520,Variable
-AuditWriteUpdateEventType_SourceName,3521,Variable
-AuditWriteUpdateEventType_Time,3522,Variable
-AuditWriteUpdateEventType_ReceiveTime,3523,Variable
-AuditWriteUpdateEventType_LocalTime,3524,Variable
-AuditWriteUpdateEventType_Message,3525,Variable
-AuditWriteUpdateEventType_Severity,3526,Variable
-AuditWriteUpdateEventType_ActionTimeStamp,3527,Variable
-AuditWriteUpdateEventType_Status,3528,Variable
-AuditWriteUpdateEventType_ServerId,3529,Variable
-AuditWriteUpdateEventType_ClientAuditEntryId,3530,Variable
-AuditWriteUpdateEventType_ClientUserId,3531,Variable
-AuditHistoryUpdateEventType_EventId,3532,Variable
-AuditHistoryUpdateEventType_EventType,3533,Variable
-AuditHistoryUpdateEventType_SourceNode,3534,Variable
-AuditHistoryUpdateEventType_SourceName,3535,Variable
-AuditHistoryUpdateEventType_Time,3536,Variable
-AuditHistoryUpdateEventType_ReceiveTime,3537,Variable
-AuditHistoryUpdateEventType_LocalTime,3538,Variable
-AuditHistoryUpdateEventType_Message,3539,Variable
-AuditHistoryUpdateEventType_Severity,3540,Variable
-AuditHistoryUpdateEventType_ActionTimeStamp,3541,Variable
-AuditHistoryUpdateEventType_Status,3542,Variable
-AuditHistoryUpdateEventType_ServerId,3543,Variable
-AuditHistoryUpdateEventType_ClientAuditEntryId,3544,Variable
-AuditHistoryUpdateEventType_ClientUserId,3545,Variable
-AuditHistoryEventUpdateEventType_EventId,3546,Variable
-AuditHistoryEventUpdateEventType_EventType,3547,Variable
-AuditHistoryEventUpdateEventType_SourceNode,3548,Variable
-AuditHistoryEventUpdateEventType_SourceName,3549,Variable
-AuditHistoryEventUpdateEventType_Time,3550,Variable
-AuditHistoryEventUpdateEventType_ReceiveTime,3551,Variable
-AuditHistoryEventUpdateEventType_LocalTime,3552,Variable
-AuditHistoryEventUpdateEventType_Message,3553,Variable
-AuditHistoryEventUpdateEventType_Severity,3554,Variable
-AuditHistoryEventUpdateEventType_ActionTimeStamp,3555,Variable
-AuditHistoryEventUpdateEventType_Status,3556,Variable
-AuditHistoryEventUpdateEventType_ServerId,3557,Variable
-AuditHistoryEventUpdateEventType_ClientAuditEntryId,3558,Variable
-AuditHistoryEventUpdateEventType_ClientUserId,3559,Variable
-AuditHistoryEventUpdateEventType_ParameterDataTypeId,3560,Variable
-AuditHistoryValueUpdateEventType_EventId,3561,Variable
-AuditHistoryValueUpdateEventType_EventType,3562,Variable
-AuditHistoryValueUpdateEventType_SourceNode,3563,Variable
-AuditHistoryValueUpdateEventType_SourceName,3564,Variable
-AuditHistoryValueUpdateEventType_Time,3565,Variable
-AuditHistoryValueUpdateEventType_ReceiveTime,3566,Variable
-AuditHistoryValueUpdateEventType_LocalTime,3567,Variable
-AuditHistoryValueUpdateEventType_Message,3568,Variable
-AuditHistoryValueUpdateEventType_Severity,3569,Variable
-AuditHistoryValueUpdateEventType_ActionTimeStamp,3570,Variable
-AuditHistoryValueUpdateEventType_Status,3571,Variable
-AuditHistoryValueUpdateEventType_ServerId,3572,Variable
-AuditHistoryValueUpdateEventType_ClientAuditEntryId,3573,Variable
-AuditHistoryValueUpdateEventType_ClientUserId,3574,Variable
-AuditHistoryValueUpdateEventType_ParameterDataTypeId,3575,Variable
-AuditHistoryDeleteEventType_EventId,3576,Variable
-AuditHistoryDeleteEventType_EventType,3577,Variable
-AuditHistoryDeleteEventType_SourceNode,3578,Variable
-AuditHistoryDeleteEventType_SourceName,3579,Variable
-AuditHistoryDeleteEventType_Time,3580,Variable
-AuditHistoryDeleteEventType_ReceiveTime,3581,Variable
-AuditHistoryDeleteEventType_LocalTime,3582,Variable
-AuditHistoryDeleteEventType_Message,3583,Variable
-AuditHistoryDeleteEventType_Severity,3584,Variable
-AuditHistoryDeleteEventType_ActionTimeStamp,3585,Variable
-AuditHistoryDeleteEventType_Status,3586,Variable
-AuditHistoryDeleteEventType_ServerId,3587,Variable
-AuditHistoryDeleteEventType_ClientAuditEntryId,3588,Variable
-AuditHistoryDeleteEventType_ClientUserId,3589,Variable
-AuditHistoryDeleteEventType_ParameterDataTypeId,3590,Variable
-AuditHistoryRawModifyDeleteEventType_EventId,3591,Variable
-AuditHistoryRawModifyDeleteEventType_EventType,3592,Variable
-AuditHistoryRawModifyDeleteEventType_SourceNode,3593,Variable
-AuditHistoryRawModifyDeleteEventType_SourceName,3594,Variable
-AuditHistoryRawModifyDeleteEventType_Time,3595,Variable
-AuditHistoryRawModifyDeleteEventType_ReceiveTime,3596,Variable
-AuditHistoryRawModifyDeleteEventType_LocalTime,3597,Variable
-AuditHistoryRawModifyDeleteEventType_Message,3598,Variable
-AuditHistoryRawModifyDeleteEventType_Severity,3599,Variable
-AuditHistoryRawModifyDeleteEventType_ActionTimeStamp,3600,Variable
-AuditHistoryRawModifyDeleteEventType_Status,3601,Variable
-AuditHistoryRawModifyDeleteEventType_ServerId,3602,Variable
-AuditHistoryRawModifyDeleteEventType_ClientAuditEntryId,3603,Variable
-AuditHistoryRawModifyDeleteEventType_ClientUserId,3604,Variable
-AuditHistoryRawModifyDeleteEventType_ParameterDataTypeId,3605,Variable
-AuditHistoryRawModifyDeleteEventType_UpdatedNode,3606,Variable
-AuditHistoryAtTimeDeleteEventType_EventId,3607,Variable
-AuditHistoryAtTimeDeleteEventType_EventType,3608,Variable
-AuditHistoryAtTimeDeleteEventType_SourceNode,3609,Variable
-AuditHistoryAtTimeDeleteEventType_SourceName,3610,Variable
-AuditHistoryAtTimeDeleteEventType_Time,3611,Variable
-AuditHistoryAtTimeDeleteEventType_ReceiveTime,3612,Variable
-AuditHistoryAtTimeDeleteEventType_LocalTime,3613,Variable
-AuditHistoryAtTimeDeleteEventType_Message,3614,Variable
-AuditHistoryAtTimeDeleteEventType_Severity,3615,Variable
-AuditHistoryAtTimeDeleteEventType_ActionTimeStamp,3616,Variable
-AuditHistoryAtTimeDeleteEventType_Status,3617,Variable
-AuditHistoryAtTimeDeleteEventType_ServerId,3618,Variable
-AuditHistoryAtTimeDeleteEventType_ClientAuditEntryId,3619,Variable
-AuditHistoryAtTimeDeleteEventType_ClientUserId,3620,Variable
-AuditHistoryAtTimeDeleteEventType_ParameterDataTypeId,3621,Variable
-AuditHistoryAtTimeDeleteEventType_UpdatedNode,3622,Variable
-AuditHistoryEventDeleteEventType_EventId,3623,Variable
-AuditHistoryEventDeleteEventType_EventType,3624,Variable
-AuditHistoryEventDeleteEventType_SourceNode,3625,Variable
-AuditHistoryEventDeleteEventType_SourceName,3626,Variable
-AuditHistoryEventDeleteEventType_Time,3627,Variable
-AuditHistoryEventDeleteEventType_ReceiveTime,3628,Variable
-AuditHistoryEventDeleteEventType_LocalTime,3629,Variable
-AuditHistoryEventDeleteEventType_Message,3630,Variable
-AuditHistoryEventDeleteEventType_Severity,3631,Variable
-AuditHistoryEventDeleteEventType_ActionTimeStamp,3632,Variable
-AuditHistoryEventDeleteEventType_Status,3633,Variable
-AuditHistoryEventDeleteEventType_ServerId,3634,Variable
-AuditHistoryEventDeleteEventType_ClientAuditEntryId,3635,Variable
-AuditHistoryEventDeleteEventType_ClientUserId,3636,Variable
-AuditHistoryEventDeleteEventType_ParameterDataTypeId,3637,Variable
-AuditHistoryEventDeleteEventType_UpdatedNode,3638,Variable
-AuditUpdateMethodEventType_EventId,3639,Variable
-AuditUpdateMethodEventType_EventType,3640,Variable
-AuditUpdateMethodEventType_SourceNode,3641,Variable
-AuditUpdateMethodEventType_SourceName,3642,Variable
-AuditUpdateMethodEventType_Time,3643,Variable
-AuditUpdateMethodEventType_ReceiveTime,3644,Variable
-AuditUpdateMethodEventType_LocalTime,3645,Variable
-AuditUpdateMethodEventType_Message,3646,Variable
-AuditUpdateMethodEventType_Severity,3647,Variable
-AuditUpdateMethodEventType_ActionTimeStamp,3648,Variable
-AuditUpdateMethodEventType_Status,3649,Variable
-AuditUpdateMethodEventType_ServerId,3650,Variable
-AuditUpdateMethodEventType_ClientAuditEntryId,3651,Variable
-AuditUpdateMethodEventType_ClientUserId,3652,Variable
-SystemEventType_EventId,3653,Variable
-SystemEventType_EventType,3654,Variable
-SystemEventType_SourceNode,3655,Variable
-SystemEventType_SourceName,3656,Variable
-SystemEventType_Time,3657,Variable
-SystemEventType_ReceiveTime,3658,Variable
-SystemEventType_LocalTime,3659,Variable
-SystemEventType_Message,3660,Variable
-SystemEventType_Severity,3661,Variable
-DeviceFailureEventType_EventId,3662,Variable
-DeviceFailureEventType_EventType,3663,Variable
-DeviceFailureEventType_SourceNode,3664,Variable
-DeviceFailureEventType_SourceName,3665,Variable
-DeviceFailureEventType_Time,3666,Variable
-DeviceFailureEventType_ReceiveTime,3667,Variable
-DeviceFailureEventType_LocalTime,3668,Variable
-DeviceFailureEventType_Message,3669,Variable
-DeviceFailureEventType_Severity,3670,Variable
-BaseModelChangeEventType_EventId,3671,Variable
-BaseModelChangeEventType_EventType,3672,Variable
-BaseModelChangeEventType_SourceNode,3673,Variable
-BaseModelChangeEventType_SourceName,3674,Variable
-BaseModelChangeEventType_Time,3675,Variable
-BaseModelChangeEventType_ReceiveTime,3676,Variable
-BaseModelChangeEventType_LocalTime,3677,Variable
-BaseModelChangeEventType_Message,3678,Variable
-BaseModelChangeEventType_Severity,3679,Variable
-GeneralModelChangeEventType_EventId,3680,Variable
-GeneralModelChangeEventType_EventType,3681,Variable
-GeneralModelChangeEventType_SourceNode,3682,Variable
-GeneralModelChangeEventType_SourceName,3683,Variable
-GeneralModelChangeEventType_Time,3684,Variable
-GeneralModelChangeEventType_ReceiveTime,3685,Variable
-GeneralModelChangeEventType_LocalTime,3686,Variable
-GeneralModelChangeEventType_Message,3687,Variable
-GeneralModelChangeEventType_Severity,3688,Variable
-SemanticChangeEventType_EventId,3689,Variable
-SemanticChangeEventType_EventType,3690,Variable
-SemanticChangeEventType_SourceNode,3691,Variable
-SemanticChangeEventType_SourceName,3692,Variable
-SemanticChangeEventType_Time,3693,Variable
-SemanticChangeEventType_ReceiveTime,3694,Variable
-SemanticChangeEventType_LocalTime,3695,Variable
-SemanticChangeEventType_Message,3696,Variable
-SemanticChangeEventType_Severity,3697,Variable
-ServerStatusType_BuildInfo_ProductUri,3698,Variable
-ServerStatusType_BuildInfo_ManufacturerName,3699,Variable
-ServerStatusType_BuildInfo_ProductName,3700,Variable
-ServerStatusType_BuildInfo_SoftwareVersion,3701,Variable
-ServerStatusType_BuildInfo_BuildNumber,3702,Variable
-ServerStatusType_BuildInfo_BuildDate,3703,Variable
-Server_ServerCapabilities_SoftwareCertificates,3704,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount,3705,Variable
-Server_ServerDiagnostics_SessionsDiagnosticsSummary,3706,Object
-Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray,3707,Variable
-Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray,3708,Variable
-Server_ServerRedundancy_RedundancySupport,3709,Variable
-FiniteStateVariableType_Name,3714,Variable
-FiniteStateVariableType_Number,3715,Variable
-FiniteStateVariableType_EffectiveDisplayName,3716,Variable
-FiniteTransitionVariableType_Name,3717,Variable
-FiniteTransitionVariableType_Number,3718,Variable
-FiniteTransitionVariableType_TransitionTime,3719,Variable
-StateMachineType_CurrentState_Id,3720,Variable
-StateMachineType_CurrentState_Name,3721,Variable
-StateMachineType_CurrentState_Number,3722,Variable
-StateMachineType_CurrentState_EffectiveDisplayName,3723,Variable
-StateMachineType_LastTransition_Id,3724,Variable
-StateMachineType_LastTransition_Name,3725,Variable
-StateMachineType_LastTransition_Number,3726,Variable
-StateMachineType_LastTransition_TransitionTime,3727,Variable
-FiniteStateMachineType_CurrentState_Id,3728,Variable
-FiniteStateMachineType_CurrentState_Name,3729,Variable
-FiniteStateMachineType_CurrentState_Number,3730,Variable
-FiniteStateMachineType_CurrentState_EffectiveDisplayName,3731,Variable
-FiniteStateMachineType_LastTransition_Id,3732,Variable
-FiniteStateMachineType_LastTransition_Name,3733,Variable
-FiniteStateMachineType_LastTransition_Number,3734,Variable
-FiniteStateMachineType_LastTransition_TransitionTime,3735,Variable
-InitialStateType_StateNumber,3736,Variable
-TransitionEventType_EventId,3737,Variable
-TransitionEventType_EventType,3738,Variable
-TransitionEventType_SourceNode,3739,Variable
-TransitionEventType_SourceName,3740,Variable
-TransitionEventType_Time,3741,Variable
-TransitionEventType_ReceiveTime,3742,Variable
-TransitionEventType_LocalTime,3743,Variable
-TransitionEventType_Message,3744,Variable
-TransitionEventType_Severity,3745,Variable
-TransitionEventType_FromState_Id,3746,Variable
-TransitionEventType_FromState_Name,3747,Variable
-TransitionEventType_FromState_Number,3748,Variable
-TransitionEventType_FromState_EffectiveDisplayName,3749,Variable
-TransitionEventType_ToState_Id,3750,Variable
-TransitionEventType_ToState_Name,3751,Variable
-TransitionEventType_ToState_Number,3752,Variable
-TransitionEventType_ToState_EffectiveDisplayName,3753,Variable
-TransitionEventType_Transition_Id,3754,Variable
-TransitionEventType_Transition_Name,3755,Variable
-TransitionEventType_Transition_Number,3756,Variable
-TransitionEventType_Transition_TransitionTime,3757,Variable
-AuditUpdateStateEventType_EventId,3758,Variable
-AuditUpdateStateEventType_EventType,3759,Variable
-AuditUpdateStateEventType_SourceNode,3760,Variable
-AuditUpdateStateEventType_SourceName,3761,Variable
-AuditUpdateStateEventType_Time,3762,Variable
-AuditUpdateStateEventType_ReceiveTime,3763,Variable
-AuditUpdateStateEventType_LocalTime,3764,Variable
-AuditUpdateStateEventType_Message,3765,Variable
-AuditUpdateStateEventType_Severity,3766,Variable
-AuditUpdateStateEventType_ActionTimeStamp,3767,Variable
-AuditUpdateStateEventType_Status,3768,Variable
-AuditUpdateStateEventType_ServerId,3769,Variable
-AuditUpdateStateEventType_ClientAuditEntryId,3770,Variable
-AuditUpdateStateEventType_ClientUserId,3771,Variable
-AuditUpdateStateEventType_MethodId,3772,Variable
-AuditUpdateStateEventType_InputArguments,3773,Variable
-AnalogItemType_Definition,3774,Variable
-AnalogItemType_ValuePrecision,3775,Variable
-DiscreteItemType_Definition,3776,Variable
-DiscreteItemType_ValuePrecision,3777,Variable
-TwoStateDiscreteType_Definition,3778,Variable
-TwoStateDiscreteType_ValuePrecision,3779,Variable
-MultiStateDiscreteType_Definition,3780,Variable
-MultiStateDiscreteType_ValuePrecision,3781,Variable
-ProgramTransitionEventType_EventId,3782,Variable
-ProgramTransitionEventType_EventType,3783,Variable
-ProgramTransitionEventType_SourceNode,3784,Variable
-ProgramTransitionEventType_SourceName,3785,Variable
-ProgramTransitionEventType_Time,3786,Variable
-ProgramTransitionEventType_ReceiveTime,3787,Variable
-ProgramTransitionEventType_LocalTime,3788,Variable
-ProgramTransitionEventType_Message,3789,Variable
-ProgramTransitionEventType_Severity,3790,Variable
-ProgramTransitionEventType_FromState,3791,Variable
-ProgramTransitionEventType_FromState_Id,3792,Variable
-ProgramTransitionEventType_FromState_Name,3793,Variable
-ProgramTransitionEventType_FromState_Number,3794,Variable
-ProgramTransitionEventType_FromState_EffectiveDisplayName,3795,Variable
-ProgramTransitionEventType_ToState,3796,Variable
-ProgramTransitionEventType_ToState_Id,3797,Variable
-ProgramTransitionEventType_ToState_Name,3798,Variable
-ProgramTransitionEventType_ToState_Number,3799,Variable
-ProgramTransitionEventType_ToState_EffectiveDisplayName,3800,Variable
-ProgramTransitionEventType_Transition,3801,Variable
-ProgramTransitionEventType_Transition_Id,3802,Variable
-ProgramTransitionEventType_Transition_Name,3803,Variable
-ProgramTransitionEventType_Transition_Number,3804,Variable
-ProgramTransitionEventType_Transition_TransitionTime,3805,Variable
-ProgramTransitionAuditEventType,3806,ObjectType
-ProgramTransitionAuditEventType_EventId,3807,Variable
-ProgramTransitionAuditEventType_EventType,3808,Variable
-ProgramTransitionAuditEventType_SourceNode,3809,Variable
-ProgramTransitionAuditEventType_SourceName,3810,Variable
-ProgramTransitionAuditEventType_Time,3811,Variable
-ProgramTransitionAuditEventType_ReceiveTime,3812,Variable
-ProgramTransitionAuditEventType_LocalTime,3813,Variable
-ProgramTransitionAuditEventType_Message,3814,Variable
-ProgramTransitionAuditEventType_Severity,3815,Variable
-ProgramTransitionAuditEventType_ActionTimeStamp,3816,Variable
-ProgramTransitionAuditEventType_Status,3817,Variable
-ProgramTransitionAuditEventType_ServerId,3818,Variable
-ProgramTransitionAuditEventType_ClientAuditEntryId,3819,Variable
-ProgramTransitionAuditEventType_ClientUserId,3820,Variable
-ProgramTransitionAuditEventType_MethodId,3821,Variable
-ProgramTransitionAuditEventType_InputArguments,3822,Variable
-ProgramTransitionAuditEventType_OldStateId,3823,Variable
-ProgramTransitionAuditEventType_NewStateId,3824,Variable
-ProgramTransitionAuditEventType_Transition,3825,Variable
-ProgramTransitionAuditEventType_Transition_Id,3826,Variable
-ProgramTransitionAuditEventType_Transition_Name,3827,Variable
-ProgramTransitionAuditEventType_Transition_Number,3828,Variable
-ProgramTransitionAuditEventType_Transition_TransitionTime,3829,Variable
-ProgramStateMachineType_CurrentState,3830,Variable
-ProgramStateMachineType_CurrentState_Id,3831,Variable
-ProgramStateMachineType_CurrentState_Name,3832,Variable
-ProgramStateMachineType_CurrentState_Number,3833,Variable
-ProgramStateMachineType_CurrentState_EffectiveDisplayName,3834,Variable
-ProgramStateMachineType_LastTransition,3835,Variable
-ProgramStateMachineType_LastTransition_Id,3836,Variable
-ProgramStateMachineType_LastTransition_Name,3837,Variable
-ProgramStateMachineType_LastTransition_Number,3838,Variable
-ProgramStateMachineType_LastTransition_TransitionTime,3839,Variable
-ProgramStateMachineType_ProgramDiagnostic_CreateSessionId,3840,Variable
-ProgramStateMachineType_ProgramDiagnostic_CreateClientName,3841,Variable
-ProgramStateMachineType_ProgramDiagnostic_InvocationCreationTime,3842,Variable
-ProgramStateMachineType_ProgramDiagnostic_LastTransitionTime,3843,Variable
-ProgramStateMachineType_ProgramDiagnostic_LastMethodCall,3844,Variable
-ProgramStateMachineType_ProgramDiagnostic_LastMethodSessionId,3845,Variable
-ProgramStateMachineType_ProgramDiagnostic_LastMethodInputArguments,3846,Variable
-ProgramStateMachineType_ProgramDiagnostic_LastMethodOutputArguments,3847,Variable
-ProgramStateMachineType_ProgramDiagnostic_LastMethodCallTime,3848,Variable
-ProgramStateMachineType_ProgramDiagnostic_LastMethodReturnStatus,3849,Variable
-ProgramStateMachineType_FinalResultData,3850,Object
-AddCommentMethodType,3863,Method
-AddCommentMethodType_InputArguments,3864,Variable
-ConditionType_EventId,3865,Variable
-ConditionType_EventType,3866,Variable
-ConditionType_SourceNode,3867,Variable
-ConditionType_SourceName,3868,Variable
-ConditionType_Time,3869,Variable
-ConditionType_ReceiveTime,3870,Variable
-ConditionType_LocalTime,3871,Variable
-ConditionType_Message,3872,Variable
-ConditionType_Severity,3873,Variable
-ConditionType_Retain,3874,Variable
-ConditionType_ConditionRefresh,3875,Method
-ConditionType_ConditionRefresh_InputArguments,3876,Variable
-RefreshStartEventType_EventId,3969,Variable
-RefreshStartEventType_EventType,3970,Variable
-RefreshStartEventType_SourceNode,3971,Variable
-RefreshStartEventType_SourceName,3972,Variable
-RefreshStartEventType_Time,3973,Variable
-RefreshStartEventType_ReceiveTime,3974,Variable
-RefreshStartEventType_LocalTime,3975,Variable
-RefreshStartEventType_Message,3976,Variable
-RefreshStartEventType_Severity,3977,Variable
-RefreshEndEventType_EventId,3978,Variable
-RefreshEndEventType_EventType,3979,Variable
-RefreshEndEventType_SourceNode,3980,Variable
-RefreshEndEventType_SourceName,3981,Variable
-RefreshEndEventType_Time,3982,Variable
-RefreshEndEventType_ReceiveTime,3983,Variable
-RefreshEndEventType_LocalTime,3984,Variable
-RefreshEndEventType_Message,3985,Variable
-RefreshEndEventType_Severity,3986,Variable
-RefreshRequiredEventType_EventId,3987,Variable
-RefreshRequiredEventType_EventType,3988,Variable
-RefreshRequiredEventType_SourceNode,3989,Variable
-RefreshRequiredEventType_SourceName,3990,Variable
-RefreshRequiredEventType_Time,3991,Variable
-RefreshRequiredEventType_ReceiveTime,3992,Variable
-RefreshRequiredEventType_LocalTime,3993,Variable
-RefreshRequiredEventType_Message,3994,Variable
-RefreshRequiredEventType_Severity,3995,Variable
-AuditConditionEventType_EventId,3996,Variable
-AuditConditionEventType_EventType,3997,Variable
-AuditConditionEventType_SourceNode,3998,Variable
-AuditConditionEventType_SourceName,3999,Variable
-AuditConditionEventType_Time,4000,Variable
-AuditConditionEventType_ReceiveTime,4001,Variable
-AuditConditionEventType_LocalTime,4002,Variable
-AuditConditionEventType_Message,4003,Variable
-AuditConditionEventType_Severity,4004,Variable
-AuditConditionEventType_ActionTimeStamp,4005,Variable
-AuditConditionEventType_Status,4006,Variable
-AuditConditionEventType_ServerId,4007,Variable
-AuditConditionEventType_ClientAuditEntryId,4008,Variable
-AuditConditionEventType_ClientUserId,4009,Variable
-AuditConditionEventType_MethodId,4010,Variable
-AuditConditionEventType_InputArguments,4011,Variable
-AuditConditionEnableEventType_EventId,4106,Variable
-AuditConditionEnableEventType_EventType,4107,Variable
-AuditConditionEnableEventType_SourceNode,4108,Variable
-AuditConditionEnableEventType_SourceName,4109,Variable
-AuditConditionEnableEventType_Time,4110,Variable
-AuditConditionEnableEventType_ReceiveTime,4111,Variable
-AuditConditionEnableEventType_LocalTime,4112,Variable
-AuditConditionEnableEventType_Message,4113,Variable
-AuditConditionEnableEventType_Severity,4114,Variable
-AuditConditionEnableEventType_ActionTimeStamp,4115,Variable
-AuditConditionEnableEventType_Status,4116,Variable
-AuditConditionEnableEventType_ServerId,4117,Variable
-AuditConditionEnableEventType_ClientAuditEntryId,4118,Variable
-AuditConditionEnableEventType_ClientUserId,4119,Variable
-AuditConditionEnableEventType_MethodId,4120,Variable
-AuditConditionEnableEventType_InputArguments,4121,Variable
-AuditConditionCommentEventType_EventId,4170,Variable
-AuditConditionCommentEventType_EventType,4171,Variable
-AuditConditionCommentEventType_SourceNode,4172,Variable
-AuditConditionCommentEventType_SourceName,4173,Variable
-AuditConditionCommentEventType_Time,4174,Variable
-AuditConditionCommentEventType_ReceiveTime,4175,Variable
-AuditConditionCommentEventType_LocalTime,4176,Variable
-AuditConditionCommentEventType_Message,4177,Variable
-AuditConditionCommentEventType_Severity,4178,Variable
-AuditConditionCommentEventType_ActionTimeStamp,4179,Variable
-AuditConditionCommentEventType_Status,4180,Variable
-AuditConditionCommentEventType_ServerId,4181,Variable
-AuditConditionCommentEventType_ClientAuditEntryId,4182,Variable
-AuditConditionCommentEventType_ClientUserId,4183,Variable
-AuditConditionCommentEventType_MethodId,4184,Variable
-AuditConditionCommentEventType_InputArguments,4185,Variable
-DialogConditionType_EventId,4188,Variable
-DialogConditionType_EventType,4189,Variable
-DialogConditionType_SourceNode,4190,Variable
-DialogConditionType_SourceName,4191,Variable
-DialogConditionType_Time,4192,Variable
-DialogConditionType_ReceiveTime,4193,Variable
-DialogConditionType_LocalTime,4194,Variable
-DialogConditionType_Message,4195,Variable
-DialogConditionType_Severity,4196,Variable
-DialogConditionType_Retain,4197,Variable
-DialogConditionType_ConditionRefresh,4198,Method
-DialogConditionType_ConditionRefresh_InputArguments,4199,Variable
-AcknowledgeableConditionType_EventId,5113,Variable
-AcknowledgeableConditionType_EventType,5114,Variable
-AcknowledgeableConditionType_SourceNode,5115,Variable
-AcknowledgeableConditionType_SourceName,5116,Variable
-AcknowledgeableConditionType_Time,5117,Variable
-AcknowledgeableConditionType_ReceiveTime,5118,Variable
-AcknowledgeableConditionType_LocalTime,5119,Variable
-AcknowledgeableConditionType_Message,5120,Variable
-AcknowledgeableConditionType_Severity,5121,Variable
-AcknowledgeableConditionType_Retain,5122,Variable
-AcknowledgeableConditionType_ConditionRefresh,5123,Method
-AcknowledgeableConditionType_ConditionRefresh_InputArguments,5124,Variable
-AlarmConditionType_EventId,5540,Variable
-AlarmConditionType_EventType,5541,Variable
-AlarmConditionType_SourceNode,5542,Variable
-AlarmConditionType_SourceName,5543,Variable
-AlarmConditionType_Time,5544,Variable
-AlarmConditionType_ReceiveTime,5545,Variable
-AlarmConditionType_LocalTime,5546,Variable
-AlarmConditionType_Message,5547,Variable
-AlarmConditionType_Severity,5548,Variable
-AlarmConditionType_Retain,5549,Variable
-AlarmConditionType_ConditionRefresh,5550,Method
-AlarmConditionType_ConditionRefresh_InputArguments,5551,Variable
-ShelvedStateMachineType_CurrentState,6088,Variable
-ShelvedStateMachineType_CurrentState_Id,6089,Variable
-ShelvedStateMachineType_CurrentState_Name,6090,Variable
-ShelvedStateMachineType_CurrentState_Number,6091,Variable
-ShelvedStateMachineType_CurrentState_EffectiveDisplayName,6092,Variable
-ShelvedStateMachineType_LastTransition,6093,Variable
-ShelvedStateMachineType_LastTransition_Id,6094,Variable
-ShelvedStateMachineType_LastTransition_Name,6095,Variable
-ShelvedStateMachineType_LastTransition_Number,6096,Variable
-ShelvedStateMachineType_LastTransition_TransitionTime,6097,Variable
-ShelvedStateMachineType_Unshelved_StateNumber,6098,Variable
-ShelvedStateMachineType_TimedShelved_StateNumber,6100,Variable
-ShelvedStateMachineType_OneShotShelved_StateNumber,6101,Variable
-TimedShelveMethodType,6102,Method
-TimedShelveMethodType_InputArguments,6103,Variable
-LimitAlarmType_EventId,6116,Variable
-LimitAlarmType_EventType,6117,Variable
-LimitAlarmType_SourceNode,6118,Variable
-LimitAlarmType_SourceName,6119,Variable
-LimitAlarmType_Time,6120,Variable
-LimitAlarmType_ReceiveTime,6121,Variable
-LimitAlarmType_LocalTime,6122,Variable
-LimitAlarmType_Message,6123,Variable
-LimitAlarmType_Severity,6124,Variable
-LimitAlarmType_Retain,6125,Variable
-LimitAlarmType_ConditionRefresh,6126,Method
-LimitAlarmType_ConditionRefresh_InputArguments,6127,Variable
-IdType_EnumStrings,7591,Variable
-EnumValueType,7594,DataType
-MessageSecurityMode_EnumStrings,7595,Variable
-UserTokenType_EnumStrings,7596,Variable
-ApplicationType_EnumStrings,7597,Variable
-SecurityTokenRequestType_EnumStrings,7598,Variable
-BrowseDirection_EnumStrings,7603,Variable
-FilterOperator_EnumStrings,7605,Variable
-TimestampsToReturn_EnumStrings,7606,Variable
-MonitoringMode_EnumStrings,7608,Variable
-DataChangeTrigger_EnumStrings,7609,Variable
-DeadbandType_EnumStrings,7610,Variable
-RedundancySupport_EnumStrings,7611,Variable
-ServerState_EnumStrings,7612,Variable
-ExceptionDeviationFormat_EnumStrings,7614,Variable
-EnumValueType_Encoding_DefaultXml,7616,Object
-OpcUa_BinarySchema,7617,Variable
-OpcUa_BinarySchema_DataTypeVersion,7618,Variable
-OpcUa_BinarySchema_NamespaceUri,7619,Variable
-OpcUa_BinarySchema_Argument,7650,Variable
-OpcUa_BinarySchema_Argument_DataTypeVersion,7651,Variable
-OpcUa_BinarySchema_Argument_DictionaryFragment,7652,Variable
-OpcUa_BinarySchema_EnumValueType,7656,Variable
-OpcUa_BinarySchema_EnumValueType_DataTypeVersion,7657,Variable
-OpcUa_BinarySchema_EnumValueType_DictionaryFragment,7658,Variable
-OpcUa_BinarySchema_StatusResult,7659,Variable
-OpcUa_BinarySchema_StatusResult_DataTypeVersion,7660,Variable
-OpcUa_BinarySchema_StatusResult_DictionaryFragment,7661,Variable
-OpcUa_BinarySchema_UserTokenPolicy,7662,Variable
-OpcUa_BinarySchema_UserTokenPolicy_DataTypeVersion,7663,Variable
-OpcUa_BinarySchema_UserTokenPolicy_DictionaryFragment,7664,Variable
-OpcUa_BinarySchema_ApplicationDescription,7665,Variable
-OpcUa_BinarySchema_ApplicationDescription_DataTypeVersion,7666,Variable
-OpcUa_BinarySchema_ApplicationDescription_DictionaryFragment,7667,Variable
-OpcUa_BinarySchema_EndpointDescription,7668,Variable
-OpcUa_BinarySchema_EndpointDescription_DataTypeVersion,7669,Variable
-OpcUa_BinarySchema_EndpointDescription_DictionaryFragment,7670,Variable
-OpcUa_BinarySchema_UserIdentityToken,7671,Variable
-OpcUa_BinarySchema_UserIdentityToken_DataTypeVersion,7672,Variable
-OpcUa_BinarySchema_UserIdentityToken_DictionaryFragment,7673,Variable
-OpcUa_BinarySchema_AnonymousIdentityToken,7674,Variable
-OpcUa_BinarySchema_AnonymousIdentityToken_DataTypeVersion,7675,Variable
-OpcUa_BinarySchema_AnonymousIdentityToken_DictionaryFragment,7676,Variable
-OpcUa_BinarySchema_UserNameIdentityToken,7677,Variable
-OpcUa_BinarySchema_UserNameIdentityToken_DataTypeVersion,7678,Variable
-OpcUa_BinarySchema_UserNameIdentityToken_DictionaryFragment,7679,Variable
-OpcUa_BinarySchema_X509IdentityToken,7680,Variable
-OpcUa_BinarySchema_X509IdentityToken_DataTypeVersion,7681,Variable
-OpcUa_BinarySchema_X509IdentityToken_DictionaryFragment,7682,Variable
-OpcUa_BinarySchema_IssuedIdentityToken,7683,Variable
-OpcUa_BinarySchema_IssuedIdentityToken_DataTypeVersion,7684,Variable
-OpcUa_BinarySchema_IssuedIdentityToken_DictionaryFragment,7685,Variable
-OpcUa_BinarySchema_EndpointConfiguration,7686,Variable
-OpcUa_BinarySchema_EndpointConfiguration_DataTypeVersion,7687,Variable
-OpcUa_BinarySchema_EndpointConfiguration_DictionaryFragment,7688,Variable
-OpcUa_BinarySchema_BuildInfo,7692,Variable
-OpcUa_BinarySchema_BuildInfo_DataTypeVersion,7693,Variable
-OpcUa_BinarySchema_BuildInfo_DictionaryFragment,7694,Variable
-OpcUa_BinarySchema_SignedSoftwareCertificate,7698,Variable
-OpcUa_BinarySchema_SignedSoftwareCertificate_DataTypeVersion,7699,Variable
-OpcUa_BinarySchema_SignedSoftwareCertificate_DictionaryFragment,7700,Variable
-OpcUa_BinarySchema_AddNodesItem,7728,Variable
-OpcUa_BinarySchema_AddNodesItem_DataTypeVersion,7729,Variable
-OpcUa_BinarySchema_AddNodesItem_DictionaryFragment,7730,Variable
-OpcUa_BinarySchema_AddReferencesItem,7731,Variable
-OpcUa_BinarySchema_AddReferencesItem_DataTypeVersion,7732,Variable
-OpcUa_BinarySchema_AddReferencesItem_DictionaryFragment,7733,Variable
-OpcUa_BinarySchema_DeleteNodesItem,7734,Variable
-OpcUa_BinarySchema_DeleteNodesItem_DataTypeVersion,7735,Variable
-OpcUa_BinarySchema_DeleteNodesItem_DictionaryFragment,7736,Variable
-OpcUa_BinarySchema_DeleteReferencesItem,7737,Variable
-OpcUa_BinarySchema_DeleteReferencesItem_DataTypeVersion,7738,Variable
-OpcUa_BinarySchema_DeleteReferencesItem_DictionaryFragment,7739,Variable
-OpcUa_BinarySchema_RegisteredServer,7782,Variable
-OpcUa_BinarySchema_RegisteredServer_DataTypeVersion,7783,Variable
-OpcUa_BinarySchema_RegisteredServer_DictionaryFragment,7784,Variable
-OpcUa_BinarySchema_ContentFilterElement,7929,Variable
-OpcUa_BinarySchema_ContentFilterElement_DataTypeVersion,7930,Variable
-OpcUa_BinarySchema_ContentFilterElement_DictionaryFragment,7931,Variable
-OpcUa_BinarySchema_ContentFilter,7932,Variable
-OpcUa_BinarySchema_ContentFilter_DataTypeVersion,7933,Variable
-OpcUa_BinarySchema_ContentFilter_DictionaryFragment,7934,Variable
-OpcUa_BinarySchema_FilterOperand,7935,Variable
-OpcUa_BinarySchema_FilterOperand_DataTypeVersion,7936,Variable
-OpcUa_BinarySchema_FilterOperand_DictionaryFragment,7937,Variable
-OpcUa_BinarySchema_ElementOperand,7938,Variable
-OpcUa_BinarySchema_ElementOperand_DataTypeVersion,7939,Variable
-OpcUa_BinarySchema_ElementOperand_DictionaryFragment,7940,Variable
-OpcUa_BinarySchema_LiteralOperand,7941,Variable
-OpcUa_BinarySchema_LiteralOperand_DataTypeVersion,7942,Variable
-OpcUa_BinarySchema_LiteralOperand_DictionaryFragment,7943,Variable
-OpcUa_BinarySchema_AttributeOperand,7944,Variable
-OpcUa_BinarySchema_AttributeOperand_DataTypeVersion,7945,Variable
-OpcUa_BinarySchema_AttributeOperand_DictionaryFragment,7946,Variable
-OpcUa_BinarySchema_SimpleAttributeOperand,7947,Variable
-OpcUa_BinarySchema_SimpleAttributeOperand_DataTypeVersion,7948,Variable
-OpcUa_BinarySchema_SimpleAttributeOperand_DictionaryFragment,7949,Variable
-OpcUa_BinarySchema_HistoryEvent,8004,Variable
-OpcUa_BinarySchema_HistoryEvent_DataTypeVersion,8005,Variable
-OpcUa_BinarySchema_HistoryEvent_DictionaryFragment,8006,Variable
-OpcUa_BinarySchema_MonitoringFilter,8067,Variable
-OpcUa_BinarySchema_MonitoringFilter_DataTypeVersion,8068,Variable
-OpcUa_BinarySchema_MonitoringFilter_DictionaryFragment,8069,Variable
-OpcUa_BinarySchema_EventFilter,8073,Variable
-OpcUa_BinarySchema_EventFilter_DataTypeVersion,8074,Variable
-OpcUa_BinarySchema_EventFilter_DictionaryFragment,8075,Variable
-OpcUa_BinarySchema_AggregateConfiguration,8076,Variable
-OpcUa_BinarySchema_AggregateConfiguration_DataTypeVersion,8077,Variable
-OpcUa_BinarySchema_AggregateConfiguration_DictionaryFragment,8078,Variable
-OpcUa_BinarySchema_HistoryEventFieldList,8172,Variable
-OpcUa_BinarySchema_HistoryEventFieldList_DataTypeVersion,8173,Variable
-OpcUa_BinarySchema_HistoryEventFieldList_DictionaryFragment,8174,Variable
-OpcUa_BinarySchema_RedundantServerDataType,8208,Variable
-OpcUa_BinarySchema_RedundantServerDataType_DataTypeVersion,8209,Variable
-OpcUa_BinarySchema_RedundantServerDataType_DictionaryFragment,8210,Variable
-OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType,8211,Variable
-OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType_DataTypeVersion,8212,Variable
-OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType_DictionaryFragment,8213,Variable
-OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType,8214,Variable
-OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType_DataTypeVersion,8215,Variable
-OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType_DictionaryFragment,8216,Variable
-OpcUa_BinarySchema_ServerStatusDataType,8217,Variable
-OpcUa_BinarySchema_ServerStatusDataType_DataTypeVersion,8218,Variable
-OpcUa_BinarySchema_ServerStatusDataType_DictionaryFragment,8219,Variable
-OpcUa_BinarySchema_SessionDiagnosticsDataType,8220,Variable
-OpcUa_BinarySchema_SessionDiagnosticsDataType_DataTypeVersion,8221,Variable
-OpcUa_BinarySchema_SessionDiagnosticsDataType_DictionaryFragment,8222,Variable
-OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType,8223,Variable
-OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType_DataTypeVersion,8224,Variable
-OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType_DictionaryFragment,8225,Variable
-OpcUa_BinarySchema_ServiceCounterDataType,8226,Variable
-OpcUa_BinarySchema_ServiceCounterDataType_DataTypeVersion,8227,Variable
-OpcUa_BinarySchema_ServiceCounterDataType_DictionaryFragment,8228,Variable
-OpcUa_BinarySchema_SubscriptionDiagnosticsDataType,8229,Variable
-OpcUa_BinarySchema_SubscriptionDiagnosticsDataType_DataTypeVersion,8230,Variable
-OpcUa_BinarySchema_SubscriptionDiagnosticsDataType_DictionaryFragment,8231,Variable
-OpcUa_BinarySchema_ModelChangeStructureDataType,8232,Variable
-OpcUa_BinarySchema_ModelChangeStructureDataType_DataTypeVersion,8233,Variable
-OpcUa_BinarySchema_ModelChangeStructureDataType_DictionaryFragment,8234,Variable
-OpcUa_BinarySchema_SemanticChangeStructureDataType,8235,Variable
-OpcUa_BinarySchema_SemanticChangeStructureDataType_DataTypeVersion,8236,Variable
-OpcUa_BinarySchema_SemanticChangeStructureDataType_DictionaryFragment,8237,Variable
-OpcUa_BinarySchema_Range,8238,Variable
-OpcUa_BinarySchema_Range_DataTypeVersion,8239,Variable
-OpcUa_BinarySchema_Range_DictionaryFragment,8240,Variable
-OpcUa_BinarySchema_EUInformation,8241,Variable
-OpcUa_BinarySchema_EUInformation_DataTypeVersion,8242,Variable
-OpcUa_BinarySchema_EUInformation_DictionaryFragment,8243,Variable
-OpcUa_BinarySchema_Annotation,8244,Variable
-OpcUa_BinarySchema_Annotation_DataTypeVersion,8245,Variable
-OpcUa_BinarySchema_Annotation_DictionaryFragment,8246,Variable
-OpcUa_BinarySchema_ProgramDiagnosticDataType,8247,Variable
-OpcUa_BinarySchema_ProgramDiagnosticDataType_DataTypeVersion,8248,Variable
-OpcUa_BinarySchema_ProgramDiagnosticDataType_DictionaryFragment,8249,Variable
-EnumValueType_Encoding_DefaultBinary,8251,Object
-OpcUa_XmlSchema,8252,Variable
-OpcUa_XmlSchema_DataTypeVersion,8253,Variable
-OpcUa_XmlSchema_NamespaceUri,8254,Variable
-OpcUa_XmlSchema_Argument,8285,Variable
-OpcUa_XmlSchema_Argument_DataTypeVersion,8286,Variable
-OpcUa_XmlSchema_Argument_DictionaryFragment,8287,Variable
-OpcUa_XmlSchema_EnumValueType,8291,Variable
-OpcUa_XmlSchema_EnumValueType_DataTypeVersion,8292,Variable
-OpcUa_XmlSchema_EnumValueType_DictionaryFragment,8293,Variable
-OpcUa_XmlSchema_StatusResult,8294,Variable
-OpcUa_XmlSchema_StatusResult_DataTypeVersion,8295,Variable
-OpcUa_XmlSchema_StatusResult_DictionaryFragment,8296,Variable
-OpcUa_XmlSchema_UserTokenPolicy,8297,Variable
-OpcUa_XmlSchema_UserTokenPolicy_DataTypeVersion,8298,Variable
-OpcUa_XmlSchema_UserTokenPolicy_DictionaryFragment,8299,Variable
-OpcUa_XmlSchema_ApplicationDescription,8300,Variable
-OpcUa_XmlSchema_ApplicationDescription_DataTypeVersion,8301,Variable
-OpcUa_XmlSchema_ApplicationDescription_DictionaryFragment,8302,Variable
-OpcUa_XmlSchema_EndpointDescription,8303,Variable
-OpcUa_XmlSchema_EndpointDescription_DataTypeVersion,8304,Variable
-OpcUa_XmlSchema_EndpointDescription_DictionaryFragment,8305,Variable
-OpcUa_XmlSchema_UserIdentityToken,8306,Variable
-OpcUa_XmlSchema_UserIdentityToken_DataTypeVersion,8307,Variable
-OpcUa_XmlSchema_UserIdentityToken_DictionaryFragment,8308,Variable
-OpcUa_XmlSchema_AnonymousIdentityToken,8309,Variable
-OpcUa_XmlSchema_AnonymousIdentityToken_DataTypeVersion,8310,Variable
-OpcUa_XmlSchema_AnonymousIdentityToken_DictionaryFragment,8311,Variable
-OpcUa_XmlSchema_UserNameIdentityToken,8312,Variable
-OpcUa_XmlSchema_UserNameIdentityToken_DataTypeVersion,8313,Variable
-OpcUa_XmlSchema_UserNameIdentityToken_DictionaryFragment,8314,Variable
-OpcUa_XmlSchema_X509IdentityToken,8315,Variable
-OpcUa_XmlSchema_X509IdentityToken_DataTypeVersion,8316,Variable
-OpcUa_XmlSchema_X509IdentityToken_DictionaryFragment,8317,Variable
-OpcUa_XmlSchema_IssuedIdentityToken,8318,Variable
-OpcUa_XmlSchema_IssuedIdentityToken_DataTypeVersion,8319,Variable
-OpcUa_XmlSchema_IssuedIdentityToken_DictionaryFragment,8320,Variable
-OpcUa_XmlSchema_EndpointConfiguration,8321,Variable
-OpcUa_XmlSchema_EndpointConfiguration_DataTypeVersion,8322,Variable
-OpcUa_XmlSchema_EndpointConfiguration_DictionaryFragment,8323,Variable
-OpcUa_XmlSchema_BuildInfo,8327,Variable
-OpcUa_XmlSchema_BuildInfo_DataTypeVersion,8328,Variable
-OpcUa_XmlSchema_BuildInfo_DictionaryFragment,8329,Variable
-OpcUa_XmlSchema_SignedSoftwareCertificate,8333,Variable
-OpcUa_XmlSchema_SignedSoftwareCertificate_DataTypeVersion,8334,Variable
-OpcUa_XmlSchema_SignedSoftwareCertificate_DictionaryFragment,8335,Variable
-OpcUa_XmlSchema_AddNodesItem,8363,Variable
-OpcUa_XmlSchema_AddNodesItem_DataTypeVersion,8364,Variable
-OpcUa_XmlSchema_AddNodesItem_DictionaryFragment,8365,Variable
-OpcUa_XmlSchema_AddReferencesItem,8366,Variable
-OpcUa_XmlSchema_AddReferencesItem_DataTypeVersion,8367,Variable
-OpcUa_XmlSchema_AddReferencesItem_DictionaryFragment,8368,Variable
-OpcUa_XmlSchema_DeleteNodesItem,8369,Variable
-OpcUa_XmlSchema_DeleteNodesItem_DataTypeVersion,8370,Variable
-OpcUa_XmlSchema_DeleteNodesItem_DictionaryFragment,8371,Variable
-OpcUa_XmlSchema_DeleteReferencesItem,8372,Variable
-OpcUa_XmlSchema_DeleteReferencesItem_DataTypeVersion,8373,Variable
-OpcUa_XmlSchema_DeleteReferencesItem_DictionaryFragment,8374,Variable
-OpcUa_XmlSchema_RegisteredServer,8417,Variable
-OpcUa_XmlSchema_RegisteredServer_DataTypeVersion,8418,Variable
-OpcUa_XmlSchema_RegisteredServer_DictionaryFragment,8419,Variable
-OpcUa_XmlSchema_ContentFilterElement,8564,Variable
-OpcUa_XmlSchema_ContentFilterElement_DataTypeVersion,8565,Variable
-OpcUa_XmlSchema_ContentFilterElement_DictionaryFragment,8566,Variable
-OpcUa_XmlSchema_ContentFilter,8567,Variable
-OpcUa_XmlSchema_ContentFilter_DataTypeVersion,8568,Variable
-OpcUa_XmlSchema_ContentFilter_DictionaryFragment,8569,Variable
-OpcUa_XmlSchema_FilterOperand,8570,Variable
-OpcUa_XmlSchema_FilterOperand_DataTypeVersion,8571,Variable
-OpcUa_XmlSchema_FilterOperand_DictionaryFragment,8572,Variable
-OpcUa_XmlSchema_ElementOperand,8573,Variable
-OpcUa_XmlSchema_ElementOperand_DataTypeVersion,8574,Variable
-OpcUa_XmlSchema_ElementOperand_DictionaryFragment,8575,Variable
-OpcUa_XmlSchema_LiteralOperand,8576,Variable
-OpcUa_XmlSchema_LiteralOperand_DataTypeVersion,8577,Variable
-OpcUa_XmlSchema_LiteralOperand_DictionaryFragment,8578,Variable
-OpcUa_XmlSchema_AttributeOperand,8579,Variable
-OpcUa_XmlSchema_AttributeOperand_DataTypeVersion,8580,Variable
-OpcUa_XmlSchema_AttributeOperand_DictionaryFragment,8581,Variable
-OpcUa_XmlSchema_SimpleAttributeOperand,8582,Variable
-OpcUa_XmlSchema_SimpleAttributeOperand_DataTypeVersion,8583,Variable
-OpcUa_XmlSchema_SimpleAttributeOperand_DictionaryFragment,8584,Variable
-OpcUa_XmlSchema_HistoryEvent,8639,Variable
-OpcUa_XmlSchema_HistoryEvent_DataTypeVersion,8640,Variable
-OpcUa_XmlSchema_HistoryEvent_DictionaryFragment,8641,Variable
-OpcUa_XmlSchema_MonitoringFilter,8702,Variable
-OpcUa_XmlSchema_MonitoringFilter_DataTypeVersion,8703,Variable
-OpcUa_XmlSchema_MonitoringFilter_DictionaryFragment,8704,Variable
-OpcUa_XmlSchema_EventFilter,8708,Variable
-OpcUa_XmlSchema_EventFilter_DataTypeVersion,8709,Variable
-OpcUa_XmlSchema_EventFilter_DictionaryFragment,8710,Variable
-OpcUa_XmlSchema_AggregateConfiguration,8711,Variable
-OpcUa_XmlSchema_AggregateConfiguration_DataTypeVersion,8712,Variable
-OpcUa_XmlSchema_AggregateConfiguration_DictionaryFragment,8713,Variable
-OpcUa_XmlSchema_HistoryEventFieldList,8807,Variable
-OpcUa_XmlSchema_HistoryEventFieldList_DataTypeVersion,8808,Variable
-OpcUa_XmlSchema_HistoryEventFieldList_DictionaryFragment,8809,Variable
-OpcUa_XmlSchema_RedundantServerDataType,8843,Variable
-OpcUa_XmlSchema_RedundantServerDataType_DataTypeVersion,8844,Variable
-OpcUa_XmlSchema_RedundantServerDataType_DictionaryFragment,8845,Variable
-OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType,8846,Variable
-OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType_DataTypeVersion,8847,Variable
-OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType_DictionaryFragment,8848,Variable
-OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType,8849,Variable
-OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType_DataTypeVersion,8850,Variable
-OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType_DictionaryFragment,8851,Variable
-OpcUa_XmlSchema_ServerStatusDataType,8852,Variable
-OpcUa_XmlSchema_ServerStatusDataType_DataTypeVersion,8853,Variable
-OpcUa_XmlSchema_ServerStatusDataType_DictionaryFragment,8854,Variable
-OpcUa_XmlSchema_SessionDiagnosticsDataType,8855,Variable
-OpcUa_XmlSchema_SessionDiagnosticsDataType_DataTypeVersion,8856,Variable
-OpcUa_XmlSchema_SessionDiagnosticsDataType_DictionaryFragment,8857,Variable
-OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType,8858,Variable
-OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType_DataTypeVersion,8859,Variable
-OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType_DictionaryFragment,8860,Variable
-OpcUa_XmlSchema_ServiceCounterDataType,8861,Variable
-OpcUa_XmlSchema_ServiceCounterDataType_DataTypeVersion,8862,Variable
-OpcUa_XmlSchema_ServiceCounterDataType_DictionaryFragment,8863,Variable
-OpcUa_XmlSchema_SubscriptionDiagnosticsDataType,8864,Variable
-OpcUa_XmlSchema_SubscriptionDiagnosticsDataType_DataTypeVersion,8865,Variable
-OpcUa_XmlSchema_SubscriptionDiagnosticsDataType_DictionaryFragment,8866,Variable
-OpcUa_XmlSchema_ModelChangeStructureDataType,8867,Variable
-OpcUa_XmlSchema_ModelChangeStructureDataType_DataTypeVersion,8868,Variable
-OpcUa_XmlSchema_ModelChangeStructureDataType_DictionaryFragment,8869,Variable
-OpcUa_XmlSchema_SemanticChangeStructureDataType,8870,Variable
-OpcUa_XmlSchema_SemanticChangeStructureDataType_DataTypeVersion,8871,Variable
-OpcUa_XmlSchema_SemanticChangeStructureDataType_DictionaryFragment,8872,Variable
-OpcUa_XmlSchema_Range,8873,Variable
-OpcUa_XmlSchema_Range_DataTypeVersion,8874,Variable
-OpcUa_XmlSchema_Range_DictionaryFragment,8875,Variable
-OpcUa_XmlSchema_EUInformation,8876,Variable
-OpcUa_XmlSchema_EUInformation_DataTypeVersion,8877,Variable
-OpcUa_XmlSchema_EUInformation_DictionaryFragment,8878,Variable
-OpcUa_XmlSchema_Annotation,8879,Variable
-OpcUa_XmlSchema_Annotation_DataTypeVersion,8880,Variable
-OpcUa_XmlSchema_Annotation_DictionaryFragment,8881,Variable
-OpcUa_XmlSchema_ProgramDiagnosticDataType,8882,Variable
-OpcUa_XmlSchema_ProgramDiagnosticDataType_DataTypeVersion,8883,Variable
-OpcUa_XmlSchema_ProgramDiagnosticDataType_DictionaryFragment,8884,Variable
-SubscriptionDiagnosticsType_MaxLifetimeCount,8888,Variable
-SubscriptionDiagnosticsType_LatePublishRequestCount,8889,Variable
-SubscriptionDiagnosticsType_CurrentKeepAliveCount,8890,Variable
-SubscriptionDiagnosticsType_CurrentLifetimeCount,8891,Variable
-SubscriptionDiagnosticsType_UnacknowledgedMessageCount,8892,Variable
-SubscriptionDiagnosticsType_DiscardedMessageCount,8893,Variable
-SubscriptionDiagnosticsType_MonitoredItemCount,8894,Variable
-SubscriptionDiagnosticsType_DisabledMonitoredItemCount,8895,Variable
-SubscriptionDiagnosticsType_MonitoringQueueOverflowCount,8896,Variable
-SubscriptionDiagnosticsType_NextSequenceNumber,8897,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_TotalRequestCount,8898,Variable
-SessionDiagnosticsVariableType_TotalRequestCount,8900,Variable
-SubscriptionDiagnosticsType_EventQueueOverflowCount,8902,Variable
-TimeZoneDataType,8912,DataType
-TimeZoneDataType_Encoding_DefaultXml,8913,Object
-OpcUa_BinarySchema_TimeZoneDataType,8914,Variable
-OpcUa_BinarySchema_TimeZoneDataType_DataTypeVersion,8915,Variable
-OpcUa_BinarySchema_TimeZoneDataType_DictionaryFragment,8916,Variable
-TimeZoneDataType_Encoding_DefaultBinary,8917,Object
-OpcUa_XmlSchema_TimeZoneDataType,8918,Variable
-OpcUa_XmlSchema_TimeZoneDataType_DataTypeVersion,8919,Variable
-OpcUa_XmlSchema_TimeZoneDataType_DictionaryFragment,8920,Variable
-AuditConditionRespondEventType,8927,ObjectType
-AuditConditionRespondEventType_EventId,8928,Variable
-AuditConditionRespondEventType_EventType,8929,Variable
-AuditConditionRespondEventType_SourceNode,8930,Variable
-AuditConditionRespondEventType_SourceName,8931,Variable
-AuditConditionRespondEventType_Time,8932,Variable
-AuditConditionRespondEventType_ReceiveTime,8933,Variable
-AuditConditionRespondEventType_LocalTime,8934,Variable
-AuditConditionRespondEventType_Message,8935,Variable
-AuditConditionRespondEventType_Severity,8936,Variable
-AuditConditionRespondEventType_ActionTimeStamp,8937,Variable
-AuditConditionRespondEventType_Status,8938,Variable
-AuditConditionRespondEventType_ServerId,8939,Variable
-AuditConditionRespondEventType_ClientAuditEntryId,8940,Variable
-AuditConditionRespondEventType_ClientUserId,8941,Variable
-AuditConditionRespondEventType_MethodId,8942,Variable
-AuditConditionRespondEventType_InputArguments,8943,Variable
-AuditConditionAcknowledgeEventType,8944,ObjectType
-AuditConditionAcknowledgeEventType_EventId,8945,Variable
-AuditConditionAcknowledgeEventType_EventType,8946,Variable
-AuditConditionAcknowledgeEventType_SourceNode,8947,Variable
-AuditConditionAcknowledgeEventType_SourceName,8948,Variable
-AuditConditionAcknowledgeEventType_Time,8949,Variable
-AuditConditionAcknowledgeEventType_ReceiveTime,8950,Variable
-AuditConditionAcknowledgeEventType_LocalTime,8951,Variable
-AuditConditionAcknowledgeEventType_Message,8952,Variable
-AuditConditionAcknowledgeEventType_Severity,8953,Variable
-AuditConditionAcknowledgeEventType_ActionTimeStamp,8954,Variable
-AuditConditionAcknowledgeEventType_Status,8955,Variable
-AuditConditionAcknowledgeEventType_ServerId,8956,Variable
-AuditConditionAcknowledgeEventType_ClientAuditEntryId,8957,Variable
-AuditConditionAcknowledgeEventType_ClientUserId,8958,Variable
-AuditConditionAcknowledgeEventType_MethodId,8959,Variable
-AuditConditionAcknowledgeEventType_InputArguments,8960,Variable
-AuditConditionConfirmEventType,8961,ObjectType
-AuditConditionConfirmEventType_EventId,8962,Variable
-AuditConditionConfirmEventType_EventType,8963,Variable
-AuditConditionConfirmEventType_SourceNode,8964,Variable
-AuditConditionConfirmEventType_SourceName,8965,Variable
-AuditConditionConfirmEventType_Time,8966,Variable
-AuditConditionConfirmEventType_ReceiveTime,8967,Variable
-AuditConditionConfirmEventType_LocalTime,8968,Variable
-AuditConditionConfirmEventType_Message,8969,Variable
-AuditConditionConfirmEventType_Severity,8970,Variable
-AuditConditionConfirmEventType_ActionTimeStamp,8971,Variable
-AuditConditionConfirmEventType_Status,8972,Variable
-AuditConditionConfirmEventType_ServerId,8973,Variable
-AuditConditionConfirmEventType_ClientAuditEntryId,8974,Variable
-AuditConditionConfirmEventType_ClientUserId,8975,Variable
-AuditConditionConfirmEventType_MethodId,8976,Variable
-AuditConditionConfirmEventType_InputArguments,8977,Variable
-TwoStateVariableType,8995,VariableType
-TwoStateVariableType_Id,8996,Variable
-TwoStateVariableType_Name,8997,Variable
-TwoStateVariableType_Number,8998,Variable
-TwoStateVariableType_EffectiveDisplayName,8999,Variable
-TwoStateVariableType_TransitionTime,9000,Variable
-TwoStateVariableType_EffectiveTransitionTime,9001,Variable
-ConditionVariableType,9002,VariableType
-ConditionVariableType_SourceTimestamp,9003,Variable
-HasTrueSubState,9004,ReferenceType
-HasFalseSubState,9005,ReferenceType
-HasCondition,9006,ReferenceType
-ConditionRefreshMethodType,9007,Method
-ConditionRefreshMethodType_InputArguments,9008,Variable
-ConditionType_ConditionName,9009,Variable
-ConditionType_BranchId,9010,Variable
-ConditionType_EnabledState,9011,Variable
-ConditionType_EnabledState_Id,9012,Variable
-ConditionType_EnabledState_Name,9013,Variable
-ConditionType_EnabledState_Number,9014,Variable
-ConditionType_EnabledState_EffectiveDisplayName,9015,Variable
-ConditionType_EnabledState_TransitionTime,9016,Variable
-ConditionType_EnabledState_EffectiveTransitionTime,9017,Variable
-ConditionType_EnabledState_TrueState,9018,Variable
-ConditionType_EnabledState_FalseState,9019,Variable
-ConditionType_Quality,9020,Variable
-ConditionType_Quality_SourceTimestamp,9021,Variable
-ConditionType_LastSeverity,9022,Variable
-ConditionType_LastSeverity_SourceTimestamp,9023,Variable
-ConditionType_Comment,9024,Variable
-ConditionType_Comment_SourceTimestamp,9025,Variable
-ConditionType_ClientUserId,9026,Variable
-ConditionType_Enable,9027,Method
-ConditionType_Disable,9028,Method
-ConditionType_AddComment,9029,Method
-ConditionType_AddComment_InputArguments,9030,Variable
-DialogResponseMethodType,9031,Method
-DialogResponseMethodType_InputArguments,9032,Variable
-DialogConditionType_ConditionName,9033,Variable
-DialogConditionType_BranchId,9034,Variable
-DialogConditionType_EnabledState,9035,Variable
-DialogConditionType_EnabledState_Id,9036,Variable
-DialogConditionType_EnabledState_Name,9037,Variable
-DialogConditionType_EnabledState_Number,9038,Variable
-DialogConditionType_EnabledState_EffectiveDisplayName,9039,Variable
-DialogConditionType_EnabledState_TransitionTime,9040,Variable
-DialogConditionType_EnabledState_EffectiveTransitionTime,9041,Variable
-DialogConditionType_EnabledState_TrueState,9042,Variable
-DialogConditionType_EnabledState_FalseState,9043,Variable
-DialogConditionType_Quality,9044,Variable
-DialogConditionType_Quality_SourceTimestamp,9045,Variable
-DialogConditionType_LastSeverity,9046,Variable
-DialogConditionType_LastSeverity_SourceTimestamp,9047,Variable
-DialogConditionType_Comment,9048,Variable
-DialogConditionType_Comment_SourceTimestamp,9049,Variable
-DialogConditionType_ClientUserId,9050,Variable
-DialogConditionType_Enable,9051,Method
-DialogConditionType_Disable,9052,Method
-DialogConditionType_AddComment,9053,Method
-DialogConditionType_AddComment_InputArguments,9054,Variable
-DialogConditionType_DialogState,9055,Variable
-DialogConditionType_DialogState_Id,9056,Variable
-DialogConditionType_DialogState_Name,9057,Variable
-DialogConditionType_DialogState_Number,9058,Variable
-DialogConditionType_DialogState_EffectiveDisplayName,9059,Variable
-DialogConditionType_DialogState_TransitionTime,9060,Variable
-DialogConditionType_DialogState_EffectiveTransitionTime,9061,Variable
-DialogConditionType_DialogState_TrueState,9062,Variable
-DialogConditionType_DialogState_FalseState,9063,Variable
-DialogConditionType_ResponseOptionSet,9064,Variable
-DialogConditionType_DefaultResponse,9065,Variable
-DialogConditionType_OkResponse,9066,Variable
-DialogConditionType_CancelResponse,9067,Variable
-DialogConditionType_LastResponse,9068,Variable
-DialogConditionType_Respond,9069,Method
-DialogConditionType_Respond_InputArguments,9070,Variable
-AcknowledgeableConditionType_ConditionName,9071,Variable
-AcknowledgeableConditionType_BranchId,9072,Variable
-AcknowledgeableConditionType_EnabledState,9073,Variable
-AcknowledgeableConditionType_EnabledState_Id,9074,Variable
-AcknowledgeableConditionType_EnabledState_Name,9075,Variable
-AcknowledgeableConditionType_EnabledState_Number,9076,Variable
-AcknowledgeableConditionType_EnabledState_EffectiveDisplayName,9077,Variable
-AcknowledgeableConditionType_EnabledState_TransitionTime,9078,Variable
-AcknowledgeableConditionType_EnabledState_EffectiveTransitionTime,9079,Variable
-AcknowledgeableConditionType_EnabledState_TrueState,9080,Variable
-AcknowledgeableConditionType_EnabledState_FalseState,9081,Variable
-AcknowledgeableConditionType_Quality,9082,Variable
-AcknowledgeableConditionType_Quality_SourceTimestamp,9083,Variable
-AcknowledgeableConditionType_LastSeverity,9084,Variable
-AcknowledgeableConditionType_LastSeverity_SourceTimestamp,9085,Variable
-AcknowledgeableConditionType_Comment,9086,Variable
-AcknowledgeableConditionType_Comment_SourceTimestamp,9087,Variable
-AcknowledgeableConditionType_ClientUserId,9088,Variable
-AcknowledgeableConditionType_Enable,9089,Method
-AcknowledgeableConditionType_Disable,9090,Method
-AcknowledgeableConditionType_AddComment,9091,Method
-AcknowledgeableConditionType_AddComment_InputArguments,9092,Variable
-AcknowledgeableConditionType_AckedState,9093,Variable
-AcknowledgeableConditionType_AckedState_Id,9094,Variable
-AcknowledgeableConditionType_AckedState_Name,9095,Variable
-AcknowledgeableConditionType_AckedState_Number,9096,Variable
-AcknowledgeableConditionType_AckedState_EffectiveDisplayName,9097,Variable
-AcknowledgeableConditionType_AckedState_TransitionTime,9098,Variable
-AcknowledgeableConditionType_AckedState_EffectiveTransitionTime,9099,Variable
-AcknowledgeableConditionType_AckedState_TrueState,9100,Variable
-AcknowledgeableConditionType_AckedState_FalseState,9101,Variable
-AcknowledgeableConditionType_ConfirmedState,9102,Variable
-AcknowledgeableConditionType_ConfirmedState_Id,9103,Variable
-AcknowledgeableConditionType_ConfirmedState_Name,9104,Variable
-AcknowledgeableConditionType_ConfirmedState_Number,9105,Variable
-AcknowledgeableConditionType_ConfirmedState_EffectiveDisplayName,9106,Variable
-AcknowledgeableConditionType_ConfirmedState_TransitionTime,9107,Variable
-AcknowledgeableConditionType_ConfirmedState_EffectiveTransitionTime,9108,Variable
-AcknowledgeableConditionType_ConfirmedState_TrueState,9109,Variable
-AcknowledgeableConditionType_ConfirmedState_FalseState,9110,Variable
-AcknowledgeableConditionType_Acknowledge,9111,Method
-AcknowledgeableConditionType_Acknowledge_InputArguments,9112,Variable
-AcknowledgeableConditionType_Confirm,9113,Method
-AcknowledgeableConditionType_Confirm_InputArguments,9114,Variable
-ShelvedStateMachineType_UnshelveTime,9115,Variable
-AlarmConditionType_ConditionName,9116,Variable
-AlarmConditionType_BranchId,9117,Variable
-AlarmConditionType_EnabledState,9118,Variable
-AlarmConditionType_EnabledState_Id,9119,Variable
-AlarmConditionType_EnabledState_Name,9120,Variable
-AlarmConditionType_EnabledState_Number,9121,Variable
-AlarmConditionType_EnabledState_EffectiveDisplayName,9122,Variable
-AlarmConditionType_EnabledState_TransitionTime,9123,Variable
-AlarmConditionType_EnabledState_EffectiveTransitionTime,9124,Variable
-AlarmConditionType_EnabledState_TrueState,9125,Variable
-AlarmConditionType_EnabledState_FalseState,9126,Variable
-AlarmConditionType_Quality,9127,Variable
-AlarmConditionType_Quality_SourceTimestamp,9128,Variable
-AlarmConditionType_LastSeverity,9129,Variable
-AlarmConditionType_LastSeverity_SourceTimestamp,9130,Variable
-AlarmConditionType_Comment,9131,Variable
-AlarmConditionType_Comment_SourceTimestamp,9132,Variable
-AlarmConditionType_ClientUserId,9133,Variable
-AlarmConditionType_Enable,9134,Method
-AlarmConditionType_Disable,9135,Method
-AlarmConditionType_AddComment,9136,Method
-AlarmConditionType_AddComment_InputArguments,9137,Variable
-AlarmConditionType_AckedState,9138,Variable
-AlarmConditionType_AckedState_Id,9139,Variable
-AlarmConditionType_AckedState_Name,9140,Variable
-AlarmConditionType_AckedState_Number,9141,Variable
-AlarmConditionType_AckedState_EffectiveDisplayName,9142,Variable
-AlarmConditionType_AckedState_TransitionTime,9143,Variable
-AlarmConditionType_AckedState_EffectiveTransitionTime,9144,Variable
-AlarmConditionType_AckedState_TrueState,9145,Variable
-AlarmConditionType_AckedState_FalseState,9146,Variable
-AlarmConditionType_ConfirmedState,9147,Variable
-AlarmConditionType_ConfirmedState_Id,9148,Variable
-AlarmConditionType_ConfirmedState_Name,9149,Variable
-AlarmConditionType_ConfirmedState_Number,9150,Variable
-AlarmConditionType_ConfirmedState_EffectiveDisplayName,9151,Variable
-AlarmConditionType_ConfirmedState_TransitionTime,9152,Variable
-AlarmConditionType_ConfirmedState_EffectiveTransitionTime,9153,Variable
-AlarmConditionType_ConfirmedState_TrueState,9154,Variable
-AlarmConditionType_ConfirmedState_FalseState,9155,Variable
-AlarmConditionType_Acknowledge,9156,Method
-AlarmConditionType_Acknowledge_InputArguments,9157,Variable
-AlarmConditionType_Confirm,9158,Method
-AlarmConditionType_Confirm_InputArguments,9159,Variable
-AlarmConditionType_ActiveState,9160,Variable
-AlarmConditionType_ActiveState_Id,9161,Variable
-AlarmConditionType_ActiveState_Name,9162,Variable
-AlarmConditionType_ActiveState_Number,9163,Variable
-AlarmConditionType_ActiveState_EffectiveDisplayName,9164,Variable
-AlarmConditionType_ActiveState_TransitionTime,9165,Variable
-AlarmConditionType_ActiveState_EffectiveTransitionTime,9166,Variable
-AlarmConditionType_ActiveState_TrueState,9167,Variable
-AlarmConditionType_ActiveState_FalseState,9168,Variable
-AlarmConditionType_SuppressedState,9169,Variable
-AlarmConditionType_SuppressedState_Id,9170,Variable
-AlarmConditionType_SuppressedState_Name,9171,Variable
-AlarmConditionType_SuppressedState_Number,9172,Variable
-AlarmConditionType_SuppressedState_EffectiveDisplayName,9173,Variable
-AlarmConditionType_SuppressedState_TransitionTime,9174,Variable
-AlarmConditionType_SuppressedState_EffectiveTransitionTime,9175,Variable
-AlarmConditionType_SuppressedState_TrueState,9176,Variable
-AlarmConditionType_SuppressedState_FalseState,9177,Variable
-AlarmConditionType_ShelvingState,9178,Object
-AlarmConditionType_ShelvingState_CurrentState,9179,Variable
-AlarmConditionType_ShelvingState_CurrentState_Id,9180,Variable
-AlarmConditionType_ShelvingState_CurrentState_Name,9181,Variable
-AlarmConditionType_ShelvingState_CurrentState_Number,9182,Variable
-AlarmConditionType_ShelvingState_CurrentState_EffectiveDisplayName,9183,Variable
-AlarmConditionType_ShelvingState_LastTransition,9184,Variable
-AlarmConditionType_ShelvingState_LastTransition_Id,9185,Variable
-AlarmConditionType_ShelvingState_LastTransition_Name,9186,Variable
-AlarmConditionType_ShelvingState_LastTransition_Number,9187,Variable
-AlarmConditionType_ShelvingState_LastTransition_TransitionTime,9188,Variable
-AlarmConditionType_ShelvingState_UnshelveTime,9189,Variable
-AlarmConditionType_ShelvingState_Unshelve,9211,Method
-AlarmConditionType_ShelvingState_OneShotShelve,9212,Method
-AlarmConditionType_ShelvingState_TimedShelve,9213,Method
-AlarmConditionType_ShelvingState_TimedShelve_InputArguments,9214,Variable
-AlarmConditionType_SuppressedOrShelved,9215,Variable
-AlarmConditionType_MaxTimeShelved,9216,Variable
-LimitAlarmType_ConditionName,9217,Variable
-LimitAlarmType_BranchId,9218,Variable
-LimitAlarmType_EnabledState,9219,Variable
-LimitAlarmType_EnabledState_Id,9220,Variable
-LimitAlarmType_EnabledState_Name,9221,Variable
-LimitAlarmType_EnabledState_Number,9222,Variable
-LimitAlarmType_EnabledState_EffectiveDisplayName,9223,Variable
-LimitAlarmType_EnabledState_TransitionTime,9224,Variable
-LimitAlarmType_EnabledState_EffectiveTransitionTime,9225,Variable
-LimitAlarmType_EnabledState_TrueState,9226,Variable
-LimitAlarmType_EnabledState_FalseState,9227,Variable
-LimitAlarmType_Quality,9228,Variable
-LimitAlarmType_Quality_SourceTimestamp,9229,Variable
-LimitAlarmType_LastSeverity,9230,Variable
-LimitAlarmType_LastSeverity_SourceTimestamp,9231,Variable
-LimitAlarmType_Comment,9232,Variable
-LimitAlarmType_Comment_SourceTimestamp,9233,Variable
-LimitAlarmType_ClientUserId,9234,Variable
-LimitAlarmType_Enable,9235,Method
-LimitAlarmType_Disable,9236,Method
-LimitAlarmType_AddComment,9237,Method
-LimitAlarmType_AddComment_InputArguments,9238,Variable
-LimitAlarmType_AckedState,9239,Variable
-LimitAlarmType_AckedState_Id,9240,Variable
-LimitAlarmType_AckedState_Name,9241,Variable
-LimitAlarmType_AckedState_Number,9242,Variable
-LimitAlarmType_AckedState_EffectiveDisplayName,9243,Variable
-LimitAlarmType_AckedState_TransitionTime,9244,Variable
-LimitAlarmType_AckedState_EffectiveTransitionTime,9245,Variable
-LimitAlarmType_AckedState_TrueState,9246,Variable
-LimitAlarmType_AckedState_FalseState,9247,Variable
-LimitAlarmType_ConfirmedState,9248,Variable
-LimitAlarmType_ConfirmedState_Id,9249,Variable
-LimitAlarmType_ConfirmedState_Name,9250,Variable
-LimitAlarmType_ConfirmedState_Number,9251,Variable
-LimitAlarmType_ConfirmedState_EffectiveDisplayName,9252,Variable
-LimitAlarmType_ConfirmedState_TransitionTime,9253,Variable
-LimitAlarmType_ConfirmedState_EffectiveTransitionTime,9254,Variable
-LimitAlarmType_ConfirmedState_TrueState,9255,Variable
-LimitAlarmType_ConfirmedState_FalseState,9256,Variable
-LimitAlarmType_Acknowledge,9257,Method
-LimitAlarmType_Acknowledge_InputArguments,9258,Variable
-LimitAlarmType_Confirm,9259,Method
-LimitAlarmType_Confirm_InputArguments,9260,Variable
-LimitAlarmType_ActiveState,9261,Variable
-LimitAlarmType_ActiveState_Id,9262,Variable
-LimitAlarmType_ActiveState_Name,9263,Variable
-LimitAlarmType_ActiveState_Number,9264,Variable
-LimitAlarmType_ActiveState_EffectiveDisplayName,9265,Variable
-LimitAlarmType_ActiveState_TransitionTime,9266,Variable
-LimitAlarmType_ActiveState_EffectiveTransitionTime,9267,Variable
-LimitAlarmType_ActiveState_TrueState,9268,Variable
-LimitAlarmType_ActiveState_FalseState,9269,Variable
-LimitAlarmType_SuppressedState,9270,Variable
-LimitAlarmType_SuppressedState_Id,9271,Variable
-LimitAlarmType_SuppressedState_Name,9272,Variable
-LimitAlarmType_SuppressedState_Number,9273,Variable
-LimitAlarmType_SuppressedState_EffectiveDisplayName,9274,Variable
-LimitAlarmType_SuppressedState_TransitionTime,9275,Variable
-LimitAlarmType_SuppressedState_EffectiveTransitionTime,9276,Variable
-LimitAlarmType_SuppressedState_TrueState,9277,Variable
-LimitAlarmType_SuppressedState_FalseState,9278,Variable
-LimitAlarmType_ShelvingState,9279,Object
-LimitAlarmType_ShelvingState_CurrentState,9280,Variable
-LimitAlarmType_ShelvingState_CurrentState_Id,9281,Variable
-LimitAlarmType_ShelvingState_CurrentState_Name,9282,Variable
-LimitAlarmType_ShelvingState_CurrentState_Number,9283,Variable
-LimitAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9284,Variable
-LimitAlarmType_ShelvingState_LastTransition,9285,Variable
-LimitAlarmType_ShelvingState_LastTransition_Id,9286,Variable
-LimitAlarmType_ShelvingState_LastTransition_Name,9287,Variable
-LimitAlarmType_ShelvingState_LastTransition_Number,9288,Variable
-LimitAlarmType_ShelvingState_LastTransition_TransitionTime,9289,Variable
-LimitAlarmType_ShelvingState_UnshelveTime,9290,Variable
-LimitAlarmType_ShelvingState_Unshelve,9312,Method
-LimitAlarmType_ShelvingState_OneShotShelve,9313,Method
-LimitAlarmType_ShelvingState_TimedShelve,9314,Method
-LimitAlarmType_ShelvingState_TimedShelve_InputArguments,9315,Variable
-LimitAlarmType_SuppressedOrShelved,9316,Variable
-LimitAlarmType_MaxTimeShelved,9317,Variable
-ExclusiveLimitStateMachineType,9318,ObjectType
-ExclusiveLimitStateMachineType_CurrentState,9319,Variable
-ExclusiveLimitStateMachineType_CurrentState_Id,9320,Variable
-ExclusiveLimitStateMachineType_CurrentState_Name,9321,Variable
-ExclusiveLimitStateMachineType_CurrentState_Number,9322,Variable
-ExclusiveLimitStateMachineType_CurrentState_EffectiveDisplayName,9323,Variable
-ExclusiveLimitStateMachineType_LastTransition,9324,Variable
-ExclusiveLimitStateMachineType_LastTransition_Id,9325,Variable
-ExclusiveLimitStateMachineType_LastTransition_Name,9326,Variable
-ExclusiveLimitStateMachineType_LastTransition_Number,9327,Variable
-ExclusiveLimitStateMachineType_LastTransition_TransitionTime,9328,Variable
-ExclusiveLimitStateMachineType_HighHigh,9329,Object
-ExclusiveLimitStateMachineType_HighHigh_StateNumber,9330,Variable
-ExclusiveLimitStateMachineType_High,9331,Object
-ExclusiveLimitStateMachineType_High_StateNumber,9332,Variable
-ExclusiveLimitStateMachineType_Low,9333,Object
-ExclusiveLimitStateMachineType_Low_StateNumber,9334,Variable
-ExclusiveLimitStateMachineType_LowLow,9335,Object
-ExclusiveLimitStateMachineType_LowLow_StateNumber,9336,Variable
-ExclusiveLimitStateMachineType_LowLowToLow,9337,Object
-ExclusiveLimitStateMachineType_LowToLowLow,9338,Object
-ExclusiveLimitStateMachineType_HighHighToHigh,9339,Object
-ExclusiveLimitStateMachineType_HighToHighHigh,9340,Object
-ExclusiveLimitAlarmType,9341,ObjectType
-ExclusiveLimitAlarmType_EventId,9342,Variable
-ExclusiveLimitAlarmType_EventType,9343,Variable
-ExclusiveLimitAlarmType_SourceNode,9344,Variable
-ExclusiveLimitAlarmType_SourceName,9345,Variable
-ExclusiveLimitAlarmType_Time,9346,Variable
-ExclusiveLimitAlarmType_ReceiveTime,9347,Variable
-ExclusiveLimitAlarmType_LocalTime,9348,Variable
-ExclusiveLimitAlarmType_Message,9349,Variable
-ExclusiveLimitAlarmType_Severity,9350,Variable
-ExclusiveLimitAlarmType_ConditionName,9351,Variable
-ExclusiveLimitAlarmType_BranchId,9352,Variable
-ExclusiveLimitAlarmType_Retain,9353,Variable
-ExclusiveLimitAlarmType_EnabledState,9354,Variable
-ExclusiveLimitAlarmType_EnabledState_Id,9355,Variable
-ExclusiveLimitAlarmType_EnabledState_Name,9356,Variable
-ExclusiveLimitAlarmType_EnabledState_Number,9357,Variable
-ExclusiveLimitAlarmType_EnabledState_EffectiveDisplayName,9358,Variable
-ExclusiveLimitAlarmType_EnabledState_TransitionTime,9359,Variable
-ExclusiveLimitAlarmType_EnabledState_EffectiveTransitionTime,9360,Variable
-ExclusiveLimitAlarmType_EnabledState_TrueState,9361,Variable
-ExclusiveLimitAlarmType_EnabledState_FalseState,9362,Variable
-ExclusiveLimitAlarmType_Quality,9363,Variable
-ExclusiveLimitAlarmType_Quality_SourceTimestamp,9364,Variable
-ExclusiveLimitAlarmType_LastSeverity,9365,Variable
-ExclusiveLimitAlarmType_LastSeverity_SourceTimestamp,9366,Variable
-ExclusiveLimitAlarmType_Comment,9367,Variable
-ExclusiveLimitAlarmType_Comment_SourceTimestamp,9368,Variable
-ExclusiveLimitAlarmType_ClientUserId,9369,Variable
-ExclusiveLimitAlarmType_Enable,9370,Method
-ExclusiveLimitAlarmType_Disable,9371,Method
-ExclusiveLimitAlarmType_AddComment,9372,Method
-ExclusiveLimitAlarmType_AddComment_InputArguments,9373,Variable
-ExclusiveLimitAlarmType_ConditionRefresh,9374,Method
-ExclusiveLimitAlarmType_ConditionRefresh_InputArguments,9375,Variable
-ExclusiveLimitAlarmType_AckedState,9376,Variable
-ExclusiveLimitAlarmType_AckedState_Id,9377,Variable
-ExclusiveLimitAlarmType_AckedState_Name,9378,Variable
-ExclusiveLimitAlarmType_AckedState_Number,9379,Variable
-ExclusiveLimitAlarmType_AckedState_EffectiveDisplayName,9380,Variable
-ExclusiveLimitAlarmType_AckedState_TransitionTime,9381,Variable
-ExclusiveLimitAlarmType_AckedState_EffectiveTransitionTime,9382,Variable
-ExclusiveLimitAlarmType_AckedState_TrueState,9383,Variable
-ExclusiveLimitAlarmType_AckedState_FalseState,9384,Variable
-ExclusiveLimitAlarmType_ConfirmedState,9385,Variable
-ExclusiveLimitAlarmType_ConfirmedState_Id,9386,Variable
-ExclusiveLimitAlarmType_ConfirmedState_Name,9387,Variable
-ExclusiveLimitAlarmType_ConfirmedState_Number,9388,Variable
-ExclusiveLimitAlarmType_ConfirmedState_EffectiveDisplayName,9389,Variable
-ExclusiveLimitAlarmType_ConfirmedState_TransitionTime,9390,Variable
-ExclusiveLimitAlarmType_ConfirmedState_EffectiveTransitionTime,9391,Variable
-ExclusiveLimitAlarmType_ConfirmedState_TrueState,9392,Variable
-ExclusiveLimitAlarmType_ConfirmedState_FalseState,9393,Variable
-ExclusiveLimitAlarmType_Acknowledge,9394,Method
-ExclusiveLimitAlarmType_Acknowledge_InputArguments,9395,Variable
-ExclusiveLimitAlarmType_Confirm,9396,Method
-ExclusiveLimitAlarmType_Confirm_InputArguments,9397,Variable
-ExclusiveLimitAlarmType_ActiveState,9398,Variable
-ExclusiveLimitAlarmType_ActiveState_Id,9399,Variable
-ExclusiveLimitAlarmType_ActiveState_Name,9400,Variable
-ExclusiveLimitAlarmType_ActiveState_Number,9401,Variable
-ExclusiveLimitAlarmType_ActiveState_EffectiveDisplayName,9402,Variable
-ExclusiveLimitAlarmType_ActiveState_TransitionTime,9403,Variable
-ExclusiveLimitAlarmType_ActiveState_EffectiveTransitionTime,9404,Variable
-ExclusiveLimitAlarmType_ActiveState_TrueState,9405,Variable
-ExclusiveLimitAlarmType_ActiveState_FalseState,9406,Variable
-ExclusiveLimitAlarmType_SuppressedState,9407,Variable
-ExclusiveLimitAlarmType_SuppressedState_Id,9408,Variable
-ExclusiveLimitAlarmType_SuppressedState_Name,9409,Variable
-ExclusiveLimitAlarmType_SuppressedState_Number,9410,Variable
-ExclusiveLimitAlarmType_SuppressedState_EffectiveDisplayName,9411,Variable
-ExclusiveLimitAlarmType_SuppressedState_TransitionTime,9412,Variable
-ExclusiveLimitAlarmType_SuppressedState_EffectiveTransitionTime,9413,Variable
-ExclusiveLimitAlarmType_SuppressedState_TrueState,9414,Variable
-ExclusiveLimitAlarmType_SuppressedState_FalseState,9415,Variable
-ExclusiveLimitAlarmType_ShelvingState,9416,Object
-ExclusiveLimitAlarmType_ShelvingState_CurrentState,9417,Variable
-ExclusiveLimitAlarmType_ShelvingState_CurrentState_Id,9418,Variable
-ExclusiveLimitAlarmType_ShelvingState_CurrentState_Name,9419,Variable
-ExclusiveLimitAlarmType_ShelvingState_CurrentState_Number,9420,Variable
-ExclusiveLimitAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9421,Variable
-ExclusiveLimitAlarmType_ShelvingState_LastTransition,9422,Variable
-ExclusiveLimitAlarmType_ShelvingState_LastTransition_Id,9423,Variable
-ExclusiveLimitAlarmType_ShelvingState_LastTransition_Name,9424,Variable
-ExclusiveLimitAlarmType_ShelvingState_LastTransition_Number,9425,Variable
-ExclusiveLimitAlarmType_ShelvingState_LastTransition_TransitionTime,9426,Variable
-ExclusiveLimitAlarmType_ShelvingState_UnshelveTime,9427,Variable
-ExclusiveLimitAlarmType_ShelvingState_Unshelve,9449,Method
-ExclusiveLimitAlarmType_ShelvingState_OneShotShelve,9450,Method
-ExclusiveLimitAlarmType_ShelvingState_TimedShelve,9451,Method
-ExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments,9452,Variable
-ExclusiveLimitAlarmType_SuppressedOrShelved,9453,Variable
-ExclusiveLimitAlarmType_MaxTimeShelved,9454,Variable
-ExclusiveLimitAlarmType_LimitState,9455,Object
-ExclusiveLimitAlarmType_LimitState_CurrentState,9456,Variable
-ExclusiveLimitAlarmType_LimitState_CurrentState_Id,9457,Variable
-ExclusiveLimitAlarmType_LimitState_CurrentState_Name,9458,Variable
-ExclusiveLimitAlarmType_LimitState_CurrentState_Number,9459,Variable
-ExclusiveLimitAlarmType_LimitState_CurrentState_EffectiveDisplayName,9460,Variable
-ExclusiveLimitAlarmType_LimitState_LastTransition,9461,Variable
-ExclusiveLimitAlarmType_LimitState_LastTransition_Id,9462,Variable
-ExclusiveLimitAlarmType_LimitState_LastTransition_Name,9463,Variable
-ExclusiveLimitAlarmType_LimitState_LastTransition_Number,9464,Variable
-ExclusiveLimitAlarmType_LimitState_LastTransition_TransitionTime,9465,Variable
-ExclusiveLimitAlarmType_HighHighLimit,9478,Variable
-ExclusiveLimitAlarmType_HighLimit,9479,Variable
-ExclusiveLimitAlarmType_LowLimit,9480,Variable
-ExclusiveLimitAlarmType_LowLowLimit,9481,Variable
-ExclusiveLevelAlarmType,9482,ObjectType
-ExclusiveLevelAlarmType_EventId,9483,Variable
-ExclusiveLevelAlarmType_EventType,9484,Variable
-ExclusiveLevelAlarmType_SourceNode,9485,Variable
-ExclusiveLevelAlarmType_SourceName,9486,Variable
-ExclusiveLevelAlarmType_Time,9487,Variable
-ExclusiveLevelAlarmType_ReceiveTime,9488,Variable
-ExclusiveLevelAlarmType_LocalTime,9489,Variable
-ExclusiveLevelAlarmType_Message,9490,Variable
-ExclusiveLevelAlarmType_Severity,9491,Variable
-ExclusiveLevelAlarmType_ConditionName,9492,Variable
-ExclusiveLevelAlarmType_BranchId,9493,Variable
-ExclusiveLevelAlarmType_Retain,9494,Variable
-ExclusiveLevelAlarmType_EnabledState,9495,Variable
-ExclusiveLevelAlarmType_EnabledState_Id,9496,Variable
-ExclusiveLevelAlarmType_EnabledState_Name,9497,Variable
-ExclusiveLevelAlarmType_EnabledState_Number,9498,Variable
-ExclusiveLevelAlarmType_EnabledState_EffectiveDisplayName,9499,Variable
-ExclusiveLevelAlarmType_EnabledState_TransitionTime,9500,Variable
-ExclusiveLevelAlarmType_EnabledState_EffectiveTransitionTime,9501,Variable
-ExclusiveLevelAlarmType_EnabledState_TrueState,9502,Variable
-ExclusiveLevelAlarmType_EnabledState_FalseState,9503,Variable
-ExclusiveLevelAlarmType_Quality,9504,Variable
-ExclusiveLevelAlarmType_Quality_SourceTimestamp,9505,Variable
-ExclusiveLevelAlarmType_LastSeverity,9506,Variable
-ExclusiveLevelAlarmType_LastSeverity_SourceTimestamp,9507,Variable
-ExclusiveLevelAlarmType_Comment,9508,Variable
-ExclusiveLevelAlarmType_Comment_SourceTimestamp,9509,Variable
-ExclusiveLevelAlarmType_ClientUserId,9510,Variable
-ExclusiveLevelAlarmType_Enable,9511,Method
-ExclusiveLevelAlarmType_Disable,9512,Method
-ExclusiveLevelAlarmType_AddComment,9513,Method
-ExclusiveLevelAlarmType_AddComment_InputArguments,9514,Variable
-ExclusiveLevelAlarmType_ConditionRefresh,9515,Method
-ExclusiveLevelAlarmType_ConditionRefresh_InputArguments,9516,Variable
-ExclusiveLevelAlarmType_AckedState,9517,Variable
-ExclusiveLevelAlarmType_AckedState_Id,9518,Variable
-ExclusiveLevelAlarmType_AckedState_Name,9519,Variable
-ExclusiveLevelAlarmType_AckedState_Number,9520,Variable
-ExclusiveLevelAlarmType_AckedState_EffectiveDisplayName,9521,Variable
-ExclusiveLevelAlarmType_AckedState_TransitionTime,9522,Variable
-ExclusiveLevelAlarmType_AckedState_EffectiveTransitionTime,9523,Variable
-ExclusiveLevelAlarmType_AckedState_TrueState,9524,Variable
-ExclusiveLevelAlarmType_AckedState_FalseState,9525,Variable
-ExclusiveLevelAlarmType_ConfirmedState,9526,Variable
-ExclusiveLevelAlarmType_ConfirmedState_Id,9527,Variable
-ExclusiveLevelAlarmType_ConfirmedState_Name,9528,Variable
-ExclusiveLevelAlarmType_ConfirmedState_Number,9529,Variable
-ExclusiveLevelAlarmType_ConfirmedState_EffectiveDisplayName,9530,Variable
-ExclusiveLevelAlarmType_ConfirmedState_TransitionTime,9531,Variable
-ExclusiveLevelAlarmType_ConfirmedState_EffectiveTransitionTime,9532,Variable
-ExclusiveLevelAlarmType_ConfirmedState_TrueState,9533,Variable
-ExclusiveLevelAlarmType_ConfirmedState_FalseState,9534,Variable
-ExclusiveLevelAlarmType_Acknowledge,9535,Method
-ExclusiveLevelAlarmType_Acknowledge_InputArguments,9536,Variable
-ExclusiveLevelAlarmType_Confirm,9537,Method
-ExclusiveLevelAlarmType_Confirm_InputArguments,9538,Variable
-ExclusiveLevelAlarmType_ActiveState,9539,Variable
-ExclusiveLevelAlarmType_ActiveState_Id,9540,Variable
-ExclusiveLevelAlarmType_ActiveState_Name,9541,Variable
-ExclusiveLevelAlarmType_ActiveState_Number,9542,Variable
-ExclusiveLevelAlarmType_ActiveState_EffectiveDisplayName,9543,Variable
-ExclusiveLevelAlarmType_ActiveState_TransitionTime,9544,Variable
-ExclusiveLevelAlarmType_ActiveState_EffectiveTransitionTime,9545,Variable
-ExclusiveLevelAlarmType_ActiveState_TrueState,9546,Variable
-ExclusiveLevelAlarmType_ActiveState_FalseState,9547,Variable
-ExclusiveLevelAlarmType_SuppressedState,9548,Variable
-ExclusiveLevelAlarmType_SuppressedState_Id,9549,Variable
-ExclusiveLevelAlarmType_SuppressedState_Name,9550,Variable
-ExclusiveLevelAlarmType_SuppressedState_Number,9551,Variable
-ExclusiveLevelAlarmType_SuppressedState_EffectiveDisplayName,9552,Variable
-ExclusiveLevelAlarmType_SuppressedState_TransitionTime,9553,Variable
-ExclusiveLevelAlarmType_SuppressedState_EffectiveTransitionTime,9554,Variable
-ExclusiveLevelAlarmType_SuppressedState_TrueState,9555,Variable
-ExclusiveLevelAlarmType_SuppressedState_FalseState,9556,Variable
-ExclusiveLevelAlarmType_ShelvingState,9557,Object
-ExclusiveLevelAlarmType_ShelvingState_CurrentState,9558,Variable
-ExclusiveLevelAlarmType_ShelvingState_CurrentState_Id,9559,Variable
-ExclusiveLevelAlarmType_ShelvingState_CurrentState_Name,9560,Variable
-ExclusiveLevelAlarmType_ShelvingState_CurrentState_Number,9561,Variable
-ExclusiveLevelAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9562,Variable
-ExclusiveLevelAlarmType_ShelvingState_LastTransition,9563,Variable
-ExclusiveLevelAlarmType_ShelvingState_LastTransition_Id,9564,Variable
-ExclusiveLevelAlarmType_ShelvingState_LastTransition_Name,9565,Variable
-ExclusiveLevelAlarmType_ShelvingState_LastTransition_Number,9566,Variable
-ExclusiveLevelAlarmType_ShelvingState_LastTransition_TransitionTime,9567,Variable
-ExclusiveLevelAlarmType_ShelvingState_UnshelveTime,9568,Variable
-ExclusiveLevelAlarmType_ShelvingState_Unshelve,9590,Method
-ExclusiveLevelAlarmType_ShelvingState_OneShotShelve,9591,Method
-ExclusiveLevelAlarmType_ShelvingState_TimedShelve,9592,Method
-ExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments,9593,Variable
-ExclusiveLevelAlarmType_SuppressedOrShelved,9594,Variable
-ExclusiveLevelAlarmType_MaxTimeShelved,9595,Variable
-ExclusiveLevelAlarmType_LimitState,9596,Object
-ExclusiveLevelAlarmType_LimitState_CurrentState,9597,Variable
-ExclusiveLevelAlarmType_LimitState_CurrentState_Id,9598,Variable
-ExclusiveLevelAlarmType_LimitState_CurrentState_Name,9599,Variable
-ExclusiveLevelAlarmType_LimitState_CurrentState_Number,9600,Variable
-ExclusiveLevelAlarmType_LimitState_CurrentState_EffectiveDisplayName,9601,Variable
-ExclusiveLevelAlarmType_LimitState_LastTransition,9602,Variable
-ExclusiveLevelAlarmType_LimitState_LastTransition_Id,9603,Variable
-ExclusiveLevelAlarmType_LimitState_LastTransition_Name,9604,Variable
-ExclusiveLevelAlarmType_LimitState_LastTransition_Number,9605,Variable
-ExclusiveLevelAlarmType_LimitState_LastTransition_TransitionTime,9606,Variable
-ExclusiveLevelAlarmType_HighHighLimit,9619,Variable
-ExclusiveLevelAlarmType_HighLimit,9620,Variable
-ExclusiveLevelAlarmType_LowLimit,9621,Variable
-ExclusiveLevelAlarmType_LowLowLimit,9622,Variable
-ExclusiveRateOfChangeAlarmType,9623,ObjectType
-ExclusiveRateOfChangeAlarmType_EventId,9624,Variable
-ExclusiveRateOfChangeAlarmType_EventType,9625,Variable
-ExclusiveRateOfChangeAlarmType_SourceNode,9626,Variable
-ExclusiveRateOfChangeAlarmType_SourceName,9627,Variable
-ExclusiveRateOfChangeAlarmType_Time,9628,Variable
-ExclusiveRateOfChangeAlarmType_ReceiveTime,9629,Variable
-ExclusiveRateOfChangeAlarmType_LocalTime,9630,Variable
-ExclusiveRateOfChangeAlarmType_Message,9631,Variable
-ExclusiveRateOfChangeAlarmType_Severity,9632,Variable
-ExclusiveRateOfChangeAlarmType_ConditionName,9633,Variable
-ExclusiveRateOfChangeAlarmType_BranchId,9634,Variable
-ExclusiveRateOfChangeAlarmType_Retain,9635,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState,9636,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState_Id,9637,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState_Name,9638,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState_Number,9639,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState_EffectiveDisplayName,9640,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState_TransitionTime,9641,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState_EffectiveTransitionTime,9642,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState_TrueState,9643,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState_FalseState,9644,Variable
-ExclusiveRateOfChangeAlarmType_Quality,9645,Variable
-ExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp,9646,Variable
-ExclusiveRateOfChangeAlarmType_LastSeverity,9647,Variable
-ExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp,9648,Variable
-ExclusiveRateOfChangeAlarmType_Comment,9649,Variable
-ExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp,9650,Variable
-ExclusiveRateOfChangeAlarmType_ClientUserId,9651,Variable
-ExclusiveRateOfChangeAlarmType_Enable,9652,Method
-ExclusiveRateOfChangeAlarmType_Disable,9653,Method
-ExclusiveRateOfChangeAlarmType_AddComment,9654,Method
-ExclusiveRateOfChangeAlarmType_AddComment_InputArguments,9655,Variable
-ExclusiveRateOfChangeAlarmType_ConditionRefresh,9656,Method
-ExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments,9657,Variable
-ExclusiveRateOfChangeAlarmType_AckedState,9658,Variable
-ExclusiveRateOfChangeAlarmType_AckedState_Id,9659,Variable
-ExclusiveRateOfChangeAlarmType_AckedState_Name,9660,Variable
-ExclusiveRateOfChangeAlarmType_AckedState_Number,9661,Variable
-ExclusiveRateOfChangeAlarmType_AckedState_EffectiveDisplayName,9662,Variable
-ExclusiveRateOfChangeAlarmType_AckedState_TransitionTime,9663,Variable
-ExclusiveRateOfChangeAlarmType_AckedState_EffectiveTransitionTime,9664,Variable
-ExclusiveRateOfChangeAlarmType_AckedState_TrueState,9665,Variable
-ExclusiveRateOfChangeAlarmType_AckedState_FalseState,9666,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState,9667,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState_Id,9668,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState_Name,9669,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState_Number,9670,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveDisplayName,9671,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState_TransitionTime,9672,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveTransitionTime,9673,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState_TrueState,9674,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState_FalseState,9675,Variable
-ExclusiveRateOfChangeAlarmType_Acknowledge,9676,Method
-ExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments,9677,Variable
-ExclusiveRateOfChangeAlarmType_Confirm,9678,Method
-ExclusiveRateOfChangeAlarmType_Confirm_InputArguments,9679,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState,9680,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState_Id,9681,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState_Name,9682,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState_Number,9683,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState_EffectiveDisplayName,9684,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState_TransitionTime,9685,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState_EffectiveTransitionTime,9686,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState_TrueState,9687,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState_FalseState,9688,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState,9689,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState_Id,9690,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState_Name,9691,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState_Number,9692,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveDisplayName,9693,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState_TransitionTime,9694,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveTransitionTime,9695,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState_TrueState,9696,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState_FalseState,9697,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState,9698,Object
-ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState,9699,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id,9700,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Name,9701,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Number,9702,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9703,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition,9704,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id,9705,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Name,9706,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Number,9707,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_TransitionTime,9708,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime,9709,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve,9731,Method
-ExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve,9732,Method
-ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve,9733,Method
-ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments,9734,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedOrShelved,9735,Variable
-ExclusiveRateOfChangeAlarmType_MaxTimeShelved,9736,Variable
-ExclusiveRateOfChangeAlarmType_LimitState,9737,Object
-ExclusiveRateOfChangeAlarmType_LimitState_CurrentState,9738,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Id,9739,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Name,9740,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Number,9741,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_EffectiveDisplayName,9742,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_LastTransition,9743,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Id,9744,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Name,9745,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Number,9746,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_TransitionTime,9747,Variable
-ExclusiveRateOfChangeAlarmType_HighHighLimit,9760,Variable
-ExclusiveRateOfChangeAlarmType_HighLimit,9761,Variable
-ExclusiveRateOfChangeAlarmType_LowLimit,9762,Variable
-ExclusiveRateOfChangeAlarmType_LowLowLimit,9763,Variable
-ExclusiveDeviationAlarmType,9764,ObjectType
-ExclusiveDeviationAlarmType_EventId,9765,Variable
-ExclusiveDeviationAlarmType_EventType,9766,Variable
-ExclusiveDeviationAlarmType_SourceNode,9767,Variable
-ExclusiveDeviationAlarmType_SourceName,9768,Variable
-ExclusiveDeviationAlarmType_Time,9769,Variable
-ExclusiveDeviationAlarmType_ReceiveTime,9770,Variable
-ExclusiveDeviationAlarmType_LocalTime,9771,Variable
-ExclusiveDeviationAlarmType_Message,9772,Variable
-ExclusiveDeviationAlarmType_Severity,9773,Variable
-ExclusiveDeviationAlarmType_ConditionName,9774,Variable
-ExclusiveDeviationAlarmType_BranchId,9775,Variable
-ExclusiveDeviationAlarmType_Retain,9776,Variable
-ExclusiveDeviationAlarmType_EnabledState,9777,Variable
-ExclusiveDeviationAlarmType_EnabledState_Id,9778,Variable
-ExclusiveDeviationAlarmType_EnabledState_Name,9779,Variable
-ExclusiveDeviationAlarmType_EnabledState_Number,9780,Variable
-ExclusiveDeviationAlarmType_EnabledState_EffectiveDisplayName,9781,Variable
-ExclusiveDeviationAlarmType_EnabledState_TransitionTime,9782,Variable
-ExclusiveDeviationAlarmType_EnabledState_EffectiveTransitionTime,9783,Variable
-ExclusiveDeviationAlarmType_EnabledState_TrueState,9784,Variable
-ExclusiveDeviationAlarmType_EnabledState_FalseState,9785,Variable
-ExclusiveDeviationAlarmType_Quality,9786,Variable
-ExclusiveDeviationAlarmType_Quality_SourceTimestamp,9787,Variable
-ExclusiveDeviationAlarmType_LastSeverity,9788,Variable
-ExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp,9789,Variable
-ExclusiveDeviationAlarmType_Comment,9790,Variable
-ExclusiveDeviationAlarmType_Comment_SourceTimestamp,9791,Variable
-ExclusiveDeviationAlarmType_ClientUserId,9792,Variable
-ExclusiveDeviationAlarmType_Enable,9793,Method
-ExclusiveDeviationAlarmType_Disable,9794,Method
-ExclusiveDeviationAlarmType_AddComment,9795,Method
-ExclusiveDeviationAlarmType_AddComment_InputArguments,9796,Variable
-ExclusiveDeviationAlarmType_ConditionRefresh,9797,Method
-ExclusiveDeviationAlarmType_ConditionRefresh_InputArguments,9798,Variable
-ExclusiveDeviationAlarmType_AckedState,9799,Variable
-ExclusiveDeviationAlarmType_AckedState_Id,9800,Variable
-ExclusiveDeviationAlarmType_AckedState_Name,9801,Variable
-ExclusiveDeviationAlarmType_AckedState_Number,9802,Variable
-ExclusiveDeviationAlarmType_AckedState_EffectiveDisplayName,9803,Variable
-ExclusiveDeviationAlarmType_AckedState_TransitionTime,9804,Variable
-ExclusiveDeviationAlarmType_AckedState_EffectiveTransitionTime,9805,Variable
-ExclusiveDeviationAlarmType_AckedState_TrueState,9806,Variable
-ExclusiveDeviationAlarmType_AckedState_FalseState,9807,Variable
-ExclusiveDeviationAlarmType_ConfirmedState,9808,Variable
-ExclusiveDeviationAlarmType_ConfirmedState_Id,9809,Variable
-ExclusiveDeviationAlarmType_ConfirmedState_Name,9810,Variable
-ExclusiveDeviationAlarmType_ConfirmedState_Number,9811,Variable
-ExclusiveDeviationAlarmType_ConfirmedState_EffectiveDisplayName,9812,Variable
-ExclusiveDeviationAlarmType_ConfirmedState_TransitionTime,9813,Variable
-ExclusiveDeviationAlarmType_ConfirmedState_EffectiveTransitionTime,9814,Variable
-ExclusiveDeviationAlarmType_ConfirmedState_TrueState,9815,Variable
-ExclusiveDeviationAlarmType_ConfirmedState_FalseState,9816,Variable
-ExclusiveDeviationAlarmType_Acknowledge,9817,Method
-ExclusiveDeviationAlarmType_Acknowledge_InputArguments,9818,Variable
-ExclusiveDeviationAlarmType_Confirm,9819,Method
-ExclusiveDeviationAlarmType_Confirm_InputArguments,9820,Variable
-ExclusiveDeviationAlarmType_ActiveState,9821,Variable
-ExclusiveDeviationAlarmType_ActiveState_Id,9822,Variable
-ExclusiveDeviationAlarmType_ActiveState_Name,9823,Variable
-ExclusiveDeviationAlarmType_ActiveState_Number,9824,Variable
-ExclusiveDeviationAlarmType_ActiveState_EffectiveDisplayName,9825,Variable
-ExclusiveDeviationAlarmType_ActiveState_TransitionTime,9826,Variable
-ExclusiveDeviationAlarmType_ActiveState_EffectiveTransitionTime,9827,Variable
-ExclusiveDeviationAlarmType_ActiveState_TrueState,9828,Variable
-ExclusiveDeviationAlarmType_ActiveState_FalseState,9829,Variable
-ExclusiveDeviationAlarmType_SuppressedState,9830,Variable
-ExclusiveDeviationAlarmType_SuppressedState_Id,9831,Variable
-ExclusiveDeviationAlarmType_SuppressedState_Name,9832,Variable
-ExclusiveDeviationAlarmType_SuppressedState_Number,9833,Variable
-ExclusiveDeviationAlarmType_SuppressedState_EffectiveDisplayName,9834,Variable
-ExclusiveDeviationAlarmType_SuppressedState_TransitionTime,9835,Variable
-ExclusiveDeviationAlarmType_SuppressedState_EffectiveTransitionTime,9836,Variable
-ExclusiveDeviationAlarmType_SuppressedState_TrueState,9837,Variable
-ExclusiveDeviationAlarmType_SuppressedState_FalseState,9838,Variable
-ExclusiveDeviationAlarmType_ShelvingState,9839,Object
-ExclusiveDeviationAlarmType_ShelvingState_CurrentState,9840,Variable
-ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id,9841,Variable
-ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Name,9842,Variable
-ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Number,9843,Variable
-ExclusiveDeviationAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9844,Variable
-ExclusiveDeviationAlarmType_ShelvingState_LastTransition,9845,Variable
-ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id,9846,Variable
-ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Name,9847,Variable
-ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Number,9848,Variable
-ExclusiveDeviationAlarmType_ShelvingState_LastTransition_TransitionTime,9849,Variable
-ExclusiveDeviationAlarmType_ShelvingState_UnshelveTime,9850,Variable
-ExclusiveDeviationAlarmType_ShelvingState_Unshelve,9872,Method
-ExclusiveDeviationAlarmType_ShelvingState_OneShotShelve,9873,Method
-ExclusiveDeviationAlarmType_ShelvingState_TimedShelve,9874,Method
-ExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments,9875,Variable
-ExclusiveDeviationAlarmType_SuppressedOrShelved,9876,Variable
-ExclusiveDeviationAlarmType_MaxTimeShelved,9877,Variable
-ExclusiveDeviationAlarmType_LimitState,9878,Object
-ExclusiveDeviationAlarmType_LimitState_CurrentState,9879,Variable
-ExclusiveDeviationAlarmType_LimitState_CurrentState_Id,9880,Variable
-ExclusiveDeviationAlarmType_LimitState_CurrentState_Name,9881,Variable
-ExclusiveDeviationAlarmType_LimitState_CurrentState_Number,9882,Variable
-ExclusiveDeviationAlarmType_LimitState_CurrentState_EffectiveDisplayName,9883,Variable
-ExclusiveDeviationAlarmType_LimitState_LastTransition,9884,Variable
-ExclusiveDeviationAlarmType_LimitState_LastTransition_Id,9885,Variable
-ExclusiveDeviationAlarmType_LimitState_LastTransition_Name,9886,Variable
-ExclusiveDeviationAlarmType_LimitState_LastTransition_Number,9887,Variable
-ExclusiveDeviationAlarmType_LimitState_LastTransition_TransitionTime,9888,Variable
-ExclusiveDeviationAlarmType_HighHighLimit,9901,Variable
-ExclusiveDeviationAlarmType_HighLimit,9902,Variable
-ExclusiveDeviationAlarmType_LowLimit,9903,Variable
-ExclusiveDeviationAlarmType_LowLowLimit,9904,Variable
-ExclusiveDeviationAlarmType_SetpointNode,9905,Variable
-NonExclusiveLimitAlarmType,9906,ObjectType
-NonExclusiveLimitAlarmType_EventId,9907,Variable
-NonExclusiveLimitAlarmType_EventType,9908,Variable
-NonExclusiveLimitAlarmType_SourceNode,9909,Variable
-NonExclusiveLimitAlarmType_SourceName,9910,Variable
-NonExclusiveLimitAlarmType_Time,9911,Variable
-NonExclusiveLimitAlarmType_ReceiveTime,9912,Variable
-NonExclusiveLimitAlarmType_LocalTime,9913,Variable
-NonExclusiveLimitAlarmType_Message,9914,Variable
-NonExclusiveLimitAlarmType_Severity,9915,Variable
-NonExclusiveLimitAlarmType_ConditionName,9916,Variable
-NonExclusiveLimitAlarmType_BranchId,9917,Variable
-NonExclusiveLimitAlarmType_Retain,9918,Variable
-NonExclusiveLimitAlarmType_EnabledState,9919,Variable
-NonExclusiveLimitAlarmType_EnabledState_Id,9920,Variable
-NonExclusiveLimitAlarmType_EnabledState_Name,9921,Variable
-NonExclusiveLimitAlarmType_EnabledState_Number,9922,Variable
-NonExclusiveLimitAlarmType_EnabledState_EffectiveDisplayName,9923,Variable
-NonExclusiveLimitAlarmType_EnabledState_TransitionTime,9924,Variable
-NonExclusiveLimitAlarmType_EnabledState_EffectiveTransitionTime,9925,Variable
-NonExclusiveLimitAlarmType_EnabledState_TrueState,9926,Variable
-NonExclusiveLimitAlarmType_EnabledState_FalseState,9927,Variable
-NonExclusiveLimitAlarmType_Quality,9928,Variable
-NonExclusiveLimitAlarmType_Quality_SourceTimestamp,9929,Variable
-NonExclusiveLimitAlarmType_LastSeverity,9930,Variable
-NonExclusiveLimitAlarmType_LastSeverity_SourceTimestamp,9931,Variable
-NonExclusiveLimitAlarmType_Comment,9932,Variable
-NonExclusiveLimitAlarmType_Comment_SourceTimestamp,9933,Variable
-NonExclusiveLimitAlarmType_ClientUserId,9934,Variable
-NonExclusiveLimitAlarmType_Enable,9935,Method
-NonExclusiveLimitAlarmType_Disable,9936,Method
-NonExclusiveLimitAlarmType_AddComment,9937,Method
-NonExclusiveLimitAlarmType_AddComment_InputArguments,9938,Variable
-NonExclusiveLimitAlarmType_ConditionRefresh,9939,Method
-NonExclusiveLimitAlarmType_ConditionRefresh_InputArguments,9940,Variable
-NonExclusiveLimitAlarmType_AckedState,9941,Variable
-NonExclusiveLimitAlarmType_AckedState_Id,9942,Variable
-NonExclusiveLimitAlarmType_AckedState_Name,9943,Variable
-NonExclusiveLimitAlarmType_AckedState_Number,9944,Variable
-NonExclusiveLimitAlarmType_AckedState_EffectiveDisplayName,9945,Variable
-NonExclusiveLimitAlarmType_AckedState_TransitionTime,9946,Variable
-NonExclusiveLimitAlarmType_AckedState_EffectiveTransitionTime,9947,Variable
-NonExclusiveLimitAlarmType_AckedState_TrueState,9948,Variable
-NonExclusiveLimitAlarmType_AckedState_FalseState,9949,Variable
-NonExclusiveLimitAlarmType_ConfirmedState,9950,Variable
-NonExclusiveLimitAlarmType_ConfirmedState_Id,9951,Variable
-NonExclusiveLimitAlarmType_ConfirmedState_Name,9952,Variable
-NonExclusiveLimitAlarmType_ConfirmedState_Number,9953,Variable
-NonExclusiveLimitAlarmType_ConfirmedState_EffectiveDisplayName,9954,Variable
-NonExclusiveLimitAlarmType_ConfirmedState_TransitionTime,9955,Variable
-NonExclusiveLimitAlarmType_ConfirmedState_EffectiveTransitionTime,9956,Variable
-NonExclusiveLimitAlarmType_ConfirmedState_TrueState,9957,Variable
-NonExclusiveLimitAlarmType_ConfirmedState_FalseState,9958,Variable
-NonExclusiveLimitAlarmType_Acknowledge,9959,Method
-NonExclusiveLimitAlarmType_Acknowledge_InputArguments,9960,Variable
-NonExclusiveLimitAlarmType_Confirm,9961,Method
-NonExclusiveLimitAlarmType_Confirm_InputArguments,9962,Variable
-NonExclusiveLimitAlarmType_ActiveState,9963,Variable
-NonExclusiveLimitAlarmType_ActiveState_Id,9964,Variable
-NonExclusiveLimitAlarmType_ActiveState_Name,9965,Variable
-NonExclusiveLimitAlarmType_ActiveState_Number,9966,Variable
-NonExclusiveLimitAlarmType_ActiveState_EffectiveDisplayName,9967,Variable
-NonExclusiveLimitAlarmType_ActiveState_TransitionTime,9968,Variable
-NonExclusiveLimitAlarmType_ActiveState_EffectiveTransitionTime,9969,Variable
-NonExclusiveLimitAlarmType_ActiveState_TrueState,9970,Variable
-NonExclusiveLimitAlarmType_ActiveState_FalseState,9971,Variable
-NonExclusiveLimitAlarmType_SuppressedState,9972,Variable
-NonExclusiveLimitAlarmType_SuppressedState_Id,9973,Variable
-NonExclusiveLimitAlarmType_SuppressedState_Name,9974,Variable
-NonExclusiveLimitAlarmType_SuppressedState_Number,9975,Variable
-NonExclusiveLimitAlarmType_SuppressedState_EffectiveDisplayName,9976,Variable
-NonExclusiveLimitAlarmType_SuppressedState_TransitionTime,9977,Variable
-NonExclusiveLimitAlarmType_SuppressedState_EffectiveTransitionTime,9978,Variable
-NonExclusiveLimitAlarmType_SuppressedState_TrueState,9979,Variable
-NonExclusiveLimitAlarmType_SuppressedState_FalseState,9980,Variable
-NonExclusiveLimitAlarmType_ShelvingState,9981,Object
-NonExclusiveLimitAlarmType_ShelvingState_CurrentState,9982,Variable
-NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Id,9983,Variable
-NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Name,9984,Variable
-NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Number,9985,Variable
-NonExclusiveLimitAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9986,Variable
-NonExclusiveLimitAlarmType_ShelvingState_LastTransition,9987,Variable
-NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Id,9988,Variable
-NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Name,9989,Variable
-NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Number,9990,Variable
-NonExclusiveLimitAlarmType_ShelvingState_LastTransition_TransitionTime,9991,Variable
-NonExclusiveLimitAlarmType_ShelvingState_UnshelveTime,9992,Variable
-NonExclusiveLimitAlarmType_ShelvingState_Unshelve,10014,Method
-NonExclusiveLimitAlarmType_ShelvingState_OneShotShelve,10015,Method
-NonExclusiveLimitAlarmType_ShelvingState_TimedShelve,10016,Method
-NonExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments,10017,Variable
-NonExclusiveLimitAlarmType_SuppressedOrShelved,10018,Variable
-NonExclusiveLimitAlarmType_MaxTimeShelved,10019,Variable
-NonExclusiveLimitAlarmType_HighHighState,10020,Variable
-NonExclusiveLimitAlarmType_HighHighState_Id,10021,Variable
-NonExclusiveLimitAlarmType_HighHighState_Name,10022,Variable
-NonExclusiveLimitAlarmType_HighHighState_Number,10023,Variable
-NonExclusiveLimitAlarmType_HighHighState_EffectiveDisplayName,10024,Variable
-NonExclusiveLimitAlarmType_HighHighState_TransitionTime,10025,Variable
-NonExclusiveLimitAlarmType_HighHighState_EffectiveTransitionTime,10026,Variable
-NonExclusiveLimitAlarmType_HighHighState_TrueState,10027,Variable
-NonExclusiveLimitAlarmType_HighHighState_FalseState,10028,Variable
-NonExclusiveLimitAlarmType_HighState,10029,Variable
-NonExclusiveLimitAlarmType_HighState_Id,10030,Variable
-NonExclusiveLimitAlarmType_HighState_Name,10031,Variable
-NonExclusiveLimitAlarmType_HighState_Number,10032,Variable
-NonExclusiveLimitAlarmType_HighState_EffectiveDisplayName,10033,Variable
-NonExclusiveLimitAlarmType_HighState_TransitionTime,10034,Variable
-NonExclusiveLimitAlarmType_HighState_EffectiveTransitionTime,10035,Variable
-NonExclusiveLimitAlarmType_HighState_TrueState,10036,Variable
-NonExclusiveLimitAlarmType_HighState_FalseState,10037,Variable
-NonExclusiveLimitAlarmType_LowState,10038,Variable
-NonExclusiveLimitAlarmType_LowState_Id,10039,Variable
-NonExclusiveLimitAlarmType_LowState_Name,10040,Variable
-NonExclusiveLimitAlarmType_LowState_Number,10041,Variable
-NonExclusiveLimitAlarmType_LowState_EffectiveDisplayName,10042,Variable
-NonExclusiveLimitAlarmType_LowState_TransitionTime,10043,Variable
-NonExclusiveLimitAlarmType_LowState_EffectiveTransitionTime,10044,Variable
-NonExclusiveLimitAlarmType_LowState_TrueState,10045,Variable
-NonExclusiveLimitAlarmType_LowState_FalseState,10046,Variable
-NonExclusiveLimitAlarmType_LowLowState,10047,Variable
-NonExclusiveLimitAlarmType_LowLowState_Id,10048,Variable
-NonExclusiveLimitAlarmType_LowLowState_Name,10049,Variable
-NonExclusiveLimitAlarmType_LowLowState_Number,10050,Variable
-NonExclusiveLimitAlarmType_LowLowState_EffectiveDisplayName,10051,Variable
-NonExclusiveLimitAlarmType_LowLowState_TransitionTime,10052,Variable
-NonExclusiveLimitAlarmType_LowLowState_EffectiveTransitionTime,10053,Variable
-NonExclusiveLimitAlarmType_LowLowState_TrueState,10054,Variable
-NonExclusiveLimitAlarmType_LowLowState_FalseState,10055,Variable
-NonExclusiveLimitAlarmType_HighHighLimit,10056,Variable
-NonExclusiveLimitAlarmType_HighLimit,10057,Variable
-NonExclusiveLimitAlarmType_LowLimit,10058,Variable
-NonExclusiveLimitAlarmType_LowLowLimit,10059,Variable
-NonExclusiveLevelAlarmType,10060,ObjectType
-NonExclusiveLevelAlarmType_EventId,10061,Variable
-NonExclusiveLevelAlarmType_EventType,10062,Variable
-NonExclusiveLevelAlarmType_SourceNode,10063,Variable
-NonExclusiveLevelAlarmType_SourceName,10064,Variable
-NonExclusiveLevelAlarmType_Time,10065,Variable
-NonExclusiveLevelAlarmType_ReceiveTime,10066,Variable
-NonExclusiveLevelAlarmType_LocalTime,10067,Variable
-NonExclusiveLevelAlarmType_Message,10068,Variable
-NonExclusiveLevelAlarmType_Severity,10069,Variable
-NonExclusiveLevelAlarmType_ConditionName,10070,Variable
-NonExclusiveLevelAlarmType_BranchId,10071,Variable
-NonExclusiveLevelAlarmType_Retain,10072,Variable
-NonExclusiveLevelAlarmType_EnabledState,10073,Variable
-NonExclusiveLevelAlarmType_EnabledState_Id,10074,Variable
-NonExclusiveLevelAlarmType_EnabledState_Name,10075,Variable
-NonExclusiveLevelAlarmType_EnabledState_Number,10076,Variable
-NonExclusiveLevelAlarmType_EnabledState_EffectiveDisplayName,10077,Variable
-NonExclusiveLevelAlarmType_EnabledState_TransitionTime,10078,Variable
-NonExclusiveLevelAlarmType_EnabledState_EffectiveTransitionTime,10079,Variable
-NonExclusiveLevelAlarmType_EnabledState_TrueState,10080,Variable
-NonExclusiveLevelAlarmType_EnabledState_FalseState,10081,Variable
-NonExclusiveLevelAlarmType_Quality,10082,Variable
-NonExclusiveLevelAlarmType_Quality_SourceTimestamp,10083,Variable
-NonExclusiveLevelAlarmType_LastSeverity,10084,Variable
-NonExclusiveLevelAlarmType_LastSeverity_SourceTimestamp,10085,Variable
-NonExclusiveLevelAlarmType_Comment,10086,Variable
-NonExclusiveLevelAlarmType_Comment_SourceTimestamp,10087,Variable
-NonExclusiveLevelAlarmType_ClientUserId,10088,Variable
-NonExclusiveLevelAlarmType_Enable,10089,Method
-NonExclusiveLevelAlarmType_Disable,10090,Method
-NonExclusiveLevelAlarmType_AddComment,10091,Method
-NonExclusiveLevelAlarmType_AddComment_InputArguments,10092,Variable
-NonExclusiveLevelAlarmType_ConditionRefresh,10093,Method
-NonExclusiveLevelAlarmType_ConditionRefresh_InputArguments,10094,Variable
-NonExclusiveLevelAlarmType_AckedState,10095,Variable
-NonExclusiveLevelAlarmType_AckedState_Id,10096,Variable
-NonExclusiveLevelAlarmType_AckedState_Name,10097,Variable
-NonExclusiveLevelAlarmType_AckedState_Number,10098,Variable
-NonExclusiveLevelAlarmType_AckedState_EffectiveDisplayName,10099,Variable
-NonExclusiveLevelAlarmType_AckedState_TransitionTime,10100,Variable
-NonExclusiveLevelAlarmType_AckedState_EffectiveTransitionTime,10101,Variable
-NonExclusiveLevelAlarmType_AckedState_TrueState,10102,Variable
-NonExclusiveLevelAlarmType_AckedState_FalseState,10103,Variable
-NonExclusiveLevelAlarmType_ConfirmedState,10104,Variable
-NonExclusiveLevelAlarmType_ConfirmedState_Id,10105,Variable
-NonExclusiveLevelAlarmType_ConfirmedState_Name,10106,Variable
-NonExclusiveLevelAlarmType_ConfirmedState_Number,10107,Variable
-NonExclusiveLevelAlarmType_ConfirmedState_EffectiveDisplayName,10108,Variable
-NonExclusiveLevelAlarmType_ConfirmedState_TransitionTime,10109,Variable
-NonExclusiveLevelAlarmType_ConfirmedState_EffectiveTransitionTime,10110,Variable
-NonExclusiveLevelAlarmType_ConfirmedState_TrueState,10111,Variable
-NonExclusiveLevelAlarmType_ConfirmedState_FalseState,10112,Variable
-NonExclusiveLevelAlarmType_Acknowledge,10113,Method
-NonExclusiveLevelAlarmType_Acknowledge_InputArguments,10114,Variable
-NonExclusiveLevelAlarmType_Confirm,10115,Method
-NonExclusiveLevelAlarmType_Confirm_InputArguments,10116,Variable
-NonExclusiveLevelAlarmType_ActiveState,10117,Variable
-NonExclusiveLevelAlarmType_ActiveState_Id,10118,Variable
-NonExclusiveLevelAlarmType_ActiveState_Name,10119,Variable
-NonExclusiveLevelAlarmType_ActiveState_Number,10120,Variable
-NonExclusiveLevelAlarmType_ActiveState_EffectiveDisplayName,10121,Variable
-NonExclusiveLevelAlarmType_ActiveState_TransitionTime,10122,Variable
-NonExclusiveLevelAlarmType_ActiveState_EffectiveTransitionTime,10123,Variable
-NonExclusiveLevelAlarmType_ActiveState_TrueState,10124,Variable
-NonExclusiveLevelAlarmType_ActiveState_FalseState,10125,Variable
-NonExclusiveLevelAlarmType_SuppressedState,10126,Variable
-NonExclusiveLevelAlarmType_SuppressedState_Id,10127,Variable
-NonExclusiveLevelAlarmType_SuppressedState_Name,10128,Variable
-NonExclusiveLevelAlarmType_SuppressedState_Number,10129,Variable
-NonExclusiveLevelAlarmType_SuppressedState_EffectiveDisplayName,10130,Variable
-NonExclusiveLevelAlarmType_SuppressedState_TransitionTime,10131,Variable
-NonExclusiveLevelAlarmType_SuppressedState_EffectiveTransitionTime,10132,Variable
-NonExclusiveLevelAlarmType_SuppressedState_TrueState,10133,Variable
-NonExclusiveLevelAlarmType_SuppressedState_FalseState,10134,Variable
-NonExclusiveLevelAlarmType_ShelvingState,10135,Object
-NonExclusiveLevelAlarmType_ShelvingState_CurrentState,10136,Variable
-NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Id,10137,Variable
-NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Name,10138,Variable
-NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Number,10139,Variable
-NonExclusiveLevelAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10140,Variable
-NonExclusiveLevelAlarmType_ShelvingState_LastTransition,10141,Variable
-NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Id,10142,Variable
-NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Name,10143,Variable
-NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Number,10144,Variable
-NonExclusiveLevelAlarmType_ShelvingState_LastTransition_TransitionTime,10145,Variable
-NonExclusiveLevelAlarmType_ShelvingState_UnshelveTime,10146,Variable
-NonExclusiveLevelAlarmType_ShelvingState_Unshelve,10168,Method
-NonExclusiveLevelAlarmType_ShelvingState_OneShotShelve,10169,Method
-NonExclusiveLevelAlarmType_ShelvingState_TimedShelve,10170,Method
-NonExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments,10171,Variable
-NonExclusiveLevelAlarmType_SuppressedOrShelved,10172,Variable
-NonExclusiveLevelAlarmType_MaxTimeShelved,10173,Variable
-NonExclusiveLevelAlarmType_HighHighState,10174,Variable
-NonExclusiveLevelAlarmType_HighHighState_Id,10175,Variable
-NonExclusiveLevelAlarmType_HighHighState_Name,10176,Variable
-NonExclusiveLevelAlarmType_HighHighState_Number,10177,Variable
-NonExclusiveLevelAlarmType_HighHighState_EffectiveDisplayName,10178,Variable
-NonExclusiveLevelAlarmType_HighHighState_TransitionTime,10179,Variable
-NonExclusiveLevelAlarmType_HighHighState_EffectiveTransitionTime,10180,Variable
-NonExclusiveLevelAlarmType_HighHighState_TrueState,10181,Variable
-NonExclusiveLevelAlarmType_HighHighState_FalseState,10182,Variable
-NonExclusiveLevelAlarmType_HighState,10183,Variable
-NonExclusiveLevelAlarmType_HighState_Id,10184,Variable
-NonExclusiveLevelAlarmType_HighState_Name,10185,Variable
-NonExclusiveLevelAlarmType_HighState_Number,10186,Variable
-NonExclusiveLevelAlarmType_HighState_EffectiveDisplayName,10187,Variable
-NonExclusiveLevelAlarmType_HighState_TransitionTime,10188,Variable
-NonExclusiveLevelAlarmType_HighState_EffectiveTransitionTime,10189,Variable
-NonExclusiveLevelAlarmType_HighState_TrueState,10190,Variable
-NonExclusiveLevelAlarmType_HighState_FalseState,10191,Variable
-NonExclusiveLevelAlarmType_LowState,10192,Variable
-NonExclusiveLevelAlarmType_LowState_Id,10193,Variable
-NonExclusiveLevelAlarmType_LowState_Name,10194,Variable
-NonExclusiveLevelAlarmType_LowState_Number,10195,Variable
-NonExclusiveLevelAlarmType_LowState_EffectiveDisplayName,10196,Variable
-NonExclusiveLevelAlarmType_LowState_TransitionTime,10197,Variable
-NonExclusiveLevelAlarmType_LowState_EffectiveTransitionTime,10198,Variable
-NonExclusiveLevelAlarmType_LowState_TrueState,10199,Variable
-NonExclusiveLevelAlarmType_LowState_FalseState,10200,Variable
-NonExclusiveLevelAlarmType_LowLowState,10201,Variable
-NonExclusiveLevelAlarmType_LowLowState_Id,10202,Variable
-NonExclusiveLevelAlarmType_LowLowState_Name,10203,Variable
-NonExclusiveLevelAlarmType_LowLowState_Number,10204,Variable
-NonExclusiveLevelAlarmType_LowLowState_EffectiveDisplayName,10205,Variable
-NonExclusiveLevelAlarmType_LowLowState_TransitionTime,10206,Variable
-NonExclusiveLevelAlarmType_LowLowState_EffectiveTransitionTime,10207,Variable
-NonExclusiveLevelAlarmType_LowLowState_TrueState,10208,Variable
-NonExclusiveLevelAlarmType_LowLowState_FalseState,10209,Variable
-NonExclusiveLevelAlarmType_HighHighLimit,10210,Variable
-NonExclusiveLevelAlarmType_HighLimit,10211,Variable
-NonExclusiveLevelAlarmType_LowLimit,10212,Variable
-NonExclusiveLevelAlarmType_LowLowLimit,10213,Variable
-NonExclusiveRateOfChangeAlarmType,10214,ObjectType
-NonExclusiveRateOfChangeAlarmType_EventId,10215,Variable
-NonExclusiveRateOfChangeAlarmType_EventType,10216,Variable
-NonExclusiveRateOfChangeAlarmType_SourceNode,10217,Variable
-NonExclusiveRateOfChangeAlarmType_SourceName,10218,Variable
-NonExclusiveRateOfChangeAlarmType_Time,10219,Variable
-NonExclusiveRateOfChangeAlarmType_ReceiveTime,10220,Variable
-NonExclusiveRateOfChangeAlarmType_LocalTime,10221,Variable
-NonExclusiveRateOfChangeAlarmType_Message,10222,Variable
-NonExclusiveRateOfChangeAlarmType_Severity,10223,Variable
-NonExclusiveRateOfChangeAlarmType_ConditionName,10224,Variable
-NonExclusiveRateOfChangeAlarmType_BranchId,10225,Variable
-NonExclusiveRateOfChangeAlarmType_Retain,10226,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState,10227,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState_Id,10228,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState_Name,10229,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState_Number,10230,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState_EffectiveDisplayName,10231,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState_TransitionTime,10232,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState_EffectiveTransitionTime,10233,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState_TrueState,10234,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState_FalseState,10235,Variable
-NonExclusiveRateOfChangeAlarmType_Quality,10236,Variable
-NonExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp,10237,Variable
-NonExclusiveRateOfChangeAlarmType_LastSeverity,10238,Variable
-NonExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp,10239,Variable
-NonExclusiveRateOfChangeAlarmType_Comment,10240,Variable
-NonExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp,10241,Variable
-NonExclusiveRateOfChangeAlarmType_ClientUserId,10242,Variable
-NonExclusiveRateOfChangeAlarmType_Enable,10243,Method
-NonExclusiveRateOfChangeAlarmType_Disable,10244,Method
-NonExclusiveRateOfChangeAlarmType_AddComment,10245,Method
-NonExclusiveRateOfChangeAlarmType_AddComment_InputArguments,10246,Variable
-NonExclusiveRateOfChangeAlarmType_ConditionRefresh,10247,Method
-NonExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments,10248,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState,10249,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState_Id,10250,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState_Name,10251,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState_Number,10252,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState_EffectiveDisplayName,10253,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState_TransitionTime,10254,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState_EffectiveTransitionTime,10255,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState_TrueState,10256,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState_FalseState,10257,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState,10258,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState_Id,10259,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState_Name,10260,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState_Number,10261,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveDisplayName,10262,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState_TransitionTime,10263,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveTransitionTime,10264,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState_TrueState,10265,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState_FalseState,10266,Variable
-NonExclusiveRateOfChangeAlarmType_Acknowledge,10267,Method
-NonExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments,10268,Variable
-NonExclusiveRateOfChangeAlarmType_Confirm,10269,Method
-NonExclusiveRateOfChangeAlarmType_Confirm_InputArguments,10270,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState,10271,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState_Id,10272,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState_Name,10273,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState_Number,10274,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState_EffectiveDisplayName,10275,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState_TransitionTime,10276,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState_EffectiveTransitionTime,10277,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState_TrueState,10278,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState_FalseState,10279,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState,10280,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState_Id,10281,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState_Name,10282,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState_Number,10283,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveDisplayName,10284,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState_TransitionTime,10285,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveTransitionTime,10286,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState_TrueState,10287,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState_FalseState,10288,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState,10289,Object
-NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState,10290,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id,10291,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Name,10292,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Number,10293,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10294,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition,10295,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id,10296,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Name,10297,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Number,10298,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_TransitionTime,10299,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime,10300,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve,10322,Method
-NonExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve,10323,Method
-NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve,10324,Method
-NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments,10325,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedOrShelved,10326,Variable
-NonExclusiveRateOfChangeAlarmType_MaxTimeShelved,10327,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState,10328,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState_Id,10329,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState_Name,10330,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState_Number,10331,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState_EffectiveDisplayName,10332,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState_TransitionTime,10333,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState_EffectiveTransitionTime,10334,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState_TrueState,10335,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState_FalseState,10336,Variable
-NonExclusiveRateOfChangeAlarmType_HighState,10337,Variable
-NonExclusiveRateOfChangeAlarmType_HighState_Id,10338,Variable
-NonExclusiveRateOfChangeAlarmType_HighState_Name,10339,Variable
-NonExclusiveRateOfChangeAlarmType_HighState_Number,10340,Variable
-NonExclusiveRateOfChangeAlarmType_HighState_EffectiveDisplayName,10341,Variable
-NonExclusiveRateOfChangeAlarmType_HighState_TransitionTime,10342,Variable
-NonExclusiveRateOfChangeAlarmType_HighState_EffectiveTransitionTime,10343,Variable
-NonExclusiveRateOfChangeAlarmType_HighState_TrueState,10344,Variable
-NonExclusiveRateOfChangeAlarmType_HighState_FalseState,10345,Variable
-NonExclusiveRateOfChangeAlarmType_LowState,10346,Variable
-NonExclusiveRateOfChangeAlarmType_LowState_Id,10347,Variable
-NonExclusiveRateOfChangeAlarmType_LowState_Name,10348,Variable
-NonExclusiveRateOfChangeAlarmType_LowState_Number,10349,Variable
-NonExclusiveRateOfChangeAlarmType_LowState_EffectiveDisplayName,10350,Variable
-NonExclusiveRateOfChangeAlarmType_LowState_TransitionTime,10351,Variable
-NonExclusiveRateOfChangeAlarmType_LowState_EffectiveTransitionTime,10352,Variable
-NonExclusiveRateOfChangeAlarmType_LowState_TrueState,10353,Variable
-NonExclusiveRateOfChangeAlarmType_LowState_FalseState,10354,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState,10355,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState_Id,10356,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState_Name,10357,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState_Number,10358,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState_EffectiveDisplayName,10359,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState_TransitionTime,10360,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState_EffectiveTransitionTime,10361,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState_TrueState,10362,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState_FalseState,10363,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighLimit,10364,Variable
-NonExclusiveRateOfChangeAlarmType_HighLimit,10365,Variable
-NonExclusiveRateOfChangeAlarmType_LowLimit,10366,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowLimit,10367,Variable
-NonExclusiveDeviationAlarmType,10368,ObjectType
-NonExclusiveDeviationAlarmType_EventId,10369,Variable
-NonExclusiveDeviationAlarmType_EventType,10370,Variable
-NonExclusiveDeviationAlarmType_SourceNode,10371,Variable
-NonExclusiveDeviationAlarmType_SourceName,10372,Variable
-NonExclusiveDeviationAlarmType_Time,10373,Variable
-NonExclusiveDeviationAlarmType_ReceiveTime,10374,Variable
-NonExclusiveDeviationAlarmType_LocalTime,10375,Variable
-NonExclusiveDeviationAlarmType_Message,10376,Variable
-NonExclusiveDeviationAlarmType_Severity,10377,Variable
-NonExclusiveDeviationAlarmType_ConditionName,10378,Variable
-NonExclusiveDeviationAlarmType_BranchId,10379,Variable
-NonExclusiveDeviationAlarmType_Retain,10380,Variable
-NonExclusiveDeviationAlarmType_EnabledState,10381,Variable
-NonExclusiveDeviationAlarmType_EnabledState_Id,10382,Variable
-NonExclusiveDeviationAlarmType_EnabledState_Name,10383,Variable
-NonExclusiveDeviationAlarmType_EnabledState_Number,10384,Variable
-NonExclusiveDeviationAlarmType_EnabledState_EffectiveDisplayName,10385,Variable
-NonExclusiveDeviationAlarmType_EnabledState_TransitionTime,10386,Variable
-NonExclusiveDeviationAlarmType_EnabledState_EffectiveTransitionTime,10387,Variable
-NonExclusiveDeviationAlarmType_EnabledState_TrueState,10388,Variable
-NonExclusiveDeviationAlarmType_EnabledState_FalseState,10389,Variable
-NonExclusiveDeviationAlarmType_Quality,10390,Variable
-NonExclusiveDeviationAlarmType_Quality_SourceTimestamp,10391,Variable
-NonExclusiveDeviationAlarmType_LastSeverity,10392,Variable
-NonExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp,10393,Variable
-NonExclusiveDeviationAlarmType_Comment,10394,Variable
-NonExclusiveDeviationAlarmType_Comment_SourceTimestamp,10395,Variable
-NonExclusiveDeviationAlarmType_ClientUserId,10396,Variable
-NonExclusiveDeviationAlarmType_Enable,10397,Method
-NonExclusiveDeviationAlarmType_Disable,10398,Method
-NonExclusiveDeviationAlarmType_AddComment,10399,Method
-NonExclusiveDeviationAlarmType_AddComment_InputArguments,10400,Variable
-NonExclusiveDeviationAlarmType_ConditionRefresh,10401,Method
-NonExclusiveDeviationAlarmType_ConditionRefresh_InputArguments,10402,Variable
-NonExclusiveDeviationAlarmType_AckedState,10403,Variable
-NonExclusiveDeviationAlarmType_AckedState_Id,10404,Variable
-NonExclusiveDeviationAlarmType_AckedState_Name,10405,Variable
-NonExclusiveDeviationAlarmType_AckedState_Number,10406,Variable
-NonExclusiveDeviationAlarmType_AckedState_EffectiveDisplayName,10407,Variable
-NonExclusiveDeviationAlarmType_AckedState_TransitionTime,10408,Variable
-NonExclusiveDeviationAlarmType_AckedState_EffectiveTransitionTime,10409,Variable
-NonExclusiveDeviationAlarmType_AckedState_TrueState,10410,Variable
-NonExclusiveDeviationAlarmType_AckedState_FalseState,10411,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState,10412,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState_Id,10413,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState_Name,10414,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState_Number,10415,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState_EffectiveDisplayName,10416,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState_TransitionTime,10417,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState_EffectiveTransitionTime,10418,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState_TrueState,10419,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState_FalseState,10420,Variable
-NonExclusiveDeviationAlarmType_Acknowledge,10421,Method
-NonExclusiveDeviationAlarmType_Acknowledge_InputArguments,10422,Variable
-NonExclusiveDeviationAlarmType_Confirm,10423,Method
-NonExclusiveDeviationAlarmType_Confirm_InputArguments,10424,Variable
-NonExclusiveDeviationAlarmType_ActiveState,10425,Variable
-NonExclusiveDeviationAlarmType_ActiveState_Id,10426,Variable
-NonExclusiveDeviationAlarmType_ActiveState_Name,10427,Variable
-NonExclusiveDeviationAlarmType_ActiveState_Number,10428,Variable
-NonExclusiveDeviationAlarmType_ActiveState_EffectiveDisplayName,10429,Variable
-NonExclusiveDeviationAlarmType_ActiveState_TransitionTime,10430,Variable
-NonExclusiveDeviationAlarmType_ActiveState_EffectiveTransitionTime,10431,Variable
-NonExclusiveDeviationAlarmType_ActiveState_TrueState,10432,Variable
-NonExclusiveDeviationAlarmType_ActiveState_FalseState,10433,Variable
-NonExclusiveDeviationAlarmType_SuppressedState,10434,Variable
-NonExclusiveDeviationAlarmType_SuppressedState_Id,10435,Variable
-NonExclusiveDeviationAlarmType_SuppressedState_Name,10436,Variable
-NonExclusiveDeviationAlarmType_SuppressedState_Number,10437,Variable
-NonExclusiveDeviationAlarmType_SuppressedState_EffectiveDisplayName,10438,Variable
-NonExclusiveDeviationAlarmType_SuppressedState_TransitionTime,10439,Variable
-NonExclusiveDeviationAlarmType_SuppressedState_EffectiveTransitionTime,10440,Variable
-NonExclusiveDeviationAlarmType_SuppressedState_TrueState,10441,Variable
-NonExclusiveDeviationAlarmType_SuppressedState_FalseState,10442,Variable
-NonExclusiveDeviationAlarmType_ShelvingState,10443,Object
-NonExclusiveDeviationAlarmType_ShelvingState_CurrentState,10444,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id,10445,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Name,10446,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Number,10447,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10448,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_LastTransition,10449,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id,10450,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Name,10451,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Number,10452,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_TransitionTime,10453,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_UnshelveTime,10454,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_Unshelve,10476,Method
-NonExclusiveDeviationAlarmType_ShelvingState_OneShotShelve,10477,Method
-NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve,10478,Method
-NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments,10479,Variable
-NonExclusiveDeviationAlarmType_SuppressedOrShelved,10480,Variable
-NonExclusiveDeviationAlarmType_MaxTimeShelved,10481,Variable
-NonExclusiveDeviationAlarmType_HighHighState,10482,Variable
-NonExclusiveDeviationAlarmType_HighHighState_Id,10483,Variable
-NonExclusiveDeviationAlarmType_HighHighState_Name,10484,Variable
-NonExclusiveDeviationAlarmType_HighHighState_Number,10485,Variable
-NonExclusiveDeviationAlarmType_HighHighState_EffectiveDisplayName,10486,Variable
-NonExclusiveDeviationAlarmType_HighHighState_TransitionTime,10487,Variable
-NonExclusiveDeviationAlarmType_HighHighState_EffectiveTransitionTime,10488,Variable
-NonExclusiveDeviationAlarmType_HighHighState_TrueState,10489,Variable
-NonExclusiveDeviationAlarmType_HighHighState_FalseState,10490,Variable
-NonExclusiveDeviationAlarmType_HighState,10491,Variable
-NonExclusiveDeviationAlarmType_HighState_Id,10492,Variable
-NonExclusiveDeviationAlarmType_HighState_Name,10493,Variable
-NonExclusiveDeviationAlarmType_HighState_Number,10494,Variable
-NonExclusiveDeviationAlarmType_HighState_EffectiveDisplayName,10495,Variable
-NonExclusiveDeviationAlarmType_HighState_TransitionTime,10496,Variable
-NonExclusiveDeviationAlarmType_HighState_EffectiveTransitionTime,10497,Variable
-NonExclusiveDeviationAlarmType_HighState_TrueState,10498,Variable
-NonExclusiveDeviationAlarmType_HighState_FalseState,10499,Variable
-NonExclusiveDeviationAlarmType_LowState,10500,Variable
-NonExclusiveDeviationAlarmType_LowState_Id,10501,Variable
-NonExclusiveDeviationAlarmType_LowState_Name,10502,Variable
-NonExclusiveDeviationAlarmType_LowState_Number,10503,Variable
-NonExclusiveDeviationAlarmType_LowState_EffectiveDisplayName,10504,Variable
-NonExclusiveDeviationAlarmType_LowState_TransitionTime,10505,Variable
-NonExclusiveDeviationAlarmType_LowState_EffectiveTransitionTime,10506,Variable
-NonExclusiveDeviationAlarmType_LowState_TrueState,10507,Variable
-NonExclusiveDeviationAlarmType_LowState_FalseState,10508,Variable
-NonExclusiveDeviationAlarmType_LowLowState,10509,Variable
-NonExclusiveDeviationAlarmType_LowLowState_Id,10510,Variable
-NonExclusiveDeviationAlarmType_LowLowState_Name,10511,Variable
-NonExclusiveDeviationAlarmType_LowLowState_Number,10512,Variable
-NonExclusiveDeviationAlarmType_LowLowState_EffectiveDisplayName,10513,Variable
-NonExclusiveDeviationAlarmType_LowLowState_TransitionTime,10514,Variable
-NonExclusiveDeviationAlarmType_LowLowState_EffectiveTransitionTime,10515,Variable
-NonExclusiveDeviationAlarmType_LowLowState_TrueState,10516,Variable
-NonExclusiveDeviationAlarmType_LowLowState_FalseState,10517,Variable
-NonExclusiveDeviationAlarmType_HighHighLimit,10518,Variable
-NonExclusiveDeviationAlarmType_HighLimit,10519,Variable
-NonExclusiveDeviationAlarmType_LowLimit,10520,Variable
-NonExclusiveDeviationAlarmType_LowLowLimit,10521,Variable
-NonExclusiveDeviationAlarmType_SetpointNode,10522,Variable
-DiscreteAlarmType,10523,ObjectType
-DiscreteAlarmType_EventId,10524,Variable
-DiscreteAlarmType_EventType,10525,Variable
-DiscreteAlarmType_SourceNode,10526,Variable
-DiscreteAlarmType_SourceName,10527,Variable
-DiscreteAlarmType_Time,10528,Variable
-DiscreteAlarmType_ReceiveTime,10529,Variable
-DiscreteAlarmType_LocalTime,10530,Variable
-DiscreteAlarmType_Message,10531,Variable
-DiscreteAlarmType_Severity,10532,Variable
-DiscreteAlarmType_ConditionName,10533,Variable
-DiscreteAlarmType_BranchId,10534,Variable
-DiscreteAlarmType_Retain,10535,Variable
-DiscreteAlarmType_EnabledState,10536,Variable
-DiscreteAlarmType_EnabledState_Id,10537,Variable
-DiscreteAlarmType_EnabledState_Name,10538,Variable
-DiscreteAlarmType_EnabledState_Number,10539,Variable
-DiscreteAlarmType_EnabledState_EffectiveDisplayName,10540,Variable
-DiscreteAlarmType_EnabledState_TransitionTime,10541,Variable
-DiscreteAlarmType_EnabledState_EffectiveTransitionTime,10542,Variable
-DiscreteAlarmType_EnabledState_TrueState,10543,Variable
-DiscreteAlarmType_EnabledState_FalseState,10544,Variable
-DiscreteAlarmType_Quality,10545,Variable
-DiscreteAlarmType_Quality_SourceTimestamp,10546,Variable
-DiscreteAlarmType_LastSeverity,10547,Variable
-DiscreteAlarmType_LastSeverity_SourceTimestamp,10548,Variable
-DiscreteAlarmType_Comment,10549,Variable
-DiscreteAlarmType_Comment_SourceTimestamp,10550,Variable
-DiscreteAlarmType_ClientUserId,10551,Variable
-DiscreteAlarmType_Enable,10552,Method
-DiscreteAlarmType_Disable,10553,Method
-DiscreteAlarmType_AddComment,10554,Method
-DiscreteAlarmType_AddComment_InputArguments,10555,Variable
-DiscreteAlarmType_ConditionRefresh,10556,Method
-DiscreteAlarmType_ConditionRefresh_InputArguments,10557,Variable
-DiscreteAlarmType_AckedState,10558,Variable
-DiscreteAlarmType_AckedState_Id,10559,Variable
-DiscreteAlarmType_AckedState_Name,10560,Variable
-DiscreteAlarmType_AckedState_Number,10561,Variable
-DiscreteAlarmType_AckedState_EffectiveDisplayName,10562,Variable
-DiscreteAlarmType_AckedState_TransitionTime,10563,Variable
-DiscreteAlarmType_AckedState_EffectiveTransitionTime,10564,Variable
-DiscreteAlarmType_AckedState_TrueState,10565,Variable
-DiscreteAlarmType_AckedState_FalseState,10566,Variable
-DiscreteAlarmType_ConfirmedState,10567,Variable
-DiscreteAlarmType_ConfirmedState_Id,10568,Variable
-DiscreteAlarmType_ConfirmedState_Name,10569,Variable
-DiscreteAlarmType_ConfirmedState_Number,10570,Variable
-DiscreteAlarmType_ConfirmedState_EffectiveDisplayName,10571,Variable
-DiscreteAlarmType_ConfirmedState_TransitionTime,10572,Variable
-DiscreteAlarmType_ConfirmedState_EffectiveTransitionTime,10573,Variable
-DiscreteAlarmType_ConfirmedState_TrueState,10574,Variable
-DiscreteAlarmType_ConfirmedState_FalseState,10575,Variable
-DiscreteAlarmType_Acknowledge,10576,Method
-DiscreteAlarmType_Acknowledge_InputArguments,10577,Variable
-DiscreteAlarmType_Confirm,10578,Method
-DiscreteAlarmType_Confirm_InputArguments,10579,Variable
-DiscreteAlarmType_ActiveState,10580,Variable
-DiscreteAlarmType_ActiveState_Id,10581,Variable
-DiscreteAlarmType_ActiveState_Name,10582,Variable
-DiscreteAlarmType_ActiveState_Number,10583,Variable
-DiscreteAlarmType_ActiveState_EffectiveDisplayName,10584,Variable
-DiscreteAlarmType_ActiveState_TransitionTime,10585,Variable
-DiscreteAlarmType_ActiveState_EffectiveTransitionTime,10586,Variable
-DiscreteAlarmType_ActiveState_TrueState,10587,Variable
-DiscreteAlarmType_ActiveState_FalseState,10588,Variable
-DiscreteAlarmType_SuppressedState,10589,Variable
-DiscreteAlarmType_SuppressedState_Id,10590,Variable
-DiscreteAlarmType_SuppressedState_Name,10591,Variable
-DiscreteAlarmType_SuppressedState_Number,10592,Variable
-DiscreteAlarmType_SuppressedState_EffectiveDisplayName,10593,Variable
-DiscreteAlarmType_SuppressedState_TransitionTime,10594,Variable
-DiscreteAlarmType_SuppressedState_EffectiveTransitionTime,10595,Variable
-DiscreteAlarmType_SuppressedState_TrueState,10596,Variable
-DiscreteAlarmType_SuppressedState_FalseState,10597,Variable
-DiscreteAlarmType_ShelvingState,10598,Object
-DiscreteAlarmType_ShelvingState_CurrentState,10599,Variable
-DiscreteAlarmType_ShelvingState_CurrentState_Id,10600,Variable
-DiscreteAlarmType_ShelvingState_CurrentState_Name,10601,Variable
-DiscreteAlarmType_ShelvingState_CurrentState_Number,10602,Variable
-DiscreteAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10603,Variable
-DiscreteAlarmType_ShelvingState_LastTransition,10604,Variable
-DiscreteAlarmType_ShelvingState_LastTransition_Id,10605,Variable
-DiscreteAlarmType_ShelvingState_LastTransition_Name,10606,Variable
-DiscreteAlarmType_ShelvingState_LastTransition_Number,10607,Variable
-DiscreteAlarmType_ShelvingState_LastTransition_TransitionTime,10608,Variable
-DiscreteAlarmType_ShelvingState_UnshelveTime,10609,Variable
-DiscreteAlarmType_ShelvingState_Unshelve,10631,Method
-DiscreteAlarmType_ShelvingState_OneShotShelve,10632,Method
-DiscreteAlarmType_ShelvingState_TimedShelve,10633,Method
-DiscreteAlarmType_ShelvingState_TimedShelve_InputArguments,10634,Variable
-DiscreteAlarmType_SuppressedOrShelved,10635,Variable
-DiscreteAlarmType_MaxTimeShelved,10636,Variable
-OffNormalAlarmType,10637,ObjectType
-OffNormalAlarmType_EventId,10638,Variable
-OffNormalAlarmType_EventType,10639,Variable
-OffNormalAlarmType_SourceNode,10640,Variable
-OffNormalAlarmType_SourceName,10641,Variable
-OffNormalAlarmType_Time,10642,Variable
-OffNormalAlarmType_ReceiveTime,10643,Variable
-OffNormalAlarmType_LocalTime,10644,Variable
-OffNormalAlarmType_Message,10645,Variable
-OffNormalAlarmType_Severity,10646,Variable
-OffNormalAlarmType_ConditionName,10647,Variable
-OffNormalAlarmType_BranchId,10648,Variable
-OffNormalAlarmType_Retain,10649,Variable
-OffNormalAlarmType_EnabledState,10650,Variable
-OffNormalAlarmType_EnabledState_Id,10651,Variable
-OffNormalAlarmType_EnabledState_Name,10652,Variable
-OffNormalAlarmType_EnabledState_Number,10653,Variable
-OffNormalAlarmType_EnabledState_EffectiveDisplayName,10654,Variable
-OffNormalAlarmType_EnabledState_TransitionTime,10655,Variable
-OffNormalAlarmType_EnabledState_EffectiveTransitionTime,10656,Variable
-OffNormalAlarmType_EnabledState_TrueState,10657,Variable
-OffNormalAlarmType_EnabledState_FalseState,10658,Variable
-OffNormalAlarmType_Quality,10659,Variable
-OffNormalAlarmType_Quality_SourceTimestamp,10660,Variable
-OffNormalAlarmType_LastSeverity,10661,Variable
-OffNormalAlarmType_LastSeverity_SourceTimestamp,10662,Variable
-OffNormalAlarmType_Comment,10663,Variable
-OffNormalAlarmType_Comment_SourceTimestamp,10664,Variable
-OffNormalAlarmType_ClientUserId,10665,Variable
-OffNormalAlarmType_Enable,10666,Method
-OffNormalAlarmType_Disable,10667,Method
-OffNormalAlarmType_AddComment,10668,Method
-OffNormalAlarmType_AddComment_InputArguments,10669,Variable
-OffNormalAlarmType_ConditionRefresh,10670,Method
-OffNormalAlarmType_ConditionRefresh_InputArguments,10671,Variable
-OffNormalAlarmType_AckedState,10672,Variable
-OffNormalAlarmType_AckedState_Id,10673,Variable
-OffNormalAlarmType_AckedState_Name,10674,Variable
-OffNormalAlarmType_AckedState_Number,10675,Variable
-OffNormalAlarmType_AckedState_EffectiveDisplayName,10676,Variable
-OffNormalAlarmType_AckedState_TransitionTime,10677,Variable
-OffNormalAlarmType_AckedState_EffectiveTransitionTime,10678,Variable
-OffNormalAlarmType_AckedState_TrueState,10679,Variable
-OffNormalAlarmType_AckedState_FalseState,10680,Variable
-OffNormalAlarmType_ConfirmedState,10681,Variable
-OffNormalAlarmType_ConfirmedState_Id,10682,Variable
-OffNormalAlarmType_ConfirmedState_Name,10683,Variable
-OffNormalAlarmType_ConfirmedState_Number,10684,Variable
-OffNormalAlarmType_ConfirmedState_EffectiveDisplayName,10685,Variable
-OffNormalAlarmType_ConfirmedState_TransitionTime,10686,Variable
-OffNormalAlarmType_ConfirmedState_EffectiveTransitionTime,10687,Variable
-OffNormalAlarmType_ConfirmedState_TrueState,10688,Variable
-OffNormalAlarmType_ConfirmedState_FalseState,10689,Variable
-OffNormalAlarmType_Acknowledge,10690,Method
-OffNormalAlarmType_Acknowledge_InputArguments,10691,Variable
-OffNormalAlarmType_Confirm,10692,Method
-OffNormalAlarmType_Confirm_InputArguments,10693,Variable
-OffNormalAlarmType_ActiveState,10694,Variable
-OffNormalAlarmType_ActiveState_Id,10695,Variable
-OffNormalAlarmType_ActiveState_Name,10696,Variable
-OffNormalAlarmType_ActiveState_Number,10697,Variable
-OffNormalAlarmType_ActiveState_EffectiveDisplayName,10698,Variable
-OffNormalAlarmType_ActiveState_TransitionTime,10699,Variable
-OffNormalAlarmType_ActiveState_EffectiveTransitionTime,10700,Variable
-OffNormalAlarmType_ActiveState_TrueState,10701,Variable
-OffNormalAlarmType_ActiveState_FalseState,10702,Variable
-OffNormalAlarmType_SuppressedState,10703,Variable
-OffNormalAlarmType_SuppressedState_Id,10704,Variable
-OffNormalAlarmType_SuppressedState_Name,10705,Variable
-OffNormalAlarmType_SuppressedState_Number,10706,Variable
-OffNormalAlarmType_SuppressedState_EffectiveDisplayName,10707,Variable
-OffNormalAlarmType_SuppressedState_TransitionTime,10708,Variable
-OffNormalAlarmType_SuppressedState_EffectiveTransitionTime,10709,Variable
-OffNormalAlarmType_SuppressedState_TrueState,10710,Variable
-OffNormalAlarmType_SuppressedState_FalseState,10711,Variable
-OffNormalAlarmType_ShelvingState,10712,Object
-OffNormalAlarmType_ShelvingState_CurrentState,10713,Variable
-OffNormalAlarmType_ShelvingState_CurrentState_Id,10714,Variable
-OffNormalAlarmType_ShelvingState_CurrentState_Name,10715,Variable
-OffNormalAlarmType_ShelvingState_CurrentState_Number,10716,Variable
-OffNormalAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10717,Variable
-OffNormalAlarmType_ShelvingState_LastTransition,10718,Variable
-OffNormalAlarmType_ShelvingState_LastTransition_Id,10719,Variable
-OffNormalAlarmType_ShelvingState_LastTransition_Name,10720,Variable
-OffNormalAlarmType_ShelvingState_LastTransition_Number,10721,Variable
-OffNormalAlarmType_ShelvingState_LastTransition_TransitionTime,10722,Variable
-OffNormalAlarmType_ShelvingState_UnshelveTime,10723,Variable
-OffNormalAlarmType_ShelvingState_Unshelve,10745,Method
-OffNormalAlarmType_ShelvingState_OneShotShelve,10746,Method
-OffNormalAlarmType_ShelvingState_TimedShelve,10747,Method
-OffNormalAlarmType_ShelvingState_TimedShelve_InputArguments,10748,Variable
-OffNormalAlarmType_SuppressedOrShelved,10749,Variable
-OffNormalAlarmType_MaxTimeShelved,10750,Variable
-TripAlarmType,10751,ObjectType
-TripAlarmType_EventId,10752,Variable
-TripAlarmType_EventType,10753,Variable
-TripAlarmType_SourceNode,10754,Variable
-TripAlarmType_SourceName,10755,Variable
-TripAlarmType_Time,10756,Variable
-TripAlarmType_ReceiveTime,10757,Variable
-TripAlarmType_LocalTime,10758,Variable
-TripAlarmType_Message,10759,Variable
-TripAlarmType_Severity,10760,Variable
-TripAlarmType_ConditionName,10761,Variable
-TripAlarmType_BranchId,10762,Variable
-TripAlarmType_Retain,10763,Variable
-TripAlarmType_EnabledState,10764,Variable
-TripAlarmType_EnabledState_Id,10765,Variable
-TripAlarmType_EnabledState_Name,10766,Variable
-TripAlarmType_EnabledState_Number,10767,Variable
-TripAlarmType_EnabledState_EffectiveDisplayName,10768,Variable
-TripAlarmType_EnabledState_TransitionTime,10769,Variable
-TripAlarmType_EnabledState_EffectiveTransitionTime,10770,Variable
-TripAlarmType_EnabledState_TrueState,10771,Variable
-TripAlarmType_EnabledState_FalseState,10772,Variable
-TripAlarmType_Quality,10773,Variable
-TripAlarmType_Quality_SourceTimestamp,10774,Variable
-TripAlarmType_LastSeverity,10775,Variable
-TripAlarmType_LastSeverity_SourceTimestamp,10776,Variable
-TripAlarmType_Comment,10777,Variable
-TripAlarmType_Comment_SourceTimestamp,10778,Variable
-TripAlarmType_ClientUserId,10779,Variable
-TripAlarmType_Enable,10780,Method
-TripAlarmType_Disable,10781,Method
-TripAlarmType_AddComment,10782,Method
-TripAlarmType_AddComment_InputArguments,10783,Variable
-TripAlarmType_ConditionRefresh,10784,Method
-TripAlarmType_ConditionRefresh_InputArguments,10785,Variable
-TripAlarmType_AckedState,10786,Variable
-TripAlarmType_AckedState_Id,10787,Variable
-TripAlarmType_AckedState_Name,10788,Variable
-TripAlarmType_AckedState_Number,10789,Variable
-TripAlarmType_AckedState_EffectiveDisplayName,10790,Variable
-TripAlarmType_AckedState_TransitionTime,10791,Variable
-TripAlarmType_AckedState_EffectiveTransitionTime,10792,Variable
-TripAlarmType_AckedState_TrueState,10793,Variable
-TripAlarmType_AckedState_FalseState,10794,Variable
-TripAlarmType_ConfirmedState,10795,Variable
-TripAlarmType_ConfirmedState_Id,10796,Variable
-TripAlarmType_ConfirmedState_Name,10797,Variable
-TripAlarmType_ConfirmedState_Number,10798,Variable
-TripAlarmType_ConfirmedState_EffectiveDisplayName,10799,Variable
-TripAlarmType_ConfirmedState_TransitionTime,10800,Variable
-TripAlarmType_ConfirmedState_EffectiveTransitionTime,10801,Variable
-TripAlarmType_ConfirmedState_TrueState,10802,Variable
-TripAlarmType_ConfirmedState_FalseState,10803,Variable
-TripAlarmType_Acknowledge,10804,Method
-TripAlarmType_Acknowledge_InputArguments,10805,Variable
-TripAlarmType_Confirm,10806,Method
-TripAlarmType_Confirm_InputArguments,10807,Variable
-TripAlarmType_ActiveState,10808,Variable
-TripAlarmType_ActiveState_Id,10809,Variable
-TripAlarmType_ActiveState_Name,10810,Variable
-TripAlarmType_ActiveState_Number,10811,Variable
-TripAlarmType_ActiveState_EffectiveDisplayName,10812,Variable
-TripAlarmType_ActiveState_TransitionTime,10813,Variable
-TripAlarmType_ActiveState_EffectiveTransitionTime,10814,Variable
-TripAlarmType_ActiveState_TrueState,10815,Variable
-TripAlarmType_ActiveState_FalseState,10816,Variable
-TripAlarmType_SuppressedState,10817,Variable
-TripAlarmType_SuppressedState_Id,10818,Variable
-TripAlarmType_SuppressedState_Name,10819,Variable
-TripAlarmType_SuppressedState_Number,10820,Variable
-TripAlarmType_SuppressedState_EffectiveDisplayName,10821,Variable
-TripAlarmType_SuppressedState_TransitionTime,10822,Variable
-TripAlarmType_SuppressedState_EffectiveTransitionTime,10823,Variable
-TripAlarmType_SuppressedState_TrueState,10824,Variable
-TripAlarmType_SuppressedState_FalseState,10825,Variable
-TripAlarmType_ShelvingState,10826,Object
-TripAlarmType_ShelvingState_CurrentState,10827,Variable
-TripAlarmType_ShelvingState_CurrentState_Id,10828,Variable
-TripAlarmType_ShelvingState_CurrentState_Name,10829,Variable
-TripAlarmType_ShelvingState_CurrentState_Number,10830,Variable
-TripAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10831,Variable
-TripAlarmType_ShelvingState_LastTransition,10832,Variable
-TripAlarmType_ShelvingState_LastTransition_Id,10833,Variable
-TripAlarmType_ShelvingState_LastTransition_Name,10834,Variable
-TripAlarmType_ShelvingState_LastTransition_Number,10835,Variable
-TripAlarmType_ShelvingState_LastTransition_TransitionTime,10836,Variable
-TripAlarmType_ShelvingState_UnshelveTime,10837,Variable
-TripAlarmType_ShelvingState_Unshelve,10859,Method
-TripAlarmType_ShelvingState_OneShotShelve,10860,Method
-TripAlarmType_ShelvingState_TimedShelve,10861,Method
-TripAlarmType_ShelvingState_TimedShelve_InputArguments,10862,Variable
-TripAlarmType_SuppressedOrShelved,10863,Variable
-TripAlarmType_MaxTimeShelved,10864,Variable
-AuditConditionShelvingEventType,11093,ObjectType
-AuditConditionShelvingEventType_EventId,11094,Variable
-AuditConditionShelvingEventType_EventType,11095,Variable
-AuditConditionShelvingEventType_SourceNode,11096,Variable
-AuditConditionShelvingEventType_SourceName,11097,Variable
-AuditConditionShelvingEventType_Time,11098,Variable
-AuditConditionShelvingEventType_ReceiveTime,11099,Variable
-AuditConditionShelvingEventType_LocalTime,11100,Variable
-AuditConditionShelvingEventType_Message,11101,Variable
-AuditConditionShelvingEventType_Severity,11102,Variable
-AuditConditionShelvingEventType_ActionTimeStamp,11103,Variable
-AuditConditionShelvingEventType_Status,11104,Variable
-AuditConditionShelvingEventType_ServerId,11105,Variable
-AuditConditionShelvingEventType_ClientAuditEntryId,11106,Variable
-AuditConditionShelvingEventType_ClientUserId,11107,Variable
-AuditConditionShelvingEventType_MethodId,11108,Variable
-AuditConditionShelvingEventType_InputArguments,11109,Variable
-TwoStateVariableType_TrueState,11110,Variable
-TwoStateVariableType_FalseState,11111,Variable
-ConditionType_ConditionClassId,11112,Variable
-ConditionType_ConditionClassName,11113,Variable
-DialogConditionType_ConditionClassId,11114,Variable
-DialogConditionType_ConditionClassName,11115,Variable
-AcknowledgeableConditionType_ConditionClassId,11116,Variable
-AcknowledgeableConditionType_ConditionClassName,11117,Variable
-AlarmConditionType_ConditionClassId,11118,Variable
-AlarmConditionType_ConditionClassName,11119,Variable
-AlarmConditionType_InputNode,11120,Variable
-LimitAlarmType_ConditionClassId,11121,Variable
-LimitAlarmType_ConditionClassName,11122,Variable
-LimitAlarmType_InputNode,11123,Variable
-LimitAlarmType_HighHighLimit,11124,Variable
-LimitAlarmType_HighLimit,11125,Variable
-LimitAlarmType_LowLimit,11126,Variable
-LimitAlarmType_LowLowLimit,11127,Variable
-ExclusiveLimitAlarmType_ConditionClassId,11128,Variable
-ExclusiveLimitAlarmType_ConditionClassName,11129,Variable
-ExclusiveLimitAlarmType_InputNode,11130,Variable
-ExclusiveLevelAlarmType_ConditionClassId,11131,Variable
-ExclusiveLevelAlarmType_ConditionClassName,11132,Variable
-ExclusiveLevelAlarmType_InputNode,11133,Variable
-ExclusiveRateOfChangeAlarmType_ConditionClassId,11134,Variable
-ExclusiveRateOfChangeAlarmType_ConditionClassName,11135,Variable
-ExclusiveRateOfChangeAlarmType_InputNode,11136,Variable
-ExclusiveDeviationAlarmType_ConditionClassId,11137,Variable
-ExclusiveDeviationAlarmType_ConditionClassName,11138,Variable
-ExclusiveDeviationAlarmType_InputNode,11139,Variable
-NonExclusiveLimitAlarmType_ConditionClassId,11140,Variable
-NonExclusiveLimitAlarmType_ConditionClassName,11141,Variable
-NonExclusiveLimitAlarmType_InputNode,11142,Variable
-NonExclusiveLevelAlarmType_ConditionClassId,11143,Variable
-NonExclusiveLevelAlarmType_ConditionClassName,11144,Variable
-NonExclusiveLevelAlarmType_InputNode,11145,Variable
-NonExclusiveRateOfChangeAlarmType_ConditionClassId,11146,Variable
-NonExclusiveRateOfChangeAlarmType_ConditionClassName,11147,Variable
-NonExclusiveRateOfChangeAlarmType_InputNode,11148,Variable
-NonExclusiveDeviationAlarmType_ConditionClassId,11149,Variable
-NonExclusiveDeviationAlarmType_ConditionClassName,11150,Variable
-NonExclusiveDeviationAlarmType_InputNode,11151,Variable
-DiscreteAlarmType_ConditionClassId,11152,Variable
-DiscreteAlarmType_ConditionClassName,11153,Variable
-DiscreteAlarmType_InputNode,11154,Variable
-OffNormalAlarmType_ConditionClassId,11155,Variable
-OffNormalAlarmType_ConditionClassName,11156,Variable
-OffNormalAlarmType_InputNode,11157,Variable
-OffNormalAlarmType_NormalState,11158,Variable
-TripAlarmType_ConditionClassId,11159,Variable
-TripAlarmType_ConditionClassName,11160,Variable
-TripAlarmType_InputNode,11161,Variable
-TripAlarmType_NormalState,11162,Variable
-BaseConditionClassType,11163,ObjectType
-ProcessConditionClassType,11164,ObjectType
-MaintenanceConditionClassType,11165,ObjectType
-SystemConditionClassType,11166,ObjectType
-HistoricalDataConfigurationType_AggregateConfiguration_TreatUncertainAsBad,11168,Variable
-HistoricalDataConfigurationType_AggregateConfiguration_PercentDataBad,11169,Variable
-HistoricalDataConfigurationType_AggregateConfiguration_PercentDataGood,11170,Variable
-HistoricalDataConfigurationType_AggregateConfiguration_UseSlopedExtrapolation,11171,Variable
-HistoryServerCapabilitiesType_AggregateFunctions,11172,Object
-AggregateConfigurationType,11187,ObjectType
-AggregateConfigurationType_TreatUncertainAsBad,11188,Variable
-AggregateConfigurationType_PercentDataBad,11189,Variable
-AggregateConfigurationType_PercentDataGood,11190,Variable
-AggregateConfigurationType_UseSlopedExtrapolation,11191,Variable
-HistoryServerCapabilities,11192,Object
-HistoryServerCapabilities_AccessHistoryDataCapability,11193,Variable
-HistoryServerCapabilities_InsertDataCapability,11196,Variable
-HistoryServerCapabilities_ReplaceDataCapability,11197,Variable
-HistoryServerCapabilities_UpdateDataCapability,11198,Variable
-HistoryServerCapabilities_DeleteRawCapability,11199,Variable
-HistoryServerCapabilities_DeleteAtTimeCapability,11200,Variable
-HistoryServerCapabilities_AggregateFunctions,11201,Object
-HAConfiguration,11202,Object
-HAConfiguration_AggregateConfiguration,11203,Object
-HAConfiguration_AggregateConfiguration_TreatUncertainAsBad,11204,Variable
-HAConfiguration_AggregateConfiguration_PercentDataBad,11205,Variable
-HAConfiguration_AggregateConfiguration_PercentDataGood,11206,Variable
-HAConfiguration_AggregateConfiguration_UseSlopedExtrapolation,11207,Variable
-HAConfiguration_Stepped,11208,Variable
-HAConfiguration_Definition,11209,Variable
-HAConfiguration_MaxTimeInterval,11210,Variable
-HAConfiguration_MinTimeInterval,11211,Variable
-HAConfiguration_ExceptionDeviation,11212,Variable
-HAConfiguration_ExceptionDeviationFormat,11213,Variable
-Annotations,11214,Variable
-HistoricalEventFilter,11215,Variable
-ModificationInfo,11216,DataType
-HistoryModifiedData,11217,DataType
-ModificationInfo_Encoding_DefaultXml,11218,Object
-HistoryModifiedData_Encoding_DefaultXml,11219,Object
-ModificationInfo_Encoding_DefaultBinary,11226,Object
-HistoryModifiedData_Encoding_DefaultBinary,11227,Object
-HistoryUpdateType,11234,DataType
-MultiStateValueDiscreteType,11238,VariableType
-MultiStateValueDiscreteType_Definition,11239,Variable
-MultiStateValueDiscreteType_ValuePrecision,11240,Variable
-MultiStateValueDiscreteType_EnumValues,11241,Variable
-HistoryServerCapabilities_AccessHistoryEventsCapability,11242,Variable
-HistoryServerCapabilitiesType_MaxReturnDataValues,11268,Variable
-HistoryServerCapabilitiesType_MaxReturnEventValues,11269,Variable
-HistoryServerCapabilitiesType_InsertAnnotationCapability,11270,Variable
-HistoryServerCapabilities_MaxReturnDataValues,11273,Variable
-HistoryServerCapabilities_MaxReturnEventValues,11274,Variable
-HistoryServerCapabilities_InsertAnnotationCapability,11275,Variable
-HistoryServerCapabilitiesType_InsertEventCapability,11278,Variable
-HistoryServerCapabilitiesType_ReplaceEventCapability,11279,Variable
-HistoryServerCapabilitiesType_UpdateEventCapability,11280,Variable
-HistoryServerCapabilities_InsertEventCapability,11281,Variable
-HistoryServerCapabilities_ReplaceEventCapability,11282,Variable
-HistoryServerCapabilities_UpdateEventCapability,11283,Variable
-AggregateFunction_TimeAverage2,11285,Object
-AggregateFunction_Minimum2,11286,Object
-AggregateFunction_Maximum2,11287,Object
-AggregateFunction_Range2,11288,Object
-AggregateFunction_WorstQuality2,11292,Object
-PerformUpdateType,11293,DataType
-UpdateStructureDataDetails,11295,DataType
-UpdateStructureDataDetails_Encoding_DefaultXml,11296,Object
-UpdateStructureDataDetails_Encoding_DefaultBinary,11300,Object
-AggregateFunction_Total2,11304,Object
-AggregateFunction_MinimumActualTime2,11305,Object
-AggregateFunction_MaximumActualTime2,11306,Object
-AggregateFunction_DurationInStateZero,11307,Object
-AggregateFunction_DurationInStateNonZero,11308,Object
-Server_ServerRedundancy_CurrentServerId,11312,Variable
-Server_ServerRedundancy_RedundantServerArray,11313,Variable
-Server_ServerRedundancy_ServerUriArray,11314,Variable
-ShelvedStateMachineType_UnshelvedToTimedShelved_TransitionNumber,11322,Variable
-ShelvedStateMachineType_UnshelvedToOneShotShelved_TransitionNumber,11323,Variable
-ShelvedStateMachineType_TimedShelvedToUnshelved_TransitionNumber,11324,Variable
-ShelvedStateMachineType_TimedShelvedToOneShotShelved_TransitionNumber,11325,Variable
-ShelvedStateMachineType_OneShotShelvedToUnshelved_TransitionNumber,11326,Variable
-ShelvedStateMachineType_OneShotShelvedToTimedShelved_TransitionNumber,11327,Variable
-ExclusiveLimitStateMachineType_LowLowToLow_TransitionNumber,11340,Variable
-ExclusiveLimitStateMachineType_LowToLowLow_TransitionNumber,11341,Variable
-ExclusiveLimitStateMachineType_HighHighToHigh_TransitionNumber,11342,Variable
-ExclusiveLimitStateMachineType_HighToHighHigh_TransitionNumber,11343,Variable
-AggregateFunction_StandardDeviationSample,11426,Object
-AggregateFunction_StandardDeviationPopulation,11427,Object
-AggregateFunction_VarianceSample,11428,Object
-AggregateFunction_VariancePopulation,11429,Object
-EnumStrings,11432,Variable
-ValueAsText,11433,Variable
-ProgressEventType,11436,ObjectType
-ProgressEventType_EventId,11437,Variable
-ProgressEventType_EventType,11438,Variable
-ProgressEventType_SourceNode,11439,Variable
-ProgressEventType_SourceName,11440,Variable
-ProgressEventType_Time,11441,Variable
-ProgressEventType_ReceiveTime,11442,Variable
-ProgressEventType_LocalTime,11443,Variable
-ProgressEventType_Message,11444,Variable
-ProgressEventType_Severity,11445,Variable
-SystemStatusChangeEventType,11446,ObjectType
-SystemStatusChangeEventType_EventId,11447,Variable
-SystemStatusChangeEventType_EventType,11448,Variable
-SystemStatusChangeEventType_SourceNode,11449,Variable
-SystemStatusChangeEventType_SourceName,11450,Variable
-SystemStatusChangeEventType_Time,11451,Variable
-SystemStatusChangeEventType_ReceiveTime,11452,Variable
-SystemStatusChangeEventType_LocalTime,11453,Variable
-SystemStatusChangeEventType_Message,11454,Variable
-SystemStatusChangeEventType_Severity,11455,Variable
-TransitionVariableType_EffectiveTransitionTime,11456,Variable
-FiniteTransitionVariableType_EffectiveTransitionTime,11457,Variable
-StateMachineType_LastTransition_EffectiveTransitionTime,11458,Variable
-FiniteStateMachineType_LastTransition_EffectiveTransitionTime,11459,Variable
-TransitionEventType_Transition_EffectiveTransitionTime,11460,Variable
-MultiStateValueDiscreteType_ValueAsText,11461,Variable
-ProgramTransitionEventType_Transition_EffectiveTransitionTime,11462,Variable
-ProgramTransitionAuditEventType_Transition_EffectiveTransitionTime,11463,Variable
-ProgramStateMachineType_LastTransition_EffectiveTransitionTime,11464,Variable
-ShelvedStateMachineType_LastTransition_EffectiveTransitionTime,11465,Variable
-AlarmConditionType_ShelvingState_LastTransition_EffectiveTransitionTime,11466,Variable
-LimitAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11467,Variable
-ExclusiveLimitStateMachineType_LastTransition_EffectiveTransitionTime,11468,Variable
-ExclusiveLimitAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11469,Variable
-ExclusiveLimitAlarmType_LimitState_LastTransition_EffectiveTransitionTime,11470,Variable
-ExclusiveLevelAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11471,Variable
-ExclusiveLevelAlarmType_LimitState_LastTransition_EffectiveTransitionTime,11472,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11473,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_EffectiveTransitionTime,11474,Variable
-ExclusiveDeviationAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11475,Variable
-ExclusiveDeviationAlarmType_LimitState_LastTransition_EffectiveTransitionTime,11476,Variable
-NonExclusiveLimitAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11477,Variable
-NonExclusiveLevelAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11478,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11479,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11480,Variable
-DiscreteAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11481,Variable
-OffNormalAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11482,Variable
-TripAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11483,Variable
-AuditActivateSessionEventType_SecureChannelId,11485,Variable
-OptionSetType,11487,VariableType
-OptionSetType_OptionSetValues,11488,Variable
-ServerType_GetMonitoredItems,11489,Method
-ServerType_GetMonitoredItems_InputArguments,11490,Variable
-ServerType_GetMonitoredItems_OutputArguments,11491,Variable
-Server_GetMonitoredItems,11492,Method
-Server_GetMonitoredItems_InputArguments,11493,Variable
-Server_GetMonitoredItems_OutputArguments,11494,Variable
-GetMonitoredItemsMethodType,11495,Method
-GetMonitoredItemsMethodType_InputArguments,11496,Variable
-GetMonitoredItemsMethodType_OutputArguments,11497,Variable
-MaxStringLength,11498,Variable
-HistoricalDataConfigurationType_StartOfArchive,11499,Variable
-HistoricalDataConfigurationType_StartOfOnlineArchive,11500,Variable
-HistoryServerCapabilitiesType_DeleteEventCapability,11501,Variable
-HistoryServerCapabilities_DeleteEventCapability,11502,Variable
-HAConfiguration_StartOfArchive,11503,Variable
-HAConfiguration_StartOfOnlineArchive,11504,Variable
-AggregateFunction_StartBound,11505,Object
-AggregateFunction_EndBound,11506,Object
-AggregateFunction_DeltaBounds,11507,Object
-ModellingRule_OptionalPlaceholder,11508,Object
-ModellingRule_OptionalPlaceholder_NamingRule,11509,Variable
-ModellingRule_MandatoryPlaceholder,11510,Object
-ModellingRule_MandatoryPlaceholder_NamingRule,11511,Variable
-MaxArrayLength,11512,Variable
-EngineeringUnits,11513,Variable
-ServerType_ServerCapabilities_MaxArrayLength,11514,Variable
-ServerType_ServerCapabilities_MaxStringLength,11515,Variable
-ServerType_ServerCapabilities_OperationLimits,11516,Object
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerRead,11517,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerWrite,11519,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall,11521,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerBrowse,11522,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes,11523,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds,11524,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement,11525,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall,11526,Variable
-ServerType_Namespaces,11527,Object
-ServerCapabilitiesType_MaxArrayLength,11549,Variable
-ServerCapabilitiesType_MaxStringLength,11550,Variable
-ServerCapabilitiesType_OperationLimits,11551,Object
-ServerCapabilitiesType_OperationLimits_MaxNodesPerRead,11552,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerWrite,11554,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerMethodCall,11556,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerBrowse,11557,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerRegisterNodes,11558,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds,11559,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerNodeManagement,11560,Variable
-ServerCapabilitiesType_OperationLimits_MaxMonitoredItemsPerCall,11561,Variable
-ServerCapabilitiesType_VendorCapability_Placeholder,11562,Variable
-OperationLimitsType,11564,ObjectType
-OperationLimitsType_MaxNodesPerRead,11565,Variable
-OperationLimitsType_MaxNodesPerWrite,11567,Variable
-OperationLimitsType_MaxNodesPerMethodCall,11569,Variable
-OperationLimitsType_MaxNodesPerBrowse,11570,Variable
-OperationLimitsType_MaxNodesPerRegisterNodes,11571,Variable
-OperationLimitsType_MaxNodesPerTranslateBrowsePathsToNodeIds,11572,Variable
-OperationLimitsType_MaxNodesPerNodeManagement,11573,Variable
-OperationLimitsType_MaxMonitoredItemsPerCall,11574,Variable
-FileType,11575,ObjectType
-FileType_Size,11576,Variable
-FileType_OpenCount,11579,Variable
-FileType_Open,11580,Method
-FileType_Open_InputArguments,11581,Variable
-FileType_Open_OutputArguments,11582,Variable
-FileType_Close,11583,Method
-FileType_Close_InputArguments,11584,Variable
-FileType_Read,11585,Method
-FileType_Read_InputArguments,11586,Variable
-FileType_Read_OutputArguments,11587,Variable
-FileType_Write,11588,Method
-FileType_Write_InputArguments,11589,Variable
-FileType_GetPosition,11590,Method
-FileType_GetPosition_InputArguments,11591,Variable
-FileType_GetPosition_OutputArguments,11592,Variable
-FileType_SetPosition,11593,Method
-FileType_SetPosition_InputArguments,11594,Variable
-AddressSpaceFileType,11595,ObjectType
-AddressSpaceFileType_Size,11596,Variable
-AddressSpaceFileType_OpenCount,11599,Variable
-AddressSpaceFileType_Open,11600,Method
-AddressSpaceFileType_Open_InputArguments,11601,Variable
-AddressSpaceFileType_Open_OutputArguments,11602,Variable
-AddressSpaceFileType_Close,11603,Method
-AddressSpaceFileType_Close_InputArguments,11604,Variable
-AddressSpaceFileType_Read,11605,Method
-AddressSpaceFileType_Read_InputArguments,11606,Variable
-AddressSpaceFileType_Read_OutputArguments,11607,Variable
-AddressSpaceFileType_Write,11608,Method
-AddressSpaceFileType_Write_InputArguments,11609,Variable
-AddressSpaceFileType_GetPosition,11610,Method
-AddressSpaceFileType_GetPosition_InputArguments,11611,Variable
-AddressSpaceFileType_GetPosition_OutputArguments,11612,Variable
-AddressSpaceFileType_SetPosition,11613,Method
-AddressSpaceFileType_SetPosition_InputArguments,11614,Variable
-AddressSpaceFileType_ExportNamespace,11615,Method
-NamespaceMetadataType,11616,ObjectType
-NamespaceMetadataType_NamespaceUri,11617,Variable
-NamespaceMetadataType_NamespaceVersion,11618,Variable
-NamespaceMetadataType_NamespacePublicationDate,11619,Variable
-NamespaceMetadataType_IsNamespaceSubset,11620,Variable
-NamespaceMetadataType_StaticNodeIdTypes,11621,Variable
-NamespaceMetadataType_StaticNumericNodeIdRange,11622,Variable
-NamespaceMetadataType_StaticStringNodeIdPattern,11623,Variable
-NamespaceMetadataType_NamespaceFile,11624,Object
-NamespaceMetadataType_NamespaceFile_Size,11625,Variable
-NamespaceMetadataType_NamespaceFile_OpenCount,11628,Variable
-NamespaceMetadataType_NamespaceFile_Open,11629,Method
-NamespaceMetadataType_NamespaceFile_Open_InputArguments,11630,Variable
-NamespaceMetadataType_NamespaceFile_Open_OutputArguments,11631,Variable
-NamespaceMetadataType_NamespaceFile_Close,11632,Method
-NamespaceMetadataType_NamespaceFile_Close_InputArguments,11633,Variable
-NamespaceMetadataType_NamespaceFile_Read,11634,Method
-NamespaceMetadataType_NamespaceFile_Read_InputArguments,11635,Variable
-NamespaceMetadataType_NamespaceFile_Read_OutputArguments,11636,Variable
-NamespaceMetadataType_NamespaceFile_Write,11637,Method
-NamespaceMetadataType_NamespaceFile_Write_InputArguments,11638,Variable
-NamespaceMetadataType_NamespaceFile_GetPosition,11639,Method
-NamespaceMetadataType_NamespaceFile_GetPosition_InputArguments,11640,Variable
-NamespaceMetadataType_NamespaceFile_GetPosition_OutputArguments,11641,Variable
-NamespaceMetadataType_NamespaceFile_SetPosition,11642,Method
-NamespaceMetadataType_NamespaceFile_SetPosition_InputArguments,11643,Variable
-NamespaceMetadataType_NamespaceFile_ExportNamespace,11644,Method
-NamespacesType,11645,ObjectType
-NamespacesType_NamespaceIdentifier_Placeholder,11646,Object
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceUri,11647,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceVersion,11648,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespacePublicationDate,11649,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_IsNamespaceSubset,11650,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_StaticNodeIdTypes,11651,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_StaticNumericNodeIdRange,11652,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_StaticStringNodeIdPattern,11653,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile,11654,Object
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Size,11655,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_OpenCount,11658,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open,11659,Method
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_InputArguments,11660,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_OutputArguments,11661,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close,11662,Method
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close_InputArguments,11663,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read,11664,Method
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_InputArguments,11665,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_OutputArguments,11666,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write,11667,Method
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write_InputArguments,11668,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition,11669,Method
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_InputArguments,11670,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_OutputArguments,11671,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition,11672,Method
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition_InputArguments,11673,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_ExportNamespace,11674,Method
-SystemStatusChangeEventType_SystemState,11696,Variable
-SamplingIntervalDiagnosticsType_SampledMonitoredItemsCount,11697,Variable
-SamplingIntervalDiagnosticsType_MaxSampledMonitoredItemsCount,11698,Variable
-SamplingIntervalDiagnosticsType_DisabledMonitoredItemsSamplingCount,11699,Variable
-OptionSetType_BitMask,11701,Variable
-Server_ServerCapabilities_MaxArrayLength,11702,Variable
-Server_ServerCapabilities_MaxStringLength,11703,Variable
-Server_ServerCapabilities_OperationLimits,11704,Object
-Server_ServerCapabilities_OperationLimits_MaxNodesPerRead,11705,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerWrite,11707,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall,11709,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerBrowse,11710,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes,11711,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds,11712,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement,11713,Variable
-Server_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall,11714,Variable
-Server_Namespaces,11715,Object
-BitFieldMaskDataType,11737,DataType
-OpenMethodType,11738,Method
-OpenMethodType_InputArguments,11739,Variable
-OpenMethodType_OutputArguments,11740,Variable
-CloseMethodType,11741,Method
-CloseMethodType_InputArguments,11742,Variable
-ReadMethodType,11743,Method
-ReadMethodType_InputArguments,11744,Variable
-ReadMethodType_OutputArguments,11745,Variable
-WriteMethodType,11746,Method
-WriteMethodType_InputArguments,11747,Variable
-GetPositionMethodType,11748,Method
-GetPositionMethodType_InputArguments,11749,Variable
-GetPositionMethodType_OutputArguments,11750,Variable
-SetPositionMethodType,11751,Method
-SetPositionMethodType_InputArguments,11752,Variable
-SystemOffNormalAlarmType,11753,ObjectType
-SystemOffNormalAlarmType_EventId,11754,Variable
-SystemOffNormalAlarmType_EventType,11755,Variable
-SystemOffNormalAlarmType_SourceNode,11756,Variable
-SystemOffNormalAlarmType_SourceName,11757,Variable
-SystemOffNormalAlarmType_Time,11758,Variable
-SystemOffNormalAlarmType_ReceiveTime,11759,Variable
-SystemOffNormalAlarmType_LocalTime,11760,Variable
-SystemOffNormalAlarmType_Message,11761,Variable
-SystemOffNormalAlarmType_Severity,11762,Variable
-SystemOffNormalAlarmType_ConditionClassId,11763,Variable
-SystemOffNormalAlarmType_ConditionClassName,11764,Variable
-SystemOffNormalAlarmType_ConditionName,11765,Variable
-SystemOffNormalAlarmType_BranchId,11766,Variable
-SystemOffNormalAlarmType_Retain,11767,Variable
-SystemOffNormalAlarmType_EnabledState,11768,Variable
-SystemOffNormalAlarmType_EnabledState_Id,11769,Variable
-SystemOffNormalAlarmType_EnabledState_Name,11770,Variable
-SystemOffNormalAlarmType_EnabledState_Number,11771,Variable
-SystemOffNormalAlarmType_EnabledState_EffectiveDisplayName,11772,Variable
-SystemOffNormalAlarmType_EnabledState_TransitionTime,11773,Variable
-SystemOffNormalAlarmType_EnabledState_EffectiveTransitionTime,11774,Variable
-SystemOffNormalAlarmType_EnabledState_TrueState,11775,Variable
-SystemOffNormalAlarmType_EnabledState_FalseState,11776,Variable
-SystemOffNormalAlarmType_Quality,11777,Variable
-SystemOffNormalAlarmType_Quality_SourceTimestamp,11778,Variable
-SystemOffNormalAlarmType_LastSeverity,11779,Variable
-SystemOffNormalAlarmType_LastSeverity_SourceTimestamp,11780,Variable
-SystemOffNormalAlarmType_Comment,11781,Variable
-SystemOffNormalAlarmType_Comment_SourceTimestamp,11782,Variable
-SystemOffNormalAlarmType_ClientUserId,11783,Variable
-SystemOffNormalAlarmType_Disable,11784,Method
-SystemOffNormalAlarmType_Enable,11785,Method
-SystemOffNormalAlarmType_AddComment,11786,Method
-SystemOffNormalAlarmType_AddComment_InputArguments,11787,Variable
-SystemOffNormalAlarmType_ConditionRefresh,11788,Method
-SystemOffNormalAlarmType_ConditionRefresh_InputArguments,11789,Variable
-SystemOffNormalAlarmType_AckedState,11790,Variable
-SystemOffNormalAlarmType_AckedState_Id,11791,Variable
-SystemOffNormalAlarmType_AckedState_Name,11792,Variable
-SystemOffNormalAlarmType_AckedState_Number,11793,Variable
-SystemOffNormalAlarmType_AckedState_EffectiveDisplayName,11794,Variable
-SystemOffNormalAlarmType_AckedState_TransitionTime,11795,Variable
-SystemOffNormalAlarmType_AckedState_EffectiveTransitionTime,11796,Variable
-SystemOffNormalAlarmType_AckedState_TrueState,11797,Variable
-SystemOffNormalAlarmType_AckedState_FalseState,11798,Variable
-SystemOffNormalAlarmType_ConfirmedState,11799,Variable
-SystemOffNormalAlarmType_ConfirmedState_Id,11800,Variable
-SystemOffNormalAlarmType_ConfirmedState_Name,11801,Variable
-SystemOffNormalAlarmType_ConfirmedState_Number,11802,Variable
-SystemOffNormalAlarmType_ConfirmedState_EffectiveDisplayName,11803,Variable
-SystemOffNormalAlarmType_ConfirmedState_TransitionTime,11804,Variable
-SystemOffNormalAlarmType_ConfirmedState_EffectiveTransitionTime,11805,Variable
-SystemOffNormalAlarmType_ConfirmedState_TrueState,11806,Variable
-SystemOffNormalAlarmType_ConfirmedState_FalseState,11807,Variable
-SystemOffNormalAlarmType_Acknowledge,11808,Method
-SystemOffNormalAlarmType_Acknowledge_InputArguments,11809,Variable
-SystemOffNormalAlarmType_Confirm,11810,Method
-SystemOffNormalAlarmType_Confirm_InputArguments,11811,Variable
-SystemOffNormalAlarmType_ActiveState,11812,Variable
-SystemOffNormalAlarmType_ActiveState_Id,11813,Variable
-SystemOffNormalAlarmType_ActiveState_Name,11814,Variable
-SystemOffNormalAlarmType_ActiveState_Number,11815,Variable
-SystemOffNormalAlarmType_ActiveState_EffectiveDisplayName,11816,Variable
-SystemOffNormalAlarmType_ActiveState_TransitionTime,11817,Variable
-SystemOffNormalAlarmType_ActiveState_EffectiveTransitionTime,11818,Variable
-SystemOffNormalAlarmType_ActiveState_TrueState,11819,Variable
-SystemOffNormalAlarmType_ActiveState_FalseState,11820,Variable
-SystemOffNormalAlarmType_InputNode,11821,Variable
-SystemOffNormalAlarmType_SuppressedState,11822,Variable
-SystemOffNormalAlarmType_SuppressedState_Id,11823,Variable
-SystemOffNormalAlarmType_SuppressedState_Name,11824,Variable
-SystemOffNormalAlarmType_SuppressedState_Number,11825,Variable
-SystemOffNormalAlarmType_SuppressedState_EffectiveDisplayName,11826,Variable
-SystemOffNormalAlarmType_SuppressedState_TransitionTime,11827,Variable
-SystemOffNormalAlarmType_SuppressedState_EffectiveTransitionTime,11828,Variable
-SystemOffNormalAlarmType_SuppressedState_TrueState,11829,Variable
-SystemOffNormalAlarmType_SuppressedState_FalseState,11830,Variable
-SystemOffNormalAlarmType_ShelvingState,11831,Object
-SystemOffNormalAlarmType_ShelvingState_CurrentState,11832,Variable
-SystemOffNormalAlarmType_ShelvingState_CurrentState_Id,11833,Variable
-SystemOffNormalAlarmType_ShelvingState_CurrentState_Name,11834,Variable
-SystemOffNormalAlarmType_ShelvingState_CurrentState_Number,11835,Variable
-SystemOffNormalAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,11836,Variable
-SystemOffNormalAlarmType_ShelvingState_LastTransition,11837,Variable
-SystemOffNormalAlarmType_ShelvingState_LastTransition_Id,11838,Variable
-SystemOffNormalAlarmType_ShelvingState_LastTransition_Name,11839,Variable
-SystemOffNormalAlarmType_ShelvingState_LastTransition_Number,11840,Variable
-SystemOffNormalAlarmType_ShelvingState_LastTransition_TransitionTime,11841,Variable
-SystemOffNormalAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11842,Variable
-SystemOffNormalAlarmType_ShelvingState_UnshelveTime,11843,Variable
-SystemOffNormalAlarmType_ShelvingState_Unshelve,11844,Method
-SystemOffNormalAlarmType_ShelvingState_OneShotShelve,11845,Method
-SystemOffNormalAlarmType_ShelvingState_TimedShelve,11846,Method
-SystemOffNormalAlarmType_ShelvingState_TimedShelve_InputArguments,11847,Variable
-SystemOffNormalAlarmType_SuppressedOrShelved,11848,Variable
-SystemOffNormalAlarmType_MaxTimeShelved,11849,Variable
-SystemOffNormalAlarmType_NormalState,11850,Variable
-AuditConditionCommentEventType_Comment,11851,Variable
-AuditConditionRespondEventType_SelectedResponse,11852,Variable
-AuditConditionAcknowledgeEventType_Comment,11853,Variable
-AuditConditionConfirmEventType_Comment,11854,Variable
-AuditConditionShelvingEventType_ShelvingTime,11855,Variable
-AuditProgramTransitionEventType,11856,ObjectType
-AuditProgramTransitionEventType_EventId,11857,Variable
-AuditProgramTransitionEventType_EventType,11858,Variable
-AuditProgramTransitionEventType_SourceNode,11859,Variable
-AuditProgramTransitionEventType_SourceName,11860,Variable
-AuditProgramTransitionEventType_Time,11861,Variable
-AuditProgramTransitionEventType_ReceiveTime,11862,Variable
-AuditProgramTransitionEventType_LocalTime,11863,Variable
-AuditProgramTransitionEventType_Message,11864,Variable
-AuditProgramTransitionEventType_Severity,11865,Variable
-AuditProgramTransitionEventType_ActionTimeStamp,11866,Variable
-AuditProgramTransitionEventType_Status,11867,Variable
-AuditProgramTransitionEventType_ServerId,11868,Variable
-AuditProgramTransitionEventType_ClientAuditEntryId,11869,Variable
-AuditProgramTransitionEventType_ClientUserId,11870,Variable
-AuditProgramTransitionEventType_MethodId,11871,Variable
-AuditProgramTransitionEventType_InputArguments,11872,Variable
-AuditProgramTransitionEventType_OldStateId,11873,Variable
-AuditProgramTransitionEventType_NewStateId,11874,Variable
-AuditProgramTransitionEventType_TransitionNumber,11875,Variable
-HistoricalDataConfigurationType_AggregateFunctions,11876,Object
-HAConfiguration_AggregateFunctions,11877,Object
-NodeClass_EnumValues,11878,Variable
-InstanceNode,11879,DataType
-TypeNode,11880,DataType
-NodeAttributesMask_EnumValues,11881,Variable
-BrowseResultMask_EnumValues,11883,Variable
-HistoryUpdateType_EnumValues,11884,Variable
-PerformUpdateType_EnumValues,11885,Variable
-InstanceNode_Encoding_DefaultXml,11887,Object
-TypeNode_Encoding_DefaultXml,11888,Object
-InstanceNode_Encoding_DefaultBinary,11889,Object
-TypeNode_Encoding_DefaultBinary,11890,Object
-SessionDiagnosticsObjectType_SessionDiagnostics_UnauthorizedRequestCount,11891,Variable
-SessionDiagnosticsVariableType_UnauthorizedRequestCount,11892,Variable
-OpenFileMode,11939,DataType
-OpenFileMode_EnumValues,11940,Variable
-ModelChangeStructureVerbMask,11941,DataType
-ModelChangeStructureVerbMask_EnumValues,11942,Variable
-EndpointUrlListDataType,11943,DataType
-NetworkGroupDataType,11944,DataType
-NonTransparentNetworkRedundancyType,11945,ObjectType
-NonTransparentNetworkRedundancyType_RedundancySupport,11946,Variable
-NonTransparentNetworkRedundancyType_ServerUriArray,11947,Variable
-NonTransparentNetworkRedundancyType_ServerNetworkGroups,11948,Variable
-EndpointUrlListDataType_Encoding_DefaultXml,11949,Object
-NetworkGroupDataType_Encoding_DefaultXml,11950,Object
-OpcUa_XmlSchema_EndpointUrlListDataType,11951,Variable
-OpcUa_XmlSchema_EndpointUrlListDataType_DataTypeVersion,11952,Variable
-OpcUa_XmlSchema_EndpointUrlListDataType_DictionaryFragment,11953,Variable
-OpcUa_XmlSchema_NetworkGroupDataType,11954,Variable
-OpcUa_XmlSchema_NetworkGroupDataType_DataTypeVersion,11955,Variable
-OpcUa_XmlSchema_NetworkGroupDataType_DictionaryFragment,11956,Variable
-EndpointUrlListDataType_Encoding_DefaultBinary,11957,Object
-NetworkGroupDataType_Encoding_DefaultBinary,11958,Object
-OpcUa_BinarySchema_EndpointUrlListDataType,11959,Variable
-OpcUa_BinarySchema_EndpointUrlListDataType_DataTypeVersion,11960,Variable
-OpcUa_BinarySchema_EndpointUrlListDataType_DictionaryFragment,11961,Variable
-OpcUa_BinarySchema_NetworkGroupDataType,11962,Variable
-OpcUa_BinarySchema_NetworkGroupDataType_DataTypeVersion,11963,Variable
-OpcUa_BinarySchema_NetworkGroupDataType_DictionaryFragment,11964,Variable
-ArrayItemType,12021,VariableType
-ArrayItemType_Definition,12022,Variable
-ArrayItemType_ValuePrecision,12023,Variable
-ArrayItemType_InstrumentRange,12024,Variable
-ArrayItemType_EURange,12025,Variable
-ArrayItemType_EngineeringUnits,12026,Variable
-ArrayItemType_Title,12027,Variable
-ArrayItemType_AxisScaleType,12028,Variable
-YArrayItemType,12029,VariableType
-YArrayItemType_Definition,12030,Variable
-YArrayItemType_ValuePrecision,12031,Variable
-YArrayItemType_InstrumentRange,12032,Variable
-YArrayItemType_EURange,12033,Variable
-YArrayItemType_EngineeringUnits,12034,Variable
-YArrayItemType_Title,12035,Variable
-YArrayItemType_AxisScaleType,12036,Variable
-YArrayItemType_XAxisDefinition,12037,Variable
-XYArrayItemType,12038,VariableType
-XYArrayItemType_Definition,12039,Variable
-XYArrayItemType_ValuePrecision,12040,Variable
-XYArrayItemType_InstrumentRange,12041,Variable
-XYArrayItemType_EURange,12042,Variable
-XYArrayItemType_EngineeringUnits,12043,Variable
-XYArrayItemType_Title,12044,Variable
-XYArrayItemType_AxisScaleType,12045,Variable
-XYArrayItemType_XAxisDefinition,12046,Variable
-ImageItemType,12047,VariableType
-ImageItemType_Definition,12048,Variable
-ImageItemType_ValuePrecision,12049,Variable
-ImageItemType_InstrumentRange,12050,Variable
-ImageItemType_EURange,12051,Variable
-ImageItemType_EngineeringUnits,12052,Variable
-ImageItemType_Title,12053,Variable
-ImageItemType_AxisScaleType,12054,Variable
-ImageItemType_XAxisDefinition,12055,Variable
-ImageItemType_YAxisDefinition,12056,Variable
-CubeItemType,12057,VariableType
-CubeItemType_Definition,12058,Variable
-CubeItemType_ValuePrecision,12059,Variable
-CubeItemType_InstrumentRange,12060,Variable
-CubeItemType_EURange,12061,Variable
-CubeItemType_EngineeringUnits,12062,Variable
-CubeItemType_Title,12063,Variable
-CubeItemType_AxisScaleType,12064,Variable
-CubeItemType_XAxisDefinition,12065,Variable
-CubeItemType_YAxisDefinition,12066,Variable
-CubeItemType_ZAxisDefinition,12067,Variable
-NDimensionArrayItemType,12068,VariableType
-NDimensionArrayItemType_Definition,12069,Variable
-NDimensionArrayItemType_ValuePrecision,12070,Variable
-NDimensionArrayItemType_InstrumentRange,12071,Variable
-NDimensionArrayItemType_EURange,12072,Variable
-NDimensionArrayItemType_EngineeringUnits,12073,Variable
-NDimensionArrayItemType_Title,12074,Variable
-NDimensionArrayItemType_AxisScaleType,12075,Variable
-NDimensionArrayItemType_AxisDefinition,12076,Variable
-AxisScaleEnumeration,12077,DataType
-AxisScaleEnumeration_EnumStrings,12078,Variable
-AxisInformation,12079,DataType
-XVType,12080,DataType
-AxisInformation_Encoding_DefaultXml,12081,Object
-XVType_Encoding_DefaultXml,12082,Object
-OpcUa_XmlSchema_AxisInformation,12083,Variable
-OpcUa_XmlSchema_AxisInformation_DataTypeVersion,12084,Variable
-OpcUa_XmlSchema_AxisInformation_DictionaryFragment,12085,Variable
-OpcUa_XmlSchema_XVType,12086,Variable
-OpcUa_XmlSchema_XVType_DataTypeVersion,12087,Variable
-OpcUa_XmlSchema_XVType_DictionaryFragment,12088,Variable
-AxisInformation_Encoding_DefaultBinary,12089,Object
-XVType_Encoding_DefaultBinary,12090,Object
-OpcUa_BinarySchema_AxisInformation,12091,Variable
-OpcUa_BinarySchema_AxisInformation_DataTypeVersion,12092,Variable
-OpcUa_BinarySchema_AxisInformation_DictionaryFragment,12093,Variable
-OpcUa_BinarySchema_XVType,12094,Variable
-OpcUa_BinarySchema_XVType_DataTypeVersion,12095,Variable
-OpcUa_BinarySchema_XVType_DictionaryFragment,12096,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder,12097,Object
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics,12098,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionId,12099,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionName,12100,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientDescription,12101,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ServerUri,12102,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_EndpointUrl,12103,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_LocaleIds,12104,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ActualSessionTimeout,12105,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_MaxResponseMessageSize,12106,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientConnectionTime,12107,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientLastContactTime,12108,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentSubscriptionsCount,12109,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentMonitoredItemsCount,12110,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentPublishRequestsInQueue,12111,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TotalRequestCount,12112,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnauthorizedRequestCount,12113,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ReadCount,12114,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryReadCount,12115,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_WriteCount,12116,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryUpdateCount,12117,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CallCount,12118,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateMonitoredItemsCount,12119,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifyMonitoredItemsCount,12120,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetMonitoringModeCount,12121,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetTriggeringCount,12122,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteMonitoredItemsCount,12123,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateSubscriptionCount,12124,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifySubscriptionCount,12125,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetPublishingModeCount,12126,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_PublishCount,12127,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RepublishCount,12128,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TransferSubscriptionsCount,12129,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteSubscriptionsCount,12130,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddNodesCount,12131,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddReferencesCount,12132,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteNodesCount,12133,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteReferencesCount,12134,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseCount,12135,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseNextCount,12136,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount,12137,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryFirstCount,12138,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryNextCount,12139,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RegisterNodesCount,12140,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnregisterNodesCount,12141,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics,12142,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SessionId,12143,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdOfSession,12144,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdHistory,12145,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_AuthenticationMechanism,12146,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_Encoding,12147,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_TransportProtocol,12148,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityMode,12149,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityPolicyUri,12150,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientCertificate,12151,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SubscriptionDiagnosticsArray,12152,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData,12153,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents,12154,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData,12155,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents,12156,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryReadData,12157,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryReadEvents,12158,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryUpdateData,12159,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryUpdateEvents,12160,Variable
-OperationLimitsType_MaxNodesPerHistoryReadData,12161,Variable
-OperationLimitsType_MaxNodesPerHistoryReadEvents,12162,Variable
-OperationLimitsType_MaxNodesPerHistoryUpdateData,12163,Variable
-OperationLimitsType_MaxNodesPerHistoryUpdateEvents,12164,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData,12165,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents,12166,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData,12167,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents,12168,Variable
-NamingRuleType_EnumValues,12169,Variable
-ViewVersion,12170,Variable
-ComplexNumberType,12171,DataType
-DoubleComplexNumberType,12172,DataType
-ComplexNumberType_Encoding_DefaultXml,12173,Object
-DoubleComplexNumberType_Encoding_DefaultXml,12174,Object
-OpcUa_XmlSchema_ComplexNumberType,12175,Variable
-OpcUa_XmlSchema_ComplexNumberType_DataTypeVersion,12176,Variable
-OpcUa_XmlSchema_ComplexNumberType_DictionaryFragment,12177,Variable
-OpcUa_XmlSchema_DoubleComplexNumberType,12178,Variable
-OpcUa_XmlSchema_DoubleComplexNumberType_DataTypeVersion,12179,Variable
-OpcUa_XmlSchema_DoubleComplexNumberType_DictionaryFragment,12180,Variable
-ComplexNumberType_Encoding_DefaultBinary,12181,Object
-DoubleComplexNumberType_Encoding_DefaultBinary,12182,Object
-OpcUa_BinarySchema_ComplexNumberType,12183,Variable
-OpcUa_BinarySchema_ComplexNumberType_DataTypeVersion,12184,Variable
-OpcUa_BinarySchema_ComplexNumberType_DictionaryFragment,12185,Variable
-OpcUa_BinarySchema_DoubleComplexNumberType,12186,Variable
-OpcUa_BinarySchema_DoubleComplexNumberType_DataTypeVersion,12187,Variable
-OpcUa_BinarySchema_DoubleComplexNumberType_DictionaryFragment,12188,Variable
-ServerOnNetwork,12189,DataType
-FindServersOnNetworkRequest,12190,DataType
-FindServersOnNetworkResponse,12191,DataType
-RegisterServer2Request,12193,DataType
-RegisterServer2Response,12194,DataType
-ServerOnNetwork_Encoding_DefaultXml,12195,Object
-FindServersOnNetworkRequest_Encoding_DefaultXml,12196,Object
-FindServersOnNetworkResponse_Encoding_DefaultXml,12197,Object
-RegisterServer2Request_Encoding_DefaultXml,12199,Object
-RegisterServer2Response_Encoding_DefaultXml,12200,Object
-OpcUa_XmlSchema_ServerOnNetwork,12201,Variable
-OpcUa_XmlSchema_ServerOnNetwork_DataTypeVersion,12202,Variable
-OpcUa_XmlSchema_ServerOnNetwork_DictionaryFragment,12203,Variable
-ServerOnNetwork_Encoding_DefaultBinary,12207,Object
-FindServersOnNetworkRequest_Encoding_DefaultBinary,12208,Object
-FindServersOnNetworkResponse_Encoding_DefaultBinary,12209,Object
-RegisterServer2Request_Encoding_DefaultBinary,12211,Object
-RegisterServer2Response_Encoding_DefaultBinary,12212,Object
-OpcUa_BinarySchema_ServerOnNetwork,12213,Variable
-OpcUa_BinarySchema_ServerOnNetwork_DataTypeVersion,12214,Variable
-OpcUa_BinarySchema_ServerOnNetwork_DictionaryFragment,12215,Variable
-ProgressEventType_Context,12502,Variable
-ProgressEventType_Progress,12503,Variable
-OpenWithMasksMethodType,12513,Method
-OpenWithMasksMethodType_InputArguments,12514,Variable
-OpenWithMasksMethodType_OutputArguments,12515,Variable
-CloseAndUpdateMethodType,12516,Method
-CloseAndUpdateMethodType_OutputArguments,12517,Variable
-AddCertificateMethodType,12518,Method
-AddCertificateMethodType_InputArguments,12519,Variable
-RemoveCertificateMethodType,12520,Method
-RemoveCertificateMethodType_InputArguments,12521,Variable
-TrustListType,12522,ObjectType
-TrustListType_Size,12523,Variable
-TrustListType_OpenCount,12526,Variable
-TrustListType_Open,12527,Method
-TrustListType_Open_InputArguments,12528,Variable
-TrustListType_Open_OutputArguments,12529,Variable
-TrustListType_Close,12530,Method
-TrustListType_Close_InputArguments,12531,Variable
-TrustListType_Read,12532,Method
-TrustListType_Read_InputArguments,12533,Variable
-TrustListType_Read_OutputArguments,12534,Variable
-TrustListType_Write,12535,Method
-TrustListType_Write_InputArguments,12536,Variable
-TrustListType_GetPosition,12537,Method
-TrustListType_GetPosition_InputArguments,12538,Variable
-TrustListType_GetPosition_OutputArguments,12539,Variable
-TrustListType_SetPosition,12540,Method
-TrustListType_SetPosition_InputArguments,12541,Variable
-TrustListType_LastUpdateTime,12542,Variable
-TrustListType_OpenWithMasks,12543,Method
-TrustListType_OpenWithMasks_InputArguments,12544,Variable
-TrustListType_OpenWithMasks_OutputArguments,12545,Variable
-TrustListType_CloseAndUpdate,12546,Method
-TrustListType_CloseAndUpdate_OutputArguments,12547,Variable
-TrustListType_AddCertificate,12548,Method
-TrustListType_AddCertificate_InputArguments,12549,Variable
-TrustListType_RemoveCertificate,12550,Method
-TrustListType_RemoveCertificate_InputArguments,12551,Variable
-TrustListMasks,12552,DataType
-TrustListMasks_EnumValues,12553,Variable
-TrustListDataType,12554,DataType
-CertificateGroupType,12555,ObjectType
-CertificateType,12556,ObjectType
-ApplicationCertificateType,12557,ObjectType
-HttpsCertificateType,12558,ObjectType
-RsaMinApplicationCertificateType,12559,ObjectType
-RsaSha256ApplicationCertificateType,12560,ObjectType
-TrustListUpdatedAuditEventType,12561,ObjectType
-TrustListUpdatedAuditEventType_EventId,12562,Variable
-TrustListUpdatedAuditEventType_EventType,12563,Variable
-TrustListUpdatedAuditEventType_SourceNode,12564,Variable
-TrustListUpdatedAuditEventType_SourceName,12565,Variable
-TrustListUpdatedAuditEventType_Time,12566,Variable
-TrustListUpdatedAuditEventType_ReceiveTime,12567,Variable
-TrustListUpdatedAuditEventType_LocalTime,12568,Variable
-TrustListUpdatedAuditEventType_Message,12569,Variable
-TrustListUpdatedAuditEventType_Severity,12570,Variable
-TrustListUpdatedAuditEventType_ActionTimeStamp,12571,Variable
-TrustListUpdatedAuditEventType_Status,12572,Variable
-TrustListUpdatedAuditEventType_ServerId,12573,Variable
-TrustListUpdatedAuditEventType_ClientAuditEntryId,12574,Variable
-TrustListUpdatedAuditEventType_ClientUserId,12575,Variable
-TrustListUpdatedAuditEventType_MethodId,12576,Variable
-TrustListUpdatedAuditEventType_InputArguments,12577,Variable
-UpdateCertificateMethodType,12578,Method
-UpdateCertificateMethodType_InputArguments,12579,Variable
-UpdateCertificateMethodType_OutputArguments,12580,Variable
-ServerConfigurationType,12581,ObjectType
-ServerConfigurationType_SupportedPrivateKeyFormats,12583,Variable
-ServerConfigurationType_MaxTrustListSize,12584,Variable
-ServerConfigurationType_MulticastDnsEnabled,12585,Variable
-ServerConfigurationType_UpdateCertificate,12616,Method
-ServerConfigurationType_UpdateCertificate_InputArguments,12617,Variable
-ServerConfigurationType_UpdateCertificate_OutputArguments,12618,Variable
-CertificateUpdatedAuditEventType,12620,ObjectType
-CertificateUpdatedAuditEventType_EventId,12621,Variable
-CertificateUpdatedAuditEventType_EventType,12622,Variable
-CertificateUpdatedAuditEventType_SourceNode,12623,Variable
-CertificateUpdatedAuditEventType_SourceName,12624,Variable
-CertificateUpdatedAuditEventType_Time,12625,Variable
-CertificateUpdatedAuditEventType_ReceiveTime,12626,Variable
-CertificateUpdatedAuditEventType_LocalTime,12627,Variable
-CertificateUpdatedAuditEventType_Message,12628,Variable
-CertificateUpdatedAuditEventType_Severity,12629,Variable
-CertificateUpdatedAuditEventType_ActionTimeStamp,12630,Variable
-CertificateUpdatedAuditEventType_Status,12631,Variable
-CertificateUpdatedAuditEventType_ServerId,12632,Variable
-CertificateUpdatedAuditEventType_ClientAuditEntryId,12633,Variable
-CertificateUpdatedAuditEventType_ClientUserId,12634,Variable
-CertificateUpdatedAuditEventType_MethodId,12635,Variable
-CertificateUpdatedAuditEventType_InputArguments,12636,Variable
-ServerConfiguration,12637,Object
-ServerConfiguration_SupportedPrivateKeyFormats,12639,Variable
-ServerConfiguration_MaxTrustListSize,12640,Variable
-ServerConfiguration_MulticastDnsEnabled,12641,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList,12642,Object
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Size,12643,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount,12646,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open,12647,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments,12648,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments,12649,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close,12650,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments,12651,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read,12652,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments,12653,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments,12654,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write,12655,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments,12656,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition,12657,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments,12658,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments,12659,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition,12660,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments,12661,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime,12662,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks,12663,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments,12664,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments,12665,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate,12666,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments,12667,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate,12668,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments,12669,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate,12670,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments,12671,Variable
-TrustListDataType_Encoding_DefaultXml,12676,Object
-OpcUa_XmlSchema_TrustListDataType,12677,Variable
-OpcUa_XmlSchema_TrustListDataType_DataTypeVersion,12678,Variable
-OpcUa_XmlSchema_TrustListDataType_DictionaryFragment,12679,Variable
-TrustListDataType_Encoding_DefaultBinary,12680,Object
-OpcUa_BinarySchema_TrustListDataType,12681,Variable
-OpcUa_BinarySchema_TrustListDataType_DataTypeVersion,12682,Variable
-OpcUa_BinarySchema_TrustListDataType_DictionaryFragment,12683,Variable
-FileType_Writable,12686,Variable
-FileType_UserWritable,12687,Variable
-AddressSpaceFileType_Writable,12688,Variable
-AddressSpaceFileType_UserWritable,12689,Variable
-NamespaceMetadataType_NamespaceFile_Writable,12690,Variable
-NamespaceMetadataType_NamespaceFile_UserWritable,12691,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Writable,12692,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_UserWritable,12693,Variable
-TrustListType_Writable,12698,Variable
-TrustListType_UserWritable,12699,Variable
-CloseAndUpdateMethodType_InputArguments,12704,Variable
-TrustListType_CloseAndUpdate_InputArguments,12705,Variable
-ServerConfigurationType_ServerCapabilities,12708,Variable
-ServerConfiguration_ServerCapabilities,12710,Variable
-OpcUa_XmlSchema_RelativePathElement,12712,Variable
-OpcUa_XmlSchema_RelativePathElement_DataTypeVersion,12713,Variable
-OpcUa_XmlSchema_RelativePathElement_DictionaryFragment,12714,Variable
-OpcUa_XmlSchema_RelativePath,12715,Variable
-OpcUa_XmlSchema_RelativePath_DataTypeVersion,12716,Variable
-OpcUa_XmlSchema_RelativePath_DictionaryFragment,12717,Variable
-OpcUa_BinarySchema_RelativePathElement,12718,Variable
-OpcUa_BinarySchema_RelativePathElement_DataTypeVersion,12719,Variable
-OpcUa_BinarySchema_RelativePathElement_DictionaryFragment,12720,Variable
-OpcUa_BinarySchema_RelativePath,12721,Variable
-OpcUa_BinarySchema_RelativePath_DataTypeVersion,12722,Variable
-OpcUa_BinarySchema_RelativePath_DictionaryFragment,12723,Variable
-ServerConfigurationType_CreateSigningRequest,12731,Method
-ServerConfigurationType_CreateSigningRequest_InputArguments,12732,Variable
-ServerConfigurationType_CreateSigningRequest_OutputArguments,12733,Variable
-ServerConfigurationType_ApplyChanges,12734,Method
-ServerConfiguration_CreateSigningRequest,12737,Method
-ServerConfiguration_CreateSigningRequest_InputArguments,12738,Variable
-ServerConfiguration_CreateSigningRequest_OutputArguments,12739,Variable
-ServerConfiguration_ApplyChanges,12740,Method
-CreateSigningRequestMethodType,12741,Method
-CreateSigningRequestMethodType_InputArguments,12742,Variable
-CreateSigningRequestMethodType_OutputArguments,12743,Variable
-OptionSetValues,12745,Variable
-ServerType_SetSubscriptionDurable,12746,Method
-ServerType_SetSubscriptionDurable_InputArguments,12747,Variable
-ServerType_SetSubscriptionDurable_OutputArguments,12748,Variable
-Server_SetSubscriptionDurable,12749,Method
-Server_SetSubscriptionDurable_InputArguments,12750,Variable
-Server_SetSubscriptionDurable_OutputArguments,12751,Variable
-SetSubscriptionDurableMethodType,12752,Method
-SetSubscriptionDurableMethodType_InputArguments,12753,Variable
-SetSubscriptionDurableMethodType_OutputArguments,12754,Variable
-OptionSet,12755,DataType
-Union,12756,DataType
-OptionSet_Encoding_DefaultXml,12757,Object
-Union_Encoding_DefaultXml,12758,Object
-OpcUa_XmlSchema_OptionSet,12759,Variable
-OpcUa_XmlSchema_OptionSet_DataTypeVersion,12760,Variable
-OpcUa_XmlSchema_OptionSet_DictionaryFragment,12761,Variable
-OpcUa_XmlSchema_Union,12762,Variable
-OpcUa_XmlSchema_Union_DataTypeVersion,12763,Variable
-OpcUa_XmlSchema_Union_DictionaryFragment,12764,Variable
-OptionSet_Encoding_DefaultBinary,12765,Object
-Union_Encoding_DefaultBinary,12766,Object
-OpcUa_BinarySchema_OptionSet,12767,Variable
-OpcUa_BinarySchema_OptionSet_DataTypeVersion,12768,Variable
-OpcUa_BinarySchema_OptionSet_DictionaryFragment,12769,Variable
-OpcUa_BinarySchema_Union,12770,Variable
-OpcUa_BinarySchema_Union_DataTypeVersion,12771,Variable
-OpcUa_BinarySchema_Union_DictionaryFragment,12772,Variable
-GetRejectedListMethodType,12773,Method
-GetRejectedListMethodType_OutputArguments,12774,Variable
-ServerConfigurationType_GetRejectedList,12775,Method
-ServerConfigurationType_GetRejectedList_OutputArguments,12776,Variable
-ServerConfiguration_GetRejectedList,12777,Method
-ServerConfiguration_GetRejectedList_OutputArguments,12778,Variable
-SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics,12779,Variable
-SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SamplingInterval,12780,Variable
-SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SampledMonitoredItemsCount,12781,Variable
-SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_MaxSampledMonitoredItemsCount,12782,Variable
-SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_DisabledMonitoredItemsSamplingCount,12783,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics,12784,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SessionId,12785,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SubscriptionId,12786,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_Priority,12787,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingInterval,12788,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxKeepAliveCount,12789,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxLifetimeCount,12790,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxNotificationsPerPublish,12791,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingEnabled,12792,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_ModifyCount,12793,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EnableCount,12794,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisableCount,12795,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishRequestCount,12796,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageRequestCount,12797,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageCount,12798,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferRequestCount,12799,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToAltClientCount,12800,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToSameClientCount,12801,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishRequestCount,12802,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DataChangeNotificationsCount,12803,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventNotificationsCount,12804,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NotificationsCount,12805,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_LatePublishRequestCount,12806,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentKeepAliveCount,12807,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentLifetimeCount,12808,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_UnacknowledgedMessageCount,12809,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DiscardedMessageCount,12810,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoredItemCount,12811,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisabledMonitoredItemCount,12812,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoringQueueOverflowCount,12813,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NextSequenceNumber,12814,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventQueueOverflowCount,12815,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics,12816,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_SessionId,12817,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_SessionName,12818,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_ClientDescription,12819,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_ServerUri,12820,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_EndpointUrl,12821,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_LocaleIds,12822,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_ActualSessionTimeout,12823,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_MaxResponseMessageSize,12824,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_ClientConnectionTime,12825,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_ClientLastContactTime,12826,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_CurrentSubscriptionsCount,12827,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_CurrentMonitoredItemsCount,12828,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_CurrentPublishRequestsInQueue,12829,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_TotalRequestCount,12830,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_UnauthorizedRequestCount,12831,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_ReadCount,12832,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_HistoryReadCount,12833,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_WriteCount,12834,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_HistoryUpdateCount,12835,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_CallCount,12836,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_CreateMonitoredItemsCount,12837,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_ModifyMonitoredItemsCount,12838,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_SetMonitoringModeCount,12839,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_SetTriggeringCount,12840,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_DeleteMonitoredItemsCount,12841,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_CreateSubscriptionCount,12842,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_ModifySubscriptionCount,12843,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_SetPublishingModeCount,12844,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_PublishCount,12845,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_RepublishCount,12846,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_TransferSubscriptionsCount,12847,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_DeleteSubscriptionsCount,12848,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_AddNodesCount,12849,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_AddReferencesCount,12850,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_DeleteNodesCount,12851,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_DeleteReferencesCount,12852,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_BrowseCount,12853,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_BrowseNextCount,12854,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount,12855,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_QueryFirstCount,12856,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_QueryNextCount,12857,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_RegisterNodesCount,12858,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_UnregisterNodesCount,12859,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics,12860,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SessionId,12861,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdOfSession,12862,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdHistory,12863,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_AuthenticationMechanism,12864,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_Encoding,12865,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_TransportProtocol,12866,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityMode,12867,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityPolicyUri,12868,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientCertificate,12869,Variable
-ServerType_ResendData,12871,Method
-ServerType_ResendData_InputArguments,12872,Variable
-Server_ResendData,12873,Method
-Server_ResendData_InputArguments,12874,Variable
-ResendDataMethodType,12875,Method
-ResendDataMethodType_InputArguments,12876,Variable
-NormalizedString,12877,DataType
-DecimalString,12878,DataType
-DurationString,12879,DataType
-TimeString,12880,DataType
-DateString,12881,DataType
-ServerType_EstimatedReturnTime,12882,Variable
-ServerType_RequestServerStateChange,12883,Method
-ServerType_RequestServerStateChange_InputArguments,12884,Variable
-Server_EstimatedReturnTime,12885,Variable
-Server_RequestServerStateChange,12886,Method
-Server_RequestServerStateChange_InputArguments,12887,Variable
-RequestServerStateChangeMethodType,12888,Method
-RequestServerStateChangeMethodType_InputArguments,12889,Variable
-DiscoveryConfiguration,12890,DataType
-MdnsDiscoveryConfiguration,12891,DataType
-DiscoveryConfiguration_Encoding_DefaultXml,12892,Object
-MdnsDiscoveryConfiguration_Encoding_DefaultXml,12893,Object
-OpcUa_XmlSchema_DiscoveryConfiguration,12894,Variable
-OpcUa_XmlSchema_DiscoveryConfiguration_DataTypeVersion,12895,Variable
-OpcUa_XmlSchema_DiscoveryConfiguration_DictionaryFragment,12896,Variable
-OpcUa_XmlSchema_MdnsDiscoveryConfiguration,12897,Variable
-OpcUa_XmlSchema_MdnsDiscoveryConfiguration_DataTypeVersion,12898,Variable
-OpcUa_XmlSchema_MdnsDiscoveryConfiguration_DictionaryFragment,12899,Variable
-DiscoveryConfiguration_Encoding_DefaultBinary,12900,Object
-MdnsDiscoveryConfiguration_Encoding_DefaultBinary,12901,Object
-OpcUa_BinarySchema_DiscoveryConfiguration,12902,Variable
-OpcUa_BinarySchema_DiscoveryConfiguration_DataTypeVersion,12903,Variable
-OpcUa_BinarySchema_DiscoveryConfiguration_DictionaryFragment,12904,Variable
-OpcUa_BinarySchema_MdnsDiscoveryConfiguration,12905,Variable
-OpcUa_BinarySchema_MdnsDiscoveryConfiguration_DataTypeVersion,12906,Variable
-OpcUa_BinarySchema_MdnsDiscoveryConfiguration_DictionaryFragment,12907,Variable
-MaxByteStringLength,12908,Variable
-ServerType_ServerCapabilities_MaxByteStringLength,12909,Variable
-ServerCapabilitiesType_MaxByteStringLength,12910,Variable
-Server_ServerCapabilities_MaxByteStringLength,12911,Variable
-ConditionType_ConditionRefresh2,12912,Method
-ConditionType_ConditionRefresh2_InputArguments,12913,Variable
-ConditionRefresh2MethodType,12914,Method
-ConditionRefresh2MethodType_InputArguments,12915,Variable
-DialogConditionType_ConditionRefresh2,12916,Method
-DialogConditionType_ConditionRefresh2_InputArguments,12917,Variable
-AcknowledgeableConditionType_ConditionRefresh2,12918,Method
-AcknowledgeableConditionType_ConditionRefresh2_InputArguments,12919,Variable
-AlarmConditionType_ConditionRefresh2,12984,Method
-AlarmConditionType_ConditionRefresh2_InputArguments,12985,Variable
-LimitAlarmType_ConditionRefresh2,12986,Method
-LimitAlarmType_ConditionRefresh2_InputArguments,12987,Variable
-ExclusiveLimitAlarmType_ConditionRefresh2,12988,Method
-ExclusiveLimitAlarmType_ConditionRefresh2_InputArguments,12989,Variable
-NonExclusiveLimitAlarmType_ConditionRefresh2,12990,Method
-NonExclusiveLimitAlarmType_ConditionRefresh2_InputArguments,12991,Variable
-NonExclusiveLevelAlarmType_ConditionRefresh2,12992,Method
-NonExclusiveLevelAlarmType_ConditionRefresh2_InputArguments,12993,Variable
-ExclusiveLevelAlarmType_ConditionRefresh2,12994,Method
-ExclusiveLevelAlarmType_ConditionRefresh2_InputArguments,12995,Variable
-NonExclusiveDeviationAlarmType_ConditionRefresh2,12996,Method
-NonExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments,12997,Variable
-ExclusiveDeviationAlarmType_ConditionRefresh2,12998,Method
-ExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments,12999,Variable
-NonExclusiveRateOfChangeAlarmType_ConditionRefresh2,13000,Method
-NonExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments,13001,Variable
-ExclusiveRateOfChangeAlarmType_ConditionRefresh2,13002,Method
-ExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments,13003,Variable
-DiscreteAlarmType_ConditionRefresh2,13004,Method
-DiscreteAlarmType_ConditionRefresh2_InputArguments,13005,Variable
-OffNormalAlarmType_ConditionRefresh2,13006,Method
-OffNormalAlarmType_ConditionRefresh2_InputArguments,13007,Variable
-SystemOffNormalAlarmType_ConditionRefresh2,13008,Method
-SystemOffNormalAlarmType_ConditionRefresh2_InputArguments,13009,Variable
-TripAlarmType_ConditionRefresh2,13010,Method
-TripAlarmType_ConditionRefresh2_InputArguments,13011,Variable
-CertificateExpirationAlarmType,13225,ObjectType
-CertificateExpirationAlarmType_EventId,13226,Variable
-CertificateExpirationAlarmType_EventType,13227,Variable
-CertificateExpirationAlarmType_SourceNode,13228,Variable
-CertificateExpirationAlarmType_SourceName,13229,Variable
-CertificateExpirationAlarmType_Time,13230,Variable
-CertificateExpirationAlarmType_ReceiveTime,13231,Variable
-CertificateExpirationAlarmType_LocalTime,13232,Variable
-CertificateExpirationAlarmType_Message,13233,Variable
-CertificateExpirationAlarmType_Severity,13234,Variable
-CertificateExpirationAlarmType_ConditionClassId,13235,Variable
-CertificateExpirationAlarmType_ConditionClassName,13236,Variable
-CertificateExpirationAlarmType_ConditionName,13237,Variable
-CertificateExpirationAlarmType_BranchId,13238,Variable
-CertificateExpirationAlarmType_Retain,13239,Variable
-CertificateExpirationAlarmType_EnabledState,13240,Variable
-CertificateExpirationAlarmType_EnabledState_Id,13241,Variable
-CertificateExpirationAlarmType_EnabledState_Name,13242,Variable
-CertificateExpirationAlarmType_EnabledState_Number,13243,Variable
-CertificateExpirationAlarmType_EnabledState_EffectiveDisplayName,13244,Variable
-CertificateExpirationAlarmType_EnabledState_TransitionTime,13245,Variable
-CertificateExpirationAlarmType_EnabledState_EffectiveTransitionTime,13246,Variable
-CertificateExpirationAlarmType_EnabledState_TrueState,13247,Variable
-CertificateExpirationAlarmType_EnabledState_FalseState,13248,Variable
-CertificateExpirationAlarmType_Quality,13249,Variable
-CertificateExpirationAlarmType_Quality_SourceTimestamp,13250,Variable
-CertificateExpirationAlarmType_LastSeverity,13251,Variable
-CertificateExpirationAlarmType_LastSeverity_SourceTimestamp,13252,Variable
-CertificateExpirationAlarmType_Comment,13253,Variable
-CertificateExpirationAlarmType_Comment_SourceTimestamp,13254,Variable
-CertificateExpirationAlarmType_ClientUserId,13255,Variable
-CertificateExpirationAlarmType_Disable,13256,Method
-CertificateExpirationAlarmType_Enable,13257,Method
-CertificateExpirationAlarmType_AddComment,13258,Method
-CertificateExpirationAlarmType_AddComment_InputArguments,13259,Variable
-CertificateExpirationAlarmType_ConditionRefresh,13260,Method
-CertificateExpirationAlarmType_ConditionRefresh_InputArguments,13261,Variable
-CertificateExpirationAlarmType_ConditionRefresh2,13262,Method
-CertificateExpirationAlarmType_ConditionRefresh2_InputArguments,13263,Variable
-CertificateExpirationAlarmType_AckedState,13264,Variable
-CertificateExpirationAlarmType_AckedState_Id,13265,Variable
-CertificateExpirationAlarmType_AckedState_Name,13266,Variable
-CertificateExpirationAlarmType_AckedState_Number,13267,Variable
-CertificateExpirationAlarmType_AckedState_EffectiveDisplayName,13268,Variable
-CertificateExpirationAlarmType_AckedState_TransitionTime,13269,Variable
-CertificateExpirationAlarmType_AckedState_EffectiveTransitionTime,13270,Variable
-CertificateExpirationAlarmType_AckedState_TrueState,13271,Variable
-CertificateExpirationAlarmType_AckedState_FalseState,13272,Variable
-CertificateExpirationAlarmType_ConfirmedState,13273,Variable
-CertificateExpirationAlarmType_ConfirmedState_Id,13274,Variable
-CertificateExpirationAlarmType_ConfirmedState_Name,13275,Variable
-CertificateExpirationAlarmType_ConfirmedState_Number,13276,Variable
-CertificateExpirationAlarmType_ConfirmedState_EffectiveDisplayName,13277,Variable
-CertificateExpirationAlarmType_ConfirmedState_TransitionTime,13278,Variable
-CertificateExpirationAlarmType_ConfirmedState_EffectiveTransitionTime,13279,Variable
-CertificateExpirationAlarmType_ConfirmedState_TrueState,13280,Variable
-CertificateExpirationAlarmType_ConfirmedState_FalseState,13281,Variable
-CertificateExpirationAlarmType_Acknowledge,13282,Method
-CertificateExpirationAlarmType_Acknowledge_InputArguments,13283,Variable
-CertificateExpirationAlarmType_Confirm,13284,Method
-CertificateExpirationAlarmType_Confirm_InputArguments,13285,Variable
-CertificateExpirationAlarmType_ActiveState,13286,Variable
-CertificateExpirationAlarmType_ActiveState_Id,13287,Variable
-CertificateExpirationAlarmType_ActiveState_Name,13288,Variable
-CertificateExpirationAlarmType_ActiveState_Number,13289,Variable
-CertificateExpirationAlarmType_ActiveState_EffectiveDisplayName,13290,Variable
-CertificateExpirationAlarmType_ActiveState_TransitionTime,13291,Variable
-CertificateExpirationAlarmType_ActiveState_EffectiveTransitionTime,13292,Variable
-CertificateExpirationAlarmType_ActiveState_TrueState,13293,Variable
-CertificateExpirationAlarmType_ActiveState_FalseState,13294,Variable
-CertificateExpirationAlarmType_InputNode,13295,Variable
-CertificateExpirationAlarmType_SuppressedState,13296,Variable
-CertificateExpirationAlarmType_SuppressedState_Id,13297,Variable
-CertificateExpirationAlarmType_SuppressedState_Name,13298,Variable
-CertificateExpirationAlarmType_SuppressedState_Number,13299,Variable
-CertificateExpirationAlarmType_SuppressedState_EffectiveDisplayName,13300,Variable
-CertificateExpirationAlarmType_SuppressedState_TransitionTime,13301,Variable
-CertificateExpirationAlarmType_SuppressedState_EffectiveTransitionTime,13302,Variable
-CertificateExpirationAlarmType_SuppressedState_TrueState,13303,Variable
-CertificateExpirationAlarmType_SuppressedState_FalseState,13304,Variable
-CertificateExpirationAlarmType_ShelvingState,13305,Object
-CertificateExpirationAlarmType_ShelvingState_CurrentState,13306,Variable
-CertificateExpirationAlarmType_ShelvingState_CurrentState_Id,13307,Variable
-CertificateExpirationAlarmType_ShelvingState_CurrentState_Name,13308,Variable
-CertificateExpirationAlarmType_ShelvingState_CurrentState_Number,13309,Variable
-CertificateExpirationAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,13310,Variable
-CertificateExpirationAlarmType_ShelvingState_LastTransition,13311,Variable
-CertificateExpirationAlarmType_ShelvingState_LastTransition_Id,13312,Variable
-CertificateExpirationAlarmType_ShelvingState_LastTransition_Name,13313,Variable
-CertificateExpirationAlarmType_ShelvingState_LastTransition_Number,13314,Variable
-CertificateExpirationAlarmType_ShelvingState_LastTransition_TransitionTime,13315,Variable
-CertificateExpirationAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,13316,Variable
-CertificateExpirationAlarmType_ShelvingState_UnshelveTime,13317,Variable
-CertificateExpirationAlarmType_ShelvingState_Unshelve,13318,Method
-CertificateExpirationAlarmType_ShelvingState_OneShotShelve,13319,Method
-CertificateExpirationAlarmType_ShelvingState_TimedShelve,13320,Method
-CertificateExpirationAlarmType_ShelvingState_TimedShelve_InputArguments,13321,Variable
-CertificateExpirationAlarmType_SuppressedOrShelved,13322,Variable
-CertificateExpirationAlarmType_MaxTimeShelved,13323,Variable
-CertificateExpirationAlarmType_NormalState,13324,Variable
-CertificateExpirationAlarmType_ExpirationDate,13325,Variable
-CertificateExpirationAlarmType_CertificateType,13326,Variable
-CertificateExpirationAlarmType_Certificate,13327,Variable
-FileType_MimeType,13341,Variable
-CreateDirectoryMethodType,13342,Method
-CreateDirectoryMethodType_InputArguments,13343,Variable
-CreateDirectoryMethodType_OutputArguments,13344,Variable
-CreateFileMethodType,13345,Method
-CreateFileMethodType_InputArguments,13346,Variable
-CreateFileMethodType_OutputArguments,13347,Variable
-DeleteFileMethodType,13348,Method
-DeleteFileMethodType_InputArguments,13349,Variable
-MoveOrCopyMethodType,13350,Method
-MoveOrCopyMethodType_InputArguments,13351,Variable
-MoveOrCopyMethodType_OutputArguments,13352,Variable
-FileDirectoryType,13353,ObjectType
-FileDirectoryType_FileDirectoryName_Placeholder,13354,Object
-FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory,13355,Method
-FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_InputArguments,13356,Variable
-FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments,13357,Variable
-FileDirectoryType_FileDirectoryName_Placeholder_CreateFile,13358,Method
-FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_InputArguments,13359,Variable
-FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_OutputArguments,13360,Variable
-FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy,13363,Method
-FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments,13364,Variable
-FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments,13365,Variable
-FileDirectoryType_FileName_Placeholder,13366,Object
-FileDirectoryType_FileName_Placeholder_Size,13367,Variable
-FileDirectoryType_FileName_Placeholder_Writable,13368,Variable
-FileDirectoryType_FileName_Placeholder_UserWritable,13369,Variable
-FileDirectoryType_FileName_Placeholder_OpenCount,13370,Variable
-FileDirectoryType_FileName_Placeholder_MimeType,13371,Variable
-FileDirectoryType_FileName_Placeholder_Open,13372,Method
-FileDirectoryType_FileName_Placeholder_Open_InputArguments,13373,Variable
-FileDirectoryType_FileName_Placeholder_Open_OutputArguments,13374,Variable
-FileDirectoryType_FileName_Placeholder_Close,13375,Method
-FileDirectoryType_FileName_Placeholder_Close_InputArguments,13376,Variable
-FileDirectoryType_FileName_Placeholder_Read,13377,Method
-FileDirectoryType_FileName_Placeholder_Read_InputArguments,13378,Variable
-FileDirectoryType_FileName_Placeholder_Read_OutputArguments,13379,Variable
-FileDirectoryType_FileName_Placeholder_Write,13380,Method
-FileDirectoryType_FileName_Placeholder_Write_InputArguments,13381,Variable
-FileDirectoryType_FileName_Placeholder_GetPosition,13382,Method
-FileDirectoryType_FileName_Placeholder_GetPosition_InputArguments,13383,Variable
-FileDirectoryType_FileName_Placeholder_GetPosition_OutputArguments,13384,Variable
-FileDirectoryType_FileName_Placeholder_SetPosition,13385,Method
-FileDirectoryType_FileName_Placeholder_SetPosition_InputArguments,13386,Variable
-FileDirectoryType_CreateDirectory,13387,Method
-FileDirectoryType_CreateDirectory_InputArguments,13388,Variable
-FileDirectoryType_CreateDirectory_OutputArguments,13389,Variable
-FileDirectoryType_CreateFile,13390,Method
-FileDirectoryType_CreateFile_InputArguments,13391,Variable
-FileDirectoryType_CreateFile_OutputArguments,13392,Variable
-FileDirectoryType_DeleteFileSystemObject,13393,Method
-FileDirectoryType_DeleteFileSystemObject_InputArguments,13394,Variable
-FileDirectoryType_MoveOrCopy,13395,Method
-FileDirectoryType_MoveOrCopy_InputArguments,13396,Variable
-FileDirectoryType_MoveOrCopy_OutputArguments,13397,Variable
-AddressSpaceFileType_MimeType,13398,Variable
-NamespaceMetadataType_NamespaceFile_MimeType,13399,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_MimeType,13400,Variable
-TrustListType_MimeType,13403,Variable
-CertificateGroupType_TrustList,13599,Object
-CertificateGroupType_TrustList_Size,13600,Variable
-CertificateGroupType_TrustList_Writable,13601,Variable
-CertificateGroupType_TrustList_UserWritable,13602,Variable
-CertificateGroupType_TrustList_OpenCount,13603,Variable
-CertificateGroupType_TrustList_MimeType,13604,Variable
-CertificateGroupType_TrustList_Open,13605,Method
-CertificateGroupType_TrustList_Open_InputArguments,13606,Variable
-CertificateGroupType_TrustList_Open_OutputArguments,13607,Variable
-CertificateGroupType_TrustList_Close,13608,Method
-CertificateGroupType_TrustList_Close_InputArguments,13609,Variable
-CertificateGroupType_TrustList_Read,13610,Method
-CertificateGroupType_TrustList_Read_InputArguments,13611,Variable
-CertificateGroupType_TrustList_Read_OutputArguments,13612,Variable
-CertificateGroupType_TrustList_Write,13613,Method
-CertificateGroupType_TrustList_Write_InputArguments,13614,Variable
-CertificateGroupType_TrustList_GetPosition,13615,Method
-CertificateGroupType_TrustList_GetPosition_InputArguments,13616,Variable
-CertificateGroupType_TrustList_GetPosition_OutputArguments,13617,Variable
-CertificateGroupType_TrustList_SetPosition,13618,Method
-CertificateGroupType_TrustList_SetPosition_InputArguments,13619,Variable
-CertificateGroupType_TrustList_LastUpdateTime,13620,Variable
-CertificateGroupType_TrustList_OpenWithMasks,13621,Method
-CertificateGroupType_TrustList_OpenWithMasks_InputArguments,13622,Variable
-CertificateGroupType_TrustList_OpenWithMasks_OutputArguments,13623,Variable
-CertificateGroupType_TrustList_CloseAndUpdate,13624,Method
-CertificateGroupType_TrustList_CloseAndUpdate_InputArguments,13625,Variable
-CertificateGroupType_TrustList_CloseAndUpdate_OutputArguments,13626,Variable
-CertificateGroupType_TrustList_AddCertificate,13627,Method
-CertificateGroupType_TrustList_AddCertificate_InputArguments,13628,Variable
-CertificateGroupType_TrustList_RemoveCertificate,13629,Method
-CertificateGroupType_TrustList_RemoveCertificate_InputArguments,13630,Variable
-CertificateGroupType_CertificateTypes,13631,Variable
-CertificateUpdatedAuditEventType_CertificateGroup,13735,Variable
-CertificateUpdatedAuditEventType_CertificateType,13736,Variable
-ServerConfiguration_UpdateCertificate,13737,Method
-ServerConfiguration_UpdateCertificate_InputArguments,13738,Variable
-ServerConfiguration_UpdateCertificate_OutputArguments,13739,Variable
-CertificateGroupFolderType,13813,ObjectType
-CertificateGroupFolderType_DefaultApplicationGroup,13814,Object
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList,13815,Object
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Size,13816,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Writable,13817,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_UserWritable,13818,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenCount,13819,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_MimeType,13820,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open,13821,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_InputArguments,13822,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_OutputArguments,13823,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close,13824,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close_InputArguments,13825,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read,13826,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_InputArguments,13827,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_OutputArguments,13828,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write,13829,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write_InputArguments,13830,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition,13831,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_InputArguments,13832,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments,13833,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition,13834,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition_InputArguments,13835,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_LastUpdateTime,13836,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks,13837,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments,13838,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments,13839,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate,13840,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments,13841,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments,13842,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_AddCertificate,13843,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments,13844,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_RemoveCertificate,13845,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments,13846,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_CertificateTypes,13847,Variable
-CertificateGroupFolderType_DefaultHttpsGroup,13848,Object
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList,13849,Object
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Size,13850,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Writable,13851,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_UserWritable,13852,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenCount,13853,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_MimeType,13854,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open,13855,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_InputArguments,13856,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_OutputArguments,13857,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close,13858,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close_InputArguments,13859,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read,13860,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_InputArguments,13861,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_OutputArguments,13862,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write,13863,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write_InputArguments,13864,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition,13865,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_InputArguments,13866,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments,13867,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition,13868,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition_InputArguments,13869,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_LastUpdateTime,13870,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks,13871,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments,13872,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments,13873,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate,13874,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments,13875,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments,13876,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_AddCertificate,13877,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments,13878,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_RemoveCertificate,13879,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments,13880,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_CertificateTypes,13881,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup,13882,Object
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList,13883,Object
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Size,13884,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Writable,13885,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_UserWritable,13886,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenCount,13887,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_MimeType,13888,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open,13889,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_InputArguments,13890,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_OutputArguments,13891,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close,13892,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close_InputArguments,13893,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read,13894,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_InputArguments,13895,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_OutputArguments,13896,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write,13897,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write_InputArguments,13898,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition,13899,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments,13900,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments,13901,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition,13902,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments,13903,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_LastUpdateTime,13904,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks,13905,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments,13906,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments,13907,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate,13908,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments,13909,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments,13910,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_AddCertificate,13911,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments,13912,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_RemoveCertificate,13913,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments,13914,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_CertificateTypes,13915,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder,13916,Object
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList,13917,Object
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Size,13918,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Writable,13919,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_UserWritable,13920,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenCount,13921,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_MimeType,13922,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open,13923,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_InputArguments,13924,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_OutputArguments,13925,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close,13926,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close_InputArguments,13927,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read,13928,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_InputArguments,13929,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_OutputArguments,13930,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write,13931,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write_InputArguments,13932,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition,13933,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_InputArguments,13934,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_OutputArguments,13935,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition,13936,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition_InputArguments,13937,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_LastUpdateTime,13938,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks,13939,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_InputArguments,13940,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_OutputArguments,13941,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate,13942,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_InputArguments,13943,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_OutputArguments,13944,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_AddCertificate,13945,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_AddCertificate_InputArguments,13946,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_RemoveCertificate,13947,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_RemoveCertificate_InputArguments,13948,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateTypes,13949,Variable
-ServerConfigurationType_CertificateGroups,13950,Object
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup,13951,Object
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList,13952,Object
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Size,13953,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Writable,13954,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable,13955,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount,13956,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_MimeType,13957,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open,13958,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments,13959,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments,13960,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close,13961,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments,13962,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read,13963,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments,13964,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments,13965,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write,13966,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments,13967,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition,13968,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments,13969,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments,13970,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition,13971,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments,13972,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime,13973,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks,13974,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments,13975,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments,13976,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate,13977,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments,13978,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments,13979,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate,13980,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments,13981,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate,13982,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments,13983,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateTypes,13984,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup,13985,Object
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList,13986,Object
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Size,13987,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Writable,13988,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable,13989,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount,13990,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_MimeType,13991,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open,13992,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments,13993,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments,13994,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close,13995,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments,13996,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read,13997,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments,13998,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments,13999,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write,14000,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments,14001,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition,14002,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments,14003,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments,14004,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition,14005,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments,14006,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime,14007,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks,14008,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments,14009,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments,14010,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate,14011,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments,14012,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments,14013,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate,14014,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments,14015,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate,14016,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments,14017,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateTypes,14018,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup,14019,Object
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList,14020,Object
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Size,14021,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable,14022,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable,14023,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount,14024,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_MimeType,14025,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open,14026,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments,14027,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments,14028,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close,14029,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments,14030,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read,14031,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments,14032,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments,14033,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write,14034,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments,14035,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition,14036,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments,14037,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments,14038,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition,14039,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments,14040,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime,14041,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks,14042,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments,14043,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments,14044,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate,14045,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments,14046,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments,14047,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate,14048,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments,14049,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate,14050,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments,14051,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateTypes,14052,Variable
-ServerConfiguration_CertificateGroups,14053,Object
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup,14088,Object
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList,14089,Object
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Size,14090,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Writable,14091,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable,14092,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount,14093,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_MimeType,14094,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open,14095,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments,14096,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments,14097,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close,14098,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments,14099,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read,14100,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments,14101,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments,14102,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write,14103,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments,14104,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition,14105,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments,14106,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments,14107,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition,14108,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments,14109,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime,14110,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks,14111,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments,14112,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments,14113,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate,14114,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments,14115,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments,14116,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate,14117,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments,14118,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate,14119,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments,14120,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateTypes,14121,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup,14122,Object
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList,14123,Object
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Size,14124,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable,14125,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable,14126,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount,14127,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_MimeType,14128,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open,14129,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments,14130,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments,14131,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close,14132,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments,14133,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read,14134,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments,14135,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments,14136,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write,14137,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments,14138,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition,14139,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments,14140,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments,14141,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition,14142,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments,14143,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime,14144,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks,14145,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments,14146,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments,14147,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate,14148,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments,14149,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments,14150,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate,14151,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments,14152,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate,14153,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments,14154,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateTypes,14155,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup,14156,Object
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Writable,14157,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable,14158,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_MimeType,14159,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments,14160,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateTypes,14161,Variable
-RemoveConnectionMethodType,14183,Method
-RemoveConnectionMethodType_InputArguments,14184,Variable
-PubSubConnectionType,14209,ObjectType
-PubSubConnectionType_Address,14221,Object
-PubSubConnectionType_RemoveGroup,14225,Method
-PubSubConnectionType_RemoveGroup_InputArguments,14226,Variable
-PubSubGroupType,14232,ObjectType
-PublishedVariableDataType,14273,DataType
-PublishedVariableDataType_Encoding_DefaultXml,14319,Object
-OpcUa_XmlSchema_PublishedVariableDataType,14320,Variable
-OpcUa_XmlSchema_PublishedVariableDataType_DataTypeVersion,14321,Variable
-OpcUa_XmlSchema_PublishedVariableDataType_DictionaryFragment,14322,Variable
-PublishedVariableDataType_Encoding_DefaultBinary,14323,Object
-OpcUa_BinarySchema_PublishedVariableDataType,14324,Variable
-OpcUa_BinarySchema_PublishedVariableDataType_DataTypeVersion,14325,Variable
-OpcUa_BinarySchema_PublishedVariableDataType_DictionaryFragment,14326,Variable
-AuditCreateSessionEventType_SessionId,14413,Variable
-AuditUrlMismatchEventType_SessionId,14414,Variable
-Server_ServerRedundancy_ServerNetworkGroups,14415,Variable
-PublishSubscribeType,14416,ObjectType
-PublishSubscribeType_ConnectionName_Placeholder,14417,Object
-PublishSubscribeType_ConnectionName_Placeholder_PublisherId,14418,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Status,14419,Object
-PublishSubscribeType_ConnectionName_Placeholder_Status_State,14420,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Status_Enable,14421,Method
-PublishSubscribeType_ConnectionName_Placeholder_Status_Disable,14422,Method
-PublishSubscribeType_ConnectionName_Placeholder_Address,14423,Object
-PublishSubscribeType_ConnectionName_Placeholder_RemoveGroup,14424,Method
-PublishSubscribeType_ConnectionName_Placeholder_RemoveGroup_InputArguments,14425,Variable
-PublishSubscribeType_RemoveConnection,14432,Method
-PublishSubscribeType_RemoveConnection_InputArguments,14433,Variable
-PublishSubscribeType_PublishedDataSets,14434,Object
-PublishSubscribeType_PublishedDataSets_AddPublishedDataItems,14435,Method
-PublishSubscribeType_PublishedDataSets_AddPublishedDataItems_InputArguments,14436,Variable
-PublishSubscribeType_PublishedDataSets_AddPublishedDataItems_OutputArguments,14437,Variable
-PublishSubscribeType_PublishedDataSets_AddPublishedEvents,14438,Method
-PublishSubscribeType_PublishedDataSets_AddPublishedEvents_InputArguments,14439,Variable
-PublishSubscribeType_PublishedDataSets_AddPublishedEvents_OutputArguments,14440,Variable
-PublishSubscribeType_PublishedDataSets_RemovePublishedDataSet,14441,Method
-PublishSubscribeType_PublishedDataSets_RemovePublishedDataSet_InputArguments,14442,Variable
-PublishSubscribe,14443,Object
-HasPubSubConnection,14476,ReferenceType
-DataSetFolderType,14477,ObjectType
-DataSetFolderType_DataSetFolderName_Placeholder,14478,Object
-DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems,14479,Method
-DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems_InputArguments,14480,Variable
-DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItems_OutputArguments,14481,Variable
-DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents,14482,Method
-DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents_InputArguments,14483,Variable
-DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEvents_OutputArguments,14484,Variable
-DataSetFolderType_DataSetFolderName_Placeholder_RemovePublishedDataSet,14485,Method
-DataSetFolderType_DataSetFolderName_Placeholder_RemovePublishedDataSet_InputArguments,14486,Variable
-DataSetFolderType_PublishedDataSetName_Placeholder,14487,Object
-DataSetFolderType_PublishedDataSetName_Placeholder_ConfigurationVersion,14489,Variable
-DataSetFolderType_AddPublishedDataItems,14493,Method
-DataSetFolderType_AddPublishedDataItems_InputArguments,14494,Variable
-DataSetFolderType_AddPublishedDataItems_OutputArguments,14495,Variable
-DataSetFolderType_AddPublishedEvents,14496,Method
-DataSetFolderType_AddPublishedEvents_InputArguments,14497,Variable
-DataSetFolderType_AddPublishedEvents_OutputArguments,14498,Variable
-DataSetFolderType_RemovePublishedDataSet,14499,Method
-DataSetFolderType_RemovePublishedDataSet_InputArguments,14500,Variable
-AddPublishedDataItemsMethodType,14501,Method
-AddPublishedDataItemsMethodType_InputArguments,14502,Variable
-AddPublishedDataItemsMethodType_OutputArguments,14503,Variable
-AddPublishedEventsMethodType,14504,Method
-AddPublishedEventsMethodType_InputArguments,14505,Variable
-AddPublishedEventsMethodType_OutputArguments,14506,Variable
-RemovePublishedDataSetMethodType,14507,Method
-RemovePublishedDataSetMethodType_InputArguments,14508,Variable
-PublishedDataSetType,14509,ObjectType
-PublishedDataSetType_ConfigurationVersion,14519,Variable
-DataSetMetaDataType,14523,DataType
-FieldMetaData,14524,DataType
-DataTypeDescription,14525,DataType
-StructureType_EnumStrings,14528,Variable
-KeyValuePair,14533,DataType
-PublishedDataItemsType,14534,ObjectType
-PublishedDataItemsType_ConfigurationVersion,14544,Variable
-PublishedDataItemsType_PublishedData,14548,Variable
-PublishedDataItemsType_AddVariables,14555,Method
-PublishedDataItemsType_AddVariables_InputArguments,14556,Variable
-PublishedDataItemsType_AddVariables_OutputArguments,14557,Variable
-PublishedDataItemsType_RemoveVariables,14558,Method
-PublishedDataItemsType_RemoveVariables_InputArguments,14559,Variable
-PublishedDataItemsType_RemoveVariables_OutputArguments,14560,Variable
-PublishedDataItemsAddVariablesMethodType,14564,Method
-PublishedDataItemsAddVariablesMethodType_InputArguments,14565,Variable
-PublishedDataItemsAddVariablesMethodType_OutputArguments,14566,Variable
-PublishedDataItemsRemoveVariablesMethodType,14567,Method
-PublishedDataItemsRemoveVariablesMethodType_InputArguments,14568,Variable
-PublishedDataItemsRemoveVariablesMethodType_OutputArguments,14569,Variable
-PublishedEventsType,14572,ObjectType
-PublishedEventsType_ConfigurationVersion,14582,Variable
-PublishedEventsType_PubSubEventNotifier,14586,Variable
-PublishedEventsType_SelectedFields,14587,Variable
-PublishedEventsType_Filter,14588,Variable
-ConfigurationVersionDataType,14593,DataType
-PubSubConnectionType_PublisherId,14595,Variable
-PubSubConnectionType_Status,14600,Object
-PubSubConnectionType_Status_State,14601,Variable
-PubSubConnectionType_Status_Enable,14602,Method
-PubSubConnectionType_Status_Disable,14603,Method
-PubSubConnectionTypeRemoveGroupMethodType,14604,Method
-PubSubConnectionTypeRemoveGroupMethodType_InputArguments,14605,Variable
-PubSubGroupTypeRemoveWriterMethodType,14623,Method
-PubSubGroupTypeRemoveWriterMethodType_InputArguments,14624,Variable
-PubSubGroupTypeRemoveReaderMethodType,14625,Method
-PubSubGroupTypeRemoveReaderMethodType_InputArguments,14626,Variable
-PubSubStatusType,14643,ObjectType
-PubSubStatusType_State,14644,Variable
-PubSubStatusType_Enable,14645,Method
-PubSubStatusType_Disable,14646,Method
-PubSubState,14647,DataType
-PubSubState_EnumStrings,14648,Variable
-FieldTargetDataType,14744,DataType
-DataSetMetaDataType_Encoding_DefaultXml,14794,Object
-FieldMetaData_Encoding_DefaultXml,14795,Object
-DataTypeDescription_Encoding_DefaultXml,14796,Object
-DataTypeDefinition_Encoding_DefaultXml,14797,Object
-StructureDefinition_Encoding_DefaultXml,14798,Object
-EnumDefinition_Encoding_DefaultXml,14799,Object
-StructureField_Encoding_DefaultXml,14800,Object
-EnumField_Encoding_DefaultXml,14801,Object
-KeyValuePair_Encoding_DefaultXml,14802,Object
-ConfigurationVersionDataType_Encoding_DefaultXml,14803,Object
-FieldTargetDataType_Encoding_DefaultXml,14804,Object
-OpcUa_XmlSchema_DataSetMetaDataType,14805,Variable
-OpcUa_XmlSchema_DataSetMetaDataType_DataTypeVersion,14806,Variable
-OpcUa_XmlSchema_DataSetMetaDataType_DictionaryFragment,14807,Variable
-OpcUa_XmlSchema_FieldMetaData,14808,Variable
-OpcUa_XmlSchema_FieldMetaData_DataTypeVersion,14809,Variable
-OpcUa_XmlSchema_FieldMetaData_DictionaryFragment,14810,Variable
-OpcUa_XmlSchema_DataTypeDescription,14811,Variable
-OpcUa_XmlSchema_DataTypeDescription_DataTypeVersion,14812,Variable
-OpcUa_XmlSchema_DataTypeDescription_DictionaryFragment,14813,Variable
-OpcUa_XmlSchema_EnumField,14826,Variable
-OpcUa_XmlSchema_EnumField_DataTypeVersion,14827,Variable
-OpcUa_XmlSchema_EnumField_DictionaryFragment,14828,Variable
-OpcUa_XmlSchema_KeyValuePair,14829,Variable
-OpcUa_XmlSchema_KeyValuePair_DataTypeVersion,14830,Variable
-OpcUa_XmlSchema_KeyValuePair_DictionaryFragment,14831,Variable
-OpcUa_XmlSchema_ConfigurationVersionDataType,14832,Variable
-OpcUa_XmlSchema_ConfigurationVersionDataType_DataTypeVersion,14833,Variable
-OpcUa_XmlSchema_ConfigurationVersionDataType_DictionaryFragment,14834,Variable
-OpcUa_XmlSchema_FieldTargetDataType,14835,Variable
-OpcUa_XmlSchema_FieldTargetDataType_DataTypeVersion,14836,Variable
-OpcUa_XmlSchema_FieldTargetDataType_DictionaryFragment,14837,Variable
-FieldMetaData_Encoding_DefaultBinary,14839,Object
-StructureField_Encoding_DefaultBinary,14844,Object
-EnumField_Encoding_DefaultBinary,14845,Object
-KeyValuePair_Encoding_DefaultBinary,14846,Object
-ConfigurationVersionDataType_Encoding_DefaultBinary,14847,Object
-FieldTargetDataType_Encoding_DefaultBinary,14848,Object
-OpcUa_BinarySchema_DataSetMetaDataType,14849,Variable
-OpcUa_BinarySchema_DataSetMetaDataType_DataTypeVersion,14850,Variable
-OpcUa_BinarySchema_DataSetMetaDataType_DictionaryFragment,14851,Variable
-OpcUa_BinarySchema_FieldMetaData,14852,Variable
-OpcUa_BinarySchema_FieldMetaData_DataTypeVersion,14853,Variable
-OpcUa_BinarySchema_FieldMetaData_DictionaryFragment,14854,Variable
-OpcUa_BinarySchema_DataTypeDescription,14855,Variable
-OpcUa_BinarySchema_DataTypeDescription_DataTypeVersion,14856,Variable
-OpcUa_BinarySchema_DataTypeDescription_DictionaryFragment,14857,Variable
-OpcUa_BinarySchema_EnumField,14870,Variable
-OpcUa_BinarySchema_EnumField_DataTypeVersion,14871,Variable
-OpcUa_BinarySchema_EnumField_DictionaryFragment,14872,Variable
-OpcUa_BinarySchema_KeyValuePair,14873,Variable
-OpcUa_BinarySchema_KeyValuePair_DataTypeVersion,14874,Variable
-OpcUa_BinarySchema_KeyValuePair_DictionaryFragment,14875,Variable
-OpcUa_BinarySchema_ConfigurationVersionDataType,14876,Variable
-OpcUa_BinarySchema_ConfigurationVersionDataType_DataTypeVersion,14877,Variable
-OpcUa_BinarySchema_ConfigurationVersionDataType_DictionaryFragment,14878,Variable
-OpcUa_BinarySchema_FieldTargetDataType_DataTypeVersion,14880,Variable
-OpcUa_BinarySchema_FieldTargetDataType_DictionaryFragment,14881,Variable
-CertificateExpirationAlarmType_ExpirationLimit,14900,Variable
-DataSetToWriter,14936,ReferenceType
-DataTypeDictionaryType_Deprecated,15001,Variable
-MaxCharacters,15002,Variable
-ServerType_UrisVersion,15003,Variable
-Server_UrisVersion,15004,Variable
-SimpleTypeDescription,15005,DataType
-UABinaryFileDataType,15006,DataType
-BrokerConnectionTransportDataType,15007,DataType
-BrokerTransportQualityOfService,15008,DataType
-BrokerTransportQualityOfService_EnumStrings,15009,Variable
-SecurityGroupFolderType_SecurityGroupName_Placeholder_KeyLifetime,15010,Variable
-SecurityGroupFolderType_SecurityGroupName_Placeholder_SecurityPolicyUri,15011,Variable
-SecurityGroupFolderType_SecurityGroupName_Placeholder_MaxFutureKeyCount,15012,Variable
-AuditConditionResetEventType,15013,ObjectType
-AuditConditionResetEventType_EventId,15014,Variable
-AuditConditionResetEventType_EventType,15015,Variable
-AuditConditionResetEventType_SourceNode,15016,Variable
-AuditConditionResetEventType_SourceName,15017,Variable
-AuditConditionResetEventType_Time,15018,Variable
-AuditConditionResetEventType_ReceiveTime,15019,Variable
-AuditConditionResetEventType_LocalTime,15020,Variable
-AuditConditionResetEventType_Message,15021,Variable
-AuditConditionResetEventType_Severity,15022,Variable
-AuditConditionResetEventType_ActionTimeStamp,15023,Variable
-AuditConditionResetEventType_Status,15024,Variable
-AuditConditionResetEventType_ServerId,15025,Variable
-AuditConditionResetEventType_ClientAuditEntryId,15026,Variable
-AuditConditionResetEventType_ClientUserId,15027,Variable
-AuditConditionResetEventType_MethodId,15028,Variable
-AuditConditionResetEventType_InputArguments,15029,Variable
-PermissionType_OptionSetValues,15030,Variable
-AccessLevelType,15031,DataType
-AccessLevelType_OptionSetValues,15032,Variable
-EventNotifierType,15033,DataType
-EventNotifierType_OptionSetValues,15034,Variable
-AccessRestrictionType_OptionSetValues,15035,Variable
-AttributeWriteMask_OptionSetValues,15036,Variable
-OpcUa_BinarySchema_Deprecated,15037,Variable
-ProgramStateMachineType_ProgramDiagnostic_LastMethodInputValues,15038,Variable
-OpcUa_XmlSchema_Deprecated,15039,Variable
-ProgramStateMachineType_ProgramDiagnostic_LastMethodOutputValues,15040,Variable
-KeyValuePair_Encoding_DefaultJson,15041,Object
-IdentityMappingRuleType_Encoding_DefaultJson,15042,Object
-SecurityGroupFolderType_SecurityGroupName_Placeholder_MaxPastKeyCount,15043,Variable
-TrustListDataType_Encoding_DefaultJson,15044,Object
-DecimalDataType_Encoding_DefaultJson,15045,Object
-SecurityGroupType_KeyLifetime,15046,Variable
-SecurityGroupType_SecurityPolicyUri,15047,Variable
-SecurityGroupType_MaxFutureKeyCount,15048,Variable
-ConfigurationVersionDataType_Encoding_DefaultJson,15049,Object
-DataSetMetaDataType_Encoding_DefaultJson,15050,Object
-FieldMetaData_Encoding_DefaultJson,15051,Object
-PublishedEventsType_ModifyFieldSelection,15052,Method
-PublishedEventsType_ModifyFieldSelection_InputArguments,15053,Variable
-PublishedEventsTypeModifyFieldSelectionMethodType,15054,Method
-PublishedEventsTypeModifyFieldSelectionMethodType_InputArguments,15055,Variable
-SecurityGroupType_MaxPastKeyCount,15056,Variable
-DataTypeDescription_Encoding_DefaultJson,15057,Object
-StructureDescription_Encoding_DefaultJson,15058,Object
-EnumDescription_Encoding_DefaultJson,15059,Object
-PublishedVariableDataType_Encoding_DefaultJson,15060,Object
-FieldTargetDataType_Encoding_DefaultJson,15061,Object
-RolePermissionType_Encoding_DefaultJson,15062,Object
-DataTypeDefinition_Encoding_DefaultJson,15063,Object
-DatagramConnectionTransportType,15064,ObjectType
-StructureField_Encoding_DefaultJson,15065,Object
-StructureDefinition_Encoding_DefaultJson,15066,Object
-EnumDefinition_Encoding_DefaultJson,15067,Object
-Node_Encoding_DefaultJson,15068,Object
-InstanceNode_Encoding_DefaultJson,15069,Object
-TypeNode_Encoding_DefaultJson,15070,Object
-ObjectNode_Encoding_DefaultJson,15071,Object
-DatagramConnectionTransportType_DiscoveryAddress,15072,Object
-ObjectTypeNode_Encoding_DefaultJson,15073,Object
-VariableNode_Encoding_DefaultJson,15074,Object
-VariableTypeNode_Encoding_DefaultJson,15075,Object
-ReferenceTypeNode_Encoding_DefaultJson,15076,Object
-MethodNode_Encoding_DefaultJson,15077,Object
-ViewNode_Encoding_DefaultJson,15078,Object
-DataTypeNode_Encoding_DefaultJson,15079,Object
-ReferenceNode_Encoding_DefaultJson,15080,Object
-Argument_Encoding_DefaultJson,15081,Object
-EnumValueType_Encoding_DefaultJson,15082,Object
-EnumField_Encoding_DefaultJson,15083,Object
-OptionSet_Encoding_DefaultJson,15084,Object
-Union_Encoding_DefaultJson,15085,Object
-TimeZoneDataType_Encoding_DefaultJson,15086,Object
-ApplicationDescription_Encoding_DefaultJson,15087,Object
-RequestHeader_Encoding_DefaultJson,15088,Object
-ResponseHeader_Encoding_DefaultJson,15089,Object
-ServiceFault_Encoding_DefaultJson,15090,Object
-SessionlessInvokeRequestType_Encoding_DefaultJson,15091,Object
-SessionlessInvokeResponseType_Encoding_DefaultJson,15092,Object
-FindServersRequest_Encoding_DefaultJson,15093,Object
-FindServersResponse_Encoding_DefaultJson,15094,Object
-ServerOnNetwork_Encoding_DefaultJson,15095,Object
-FindServersOnNetworkRequest_Encoding_DefaultJson,15096,Object
-FindServersOnNetworkResponse_Encoding_DefaultJson,15097,Object
-UserTokenPolicy_Encoding_DefaultJson,15098,Object
-EndpointDescription_Encoding_DefaultJson,15099,Object
-GetEndpointsRequest_Encoding_DefaultJson,15100,Object
-GetEndpointsResponse_Encoding_DefaultJson,15101,Object
-RegisteredServer_Encoding_DefaultJson,15102,Object
-RegisterServerRequest_Encoding_DefaultJson,15103,Object
-RegisterServerResponse_Encoding_DefaultJson,15104,Object
-DiscoveryConfiguration_Encoding_DefaultJson,15105,Object
-MdnsDiscoveryConfiguration_Encoding_DefaultJson,15106,Object
-RegisterServer2Request_Encoding_DefaultJson,15107,Object
-SubscribedDataSetType,15108,ObjectType
-ChoiceStateType,15109,ObjectType
-ChoiceStateType_StateNumber,15110,Variable
-TargetVariablesType,15111,ObjectType
-HasGuard,15112,ReferenceType
-GuardVariableType,15113,VariableType
-TargetVariablesType_TargetVariables,15114,Variable
-TargetVariablesType_AddTargetVariables,15115,Method
-TargetVariablesType_AddTargetVariables_InputArguments,15116,Variable
-TargetVariablesType_AddTargetVariables_OutputArguments,15117,Variable
-TargetVariablesType_RemoveTargetVariables,15118,Method
-TargetVariablesType_RemoveTargetVariables_InputArguments,15119,Variable
-TargetVariablesType_RemoveTargetVariables_OutputArguments,15120,Variable
-TargetVariablesTypeAddTargetVariablesMethodType,15121,Method
-TargetVariablesTypeAddTargetVariablesMethodType_InputArguments,15122,Variable
-TargetVariablesTypeAddTargetVariablesMethodType_OutputArguments,15123,Variable
-TargetVariablesTypeRemoveTargetVariablesMethodType,15124,Method
-TargetVariablesTypeRemoveTargetVariablesMethodType_InputArguments,15125,Variable
-TargetVariablesTypeRemoveTargetVariablesMethodType_OutputArguments,15126,Variable
-SubscribedDataSetMirrorType,15127,ObjectType
-ExpressionGuardVariableType,15128,VariableType
-ExpressionGuardVariableType_Expression,15129,Variable
-RegisterServer2Response_Encoding_DefaultJson,15130,Object
-ChannelSecurityToken_Encoding_DefaultJson,15131,Object
-OpenSecureChannelRequest_Encoding_DefaultJson,15132,Object
-OpenSecureChannelResponse_Encoding_DefaultJson,15133,Object
-CloseSecureChannelRequest_Encoding_DefaultJson,15134,Object
-CloseSecureChannelResponse_Encoding_DefaultJson,15135,Object
-SignedSoftwareCertificate_Encoding_DefaultJson,15136,Object
-SignatureData_Encoding_DefaultJson,15137,Object
-CreateSessionRequest_Encoding_DefaultJson,15138,Object
-CreateSessionResponse_Encoding_DefaultJson,15139,Object
-UserIdentityToken_Encoding_DefaultJson,15140,Object
-AnonymousIdentityToken_Encoding_DefaultJson,15141,Object
-UserNameIdentityToken_Encoding_DefaultJson,15142,Object
-X509IdentityToken_Encoding_DefaultJson,15143,Object
-IssuedIdentityToken_Encoding_DefaultJson,15144,Object
-ActivateSessionRequest_Encoding_DefaultJson,15145,Object
-ActivateSessionResponse_Encoding_DefaultJson,15146,Object
-CloseSessionRequest_Encoding_DefaultJson,15147,Object
-CloseSessionResponse_Encoding_DefaultJson,15148,Object
-CancelRequest_Encoding_DefaultJson,15149,Object
-CancelResponse_Encoding_DefaultJson,15150,Object
-NodeAttributes_Encoding_DefaultJson,15151,Object
-ObjectAttributes_Encoding_DefaultJson,15152,Object
-VariableAttributes_Encoding_DefaultJson,15153,Object
-DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface,15154,Variable
-BrokerConnectionTransportType,15155,ObjectType
-BrokerConnectionTransportType_ResourceUri,15156,Variable
-MethodAttributes_Encoding_DefaultJson,15157,Object
-ObjectTypeAttributes_Encoding_DefaultJson,15158,Object
-VariableTypeAttributes_Encoding_DefaultJson,15159,Object
-ReferenceTypeAttributes_Encoding_DefaultJson,15160,Object
-DataTypeAttributes_Encoding_DefaultJson,15161,Object
-ViewAttributes_Encoding_DefaultJson,15162,Object
-GenericAttributeValue_Encoding_DefaultJson,15163,Object
-GenericAttributes_Encoding_DefaultJson,15164,Object
-AddNodesItem_Encoding_DefaultJson,15165,Object
-AddNodesResult_Encoding_DefaultJson,15166,Object
-AddNodesRequest_Encoding_DefaultJson,15167,Object
-AddNodesResponse_Encoding_DefaultJson,15168,Object
-AddReferencesItem_Encoding_DefaultJson,15169,Object
-AddReferencesRequest_Encoding_DefaultJson,15170,Object
-AddReferencesResponse_Encoding_DefaultJson,15171,Object
-DeleteNodesItem_Encoding_DefaultJson,15172,Object
-DeleteNodesRequest_Encoding_DefaultJson,15173,Object
-DeleteNodesResponse_Encoding_DefaultJson,15174,Object
-DeleteReferencesItem_Encoding_DefaultJson,15175,Object
-DeleteReferencesRequest_Encoding_DefaultJson,15176,Object
-DeleteReferencesResponse_Encoding_DefaultJson,15177,Object
-BrokerConnectionTransportType_AuthenticationProfileUri,15178,Variable
-ViewDescription_Encoding_DefaultJson,15179,Object
-BrowseDescription_Encoding_DefaultJson,15180,Object
-UserCredentialCertificateType,15181,ObjectType
-ReferenceDescription_Encoding_DefaultJson,15182,Object
-BrowseResult_Encoding_DefaultJson,15183,Object
-BrowseRequest_Encoding_DefaultJson,15184,Object
-BrowseResponse_Encoding_DefaultJson,15185,Object
-BrowseNextRequest_Encoding_DefaultJson,15186,Object
-BrowseNextResponse_Encoding_DefaultJson,15187,Object
-RelativePathElement_Encoding_DefaultJson,15188,Object
-RelativePath_Encoding_DefaultJson,15189,Object
-BrowsePath_Encoding_DefaultJson,15190,Object
-BrowsePathTarget_Encoding_DefaultJson,15191,Object
-BrowsePathResult_Encoding_DefaultJson,15192,Object
-TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultJson,15193,Object
-TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultJson,15194,Object
-RegisterNodesRequest_Encoding_DefaultJson,15195,Object
-RegisterNodesResponse_Encoding_DefaultJson,15196,Object
-UnregisterNodesRequest_Encoding_DefaultJson,15197,Object
-UnregisterNodesResponse_Encoding_DefaultJson,15198,Object
-EndpointConfiguration_Encoding_DefaultJson,15199,Object
-QueryDataDescription_Encoding_DefaultJson,15200,Object
-NodeTypeDescription_Encoding_DefaultJson,15201,Object
-QueryDataSet_Encoding_DefaultJson,15202,Object
-NodeReference_Encoding_DefaultJson,15203,Object
-ContentFilterElement_Encoding_DefaultJson,15204,Object
-ContentFilter_Encoding_DefaultJson,15205,Object
-FilterOperand_Encoding_DefaultJson,15206,Object
-ElementOperand_Encoding_DefaultJson,15207,Object
-LiteralOperand_Encoding_DefaultJson,15208,Object
-AttributeOperand_Encoding_DefaultJson,15209,Object
-SimpleAttributeOperand_Encoding_DefaultJson,15210,Object
-ContentFilterElementResult_Encoding_DefaultJson,15211,Object
-PublishSubscribeType_GetSecurityKeys,15212,Method
-PublishSubscribeType_GetSecurityKeys_InputArguments,15213,Variable
-PublishSubscribeType_GetSecurityKeys_OutputArguments,15214,Variable
-PublishSubscribe_GetSecurityKeys,15215,Method
-PublishSubscribe_GetSecurityKeys_InputArguments,15216,Variable
-PublishSubscribe_GetSecurityKeys_OutputArguments,15217,Variable
-GetSecurityKeysMethodType,15218,Method
-GetSecurityKeysMethodType_InputArguments,15219,Variable
-GetSecurityKeysMethodType_OutputArguments,15220,Variable
-DataSetFolderType_PublishedDataSetName_Placeholder_DataSetMetaData,15221,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder,15222,Object
-PublishedDataSetType_DataSetWriterName_Placeholder_Status,15223,Object
-PublishedDataSetType_DataSetWriterName_Placeholder_Status_State,15224,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Status_Enable,15225,Method
-PublishedDataSetType_DataSetWriterName_Placeholder_Status_Disable,15226,Method
-PublishedDataSetType_DataSetWriterName_Placeholder_TransportSettings,15227,Object
-ContentFilterResult_Encoding_DefaultJson,15228,Object
-PublishedDataSetType_DataSetMetaData,15229,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder,15230,Object
-PublishedDataItemsType_DataSetWriterName_Placeholder_Status,15231,Object
-PublishedDataItemsType_DataSetWriterName_Placeholder_Status_State,15232,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Status_Enable,15233,Method
-PublishedDataItemsType_DataSetWriterName_Placeholder_Status_Disable,15234,Method
-PublishedDataItemsType_DataSetWriterName_Placeholder_TransportSettings,15235,Object
-ParsingResult_Encoding_DefaultJson,15236,Object
-PublishedDataItemsType_DataSetMetaData,15237,Variable
-PublishedEventsType_DataSetWriterName_Placeholder,15238,Object
-PublishedEventsType_DataSetWriterName_Placeholder_Status,15239,Object
-PublishedEventsType_DataSetWriterName_Placeholder_Status_State,15240,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Status_Enable,15241,Method
-PublishedEventsType_DataSetWriterName_Placeholder_Status_Disable,15242,Method
-PublishedEventsType_DataSetWriterName_Placeholder_TransportSettings,15243,Object
-QueryFirstRequest_Encoding_DefaultJson,15244,Object
-PublishedEventsType_DataSetMetaData,15245,Variable
-BrokerWriterGroupTransportType_ResourceUri,15246,Variable
-BrokerWriterGroupTransportType_AuthenticationProfileUri,15247,Variable
-CreateCredentialMethodType,15248,Method
-BrokerWriterGroupTransportType_RequestedDeliveryGuarantee,15249,Variable
-BrokerDataSetWriterTransportType_ResourceUri,15250,Variable
-BrokerDataSetWriterTransportType_AuthenticationProfileUri,15251,Variable
-QueryFirstResponse_Encoding_DefaultJson,15252,Object
-CreateCredentialMethodType_InputArguments,15253,Variable
-QueryNextRequest_Encoding_DefaultJson,15254,Object
-QueryNextResponse_Encoding_DefaultJson,15255,Object
-ReadValueId_Encoding_DefaultJson,15256,Object
-ReadRequest_Encoding_DefaultJson,15257,Object
-ReadResponse_Encoding_DefaultJson,15258,Object
-HistoryReadValueId_Encoding_DefaultJson,15259,Object
-HistoryReadResult_Encoding_DefaultJson,15260,Object
-HistoryReadDetails_Encoding_DefaultJson,15261,Object
-ReadEventDetails_Encoding_DefaultJson,15262,Object
-ReadRawModifiedDetails_Encoding_DefaultJson,15263,Object
-ReadProcessedDetails_Encoding_DefaultJson,15264,Object
-PubSubGroupType_Status,15265,Object
-PubSubGroupType_Status_State,15266,Variable
-PubSubGroupType_Status_Enable,15267,Method
-PubSubGroupType_Status_Disable,15268,Method
-ReadAtTimeDetails_Encoding_DefaultJson,15269,Object
-HistoryData_Encoding_DefaultJson,15270,Object
-ModificationInfo_Encoding_DefaultJson,15271,Object
-HistoryModifiedData_Encoding_DefaultJson,15272,Object
-HistoryEvent_Encoding_DefaultJson,15273,Object
-HistoryReadRequest_Encoding_DefaultJson,15274,Object
-HistoryReadResponse_Encoding_DefaultJson,15275,Object
-WriteValue_Encoding_DefaultJson,15276,Object
-WriteRequest_Encoding_DefaultJson,15277,Object
-WriteResponse_Encoding_DefaultJson,15278,Object
-HistoryUpdateDetails_Encoding_DefaultJson,15279,Object
-UpdateDataDetails_Encoding_DefaultJson,15280,Object
-UpdateStructureDataDetails_Encoding_DefaultJson,15281,Object
-UpdateEventDetails_Encoding_DefaultJson,15282,Object
-DeleteRawModifiedDetails_Encoding_DefaultJson,15283,Object
-DeleteAtTimeDetails_Encoding_DefaultJson,15284,Object
-DeleteEventDetails_Encoding_DefaultJson,15285,Object
-HistoryUpdateResult_Encoding_DefaultJson,15286,Object
-HistoryUpdateRequest_Encoding_DefaultJson,15287,Object
-HistoryUpdateResponse_Encoding_DefaultJson,15288,Object
-CallMethodRequest_Encoding_DefaultJson,15289,Object
-CallMethodResult_Encoding_DefaultJson,15290,Object
-CallRequest_Encoding_DefaultJson,15291,Object
-CallResponse_Encoding_DefaultJson,15292,Object
-MonitoringFilter_Encoding_DefaultJson,15293,Object
-DataChangeFilter_Encoding_DefaultJson,15294,Object
-EventFilter_Encoding_DefaultJson,15295,Object
-HasDataSetWriter,15296,ReferenceType
-HasDataSetReader,15297,ReferenceType
-DataSetWriterType,15298,ObjectType
-DataSetWriterType_Status,15299,Object
-DataSetWriterType_Status_State,15300,Variable
-DataSetWriterType_Status_Enable,15301,Method
-DataSetWriterType_Status_Disable,15302,Method
-DataSetWriterType_TransportSettings,15303,Object
-AggregateConfiguration_Encoding_DefaultJson,15304,Object
-DataSetWriterTransportType,15305,ObjectType
-DataSetReaderType,15306,ObjectType
-DataSetReaderType_Status,15307,Object
-DataSetReaderType_Status_State,15308,Variable
-DataSetReaderType_Status_Enable,15309,Method
-DataSetReaderType_Status_Disable,15310,Method
-DataSetReaderType_TransportSettings,15311,Object
-AggregateFilter_Encoding_DefaultJson,15312,Object
-MonitoringFilterResult_Encoding_DefaultJson,15313,Object
-EventFilterResult_Encoding_DefaultJson,15314,Object
-AggregateFilterResult_Encoding_DefaultJson,15315,Object
-DataSetReaderType_SubscribedDataSet,15316,Object
-ElseGuardVariableType,15317,VariableType
-BaseAnalogType,15318,VariableType
-DataSetReaderTransportType,15319,ObjectType
-MonitoringParameters_Encoding_DefaultJson,15320,Object
-MonitoredItemCreateRequest_Encoding_DefaultJson,15321,Object
-MonitoredItemCreateResult_Encoding_DefaultJson,15322,Object
-CreateMonitoredItemsRequest_Encoding_DefaultJson,15323,Object
-CreateMonitoredItemsResponse_Encoding_DefaultJson,15324,Object
-MonitoredItemModifyRequest_Encoding_DefaultJson,15325,Object
-MonitoredItemModifyResult_Encoding_DefaultJson,15326,Object
-ModifyMonitoredItemsRequest_Encoding_DefaultJson,15327,Object
-ModifyMonitoredItemsResponse_Encoding_DefaultJson,15328,Object
-SetMonitoringModeRequest_Encoding_DefaultJson,15329,Object
-BrokerDataSetWriterTransportType_RequestedDeliveryGuarantee,15330,Variable
-SetMonitoringModeResponse_Encoding_DefaultJson,15331,Object
-SetTriggeringRequest_Encoding_DefaultJson,15332,Object
-SetTriggeringResponse_Encoding_DefaultJson,15333,Object
-BrokerDataSetReaderTransportType_ResourceUri,15334,Variable
-DeleteMonitoredItemsRequest_Encoding_DefaultJson,15335,Object
-DeleteMonitoredItemsResponse_Encoding_DefaultJson,15336,Object
-CreateSubscriptionRequest_Encoding_DefaultJson,15337,Object
-CreateSubscriptionResponse_Encoding_DefaultJson,15338,Object
-ModifySubscriptionRequest_Encoding_DefaultJson,15339,Object
-ModifySubscriptionResponse_Encoding_DefaultJson,15340,Object
-SetPublishingModeRequest_Encoding_DefaultJson,15341,Object
-SetPublishingModeResponse_Encoding_DefaultJson,15342,Object
-NotificationMessage_Encoding_DefaultJson,15343,Object
-NotificationData_Encoding_DefaultJson,15344,Object
-DataChangeNotification_Encoding_DefaultJson,15345,Object
-MonitoredItemNotification_Encoding_DefaultJson,15346,Object
-EventNotificationList_Encoding_DefaultJson,15347,Object
-EventFieldList_Encoding_DefaultJson,15348,Object
-HistoryEventFieldList_Encoding_DefaultJson,15349,Object
-StatusChangeNotification_Encoding_DefaultJson,15350,Object
-SubscriptionAcknowledgement_Encoding_DefaultJson,15351,Object
-PublishRequest_Encoding_DefaultJson,15352,Object
-PublishResponse_Encoding_DefaultJson,15353,Object
-RepublishRequest_Encoding_DefaultJson,15354,Object
-RepublishResponse_Encoding_DefaultJson,15355,Object
-TransferResult_Encoding_DefaultJson,15356,Object
-TransferSubscriptionsRequest_Encoding_DefaultJson,15357,Object
-TransferSubscriptionsResponse_Encoding_DefaultJson,15358,Object
-DeleteSubscriptionsRequest_Encoding_DefaultJson,15359,Object
-DeleteSubscriptionsResponse_Encoding_DefaultJson,15360,Object
-BuildInfo_Encoding_DefaultJson,15361,Object
-RedundantServerDataType_Encoding_DefaultJson,15362,Object
-EndpointUrlListDataType_Encoding_DefaultJson,15363,Object
-NetworkGroupDataType_Encoding_DefaultJson,15364,Object
-SamplingIntervalDiagnosticsDataType_Encoding_DefaultJson,15365,Object
-ServerDiagnosticsSummaryDataType_Encoding_DefaultJson,15366,Object
-ServerStatusDataType_Encoding_DefaultJson,15367,Object
-SessionDiagnosticsDataType_Encoding_DefaultJson,15368,Object
-SessionSecurityDiagnosticsDataType_Encoding_DefaultJson,15369,Object
-ServiceCounterDataType_Encoding_DefaultJson,15370,Object
-StatusResult_Encoding_DefaultJson,15371,Object
-SubscriptionDiagnosticsDataType_Encoding_DefaultJson,15372,Object
-ModelChangeStructureDataType_Encoding_DefaultJson,15373,Object
-SemanticChangeStructureDataType_Encoding_DefaultJson,15374,Object
-Range_Encoding_DefaultJson,15375,Object
-EUInformation_Encoding_DefaultJson,15376,Object
-ComplexNumberType_Encoding_DefaultJson,15377,Object
-DoubleComplexNumberType_Encoding_DefaultJson,15378,Object
-AxisInformation_Encoding_DefaultJson,15379,Object
-XVType_Encoding_DefaultJson,15380,Object
-ProgramDiagnosticDataType_Encoding_DefaultJson,15381,Object
-Annotation_Encoding_DefaultJson,15382,Object
-ProgramDiagnostic2Type,15383,VariableType
-ProgramDiagnostic2Type_CreateSessionId,15384,Variable
-ProgramDiagnostic2Type_CreateClientName,15385,Variable
-ProgramDiagnostic2Type_InvocationCreationTime,15386,Variable
-ProgramDiagnostic2Type_LastTransitionTime,15387,Variable
-ProgramDiagnostic2Type_LastMethodCall,15388,Variable
-ProgramDiagnostic2Type_LastMethodSessionId,15389,Variable
-ProgramDiagnostic2Type_LastMethodInputArguments,15390,Variable
-ProgramDiagnostic2Type_LastMethodOutputArguments,15391,Variable
-ProgramDiagnostic2Type_LastMethodInputValues,15392,Variable
-ProgramDiagnostic2Type_LastMethodOutputValues,15393,Variable
-ProgramDiagnostic2Type_LastMethodCallTime,15394,Variable
-ProgramDiagnostic2Type_LastMethodReturnStatus,15395,Variable
-ProgramDiagnostic2DataType,15396,DataType
-ProgramDiagnostic2DataType_Encoding_DefaultBinary,15397,Object
-OpcUa_BinarySchema_ProgramDiagnostic2DataType,15398,Variable
-OpcUa_BinarySchema_ProgramDiagnostic2DataType_DataTypeVersion,15399,Variable
-OpcUa_BinarySchema_ProgramDiagnostic2DataType_DictionaryFragment,15400,Variable
-ProgramDiagnostic2DataType_Encoding_DefaultXml,15401,Object
-OpcUa_XmlSchema_ProgramDiagnostic2DataType,15402,Variable
-OpcUa_XmlSchema_ProgramDiagnostic2DataType_DataTypeVersion,15403,Variable
-OpcUa_XmlSchema_ProgramDiagnostic2DataType_DictionaryFragment,15404,Variable
-ProgramDiagnostic2DataType_Encoding_DefaultJson,15405,Object
-AccessLevelExType,15406,DataType
-AccessLevelExType_OptionSetValues,15407,Variable
-RoleSetType_RoleName_Placeholder_ApplicationsExclude,15408,Variable
-RoleSetType_RoleName_Placeholder_EndpointsExclude,15409,Variable
-RoleType_ApplicationsExclude,15410,Variable
-RoleType_EndpointsExclude,15411,Variable
-WellKnownRole_Anonymous_ApplicationsExclude,15412,Variable
-WellKnownRole_Anonymous_EndpointsExclude,15413,Variable
-WellKnownRole_AuthenticatedUser_ApplicationsExclude,15414,Variable
-WellKnownRole_AuthenticatedUser_EndpointsExclude,15415,Variable
-WellKnownRole_Observer_ApplicationsExclude,15416,Variable
-WellKnownRole_Observer_EndpointsExclude,15417,Variable
-WellKnownRole_Operator_ApplicationsExclude,15418,Variable
-BrokerDataSetReaderTransportType_AuthenticationProfileUri,15419,Variable
-BrokerDataSetReaderTransportType_RequestedDeliveryGuarantee,15420,Variable
-SimpleTypeDescription_Encoding_DefaultBinary,15421,Object
-UABinaryFileDataType_Encoding_DefaultBinary,15422,Object
-WellKnownRole_Operator_EndpointsExclude,15423,Variable
-WellKnownRole_Engineer_ApplicationsExclude,15424,Variable
-WellKnownRole_Engineer_EndpointsExclude,15425,Variable
-WellKnownRole_Supervisor_ApplicationsExclude,15426,Variable
-WellKnownRole_Supervisor_EndpointsExclude,15427,Variable
-WellKnownRole_ConfigureAdmin_ApplicationsExclude,15428,Variable
-WellKnownRole_ConfigureAdmin_EndpointsExclude,15429,Variable
-WellKnownRole_SecurityAdmin_ApplicationsExclude,15430,Variable
-PublishSubscribeType_GetSecurityGroup,15431,Method
-PublishSubscribeType_GetSecurityGroup_InputArguments,15432,Variable
-PublishSubscribeType_GetSecurityGroup_OutputArguments,15433,Variable
-PublishSubscribeType_SecurityGroups,15434,Object
-PublishSubscribeType_SecurityGroups_AddSecurityGroup,15435,Method
-PublishSubscribeType_SecurityGroups_AddSecurityGroup_InputArguments,15436,Variable
-PublishSubscribeType_SecurityGroups_AddSecurityGroup_OutputArguments,15437,Variable
-PublishSubscribeType_SecurityGroups_RemoveSecurityGroup,15438,Method
-PublishSubscribeType_SecurityGroups_RemoveSecurityGroup_InputArguments,15439,Variable
-PublishSubscribe_GetSecurityGroup,15440,Method
-PublishSubscribe_GetSecurityGroup_InputArguments,15441,Variable
-PublishSubscribe_GetSecurityGroup_OutputArguments,15442,Variable
-PublishSubscribe_SecurityGroups,15443,Object
-PublishSubscribe_SecurityGroups_AddSecurityGroup,15444,Method
-PublishSubscribe_SecurityGroups_AddSecurityGroup_InputArguments,15445,Variable
-PublishSubscribe_SecurityGroups_AddSecurityGroup_OutputArguments,15446,Variable
-PublishSubscribe_SecurityGroups_RemoveSecurityGroup,15447,Method
-PublishSubscribe_SecurityGroups_RemoveSecurityGroup_InputArguments,15448,Variable
-GetSecurityGroupMethodType,15449,Method
-GetSecurityGroupMethodType_InputArguments,15450,Variable
-GetSecurityGroupMethodType_OutputArguments,15451,Variable
-SecurityGroupFolderType,15452,ObjectType
-SecurityGroupFolderType_SecurityGroupFolderName_Placeholder,15453,Object
-SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup,15454,Method
-SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup_InputArguments,15455,Variable
-SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_AddSecurityGroup_OutputArguments,15456,Variable
-SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_RemoveSecurityGroup,15457,Method
-SecurityGroupFolderType_SecurityGroupFolderName_Placeholder_RemoveSecurityGroup_InputArguments,15458,Variable
-SecurityGroupFolderType_SecurityGroupName_Placeholder,15459,Object
-SecurityGroupFolderType_SecurityGroupName_Placeholder_SecurityGroupId,15460,Variable
-SecurityGroupFolderType_AddSecurityGroup,15461,Method
-SecurityGroupFolderType_AddSecurityGroup_InputArguments,15462,Variable
-SecurityGroupFolderType_AddSecurityGroup_OutputArguments,15463,Variable
-SecurityGroupFolderType_RemoveSecurityGroup,15464,Method
-SecurityGroupFolderType_RemoveSecurityGroup_InputArguments,15465,Variable
-AddSecurityGroupMethodType,15466,Method
-AddSecurityGroupMethodType_InputArguments,15467,Variable
-AddSecurityGroupMethodType_OutputArguments,15468,Variable
-RemoveSecurityGroupMethodType,15469,Method
-RemoveSecurityGroupMethodType_InputArguments,15470,Variable
-SecurityGroupType,15471,ObjectType
-SecurityGroupType_SecurityGroupId,15472,Variable
-DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields,15473,Object
-DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField,15474,Method
-DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField_InputArguments,15475,Variable
-DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_AddExtensionField_OutputArguments,15476,Variable
-DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_RemoveExtensionField,15477,Method
-DataSetFolderType_PublishedDataSetName_Placeholder_ExtensionFields_RemoveExtensionField_InputArguments,15478,Variable
-BrokerConnectionTransportDataType_Encoding_DefaultBinary,15479,Object
-WriterGroupDataType,15480,DataType
-PublishedDataSetType_ExtensionFields,15481,Object
-PublishedDataSetType_ExtensionFields_AddExtensionField,15482,Method
-PublishedDataSetType_ExtensionFields_AddExtensionField_InputArguments,15483,Variable
-PublishedDataSetType_ExtensionFields_AddExtensionField_OutputArguments,15484,Variable
-PublishedDataSetType_ExtensionFields_RemoveExtensionField,15485,Method
-PublishedDataSetType_ExtensionFields_RemoveExtensionField_InputArguments,15486,Variable
-StructureDescription,15487,DataType
-EnumDescription,15488,DataType
-ExtensionFieldsType,15489,ObjectType
-ExtensionFieldsType_ExtensionFieldName_Placeholder,15490,Variable
-ExtensionFieldsType_AddExtensionField,15491,Method
-ExtensionFieldsType_AddExtensionField_InputArguments,15492,Variable
-ExtensionFieldsType_AddExtensionField_OutputArguments,15493,Variable
-ExtensionFieldsType_RemoveExtensionField,15494,Method
-ExtensionFieldsType_RemoveExtensionField_InputArguments,15495,Variable
-AddExtensionFieldMethodType,15496,Method
-AddExtensionFieldMethodType_InputArguments,15497,Variable
-AddExtensionFieldMethodType_OutputArguments,15498,Variable
-RemoveExtensionFieldMethodType,15499,Method
-RemoveExtensionFieldMethodType_InputArguments,15500,Variable
-OpcUa_BinarySchema_SimpleTypeDescription,15501,Variable
-NetworkAddressDataType,15502,DataType
-PublishedDataItemsType_ExtensionFields,15503,Object
-PublishedDataItemsType_ExtensionFields_AddExtensionField,15504,Method
-PublishedDataItemsType_ExtensionFields_AddExtensionField_InputArguments,15505,Variable
-PublishedDataItemsType_ExtensionFields_AddExtensionField_OutputArguments,15506,Variable
-PublishedDataItemsType_ExtensionFields_RemoveExtensionField,15507,Method
-PublishedDataItemsType_ExtensionFields_RemoveExtensionField_InputArguments,15508,Variable
-OpcUa_BinarySchema_SimpleTypeDescription_DataTypeVersion,15509,Variable
-NetworkAddressUrlDataType,15510,DataType
-PublishedEventsType_ExtensionFields,15511,Object
-PublishedEventsType_ExtensionFields_AddExtensionField,15512,Method
-PublishedEventsType_ExtensionFields_AddExtensionField_InputArguments,15513,Variable
-PublishedEventsType_ExtensionFields_AddExtensionField_OutputArguments,15514,Variable
-PublishedEventsType_ExtensionFields_RemoveExtensionField,15515,Method
-PublishedEventsType_ExtensionFields_RemoveExtensionField_InputArguments,15516,Variable
-PublishedEventsType_ModifyFieldSelection_OutputArguments,15517,Variable
-PublishedEventsTypeModifyFieldSelectionMethodType_OutputArguments,15518,Variable
-OpcUa_BinarySchema_SimpleTypeDescription_DictionaryFragment,15519,Variable
-ReaderGroupDataType,15520,DataType
-OpcUa_BinarySchema_UABinaryFileDataType,15521,Variable
-OpcUa_BinarySchema_UABinaryFileDataType_DataTypeVersion,15522,Variable
-OpcUa_BinarySchema_UABinaryFileDataType_DictionaryFragment,15523,Variable
-OpcUa_BinarySchema_BrokerConnectionTransportDataType,15524,Variable
-OpcUa_BinarySchema_BrokerConnectionTransportDataType_DataTypeVersion,15525,Variable
-OpcUa_BinarySchema_BrokerConnectionTransportDataType_DictionaryFragment,15526,Variable
-WellKnownRole_SecurityAdmin_EndpointsExclude,15527,Variable
-EndpointType,15528,DataType
-SimpleTypeDescription_Encoding_DefaultXml,15529,Object
-PubSubConfigurationDataType,15530,DataType
-UABinaryFileDataType_Encoding_DefaultXml,15531,Object
-DatagramWriterGroupTransportDataType,15532,DataType
-PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface,15533,Variable
-DataTypeSchemaHeader,15534,DataType
-PubSubStatusEventType,15535,ObjectType
-PubSubStatusEventType_EventId,15536,Variable
-PubSubStatusEventType_EventType,15537,Variable
-PubSubStatusEventType_SourceNode,15538,Variable
-PubSubStatusEventType_SourceName,15539,Variable
-PubSubStatusEventType_Time,15540,Variable
-PubSubStatusEventType_ReceiveTime,15541,Variable
-PubSubStatusEventType_LocalTime,15542,Variable
-PubSubStatusEventType_Message,15543,Variable
-PubSubStatusEventType_Severity,15544,Variable
-PubSubStatusEventType_ConnectionId,15545,Variable
-PubSubStatusEventType_GroupId,15546,Variable
-PubSubStatusEventType_State,15547,Variable
-PubSubTransportLimitsExceedEventType,15548,ObjectType
-PubSubTransportLimitsExceedEventType_EventId,15549,Variable
-PubSubTransportLimitsExceedEventType_EventType,15550,Variable
-PubSubTransportLimitsExceedEventType_SourceNode,15551,Variable
-PubSubTransportLimitsExceedEventType_SourceName,15552,Variable
-PubSubTransportLimitsExceedEventType_Time,15553,Variable
-PubSubTransportLimitsExceedEventType_ReceiveTime,15554,Variable
-PubSubTransportLimitsExceedEventType_LocalTime,15555,Variable
-PubSubTransportLimitsExceedEventType_Message,15556,Variable
-PubSubTransportLimitsExceedEventType_Severity,15557,Variable
-PubSubTransportLimitsExceedEventType_ConnectionId,15558,Variable
-PubSubTransportLimitsExceedEventType_GroupId,15559,Variable
-PubSubTransportLimitsExceedEventType_State,15560,Variable
-PubSubTransportLimitsExceedEventType_Actual,15561,Variable
-PubSubTransportLimitsExceedEventType_Maximum,15562,Variable
-PubSubCommunicationFailureEventType,15563,ObjectType
-PubSubCommunicationFailureEventType_EventId,15564,Variable
-PubSubCommunicationFailureEventType_EventType,15565,Variable
-PubSubCommunicationFailureEventType_SourceNode,15566,Variable
-PubSubCommunicationFailureEventType_SourceName,15567,Variable
-PubSubCommunicationFailureEventType_Time,15568,Variable
-PubSubCommunicationFailureEventType_ReceiveTime,15569,Variable
-PubSubCommunicationFailureEventType_LocalTime,15570,Variable
-PubSubCommunicationFailureEventType_Message,15571,Variable
-PubSubCommunicationFailureEventType_Severity,15572,Variable
-PubSubCommunicationFailureEventType_ConnectionId,15573,Variable
-PubSubCommunicationFailureEventType_GroupId,15574,Variable
-PubSubCommunicationFailureEventType_State,15575,Variable
-PubSubCommunicationFailureEventType_Error,15576,Variable
-DataSetFieldFlags_OptionSetValues,15577,Variable
-PublishedDataSetDataType,15578,DataType
-BrokerConnectionTransportDataType_Encoding_DefaultXml,15579,Object
-PublishedDataSetSourceDataType,15580,DataType
-PublishedDataItemsDataType,15581,DataType
-PublishedEventsDataType,15582,DataType
-DataSetFieldContentMask,15583,DataType
-DataSetFieldContentMask_OptionSetValues,15584,Variable
-OpcUa_XmlSchema_SimpleTypeDescription,15585,Variable
-OpcUa_XmlSchema_SimpleTypeDescription_DataTypeVersion,15586,Variable
-OpcUa_XmlSchema_SimpleTypeDescription_DictionaryFragment,15587,Variable
-OpcUa_XmlSchema_UABinaryFileDataType,15588,Variable
-StructureDescription_Encoding_DefaultXml,15589,Object
-EnumDescription_Encoding_DefaultXml,15590,Object
-OpcUa_XmlSchema_StructureDescription,15591,Variable
-OpcUa_XmlSchema_StructureDescription_DataTypeVersion,15592,Variable
-OpcUa_XmlSchema_StructureDescription_DictionaryFragment,15593,Variable
-OpcUa_XmlSchema_EnumDescription,15594,Variable
-OpcUa_XmlSchema_EnumDescription_DataTypeVersion,15595,Variable
-OpcUa_XmlSchema_EnumDescription_DictionaryFragment,15596,Variable
-DataSetWriterDataType,15597,DataType
-DataSetWriterTransportDataType,15598,DataType
-OpcUa_BinarySchema_StructureDescription,15599,Variable
-OpcUa_BinarySchema_StructureDescription_DataTypeVersion,15600,Variable
-OpcUa_BinarySchema_StructureDescription_DictionaryFragment,15601,Variable
-OpcUa_BinarySchema_EnumDescription,15602,Variable
-OpcUa_BinarySchema_EnumDescription_DataTypeVersion,15603,Variable
-OpcUa_BinarySchema_EnumDescription_DictionaryFragment,15604,Variable
-DataSetWriterMessageDataType,15605,DataType
-Server_ServerCapabilities_RoleSet,15606,Object
-RoleSetType,15607,ObjectType
-RoleSetType_RoleName_Placeholder,15608,Object
-PubSubGroupDataType,15609,DataType
-OpcUa_XmlSchema_UABinaryFileDataType_DataTypeVersion,15610,Variable
-WriterGroupTransportDataType,15611,DataType
-RoleSetType_RoleName_Placeholder_AddIdentity,15612,Method
-RoleSetType_RoleName_Placeholder_AddIdentity_InputArguments,15613,Variable
-RoleSetType_RoleName_Placeholder_RemoveIdentity,15614,Method
-RoleSetType_RoleName_Placeholder_RemoveIdentity_InputArguments,15615,Variable
-WriterGroupMessageDataType,15616,DataType
-PubSubConnectionDataType,15617,DataType
-ConnectionTransportDataType,15618,DataType
-OpcUa_XmlSchema_UABinaryFileDataType_DictionaryFragment,15619,Variable
-RoleType,15620,ObjectType
-ReaderGroupTransportDataType,15621,DataType
-ReaderGroupMessageDataType,15622,DataType
-DataSetReaderDataType,15623,DataType
-RoleType_AddIdentity,15624,Method
-RoleType_AddIdentity_InputArguments,15625,Variable
-RoleType_RemoveIdentity,15626,Method
-RoleType_RemoveIdentity_InputArguments,15627,Variable
-DataSetReaderTransportDataType,15628,DataType
-DataSetReaderMessageDataType,15629,DataType
-SubscribedDataSetDataType,15630,DataType
-TargetVariablesDataType,15631,DataType
-IdentityCriteriaType,15632,DataType
-IdentityCriteriaType_EnumValues,15633,Variable
-IdentityMappingRuleType,15634,DataType
-SubscribedDataSetMirrorDataType,15635,DataType
-AddIdentityMethodType,15636,Method
-AddIdentityMethodType_InputArguments,15637,Variable
-RemoveIdentityMethodType,15638,Method
-RemoveIdentityMethodType_InputArguments,15639,Variable
-OpcUa_XmlSchema_BrokerConnectionTransportDataType,15640,Variable
-DataSetOrderingType_EnumStrings,15641,Variable
-UadpNetworkMessageContentMask,15642,DataType
-UadpNetworkMessageContentMask_OptionSetValues,15643,Variable
-WellKnownRole_Anonymous,15644,Object
-UadpWriterGroupMessageDataType,15645,DataType
-UadpDataSetMessageContentMask,15646,DataType
-UadpDataSetMessageContentMask_OptionSetValues,15647,Variable
-WellKnownRole_Anonymous_AddIdentity,15648,Method
-WellKnownRole_Anonymous_AddIdentity_InputArguments,15649,Variable
-WellKnownRole_Anonymous_RemoveIdentity,15650,Method
-WellKnownRole_Anonymous_RemoveIdentity_InputArguments,15651,Variable
-UadpDataSetWriterMessageDataType,15652,DataType
-UadpDataSetReaderMessageDataType,15653,DataType
-JsonNetworkMessageContentMask,15654,DataType
-JsonNetworkMessageContentMask_OptionSetValues,15655,Variable
-WellKnownRole_AuthenticatedUser,15656,Object
-JsonWriterGroupMessageDataType,15657,DataType
-JsonDataSetMessageContentMask,15658,DataType
-JsonDataSetMessageContentMask_OptionSetValues,15659,Variable
-WellKnownRole_AuthenticatedUser_AddIdentity,15660,Method
-WellKnownRole_AuthenticatedUser_AddIdentity_InputArguments,15661,Variable
-WellKnownRole_AuthenticatedUser_RemoveIdentity,15662,Method
-WellKnownRole_AuthenticatedUser_RemoveIdentity_InputArguments,15663,Variable
-JsonDataSetWriterMessageDataType,15664,DataType
-JsonDataSetReaderMessageDataType,15665,DataType
-OpcUa_XmlSchema_BrokerConnectionTransportDataType_DataTypeVersion,15666,Variable
-BrokerWriterGroupTransportDataType,15667,DataType
-WellKnownRole_Observer,15668,Object
-BrokerDataSetWriterTransportDataType,15669,DataType
-BrokerDataSetReaderTransportDataType,15670,DataType
-EndpointType_Encoding_DefaultBinary,15671,Object
-WellKnownRole_Observer_AddIdentity,15672,Method
-WellKnownRole_Observer_AddIdentity_InputArguments,15673,Variable
-WellKnownRole_Observer_RemoveIdentity,15674,Method
-WellKnownRole_Observer_RemoveIdentity_InputArguments,15675,Variable
-DataTypeSchemaHeader_Encoding_DefaultBinary,15676,Object
-PublishedDataSetDataType_Encoding_DefaultBinary,15677,Object
-PublishedDataSetSourceDataType_Encoding_DefaultBinary,15678,Object
-PublishedDataItemsDataType_Encoding_DefaultBinary,15679,Object
-WellKnownRole_Operator,15680,Object
-PublishedEventsDataType_Encoding_DefaultBinary,15681,Object
-DataSetWriterDataType_Encoding_DefaultBinary,15682,Object
-DataSetWriterTransportDataType_Encoding_DefaultBinary,15683,Object
-WellKnownRole_Operator_AddIdentity,15684,Method
-WellKnownRole_Operator_AddIdentity_InputArguments,15685,Variable
-WellKnownRole_Operator_RemoveIdentity,15686,Method
-WellKnownRole_Operator_RemoveIdentity_InputArguments,15687,Variable
-DataSetWriterMessageDataType_Encoding_DefaultBinary,15688,Object
-PubSubGroupDataType_Encoding_DefaultBinary,15689,Object
-OpcUa_XmlSchema_BrokerConnectionTransportDataType_DictionaryFragment,15690,Variable
-WriterGroupTransportDataType_Encoding_DefaultBinary,15691,Object
-WellKnownRole_Supervisor,15692,Object
-WriterGroupMessageDataType_Encoding_DefaultBinary,15693,Object
-PubSubConnectionDataType_Encoding_DefaultBinary,15694,Object
-ConnectionTransportDataType_Encoding_DefaultBinary,15695,Object
-WellKnownRole_Supervisor_AddIdentity,15696,Method
-WellKnownRole_Supervisor_AddIdentity_InputArguments,15697,Variable
-WellKnownRole_Supervisor_RemoveIdentity,15698,Method
-WellKnownRole_Supervisor_RemoveIdentity_InputArguments,15699,Variable
-SimpleTypeDescription_Encoding_DefaultJson,15700,Object
-ReaderGroupTransportDataType_Encoding_DefaultBinary,15701,Object
-ReaderGroupMessageDataType_Encoding_DefaultBinary,15702,Object
-DataSetReaderDataType_Encoding_DefaultBinary,15703,Object
-WellKnownRole_SecurityAdmin,15704,Object
-DataSetReaderTransportDataType_Encoding_DefaultBinary,15705,Object
-DataSetReaderMessageDataType_Encoding_DefaultBinary,15706,Object
-SubscribedDataSetDataType_Encoding_DefaultBinary,15707,Object
-WellKnownRole_SecurityAdmin_AddIdentity,15708,Method
-WellKnownRole_SecurityAdmin_AddIdentity_InputArguments,15709,Variable
-WellKnownRole_SecurityAdmin_RemoveIdentity,15710,Method
-WellKnownRole_SecurityAdmin_RemoveIdentity_InputArguments,15711,Variable
-TargetVariablesDataType_Encoding_DefaultBinary,15712,Object
-SubscribedDataSetMirrorDataType_Encoding_DefaultBinary,15713,Object
-UABinaryFileDataType_Encoding_DefaultJson,15714,Object
-UadpWriterGroupMessageDataType_Encoding_DefaultBinary,15715,Object
-WellKnownRole_ConfigureAdmin,15716,Object
-UadpDataSetWriterMessageDataType_Encoding_DefaultBinary,15717,Object
-UadpDataSetReaderMessageDataType_Encoding_DefaultBinary,15718,Object
-JsonWriterGroupMessageDataType_Encoding_DefaultBinary,15719,Object
-WellKnownRole_ConfigureAdmin_AddIdentity,15720,Method
-WellKnownRole_ConfigureAdmin_AddIdentity_InputArguments,15721,Variable
-WellKnownRole_ConfigureAdmin_RemoveIdentity,15722,Method
-WellKnownRole_ConfigureAdmin_RemoveIdentity_InputArguments,15723,Variable
-JsonDataSetWriterMessageDataType_Encoding_DefaultBinary,15724,Object
-JsonDataSetReaderMessageDataType_Encoding_DefaultBinary,15725,Object
-BrokerConnectionTransportDataType_Encoding_DefaultJson,15726,Object
-BrokerWriterGroupTransportDataType_Encoding_DefaultBinary,15727,Object
-IdentityMappingRuleType_Encoding_DefaultXml,15728,Object
-BrokerDataSetWriterTransportDataType_Encoding_DefaultBinary,15729,Object
-OpcUa_XmlSchema_IdentityMappingRuleType,15730,Variable
-OpcUa_XmlSchema_IdentityMappingRuleType_DataTypeVersion,15731,Variable
-OpcUa_XmlSchema_IdentityMappingRuleType_DictionaryFragment,15732,Variable
-BrokerDataSetReaderTransportDataType_Encoding_DefaultBinary,15733,Object
-OpcUa_BinarySchema_EndpointType,15734,Variable
-OpcUa_BinarySchema_EndpointType_DataTypeVersion,15735,Variable
-IdentityMappingRuleType_Encoding_DefaultBinary,15736,Object
-OpcUa_BinarySchema_EndpointType_DictionaryFragment,15737,Variable
-OpcUa_BinarySchema_IdentityMappingRuleType,15738,Variable
-OpcUa_BinarySchema_IdentityMappingRuleType_DataTypeVersion,15739,Variable
-OpcUa_BinarySchema_IdentityMappingRuleType_DictionaryFragment,15740,Variable
-OpcUa_BinarySchema_DataTypeSchemaHeader,15741,Variable
-OpcUa_BinarySchema_DataTypeSchemaHeader_DataTypeVersion,15742,Variable
-OpcUa_BinarySchema_DataTypeSchemaHeader_DictionaryFragment,15743,Variable
-TemporaryFileTransferType,15744,ObjectType
-TemporaryFileTransferType_ClientProcessingTimeout,15745,Variable
-TemporaryFileTransferType_GenerateFileForRead,15746,Method
-TemporaryFileTransferType_GenerateFileForRead_InputArguments,15747,Variable
-TemporaryFileTransferType_GenerateFileForRead_OutputArguments,15748,Variable
-TemporaryFileTransferType_GenerateFileForWrite,15749,Method
-TemporaryFileTransferType_GenerateFileForWrite_OutputArguments,15750,Variable
-TemporaryFileTransferType_CloseAndCommit,15751,Method
-TemporaryFileTransferType_CloseAndCommit_InputArguments,15752,Variable
-TemporaryFileTransferType_CloseAndCommit_OutputArguments,15753,Variable
-TemporaryFileTransferType_TransferState_Placeholder,15754,Object
-TemporaryFileTransferType_TransferState_Placeholder_CurrentState,15755,Variable
-TemporaryFileTransferType_TransferState_Placeholder_CurrentState_Id,15756,Variable
-TemporaryFileTransferType_TransferState_Placeholder_CurrentState_Name,15757,Variable
-TemporaryFileTransferType_TransferState_Placeholder_CurrentState_Number,15758,Variable
-TemporaryFileTransferType_TransferState_Placeholder_CurrentState_EffectiveDisplayName,15759,Variable
-TemporaryFileTransferType_TransferState_Placeholder_LastTransition,15760,Variable
-TemporaryFileTransferType_TransferState_Placeholder_LastTransition_Id,15761,Variable
-TemporaryFileTransferType_TransferState_Placeholder_LastTransition_Name,15762,Variable
-TemporaryFileTransferType_TransferState_Placeholder_LastTransition_Number,15763,Variable
-TemporaryFileTransferType_TransferState_Placeholder_LastTransition_TransitionTime,15764,Variable
-TemporaryFileTransferType_TransferState_Placeholder_LastTransition_EffectiveTransitionTime,15765,Variable
-OpcUa_BinarySchema_PublishedDataSetDataType,15766,Variable
-OpcUa_BinarySchema_PublishedDataSetDataType_DataTypeVersion,15767,Variable
-OpcUa_BinarySchema_PublishedDataSetDataType_DictionaryFragment,15768,Variable
-OpcUa_BinarySchema_PublishedDataSetSourceDataType,15769,Variable
-OpcUa_BinarySchema_PublishedDataSetSourceDataType_DataTypeVersion,15770,Variable
-OpcUa_BinarySchema_PublishedDataSetSourceDataType_DictionaryFragment,15771,Variable
-OpcUa_BinarySchema_PublishedDataItemsDataType,15772,Variable
-OpcUa_BinarySchema_PublishedDataItemsDataType_DataTypeVersion,15773,Variable
-OpcUa_BinarySchema_PublishedDataItemsDataType_DictionaryFragment,15774,Variable
-OpcUa_BinarySchema_PublishedEventsDataType,15775,Variable
-OpcUa_BinarySchema_PublishedEventsDataType_DataTypeVersion,15776,Variable
-OpcUa_BinarySchema_PublishedEventsDataType_DictionaryFragment,15777,Variable
-OpcUa_BinarySchema_DataSetWriterDataType,15778,Variable
-OpcUa_BinarySchema_DataSetWriterDataType_DataTypeVersion,15779,Variable
-OpcUa_BinarySchema_DataSetWriterDataType_DictionaryFragment,15780,Variable
-OpcUa_BinarySchema_DataSetWriterTransportDataType,15781,Variable
-OpcUa_BinarySchema_DataSetWriterTransportDataType_DataTypeVersion,15782,Variable
-OpcUa_BinarySchema_DataSetWriterTransportDataType_DictionaryFragment,15783,Variable
-OpcUa_BinarySchema_DataSetWriterMessageDataType,15784,Variable
-OpcUa_BinarySchema_DataSetWriterMessageDataType_DataTypeVersion,15785,Variable
-OpcUa_BinarySchema_DataSetWriterMessageDataType_DictionaryFragment,15786,Variable
-OpcUa_BinarySchema_PubSubGroupDataType,15787,Variable
-OpcUa_BinarySchema_PubSubGroupDataType_DataTypeVersion,15788,Variable
-OpcUa_BinarySchema_PubSubGroupDataType_DictionaryFragment,15789,Variable
-PublishSubscribe_ConnectionName_Placeholder,15790,Object
-PublishSubscribe_ConnectionName_Placeholder_PublisherId,15791,Variable
-PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri,15792,Variable
-OpcUa_BinarySchema_WriterGroupTransportDataType,15793,Variable
-TemporaryFileTransferType_TransferState_Placeholder_Reset,15794,Method
-GenerateFileForReadMethodType,15795,Method
-GenerateFileForReadMethodType_InputArguments,15796,Variable
-GenerateFileForReadMethodType_OutputArguments,15797,Variable
-GenerateFileForWriteMethodType,15798,Method
-GenerateFileForWriteMethodType_OutputArguments,15799,Variable
-CloseAndCommitMethodType,15800,Method
-CloseAndCommitMethodType_InputArguments,15801,Variable
-CloseAndCommitMethodType_OutputArguments,15802,Variable
-FileTransferStateMachineType,15803,ObjectType
-FileTransferStateMachineType_CurrentState,15804,Variable
-FileTransferStateMachineType_CurrentState_Id,15805,Variable
-FileTransferStateMachineType_CurrentState_Name,15806,Variable
-FileTransferStateMachineType_CurrentState_Number,15807,Variable
-FileTransferStateMachineType_CurrentState_EffectiveDisplayName,15808,Variable
-FileTransferStateMachineType_LastTransition,15809,Variable
-FileTransferStateMachineType_LastTransition_Id,15810,Variable
-FileTransferStateMachineType_LastTransition_Name,15811,Variable
-FileTransferStateMachineType_LastTransition_Number,15812,Variable
-FileTransferStateMachineType_LastTransition_TransitionTime,15813,Variable
-FileTransferStateMachineType_LastTransition_EffectiveTransitionTime,15814,Variable
-FileTransferStateMachineType_Idle,15815,Object
-FileTransferStateMachineType_Idle_StateNumber,15816,Variable
-FileTransferStateMachineType_ReadPrepare,15817,Object
-FileTransferStateMachineType_ReadPrepare_StateNumber,15818,Variable
-FileTransferStateMachineType_ReadTransfer,15819,Object
-FileTransferStateMachineType_ReadTransfer_StateNumber,15820,Variable
-FileTransferStateMachineType_ApplyWrite,15821,Object
-FileTransferStateMachineType_ApplyWrite_StateNumber,15822,Variable
-FileTransferStateMachineType_Error,15823,Object
-FileTransferStateMachineType_Error_StateNumber,15824,Variable
-FileTransferStateMachineType_IdleToReadPrepare,15825,Object
-FileTransferStateMachineType_IdleToReadPrepare_TransitionNumber,15826,Variable
-FileTransferStateMachineType_ReadPrepareToReadTransfer,15827,Object
-FileTransferStateMachineType_ReadPrepareToReadTransfer_TransitionNumber,15828,Variable
-FileTransferStateMachineType_ReadTransferToIdle,15829,Object
-FileTransferStateMachineType_ReadTransferToIdle_TransitionNumber,15830,Variable
-FileTransferStateMachineType_IdleToApplyWrite,15831,Object
-FileTransferStateMachineType_IdleToApplyWrite_TransitionNumber,15832,Variable
-FileTransferStateMachineType_ApplyWriteToIdle,15833,Object
-FileTransferStateMachineType_ApplyWriteToIdle_TransitionNumber,15834,Variable
-FileTransferStateMachineType_ReadPrepareToError,15835,Object
-FileTransferStateMachineType_ReadPrepareToError_TransitionNumber,15836,Variable
-FileTransferStateMachineType_ReadTransferToError,15837,Object
-FileTransferStateMachineType_ReadTransferToError_TransitionNumber,15838,Variable
-FileTransferStateMachineType_ApplyWriteToError,15839,Object
-FileTransferStateMachineType_ApplyWriteToError_TransitionNumber,15840,Variable
-FileTransferStateMachineType_ErrorToIdle,15841,Object
-FileTransferStateMachineType_ErrorToIdle_TransitionNumber,15842,Variable
-FileTransferStateMachineType_Reset,15843,Method
-PublishSubscribeType_Status,15844,Object
-PublishSubscribeType_Status_State,15845,Variable
-PublishSubscribeType_Status_Enable,15846,Method
-PublishSubscribeType_Status_Disable,15847,Method
-PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri_Selections,15848,Variable
-PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri_SelectionDescriptions,15849,Variable
-PublishSubscribe_ConnectionName_Placeholder_TransportProfileUri_RestrictToList,15850,Variable
-PublishSubscribe_ConnectionName_Placeholder_Address,15851,Object
-OpcUa_BinarySchema_WriterGroupTransportDataType_DataTypeVersion,15852,Variable
-OpcUa_BinarySchema_WriterGroupTransportDataType_DictionaryFragment,15853,Variable
-OpcUa_BinarySchema_WriterGroupMessageDataType,15854,Variable
-OpcUa_BinarySchema_WriterGroupMessageDataType_DataTypeVersion,15855,Variable
-OpcUa_BinarySchema_WriterGroupMessageDataType_DictionaryFragment,15856,Variable
-OpcUa_BinarySchema_PubSubConnectionDataType,15857,Variable
-OpcUa_BinarySchema_PubSubConnectionDataType_DataTypeVersion,15858,Variable
-OpcUa_BinarySchema_PubSubConnectionDataType_DictionaryFragment,15859,Variable
-OpcUa_BinarySchema_ConnectionTransportDataType,15860,Variable
-OpcUa_BinarySchema_ConnectionTransportDataType_DataTypeVersion,15861,Variable
-OpcUa_BinarySchema_ConnectionTransportDataType_DictionaryFragment,15862,Variable
-PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface,15863,Variable
-PublishSubscribe_ConnectionName_Placeholder_TransportSettings,15864,Object
-PublishSubscribe_ConnectionName_Placeholder_Status,15865,Object
-OpcUa_BinarySchema_ReaderGroupTransportDataType,15866,Variable
-OpcUa_BinarySchema_ReaderGroupTransportDataType_DataTypeVersion,15867,Variable
-OpcUa_BinarySchema_ReaderGroupTransportDataType_DictionaryFragment,15868,Variable
-OpcUa_BinarySchema_ReaderGroupMessageDataType,15869,Variable
-OpcUa_BinarySchema_ReaderGroupMessageDataType_DataTypeVersion,15870,Variable
-OpcUa_BinarySchema_ReaderGroupMessageDataType_DictionaryFragment,15871,Variable
-OpcUa_BinarySchema_DataSetReaderDataType,15872,Variable
-OpcUa_BinarySchema_DataSetReaderDataType_DataTypeVersion,15873,Variable
-OverrideValueHandling,15874,DataType
-OverrideValueHandling_EnumStrings,15875,Variable
-OpcUa_BinarySchema_DataSetReaderDataType_DictionaryFragment,15876,Variable
-OpcUa_BinarySchema_DataSetReaderTransportDataType,15877,Variable
-OpcUa_BinarySchema_DataSetReaderTransportDataType_DataTypeVersion,15878,Variable
-OpcUa_BinarySchema_DataSetReaderTransportDataType_DictionaryFragment,15879,Variable
-OpcUa_BinarySchema_DataSetReaderMessageDataType,15880,Variable
-OpcUa_BinarySchema_DataSetReaderMessageDataType_DataTypeVersion,15881,Variable
-OpcUa_BinarySchema_DataSetReaderMessageDataType_DictionaryFragment,15882,Variable
-OpcUa_BinarySchema_SubscribedDataSetDataType,15883,Variable
-OpcUa_BinarySchema_SubscribedDataSetDataType_DataTypeVersion,15884,Variable
-OpcUa_BinarySchema_SubscribedDataSetDataType_DictionaryFragment,15885,Variable
-OpcUa_BinarySchema_TargetVariablesDataType,15886,Variable
-OpcUa_BinarySchema_TargetVariablesDataType_DataTypeVersion,15887,Variable
-OpcUa_BinarySchema_TargetVariablesDataType_DictionaryFragment,15888,Variable
-OpcUa_BinarySchema_SubscribedDataSetMirrorDataType,15889,Variable
-OpcUa_BinarySchema_SubscribedDataSetMirrorDataType_DataTypeVersion,15890,Variable
-OpcUa_BinarySchema_SubscribedDataSetMirrorDataType_DictionaryFragment,15891,Variable
-PublishSubscribe_ConnectionName_Placeholder_Status_State,15892,Variable
-PublishSubscribe_ConnectionName_Placeholder_Status_Enable,15893,Method
-PublishSubscribe_ConnectionName_Placeholder_Status_Disable,15894,Method
-OpcUa_BinarySchema_UadpWriterGroupMessageDataType,15895,Variable
-OpcUa_BinarySchema_UadpWriterGroupMessageDataType_DataTypeVersion,15896,Variable
-OpcUa_BinarySchema_UadpWriterGroupMessageDataType_DictionaryFragment,15897,Variable
-OpcUa_BinarySchema_UadpDataSetWriterMessageDataType,15898,Variable
-OpcUa_BinarySchema_UadpDataSetWriterMessageDataType_DataTypeVersion,15899,Variable
-OpcUa_BinarySchema_UadpDataSetWriterMessageDataType_DictionaryFragment,15900,Variable
-SessionlessInvokeRequestType,15901,DataType
-SessionlessInvokeRequestType_Encoding_DefaultXml,15902,Object
-SessionlessInvokeRequestType_Encoding_DefaultBinary,15903,Object
-DataSetFieldFlags,15904,DataType
-PublishSubscribeType_ConnectionName_Placeholder_TransportSettings,15905,Object
-PubSubKeyServiceType,15906,ObjectType
-PubSubKeyServiceType_GetSecurityKeys,15907,Method
-PubSubKeyServiceType_GetSecurityKeys_InputArguments,15908,Variable
-PubSubKeyServiceType_GetSecurityKeys_OutputArguments,15909,Variable
-PubSubKeyServiceType_GetSecurityGroup,15910,Method
-PubSubKeyServiceType_GetSecurityGroup_InputArguments,15911,Variable
-PubSubKeyServiceType_GetSecurityGroup_OutputArguments,15912,Variable
-PubSubKeyServiceType_SecurityGroups,15913,Object
-PubSubKeyServiceType_SecurityGroups_AddSecurityGroup,15914,Method
-PubSubKeyServiceType_SecurityGroups_AddSecurityGroup_InputArguments,15915,Variable
-PubSubKeyServiceType_SecurityGroups_AddSecurityGroup_OutputArguments,15916,Variable
-PubSubKeyServiceType_SecurityGroups_RemoveSecurityGroup,15917,Method
-PubSubKeyServiceType_SecurityGroups_RemoveSecurityGroup_InputArguments,15918,Variable
-OpcUa_BinarySchema_UadpDataSetReaderMessageDataType,15919,Variable
-OpcUa_BinarySchema_UadpDataSetReaderMessageDataType_DataTypeVersion,15920,Variable
-OpcUa_BinarySchema_UadpDataSetReaderMessageDataType_DictionaryFragment,15921,Variable
-OpcUa_BinarySchema_JsonWriterGroupMessageDataType,15922,Variable
-OpcUa_BinarySchema_JsonWriterGroupMessageDataType_DataTypeVersion,15923,Variable
-OpcUa_BinarySchema_JsonWriterGroupMessageDataType_DictionaryFragment,15924,Variable
-OpcUa_BinarySchema_JsonDataSetWriterMessageDataType,15925,Variable
-PubSubGroupType_SecurityMode,15926,Variable
-PubSubGroupType_SecurityGroupId,15927,Variable
-PubSubGroupType_SecurityKeyServices,15928,Variable
-OpcUa_BinarySchema_JsonDataSetWriterMessageDataType_DataTypeVersion,15929,Variable
-OpcUa_BinarySchema_JsonDataSetWriterMessageDataType_DictionaryFragment,15930,Variable
-OpcUa_BinarySchema_JsonDataSetReaderMessageDataType,15931,Variable
-DataSetReaderType_SecurityMode,15932,Variable
-DataSetReaderType_SecurityGroupId,15933,Variable
-DataSetReaderType_SecurityKeyServices,15934,Variable
-OpcUa_BinarySchema_JsonDataSetReaderMessageDataType_DataTypeVersion,15935,Variable
-OpcUa_BinarySchema_JsonDataSetReaderMessageDataType_DictionaryFragment,15936,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics,15937,Object
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_DiagnosticsLevel,15938,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation,15939,Variable
-OpcUa_BinarySchema_BrokerWriterGroupTransportDataType,15940,Variable
-OpcUa_BinarySchema_BrokerWriterGroupTransportDataType_DataTypeVersion,15941,Variable
-OpcUa_BinarySchema_BrokerWriterGroupTransportDataType_DictionaryFragment,15942,Variable
-OpcUa_BinarySchema_BrokerDataSetWriterTransportDataType,15943,Variable
-OpcUa_BinarySchema_BrokerDataSetWriterTransportDataType_DataTypeVersion,15944,Variable
-OpcUa_BinarySchema_BrokerDataSetWriterTransportDataType_DictionaryFragment,15945,Variable
-OpcUa_BinarySchema_BrokerDataSetReaderTransportDataType,15946,Variable
-OpcUa_BinarySchema_BrokerDataSetReaderTransportDataType_DataTypeVersion,15947,Variable
-OpcUa_BinarySchema_BrokerDataSetReaderTransportDataType_DictionaryFragment,15948,Variable
-EndpointType_Encoding_DefaultXml,15949,Object
-DataTypeSchemaHeader_Encoding_DefaultXml,15950,Object
-PublishedDataSetDataType_Encoding_DefaultXml,15951,Object
-PublishedDataSetSourceDataType_Encoding_DefaultXml,15952,Object
-PublishedDataItemsDataType_Encoding_DefaultXml,15953,Object
-PublishedEventsDataType_Encoding_DefaultXml,15954,Object
-DataSetWriterDataType_Encoding_DefaultXml,15955,Object
-DataSetWriterTransportDataType_Encoding_DefaultXml,15956,Object
-OPCUANamespaceMetadata,15957,Object
-OPCUANamespaceMetadata_NamespaceUri,15958,Variable
-OPCUANamespaceMetadata_NamespaceVersion,15959,Variable
-OPCUANamespaceMetadata_NamespacePublicationDate,15960,Variable
-OPCUANamespaceMetadata_IsNamespaceSubset,15961,Variable
-OPCUANamespaceMetadata_StaticNodeIdTypes,15962,Variable
-OPCUANamespaceMetadata_StaticNumericNodeIdRange,15963,Variable
-OPCUANamespaceMetadata_StaticStringNodeIdPattern,15964,Variable
-OPCUANamespaceMetadata_NamespaceFile,15965,Object
-OPCUANamespaceMetadata_NamespaceFile_Size,15966,Variable
-OPCUANamespaceMetadata_NamespaceFile_Writable,15967,Variable
-OPCUANamespaceMetadata_NamespaceFile_UserWritable,15968,Variable
-OPCUANamespaceMetadata_NamespaceFile_OpenCount,15969,Variable
-OPCUANamespaceMetadata_NamespaceFile_MimeType,15970,Variable
-OPCUANamespaceMetadata_NamespaceFile_Open,15971,Method
-OPCUANamespaceMetadata_NamespaceFile_Open_InputArguments,15972,Variable
-OPCUANamespaceMetadata_NamespaceFile_Open_OutputArguments,15973,Variable
-OPCUANamespaceMetadata_NamespaceFile_Close,15974,Method
-OPCUANamespaceMetadata_NamespaceFile_Close_InputArguments,15975,Variable
-OPCUANamespaceMetadata_NamespaceFile_Read,15976,Method
-OPCUANamespaceMetadata_NamespaceFile_Read_InputArguments,15977,Variable
-OPCUANamespaceMetadata_NamespaceFile_Read_OutputArguments,15978,Variable
-OPCUANamespaceMetadata_NamespaceFile_Write,15979,Method
-OPCUANamespaceMetadata_NamespaceFile_Write_InputArguments,15980,Variable
-OPCUANamespaceMetadata_NamespaceFile_GetPosition,15981,Method
-OPCUANamespaceMetadata_NamespaceFile_GetPosition_InputArguments,15982,Variable
-OPCUANamespaceMetadata_NamespaceFile_GetPosition_OutputArguments,15983,Variable
-OPCUANamespaceMetadata_NamespaceFile_SetPosition,15984,Method
-OPCUANamespaceMetadata_NamespaceFile_SetPosition_InputArguments,15985,Variable
-OPCUANamespaceMetadata_NamespaceFile_ExportNamespace,15986,Method
-DataSetWriterMessageDataType_Encoding_DefaultXml,15987,Object
-PubSubGroupDataType_Encoding_DefaultXml,15988,Object
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_Active,15989,Variable
-WriterGroupTransportDataType_Encoding_DefaultXml,15990,Object
-WriterGroupMessageDataType_Encoding_DefaultXml,15991,Object
-PubSubConnectionDataType_Encoding_DefaultXml,15992,Object
-ConnectionTransportDataType_Encoding_DefaultXml,15993,Object
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_Classification,15994,Variable
-ReaderGroupTransportDataType_Encoding_DefaultXml,15995,Object
-ReaderGroupMessageDataType_Encoding_DefaultXml,15996,Object
-RoleSetType_AddRole,15997,Method
-RoleSetType_AddRole_InputArguments,15998,Variable
-RoleSetType_AddRole_OutputArguments,15999,Variable
-RoleSetType_RemoveRole,16000,Method
-RoleSetType_RemoveRole_InputArguments,16001,Variable
-AddRoleMethodType,16002,Method
-AddRoleMethodType_InputArguments,16003,Variable
-AddRoleMethodType_OutputArguments,16004,Variable
-RemoveRoleMethodType,16005,Method
-RemoveRoleMethodType_InputArguments,16006,Variable
-DataSetReaderDataType_Encoding_DefaultXml,16007,Object
-DataSetReaderTransportDataType_Encoding_DefaultXml,16008,Object
-DataSetReaderMessageDataType_Encoding_DefaultXml,16009,Object
-SubscribedDataSetDataType_Encoding_DefaultXml,16010,Object
-TargetVariablesDataType_Encoding_DefaultXml,16011,Object
-SubscribedDataSetMirrorDataType_Encoding_DefaultXml,16012,Object
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,16013,Variable
-UadpWriterGroupMessageDataType_Encoding_DefaultXml,16014,Object
-UadpDataSetWriterMessageDataType_Encoding_DefaultXml,16015,Object
-UadpDataSetReaderMessageDataType_Encoding_DefaultXml,16016,Object
-JsonWriterGroupMessageDataType_Encoding_DefaultXml,16017,Object
-JsonDataSetWriterMessageDataType_Encoding_DefaultXml,16018,Object
-JsonDataSetReaderMessageDataType_Encoding_DefaultXml,16019,Object
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,16020,Variable
-BrokerWriterGroupTransportDataType_Encoding_DefaultXml,16021,Object
-BrokerDataSetWriterTransportDataType_Encoding_DefaultXml,16022,Object
-BrokerDataSetReaderTransportDataType_Encoding_DefaultXml,16023,Object
-OpcUa_XmlSchema_EndpointType,16024,Variable
-OpcUa_XmlSchema_EndpointType_DataTypeVersion,16025,Variable
-OpcUa_XmlSchema_EndpointType_DictionaryFragment,16026,Variable
-OpcUa_XmlSchema_DataTypeSchemaHeader,16027,Variable
-OpcUa_XmlSchema_DataTypeSchemaHeader_DataTypeVersion,16028,Variable
-OpcUa_XmlSchema_DataTypeSchemaHeader_DictionaryFragment,16029,Variable
-OpcUa_XmlSchema_PublishedDataSetDataType,16030,Variable
-OpcUa_XmlSchema_PublishedDataSetDataType_DataTypeVersion,16031,Variable
-OpcUa_XmlSchema_PublishedDataSetDataType_DictionaryFragment,16032,Variable
-OpcUa_XmlSchema_PublishedDataSetSourceDataType,16033,Variable
-OpcUa_XmlSchema_PublishedDataSetSourceDataType_DataTypeVersion,16034,Variable
-OpcUa_XmlSchema_PublishedDataSetSourceDataType_DictionaryFragment,16035,Variable
-WellKnownRole_Engineer,16036,Object
-OpcUa_XmlSchema_PublishedDataItemsDataType,16037,Variable
-OpcUa_XmlSchema_PublishedDataItemsDataType_DataTypeVersion,16038,Variable
-OpcUa_XmlSchema_PublishedDataItemsDataType_DictionaryFragment,16039,Variable
-OpcUa_XmlSchema_PublishedEventsDataType,16040,Variable
-WellKnownRole_Engineer_AddIdentity,16041,Method
-WellKnownRole_Engineer_AddIdentity_InputArguments,16042,Variable
-WellKnownRole_Engineer_RemoveIdentity,16043,Method
-WellKnownRole_Engineer_RemoveIdentity_InputArguments,16044,Variable
-OpcUa_XmlSchema_PublishedEventsDataType_DataTypeVersion,16045,Variable
-OpcUa_XmlSchema_PublishedEventsDataType_DictionaryFragment,16046,Variable
-OpcUa_XmlSchema_DataSetWriterDataType,16047,Variable
-OpcUa_XmlSchema_DataSetWriterDataType_DataTypeVersion,16048,Variable
-OpcUa_XmlSchema_DataSetWriterDataType_DictionaryFragment,16049,Variable
-OpcUa_XmlSchema_DataSetWriterTransportDataType,16050,Variable
-OpcUa_XmlSchema_DataSetWriterTransportDataType_DataTypeVersion,16051,Variable
-OpcUa_XmlSchema_DataSetWriterTransportDataType_DictionaryFragment,16052,Variable
-OpcUa_XmlSchema_DataSetWriterMessageDataType,16053,Variable
-OpcUa_XmlSchema_DataSetWriterMessageDataType_DataTypeVersion,16054,Variable
-OpcUa_XmlSchema_DataSetWriterMessageDataType_DictionaryFragment,16055,Variable
-OpcUa_XmlSchema_PubSubGroupDataType,16056,Variable
-OpcUa_XmlSchema_PubSubGroupDataType_DataTypeVersion,16057,Variable
-OpcUa_XmlSchema_PubSubGroupDataType_DictionaryFragment,16058,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError,16059,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_Active,16060,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_Classification,16061,Variable
-OpcUa_XmlSchema_WriterGroupTransportDataType,16062,Variable
-OpcUa_XmlSchema_WriterGroupTransportDataType_DataTypeVersion,16063,Variable
-OpcUa_XmlSchema_WriterGroupTransportDataType_DictionaryFragment,16064,Variable
-OpcUa_XmlSchema_WriterGroupMessageDataType,16065,Variable
-OpcUa_XmlSchema_WriterGroupMessageDataType_DataTypeVersion,16066,Variable
-OpcUa_XmlSchema_WriterGroupMessageDataType_DictionaryFragment,16067,Variable
-OpcUa_XmlSchema_PubSubConnectionDataType,16068,Variable
-OpcUa_XmlSchema_PubSubConnectionDataType_DataTypeVersion,16069,Variable
-OpcUa_XmlSchema_PubSubConnectionDataType_DictionaryFragment,16070,Variable
-OpcUa_XmlSchema_ConnectionTransportDataType,16071,Variable
-OpcUa_XmlSchema_ConnectionTransportDataType_DataTypeVersion,16072,Variable
-OpcUa_XmlSchema_ConnectionTransportDataType_DictionaryFragment,16073,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,16074,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_TotalError_TimeFirstChange,16075,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Reset,16076,Method
-OpcUa_XmlSchema_ReaderGroupTransportDataType,16077,Variable
-OpcUa_XmlSchema_ReaderGroupTransportDataType_DataTypeVersion,16078,Variable
-OpcUa_XmlSchema_ReaderGroupTransportDataType_DictionaryFragment,16079,Variable
-OpcUa_XmlSchema_ReaderGroupMessageDataType,16080,Variable
-OpcUa_XmlSchema_ReaderGroupMessageDataType_DataTypeVersion,16081,Variable
-OpcUa_XmlSchema_ReaderGroupMessageDataType_DictionaryFragment,16082,Variable
-OpcUa_XmlSchema_DataSetReaderDataType,16083,Variable
-OpcUa_XmlSchema_DataSetReaderDataType_DataTypeVersion,16084,Variable
-OpcUa_XmlSchema_DataSetReaderDataType_DictionaryFragment,16085,Variable
-OpcUa_XmlSchema_DataSetReaderTransportDataType,16086,Variable
-OpcUa_XmlSchema_DataSetReaderTransportDataType_DataTypeVersion,16087,Variable
-OpcUa_XmlSchema_DataSetReaderTransportDataType_DictionaryFragment,16088,Variable
-OpcUa_XmlSchema_DataSetReaderMessageDataType,16089,Variable
-OpcUa_XmlSchema_DataSetReaderMessageDataType_DataTypeVersion,16090,Variable
-OpcUa_XmlSchema_DataSetReaderMessageDataType_DictionaryFragment,16091,Variable
-OpcUa_XmlSchema_SubscribedDataSetDataType,16092,Variable
-OpcUa_XmlSchema_SubscribedDataSetDataType_DataTypeVersion,16093,Variable
-OpcUa_XmlSchema_SubscribedDataSetDataType_DictionaryFragment,16094,Variable
-OpcUa_XmlSchema_TargetVariablesDataType,16095,Variable
-OpcUa_XmlSchema_TargetVariablesDataType_DataTypeVersion,16096,Variable
-OpcUa_XmlSchema_TargetVariablesDataType_DictionaryFragment,16097,Variable
-OpcUa_XmlSchema_SubscribedDataSetMirrorDataType,16098,Variable
-OpcUa_XmlSchema_SubscribedDataSetMirrorDataType_DataTypeVersion,16099,Variable
-OpcUa_XmlSchema_SubscribedDataSetMirrorDataType_DictionaryFragment,16100,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_SubError,16101,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters,16102,Object
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError,16103,Variable
-OpcUa_XmlSchema_UadpWriterGroupMessageDataType,16104,Variable
-OpcUa_XmlSchema_UadpWriterGroupMessageDataType_DataTypeVersion,16105,Variable
-OpcUa_XmlSchema_UadpWriterGroupMessageDataType_DictionaryFragment,16106,Variable
-OpcUa_XmlSchema_UadpDataSetWriterMessageDataType,16107,Variable
-OpcUa_XmlSchema_UadpDataSetWriterMessageDataType_DataTypeVersion,16108,Variable
-OpcUa_XmlSchema_UadpDataSetWriterMessageDataType_DictionaryFragment,16109,Variable
-OpcUa_XmlSchema_UadpDataSetReaderMessageDataType,16110,Variable
-OpcUa_XmlSchema_UadpDataSetReaderMessageDataType_DataTypeVersion,16111,Variable
-OpcUa_XmlSchema_UadpDataSetReaderMessageDataType_DictionaryFragment,16112,Variable
-OpcUa_XmlSchema_JsonWriterGroupMessageDataType,16113,Variable
-OpcUa_XmlSchema_JsonWriterGroupMessageDataType_DataTypeVersion,16114,Variable
-OpcUa_XmlSchema_JsonWriterGroupMessageDataType_DictionaryFragment,16115,Variable
-OpcUa_XmlSchema_JsonDataSetWriterMessageDataType,16116,Variable
-OpcUa_XmlSchema_JsonDataSetWriterMessageDataType_DataTypeVersion,16117,Variable
-OpcUa_XmlSchema_JsonDataSetWriterMessageDataType_DictionaryFragment,16118,Variable
-OpcUa_XmlSchema_JsonDataSetReaderMessageDataType,16119,Variable
-OpcUa_XmlSchema_JsonDataSetReaderMessageDataType_DataTypeVersion,16120,Variable
-OpcUa_XmlSchema_JsonDataSetReaderMessageDataType_DictionaryFragment,16121,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Active,16122,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Classification,16123,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,16124,Variable
-OpcUa_XmlSchema_BrokerWriterGroupTransportDataType,16125,Variable
-RolePermissionType_Encoding_DefaultXml,16126,Object
-OpcUa_XmlSchema_RolePermissionType,16127,Variable
-OpcUa_XmlSchema_RolePermissionType_DataTypeVersion,16128,Variable
-OpcUa_XmlSchema_RolePermissionType_DictionaryFragment,16129,Variable
-OpcUa_XmlSchema_BrokerWriterGroupTransportDataType_DataTypeVersion,16130,Variable
-OpcUa_BinarySchema_RolePermissionType,16131,Variable
-OpcUa_BinarySchema_RolePermissionType_DataTypeVersion,16132,Variable
-OpcUa_BinarySchema_RolePermissionType_DictionaryFragment,16133,Variable
-OPCUANamespaceMetadata_DefaultRolePermissions,16134,Variable
-OPCUANamespaceMetadata_DefaultUserRolePermissions,16135,Variable
-OPCUANamespaceMetadata_DefaultAccessRestrictions,16136,Variable
-NamespaceMetadataType_DefaultRolePermissions,16137,Variable
-NamespaceMetadataType_DefaultUserRolePermissions,16138,Variable
-NamespaceMetadataType_DefaultAccessRestrictions,16139,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_DefaultRolePermissions,16140,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_DefaultUserRolePermissions,16141,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_DefaultAccessRestrictions,16142,Variable
-OpcUa_XmlSchema_BrokerWriterGroupTransportDataType_DictionaryFragment,16143,Variable
-OpcUa_XmlSchema_BrokerDataSetWriterTransportDataType,16144,Variable
-OpcUa_XmlSchema_BrokerDataSetWriterTransportDataType_DataTypeVersion,16145,Variable
-OpcUa_XmlSchema_BrokerDataSetWriterTransportDataType_DictionaryFragment,16146,Variable
-OpcUa_XmlSchema_BrokerDataSetReaderTransportDataType,16147,Variable
-OpcUa_XmlSchema_BrokerDataSetReaderTransportDataType_DataTypeVersion,16148,Variable
-OpcUa_XmlSchema_BrokerDataSetReaderTransportDataType_DictionaryFragment,16149,Variable
-EndpointType_Encoding_DefaultJson,16150,Object
-DataTypeSchemaHeader_Encoding_DefaultJson,16151,Object
-PublishedDataSetDataType_Encoding_DefaultJson,16152,Object
-PublishedDataSetSourceDataType_Encoding_DefaultJson,16153,Object
-PublishedDataItemsDataType_Encoding_DefaultJson,16154,Object
-PublishedEventsDataType_Encoding_DefaultJson,16155,Object
-DataSetWriterDataType_Encoding_DefaultJson,16156,Object
-DataSetWriterTransportDataType_Encoding_DefaultJson,16157,Object
-DataSetWriterMessageDataType_Encoding_DefaultJson,16158,Object
-PubSubGroupDataType_Encoding_DefaultJson,16159,Object
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,16160,Variable
-WriterGroupTransportDataType_Encoding_DefaultJson,16161,Object
-RoleSetType_RoleName_Placeholder_Identities,16162,Variable
-RoleSetType_RoleName_Placeholder_Applications,16163,Variable
-RoleSetType_RoleName_Placeholder_Endpoints,16164,Variable
-RoleSetType_RoleName_Placeholder_AddApplication,16165,Method
-RoleSetType_RoleName_Placeholder_AddApplication_InputArguments,16166,Variable
-RoleSetType_RoleName_Placeholder_RemoveApplication,16167,Method
-RoleSetType_RoleName_Placeholder_RemoveApplication_InputArguments,16168,Variable
-RoleSetType_RoleName_Placeholder_AddEndpoint,16169,Method
-RoleSetType_RoleName_Placeholder_AddEndpoint_InputArguments,16170,Variable
-RoleSetType_RoleName_Placeholder_RemoveEndpoint,16171,Method
-RoleSetType_RoleName_Placeholder_RemoveEndpoint_InputArguments,16172,Variable
-RoleType_Identities,16173,Variable
-RoleType_Applications,16174,Variable
-RoleType_Endpoints,16175,Variable
-RoleType_AddApplication,16176,Method
-RoleType_AddApplication_InputArguments,16177,Variable
-RoleType_RemoveApplication,16178,Method
-RoleType_RemoveApplication_InputArguments,16179,Variable
-RoleType_AddEndpoint,16180,Method
-RoleType_AddEndpoint_InputArguments,16181,Variable
-RoleType_RemoveEndpoint,16182,Method
-RoleType_RemoveEndpoint_InputArguments,16183,Variable
-AddApplicationMethodType,16184,Method
-AddApplicationMethodType_InputArguments,16185,Variable
-RemoveApplicationMethodType,16186,Method
-RemoveApplicationMethodType_InputArguments,16187,Variable
-AddEndpointMethodType,16188,Method
-AddEndpointMethodType_InputArguments,16189,Variable
-RemoveEndpointMethodType,16190,Method
-RemoveEndpointMethodType_InputArguments,16191,Variable
-WellKnownRole_Anonymous_Identities,16192,Variable
-WellKnownRole_Anonymous_Applications,16193,Variable
-WellKnownRole_Anonymous_Endpoints,16194,Variable
-WellKnownRole_Anonymous_AddApplication,16195,Method
-WellKnownRole_Anonymous_AddApplication_InputArguments,16196,Variable
-WellKnownRole_Anonymous_RemoveApplication,16197,Method
-WellKnownRole_Anonymous_RemoveApplication_InputArguments,16198,Variable
-WellKnownRole_Anonymous_AddEndpoint,16199,Method
-WellKnownRole_Anonymous_AddEndpoint_InputArguments,16200,Variable
-WellKnownRole_Anonymous_RemoveEndpoint,16201,Method
-WellKnownRole_Anonymous_RemoveEndpoint_InputArguments,16202,Variable
-WellKnownRole_AuthenticatedUser_Identities,16203,Variable
-WellKnownRole_AuthenticatedUser_Applications,16204,Variable
-WellKnownRole_AuthenticatedUser_Endpoints,16205,Variable
-WellKnownRole_AuthenticatedUser_AddApplication,16206,Method
-WellKnownRole_AuthenticatedUser_AddApplication_InputArguments,16207,Variable
-WellKnownRole_AuthenticatedUser_RemoveApplication,16208,Method
-WellKnownRole_AuthenticatedUser_RemoveApplication_InputArguments,16209,Variable
-WellKnownRole_AuthenticatedUser_AddEndpoint,16210,Method
-WellKnownRole_AuthenticatedUser_AddEndpoint_InputArguments,16211,Variable
-WellKnownRole_AuthenticatedUser_RemoveEndpoint,16212,Method
-WellKnownRole_AuthenticatedUser_RemoveEndpoint_InputArguments,16213,Variable
-WellKnownRole_Observer_Identities,16214,Variable
-WellKnownRole_Observer_Applications,16215,Variable
-WellKnownRole_Observer_Endpoints,16216,Variable
-WellKnownRole_Observer_AddApplication,16217,Method
-WellKnownRole_Observer_AddApplication_InputArguments,16218,Variable
-WellKnownRole_Observer_RemoveApplication,16219,Method
-WellKnownRole_Observer_RemoveApplication_InputArguments,16220,Variable
-WellKnownRole_Observer_AddEndpoint,16221,Method
-WellKnownRole_Observer_AddEndpoint_InputArguments,16222,Variable
-WellKnownRole_Observer_RemoveEndpoint,16223,Method
-WellKnownRole_Observer_RemoveEndpoint_InputArguments,16224,Variable
-WellKnownRole_Operator_Identities,16225,Variable
-WellKnownRole_Operator_Applications,16226,Variable
-WellKnownRole_Operator_Endpoints,16227,Variable
-WellKnownRole_Operator_AddApplication,16228,Method
-WellKnownRole_Operator_AddApplication_InputArguments,16229,Variable
-WellKnownRole_Operator_RemoveApplication,16230,Method
-WellKnownRole_Operator_RemoveApplication_InputArguments,16231,Variable
-WellKnownRole_Operator_AddEndpoint,16232,Method
-WellKnownRole_Operator_AddEndpoint_InputArguments,16233,Variable
-WellKnownRole_Operator_RemoveEndpoint,16234,Method
-WellKnownRole_Operator_RemoveEndpoint_InputArguments,16235,Variable
-WellKnownRole_Engineer_Identities,16236,Variable
-WellKnownRole_Engineer_Applications,16237,Variable
-WellKnownRole_Engineer_Endpoints,16238,Variable
-WellKnownRole_Engineer_AddApplication,16239,Method
-WellKnownRole_Engineer_AddApplication_InputArguments,16240,Variable
-WellKnownRole_Engineer_RemoveApplication,16241,Method
-WellKnownRole_Engineer_RemoveApplication_InputArguments,16242,Variable
-WellKnownRole_Engineer_AddEndpoint,16243,Method
-WellKnownRole_Engineer_AddEndpoint_InputArguments,16244,Variable
-WellKnownRole_Engineer_RemoveEndpoint,16245,Method
-WellKnownRole_Engineer_RemoveEndpoint_InputArguments,16246,Variable
-WellKnownRole_Supervisor_Identities,16247,Variable
-WellKnownRole_Supervisor_Applications,16248,Variable
-WellKnownRole_Supervisor_Endpoints,16249,Variable
-WellKnownRole_Supervisor_AddApplication,16250,Method
-WellKnownRole_Supervisor_AddApplication_InputArguments,16251,Variable
-WellKnownRole_Supervisor_RemoveApplication,16252,Method
-WellKnownRole_Supervisor_RemoveApplication_InputArguments,16253,Variable
-WellKnownRole_Supervisor_AddEndpoint,16254,Method
-WellKnownRole_Supervisor_AddEndpoint_InputArguments,16255,Variable
-WellKnownRole_Supervisor_RemoveEndpoint,16256,Method
-WellKnownRole_Supervisor_RemoveEndpoint_InputArguments,16257,Variable
-WellKnownRole_SecurityAdmin_Identities,16258,Variable
-WellKnownRole_SecurityAdmin_Applications,16259,Variable
-WellKnownRole_SecurityAdmin_Endpoints,16260,Variable
-WellKnownRole_SecurityAdmin_AddApplication,16261,Method
-WellKnownRole_SecurityAdmin_AddApplication_InputArguments,16262,Variable
-WellKnownRole_SecurityAdmin_RemoveApplication,16263,Method
-WellKnownRole_SecurityAdmin_RemoveApplication_InputArguments,16264,Variable
-WellKnownRole_SecurityAdmin_AddEndpoint,16265,Method
-WellKnownRole_SecurityAdmin_AddEndpoint_InputArguments,16266,Variable
-WellKnownRole_SecurityAdmin_RemoveEndpoint,16267,Method
-WellKnownRole_SecurityAdmin_RemoveEndpoint_InputArguments,16268,Variable
-WellKnownRole_ConfigureAdmin_Identities,16269,Variable
-WellKnownRole_ConfigureAdmin_Applications,16270,Variable
-WellKnownRole_ConfigureAdmin_Endpoints,16271,Variable
-WellKnownRole_ConfigureAdmin_AddApplication,16272,Method
-WellKnownRole_ConfigureAdmin_AddApplication_InputArguments,16273,Variable
-WellKnownRole_ConfigureAdmin_RemoveApplication,16274,Method
-WellKnownRole_ConfigureAdmin_RemoveApplication_InputArguments,16275,Variable
-WellKnownRole_ConfigureAdmin_AddEndpoint,16276,Method
-WellKnownRole_ConfigureAdmin_AddEndpoint_InputArguments,16277,Variable
-WellKnownRole_ConfigureAdmin_RemoveEndpoint,16278,Method
-WellKnownRole_ConfigureAdmin_RemoveEndpoint_InputArguments,16279,Variable
-WriterGroupMessageDataType_Encoding_DefaultJson,16280,Object
-PubSubConnectionDataType_Encoding_DefaultJson,16281,Object
-ConnectionTransportDataType_Encoding_DefaultJson,16282,Object
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,16283,Variable
-ReaderGroupTransportDataType_Encoding_DefaultJson,16284,Object
-ReaderGroupMessageDataType_Encoding_DefaultJson,16285,Object
-DataSetReaderDataType_Encoding_DefaultJson,16286,Object
-DataSetReaderTransportDataType_Encoding_DefaultJson,16287,Object
-DataSetReaderMessageDataType_Encoding_DefaultJson,16288,Object
-ServerType_ServerCapabilities_RoleSet,16289,Object
-ServerType_ServerCapabilities_RoleSet_AddRole,16290,Method
-ServerType_ServerCapabilities_RoleSet_AddRole_InputArguments,16291,Variable
-ServerType_ServerCapabilities_RoleSet_AddRole_OutputArguments,16292,Variable
-ServerType_ServerCapabilities_RoleSet_RemoveRole,16293,Method
-ServerType_ServerCapabilities_RoleSet_RemoveRole_InputArguments,16294,Variable
-ServerCapabilitiesType_RoleSet,16295,Object
-ServerCapabilitiesType_RoleSet_AddRole,16296,Method
-ServerCapabilitiesType_RoleSet_AddRole_InputArguments,16297,Variable
-ServerCapabilitiesType_RoleSet_AddRole_OutputArguments,16298,Variable
-ServerCapabilitiesType_RoleSet_RemoveRole,16299,Method
-ServerCapabilitiesType_RoleSet_RemoveRole_InputArguments,16300,Variable
-Server_ServerCapabilities_RoleSet_AddRole,16301,Method
-Server_ServerCapabilities_RoleSet_AddRole_InputArguments,16302,Variable
-Server_ServerCapabilities_RoleSet_AddRole_OutputArguments,16303,Variable
-Server_ServerCapabilities_RoleSet_RemoveRole,16304,Method
-Server_ServerCapabilities_RoleSet_RemoveRole_InputArguments,16305,Variable
-DefaultInputValues,16306,Variable
-AudioDataType,16307,DataType
-SubscribedDataSetDataType_Encoding_DefaultJson,16308,Object
-SelectionListType,16309,VariableType
-TargetVariablesDataType_Encoding_DefaultJson,16310,Object
-SubscribedDataSetMirrorDataType_Encoding_DefaultJson,16311,Object
-SelectionListType_RestrictToList,16312,Variable
-AdditionalParametersType,16313,DataType
-FileSystem,16314,Object
-FileSystem_FileDirectoryName_Placeholder,16315,Object
-FileSystem_FileDirectoryName_Placeholder_CreateDirectory,16316,Method
-FileSystem_FileDirectoryName_Placeholder_CreateDirectory_InputArguments,16317,Variable
-FileSystem_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments,16318,Variable
-FileSystem_FileDirectoryName_Placeholder_CreateFile,16319,Method
-FileSystem_FileDirectoryName_Placeholder_CreateFile_InputArguments,16320,Variable
-FileSystem_FileDirectoryName_Placeholder_CreateFile_OutputArguments,16321,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,16322,Variable
-UadpWriterGroupMessageDataType_Encoding_DefaultJson,16323,Object
-FileSystem_FileDirectoryName_Placeholder_MoveOrCopy,16324,Method
-FileSystem_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments,16325,Variable
-FileSystem_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments,16326,Variable
-FileSystem_FileName_Placeholder,16327,Object
-FileSystem_FileName_Placeholder_Size,16328,Variable
-FileSystem_FileName_Placeholder_Writable,16329,Variable
-FileSystem_FileName_Placeholder_UserWritable,16330,Variable
-FileSystem_FileName_Placeholder_OpenCount,16331,Variable
-FileSystem_FileName_Placeholder_MimeType,16332,Variable
-FileSystem_FileName_Placeholder_Open,16333,Method
-FileSystem_FileName_Placeholder_Open_InputArguments,16334,Variable
-FileSystem_FileName_Placeholder_Open_OutputArguments,16335,Variable
-FileSystem_FileName_Placeholder_Close,16336,Method
-FileSystem_FileName_Placeholder_Close_InputArguments,16337,Variable
-FileSystem_FileName_Placeholder_Read,16338,Method
-FileSystem_FileName_Placeholder_Read_InputArguments,16339,Variable
-FileSystem_FileName_Placeholder_Read_OutputArguments,16340,Variable
-FileSystem_FileName_Placeholder_Write,16341,Method
-FileSystem_FileName_Placeholder_Write_InputArguments,16342,Variable
-FileSystem_FileName_Placeholder_GetPosition,16343,Method
-FileSystem_FileName_Placeholder_GetPosition_InputArguments,16344,Variable
-FileSystem_FileName_Placeholder_GetPosition_OutputArguments,16345,Variable
-FileSystem_FileName_Placeholder_SetPosition,16346,Method
-FileSystem_FileName_Placeholder_SetPosition_InputArguments,16347,Variable
-FileSystem_CreateDirectory,16348,Method
-FileSystem_CreateDirectory_InputArguments,16349,Variable
-FileSystem_CreateDirectory_OutputArguments,16350,Variable
-FileSystem_CreateFile,16351,Method
-FileSystem_CreateFile_InputArguments,16352,Variable
-FileSystem_CreateFile_OutputArguments,16353,Variable
-FileSystem_DeleteFileSystemObject,16354,Method
-FileSystem_DeleteFileSystemObject_InputArguments,16355,Variable
-FileSystem_MoveOrCopy,16356,Method
-FileSystem_MoveOrCopy_InputArguments,16357,Variable
-FileSystem_MoveOrCopy_OutputArguments,16358,Variable
-TemporaryFileTransferType_GenerateFileForWrite_InputArguments,16359,Variable
-GenerateFileForWriteMethodType_InputArguments,16360,Variable
-HasAlarmSuppressionGroup,16361,ReferenceType
-AlarmGroupMember,16362,ReferenceType
-ConditionType_ConditionSubClassId,16363,Variable
-ConditionType_ConditionSubClassName,16364,Variable
-DialogConditionType_ConditionSubClassId,16365,Variable
-DialogConditionType_ConditionSubClassName,16366,Variable
-AcknowledgeableConditionType_ConditionSubClassId,16367,Variable
-AcknowledgeableConditionType_ConditionSubClassName,16368,Variable
-AlarmConditionType_ConditionSubClassId,16369,Variable
-AlarmConditionType_ConditionSubClassName,16370,Variable
-AlarmConditionType_OutOfServiceState,16371,Variable
-AlarmConditionType_OutOfServiceState_Id,16372,Variable
-AlarmConditionType_OutOfServiceState_Name,16373,Variable
-AlarmConditionType_OutOfServiceState_Number,16374,Variable
-AlarmConditionType_OutOfServiceState_EffectiveDisplayName,16375,Variable
-AlarmConditionType_OutOfServiceState_TransitionTime,16376,Variable
-AlarmConditionType_OutOfServiceState_EffectiveTransitionTime,16377,Variable
-AlarmConditionType_OutOfServiceState_TrueState,16378,Variable
-AlarmConditionType_OutOfServiceState_FalseState,16379,Variable
-AlarmConditionType_SilenceState,16380,Variable
-AlarmConditionType_SilenceState_Id,16381,Variable
-AlarmConditionType_SilenceState_Name,16382,Variable
-AlarmConditionType_SilenceState_Number,16383,Variable
-AlarmConditionType_SilenceState_EffectiveDisplayName,16384,Variable
-AlarmConditionType_SilenceState_TransitionTime,16385,Variable
-AlarmConditionType_SilenceState_EffectiveTransitionTime,16386,Variable
-AlarmConditionType_SilenceState_TrueState,16387,Variable
-AlarmConditionType_SilenceState_FalseState,16388,Variable
-AlarmConditionType_AudibleEnabled,16389,Variable
-AlarmConditionType_AudibleSound,16390,Variable
-UadpDataSetWriterMessageDataType_Encoding_DefaultJson,16391,Object
-UadpDataSetReaderMessageDataType_Encoding_DefaultJson,16392,Object
-JsonWriterGroupMessageDataType_Encoding_DefaultJson,16393,Object
-JsonDataSetWriterMessageDataType_Encoding_DefaultJson,16394,Object
-AlarmConditionType_OnDelay,16395,Variable
-AlarmConditionType_OffDelay,16396,Variable
-AlarmConditionType_FirstInGroupFlag,16397,Variable
-AlarmConditionType_FirstInGroup,16398,Object
-AlarmConditionType_AlarmGroup_Placeholder,16399,Object
-AlarmConditionType_ReAlarmTime,16400,Variable
-AlarmConditionType_ReAlarmRepeatCount,16401,Variable
-AlarmConditionType_Silence,16402,Method
-AlarmConditionType_Suppress,16403,Method
-JsonDataSetReaderMessageDataType_Encoding_DefaultJson,16404,Object
-AlarmGroupType,16405,ObjectType
-AlarmGroupType_AlarmConditionInstance_Placeholder,16406,Object
-AlarmGroupType_AlarmConditionInstance_Placeholder_EventId,16407,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_EventType,16408,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SourceNode,16409,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SourceName,16410,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_Time,16411,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ReceiveTime,16412,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_LocalTime,16413,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_Message,16414,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_Severity,16415,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionClassId,16416,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionClassName,16417,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionSubClassId,16418,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionSubClassName,16419,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ConditionName,16420,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_BranchId,16421,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_Retain,16422,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState,16423,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_Id,16424,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_Name,16425,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_Number,16426,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_EffectiveDisplayName,16427,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_TransitionTime,16428,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_EffectiveTransitionTime,16429,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_TrueState,16430,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_EnabledState_FalseState,16431,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_Quality,16432,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_Quality_SourceTimestamp,16433,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_LastSeverity,16434,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_LastSeverity_SourceTimestamp,16435,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_Comment,16436,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_Comment_SourceTimestamp,16437,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ClientUserId,16438,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_Disable,16439,Method
-AlarmGroupType_AlarmConditionInstance_Placeholder_Enable,16440,Method
-AlarmGroupType_AlarmConditionInstance_Placeholder_AddComment,16441,Method
-AlarmGroupType_AlarmConditionInstance_Placeholder_AddComment_InputArguments,16442,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState,16443,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_Id,16444,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_Name,16445,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_Number,16446,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_EffectiveDisplayName,16447,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_TransitionTime,16448,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_EffectiveTransitionTime,16449,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_TrueState,16450,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_AckedState_FalseState,16451,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState,16452,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_Id,16453,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_Name,16454,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_Number,16455,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_EffectiveDisplayName,16456,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_TransitionTime,16457,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_EffectiveTransitionTime,16458,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_TrueState,16459,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ConfirmedState_FalseState,16460,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_Acknowledge,16461,Method
-AlarmGroupType_AlarmConditionInstance_Placeholder_Acknowledge_InputArguments,16462,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_Confirm,16463,Method
-AlarmGroupType_AlarmConditionInstance_Placeholder_Confirm_InputArguments,16464,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState,16465,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_Id,16466,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_Name,16467,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_Number,16468,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_EffectiveDisplayName,16469,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_TransitionTime,16470,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_EffectiveTransitionTime,16471,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_TrueState,16472,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ActiveState_FalseState,16473,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_InputNode,16474,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState,16475,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_Id,16476,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_Name,16477,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_Number,16478,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_EffectiveDisplayName,16479,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_TransitionTime,16480,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_EffectiveTransitionTime,16481,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_TrueState,16482,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedState_FalseState,16483,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState,16484,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_Id,16485,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_Name,16486,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_Number,16487,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_EffectiveDisplayName,16488,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_TransitionTime,16489,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_EffectiveTransitionTime,16490,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_TrueState,16491,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_OutOfServiceState_FalseState,16492,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState,16493,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_Id,16494,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_Name,16495,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_Number,16496,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_EffectiveDisplayName,16497,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_TransitionTime,16498,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_EffectiveTransitionTime,16499,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_TrueState,16500,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SilenceState_FalseState,16501,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState,16502,Object
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState,16503,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState_Id,16504,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState_Name,16505,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState_Number,16506,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_CurrentState_EffectiveDisplayName,16507,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition,16508,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition_Id,16509,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition_Name,16510,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition_Number,16511,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition_TransitionTime,16512,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_LastTransition_EffectiveTransitionTime,16513,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_UnshelveTime,16514,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_Unshelve,16515,Method
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_OneShotShelve,16516,Method
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_TimedShelve,16517,Method
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_TimedShelve_InputArguments,16518,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_SuppressedOrShelved,16519,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_MaxTimeShelved,16520,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_AudibleEnabled,16521,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_AudibleSound,16522,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,16523,Variable
-BrokerWriterGroupTransportDataType_Encoding_DefaultJson,16524,Object
-BrokerDataSetWriterTransportDataType_Encoding_DefaultJson,16525,Object
-BrokerDataSetReaderTransportDataType_Encoding_DefaultJson,16526,Object
-AlarmGroupType_AlarmConditionInstance_Placeholder_OnDelay,16527,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_OffDelay,16528,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_FirstInGroupFlag,16529,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_FirstInGroup,16530,Object
-AlarmGroupType_AlarmConditionInstance_Placeholder_ReAlarmTime,16531,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ReAlarmRepeatCount,16532,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_Silence,16533,Method
-AlarmGroupType_AlarmConditionInstance_Placeholder_Suppress,16534,Method
-PublishSubscribeType_ConnectionName_Placeholder_AddWriterGroup,16535,Method
-LimitAlarmType_ConditionSubClassId,16536,Variable
-LimitAlarmType_ConditionSubClassName,16537,Variable
-LimitAlarmType_OutOfServiceState,16538,Variable
-LimitAlarmType_OutOfServiceState_Id,16539,Variable
-LimitAlarmType_OutOfServiceState_Name,16540,Variable
-LimitAlarmType_OutOfServiceState_Number,16541,Variable
-LimitAlarmType_OutOfServiceState_EffectiveDisplayName,16542,Variable
-LimitAlarmType_OutOfServiceState_TransitionTime,16543,Variable
-LimitAlarmType_OutOfServiceState_EffectiveTransitionTime,16544,Variable
-LimitAlarmType_OutOfServiceState_TrueState,16545,Variable
-LimitAlarmType_OutOfServiceState_FalseState,16546,Variable
-LimitAlarmType_SilenceState,16547,Variable
-LimitAlarmType_SilenceState_Id,16548,Variable
-LimitAlarmType_SilenceState_Name,16549,Variable
-LimitAlarmType_SilenceState_Number,16550,Variable
-LimitAlarmType_SilenceState_EffectiveDisplayName,16551,Variable
-LimitAlarmType_SilenceState_TransitionTime,16552,Variable
-LimitAlarmType_SilenceState_EffectiveTransitionTime,16553,Variable
-LimitAlarmType_SilenceState_TrueState,16554,Variable
-LimitAlarmType_SilenceState_FalseState,16555,Variable
-LimitAlarmType_AudibleEnabled,16556,Variable
-LimitAlarmType_AudibleSound,16557,Variable
-PublishSubscribeType_ConnectionName_Placeholder_AddWriterGroup_InputArguments,16558,Variable
-PublishSubscribeType_ConnectionName_Placeholder_AddWriterGroup_OutputArguments,16559,Variable
-PublishSubscribeType_ConnectionName_Placeholder_AddReaderGroup,16560,Method
-PublishSubscribeType_ConnectionName_Placeholder_AddReaderGroup_InputArguments,16561,Variable
-LimitAlarmType_OnDelay,16562,Variable
-LimitAlarmType_OffDelay,16563,Variable
-LimitAlarmType_FirstInGroupFlag,16564,Variable
-LimitAlarmType_FirstInGroup,16565,Object
-LimitAlarmType_AlarmGroup_Placeholder,16566,Object
-LimitAlarmType_ReAlarmTime,16567,Variable
-LimitAlarmType_ReAlarmRepeatCount,16568,Variable
-LimitAlarmType_Silence,16569,Method
-LimitAlarmType_Suppress,16570,Method
-PublishSubscribeType_ConnectionName_Placeholder_AddReaderGroup_OutputArguments,16571,Variable
-LimitAlarmType_BaseHighHighLimit,16572,Variable
-LimitAlarmType_BaseHighLimit,16573,Variable
-LimitAlarmType_BaseLowLimit,16574,Variable
-LimitAlarmType_BaseLowLowLimit,16575,Variable
-ExclusiveLimitAlarmType_ConditionSubClassId,16576,Variable
-ExclusiveLimitAlarmType_ConditionSubClassName,16577,Variable
-ExclusiveLimitAlarmType_OutOfServiceState,16578,Variable
-ExclusiveLimitAlarmType_OutOfServiceState_Id,16579,Variable
-ExclusiveLimitAlarmType_OutOfServiceState_Name,16580,Variable
-ExclusiveLimitAlarmType_OutOfServiceState_Number,16581,Variable
-ExclusiveLimitAlarmType_OutOfServiceState_EffectiveDisplayName,16582,Variable
-ExclusiveLimitAlarmType_OutOfServiceState_TransitionTime,16583,Variable
-ExclusiveLimitAlarmType_OutOfServiceState_EffectiveTransitionTime,16584,Variable
-ExclusiveLimitAlarmType_OutOfServiceState_TrueState,16585,Variable
-ExclusiveLimitAlarmType_OutOfServiceState_FalseState,16586,Variable
-ExclusiveLimitAlarmType_SilenceState,16587,Variable
-ExclusiveLimitAlarmType_SilenceState_Id,16588,Variable
-ExclusiveLimitAlarmType_SilenceState_Name,16589,Variable
-ExclusiveLimitAlarmType_SilenceState_Number,16590,Variable
-ExclusiveLimitAlarmType_SilenceState_EffectiveDisplayName,16591,Variable
-ExclusiveLimitAlarmType_SilenceState_TransitionTime,16592,Variable
-ExclusiveLimitAlarmType_SilenceState_EffectiveTransitionTime,16593,Variable
-ExclusiveLimitAlarmType_SilenceState_TrueState,16594,Variable
-ExclusiveLimitAlarmType_SilenceState_FalseState,16595,Variable
-ExclusiveLimitAlarmType_AudibleEnabled,16596,Variable
-ExclusiveLimitAlarmType_AudibleSound,16597,Variable
-PublishSubscribeType_AddConnection,16598,Method
-PublishSubscribeType_AddConnection_InputArguments,16599,Variable
-PublishSubscribeType_AddConnection_OutputArguments,16600,Variable
-PublishSubscribeType_PublishedDataSets_AddPublishedDataItemsTemplate,16601,Method
-ExclusiveLimitAlarmType_OnDelay,16602,Variable
-ExclusiveLimitAlarmType_OffDelay,16603,Variable
-ExclusiveLimitAlarmType_FirstInGroupFlag,16604,Variable
-ExclusiveLimitAlarmType_FirstInGroup,16605,Object
-ExclusiveLimitAlarmType_AlarmGroup_Placeholder,16606,Object
-ExclusiveLimitAlarmType_ReAlarmTime,16607,Variable
-ExclusiveLimitAlarmType_ReAlarmRepeatCount,16608,Variable
-ExclusiveLimitAlarmType_Silence,16609,Method
-ExclusiveLimitAlarmType_Suppress,16610,Method
-PublishSubscribeType_PublishedDataSets_AddPublishedDataItemsTemplate_InputArguments,16611,Variable
-ExclusiveLimitAlarmType_BaseHighHighLimit,16612,Variable
-ExclusiveLimitAlarmType_BaseHighLimit,16613,Variable
-ExclusiveLimitAlarmType_BaseLowLimit,16614,Variable
-ExclusiveLimitAlarmType_BaseLowLowLimit,16615,Variable
-NonExclusiveLimitAlarmType_ConditionSubClassId,16616,Variable
-NonExclusiveLimitAlarmType_ConditionSubClassName,16617,Variable
-NonExclusiveLimitAlarmType_OutOfServiceState,16618,Variable
-NonExclusiveLimitAlarmType_OutOfServiceState_Id,16619,Variable
-NonExclusiveLimitAlarmType_OutOfServiceState_Name,16620,Variable
-NonExclusiveLimitAlarmType_OutOfServiceState_Number,16621,Variable
-NonExclusiveLimitAlarmType_OutOfServiceState_EffectiveDisplayName,16622,Variable
-NonExclusiveLimitAlarmType_OutOfServiceState_TransitionTime,16623,Variable
-NonExclusiveLimitAlarmType_OutOfServiceState_EffectiveTransitionTime,16624,Variable
-NonExclusiveLimitAlarmType_OutOfServiceState_TrueState,16625,Variable
-NonExclusiveLimitAlarmType_OutOfServiceState_FalseState,16626,Variable
-NonExclusiveLimitAlarmType_SilenceState,16627,Variable
-NonExclusiveLimitAlarmType_SilenceState_Id,16628,Variable
-NonExclusiveLimitAlarmType_SilenceState_Name,16629,Variable
-NonExclusiveLimitAlarmType_SilenceState_Number,16630,Variable
-NonExclusiveLimitAlarmType_SilenceState_EffectiveDisplayName,16631,Variable
-NonExclusiveLimitAlarmType_SilenceState_TransitionTime,16632,Variable
-NonExclusiveLimitAlarmType_SilenceState_EffectiveTransitionTime,16633,Variable
-NonExclusiveLimitAlarmType_SilenceState_TrueState,16634,Variable
-NonExclusiveLimitAlarmType_SilenceState_FalseState,16635,Variable
-NonExclusiveLimitAlarmType_AudibleEnabled,16636,Variable
-NonExclusiveLimitAlarmType_AudibleSound,16637,Variable
-PublishSubscribeType_PublishedDataSets_AddPublishedDataItemsTemplate_OutputArguments,16638,Variable
-PublishSubscribeType_PublishedDataSets_AddPublishedEventsTemplate,16639,Method
-PublishSubscribeType_PublishedDataSets_AddPublishedEventsTemplate_InputArguments,16640,Variable
-PublishSubscribeType_PublishedDataSets_AddPublishedEventsTemplate_OutputArguments,16641,Variable
-NonExclusiveLimitAlarmType_OnDelay,16642,Variable
-NonExclusiveLimitAlarmType_OffDelay,16643,Variable
-NonExclusiveLimitAlarmType_FirstInGroupFlag,16644,Variable
-NonExclusiveLimitAlarmType_FirstInGroup,16645,Object
-NonExclusiveLimitAlarmType_AlarmGroup_Placeholder,16646,Object
-NonExclusiveLimitAlarmType_ReAlarmTime,16647,Variable
-NonExclusiveLimitAlarmType_ReAlarmRepeatCount,16648,Variable
-NonExclusiveLimitAlarmType_Silence,16649,Method
-NonExclusiveLimitAlarmType_Suppress,16650,Method
-PublishSubscribeType_PublishedDataSets_AddDataSetFolder,16651,Method
-NonExclusiveLimitAlarmType_BaseHighHighLimit,16652,Variable
-NonExclusiveLimitAlarmType_BaseHighLimit,16653,Variable
-NonExclusiveLimitAlarmType_BaseLowLimit,16654,Variable
-NonExclusiveLimitAlarmType_BaseLowLowLimit,16655,Variable
-NonExclusiveLevelAlarmType_ConditionSubClassId,16656,Variable
-NonExclusiveLevelAlarmType_ConditionSubClassName,16657,Variable
-NonExclusiveLevelAlarmType_OutOfServiceState,16658,Variable
-NonExclusiveLevelAlarmType_OutOfServiceState_Id,16659,Variable
-NonExclusiveLevelAlarmType_OutOfServiceState_Name,16660,Variable
-NonExclusiveLevelAlarmType_OutOfServiceState_Number,16661,Variable
-NonExclusiveLevelAlarmType_OutOfServiceState_EffectiveDisplayName,16662,Variable
-NonExclusiveLevelAlarmType_OutOfServiceState_TransitionTime,16663,Variable
-NonExclusiveLevelAlarmType_OutOfServiceState_EffectiveTransitionTime,16664,Variable
-NonExclusiveLevelAlarmType_OutOfServiceState_TrueState,16665,Variable
-NonExclusiveLevelAlarmType_OutOfServiceState_FalseState,16666,Variable
-NonExclusiveLevelAlarmType_SilenceState,16667,Variable
-NonExclusiveLevelAlarmType_SilenceState_Id,16668,Variable
-NonExclusiveLevelAlarmType_SilenceState_Name,16669,Variable
-NonExclusiveLevelAlarmType_SilenceState_Number,16670,Variable
-NonExclusiveLevelAlarmType_SilenceState_EffectiveDisplayName,16671,Variable
-NonExclusiveLevelAlarmType_SilenceState_TransitionTime,16672,Variable
-NonExclusiveLevelAlarmType_SilenceState_EffectiveTransitionTime,16673,Variable
-NonExclusiveLevelAlarmType_SilenceState_TrueState,16674,Variable
-NonExclusiveLevelAlarmType_SilenceState_FalseState,16675,Variable
-NonExclusiveLevelAlarmType_AudibleEnabled,16676,Variable
-NonExclusiveLevelAlarmType_AudibleSound,16677,Variable
-PublishSubscribeType_PublishedDataSets_AddDataSetFolder_InputArguments,16678,Variable
-PublishSubscribeType_PublishedDataSets_AddDataSetFolder_OutputArguments,16679,Variable
-PublishSubscribeType_PublishedDataSets_RemoveDataSetFolder,16680,Method
-PublishSubscribeType_PublishedDataSets_RemoveDataSetFolder_InputArguments,16681,Variable
-NonExclusiveLevelAlarmType_OnDelay,16682,Variable
-NonExclusiveLevelAlarmType_OffDelay,16683,Variable
-NonExclusiveLevelAlarmType_FirstInGroupFlag,16684,Variable
-NonExclusiveLevelAlarmType_FirstInGroup,16685,Object
-NonExclusiveLevelAlarmType_AlarmGroup_Placeholder,16686,Object
-NonExclusiveLevelAlarmType_ReAlarmTime,16687,Variable
-NonExclusiveLevelAlarmType_ReAlarmRepeatCount,16688,Variable
-NonExclusiveLevelAlarmType_Silence,16689,Method
-NonExclusiveLevelAlarmType_Suppress,16690,Method
-AddConnectionMethodType,16691,Method
-NonExclusiveLevelAlarmType_BaseHighHighLimit,16692,Variable
-NonExclusiveLevelAlarmType_BaseHighLimit,16693,Variable
-NonExclusiveLevelAlarmType_BaseLowLimit,16694,Variable
-NonExclusiveLevelAlarmType_BaseLowLowLimit,16695,Variable
-ExclusiveLevelAlarmType_ConditionSubClassId,16696,Variable
-ExclusiveLevelAlarmType_ConditionSubClassName,16697,Variable
-ExclusiveLevelAlarmType_OutOfServiceState,16698,Variable
-ExclusiveLevelAlarmType_OutOfServiceState_Id,16699,Variable
-ExclusiveLevelAlarmType_OutOfServiceState_Name,16700,Variable
-ExclusiveLevelAlarmType_OutOfServiceState_Number,16701,Variable
-ExclusiveLevelAlarmType_OutOfServiceState_EffectiveDisplayName,16702,Variable
-ExclusiveLevelAlarmType_OutOfServiceState_TransitionTime,16703,Variable
-ExclusiveLevelAlarmType_OutOfServiceState_EffectiveTransitionTime,16704,Variable
-ExclusiveLevelAlarmType_OutOfServiceState_TrueState,16705,Variable
-ExclusiveLevelAlarmType_OutOfServiceState_FalseState,16706,Variable
-ExclusiveLevelAlarmType_SilenceState,16707,Variable
-ExclusiveLevelAlarmType_SilenceState_Id,16708,Variable
-ExclusiveLevelAlarmType_SilenceState_Name,16709,Variable
-ExclusiveLevelAlarmType_SilenceState_Number,16710,Variable
-ExclusiveLevelAlarmType_SilenceState_EffectiveDisplayName,16711,Variable
-ExclusiveLevelAlarmType_SilenceState_TransitionTime,16712,Variable
-ExclusiveLevelAlarmType_SilenceState_EffectiveTransitionTime,16713,Variable
-ExclusiveLevelAlarmType_SilenceState_TrueState,16714,Variable
-ExclusiveLevelAlarmType_SilenceState_FalseState,16715,Variable
-ExclusiveLevelAlarmType_AudibleEnabled,16716,Variable
-ExclusiveLevelAlarmType_AudibleSound,16717,Variable
-AddConnectionMethodType_InputArguments,16718,Variable
-AddConnectionMethodType_OutputArguments,16719,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_DataSetWriterId,16720,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_DataSetFieldContentMask,16721,Variable
-ExclusiveLevelAlarmType_OnDelay,16722,Variable
-ExclusiveLevelAlarmType_OffDelay,16723,Variable
-ExclusiveLevelAlarmType_FirstInGroupFlag,16724,Variable
-ExclusiveLevelAlarmType_FirstInGroup,16725,Object
-ExclusiveLevelAlarmType_AlarmGroup_Placeholder,16726,Object
-ExclusiveLevelAlarmType_ReAlarmTime,16727,Variable
-ExclusiveLevelAlarmType_ReAlarmRepeatCount,16728,Variable
-ExclusiveLevelAlarmType_Silence,16729,Method
-ExclusiveLevelAlarmType_Suppress,16730,Method
-PublishedDataSetType_DataSetWriterName_Placeholder_KeyFrameCount,16731,Variable
-ExclusiveLevelAlarmType_BaseHighHighLimit,16732,Variable
-ExclusiveLevelAlarmType_BaseHighLimit,16733,Variable
-ExclusiveLevelAlarmType_BaseLowLimit,16734,Variable
-ExclusiveLevelAlarmType_BaseLowLowLimit,16735,Variable
-NonExclusiveDeviationAlarmType_ConditionSubClassId,16736,Variable
-NonExclusiveDeviationAlarmType_ConditionSubClassName,16737,Variable
-NonExclusiveDeviationAlarmType_OutOfServiceState,16738,Variable
-NonExclusiveDeviationAlarmType_OutOfServiceState_Id,16739,Variable
-NonExclusiveDeviationAlarmType_OutOfServiceState_Name,16740,Variable
-NonExclusiveDeviationAlarmType_OutOfServiceState_Number,16741,Variable
-NonExclusiveDeviationAlarmType_OutOfServiceState_EffectiveDisplayName,16742,Variable
-NonExclusiveDeviationAlarmType_OutOfServiceState_TransitionTime,16743,Variable
-NonExclusiveDeviationAlarmType_OutOfServiceState_EffectiveTransitionTime,16744,Variable
-NonExclusiveDeviationAlarmType_OutOfServiceState_TrueState,16745,Variable
-NonExclusiveDeviationAlarmType_OutOfServiceState_FalseState,16746,Variable
-NonExclusiveDeviationAlarmType_SilenceState,16747,Variable
-NonExclusiveDeviationAlarmType_SilenceState_Id,16748,Variable
-NonExclusiveDeviationAlarmType_SilenceState_Name,16749,Variable
-NonExclusiveDeviationAlarmType_SilenceState_Number,16750,Variable
-NonExclusiveDeviationAlarmType_SilenceState_EffectiveDisplayName,16751,Variable
-NonExclusiveDeviationAlarmType_SilenceState_TransitionTime,16752,Variable
-NonExclusiveDeviationAlarmType_SilenceState_EffectiveTransitionTime,16753,Variable
-NonExclusiveDeviationAlarmType_SilenceState_TrueState,16754,Variable
-NonExclusiveDeviationAlarmType_SilenceState_FalseState,16755,Variable
-NonExclusiveDeviationAlarmType_AudibleEnabled,16756,Variable
-NonExclusiveDeviationAlarmType_AudibleSound,16757,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_MessageSettings,16758,Object
-PublishedDataSetType_DataSetClassId,16759,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetWriterId,16760,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetFieldContentMask,16761,Variable
-NonExclusiveDeviationAlarmType_OnDelay,16762,Variable
-NonExclusiveDeviationAlarmType_OffDelay,16763,Variable
-NonExclusiveDeviationAlarmType_FirstInGroupFlag,16764,Variable
-NonExclusiveDeviationAlarmType_FirstInGroup,16765,Object
-NonExclusiveDeviationAlarmType_AlarmGroup_Placeholder,16766,Object
-NonExclusiveDeviationAlarmType_ReAlarmTime,16767,Variable
-NonExclusiveDeviationAlarmType_ReAlarmRepeatCount,16768,Variable
-NonExclusiveDeviationAlarmType_Silence,16769,Method
-NonExclusiveDeviationAlarmType_Suppress,16770,Method
-PublishedDataItemsType_DataSetWriterName_Placeholder_KeyFrameCount,16771,Variable
-NonExclusiveDeviationAlarmType_BaseHighHighLimit,16772,Variable
-NonExclusiveDeviationAlarmType_BaseHighLimit,16773,Variable
-NonExclusiveDeviationAlarmType_BaseLowLimit,16774,Variable
-NonExclusiveDeviationAlarmType_BaseLowLowLimit,16775,Variable
-NonExclusiveDeviationAlarmType_BaseSetpointNode,16776,Variable
-ExclusiveDeviationAlarmType_ConditionSubClassId,16777,Variable
-ExclusiveDeviationAlarmType_ConditionSubClassName,16778,Variable
-ExclusiveDeviationAlarmType_OutOfServiceState,16779,Variable
-ExclusiveDeviationAlarmType_OutOfServiceState_Id,16780,Variable
-ExclusiveDeviationAlarmType_OutOfServiceState_Name,16781,Variable
-ExclusiveDeviationAlarmType_OutOfServiceState_Number,16782,Variable
-ExclusiveDeviationAlarmType_OutOfServiceState_EffectiveDisplayName,16783,Variable
-ExclusiveDeviationAlarmType_OutOfServiceState_TransitionTime,16784,Variable
-ExclusiveDeviationAlarmType_OutOfServiceState_EffectiveTransitionTime,16785,Variable
-ExclusiveDeviationAlarmType_OutOfServiceState_TrueState,16786,Variable
-ExclusiveDeviationAlarmType_OutOfServiceState_FalseState,16787,Variable
-ExclusiveDeviationAlarmType_SilenceState,16788,Variable
-ExclusiveDeviationAlarmType_SilenceState_Id,16789,Variable
-ExclusiveDeviationAlarmType_SilenceState_Name,16790,Variable
-ExclusiveDeviationAlarmType_SilenceState_Number,16791,Variable
-ExclusiveDeviationAlarmType_SilenceState_EffectiveDisplayName,16792,Variable
-ExclusiveDeviationAlarmType_SilenceState_TransitionTime,16793,Variable
-ExclusiveDeviationAlarmType_SilenceState_EffectiveTransitionTime,16794,Variable
-ExclusiveDeviationAlarmType_SilenceState_TrueState,16795,Variable
-ExclusiveDeviationAlarmType_SilenceState_FalseState,16796,Variable
-ExclusiveDeviationAlarmType_AudibleEnabled,16797,Variable
-ExclusiveDeviationAlarmType_AudibleSound,16798,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_MessageSettings,16799,Object
-PublishedDataItemsType_DataSetClassId,16800,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_DataSetWriterId,16801,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_DataSetFieldContentMask,16802,Variable
-ExclusiveDeviationAlarmType_OnDelay,16803,Variable
-ExclusiveDeviationAlarmType_OffDelay,16804,Variable
-ExclusiveDeviationAlarmType_FirstInGroupFlag,16805,Variable
-ExclusiveDeviationAlarmType_FirstInGroup,16806,Object
-ExclusiveDeviationAlarmType_AlarmGroup_Placeholder,16807,Object
-ExclusiveDeviationAlarmType_ReAlarmTime,16808,Variable
-ExclusiveDeviationAlarmType_ReAlarmRepeatCount,16809,Variable
-ExclusiveDeviationAlarmType_Silence,16810,Method
-ExclusiveDeviationAlarmType_Suppress,16811,Method
-PublishedEventsType_DataSetWriterName_Placeholder_KeyFrameCount,16812,Variable
-ExclusiveDeviationAlarmType_BaseHighHighLimit,16813,Variable
-ExclusiveDeviationAlarmType_BaseHighLimit,16814,Variable
-ExclusiveDeviationAlarmType_BaseLowLimit,16815,Variable
-ExclusiveDeviationAlarmType_BaseLowLowLimit,16816,Variable
-ExclusiveDeviationAlarmType_BaseSetpointNode,16817,Variable
-NonExclusiveRateOfChangeAlarmType_ConditionSubClassId,16818,Variable
-NonExclusiveRateOfChangeAlarmType_ConditionSubClassName,16819,Variable
-NonExclusiveRateOfChangeAlarmType_OutOfServiceState,16820,Variable
-NonExclusiveRateOfChangeAlarmType_OutOfServiceState_Id,16821,Variable
-NonExclusiveRateOfChangeAlarmType_OutOfServiceState_Name,16822,Variable
-NonExclusiveRateOfChangeAlarmType_OutOfServiceState_Number,16823,Variable
-NonExclusiveRateOfChangeAlarmType_OutOfServiceState_EffectiveDisplayName,16824,Variable
-NonExclusiveRateOfChangeAlarmType_OutOfServiceState_TransitionTime,16825,Variable
-NonExclusiveRateOfChangeAlarmType_OutOfServiceState_EffectiveTransitionTime,16826,Variable
-NonExclusiveRateOfChangeAlarmType_OutOfServiceState_TrueState,16827,Variable
-NonExclusiveRateOfChangeAlarmType_OutOfServiceState_FalseState,16828,Variable
-NonExclusiveRateOfChangeAlarmType_SilenceState,16829,Variable
-NonExclusiveRateOfChangeAlarmType_SilenceState_Id,16830,Variable
-NonExclusiveRateOfChangeAlarmType_SilenceState_Name,16831,Variable
-NonExclusiveRateOfChangeAlarmType_SilenceState_Number,16832,Variable
-NonExclusiveRateOfChangeAlarmType_SilenceState_EffectiveDisplayName,16833,Variable
-NonExclusiveRateOfChangeAlarmType_SilenceState_TransitionTime,16834,Variable
-NonExclusiveRateOfChangeAlarmType_SilenceState_EffectiveTransitionTime,16835,Variable
-NonExclusiveRateOfChangeAlarmType_SilenceState_TrueState,16836,Variable
-NonExclusiveRateOfChangeAlarmType_SilenceState_FalseState,16837,Variable
-NonExclusiveRateOfChangeAlarmType_AudibleEnabled,16838,Variable
-NonExclusiveRateOfChangeAlarmType_AudibleSound,16839,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_MessageSettings,16840,Object
-PublishedEventsType_DataSetClassId,16841,Variable
-DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate,16842,Method
-DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate_InputArguments,16843,Variable
-NonExclusiveRateOfChangeAlarmType_OnDelay,16844,Variable
-NonExclusiveRateOfChangeAlarmType_OffDelay,16845,Variable
-NonExclusiveRateOfChangeAlarmType_FirstInGroupFlag,16846,Variable
-NonExclusiveRateOfChangeAlarmType_FirstInGroup,16847,Object
-NonExclusiveRateOfChangeAlarmType_AlarmGroup_Placeholder,16848,Object
-NonExclusiveRateOfChangeAlarmType_ReAlarmTime,16849,Variable
-NonExclusiveRateOfChangeAlarmType_ReAlarmRepeatCount,16850,Variable
-NonExclusiveRateOfChangeAlarmType_Silence,16851,Method
-NonExclusiveRateOfChangeAlarmType_Suppress,16852,Method
-DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedDataItemsTemplate_OutputArguments,16853,Variable
-NonExclusiveRateOfChangeAlarmType_BaseHighHighLimit,16854,Variable
-NonExclusiveRateOfChangeAlarmType_BaseHighLimit,16855,Variable
-NonExclusiveRateOfChangeAlarmType_BaseLowLimit,16856,Variable
-NonExclusiveRateOfChangeAlarmType_BaseLowLowLimit,16857,Variable
-NonExclusiveRateOfChangeAlarmType_EngineeringUnits,16858,Variable
-ExclusiveRateOfChangeAlarmType_ConditionSubClassId,16859,Variable
-ExclusiveRateOfChangeAlarmType_ConditionSubClassName,16860,Variable
-ExclusiveRateOfChangeAlarmType_OutOfServiceState,16861,Variable
-ExclusiveRateOfChangeAlarmType_OutOfServiceState_Id,16862,Variable
-ExclusiveRateOfChangeAlarmType_OutOfServiceState_Name,16863,Variable
-ExclusiveRateOfChangeAlarmType_OutOfServiceState_Number,16864,Variable
-ExclusiveRateOfChangeAlarmType_OutOfServiceState_EffectiveDisplayName,16865,Variable
-ExclusiveRateOfChangeAlarmType_OutOfServiceState_TransitionTime,16866,Variable
-ExclusiveRateOfChangeAlarmType_OutOfServiceState_EffectiveTransitionTime,16867,Variable
-ExclusiveRateOfChangeAlarmType_OutOfServiceState_TrueState,16868,Variable
-ExclusiveRateOfChangeAlarmType_OutOfServiceState_FalseState,16869,Variable
-ExclusiveRateOfChangeAlarmType_SilenceState,16870,Variable
-ExclusiveRateOfChangeAlarmType_SilenceState_Id,16871,Variable
-ExclusiveRateOfChangeAlarmType_SilenceState_Name,16872,Variable
-ExclusiveRateOfChangeAlarmType_SilenceState_Number,16873,Variable
-ExclusiveRateOfChangeAlarmType_SilenceState_EffectiveDisplayName,16874,Variable
-ExclusiveRateOfChangeAlarmType_SilenceState_TransitionTime,16875,Variable
-ExclusiveRateOfChangeAlarmType_SilenceState_EffectiveTransitionTime,16876,Variable
-ExclusiveRateOfChangeAlarmType_SilenceState_TrueState,16877,Variable
-ExclusiveRateOfChangeAlarmType_SilenceState_FalseState,16878,Variable
-ExclusiveRateOfChangeAlarmType_AudibleEnabled,16879,Variable
-ExclusiveRateOfChangeAlarmType_AudibleSound,16880,Variable
-DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate,16881,Method
-DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate_InputArguments,16882,Variable
-DataSetFolderType_DataSetFolderName_Placeholder_AddPublishedEventsTemplate_OutputArguments,16883,Variable
-DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder,16884,Method
-ExclusiveRateOfChangeAlarmType_OnDelay,16885,Variable
-ExclusiveRateOfChangeAlarmType_OffDelay,16886,Variable
-ExclusiveRateOfChangeAlarmType_FirstInGroupFlag,16887,Variable
-ExclusiveRateOfChangeAlarmType_FirstInGroup,16888,Object
-ExclusiveRateOfChangeAlarmType_AlarmGroup_Placeholder,16889,Object
-ExclusiveRateOfChangeAlarmType_ReAlarmTime,16890,Variable
-ExclusiveRateOfChangeAlarmType_ReAlarmRepeatCount,16891,Variable
-ExclusiveRateOfChangeAlarmType_Silence,16892,Method
-ExclusiveRateOfChangeAlarmType_Suppress,16893,Method
-DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder_InputArguments,16894,Variable
-ExclusiveRateOfChangeAlarmType_BaseHighHighLimit,16895,Variable
-ExclusiveRateOfChangeAlarmType_BaseHighLimit,16896,Variable
-ExclusiveRateOfChangeAlarmType_BaseLowLimit,16897,Variable
-ExclusiveRateOfChangeAlarmType_BaseLowLowLimit,16898,Variable
-ExclusiveRateOfChangeAlarmType_EngineeringUnits,16899,Variable
-DiscreteAlarmType_ConditionSubClassId,16900,Variable
-DiscreteAlarmType_ConditionSubClassName,16901,Variable
-DiscreteAlarmType_OutOfServiceState,16902,Variable
-DiscreteAlarmType_OutOfServiceState_Id,16903,Variable
-DiscreteAlarmType_OutOfServiceState_Name,16904,Variable
-DiscreteAlarmType_OutOfServiceState_Number,16905,Variable
-DiscreteAlarmType_OutOfServiceState_EffectiveDisplayName,16906,Variable
-DiscreteAlarmType_OutOfServiceState_TransitionTime,16907,Variable
-DiscreteAlarmType_OutOfServiceState_EffectiveTransitionTime,16908,Variable
-DiscreteAlarmType_OutOfServiceState_TrueState,16909,Variable
-DiscreteAlarmType_OutOfServiceState_FalseState,16910,Variable
-DiscreteAlarmType_SilenceState,16911,Variable
-DiscreteAlarmType_SilenceState_Id,16912,Variable
-DiscreteAlarmType_SilenceState_Name,16913,Variable
-DiscreteAlarmType_SilenceState_Number,16914,Variable
-DiscreteAlarmType_SilenceState_EffectiveDisplayName,16915,Variable
-DiscreteAlarmType_SilenceState_TransitionTime,16916,Variable
-DiscreteAlarmType_SilenceState_EffectiveTransitionTime,16917,Variable
-DiscreteAlarmType_SilenceState_TrueState,16918,Variable
-DiscreteAlarmType_SilenceState_FalseState,16919,Variable
-DiscreteAlarmType_AudibleEnabled,16920,Variable
-DiscreteAlarmType_AudibleSound,16921,Variable
-DataSetFolderType_DataSetFolderName_Placeholder_AddDataSetFolder_OutputArguments,16922,Variable
-DataSetFolderType_DataSetFolderName_Placeholder_RemoveDataSetFolder,16923,Method
-DataSetFolderType_DataSetFolderName_Placeholder_RemoveDataSetFolder_InputArguments,16924,Variable
-DataSetFolderType_PublishedDataSetName_Placeholder_DataSetClassId,16925,Variable
-DiscreteAlarmType_OnDelay,16926,Variable
-DiscreteAlarmType_OffDelay,16927,Variable
-DiscreteAlarmType_FirstInGroupFlag,16928,Variable
-DiscreteAlarmType_FirstInGroup,16929,Object
-DiscreteAlarmType_AlarmGroup_Placeholder,16930,Object
-DiscreteAlarmType_ReAlarmTime,16931,Variable
-DiscreteAlarmType_ReAlarmRepeatCount,16932,Variable
-DiscreteAlarmType_Silence,16933,Method
-DiscreteAlarmType_Suppress,16934,Method
-DataSetFolderType_AddPublishedDataItemsTemplate,16935,Method
-OffNormalAlarmType_ConditionSubClassId,16936,Variable
-OffNormalAlarmType_ConditionSubClassName,16937,Variable
-OffNormalAlarmType_OutOfServiceState,16938,Variable
-OffNormalAlarmType_OutOfServiceState_Id,16939,Variable
-OffNormalAlarmType_OutOfServiceState_Name,16940,Variable
-OffNormalAlarmType_OutOfServiceState_Number,16941,Variable
-OffNormalAlarmType_OutOfServiceState_EffectiveDisplayName,16942,Variable
-OffNormalAlarmType_OutOfServiceState_TransitionTime,16943,Variable
-OffNormalAlarmType_OutOfServiceState_EffectiveTransitionTime,16944,Variable
-OffNormalAlarmType_OutOfServiceState_TrueState,16945,Variable
-OffNormalAlarmType_OutOfServiceState_FalseState,16946,Variable
-OffNormalAlarmType_SilenceState,16947,Variable
-OffNormalAlarmType_SilenceState_Id,16948,Variable
-OffNormalAlarmType_SilenceState_Name,16949,Variable
-OffNormalAlarmType_SilenceState_Number,16950,Variable
-OffNormalAlarmType_SilenceState_EffectiveDisplayName,16951,Variable
-OffNormalAlarmType_SilenceState_TransitionTime,16952,Variable
-OffNormalAlarmType_SilenceState_EffectiveTransitionTime,16953,Variable
-OffNormalAlarmType_SilenceState_TrueState,16954,Variable
-OffNormalAlarmType_SilenceState_FalseState,16955,Variable
-OffNormalAlarmType_AudibleEnabled,16956,Variable
-OffNormalAlarmType_AudibleSound,16957,Variable
-DataSetFolderType_AddPublishedDataItemsTemplate_InputArguments,16958,Variable
-DataSetFolderType_AddPublishedDataItemsTemplate_OutputArguments,16959,Variable
-DataSetFolderType_AddPublishedEventsTemplate,16960,Method
-DataSetFolderType_AddPublishedEventsTemplate_InputArguments,16961,Variable
-OffNormalAlarmType_OnDelay,16962,Variable
-OffNormalAlarmType_OffDelay,16963,Variable
-OffNormalAlarmType_FirstInGroupFlag,16964,Variable
-OffNormalAlarmType_FirstInGroup,16965,Object
-OffNormalAlarmType_AlarmGroup_Placeholder,16966,Object
-OffNormalAlarmType_ReAlarmTime,16967,Variable
-OffNormalAlarmType_ReAlarmRepeatCount,16968,Variable
-OffNormalAlarmType_Silence,16969,Method
-OffNormalAlarmType_Suppress,16970,Method
-DataSetFolderType_AddPublishedEventsTemplate_OutputArguments,16971,Variable
-SystemOffNormalAlarmType_ConditionSubClassId,16972,Variable
-SystemOffNormalAlarmType_ConditionSubClassName,16973,Variable
-SystemOffNormalAlarmType_OutOfServiceState,16974,Variable
-SystemOffNormalAlarmType_OutOfServiceState_Id,16975,Variable
-SystemOffNormalAlarmType_OutOfServiceState_Name,16976,Variable
-SystemOffNormalAlarmType_OutOfServiceState_Number,16977,Variable
-SystemOffNormalAlarmType_OutOfServiceState_EffectiveDisplayName,16978,Variable
-SystemOffNormalAlarmType_OutOfServiceState_TransitionTime,16979,Variable
-SystemOffNormalAlarmType_OutOfServiceState_EffectiveTransitionTime,16980,Variable
-SystemOffNormalAlarmType_OutOfServiceState_TrueState,16981,Variable
-SystemOffNormalAlarmType_OutOfServiceState_FalseState,16982,Variable
-SystemOffNormalAlarmType_SilenceState,16983,Variable
-SystemOffNormalAlarmType_SilenceState_Id,16984,Variable
-SystemOffNormalAlarmType_SilenceState_Name,16985,Variable
-SystemOffNormalAlarmType_SilenceState_Number,16986,Variable
-SystemOffNormalAlarmType_SilenceState_EffectiveDisplayName,16987,Variable
-SystemOffNormalAlarmType_SilenceState_TransitionTime,16988,Variable
-SystemOffNormalAlarmType_SilenceState_EffectiveTransitionTime,16989,Variable
-SystemOffNormalAlarmType_SilenceState_TrueState,16990,Variable
-SystemOffNormalAlarmType_SilenceState_FalseState,16991,Variable
-SystemOffNormalAlarmType_AudibleEnabled,16992,Variable
-SystemOffNormalAlarmType_AudibleSound,16993,Variable
-DataSetFolderType_AddDataSetFolder,16994,Method
-DataSetFolderType_AddDataSetFolder_InputArguments,16995,Variable
-DataSetFolderType_AddDataSetFolder_OutputArguments,16996,Variable
-DataSetFolderType_RemoveDataSetFolder,16997,Method
-SystemOffNormalAlarmType_OnDelay,16998,Variable
-SystemOffNormalAlarmType_OffDelay,16999,Variable
-SystemOffNormalAlarmType_FirstInGroupFlag,17000,Variable
-SystemOffNormalAlarmType_FirstInGroup,17001,Object
-SystemOffNormalAlarmType_AlarmGroup_Placeholder,17002,Object
-SystemOffNormalAlarmType_ReAlarmTime,17003,Variable
-SystemOffNormalAlarmType_ReAlarmRepeatCount,17004,Variable
-SystemOffNormalAlarmType_Silence,17005,Method
-SystemOffNormalAlarmType_Suppress,17006,Method
-DataSetFolderType_RemoveDataSetFolder_InputArguments,17007,Variable
-TripAlarmType_ConditionSubClassId,17008,Variable
-TripAlarmType_ConditionSubClassName,17009,Variable
-TripAlarmType_OutOfServiceState,17010,Variable
-TripAlarmType_OutOfServiceState_Id,17011,Variable
-TripAlarmType_OutOfServiceState_Name,17012,Variable
-TripAlarmType_OutOfServiceState_Number,17013,Variable
-TripAlarmType_OutOfServiceState_EffectiveDisplayName,17014,Variable
-TripAlarmType_OutOfServiceState_TransitionTime,17015,Variable
-TripAlarmType_OutOfServiceState_EffectiveTransitionTime,17016,Variable
-TripAlarmType_OutOfServiceState_TrueState,17017,Variable
-TripAlarmType_OutOfServiceState_FalseState,17018,Variable
-TripAlarmType_SilenceState,17019,Variable
-TripAlarmType_SilenceState_Id,17020,Variable
-TripAlarmType_SilenceState_Name,17021,Variable
-TripAlarmType_SilenceState_Number,17022,Variable
-TripAlarmType_SilenceState_EffectiveDisplayName,17023,Variable
-TripAlarmType_SilenceState_TransitionTime,17024,Variable
-TripAlarmType_SilenceState_EffectiveTransitionTime,17025,Variable
-TripAlarmType_SilenceState_TrueState,17026,Variable
-TripAlarmType_SilenceState_FalseState,17027,Variable
-TripAlarmType_AudibleEnabled,17028,Variable
-TripAlarmType_AudibleSound,17029,Variable
-AddPublishedDataItemsTemplateMethodType,17030,Method
-AddPublishedDataItemsTemplateMethodType_InputArguments,17031,Variable
-AddPublishedDataItemsTemplateMethodType_OutputArguments,17032,Variable
-AddPublishedEventsTemplateMethodType,17033,Method
-TripAlarmType_OnDelay,17034,Variable
-TripAlarmType_OffDelay,17035,Variable
-TripAlarmType_FirstInGroupFlag,17036,Variable
-TripAlarmType_FirstInGroup,17037,Object
-TripAlarmType_AlarmGroup_Placeholder,17038,Object
-TripAlarmType_ReAlarmTime,17039,Variable
-TripAlarmType_ReAlarmRepeatCount,17040,Variable
-TripAlarmType_Silence,17041,Method
-TripAlarmType_Suppress,17042,Method
-AddPublishedEventsTemplateMethodType_InputArguments,17043,Variable
-CertificateExpirationAlarmType_ConditionSubClassId,17044,Variable
-CertificateExpirationAlarmType_ConditionSubClassName,17045,Variable
-CertificateExpirationAlarmType_OutOfServiceState,17046,Variable
-CertificateExpirationAlarmType_OutOfServiceState_Id,17047,Variable
-CertificateExpirationAlarmType_OutOfServiceState_Name,17048,Variable
-CertificateExpirationAlarmType_OutOfServiceState_Number,17049,Variable
-CertificateExpirationAlarmType_OutOfServiceState_EffectiveDisplayName,17050,Variable
-CertificateExpirationAlarmType_OutOfServiceState_TransitionTime,17051,Variable
-CertificateExpirationAlarmType_OutOfServiceState_EffectiveTransitionTime,17052,Variable
-CertificateExpirationAlarmType_OutOfServiceState_TrueState,17053,Variable
-CertificateExpirationAlarmType_OutOfServiceState_FalseState,17054,Variable
-CertificateExpirationAlarmType_SilenceState,17055,Variable
-CertificateExpirationAlarmType_SilenceState_Id,17056,Variable
-CertificateExpirationAlarmType_SilenceState_Name,17057,Variable
-CertificateExpirationAlarmType_SilenceState_Number,17058,Variable
-CertificateExpirationAlarmType_SilenceState_EffectiveDisplayName,17059,Variable
-CertificateExpirationAlarmType_SilenceState_TransitionTime,17060,Variable
-CertificateExpirationAlarmType_SilenceState_EffectiveTransitionTime,17061,Variable
-CertificateExpirationAlarmType_SilenceState_TrueState,17062,Variable
-CertificateExpirationAlarmType_SilenceState_FalseState,17063,Variable
-CertificateExpirationAlarmType_AudibleEnabled,17064,Variable
-CertificateExpirationAlarmType_AudibleSound,17065,Variable
-AddPublishedEventsTemplateMethodType_OutputArguments,17066,Variable
-AddDataSetFolderMethodType,17067,Method
-AddDataSetFolderMethodType_InputArguments,17068,Variable
-AddDataSetFolderMethodType_OutputArguments,17069,Variable
-CertificateExpirationAlarmType_OnDelay,17070,Variable
-CertificateExpirationAlarmType_OffDelay,17071,Variable
-CertificateExpirationAlarmType_FirstInGroupFlag,17072,Variable
-CertificateExpirationAlarmType_FirstInGroup,17073,Object
-CertificateExpirationAlarmType_AlarmGroup_Placeholder,17074,Object
-CertificateExpirationAlarmType_ReAlarmTime,17075,Variable
-CertificateExpirationAlarmType_ReAlarmRepeatCount,17076,Variable
-CertificateExpirationAlarmType_Silence,17077,Method
-CertificateExpirationAlarmType_Suppress,17078,Method
-RemoveDataSetFolderMethodType,17079,Method
-DiscrepancyAlarmType,17080,ObjectType
-DiscrepancyAlarmType_EventId,17081,Variable
-DiscrepancyAlarmType_EventType,17082,Variable
-DiscrepancyAlarmType_SourceNode,17083,Variable
-DiscrepancyAlarmType_SourceName,17084,Variable
-DiscrepancyAlarmType_Time,17085,Variable
-DiscrepancyAlarmType_ReceiveTime,17086,Variable
-DiscrepancyAlarmType_LocalTime,17087,Variable
-DiscrepancyAlarmType_Message,17088,Variable
-DiscrepancyAlarmType_Severity,17089,Variable
-DiscrepancyAlarmType_ConditionClassId,17090,Variable
-DiscrepancyAlarmType_ConditionClassName,17091,Variable
-DiscrepancyAlarmType_ConditionSubClassId,17092,Variable
-DiscrepancyAlarmType_ConditionSubClassName,17093,Variable
-DiscrepancyAlarmType_ConditionName,17094,Variable
-DiscrepancyAlarmType_BranchId,17095,Variable
-DiscrepancyAlarmType_Retain,17096,Variable
-DiscrepancyAlarmType_EnabledState,17097,Variable
-DiscrepancyAlarmType_EnabledState_Id,17098,Variable
-DiscrepancyAlarmType_EnabledState_Name,17099,Variable
-DiscrepancyAlarmType_EnabledState_Number,17100,Variable
-DiscrepancyAlarmType_EnabledState_EffectiveDisplayName,17101,Variable
-DiscrepancyAlarmType_EnabledState_TransitionTime,17102,Variable
-DiscrepancyAlarmType_EnabledState_EffectiveTransitionTime,17103,Variable
-DiscrepancyAlarmType_EnabledState_TrueState,17104,Variable
-DiscrepancyAlarmType_EnabledState_FalseState,17105,Variable
-DiscrepancyAlarmType_Quality,17106,Variable
-DiscrepancyAlarmType_Quality_SourceTimestamp,17107,Variable
-DiscrepancyAlarmType_LastSeverity,17108,Variable
-DiscrepancyAlarmType_LastSeverity_SourceTimestamp,17109,Variable
-DiscrepancyAlarmType_Comment,17110,Variable
-DiscrepancyAlarmType_Comment_SourceTimestamp,17111,Variable
-DiscrepancyAlarmType_ClientUserId,17112,Variable
-DiscrepancyAlarmType_Disable,17113,Method
-DiscrepancyAlarmType_Enable,17114,Method
-DiscrepancyAlarmType_AddComment,17115,Method
-DiscrepancyAlarmType_AddComment_InputArguments,17116,Variable
-DiscrepancyAlarmType_ConditionRefresh,17117,Method
-DiscrepancyAlarmType_ConditionRefresh_InputArguments,17118,Variable
-DiscrepancyAlarmType_ConditionRefresh2,17119,Method
-DiscrepancyAlarmType_ConditionRefresh2_InputArguments,17120,Variable
-DiscrepancyAlarmType_AckedState,17121,Variable
-DiscrepancyAlarmType_AckedState_Id,17122,Variable
-DiscrepancyAlarmType_AckedState_Name,17123,Variable
-DiscrepancyAlarmType_AckedState_Number,17124,Variable
-DiscrepancyAlarmType_AckedState_EffectiveDisplayName,17125,Variable
-DiscrepancyAlarmType_AckedState_TransitionTime,17126,Variable
-DiscrepancyAlarmType_AckedState_EffectiveTransitionTime,17127,Variable
-DiscrepancyAlarmType_AckedState_TrueState,17128,Variable
-DiscrepancyAlarmType_AckedState_FalseState,17129,Variable
-DiscrepancyAlarmType_ConfirmedState,17130,Variable
-DiscrepancyAlarmType_ConfirmedState_Id,17131,Variable
-DiscrepancyAlarmType_ConfirmedState_Name,17132,Variable
-DiscrepancyAlarmType_ConfirmedState_Number,17133,Variable
-DiscrepancyAlarmType_ConfirmedState_EffectiveDisplayName,17134,Variable
-DiscrepancyAlarmType_ConfirmedState_TransitionTime,17135,Variable
-DiscrepancyAlarmType_ConfirmedState_EffectiveTransitionTime,17136,Variable
-DiscrepancyAlarmType_ConfirmedState_TrueState,17137,Variable
-DiscrepancyAlarmType_ConfirmedState_FalseState,17138,Variable
-DiscrepancyAlarmType_Acknowledge,17139,Method
-DiscrepancyAlarmType_Acknowledge_InputArguments,17140,Variable
-DiscrepancyAlarmType_Confirm,17141,Method
-DiscrepancyAlarmType_Confirm_InputArguments,17142,Variable
-DiscrepancyAlarmType_ActiveState,17143,Variable
-DiscrepancyAlarmType_ActiveState_Id,17144,Variable
-DiscrepancyAlarmType_ActiveState_Name,17145,Variable
-DiscrepancyAlarmType_ActiveState_Number,17146,Variable
-DiscrepancyAlarmType_ActiveState_EffectiveDisplayName,17147,Variable
-DiscrepancyAlarmType_ActiveState_TransitionTime,17148,Variable
-DiscrepancyAlarmType_ActiveState_EffectiveTransitionTime,17149,Variable
-DiscrepancyAlarmType_ActiveState_TrueState,17150,Variable
-DiscrepancyAlarmType_ActiveState_FalseState,17151,Variable
-DiscrepancyAlarmType_InputNode,17152,Variable
-DiscrepancyAlarmType_SuppressedState,17153,Variable
-DiscrepancyAlarmType_SuppressedState_Id,17154,Variable
-DiscrepancyAlarmType_SuppressedState_Name,17155,Variable
-DiscrepancyAlarmType_SuppressedState_Number,17156,Variable
-DiscrepancyAlarmType_SuppressedState_EffectiveDisplayName,17157,Variable
-DiscrepancyAlarmType_SuppressedState_TransitionTime,17158,Variable
-DiscrepancyAlarmType_SuppressedState_EffectiveTransitionTime,17159,Variable
-DiscrepancyAlarmType_SuppressedState_TrueState,17160,Variable
-DiscrepancyAlarmType_SuppressedState_FalseState,17161,Variable
-DiscrepancyAlarmType_OutOfServiceState,17162,Variable
-DiscrepancyAlarmType_OutOfServiceState_Id,17163,Variable
-DiscrepancyAlarmType_OutOfServiceState_Name,17164,Variable
-DiscrepancyAlarmType_OutOfServiceState_Number,17165,Variable
-DiscrepancyAlarmType_OutOfServiceState_EffectiveDisplayName,17166,Variable
-DiscrepancyAlarmType_OutOfServiceState_TransitionTime,17167,Variable
-DiscrepancyAlarmType_OutOfServiceState_EffectiveTransitionTime,17168,Variable
-DiscrepancyAlarmType_OutOfServiceState_TrueState,17169,Variable
-DiscrepancyAlarmType_OutOfServiceState_FalseState,17170,Variable
-DiscrepancyAlarmType_SilenceState,17171,Variable
-DiscrepancyAlarmType_SilenceState_Id,17172,Variable
-DiscrepancyAlarmType_SilenceState_Name,17173,Variable
-DiscrepancyAlarmType_SilenceState_Number,17174,Variable
-DiscrepancyAlarmType_SilenceState_EffectiveDisplayName,17175,Variable
-DiscrepancyAlarmType_SilenceState_TransitionTime,17176,Variable
-DiscrepancyAlarmType_SilenceState_EffectiveTransitionTime,17177,Variable
-DiscrepancyAlarmType_SilenceState_TrueState,17178,Variable
-DiscrepancyAlarmType_SilenceState_FalseState,17179,Variable
-DiscrepancyAlarmType_ShelvingState,17180,Object
-DiscrepancyAlarmType_ShelvingState_CurrentState,17181,Variable
-DiscrepancyAlarmType_ShelvingState_CurrentState_Id,17182,Variable
-DiscrepancyAlarmType_ShelvingState_CurrentState_Name,17183,Variable
-DiscrepancyAlarmType_ShelvingState_CurrentState_Number,17184,Variable
-DiscrepancyAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,17185,Variable
-DiscrepancyAlarmType_ShelvingState_LastTransition,17186,Variable
-DiscrepancyAlarmType_ShelvingState_LastTransition_Id,17187,Variable
-DiscrepancyAlarmType_ShelvingState_LastTransition_Name,17188,Variable
-DiscrepancyAlarmType_ShelvingState_LastTransition_Number,17189,Variable
-DiscrepancyAlarmType_ShelvingState_LastTransition_TransitionTime,17190,Variable
-DiscrepancyAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,17191,Variable
-DiscrepancyAlarmType_ShelvingState_UnshelveTime,17192,Variable
-DiscrepancyAlarmType_ShelvingState_Unshelve,17193,Method
-DiscrepancyAlarmType_ShelvingState_OneShotShelve,17194,Method
-DiscrepancyAlarmType_ShelvingState_TimedShelve,17195,Method
-DiscrepancyAlarmType_ShelvingState_TimedShelve_InputArguments,17196,Variable
-DiscrepancyAlarmType_SuppressedOrShelved,17197,Variable
-DiscrepancyAlarmType_MaxTimeShelved,17198,Variable
-DiscrepancyAlarmType_AudibleEnabled,17199,Variable
-DiscrepancyAlarmType_AudibleSound,17200,Variable
-RemoveDataSetFolderMethodType_InputArguments,17201,Variable
-PubSubConnectionType_Address_NetworkInterface,17202,Variable
-PubSubConnectionType_TransportSettings,17203,Object
-PubSubConnectionType_WriterGroupName_Placeholder_MaxNetworkMessageSize,17204,Variable
-DiscrepancyAlarmType_OnDelay,17205,Variable
-DiscrepancyAlarmType_OffDelay,17206,Variable
-DiscrepancyAlarmType_FirstInGroupFlag,17207,Variable
-DiscrepancyAlarmType_FirstInGroup,17208,Object
-DiscrepancyAlarmType_AlarmGroup_Placeholder,17209,Object
-DiscrepancyAlarmType_ReAlarmTime,17210,Variable
-DiscrepancyAlarmType_ReAlarmRepeatCount,17211,Variable
-DiscrepancyAlarmType_Silence,17212,Method
-DiscrepancyAlarmType_Suppress,17213,Method
-PubSubConnectionType_WriterGroupName_Placeholder_WriterGroupId,17214,Variable
-DiscrepancyAlarmType_TargetValueNode,17215,Variable
-DiscrepancyAlarmType_ExpectedTime,17216,Variable
-DiscrepancyAlarmType_Tolerance,17217,Variable
-SafetyConditionClassType,17218,ObjectType
-HighlyManagedAlarmConditionClassType,17219,ObjectType
-TrainingConditionClassType,17220,ObjectType
-TestingConditionSubClassType,17221,ObjectType
-AuditConditionCommentEventType_ConditionEventId,17222,Variable
-AuditConditionAcknowledgeEventType_ConditionEventId,17223,Variable
-AuditConditionConfirmEventType_ConditionEventId,17224,Variable
-AuditConditionSuppressionEventType,17225,ObjectType
-AuditConditionSuppressionEventType_EventId,17226,Variable
-AuditConditionSuppressionEventType_EventType,17227,Variable
-AuditConditionSuppressionEventType_SourceNode,17228,Variable
-AuditConditionSuppressionEventType_SourceName,17229,Variable
-AuditConditionSuppressionEventType_Time,17230,Variable
-AuditConditionSuppressionEventType_ReceiveTime,17231,Variable
-AuditConditionSuppressionEventType_LocalTime,17232,Variable
-AuditConditionSuppressionEventType_Message,17233,Variable
-AuditConditionSuppressionEventType_Severity,17234,Variable
-AuditConditionSuppressionEventType_ActionTimeStamp,17235,Variable
-AuditConditionSuppressionEventType_Status,17236,Variable
-AuditConditionSuppressionEventType_ServerId,17237,Variable
-AuditConditionSuppressionEventType_ClientAuditEntryId,17238,Variable
-AuditConditionSuppressionEventType_ClientUserId,17239,Variable
-AuditConditionSuppressionEventType_MethodId,17240,Variable
-AuditConditionSuppressionEventType_InputArguments,17241,Variable
-AuditConditionSilenceEventType,17242,ObjectType
-AuditConditionSilenceEventType_EventId,17243,Variable
-AuditConditionSilenceEventType_EventType,17244,Variable
-AuditConditionSilenceEventType_SourceNode,17245,Variable
-AuditConditionSilenceEventType_SourceName,17246,Variable
-AuditConditionSilenceEventType_Time,17247,Variable
-AuditConditionSilenceEventType_ReceiveTime,17248,Variable
-AuditConditionSilenceEventType_LocalTime,17249,Variable
-AuditConditionSilenceEventType_Message,17250,Variable
-AuditConditionSilenceEventType_Severity,17251,Variable
-AuditConditionSilenceEventType_ActionTimeStamp,17252,Variable
-AuditConditionSilenceEventType_Status,17253,Variable
-AuditConditionSilenceEventType_ServerId,17254,Variable
-AuditConditionSilenceEventType_ClientAuditEntryId,17255,Variable
-AuditConditionSilenceEventType_ClientUserId,17256,Variable
-AuditConditionSilenceEventType_MethodId,17257,Variable
-AuditConditionSilenceEventType_InputArguments,17258,Variable
-AuditConditionOutOfServiceEventType,17259,ObjectType
-AuditConditionOutOfServiceEventType_EventId,17260,Variable
-AuditConditionOutOfServiceEventType_EventType,17261,Variable
-AuditConditionOutOfServiceEventType_SourceNode,17262,Variable
-AuditConditionOutOfServiceEventType_SourceName,17263,Variable
-AuditConditionOutOfServiceEventType_Time,17264,Variable
-AuditConditionOutOfServiceEventType_ReceiveTime,17265,Variable
-AuditConditionOutOfServiceEventType_LocalTime,17266,Variable
-AuditConditionOutOfServiceEventType_Message,17267,Variable
-AuditConditionOutOfServiceEventType_Severity,17268,Variable
-AuditConditionOutOfServiceEventType_ActionTimeStamp,17269,Variable
-AuditConditionOutOfServiceEventType_Status,17270,Variable
-AuditConditionOutOfServiceEventType_ServerId,17271,Variable
-AuditConditionOutOfServiceEventType_ClientAuditEntryId,17272,Variable
-AuditConditionOutOfServiceEventType_ClientUserId,17273,Variable
-AuditConditionOutOfServiceEventType_MethodId,17274,Variable
-AuditConditionOutOfServiceEventType_InputArguments,17275,Variable
-HasEffectDisable,17276,ReferenceType
-AlarmRateVariableType,17277,VariableType
-AlarmRateVariableType_Rate,17278,Variable
-AlarmMetricsType,17279,ObjectType
-AlarmMetricsType_AlarmCount,17280,Variable
-AlarmMetricsType_MaximumActiveState,17281,Variable
-AlarmMetricsType_MaximumUnAck,17282,Variable
-AlarmMetricsType_MaximumReAlarmCount,17283,Variable
-AlarmMetricsType_CurrentAlarmRate,17284,Variable
-AlarmMetricsType_CurrentAlarmRate_Rate,17285,Variable
-AlarmMetricsType_MaximumAlarmRate,17286,Variable
-AlarmMetricsType_MaximumAlarmRate_Rate,17287,Variable
-AlarmMetricsType_AverageAlarmRate,17288,Variable
-AlarmMetricsType_AverageAlarmRate_Rate,17289,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_TransportSettings,17290,Object
-PubSubConnectionType_WriterGroupName_Placeholder_MessageSettings,17291,Object
-PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri,17292,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_AddDataSetWriter,17293,Method
-PubSubConnectionType_WriterGroupName_Placeholder_AddDataSetWriter_InputArguments,17294,Variable
-PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri_RestrictToList,17295,Variable
-PublishSubscribeType_SetSecurityKeys,17296,Method
-PublishSubscribeType_SetSecurityKeys_InputArguments,17297,Variable
-SetSecurityKeysMethodType,17298,Method
-SetSecurityKeysMethodType_InputArguments,17299,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,17300,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_AddDataSetWriter_OutputArguments,17301,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_MaxNetworkMessageSize,17302,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,17303,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent,17304,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,17305,Variable
-PubSubConnectionType_TransportProfileUri,17306,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_TransportSettings,17307,Object
-PubSubConnectionType_ReaderGroupName_Placeholder_MessageSettings,17308,Object
-PubSubConnectionType_TransportProfileUri_RestrictToList,17309,Variable
-PubSubConnectionType_WriterGroupName_Placeholder,17310,Object
-PubSubConnectionType_WriterGroupName_Placeholder_SecurityMode,17311,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_SecurityGroupId,17312,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_SecurityKeyServices,17313,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Status,17314,Object
-PubSubConnectionType_WriterGroupName_Placeholder_Status_State,17315,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Status_Enable,17316,Method
-PubSubConnectionType_WriterGroupName_Placeholder_Status_Disable,17317,Method
-PubSubConnectionType_WriterGroupName_Placeholder_PublishingInterval,17318,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_KeepAliveTime,17319,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,17320,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Priority,17321,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_LocaleIds,17322,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_RemoveDataSetWriter,17323,Method
-PubSubConnectionType_WriterGroupName_Placeholder_RemoveDataSetWriter_InputArguments,17324,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder,17325,Object
-PubSubConnectionType_ReaderGroupName_Placeholder_SecurityMode,17326,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_SecurityGroupId,17327,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_SecurityKeyServices,17328,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Status,17329,Object
-PubSubConnectionType_ReaderGroupName_Placeholder_Status_State,17330,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Status_Enable,17331,Method
-PubSubConnectionType_ReaderGroupName_Placeholder_Status_Disable,17332,Method
-PubSubConnectionType_ReaderGroupName_Placeholder_RemoveDataSetReader,17333,Method
-PubSubConnectionType_ReaderGroupName_Placeholder_RemoveDataSetReader_InputArguments,17334,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,17335,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,17336,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError,17337,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,17338,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,17339,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,17340,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,17341,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent,17342,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,17343,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,17344,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,17345,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,17346,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,17347,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,17348,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,17349,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,17350,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,17351,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues,17352,Object
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress,17353,Variable
-PublishSubscribe_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel,17354,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_AddDataSetReader,17355,Method
-PublishSubscribe_ConnectionName_Placeholder_AddWriterGroup,17356,Method
-PublishSubscribe_ConnectionName_Placeholder_AddWriterGroup_InputArguments,17357,Variable
-PublishSubscribe_ConnectionName_Placeholder_AddWriterGroup_OutputArguments,17358,Variable
-PublishSubscribe_ConnectionName_Placeholder_AddReaderGroup,17359,Method
-PublishSubscribe_ConnectionName_Placeholder_AddReaderGroup_InputArguments,17360,Variable
-PublishSubscribe_ConnectionName_Placeholder_AddReaderGroup_OutputArguments,17361,Variable
-PublishSubscribe_ConnectionName_Placeholder_RemoveGroup,17362,Method
-PublishSubscribe_ConnectionName_Placeholder_RemoveGroup_InputArguments,17363,Variable
-PublishSubscribe_SetSecurityKeys,17364,Method
-PublishSubscribe_SetSecurityKeys_InputArguments,17365,Variable
-PublishSubscribe_AddConnection,17366,Method
-PublishSubscribe_AddConnection_InputArguments,17367,Variable
-PublishSubscribe_AddConnection_OutputArguments,17368,Variable
-PublishSubscribe_RemoveConnection,17369,Method
-PublishSubscribe_RemoveConnection_InputArguments,17370,Variable
-PublishSubscribe_PublishedDataSets,17371,Object
-PublishSubscribe_PublishedDataSets_AddPublishedDataItems,17372,Method
-PublishSubscribe_PublishedDataSets_AddPublishedDataItems_InputArguments,17373,Variable
-PublishSubscribe_PublishedDataSets_AddPublishedDataItems_OutputArguments,17374,Variable
-PublishSubscribe_PublishedDataSets_AddPublishedEvents,17375,Method
-PublishSubscribe_PublishedDataSets_AddPublishedEvents_InputArguments,17376,Variable
-PublishSubscribe_PublishedDataSets_AddPublishedEvents_OutputArguments,17377,Variable
-PublishSubscribe_PublishedDataSets_AddPublishedDataItemsTemplate,17378,Method
-PublishSubscribe_PublishedDataSets_AddPublishedDataItemsTemplate_InputArguments,17379,Variable
-PublishSubscribe_PublishedDataSets_AddPublishedDataItemsTemplate_OutputArguments,17380,Variable
-PublishSubscribe_PublishedDataSets_AddPublishedEventsTemplate,17381,Method
-PublishSubscribe_PublishedDataSets_AddPublishedEventsTemplate_InputArguments,17382,Variable
-PublishSubscribe_PublishedDataSets_AddPublishedEventsTemplate_OutputArguments,17383,Variable
-PublishSubscribe_PublishedDataSets_RemovePublishedDataSet,17384,Method
-PublishSubscribe_PublishedDataSets_RemovePublishedDataSet_InputArguments,17385,Variable
-DataSetReaderType_CreateTargetVariables,17386,Method
-DataSetReaderType_CreateTargetVariables_InputArguments,17387,Variable
-DataSetReaderType_CreateTargetVariables_OutputArguments,17388,Variable
-DataSetReaderType_CreateDataSetMirror,17389,Method
-DataSetReaderType_CreateDataSetMirror_InputArguments,17390,Variable
-DataSetReaderType_CreateDataSetMirror_OutputArguments,17391,Variable
-DataSetReaderTypeCreateTargetVariablesMethodType,17392,Method
-DataSetReaderTypeCreateTargetVariablesMethodType_InputArguments,17393,Variable
-DataSetReaderTypeCreateTargetVariablesMethodType_OutputArguments,17394,Variable
-DataSetReaderTypeCreateDataSetMirrorMethodType,17395,Method
-DataSetReaderTypeCreateDataSetMirrorMethodType_InputArguments,17396,Variable
-DataSetReaderTypeCreateDataSetMirrorMethodType_OutputArguments,17397,Variable
-PublishSubscribe_PublishedDataSets_AddDataSetFolder,17398,Method
-PubSubConnectionType_ReaderGroupName_Placeholder_AddDataSetReader_InputArguments,17399,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_AddDataSetReader_OutputArguments,17400,Variable
-PublishSubscribe_PublishedDataSets_AddDataSetFolder_InputArguments,17401,Variable
-PublishSubscribe_PublishedDataSets_AddDataSetFolder_OutputArguments,17402,Variable
-PublishSubscribe_PublishedDataSets_RemoveDataSetFolder,17403,Method
-PublishSubscribe_PublishedDataSets_RemoveDataSetFolder_InputArguments,17404,Variable
-PublishSubscribe_Status,17405,Object
-PublishSubscribe_Status_State,17406,Variable
-PublishSubscribe_Status_Enable,17407,Method
-PublishSubscribe_Status_Disable,17408,Method
-PublishSubscribe_Diagnostics,17409,Object
-PublishSubscribe_Diagnostics_DiagnosticsLevel,17410,Variable
-PublishSubscribe_Diagnostics_TotalInformation,17411,Variable
-PublishSubscribe_Diagnostics_TotalInformation_Active,17412,Variable
-PublishSubscribe_Diagnostics_TotalInformation_Classification,17413,Variable
-PublishSubscribe_Diagnostics_TotalInformation_DiagnosticsLevel,17414,Variable
-PublishSubscribe_Diagnostics_TotalInformation_TimeFirstChange,17415,Variable
-PublishSubscribe_Diagnostics_TotalError,17416,Variable
-PublishSubscribe_Diagnostics_TotalError_Active,17417,Variable
-PublishSubscribe_Diagnostics_TotalError_Classification,17418,Variable
-PublishSubscribe_Diagnostics_TotalError_DiagnosticsLevel,17419,Variable
-PublishSubscribe_Diagnostics_TotalError_TimeFirstChange,17420,Variable
-PublishSubscribe_Diagnostics_Reset,17421,Method
-PublishSubscribe_Diagnostics_SubError,17422,Variable
-PublishSubscribe_Diagnostics_Counters,17423,Object
-PublishSubscribe_Diagnostics_Counters_StateError,17424,Variable
-PublishSubscribe_Diagnostics_Counters_StateError_Active,17425,Variable
-PublishSubscribe_Diagnostics_Counters_StateError_Classification,17426,Variable
-PubSubConnectionType_AddWriterGroup,17427,Method
-PubSubConnectionType_AddWriterGroup_InputArguments,17428,Variable
-PublishSubscribe_Diagnostics_Counters_StateError_DiagnosticsLevel,17429,Variable
-PublishSubscribe_Diagnostics_Counters_StateError_TimeFirstChange,17430,Variable
-PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod,17431,Variable
-PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_Active,17432,Variable
-PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_Classification,17433,Variable
-PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,17434,Variable
-PublishSubscribe_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,17435,Variable
-PublishSubscribe_Diagnostics_Counters_StateOperationalByParent,17436,Variable
-PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_Active,17437,Variable
-PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_Classification,17438,Variable
-PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,17439,Variable
-PublishSubscribe_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,17440,Variable
-PublishSubscribe_Diagnostics_Counters_StateOperationalFromError,17441,Variable
-PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_Active,17442,Variable
-PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_Classification,17443,Variable
-PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,17444,Variable
-PublishSubscribe_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,17445,Variable
-PublishSubscribe_Diagnostics_Counters_StatePausedByParent,17446,Variable
-PublishSubscribe_Diagnostics_Counters_StatePausedByParent_Active,17447,Variable
-PublishSubscribe_Diagnostics_Counters_StatePausedByParent_Classification,17448,Variable
-PublishSubscribe_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,17449,Variable
-PublishSubscribe_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,17450,Variable
-PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod,17451,Variable
-PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_Active,17452,Variable
-PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_Classification,17453,Variable
-PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,17454,Variable
-PublishSubscribe_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,17455,Variable
-PubSubConnectionType_AddWriterGroup_OutputArguments,17456,Variable
-PublishSubscribe_Diagnostics_LiveValues,17457,Object
-PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetWriters,17458,Variable
-PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel,17459,Variable
-PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetReaders,17460,Variable
-PublishSubscribe_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel,17461,Variable
-PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetWriters,17462,Variable
-PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel,17463,Variable
-PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetReaders,17464,Variable
-PubSubConnectionType_AddReaderGroup,17465,Method
-PublishSubscribe_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel,17466,Variable
-DatagramConnectionTransportDataType,17467,DataType
-DatagramConnectionTransportDataType_Encoding_DefaultBinary,17468,Object
-OpcUa_BinarySchema_DatagramConnectionTransportDataType,17469,Variable
-OpcUa_BinarySchema_DatagramConnectionTransportDataType_DataTypeVersion,17470,Variable
-OpcUa_BinarySchema_DatagramConnectionTransportDataType_DictionaryFragment,17471,Variable
-DatagramConnectionTransportDataType_Encoding_DefaultXml,17472,Object
-OpcUa_XmlSchema_DatagramConnectionTransportDataType,17473,Variable
-OpcUa_XmlSchema_DatagramConnectionTransportDataType_DataTypeVersion,17474,Variable
-OpcUa_XmlSchema_DatagramConnectionTransportDataType_DictionaryFragment,17475,Variable
-DatagramConnectionTransportDataType_Encoding_DefaultJson,17476,Object
-UadpDataSetReaderMessageType_DataSetOffset,17477,Variable
-PublishSubscribeType_ConnectionName_Placeholder_ConnectionProperties,17478,Variable
-PublishSubscribeType_SupportedTransportProfiles,17479,Variable
-PublishSubscribe_ConnectionName_Placeholder_ConnectionProperties,17480,Variable
-PublishSubscribe_SupportedTransportProfiles,17481,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_DataSetWriterProperties,17482,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_DataSetWriterProperties,17483,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_DataSetWriterProperties,17484,Variable
-PubSubConnectionType_ConnectionProperties,17485,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_GroupProperties,17486,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_GroupProperties,17487,Variable
-PubSubGroupType_GroupProperties,17488,Variable
-WriterGroupType_GroupProperties,17489,Variable
-WriterGroupType_DataSetWriterName_Placeholder_DataSetWriterProperties,17490,Variable
-ReaderGroupType_GroupProperties,17491,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_DataSetReaderProperties,17492,Variable
-DataSetWriterType_DataSetWriterProperties,17493,Variable
-DataSetReaderType_DataSetReaderProperties,17494,Variable
-CreateCredentialMethodType_OutputArguments,17495,Variable
-KeyCredentialConfigurationFolderType,17496,ObjectType
-AnalogUnitType,17497,VariableType
-AnalogUnitType_Definition,17498,Variable
-AnalogUnitType_ValuePrecision,17499,Variable
-AnalogUnitType_InstrumentRange,17500,Variable
-AnalogUnitType_EURange,17501,Variable
-AnalogUnitType_EngineeringUnits,17502,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface_Selections,17503,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface_SelectionDescriptions,17504,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Address_NetworkInterface_RestrictToList,17505,Variable
-PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface_Selections,17506,Variable
-PubSubConnectionType_AddReaderGroup_InputArguments,17507,Variable
-PubSubConnectionType_AddReaderGroup_OutputArguments,17508,Variable
-PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface_SelectionDescriptions,17509,Variable
-PublishSubscribe_ConnectionName_Placeholder_Address_NetworkInterface_RestrictToList,17510,Variable
-KeyCredentialConfigurationFolderType_ServiceName_Placeholder,17511,Object
-KeyCredentialConfigurationFolderType_ServiceName_Placeholder_ResourceUri,17512,Variable
-KeyCredentialConfigurationFolderType_ServiceName_Placeholder_ProfileUri,17513,Variable
-KeyCredentialConfigurationFolderType_ServiceName_Placeholder_EndpointUrls,17514,Variable
-KeyCredentialConfigurationFolderType_ServiceName_Placeholder_ServiceStatus,17515,Variable
-KeyCredentialConfigurationFolderType_ServiceName_Placeholder_GetEncryptingKey,17516,Method
-KeyCredentialConfigurationFolderType_ServiceName_Placeholder_GetEncryptingKey_InputArguments,17517,Variable
-KeyCredentialConfigurationFolderType_ServiceName_Placeholder_GetEncryptingKey_OutputArguments,17518,Variable
-KeyCredentialConfigurationFolderType_ServiceName_Placeholder_UpdateCredential,17519,Method
-KeyCredentialConfigurationFolderType_ServiceName_Placeholder_UpdateCredential_InputArguments,17520,Variable
-KeyCredentialConfigurationFolderType_ServiceName_Placeholder_DeleteCredential,17521,Method
-KeyCredentialConfigurationFolderType_CreateCredential,17522,Method
-KeyCredentialConfigurationFolderType_CreateCredential_InputArguments,17523,Variable
-KeyCredentialConfigurationFolderType_CreateCredential_OutputArguments,17524,Variable
-KeyCredentialConfiguration_ServiceName_Placeholder_GetEncryptingKey,17525,Method
-KeyCredentialConfiguration_ServiceName_Placeholder_GetEncryptingKey_InputArguments,17526,Variable
-KeyCredentialConfiguration_ServiceName_Placeholder_GetEncryptingKey_OutputArguments,17527,Variable
-KeyCredentialConfiguration_CreateCredential,17528,Method
-KeyCredentialConfiguration_CreateCredential_InputArguments,17529,Variable
-KeyCredentialConfiguration_CreateCredential_OutputArguments,17530,Variable
-GetEncryptingKeyMethodType,17531,Method
-GetEncryptingKeyMethodType_InputArguments,17532,Variable
-GetEncryptingKeyMethodType_OutputArguments,17533,Variable
-KeyCredentialConfigurationType_GetEncryptingKey,17534,Method
-KeyCredentialConfigurationType_GetEncryptingKey_InputArguments,17535,Variable
-KeyCredentialConfigurationType_GetEncryptingKey_OutputArguments,17536,Variable
-AdditionalParametersType_Encoding_DefaultBinary,17537,Object
-OpcUa_BinarySchema_AdditionalParametersType,17538,Variable
-OpcUa_BinarySchema_AdditionalParametersType_DataTypeVersion,17539,Variable
-OpcUa_BinarySchema_AdditionalParametersType_DictionaryFragment,17540,Variable
-AdditionalParametersType_Encoding_DefaultXml,17541,Object
-OpcUa_XmlSchema_AdditionalParametersType,17542,Variable
-OpcUa_XmlSchema_AdditionalParametersType_DataTypeVersion,17543,Variable
-OpcUa_XmlSchema_AdditionalParametersType_DictionaryFragment,17544,Variable
-RsaEncryptedSecret,17545,DataType
-EccEncryptedSecret,17546,DataType
-AdditionalParametersType_Encoding_DefaultJson,17547,Object
-EphemeralKeyType,17548,DataType
-EphemeralKeyType_Encoding_DefaultBinary,17549,Object
-OpcUa_BinarySchema_EphemeralKeyType,17550,Variable
-OpcUa_BinarySchema_EphemeralKeyType_DataTypeVersion,17551,Variable
-OpcUa_BinarySchema_EphemeralKeyType_DictionaryFragment,17552,Variable
-EphemeralKeyType_Encoding_DefaultXml,17553,Object
-OpcUa_XmlSchema_EphemeralKeyType,17554,Variable
-OpcUa_XmlSchema_EphemeralKeyType_DataTypeVersion,17555,Variable
-OpcUa_XmlSchema_EphemeralKeyType_DictionaryFragment,17556,Variable
-EphemeralKeyType_Encoding_DefaultJson,17557,Object
-PubSubConnectionType_WriterGroupName_Placeholder_HeaderLayoutUri,17558,Variable
-WriterGroupType_HeaderLayoutUri,17559,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_KeyFrameCount,17560,Variable
-PubSubConnectionTypeAddWriterGroupMethodType,17561,Method
-ReaderGroupType_DataSetReaderName_Placeholder_HeaderLayoutUri,17562,Variable
-DataSetReaderType_KeyFrameCount,17563,Variable
-DataSetReaderType_HeaderLayoutUri,17564,Variable
-BaseAnalogType_Definition,17565,Variable
-BaseAnalogType_ValuePrecision,17566,Variable
-BaseAnalogType_InstrumentRange,17567,Variable
-BaseAnalogType_EURange,17568,Variable
-BaseAnalogType_EngineeringUnits,17569,Variable
-AnalogUnitRangeType,17570,VariableType
-AnalogUnitRangeType_Definition,17571,Variable
-AnalogUnitRangeType_ValuePrecision,17572,Variable
-AnalogUnitRangeType_InstrumentRange,17573,Variable
-AnalogUnitRangeType_EURange,17574,Variable
-AnalogUnitRangeType_EngineeringUnits,17575,Variable
-PubSubConnectionType_Address_NetworkInterface_Selections,17576,Variable
-PubSubConnectionType_Address_NetworkInterface_SelectionDescriptions,17577,Variable
-PubSubConnectionType_Address_NetworkInterface_RestrictToList,17578,Variable
-DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface_Selections,17579,Variable
-DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface_SelectionDescriptions,17580,Variable
-DatagramConnectionTransportType_DiscoveryAddress_NetworkInterface_RestrictToList,17581,Variable
-NetworkAddressType_NetworkInterface_Selections,17582,Variable
-NetworkAddressType_NetworkInterface_SelectionDescriptions,17583,Variable
-NetworkAddressType_NetworkInterface_RestrictToList,17584,Variable
-NetworkAddressUrlType_NetworkInterface_Selections,17585,Variable
-NetworkAddressUrlType_NetworkInterface_SelectionDescriptions,17586,Variable
-NetworkAddressUrlType_NetworkInterface_RestrictToList,17587,Variable
-Index,17588,DataType
-DictionaryEntryType,17589,ObjectType
-DictionaryEntryType_DictionaryEntryName_Placeholder,17590,Object
-DictionaryFolderType,17591,ObjectType
-DictionaryFolderType_DictionaryFolderName_Placeholder,17592,Object
-DictionaryFolderType_DictionaryEntryName_Placeholder,17593,Object
-Dictionaries,17594,Object
-Dictionaries_DictionaryFolderName_Placeholder,17595,Object
-Dictionaries_DictionaryEntryName_Placeholder,17596,Object
-HasDictionaryEntry,17597,ReferenceType
-IrdiDictionaryEntryType,17598,ObjectType
-IrdiDictionaryEntryType_DictionaryEntryName_Placeholder,17599,Object
-UriDictionaryEntryType,17600,ObjectType
-UriDictionaryEntryType_DictionaryEntryName_Placeholder,17601,Object
-BaseInterfaceType,17602,ObjectType
-HasInterface,17603,ReferenceType
-HasAddIn,17604,ReferenceType
-DefaultInstanceBrowseName,17605,Variable
-GenericAttributeValue,17606,DataType
-GenericAttributes,17607,DataType
-GenericAttributeValue_Encoding_DefaultXml,17608,Object
-GenericAttributes_Encoding_DefaultXml,17609,Object
-GenericAttributeValue_Encoding_DefaultBinary,17610,Object
-GenericAttributes_Encoding_DefaultBinary,17611,Object
-ServerType_LocalTime,17612,Variable
-PubSubConnectionTypeAddWriterGroupMethodType_InputArguments,17613,Variable
-PubSubConnectionTypeAddWriterGroupMethodType_OutputArguments,17614,Variable
-AuditSecurityEventType_StatusCodeId,17615,Variable
-AuditChannelEventType_StatusCodeId,17616,Variable
-AuditOpenSecureChannelEventType_StatusCodeId,17617,Variable
-AuditSessionEventType_StatusCodeId,17618,Variable
-AuditCreateSessionEventType_StatusCodeId,17619,Variable
-AuditUrlMismatchEventType_StatusCodeId,17620,Variable
-AuditActivateSessionEventType_StatusCodeId,17621,Variable
-AuditCancelEventType_StatusCodeId,17622,Variable
-AuditCertificateEventType_StatusCodeId,17623,Variable
-AuditCertificateDataMismatchEventType_StatusCodeId,17624,Variable
-AuditCertificateExpiredEventType_StatusCodeId,17625,Variable
-AuditCertificateInvalidEventType_StatusCodeId,17626,Variable
-AuditCertificateUntrustedEventType_StatusCodeId,17627,Variable
-AuditCertificateRevokedEventType_StatusCodeId,17628,Variable
-AuditCertificateMismatchEventType_StatusCodeId,17629,Variable
-PubSubConnectionAddReaderGroupGroupMethodType,17630,Method
-PubSubConnectionAddReaderGroupGroupMethodType_InputArguments,17631,Variable
-SelectionListType_Selections,17632,Variable
-SelectionListType_SelectionDescriptions,17633,Variable
-Server_LocalTime,17634,Variable
-FiniteStateMachineType_AvailableStates,17635,Variable
-FiniteStateMachineType_AvailableTransitions,17636,Variable
-TemporaryFileTransferType_TransferState_Placeholder_AvailableStates,17637,Variable
-TemporaryFileTransferType_TransferState_Placeholder_AvailableTransitions,17638,Variable
-FileTransferStateMachineType_AvailableStates,17639,Variable
-FileTransferStateMachineType_AvailableTransitions,17640,Variable
-RoleMappingRuleChangedAuditEventType,17641,ObjectType
-RoleMappingRuleChangedAuditEventType_EventId,17642,Variable
-RoleMappingRuleChangedAuditEventType_EventType,17643,Variable
-RoleMappingRuleChangedAuditEventType_SourceNode,17644,Variable
-RoleMappingRuleChangedAuditEventType_SourceName,17645,Variable
-RoleMappingRuleChangedAuditEventType_Time,17646,Variable
-RoleMappingRuleChangedAuditEventType_ReceiveTime,17647,Variable
-RoleMappingRuleChangedAuditEventType_LocalTime,17648,Variable
-RoleMappingRuleChangedAuditEventType_Message,17649,Variable
-RoleMappingRuleChangedAuditEventType_Severity,17650,Variable
-RoleMappingRuleChangedAuditEventType_ActionTimeStamp,17651,Variable
-RoleMappingRuleChangedAuditEventType_Status,17652,Variable
-RoleMappingRuleChangedAuditEventType_ServerId,17653,Variable
-RoleMappingRuleChangedAuditEventType_ClientAuditEntryId,17654,Variable
-RoleMappingRuleChangedAuditEventType_ClientUserId,17655,Variable
-RoleMappingRuleChangedAuditEventType_MethodId,17656,Variable
-RoleMappingRuleChangedAuditEventType_InputArguments,17657,Variable
-AlarmConditionType_ShelvingState_AvailableStates,17658,Variable
-AlarmConditionType_ShelvingState_AvailableTransitions,17659,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_AvailableStates,17660,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_ShelvingState_AvailableTransitions,17661,Variable
-ShelvedStateMachineType_AvailableStates,17662,Variable
-ShelvedStateMachineType_AvailableTransitions,17663,Variable
-LimitAlarmType_ShelvingState_AvailableStates,17664,Variable
-LimitAlarmType_ShelvingState_AvailableTransitions,17665,Variable
-ExclusiveLimitStateMachineType_AvailableStates,17666,Variable
-ExclusiveLimitStateMachineType_AvailableTransitions,17667,Variable
-ExclusiveLimitAlarmType_ShelvingState_AvailableStates,17668,Variable
-ExclusiveLimitAlarmType_ShelvingState_AvailableTransitions,17669,Variable
-ExclusiveLimitAlarmType_LimitState_AvailableStates,17670,Variable
-ExclusiveLimitAlarmType_LimitState_AvailableTransitions,17671,Variable
-NonExclusiveLimitAlarmType_ShelvingState_AvailableStates,17672,Variable
-NonExclusiveLimitAlarmType_ShelvingState_AvailableTransitions,17673,Variable
-NonExclusiveLevelAlarmType_ShelvingState_AvailableStates,17674,Variable
-NonExclusiveLevelAlarmType_ShelvingState_AvailableTransitions,17675,Variable
-ExclusiveLevelAlarmType_ShelvingState_AvailableStates,17676,Variable
-ExclusiveLevelAlarmType_ShelvingState_AvailableTransitions,17677,Variable
-ExclusiveLevelAlarmType_LimitState_AvailableStates,17678,Variable
-ExclusiveLevelAlarmType_LimitState_AvailableTransitions,17679,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_AvailableStates,17680,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_AvailableTransitions,17681,Variable
-ExclusiveDeviationAlarmType_ShelvingState_AvailableStates,17682,Variable
-ExclusiveDeviationAlarmType_ShelvingState_AvailableTransitions,17683,Variable
-ExclusiveDeviationAlarmType_LimitState_AvailableStates,17684,Variable
-ExclusiveDeviationAlarmType_LimitState_AvailableTransitions,17685,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_AvailableStates,17686,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_AvailableTransitions,17687,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_AvailableStates,17688,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_AvailableTransitions,17689,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_AvailableStates,17690,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_AvailableTransitions,17691,Variable
-DiscreteAlarmType_ShelvingState_AvailableStates,17692,Variable
-DiscreteAlarmType_ShelvingState_AvailableTransitions,17693,Variable
-OffNormalAlarmType_ShelvingState_AvailableStates,17694,Variable
-OffNormalAlarmType_ShelvingState_AvailableTransitions,17695,Variable
-SystemOffNormalAlarmType_ShelvingState_AvailableStates,17696,Variable
-SystemOffNormalAlarmType_ShelvingState_AvailableTransitions,17697,Variable
-TripAlarmType_ShelvingState_AvailableStates,17698,Variable
-TripAlarmType_ShelvingState_AvailableTransitions,17699,Variable
-CertificateExpirationAlarmType_ShelvingState_AvailableStates,17700,Variable
-CertificateExpirationAlarmType_ShelvingState_AvailableTransitions,17701,Variable
-DiscrepancyAlarmType_ShelvingState_AvailableStates,17702,Variable
-DiscrepancyAlarmType_ShelvingState_AvailableTransitions,17703,Variable
-ProgramStateMachineType_AvailableStates,17704,Variable
-ProgramStateMachineType_AvailableTransitions,17705,Variable
-PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri_Selections,17706,Variable
-PublishSubscribeType_ConnectionName_Placeholder_TransportProfileUri_SelectionDescriptions,17707,Variable
-PubSubConnectionType_TransportProfileUri_Selections,17710,Variable
-PubSubConnectionType_TransportProfileUri_SelectionDescriptions,17711,Variable
-FileDirectoryType_FileDirectoryName_Placeholder_DeleteFileSystemObject,17718,Method
-FileDirectoryType_FileDirectoryName_Placeholder_DeleteFileSystemObject_InputArguments,17719,Variable
-PubSubConnectionAddReaderGroupGroupMethodType_OutputArguments,17720,Variable
-ConnectionTransportType,17721,ObjectType
-FileSystem_FileDirectoryName_Placeholder_DeleteFileSystemObject,17722,Method
-FileSystem_FileDirectoryName_Placeholder_DeleteFileSystemObject_InputArguments,17723,Variable
-PubSubGroupType_MaxNetworkMessageSize,17724,Variable
-WriterGroupType,17725,ObjectType
-WriterGroupType_SecurityMode,17726,Variable
-WriterGroupType_SecurityGroupId,17727,Variable
-WriterGroupType_SecurityKeyServices,17728,Variable
-WriterGroupType_MaxNetworkMessageSize,17729,Variable
-WriterGroupType_Status,17730,Object
-WriterGroupType_Status_State,17731,Variable
-AuthorizationServices,17732,Object
-AuthorizationServices_ServiceName_Placeholder,17733,Object
-WriterGroupType_Status_Enable,17734,Method
-WriterGroupType_Status_Disable,17735,Method
-WriterGroupType_WriterGroupId,17736,Variable
-WriterGroupType_PublishingInterval,17737,Variable
-WriterGroupType_KeepAliveTime,17738,Variable
-WriterGroupType_Priority,17739,Variable
-WriterGroupType_LocaleIds,17740,Variable
-WriterGroupType_TransportSettings,17741,Object
-WriterGroupType_MessageSettings,17742,Object
-WriterGroupType_DataSetWriterName_Placeholder,17743,Object
-WriterGroupType_DataSetWriterName_Placeholder_DataSetWriterId,17744,Variable
-WriterGroupType_DataSetWriterName_Placeholder_DataSetFieldContentMask,17745,Variable
-WriterGroupType_DataSetWriterName_Placeholder_KeyFrameCount,17746,Variable
-WriterGroupType_DataSetWriterName_Placeholder_TransportSettings,17747,Object
-WriterGroupType_DataSetWriterName_Placeholder_MessageSettings,17748,Object
-WriterGroupType_DataSetWriterName_Placeholder_Status,17749,Object
-WriterGroupType_DataSetWriterName_Placeholder_Status_State,17750,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Status_Enable,17751,Method
-WriterGroupType_DataSetWriterName_Placeholder_Status_Disable,17752,Method
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics,17753,Object
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel,17754,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation,17755,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active,17756,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification,17757,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,17758,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,17759,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError,17760,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active,17761,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification,17762,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,17763,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_TotalError_TimeFirstChange,17764,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Reset,17765,Method
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_SubError,17766,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters,17767,Object
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError,17768,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active,17769,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification,17770,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,17771,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,17772,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,17773,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,17774,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,17775,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,17776,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,17777,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent,17778,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,17779,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,17780,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,17781,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,17782,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError,17783,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,17784,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,17785,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,17786,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,17787,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent,17788,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,17789,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,17790,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,17791,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,17792,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,17793,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,17794,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,17795,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,17796,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,17797,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues,17798,Object
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages,17799,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active,17800,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification,17801,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel,17802,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_TimeFirstChange,17803,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber,17804,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel,17805,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode,17806,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel,17807,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion,17808,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel,17809,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion,17810,Variable
-WriterGroupType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel,17811,Variable
-WriterGroupType_Diagnostics,17812,Object
-WriterGroupType_Diagnostics_DiagnosticsLevel,17813,Variable
-WriterGroupType_Diagnostics_TotalInformation,17814,Variable
-WriterGroupType_Diagnostics_TotalInformation_Active,17815,Variable
-WriterGroupType_Diagnostics_TotalInformation_Classification,17816,Variable
-WriterGroupType_Diagnostics_TotalInformation_DiagnosticsLevel,17817,Variable
-WriterGroupType_Diagnostics_TotalInformation_TimeFirstChange,17818,Variable
-WriterGroupType_Diagnostics_TotalError,17819,Variable
-WriterGroupType_Diagnostics_TotalError_Active,17820,Variable
-WriterGroupType_Diagnostics_TotalError_Classification,17821,Variable
-WriterGroupType_Diagnostics_TotalError_DiagnosticsLevel,17822,Variable
-WriterGroupType_Diagnostics_TotalError_TimeFirstChange,17823,Variable
-WriterGroupType_Diagnostics_Reset,17824,Method
-WriterGroupType_Diagnostics_SubError,17825,Variable
-WriterGroupType_Diagnostics_Counters,17826,Object
-WriterGroupType_Diagnostics_Counters_StateError,17827,Variable
-WriterGroupType_Diagnostics_Counters_StateError_Active,17828,Variable
-WriterGroupType_Diagnostics_Counters_StateError_Classification,17829,Variable
-WriterGroupType_Diagnostics_Counters_StateError_DiagnosticsLevel,17830,Variable
-WriterGroupType_Diagnostics_Counters_StateError_TimeFirstChange,17831,Variable
-WriterGroupType_Diagnostics_Counters_StateOperationalByMethod,17832,Variable
-WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_Active,17833,Variable
-WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_Classification,17834,Variable
-WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,17835,Variable
-WriterGroupType_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,17836,Variable
-WriterGroupType_Diagnostics_Counters_StateOperationalByParent,17837,Variable
-WriterGroupType_Diagnostics_Counters_StateOperationalByParent_Active,17838,Variable
-WriterGroupType_Diagnostics_Counters_StateOperationalByParent_Classification,17839,Variable
-WriterGroupType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,17840,Variable
-WriterGroupType_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,17841,Variable
-WriterGroupType_Diagnostics_Counters_StateOperationalFromError,17842,Variable
-WriterGroupType_Diagnostics_Counters_StateOperationalFromError_Active,17843,Variable
-WriterGroupType_Diagnostics_Counters_StateOperationalFromError_Classification,17844,Variable
-WriterGroupType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,17845,Variable
-WriterGroupType_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,17846,Variable
-WriterGroupType_Diagnostics_Counters_StatePausedByParent,17847,Variable
-WriterGroupType_Diagnostics_Counters_StatePausedByParent_Active,17848,Variable
-WriterGroupType_Diagnostics_Counters_StatePausedByParent_Classification,17849,Variable
-WriterGroupType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,17850,Variable
-WriterGroupType_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,17851,Variable
-AuthorizationServiceConfigurationType,17852,ObjectType
-WriterGroupType_Diagnostics_Counters_StateDisabledByMethod,17853,Variable
-WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_Active,17854,Variable
-WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_Classification,17855,Variable
-WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,17856,Variable
-WriterGroupType_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,17857,Variable
-WriterGroupType_Diagnostics_LiveValues,17858,Object
-WriterGroupType_Diagnostics_Counters_SentNetworkMessages,17859,Variable
-AuthorizationServiceConfigurationType_ServiceCertificate,17860,Variable
-DecimalDataType,17861,DataType
-DecimalDataType_Encoding_DefaultXml,17862,Object
-DecimalDataType_Encoding_DefaultBinary,17863,Object
-WriterGroupType_Diagnostics_Counters_SentNetworkMessages_Active,17864,Variable
-AlarmConditionType_AudibleSound_ListId,17865,Variable
-AlarmConditionType_AudibleSound_AgencyId,17866,Variable
-AlarmConditionType_AudibleSound_VersionId,17867,Variable
-AlarmConditionType_Unsuppress,17868,Method
-AlarmConditionType_RemoveFromService,17869,Method
-AlarmConditionType_PlaceInService,17870,Method
-WriterGroupType_Diagnostics_Counters_SentNetworkMessages_Classification,17871,Variable
-WriterGroupType_Diagnostics_Counters_SentNetworkMessages_DiagnosticsLevel,17872,Variable
-WriterGroupType_Diagnostics_Counters_SentNetworkMessages_TimeFirstChange,17873,Variable
-WriterGroupType_Diagnostics_Counters_FailedTransmissions,17874,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_Unsuppress,17875,Method
-AlarmGroupType_AlarmConditionInstance_Placeholder_RemoveFromService,17876,Method
-AlarmGroupType_AlarmConditionInstance_Placeholder_PlaceInService,17877,Method
-WriterGroupType_Diagnostics_Counters_FailedTransmissions_Active,17878,Variable
-LimitAlarmType_AudibleSound_ListId,17879,Variable
-LimitAlarmType_AudibleSound_AgencyId,17880,Variable
-LimitAlarmType_AudibleSound_VersionId,17881,Variable
-LimitAlarmType_Unsuppress,17882,Method
-LimitAlarmType_RemoveFromService,17883,Method
-LimitAlarmType_PlaceInService,17884,Method
-WriterGroupType_Diagnostics_Counters_FailedTransmissions_Classification,17885,Variable
-ExclusiveLimitAlarmType_AudibleSound_ListId,17886,Variable
-ExclusiveLimitAlarmType_AudibleSound_AgencyId,17887,Variable
-ExclusiveLimitAlarmType_AudibleSound_VersionId,17888,Variable
-ExclusiveLimitAlarmType_Unsuppress,17889,Method
-ExclusiveLimitAlarmType_RemoveFromService,17890,Method
-ExclusiveLimitAlarmType_PlaceInService,17891,Method
-WriterGroupType_Diagnostics_Counters_FailedTransmissions_DiagnosticsLevel,17892,Variable
-NonExclusiveLimitAlarmType_AudibleSound_ListId,17893,Variable
-NonExclusiveLimitAlarmType_AudibleSound_AgencyId,17894,Variable
-NonExclusiveLimitAlarmType_AudibleSound_VersionId,17895,Variable
-NonExclusiveLimitAlarmType_Unsuppress,17896,Method
-NonExclusiveLimitAlarmType_RemoveFromService,17897,Method
-NonExclusiveLimitAlarmType_PlaceInService,17898,Method
-WriterGroupType_Diagnostics_Counters_FailedTransmissions_TimeFirstChange,17899,Variable
-WriterGroupType_Diagnostics_Counters_EncryptionErrors,17900,Variable
-WriterGroupType_Diagnostics_Counters_EncryptionErrors_Active,17901,Variable
-WriterGroupType_Diagnostics_Counters_EncryptionErrors_Classification,17902,Variable
-WriterGroupType_Diagnostics_Counters_EncryptionErrors_DiagnosticsLevel,17903,Variable
-NonExclusiveLevelAlarmType_RemoveFromService,17904,Method
-NonExclusiveLevelAlarmType_PlaceInService,17905,Method
-WriterGroupType_Diagnostics_Counters_EncryptionErrors_TimeFirstChange,17906,Variable
-ExclusiveLevelAlarmType_AudibleSound_ListId,17907,Variable
-ExclusiveLevelAlarmType_AudibleSound_AgencyId,17908,Variable
-ExclusiveLevelAlarmType_AudibleSound_VersionId,17909,Variable
-ExclusiveLevelAlarmType_Unsuppress,17910,Method
-ExclusiveLevelAlarmType_RemoveFromService,17911,Method
-ExclusiveLevelAlarmType_PlaceInService,17912,Method
-WriterGroupType_Diagnostics_LiveValues_ConfiguredDataSetWriters,17913,Variable
-NonExclusiveDeviationAlarmType_AudibleSound_ListId,17914,Variable
-NonExclusiveDeviationAlarmType_AudibleSound_AgencyId,17915,Variable
-NonExclusiveDeviationAlarmType_AudibleSound_VersionId,17916,Variable
-NonExclusiveDeviationAlarmType_Unsuppress,17917,Method
-NonExclusiveDeviationAlarmType_RemoveFromService,17918,Method
-NonExclusiveDeviationAlarmType_PlaceInService,17919,Method
-WriterGroupType_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel,17920,Variable
-NonExclusiveRateOfChangeAlarmType_AudibleSound_ListId,17921,Variable
-NonExclusiveRateOfChangeAlarmType_AudibleSound_AgencyId,17922,Variable
-NonExclusiveRateOfChangeAlarmType_AudibleSound_VersionId,17923,Variable
-NonExclusiveRateOfChangeAlarmType_Unsuppress,17924,Method
-NonExclusiveRateOfChangeAlarmType_RemoveFromService,17925,Method
-NonExclusiveRateOfChangeAlarmType_PlaceInService,17926,Method
-WriterGroupType_Diagnostics_LiveValues_OperationalDataSetWriters,17927,Variable
-ExclusiveDeviationAlarmType_AudibleSound_ListId,17928,Variable
-ExclusiveDeviationAlarmType_AudibleSound_AgencyId,17929,Variable
-ExclusiveDeviationAlarmType_AudibleSound_VersionId,17930,Variable
-ExclusiveDeviationAlarmType_Unsuppress,17931,Method
-ExclusiveDeviationAlarmType_RemoveFromService,17932,Method
-ExclusiveDeviationAlarmType_PlaceInService,17933,Method
-WriterGroupType_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel,17934,Variable
-ExclusiveRateOfChangeAlarmType_AudibleSound_ListId,17935,Variable
-ExclusiveRateOfChangeAlarmType_AudibleSound_AgencyId,17936,Variable
-ExclusiveRateOfChangeAlarmType_AudibleSound_VersionId,17937,Variable
-ExclusiveRateOfChangeAlarmType_Unsuppress,17938,Method
-ExclusiveRateOfChangeAlarmType_RemoveFromService,17939,Method
-ExclusiveRateOfChangeAlarmType_PlaceInService,17940,Method
-WriterGroupType_Diagnostics_LiveValues_SecurityTokenID,17941,Variable
-DiscreteAlarmType_AudibleSound_ListId,17942,Variable
-DiscreteAlarmType_AudibleSound_AgencyId,17943,Variable
-DiscreteAlarmType_AudibleSound_VersionId,17944,Variable
-DiscreteAlarmType_Unsuppress,17945,Method
-DiscreteAlarmType_RemoveFromService,17946,Method
-DiscreteAlarmType_PlaceInService,17947,Method
-WriterGroupType_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel,17948,Variable
-OffNormalAlarmType_AudibleSound_ListId,17949,Variable
-OffNormalAlarmType_AudibleSound_AgencyId,17950,Variable
-OffNormalAlarmType_AudibleSound_VersionId,17951,Variable
-OffNormalAlarmType_Unsuppress,17952,Method
-OffNormalAlarmType_RemoveFromService,17953,Method
-OffNormalAlarmType_PlaceInService,17954,Method
-WriterGroupType_Diagnostics_LiveValues_TimeToNextTokenID,17955,Variable
-SystemOffNormalAlarmType_AudibleSound_ListId,17956,Variable
-SystemOffNormalAlarmType_AudibleSound_AgencyId,17957,Variable
-SystemOffNormalAlarmType_AudibleSound_VersionId,17958,Variable
-SystemOffNormalAlarmType_Unsuppress,17959,Method
-SystemOffNormalAlarmType_RemoveFromService,17960,Method
-SystemOffNormalAlarmType_PlaceInService,17961,Method
-WriterGroupType_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel,17962,Variable
-TripAlarmType_AudibleSound_ListId,17963,Variable
-TripAlarmType_AudibleSound_AgencyId,17964,Variable
-TripAlarmType_AudibleSound_VersionId,17965,Variable
-TripAlarmType_Unsuppress,17966,Method
-TripAlarmType_RemoveFromService,17967,Method
-TripAlarmType_PlaceInService,17968,Method
-WriterGroupType_AddDataSetWriter,17969,Method
-CertificateExpirationAlarmType_AudibleSound_ListId,17970,Variable
-CertificateExpirationAlarmType_AudibleSound_AgencyId,17971,Variable
-CertificateExpirationAlarmType_AudibleSound_VersionId,17972,Variable
-CertificateExpirationAlarmType_Unsuppress,17973,Method
-CertificateExpirationAlarmType_RemoveFromService,17974,Method
-CertificateExpirationAlarmType_PlaceInService,17975,Method
-WriterGroupType_AddDataSetWriter_InputArguments,17976,Variable
-DiscrepancyAlarmType_AudibleSound_ListId,17977,Variable
-DiscrepancyAlarmType_AudibleSound_AgencyId,17978,Variable
-DiscrepancyAlarmType_AudibleSound_VersionId,17979,Variable
-DiscrepancyAlarmType_Unsuppress,17980,Method
-DiscrepancyAlarmType_RemoveFromService,17981,Method
-DiscrepancyAlarmType_PlaceInService,17982,Method
-HasEffectEnable,17983,ReferenceType
-HasEffectSuppressed,17984,ReferenceType
-HasEffectUnsuppressed,17985,ReferenceType
-AudioVariableType,17986,VariableType
-WriterGroupType_AddDataSetWriter_OutputArguments,17987,Variable
-AudioVariableType_ListId,17988,Variable
-AudioVariableType_AgencyId,17989,Variable
-AudioVariableType_VersionId,17990,Variable
-AlarmMetricsType_StartTime,17991,Variable
-WriterGroupType_RemoveDataSetWriter,17992,Method
-WriterGroupType_RemoveDataSetWriter_InputArguments,17993,Variable
-PubSubGroupTypeAddWriterrMethodType,17994,Method
-PubSubGroupTypeAddWriterrMethodType_InputArguments,17995,Variable
-PubSubGroupTypeAddWriterrMethodType_OutputArguments,17996,Variable
-WriterGroupTransportType,17997,ObjectType
-WriterGroupMessageType,17998,ObjectType
-ReaderGroupType,17999,ObjectType
-ReaderGroupType_SecurityMode,18000,Variable
-KeyCredentialConfigurationType,18001,ObjectType
-ReaderGroupType_SecurityGroupId,18002,Variable
-ReaderGroupType_SecurityKeyServices,18003,Variable
-KeyCredentialConfigurationType_EndpointUrls,18004,Variable
-KeyCredentialConfigurationType_ServiceStatus,18005,Variable
-KeyCredentialConfigurationType_UpdateCredential,18006,Method
-KeyCredentialConfigurationType_UpdateCredential_InputArguments,18007,Variable
-KeyCredentialConfigurationType_DeleteCredential,18008,Method
-KeyCredentialUpdateMethodType,18009,Method
-KeyCredentialUpdateMethodType_InputArguments,18010,Variable
-KeyCredentialAuditEventType,18011,ObjectType
-KeyCredentialAuditEventType_EventId,18012,Variable
-KeyCredentialAuditEventType_EventType,18013,Variable
-KeyCredentialAuditEventType_SourceNode,18014,Variable
-KeyCredentialAuditEventType_SourceName,18015,Variable
-KeyCredentialAuditEventType_Time,18016,Variable
-KeyCredentialAuditEventType_ReceiveTime,18017,Variable
-KeyCredentialAuditEventType_LocalTime,18018,Variable
-KeyCredentialAuditEventType_Message,18019,Variable
-KeyCredentialAuditEventType_Severity,18020,Variable
-KeyCredentialAuditEventType_ActionTimeStamp,18021,Variable
-KeyCredentialAuditEventType_Status,18022,Variable
-KeyCredentialAuditEventType_ServerId,18023,Variable
-KeyCredentialAuditEventType_ClientAuditEntryId,18024,Variable
-KeyCredentialAuditEventType_ClientUserId,18025,Variable
-KeyCredentialAuditEventType_MethodId,18026,Variable
-KeyCredentialAuditEventType_InputArguments,18027,Variable
-KeyCredentialAuditEventType_ResourceUri,18028,Variable
-KeyCredentialUpdatedAuditEventType,18029,ObjectType
-KeyCredentialUpdatedAuditEventType_EventId,18030,Variable
-KeyCredentialUpdatedAuditEventType_EventType,18031,Variable
-KeyCredentialUpdatedAuditEventType_SourceNode,18032,Variable
-KeyCredentialUpdatedAuditEventType_SourceName,18033,Variable
-KeyCredentialUpdatedAuditEventType_Time,18034,Variable
-KeyCredentialUpdatedAuditEventType_ReceiveTime,18035,Variable
-KeyCredentialUpdatedAuditEventType_LocalTime,18036,Variable
-KeyCredentialUpdatedAuditEventType_Message,18037,Variable
-KeyCredentialUpdatedAuditEventType_Severity,18038,Variable
-KeyCredentialUpdatedAuditEventType_ActionTimeStamp,18039,Variable
-KeyCredentialUpdatedAuditEventType_Status,18040,Variable
-KeyCredentialUpdatedAuditEventType_ServerId,18041,Variable
-KeyCredentialUpdatedAuditEventType_ClientAuditEntryId,18042,Variable
-KeyCredentialUpdatedAuditEventType_ClientUserId,18043,Variable
-KeyCredentialUpdatedAuditEventType_MethodId,18044,Variable
-KeyCredentialUpdatedAuditEventType_InputArguments,18045,Variable
-KeyCredentialUpdatedAuditEventType_ResourceUri,18046,Variable
-KeyCredentialDeletedAuditEventType,18047,ObjectType
-KeyCredentialDeletedAuditEventType_EventId,18048,Variable
-KeyCredentialDeletedAuditEventType_EventType,18049,Variable
-KeyCredentialDeletedAuditEventType_SourceNode,18050,Variable
-KeyCredentialDeletedAuditEventType_SourceName,18051,Variable
-KeyCredentialDeletedAuditEventType_Time,18052,Variable
-KeyCredentialDeletedAuditEventType_ReceiveTime,18053,Variable
-KeyCredentialDeletedAuditEventType_LocalTime,18054,Variable
-KeyCredentialDeletedAuditEventType_Message,18055,Variable
-KeyCredentialDeletedAuditEventType_Severity,18056,Variable
-KeyCredentialDeletedAuditEventType_ActionTimeStamp,18057,Variable
-KeyCredentialDeletedAuditEventType_Status,18058,Variable
-KeyCredentialDeletedAuditEventType_ServerId,18059,Variable
-KeyCredentialDeletedAuditEventType_ClientAuditEntryId,18060,Variable
-KeyCredentialDeletedAuditEventType_ClientUserId,18061,Variable
-KeyCredentialDeletedAuditEventType_MethodId,18062,Variable
-KeyCredentialDeletedAuditEventType_InputArguments,18063,Variable
-KeyCredentialDeletedAuditEventType_ResourceUri,18064,Variable
-ReaderGroupType_MaxNetworkMessageSize,18065,Variable
-AuthorizationServices_ServiceName_Placeholder_ServiceCertificate,18066,Variable
-ReaderGroupType_Status,18067,Object
-ReaderGroupType_Status_State,18068,Variable
-KeyCredentialConfigurationType_ResourceUri,18069,Variable
-AuthorizationServices_ServiceName_Placeholder_ServiceUri,18070,Variable
-AuthorizationServices_ServiceName_Placeholder_IssuerEndpointUrl,18071,Variable
-AuthorizationServiceConfigurationType_ServiceUri,18072,Variable
-AuthorizationServiceConfigurationType_IssuerEndpointUrl,18073,Variable
-ReaderGroupType_Status_Enable,18074,Method
-ReaderGroupType_Status_Disable,18075,Method
-ReaderGroupType_DataSetReaderName_Placeholder,18076,Object
-ReaderGroupType_DataSetReaderName_Placeholder_PublisherId,18077,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_WriterGroupId,18078,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_DataSetWriterId,18079,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_DataSetMetaData,18080,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_DataSetFieldContentMask,18081,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_MessageReceiveTimeout,18082,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_SecurityMode,18083,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_SecurityGroupId,18084,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_SecurityKeyServices,18085,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_TransportSettings,18086,Object
-ReaderGroupType_DataSetReaderName_Placeholder_MessageSettings,18087,Object
-ReaderGroupType_DataSetReaderName_Placeholder_Status,18088,Object
-ReaderGroupType_DataSetReaderName_Placeholder_Status_State,18089,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Status_Enable,18090,Method
-ReaderGroupType_DataSetReaderName_Placeholder_Status_Disable,18091,Method
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics,18092,Object
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_DiagnosticsLevel,18093,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation,18094,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_Active,18095,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_Classification,18096,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,18097,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,18098,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError,18099,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_Active,18100,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_Classification,18101,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,18102,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_TotalError_TimeFirstChange,18103,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Reset,18104,Method
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_SubError,18105,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters,18106,Object
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError,18107,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_Active,18108,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_Classification,18109,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,18110,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,18111,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,18112,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,18113,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,18114,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,18115,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,18116,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent,18117,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,18118,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,18119,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,18120,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,18121,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError,18122,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,18123,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,18124,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,18125,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,18126,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent,18127,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,18128,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,18129,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,18130,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,18131,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,18132,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,18133,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,18134,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,18135,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,18136,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues,18137,Object
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages,18138,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active,18139,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification,18140,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel,18141,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_TimeFirstChange,18142,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors,18143,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_Active,18144,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_Classification,18145,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel,18146,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_Counters_DecryptionErrors_TimeFirstChange,18147,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber,18148,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel,18149,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_StatusCode,18150,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel,18151,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MajorVersion,18152,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel,18153,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MinorVersion,18154,Variable
-KeyCredentialConfiguration,18155,Object
-KeyCredentialConfiguration_ServiceName_Placeholder,18156,Object
-KeyCredentialConfiguration_ServiceName_Placeholder_ResourceUri,18157,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel,18158,Variable
-KeyCredentialConfiguration_ServiceName_Placeholder_EndpointUrls,18159,Variable
-KeyCredentialConfiguration_ServiceName_Placeholder_ServiceStatus,18160,Variable
-KeyCredentialConfiguration_ServiceName_Placeholder_UpdateCredential,18161,Method
-KeyCredentialConfiguration_ServiceName_Placeholder_UpdateCredential_InputArguments,18162,Variable
-KeyCredentialConfiguration_ServiceName_Placeholder_DeleteCredential,18163,Method
-KeyCredentialConfiguration_ServiceName_Placeholder_ProfileUri,18164,Variable
-KeyCredentialConfigurationType_ProfileUri,18165,Variable
-OpcUa_XmlSchema_DataTypeDefinition,18166,Variable
-OpcUa_XmlSchema_DataTypeDefinition_DataTypeVersion,18167,Variable
-OpcUa_XmlSchema_DataTypeDefinition_DictionaryFragment,18168,Variable
-OpcUa_XmlSchema_StructureField,18169,Variable
-OpcUa_XmlSchema_StructureField_DataTypeVersion,18170,Variable
-OpcUa_XmlSchema_StructureField_DictionaryFragment,18171,Variable
-OpcUa_XmlSchema_StructureDefinition,18172,Variable
-OpcUa_XmlSchema_StructureDefinition_DataTypeVersion,18173,Variable
-OpcUa_XmlSchema_StructureDefinition_DictionaryFragment,18174,Variable
-OpcUa_XmlSchema_EnumDefinition,18175,Variable
-OpcUa_XmlSchema_EnumDefinition_DataTypeVersion,18176,Variable
-OpcUa_XmlSchema_EnumDefinition_DictionaryFragment,18177,Variable
-OpcUa_BinarySchema_DataTypeDefinition,18178,Variable
-OpcUa_BinarySchema_DataTypeDefinition_DataTypeVersion,18179,Variable
-OpcUa_BinarySchema_DataTypeDefinition_DictionaryFragment,18180,Variable
-OpcUa_BinarySchema_StructureField,18181,Variable
-OpcUa_BinarySchema_StructureField_DataTypeVersion,18182,Variable
-OpcUa_BinarySchema_StructureField_DictionaryFragment,18183,Variable
-OpcUa_BinarySchema_StructureDefinition,18184,Variable
-OpcUa_BinarySchema_StructureDefinition_DataTypeVersion,18185,Variable
-OpcUa_BinarySchema_StructureDefinition_DictionaryFragment,18186,Variable
-OpcUa_BinarySchema_EnumDefinition,18187,Variable
-OpcUa_BinarySchema_EnumDefinition_DataTypeVersion,18188,Variable
-OpcUa_BinarySchema_EnumDefinition_DictionaryFragment,18189,Variable
-AlarmConditionType_LatchedState,18190,Variable
-AlarmConditionType_LatchedState_Id,18191,Variable
-AlarmConditionType_LatchedState_Name,18192,Variable
-AlarmConditionType_LatchedState_Number,18193,Variable
-AlarmConditionType_LatchedState_EffectiveDisplayName,18194,Variable
-AlarmConditionType_LatchedState_TransitionTime,18195,Variable
-AlarmConditionType_LatchedState_EffectiveTransitionTime,18196,Variable
-AlarmConditionType_LatchedState_TrueState,18197,Variable
-AlarmConditionType_LatchedState_FalseState,18198,Variable
-AlarmConditionType_Reset,18199,Method
-AlarmGroupType_AlarmConditionInstance_Placeholder_AudibleSound_ListId,18200,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_AudibleSound_AgencyId,18201,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_AudibleSound_VersionId,18202,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState,18203,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_Id,18204,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_Name,18205,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_Number,18206,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_EffectiveDisplayName,18207,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_TransitionTime,18208,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_EffectiveTransitionTime,18209,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_TrueState,18210,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_LatchedState_FalseState,18211,Variable
-AlarmGroupType_AlarmConditionInstance_Placeholder_Reset,18212,Method
-LimitAlarmType_LatchedState,18213,Variable
-LimitAlarmType_LatchedState_Id,18214,Variable
-LimitAlarmType_LatchedState_Name,18215,Variable
-LimitAlarmType_LatchedState_Number,18216,Variable
-LimitAlarmType_LatchedState_EffectiveDisplayName,18217,Variable
-LimitAlarmType_LatchedState_TransitionTime,18218,Variable
-LimitAlarmType_LatchedState_EffectiveTransitionTime,18219,Variable
-LimitAlarmType_LatchedState_TrueState,18220,Variable
-LimitAlarmType_LatchedState_FalseState,18221,Variable
-LimitAlarmType_Reset,18222,Method
-ExclusiveLimitAlarmType_LatchedState,18223,Variable
-ExclusiveLimitAlarmType_LatchedState_Id,18224,Variable
-ExclusiveLimitAlarmType_LatchedState_Name,18225,Variable
-ExclusiveLimitAlarmType_LatchedState_Number,18226,Variable
-ExclusiveLimitAlarmType_LatchedState_EffectiveDisplayName,18227,Variable
-ExclusiveLimitAlarmType_LatchedState_TransitionTime,18228,Variable
-ExclusiveLimitAlarmType_LatchedState_EffectiveTransitionTime,18229,Variable
-ExclusiveLimitAlarmType_LatchedState_TrueState,18230,Variable
-ExclusiveLimitAlarmType_LatchedState_FalseState,18231,Variable
-ExclusiveLimitAlarmType_Reset,18232,Method
-NonExclusiveLimitAlarmType_LatchedState,18233,Variable
-NonExclusiveLimitAlarmType_LatchedState_Id,18234,Variable
-NonExclusiveLimitAlarmType_LatchedState_Name,18235,Variable
-NonExclusiveLimitAlarmType_LatchedState_Number,18236,Variable
-NonExclusiveLimitAlarmType_LatchedState_EffectiveDisplayName,18237,Variable
-NonExclusiveLimitAlarmType_LatchedState_TransitionTime,18238,Variable
-NonExclusiveLimitAlarmType_LatchedState_EffectiveTransitionTime,18239,Variable
-NonExclusiveLimitAlarmType_LatchedState_TrueState,18240,Variable
-NonExclusiveLimitAlarmType_LatchedState_FalseState,18241,Variable
-NonExclusiveLimitAlarmType_Reset,18242,Method
-NonExclusiveLevelAlarmType_AudibleSound_ListId,18243,Variable
-NonExclusiveLevelAlarmType_AudibleSound_AgencyId,18244,Variable
-NonExclusiveLevelAlarmType_AudibleSound_VersionId,18245,Variable
-NonExclusiveLevelAlarmType_LatchedState,18246,Variable
-NonExclusiveLevelAlarmType_LatchedState_Id,18247,Variable
-NonExclusiveLevelAlarmType_LatchedState_Name,18248,Variable
-NonExclusiveLevelAlarmType_LatchedState_Number,18249,Variable
-NonExclusiveLevelAlarmType_LatchedState_EffectiveDisplayName,18250,Variable
-NonExclusiveLevelAlarmType_LatchedState_TransitionTime,18251,Variable
-NonExclusiveLevelAlarmType_LatchedState_EffectiveTransitionTime,18252,Variable
-NonExclusiveLevelAlarmType_LatchedState_TrueState,18253,Variable
-NonExclusiveLevelAlarmType_LatchedState_FalseState,18254,Variable
-NonExclusiveLevelAlarmType_Unsuppress,18255,Method
-NonExclusiveLevelAlarmType_Reset,18256,Method
-ExclusiveLevelAlarmType_LatchedState,18257,Variable
-ExclusiveLevelAlarmType_LatchedState_Id,18258,Variable
-ExclusiveLevelAlarmType_LatchedState_Name,18259,Variable
-ExclusiveLevelAlarmType_LatchedState_Number,18260,Variable
-ExclusiveLevelAlarmType_LatchedState_EffectiveDisplayName,18261,Variable
-ExclusiveLevelAlarmType_LatchedState_TransitionTime,18262,Variable
-ExclusiveLevelAlarmType_LatchedState_EffectiveTransitionTime,18263,Variable
-ExclusiveLevelAlarmType_LatchedState_TrueState,18264,Variable
-ExclusiveLevelAlarmType_LatchedState_FalseState,18265,Variable
-ExclusiveLevelAlarmType_Reset,18266,Method
-NonExclusiveDeviationAlarmType_LatchedState,18267,Variable
-NonExclusiveDeviationAlarmType_LatchedState_Id,18268,Variable
-NonExclusiveDeviationAlarmType_LatchedState_Name,18269,Variable
-NonExclusiveDeviationAlarmType_LatchedState_Number,18270,Variable
-NonExclusiveDeviationAlarmType_LatchedState_EffectiveDisplayName,18271,Variable
-NonExclusiveDeviationAlarmType_LatchedState_TransitionTime,18272,Variable
-NonExclusiveDeviationAlarmType_LatchedState_EffectiveTransitionTime,18273,Variable
-NonExclusiveDeviationAlarmType_LatchedState_TrueState,18274,Variable
-NonExclusiveDeviationAlarmType_LatchedState_FalseState,18275,Variable
-NonExclusiveDeviationAlarmType_Reset,18276,Method
-NonExclusiveRateOfChangeAlarmType_LatchedState,18277,Variable
-NonExclusiveRateOfChangeAlarmType_LatchedState_Id,18278,Variable
-NonExclusiveRateOfChangeAlarmType_LatchedState_Name,18279,Variable
-NonExclusiveRateOfChangeAlarmType_LatchedState_Number,18280,Variable
-NonExclusiveRateOfChangeAlarmType_LatchedState_EffectiveDisplayName,18281,Variable
-NonExclusiveRateOfChangeAlarmType_LatchedState_TransitionTime,18282,Variable
-NonExclusiveRateOfChangeAlarmType_LatchedState_EffectiveTransitionTime,18283,Variable
-NonExclusiveRateOfChangeAlarmType_LatchedState_TrueState,18284,Variable
-NonExclusiveRateOfChangeAlarmType_LatchedState_FalseState,18285,Variable
-NonExclusiveRateOfChangeAlarmType_Reset,18286,Method
-ExclusiveDeviationAlarmType_LatchedState,18287,Variable
-ExclusiveDeviationAlarmType_LatchedState_Id,18288,Variable
-ExclusiveDeviationAlarmType_LatchedState_Name,18289,Variable
-ExclusiveDeviationAlarmType_LatchedState_Number,18290,Variable
-ExclusiveDeviationAlarmType_LatchedState_EffectiveDisplayName,18291,Variable
-ExclusiveDeviationAlarmType_LatchedState_TransitionTime,18292,Variable
-ExclusiveDeviationAlarmType_LatchedState_EffectiveTransitionTime,18293,Variable
-ExclusiveDeviationAlarmType_LatchedState_TrueState,18294,Variable
-ExclusiveDeviationAlarmType_LatchedState_FalseState,18295,Variable
-ExclusiveDeviationAlarmType_Reset,18296,Method
-ExclusiveRateOfChangeAlarmType_LatchedState,18297,Variable
-ExclusiveRateOfChangeAlarmType_LatchedState_Id,18298,Variable
-ExclusiveRateOfChangeAlarmType_LatchedState_Name,18299,Variable
-ExclusiveRateOfChangeAlarmType_LatchedState_Number,18300,Variable
-ExclusiveRateOfChangeAlarmType_LatchedState_EffectiveDisplayName,18301,Variable
-ExclusiveRateOfChangeAlarmType_LatchedState_TransitionTime,18302,Variable
-ExclusiveRateOfChangeAlarmType_LatchedState_EffectiveTransitionTime,18303,Variable
-ExclusiveRateOfChangeAlarmType_LatchedState_TrueState,18304,Variable
-ExclusiveRateOfChangeAlarmType_LatchedState_FalseState,18305,Variable
-ExclusiveRateOfChangeAlarmType_Reset,18306,Method
-DiscreteAlarmType_LatchedState,18307,Variable
-DiscreteAlarmType_LatchedState_Id,18308,Variable
-DiscreteAlarmType_LatchedState_Name,18309,Variable
-DiscreteAlarmType_LatchedState_Number,18310,Variable
-DiscreteAlarmType_LatchedState_EffectiveDisplayName,18311,Variable
-DiscreteAlarmType_LatchedState_TransitionTime,18312,Variable
-DiscreteAlarmType_LatchedState_EffectiveTransitionTime,18313,Variable
-DiscreteAlarmType_LatchedState_TrueState,18314,Variable
-DiscreteAlarmType_LatchedState_FalseState,18315,Variable
-DiscreteAlarmType_Reset,18316,Method
-OffNormalAlarmType_LatchedState,18317,Variable
-OffNormalAlarmType_LatchedState_Id,18318,Variable
-OffNormalAlarmType_LatchedState_Name,18319,Variable
-OffNormalAlarmType_LatchedState_Number,18320,Variable
-OffNormalAlarmType_LatchedState_EffectiveDisplayName,18321,Variable
-OffNormalAlarmType_LatchedState_TransitionTime,18322,Variable
-OffNormalAlarmType_LatchedState_EffectiveTransitionTime,18323,Variable
-OffNormalAlarmType_LatchedState_TrueState,18324,Variable
-OffNormalAlarmType_LatchedState_FalseState,18325,Variable
-OffNormalAlarmType_Reset,18326,Method
-SystemOffNormalAlarmType_LatchedState,18327,Variable
-SystemOffNormalAlarmType_LatchedState_Id,18328,Variable
-SystemOffNormalAlarmType_LatchedState_Name,18329,Variable
-SystemOffNormalAlarmType_LatchedState_Number,18330,Variable
-SystemOffNormalAlarmType_LatchedState_EffectiveDisplayName,18331,Variable
-SystemOffNormalAlarmType_LatchedState_TransitionTime,18332,Variable
-SystemOffNormalAlarmType_LatchedState_EffectiveTransitionTime,18333,Variable
-SystemOffNormalAlarmType_LatchedState_TrueState,18334,Variable
-SystemOffNormalAlarmType_LatchedState_FalseState,18335,Variable
-SystemOffNormalAlarmType_Reset,18336,Method
-TripAlarmType_LatchedState,18337,Variable
-TripAlarmType_LatchedState_Id,18338,Variable
-TripAlarmType_LatchedState_Name,18339,Variable
-TripAlarmType_LatchedState_Number,18340,Variable
-TripAlarmType_LatchedState_EffectiveDisplayName,18341,Variable
-TripAlarmType_LatchedState_TransitionTime,18342,Variable
-TripAlarmType_LatchedState_EffectiveTransitionTime,18343,Variable
-TripAlarmType_LatchedState_TrueState,18344,Variable
-TripAlarmType_LatchedState_FalseState,18345,Variable
-TripAlarmType_Reset,18346,Method
-InstrumentDiagnosticAlarmType,18347,ObjectType
-InstrumentDiagnosticAlarmType_EventId,18348,Variable
-InstrumentDiagnosticAlarmType_EventType,18349,Variable
-InstrumentDiagnosticAlarmType_SourceNode,18350,Variable
-InstrumentDiagnosticAlarmType_SourceName,18351,Variable
-InstrumentDiagnosticAlarmType_Time,18352,Variable
-InstrumentDiagnosticAlarmType_ReceiveTime,18353,Variable
-InstrumentDiagnosticAlarmType_LocalTime,18354,Variable
-InstrumentDiagnosticAlarmType_Message,18355,Variable
-InstrumentDiagnosticAlarmType_Severity,18356,Variable
-InstrumentDiagnosticAlarmType_ConditionClassId,18357,Variable
-InstrumentDiagnosticAlarmType_ConditionClassName,18358,Variable
-InstrumentDiagnosticAlarmType_ConditionSubClassId,18359,Variable
-InstrumentDiagnosticAlarmType_ConditionSubClassName,18360,Variable
-InstrumentDiagnosticAlarmType_ConditionName,18361,Variable
-InstrumentDiagnosticAlarmType_BranchId,18362,Variable
-InstrumentDiagnosticAlarmType_Retain,18363,Variable
-InstrumentDiagnosticAlarmType_EnabledState,18364,Variable
-InstrumentDiagnosticAlarmType_EnabledState_Id,18365,Variable
-InstrumentDiagnosticAlarmType_EnabledState_Name,18366,Variable
-InstrumentDiagnosticAlarmType_EnabledState_Number,18367,Variable
-InstrumentDiagnosticAlarmType_EnabledState_EffectiveDisplayName,18368,Variable
-InstrumentDiagnosticAlarmType_EnabledState_TransitionTime,18369,Variable
-InstrumentDiagnosticAlarmType_EnabledState_EffectiveTransitionTime,18370,Variable
-InstrumentDiagnosticAlarmType_EnabledState_TrueState,18371,Variable
-InstrumentDiagnosticAlarmType_EnabledState_FalseState,18372,Variable
-InstrumentDiagnosticAlarmType_Quality,18373,Variable
-InstrumentDiagnosticAlarmType_Quality_SourceTimestamp,18374,Variable
-InstrumentDiagnosticAlarmType_LastSeverity,18375,Variable
-InstrumentDiagnosticAlarmType_LastSeverity_SourceTimestamp,18376,Variable
-InstrumentDiagnosticAlarmType_Comment,18377,Variable
-InstrumentDiagnosticAlarmType_Comment_SourceTimestamp,18378,Variable
-InstrumentDiagnosticAlarmType_ClientUserId,18379,Variable
-InstrumentDiagnosticAlarmType_Disable,18380,Method
-InstrumentDiagnosticAlarmType_Enable,18381,Method
-InstrumentDiagnosticAlarmType_AddComment,18382,Method
-InstrumentDiagnosticAlarmType_AddComment_InputArguments,18383,Variable
-InstrumentDiagnosticAlarmType_ConditionRefresh,18384,Method
-InstrumentDiagnosticAlarmType_ConditionRefresh_InputArguments,18385,Variable
-InstrumentDiagnosticAlarmType_ConditionRefresh2,18386,Method
-InstrumentDiagnosticAlarmType_ConditionRefresh2_InputArguments,18387,Variable
-InstrumentDiagnosticAlarmType_AckedState,18388,Variable
-InstrumentDiagnosticAlarmType_AckedState_Id,18389,Variable
-InstrumentDiagnosticAlarmType_AckedState_Name,18390,Variable
-InstrumentDiagnosticAlarmType_AckedState_Number,18391,Variable
-InstrumentDiagnosticAlarmType_AckedState_EffectiveDisplayName,18392,Variable
-InstrumentDiagnosticAlarmType_AckedState_TransitionTime,18393,Variable
-InstrumentDiagnosticAlarmType_AckedState_EffectiveTransitionTime,18394,Variable
-InstrumentDiagnosticAlarmType_AckedState_TrueState,18395,Variable
-InstrumentDiagnosticAlarmType_AckedState_FalseState,18396,Variable
-InstrumentDiagnosticAlarmType_ConfirmedState,18397,Variable
-InstrumentDiagnosticAlarmType_ConfirmedState_Id,18398,Variable
-InstrumentDiagnosticAlarmType_ConfirmedState_Name,18399,Variable
-InstrumentDiagnosticAlarmType_ConfirmedState_Number,18400,Variable
-InstrumentDiagnosticAlarmType_ConfirmedState_EffectiveDisplayName,18401,Variable
-InstrumentDiagnosticAlarmType_ConfirmedState_TransitionTime,18402,Variable
-InstrumentDiagnosticAlarmType_ConfirmedState_EffectiveTransitionTime,18403,Variable
-InstrumentDiagnosticAlarmType_ConfirmedState_TrueState,18404,Variable
-InstrumentDiagnosticAlarmType_ConfirmedState_FalseState,18405,Variable
-InstrumentDiagnosticAlarmType_Acknowledge,18406,Method
-InstrumentDiagnosticAlarmType_Acknowledge_InputArguments,18407,Variable
-InstrumentDiagnosticAlarmType_Confirm,18408,Method
-InstrumentDiagnosticAlarmType_Confirm_InputArguments,18409,Variable
-InstrumentDiagnosticAlarmType_ActiveState,18410,Variable
-InstrumentDiagnosticAlarmType_ActiveState_Id,18411,Variable
-InstrumentDiagnosticAlarmType_ActiveState_Name,18412,Variable
-InstrumentDiagnosticAlarmType_ActiveState_Number,18413,Variable
-InstrumentDiagnosticAlarmType_ActiveState_EffectiveDisplayName,18414,Variable
-InstrumentDiagnosticAlarmType_ActiveState_TransitionTime,18415,Variable
-InstrumentDiagnosticAlarmType_ActiveState_EffectiveTransitionTime,18416,Variable
-InstrumentDiagnosticAlarmType_ActiveState_TrueState,18417,Variable
-InstrumentDiagnosticAlarmType_ActiveState_FalseState,18418,Variable
-InstrumentDiagnosticAlarmType_InputNode,18419,Variable
-InstrumentDiagnosticAlarmType_SuppressedState,18420,Variable
-InstrumentDiagnosticAlarmType_SuppressedState_Id,18421,Variable
-InstrumentDiagnosticAlarmType_SuppressedState_Name,18422,Variable
-InstrumentDiagnosticAlarmType_SuppressedState_Number,18423,Variable
-InstrumentDiagnosticAlarmType_SuppressedState_EffectiveDisplayName,18424,Variable
-InstrumentDiagnosticAlarmType_SuppressedState_TransitionTime,18425,Variable
-InstrumentDiagnosticAlarmType_SuppressedState_EffectiveTransitionTime,18426,Variable
-InstrumentDiagnosticAlarmType_SuppressedState_TrueState,18427,Variable
-InstrumentDiagnosticAlarmType_SuppressedState_FalseState,18428,Variable
-InstrumentDiagnosticAlarmType_OutOfServiceState,18429,Variable
-InstrumentDiagnosticAlarmType_OutOfServiceState_Id,18430,Variable
-InstrumentDiagnosticAlarmType_OutOfServiceState_Name,18431,Variable
-InstrumentDiagnosticAlarmType_OutOfServiceState_Number,18432,Variable
-InstrumentDiagnosticAlarmType_OutOfServiceState_EffectiveDisplayName,18433,Variable
-InstrumentDiagnosticAlarmType_OutOfServiceState_TransitionTime,18434,Variable
-InstrumentDiagnosticAlarmType_OutOfServiceState_EffectiveTransitionTime,18435,Variable
-InstrumentDiagnosticAlarmType_OutOfServiceState_TrueState,18436,Variable
-InstrumentDiagnosticAlarmType_OutOfServiceState_FalseState,18437,Variable
-InstrumentDiagnosticAlarmType_ShelvingState,18438,Object
-InstrumentDiagnosticAlarmType_ShelvingState_CurrentState,18439,Variable
-InstrumentDiagnosticAlarmType_ShelvingState_CurrentState_Id,18440,Variable
-InstrumentDiagnosticAlarmType_ShelvingState_CurrentState_Name,18441,Variable
-InstrumentDiagnosticAlarmType_ShelvingState_CurrentState_Number,18442,Variable
-InstrumentDiagnosticAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,18443,Variable
-InstrumentDiagnosticAlarmType_ShelvingState_LastTransition,18444,Variable
-InstrumentDiagnosticAlarmType_ShelvingState_LastTransition_Id,18445,Variable
-InstrumentDiagnosticAlarmType_ShelvingState_LastTransition_Name,18446,Variable
-InstrumentDiagnosticAlarmType_ShelvingState_LastTransition_Number,18447,Variable
-InstrumentDiagnosticAlarmType_ShelvingState_LastTransition_TransitionTime,18448,Variable
-InstrumentDiagnosticAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,18449,Variable
-InstrumentDiagnosticAlarmType_ShelvingState_AvailableStates,18450,Variable
-InstrumentDiagnosticAlarmType_ShelvingState_AvailableTransitions,18451,Variable
-InstrumentDiagnosticAlarmType_ShelvingState_UnshelveTime,18452,Variable
-InstrumentDiagnosticAlarmType_ShelvingState_TimedShelve,18453,Method
-InstrumentDiagnosticAlarmType_ShelvingState_TimedShelve_InputArguments,18454,Variable
-InstrumentDiagnosticAlarmType_ShelvingState_Unshelve,18455,Method
-InstrumentDiagnosticAlarmType_ShelvingState_OneShotShelve,18456,Method
-InstrumentDiagnosticAlarmType_SuppressedOrShelved,18457,Variable
-InstrumentDiagnosticAlarmType_MaxTimeShelved,18458,Variable
-InstrumentDiagnosticAlarmType_AudibleEnabled,18459,Variable
-InstrumentDiagnosticAlarmType_AudibleSound,18460,Variable
-InstrumentDiagnosticAlarmType_AudibleSound_ListId,18461,Variable
-InstrumentDiagnosticAlarmType_AudibleSound_AgencyId,18462,Variable
-InstrumentDiagnosticAlarmType_AudibleSound_VersionId,18463,Variable
-InstrumentDiagnosticAlarmType_SilenceState,18464,Variable
-InstrumentDiagnosticAlarmType_SilenceState_Id,18465,Variable
-InstrumentDiagnosticAlarmType_SilenceState_Name,18466,Variable
-InstrumentDiagnosticAlarmType_SilenceState_Number,18467,Variable
-InstrumentDiagnosticAlarmType_SilenceState_EffectiveDisplayName,18468,Variable
-InstrumentDiagnosticAlarmType_SilenceState_TransitionTime,18469,Variable
-InstrumentDiagnosticAlarmType_SilenceState_EffectiveTransitionTime,18470,Variable
-InstrumentDiagnosticAlarmType_SilenceState_TrueState,18471,Variable
-InstrumentDiagnosticAlarmType_SilenceState_FalseState,18472,Variable
-InstrumentDiagnosticAlarmType_OnDelay,18473,Variable
-InstrumentDiagnosticAlarmType_OffDelay,18474,Variable
-InstrumentDiagnosticAlarmType_FirstInGroupFlag,18475,Variable
-InstrumentDiagnosticAlarmType_FirstInGroup,18476,Object
-InstrumentDiagnosticAlarmType_LatchedState,18477,Variable
-InstrumentDiagnosticAlarmType_LatchedState_Id,18478,Variable
-InstrumentDiagnosticAlarmType_LatchedState_Name,18479,Variable
-InstrumentDiagnosticAlarmType_LatchedState_Number,18480,Variable
-InstrumentDiagnosticAlarmType_LatchedState_EffectiveDisplayName,18481,Variable
-InstrumentDiagnosticAlarmType_LatchedState_TransitionTime,18482,Variable
-InstrumentDiagnosticAlarmType_LatchedState_EffectiveTransitionTime,18483,Variable
-InstrumentDiagnosticAlarmType_LatchedState_TrueState,18484,Variable
-InstrumentDiagnosticAlarmType_LatchedState_FalseState,18485,Variable
-InstrumentDiagnosticAlarmType_AlarmGroup_Placeholder,18486,Object
-InstrumentDiagnosticAlarmType_ReAlarmTime,18487,Variable
-InstrumentDiagnosticAlarmType_ReAlarmRepeatCount,18488,Variable
-InstrumentDiagnosticAlarmType_Silence,18489,Method
-InstrumentDiagnosticAlarmType_Suppress,18490,Method
-InstrumentDiagnosticAlarmType_Unsuppress,18491,Method
-InstrumentDiagnosticAlarmType_RemoveFromService,18492,Method
-InstrumentDiagnosticAlarmType_PlaceInService,18493,Method
-InstrumentDiagnosticAlarmType_Reset,18494,Method
-InstrumentDiagnosticAlarmType_NormalState,18495,Variable
-SystemDiagnosticAlarmType,18496,ObjectType
-SystemDiagnosticAlarmType_EventId,18497,Variable
-SystemDiagnosticAlarmType_EventType,18498,Variable
-SystemDiagnosticAlarmType_SourceNode,18499,Variable
-SystemDiagnosticAlarmType_SourceName,18500,Variable
-SystemDiagnosticAlarmType_Time,18501,Variable
-SystemDiagnosticAlarmType_ReceiveTime,18502,Variable
-SystemDiagnosticAlarmType_LocalTime,18503,Variable
-SystemDiagnosticAlarmType_Message,18504,Variable
-SystemDiagnosticAlarmType_Severity,18505,Variable
-SystemDiagnosticAlarmType_ConditionClassId,18506,Variable
-SystemDiagnosticAlarmType_ConditionClassName,18507,Variable
-SystemDiagnosticAlarmType_ConditionSubClassId,18508,Variable
-SystemDiagnosticAlarmType_ConditionSubClassName,18509,Variable
-SystemDiagnosticAlarmType_ConditionName,18510,Variable
-SystemDiagnosticAlarmType_BranchId,18511,Variable
-SystemDiagnosticAlarmType_Retain,18512,Variable
-SystemDiagnosticAlarmType_EnabledState,18513,Variable
-SystemDiagnosticAlarmType_EnabledState_Id,18514,Variable
-SystemDiagnosticAlarmType_EnabledState_Name,18515,Variable
-SystemDiagnosticAlarmType_EnabledState_Number,18516,Variable
-SystemDiagnosticAlarmType_EnabledState_EffectiveDisplayName,18517,Variable
-SystemDiagnosticAlarmType_EnabledState_TransitionTime,18518,Variable
-SystemDiagnosticAlarmType_EnabledState_EffectiveTransitionTime,18519,Variable
-SystemDiagnosticAlarmType_EnabledState_TrueState,18520,Variable
-SystemDiagnosticAlarmType_EnabledState_FalseState,18521,Variable
-SystemDiagnosticAlarmType_Quality,18522,Variable
-SystemDiagnosticAlarmType_Quality_SourceTimestamp,18523,Variable
-SystemDiagnosticAlarmType_LastSeverity,18524,Variable
-SystemDiagnosticAlarmType_LastSeverity_SourceTimestamp,18525,Variable
-SystemDiagnosticAlarmType_Comment,18526,Variable
-SystemDiagnosticAlarmType_Comment_SourceTimestamp,18527,Variable
-SystemDiagnosticAlarmType_ClientUserId,18528,Variable
-SystemDiagnosticAlarmType_Disable,18529,Method
-SystemDiagnosticAlarmType_Enable,18530,Method
-SystemDiagnosticAlarmType_AddComment,18531,Method
-SystemDiagnosticAlarmType_AddComment_InputArguments,18532,Variable
-SystemDiagnosticAlarmType_ConditionRefresh,18533,Method
-SystemDiagnosticAlarmType_ConditionRefresh_InputArguments,18534,Variable
-SystemDiagnosticAlarmType_ConditionRefresh2,18535,Method
-SystemDiagnosticAlarmType_ConditionRefresh2_InputArguments,18536,Variable
-SystemDiagnosticAlarmType_AckedState,18537,Variable
-SystemDiagnosticAlarmType_AckedState_Id,18538,Variable
-SystemDiagnosticAlarmType_AckedState_Name,18539,Variable
-SystemDiagnosticAlarmType_AckedState_Number,18540,Variable
-SystemDiagnosticAlarmType_AckedState_EffectiveDisplayName,18541,Variable
-SystemDiagnosticAlarmType_AckedState_TransitionTime,18542,Variable
-SystemDiagnosticAlarmType_AckedState_EffectiveTransitionTime,18543,Variable
-SystemDiagnosticAlarmType_AckedState_TrueState,18544,Variable
-SystemDiagnosticAlarmType_AckedState_FalseState,18545,Variable
-SystemDiagnosticAlarmType_ConfirmedState,18546,Variable
-SystemDiagnosticAlarmType_ConfirmedState_Id,18547,Variable
-SystemDiagnosticAlarmType_ConfirmedState_Name,18548,Variable
-SystemDiagnosticAlarmType_ConfirmedState_Number,18549,Variable
-SystemDiagnosticAlarmType_ConfirmedState_EffectiveDisplayName,18550,Variable
-SystemDiagnosticAlarmType_ConfirmedState_TransitionTime,18551,Variable
-SystemDiagnosticAlarmType_ConfirmedState_EffectiveTransitionTime,18552,Variable
-SystemDiagnosticAlarmType_ConfirmedState_TrueState,18553,Variable
-SystemDiagnosticAlarmType_ConfirmedState_FalseState,18554,Variable
-SystemDiagnosticAlarmType_Acknowledge,18555,Method
-SystemDiagnosticAlarmType_Acknowledge_InputArguments,18556,Variable
-SystemDiagnosticAlarmType_Confirm,18557,Method
-SystemDiagnosticAlarmType_Confirm_InputArguments,18558,Variable
-SystemDiagnosticAlarmType_ActiveState,18559,Variable
-SystemDiagnosticAlarmType_ActiveState_Id,18560,Variable
-SystemDiagnosticAlarmType_ActiveState_Name,18561,Variable
-SystemDiagnosticAlarmType_ActiveState_Number,18562,Variable
-SystemDiagnosticAlarmType_ActiveState_EffectiveDisplayName,18563,Variable
-SystemDiagnosticAlarmType_ActiveState_TransitionTime,18564,Variable
-SystemDiagnosticAlarmType_ActiveState_EffectiveTransitionTime,18565,Variable
-SystemDiagnosticAlarmType_ActiveState_TrueState,18566,Variable
-SystemDiagnosticAlarmType_ActiveState_FalseState,18567,Variable
-SystemDiagnosticAlarmType_InputNode,18568,Variable
-SystemDiagnosticAlarmType_SuppressedState,18569,Variable
-SystemDiagnosticAlarmType_SuppressedState_Id,18570,Variable
-SystemDiagnosticAlarmType_SuppressedState_Name,18571,Variable
-SystemDiagnosticAlarmType_SuppressedState_Number,18572,Variable
-SystemDiagnosticAlarmType_SuppressedState_EffectiveDisplayName,18573,Variable
-SystemDiagnosticAlarmType_SuppressedState_TransitionTime,18574,Variable
-SystemDiagnosticAlarmType_SuppressedState_EffectiveTransitionTime,18575,Variable
-SystemDiagnosticAlarmType_SuppressedState_TrueState,18576,Variable
-SystemDiagnosticAlarmType_SuppressedState_FalseState,18577,Variable
-SystemDiagnosticAlarmType_OutOfServiceState,18578,Variable
-SystemDiagnosticAlarmType_OutOfServiceState_Id,18579,Variable
-SystemDiagnosticAlarmType_OutOfServiceState_Name,18580,Variable
-SystemDiagnosticAlarmType_OutOfServiceState_Number,18581,Variable
-SystemDiagnosticAlarmType_OutOfServiceState_EffectiveDisplayName,18582,Variable
-SystemDiagnosticAlarmType_OutOfServiceState_TransitionTime,18583,Variable
-SystemDiagnosticAlarmType_OutOfServiceState_EffectiveTransitionTime,18584,Variable
-SystemDiagnosticAlarmType_OutOfServiceState_TrueState,18585,Variable
-SystemDiagnosticAlarmType_OutOfServiceState_FalseState,18586,Variable
-SystemDiagnosticAlarmType_ShelvingState,18587,Object
-SystemDiagnosticAlarmType_ShelvingState_CurrentState,18588,Variable
-SystemDiagnosticAlarmType_ShelvingState_CurrentState_Id,18589,Variable
-SystemDiagnosticAlarmType_ShelvingState_CurrentState_Name,18590,Variable
-SystemDiagnosticAlarmType_ShelvingState_CurrentState_Number,18591,Variable
-SystemDiagnosticAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,18592,Variable
-SystemDiagnosticAlarmType_ShelvingState_LastTransition,18593,Variable
-SystemDiagnosticAlarmType_ShelvingState_LastTransition_Id,18594,Variable
-SystemDiagnosticAlarmType_ShelvingState_LastTransition_Name,18595,Variable
-SystemDiagnosticAlarmType_ShelvingState_LastTransition_Number,18596,Variable
-SystemDiagnosticAlarmType_ShelvingState_LastTransition_TransitionTime,18597,Variable
-SystemDiagnosticAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,18598,Variable
-SystemDiagnosticAlarmType_ShelvingState_AvailableStates,18599,Variable
-SystemDiagnosticAlarmType_ShelvingState_AvailableTransitions,18600,Variable
-SystemDiagnosticAlarmType_ShelvingState_UnshelveTime,18601,Variable
-SystemDiagnosticAlarmType_ShelvingState_TimedShelve,18602,Method
-SystemDiagnosticAlarmType_ShelvingState_TimedShelve_InputArguments,18603,Variable
-SystemDiagnosticAlarmType_ShelvingState_Unshelve,18604,Method
-SystemDiagnosticAlarmType_ShelvingState_OneShotShelve,18605,Method
-SystemDiagnosticAlarmType_SuppressedOrShelved,18606,Variable
-SystemDiagnosticAlarmType_MaxTimeShelved,18607,Variable
-SystemDiagnosticAlarmType_AudibleEnabled,18608,Variable
-SystemDiagnosticAlarmType_AudibleSound,18609,Variable
-SystemDiagnosticAlarmType_AudibleSound_ListId,18610,Variable
-SystemDiagnosticAlarmType_AudibleSound_AgencyId,18611,Variable
-SystemDiagnosticAlarmType_AudibleSound_VersionId,18612,Variable
-SystemDiagnosticAlarmType_SilenceState,18613,Variable
-SystemDiagnosticAlarmType_SilenceState_Id,18614,Variable
-SystemDiagnosticAlarmType_SilenceState_Name,18615,Variable
-SystemDiagnosticAlarmType_SilenceState_Number,18616,Variable
-SystemDiagnosticAlarmType_SilenceState_EffectiveDisplayName,18617,Variable
-SystemDiagnosticAlarmType_SilenceState_TransitionTime,18618,Variable
-SystemDiagnosticAlarmType_SilenceState_EffectiveTransitionTime,18619,Variable
-SystemDiagnosticAlarmType_SilenceState_TrueState,18620,Variable
-SystemDiagnosticAlarmType_SilenceState_FalseState,18621,Variable
-SystemDiagnosticAlarmType_OnDelay,18622,Variable
-SystemDiagnosticAlarmType_OffDelay,18623,Variable
-SystemDiagnosticAlarmType_FirstInGroupFlag,18624,Variable
-SystemDiagnosticAlarmType_FirstInGroup,18625,Object
-SystemDiagnosticAlarmType_LatchedState,18626,Variable
-SystemDiagnosticAlarmType_LatchedState_Id,18627,Variable
-SystemDiagnosticAlarmType_LatchedState_Name,18628,Variable
-SystemDiagnosticAlarmType_LatchedState_Number,18629,Variable
-SystemDiagnosticAlarmType_LatchedState_EffectiveDisplayName,18630,Variable
-SystemDiagnosticAlarmType_LatchedState_TransitionTime,18631,Variable
-SystemDiagnosticAlarmType_LatchedState_EffectiveTransitionTime,18632,Variable
-SystemDiagnosticAlarmType_LatchedState_TrueState,18633,Variable
-SystemDiagnosticAlarmType_LatchedState_FalseState,18634,Variable
-SystemDiagnosticAlarmType_AlarmGroup_Placeholder,18635,Object
-SystemDiagnosticAlarmType_ReAlarmTime,18636,Variable
-SystemDiagnosticAlarmType_ReAlarmRepeatCount,18637,Variable
-SystemDiagnosticAlarmType_Silence,18638,Method
-SystemDiagnosticAlarmType_Suppress,18639,Method
-SystemDiagnosticAlarmType_Unsuppress,18640,Method
-SystemDiagnosticAlarmType_RemoveFromService,18641,Method
-SystemDiagnosticAlarmType_PlaceInService,18642,Method
-SystemDiagnosticAlarmType_Reset,18643,Method
-SystemDiagnosticAlarmType_NormalState,18644,Variable
-CertificateExpirationAlarmType_LatchedState,18645,Variable
-CertificateExpirationAlarmType_LatchedState_Id,18646,Variable
-CertificateExpirationAlarmType_LatchedState_Name,18647,Variable
-CertificateExpirationAlarmType_LatchedState_Number,18648,Variable
-CertificateExpirationAlarmType_LatchedState_EffectiveDisplayName,18649,Variable
-CertificateExpirationAlarmType_LatchedState_TransitionTime,18650,Variable
-CertificateExpirationAlarmType_LatchedState_EffectiveTransitionTime,18651,Variable
-CertificateExpirationAlarmType_LatchedState_TrueState,18652,Variable
-CertificateExpirationAlarmType_LatchedState_FalseState,18653,Variable
-CertificateExpirationAlarmType_Reset,18654,Method
-DiscrepancyAlarmType_LatchedState,18655,Variable
-DiscrepancyAlarmType_LatchedState_Id,18656,Variable
-DiscrepancyAlarmType_LatchedState_Name,18657,Variable
-DiscrepancyAlarmType_LatchedState_Number,18658,Variable
-DiscrepancyAlarmType_LatchedState_EffectiveDisplayName,18659,Variable
-DiscrepancyAlarmType_LatchedState_TransitionTime,18660,Variable
-DiscrepancyAlarmType_LatchedState_EffectiveTransitionTime,18661,Variable
-DiscrepancyAlarmType_LatchedState_TrueState,18662,Variable
-DiscrepancyAlarmType_LatchedState_FalseState,18663,Variable
-DiscrepancyAlarmType_Reset,18664,Method
-StatisticalConditionClassType,18665,ObjectType
-AlarmMetricsType_Reset,18666,Method
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics,18667,Object
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_DiagnosticsLevel,18668,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation,18669,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_Active,18670,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_Classification,18671,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,18672,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,18673,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError,18674,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_Active,18675,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_Classification,18676,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,18677,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_TotalError_TimeFirstChange,18678,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Reset,18679,Method
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_SubError,18680,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters,18681,Object
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError,18682,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Active,18683,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_Classification,18684,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,18685,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,18686,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,18687,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,18688,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,18689,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,18690,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,18691,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent,18692,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,18693,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,18694,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,18695,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,18696,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError,18697,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,18698,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,18699,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,18700,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,18701,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent,18702,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,18703,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,18704,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,18705,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,18706,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,18707,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,18708,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,18709,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,18710,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,18711,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues,18712,Object
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress,18713,Variable
-PublishSubscribeType_ConnectionName_Placeholder_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel,18714,Variable
-PublishSubscribeType_Diagnostics,18715,Object
-PublishSubscribeType_Diagnostics_DiagnosticsLevel,18716,Variable
-PublishSubscribeType_Diagnostics_TotalInformation,18717,Variable
-PublishSubscribeType_Diagnostics_TotalInformation_Active,18718,Variable
-PublishSubscribeType_Diagnostics_TotalInformation_Classification,18719,Variable
-PublishSubscribeType_Diagnostics_TotalInformation_DiagnosticsLevel,18720,Variable
-PublishSubscribeType_Diagnostics_TotalInformation_TimeFirstChange,18721,Variable
-PublishSubscribeType_Diagnostics_TotalError,18722,Variable
-PublishSubscribeType_Diagnostics_TotalError_Active,18723,Variable
-PublishSubscribeType_Diagnostics_TotalError_Classification,18724,Variable
-PublishSubscribeType_Diagnostics_TotalError_DiagnosticsLevel,18725,Variable
-PublishSubscribeType_Diagnostics_TotalError_TimeFirstChange,18726,Variable
-PublishSubscribeType_Diagnostics_Reset,18727,Method
-PublishSubscribeType_Diagnostics_SubError,18728,Variable
-PublishSubscribeType_Diagnostics_Counters,18729,Object
-PublishSubscribeType_Diagnostics_Counters_StateError,18730,Variable
-PublishSubscribeType_Diagnostics_Counters_StateError_Active,18731,Variable
-PublishSubscribeType_Diagnostics_Counters_StateError_Classification,18732,Variable
-PublishSubscribeType_Diagnostics_Counters_StateError_DiagnosticsLevel,18733,Variable
-PublishSubscribeType_Diagnostics_Counters_StateError_TimeFirstChange,18734,Variable
-PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod,18735,Variable
-PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_Active,18736,Variable
-PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_Classification,18737,Variable
-PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,18738,Variable
-PublishSubscribeType_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,18739,Variable
-PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent,18740,Variable
-PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_Active,18741,Variable
-PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_Classification,18742,Variable
-PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,18743,Variable
-PublishSubscribeType_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,18744,Variable
-PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError,18745,Variable
-PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_Active,18746,Variable
-PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_Classification,18747,Variable
-PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,18748,Variable
-PublishSubscribeType_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,18749,Variable
-PublishSubscribeType_Diagnostics_Counters_StatePausedByParent,18750,Variable
-PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_Active,18751,Variable
-PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_Classification,18752,Variable
-PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,18753,Variable
-PublishSubscribeType_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,18754,Variable
-PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod,18755,Variable
-PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_Active,18756,Variable
-PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_Classification,18757,Variable
-PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,18758,Variable
-PublishSubscribeType_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,18759,Variable
-PublishSubscribeType_Diagnostics_LiveValues,18760,Object
-PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetWriters,18761,Variable
-PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel,18762,Variable
-PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetReaders,18763,Variable
-PublishSubscribeType_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel,18764,Variable
-PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetWriters,18765,Variable
-PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel,18766,Variable
-PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetReaders,18767,Variable
-PublishSubscribeType_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel,18768,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics,18871,Object
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel,18872,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation,18873,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active,18874,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification,18875,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,18876,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,18877,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError,18878,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active,18879,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification,18880,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,18881,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_TotalError_TimeFirstChange,18882,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Reset,18883,Method
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_SubError,18884,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters,18885,Object
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError,18886,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active,18887,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification,18888,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,18889,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,18890,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,18891,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,18892,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,18893,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,18894,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,18895,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent,18896,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,18897,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,18898,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,18899,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,18900,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError,18901,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,18902,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,18903,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,18904,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,18905,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent,18906,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,18907,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,18908,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,18909,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,18910,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,18911,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,18912,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,18913,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,18914,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,18915,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues,18916,Object
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages,18917,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active,18918,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification,18919,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel,18920,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_TimeFirstChange,18921,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber,18922,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel,18923,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode,18924,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel,18925,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion,18926,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel,18927,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion,18928,Variable
-PublishedDataSetType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel,18929,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics,18930,Object
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel,18931,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation,18932,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active,18933,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification,18934,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,18935,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,18936,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError,18937,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active,18938,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification,18939,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,18940,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_TimeFirstChange,18941,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Reset,18942,Method
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_SubError,18943,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters,18944,Object
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError,18945,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active,18946,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification,18947,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,18948,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,18949,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,18950,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,18951,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,18952,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,18953,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,18954,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent,18955,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,18956,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,18957,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,18958,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,18959,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError,18960,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,18961,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,18962,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,18963,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,18964,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent,18965,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,18966,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,18967,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,18968,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,18969,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,18970,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,18971,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,18972,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,18973,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,18974,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues,18975,Object
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages,18976,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active,18977,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification,18978,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel,18979,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_TimeFirstChange,18980,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber,18981,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel,18982,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode,18983,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel,18984,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion,18985,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel,18986,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion,18987,Variable
-PublishedDataItemsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel,18988,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics,18989,Object
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_DiagnosticsLevel,18990,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation,18991,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Active,18992,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_Classification,18993,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,18994,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,18995,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError,18996,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Active,18997,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_Classification,18998,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,18999,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_TotalError_TimeFirstChange,19000,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Reset,19001,Method
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_SubError,19002,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters,19003,Object
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError,19004,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Active,19005,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_Classification,19006,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,19007,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,19008,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,19009,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,19010,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,19011,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,19012,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,19013,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent,19014,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,19015,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,19016,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,19017,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,19018,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError,19019,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,19020,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,19021,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,19022,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,19023,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent,19024,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,19025,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,19026,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,19027,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,19028,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,19029,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,19030,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,19031,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,19032,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,19033,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues,19034,Object
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages,19035,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Active,19036,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_Classification,19037,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel,19038,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_Counters_FailedDataSetMessages_TimeFirstChange,19039,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber,19040,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel,19041,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode,19042,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel,19043,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion,19044,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel,19045,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion,19046,Variable
-PublishedEventsType_DataSetWriterName_Placeholder_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel,19047,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics,19107,Object
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_DiagnosticsLevel,19108,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation,19109,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_Active,19110,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_Classification,19111,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,19112,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,19113,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError,19114,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_Active,19115,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_Classification,19116,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,19117,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_TotalError_TimeFirstChange,19118,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Reset,19119,Method
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_SubError,19120,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters,19121,Object
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError,19122,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_Active,19123,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_Classification,19124,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,19125,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,19126,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,19127,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,19128,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,19129,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,19130,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,19131,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent,19132,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,19133,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,19134,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,19135,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,19136,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError,19137,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,19138,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,19139,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,19140,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,19141,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent,19142,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,19143,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,19144,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,19145,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,19146,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,19147,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,19148,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,19149,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,19150,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,19151,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues,19152,Object
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages,19153,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_Active,19154,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_Classification,19155,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_DiagnosticsLevel,19156,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_SentNetworkMessages_TimeFirstChange,19157,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions,19158,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_Active,19159,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_Classification,19160,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_DiagnosticsLevel,19161,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_FailedTransmissions_TimeFirstChange,19162,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors,19163,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_Active,19164,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_Classification,19165,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_DiagnosticsLevel,19166,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_Counters_EncryptionErrors_TimeFirstChange,19167,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetWriters,19168,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel,19169,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetWriters,19170,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetWriters_DiagnosticsLevel,19171,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_SecurityTokenID,19172,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel,19173,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID,19174,Variable
-PubSubConnectionType_WriterGroupName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel,19175,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics,19176,Object
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_DiagnosticsLevel,19177,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation,19178,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_Active,19179,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_Classification,19180,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_DiagnosticsLevel,19181,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalInformation_TimeFirstChange,19182,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError,19183,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_Active,19184,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_Classification,19185,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_DiagnosticsLevel,19186,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_TotalError_TimeFirstChange,19187,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Reset,19188,Method
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_SubError,19189,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters,19190,Object
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError,19191,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_Active,19192,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_Classification,19193,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_DiagnosticsLevel,19194,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateError_TimeFirstChange,19195,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod,19196,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Active,19197,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_Classification,19198,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,19199,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,19200,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent,19201,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Active,19202,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_Classification,19203,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,19204,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,19205,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError,19206,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Active,19207,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_Classification,19208,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,19209,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,19210,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent,19211,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Active,19212,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_Classification,19213,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,19214,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,19215,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod,19216,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Active,19217,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_Classification,19218,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,19219,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,19220,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues,19221,Object
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages,19222,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_Active,19223,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_Classification,19224,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_DiagnosticsLevel,19225,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedNetworkMessages_TimeFirstChange,19226,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages,19227,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Active,19228,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Classification,19229,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel,19230,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_ReceivedInvalidNetworkMessages_TimeFirstChange,19231,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors,19232,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_Active,19233,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_Classification,19234,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel,19235,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_Counters_DecryptionErrors_TimeFirstChange,19236,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetReaders,19237,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel,19238,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetReaders,19239,Variable
-PubSubConnectionType_ReaderGroupName_Placeholder_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel,19240,Variable
-PubSubConnectionType_Diagnostics,19241,Object
-PubSubConnectionType_Diagnostics_DiagnosticsLevel,19242,Variable
-PubSubConnectionType_Diagnostics_TotalInformation,19243,Variable
-PubSubConnectionType_Diagnostics_TotalInformation_Active,19244,Variable
-PubSubConnectionType_Diagnostics_TotalInformation_Classification,19245,Variable
-PubSubConnectionType_Diagnostics_TotalInformation_DiagnosticsLevel,19246,Variable
-PubSubConnectionType_Diagnostics_TotalInformation_TimeFirstChange,19247,Variable
-PubSubConnectionType_Diagnostics_TotalError,19248,Variable
-PubSubConnectionType_Diagnostics_TotalError_Active,19249,Variable
-PubSubConnectionType_Diagnostics_TotalError_Classification,19250,Variable
-PubSubConnectionType_Diagnostics_TotalError_DiagnosticsLevel,19251,Variable
-PubSubConnectionType_Diagnostics_TotalError_TimeFirstChange,19252,Variable
-PubSubConnectionType_Diagnostics_Reset,19253,Method
-PubSubConnectionType_Diagnostics_SubError,19254,Variable
-PubSubConnectionType_Diagnostics_Counters,19255,Object
-PubSubConnectionType_Diagnostics_Counters_StateError,19256,Variable
-PubSubConnectionType_Diagnostics_Counters_StateError_Active,19257,Variable
-PubSubConnectionType_Diagnostics_Counters_StateError_Classification,19258,Variable
-PubSubConnectionType_Diagnostics_Counters_StateError_DiagnosticsLevel,19259,Variable
-PubSubConnectionType_Diagnostics_Counters_StateError_TimeFirstChange,19260,Variable
-PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod,19261,Variable
-PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_Active,19262,Variable
-PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_Classification,19263,Variable
-PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,19264,Variable
-PubSubConnectionType_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,19265,Variable
-PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent,19266,Variable
-PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_Active,19267,Variable
-PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_Classification,19268,Variable
-PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,19269,Variable
-PubSubConnectionType_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,19270,Variable
-PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError,19271,Variable
-PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_Active,19272,Variable
-PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_Classification,19273,Variable
-PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,19274,Variable
-PubSubConnectionType_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,19275,Variable
-PubSubConnectionType_Diagnostics_Counters_StatePausedByParent,19276,Variable
-PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_Active,19277,Variable
-PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_Classification,19278,Variable
-PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,19279,Variable
-PubSubConnectionType_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,19280,Variable
-PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod,19281,Variable
-PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_Active,19282,Variable
-PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_Classification,19283,Variable
-PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,19284,Variable
-PubSubConnectionType_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,19285,Variable
-PubSubConnectionType_Diagnostics_LiveValues,19286,Object
-PubSubConnectionType_Diagnostics_LiveValues_ResolvedAddress,19287,Variable
-PubSubConnectionType_Diagnostics_LiveValues_ResolvedAddress_DiagnosticsLevel,19288,Variable
-DataSetWriterType_Diagnostics,19550,Object
-DataSetWriterType_Diagnostics_DiagnosticsLevel,19551,Variable
-DataSetWriterType_Diagnostics_TotalInformation,19552,Variable
-DataSetWriterType_Diagnostics_TotalInformation_Active,19553,Variable
-DataSetWriterType_Diagnostics_TotalInformation_Classification,19554,Variable
-DataSetWriterType_Diagnostics_TotalInformation_DiagnosticsLevel,19555,Variable
-DataSetWriterType_Diagnostics_TotalInformation_TimeFirstChange,19556,Variable
-DataSetWriterType_Diagnostics_TotalError,19557,Variable
-DataSetWriterType_Diagnostics_TotalError_Active,19558,Variable
-DataSetWriterType_Diagnostics_TotalError_Classification,19559,Variable
-DataSetWriterType_Diagnostics_TotalError_DiagnosticsLevel,19560,Variable
-DataSetWriterType_Diagnostics_TotalError_TimeFirstChange,19561,Variable
-DataSetWriterType_Diagnostics_Reset,19562,Method
-DataSetWriterType_Diagnostics_SubError,19563,Variable
-DataSetWriterType_Diagnostics_Counters,19564,Object
-DataSetWriterType_Diagnostics_Counters_StateError,19565,Variable
-DataSetWriterType_Diagnostics_Counters_StateError_Active,19566,Variable
-DataSetWriterType_Diagnostics_Counters_StateError_Classification,19567,Variable
-DataSetWriterType_Diagnostics_Counters_StateError_DiagnosticsLevel,19568,Variable
-DataSetWriterType_Diagnostics_Counters_StateError_TimeFirstChange,19569,Variable
-DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod,19570,Variable
-DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_Active,19571,Variable
-DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_Classification,19572,Variable
-DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,19573,Variable
-DataSetWriterType_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,19574,Variable
-DataSetWriterType_Diagnostics_Counters_StateOperationalByParent,19575,Variable
-DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_Active,19576,Variable
-DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_Classification,19577,Variable
-DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,19578,Variable
-DataSetWriterType_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,19579,Variable
-DataSetWriterType_Diagnostics_Counters_StateOperationalFromError,19580,Variable
-DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_Active,19581,Variable
-DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_Classification,19582,Variable
-DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,19583,Variable
-DataSetWriterType_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,19584,Variable
-DataSetWriterType_Diagnostics_Counters_StatePausedByParent,19585,Variable
-DataSetWriterType_Diagnostics_Counters_StatePausedByParent_Active,19586,Variable
-DataSetWriterType_Diagnostics_Counters_StatePausedByParent_Classification,19587,Variable
-DataSetWriterType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,19588,Variable
-DataSetWriterType_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,19589,Variable
-DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod,19590,Variable
-DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_Active,19591,Variable
-DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_Classification,19592,Variable
-DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,19593,Variable
-DataSetWriterType_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,19594,Variable
-DataSetWriterType_Diagnostics_LiveValues,19595,Object
-DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages,19596,Variable
-DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_Active,19597,Variable
-DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_Classification,19598,Variable
-DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel,19599,Variable
-DataSetWriterType_Diagnostics_Counters_FailedDataSetMessages_TimeFirstChange,19600,Variable
-DataSetWriterType_Diagnostics_LiveValues_MessageSequenceNumber,19601,Variable
-DataSetWriterType_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel,19602,Variable
-DataSetWriterType_Diagnostics_LiveValues_StatusCode,19603,Variable
-DataSetWriterType_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel,19604,Variable
-DataSetWriterType_Diagnostics_LiveValues_MajorVersion,19605,Variable
-DataSetWriterType_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel,19606,Variable
-DataSetWriterType_Diagnostics_LiveValues_MinorVersion,19607,Variable
-DataSetWriterType_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel,19608,Variable
-DataSetReaderType_Diagnostics,19609,Object
-DataSetReaderType_Diagnostics_DiagnosticsLevel,19610,Variable
-DataSetReaderType_Diagnostics_TotalInformation,19611,Variable
-DataSetReaderType_Diagnostics_TotalInformation_Active,19612,Variable
-DataSetReaderType_Diagnostics_TotalInformation_Classification,19613,Variable
-DataSetReaderType_Diagnostics_TotalInformation_DiagnosticsLevel,19614,Variable
-DataSetReaderType_Diagnostics_TotalInformation_TimeFirstChange,19615,Variable
-DataSetReaderType_Diagnostics_TotalError,19616,Variable
-DataSetReaderType_Diagnostics_TotalError_Active,19617,Variable
-DataSetReaderType_Diagnostics_TotalError_Classification,19618,Variable
-DataSetReaderType_Diagnostics_TotalError_DiagnosticsLevel,19619,Variable
-DataSetReaderType_Diagnostics_TotalError_TimeFirstChange,19620,Variable
-DataSetReaderType_Diagnostics_Reset,19621,Method
-DataSetReaderType_Diagnostics_SubError,19622,Variable
-DataSetReaderType_Diagnostics_Counters,19623,Object
-DataSetReaderType_Diagnostics_Counters_StateError,19624,Variable
-DataSetReaderType_Diagnostics_Counters_StateError_Active,19625,Variable
-DataSetReaderType_Diagnostics_Counters_StateError_Classification,19626,Variable
-DataSetReaderType_Diagnostics_Counters_StateError_DiagnosticsLevel,19627,Variable
-DataSetReaderType_Diagnostics_Counters_StateError_TimeFirstChange,19628,Variable
-DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod,19629,Variable
-DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_Active,19630,Variable
-DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_Classification,19631,Variable
-DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,19632,Variable
-DataSetReaderType_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,19633,Variable
-DataSetReaderType_Diagnostics_Counters_StateOperationalByParent,19634,Variable
-DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_Active,19635,Variable
-DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_Classification,19636,Variable
-DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,19637,Variable
-DataSetReaderType_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,19638,Variable
-DataSetReaderType_Diagnostics_Counters_StateOperationalFromError,19639,Variable
-DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_Active,19640,Variable
-DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_Classification,19641,Variable
-DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,19642,Variable
-DataSetReaderType_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,19643,Variable
-DataSetReaderType_Diagnostics_Counters_StatePausedByParent,19644,Variable
-DataSetReaderType_Diagnostics_Counters_StatePausedByParent_Active,19645,Variable
-DataSetReaderType_Diagnostics_Counters_StatePausedByParent_Classification,19646,Variable
-DataSetReaderType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,19647,Variable
-DataSetReaderType_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,19648,Variable
-DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod,19649,Variable
-DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_Active,19650,Variable
-DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_Classification,19651,Variable
-DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,19652,Variable
-DataSetReaderType_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,19653,Variable
-DataSetReaderType_Diagnostics_LiveValues,19654,Object
-DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages,19655,Variable
-DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_Active,19656,Variable
-DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_Classification,19657,Variable
-DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_DiagnosticsLevel,19658,Variable
-DataSetReaderType_Diagnostics_Counters_FailedDataSetMessages_TimeFirstChange,19659,Variable
-DataSetReaderType_Diagnostics_Counters_DecryptionErrors,19660,Variable
-DataSetReaderType_Diagnostics_Counters_DecryptionErrors_Active,19661,Variable
-DataSetReaderType_Diagnostics_Counters_DecryptionErrors_Classification,19662,Variable
-DataSetReaderType_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel,19663,Variable
-DataSetReaderType_Diagnostics_Counters_DecryptionErrors_TimeFirstChange,19664,Variable
-DataSetReaderType_Diagnostics_LiveValues_MessageSequenceNumber,19665,Variable
-DataSetReaderType_Diagnostics_LiveValues_MessageSequenceNumber_DiagnosticsLevel,19666,Variable
-DataSetReaderType_Diagnostics_LiveValues_StatusCode,19667,Variable
-DataSetReaderType_Diagnostics_LiveValues_StatusCode_DiagnosticsLevel,19668,Variable
-DataSetReaderType_Diagnostics_LiveValues_MajorVersion,19669,Variable
-DataSetReaderType_Diagnostics_LiveValues_MajorVersion_DiagnosticsLevel,19670,Variable
-DataSetReaderType_Diagnostics_LiveValues_MinorVersion,19671,Variable
-DataSetReaderType_Diagnostics_LiveValues_MinorVersion_DiagnosticsLevel,19672,Variable
-DataSetReaderType_Diagnostics_LiveValues_SecurityTokenID,19673,Variable
-DataSetReaderType_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel,19674,Variable
-DataSetReaderType_Diagnostics_LiveValues_TimeToNextTokenID,19675,Variable
-DataSetReaderType_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel,19676,Variable
-PubSubDiagnosticsType,19677,ObjectType
-PubSubDiagnosticsType_DiagnosticsLevel,19678,Variable
-PubSubDiagnosticsType_TotalInformation,19679,Variable
-PubSubDiagnosticsType_TotalInformation_Active,19680,Variable
-PubSubDiagnosticsType_TotalInformation_Classification,19681,Variable
-PubSubDiagnosticsType_TotalInformation_DiagnosticsLevel,19682,Variable
-PubSubDiagnosticsType_TotalInformation_TimeFirstChange,19683,Variable
-PubSubDiagnosticsType_TotalError,19684,Variable
-PubSubDiagnosticsType_TotalError_Active,19685,Variable
-PubSubDiagnosticsType_TotalError_Classification,19686,Variable
-PubSubDiagnosticsType_TotalError_DiagnosticsLevel,19687,Variable
-PubSubDiagnosticsType_TotalError_TimeFirstChange,19688,Variable
-PubSubDiagnosticsType_Reset,19689,Method
-PubSubDiagnosticsType_SubError,19690,Variable
-PubSubDiagnosticsType_Counters,19691,Object
-PubSubDiagnosticsType_Counters_StateError,19692,Variable
-PubSubDiagnosticsType_Counters_StateError_Active,19693,Variable
-PubSubDiagnosticsType_Counters_StateError_Classification,19694,Variable
-PubSubDiagnosticsType_Counters_StateError_DiagnosticsLevel,19695,Variable
-PubSubDiagnosticsType_Counters_StateError_TimeFirstChange,19696,Variable
-PubSubDiagnosticsType_Counters_StateOperationalByMethod,19697,Variable
-PubSubDiagnosticsType_Counters_StateOperationalByMethod_Active,19698,Variable
-PubSubDiagnosticsType_Counters_StateOperationalByMethod_Classification,19699,Variable
-PubSubDiagnosticsType_Counters_StateOperationalByMethod_DiagnosticsLevel,19700,Variable
-PubSubDiagnosticsType_Counters_StateOperationalByMethod_TimeFirstChange,19701,Variable
-PubSubDiagnosticsType_Counters_StateOperationalByParent,19702,Variable
-PubSubDiagnosticsType_Counters_StateOperationalByParent_Active,19703,Variable
-PubSubDiagnosticsType_Counters_StateOperationalByParent_Classification,19704,Variable
-PubSubDiagnosticsType_Counters_StateOperationalByParent_DiagnosticsLevel,19705,Variable
-PubSubDiagnosticsType_Counters_StateOperationalByParent_TimeFirstChange,19706,Variable
-PubSubDiagnosticsType_Counters_StateOperationalFromError,19707,Variable
-PubSubDiagnosticsType_Counters_StateOperationalFromError_Active,19708,Variable
-PubSubDiagnosticsType_Counters_StateOperationalFromError_Classification,19709,Variable
-PubSubDiagnosticsType_Counters_StateOperationalFromError_DiagnosticsLevel,19710,Variable
-PubSubDiagnosticsType_Counters_StateOperationalFromError_TimeFirstChange,19711,Variable
-PubSubDiagnosticsType_Counters_StatePausedByParent,19712,Variable
-PubSubDiagnosticsType_Counters_StatePausedByParent_Active,19713,Variable
-PubSubDiagnosticsType_Counters_StatePausedByParent_Classification,19714,Variable
-PubSubDiagnosticsType_Counters_StatePausedByParent_DiagnosticsLevel,19715,Variable
-PubSubDiagnosticsType_Counters_StatePausedByParent_TimeFirstChange,19716,Variable
-PubSubDiagnosticsType_Counters_StateDisabledByMethod,19717,Variable
-PubSubDiagnosticsType_Counters_StateDisabledByMethod_Active,19718,Variable
-PubSubDiagnosticsType_Counters_StateDisabledByMethod_Classification,19719,Variable
-PubSubDiagnosticsType_Counters_StateDisabledByMethod_DiagnosticsLevel,19720,Variable
-PubSubDiagnosticsType_Counters_StateDisabledByMethod_TimeFirstChange,19721,Variable
-PubSubDiagnosticsType_LiveValues,19722,Object
-DiagnosticsLevel,19723,DataType
-DiagnosticsLevel_EnumStrings,19724,Variable
-PubSubDiagnosticsCounterType,19725,VariableType
-PubSubDiagnosticsCounterType_Active,19726,Variable
-PubSubDiagnosticsCounterType_Classification,19727,Variable
-PubSubDiagnosticsCounterType_DiagnosticsLevel,19728,Variable
-PubSubDiagnosticsCounterType_TimeFirstChange,19729,Variable
-PubSubDiagnosticsCounterClassification,19730,DataType
-PubSubDiagnosticsCounterClassification_EnumStrings,19731,Variable
-PubSubDiagnosticsRootType,19732,ObjectType
-PubSubDiagnosticsRootType_DiagnosticsLevel,19733,Variable
-PubSubDiagnosticsRootType_TotalInformation,19734,Variable
-PubSubDiagnosticsRootType_TotalInformation_Active,19735,Variable
-PubSubDiagnosticsRootType_TotalInformation_Classification,19736,Variable
-PubSubDiagnosticsRootType_TotalInformation_DiagnosticsLevel,19737,Variable
-PubSubDiagnosticsRootType_TotalInformation_TimeFirstChange,19738,Variable
-PubSubDiagnosticsRootType_TotalError,19739,Variable
-PubSubDiagnosticsRootType_TotalError_Active,19740,Variable
-PubSubDiagnosticsRootType_TotalError_Classification,19741,Variable
-PubSubDiagnosticsRootType_TotalError_DiagnosticsLevel,19742,Variable
-PubSubDiagnosticsRootType_TotalError_TimeFirstChange,19743,Variable
-PubSubDiagnosticsRootType_Reset,19744,Method
-PubSubDiagnosticsRootType_SubError,19745,Variable
-PubSubDiagnosticsRootType_Counters,19746,Object
-PubSubDiagnosticsRootType_Counters_StateError,19747,Variable
-PubSubDiagnosticsRootType_Counters_StateError_Active,19748,Variable
-PubSubDiagnosticsRootType_Counters_StateError_Classification,19749,Variable
-PubSubDiagnosticsRootType_Counters_StateError_DiagnosticsLevel,19750,Variable
-PubSubDiagnosticsRootType_Counters_StateError_TimeFirstChange,19751,Variable
-PubSubDiagnosticsRootType_Counters_StateOperationalByMethod,19752,Variable
-PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_Active,19753,Variable
-PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_Classification,19754,Variable
-PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_DiagnosticsLevel,19755,Variable
-PubSubDiagnosticsRootType_Counters_StateOperationalByMethod_TimeFirstChange,19756,Variable
-PubSubDiagnosticsRootType_Counters_StateOperationalByParent,19757,Variable
-PubSubDiagnosticsRootType_Counters_StateOperationalByParent_Active,19758,Variable
-PubSubDiagnosticsRootType_Counters_StateOperationalByParent_Classification,19759,Variable
-PubSubDiagnosticsRootType_Counters_StateOperationalByParent_DiagnosticsLevel,19760,Variable
-PubSubDiagnosticsRootType_Counters_StateOperationalByParent_TimeFirstChange,19761,Variable
-PubSubDiagnosticsRootType_Counters_StateOperationalFromError,19762,Variable
-PubSubDiagnosticsRootType_Counters_StateOperationalFromError_Active,19763,Variable
-PubSubDiagnosticsRootType_Counters_StateOperationalFromError_Classification,19764,Variable
-PubSubDiagnosticsRootType_Counters_StateOperationalFromError_DiagnosticsLevel,19765,Variable
-PubSubDiagnosticsRootType_Counters_StateOperationalFromError_TimeFirstChange,19766,Variable
-PubSubDiagnosticsRootType_Counters_StatePausedByParent,19767,Variable
-PubSubDiagnosticsRootType_Counters_StatePausedByParent_Active,19768,Variable
-PubSubDiagnosticsRootType_Counters_StatePausedByParent_Classification,19769,Variable
-PubSubDiagnosticsRootType_Counters_StatePausedByParent_DiagnosticsLevel,19770,Variable
-PubSubDiagnosticsRootType_Counters_StatePausedByParent_TimeFirstChange,19771,Variable
-PubSubDiagnosticsRootType_Counters_StateDisabledByMethod,19772,Variable
-PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_Active,19773,Variable
-PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_Classification,19774,Variable
-PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_DiagnosticsLevel,19775,Variable
-PubSubDiagnosticsRootType_Counters_StateDisabledByMethod_TimeFirstChange,19776,Variable
-PubSubDiagnosticsRootType_LiveValues,19777,Object
-PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetWriters,19778,Variable
-PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel,19779,Variable
-PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetReaders,19780,Variable
-PubSubDiagnosticsRootType_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel,19781,Variable
-PubSubDiagnosticsRootType_LiveValues_OperationalDataSetWriters,19782,Variable
-PubSubDiagnosticsRootType_LiveValues_OperationalDataSetWriters_DiagnosticsLevel,19783,Variable
-PubSubDiagnosticsRootType_LiveValues_OperationalDataSetReaders,19784,Variable
-PubSubDiagnosticsRootType_LiveValues_OperationalDataSetReaders_DiagnosticsLevel,19785,Variable
-PubSubDiagnosticsConnectionType,19786,ObjectType
-PubSubDiagnosticsConnectionType_DiagnosticsLevel,19787,Variable
-PubSubDiagnosticsConnectionType_TotalInformation,19788,Variable
-PubSubDiagnosticsConnectionType_TotalInformation_Active,19789,Variable
-PubSubDiagnosticsConnectionType_TotalInformation_Classification,19790,Variable
-PubSubDiagnosticsConnectionType_TotalInformation_DiagnosticsLevel,19791,Variable
-PubSubDiagnosticsConnectionType_TotalInformation_TimeFirstChange,19792,Variable
-PubSubDiagnosticsConnectionType_TotalError,19793,Variable
-PubSubDiagnosticsConnectionType_TotalError_Active,19794,Variable
-PubSubDiagnosticsConnectionType_TotalError_Classification,19795,Variable
-PubSubDiagnosticsConnectionType_TotalError_DiagnosticsLevel,19796,Variable
-PubSubDiagnosticsConnectionType_TotalError_TimeFirstChange,19797,Variable
-PubSubDiagnosticsConnectionType_Reset,19798,Method
-PubSubDiagnosticsConnectionType_SubError,19799,Variable
-PubSubDiagnosticsConnectionType_Counters,19800,Object
-PubSubDiagnosticsConnectionType_Counters_StateError,19801,Variable
-PubSubDiagnosticsConnectionType_Counters_StateError_Active,19802,Variable
-PubSubDiagnosticsConnectionType_Counters_StateError_Classification,19803,Variable
-PubSubDiagnosticsConnectionType_Counters_StateError_DiagnosticsLevel,19804,Variable
-PubSubDiagnosticsConnectionType_Counters_StateError_TimeFirstChange,19805,Variable
-PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod,19806,Variable
-PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_Active,19807,Variable
-PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_Classification,19808,Variable
-PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_DiagnosticsLevel,19809,Variable
-PubSubDiagnosticsConnectionType_Counters_StateOperationalByMethod_TimeFirstChange,19810,Variable
-PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent,19811,Variable
-PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_Active,19812,Variable
-PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_Classification,19813,Variable
-PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_DiagnosticsLevel,19814,Variable
-PubSubDiagnosticsConnectionType_Counters_StateOperationalByParent_TimeFirstChange,19815,Variable
-PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError,19816,Variable
-PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_Active,19817,Variable
-PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_Classification,19818,Variable
-PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_DiagnosticsLevel,19819,Variable
-PubSubDiagnosticsConnectionType_Counters_StateOperationalFromError_TimeFirstChange,19820,Variable
-PubSubDiagnosticsConnectionType_Counters_StatePausedByParent,19821,Variable
-PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_Active,19822,Variable
-PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_Classification,19823,Variable
-PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_DiagnosticsLevel,19824,Variable
-PubSubDiagnosticsConnectionType_Counters_StatePausedByParent_TimeFirstChange,19825,Variable
-PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod,19826,Variable
-PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_Active,19827,Variable
-PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_Classification,19828,Variable
-PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_DiagnosticsLevel,19829,Variable
-PubSubDiagnosticsConnectionType_Counters_StateDisabledByMethod_TimeFirstChange,19830,Variable
-PubSubDiagnosticsConnectionType_LiveValues,19831,Object
-PubSubDiagnosticsConnectionType_LiveValues_ResolvedAddress,19832,Variable
-PubSubDiagnosticsConnectionType_LiveValues_ResolvedAddress_DiagnosticsLevel,19833,Variable
-PubSubDiagnosticsWriterGroupType,19834,ObjectType
-PubSubDiagnosticsWriterGroupType_DiagnosticsLevel,19835,Variable
-PubSubDiagnosticsWriterGroupType_TotalInformation,19836,Variable
-PubSubDiagnosticsWriterGroupType_TotalInformation_Active,19837,Variable
-PubSubDiagnosticsWriterGroupType_TotalInformation_Classification,19838,Variable
-PubSubDiagnosticsWriterGroupType_TotalInformation_DiagnosticsLevel,19839,Variable
-PubSubDiagnosticsWriterGroupType_TotalInformation_TimeFirstChange,19840,Variable
-PubSubDiagnosticsWriterGroupType_TotalError,19841,Variable
-PubSubDiagnosticsWriterGroupType_TotalError_Active,19842,Variable
-PubSubDiagnosticsWriterGroupType_TotalError_Classification,19843,Variable
-PubSubDiagnosticsWriterGroupType_TotalError_DiagnosticsLevel,19844,Variable
-PubSubDiagnosticsWriterGroupType_TotalError_TimeFirstChange,19845,Variable
-PubSubDiagnosticsWriterGroupType_Reset,19846,Method
-PubSubDiagnosticsWriterGroupType_SubError,19847,Variable
-PubSubDiagnosticsWriterGroupType_Counters,19848,Object
-PubSubDiagnosticsWriterGroupType_Counters_StateError,19849,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateError_Active,19850,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateError_Classification,19851,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateError_DiagnosticsLevel,19852,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateError_TimeFirstChange,19853,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod,19854,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_Active,19855,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_Classification,19856,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_DiagnosticsLevel,19857,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByMethod_TimeFirstChange,19858,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent,19859,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_Active,19860,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_Classification,19861,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_DiagnosticsLevel,19862,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateOperationalByParent_TimeFirstChange,19863,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError,19864,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_Active,19865,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_Classification,19866,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_DiagnosticsLevel,19867,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateOperationalFromError_TimeFirstChange,19868,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent,19869,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_Active,19870,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_Classification,19871,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_DiagnosticsLevel,19872,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StatePausedByParent_TimeFirstChange,19873,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod,19874,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_Active,19875,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_Classification,19876,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_DiagnosticsLevel,19877,Variable
-PubSubDiagnosticsWriterGroupType_Counters_StateDisabledByMethod_TimeFirstChange,19878,Variable
-PubSubDiagnosticsWriterGroupType_LiveValues,19879,Object
-PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages,19880,Variable
-PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_Active,19881,Variable
-PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_Classification,19882,Variable
-PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_DiagnosticsLevel,19883,Variable
-PubSubDiagnosticsWriterGroupType_Counters_SentNetworkMessages_TimeFirstChange,19884,Variable
-PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions,19885,Variable
-PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_Active,19886,Variable
-PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_Classification,19887,Variable
-PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_DiagnosticsLevel,19888,Variable
-PubSubDiagnosticsWriterGroupType_Counters_FailedTransmissions_TimeFirstChange,19889,Variable
-PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors,19890,Variable
-PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_Active,19891,Variable
-PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_Classification,19892,Variable
-PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_DiagnosticsLevel,19893,Variable
-PubSubDiagnosticsWriterGroupType_Counters_EncryptionErrors_TimeFirstChange,19894,Variable
-PubSubDiagnosticsWriterGroupType_LiveValues_ConfiguredDataSetWriters,19895,Variable
-PubSubDiagnosticsWriterGroupType_LiveValues_ConfiguredDataSetWriters_DiagnosticsLevel,19896,Variable
-PubSubDiagnosticsWriterGroupType_LiveValues_OperationalDataSetWriters,19897,Variable
-PubSubDiagnosticsWriterGroupType_LiveValues_OperationalDataSetWriters_DiagnosticsLevel,19898,Variable
-PubSubDiagnosticsWriterGroupType_LiveValues_SecurityTokenID,19899,Variable
-PubSubDiagnosticsWriterGroupType_LiveValues_SecurityTokenID_DiagnosticsLevel,19900,Variable
-PubSubDiagnosticsWriterGroupType_LiveValues_TimeToNextTokenID,19901,Variable
-PubSubDiagnosticsWriterGroupType_LiveValues_TimeToNextTokenID_DiagnosticsLevel,19902,Variable
-PubSubDiagnosticsReaderGroupType,19903,ObjectType
-PubSubDiagnosticsReaderGroupType_DiagnosticsLevel,19904,Variable
-PubSubDiagnosticsReaderGroupType_TotalInformation,19905,Variable
-PubSubDiagnosticsReaderGroupType_TotalInformation_Active,19906,Variable
-PubSubDiagnosticsReaderGroupType_TotalInformation_Classification,19907,Variable
-PubSubDiagnosticsReaderGroupType_TotalInformation_DiagnosticsLevel,19908,Variable
-PubSubDiagnosticsReaderGroupType_TotalInformation_TimeFirstChange,19909,Variable
-PubSubDiagnosticsReaderGroupType_TotalError,19910,Variable
-PubSubDiagnosticsReaderGroupType_TotalError_Active,19911,Variable
-PubSubDiagnosticsReaderGroupType_TotalError_Classification,19912,Variable
-PubSubDiagnosticsReaderGroupType_TotalError_DiagnosticsLevel,19913,Variable
-PubSubDiagnosticsReaderGroupType_TotalError_TimeFirstChange,19914,Variable
-PubSubDiagnosticsReaderGroupType_Reset,19915,Method
-PubSubDiagnosticsReaderGroupType_SubError,19916,Variable
-PubSubDiagnosticsReaderGroupType_Counters,19917,Object
-PubSubDiagnosticsReaderGroupType_Counters_StateError,19918,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateError_Active,19919,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateError_Classification,19920,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateError_DiagnosticsLevel,19921,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateError_TimeFirstChange,19922,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod,19923,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_Active,19924,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_Classification,19925,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_DiagnosticsLevel,19926,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByMethod_TimeFirstChange,19927,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent,19928,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_Active,19929,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_Classification,19930,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_DiagnosticsLevel,19931,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateOperationalByParent_TimeFirstChange,19932,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError,19933,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_Active,19934,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_Classification,19935,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_DiagnosticsLevel,19936,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateOperationalFromError_TimeFirstChange,19937,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent,19938,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_Active,19939,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_Classification,19940,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_DiagnosticsLevel,19941,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StatePausedByParent_TimeFirstChange,19942,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod,19943,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_Active,19944,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_Classification,19945,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_DiagnosticsLevel,19946,Variable
-PubSubDiagnosticsReaderGroupType_Counters_StateDisabledByMethod_TimeFirstChange,19947,Variable
-PubSubDiagnosticsReaderGroupType_LiveValues,19948,Object
-PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages,19949,Variable
-PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_Active,19950,Variable
-PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_Classification,19951,Variable
-PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_DiagnosticsLevel,19952,Variable
-PubSubDiagnosticsReaderGroupType_Counters_ReceivedNetworkMessages_TimeFirstChange,19953,Variable
-PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages,19954,Variable
-PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_Active,19955,Variable
-PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_Classification,19956,Variable
-PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel,19957,Variable
-PubSubDiagnosticsReaderGroupType_Counters_ReceivedInvalidNetworkMessages_TimeFirstChange,19958,Variable
-PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors,19959,Variable
-PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_Active,19960,Variable
-PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_Classification,19961,Variable
-PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_DiagnosticsLevel,19962,Variable
-PubSubDiagnosticsReaderGroupType_Counters_DecryptionErrors_TimeFirstChange,19963,Variable
-PubSubDiagnosticsReaderGroupType_LiveValues_ConfiguredDataSetReaders,19964,Variable
-PubSubDiagnosticsReaderGroupType_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel,19965,Variable
-PubSubDiagnosticsReaderGroupType_LiveValues_OperationalDataSetReaders,19966,Variable
-PubSubDiagnosticsReaderGroupType_LiveValues_OperationalDataSetReaders_DiagnosticsLevel,19967,Variable
-PubSubDiagnosticsDataSetWriterType,19968,ObjectType
-PubSubDiagnosticsDataSetWriterType_DiagnosticsLevel,19969,Variable
-PubSubDiagnosticsDataSetWriterType_TotalInformation,19970,Variable
-PubSubDiagnosticsDataSetWriterType_TotalInformation_Active,19971,Variable
-PubSubDiagnosticsDataSetWriterType_TotalInformation_Classification,19972,Variable
-PubSubDiagnosticsDataSetWriterType_TotalInformation_DiagnosticsLevel,19973,Variable
-PubSubDiagnosticsDataSetWriterType_TotalInformation_TimeFirstChange,19974,Variable
-PubSubDiagnosticsDataSetWriterType_TotalError,19975,Variable
-PubSubDiagnosticsDataSetWriterType_TotalError_Active,19976,Variable
-PubSubDiagnosticsDataSetWriterType_TotalError_Classification,19977,Variable
-PubSubDiagnosticsDataSetWriterType_TotalError_DiagnosticsLevel,19978,Variable
-PubSubDiagnosticsDataSetWriterType_TotalError_TimeFirstChange,19979,Variable
-PubSubDiagnosticsDataSetWriterType_Reset,19980,Method
-PubSubDiagnosticsDataSetWriterType_SubError,19981,Variable
-PubSubDiagnosticsDataSetWriterType_Counters,19982,Object
-PubSubDiagnosticsDataSetWriterType_Counters_StateError,19983,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateError_Active,19984,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateError_Classification,19985,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateError_DiagnosticsLevel,19986,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateError_TimeFirstChange,19987,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod,19988,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_Active,19989,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_Classification,19990,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_DiagnosticsLevel,19991,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByMethod_TimeFirstChange,19992,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent,19993,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_Active,19994,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_Classification,19995,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_DiagnosticsLevel,19996,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalByParent_TimeFirstChange,19997,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError,19998,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_Active,19999,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_Classification,20000,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_DiagnosticsLevel,20001,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateOperationalFromError_TimeFirstChange,20002,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent,20003,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_Active,20004,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_Classification,20005,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_DiagnosticsLevel,20006,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StatePausedByParent_TimeFirstChange,20007,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod,20008,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_Active,20009,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_Classification,20010,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_DiagnosticsLevel,20011,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_StateDisabledByMethod_TimeFirstChange,20012,Variable
-PubSubDiagnosticsDataSetWriterType_LiveValues,20013,Object
-PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages,20014,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_Active,20015,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_Classification,20016,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_DiagnosticsLevel,20017,Variable
-PubSubDiagnosticsDataSetWriterType_Counters_FailedDataSetMessages_TimeFirstChange,20018,Variable
-PubSubDiagnosticsDataSetWriterType_LiveValues_MessageSequenceNumber,20019,Variable
-PubSubDiagnosticsDataSetWriterType_LiveValues_MessageSequenceNumber_DiagnosticsLevel,20020,Variable
-PubSubDiagnosticsDataSetWriterType_LiveValues_StatusCode,20021,Variable
-PubSubDiagnosticsDataSetWriterType_LiveValues_StatusCode_DiagnosticsLevel,20022,Variable
-PubSubDiagnosticsDataSetWriterType_LiveValues_MajorVersion,20023,Variable
-PubSubDiagnosticsDataSetWriterType_LiveValues_MajorVersion_DiagnosticsLevel,20024,Variable
-PubSubDiagnosticsDataSetWriterType_LiveValues_MinorVersion,20025,Variable
-PubSubDiagnosticsDataSetWriterType_LiveValues_MinorVersion_DiagnosticsLevel,20026,Variable
-PubSubDiagnosticsDataSetReaderType,20027,ObjectType
-PubSubDiagnosticsDataSetReaderType_DiagnosticsLevel,20028,Variable
-PubSubDiagnosticsDataSetReaderType_TotalInformation,20029,Variable
-PubSubDiagnosticsDataSetReaderType_TotalInformation_Active,20030,Variable
-PubSubDiagnosticsDataSetReaderType_TotalInformation_Classification,20031,Variable
-PubSubDiagnosticsDataSetReaderType_TotalInformation_DiagnosticsLevel,20032,Variable
-PubSubDiagnosticsDataSetReaderType_TotalInformation_TimeFirstChange,20033,Variable
-PubSubDiagnosticsDataSetReaderType_TotalError,20034,Variable
-PubSubDiagnosticsDataSetReaderType_TotalError_Active,20035,Variable
-PubSubDiagnosticsDataSetReaderType_TotalError_Classification,20036,Variable
-PubSubDiagnosticsDataSetReaderType_TotalError_DiagnosticsLevel,20037,Variable
-PubSubDiagnosticsDataSetReaderType_TotalError_TimeFirstChange,20038,Variable
-PubSubDiagnosticsDataSetReaderType_Reset,20039,Method
-PubSubDiagnosticsDataSetReaderType_SubError,20040,Variable
-PubSubDiagnosticsDataSetReaderType_Counters,20041,Object
-PubSubDiagnosticsDataSetReaderType_Counters_StateError,20042,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateError_Active,20043,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateError_Classification,20044,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateError_DiagnosticsLevel,20045,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateError_TimeFirstChange,20046,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod,20047,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_Active,20048,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_Classification,20049,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_DiagnosticsLevel,20050,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByMethod_TimeFirstChange,20051,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent,20052,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_Active,20053,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_Classification,20054,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_DiagnosticsLevel,20055,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalByParent_TimeFirstChange,20056,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError,20057,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_Active,20058,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_Classification,20059,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_DiagnosticsLevel,20060,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateOperationalFromError_TimeFirstChange,20061,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent,20062,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_Active,20063,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_Classification,20064,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_DiagnosticsLevel,20065,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StatePausedByParent_TimeFirstChange,20066,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod,20067,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_Active,20068,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_Classification,20069,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_DiagnosticsLevel,20070,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_StateDisabledByMethod_TimeFirstChange,20071,Variable
-PubSubDiagnosticsDataSetReaderType_LiveValues,20072,Object
-PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages,20073,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_Active,20074,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_Classification,20075,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_DiagnosticsLevel,20076,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_FailedDataSetMessages_TimeFirstChange,20077,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors,20078,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_Active,20079,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_Classification,20080,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_DiagnosticsLevel,20081,Variable
-PubSubDiagnosticsDataSetReaderType_Counters_DecryptionErrors_TimeFirstChange,20082,Variable
-PubSubDiagnosticsDataSetReaderType_LiveValues_MessageSequenceNumber,20083,Variable
-PubSubDiagnosticsDataSetReaderType_LiveValues_MessageSequenceNumber_DiagnosticsLevel,20084,Variable
-PubSubDiagnosticsDataSetReaderType_LiveValues_StatusCode,20085,Variable
-PubSubDiagnosticsDataSetReaderType_LiveValues_StatusCode_DiagnosticsLevel,20086,Variable
-PubSubDiagnosticsDataSetReaderType_LiveValues_MajorVersion,20087,Variable
-PubSubDiagnosticsDataSetReaderType_LiveValues_MajorVersion_DiagnosticsLevel,20088,Variable
-PubSubDiagnosticsDataSetReaderType_LiveValues_MinorVersion,20089,Variable
-PubSubDiagnosticsDataSetReaderType_LiveValues_MinorVersion_DiagnosticsLevel,20090,Variable
-PubSubDiagnosticsDataSetReaderType_LiveValues_SecurityTokenID,20091,Variable
-PubSubDiagnosticsDataSetReaderType_LiveValues_SecurityTokenID_DiagnosticsLevel,20092,Variable
-PubSubDiagnosticsDataSetReaderType_LiveValues_TimeToNextTokenID,20093,Variable
-PubSubDiagnosticsDataSetReaderType_LiveValues_TimeToNextTokenID_DiagnosticsLevel,20094,Variable
-DataSetOrderingType,20408,DataType
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_SecurityTokenID,20409,Variable
-VersionTime,20998,DataType
-SessionlessInvokeResponseType,20999,DataType
-SessionlessInvokeResponseType_Encoding_DefaultXml,21000,Object
-SessionlessInvokeResponseType_Encoding_DefaultBinary,21001,Object
-OpcUa_BinarySchema_FieldTargetDataType,21002,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_SecurityTokenID_DiagnosticsLevel,21003,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID,21004,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_Diagnostics_LiveValues_TimeToNextTokenID_DiagnosticsLevel,21005,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_SubscribedDataSet,21006,Object
-ReaderGroupType_DataSetReaderName_Placeholder_CreateTargetVariables,21009,Method
-ReaderGroupType_DataSetReaderName_Placeholder_CreateTargetVariables_InputArguments,21010,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_CreateTargetVariables_OutputArguments,21011,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_CreateDataSetMirror,21012,Method
-ReaderGroupType_DataSetReaderName_Placeholder_CreateDataSetMirror_InputArguments,21013,Variable
-ReaderGroupType_DataSetReaderName_Placeholder_CreateDataSetMirror_OutputArguments,21014,Variable
-ReaderGroupType_Diagnostics,21015,Object
-ReaderGroupType_Diagnostics_DiagnosticsLevel,21016,Variable
-ReaderGroupType_Diagnostics_TotalInformation,21017,Variable
-ReaderGroupType_Diagnostics_TotalInformation_Active,21018,Variable
-ReaderGroupType_Diagnostics_TotalInformation_Classification,21019,Variable
-ReaderGroupType_Diagnostics_TotalInformation_DiagnosticsLevel,21020,Variable
-ReaderGroupType_Diagnostics_TotalInformation_TimeFirstChange,21021,Variable
-ReaderGroupType_Diagnostics_TotalError,21022,Variable
-ReaderGroupType_Diagnostics_TotalError_Active,21023,Variable
-ReaderGroupType_Diagnostics_TotalError_Classification,21024,Variable
-ReaderGroupType_Diagnostics_TotalError_DiagnosticsLevel,21025,Variable
-ReaderGroupType_Diagnostics_TotalError_TimeFirstChange,21026,Variable
-ReaderGroupType_Diagnostics_Reset,21027,Method
-ReaderGroupType_Diagnostics_SubError,21028,Variable
-ReaderGroupType_Diagnostics_Counters,21029,Object
-ReaderGroupType_Diagnostics_Counters_StateError,21030,Variable
-ReaderGroupType_Diagnostics_Counters_StateError_Active,21031,Variable
-ReaderGroupType_Diagnostics_Counters_StateError_Classification,21032,Variable
-ReaderGroupType_Diagnostics_Counters_StateError_DiagnosticsLevel,21033,Variable
-ReaderGroupType_Diagnostics_Counters_StateError_TimeFirstChange,21034,Variable
-ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod,21035,Variable
-ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_Active,21036,Variable
-ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_Classification,21037,Variable
-ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_DiagnosticsLevel,21038,Variable
-ReaderGroupType_Diagnostics_Counters_StateOperationalByMethod_TimeFirstChange,21039,Variable
-ReaderGroupType_Diagnostics_Counters_StateOperationalByParent,21040,Variable
-ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_Active,21041,Variable
-ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_Classification,21042,Variable
-ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_DiagnosticsLevel,21043,Variable
-ReaderGroupType_Diagnostics_Counters_StateOperationalByParent_TimeFirstChange,21044,Variable
-ReaderGroupType_Diagnostics_Counters_StateOperationalFromError,21045,Variable
-ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_Active,21046,Variable
-ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_Classification,21047,Variable
-ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_DiagnosticsLevel,21048,Variable
-ReaderGroupType_Diagnostics_Counters_StateOperationalFromError_TimeFirstChange,21049,Variable
-ReaderGroupType_Diagnostics_Counters_StatePausedByParent,21050,Variable
-ReaderGroupType_Diagnostics_Counters_StatePausedByParent_Active,21051,Variable
-ReaderGroupType_Diagnostics_Counters_StatePausedByParent_Classification,21052,Variable
-ReaderGroupType_Diagnostics_Counters_StatePausedByParent_DiagnosticsLevel,21053,Variable
-ReaderGroupType_Diagnostics_Counters_StatePausedByParent_TimeFirstChange,21054,Variable
-ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod,21055,Variable
-ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_Active,21056,Variable
-ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_Classification,21057,Variable
-ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_DiagnosticsLevel,21058,Variable
-ReaderGroupType_Diagnostics_Counters_StateDisabledByMethod_TimeFirstChange,21059,Variable
-ReaderGroupType_Diagnostics_LiveValues,21060,Object
-ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages,21061,Variable
-ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_Active,21062,Variable
-ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_Classification,21063,Variable
-ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_DiagnosticsLevel,21064,Variable
-ReaderGroupType_Diagnostics_Counters_ReceivedNetworkMessages_TimeFirstChange,21065,Variable
-ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages,21066,Variable
-ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Active,21067,Variable
-ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_Classification,21068,Variable
-ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_DiagnosticsLevel,21069,Variable
-ReaderGroupType_Diagnostics_Counters_ReceivedInvalidNetworkMessages_TimeFirstChange,21070,Variable
-ReaderGroupType_Diagnostics_Counters_DecryptionErrors,21071,Variable
-ReaderGroupType_Diagnostics_Counters_DecryptionErrors_Active,21072,Variable
-ReaderGroupType_Diagnostics_Counters_DecryptionErrors_Classification,21073,Variable
-ReaderGroupType_Diagnostics_Counters_DecryptionErrors_DiagnosticsLevel,21074,Variable
-ReaderGroupType_Diagnostics_Counters_DecryptionErrors_TimeFirstChange,21075,Variable
-ReaderGroupType_Diagnostics_LiveValues_ConfiguredDataSetReaders,21076,Variable
-ReaderGroupType_Diagnostics_LiveValues_ConfiguredDataSetReaders_DiagnosticsLevel,21077,Variable
-ReaderGroupType_Diagnostics_LiveValues_OperationalDataSetReaders,21078,Variable
-ReaderGroupType_Diagnostics_LiveValues_OperationalDataSetReaders_DiagnosticsLevel,21079,Variable
-ReaderGroupType_TransportSettings,21080,Object
-ReaderGroupType_MessageSettings,21081,Object
-ReaderGroupType_AddDataSetReader,21082,Method
-ReaderGroupType_AddDataSetReader_InputArguments,21083,Variable
-ReaderGroupType_AddDataSetReader_OutputArguments,21084,Variable
-ReaderGroupType_RemoveDataSetReader,21085,Method
-ReaderGroupType_RemoveDataSetReader_InputArguments,21086,Variable
-PubSubGroupTypeAddReaderMethodType,21087,Method
-PubSubGroupTypeAddReaderMethodType_InputArguments,21088,Variable
-PubSubGroupTypeAddReaderMethodType_OutputArguments,21089,Variable
-ReaderGroupTransportType,21090,ObjectType
-ReaderGroupMessageType,21091,ObjectType
-DataSetWriterType_DataSetWriterId,21092,Variable
-DataSetWriterType_DataSetFieldContentMask,21093,Variable
-DataSetWriterType_KeyFrameCount,21094,Variable
-DataSetWriterType_MessageSettings,21095,Object
-DataSetWriterMessageType,21096,ObjectType
-DataSetReaderType_PublisherId,21097,Variable
-DataSetReaderType_WriterGroupId,21098,Variable
-DataSetReaderType_DataSetWriterId,21099,Variable
-DataSetReaderType_DataSetMetaData,21100,Variable
-DataSetReaderType_DataSetFieldContentMask,21101,Variable
-DataSetReaderType_MessageReceiveTimeout,21102,Variable
-DataSetReaderType_MessageSettings,21103,Object
-DataSetReaderMessageType,21104,ObjectType
-UadpWriterGroupMessageType,21105,ObjectType
-UadpWriterGroupMessageType_GroupVersion,21106,Variable
-UadpWriterGroupMessageType_DataSetOrdering,21107,Variable
-UadpWriterGroupMessageType_NetworkMessageContentMask,21108,Variable
-UadpWriterGroupMessageType_SamplingOffset,21109,Variable
-UadpWriterGroupMessageType_PublishingOffset,21110,Variable
-UadpDataSetWriterMessageType,21111,ObjectType
-UadpDataSetWriterMessageType_DataSetMessageContentMask,21112,Variable
-UadpDataSetWriterMessageType_ConfiguredSize,21113,Variable
-UadpDataSetWriterMessageType_NetworkMessageNumber,21114,Variable
-UadpDataSetWriterMessageType_DataSetOffset,21115,Variable
-UadpDataSetReaderMessageType,21116,ObjectType
-UadpDataSetReaderMessageType_GroupVersion,21117,Variable
-UadpDataSetReaderMessageType_NetworkMessageNumber,21119,Variable
-UadpDataSetReaderMessageType_DataSetClassId,21120,Variable
-UadpDataSetReaderMessageType_NetworkMessageContentMask,21121,Variable
-UadpDataSetReaderMessageType_DataSetMessageContentMask,21122,Variable
-UadpDataSetReaderMessageType_PublishingInterval,21123,Variable
-UadpDataSetReaderMessageType_ProcessingOffset,21124,Variable
-UadpDataSetReaderMessageType_ReceiveOffset,21125,Variable
-JsonWriterGroupMessageType,21126,ObjectType
-JsonWriterGroupMessageType_NetworkMessageContentMask,21127,Variable
-JsonDataSetWriterMessageType,21128,ObjectType
-JsonDataSetWriterMessageType_DataSetMessageContentMask,21129,Variable
-JsonDataSetReaderMessageType,21130,ObjectType
-JsonDataSetReaderMessageType_NetworkMessageContentMask,21131,Variable
-JsonDataSetReaderMessageType_DataSetMessageContentMask,21132,Variable
-DatagramWriterGroupTransportType,21133,ObjectType
-DatagramWriterGroupTransportType_MessageRepeatCount,21134,Variable
-DatagramWriterGroupTransportType_MessageRepeatDelay,21135,Variable
-BrokerWriterGroupTransportType,21136,ObjectType
-BrokerWriterGroupTransportType_QueueName,21137,Variable
-BrokerDataSetWriterTransportType,21138,ObjectType
-BrokerDataSetWriterTransportType_QueueName,21139,Variable
-BrokerDataSetWriterTransportType_MetaDataQueueName,21140,Variable
-BrokerDataSetWriterTransportType_MetaDataUpdateTime,21141,Variable
-BrokerDataSetReaderTransportType,21142,ObjectType
-BrokerDataSetReaderTransportType_QueueName,21143,Variable
-BrokerDataSetReaderTransportType_MetaDataQueueName,21144,Variable
-NetworkAddressType,21145,ObjectType
-NetworkAddressType_NetworkInterface,21146,Variable
-NetworkAddressUrlType,21147,ObjectType
-NetworkAddressUrlType_NetworkInterface,21148,Variable
-NetworkAddressUrlType_Url,21149,Variable
-WriterGroupDataType_Encoding_DefaultBinary,21150,Object
-NetworkAddressDataType_Encoding_DefaultBinary,21151,Object
-NetworkAddressUrlDataType_Encoding_DefaultBinary,21152,Object
-ReaderGroupDataType_Encoding_DefaultBinary,21153,Object
-PubSubConfigurationDataType_Encoding_DefaultBinary,21154,Object
-DatagramWriterGroupTransportDataType_Encoding_DefaultBinary,21155,Object
-OpcUa_BinarySchema_WriterGroupDataType,21156,Variable
-OpcUa_BinarySchema_WriterGroupDataType_DataTypeVersion,21157,Variable
-OpcUa_BinarySchema_WriterGroupDataType_DictionaryFragment,21158,Variable
-OpcUa_BinarySchema_NetworkAddressDataType,21159,Variable
-OpcUa_BinarySchema_NetworkAddressDataType_DataTypeVersion,21160,Variable
-OpcUa_BinarySchema_NetworkAddressDataType_DictionaryFragment,21161,Variable
-OpcUa_BinarySchema_NetworkAddressUrlDataType,21162,Variable
-OpcUa_BinarySchema_NetworkAddressUrlDataType_DataTypeVersion,21163,Variable
-OpcUa_BinarySchema_NetworkAddressUrlDataType_DictionaryFragment,21164,Variable
-OpcUa_BinarySchema_ReaderGroupDataType,21165,Variable
-OpcUa_BinarySchema_ReaderGroupDataType_DataTypeVersion,21166,Variable
-OpcUa_BinarySchema_ReaderGroupDataType_DictionaryFragment,21167,Variable
-OpcUa_BinarySchema_PubSubConfigurationDataType,21168,Variable
-OpcUa_BinarySchema_PubSubConfigurationDataType_DataTypeVersion,21169,Variable
-OpcUa_BinarySchema_PubSubConfigurationDataType_DictionaryFragment,21170,Variable
-OpcUa_BinarySchema_DatagramWriterGroupTransportDataType,21171,Variable
-OpcUa_BinarySchema_DatagramWriterGroupTransportDataType_DataTypeVersion,21172,Variable
-OpcUa_BinarySchema_DatagramWriterGroupTransportDataType_DictionaryFragment,21173,Variable
-WriterGroupDataType_Encoding_DefaultXml,21174,Object
-NetworkAddressDataType_Encoding_DefaultXml,21175,Object
-NetworkAddressUrlDataType_Encoding_DefaultXml,21176,Object
-ReaderGroupDataType_Encoding_DefaultXml,21177,Object
-PubSubConfigurationDataType_Encoding_DefaultXml,21178,Object
-DatagramWriterGroupTransportDataType_Encoding_DefaultXml,21179,Object
-OpcUa_XmlSchema_WriterGroupDataType,21180,Variable
-OpcUa_XmlSchema_WriterGroupDataType_DataTypeVersion,21181,Variable
-OpcUa_XmlSchema_WriterGroupDataType_DictionaryFragment,21182,Variable
-OpcUa_XmlSchema_NetworkAddressDataType,21183,Variable
-OpcUa_XmlSchema_NetworkAddressDataType_DataTypeVersion,21184,Variable
-OpcUa_XmlSchema_NetworkAddressDataType_DictionaryFragment,21185,Variable
-OpcUa_XmlSchema_NetworkAddressUrlDataType,21186,Variable
-OpcUa_XmlSchema_NetworkAddressUrlDataType_DataTypeVersion,21187,Variable
-OpcUa_XmlSchema_NetworkAddressUrlDataType_DictionaryFragment,21188,Variable
-OpcUa_XmlSchema_ReaderGroupDataType,21189,Variable
-OpcUa_XmlSchema_ReaderGroupDataType_DataTypeVersion,21190,Variable
-OpcUa_XmlSchema_ReaderGroupDataType_DictionaryFragment,21191,Variable
-OpcUa_XmlSchema_PubSubConfigurationDataType,21192,Variable
-OpcUa_XmlSchema_PubSubConfigurationDataType_DataTypeVersion,21193,Variable
-OpcUa_XmlSchema_PubSubConfigurationDataType_DictionaryFragment,21194,Variable
-OpcUa_XmlSchema_DatagramWriterGroupTransportDataType,21195,Variable
-OpcUa_XmlSchema_DatagramWriterGroupTransportDataType_DataTypeVersion,21196,Variable
-OpcUa_XmlSchema_DatagramWriterGroupTransportDataType_DictionaryFragment,21197,Variable
-WriterGroupDataType_Encoding_DefaultJson,21198,Object
-NetworkAddressDataType_Encoding_DefaultJson,21199,Object
-NetworkAddressUrlDataType_Encoding_DefaultJson,21200,Object
-ReaderGroupDataType_Encoding_DefaultJson,21201,Object
-PubSubConfigurationDataType_Encoding_DefaultJson,21202,Object
-DatagramWriterGroupTransportDataType_Encoding_DefaultJson,21203,Object
diff --git a/ext/open62541/tools/schema/Opc.Ua.NodeSet2.EventsMinimal.xml b/ext/open62541/tools/schema/Opc.Ua.NodeSet2.EventsMinimal.xml
deleted file mode 100644
index 7ac5a2e..0000000
--- a/ext/open62541/tools/schema/Opc.Ua.NodeSet2.EventsMinimal.xml
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!--
- * Copyright (c) 2005-2018 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:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" LastModified="2019-01-31T00:00:00Z" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd">
-  <Models>
-    <Model ModelUri="http://opcfoundation.org/UA/" Version="1.04" PublicationDate="2019-01-31T00:00:00Z" />
-  </Models>
-  <UAObjectType NodeId="i=2041" BrowseName="BaseEventType" IsAbstract="true">
-    <DisplayName>BaseEventType</DisplayName>
-    <Description>The base type for all events.</Description>
-    <References>
-      <Reference ReferenceType="HasProperty">i=2042</Reference>
-      <Reference ReferenceType="HasProperty">i=2043</Reference>
-      <Reference ReferenceType="HasProperty">i=2044</Reference>
-      <Reference ReferenceType="HasProperty">i=2045</Reference>
-      <Reference ReferenceType="HasProperty">i=2046</Reference>
-      <Reference ReferenceType="HasProperty">i=2047</Reference>
-      <Reference ReferenceType="HasProperty">i=3190</Reference>
-      <Reference ReferenceType="HasProperty">i=2050</Reference>
-      <Reference ReferenceType="HasProperty">i=2051</Reference>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAVariable NodeId="i=2042" BrowseName="EventId" ParentNodeId="i=2041" DataType="ByteString">
-    <DisplayName>EventId</DisplayName>
-    <Description>A globally unique identifier for the event.</Description>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2041</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2043" BrowseName="EventType" ParentNodeId="i=2041" DataType="NodeId">
-    <DisplayName>EventType</DisplayName>
-    <Description>The identifier for the event type.</Description>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2041</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2044" BrowseName="SourceNode" ParentNodeId="i=2041" DataType="NodeId">
-    <DisplayName>SourceNode</DisplayName>
-    <Description>The source of the event.</Description>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2041</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2045" BrowseName="SourceName" ParentNodeId="i=2041" DataType="String">
-    <DisplayName>SourceName</DisplayName>
-    <Description>A description of the source of the event.</Description>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2041</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2046" BrowseName="Time" ParentNodeId="i=2041" DataType="i=294">
-    <DisplayName>Time</DisplayName>
-    <Description>When the event occurred.</Description>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2041</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2047" BrowseName="ReceiveTime" ParentNodeId="i=2041" DataType="i=294">
-    <DisplayName>ReceiveTime</DisplayName>
-    <Description>When the server received the event from the underlying system.</Description>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2041</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=3190" BrowseName="LocalTime" ParentNodeId="i=2041" DataType="i=8912">
-    <DisplayName>LocalTime</DisplayName>
-    <Description>Information about the local time where the event originated.</Description>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2041</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2050" BrowseName="Message" ParentNodeId="i=2041" DataType="LocalizedText">
-    <DisplayName>Message</DisplayName>
-    <Description>A localized description of the event.</Description>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2041</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2051" BrowseName="Severity" ParentNodeId="i=2041" DataType="UInt16">
-    <DisplayName>Severity</DisplayName>
-    <Description>Indicates how urgent an event is.</Description>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2041</Reference>
-    </References>
-  </UAVariable>
-  <UAObjectType NodeId="i=3035" BrowseName="EventQueueOverflowEventType" IsAbstract="true">
-    <DisplayName>EventQueueOverflowEventType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=2041</Reference>
-    </References>
-  </UAObjectType>
-  <UADataType NodeId="i=8912" BrowseName="TimeZoneDataType">
-    <DisplayName>TimeZoneDataType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-    </References>
-    <Definition Name="TimeZoneDataType">
-      <Field Name="Offset" DataType="i=4"/>
-      <Field Name="DaylightSavingInOffset" DataType="i=1"/>
-    </Definition>
-  </UADataType>
-</UANodeSet>
diff --git a/ext/open62541/tools/schema/Opc.Ua.NodeSet2.HistorizingMinimal.xml b/ext/open62541/tools/schema/Opc.Ua.NodeSet2.HistorizingMinimal.xml
deleted file mode 100644
index 5a48e45..0000000
--- a/ext/open62541/tools/schema/Opc.Ua.NodeSet2.HistorizingMinimal.xml
+++ /dev/null
@@ -1,168 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!--
- * Copyright (c) 2005-2018 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:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" LastModified="2019-01-31T00:00:00Z" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd">
-  <Models>
-    <Model ModelUri="http://opcfoundation.org/UA/" Version="1.04" PublicationDate="2019-01-31T00:00:00Z" />
-  </Models>
-  <UAObjectType NodeId="i=2330" BrowseName="HistoryServerCapabilitiesType">
-    <DisplayName>HistoryServerCapabilitiesType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAObject NodeId="i=11192" BrowseName="HistoryServerCapabilities">
-    <DisplayName>HistoryServerCapabilities</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=11193</Reference>
-      <Reference ReferenceType="HasProperty">i=11242</Reference>
-      <Reference ReferenceType="HasProperty">i=11273</Reference>
-      <Reference ReferenceType="HasProperty">i=11274</Reference>
-      <Reference ReferenceType="HasProperty">i=11196</Reference>
-      <Reference ReferenceType="HasProperty">i=11197</Reference>
-      <Reference ReferenceType="HasProperty">i=11198</Reference>
-      <Reference ReferenceType="HasProperty">i=11199</Reference>
-      <Reference ReferenceType="HasProperty">i=11200</Reference>
-      <Reference ReferenceType="HasProperty">i=11281</Reference>
-      <Reference ReferenceType="HasProperty">i=11282</Reference>
-      <Reference ReferenceType="HasProperty">i=11283</Reference>
-      <Reference ReferenceType="HasProperty">i=11502</Reference>
-      <Reference ReferenceType="HasProperty">i=11275</Reference>
-      <Reference ReferenceType="HasComponent">i=11201</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2268</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=2330</Reference>
-    </References>
-  </UAObject>
-  <UAVariable NodeId="i=11193" BrowseName="AccessHistoryDataCapability" ParentNodeId="i=11192" DataType="Boolean">
-    <DisplayName>AccessHistoryDataCapability</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11192</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11242" BrowseName="AccessHistoryEventsCapability" ParentNodeId="i=11192" DataType="Boolean">
-    <DisplayName>AccessHistoryEventsCapability</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11192</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11273" BrowseName="MaxReturnDataValues" ParentNodeId="i=11192" DataType="UInt32">
-    <DisplayName>MaxReturnDataValues</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11192</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11274" BrowseName="MaxReturnEventValues" ParentNodeId="i=11192" DataType="UInt32">
-    <DisplayName>MaxReturnEventValues</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11192</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11196" BrowseName="InsertDataCapability" ParentNodeId="i=11192" DataType="Boolean">
-    <DisplayName>InsertDataCapability</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11192</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11197" BrowseName="ReplaceDataCapability" ParentNodeId="i=11192" DataType="Boolean">
-    <DisplayName>ReplaceDataCapability</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11192</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11198" BrowseName="UpdateDataCapability" ParentNodeId="i=11192" DataType="Boolean">
-    <DisplayName>UpdateDataCapability</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11192</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11199" BrowseName="DeleteRawCapability" ParentNodeId="i=11192" DataType="Boolean">
-    <DisplayName>DeleteRawCapability</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11192</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11200" BrowseName="DeleteAtTimeCapability" ParentNodeId="i=11192" DataType="Boolean">
-    <DisplayName>DeleteAtTimeCapability</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11192</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11281" BrowseName="InsertEventCapability" ParentNodeId="i=11192" DataType="Boolean">
-    <DisplayName>InsertEventCapability</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11192</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11282" BrowseName="ReplaceEventCapability" ParentNodeId="i=11192" DataType="Boolean">
-    <DisplayName>ReplaceEventCapability</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11192</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11283" BrowseName="UpdateEventCapability" ParentNodeId="i=11192" DataType="Boolean">
-    <DisplayName>UpdateEventCapability</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11192</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11502" BrowseName="DeleteEventCapability" ParentNodeId="i=11192" DataType="Boolean">
-    <DisplayName>DeleteEventCapability</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11192</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11275" BrowseName="InsertAnnotationCapability" ParentNodeId="i=11192" DataType="Boolean">
-    <DisplayName>InsertAnnotationCapability</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11192</Reference>
-    </References>
-  </UAVariable>
-  <UAObject NodeId="i=11201" BrowseName="AggregateFunctions" ParentNodeId="i=11192">
-    <DisplayName>AggregateFunctions</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=11192</Reference>
-    </References>
-  </UAObject>
-</UANodeSet>
diff --git a/ext/open62541/tools/schema/Opc.Ua.NodeSet2.Minimal.xml b/ext/open62541/tools/schema/Opc.Ua.NodeSet2.Minimal.xml
deleted file mode 100644
index d2cf8b0..0000000
--- a/ext/open62541/tools/schema/Opc.Ua.NodeSet2.Minimal.xml
+++ /dev/null
@@ -1,1743 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!--
- * Copyright (c) 2005-2019 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:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" LastModified="2019-05-01T00:00:00Z" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd">
-  <Models>
-    <Model ModelUri="http://opcfoundation.org/UA/" Version="1.04" PublicationDate="2019-05-01T00: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>
-  </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>
-    <References />
-  </UADataType>
-  <UADataType NodeId="i=26" BrowseName="Number" IsAbstract="true">
-    <DisplayName>Number</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=27" BrowseName="Integer" IsAbstract="true">
-    <DisplayName>Integer</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=26</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=28" BrowseName="UInteger" IsAbstract="true">
-    <DisplayName>UInteger</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=26</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=29" BrowseName="Enumeration" IsAbstract="true">
-    <DisplayName>Enumeration</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=1" BrowseName="Boolean">
-    <DisplayName>Boolean</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=2" BrowseName="SByte">
-    <DisplayName>SByte</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=27</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=3" BrowseName="Byte">
-    <DisplayName>Byte</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=28</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=4" BrowseName="Int16">
-    <DisplayName>Int16</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=27</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=5" BrowseName="UInt16">
-    <DisplayName>UInt16</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=28</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=6" BrowseName="Int32">
-    <DisplayName>Int32</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=27</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=7" BrowseName="UInt32">
-    <DisplayName>UInt32</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=28</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=8" BrowseName="Int64">
-    <DisplayName>Int64</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=27</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=9" BrowseName="UInt64">
-    <DisplayName>UInt64</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=28</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=10" BrowseName="Float">
-    <DisplayName>Float</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=26</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=11" BrowseName="Double">
-    <DisplayName>Double</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=26</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=12" BrowseName="String">
-    <DisplayName>String</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=13" BrowseName="DateTime">
-    <DisplayName>DateTime</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=14" BrowseName="Guid">
-    <DisplayName>Guid</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=15" BrowseName="ByteString">
-    <DisplayName>ByteString</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=16" BrowseName="XmlElement">
-    <DisplayName>XmlElement</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=17" BrowseName="NodeId">
-    <DisplayName>NodeId</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=18" BrowseName="ExpandedNodeId">
-    <DisplayName>ExpandedNodeId</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=19" BrowseName="StatusCode">
-    <DisplayName>StatusCode</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=20" BrowseName="QualifiedName">
-    <DisplayName>QualifiedName</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=21" BrowseName="LocalizedText">
-    <DisplayName>LocalizedText</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=22" BrowseName="Structure" IsAbstract="true">
-    <DisplayName>Structure</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=23" BrowseName="DataValue">
-    <DisplayName>DataValue</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=25" BrowseName="DiagnosticInfo">
-    <DisplayName>DiagnosticInfo</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=30" BrowseName="Image" IsAbstract="true">
-    <DisplayName>Image</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=15</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=50" BrowseName="Decimal">
-    <DisplayName>Decimal</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=26</Reference>
-    </References>
-  </UADataType>
-  <UAReferenceType NodeId="i=31" BrowseName="References" IsAbstract="true" Symmetric="true">
-    <DisplayName>References</DisplayName>
-    <References />
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=32" BrowseName="NonHierarchicalReferences" IsAbstract="true">
-    <DisplayName>NonHierarchicalReferences</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=31</Reference>
-    </References>
-    <InverseName>NonHierarchicalReferences</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=33" BrowseName="HierarchicalReferences" IsAbstract="true">
-    <DisplayName>HierarchicalReferences</DisplayName>
-    <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>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=33</Reference>
-    </References>
-    <InverseName>ChildOf</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=35" BrowseName="Organizes">
-    <DisplayName>Organizes</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=33</Reference>
-    </References>
-    <InverseName>OrganizedBy</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=36" BrowseName="HasEventSource">
-    <DisplayName>HasEventSource</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=33</Reference>
-    </References>
-    <InverseName>EventSourceOf</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=37" BrowseName="HasModellingRule">
-    <DisplayName>HasModellingRule</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
-    </References>
-    <InverseName>ModellingRuleOf</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=38" BrowseName="HasEncoding">
-    <DisplayName>HasEncoding</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
-    </References>
-    <InverseName>EncodingOf</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=39" BrowseName="HasDescription">
-    <DisplayName>HasDescription</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
-    </References>
-    <InverseName>DescriptionOf</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=40" BrowseName="HasTypeDefinition">
-    <DisplayName>HasTypeDefinition</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
-    </References>
-    <InverseName>TypeDefinitionOf</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=41" BrowseName="GeneratesEvent">
-    <DisplayName>GeneratesEvent</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
-    </References>
-    <InverseName>GeneratedBy</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=44" BrowseName="Aggregates" IsAbstract="true">
-    <DisplayName>Aggregates</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=34</Reference>
-    </References>
-    <InverseName>AggregatedBy</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=45" BrowseName="HasSubtype">
-    <DisplayName>HasSubtype</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=34</Reference>
-    </References>
-    <InverseName>SubtypeOf</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=46" BrowseName="HasProperty">
-    <DisplayName>HasProperty</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=44</Reference>
-    </References>
-    <InverseName>PropertyOf</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=47" BrowseName="HasComponent">
-    <DisplayName>HasComponent</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=44</Reference>
-    </References>
-    <InverseName>ComponentOf</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=48" BrowseName="HasNotifier">
-    <DisplayName>HasNotifier</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=36</Reference>
-    </References>
-    <InverseName>NotifierOf</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=49" BrowseName="HasOrderedComponent">
-    <DisplayName>HasOrderedComponent</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=47</Reference>
-    </References>
-    <InverseName>OrderedComponentOf</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=51" BrowseName="FromState">
-    <DisplayName>FromState</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
-    </References>
-    <InverseName>ToTransition</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=52" BrowseName="ToState">
-    <DisplayName>ToState</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
-    </References>
-    <InverseName>FromTransition</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=53" BrowseName="HasCause">
-    <DisplayName>HasCause</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
-    </References>
-    <InverseName>MayBeCausedBy</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=54" BrowseName="HasEffect">
-    <DisplayName>HasEffect</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
-    </References>
-    <InverseName>MayBeEffectedBy</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=56" BrowseName="HasHistoricalConfiguration">
-    <DisplayName>HasHistoricalConfiguration</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=44</Reference>
-    </References>
-    <InverseName>HistoricalConfigurationOf</InverseName>
-  </UAReferenceType>
-  <UAObjectType NodeId="i=58" BrowseName="BaseObjectType">
-    <DisplayName>BaseObjectType</DisplayName>
-    <References />
-  </UAObjectType>
-  <UAObjectType NodeId="i=61" BrowseName="FolderType">
-    <DisplayName>FolderType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAVariableType NodeId="i=62" BrowseName="BaseVariableType" IsAbstract="true" ValueRank="-2">
-    <DisplayName>BaseVariableType</DisplayName>
-    <References />
-  </UAVariableType>
-  <UAVariableType NodeId="i=63" BrowseName="BaseDataVariableType" ValueRank="-2">
-    <DisplayName>BaseDataVariableType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=62</Reference>
-    </References>
-  </UAVariableType>
-  <UAVariableType NodeId="i=68" BrowseName="PropertyType" ValueRank="-2">
-    <DisplayName>PropertyType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=62</Reference>
-    </References>
-  </UAVariableType>
-  <UAVariableType NodeId="i=69" BrowseName="DataTypeDescriptionType" DataType="String">
-    <DisplayName>DataTypeDescriptionType</DisplayName>
-    <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" 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" 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" DataType="ByteString">
-    <DisplayName>DataTypeDictionaryType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=106</Reference>
-      <Reference ReferenceType="HasProperty">i=107</Reference>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=63</Reference>
-    </References>
-  </UAVariableType>
-  <UAVariable NodeId="i=106" BrowseName="DataTypeVersion" 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" ParentNodeId="i=72" DataType="String">
-    <DisplayName>NamespaceUri</DisplayName>
-    <Description>A URI that uniquely identifies the dictionary.</Description>
-    <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">
-    <DisplayName>DataTypeSystemType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAObjectType NodeId="i=76" BrowseName="DataTypeEncodingType">
-    <DisplayName>DataTypeEncodingType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UADataType NodeId="i=120" BrowseName="NamingRuleType">
-    <DisplayName>NamingRuleType</DisplayName>
-    <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="HasModellingRule">i=78</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>
-                <Locale>
-                </Locale>
-                <Text>Mandatory</Text>
-              </DisplayName>
-              <Description>
-                <Locale>
-                </Locale>
-                <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>
-                <Locale>
-                </Locale>
-                <Text>Optional</Text>
-              </DisplayName>
-              <Description>
-                <Locale>
-                </Locale>
-                <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>
-                <Locale>
-                </Locale>
-                <Text>Constraint</Text>
-              </DisplayName>
-              <Description>
-                <Locale>
-                </Locale>
-                <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>
-    <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>
-    <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>
-    <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=84" BrowseName="Root" SymbolicName="RootFolder">
-    <DisplayName>Root</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
-    </References>
-  </UAObject>
-  <UAObject NodeId="i=85" BrowseName="Objects" SymbolicName="ObjectsFolder">
-    <DisplayName>Objects</DisplayName>
-    <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>
-    <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>
-    <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>
-    <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>
-    <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>
-    <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>
-    <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">
-    <DisplayName>XML Schema</DisplayName>
-    <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">
-    <DisplayName>OPC Binary</DisplayName>
-    <References>
-      <Reference ReferenceType="Organizes" IsForward="false">i=90</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=75</Reference>
-    </References>
-  </UAObject>
-  <UAObjectType NodeId="i=2004" BrowseName="ServerType">
-    <DisplayName>ServerType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <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>
-  <UAObjectType NodeId="i=2013" BrowseName="ServerCapabilitiesType">
-    <DisplayName>ServerCapabilitiesType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAObject NodeId="i=11551" BrowseName="OperationLimits" ParentNodeId="i=2013">
-    <DisplayName>OperationLimits</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=11564</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2013</Reference>
-    </References>
-  </UAObject>
-  <UAObjectType NodeId="i=2020" BrowseName="ServerDiagnosticsType">
-    <DisplayName>ServerDiagnosticsType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAObjectType NodeId="i=2033" BrowseName="VendorServerInfoType">
-    <DisplayName>VendorServerInfoType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAObjectType NodeId="i=2034" BrowseName="ServerRedundancyType">
-    <DisplayName>ServerRedundancyType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=2035</Reference>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAVariable NodeId="i=2035" BrowseName="RedundancySupport" ParentNodeId="i=2034" 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=2034</Reference>
-    </References>
-  </UAVariable>
-  <UAObjectType NodeId="i=11564" BrowseName="OperationLimitsType">
-    <DisplayName>OperationLimitsType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=11565</Reference>
-      <Reference ReferenceType="HasProperty">i=11567</Reference>
-      <Reference ReferenceType="HasProperty">i=11569</Reference>
-      <Reference ReferenceType="HasProperty">i=11570</Reference>
-      <Reference ReferenceType="HasProperty">i=11571</Reference>
-      <Reference ReferenceType="HasProperty">i=11572</Reference>
-      <Reference ReferenceType="HasProperty">i=11573</Reference>
-      <Reference ReferenceType="HasProperty">i=11574</Reference>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=61</Reference>
-    </References>
-  </UAObjectType>
-  <UAVariable NodeId="i=11565" BrowseName="MaxNodesPerRead" ParentNodeId="i=11564" DataType="UInt32">
-    <DisplayName>MaxNodesPerRead</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11564</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11567" BrowseName="MaxNodesPerWrite" ParentNodeId="i=11564" DataType="UInt32">
-    <DisplayName>MaxNodesPerWrite</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11564</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11569" BrowseName="MaxNodesPerMethodCall" ParentNodeId="i=11564" DataType="UInt32">
-    <DisplayName>MaxNodesPerMethodCall</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11564</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11570" BrowseName="MaxNodesPerBrowse" ParentNodeId="i=11564" DataType="UInt32">
-    <DisplayName>MaxNodesPerBrowse</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11564</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11571" BrowseName="MaxNodesPerRegisterNodes" ParentNodeId="i=11564" DataType="UInt32">
-    <DisplayName>MaxNodesPerRegisterNodes</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11564</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11572" BrowseName="MaxNodesPerTranslateBrowsePathsToNodeIds" ParentNodeId="i=11564" DataType="UInt32">
-    <DisplayName>MaxNodesPerTranslateBrowsePathsToNodeIds</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11564</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11573" BrowseName="MaxNodesPerNodeManagement" ParentNodeId="i=11564" DataType="UInt32">
-    <DisplayName>MaxNodesPerNodeManagement</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11564</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11574" BrowseName="MaxMonitoredItemsPerCall" ParentNodeId="i=11564" DataType="UInt32">
-    <DisplayName>MaxMonitoredItemsPerCall</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11564</Reference>
-    </References>
-  </UAVariable>
-  <UAVariableType NodeId="i=2138" BrowseName="ServerStatusType" DataType="i=862">
-    <DisplayName>ServerStatusType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=63</Reference>
-    </References>
-  </UAVariableType>
-  <UAVariableType NodeId="i=3051" BrowseName="BuildInfoType" DataType="i=338">
-    <DisplayName>BuildInfoType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=63</Reference>
-    </References>
-  </UAVariableType>
-  <UAVariableType NodeId="i=2150" BrowseName="ServerDiagnosticsSummaryType" DataType="i=859">
-    <DisplayName>ServerDiagnosticsSummaryType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasComponent">i=2151</Reference>
-      <Reference ReferenceType="HasComponent">i=2152</Reference>
-      <Reference ReferenceType="HasComponent">i=2153</Reference>
-      <Reference ReferenceType="HasComponent">i=2154</Reference>
-      <Reference ReferenceType="HasComponent">i=2155</Reference>
-      <Reference ReferenceType="HasComponent">i=2156</Reference>
-      <Reference ReferenceType="HasComponent">i=2157</Reference>
-      <Reference ReferenceType="HasComponent">i=2159</Reference>
-      <Reference ReferenceType="HasComponent">i=2160</Reference>
-      <Reference ReferenceType="HasComponent">i=2161</Reference>
-      <Reference ReferenceType="HasComponent">i=2162</Reference>
-      <Reference ReferenceType="HasComponent">i=2163</Reference>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=63</Reference>
-    </References>
-  </UAVariableType>
-  <UAVariable NodeId="i=2151" BrowseName="ServerViewCount" ParentNodeId="i=2150" DataType="UInt32">
-    <DisplayName>ServerViewCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2150</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2152" BrowseName="CurrentSessionCount" ParentNodeId="i=2150" DataType="UInt32">
-    <DisplayName>CurrentSessionCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2150</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2153" BrowseName="CumulatedSessionCount" ParentNodeId="i=2150" DataType="UInt32">
-    <DisplayName>CumulatedSessionCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2150</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2154" BrowseName="SecurityRejectedSessionCount" ParentNodeId="i=2150" DataType="UInt32">
-    <DisplayName>SecurityRejectedSessionCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2150</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2155" BrowseName="RejectedSessionCount" ParentNodeId="i=2150" DataType="UInt32">
-    <DisplayName>RejectedSessionCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2150</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2156" BrowseName="SessionTimeoutCount" ParentNodeId="i=2150" DataType="UInt32">
-    <DisplayName>SessionTimeoutCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2150</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2157" BrowseName="SessionAbortCount" ParentNodeId="i=2150" DataType="UInt32">
-    <DisplayName>SessionAbortCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2150</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2159" BrowseName="PublishingIntervalCount" ParentNodeId="i=2150" DataType="UInt32">
-    <DisplayName>PublishingIntervalCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2150</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2160" BrowseName="CurrentSubscriptionCount" ParentNodeId="i=2150" DataType="UInt32">
-    <DisplayName>CurrentSubscriptionCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2150</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2161" BrowseName="CumulatedSubscriptionCount" ParentNodeId="i=2150" DataType="UInt32">
-    <DisplayName>CumulatedSubscriptionCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2150</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2162" BrowseName="SecurityRejectedRequestsCount" ParentNodeId="i=2150" DataType="UInt32">
-    <DisplayName>SecurityRejectedRequestsCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2150</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2163" BrowseName="RejectedRequestsCount" ParentNodeId="i=2150" DataType="UInt32">
-    <DisplayName>RejectedRequestsCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2150</Reference>
-    </References>
-  </UAVariable>
-  <UAObject NodeId="i=2253" BrowseName="Server" EventNotifier="1">
-    <DisplayName>Server</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=2254</Reference>
-      <Reference ReferenceType="HasProperty">i=2255</Reference>
-      <Reference ReferenceType="HasComponent">i=2256</Reference>
-      <Reference ReferenceType="HasComponent">i=2268</Reference>
-      <Reference ReferenceType="HasComponent">i=2274</Reference>
-      <Reference ReferenceType="HasComponent">i=2295</Reference>
-      <Reference ReferenceType="HasComponent">i=11492</Reference>
-      <Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=2004</Reference>
-    </References>
-  </UAObject>
-  <UAVariable NodeId="i=2254" BrowseName="ServerArray" ParentNodeId="i=2253" DataType="String" ValueRank="1" ArrayDimensions="0" MinimumSamplingInterval="1000">
-    <DisplayName>ServerArray</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2253</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2255" BrowseName="NamespaceArray" ParentNodeId="i=2253" DataType="String" ValueRank="1" ArrayDimensions="0" MinimumSamplingInterval="1000">
-    <DisplayName>NamespaceArray</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2253</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2256" BrowseName="ServerStatus" ParentNodeId="i=2253" DataType="i=862" MinimumSamplingInterval="1000">
-    <DisplayName>ServerStatus</DisplayName>
-    <References>
-      <Reference ReferenceType="HasComponent">i=2257</Reference>
-      <Reference ReferenceType="HasComponent">i=2258</Reference>
-      <Reference ReferenceType="HasComponent">i=2259</Reference>
-      <Reference ReferenceType="HasComponent">i=2260</Reference>
-      <Reference ReferenceType="HasComponent">i=2992</Reference>
-      <Reference ReferenceType="HasComponent">i=2993</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=2138</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2253</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2257" BrowseName="StartTime" ParentNodeId="i=2256" DataType="i=294">
-    <DisplayName>StartTime</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2256</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2258" BrowseName="CurrentTime" ParentNodeId="i=2256" DataType="i=294">
-    <DisplayName>CurrentTime</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2256</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2259" BrowseName="State" ParentNodeId="i=2256" DataType="i=852">
-    <DisplayName>State</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2256</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2260" BrowseName="BuildInfo" ParentNodeId="i=2256" DataType="i=338">
-    <DisplayName>BuildInfo</DisplayName>
-    <References>
-      <Reference ReferenceType="HasComponent">i=2262</Reference>
-      <Reference ReferenceType="HasComponent">i=2263</Reference>
-      <Reference ReferenceType="HasComponent">i=2261</Reference>
-      <Reference ReferenceType="HasComponent">i=2264</Reference>
-      <Reference ReferenceType="HasComponent">i=2265</Reference>
-      <Reference ReferenceType="HasComponent">i=2266</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=3051</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2256</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2262" BrowseName="ProductUri" ParentNodeId="i=2260" DataType="String" MinimumSamplingInterval="1000">
-    <DisplayName>ProductUri</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2260</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2263" BrowseName="ManufacturerName" ParentNodeId="i=2260" DataType="String" MinimumSamplingInterval="1000">
-    <DisplayName>ManufacturerName</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2260</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2261" BrowseName="ProductName" ParentNodeId="i=2260" DataType="String" MinimumSamplingInterval="1000">
-    <DisplayName>ProductName</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2260</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2264" BrowseName="SoftwareVersion" ParentNodeId="i=2260" DataType="String" MinimumSamplingInterval="1000">
-    <DisplayName>SoftwareVersion</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2260</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2265" BrowseName="BuildNumber" ParentNodeId="i=2260" DataType="String" MinimumSamplingInterval="1000">
-    <DisplayName>BuildNumber</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2260</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2266" BrowseName="BuildDate" ParentNodeId="i=2260" DataType="i=294" MinimumSamplingInterval="1000">
-    <DisplayName>BuildDate</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2260</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2992" BrowseName="SecondsTillShutdown" ParentNodeId="i=2256" DataType="UInt32">
-    <DisplayName>SecondsTillShutdown</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2256</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2993" BrowseName="ShutdownReason" ParentNodeId="i=2256" DataType="LocalizedText">
-    <DisplayName>ShutdownReason</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2256</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2267" BrowseName="ServiceLevel" ParentNodeId="i=2253" DataType="Byte" MinimumSamplingInterval="1000">
-    <DisplayName>ServiceLevel</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2253</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2994" BrowseName="Auditing" ParentNodeId="i=2253" DataType="Boolean" MinimumSamplingInterval="1000">
-    <DisplayName>Auditing</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2253</Reference>
-    </References>
-  </UAVariable>
-  <UAObject NodeId="i=2268" BrowseName="ServerCapabilities" ParentNodeId="i=2253">
-    <DisplayName>ServerCapabilities</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=2269</Reference>
-      <Reference ReferenceType="HasProperty">i=2271</Reference>
-      <Reference ReferenceType="HasProperty">i=2272</Reference>
-      <Reference ReferenceType="HasProperty">i=2735</Reference>
-      <Reference ReferenceType="HasProperty">i=2736</Reference>
-      <Reference ReferenceType="HasProperty">i=2737</Reference>
-      <Reference ReferenceType="HasProperty">i=3704</Reference>
-      <Reference ReferenceType="HasComponent">i=2996</Reference>
-      <Reference ReferenceType="HasComponent">i=2997</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=2013</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2253</Reference>
-    </References>
-  </UAObject>
-  <UAVariable NodeId="i=2269" BrowseName="ServerProfileArray" ParentNodeId="i=2268" DataType="String" ValueRank="1" ArrayDimensions="0">
-    <DisplayName>ServerProfileArray</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2268</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2271" BrowseName="LocaleIdArray" ParentNodeId="i=2268" DataType="i=295" ValueRank="1" ArrayDimensions="0">
-    <DisplayName>LocaleIdArray</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2268</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2272" BrowseName="MinSupportedSampleRate" ParentNodeId="i=2268" DataType="i=290">
-    <DisplayName>MinSupportedSampleRate</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2268</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2735" BrowseName="MaxBrowseContinuationPoints" ParentNodeId="i=2268" DataType="UInt16">
-    <DisplayName>MaxBrowseContinuationPoints</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2268</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2736" BrowseName="MaxQueryContinuationPoints" ParentNodeId="i=2268" DataType="UInt16">
-    <DisplayName>MaxQueryContinuationPoints</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2268</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2737" BrowseName="MaxHistoryContinuationPoints" ParentNodeId="i=2268" DataType="UInt16">
-    <DisplayName>MaxHistoryContinuationPoints</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2268</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=3704" BrowseName="SoftwareCertificates" ParentNodeId="i=2268" DataType="i=344" ValueRank="1" ArrayDimensions="0">
-    <DisplayName>SoftwareCertificates</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2268</Reference>
-    </References>
-  </UAVariable>
-  <UAObject NodeId="i=11704" BrowseName="OperationLimits" ParentNodeId="i=2268">
-    <DisplayName>OperationLimits</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=11705</Reference>
-      <Reference ReferenceType="HasProperty">i=11707</Reference>
-      <Reference ReferenceType="HasProperty">i=11709</Reference>
-      <Reference ReferenceType="HasProperty">i=11710</Reference>
-      <Reference ReferenceType="HasProperty">i=11711</Reference>
-      <Reference ReferenceType="HasProperty">i=11712</Reference>
-      <Reference ReferenceType="HasProperty">i=11713</Reference>
-      <Reference ReferenceType="HasProperty">i=11714</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=11564</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2268</Reference>
-    </References>
-  </UAObject>
-  <UAVariable NodeId="i=11705" BrowseName="MaxNodesPerRead" ParentNodeId="i=11704" DataType="UInt32">
-    <DisplayName>MaxNodesPerRead</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11704</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11707" BrowseName="MaxNodesPerWrite" ParentNodeId="i=11704" DataType="UInt32">
-    <DisplayName>MaxNodesPerWrite</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11704</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11709" BrowseName="MaxNodesPerMethodCall" ParentNodeId="i=11704" DataType="UInt32">
-    <DisplayName>MaxNodesPerMethodCall</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11704</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11710" BrowseName="MaxNodesPerBrowse" ParentNodeId="i=11704" DataType="UInt32">
-    <DisplayName>MaxNodesPerBrowse</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11704</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11711" BrowseName="MaxNodesPerRegisterNodes" ParentNodeId="i=11704" DataType="UInt32">
-    <DisplayName>MaxNodesPerRegisterNodes</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11704</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11712" BrowseName="MaxNodesPerTranslateBrowsePathsToNodeIds" ParentNodeId="i=11704" DataType="UInt32">
-    <DisplayName>MaxNodesPerTranslateBrowsePathsToNodeIds</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11704</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11713" BrowseName="MaxNodesPerNodeManagement" ParentNodeId="i=11704" DataType="UInt32">
-    <DisplayName>MaxNodesPerNodeManagement</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11704</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=11714" BrowseName="MaxMonitoredItemsPerCall" ParentNodeId="i=11704" DataType="UInt32">
-    <DisplayName>MaxMonitoredItemsPerCall</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11704</Reference>
-    </References>
-  </UAVariable>
-  <UAObject NodeId="i=2996" BrowseName="ModellingRules" ParentNodeId="i=2268">
-    <DisplayName>ModellingRules</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2268</Reference>
-    </References>
-  </UAObject>
-  <UAObject NodeId="i=2997" BrowseName="AggregateFunctions" ParentNodeId="i=2268">
-    <DisplayName>AggregateFunctions</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2268</Reference>
-    </References>
-  </UAObject>
-  <UAObject NodeId="i=2274" BrowseName="ServerDiagnostics" ParentNodeId="i=2253">
-    <DisplayName>ServerDiagnostics</DisplayName>
-    <References>
-      <Reference ReferenceType="HasComponent">i=2275</Reference>
-      <Reference ReferenceType="HasProperty">i=2294</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=2020</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2253</Reference>
-    </References>
-  </UAObject>
-  <UAVariable NodeId="i=2275" BrowseName="ServerDiagnosticsSummary" ParentNodeId="i=2274" DataType="i=859">
-    <DisplayName>ServerDiagnosticsSummary</DisplayName>
-    <References>
-      <Reference ReferenceType="HasComponent">i=2276</Reference>
-      <Reference ReferenceType="HasComponent">i=2277</Reference>
-      <Reference ReferenceType="HasComponent">i=2278</Reference>
-      <Reference ReferenceType="HasComponent">i=2279</Reference>
-      <Reference ReferenceType="HasComponent">i=3705</Reference>
-      <Reference ReferenceType="HasComponent">i=2281</Reference>
-      <Reference ReferenceType="HasComponent">i=2282</Reference>
-      <Reference ReferenceType="HasComponent">i=2284</Reference>
-      <Reference ReferenceType="HasComponent">i=2285</Reference>
-      <Reference ReferenceType="HasComponent">i=2286</Reference>
-      <Reference ReferenceType="HasComponent">i=2287</Reference>
-      <Reference ReferenceType="HasComponent">i=2288</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=2150</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2274</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2276" BrowseName="ServerViewCount" ParentNodeId="i=2275" DataType="UInt32">
-    <DisplayName>ServerViewCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2275</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2277" BrowseName="CurrentSessionCount" ParentNodeId="i=2275" DataType="UInt32">
-    <DisplayName>CurrentSessionCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2275</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2278" BrowseName="CumulatedSessionCount" ParentNodeId="i=2275" DataType="UInt32">
-    <DisplayName>CumulatedSessionCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2275</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2279" BrowseName="SecurityRejectedSessionCount" ParentNodeId="i=2275" DataType="UInt32">
-    <DisplayName>SecurityRejectedSessionCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2275</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=3705" BrowseName="RejectedSessionCount" ParentNodeId="i=2275" DataType="UInt32">
-    <DisplayName>RejectedSessionCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2275</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2281" BrowseName="SessionTimeoutCount" ParentNodeId="i=2275" DataType="UInt32">
-    <DisplayName>SessionTimeoutCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2275</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2282" BrowseName="SessionAbortCount" ParentNodeId="i=2275" DataType="UInt32">
-    <DisplayName>SessionAbortCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2275</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2284" BrowseName="PublishingIntervalCount" ParentNodeId="i=2275" DataType="UInt32">
-    <DisplayName>PublishingIntervalCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2275</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2285" BrowseName="CurrentSubscriptionCount" ParentNodeId="i=2275" DataType="UInt32">
-    <DisplayName>CurrentSubscriptionCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2275</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2286" BrowseName="CumulatedSubscriptionCount" ParentNodeId="i=2275" DataType="UInt32">
-    <DisplayName>CumulatedSubscriptionCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2275</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2287" BrowseName="SecurityRejectedRequestsCount" ParentNodeId="i=2275" DataType="UInt32">
-    <DisplayName>SecurityRejectedRequestsCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2275</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2288" BrowseName="RejectedRequestsCount" ParentNodeId="i=2275" DataType="UInt32">
-    <DisplayName>RejectedRequestsCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2275</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=2294" BrowseName="EnabledFlag" ParentNodeId="i=2274" DataType="Boolean" AccessLevel="3">
-    <DisplayName>EnabledFlag</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2274</Reference>
-    </References>
-  </UAVariable>
-  <UAObject NodeId="i=2295" BrowseName="VendorServerInfo" ParentNodeId="i=2253">
-    <DisplayName>VendorServerInfo</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=2033</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2253</Reference>
-    </References>
-  </UAObject>
-  <UAObject NodeId="i=2296" BrowseName="ServerRedundancy" ParentNodeId="i=2253">
-    <DisplayName>ServerRedundancy</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=3709</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=2034</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2253</Reference>
-    </References>
-  </UAObject>
-  <UAVariable NodeId="i=3709" BrowseName="RedundancySupport" ParentNodeId="i=2296" DataType="i=851">
-    <DisplayName>RedundancySupport</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=2296</Reference>
-    </References>
-  </UAVariable>
-  <UAMethod NodeId="i=11492" BrowseName="GetMonitoredItems" ParentNodeId="i=2253" MethodDeclarationId="i=11489">
-    <DisplayName>GetMonitoredItems</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=11493</Reference>
-      <Reference ReferenceType="HasProperty">i=11494</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2253</Reference>
-    </References>
-  </UAMethod>
-  <UAVariable NodeId="i=11493" BrowseName="InputArguments" ParentNodeId="i=11492" DataType="i=296" ValueRank="1" ArrayDimensions="0">
-    <DisplayName>InputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11492</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=11494" BrowseName="OutputArguments" ParentNodeId="i=11492" DataType="i=296" ValueRank="1" ArrayDimensions="0">
-    <DisplayName>OutputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=11492</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>
-  <UAObjectType NodeId="i=17602" BrowseName="BaseInterfaceType" IsAbstract="true">
-    <DisplayName>BaseInterfaceType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAObject NodeId="i=17708" BrowseName="InterfaceTypes">
-    <DisplayName>InterfaceTypes</DisplayName>
-    <References>
-      <Reference ReferenceType="Organizes">i=17602</Reference>
-      <Reference ReferenceType="Organizes" IsForward="false">i=86</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
-    </References>
-  </UAObject>
-  <UAReferenceType NodeId="i=17603" BrowseName="HasInterface">
-    <DisplayName>HasInterface</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
-    </References>
-    <InverseName>InterfaceOf</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=17604" BrowseName="HasAddIn">
-    <DisplayName>HasAddIn</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
-    </References>
-    <InverseName>AddInOf</InverseName>
-  </UAReferenceType>
-  <UADataType NodeId="i=296" BrowseName="Argument">
-    <DisplayName>Argument</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-    </References>
-    <Definition Name="Argument">
-      <Field Name="Name" DataType="i=12" />
-      <Field Name="DataType" DataType="i=17" />
-      <Field Name="ValueRank" DataType="i=6" />
-      <Field Name="ArrayDimensions" DataType="i=7" ValueRank="1" />
-      <Field Name="Description" DataType="i=21" />
-    </Definition>
-  </UADataType>
-  <UADataType NodeId="i=7594" BrowseName="EnumValueType">
-    <DisplayName>EnumValueType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-    </References>
-    <Definition Name="EnumValueType">
-      <Field Name="Value" DataType="i=8" />
-      <Field Name="DisplayName" DataType="i=21" />
-      <Field Name="Description" DataType="i=21" />
-    </Definition>
-  </UADataType>
-  <UADataType NodeId="i=290" BrowseName="Duration">
-    <DisplayName>Duration</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=11</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=294" BrowseName="UtcTime">
-    <DisplayName>UtcTime</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=13</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=295" BrowseName="LocaleId">
-    <DisplayName>LocaleId</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=12</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=344" BrowseName="SignedSoftwareCertificate">
-    <DisplayName>SignedSoftwareCertificate</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-    </References>
-    <Definition Name="SignedSoftwareCertificate">
-      <Field Name="CertificateData" DataType="i=15" />
-      <Field Name="Signature" DataType="i=15" />
-    </Definition>
-  </UADataType>
-  <UADataType NodeId="i=338" BrowseName="BuildInfo">
-    <DisplayName>BuildInfo</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-    </References>
-    <Definition Name="BuildInfo">
-      <Field Name="ProductUri" DataType="i=12" />
-      <Field Name="ManufacturerName" DataType="i=12" />
-      <Field Name="ProductName" DataType="i=12" />
-      <Field Name="SoftwareVersion" DataType="i=12" />
-      <Field Name="BuildNumber" DataType="i=12" />
-      <Field Name="BuildDate" DataType="i=294" />
-    </Definition>
-  </UADataType>
-  <UADataType NodeId="i=851" BrowseName="RedundancySupport">
-    <DisplayName>RedundancySupport</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=7611</Reference>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=29</Reference>
-    </References>
-    <Definition Name="RedundancySupport">
-      <Field Name="None" Value="0" />
-      <Field Name="Cold" Value="1" />
-      <Field Name="Warm" Value="2" />
-      <Field Name="Hot" Value="3" />
-      <Field Name="Transparent" Value="4" />
-      <Field Name="HotAndMirrored" Value="5" />
-    </Definition>
-  </UADataType>
-  <UAVariable NodeId="i=7611" BrowseName="EnumStrings" ParentNodeId="i=851" DataType="LocalizedText" ValueRank="1" ArrayDimensions="0">
-    <DisplayName>EnumStrings</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=851</Reference>
-    </References>
-    <Value>
-      <ListOfLocalizedText xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <LocalizedText>
-          <Locale>
-          </Locale>
-          <Text>None</Text>
-        </LocalizedText>
-        <LocalizedText>
-          <Locale>
-          </Locale>
-          <Text>Cold</Text>
-        </LocalizedText>
-        <LocalizedText>
-          <Locale>
-          </Locale>
-          <Text>Warm</Text>
-        </LocalizedText>
-        <LocalizedText>
-          <Locale>
-          </Locale>
-          <Text>Hot</Text>
-        </LocalizedText>
-        <LocalizedText>
-          <Locale>
-          </Locale>
-          <Text>Transparent</Text>
-        </LocalizedText>
-        <LocalizedText>
-          <Locale>
-          </Locale>
-          <Text>HotAndMirrored</Text>
-        </LocalizedText>
-      </ListOfLocalizedText>
-    </Value>
-  </UAVariable>
-  <UADataType NodeId="i=852" BrowseName="ServerState">
-    <DisplayName>ServerState</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=29</Reference>
-    </References>
-    <Definition Name="ServerState">
-      <Field Name="Running" Value="0" />
-      <Field Name="Failed" Value="1" />
-      <Field Name="NoConfiguration" Value="2" />
-      <Field Name="Suspended" Value="3" />
-      <Field Name="Shutdown" Value="4" />
-      <Field Name="Test" Value="5" />
-      <Field Name="CommunicationFault" Value="6" />
-      <Field Name="Unknown" Value="7" />
-    </Definition>
-  </UADataType>
-  <UADataType NodeId="i=859" BrowseName="ServerDiagnosticsSummaryDataType">
-    <DisplayName>ServerDiagnosticsSummaryDataType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-    </References>
-    <Definition Name="ServerDiagnosticsSummaryDataType">
-      <Field Name="ServerViewCount" DataType="i=7" />
-      <Field Name="CurrentSessionCount" DataType="i=7" />
-      <Field Name="CumulatedSessionCount" DataType="i=7" />
-      <Field Name="SecurityRejectedSessionCount" DataType="i=7" />
-      <Field Name="RejectedSessionCount" DataType="i=7" />
-      <Field Name="SessionTimeoutCount" DataType="i=7" />
-      <Field Name="SessionAbortCount" DataType="i=7" />
-      <Field Name="CurrentSubscriptionCount" DataType="i=7" />
-      <Field Name="CumulatedSubscriptionCount" DataType="i=7" />
-      <Field Name="PublishingIntervalCount" DataType="i=7" />
-      <Field Name="SecurityRejectedRequestsCount" DataType="i=7" />
-      <Field Name="RejectedRequestsCount" DataType="i=7" />
-    </Definition>
-  </UADataType>
-  <UADataType NodeId="i=862" BrowseName="ServerStatusDataType">
-    <DisplayName>ServerStatusDataType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-    </References>
-    <Definition Name="ServerStatusDataType">
-      <Field Name="StartTime" DataType="i=294" />
-      <Field Name="CurrentTime" DataType="i=294" />
-      <Field Name="State" DataType="i=852" />
-      <Field Name="BuildInfo" DataType="i=338" />
-      <Field Name="SecondsTillShutdown" DataType="i=7" />
-      <Field Name="ShutdownReason" DataType="i=21" />
-    </Definition>
-  </UADataType>
-  <UAObject NodeId="i=298" BrowseName="Default Binary" SymbolicName="DefaultBinary">
-    <DisplayName>Default Binary</DisplayName>
-    <References>
-      <Reference ReferenceType="HasEncoding" IsForward="false">i=296</Reference>
-      <Reference ReferenceType="HasDescription">i=7650</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=76</Reference>
-    </References>
-  </UAObject>
-  <UAObject NodeId="i=8251" BrowseName="Default Binary" SymbolicName="DefaultBinary">
-    <DisplayName>Default Binary</DisplayName>
-    <References>
-      <Reference ReferenceType="HasEncoding" IsForward="false">i=7594</Reference>
-      <Reference ReferenceType="HasDescription">i=7656</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=76</Reference>
-    </References>
-  </UAObject>
-  <UAVariable NodeId="i=7617" BrowseName="Opc.Ua" SymbolicName="OpcUa_BinarySchema" DataType="ByteString">
-    <DisplayName>Opc.Ua</DisplayName>
-    <References>
-      <Reference ReferenceType="HasComponent">i=7656</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=93</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=72</Reference>
-    </References>
-    <Value>
-    <ByteString xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd"></ByteString>
-    </Value>
-  </UAVariable>
-  <UAVariable NodeId="i=7650" BrowseName="Argument" ParentNodeId="i=7617" DataType="String">
-    <DisplayName>Argument</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=69</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=7617</Reference>
-    </References>
-    <Value>
-      <String xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">Argument</String>
-    </Value>
-  </UAVariable>
-  <UAVariable NodeId="i=7656" BrowseName="EnumValueType" ParentNodeId="i=7617" DataType="String">
-    <DisplayName>EnumValueType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=69</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=7617</Reference>
-    </References>
-    <Value>
-      <String xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">EnumValueType</String>
-    </Value>
-  </UAVariable>
-</UANodeSet>
diff --git a/ext/open62541/tools/schema/Opc.Ua.NodeSet2.PubSubMinimal.xml b/ext/open62541/tools/schema/Opc.Ua.NodeSet2.PubSubMinimal.xml
deleted file mode 100644
index a836211..0000000
--- a/ext/open62541/tools/schema/Opc.Ua.NodeSet2.PubSubMinimal.xml
+++ /dev/null
@@ -1,1924 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!--
- * Copyright (c) 2005-2018 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:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" LastModified="2019-01-31T00:00:00Z" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd">
-  <Models>
-    <Model ModelUri="http://opcfoundation.org/UA/" Version="1.04" PublicationDate="2019-01-31T00:00:00Z" />
-  </Models>
-  <UAObjectType NodeId="i=15906" BrowseName="PubSubKeyServiceType">
-    <DisplayName>PubSubKeyServiceType</DisplayName>
-    <References>
-      <!--      <Reference ReferenceType="HasComponent">i=15907</Reference> || GetSecurityKeys
-            <Reference ReferenceType="HasComponent">i=15910</Reference>  ||GetSecurityGroup
-            <Reference ReferenceType="HasComponent">i=15913</Reference> || SecurityGroups   -->
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAObjectType NodeId="i=14416" BrowseName="PublishSubscribeType">
-    <DisplayName>PublishSubscribeType</DisplayName>
-    <References>
-
-      <!--      <Reference ReferenceType="HasComponent">i=17296</Reference>  SetSecurityKeys
-            <Reference ReferenceType="HasComponent">i=18715</Reference> Diagnostics SupportedTransportProfiles-->
-      <Reference ReferenceType="HasComponent">i=15844</Reference> <!--Status-->
-      <Reference ReferenceType="i=14476">i=14417</Reference>
-      <Reference ReferenceType="HasProperty">i=17479</Reference>
-      <Reference ReferenceType="HasComponent">i=14434</Reference>
-      <Reference ReferenceType="HasComponent">i=16598</Reference>
-      <Reference ReferenceType="HasComponent">i=14432</Reference>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=15906</Reference>
-    </References>
-  </UAObjectType>
-  <UAVariable NodeId="i=17479" BrowseName="SupportedTransportProfiles" ParentNodeId="i=14416" DataType="String" ValueRank="1">
-    <DisplayName>SupportedTransportProfiles</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14416</Reference>
-    </References>
-  </UAVariable>
-
-  <UAObjectType NodeId="i=14477" BrowseName="DataSetFolderType">
-    <DisplayName>DataSetFolderType</DisplayName>
-    <References>
-      <Reference ReferenceType="Organizes">i=14478</Reference>
-      <Reference ReferenceType="HasComponent">i=14493</Reference> <!--AddPublishedDataItems-->
-      <Reference ReferenceType="HasComponent">i=14499</Reference> <!--RemovePublishedDataSet-->
-      <Reference ReferenceType="HasComponent">i=16994</Reference> <!--AddDataSetFolder-->
-      <Reference ReferenceType="HasComponent">i=16997</Reference> <!--RemoveDataSetFolder-->
-      <!--      <Reference ReferenceType="HasComponent">i=14487</Reference>
-            <Reference ReferenceType="HasComponent">i=14496</Reference>
-            <Reference ReferenceType="HasComponent">i=16935</Reference>
-            <Reference ReferenceType="HasComponent">i=16960</Reference> -->
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=61</Reference>
-    </References>
-  </UAObjectType>
-  <UAObject NodeId="i=14478" BrowseName="&lt;DataSetFolderName&gt;" SymbolicName="DataSetFolderName_Placeholder" ParentNodeId="i=14477">
-    <DisplayName>&lt;DataSetFolderName&gt;</DisplayName>
-    <References>
-<!--      <Reference ReferenceType="HasComponent">i=14479</Reference>
-      <Reference ReferenceType="HasComponent">i=14482</Reference>
-      <Reference ReferenceType="HasComponent">i=16842</Reference>
-      <Reference ReferenceType="HasComponent">i=16881</Reference>
-      <Reference ReferenceType="HasComponent">i=14485</Reference>
-      <Reference ReferenceType="HasComponent">i=16884</Reference>
-      <Reference ReferenceType="HasComponent">i=16923</Reference>-->
-      <Reference ReferenceType="HasTypeDefinition">i=14477</Reference>
-<!--
-      <Reference ReferenceType="HasModellingRule">i=11508</Reference>
--->
-      <Reference ReferenceType="Organizes" IsForward="false">i=14477</Reference>
-    </References>
-  </UAObject>
-  <UAMethod NodeId="i=14493" BrowseName="AddPublishedDataItems" ParentNodeId="i=14477">
-    <DisplayName>AddPublishedDataItems</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=14494</Reference>
-      <Reference ReferenceType="HasProperty">i=14495</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14477</Reference>
-    </References>
-  </UAMethod>
-  <UAVariable NodeId="i=14494" BrowseName="InputArguments" ParentNodeId="i=14493" DataType="i=296" ValueRank="1">
-    <DisplayName>InputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14493</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>Name</Name>
-              <DataType>
-                <Identifier>i=12</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>FieldNameAliases</Name>
-              <DataType>
-                <Identifier>i=12</Identifier>
-              </DataType>
-              <ValueRank>1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>FieldFlags</Name>
-              <DataType>
-                <Identifier>i=15904</Identifier>
-              </DataType>
-              <ValueRank>1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>VariablesToAdd</Name>
-              <DataType>
-                <Identifier>i=14273</Identifier>
-              </DataType>
-              <ValueRank>1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAVariable NodeId="i=14495" BrowseName="OutputArguments" ParentNodeId="i=14493" DataType="i=296" ValueRank="1">
-    <DisplayName>OutputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14493</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>DataSetNodeId</Name>
-              <DataType>
-                <Identifier>i=17</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>ConfigurationVersion</Name>
-              <DataType>
-                <Identifier>i=14593</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>AddResults</Name>
-              <DataType>
-                <Identifier>i=19</Identifier>
-              </DataType>
-              <ValueRank>1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAMethod NodeId="i=14499" BrowseName="RemovePublishedDataSet" ParentNodeId="i=14477">
-    <DisplayName>RemovePublishedDataSet</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=14500</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14477</Reference>
-    </References>
-  </UAMethod>
-  <UAVariable NodeId="i=14500" BrowseName="InputArguments" ParentNodeId="i=14499" DataType="i=296" ValueRank="1">
-    <DisplayName>InputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14499</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>DataSetNodeId</Name>
-              <DataType>
-                <Identifier>i=17</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAMethod NodeId="i=16994" BrowseName="AddDataSetFolder" ParentNodeId="i=14477">
-    <DisplayName>AddDataSetFolder</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=16995</Reference>
-      <Reference ReferenceType="HasProperty">i=16996</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14477</Reference>
-    </References>
-  </UAMethod>
-  <UAVariable NodeId="i=16995" BrowseName="InputArguments" ParentNodeId="i=16994" DataType="i=296" ValueRank="1">
-    <DisplayName>InputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=16994</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>Name</Name>
-              <DataType>
-                <Identifier>i=12</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAVariable NodeId="i=16996" BrowseName="OutputArguments" ParentNodeId="i=16994" DataType="i=296" ValueRank="1">
-    <DisplayName>OutputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=16994</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>DataSetFolderNodeId</Name>
-              <DataType>
-                <Identifier>i=17</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAMethod NodeId="i=16997" BrowseName="RemoveDataSetFolder" ParentNodeId="i=14477">
-    <DisplayName>RemoveDataSetFolder</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=17007</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14477</Reference>
-    </References>
-  </UAMethod>
-  <UAVariable NodeId="i=17007" BrowseName="InputArguments" ParentNodeId="i=16997" DataType="i=296" ValueRank="1">
-    <DisplayName>InputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=16997</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>DataSetFolderNodeId</Name>
-              <DataType>
-                <Identifier>i=17</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAObject NodeId="i=14434" BrowseName="PublishedDataSets" ParentNodeId="i=14416">
-    <DisplayName>PublishedDataSets</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=14477</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14416</Reference>
-    </References>
-  </UAObject>
-  <UAObject NodeId="i=15844" BrowseName="Status" ParentNodeId="i=14416">
-    <DisplayName>Status</DisplayName>
-    <References>
-      <Reference ReferenceType="HasComponent">i=15845</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=14643</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14416</Reference>
-    </References>
-  </UAObject>
-  <UAVariable NodeId="i=15845" BrowseName="State" ParentNodeId="i=15844" DataType="i=14647">
-    <DisplayName>State</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=15844</Reference>
-    </References>
-  </UAVariable>
-  <UAObjectType NodeId="i=14509" BrowseName="PublishedDataSetType">
-    <DisplayName>PublishedDataSetType</DisplayName>
-      <References>
-        <Reference ReferenceType="HasProperty">i=14519</Reference>
-        <Reference ReferenceType="HasProperty">i=15229</Reference> <!--DataSetMetaData-->
-        <Reference ReferenceType="HasProperty">i=16759</Reference>
-<!--            <Reference ReferenceType="i=14936">i=15222</Reference>
-
-        Reference ReferenceType="HasComponent">i=15481</Reference>-->
-        <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-      </References>
-  </UAObjectType>
-  <UAVariable NodeId="i=14519" BrowseName="ConfigurationVersion" ParentNodeId="i=14509" DataType="i=14593">
-    <DisplayName>ConfigurationVersion</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14509</Reference>
-    </References>
-  </UAVariable>
-  <UAReferenceType NodeId="i=14936" BrowseName="DataSetToWriter">
-    <DisplayName>DataSetToWriter</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=33</Reference>
-    </References>
-    <InverseName>WriterToDataSet</InverseName>
-  </UAReferenceType>
-  <UAVariable NodeId="i=15229" BrowseName="DataSetMetaData" ParentNodeId="i=14509" DataType="i=14523">
-    <DisplayName>DataSetMetaData</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14509</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=16759" BrowseName="DataSetClassId" ParentNodeId="i=14509" DataType="Guid">
-    <DisplayName>DataSetClassId</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14509</Reference>
-    </References>
-  </UAVariable>
-  <UADataType NodeId="i=15534" BrowseName="DataTypeSchemaHeader">
-    <DisplayName>DataTypeSchemaHeader</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-    </References>
-    <Definition Name="DataTypeSchemaHeader">
-      <Field Name="Namespaces" DataType="i=12" ValueRank="1" />
-<!--      <Field Name="StructureDataTypes" DataType="i=15487" ValueRank="1" />
-      <Field Name="EnumDataTypes" DataType="i=15488" ValueRank="1" />
-      <Field Name="SimpleDataTypes" DataType="i=15005" ValueRank="1" />-->
-    </Definition>
-  </UADataType>
-  <UADataType NodeId="i=14647" BrowseName="PubSubState">
-    <DisplayName>PubSubState</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=14648</Reference>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=29</Reference>
-    </References>
-    <Definition Name="PubSubState">
-      <Field Name="Disabled" Value="0" />
-      <Field Name="Paused" Value="1" />
-      <Field Name="Operational" Value="2" />
-      <Field Name="Error" Value="3" />
-    </Definition>
-  </UADataType>
-  <UAVariable NodeId="i=14648" BrowseName="EnumStrings" ParentNodeId="i=14647" DataType="LocalizedText" ValueRank="1">
-    <DisplayName>EnumStrings</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14647</Reference>
-    </References>
-    <Value>
-      <ListOfLocalizedText xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <LocalizedText>
-          <Locale>
-          </Locale>
-          <Text>Disabled</Text>
-        </LocalizedText>
-        <LocalizedText>
-          <Locale>
-          </Locale>
-          <Text>Paused</Text>
-        </LocalizedText>
-        <LocalizedText>
-          <Locale>
-          </Locale>
-          <Text>Operational</Text>
-        </LocalizedText>
-        <LocalizedText>
-          <Locale>
-          </Locale>
-          <Text>Error</Text>
-        </LocalizedText>
-      </ListOfLocalizedText>
-    </Value>
-  </UAVariable>
-  <UADataType NodeId="i=14523" BrowseName="DataSetMetaDataType">
-    <DisplayName>DataSetMetaDataType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=15534</Reference>
-    </References>
-    <Definition Name="DataSetMetaDataType">
-      <Field Name="Name" DataType="i=12" />
-      <Field Name="Description" DataType="i=21" />
-<!--
-      <Field Name="Fields" DataType="i=14524" ValueRank="1" />
--->
-      <Field Name="DataSetClassId" DataType="i=14" />
-      <Field Name="ConfigurationVersion" DataType="i=14593" />
-    </Definition>
-  </UADataType>
-  <UADataType NodeId="i=20998" BrowseName="VersionTime">
-    <DisplayName>VersionTime</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=7</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=14593" BrowseName="ConfigurationVersionDataType">
-    <DisplayName>ConfigurationVersionDataType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-    </References>
-    <Definition Name="ConfigurationVersionDataType">
-      <Field Name="MajorVersion" DataType="i=20998" />
-      <Field Name="MinorVersion" DataType="i=20998" />
-    </Definition>
-  </UADataType>
-  <UADataType NodeId="i=15578" BrowseName="PublishedDataSetDataType">
-    <DisplayName>PublishedDataSetDataType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-    </References>
-    <Definition Name="PublishedDataSetDataType">
-      <Field Name="Name" DataType="i=12" />
-      <Field Name="DataSetFolder" DataType="i=12" ValueRank="1" />
-      <Field Name="DataSetMetaData" DataType="i=14523" />
-<!--
-      <Field Name="ExtensionFields" DataType="i=14533" ValueRank="1" />
--->
-      <Field Name="DataSetSource" DataType="i=22" />
-    </Definition>
-  </UADataType>
-  <UADataType NodeId="i=15583" BrowseName="DataSetFieldContentMask">
-    <DisplayName>DataSetFieldContentMask</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=15584</Reference>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=7</Reference>
-    </References>
-    <Definition Name="DataSetFieldContentMask" IsOptionSet="true">
-      <Field Name="StatusCode" Value="0" />
-      <Field Name="SourceTimestamp" Value="1" />
-      <Field Name="ServerTimestamp" Value="2" />
-      <Field Name="SourcePicoSeconds" Value="3" />
-      <Field Name="ServerPicoSeconds" Value="4" />
-      <Field Name="RawDataEncoding" Value="5" />
-    </Definition>
-  </UADataType>
-  <UAVariable NodeId="i=15584" BrowseName="OptionSetValues" ParentNodeId="i=15583" DataType="LocalizedText" ValueRank="1">
-    <DisplayName>OptionSetValues</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=15583</Reference>
-    </References>
-    <Value>
-      <ListOfLocalizedText xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <LocalizedText>
-          <Locale>
-          </Locale>
-          <Text>StatusCode</Text>
-        </LocalizedText>
-        <LocalizedText>
-          <Locale>
-          </Locale>
-          <Text>SourceTimestamp</Text>
-        </LocalizedText>
-        <LocalizedText>
-          <Locale>
-          </Locale>
-          <Text>ServerTimestamp</Text>
-        </LocalizedText>
-        <LocalizedText>
-          <Locale>
-          </Locale>
-          <Text>SourcePicoSeconds</Text>
-        </LocalizedText>
-        <LocalizedText>
-          <Locale>
-          </Locale>
-          <Text>ServerPicoSeconds</Text>
-        </LocalizedText>
-        <LocalizedText>
-          <Locale>
-          </Locale>
-          <Text>RawDataEncoding</Text>
-        </LocalizedText>
-      </ListOfLocalizedText>
-    </Value>
-  </UAVariable>
-
-  <UAObjectType NodeId="i=14534" BrowseName="PublishedDataItemsType">
-      <DisplayName>PublishedDataItemsType</DisplayName>
-      <References>
-        <Reference ReferenceType="HasProperty">i=14548</Reference>
-        <Reference ReferenceType="HasComponent">i=14555</Reference> <!--AddVariables-->
-        <Reference ReferenceType="HasComponent">i=14558</Reference> <!--RemoveVariables-->
-        <Reference ReferenceType="HasSubtype" IsForward="false">i=14509</Reference>
-      </References>
-  </UAObjectType>
-  <UAVariable NodeId="i=14548" BrowseName="PublishedData" ParentNodeId="i=14534" DataType="i=14273" ValueRank="1">
-    <DisplayName>PublishedData</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14534</Reference>
-    </References>
-  </UAVariable>
-  <UAMethod NodeId="i=14555" BrowseName="AddVariables" ParentNodeId="i=14534">
-    <DisplayName>AddVariables</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=14556</Reference>
-      <Reference ReferenceType="HasProperty">i=14557</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14534</Reference>
-    </References>
-  </UAMethod>
-  <UAVariable NodeId="i=14556" BrowseName="InputArguments" ParentNodeId="i=14555" DataType="i=296" ValueRank="1">
-    <DisplayName>InputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14555</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>ConfigurationVersion</Name>
-              <DataType>
-                <Identifier>i=14593</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>FieldNameAliases</Name>
-              <DataType>
-                <Identifier>i=12</Identifier>
-              </DataType>
-              <ValueRank>1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>PromotedFields</Name>
-              <DataType>
-                <Identifier>i=1</Identifier>
-              </DataType>
-              <ValueRank>1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>VariablesToAdd</Name>
-              <DataType>
-                <Identifier>i=14273</Identifier>
-              </DataType>
-              <ValueRank>1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAVariable NodeId="i=14557" BrowseName="OutputArguments" ParentNodeId="i=14555" DataType="i=296" ValueRank="1">
-    <DisplayName>OutputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14555</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>NewConfigurationVersion</Name>
-              <DataType>
-                <Identifier>i=14593</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>AddResults</Name>
-              <DataType>
-                <Identifier>i=19</Identifier>
-              </DataType>
-              <ValueRank>1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAMethod NodeId="i=14558" BrowseName="RemoveVariables" ParentNodeId="i=14534">
-    <DisplayName>RemoveVariables</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=14559</Reference>
-      <Reference ReferenceType="HasProperty">i=14560</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14534</Reference>
-    </References>
-  </UAMethod>
-  <UAVariable NodeId="i=14559" BrowseName="InputArguments" ParentNodeId="i=14558" DataType="i=296" ValueRank="1">
-    <DisplayName>InputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14558</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>ConfigurationVersion</Name>
-              <DataType>
-                <Identifier>i=14593</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>VariablesToRemove</Name>
-              <DataType>
-                <Identifier>i=7</Identifier>
-              </DataType>
-              <ValueRank>1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAVariable NodeId="i=14560" BrowseName="OutputArguments" ParentNodeId="i=14558" DataType="i=296" ValueRank="1">
-    <DisplayName>OutputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14558</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>NewConfigurationVersion</Name>
-              <DataType>
-                <Identifier>i=14593</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>RemoveResults</Name>
-              <DataType>
-                <Identifier>i=19</Identifier>
-              </DataType>
-              <ValueRank>1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAObject NodeId="i=11508" BrowseName="OptionalPlaceholder" SymbolicName="ModellingRule_OptionalPlaceholder">
-    <DisplayName>OptionalPlaceholder</DisplayName>
-    <Description>Specifies that zero or more instances with the attributes and references of the instance declaration may appear when a type is instantiated.</Description>
-    <References>
-      <!--<Reference ReferenceType="HasProperty">i=11509</Reference>-->
-      <Reference ReferenceType="HasTypeDefinition">i=77</Reference>
-    </References>
-  </UAObject>
-  <UADataType NodeId="i=15617" BrowseName="PubSubConnectionDataType">
-    <DisplayName>PubSubConnectionDataType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-    </References>
-    <Definition Name="PubSubConnectionDataType">
-      <Field Name="Name" DataType="i=12" />
-      <Field Name="Enabled" DataType="i=1" />
-      <Field Name="PublisherId" />
-      <Field Name="TransportProfileUri" DataType="i=12" />
-      <Field Name="Address" DataType="i=22" />
-      <Field Name="ConnectionProperties" DataType="i=14533" ValueRank="1" />
-      <!--      <Field Name="TransportSettings" DataType="i=22" />
-            <Field Name="WriterGroups" DataType="i=15480" ValueRank="1" />
-            <Field Name="ReaderGroups" DataType="i=15520" ValueRank="1" />-->
-    </Definition>
-  </UADataType>
-  <UADataType NodeId="i=14533" BrowseName="KeyValuePair">
-    <DisplayName>KeyValuePair</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-    </References>
-    <Definition Name="KeyValuePair">
-      <Field Name="Key" DataType="i=20" />
-      <Field Name="Value" />
-    </Definition>
-  </UADataType>
-  <UADataType NodeId="i=16313" BrowseName="AdditionalParametersType" ReleaseStatus="Draft">
-    <DisplayName>AdditionalParametersType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-    </References>
-    <Definition Name="AdditionalParametersType">
-      <Field Name="Parameters" DataType="i=14533" ValueRank="1" />
-    </Definition>
-  </UADataType>
-  <UADataType NodeId="i=15581" BrowseName="PublishedDataItemsDataType">
-    <DisplayName>PublishedDataItemsDataType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=15580</Reference>
-    </References>
-    <Definition Name="PublishedDataItemsDataType">
-      <Field Name="PublishedData" DataType="i=14273" ValueRank="1" />
-    </Definition>
-  </UADataType>
-  <UADataType NodeId="i=15580" BrowseName="PublishedDataSetSourceDataType" IsAbstract="true">
-    <DisplayName>PublishedDataSetSourceDataType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-    </References>
-  </UADataType>
-  <UADataType NodeId="i=14273" BrowseName="PublishedVariableDataType">
-    <DisplayName>PublishedVariableDataType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
-    </References>
-    <Definition Name="PublishedVariableDataType">
-      <Field Name="PublishedVariable" DataType="i=17" />
-<!--      <Field Name="AttributeId" DataType="i=288" />
-      <Field Name="SamplingIntervalHint" DataType="i=290" />
-      <Field Name="DeadbandType" DataType="i=7" />
-      <Field Name="DeadbandValue" DataType="i=11" />
-      <Field Name="IndexRange" DataType="i=291" />
-      <Field Name="SubstituteValue" />
-      <Field Name="MetaDataProperties" DataType="i=20" ValueRank="1" />-->
-    </Definition>
-  </UADataType>
-  <UAObjectType NodeId="i=14209" BrowseName="PubSubConnectionType">
-    <DisplayName>PubSubConnectionType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=14595</Reference>
-      <Reference ReferenceType="HasComponent">i=17306</Reference>
-      <Reference ReferenceType="HasComponent">i=17310</Reference>
-      <Reference ReferenceType="HasComponent">i=14221</Reference>
-      <Reference ReferenceType="HasComponent">i=17427</Reference> <!--AddWriterGroup-->
-      <Reference ReferenceType="HasComponent">i=14225</Reference> <!--RemoveGroup-->
-      <Reference ReferenceType="HasComponent">i=17465</Reference> <!--AddReaderGroup-->
-      <Reference ReferenceType="HasProperty">i=17485</Reference>  <!--ConnectionProperties-->
-      <Reference ReferenceType="HasComponent">i=14600</Reference> <!--Status -->
-      <Reference ReferenceType="HasComponent">i=17203</Reference> <!--TransportSettings-->
-
-
-      <!--
-            <Reference ReferenceType="HasComponent">i=17325</Reference> ReaderGroupName
-            <Reference ReferenceType="HasComponent">i=19241</Reference> Diagnostics -->
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAVariable NodeId="i=17485" BrowseName="ConnectionProperties" ParentNodeId="i=14209" DataType="i=14533" ValueRank="1">
-    <DisplayName>ConnectionProperties</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14209</Reference>
-    </References>
-  </UAVariable>
-  <UAObject NodeId="i=14221" BrowseName="Address" ParentNodeId="i=14209">
-    <DisplayName>Address</DisplayName>
-    <References>
-      <Reference ReferenceType="HasComponent">i=17202</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=21145</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14209</Reference>
-    </References>
-  </UAObject>
-  <UAVariable NodeId="i=17202" BrowseName="NetworkInterface" ParentNodeId="i=14221" DataType="String">
-    <DisplayName>NetworkInterface</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14221</Reference>
-    </References>
-  </UAVariable>
-  <UAObjectType NodeId="i=21145" BrowseName="NetworkAddressType" IsAbstract="true">
-    <DisplayName>NetworkAddressType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasComponent">i=21146</Reference>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAVariable NodeId="i=21146" BrowseName="NetworkInterface" ParentNodeId="i=21145" DataType="String">
-    <DisplayName>NetworkInterface</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=21145</Reference>
-    </References>
-  </UAVariable>
-  <UAObjectType NodeId="i=21147" BrowseName="NetworkAddressUrlType">
-    <DisplayName>NetworkAddressUrlType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasComponent">i=21149</Reference>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=21145</Reference>
-    </References>
-  </UAObjectType>
-  <UAVariable NodeId="i=21149" BrowseName="Url" ParentNodeId="i=21147" DataType="String">
-    <DisplayName>Url</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=21147</Reference>
-    </References>
-  </UAVariable>
-  <UAObject NodeId="i=17203" BrowseName="TransportSettings" ParentNodeId="i=14209">
-    <DisplayName>TransportSettings</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=17721</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14209</Reference>
-    </References>
-  </UAObject>
-  <UAObject NodeId="i=17310" BrowseName="&lt;WriterGroupName&gt;" SymbolicName="WriterGroupName_Placeholder" ParentNodeId="i=14209">
-    <DisplayName>&lt;WriterGroupName&gt;</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=17725</Reference>
-
-      <!--      <Reference ReferenceType="HasProperty">i=17311</Reference>
-            <Reference ReferenceType="HasProperty">i=17204</Reference>
-            <Reference ReferenceType="HasProperty">i=17486</Reference>
-            <Reference ReferenceType="HasComponent">i=17314</Reference>
-            <Reference ReferenceType="HasProperty">i=17214</Reference>
-            <Reference ReferenceType="HasProperty">i=17318</Reference>
-            <Reference ReferenceType="HasProperty">i=17319</Reference>
-            <Reference ReferenceType="HasProperty">i=17321</Reference>
-            <Reference ReferenceType="HasProperty">i=17322</Reference>
-            <Reference ReferenceType="HasModellingRule">i=11508</Reference>
-            <Reference ReferenceType="HasComponent" IsForward="false">i=14209</Reference>-->
-    </References>
-  </UAObject>
-  <UAObject NodeId="i=14600" BrowseName="Status" ParentNodeId="i=14209">
-    <DisplayName>Status</DisplayName>
-    <References>
-      <Reference ReferenceType="HasComponent">i=14601</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=14643</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14209</Reference>
-    </References>
-  </UAObject>
-  <UAVariable NodeId="i=14601" BrowseName="State" ParentNodeId="i=14600" DataType="i=14647">
-    <DisplayName>State</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14600</Reference>
-    </References>
-  </UAVariable>
-  <UAMethod NodeId="i=17427" BrowseName="AddWriterGroup" ParentNodeId="i=14209">
-    <DisplayName>AddWriterGroup</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=17428</Reference>
-      <Reference ReferenceType="HasProperty">i=17456</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14209</Reference>
-    </References>
-  </UAMethod>
-  <UAVariable NodeId="i=17428" BrowseName="InputArguments" ParentNodeId="i=17427" DataType="i=296" ValueRank="1">
-    <DisplayName>InputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17427</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>Configuration</Name>
-              <DataType>
-                <Identifier>i=15480</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAVariable NodeId="i=17456" BrowseName="OutputArguments" ParentNodeId="i=17427" DataType="i=296" ValueRank="1">
-    <DisplayName>OutputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17427</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>GroupId</Name>
-              <DataType>
-                <Identifier>i=17</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAMethod NodeId="i=17465" BrowseName="AddReaderGroup" ParentNodeId="i=14209">
-    <DisplayName>AddReaderGroup</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=17507</Reference>
-      <Reference ReferenceType="HasProperty">i=17508</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14209</Reference>
-    </References>
-  </UAMethod>
-  <UAVariable NodeId="i=17507" BrowseName="InputArguments" ParentNodeId="i=17465" DataType="i=296" ValueRank="1">
-    <DisplayName>InputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17465</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>Configuration</Name>
-              <DataType>
-                <Identifier>i=15520</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAVariable NodeId="i=17508" BrowseName="OutputArguments" ParentNodeId="i=17465" DataType="i=296" ValueRank="1">
-    <DisplayName>OutputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17465</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>GroupId</Name>
-              <DataType>
-                <Identifier>i=17</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAMethod NodeId="i=14225" BrowseName="RemoveGroup" ParentNodeId="i=14209">
-    <DisplayName>RemoveGroup</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=14226</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14209</Reference>
-    </References>
-  </UAMethod>
-  <UAVariable NodeId="i=14226" BrowseName="InputArguments" ParentNodeId="i=14225" DataType="i=296" ValueRank="1">
-    <DisplayName>InputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14225</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>GroupId</Name>
-              <DataType>
-                <Identifier>i=17</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAObjectType NodeId="i=17721" BrowseName="ConnectionTransportType" IsAbstract="true">
-    <DisplayName>ConnectionTransportType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAObjectType NodeId="i=14232" BrowseName="PubSubGroupType">
-    <DisplayName>PubSubGroupType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=15927</Reference>
-<!--
-      <Reference ReferenceType="HasProperty">i=15926</Reference> SecurityMode
-      <Reference ReferenceType="HasProperty">i=15928</Reference> SecurityKeyServices
-      <Reference ReferenceType="HasProperty">i=17488</Reference> GroupProperties
-      <Reference ReferenceType="HasComponent">i=15265</Reference> Status
--->
-      <Reference ReferenceType="HasProperty">i=17724</Reference>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAVariable NodeId="i=15927" BrowseName="SecurityGroupId" ParentNodeId="i=14232" DataType="String">
-    <DisplayName>SecurityGroupId</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14232</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=17724" BrowseName="MaxNetworkMessageSize" ParentNodeId="i=14232" DataType="UInt32">
-    <DisplayName>MaxNetworkMessageSize</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14232</Reference>
-    </References>
-  </UAVariable>
-<!--  <UAObject NodeId="i=15265" BrowseName="Status" ParentNodeId="i=14232">
-    <DisplayName>Status</DisplayName>
-    <References>
-&lt;!&ndash;
-      <Reference ReferenceType="HasComponent">i=15266</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=14643</Reference>
-
-&ndash;&gt;
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14232</Reference>
-    </References>
-  </UAObject>-->
-  <UAObjectType NodeId="i=17725" BrowseName="WriterGroupType">
-    <DisplayName>WriterGroupType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=17736</Reference> <!--WriterGroupId-->
-      <Reference ReferenceType="HasProperty">i=17737</Reference> <!--PublishingInterval-->
-      <Reference ReferenceType="HasProperty">i=17738</Reference> <!--KeepAliveTime-->
-      <Reference ReferenceType="HasProperty">i=17739</Reference> <!--Priority-->
-      <Reference ReferenceType="HasProperty">i=17740</Reference> <!--LocaleIds-->
-      <Reference ReferenceType="i=15296">i=17743</Reference> <!--DataSetWriterName-->
-      <Reference ReferenceType="HasComponent">i=17969</Reference> <!--AddDataSetWriter-->
-
-
-      <!--
-            <Reference ReferenceType="HasComponent">i=17741</Reference> TransportSettings
-            <Reference ReferenceType="HasComponent">i=17742</Reference> MessageSettings
-            <Reference ReferenceType="HasComponent">i=17812</Reference> Diagnostics
-            <Reference ReferenceType="HasComponent">i=17992</Reference> RemoveDataSetWriter-->
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=14232</Reference>  <!--PubSubGroupType-->
-    </References>
-  </UAObjectType>
-  <UAMethod NodeId="i=17969" BrowseName="AddDataSetWriter" ParentNodeId="i=17725">
-    <DisplayName>AddDataSetWriter</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=17976</Reference>
-      <Reference ReferenceType="HasProperty">i=17987</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=17725</Reference>
-    </References>
-  </UAMethod>
-  <UAVariable NodeId="i=17976" BrowseName="InputArguments" ParentNodeId="i=17969" DataType="i=296" ValueRank="1">
-    <DisplayName>InputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17969</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>Configuration</Name>
-              <DataType>
-                <Identifier>i=15597</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAVariable NodeId="i=17987" BrowseName="OutputArguments" ParentNodeId="i=17969" DataType="i=296" ValueRank="1">
-    <DisplayName>OutputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17969</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>DataSetWriterNodeId</Name>
-              <DataType>
-                <Identifier>i=17</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAVariable NodeId="i=17736" BrowseName="WriterGroupId" ParentNodeId="i=17725" DataType="UInt16">
-    <DisplayName>WriterGroupId</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17725</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=17737" BrowseName="PublishingInterval" ParentNodeId="i=17725" DataType="i=290">
-    <DisplayName>PublishingInterval</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17725</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=17738" BrowseName="KeepAliveTime" ParentNodeId="i=17725" DataType="i=290">
-    <DisplayName>KeepAliveTime</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17725</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=17739" BrowseName="Priority" ParentNodeId="i=17725" DataType="Byte">
-    <DisplayName>Priority</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17725</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=17740" BrowseName="LocaleIds" ParentNodeId="i=17725" DataType="i=295" ValueRank="1">
-    <DisplayName>LocaleIds</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17725</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=17306" BrowseName="TransportProfileUri" ParentNodeId="i=14209" DataType="String">
-    <DisplayName>TransportProfileUri</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=17710</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=16309</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14209</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=17710" BrowseName="Selections" ParentNodeId="i=17306" ValueRank="1">
-    <DisplayName>Selections</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17306</Reference>
-    </References>
-  </UAVariable>
-  <UAObjectType NodeId="i=15298" BrowseName="DataSetWriterType">
-    <DisplayName>DataSetWriterType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=21092</Reference> <!--DataSetWriterId-->
-      <Reference ReferenceType="HasProperty">i=21093</Reference> <!--DataSetFieldContentMask-->
-      <Reference ReferenceType="HasProperty">i=21094</Reference> <!--KeyFrameCount-->
-      <Reference ReferenceType="HasProperty">i=17493</Reference> <!--DataSetWriterProperties-->
-      <Reference ReferenceType="HasComponent">i=15303</Reference> <!--TransportSettings-->
-<!--      <Reference ReferenceType="HasComponent">i=21095</Reference> MessageSettings
-      <Reference ReferenceType="HasComponent">i=15299</Reference> Status
-      <Reference ReferenceType="HasComponent">i=19550</Reference>  Diagnostics-->
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAVariable NodeId="i=21092" BrowseName="DataSetWriterId" ParentNodeId="i=15298" DataType="UInt16">
-    <DisplayName>DataSetWriterId</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=15298</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=21093" BrowseName="DataSetFieldContentMask" ParentNodeId="i=15298" DataType="i=15583">
-    <DisplayName>DataSetFieldContentMask</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=15298</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=21094" BrowseName="KeyFrameCount" ParentNodeId="i=15298" DataType="UInt32">
-    <DisplayName>KeyFrameCount</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=15298</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=17493" BrowseName="DataSetWriterProperties" ParentNodeId="i=15298" DataType="i=14533" ValueRank="1">
-    <DisplayName>DataSetWriterProperties</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=15298</Reference>
-    </References>
-  </UAVariable>
-  <UAObject NodeId="i=15303" BrowseName="TransportSettings" ParentNodeId="i=15298">
-    <DisplayName>TransportSettings</DisplayName>
-    <References>
-      <!--<Reference ReferenceType="HasTypeDefinition">i=15305</Reference>-->
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=15298</Reference>
-    </References>
-  </UAObject>
-  <UAObjectType NodeId="i=14643" BrowseName="PubSubStatusType">
-    <DisplayName>PubSubStatusType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasComponent">i=14644</Reference>
-      <Reference ReferenceType="HasComponent">i=14645</Reference>
-      <Reference ReferenceType="HasComponent">i=14646</Reference>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAObject NodeId="i=17743" BrowseName="&lt;DataSetWriterName&gt;" SymbolicName="DataSetWriterName_Placeholder" ParentNodeId="i=17725">
-    <DisplayName>&lt;DataSetWriterName&gt;</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=17744</Reference>
-      <Reference ReferenceType="HasProperty">i=17745</Reference>
-      <Reference ReferenceType="HasProperty">i=17490</Reference>
-      <Reference ReferenceType="HasComponent">i=17749</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=15298</Reference>
-      <Reference ReferenceType="HasModellingRule">i=11508</Reference>
-      <Reference ReferenceType="i=15296" IsForward="false">i=17725</Reference>
-    </References>
-  </UAObject>
-  <UAVariable NodeId="i=17744" BrowseName="DataSetWriterId" ParentNodeId="i=17743" DataType="UInt16">
-    <DisplayName>DataSetWriterId</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17743</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=17745" BrowseName="DataSetFieldContentMask" ParentNodeId="i=17743" DataType="i=15583">
-    <DisplayName>DataSetFieldContentMask</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17743</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=17490" BrowseName="DataSetWriterProperties" ParentNodeId="i=17743" DataType="i=14533" ValueRank="1">
-    <DisplayName>DataSetWriterProperties</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17743</Reference>
-    </References>
-  </UAVariable>
-  <UAObject NodeId="i=17749" BrowseName="Status" ParentNodeId="i=17743">
-    <DisplayName>Status</DisplayName>
-    <References>
-      <Reference ReferenceType="HasComponent">i=17750</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=14643</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=17743</Reference>
-    </References>
-  </UAObject>
-  <UAVariable NodeId="i=17750" BrowseName="State" ParentNodeId="i=17749" DataType="i=14647">
-    <DisplayName>State</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=17749</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=14644" BrowseName="State" ParentNodeId="i=14643" DataType="i=14647">
-    <DisplayName>State</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14643</Reference>
-    </References>
-  </UAVariable>
-  <UAMethod NodeId="i=14645" BrowseName="Enable" ParentNodeId="i=14643">
-    <DisplayName>Enable</DisplayName>
-    <References>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14643</Reference>
-    </References>
-  </UAMethod>
-  <UAMethod NodeId="i=14646" BrowseName="Disable" ParentNodeId="i=14643">
-    <DisplayName>Disable</DisplayName>
-    <References>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14643</Reference>
-    </References>
-  </UAMethod>
-  <UAVariableType NodeId="i=16309" BrowseName="SelectionListType" ValueRank="-2">
-    <DisplayName>SelectionListType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=17632</Reference>
-      <Reference ReferenceType="HasProperty">i=17633</Reference>
-      <Reference ReferenceType="HasProperty">i=16312</Reference>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=63</Reference>
-    </References>
-  </UAVariableType>
-  <UAVariable NodeId="i=17632" BrowseName="Selections" ParentNodeId="i=16309" ValueRank="1">
-    <DisplayName>Selections</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=16309</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=17633" BrowseName="SelectionDescriptions" ParentNodeId="i=16309" DataType="LocalizedText" ValueRank="1">
-    <DisplayName>SelectionDescriptions</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=16309</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=16312" BrowseName="RestrictToList" ParentNodeId="i=16309" DataType="Boolean">
-    <DisplayName>RestrictToList</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=16309</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=14595" BrowseName="PublisherId" ParentNodeId="i=14209">
-    <DisplayName>PublisherId</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14209</Reference>
-    </References>
-  </UAVariable>
-  <UAObject NodeId="i=14417" BrowseName="&lt;ConnectionName&gt;" SymbolicName="ConnectionName_Placeholder" ParentNodeId="i=14416">
-    <DisplayName>&lt;ConnectionName&gt;</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=14209</Reference>
-      <Reference ReferenceType="HasModellingRule">i=11508</Reference>
-      <Reference ReferenceType="i=14476" IsForward="false">i=14416</Reference>
-      <Reference ReferenceType="HasComponent">i=14423</Reference>
-      <Reference ReferenceType="HasComponent">i=17292</Reference> <!--TransportProfileUri-->
-      <Reference ReferenceType="HasProperty">i=14418</Reference>  <!--PublisherId -->
-      <Reference ReferenceType="HasProperty">i=17478</Reference>  <!--ConnectionProperties -->
-
-    </References>
-
-    <!--<References>
-      <Reference ReferenceType="HasComponent">i=14419</Reference> Status
-    </References>-->
-  </UAObject>
-    <UAVariable NodeId="i=14418" BrowseName="PublisherId" ParentNodeId="i=14417">
-    <DisplayName>PublisherId</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14417</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=17478" BrowseName="ConnectionProperties" ParentNodeId="i=14417" DataType="i=14533" ValueRank="1">
-    <DisplayName>ConnectionProperties</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14417</Reference>
-    </References>
-  </UAVariable>
-  <UAObject NodeId="i=14423" BrowseName="Address" ParentNodeId="i=14417">
-    <DisplayName>Address</DisplayName>
-    <References>
-      <Reference ReferenceType="HasComponent">i=15533</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=21145</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14417</Reference>
-    </References>
-  </UAObject>
-  <UAVariable NodeId="i=15533" BrowseName="NetworkInterface" ParentNodeId="i=14423" DataType="String">
-    <DisplayName>NetworkInterface</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14423</Reference>
-    </References>
-  </UAVariable>
-  <UAObject NodeId="i=14443" BrowseName="PublishSubscribe">
-    <DisplayName>PublishSubscribe</DisplayName>
-    <References>
-      <!--      <Reference ReferenceType="HasComponent">i=15215</Reference> GetSecurityKeys
-            <Reference ReferenceType="HasComponent">i=15440</Reference> GetSecurityGroup
-            <Reference ReferenceType="HasComponent">i=15443</Reference> SecurityGroups
-            <Reference ReferenceType="HasComponent">i=17405</Reference> Status
-            <Reference ReferenceType="HasComponent">i=17409</Reference> Diagnostics-->
-      <Reference ReferenceType="HasProperty">i=17481</Reference>
-      <Reference ReferenceType="HasComponent">i=17366</Reference> <!-- addConnection -->
-      <Reference ReferenceType="HasComponent">i=17369</Reference>
-      <Reference ReferenceType="HasComponent">i=17371</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=2253</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=14416</Reference>
-    </References>
-  </UAObject>
-  <UAReferenceType NodeId="i=14476" BrowseName="HasPubSubConnection">
-    <DisplayName>HasPubSubConnection</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=47</Reference>
-    </References>
-    <InverseName>PubSubConnectionOf</InverseName>
-  </UAReferenceType>
-  <UAReferenceType NodeId="i=15296" BrowseName="HasDataSetWriter">
-    <DisplayName>HasDataSetWriter</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=47</Reference>
-    </References>
-    <InverseName>IsWriterInGroup</InverseName>
-  </UAReferenceType>
-  <UAObjectType NodeId="i=17998" BrowseName="WriterGroupMessageType" IsAbstract="true">
-    <DisplayName>WriterGroupMessageType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAMethod NodeId="i=16598" BrowseName="AddConnection" ParentNodeId="i=14416">
-    <DisplayName>AddConnection</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=16599</Reference>
-      <Reference ReferenceType="HasProperty">i=16600</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14416</Reference>
-    </References>
-  </UAMethod>
-  <UAVariable NodeId="i=16599" BrowseName="InputArguments" ParentNodeId="i=16598" DataType="i=296" ValueRank="1">
-    <DisplayName>InputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=16598</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>Configuration</Name>
-              <DataType>
-                <Identifier>i=15617</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAVariable NodeId="i=16600" BrowseName="OutputArguments" ParentNodeId="i=16598" DataType="i=296" ValueRank="1">
-    <DisplayName>OutputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=16598</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>ConnectionId</Name>
-              <DataType>
-                <Identifier>i=17</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAMethod NodeId="i=17366" BrowseName="AddConnection" ParentNodeId="i=14443" MethodDeclarationId="i=16598">
-    <DisplayName>AddConnection</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=17367</Reference>
-      <Reference ReferenceType="HasProperty">i=17368</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14443</Reference>
-    </References>
-  </UAMethod>
-  <UAVariable NodeId="i=17367" BrowseName="InputArguments" ParentNodeId="i=17366" DataType="i=296" ValueRank="1">
-    <DisplayName>InputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17366</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>Configuration</Name>
-              <DataType>
-                <Identifier>i=15617</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAVariable NodeId="i=17368" BrowseName="OutputArguments" ParentNodeId="i=17366" DataType="i=296" ValueRank="1">
-    <DisplayName>OutputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17366</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>ConnectionId</Name>
-              <DataType>
-                <Identifier>i=17</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAMethod NodeId="i=14432" BrowseName="RemoveConnection" ParentNodeId="i=14416">
-    <DisplayName>RemoveConnection</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=14433</Reference>
-      <Reference ReferenceType="HasModellingRule">i=80</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14416</Reference>
-    </References>
-  </UAMethod>
-  <UAVariable NodeId="i=14433" BrowseName="InputArguments" ParentNodeId="i=14432" DataType="i=296" ValueRank="1">
-    <DisplayName>InputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14432</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>ConnectionId</Name>
-              <DataType>
-                <Identifier>i=17</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAMethod NodeId="i=17369" BrowseName="RemoveConnection" ParentNodeId="i=14443" MethodDeclarationId="i=14432">
-    <DisplayName>RemoveConnection</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=17370</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14443</Reference>
-    </References>
-  </UAMethod>
-  <UAVariable NodeId="i=17370" BrowseName="InputArguments" ParentNodeId="i=17369" DataType="i=296" ValueRank="1">
-    <DisplayName>InputArguments</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17369</Reference>
-    </References>
-    <Value>
-      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
-        <ExtensionObject>
-          <TypeId>
-            <Identifier>i=297</Identifier>
-          </TypeId>
-          <Body>
-            <Argument>
-              <Name>ConnectionId</Name>
-              <DataType>
-                <Identifier>i=17</Identifier>
-              </DataType>
-              <ValueRank>-1</ValueRank>
-              <ArrayDimensions />
-              <Description p5:nil="true" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" />
-            </Argument>
-          </Body>
-        </ExtensionObject>
-      </ListOfExtensionObject>
-    </Value>
-  </UAVariable>
-  <UAObject NodeId="i=17371" BrowseName="PublishedDataSets" ParentNodeId="i=14443">
-      <DisplayName>PublishedDataSets</DisplayName>
-      <References>
-          <Reference ReferenceType="HasTypeDefinition">i=14477</Reference>
-          <Reference ReferenceType="HasComponent" IsForward="false">i=14443</Reference>
-      </References>
-  </UAObject>
-  <UAVariable NodeId="i=17481" BrowseName="SupportedTransportProfiles" ParentNodeId="i=14443" DataType="String" ValueRank="1">
-    <DisplayName>SupportedTransportProfiles</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=14443</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=17292" BrowseName="TransportProfileUri" ParentNodeId="i=14417" DataType="String">
-    <DisplayName>TransportProfileUri</DisplayName>
-    <References>
-      <Reference ReferenceType="HasProperty">i=17706</Reference>
-      <Reference ReferenceType="HasTypeDefinition">i=16309</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasComponent" IsForward="false">i=14417</Reference>
-    </References>
-  </UAVariable>
-  <UAVariable NodeId="i=17706" BrowseName="Selections" ParentNodeId="i=17292" ValueRank="1">
-    <DisplayName>Selections</DisplayName>
-    <References>
-      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
-      <Reference ReferenceType="HasModellingRule">i=78</Reference>
-      <Reference ReferenceType="HasProperty" IsForward="false">i=17292</Reference>
-    </References>
-  </UAVariable>
-  <UAObjectType NodeId="i=21105" BrowseName="UadpWriterGroupMessageType">
-    <DisplayName>UadpWriterGroupMessageType</DisplayName>
-    <References>
-      <!-- <Reference ReferenceType="HasProperty">i=21106</Reference> -->
-      <!-- <Reference ReferenceType="HasProperty">i=21107</Reference> -->
-      <!-- <Reference ReferenceType="HasProperty">i=21108</Reference> -->
-      <!-- <Reference ReferenceType="HasProperty">i=21109</Reference> -->
-      <!-- <Reference ReferenceType="HasProperty">i=21110</Reference> -->
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=17998</Reference>
-    </References>
-  </UAObjectType>
-  <UAObjectType NodeId="i=21096" BrowseName="DataSetWriterMessageType" IsAbstract="true">
-    <DisplayName>DataSetWriterMessageType</DisplayName>
-    <References>
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
-    </References>
-  </UAObjectType>
-  <UAObjectType NodeId="i=21111" BrowseName="UadpDataSetWriterMessageType">
-    <DisplayName>UadpDataSetWriterMessageType</DisplayName>
-    <References>
-      <!-- <Reference ReferenceType="HasProperty">i=21112</Reference> -->
-      <!-- <Reference ReferenceType="HasProperty">i=21113</Reference> -->
-      <!-- <Reference ReferenceType="HasProperty">i=21114</Reference> -->
-      <!-- <Reference ReferenceType="HasProperty">i=21115</Reference> -->
-      <Reference ReferenceType="HasSubtype" IsForward="false">i=21096</Reference>
-    </References>
-  </UAObjectType>
-</UANodeSet>
diff --git a/ext/open62541/tools/schema/Opc.Ua.Types.bsd b/ext/open62541/tools/schema/Opc.Ua.Types.bsd
deleted file mode 100644
index 3de0aae..0000000
--- a/ext/open62541/tools/schema/Opc.Ua.Types.bsd
+++ /dev/null
@@ -1,3114 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!--
- * Copyright (c) 2005-2018 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/
--->
-
-<opc:TypeDictionary
-  xmlns:opc="http://opcfoundation.org/BinarySchema/"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xmlns:ua="http://opcfoundation.org/UA/"
-  xmlns:tns="http://opcfoundation.org/UA/"
-  DefaultByteOrder="LittleEndian"
-  TargetNamespace="http://opcfoundation.org/UA/"
->
-
-  <opc:Import Namespace="http://opcfoundation.org/BinarySchema/" />
-
-  <opc:StructuredType Name="XmlElement">
-    <opc:Documentation>An XML element encoded as a UTF-8 string.</opc:Documentation>
-    <opc:Field Name="Length" TypeName="opc:Int32" />
-    <opc:Field Name="Value" TypeName="opc:Char" LengthField="Length" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="NodeIdType" LengthInBits="6">
-    <opc:Documentation>The possible encodings for a NodeId value.</opc:Documentation>
-    <opc:EnumeratedValue Name="TwoByte" Value="0" />
-    <opc:EnumeratedValue Name="FourByte" Value="1" />
-    <opc:EnumeratedValue Name="Numeric" Value="2" />
-    <opc:EnumeratedValue Name="String" Value="3" />
-    <opc:EnumeratedValue Name="Guid" Value="4" />
-    <opc:EnumeratedValue Name="ByteString" Value="5" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="TwoByteNodeId">
-    <opc:Field Name="Identifier" TypeName="opc:Byte" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="FourByteNodeId">
-    <opc:Field Name="NamespaceIndex" TypeName="opc:Byte" />
-    <opc:Field Name="Identifier" TypeName="opc:UInt16" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="NumericNodeId">
-    <opc:Field Name="NamespaceIndex" TypeName="opc:UInt16" />
-    <opc:Field Name="Identifier" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="StringNodeId">
-    <opc:Field Name="NamespaceIndex" TypeName="opc:UInt16" />
-    <opc:Field Name="Identifier" TypeName="opc:CharArray" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="GuidNodeId">
-    <opc:Field Name="NamespaceIndex" TypeName="opc:UInt16" />
-    <opc:Field Name="Identifier" TypeName="opc:Guid" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ByteStringNodeId">
-    <opc:Field Name="NamespaceIndex" TypeName="opc:UInt16" />
-    <opc:Field Name="Identifier" TypeName="opc:ByteString" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="NodeId">
-    <opc:Documentation>An identifier for a node in a UA server address space.</opc:Documentation>
-    <opc:Field Name="NodeIdType" TypeName="ua:NodeIdType" />
-    <opc:Field Name="Reserved1" TypeName="opc:Bit" Length="2" />
-    <opc:Field Name="TwoByte" TypeName="ua:TwoByteNodeId" SwitchField="NodeIdType" SwitchValue="0" />
-    <opc:Field Name="FourByte" TypeName="ua:FourByteNodeId" SwitchField="NodeIdType" SwitchValue="1" />
-    <opc:Field Name="Numeric" TypeName="ua:NumericNodeId" SwitchField="NodeIdType" SwitchValue="2" />
-    <opc:Field Name="String" TypeName="ua:StringNodeId" SwitchField="NodeIdType" SwitchValue="3" />
-    <opc:Field Name="Guid" TypeName="ua:GuidNodeId" SwitchField="NodeIdType" SwitchValue="4" />
-    <opc:Field Name="ByteString" TypeName="ua:ByteStringNodeId" SwitchField="NodeIdType" SwitchValue="5" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ExpandedNodeId">
-    <opc:Documentation>An identifier for a node in a UA server address space qualified with a complete namespace string.</opc:Documentation>
-    <opc:Field Name="NodeIdType" TypeName="ua:NodeIdType" />
-    <opc:Field Name="ServerIndexSpecified" TypeName="opc:Bit" />
-    <opc:Field Name="NamespaceURISpecified" TypeName="opc:Bit" />
-    <opc:Field Name="TwoByte" TypeName="ua:TwoByteNodeId" SwitchField="NodeIdType" SwitchValue="0" />
-    <opc:Field Name="FourByte" TypeName="ua:FourByteNodeId" SwitchField="NodeIdType" SwitchValue="1" />
-    <opc:Field Name="Numeric" TypeName="ua:NumericNodeId" SwitchField="NodeIdType" SwitchValue="2" />
-    <opc:Field Name="String" TypeName="ua:StringNodeId" SwitchField="NodeIdType" SwitchValue="3" />
-    <opc:Field Name="Guid" TypeName="ua:GuidNodeId" SwitchField="NodeIdType" SwitchValue="4" />
-    <opc:Field Name="ByteString" TypeName="ua:ByteStringNodeId" SwitchField="NodeIdType" SwitchValue="5" />
-    <opc:Field Name="NamespaceURI" TypeName="opc:CharArray" SwitchField="NamespaceURISpecified"/>
-    <opc:Field Name="ServerIndex" TypeName="opc:UInt32" SwitchField="ServerIndexSpecified"/>
-  </opc:StructuredType>
-
-  <opc:OpaqueType Name="StatusCode" LengthInBits="32" ByteOrderSignificant="true">
-    <opc:Documentation>A 32-bit status code value.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:StructuredType Name="DiagnosticInfo">
-    <opc:Documentation>A recursive structure containing diagnostic information associated with a status code.</opc:Documentation>
-    <opc:Field Name="SymbolicIdSpecified" TypeName="opc:Bit" />
-    <opc:Field Name="NamespaceURISpecified" TypeName="opc:Bit" />
-    <opc:Field Name="LocaleSpecified" TypeName="opc:Bit" />
-    <opc:Field Name="LocalizedTextSpecified" TypeName="opc:Bit" />
-    <opc:Field Name="AdditionalInfoSpecified" TypeName="opc:Bit" />
-    <opc:Field Name="InnerStatusCodeSpecified" TypeName="opc:Bit" />
-    <opc:Field Name="InnerDiagnosticInfoSpecified" TypeName="opc:Bit" />
-    <opc:Field Name="Reserved1" TypeName="opc:Bit" Length="2" />
-    <opc:Field Name="SymbolicId" TypeName="opc:Int32" SwitchField="SymbolicIdSpecified" />
-    <opc:Field Name="NamespaceURI" TypeName="opc:Int32" SwitchField="NamespaceURISpecified" />
-    <opc:Field Name="Locale" TypeName="opc:Int32" SwitchField="LocaleSpecified" />
-    <opc:Field Name="LocalizedText" TypeName="opc:Int32" SwitchField="LocalizedTextSpecified" />
-    <opc:Field Name="AdditionalInfo" TypeName="opc:CharArray" SwitchField="AdditionalInfoSpecified" />
-    <opc:Field Name="InnerStatusCode" TypeName="ua:StatusCode" SwitchField="InnerStatusCodeSpecified" />
-    <opc:Field Name="InnerDiagnosticInfo" TypeName="ua:DiagnosticInfo" SwitchField="InnerDiagnosticInfoSpecified" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="QualifiedName">
-    <opc:Documentation>A string qualified with a namespace index.</opc:Documentation>
-    <opc:Field Name="NamespaceIndex" TypeName="opc:UInt16" />
-    <opc:Field Name="Name" TypeName="opc:CharArray" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="LocalizedText">
-    <opc:Documentation>A string qualified with a namespace index.</opc:Documentation>
-    <opc:Field Name="LocaleSpecified" TypeName="opc:Bit" />
-    <opc:Field Name="TextSpecified" TypeName="opc:Bit" />
-    <opc:Field Name="Reserved1" TypeName="opc:Bit" Length="6" />
-    <opc:Field Name="Locale" TypeName="opc:CharArray" SwitchField="LocaleSpecified" />
-    <opc:Field Name="Text" TypeName="opc:CharArray" SwitchField="TextSpecified" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DataValue">
-    <opc:Documentation>A value with an associated timestamp, and quality.</opc:Documentation>
-    <opc:Field Name="ValueSpecified" TypeName="opc:Bit" />
-    <opc:Field Name="StatusCodeSpecified" TypeName="opc:Bit" />
-    <opc:Field Name="SourceTimestampSpecified" TypeName="opc:Bit" />
-    <opc:Field Name="SourcePicosecondsSpecified" TypeName="opc:Bit" />
-    <opc:Field Name="ServerTimestampSpecified" TypeName="opc:Bit" />
-    <opc:Field Name="ServerPicosecondsSpecified" TypeName="opc:Bit" />
-    <opc:Field Name="Reserved1" TypeName="opc:Bit" Length="2" />
-    <opc:Field Name="Value" TypeName="ua:Variant" SwitchField="ValueSpecified" />
-    <opc:Field Name="StatusCode" TypeName="ua:StatusCode" SwitchField="StatusCodeSpecified" />
-    <opc:Field Name="SourceTimestamp" TypeName="opc:DateTime" SwitchField="SourceTimestampSpecified" />
-    <opc:Field Name="SourcePicoseconds" TypeName="opc:UInt16" SwitchField="SourcePicosecondsSpecified" />
-    <opc:Field Name="ServerTimestamp" TypeName="opc:DateTime" SwitchField="ServerTimestampSpecified" />
-    <opc:Field Name="ServerPicoseconds" TypeName="opc:UInt16" SwitchField="ServerPicosecondsSpecified" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ExtensionObject">
-    <opc:Documentation>A serialized object prefixed with its data type identifier.</opc:Documentation>
-    <opc:Field Name="TypeIdSpecified" TypeName="opc:Bit" />
-    <opc:Field Name="BinaryBody" TypeName="opc:Bit" />
-    <opc:Field Name="XmlBody" TypeName="opc:Bit" />
-    <opc:Field Name="Reserved1" TypeName="opc:Bit" Length="5" />
-    <opc:Field Name="TypeId" TypeName="ua:ExpandedNodeId" SwitchField="TypeIdSpecified" />
-    <opc:Field Name="BodyLength" TypeName="opc:Int32" />
-    <opc:Field Name="Body" TypeName="opc:Byte" LengthField="BodyLength" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="Variant">
-    <opc:Documentation>A union of several types.</opc:Documentation>
-    <opc:Field Name="VariantType" TypeName="opc:Bit" Length="6" />
-    <opc:Field Name="ArrayDimensionsSpecified" TypeName="opc:Bit" Length="1"/>
-    <opc:Field Name="ArrayLengthSpecified" TypeName="opc:Bit" Length="1"/>
-    <opc:Field Name="ArrayLength" TypeName="opc:Int32" SwitchField="ArrayLengthSpecified" />
-    <opc:Field Name="Boolean" TypeName="opc:Boolean" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="1" />
-    <opc:Field Name="SByte" TypeName="opc:SByte" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="2" />
-    <opc:Field Name="Byte" TypeName="opc:Byte" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="3" />
-    <opc:Field Name="Int16" TypeName="opc:Int16" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="4" />
-    <opc:Field Name="UInt16" TypeName="opc:UInt16" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="5" />
-    <opc:Field Name="Int32" TypeName="opc:Int32" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="6" />
-    <opc:Field Name="UInt32" TypeName="opc:UInt32" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="7" />
-    <opc:Field Name="Int64" TypeName="opc:Int64" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="8" />
-    <opc:Field Name="UInt64" TypeName="opc:UInt64" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="9" />
-    <opc:Field Name="Float" TypeName="opc:Float" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="10" />
-    <opc:Field Name="Double" TypeName="opc:Double" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="11" />
-    <opc:Field Name="String" TypeName="opc:CharArray" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="12" />
-    <opc:Field Name="DateTime" TypeName="opc:DateTime" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="13" />
-    <opc:Field Name="Guid" TypeName="opc:Guid" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="14" />
-    <opc:Field Name="ByteString" TypeName="opc:ByteString" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="15" />
-    <opc:Field Name="XmlElement" TypeName="ua:XmlElement" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="16" />
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="17" />
-    <opc:Field Name="ExpandedNodeId" TypeName="ua:ExpandedNodeId" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="18" />
-    <opc:Field Name="StatusCode" TypeName="ua:StatusCode" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="19" />
-    <opc:Field Name="QualifiedName" TypeName="ua:QualifiedName" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="20" />
-    <opc:Field Name="LocalizedText" TypeName="ua:LocalizedText" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="21" />
-    <opc:Field Name="ExtensionObject" TypeName="ua:ExtensionObject" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="22" />
-    <opc:Field Name="DataValue" TypeName="ua:DataValue" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="23" />
-    <opc:Field Name="Variant" TypeName="ua:Variant" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="24" />
-    <opc:Field Name="DiagnosticInfo" TypeName="ua:DiagnosticInfo" LengthField="ArrayLength" SwitchField="VariantType" SwitchValue="25" />
-    <opc:Field Name="NoOfArrayDimensions" TypeName="opc:Int32" SwitchField="ArrayDimensionsSpecified" />
-    <opc:Field Name="ArrayDimensions" TypeName="opc:Int32" LengthField="NoOfArrayDimensions" SwitchField="ArrayDimensionsSpecified" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="NamingRuleType" LengthInBits="32">
-    <opc:EnumeratedValue Name="Mandatory" Value="1" />
-    <opc:EnumeratedValue Name="Optional" Value="2" />
-    <opc:EnumeratedValue Name="Constraint" Value="3" />
-  </opc:EnumeratedType>
-    
-
-  <opc:OpaqueType Name="ImageBMP">
-    <opc:Documentation>An image encoded in BMP format.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:OpaqueType Name="ImageGIF">
-    <opc:Documentation>An image encoded in GIF format.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:OpaqueType Name="ImageJPG">
-    <opc:Documentation>An image encoded in JPEG format.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:OpaqueType Name="ImagePNG">
-    <opc:Documentation>An image encoded in PNG format.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:OpaqueType Name="AudioDataType">
-    <opc:Documentation>An image encoded in PNG format.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:OpaqueType Name="BitFieldMaskDataType">
-    <opc:Documentation>A mask of 32 bits that can be updated individually by using the top 32 bits as a mask.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:StructuredType Name="KeyValuePair" BaseType="ua:ExtensionObject">
-    <opc:Field Name="Key" TypeName="ua:QualifiedName" />
-    <opc:Field Name="Value" TypeName="ua:Variant" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="EndpointType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="EndpointUrl" TypeName="opc:String" />
-    <opc:Field Name="SecurityMode" TypeName="tns:MessageSecurityMode" />
-    <opc:Field Name="SecurityPolicyUri" TypeName="opc:String" />
-    <opc:Field Name="TransportProfileUri" TypeName="opc:String" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="OpenFileMode" LengthInBits="32">
-    <opc:EnumeratedValue Name="Read" Value="1" />
-    <opc:EnumeratedValue Name="Write" Value="2" />
-    <opc:EnumeratedValue Name="EraseExisting" Value="4" />
-    <opc:EnumeratedValue Name="Append" Value="8" />
-  </opc:EnumeratedType>
-
-  <opc:EnumeratedType Name="IdentityCriteriaType" LengthInBits="32">
-    <opc:EnumeratedValue Name="UserName" Value="1" />
-    <opc:EnumeratedValue Name="Thumbprint" Value="2" />
-    <opc:EnumeratedValue Name="Role" Value="3" />
-    <opc:EnumeratedValue Name="GroupId" Value="4" />
-    <opc:EnumeratedValue Name="Anonymous" Value="5" />
-    <opc:EnumeratedValue Name="AuthenticatedUser" Value="6" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="IdentityMappingRuleType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="CriteriaType" TypeName="tns:IdentityCriteriaType" />
-    <opc:Field Name="Criteria" TypeName="opc:String" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="TrustListMasks" LengthInBits="32">
-    <opc:EnumeratedValue Name="None" Value="0" />
-    <opc:EnumeratedValue Name="TrustedCertificates" Value="1" />
-    <opc:EnumeratedValue Name="TrustedCrls" Value="2" />
-    <opc:EnumeratedValue Name="IssuerCertificates" Value="4" />
-    <opc:EnumeratedValue Name="IssuerCrls" Value="8" />
-    <opc:EnumeratedValue Name="All" Value="15" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="TrustListDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="SpecifiedLists" TypeName="opc:UInt32" />
-    <opc:Field Name="NoOfTrustedCertificates" TypeName="opc:Int32" />
-    <opc:Field Name="TrustedCertificates" TypeName="opc:ByteString" LengthField="NoOfTrustedCertificates" />
-    <opc:Field Name="NoOfTrustedCrls" TypeName="opc:Int32" />
-    <opc:Field Name="TrustedCrls" TypeName="opc:ByteString" LengthField="NoOfTrustedCrls" />
-    <opc:Field Name="NoOfIssuerCertificates" TypeName="opc:Int32" />
-    <opc:Field Name="IssuerCertificates" TypeName="opc:ByteString" LengthField="NoOfIssuerCertificates" />
-    <opc:Field Name="NoOfIssuerCrls" TypeName="opc:Int32" />
-    <opc:Field Name="IssuerCrls" TypeName="opc:ByteString" LengthField="NoOfIssuerCrls" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DecimalDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="Scale" TypeName="opc:Int16" />
-    <opc:Field Name="Value" TypeName="opc:ByteString" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DataTypeSchemaHeader" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NoOfNamespaces" TypeName="opc:Int32" />
-    <opc:Field Name="Namespaces" TypeName="opc:String" LengthField="NoOfNamespaces" />
-    <opc:Field Name="NoOfStructureDataTypes" TypeName="opc:Int32" />
-    <opc:Field Name="StructureDataTypes" TypeName="tns:StructureDescription" LengthField="NoOfStructureDataTypes" />
-    <opc:Field Name="NoOfEnumDataTypes" TypeName="opc:Int32" />
-    <opc:Field Name="EnumDataTypes" TypeName="tns:EnumDescription" LengthField="NoOfEnumDataTypes" />
-    <opc:Field Name="NoOfSimpleDataTypes" TypeName="opc:Int32" />
-    <opc:Field Name="SimpleDataTypes" TypeName="tns:SimpleTypeDescription" LengthField="NoOfSimpleDataTypes" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DataTypeDescription" BaseType="ua:ExtensionObject">
-    <opc:Field Name="DataTypeId" TypeName="ua:NodeId" />
-    <opc:Field Name="Name" TypeName="ua:QualifiedName" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="StructureDescription" BaseType="tns:DataTypeDescription">
-    <opc:Field Name="DataTypeId" TypeName="ua:NodeId" SourceType="tns:DataTypeDescription" />
-    <opc:Field Name="Name" TypeName="ua:QualifiedName" SourceType="tns:DataTypeDescription" />
-    <opc:Field Name="StructureDefinition" TypeName="tns:StructureDefinition" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="EnumDescription" BaseType="tns:DataTypeDescription">
-    <opc:Field Name="DataTypeId" TypeName="ua:NodeId" SourceType="tns:DataTypeDescription" />
-    <opc:Field Name="Name" TypeName="ua:QualifiedName" SourceType="tns:DataTypeDescription" />
-    <opc:Field Name="EnumDefinition" TypeName="tns:EnumDefinition" />
-    <opc:Field Name="BuiltInType" TypeName="opc:Byte" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SimpleTypeDescription" BaseType="tns:DataTypeDescription">
-    <opc:Field Name="DataTypeId" TypeName="ua:NodeId" SourceType="tns:DataTypeDescription" />
-    <opc:Field Name="Name" TypeName="ua:QualifiedName" SourceType="tns:DataTypeDescription" />
-    <opc:Field Name="BaseDataType" TypeName="ua:NodeId" />
-    <opc:Field Name="BuiltInType" TypeName="opc:Byte" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="UABinaryFileDataType" BaseType="tns:DataTypeSchemaHeader">
-    <opc:Field Name="NoOfNamespaces" TypeName="opc:Int32" />
-    <opc:Field Name="Namespaces" TypeName="opc:String" LengthField="NoOfNamespaces" />
-    <opc:Field Name="NoOfStructureDataTypes" TypeName="opc:Int32" />
-    <opc:Field Name="StructureDataTypes" TypeName="tns:StructureDescription" LengthField="NoOfStructureDataTypes" />
-    <opc:Field Name="NoOfEnumDataTypes" TypeName="opc:Int32" />
-    <opc:Field Name="EnumDataTypes" TypeName="tns:EnumDescription" LengthField="NoOfEnumDataTypes" />
-    <opc:Field Name="NoOfSimpleDataTypes" TypeName="opc:Int32" />
-    <opc:Field Name="SimpleDataTypes" TypeName="tns:SimpleTypeDescription" LengthField="NoOfSimpleDataTypes" />
-    <opc:Field Name="SchemaLocation" TypeName="opc:String" />
-    <opc:Field Name="NoOfFileHeader" TypeName="opc:Int32" />
-    <opc:Field Name="FileHeader" TypeName="tns:KeyValuePair" LengthField="NoOfFileHeader" />
-    <opc:Field Name="Body" TypeName="ua:Variant" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="PubSubState" LengthInBits="32">
-    <opc:EnumeratedValue Name="Disabled" Value="0" />
-    <opc:EnumeratedValue Name="Paused" Value="1" />
-    <opc:EnumeratedValue Name="Operational" Value="2" />
-    <opc:EnumeratedValue Name="Error" Value="3" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="DataSetMetaDataType" BaseType="tns:DataTypeSchemaHeader">
-    <opc:Field Name="NoOfNamespaces" TypeName="opc:Int32" />
-    <opc:Field Name="Namespaces" TypeName="opc:String" LengthField="NoOfNamespaces" />
-    <opc:Field Name="NoOfStructureDataTypes" TypeName="opc:Int32" />
-    <opc:Field Name="StructureDataTypes" TypeName="tns:StructureDescription" LengthField="NoOfStructureDataTypes" />
-    <opc:Field Name="NoOfEnumDataTypes" TypeName="opc:Int32" />
-    <opc:Field Name="EnumDataTypes" TypeName="tns:EnumDescription" LengthField="NoOfEnumDataTypes" />
-    <opc:Field Name="NoOfSimpleDataTypes" TypeName="opc:Int32" />
-    <opc:Field Name="SimpleDataTypes" TypeName="tns:SimpleTypeDescription" LengthField="NoOfSimpleDataTypes" />
-    <opc:Field Name="Name" TypeName="opc:String" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" />
-    <opc:Field Name="NoOfFields" TypeName="opc:Int32" />
-    <opc:Field Name="Fields" TypeName="tns:FieldMetaData" LengthField="NoOfFields" />
-    <opc:Field Name="DataSetClassId" TypeName="opc:Guid" />
-    <opc:Field Name="ConfigurationVersion" TypeName="tns:ConfigurationVersionDataType" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="FieldMetaData" BaseType="ua:ExtensionObject">
-    <opc:Field Name="Name" TypeName="opc:String" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" />
-    <opc:Field Name="FieldFlags" TypeName="tns:DataSetFieldFlags" />
-    <opc:Field Name="BuiltInType" TypeName="opc:Byte" />
-    <opc:Field Name="DataType" TypeName="ua:NodeId" />
-    <opc:Field Name="ValueRank" TypeName="opc:Int32" />
-    <opc:Field Name="NoOfArrayDimensions" TypeName="opc:Int32" />
-    <opc:Field Name="ArrayDimensions" TypeName="opc:UInt32" LengthField="NoOfArrayDimensions" />
-    <opc:Field Name="MaxStringLength" TypeName="opc:UInt32" />
-    <opc:Field Name="DataSetFieldId" TypeName="opc:Guid" />
-    <opc:Field Name="NoOfProperties" TypeName="opc:Int32" />
-    <opc:Field Name="Properties" TypeName="tns:KeyValuePair" LengthField="NoOfProperties" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="DataSetFieldFlags" LengthInBits="16" IsOptionSet="true">
-    <opc:EnumeratedValue Name="None" Value="0" />
-    <opc:EnumeratedValue Name="PromotedField" Value="1" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="ConfigurationVersionDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="MajorVersion" TypeName="opc:UInt32" />
-    <opc:Field Name="MinorVersion" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="PublishedDataSetDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="Name" TypeName="opc:String" />
-    <opc:Field Name="NoOfDataSetFolder" TypeName="opc:Int32" />
-    <opc:Field Name="DataSetFolder" TypeName="opc:String" LengthField="NoOfDataSetFolder" />
-    <opc:Field Name="DataSetMetaData" TypeName="tns:DataSetMetaDataType" />
-    <opc:Field Name="NoOfExtensionFields" TypeName="opc:Int32" />
-    <opc:Field Name="ExtensionFields" TypeName="tns:KeyValuePair" LengthField="NoOfExtensionFields" />
-    <opc:Field Name="DataSetSource" TypeName="ua:ExtensionObject" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="PublishedDataSetSourceDataType" BaseType="ua:ExtensionObject">
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="PublishedVariableDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="PublishedVariable" TypeName="ua:NodeId" />
-    <opc:Field Name="AttributeId" TypeName="opc:UInt32" />
-    <opc:Field Name="SamplingIntervalHint" TypeName="opc:Double" />
-    <opc:Field Name="DeadbandType" TypeName="opc:UInt32" />
-    <opc:Field Name="DeadbandValue" TypeName="opc:Double" />
-    <opc:Field Name="IndexRange" TypeName="opc:String" />
-    <opc:Field Name="SubstituteValue" TypeName="ua:Variant" />
-    <opc:Field Name="NoOfMetaDataProperties" TypeName="opc:Int32" />
-    <opc:Field Name="MetaDataProperties" TypeName="ua:QualifiedName" LengthField="NoOfMetaDataProperties" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="PublishedDataItemsDataType" BaseType="tns:PublishedDataSetSourceDataType">
-    <opc:Field Name="NoOfPublishedData" TypeName="opc:Int32" />
-    <opc:Field Name="PublishedData" TypeName="tns:PublishedVariableDataType" LengthField="NoOfPublishedData" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="PublishedEventsDataType" BaseType="tns:PublishedDataSetSourceDataType">
-    <opc:Field Name="EventNotifier" TypeName="ua:NodeId" />
-    <opc:Field Name="NoOfSelectedFields" TypeName="opc:Int32" />
-    <opc:Field Name="SelectedFields" TypeName="tns:SimpleAttributeOperand" LengthField="NoOfSelectedFields" />
-    <opc:Field Name="Filter" TypeName="tns:ContentFilter" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="DataSetFieldContentMask" LengthInBits="32" IsOptionSet="true">
-    <opc:EnumeratedValue Name="None" Value="0" />
-    <opc:EnumeratedValue Name="StatusCode" Value="1" />
-    <opc:EnumeratedValue Name="SourceTimestamp" Value="2" />
-    <opc:EnumeratedValue Name="ServerTimestamp" Value="4" />
-    <opc:EnumeratedValue Name="SourcePicoSeconds" Value="8" />
-    <opc:EnumeratedValue Name="ServerPicoSeconds" Value="16" />
-    <opc:EnumeratedValue Name="RawData" Value="32" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="DataSetWriterDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="Name" TypeName="opc:String" />
-    <opc:Field Name="Enabled" TypeName="opc:Boolean" />
-    <opc:Field Name="DataSetWriterId" TypeName="opc:UInt16" />
-    <opc:Field Name="DataSetFieldContentMask" TypeName="tns:DataSetFieldContentMask" />
-    <opc:Field Name="KeyFrameCount" TypeName="opc:UInt32" />
-    <opc:Field Name="DataSetName" TypeName="opc:String" />
-    <opc:Field Name="NoOfDataSetWriterProperties" TypeName="opc:Int32" />
-    <opc:Field Name="DataSetWriterProperties" TypeName="tns:KeyValuePair" LengthField="NoOfDataSetWriterProperties" />
-    <opc:Field Name="TransportSettings" TypeName="ua:ExtensionObject" />
-    <opc:Field Name="MessageSettings" TypeName="ua:ExtensionObject" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DataSetWriterTransportDataType" BaseType="ua:ExtensionObject">
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DataSetWriterMessageDataType" BaseType="ua:ExtensionObject">
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="PubSubGroupDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="Name" TypeName="opc:String" />
-    <opc:Field Name="Enabled" TypeName="opc:Boolean" />
-    <opc:Field Name="SecurityMode" TypeName="tns:MessageSecurityMode" />
-    <opc:Field Name="SecurityGroupId" TypeName="opc:String" />
-    <opc:Field Name="NoOfSecurityKeyServices" TypeName="opc:Int32" />
-    <opc:Field Name="SecurityKeyServices" TypeName="tns:EndpointDescription" LengthField="NoOfSecurityKeyServices" />
-    <opc:Field Name="MaxNetworkMessageSize" TypeName="opc:UInt32" />
-    <opc:Field Name="NoOfGroupProperties" TypeName="opc:Int32" />
-    <opc:Field Name="GroupProperties" TypeName="tns:KeyValuePair" LengthField="NoOfGroupProperties" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="WriterGroupDataType" BaseType="tns:PubSubGroupDataType">
-    <opc:Field Name="Name" TypeName="opc:String" SourceType="tns:PubSubGroupDataType" />
-    <opc:Field Name="Enabled" TypeName="opc:Boolean" SourceType="tns:PubSubGroupDataType" />
-    <opc:Field Name="SecurityMode" TypeName="tns:MessageSecurityMode" SourceType="tns:PubSubGroupDataType" />
-    <opc:Field Name="SecurityGroupId" TypeName="opc:String" SourceType="tns:PubSubGroupDataType" />
-    <opc:Field Name="NoOfSecurityKeyServices" TypeName="opc:Int32" />
-    <opc:Field Name="SecurityKeyServices" TypeName="tns:EndpointDescription" LengthField="NoOfSecurityKeyServices" />
-    <opc:Field Name="MaxNetworkMessageSize" TypeName="opc:UInt32" SourceType="tns:PubSubGroupDataType" />
-    <opc:Field Name="NoOfGroupProperties" TypeName="opc:Int32" />
-    <opc:Field Name="GroupProperties" TypeName="tns:KeyValuePair" LengthField="NoOfGroupProperties" />
-    <opc:Field Name="WriterGroupId" TypeName="opc:UInt16" />
-    <opc:Field Name="PublishingInterval" TypeName="opc:Double" />
-    <opc:Field Name="KeepAliveTime" TypeName="opc:Double" />
-    <opc:Field Name="Priority" TypeName="opc:Byte" />
-    <opc:Field Name="NoOfLocaleIds" TypeName="opc:Int32" />
-    <opc:Field Name="LocaleIds" TypeName="opc:String" LengthField="NoOfLocaleIds" />
-    <opc:Field Name="HeaderLayoutUri" TypeName="opc:String" />
-    <opc:Field Name="TransportSettings" TypeName="ua:ExtensionObject" />
-    <opc:Field Name="MessageSettings" TypeName="ua:ExtensionObject" />
-    <opc:Field Name="NoOfDataSetWriters" TypeName="opc:Int32" />
-    <opc:Field Name="DataSetWriters" TypeName="tns:DataSetWriterDataType" LengthField="NoOfDataSetWriters" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="WriterGroupTransportDataType" BaseType="ua:ExtensionObject">
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="WriterGroupMessageDataType" BaseType="ua:ExtensionObject">
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="PubSubConnectionDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="Name" TypeName="opc:String" />
-    <opc:Field Name="Enabled" TypeName="opc:Boolean" />
-    <opc:Field Name="PublisherId" TypeName="ua:Variant" />
-    <opc:Field Name="TransportProfileUri" TypeName="opc:String" />
-    <opc:Field Name="Address" TypeName="ua:ExtensionObject" />
-    <opc:Field Name="NoOfConnectionProperties" TypeName="opc:Int32" />
-    <opc:Field Name="ConnectionProperties" TypeName="tns:KeyValuePair" LengthField="NoOfConnectionProperties" />
-    <opc:Field Name="TransportSettings" TypeName="ua:ExtensionObject" />
-    <opc:Field Name="NoOfWriterGroups" TypeName="opc:Int32" />
-    <opc:Field Name="WriterGroups" TypeName="tns:WriterGroupDataType" LengthField="NoOfWriterGroups" />
-    <opc:Field Name="NoOfReaderGroups" TypeName="opc:Int32" />
-    <opc:Field Name="ReaderGroups" TypeName="tns:ReaderGroupDataType" LengthField="NoOfReaderGroups" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ConnectionTransportDataType" BaseType="ua:ExtensionObject">
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="NetworkAddressDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NetworkInterface" TypeName="opc:String" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="NetworkAddressUrlDataType" BaseType="tns:NetworkAddressDataType">
-    <opc:Field Name="NetworkInterface" TypeName="opc:String" SourceType="tns:NetworkAddressDataType" />
-    <opc:Field Name="Url" TypeName="opc:String" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ReaderGroupDataType" BaseType="tns:PubSubGroupDataType">
-    <opc:Field Name="Name" TypeName="opc:String" SourceType="tns:PubSubGroupDataType" />
-    <opc:Field Name="Enabled" TypeName="opc:Boolean" SourceType="tns:PubSubGroupDataType" />
-    <opc:Field Name="SecurityMode" TypeName="tns:MessageSecurityMode" SourceType="tns:PubSubGroupDataType" />
-    <opc:Field Name="SecurityGroupId" TypeName="opc:String" SourceType="tns:PubSubGroupDataType" />
-    <opc:Field Name="NoOfSecurityKeyServices" TypeName="opc:Int32" />
-    <opc:Field Name="SecurityKeyServices" TypeName="tns:EndpointDescription" LengthField="NoOfSecurityKeyServices" />
-    <opc:Field Name="MaxNetworkMessageSize" TypeName="opc:UInt32" SourceType="tns:PubSubGroupDataType" />
-    <opc:Field Name="NoOfGroupProperties" TypeName="opc:Int32" />
-    <opc:Field Name="GroupProperties" TypeName="tns:KeyValuePair" LengthField="NoOfGroupProperties" />
-    <opc:Field Name="TransportSettings" TypeName="ua:ExtensionObject" />
-    <opc:Field Name="MessageSettings" TypeName="ua:ExtensionObject" />
-    <opc:Field Name="NoOfDataSetReaders" TypeName="opc:Int32" />
-    <opc:Field Name="DataSetReaders" TypeName="tns:DataSetReaderDataType" LengthField="NoOfDataSetReaders" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ReaderGroupTransportDataType" BaseType="ua:ExtensionObject">
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ReaderGroupMessageDataType" BaseType="ua:ExtensionObject">
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DataSetReaderDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="Name" TypeName="opc:String" />
-    <opc:Field Name="Enabled" TypeName="opc:Boolean" />
-    <opc:Field Name="PublisherId" TypeName="ua:Variant" />
-    <opc:Field Name="WriterGroupId" TypeName="opc:UInt16" />
-    <opc:Field Name="DataSetWriterId" TypeName="opc:UInt16" />
-    <opc:Field Name="DataSetMetaData" TypeName="tns:DataSetMetaDataType" />
-    <opc:Field Name="DataSetFieldContentMask" TypeName="tns:DataSetFieldContentMask" />
-    <opc:Field Name="MessageReceiveTimeout" TypeName="opc:Double" />
-    <opc:Field Name="KeyFrameCount" TypeName="opc:UInt32" />
-    <opc:Field Name="HeaderLayoutUri" TypeName="opc:String" />
-    <opc:Field Name="SecurityMode" TypeName="tns:MessageSecurityMode" />
-    <opc:Field Name="SecurityGroupId" TypeName="opc:String" />
-    <opc:Field Name="NoOfSecurityKeyServices" TypeName="opc:Int32" />
-    <opc:Field Name="SecurityKeyServices" TypeName="tns:EndpointDescription" LengthField="NoOfSecurityKeyServices" />
-    <opc:Field Name="NoOfDataSetReaderProperties" TypeName="opc:Int32" />
-    <opc:Field Name="DataSetReaderProperties" TypeName="tns:KeyValuePair" LengthField="NoOfDataSetReaderProperties" />
-    <opc:Field Name="TransportSettings" TypeName="ua:ExtensionObject" />
-    <opc:Field Name="MessageSettings" TypeName="ua:ExtensionObject" />
-    <opc:Field Name="SubscribedDataSet" TypeName="ua:ExtensionObject" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DataSetReaderTransportDataType" BaseType="ua:ExtensionObject">
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DataSetReaderMessageDataType" BaseType="ua:ExtensionObject">
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SubscribedDataSetDataType" BaseType="ua:ExtensionObject">
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="TargetVariablesDataType" BaseType="tns:SubscribedDataSetDataType">
-    <opc:Field Name="NoOfTargetVariables" TypeName="opc:Int32" />
-    <opc:Field Name="TargetVariables" TypeName="tns:FieldTargetDataType" LengthField="NoOfTargetVariables" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="FieldTargetDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="DataSetFieldId" TypeName="opc:Guid" />
-    <opc:Field Name="ReceiverIndexRange" TypeName="opc:String" />
-    <opc:Field Name="TargetNodeId" TypeName="ua:NodeId" />
-    <opc:Field Name="AttributeId" TypeName="opc:UInt32" />
-    <opc:Field Name="WriteIndexRange" TypeName="opc:String" />
-    <opc:Field Name="OverrideValueHandling" TypeName="tns:OverrideValueHandling" />
-    <opc:Field Name="OverrideValue" TypeName="ua:Variant" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="OverrideValueHandling" LengthInBits="32">
-    <opc:EnumeratedValue Name="Disabled" Value="0" />
-    <opc:EnumeratedValue Name="LastUsableValue" Value="1" />
-    <opc:EnumeratedValue Name="OverrideValue" Value="2" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="SubscribedDataSetMirrorDataType" BaseType="tns:SubscribedDataSetDataType">
-    <opc:Field Name="ParentNodeName" TypeName="opc:String" />
-    <opc:Field Name="NoOfRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="RolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfRolePermissions" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="PubSubConfigurationDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NoOfPublishedDataSets" TypeName="opc:Int32" />
-    <opc:Field Name="PublishedDataSets" TypeName="tns:PublishedDataSetDataType" LengthField="NoOfPublishedDataSets" />
-    <opc:Field Name="NoOfConnections" TypeName="opc:Int32" />
-    <opc:Field Name="Connections" TypeName="tns:PubSubConnectionDataType" LengthField="NoOfConnections" />
-    <opc:Field Name="Enabled" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="DataSetOrderingType" LengthInBits="32">
-    <opc:EnumeratedValue Name="Undefined" Value="0" />
-    <opc:EnumeratedValue Name="AscendingWriterId" Value="1" />
-    <opc:EnumeratedValue Name="AscendingWriterIdSingle" Value="2" />
-  </opc:EnumeratedType>
-
-  <opc:EnumeratedType Name="UadpNetworkMessageContentMask" LengthInBits="32" IsOptionSet="true">
-    <opc:EnumeratedValue Name="None" Value="0" />
-    <opc:EnumeratedValue Name="PublisherId" Value="1" />
-    <opc:EnumeratedValue Name="GroupHeader" Value="2" />
-    <opc:EnumeratedValue Name="WriterGroupId" Value="4" />
-    <opc:EnumeratedValue Name="GroupVersion" Value="8" />
-    <opc:EnumeratedValue Name="NetworkMessageNumber" Value="16" />
-    <opc:EnumeratedValue Name="SequenceNumber" Value="32" />
-    <opc:EnumeratedValue Name="PayloadHeader" Value="64" />
-    <opc:EnumeratedValue Name="Timestamp" Value="128" />
-    <opc:EnumeratedValue Name="PicoSeconds" Value="256" />
-    <opc:EnumeratedValue Name="DataSetClassId" Value="512" />
-    <opc:EnumeratedValue Name="PromotedFields" Value="1024" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="UadpWriterGroupMessageDataType" BaseType="tns:WriterGroupMessageDataType">
-    <opc:Field Name="GroupVersion" TypeName="opc:UInt32" />
-    <opc:Field Name="DataSetOrdering" TypeName="tns:DataSetOrderingType" />
-    <opc:Field Name="NetworkMessageContentMask" TypeName="tns:UadpNetworkMessageContentMask" />
-    <opc:Field Name="SamplingOffset" TypeName="opc:Double" />
-    <opc:Field Name="NoOfPublishingOffset" TypeName="opc:Int32" />
-    <opc:Field Name="PublishingOffset" TypeName="opc:Double" LengthField="NoOfPublishingOffset" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="UadpDataSetMessageContentMask" LengthInBits="32" IsOptionSet="true">
-    <opc:EnumeratedValue Name="None" Value="0" />
-    <opc:EnumeratedValue Name="Timestamp" Value="1" />
-    <opc:EnumeratedValue Name="PicoSeconds" Value="2" />
-    <opc:EnumeratedValue Name="Status" Value="4" />
-    <opc:EnumeratedValue Name="MajorVersion" Value="8" />
-    <opc:EnumeratedValue Name="MinorVersion" Value="16" />
-    <opc:EnumeratedValue Name="SequenceNumber" Value="32" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="UadpDataSetWriterMessageDataType" BaseType="tns:DataSetWriterMessageDataType">
-    <opc:Field Name="DataSetMessageContentMask" TypeName="tns:UadpDataSetMessageContentMask" />
-    <opc:Field Name="ConfiguredSize" TypeName="opc:UInt16" />
-    <opc:Field Name="NetworkMessageNumber" TypeName="opc:UInt16" />
-    <opc:Field Name="DataSetOffset" TypeName="opc:UInt16" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="UadpDataSetReaderMessageDataType" BaseType="tns:DataSetReaderMessageDataType">
-    <opc:Field Name="GroupVersion" TypeName="opc:UInt32" />
-    <opc:Field Name="NetworkMessageNumber" TypeName="opc:UInt16" />
-    <opc:Field Name="DataSetOffset" TypeName="opc:UInt16" />
-    <opc:Field Name="DataSetClassId" TypeName="opc:Guid" />
-    <opc:Field Name="NetworkMessageContentMask" TypeName="tns:UadpNetworkMessageContentMask" />
-    <opc:Field Name="DataSetMessageContentMask" TypeName="tns:UadpDataSetMessageContentMask" />
-    <opc:Field Name="PublishingInterval" TypeName="opc:Double" />
-    <opc:Field Name="ReceiveOffset" TypeName="opc:Double" />
-    <opc:Field Name="ProcessingOffset" TypeName="opc:Double" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="JsonNetworkMessageContentMask" LengthInBits="32" IsOptionSet="true">
-    <opc:EnumeratedValue Name="None" Value="0" />
-    <opc:EnumeratedValue Name="NetworkMessageHeader" Value="1" />
-    <opc:EnumeratedValue Name="DataSetMessageHeader" Value="2" />
-    <opc:EnumeratedValue Name="SingleDataSetMessage" Value="4" />
-    <opc:EnumeratedValue Name="PublisherId" Value="8" />
-    <opc:EnumeratedValue Name="DataSetClassId" Value="16" />
-    <opc:EnumeratedValue Name="ReplyTo" Value="32" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="JsonWriterGroupMessageDataType" BaseType="tns:WriterGroupMessageDataType">
-    <opc:Field Name="NetworkMessageContentMask" TypeName="tns:JsonNetworkMessageContentMask" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="JsonDataSetMessageContentMask" LengthInBits="32" IsOptionSet="true">
-    <opc:EnumeratedValue Name="None" Value="0" />
-    <opc:EnumeratedValue Name="DataSetWriterId" Value="1" />
-    <opc:EnumeratedValue Name="MetaDataVersion" Value="2" />
-    <opc:EnumeratedValue Name="SequenceNumber" Value="4" />
-    <opc:EnumeratedValue Name="Timestamp" Value="8" />
-    <opc:EnumeratedValue Name="Status" Value="16" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="JsonDataSetWriterMessageDataType" BaseType="tns:DataSetWriterMessageDataType">
-    <opc:Field Name="DataSetMessageContentMask" TypeName="tns:JsonDataSetMessageContentMask" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="JsonDataSetReaderMessageDataType" BaseType="tns:DataSetReaderMessageDataType">
-    <opc:Field Name="NetworkMessageContentMask" TypeName="tns:JsonNetworkMessageContentMask" />
-    <opc:Field Name="DataSetMessageContentMask" TypeName="tns:JsonDataSetMessageContentMask" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DatagramConnectionTransportDataType" BaseType="tns:ConnectionTransportDataType">
-    <opc:Field Name="DiscoveryAddress" TypeName="ua:ExtensionObject" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DatagramWriterGroupTransportDataType" BaseType="tns:WriterGroupTransportDataType">
-    <opc:Field Name="MessageRepeatCount" TypeName="opc:Byte" />
-    <opc:Field Name="MessageRepeatDelay" TypeName="opc:Double" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="BrokerConnectionTransportDataType" BaseType="tns:ConnectionTransportDataType">
-    <opc:Field Name="ResourceUri" TypeName="opc:String" />
-    <opc:Field Name="AuthenticationProfileUri" TypeName="opc:String" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="BrokerTransportQualityOfService" LengthInBits="32">
-    <opc:EnumeratedValue Name="NotSpecified" Value="0" />
-    <opc:EnumeratedValue Name="BestEffort" Value="1" />
-    <opc:EnumeratedValue Name="AtLeastOnce" Value="2" />
-    <opc:EnumeratedValue Name="AtMostOnce" Value="3" />
-    <opc:EnumeratedValue Name="ExactlyOnce" Value="4" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="BrokerWriterGroupTransportDataType" BaseType="tns:WriterGroupTransportDataType">
-    <opc:Field Name="QueueName" TypeName="opc:String" />
-    <opc:Field Name="ResourceUri" TypeName="opc:String" />
-    <opc:Field Name="AuthenticationProfileUri" TypeName="opc:String" />
-    <opc:Field Name="RequestedDeliveryGuarantee" TypeName="tns:BrokerTransportQualityOfService" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="BrokerDataSetWriterTransportDataType" BaseType="tns:DataSetWriterTransportDataType">
-    <opc:Field Name="QueueName" TypeName="opc:String" />
-    <opc:Field Name="ResourceUri" TypeName="opc:String" />
-    <opc:Field Name="AuthenticationProfileUri" TypeName="opc:String" />
-    <opc:Field Name="RequestedDeliveryGuarantee" TypeName="tns:BrokerTransportQualityOfService" />
-    <opc:Field Name="MetaDataQueueName" TypeName="opc:String" />
-    <opc:Field Name="MetaDataUpdateTime" TypeName="opc:Double" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="BrokerDataSetReaderTransportDataType" BaseType="tns:DataSetReaderTransportDataType">
-    <opc:Field Name="QueueName" TypeName="opc:String" />
-    <opc:Field Name="ResourceUri" TypeName="opc:String" />
-    <opc:Field Name="AuthenticationProfileUri" TypeName="opc:String" />
-    <opc:Field Name="RequestedDeliveryGuarantee" TypeName="tns:BrokerTransportQualityOfService" />
-    <opc:Field Name="MetaDataQueueName" TypeName="opc:String" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="DiagnosticsLevel" LengthInBits="32">
-    <opc:EnumeratedValue Name="Basic" Value="0" />
-    <opc:EnumeratedValue Name="Advanced" Value="1" />
-    <opc:EnumeratedValue Name="Info" Value="2" />
-    <opc:EnumeratedValue Name="Log" Value="3" />
-    <opc:EnumeratedValue Name="Debug" Value="4" />
-  </opc:EnumeratedType>
-
-  <opc:EnumeratedType Name="PubSubDiagnosticsCounterClassification" LengthInBits="32">
-    <opc:EnumeratedValue Name="Information" Value="0" />
-    <opc:EnumeratedValue Name="Error" Value="1" />
-  </opc:EnumeratedType>
-
-  <opc:EnumeratedType Name="IdType" LengthInBits="32">
-    <opc:Documentation>The type of identifier used in a node id.</opc:Documentation>
-    <opc:EnumeratedValue Name="Numeric" Value="0" />
-    <opc:EnumeratedValue Name="String" Value="1" />
-    <opc:EnumeratedValue Name="Guid" Value="2" />
-    <opc:EnumeratedValue Name="Opaque" Value="3" />
-  </opc:EnumeratedType>
-
-  <opc:EnumeratedType Name="NodeClass" LengthInBits="32">
-    <opc:Documentation>A mask specifying the class of the node.</opc:Documentation>
-    <opc:EnumeratedValue Name="Unspecified" Value="0" />
-    <opc:EnumeratedValue Name="Object" Value="1" />
-    <opc:EnumeratedValue Name="Variable" Value="2" />
-    <opc:EnumeratedValue Name="Method" Value="4" />
-    <opc:EnumeratedValue Name="ObjectType" Value="8" />
-    <opc:EnumeratedValue Name="VariableType" Value="16" />
-    <opc:EnumeratedValue Name="ReferenceType" Value="32" />
-    <opc:EnumeratedValue Name="DataType" Value="64" />
-    <opc:EnumeratedValue Name="View" Value="128" />
-  </opc:EnumeratedType>
-
-  <opc:EnumeratedType Name="PermissionType" LengthInBits="32" IsOptionSet="true">
-    <opc:EnumeratedValue Name="None" Value="0" />
-    <opc:EnumeratedValue Name="Browse" Value="1" />
-    <opc:EnumeratedValue Name="ReadRolePermissions" Value="2" />
-    <opc:EnumeratedValue Name="WriteAttribute" Value="4" />
-    <opc:EnumeratedValue Name="WriteRolePermissions" Value="8" />
-    <opc:EnumeratedValue Name="WriteHistorizing" Value="16" />
-    <opc:EnumeratedValue Name="Read" Value="32" />
-    <opc:EnumeratedValue Name="Write" Value="64" />
-    <opc:EnumeratedValue Name="ReadHistory" Value="128" />
-    <opc:EnumeratedValue Name="InsertHistory" Value="256" />
-    <opc:EnumeratedValue Name="ModifyHistory" Value="512" />
-    <opc:EnumeratedValue Name="DeleteHistory" Value="1024" />
-    <opc:EnumeratedValue Name="ReceiveEvents" Value="2048" />
-    <opc:EnumeratedValue Name="Call" Value="4096" />
-    <opc:EnumeratedValue Name="AddReference" Value="8192" />
-    <opc:EnumeratedValue Name="RemoveReference" Value="16384" />
-    <opc:EnumeratedValue Name="DeleteNode" Value="32768" />
-    <opc:EnumeratedValue Name="AddNode" Value="65536" />
-  </opc:EnumeratedType>
-
-  <opc:EnumeratedType Name="AccessLevelType" LengthInBits="8" IsOptionSet="true">
-    <opc:EnumeratedValue Name="None" Value="0" />
-    <opc:EnumeratedValue Name="CurrentRead" Value="1" />
-    <opc:EnumeratedValue Name="CurrentWrite" Value="2" />
-    <opc:EnumeratedValue Name="HistoryRead" Value="4" />
-    <opc:EnumeratedValue Name="HistoryWrite" Value="8" />
-    <opc:EnumeratedValue Name="SemanticChange" Value="16" />
-    <opc:EnumeratedValue Name="StatusWrite" Value="32" />
-    <opc:EnumeratedValue Name="TimestampWrite" Value="64" />
-  </opc:EnumeratedType>
-
-  <opc:EnumeratedType Name="AccessLevelExType" LengthInBits="32" IsOptionSet="true">
-    <opc:EnumeratedValue Name="None" Value="0" />
-    <opc:EnumeratedValue Name="CurrentRead" Value="1" />
-    <opc:EnumeratedValue Name="CurrentWrite" Value="2" />
-    <opc:EnumeratedValue Name="HistoryRead" Value="4" />
-    <opc:EnumeratedValue Name="HistoryWrite" Value="8" />
-    <opc:EnumeratedValue Name="SemanticChange" Value="16" />
-    <opc:EnumeratedValue Name="StatusWrite" Value="32" />
-    <opc:EnumeratedValue Name="TimestampWrite" Value="64" />
-    <opc:EnumeratedValue Name="NonatomicRead" Value="256" />
-    <opc:EnumeratedValue Name="NonatomicWrite" Value="512" />
-    <opc:EnumeratedValue Name="WriteFullArrayOnly" Value="1024" />
-  </opc:EnumeratedType>
-
-  <opc:EnumeratedType Name="EventNotifierType" LengthInBits="8" IsOptionSet="true">
-    <opc:EnumeratedValue Name="None" Value="0" />
-    <opc:EnumeratedValue Name="SubscribeToEvents" Value="1" />
-    <opc:EnumeratedValue Name="HistoryRead" Value="4" />
-    <opc:EnumeratedValue Name="HistoryWrite" Value="8" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="RolePermissionType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RoleId" TypeName="ua:NodeId" />
-    <opc:Field Name="Permissions" TypeName="tns:PermissionType" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="AccessRestrictionType" LengthInBits="32">
-    <opc:EnumeratedValue Name="SigningRequired" Value="0" />
-    <opc:EnumeratedValue Name="EncryptionRequired" Value="1" />
-    <opc:EnumeratedValue Name="SessionRequired" Value="2" />
-  </opc:EnumeratedType>
-
-  <opc:EnumeratedType Name="StructureType" LengthInBits="32">
-    <opc:EnumeratedValue Name="Structure" Value="0" />
-    <opc:EnumeratedValue Name="StructureWithOptionalFields" Value="1" />
-    <opc:EnumeratedValue Name="Union" Value="2" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="StructureField" BaseType="ua:ExtensionObject">
-    <opc:Field Name="Name" TypeName="opc:String" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" />
-    <opc:Field Name="DataType" TypeName="ua:NodeId" />
-    <opc:Field Name="ValueRank" TypeName="opc:Int32" />
-    <opc:Field Name="NoOfArrayDimensions" TypeName="opc:Int32" />
-    <opc:Field Name="ArrayDimensions" TypeName="opc:UInt32" LengthField="NoOfArrayDimensions" />
-    <opc:Field Name="MaxStringLength" TypeName="opc:UInt32" />
-    <opc:Field Name="IsOptional" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="StructureDefinition" BaseType="tns:DataTypeDefinition">
-    <opc:Field Name="DefaultEncodingId" TypeName="ua:NodeId" />
-    <opc:Field Name="BaseDataType" TypeName="ua:NodeId" />
-    <opc:Field Name="StructureType" TypeName="tns:StructureType" />
-    <opc:Field Name="NoOfFields" TypeName="opc:Int32" />
-    <opc:Field Name="Fields" TypeName="tns:StructureField" LengthField="NoOfFields" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="EnumDefinition" BaseType="tns:DataTypeDefinition">
-    <opc:Field Name="NoOfFields" TypeName="opc:Int32" />
-    <opc:Field Name="Fields" TypeName="tns:EnumField" LengthField="NoOfFields" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="Node" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Specifies the attributes which belong to all nodes.</opc:Documentation>
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" />
-    <opc:Field Name="NodeClass" TypeName="tns:NodeClass" />
-    <opc:Field Name="BrowseName" TypeName="ua:QualifiedName" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" />
-    <opc:Field Name="NoOfRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="RolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfRolePermissions" />
-    <opc:Field Name="NoOfUserRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="UserRolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfUserRolePermissions" />
-    <opc:Field Name="AccessRestrictions" TypeName="opc:UInt16" />
-    <opc:Field Name="NoOfReferences" TypeName="opc:Int32" />
-    <opc:Field Name="References" TypeName="tns:ReferenceNode" LengthField="NoOfReferences" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="InstanceNode" BaseType="tns:Node">
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" SourceType="tns:Node" />
-    <opc:Field Name="NodeClass" TypeName="tns:NodeClass" SourceType="tns:Node" />
-    <opc:Field Name="BrowseName" TypeName="ua:QualifiedName" SourceType="tns:Node" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="NoOfRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="RolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfRolePermissions" />
-    <opc:Field Name="NoOfUserRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="UserRolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfUserRolePermissions" />
-    <opc:Field Name="AccessRestrictions" TypeName="opc:UInt16" SourceType="tns:Node" />
-    <opc:Field Name="NoOfReferences" TypeName="opc:Int32" />
-    <opc:Field Name="References" TypeName="tns:ReferenceNode" LengthField="NoOfReferences" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="TypeNode" BaseType="tns:Node">
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" SourceType="tns:Node" />
-    <opc:Field Name="NodeClass" TypeName="tns:NodeClass" SourceType="tns:Node" />
-    <opc:Field Name="BrowseName" TypeName="ua:QualifiedName" SourceType="tns:Node" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="NoOfRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="RolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfRolePermissions" />
-    <opc:Field Name="NoOfUserRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="UserRolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfUserRolePermissions" />
-    <opc:Field Name="AccessRestrictions" TypeName="opc:UInt16" SourceType="tns:Node" />
-    <opc:Field Name="NoOfReferences" TypeName="opc:Int32" />
-    <opc:Field Name="References" TypeName="tns:ReferenceNode" LengthField="NoOfReferences" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ObjectNode" BaseType="tns:InstanceNode">
-    <opc:Documentation>Specifies the attributes which belong to object nodes.</opc:Documentation>
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" SourceType="tns:Node" />
-    <opc:Field Name="NodeClass" TypeName="tns:NodeClass" SourceType="tns:Node" />
-    <opc:Field Name="BrowseName" TypeName="ua:QualifiedName" SourceType="tns:Node" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="NoOfRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="RolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfRolePermissions" />
-    <opc:Field Name="NoOfUserRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="UserRolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfUserRolePermissions" />
-    <opc:Field Name="AccessRestrictions" TypeName="opc:UInt16" SourceType="tns:Node" />
-    <opc:Field Name="NoOfReferences" TypeName="opc:Int32" />
-    <opc:Field Name="References" TypeName="tns:ReferenceNode" LengthField="NoOfReferences" />
-    <opc:Field Name="EventNotifier" TypeName="opc:Byte" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ObjectTypeNode" BaseType="tns:TypeNode">
-    <opc:Documentation>Specifies the attributes which belong to object type nodes.</opc:Documentation>
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" SourceType="tns:Node" />
-    <opc:Field Name="NodeClass" TypeName="tns:NodeClass" SourceType="tns:Node" />
-    <opc:Field Name="BrowseName" TypeName="ua:QualifiedName" SourceType="tns:Node" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="NoOfRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="RolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfRolePermissions" />
-    <opc:Field Name="NoOfUserRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="UserRolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfUserRolePermissions" />
-    <opc:Field Name="AccessRestrictions" TypeName="opc:UInt16" SourceType="tns:Node" />
-    <opc:Field Name="NoOfReferences" TypeName="opc:Int32" />
-    <opc:Field Name="References" TypeName="tns:ReferenceNode" LengthField="NoOfReferences" />
-    <opc:Field Name="IsAbstract" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="VariableNode" BaseType="tns:InstanceNode">
-    <opc:Documentation>Specifies the attributes which belong to variable nodes.</opc:Documentation>
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" SourceType="tns:Node" />
-    <opc:Field Name="NodeClass" TypeName="tns:NodeClass" SourceType="tns:Node" />
-    <opc:Field Name="BrowseName" TypeName="ua:QualifiedName" SourceType="tns:Node" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="NoOfRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="RolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfRolePermissions" />
-    <opc:Field Name="NoOfUserRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="UserRolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfUserRolePermissions" />
-    <opc:Field Name="AccessRestrictions" TypeName="opc:UInt16" SourceType="tns:Node" />
-    <opc:Field Name="NoOfReferences" TypeName="opc:Int32" />
-    <opc:Field Name="References" TypeName="tns:ReferenceNode" LengthField="NoOfReferences" />
-    <opc:Field Name="Value" TypeName="ua:Variant" />
-    <opc:Field Name="DataType" TypeName="ua:NodeId" />
-    <opc:Field Name="ValueRank" TypeName="opc:Int32" />
-    <opc:Field Name="NoOfArrayDimensions" TypeName="opc:Int32" />
-    <opc:Field Name="ArrayDimensions" TypeName="opc:UInt32" LengthField="NoOfArrayDimensions" />
-    <opc:Field Name="AccessLevel" TypeName="opc:Byte" />
-    <opc:Field Name="UserAccessLevel" TypeName="opc:Byte" />
-    <opc:Field Name="MinimumSamplingInterval" TypeName="opc:Double" />
-    <opc:Field Name="Historizing" TypeName="opc:Boolean" />
-    <opc:Field Name="AccessLevelEx" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="VariableTypeNode" BaseType="tns:TypeNode">
-    <opc:Documentation>Specifies the attributes which belong to variable type nodes.</opc:Documentation>
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" SourceType="tns:Node" />
-    <opc:Field Name="NodeClass" TypeName="tns:NodeClass" SourceType="tns:Node" />
-    <opc:Field Name="BrowseName" TypeName="ua:QualifiedName" SourceType="tns:Node" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="NoOfRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="RolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfRolePermissions" />
-    <opc:Field Name="NoOfUserRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="UserRolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfUserRolePermissions" />
-    <opc:Field Name="AccessRestrictions" TypeName="opc:UInt16" SourceType="tns:Node" />
-    <opc:Field Name="NoOfReferences" TypeName="opc:Int32" />
-    <opc:Field Name="References" TypeName="tns:ReferenceNode" LengthField="NoOfReferences" />
-    <opc:Field Name="Value" TypeName="ua:Variant" />
-    <opc:Field Name="DataType" TypeName="ua:NodeId" />
-    <opc:Field Name="ValueRank" TypeName="opc:Int32" />
-    <opc:Field Name="NoOfArrayDimensions" TypeName="opc:Int32" />
-    <opc:Field Name="ArrayDimensions" TypeName="opc:UInt32" LengthField="NoOfArrayDimensions" />
-    <opc:Field Name="IsAbstract" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ReferenceTypeNode" BaseType="tns:TypeNode">
-    <opc:Documentation>Specifies the attributes which belong to reference type nodes.</opc:Documentation>
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" SourceType="tns:Node" />
-    <opc:Field Name="NodeClass" TypeName="tns:NodeClass" SourceType="tns:Node" />
-    <opc:Field Name="BrowseName" TypeName="ua:QualifiedName" SourceType="tns:Node" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="NoOfRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="RolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfRolePermissions" />
-    <opc:Field Name="NoOfUserRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="UserRolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfUserRolePermissions" />
-    <opc:Field Name="AccessRestrictions" TypeName="opc:UInt16" SourceType="tns:Node" />
-    <opc:Field Name="NoOfReferences" TypeName="opc:Int32" />
-    <opc:Field Name="References" TypeName="tns:ReferenceNode" LengthField="NoOfReferences" />
-    <opc:Field Name="IsAbstract" TypeName="opc:Boolean" />
-    <opc:Field Name="Symmetric" TypeName="opc:Boolean" />
-    <opc:Field Name="InverseName" TypeName="ua:LocalizedText" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="MethodNode" BaseType="tns:InstanceNode">
-    <opc:Documentation>Specifies the attributes which belong to method nodes.</opc:Documentation>
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" SourceType="tns:Node" />
-    <opc:Field Name="NodeClass" TypeName="tns:NodeClass" SourceType="tns:Node" />
-    <opc:Field Name="BrowseName" TypeName="ua:QualifiedName" SourceType="tns:Node" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="NoOfRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="RolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfRolePermissions" />
-    <opc:Field Name="NoOfUserRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="UserRolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfUserRolePermissions" />
-    <opc:Field Name="AccessRestrictions" TypeName="opc:UInt16" SourceType="tns:Node" />
-    <opc:Field Name="NoOfReferences" TypeName="opc:Int32" />
-    <opc:Field Name="References" TypeName="tns:ReferenceNode" LengthField="NoOfReferences" />
-    <opc:Field Name="Executable" TypeName="opc:Boolean" />
-    <opc:Field Name="UserExecutable" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ViewNode" BaseType="tns:InstanceNode">
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" SourceType="tns:Node" />
-    <opc:Field Name="NodeClass" TypeName="tns:NodeClass" SourceType="tns:Node" />
-    <opc:Field Name="BrowseName" TypeName="ua:QualifiedName" SourceType="tns:Node" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="NoOfRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="RolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfRolePermissions" />
-    <opc:Field Name="NoOfUserRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="UserRolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfUserRolePermissions" />
-    <opc:Field Name="AccessRestrictions" TypeName="opc:UInt16" SourceType="tns:Node" />
-    <opc:Field Name="NoOfReferences" TypeName="opc:Int32" />
-    <opc:Field Name="References" TypeName="tns:ReferenceNode" LengthField="NoOfReferences" />
-    <opc:Field Name="ContainsNoLoops" TypeName="opc:Boolean" />
-    <opc:Field Name="EventNotifier" TypeName="opc:Byte" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DataTypeNode" BaseType="tns:TypeNode">
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" SourceType="tns:Node" />
-    <opc:Field Name="NodeClass" TypeName="tns:NodeClass" SourceType="tns:Node" />
-    <opc:Field Name="BrowseName" TypeName="ua:QualifiedName" SourceType="tns:Node" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:Node" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:Node" />
-    <opc:Field Name="NoOfRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="RolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfRolePermissions" />
-    <opc:Field Name="NoOfUserRolePermissions" TypeName="opc:Int32" />
-    <opc:Field Name="UserRolePermissions" TypeName="tns:RolePermissionType" LengthField="NoOfUserRolePermissions" />
-    <opc:Field Name="AccessRestrictions" TypeName="opc:UInt16" SourceType="tns:Node" />
-    <opc:Field Name="NoOfReferences" TypeName="opc:Int32" />
-    <opc:Field Name="References" TypeName="tns:ReferenceNode" LengthField="NoOfReferences" />
-    <opc:Field Name="IsAbstract" TypeName="opc:Boolean" />
-    <opc:Field Name="DataTypeDefinition" TypeName="ua:ExtensionObject" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ReferenceNode" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Specifies a reference which belongs to a node.</opc:Documentation>
-    <opc:Field Name="ReferenceTypeId" TypeName="ua:NodeId" />
-    <opc:Field Name="IsInverse" TypeName="opc:Boolean" />
-    <opc:Field Name="TargetId" TypeName="ua:ExpandedNodeId" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="Argument" BaseType="ua:ExtensionObject">
-    <opc:Documentation>An argument for a method.</opc:Documentation>
-    <opc:Field Name="Name" TypeName="opc:String" />
-    <opc:Field Name="DataType" TypeName="ua:NodeId" />
-    <opc:Field Name="ValueRank" TypeName="opc:Int32" />
-    <opc:Field Name="NoOfArrayDimensions" TypeName="opc:Int32" />
-    <opc:Field Name="ArrayDimensions" TypeName="opc:UInt32" LengthField="NoOfArrayDimensions" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="EnumValueType" BaseType="ua:ExtensionObject">
-    <opc:Documentation>A mapping between a value of an enumerated type and a name and description.</opc:Documentation>
-    <opc:Field Name="Value" TypeName="opc:Int64" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="EnumField" BaseType="tns:EnumValueType">
-    <opc:Field Name="Value" TypeName="opc:Int64" SourceType="tns:EnumValueType" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:EnumValueType" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:EnumValueType" />
-    <opc:Field Name="Name" TypeName="opc:String" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="OptionSet" BaseType="ua:ExtensionObject">
-    <opc:Documentation>This abstract Structured DataType is the base DataType for all DataTypes representing a bit mask.</opc:Documentation>
-    <opc:Field Name="Value" TypeName="opc:ByteString" />
-    <opc:Field Name="ValidBits" TypeName="opc:ByteString" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="Union" BaseType="ua:ExtensionObject">
-    <opc:Documentation>This abstract DataType is the base DataType for all union DataTypes.</opc:Documentation>
-  </opc:StructuredType>
-
-  <opc:OpaqueType Name="NormalizedString">
-    <opc:Documentation>A string normalized based on the rules in the unicode specification.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:OpaqueType Name="DecimalString">
-    <opc:Documentation>An arbitraty numeric value.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:OpaqueType Name="DurationString">
-    <opc:Documentation>A period of time formatted as defined in ISO 8601-2000.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:OpaqueType Name="TimeString">
-    <opc:Documentation>A time formatted as defined in ISO 8601-2000.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:OpaqueType Name="DateString">
-    <opc:Documentation>A date formatted as defined in ISO 8601-2000.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:OpaqueType Name="Duration">
-    <opc:Documentation>A period of time measured in milliseconds.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:OpaqueType Name="UtcTime">
-    <opc:Documentation>A date/time value specified in Universal Coordinated Time (UTC).</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:OpaqueType Name="LocaleId">
-    <opc:Documentation>An identifier for a user locale.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:StructuredType Name="TimeZoneDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="Offset" TypeName="opc:Int16" />
-    <opc:Field Name="DaylightSavingInOffset" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:OpaqueType Name="Index">
-    <opc:Documentation>This primitive data type is a UInt32 that identifies an element of an array.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:OpaqueType Name="IntegerId">
-    <opc:Documentation>A numeric identifier for an object.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:EnumeratedType Name="ApplicationType" LengthInBits="32">
-    <opc:Documentation>The types of applications.</opc:Documentation>
-    <opc:EnumeratedValue Name="Server" Value="0" />
-    <opc:EnumeratedValue Name="Client" Value="1" />
-    <opc:EnumeratedValue Name="ClientAndServer" Value="2" />
-    <opc:EnumeratedValue Name="DiscoveryServer" Value="3" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="ApplicationDescription" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Describes an application and how to find it.</opc:Documentation>
-    <opc:Field Name="ApplicationUri" TypeName="opc:String" />
-    <opc:Field Name="ProductUri" TypeName="opc:String" />
-    <opc:Field Name="ApplicationName" TypeName="ua:LocalizedText" />
-    <opc:Field Name="ApplicationType" TypeName="tns:ApplicationType" />
-    <opc:Field Name="GatewayServerUri" TypeName="opc:String" />
-    <opc:Field Name="DiscoveryProfileUri" TypeName="opc:String" />
-    <opc:Field Name="NoOfDiscoveryUrls" TypeName="opc:Int32" />
-    <opc:Field Name="DiscoveryUrls" TypeName="opc:String" LengthField="NoOfDiscoveryUrls" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="RequestHeader" BaseType="ua:ExtensionObject">
-    <opc:Documentation>The header passed with every server request.</opc:Documentation>
-    <opc:Field Name="AuthenticationToken" TypeName="ua:NodeId" />
-    <opc:Field Name="Timestamp" TypeName="opc:DateTime" />
-    <opc:Field Name="RequestHandle" TypeName="opc:UInt32" />
-    <opc:Field Name="ReturnDiagnostics" TypeName="opc:UInt32" />
-    <opc:Field Name="AuditEntryId" TypeName="opc:String" />
-    <opc:Field Name="TimeoutHint" TypeName="opc:UInt32" />
-    <opc:Field Name="AdditionalHeader" TypeName="ua:ExtensionObject" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ResponseHeader" BaseType="ua:ExtensionObject">
-    <opc:Documentation>The header passed with every server response.</opc:Documentation>
-    <opc:Field Name="Timestamp" TypeName="opc:DateTime" />
-    <opc:Field Name="RequestHandle" TypeName="opc:UInt32" />
-    <opc:Field Name="ServiceResult" TypeName="ua:StatusCode" />
-    <opc:Field Name="ServiceDiagnostics" TypeName="ua:DiagnosticInfo" />
-    <opc:Field Name="NoOfStringTable" TypeName="opc:Int32" />
-    <opc:Field Name="StringTable" TypeName="opc:String" LengthField="NoOfStringTable" />
-    <opc:Field Name="AdditionalHeader" TypeName="ua:ExtensionObject" />
-  </opc:StructuredType>
-
-  <opc:OpaqueType Name="VersionTime">
-  </opc:OpaqueType>
-
-  <opc:StructuredType Name="ServiceFault" BaseType="ua:ExtensionObject">
-    <opc:Documentation>The response returned by all services when there is a service level error.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SessionlessInvokeRequestType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NoOfUrisVersion" TypeName="opc:Int32" />
-    <opc:Field Name="UrisVersion" TypeName="opc:UInt32" LengthField="NoOfUrisVersion" />
-    <opc:Field Name="NoOfNamespaceUris" TypeName="opc:Int32" />
-    <opc:Field Name="NamespaceUris" TypeName="opc:String" LengthField="NoOfNamespaceUris" />
-    <opc:Field Name="NoOfServerUris" TypeName="opc:Int32" />
-    <opc:Field Name="ServerUris" TypeName="opc:String" LengthField="NoOfServerUris" />
-    <opc:Field Name="NoOfLocaleIds" TypeName="opc:Int32" />
-    <opc:Field Name="LocaleIds" TypeName="opc:String" LengthField="NoOfLocaleIds" />
-    <opc:Field Name="ServiceId" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SessionlessInvokeResponseType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NoOfNamespaceUris" TypeName="opc:Int32" />
-    <opc:Field Name="NamespaceUris" TypeName="opc:String" LengthField="NoOfNamespaceUris" />
-    <opc:Field Name="NoOfServerUris" TypeName="opc:Int32" />
-    <opc:Field Name="ServerUris" TypeName="opc:String" LengthField="NoOfServerUris" />
-    <opc:Field Name="ServiceId" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="FindServersRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Finds the servers known to the discovery server.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="EndpointUrl" TypeName="opc:String" />
-    <opc:Field Name="NoOfLocaleIds" TypeName="opc:Int32" />
-    <opc:Field Name="LocaleIds" TypeName="opc:String" LengthField="NoOfLocaleIds" />
-    <opc:Field Name="NoOfServerUris" TypeName="opc:Int32" />
-    <opc:Field Name="ServerUris" TypeName="opc:String" LengthField="NoOfServerUris" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="FindServersResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Finds the servers known to the discovery server.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfServers" TypeName="opc:Int32" />
-    <opc:Field Name="Servers" TypeName="tns:ApplicationDescription" LengthField="NoOfServers" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ServerOnNetwork" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RecordId" TypeName="opc:UInt32" />
-    <opc:Field Name="ServerName" TypeName="opc:String" />
-    <opc:Field Name="DiscoveryUrl" TypeName="opc:String" />
-    <opc:Field Name="NoOfServerCapabilities" TypeName="opc:Int32" />
-    <opc:Field Name="ServerCapabilities" TypeName="opc:String" LengthField="NoOfServerCapabilities" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="FindServersOnNetworkRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="StartingRecordId" TypeName="opc:UInt32" />
-    <opc:Field Name="MaxRecordsToReturn" TypeName="opc:UInt32" />
-    <opc:Field Name="NoOfServerCapabilityFilter" TypeName="opc:Int32" />
-    <opc:Field Name="ServerCapabilityFilter" TypeName="opc:String" LengthField="NoOfServerCapabilityFilter" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="FindServersOnNetworkResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="LastCounterResetTime" TypeName="opc:DateTime" />
-    <opc:Field Name="NoOfServers" TypeName="opc:Int32" />
-    <opc:Field Name="Servers" TypeName="tns:ServerOnNetwork" LengthField="NoOfServers" />
-  </opc:StructuredType>
-
-  <opc:OpaqueType Name="ApplicationInstanceCertificate">
-    <opc:Documentation>A certificate for an instance of an application.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:EnumeratedType Name="MessageSecurityMode" LengthInBits="32">
-    <opc:Documentation>The type of security to use on a message.</opc:Documentation>
-    <opc:EnumeratedValue Name="Invalid" Value="0" />
-    <opc:EnumeratedValue Name="None" Value="1" />
-    <opc:EnumeratedValue Name="Sign" Value="2" />
-    <opc:EnumeratedValue Name="SignAndEncrypt" Value="3" />
-  </opc:EnumeratedType>
-
-  <opc:EnumeratedType Name="UserTokenType" LengthInBits="32">
-    <opc:Documentation>The possible user token types.</opc:Documentation>
-    <opc:EnumeratedValue Name="Anonymous" Value="0" />
-    <opc:EnumeratedValue Name="UserName" Value="1" />
-    <opc:EnumeratedValue Name="Certificate" Value="2" />
-    <opc:EnumeratedValue Name="IssuedToken" Value="3" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="UserTokenPolicy" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Describes a user token that can be used with a server.</opc:Documentation>
-    <opc:Field Name="PolicyId" TypeName="opc:String" />
-    <opc:Field Name="TokenType" TypeName="tns:UserTokenType" />
-    <opc:Field Name="IssuedTokenType" TypeName="opc:String" />
-    <opc:Field Name="IssuerEndpointUrl" TypeName="opc:String" />
-    <opc:Field Name="SecurityPolicyUri" TypeName="opc:String" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="EndpointDescription" BaseType="ua:ExtensionObject">
-    <opc:Documentation>The description of a endpoint that can be used to access a server.</opc:Documentation>
-    <opc:Field Name="EndpointUrl" TypeName="opc:String" />
-    <opc:Field Name="Server" TypeName="tns:ApplicationDescription" />
-    <opc:Field Name="ServerCertificate" TypeName="opc:ByteString" />
-    <opc:Field Name="SecurityMode" TypeName="tns:MessageSecurityMode" />
-    <opc:Field Name="SecurityPolicyUri" TypeName="opc:String" />
-    <opc:Field Name="NoOfUserIdentityTokens" TypeName="opc:Int32" />
-    <opc:Field Name="UserIdentityTokens" TypeName="tns:UserTokenPolicy" LengthField="NoOfUserIdentityTokens" />
-    <opc:Field Name="TransportProfileUri" TypeName="opc:String" />
-    <opc:Field Name="SecurityLevel" TypeName="opc:Byte" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="GetEndpointsRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Gets the endpoints used by the server.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="EndpointUrl" TypeName="opc:String" />
-    <opc:Field Name="NoOfLocaleIds" TypeName="opc:Int32" />
-    <opc:Field Name="LocaleIds" TypeName="opc:String" LengthField="NoOfLocaleIds" />
-    <opc:Field Name="NoOfProfileUris" TypeName="opc:Int32" />
-    <opc:Field Name="ProfileUris" TypeName="opc:String" LengthField="NoOfProfileUris" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="GetEndpointsResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Gets the endpoints used by the server.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfEndpoints" TypeName="opc:Int32" />
-    <opc:Field Name="Endpoints" TypeName="tns:EndpointDescription" LengthField="NoOfEndpoints" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="RegisteredServer" BaseType="ua:ExtensionObject">
-    <opc:Documentation>The information required to register a server with a discovery server.</opc:Documentation>
-    <opc:Field Name="ServerUri" TypeName="opc:String" />
-    <opc:Field Name="ProductUri" TypeName="opc:String" />
-    <opc:Field Name="NoOfServerNames" TypeName="opc:Int32" />
-    <opc:Field Name="ServerNames" TypeName="ua:LocalizedText" LengthField="NoOfServerNames" />
-    <opc:Field Name="ServerType" TypeName="tns:ApplicationType" />
-    <opc:Field Name="GatewayServerUri" TypeName="opc:String" />
-    <opc:Field Name="NoOfDiscoveryUrls" TypeName="opc:Int32" />
-    <opc:Field Name="DiscoveryUrls" TypeName="opc:String" LengthField="NoOfDiscoveryUrls" />
-    <opc:Field Name="SemaphoreFilePath" TypeName="opc:String" />
-    <opc:Field Name="IsOnline" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="RegisterServerRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Registers a server with the discovery server.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="Server" TypeName="tns:RegisteredServer" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="RegisterServerResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Registers a server with the discovery server.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DiscoveryConfiguration" BaseType="ua:ExtensionObject">
-    <opc:Documentation>A base type for discovery configuration information.</opc:Documentation>
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="MdnsDiscoveryConfiguration" BaseType="tns:DiscoveryConfiguration">
-    <opc:Documentation>The discovery information needed for mDNS registration.</opc:Documentation>
-    <opc:Field Name="MdnsServerName" TypeName="opc:String" />
-    <opc:Field Name="NoOfServerCapabilities" TypeName="opc:Int32" />
-    <opc:Field Name="ServerCapabilities" TypeName="opc:String" LengthField="NoOfServerCapabilities" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="RegisterServer2Request" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="Server" TypeName="tns:RegisteredServer" />
-    <opc:Field Name="NoOfDiscoveryConfiguration" TypeName="opc:Int32" />
-    <opc:Field Name="DiscoveryConfiguration" TypeName="ua:ExtensionObject" LengthField="NoOfDiscoveryConfiguration" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="RegisterServer2Response" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfConfigurationResults" TypeName="opc:Int32" />
-    <opc:Field Name="ConfigurationResults" TypeName="ua:StatusCode" LengthField="NoOfConfigurationResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="SecurityTokenRequestType" LengthInBits="32">
-    <opc:Documentation>Indicates whether a token if being created or renewed.</opc:Documentation>
-    <opc:EnumeratedValue Name="Issue" Value="0" />
-    <opc:EnumeratedValue Name="Renew" Value="1" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="ChannelSecurityToken" BaseType="ua:ExtensionObject">
-    <opc:Documentation>The token that identifies a set of keys for an active secure channel.</opc:Documentation>
-    <opc:Field Name="ChannelId" TypeName="opc:UInt32" />
-    <opc:Field Name="TokenId" TypeName="opc:UInt32" />
-    <opc:Field Name="CreatedAt" TypeName="opc:DateTime" />
-    <opc:Field Name="RevisedLifetime" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="OpenSecureChannelRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Creates a secure channel with a server.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="ClientProtocolVersion" TypeName="opc:UInt32" />
-    <opc:Field Name="RequestType" TypeName="tns:SecurityTokenRequestType" />
-    <opc:Field Name="SecurityMode" TypeName="tns:MessageSecurityMode" />
-    <opc:Field Name="ClientNonce" TypeName="opc:ByteString" />
-    <opc:Field Name="RequestedLifetime" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="OpenSecureChannelResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Creates a secure channel with a server.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="ServerProtocolVersion" TypeName="opc:UInt32" />
-    <opc:Field Name="SecurityToken" TypeName="tns:ChannelSecurityToken" />
-    <opc:Field Name="ServerNonce" TypeName="opc:ByteString" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="CloseSecureChannelRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Closes a secure channel.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="CloseSecureChannelResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Closes a secure channel.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SignedSoftwareCertificate" BaseType="ua:ExtensionObject">
-    <opc:Documentation>A software certificate with a digital signature.</opc:Documentation>
-    <opc:Field Name="CertificateData" TypeName="opc:ByteString" />
-    <opc:Field Name="Signature" TypeName="opc:ByteString" />
-  </opc:StructuredType>
-
-  <opc:OpaqueType Name="SessionAuthenticationToken">
-    <opc:Documentation>A unique identifier for a session used to authenticate requests.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:StructuredType Name="SignatureData" BaseType="ua:ExtensionObject">
-    <opc:Documentation>A digital signature.</opc:Documentation>
-    <opc:Field Name="Algorithm" TypeName="opc:String" />
-    <opc:Field Name="Signature" TypeName="opc:ByteString" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="CreateSessionRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Creates a new session with the server.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="ClientDescription" TypeName="tns:ApplicationDescription" />
-    <opc:Field Name="ServerUri" TypeName="opc:String" />
-    <opc:Field Name="EndpointUrl" TypeName="opc:String" />
-    <opc:Field Name="SessionName" TypeName="opc:String" />
-    <opc:Field Name="ClientNonce" TypeName="opc:ByteString" />
-    <opc:Field Name="ClientCertificate" TypeName="opc:ByteString" />
-    <opc:Field Name="RequestedSessionTimeout" TypeName="opc:Double" />
-    <opc:Field Name="MaxResponseMessageSize" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="CreateSessionResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Creates a new session with the server.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="SessionId" TypeName="ua:NodeId" />
-    <opc:Field Name="AuthenticationToken" TypeName="ua:NodeId" />
-    <opc:Field Name="RevisedSessionTimeout" TypeName="opc:Double" />
-    <opc:Field Name="ServerNonce" TypeName="opc:ByteString" />
-    <opc:Field Name="ServerCertificate" TypeName="opc:ByteString" />
-    <opc:Field Name="NoOfServerEndpoints" TypeName="opc:Int32" />
-    <opc:Field Name="ServerEndpoints" TypeName="tns:EndpointDescription" LengthField="NoOfServerEndpoints" />
-    <opc:Field Name="NoOfServerSoftwareCertificates" TypeName="opc:Int32" />
-    <opc:Field Name="ServerSoftwareCertificates" TypeName="tns:SignedSoftwareCertificate" LengthField="NoOfServerSoftwareCertificates" />
-    <opc:Field Name="ServerSignature" TypeName="tns:SignatureData" />
-    <opc:Field Name="MaxRequestMessageSize" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="UserIdentityToken" BaseType="ua:ExtensionObject">
-    <opc:Documentation>A base type for a user identity token.</opc:Documentation>
-    <opc:Field Name="PolicyId" TypeName="opc:String" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="AnonymousIdentityToken" BaseType="tns:UserIdentityToken">
-    <opc:Documentation>A token representing an anonymous user.</opc:Documentation>
-    <opc:Field Name="PolicyId" TypeName="opc:String" SourceType="tns:UserIdentityToken" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="UserNameIdentityToken" BaseType="tns:UserIdentityToken">
-    <opc:Documentation>A token representing a user identified by a user name and password.</opc:Documentation>
-    <opc:Field Name="PolicyId" TypeName="opc:String" SourceType="tns:UserIdentityToken" />
-    <opc:Field Name="UserName" TypeName="opc:String" />
-    <opc:Field Name="Password" TypeName="opc:ByteString" />
-    <opc:Field Name="EncryptionAlgorithm" TypeName="opc:String" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="X509IdentityToken" BaseType="tns:UserIdentityToken">
-    <opc:Documentation>A token representing a user identified by an X509 certificate.</opc:Documentation>
-    <opc:Field Name="PolicyId" TypeName="opc:String" SourceType="tns:UserIdentityToken" />
-    <opc:Field Name="CertificateData" TypeName="opc:ByteString" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="IssuedIdentityToken" BaseType="tns:UserIdentityToken">
-    <opc:Documentation>A token representing a user identified by a WS-Security XML token.</opc:Documentation>
-    <opc:Field Name="PolicyId" TypeName="opc:String" SourceType="tns:UserIdentityToken" />
-    <opc:Field Name="TokenData" TypeName="opc:ByteString" />
-    <opc:Field Name="EncryptionAlgorithm" TypeName="opc:String" />
-  </opc:StructuredType>
-
-  <opc:OpaqueType Name="RsaEncryptedSecret">
-  </opc:OpaqueType>
-
-  <opc:StructuredType Name="ActivateSessionRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Activates a session with the server.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="ClientSignature" TypeName="tns:SignatureData" />
-    <opc:Field Name="NoOfClientSoftwareCertificates" TypeName="opc:Int32" />
-    <opc:Field Name="ClientSoftwareCertificates" TypeName="tns:SignedSoftwareCertificate" LengthField="NoOfClientSoftwareCertificates" />
-    <opc:Field Name="NoOfLocaleIds" TypeName="opc:Int32" />
-    <opc:Field Name="LocaleIds" TypeName="opc:String" LengthField="NoOfLocaleIds" />
-    <opc:Field Name="UserIdentityToken" TypeName="ua:ExtensionObject" />
-    <opc:Field Name="UserTokenSignature" TypeName="tns:SignatureData" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ActivateSessionResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Activates a session with the server.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="ServerNonce" TypeName="opc:ByteString" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="ua:StatusCode" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="CloseSessionRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Closes a session with the server.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="DeleteSubscriptions" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="CloseSessionResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Closes a session with the server.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="CancelRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Cancels an outstanding request.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="RequestHandle" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="CancelResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Cancels an outstanding request.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="CancelCount" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="NodeAttributesMask" LengthInBits="32">
-    <opc:Documentation>The bits used to specify default attributes for a new node.</opc:Documentation>
-    <opc:EnumeratedValue Name="None" Value="0" />
-    <opc:EnumeratedValue Name="AccessLevel" Value="1" />
-    <opc:EnumeratedValue Name="ArrayDimensions" Value="2" />
-    <opc:EnumeratedValue Name="BrowseName" Value="4" />
-    <opc:EnumeratedValue Name="ContainsNoLoops" Value="8" />
-    <opc:EnumeratedValue Name="DataType" Value="16" />
-    <opc:EnumeratedValue Name="Description" Value="32" />
-    <opc:EnumeratedValue Name="DisplayName" Value="64" />
-    <opc:EnumeratedValue Name="EventNotifier" Value="128" />
-    <opc:EnumeratedValue Name="Executable" Value="256" />
-    <opc:EnumeratedValue Name="Historizing" Value="512" />
-    <opc:EnumeratedValue Name="InverseName" Value="1024" />
-    <opc:EnumeratedValue Name="IsAbstract" Value="2048" />
-    <opc:EnumeratedValue Name="MinimumSamplingInterval" Value="4096" />
-    <opc:EnumeratedValue Name="NodeClass" Value="8192" />
-    <opc:EnumeratedValue Name="NodeId" Value="16384" />
-    <opc:EnumeratedValue Name="Symmetric" Value="32768" />
-    <opc:EnumeratedValue Name="UserAccessLevel" Value="65536" />
-    <opc:EnumeratedValue Name="UserExecutable" Value="131072" />
-    <opc:EnumeratedValue Name="UserWriteMask" Value="262144" />
-    <opc:EnumeratedValue Name="ValueRank" Value="524288" />
-    <opc:EnumeratedValue Name="WriteMask" Value="1048576" />
-    <opc:EnumeratedValue Name="Value" Value="2097152" />
-    <opc:EnumeratedValue Name="DataTypeDefinition" Value="4194304" />
-    <opc:EnumeratedValue Name="RolePermissions" Value="8388608" />
-    <opc:EnumeratedValue Name="AccessRestrictions" Value="16777216" />
-    <opc:EnumeratedValue Name="All" Value="33554431" />
-    <opc:EnumeratedValue Name="BaseNode" Value="26501220" />
-    <opc:EnumeratedValue Name="Object" Value="26501348" />
-    <opc:EnumeratedValue Name="ObjectType" Value="26503268" />
-    <opc:EnumeratedValue Name="Variable" Value="26571383" />
-    <opc:EnumeratedValue Name="VariableType" Value="28600438" />
-    <opc:EnumeratedValue Name="Method" Value="26632548" />
-    <opc:EnumeratedValue Name="ReferenceType" Value="26537060" />
-    <opc:EnumeratedValue Name="View" Value="26501356" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="NodeAttributes" BaseType="ua:ExtensionObject">
-    <opc:Documentation>The base attributes for all nodes.</opc:Documentation>
-    <opc:Field Name="SpecifiedAttributes" TypeName="opc:UInt32" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ObjectAttributes" BaseType="tns:NodeAttributes">
-    <opc:Documentation>The attributes for an object node.</opc:Documentation>
-    <opc:Field Name="SpecifiedAttributes" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="EventNotifier" TypeName="opc:Byte" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="VariableAttributes" BaseType="tns:NodeAttributes">
-    <opc:Documentation>The attributes for a variable node.</opc:Documentation>
-    <opc:Field Name="SpecifiedAttributes" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="Value" TypeName="ua:Variant" />
-    <opc:Field Name="DataType" TypeName="ua:NodeId" />
-    <opc:Field Name="ValueRank" TypeName="opc:Int32" />
-    <opc:Field Name="NoOfArrayDimensions" TypeName="opc:Int32" />
-    <opc:Field Name="ArrayDimensions" TypeName="opc:UInt32" LengthField="NoOfArrayDimensions" />
-    <opc:Field Name="AccessLevel" TypeName="opc:Byte" />
-    <opc:Field Name="UserAccessLevel" TypeName="opc:Byte" />
-    <opc:Field Name="MinimumSamplingInterval" TypeName="opc:Double" />
-    <opc:Field Name="Historizing" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="MethodAttributes" BaseType="tns:NodeAttributes">
-    <opc:Documentation>The attributes for a method node.</opc:Documentation>
-    <opc:Field Name="SpecifiedAttributes" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="Executable" TypeName="opc:Boolean" />
-    <opc:Field Name="UserExecutable" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ObjectTypeAttributes" BaseType="tns:NodeAttributes">
-    <opc:Documentation>The attributes for an object type node.</opc:Documentation>
-    <opc:Field Name="SpecifiedAttributes" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="IsAbstract" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="VariableTypeAttributes" BaseType="tns:NodeAttributes">
-    <opc:Documentation>The attributes for a variable type node.</opc:Documentation>
-    <opc:Field Name="SpecifiedAttributes" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="Value" TypeName="ua:Variant" />
-    <opc:Field Name="DataType" TypeName="ua:NodeId" />
-    <opc:Field Name="ValueRank" TypeName="opc:Int32" />
-    <opc:Field Name="NoOfArrayDimensions" TypeName="opc:Int32" />
-    <opc:Field Name="ArrayDimensions" TypeName="opc:UInt32" LengthField="NoOfArrayDimensions" />
-    <opc:Field Name="IsAbstract" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ReferenceTypeAttributes" BaseType="tns:NodeAttributes">
-    <opc:Documentation>The attributes for a reference type node.</opc:Documentation>
-    <opc:Field Name="SpecifiedAttributes" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="IsAbstract" TypeName="opc:Boolean" />
-    <opc:Field Name="Symmetric" TypeName="opc:Boolean" />
-    <opc:Field Name="InverseName" TypeName="ua:LocalizedText" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DataTypeAttributes" BaseType="tns:NodeAttributes">
-    <opc:Documentation>The attributes for a data type node.</opc:Documentation>
-    <opc:Field Name="SpecifiedAttributes" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="IsAbstract" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ViewAttributes" BaseType="tns:NodeAttributes">
-    <opc:Documentation>The attributes for a view node.</opc:Documentation>
-    <opc:Field Name="SpecifiedAttributes" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="ContainsNoLoops" TypeName="opc:Boolean" />
-    <opc:Field Name="EventNotifier" TypeName="opc:Byte" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="GenericAttributeValue" BaseType="ua:ExtensionObject">
-    <opc:Field Name="AttributeId" TypeName="opc:UInt32" />
-    <opc:Field Name="Value" TypeName="ua:Variant" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="GenericAttributes" BaseType="tns:NodeAttributes">
-    <opc:Field Name="SpecifiedAttributes" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="WriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="UserWriteMask" TypeName="opc:UInt32" SourceType="tns:NodeAttributes" />
-    <opc:Field Name="NoOfAttributeValues" TypeName="opc:Int32" />
-    <opc:Field Name="AttributeValues" TypeName="tns:GenericAttributeValue" LengthField="NoOfAttributeValues" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="AddNodesItem" BaseType="ua:ExtensionObject">
-    <opc:Documentation>A request to add a node to the server address space.</opc:Documentation>
-    <opc:Field Name="ParentNodeId" TypeName="ua:ExpandedNodeId" />
-    <opc:Field Name="ReferenceTypeId" TypeName="ua:NodeId" />
-    <opc:Field Name="RequestedNewNodeId" TypeName="ua:ExpandedNodeId" />
-    <opc:Field Name="BrowseName" TypeName="ua:QualifiedName" />
-    <opc:Field Name="NodeClass" TypeName="tns:NodeClass" />
-    <opc:Field Name="NodeAttributes" TypeName="ua:ExtensionObject" />
-    <opc:Field Name="TypeDefinition" TypeName="ua:ExpandedNodeId" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="AddNodesResult" BaseType="ua:ExtensionObject">
-    <opc:Documentation>A result of an add node operation.</opc:Documentation>
-    <opc:Field Name="StatusCode" TypeName="ua:StatusCode" />
-    <opc:Field Name="AddedNodeId" TypeName="ua:NodeId" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="AddNodesRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Adds one or more nodes to the server address space.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="NoOfNodesToAdd" TypeName="opc:Int32" />
-    <opc:Field Name="NodesToAdd" TypeName="tns:AddNodesItem" LengthField="NoOfNodesToAdd" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="AddNodesResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Adds one or more nodes to the server address space.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="tns:AddNodesResult" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="AddReferencesItem" BaseType="ua:ExtensionObject">
-    <opc:Documentation>A request to add a reference to the server address space.</opc:Documentation>
-    <opc:Field Name="SourceNodeId" TypeName="ua:NodeId" />
-    <opc:Field Name="ReferenceTypeId" TypeName="ua:NodeId" />
-    <opc:Field Name="IsForward" TypeName="opc:Boolean" />
-    <opc:Field Name="TargetServerUri" TypeName="opc:String" />
-    <opc:Field Name="TargetNodeId" TypeName="ua:ExpandedNodeId" />
-    <opc:Field Name="TargetNodeClass" TypeName="tns:NodeClass" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="AddReferencesRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Adds one or more references to the server address space.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="NoOfReferencesToAdd" TypeName="opc:Int32" />
-    <opc:Field Name="ReferencesToAdd" TypeName="tns:AddReferencesItem" LengthField="NoOfReferencesToAdd" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="AddReferencesResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Adds one or more references to the server address space.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="ua:StatusCode" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DeleteNodesItem" BaseType="ua:ExtensionObject">
-    <opc:Documentation>A request to delete a node to the server address space.</opc:Documentation>
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" />
-    <opc:Field Name="DeleteTargetReferences" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DeleteNodesRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Delete one or more nodes from the server address space.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="NoOfNodesToDelete" TypeName="opc:Int32" />
-    <opc:Field Name="NodesToDelete" TypeName="tns:DeleteNodesItem" LengthField="NoOfNodesToDelete" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DeleteNodesResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Delete one or more nodes from the server address space.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="ua:StatusCode" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DeleteReferencesItem" BaseType="ua:ExtensionObject">
-    <opc:Documentation>A request to delete a node from the server address space.</opc:Documentation>
-    <opc:Field Name="SourceNodeId" TypeName="ua:NodeId" />
-    <opc:Field Name="ReferenceTypeId" TypeName="ua:NodeId" />
-    <opc:Field Name="IsForward" TypeName="opc:Boolean" />
-    <opc:Field Name="TargetNodeId" TypeName="ua:ExpandedNodeId" />
-    <opc:Field Name="DeleteBidirectional" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DeleteReferencesRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Delete one or more references from the server address space.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="NoOfReferencesToDelete" TypeName="opc:Int32" />
-    <opc:Field Name="ReferencesToDelete" TypeName="tns:DeleteReferencesItem" LengthField="NoOfReferencesToDelete" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DeleteReferencesResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Delete one or more references from the server address space.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="ua:StatusCode" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="AttributeWriteMask" LengthInBits="32" IsOptionSet="true">
-    <opc:Documentation>Define bits used to indicate which attributes are writable.</opc:Documentation>
-    <opc:EnumeratedValue Name="None" Value="0" />
-    <opc:EnumeratedValue Name="AccessLevel" Value="1" />
-    <opc:EnumeratedValue Name="ArrayDimensions" Value="2" />
-    <opc:EnumeratedValue Name="BrowseName" Value="4" />
-    <opc:EnumeratedValue Name="ContainsNoLoops" Value="8" />
-    <opc:EnumeratedValue Name="DataType" Value="16" />
-    <opc:EnumeratedValue Name="Description" Value="32" />
-    <opc:EnumeratedValue Name="DisplayName" Value="64" />
-    <opc:EnumeratedValue Name="EventNotifier" Value="128" />
-    <opc:EnumeratedValue Name="Executable" Value="256" />
-    <opc:EnumeratedValue Name="Historizing" Value="512" />
-    <opc:EnumeratedValue Name="InverseName" Value="1024" />
-    <opc:EnumeratedValue Name="IsAbstract" Value="2048" />
-    <opc:EnumeratedValue Name="MinimumSamplingInterval" Value="4096" />
-    <opc:EnumeratedValue Name="NodeClass" Value="8192" />
-    <opc:EnumeratedValue Name="NodeId" Value="16384" />
-    <opc:EnumeratedValue Name="Symmetric" Value="32768" />
-    <opc:EnumeratedValue Name="UserAccessLevel" Value="65536" />
-    <opc:EnumeratedValue Name="UserExecutable" Value="131072" />
-    <opc:EnumeratedValue Name="UserWriteMask" Value="262144" />
-    <opc:EnumeratedValue Name="ValueRank" Value="524288" />
-    <opc:EnumeratedValue Name="WriteMask" Value="1048576" />
-    <opc:EnumeratedValue Name="ValueForVariableType" Value="2097152" />
-    <opc:EnumeratedValue Name="DataTypeDefinition" Value="4194304" />
-    <opc:EnumeratedValue Name="RolePermissions" Value="8388608" />
-    <opc:EnumeratedValue Name="AccessRestrictions" Value="16777216" />
-    <opc:EnumeratedValue Name="AccessLevelEx" Value="33554432" />
-  </opc:EnumeratedType>
-
-  <opc:EnumeratedType Name="BrowseDirection" LengthInBits="32">
-    <opc:Documentation>The directions of the references to return.</opc:Documentation>
-    <opc:EnumeratedValue Name="Forward" Value="0" />
-    <opc:EnumeratedValue Name="Inverse" Value="1" />
-    <opc:EnumeratedValue Name="Both" Value="2" />
-    <opc:EnumeratedValue Name="Invalid" Value="3" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="ViewDescription" BaseType="ua:ExtensionObject">
-    <opc:Documentation>The view to browse.</opc:Documentation>
-    <opc:Field Name="ViewId" TypeName="ua:NodeId" />
-    <opc:Field Name="Timestamp" TypeName="opc:DateTime" />
-    <opc:Field Name="ViewVersion" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="BrowseDescription" BaseType="ua:ExtensionObject">
-    <opc:Documentation>A request to browse the the references from a node.</opc:Documentation>
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" />
-    <opc:Field Name="BrowseDirection" TypeName="tns:BrowseDirection" />
-    <opc:Field Name="ReferenceTypeId" TypeName="ua:NodeId" />
-    <opc:Field Name="IncludeSubtypes" TypeName="opc:Boolean" />
-    <opc:Field Name="NodeClassMask" TypeName="opc:UInt32" />
-    <opc:Field Name="ResultMask" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="BrowseResultMask" LengthInBits="32">
-    <opc:Documentation>A bit mask which specifies what should be returned in a browse response.</opc:Documentation>
-    <opc:EnumeratedValue Name="None" Value="0" />
-    <opc:EnumeratedValue Name="ReferenceTypeId" Value="1" />
-    <opc:EnumeratedValue Name="IsForward" Value="2" />
-    <opc:EnumeratedValue Name="NodeClass" Value="4" />
-    <opc:EnumeratedValue Name="BrowseName" Value="8" />
-    <opc:EnumeratedValue Name="DisplayName" Value="16" />
-    <opc:EnumeratedValue Name="TypeDefinition" Value="32" />
-    <opc:EnumeratedValue Name="All" Value="63" />
-    <opc:EnumeratedValue Name="ReferenceTypeInfo" Value="3" />
-    <opc:EnumeratedValue Name="TargetInfo" Value="60" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="ReferenceDescription" BaseType="ua:ExtensionObject">
-    <opc:Documentation>The description of a reference.</opc:Documentation>
-    <opc:Field Name="ReferenceTypeId" TypeName="ua:NodeId" />
-    <opc:Field Name="IsForward" TypeName="opc:Boolean" />
-    <opc:Field Name="NodeId" TypeName="ua:ExpandedNodeId" />
-    <opc:Field Name="BrowseName" TypeName="ua:QualifiedName" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" />
-    <opc:Field Name="NodeClass" TypeName="tns:NodeClass" />
-    <opc:Field Name="TypeDefinition" TypeName="ua:ExpandedNodeId" />
-  </opc:StructuredType>
-
-  <opc:OpaqueType Name="ContinuationPoint">
-    <opc:Documentation>An identifier for a suspended query or browse operation.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:StructuredType Name="BrowseResult" BaseType="ua:ExtensionObject">
-    <opc:Documentation>The result of a browse operation.</opc:Documentation>
-    <opc:Field Name="StatusCode" TypeName="ua:StatusCode" />
-    <opc:Field Name="ContinuationPoint" TypeName="opc:ByteString" />
-    <opc:Field Name="NoOfReferences" TypeName="opc:Int32" />
-    <opc:Field Name="References" TypeName="tns:ReferenceDescription" LengthField="NoOfReferences" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="BrowseRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Browse the references for one or more nodes from the server address space.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="View" TypeName="tns:ViewDescription" />
-    <opc:Field Name="RequestedMaxReferencesPerNode" TypeName="opc:UInt32" />
-    <opc:Field Name="NoOfNodesToBrowse" TypeName="opc:Int32" />
-    <opc:Field Name="NodesToBrowse" TypeName="tns:BrowseDescription" LengthField="NoOfNodesToBrowse" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="BrowseResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Browse the references for one or more nodes from the server address space.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="tns:BrowseResult" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="BrowseNextRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Continues one or more browse operations.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="ReleaseContinuationPoints" TypeName="opc:Boolean" />
-    <opc:Field Name="NoOfContinuationPoints" TypeName="opc:Int32" />
-    <opc:Field Name="ContinuationPoints" TypeName="opc:ByteString" LengthField="NoOfContinuationPoints" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="BrowseNextResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Continues one or more browse operations.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="tns:BrowseResult" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="RelativePathElement" BaseType="ua:ExtensionObject">
-    <opc:Documentation>An element in a relative path.</opc:Documentation>
-    <opc:Field Name="ReferenceTypeId" TypeName="ua:NodeId" />
-    <opc:Field Name="IsInverse" TypeName="opc:Boolean" />
-    <opc:Field Name="IncludeSubtypes" TypeName="opc:Boolean" />
-    <opc:Field Name="TargetName" TypeName="ua:QualifiedName" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="RelativePath" BaseType="ua:ExtensionObject">
-    <opc:Documentation>A relative path constructed from reference types and browse names.</opc:Documentation>
-    <opc:Field Name="NoOfElements" TypeName="opc:Int32" />
-    <opc:Field Name="Elements" TypeName="tns:RelativePathElement" LengthField="NoOfElements" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="BrowsePath" BaseType="ua:ExtensionObject">
-    <opc:Documentation>A request to translate a path into a node id.</opc:Documentation>
-    <opc:Field Name="StartingNode" TypeName="ua:NodeId" />
-    <opc:Field Name="RelativePath" TypeName="tns:RelativePath" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="BrowsePathTarget" BaseType="ua:ExtensionObject">
-    <opc:Documentation>The target of the translated path.</opc:Documentation>
-    <opc:Field Name="TargetId" TypeName="ua:ExpandedNodeId" />
-    <opc:Field Name="RemainingPathIndex" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="BrowsePathResult" BaseType="ua:ExtensionObject">
-    <opc:Documentation>The result of a translate opearation.</opc:Documentation>
-    <opc:Field Name="StatusCode" TypeName="ua:StatusCode" />
-    <opc:Field Name="NoOfTargets" TypeName="opc:Int32" />
-    <opc:Field Name="Targets" TypeName="tns:BrowsePathTarget" LengthField="NoOfTargets" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="TranslateBrowsePathsToNodeIdsRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Translates one or more paths in the server address space.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="NoOfBrowsePaths" TypeName="opc:Int32" />
-    <opc:Field Name="BrowsePaths" TypeName="tns:BrowsePath" LengthField="NoOfBrowsePaths" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="TranslateBrowsePathsToNodeIdsResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Translates one or more paths in the server address space.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="tns:BrowsePathResult" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="RegisterNodesRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Registers one or more nodes for repeated use within a session.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="NoOfNodesToRegister" TypeName="opc:Int32" />
-    <opc:Field Name="NodesToRegister" TypeName="ua:NodeId" LengthField="NoOfNodesToRegister" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="RegisterNodesResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Registers one or more nodes for repeated use within a session.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfRegisteredNodeIds" TypeName="opc:Int32" />
-    <opc:Field Name="RegisteredNodeIds" TypeName="ua:NodeId" LengthField="NoOfRegisteredNodeIds" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="UnregisterNodesRequest" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Unregisters one or more previously registered nodes.</opc:Documentation>
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="NoOfNodesToUnregister" TypeName="opc:Int32" />
-    <opc:Field Name="NodesToUnregister" TypeName="ua:NodeId" LengthField="NoOfNodesToUnregister" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="UnregisterNodesResponse" BaseType="ua:ExtensionObject">
-    <opc:Documentation>Unregisters one or more previously registered nodes.</opc:Documentation>
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-  </opc:StructuredType>
-
-  <opc:OpaqueType Name="Counter">
-    <opc:Documentation>A monotonically increasing value.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:OpaqueType Name="NumericRange">
-    <opc:Documentation>Specifies a range of array indexes.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:OpaqueType Name="Time">
-    <opc:Documentation>A time value specified as HH:MM:SS.SSS.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:OpaqueType Name="Date">
-    <opc:Documentation>A date value.</opc:Documentation>
-  </opc:OpaqueType>
-
-  <opc:StructuredType Name="EndpointConfiguration" BaseType="ua:ExtensionObject">
-    <opc:Field Name="OperationTimeout" TypeName="opc:Int32" />
-    <opc:Field Name="UseBinaryEncoding" TypeName="opc:Boolean" />
-    <opc:Field Name="MaxStringLength" TypeName="opc:Int32" />
-    <opc:Field Name="MaxByteStringLength" TypeName="opc:Int32" />
-    <opc:Field Name="MaxArrayLength" TypeName="opc:Int32" />
-    <opc:Field Name="MaxMessageSize" TypeName="opc:Int32" />
-    <opc:Field Name="MaxBufferSize" TypeName="opc:Int32" />
-    <opc:Field Name="ChannelLifetime" TypeName="opc:Int32" />
-    <opc:Field Name="SecurityTokenLifetime" TypeName="opc:Int32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="QueryDataDescription" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RelativePath" TypeName="tns:RelativePath" />
-    <opc:Field Name="AttributeId" TypeName="opc:UInt32" />
-    <opc:Field Name="IndexRange" TypeName="opc:String" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="NodeTypeDescription" BaseType="ua:ExtensionObject">
-    <opc:Field Name="TypeDefinitionNode" TypeName="ua:ExpandedNodeId" />
-    <opc:Field Name="IncludeSubTypes" TypeName="opc:Boolean" />
-    <opc:Field Name="NoOfDataToReturn" TypeName="opc:Int32" />
-    <opc:Field Name="DataToReturn" TypeName="tns:QueryDataDescription" LengthField="NoOfDataToReturn" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="FilterOperator" LengthInBits="32">
-    <opc:EnumeratedValue Name="Equals" Value="0" />
-    <opc:EnumeratedValue Name="IsNull" Value="1" />
-    <opc:EnumeratedValue Name="GreaterThan" Value="2" />
-    <opc:EnumeratedValue Name="LessThan" Value="3" />
-    <opc:EnumeratedValue Name="GreaterThanOrEqual" Value="4" />
-    <opc:EnumeratedValue Name="LessThanOrEqual" Value="5" />
-    <opc:EnumeratedValue Name="Like" Value="6" />
-    <opc:EnumeratedValue Name="Not" Value="7" />
-    <opc:EnumeratedValue Name="Between" Value="8" />
-    <opc:EnumeratedValue Name="InList" Value="9" />
-    <opc:EnumeratedValue Name="And" Value="10" />
-    <opc:EnumeratedValue Name="Or" Value="11" />
-    <opc:EnumeratedValue Name="Cast" Value="12" />
-    <opc:EnumeratedValue Name="InView" Value="13" />
-    <opc:EnumeratedValue Name="OfType" Value="14" />
-    <opc:EnumeratedValue Name="RelatedTo" Value="15" />
-    <opc:EnumeratedValue Name="BitwiseAnd" Value="16" />
-    <opc:EnumeratedValue Name="BitwiseOr" Value="17" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="QueryDataSet" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NodeId" TypeName="ua:ExpandedNodeId" />
-    <opc:Field Name="TypeDefinitionNode" TypeName="ua:ExpandedNodeId" />
-    <opc:Field Name="NoOfValues" TypeName="opc:Int32" />
-    <opc:Field Name="Values" TypeName="ua:Variant" LengthField="NoOfValues" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="NodeReference" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" />
-    <opc:Field Name="ReferenceTypeId" TypeName="ua:NodeId" />
-    <opc:Field Name="IsForward" TypeName="opc:Boolean" />
-    <opc:Field Name="NoOfReferencedNodeIds" TypeName="opc:Int32" />
-    <opc:Field Name="ReferencedNodeIds" TypeName="ua:NodeId" LengthField="NoOfReferencedNodeIds" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ContentFilterElement" BaseType="ua:ExtensionObject">
-    <opc:Field Name="FilterOperator" TypeName="tns:FilterOperator" />
-    <opc:Field Name="NoOfFilterOperands" TypeName="opc:Int32" />
-    <opc:Field Name="FilterOperands" TypeName="ua:ExtensionObject" LengthField="NoOfFilterOperands" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ContentFilter" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NoOfElements" TypeName="opc:Int32" />
-    <opc:Field Name="Elements" TypeName="tns:ContentFilterElement" LengthField="NoOfElements" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="FilterOperand" BaseType="ua:ExtensionObject">
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ElementOperand" BaseType="tns:FilterOperand">
-    <opc:Field Name="Index" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="LiteralOperand" BaseType="tns:FilterOperand">
-    <opc:Field Name="Value" TypeName="ua:Variant" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="AttributeOperand" BaseType="tns:FilterOperand">
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" />
-    <opc:Field Name="Alias" TypeName="opc:String" />
-    <opc:Field Name="BrowsePath" TypeName="tns:RelativePath" />
-    <opc:Field Name="AttributeId" TypeName="opc:UInt32" />
-    <opc:Field Name="IndexRange" TypeName="opc:String" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SimpleAttributeOperand" BaseType="tns:FilterOperand">
-    <opc:Field Name="TypeDefinitionId" TypeName="ua:NodeId" />
-    <opc:Field Name="NoOfBrowsePath" TypeName="opc:Int32" />
-    <opc:Field Name="BrowsePath" TypeName="ua:QualifiedName" LengthField="NoOfBrowsePath" />
-    <opc:Field Name="AttributeId" TypeName="opc:UInt32" />
-    <opc:Field Name="IndexRange" TypeName="opc:String" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ContentFilterElementResult" BaseType="ua:ExtensionObject">
-    <opc:Field Name="StatusCode" TypeName="ua:StatusCode" />
-    <opc:Field Name="NoOfOperandStatusCodes" TypeName="opc:Int32" />
-    <opc:Field Name="OperandStatusCodes" TypeName="ua:StatusCode" LengthField="NoOfOperandStatusCodes" />
-    <opc:Field Name="NoOfOperandDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="OperandDiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfOperandDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ContentFilterResult" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NoOfElementResults" TypeName="opc:Int32" />
-    <opc:Field Name="ElementResults" TypeName="tns:ContentFilterElementResult" LengthField="NoOfElementResults" />
-    <opc:Field Name="NoOfElementDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="ElementDiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfElementDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ParsingResult" BaseType="ua:ExtensionObject">
-    <opc:Field Name="StatusCode" TypeName="ua:StatusCode" />
-    <opc:Field Name="NoOfDataStatusCodes" TypeName="opc:Int32" />
-    <opc:Field Name="DataStatusCodes" TypeName="ua:StatusCode" LengthField="NoOfDataStatusCodes" />
-    <opc:Field Name="NoOfDataDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DataDiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDataDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="QueryFirstRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="View" TypeName="tns:ViewDescription" />
-    <opc:Field Name="NoOfNodeTypes" TypeName="opc:Int32" />
-    <opc:Field Name="NodeTypes" TypeName="tns:NodeTypeDescription" LengthField="NoOfNodeTypes" />
-    <opc:Field Name="Filter" TypeName="tns:ContentFilter" />
-    <opc:Field Name="MaxDataSetsToReturn" TypeName="opc:UInt32" />
-    <opc:Field Name="MaxReferencesToReturn" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="QueryFirstResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfQueryDataSets" TypeName="opc:Int32" />
-    <opc:Field Name="QueryDataSets" TypeName="tns:QueryDataSet" LengthField="NoOfQueryDataSets" />
-    <opc:Field Name="ContinuationPoint" TypeName="opc:ByteString" />
-    <opc:Field Name="NoOfParsingResults" TypeName="opc:Int32" />
-    <opc:Field Name="ParsingResults" TypeName="tns:ParsingResult" LengthField="NoOfParsingResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-    <opc:Field Name="FilterResult" TypeName="tns:ContentFilterResult" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="QueryNextRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="ReleaseContinuationPoint" TypeName="opc:Boolean" />
-    <opc:Field Name="ContinuationPoint" TypeName="opc:ByteString" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="QueryNextResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfQueryDataSets" TypeName="opc:Int32" />
-    <opc:Field Name="QueryDataSets" TypeName="tns:QueryDataSet" LengthField="NoOfQueryDataSets" />
-    <opc:Field Name="RevisedContinuationPoint" TypeName="opc:ByteString" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="TimestampsToReturn" LengthInBits="32">
-    <opc:EnumeratedValue Name="Source" Value="0" />
-    <opc:EnumeratedValue Name="Server" Value="1" />
-    <opc:EnumeratedValue Name="Both" Value="2" />
-    <opc:EnumeratedValue Name="Neither" Value="3" />
-    <opc:EnumeratedValue Name="Invalid" Value="4" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="ReadValueId" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" />
-    <opc:Field Name="AttributeId" TypeName="opc:UInt32" />
-    <opc:Field Name="IndexRange" TypeName="opc:String" />
-    <opc:Field Name="DataEncoding" TypeName="ua:QualifiedName" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ReadRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="MaxAge" TypeName="opc:Double" />
-    <opc:Field Name="TimestampsToReturn" TypeName="tns:TimestampsToReturn" />
-    <opc:Field Name="NoOfNodesToRead" TypeName="opc:Int32" />
-    <opc:Field Name="NodesToRead" TypeName="tns:ReadValueId" LengthField="NoOfNodesToRead" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ReadResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="ua:DataValue" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="HistoryReadValueId" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" />
-    <opc:Field Name="IndexRange" TypeName="opc:String" />
-    <opc:Field Name="DataEncoding" TypeName="ua:QualifiedName" />
-    <opc:Field Name="ContinuationPoint" TypeName="opc:ByteString" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="HistoryReadResult" BaseType="ua:ExtensionObject">
-    <opc:Field Name="StatusCode" TypeName="ua:StatusCode" />
-    <opc:Field Name="ContinuationPoint" TypeName="opc:ByteString" />
-    <opc:Field Name="HistoryData" TypeName="ua:ExtensionObject" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="HistoryReadDetails" BaseType="ua:ExtensionObject">
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ReadEventDetails" BaseType="tns:HistoryReadDetails">
-    <opc:Field Name="NumValuesPerNode" TypeName="opc:UInt32" />
-    <opc:Field Name="StartTime" TypeName="opc:DateTime" />
-    <opc:Field Name="EndTime" TypeName="opc:DateTime" />
-    <opc:Field Name="Filter" TypeName="tns:EventFilter" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ReadRawModifiedDetails" BaseType="tns:HistoryReadDetails">
-    <opc:Field Name="IsReadModified" TypeName="opc:Boolean" />
-    <opc:Field Name="StartTime" TypeName="opc:DateTime" />
-    <opc:Field Name="EndTime" TypeName="opc:DateTime" />
-    <opc:Field Name="NumValuesPerNode" TypeName="opc:UInt32" />
-    <opc:Field Name="ReturnBounds" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ReadProcessedDetails" BaseType="tns:HistoryReadDetails">
-    <opc:Field Name="StartTime" TypeName="opc:DateTime" />
-    <opc:Field Name="EndTime" TypeName="opc:DateTime" />
-    <opc:Field Name="ProcessingInterval" TypeName="opc:Double" />
-    <opc:Field Name="NoOfAggregateType" TypeName="opc:Int32" />
-    <opc:Field Name="AggregateType" TypeName="ua:NodeId" LengthField="NoOfAggregateType" />
-    <opc:Field Name="AggregateConfiguration" TypeName="tns:AggregateConfiguration" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ReadAtTimeDetails" BaseType="tns:HistoryReadDetails">
-    <opc:Field Name="NoOfReqTimes" TypeName="opc:Int32" />
-    <opc:Field Name="ReqTimes" TypeName="opc:DateTime" LengthField="NoOfReqTimes" />
-    <opc:Field Name="UseSimpleBounds" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="HistoryData" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NoOfDataValues" TypeName="opc:Int32" />
-    <opc:Field Name="DataValues" TypeName="ua:DataValue" LengthField="NoOfDataValues" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ModificationInfo" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ModificationTime" TypeName="opc:DateTime" />
-    <opc:Field Name="UpdateType" TypeName="tns:HistoryUpdateType" />
-    <opc:Field Name="UserName" TypeName="opc:String" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="HistoryModifiedData" BaseType="tns:HistoryData">
-    <opc:Field Name="NoOfDataValues" TypeName="opc:Int32" />
-    <opc:Field Name="DataValues" TypeName="ua:DataValue" LengthField="NoOfDataValues" />
-    <opc:Field Name="NoOfModificationInfos" TypeName="opc:Int32" />
-    <opc:Field Name="ModificationInfos" TypeName="tns:ModificationInfo" LengthField="NoOfModificationInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="HistoryEvent" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NoOfEvents" TypeName="opc:Int32" />
-    <opc:Field Name="Events" TypeName="tns:HistoryEventFieldList" LengthField="NoOfEvents" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="HistoryReadRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="HistoryReadDetails" TypeName="ua:ExtensionObject" />
-    <opc:Field Name="TimestampsToReturn" TypeName="tns:TimestampsToReturn" />
-    <opc:Field Name="ReleaseContinuationPoints" TypeName="opc:Boolean" />
-    <opc:Field Name="NoOfNodesToRead" TypeName="opc:Int32" />
-    <opc:Field Name="NodesToRead" TypeName="tns:HistoryReadValueId" LengthField="NoOfNodesToRead" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="HistoryReadResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="tns:HistoryReadResult" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="WriteValue" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" />
-    <opc:Field Name="AttributeId" TypeName="opc:UInt32" />
-    <opc:Field Name="IndexRange" TypeName="opc:String" />
-    <opc:Field Name="Value" TypeName="ua:DataValue" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="WriteRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="NoOfNodesToWrite" TypeName="opc:Int32" />
-    <opc:Field Name="NodesToWrite" TypeName="tns:WriteValue" LengthField="NoOfNodesToWrite" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="WriteResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="ua:StatusCode" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="HistoryUpdateDetails" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="HistoryUpdateType" LengthInBits="32">
-    <opc:EnumeratedValue Name="Insert" Value="1" />
-    <opc:EnumeratedValue Name="Replace" Value="2" />
-    <opc:EnumeratedValue Name="Update" Value="3" />
-    <opc:EnumeratedValue Name="Delete" Value="4" />
-  </opc:EnumeratedType>
-
-  <opc:EnumeratedType Name="PerformUpdateType" LengthInBits="32">
-    <opc:EnumeratedValue Name="Insert" Value="1" />
-    <opc:EnumeratedValue Name="Replace" Value="2" />
-    <opc:EnumeratedValue Name="Update" Value="3" />
-    <opc:EnumeratedValue Name="Remove" Value="4" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="UpdateDataDetails" BaseType="tns:HistoryUpdateDetails">
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" SourceType="tns:HistoryUpdateDetails" />
-    <opc:Field Name="PerformInsertReplace" TypeName="tns:PerformUpdateType" />
-    <opc:Field Name="NoOfUpdateValues" TypeName="opc:Int32" />
-    <opc:Field Name="UpdateValues" TypeName="ua:DataValue" LengthField="NoOfUpdateValues" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="UpdateStructureDataDetails" BaseType="tns:HistoryUpdateDetails">
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" SourceType="tns:HistoryUpdateDetails" />
-    <opc:Field Name="PerformInsertReplace" TypeName="tns:PerformUpdateType" />
-    <opc:Field Name="NoOfUpdateValues" TypeName="opc:Int32" />
-    <opc:Field Name="UpdateValues" TypeName="ua:DataValue" LengthField="NoOfUpdateValues" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="UpdateEventDetails" BaseType="tns:HistoryUpdateDetails">
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" SourceType="tns:HistoryUpdateDetails" />
-    <opc:Field Name="PerformInsertReplace" TypeName="tns:PerformUpdateType" />
-    <opc:Field Name="Filter" TypeName="tns:EventFilter" />
-    <opc:Field Name="NoOfEventData" TypeName="opc:Int32" />
-    <opc:Field Name="EventData" TypeName="tns:HistoryEventFieldList" LengthField="NoOfEventData" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DeleteRawModifiedDetails" BaseType="tns:HistoryUpdateDetails">
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" SourceType="tns:HistoryUpdateDetails" />
-    <opc:Field Name="IsDeleteModified" TypeName="opc:Boolean" />
-    <opc:Field Name="StartTime" TypeName="opc:DateTime" />
-    <opc:Field Name="EndTime" TypeName="opc:DateTime" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DeleteAtTimeDetails" BaseType="tns:HistoryUpdateDetails">
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" SourceType="tns:HistoryUpdateDetails" />
-    <opc:Field Name="NoOfReqTimes" TypeName="opc:Int32" />
-    <opc:Field Name="ReqTimes" TypeName="opc:DateTime" LengthField="NoOfReqTimes" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DeleteEventDetails" BaseType="tns:HistoryUpdateDetails">
-    <opc:Field Name="NodeId" TypeName="ua:NodeId" SourceType="tns:HistoryUpdateDetails" />
-    <opc:Field Name="NoOfEventIds" TypeName="opc:Int32" />
-    <opc:Field Name="EventIds" TypeName="opc:ByteString" LengthField="NoOfEventIds" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="HistoryUpdateResult" BaseType="ua:ExtensionObject">
-    <opc:Field Name="StatusCode" TypeName="ua:StatusCode" />
-    <opc:Field Name="NoOfOperationResults" TypeName="opc:Int32" />
-    <opc:Field Name="OperationResults" TypeName="ua:StatusCode" LengthField="NoOfOperationResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="HistoryUpdateRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="NoOfHistoryUpdateDetails" TypeName="opc:Int32" />
-    <opc:Field Name="HistoryUpdateDetails" TypeName="ua:ExtensionObject" LengthField="NoOfHistoryUpdateDetails" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="HistoryUpdateResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="tns:HistoryUpdateResult" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="CallMethodRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ObjectId" TypeName="ua:NodeId" />
-    <opc:Field Name="MethodId" TypeName="ua:NodeId" />
-    <opc:Field Name="NoOfInputArguments" TypeName="opc:Int32" />
-    <opc:Field Name="InputArguments" TypeName="ua:Variant" LengthField="NoOfInputArguments" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="CallMethodResult" BaseType="ua:ExtensionObject">
-    <opc:Field Name="StatusCode" TypeName="ua:StatusCode" />
-    <opc:Field Name="NoOfInputArgumentResults" TypeName="opc:Int32" />
-    <opc:Field Name="InputArgumentResults" TypeName="ua:StatusCode" LengthField="NoOfInputArgumentResults" />
-    <opc:Field Name="NoOfInputArgumentDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="InputArgumentDiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfInputArgumentDiagnosticInfos" />
-    <opc:Field Name="NoOfOutputArguments" TypeName="opc:Int32" />
-    <opc:Field Name="OutputArguments" TypeName="ua:Variant" LengthField="NoOfOutputArguments" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="CallRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="NoOfMethodsToCall" TypeName="opc:Int32" />
-    <opc:Field Name="MethodsToCall" TypeName="tns:CallMethodRequest" LengthField="NoOfMethodsToCall" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="CallResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="tns:CallMethodResult" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="MonitoringMode" LengthInBits="32">
-    <opc:EnumeratedValue Name="Disabled" Value="0" />
-    <opc:EnumeratedValue Name="Sampling" Value="1" />
-    <opc:EnumeratedValue Name="Reporting" Value="2" />
-  </opc:EnumeratedType>
-
-  <opc:EnumeratedType Name="DataChangeTrigger" LengthInBits="32">
-    <opc:EnumeratedValue Name="Status" Value="0" />
-    <opc:EnumeratedValue Name="StatusValue" Value="1" />
-    <opc:EnumeratedValue Name="StatusValueTimestamp" Value="2" />
-  </opc:EnumeratedType>
-
-  <opc:EnumeratedType Name="DeadbandType" LengthInBits="32">
-    <opc:EnumeratedValue Name="None" Value="0" />
-    <opc:EnumeratedValue Name="Absolute" Value="1" />
-    <opc:EnumeratedValue Name="Percent" Value="2" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="MonitoringFilter" BaseType="ua:ExtensionObject">
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DataChangeFilter" BaseType="tns:MonitoringFilter">
-    <opc:Field Name="Trigger" TypeName="tns:DataChangeTrigger" />
-    <opc:Field Name="DeadbandType" TypeName="opc:UInt32" />
-    <opc:Field Name="DeadbandValue" TypeName="opc:Double" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="EventFilter" BaseType="tns:MonitoringFilter">
-    <opc:Field Name="NoOfSelectClauses" TypeName="opc:Int32" />
-    <opc:Field Name="SelectClauses" TypeName="tns:SimpleAttributeOperand" LengthField="NoOfSelectClauses" />
-    <opc:Field Name="WhereClause" TypeName="tns:ContentFilter" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="AggregateConfiguration" BaseType="ua:ExtensionObject">
-    <opc:Field Name="UseServerCapabilitiesDefaults" TypeName="opc:Boolean" />
-    <opc:Field Name="TreatUncertainAsBad" TypeName="opc:Boolean" />
-    <opc:Field Name="PercentDataBad" TypeName="opc:Byte" />
-    <opc:Field Name="PercentDataGood" TypeName="opc:Byte" />
-    <opc:Field Name="UseSlopedExtrapolation" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="AggregateFilter" BaseType="tns:MonitoringFilter">
-    <opc:Field Name="StartTime" TypeName="opc:DateTime" />
-    <opc:Field Name="AggregateType" TypeName="ua:NodeId" />
-    <opc:Field Name="ProcessingInterval" TypeName="opc:Double" />
-    <opc:Field Name="AggregateConfiguration" TypeName="tns:AggregateConfiguration" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="MonitoringFilterResult" BaseType="ua:ExtensionObject">
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="EventFilterResult" BaseType="tns:MonitoringFilterResult">
-    <opc:Field Name="NoOfSelectClauseResults" TypeName="opc:Int32" />
-    <opc:Field Name="SelectClauseResults" TypeName="ua:StatusCode" LengthField="NoOfSelectClauseResults" />
-    <opc:Field Name="NoOfSelectClauseDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="SelectClauseDiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfSelectClauseDiagnosticInfos" />
-    <opc:Field Name="WhereClauseResult" TypeName="tns:ContentFilterResult" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="AggregateFilterResult" BaseType="tns:MonitoringFilterResult">
-    <opc:Field Name="RevisedStartTime" TypeName="opc:DateTime" />
-    <opc:Field Name="RevisedProcessingInterval" TypeName="opc:Double" />
-    <opc:Field Name="RevisedAggregateConfiguration" TypeName="tns:AggregateConfiguration" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="MonitoringParameters" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ClientHandle" TypeName="opc:UInt32" />
-    <opc:Field Name="SamplingInterval" TypeName="opc:Double" />
-    <opc:Field Name="Filter" TypeName="ua:ExtensionObject" />
-    <opc:Field Name="QueueSize" TypeName="opc:UInt32" />
-    <opc:Field Name="DiscardOldest" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="MonitoredItemCreateRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ItemToMonitor" TypeName="tns:ReadValueId" />
-    <opc:Field Name="MonitoringMode" TypeName="tns:MonitoringMode" />
-    <opc:Field Name="RequestedParameters" TypeName="tns:MonitoringParameters" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="MonitoredItemCreateResult" BaseType="ua:ExtensionObject">
-    <opc:Field Name="StatusCode" TypeName="ua:StatusCode" />
-    <opc:Field Name="MonitoredItemId" TypeName="opc:UInt32" />
-    <opc:Field Name="RevisedSamplingInterval" TypeName="opc:Double" />
-    <opc:Field Name="RevisedQueueSize" TypeName="opc:UInt32" />
-    <opc:Field Name="FilterResult" TypeName="ua:ExtensionObject" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="CreateMonitoredItemsRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="SubscriptionId" TypeName="opc:UInt32" />
-    <opc:Field Name="TimestampsToReturn" TypeName="tns:TimestampsToReturn" />
-    <opc:Field Name="NoOfItemsToCreate" TypeName="opc:Int32" />
-    <opc:Field Name="ItemsToCreate" TypeName="tns:MonitoredItemCreateRequest" LengthField="NoOfItemsToCreate" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="CreateMonitoredItemsResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="tns:MonitoredItemCreateResult" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="MonitoredItemModifyRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="MonitoredItemId" TypeName="opc:UInt32" />
-    <opc:Field Name="RequestedParameters" TypeName="tns:MonitoringParameters" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="MonitoredItemModifyResult" BaseType="ua:ExtensionObject">
-    <opc:Field Name="StatusCode" TypeName="ua:StatusCode" />
-    <opc:Field Name="RevisedSamplingInterval" TypeName="opc:Double" />
-    <opc:Field Name="RevisedQueueSize" TypeName="opc:UInt32" />
-    <opc:Field Name="FilterResult" TypeName="ua:ExtensionObject" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ModifyMonitoredItemsRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="SubscriptionId" TypeName="opc:UInt32" />
-    <opc:Field Name="TimestampsToReturn" TypeName="tns:TimestampsToReturn" />
-    <opc:Field Name="NoOfItemsToModify" TypeName="opc:Int32" />
-    <opc:Field Name="ItemsToModify" TypeName="tns:MonitoredItemModifyRequest" LengthField="NoOfItemsToModify" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ModifyMonitoredItemsResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="tns:MonitoredItemModifyResult" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SetMonitoringModeRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="SubscriptionId" TypeName="opc:UInt32" />
-    <opc:Field Name="MonitoringMode" TypeName="tns:MonitoringMode" />
-    <opc:Field Name="NoOfMonitoredItemIds" TypeName="opc:Int32" />
-    <opc:Field Name="MonitoredItemIds" TypeName="opc:UInt32" LengthField="NoOfMonitoredItemIds" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SetMonitoringModeResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="ua:StatusCode" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SetTriggeringRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="SubscriptionId" TypeName="opc:UInt32" />
-    <opc:Field Name="TriggeringItemId" TypeName="opc:UInt32" />
-    <opc:Field Name="NoOfLinksToAdd" TypeName="opc:Int32" />
-    <opc:Field Name="LinksToAdd" TypeName="opc:UInt32" LengthField="NoOfLinksToAdd" />
-    <opc:Field Name="NoOfLinksToRemove" TypeName="opc:Int32" />
-    <opc:Field Name="LinksToRemove" TypeName="opc:UInt32" LengthField="NoOfLinksToRemove" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SetTriggeringResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfAddResults" TypeName="opc:Int32" />
-    <opc:Field Name="AddResults" TypeName="ua:StatusCode" LengthField="NoOfAddResults" />
-    <opc:Field Name="NoOfAddDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="AddDiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfAddDiagnosticInfos" />
-    <opc:Field Name="NoOfRemoveResults" TypeName="opc:Int32" />
-    <opc:Field Name="RemoveResults" TypeName="ua:StatusCode" LengthField="NoOfRemoveResults" />
-    <opc:Field Name="NoOfRemoveDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="RemoveDiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfRemoveDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DeleteMonitoredItemsRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="SubscriptionId" TypeName="opc:UInt32" />
-    <opc:Field Name="NoOfMonitoredItemIds" TypeName="opc:Int32" />
-    <opc:Field Name="MonitoredItemIds" TypeName="opc:UInt32" LengthField="NoOfMonitoredItemIds" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DeleteMonitoredItemsResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="ua:StatusCode" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="CreateSubscriptionRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="RequestedPublishingInterval" TypeName="opc:Double" />
-    <opc:Field Name="RequestedLifetimeCount" TypeName="opc:UInt32" />
-    <opc:Field Name="RequestedMaxKeepAliveCount" TypeName="opc:UInt32" />
-    <opc:Field Name="MaxNotificationsPerPublish" TypeName="opc:UInt32" />
-    <opc:Field Name="PublishingEnabled" TypeName="opc:Boolean" />
-    <opc:Field Name="Priority" TypeName="opc:Byte" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="CreateSubscriptionResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="SubscriptionId" TypeName="opc:UInt32" />
-    <opc:Field Name="RevisedPublishingInterval" TypeName="opc:Double" />
-    <opc:Field Name="RevisedLifetimeCount" TypeName="opc:UInt32" />
-    <opc:Field Name="RevisedMaxKeepAliveCount" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ModifySubscriptionRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="SubscriptionId" TypeName="opc:UInt32" />
-    <opc:Field Name="RequestedPublishingInterval" TypeName="opc:Double" />
-    <opc:Field Name="RequestedLifetimeCount" TypeName="opc:UInt32" />
-    <opc:Field Name="RequestedMaxKeepAliveCount" TypeName="opc:UInt32" />
-    <opc:Field Name="MaxNotificationsPerPublish" TypeName="opc:UInt32" />
-    <opc:Field Name="Priority" TypeName="opc:Byte" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ModifySubscriptionResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="RevisedPublishingInterval" TypeName="opc:Double" />
-    <opc:Field Name="RevisedLifetimeCount" TypeName="opc:UInt32" />
-    <opc:Field Name="RevisedMaxKeepAliveCount" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SetPublishingModeRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="PublishingEnabled" TypeName="opc:Boolean" />
-    <opc:Field Name="NoOfSubscriptionIds" TypeName="opc:Int32" />
-    <opc:Field Name="SubscriptionIds" TypeName="opc:UInt32" LengthField="NoOfSubscriptionIds" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SetPublishingModeResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="ua:StatusCode" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="NotificationMessage" BaseType="ua:ExtensionObject">
-    <opc:Field Name="SequenceNumber" TypeName="opc:UInt32" />
-    <opc:Field Name="PublishTime" TypeName="opc:DateTime" />
-    <opc:Field Name="NoOfNotificationData" TypeName="opc:Int32" />
-    <opc:Field Name="NotificationData" TypeName="ua:ExtensionObject" LengthField="NoOfNotificationData" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="NotificationData" BaseType="ua:ExtensionObject">
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DataChangeNotification" BaseType="tns:NotificationData">
-    <opc:Field Name="NoOfMonitoredItems" TypeName="opc:Int32" />
-    <opc:Field Name="MonitoredItems" TypeName="tns:MonitoredItemNotification" LengthField="NoOfMonitoredItems" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="MonitoredItemNotification" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ClientHandle" TypeName="opc:UInt32" />
-    <opc:Field Name="Value" TypeName="ua:DataValue" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="EventNotificationList" BaseType="tns:NotificationData">
-    <opc:Field Name="NoOfEvents" TypeName="opc:Int32" />
-    <opc:Field Name="Events" TypeName="tns:EventFieldList" LengthField="NoOfEvents" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="EventFieldList" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ClientHandle" TypeName="opc:UInt32" />
-    <opc:Field Name="NoOfEventFields" TypeName="opc:Int32" />
-    <opc:Field Name="EventFields" TypeName="ua:Variant" LengthField="NoOfEventFields" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="HistoryEventFieldList" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NoOfEventFields" TypeName="opc:Int32" />
-    <opc:Field Name="EventFields" TypeName="ua:Variant" LengthField="NoOfEventFields" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="StatusChangeNotification" BaseType="tns:NotificationData">
-    <opc:Field Name="Status" TypeName="ua:StatusCode" />
-    <opc:Field Name="DiagnosticInfo" TypeName="ua:DiagnosticInfo" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SubscriptionAcknowledgement" BaseType="ua:ExtensionObject">
-    <opc:Field Name="SubscriptionId" TypeName="opc:UInt32" />
-    <opc:Field Name="SequenceNumber" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="PublishRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="NoOfSubscriptionAcknowledgements" TypeName="opc:Int32" />
-    <opc:Field Name="SubscriptionAcknowledgements" TypeName="tns:SubscriptionAcknowledgement" LengthField="NoOfSubscriptionAcknowledgements" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="PublishResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="SubscriptionId" TypeName="opc:UInt32" />
-    <opc:Field Name="NoOfAvailableSequenceNumbers" TypeName="opc:Int32" />
-    <opc:Field Name="AvailableSequenceNumbers" TypeName="opc:UInt32" LengthField="NoOfAvailableSequenceNumbers" />
-    <opc:Field Name="MoreNotifications" TypeName="opc:Boolean" />
-    <opc:Field Name="NotificationMessage" TypeName="tns:NotificationMessage" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="ua:StatusCode" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="RepublishRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="SubscriptionId" TypeName="opc:UInt32" />
-    <opc:Field Name="RetransmitSequenceNumber" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="RepublishResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NotificationMessage" TypeName="tns:NotificationMessage" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="TransferResult" BaseType="ua:ExtensionObject">
-    <opc:Field Name="StatusCode" TypeName="ua:StatusCode" />
-    <opc:Field Name="NoOfAvailableSequenceNumbers" TypeName="opc:Int32" />
-    <opc:Field Name="AvailableSequenceNumbers" TypeName="opc:UInt32" LengthField="NoOfAvailableSequenceNumbers" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="TransferSubscriptionsRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="NoOfSubscriptionIds" TypeName="opc:Int32" />
-    <opc:Field Name="SubscriptionIds" TypeName="opc:UInt32" LengthField="NoOfSubscriptionIds" />
-    <opc:Field Name="SendInitialValues" TypeName="opc:Boolean" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="TransferSubscriptionsResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="tns:TransferResult" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DeleteSubscriptionsRequest" BaseType="ua:ExtensionObject">
-    <opc:Field Name="RequestHeader" TypeName="tns:RequestHeader" />
-    <opc:Field Name="NoOfSubscriptionIds" TypeName="opc:Int32" />
-    <opc:Field Name="SubscriptionIds" TypeName="opc:UInt32" LengthField="NoOfSubscriptionIds" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DeleteSubscriptionsResponse" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ResponseHeader" TypeName="tns:ResponseHeader" />
-    <opc:Field Name="NoOfResults" TypeName="opc:Int32" />
-    <opc:Field Name="Results" TypeName="ua:StatusCode" LengthField="NoOfResults" />
-    <opc:Field Name="NoOfDiagnosticInfos" TypeName="opc:Int32" />
-    <opc:Field Name="DiagnosticInfos" TypeName="ua:DiagnosticInfo" LengthField="NoOfDiagnosticInfos" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="BuildInfo" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ProductUri" TypeName="opc:String" />
-    <opc:Field Name="ManufacturerName" TypeName="opc:String" />
-    <opc:Field Name="ProductName" TypeName="opc:String" />
-    <opc:Field Name="SoftwareVersion" TypeName="opc:String" />
-    <opc:Field Name="BuildNumber" TypeName="opc:String" />
-    <opc:Field Name="BuildDate" TypeName="opc:DateTime" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="RedundancySupport" LengthInBits="32">
-    <opc:EnumeratedValue Name="None" Value="0" />
-    <opc:EnumeratedValue Name="Cold" Value="1" />
-    <opc:EnumeratedValue Name="Warm" Value="2" />
-    <opc:EnumeratedValue Name="Hot" Value="3" />
-    <opc:EnumeratedValue Name="Transparent" Value="4" />
-    <opc:EnumeratedValue Name="HotAndMirrored" Value="5" />
-  </opc:EnumeratedType>
-
-  <opc:EnumeratedType Name="ServerState" LengthInBits="32">
-    <opc:EnumeratedValue Name="Running" Value="0" />
-    <opc:EnumeratedValue Name="Failed" Value="1" />
-    <opc:EnumeratedValue Name="NoConfiguration" Value="2" />
-    <opc:EnumeratedValue Name="Suspended" Value="3" />
-    <opc:EnumeratedValue Name="Shutdown" Value="4" />
-    <opc:EnumeratedValue Name="Test" Value="5" />
-    <opc:EnumeratedValue Name="CommunicationFault" Value="6" />
-    <opc:EnumeratedValue Name="Unknown" Value="7" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="RedundantServerDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ServerId" TypeName="opc:String" />
-    <opc:Field Name="ServiceLevel" TypeName="opc:Byte" />
-    <opc:Field Name="ServerState" TypeName="tns:ServerState" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="EndpointUrlListDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NoOfEndpointUrlList" TypeName="opc:Int32" />
-    <opc:Field Name="EndpointUrlList" TypeName="opc:String" LengthField="NoOfEndpointUrlList" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="NetworkGroupDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ServerUri" TypeName="opc:String" />
-    <opc:Field Name="NoOfNetworkPaths" TypeName="opc:Int32" />
-    <opc:Field Name="NetworkPaths" TypeName="tns:EndpointUrlListDataType" LengthField="NoOfNetworkPaths" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SamplingIntervalDiagnosticsDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="SamplingInterval" TypeName="opc:Double" />
-    <opc:Field Name="MonitoredItemCount" TypeName="opc:UInt32" />
-    <opc:Field Name="MaxMonitoredItemCount" TypeName="opc:UInt32" />
-    <opc:Field Name="DisabledMonitoredItemCount" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ServerDiagnosticsSummaryDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="ServerViewCount" TypeName="opc:UInt32" />
-    <opc:Field Name="CurrentSessionCount" TypeName="opc:UInt32" />
-    <opc:Field Name="CumulatedSessionCount" TypeName="opc:UInt32" />
-    <opc:Field Name="SecurityRejectedSessionCount" TypeName="opc:UInt32" />
-    <opc:Field Name="RejectedSessionCount" TypeName="opc:UInt32" />
-    <opc:Field Name="SessionTimeoutCount" TypeName="opc:UInt32" />
-    <opc:Field Name="SessionAbortCount" TypeName="opc:UInt32" />
-    <opc:Field Name="CurrentSubscriptionCount" TypeName="opc:UInt32" />
-    <opc:Field Name="CumulatedSubscriptionCount" TypeName="opc:UInt32" />
-    <opc:Field Name="PublishingIntervalCount" TypeName="opc:UInt32" />
-    <opc:Field Name="SecurityRejectedRequestsCount" TypeName="opc:UInt32" />
-    <opc:Field Name="RejectedRequestsCount" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ServerStatusDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="StartTime" TypeName="opc:DateTime" />
-    <opc:Field Name="CurrentTime" TypeName="opc:DateTime" />
-    <opc:Field Name="State" TypeName="tns:ServerState" />
-    <opc:Field Name="BuildInfo" TypeName="tns:BuildInfo" />
-    <opc:Field Name="SecondsTillShutdown" TypeName="opc:UInt32" />
-    <opc:Field Name="ShutdownReason" TypeName="ua:LocalizedText" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SessionDiagnosticsDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="SessionId" TypeName="ua:NodeId" />
-    <opc:Field Name="SessionName" TypeName="opc:String" />
-    <opc:Field Name="ClientDescription" TypeName="tns:ApplicationDescription" />
-    <opc:Field Name="ServerUri" TypeName="opc:String" />
-    <opc:Field Name="EndpointUrl" TypeName="opc:String" />
-    <opc:Field Name="NoOfLocaleIds" TypeName="opc:Int32" />
-    <opc:Field Name="LocaleIds" TypeName="opc:String" LengthField="NoOfLocaleIds" />
-    <opc:Field Name="ActualSessionTimeout" TypeName="opc:Double" />
-    <opc:Field Name="MaxResponseMessageSize" TypeName="opc:UInt32" />
-    <opc:Field Name="ClientConnectionTime" TypeName="opc:DateTime" />
-    <opc:Field Name="ClientLastContactTime" TypeName="opc:DateTime" />
-    <opc:Field Name="CurrentSubscriptionsCount" TypeName="opc:UInt32" />
-    <opc:Field Name="CurrentMonitoredItemsCount" TypeName="opc:UInt32" />
-    <opc:Field Name="CurrentPublishRequestsInQueue" TypeName="opc:UInt32" />
-    <opc:Field Name="TotalRequestCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="UnauthorizedRequestCount" TypeName="opc:UInt32" />
-    <opc:Field Name="ReadCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="HistoryReadCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="WriteCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="HistoryUpdateCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="CallCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="CreateMonitoredItemsCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="ModifyMonitoredItemsCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="SetMonitoringModeCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="SetTriggeringCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="DeleteMonitoredItemsCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="CreateSubscriptionCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="ModifySubscriptionCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="SetPublishingModeCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="PublishCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="RepublishCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="TransferSubscriptionsCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="DeleteSubscriptionsCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="AddNodesCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="AddReferencesCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="DeleteNodesCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="DeleteReferencesCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="BrowseCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="BrowseNextCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="TranslateBrowsePathsToNodeIdsCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="QueryFirstCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="QueryNextCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="RegisterNodesCount" TypeName="tns:ServiceCounterDataType" />
-    <opc:Field Name="UnregisterNodesCount" TypeName="tns:ServiceCounterDataType" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SessionSecurityDiagnosticsDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="SessionId" TypeName="ua:NodeId" />
-    <opc:Field Name="ClientUserIdOfSession" TypeName="opc:String" />
-    <opc:Field Name="NoOfClientUserIdHistory" TypeName="opc:Int32" />
-    <opc:Field Name="ClientUserIdHistory" TypeName="opc:String" LengthField="NoOfClientUserIdHistory" />
-    <opc:Field Name="AuthenticationMechanism" TypeName="opc:String" />
-    <opc:Field Name="Encoding" TypeName="opc:String" />
-    <opc:Field Name="TransportProtocol" TypeName="opc:String" />
-    <opc:Field Name="SecurityMode" TypeName="tns:MessageSecurityMode" />
-    <opc:Field Name="SecurityPolicyUri" TypeName="opc:String" />
-    <opc:Field Name="ClientCertificate" TypeName="opc:ByteString" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ServiceCounterDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="TotalCount" TypeName="opc:UInt32" />
-    <opc:Field Name="ErrorCount" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="StatusResult" BaseType="ua:ExtensionObject">
-    <opc:Field Name="StatusCode" TypeName="ua:StatusCode" />
-    <opc:Field Name="DiagnosticInfo" TypeName="ua:DiagnosticInfo" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SubscriptionDiagnosticsDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="SessionId" TypeName="ua:NodeId" />
-    <opc:Field Name="SubscriptionId" TypeName="opc:UInt32" />
-    <opc:Field Name="Priority" TypeName="opc:Byte" />
-    <opc:Field Name="PublishingInterval" TypeName="opc:Double" />
-    <opc:Field Name="MaxKeepAliveCount" TypeName="opc:UInt32" />
-    <opc:Field Name="MaxLifetimeCount" TypeName="opc:UInt32" />
-    <opc:Field Name="MaxNotificationsPerPublish" TypeName="opc:UInt32" />
-    <opc:Field Name="PublishingEnabled" TypeName="opc:Boolean" />
-    <opc:Field Name="ModifyCount" TypeName="opc:UInt32" />
-    <opc:Field Name="EnableCount" TypeName="opc:UInt32" />
-    <opc:Field Name="DisableCount" TypeName="opc:UInt32" />
-    <opc:Field Name="RepublishRequestCount" TypeName="opc:UInt32" />
-    <opc:Field Name="RepublishMessageRequestCount" TypeName="opc:UInt32" />
-    <opc:Field Name="RepublishMessageCount" TypeName="opc:UInt32" />
-    <opc:Field Name="TransferRequestCount" TypeName="opc:UInt32" />
-    <opc:Field Name="TransferredToAltClientCount" TypeName="opc:UInt32" />
-    <opc:Field Name="TransferredToSameClientCount" TypeName="opc:UInt32" />
-    <opc:Field Name="PublishRequestCount" TypeName="opc:UInt32" />
-    <opc:Field Name="DataChangeNotificationsCount" TypeName="opc:UInt32" />
-    <opc:Field Name="EventNotificationsCount" TypeName="opc:UInt32" />
-    <opc:Field Name="NotificationsCount" TypeName="opc:UInt32" />
-    <opc:Field Name="LatePublishRequestCount" TypeName="opc:UInt32" />
-    <opc:Field Name="CurrentKeepAliveCount" TypeName="opc:UInt32" />
-    <opc:Field Name="CurrentLifetimeCount" TypeName="opc:UInt32" />
-    <opc:Field Name="UnacknowledgedMessageCount" TypeName="opc:UInt32" />
-    <opc:Field Name="DiscardedMessageCount" TypeName="opc:UInt32" />
-    <opc:Field Name="MonitoredItemCount" TypeName="opc:UInt32" />
-    <opc:Field Name="DisabledMonitoredItemCount" TypeName="opc:UInt32" />
-    <opc:Field Name="MonitoringQueueOverflowCount" TypeName="opc:UInt32" />
-    <opc:Field Name="NextSequenceNumber" TypeName="opc:UInt32" />
-    <opc:Field Name="EventQueueOverFlowCount" TypeName="opc:UInt32" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="ModelChangeStructureVerbMask" LengthInBits="32">
-    <opc:EnumeratedValue Name="NodeAdded" Value="1" />
-    <opc:EnumeratedValue Name="NodeDeleted" Value="2" />
-    <opc:EnumeratedValue Name="ReferenceAdded" Value="4" />
-    <opc:EnumeratedValue Name="ReferenceDeleted" Value="8" />
-    <opc:EnumeratedValue Name="DataTypeChanged" Value="16" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="ModelChangeStructureDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="Affected" TypeName="ua:NodeId" />
-    <opc:Field Name="AffectedType" TypeName="ua:NodeId" />
-    <opc:Field Name="Verb" TypeName="opc:Byte" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="SemanticChangeStructureDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="Affected" TypeName="ua:NodeId" />
-    <opc:Field Name="AffectedType" TypeName="ua:NodeId" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="Range" BaseType="ua:ExtensionObject">
-    <opc:Field Name="Low" TypeName="opc:Double" />
-    <opc:Field Name="High" TypeName="opc:Double" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="EUInformation" BaseType="ua:ExtensionObject">
-    <opc:Field Name="NamespaceUri" TypeName="opc:String" />
-    <opc:Field Name="UnitId" TypeName="opc:Int32" />
-    <opc:Field Name="DisplayName" TypeName="ua:LocalizedText" />
-    <opc:Field Name="Description" TypeName="ua:LocalizedText" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="AxisScaleEnumeration" LengthInBits="32">
-    <opc:EnumeratedValue Name="Linear" Value="0" />
-    <opc:EnumeratedValue Name="Log" Value="1" />
-    <opc:EnumeratedValue Name="Ln" Value="2" />
-  </opc:EnumeratedType>
-
-  <opc:StructuredType Name="ComplexNumberType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="Real" TypeName="opc:Float" />
-    <opc:Field Name="Imaginary" TypeName="opc:Float" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="DoubleComplexNumberType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="Real" TypeName="opc:Double" />
-    <opc:Field Name="Imaginary" TypeName="opc:Double" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="AxisInformation" BaseType="ua:ExtensionObject">
-    <opc:Field Name="EngineeringUnits" TypeName="tns:EUInformation" />
-    <opc:Field Name="EURange" TypeName="tns:Range" />
-    <opc:Field Name="Title" TypeName="ua:LocalizedText" />
-    <opc:Field Name="AxisScaleType" TypeName="tns:AxisScaleEnumeration" />
-    <opc:Field Name="NoOfAxisSteps" TypeName="opc:Int32" />
-    <opc:Field Name="AxisSteps" TypeName="opc:Double" LengthField="NoOfAxisSteps" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="XVType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="X" TypeName="opc:Double" />
-    <opc:Field Name="Value" TypeName="opc:Float" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ProgramDiagnosticDataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="CreateSessionId" TypeName="ua:NodeId" />
-    <opc:Field Name="CreateClientName" TypeName="opc:String" />
-    <opc:Field Name="InvocationCreationTime" TypeName="opc:DateTime" />
-    <opc:Field Name="LastTransitionTime" TypeName="opc:DateTime" />
-    <opc:Field Name="LastMethodCall" TypeName="opc:String" />
-    <opc:Field Name="LastMethodSessionId" TypeName="ua:NodeId" />
-    <opc:Field Name="NoOfLastMethodInputArguments" TypeName="opc:Int32" />
-    <opc:Field Name="LastMethodInputArguments" TypeName="tns:Argument" LengthField="NoOfLastMethodInputArguments" />
-    <opc:Field Name="NoOfLastMethodOutputArguments" TypeName="opc:Int32" />
-    <opc:Field Name="LastMethodOutputArguments" TypeName="tns:Argument" LengthField="NoOfLastMethodOutputArguments" />
-    <opc:Field Name="LastMethodCallTime" TypeName="opc:DateTime" />
-    <opc:Field Name="LastMethodReturnStatus" TypeName="tns:StatusResult" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="ProgramDiagnostic2DataType" BaseType="ua:ExtensionObject">
-    <opc:Field Name="CreateSessionId" TypeName="ua:NodeId" />
-    <opc:Field Name="CreateClientName" TypeName="opc:String" />
-    <opc:Field Name="InvocationCreationTime" TypeName="opc:DateTime" />
-    <opc:Field Name="LastTransitionTime" TypeName="opc:DateTime" />
-    <opc:Field Name="LastMethodCall" TypeName="opc:String" />
-    <opc:Field Name="LastMethodSessionId" TypeName="ua:NodeId" />
-    <opc:Field Name="NoOfLastMethodInputArguments" TypeName="opc:Int32" />
-    <opc:Field Name="LastMethodInputArguments" TypeName="tns:Argument" LengthField="NoOfLastMethodInputArguments" />
-    <opc:Field Name="NoOfLastMethodOutputArguments" TypeName="opc:Int32" />
-    <opc:Field Name="LastMethodOutputArguments" TypeName="tns:Argument" LengthField="NoOfLastMethodOutputArguments" />
-    <opc:Field Name="NoOfLastMethodInputValues" TypeName="opc:Int32" />
-    <opc:Field Name="LastMethodInputValues" TypeName="ua:Variant" LengthField="NoOfLastMethodInputValues" />
-    <opc:Field Name="NoOfLastMethodOutputValues" TypeName="opc:Int32" />
-    <opc:Field Name="LastMethodOutputValues" TypeName="ua:Variant" LengthField="NoOfLastMethodOutputValues" />
-    <opc:Field Name="LastMethodCallTime" TypeName="opc:DateTime" />
-    <opc:Field Name="LastMethodReturnStatus" TypeName="tns:StatusResult" />
-  </opc:StructuredType>
-
-  <opc:StructuredType Name="Annotation" BaseType="ua:ExtensionObject">
-    <opc:Field Name="Message" TypeName="opc:String" />
-    <opc:Field Name="UserName" TypeName="opc:String" />
-    <opc:Field Name="AnnotationTime" TypeName="opc:DateTime" />
-  </opc:StructuredType>
-
-  <opc:EnumeratedType Name="ExceptionDeviationFormat" LengthInBits="32">
-    <opc:EnumeratedValue Name="AbsoluteValue" Value="0" />
-    <opc:EnumeratedValue Name="PercentOfValue" Value="1" />
-    <opc:EnumeratedValue Name="PercentOfRange" Value="2" />
-    <opc:EnumeratedValue Name="PercentOfEURange" Value="3" />
-    <opc:EnumeratedValue Name="Unknown" Value="4" />
-  </opc:EnumeratedType>
-
-</opc:TypeDictionary>
diff --git a/ext/open62541/tools/schema/StatusCode.csv b/ext/open62541/tools/schema/StatusCode.csv
deleted file mode 100644
index 350b96e..0000000
--- a/ext/open62541/tools/schema/StatusCode.csv
+++ /dev/null
@@ -1,235 +0,0 @@
-BadUnexpectedError,0x80010000,An unexpected error occurred.
-BadInternalError,0x80020000,An internal error occurred as a result of a programming or configuration error.
-BadOutOfMemory,0x80030000,Not enough memory to complete the operation.
-BadResourceUnavailable,0x80040000,An operating system resource is not available.
-BadCommunicationError,0x80050000,A low level communication error occurred.
-BadEncodingError,0x80060000,Encoding halted because of invalid data in the objects being serialized.
-BadDecodingError,0x80070000,Decoding halted because of invalid data in the stream.
-BadEncodingLimitsExceeded,0x80080000,The message encoding/decoding limits imposed by the stack have been exceeded.
-BadRequestTooLarge,0x80B80000,The request message size exceeds limits set by the server.
-BadResponseTooLarge,0x80B90000,The response message size exceeds limits set by the client.
-BadUnknownResponse,0x80090000,An unrecognized response was received from the server.
-BadTimeout,0x800A0000,The operation timed out.
-BadServiceUnsupported,0x800B0000,The server does not support the requested service.
-BadShutdown,0x800C0000,The operation was cancelled because the application is shutting down.
-BadServerNotConnected,0x800D0000,The operation could not complete because the client is not connected to the server.
-BadServerHalted,0x800E0000,The server has stopped and cannot process any requests.
-BadNothingToDo,0x800F0000,There was nothing to do because the client passed a list of operations with no elements.
-BadTooManyOperations,0x80100000,The request could not be processed because it specified too many operations.
-BadTooManyMonitoredItems,0x80DB0000,The request could not be processed because there are too many monitored items in the subscription.
-BadDataTypeIdUnknown,0x80110000,The extension object cannot be (de)serialized because the data type id is not recognized.
-BadCertificateInvalid,0x80120000,The certificate provided as a parameter is not valid.
-BadSecurityChecksFailed,0x80130000,An error occurred verifying security.
-BadCertificatePolicyCheckFailed,0x81140000,The certificate does not meet the requirements of the security policy.
-BadCertificateTimeInvalid,0x80140000,The certificate has expired or is not yet valid.
-BadCertificateIssuerTimeInvalid,0x80150000,An issuer certificate has expired or is not yet valid.
-BadCertificateHostNameInvalid,0x80160000,The HostName used to connect to a server does not match a HostName in the certificate.
-BadCertificateUriInvalid,0x80170000,The URI specified in the ApplicationDescription does not match the URI in the certificate.
-BadCertificateUseNotAllowed,0x80180000,The certificate may not be used for the requested operation.
-BadCertificateIssuerUseNotAllowed,0x80190000,The issuer certificate may not be used for the requested operation.
-BadCertificateUntrusted,0x801A0000,The certificate is not trusted.
-BadCertificateRevocationUnknown,0x801B0000,It was not possible to determine if the certificate has been revoked.
-BadCertificateIssuerRevocationUnknown,0x801C0000,It was not possible to determine if the issuer certificate has been revoked.
-BadCertificateRevoked,0x801D0000,The certificate has been revoked.
-BadCertificateIssuerRevoked,0x801E0000,The issuer certificate has been revoked.
-BadCertificateChainIncomplete,0x810D0000,The certificate chain is incomplete.
-BadUserAccessDenied,0x801F0000,User does not have permission to perform the requested operation.
-BadIdentityTokenInvalid,0x80200000,The user identity token is not valid.
-BadIdentityTokenRejected,0x80210000,The user identity token is valid but the server has rejected it.
-BadSecureChannelIdInvalid,0x80220000,The specified secure channel is no longer valid.
-BadInvalidTimestamp,0x80230000,The timestamp is outside the range allowed by the server.
-BadNonceInvalid,0x80240000,The nonce does appear to be not a random value or it is not the correct length.
-BadSessionIdInvalid,0x80250000,The session id is not valid.
-BadSessionClosed,0x80260000,The session was closed by the client.
-BadSessionNotActivated,0x80270000,The session cannot be used because ActivateSession has not been called.
-BadSubscriptionIdInvalid,0x80280000,The subscription id is not valid.
-BadRequestHeaderInvalid,0x802A0000,The header for the request is missing or invalid.
-BadTimestampsToReturnInvalid,0x802B0000,The timestamps to return parameter is invalid.
-BadRequestCancelledByClient,0x802C0000,The request was cancelled by the client.
-BadTooManyArguments,0x80E50000,Too many arguments were provided.
-BadLicenseExpired,0x810E0000,The server requires a license to operate in general or to perform a service or operation, but existing license is expired.
-BadLicenseLimitsExceeded,0x810F0000,The server has limits on number of allowed operations / objects, based on installed licenses, and these limits where exceeded.
-BadLicenseNotAvailable,0x81100000,The server does not have a license which is required to operate in general or to perform a service or operation.
-GoodSubscriptionTransferred,0x002D0000,The subscription was transferred to another session.
-GoodCompletesAsynchronously,0x002E0000,The processing will complete asynchronously.
-GoodOverload,0x002F0000,Sampling has slowed down due to resource limitations.
-GoodClamped,0x00300000,The value written was accepted but was clamped.
-BadNoCommunication,0x80310000,Communication with the data source is defined, but not established, and there is no last known value available.
-BadWaitingForInitialData,0x80320000,Waiting for the server to obtain values from the underlying data source.
-BadNodeIdInvalid,0x80330000,The syntax of the node id is not valid.
-BadNodeIdUnknown,0x80340000,The node id refers to a node that does not exist in the server address space.
-BadAttributeIdInvalid,0x80350000,The attribute is not supported for the specified Node.
-BadIndexRangeInvalid,0x80360000,The syntax of the index range parameter is invalid.
-BadIndexRangeNoData,0x80370000,No data exists within the range of indexes specified.
-BadDataEncodingInvalid,0x80380000,The data encoding is invalid.
-BadDataEncodingUnsupported,0x80390000,The server does not support the requested data encoding for the node.
-BadNotReadable,0x803A0000,The access level does not allow reading or subscribing to the Node.
-BadNotWritable,0x803B0000,The access level does not allow writing to the Node.
-BadOutOfRange,0x803C0000,The value was out of range.
-BadNotSupported,0x803D0000,The requested operation is not supported.
-BadNotFound,0x803E0000,A requested item was not found or a search operation ended without success.
-BadObjectDeleted,0x803F0000,The object cannot be used because it has been deleted.
-BadNotImplemented,0x80400000,Requested operation is not implemented.
-BadMonitoringModeInvalid,0x80410000,The monitoring mode is invalid.
-BadMonitoredItemIdInvalid,0x80420000,The monitoring item id does not refer to a valid monitored item.
-BadMonitoredItemFilterInvalid,0x80430000,The monitored item filter parameter is not valid.
-BadMonitoredItemFilterUnsupported,0x80440000,The server does not support the requested monitored item filter.
-BadFilterNotAllowed,0x80450000,A monitoring filter cannot be used in combination with the attribute specified.
-BadStructureMissing,0x80460000,A mandatory structured parameter was missing or null.
-BadEventFilterInvalid,0x80470000,The event filter is not valid.
-BadContentFilterInvalid,0x80480000,The content filter is not valid.
-BadFilterOperatorInvalid,0x80C10000,An unrecognized operator was provided in a filter.
-BadFilterOperatorUnsupported,0x80C20000,A valid operator was provided, but the server does not provide support for this filter operator.
-BadFilterOperandCountMismatch,0x80C30000,The number of operands provided for the filter operator was less then expected for the operand provided.
-BadFilterOperandInvalid,0x80490000,The operand used in a content filter is not valid.
-BadFilterElementInvalid,0x80C40000,The referenced element is not a valid element in the content filter.
-BadFilterLiteralInvalid,0x80C50000,The referenced literal is not a valid value.
-BadContinuationPointInvalid,0x804A0000,The continuation point provide is longer valid.
-BadNoContinuationPoints,0x804B0000,The operation could not be processed because all continuation points have been allocated.
-BadReferenceTypeIdInvalid,0x804C0000,The reference type id does not refer to a valid reference type node.
-BadBrowseDirectionInvalid,0x804D0000,The browse direction is not valid.
-BadNodeNotInView,0x804E0000,The node is not part of the view.
-BadNumericOverflow,0x81120000,The number was not accepted because of a numeric overflow.
-BadServerUriInvalid,0x804F0000,The ServerUri is not a valid URI.
-BadServerNameMissing,0x80500000,No ServerName was specified.
-BadDiscoveryUrlMissing,0x80510000,No DiscoveryUrl was specified.
-BadSempahoreFileMissing,0x80520000,The semaphore file specified by the client is not valid.
-BadRequestTypeInvalid,0x80530000,The security token request type is not valid.
-BadSecurityModeRejected,0x80540000,The security mode does not meet the requirements set by the server.
-BadSecurityPolicyRejected,0x80550000,The security policy does not meet the requirements set by the server.
-BadTooManySessions,0x80560000,The server has reached its maximum number of sessions.
-BadUserSignatureInvalid,0x80570000,The user token signature is missing or invalid.
-BadApplicationSignatureInvalid,0x80580000,The signature generated with the client certificate is missing or invalid.
-BadNoValidCertificates,0x80590000,The client did not provide at least one software certificate that is valid and meets the profile requirements for the server.
-BadIdentityChangeNotSupported,0x80C60000,The server does not support changing the user identity assigned to the session.
-BadRequestCancelledByRequest,0x805A0000,The request was cancelled by the client with the Cancel service.
-BadParentNodeIdInvalid,0x805B0000,The parent node id does not to refer to a valid node.
-BadReferenceNotAllowed,0x805C0000,The reference could not be created because it violates constraints imposed by the data model.
-BadNodeIdRejected,0x805D0000,The requested node id was reject because it was either invalid or server does not allow node ids to be specified by the client.
-BadNodeIdExists,0x805E0000,The requested node id is already used by another node.
-BadNodeClassInvalid,0x805F0000,The node class is not valid.
-BadBrowseNameInvalid,0x80600000,The browse name is invalid.
-BadBrowseNameDuplicated,0x80610000,The browse name is not unique among nodes that share the same relationship with the parent.
-BadNodeAttributesInvalid,0x80620000,The node attributes are not valid for the node class.
-BadTypeDefinitionInvalid,0x80630000,The type definition node id does not reference an appropriate type node.
-BadSourceNodeIdInvalid,0x80640000,The source node id does not reference a valid node.
-BadTargetNodeIdInvalid,0x80650000,The target node id does not reference a valid node.
-BadDuplicateReferenceNotAllowed,0x80660000,The reference type between the nodes is already defined.
-BadInvalidSelfReference,0x80670000,The server does not allow this type of self reference on this node.
-BadReferenceLocalOnly,0x80680000,The reference type is not valid for a reference to a remote server.
-BadNoDeleteRights,0x80690000,The server will not allow the node to be deleted.
-UncertainReferenceNotDeleted,0x40BC0000,The server was not able to delete all target references.
-BadServerIndexInvalid,0x806A0000,The server index is not valid.
-BadViewIdUnknown,0x806B0000,The view id does not refer to a valid view node.
-BadViewTimestampInvalid,0x80C90000,The view timestamp is not available or not supported.
-BadViewParameterMismatch,0x80CA0000,The view parameters are not consistent with each other.
-BadViewVersionInvalid,0x80CB0000,The view version is not available or not supported.
-UncertainNotAllNodesAvailable,0x40C00000,The list of references may not be complete because the underlying system is not available.
-GoodResultsMayBeIncomplete,0x00BA0000,The server should have followed a reference to a node in a remote server but did not. The result set may be incomplete.
-BadNotTypeDefinition,0x80C80000,The provided Nodeid was not a type definition nodeid.
-UncertainReferenceOutOfServer,0x406C0000,One of the references to follow in the relative path references to a node in the address space in another server.
-BadTooManyMatches,0x806D0000,The requested operation has too many matches to return.
-BadQueryTooComplex,0x806E0000,The requested operation requires too many resources in the server.
-BadNoMatch,0x806F0000,The requested operation has no match to return.
-BadMaxAgeInvalid,0x80700000,The max age parameter is invalid.
-BadSecurityModeInsufficient,0x80E60000,The operation is not permitted over the current secure channel.
-BadHistoryOperationInvalid,0x80710000,The history details parameter is not valid.
-BadHistoryOperationUnsupported,0x80720000,The server does not support the requested operation.
-BadInvalidTimestampArgument,0x80BD0000,The defined timestamp to return was invalid.
-BadWriteNotSupported,0x80730000,The server does not support writing the combination of value, status and timestamps provided.
-BadTypeMismatch,0x80740000,The value supplied for the attribute is not of the same type as the attribute's value.
-BadMethodInvalid,0x80750000,The method id does not refer to a method for the specified object.
-BadArgumentsMissing,0x80760000,The client did not specify all of the input arguments for the method.
-BadNotExecutable,0x81110000,The executable attribute does not allow the execution of the method.
-BadTooManySubscriptions,0x80770000,The server has reached its maximum number of subscriptions.
-BadTooManyPublishRequests,0x80780000,The server has reached the maximum number of queued publish requests.
-BadNoSubscription,0x80790000,There is no subscription available for this session.
-BadSequenceNumberUnknown,0x807A0000,The sequence number is unknown to the server.
-BadMessageNotAvailable,0x807B0000,The requested notification message is no longer available.
-BadInsufficientClientProfile,0x807C0000,The client of the current session does not support one or more Profiles that are necessary for the subscription.
-BadStateNotActive,0x80BF0000,The sub-state machine is not currently active.
-BadAlreadyExists,0x81150000,An equivalent rule already exists.
-BadTcpServerTooBusy,0x807D0000,The server cannot process the request because it is too busy.
-BadTcpMessageTypeInvalid,0x807E0000,The type of the message specified in the header invalid.
-BadTcpSecureChannelUnknown,0x807F0000,The SecureChannelId and/or TokenId are not currently in use.
-BadTcpMessageTooLarge,0x80800000,The size of the message specified in the header is too large.
-BadTcpNotEnoughResources,0x80810000,There are not enough resources to process the request.
-BadTcpInternalError,0x80820000,An internal error occurred.
-BadTcpEndpointUrlInvalid,0x80830000,The server does not recognize the QueryString specified.
-BadRequestInterrupted,0x80840000,The request could not be sent because of a network interruption.
-BadRequestTimeout,0x80850000,Timeout occurred while processing the request.
-BadSecureChannelClosed,0x80860000,The secure channel has been closed.
-BadSecureChannelTokenUnknown,0x80870000,The token has expired or is not recognized.
-BadSequenceNumberInvalid,0x80880000,The sequence number is not valid.
-BadProtocolVersionUnsupported,0x80BE0000,The applications do not have compatible protocol versions.
-BadConfigurationError,0x80890000,There is a problem with the configuration that affects the usefulness of the value.
-BadNotConnected,0x808A0000,The variable should receive its value from another variable, but has never been configured to do so.
-BadDeviceFailure,0x808B0000,There has been a failure in the device/data source that generates the value that has affected the value.
-BadSensorFailure,0x808C0000,There has been a failure in the sensor from which the value is derived by the device/data source.
-BadOutOfService,0x808D0000,The source of the data is not operational.
-BadDeadbandFilterInvalid,0x808E0000,The deadband filter is not valid.
-UncertainNoCommunicationLastUsableValue,0x408F0000,Communication to the data source has failed. The variable value is the last value that had a good quality.
-UncertainLastUsableValue,0x40900000,Whatever was updating this value has stopped doing so.
-UncertainSubstituteValue,0x40910000,The value is an operational value that was manually overwritten.
-UncertainInitialValue,0x40920000,The value is an initial value for a variable that normally receives its value from another variable.
-UncertainSensorNotAccurate,0x40930000,The value is at one of the sensor limits.
-UncertainEngineeringUnitsExceeded,0x40940000,The value is outside of the range of values defined for this parameter.
-UncertainSubNormal,0x40950000,The value is derived from multiple sources and has less than the required number of Good sources.
-GoodLocalOverride,0x00960000,The value has been overridden.
-BadRefreshInProgress,0x80970000,This Condition refresh failed, a Condition refresh operation is already in progress.
-BadConditionAlreadyDisabled,0x80980000,This condition has already been disabled.
-BadConditionAlreadyEnabled,0x80CC0000,This condition has already been enabled.
-BadConditionDisabled,0x80990000,Property not available, this condition is disabled.
-BadEventIdUnknown,0x809A0000,The specified event id is not recognized.
-BadEventNotAcknowledgeable,0x80BB0000,The event cannot be acknowledged.
-BadDialogNotActive,0x80CD0000,The dialog condition is not active.
-BadDialogResponseInvalid,0x80CE0000,The response is not valid for the dialog.
-BadConditionBranchAlreadyAcked,0x80CF0000,The condition branch has already been acknowledged.
-BadConditionBranchAlreadyConfirmed,0x80D00000,The condition branch has already been confirmed.
-BadConditionAlreadyShelved,0x80D10000,The condition has already been shelved.
-BadConditionNotShelved,0x80D20000,The condition is not currently shelved.
-BadShelvingTimeOutOfRange,0x80D30000,The shelving time not within an acceptable range.
-BadNoData,0x809B0000,No data exists for the requested time range or event filter.
-BadBoundNotFound,0x80D70000,No data found to provide upper or lower bound value.
-BadBoundNotSupported,0x80D80000,The server cannot retrieve a bound for the variable.
-BadDataLost,0x809D0000,Data is missing due to collection started/stopped/lost.
-BadDataUnavailable,0x809E0000,Expected data is unavailable for the requested time range due to an un-mounted volume, an off-line archive or tape, or similar reason for temporary unavailability.
-BadEntryExists,0x809F0000,The data or event was not successfully inserted because a matching entry exists.
-BadNoEntryExists,0x80A00000,The data or event was not successfully updated because no matching entry exists.
-BadTimestampNotSupported,0x80A10000,The client requested history using a timestamp format the server does not support (i.e requested ServerTimestamp when server only supports SourceTimestamp).
-GoodEntryInserted,0x00A20000,The data or event was successfully inserted into the historical database.
-GoodEntryReplaced,0x00A30000,The data or event field was successfully replaced in the historical database.
-UncertainDataSubNormal,0x40A40000,The value is derived from multiple values and has less than the required number of Good values.
-GoodNoData,0x00A50000,No data exists for the requested time range or event filter.
-GoodMoreData,0x00A60000,The data or event field was successfully replaced in the historical database.
-BadAggregateListMismatch,0x80D40000,The requested number of Aggregates does not match the requested number of NodeIds.
-BadAggregateNotSupported,0x80D50000,The requested Aggregate is not support by the server.
-BadAggregateInvalidInputs,0x80D60000,The aggregate value could not be derived due to invalid data inputs.
-BadAggregateConfigurationRejected,0x80DA0000,The aggregate configuration is not valid for specified node.
-GoodDataIgnored,0x00D90000,The request specifies fields which are not valid for the EventType or cannot be saved by the historian.
-BadRequestNotAllowed,0x80E40000,The request was rejected by the server because it did not meet the criteria set by the server.
-BadRequestNotComplete,0x81130000,The request has not been processed by the server yet.
-GoodEdited,0x00DC0000,The value does not come from the real source and has been edited by the server.
-GoodPostActionFailed,0x00DD0000,There was an error in execution of these post-actions.
-UncertainDominantValueChanged,0x40DE0000,The related EngineeringUnit has been changed but the Variable Value is still provided based on the previous unit.
-GoodDependentValueChanged,0x00E00000,A dependent value has been changed but the change has not been applied to the device.
-BadDominantValueChanged,0x80E10000,The related EngineeringUnit has been changed but this change has not been applied to the device. The Variable Value is still dependent on the previous unit but its status is currently Bad.
-UncertainDependentValueChanged,0x40E20000,A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is uncertain.
-BadDependentValueChanged,0x80E30000,A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is Bad.
-GoodCommunicationEvent,0x00A70000,The communication layer has raised an event.
-GoodShutdownEvent,0x00A80000,The system is shutting down.
-GoodCallAgain,0x00A90000,The operation is not finished and needs to be called again.
-GoodNonCriticalTimeout,0x00AA0000,A non-critical timeout occurred.
-BadInvalidArgument,0x80AB0000,One or more arguments are invalid.
-BadConnectionRejected,0x80AC0000,Could not establish a network connection to remote server.
-BadDisconnect,0x80AD0000,The server has disconnected from the client.
-BadConnectionClosed,0x80AE0000,The network connection has been closed.
-BadInvalidState,0x80AF0000,The operation cannot be completed because the object is closed, uninitialized or in some other invalid state.
-BadEndOfStream,0x80B00000,Cannot move beyond end of the stream.
-BadNoDataAvailable,0x80B10000,No data is currently available for reading from a non-blocking stream.
-BadWaitingForResponse,0x80B20000,The asynchronous operation is waiting for a response.
-BadOperationAbandoned,0x80B30000,The asynchronous operation was abandoned by the caller.
-BadExpectedStreamToBlock,0x80B40000,The stream did not return all data requested (possibly because it is a non-blocking stream).
-BadWouldBlock,0x80B50000,Non blocking behaviour is required and the operation would block.
-BadSyntaxError,0x80B60000,A value had an invalid syntax.
-BadMaxConnectionsReached,0x80B70000,The operation could not be finished because all available connections are in use.
\ No newline at end of file
diff --git a/ext/open62541/tools/schema/datatypes_dataaccess.txt b/ext/open62541/tools/schema/datatypes_dataaccess.txt
deleted file mode 100644
index 31c0b78..0000000
--- a/ext/open62541/tools/schema/datatypes_dataaccess.txt
+++ /dev/null
@@ -1 +0,0 @@
-Range

diff --git a/ext/open62541/tools/schema/datatypes_discovery.txt b/ext/open62541/tools/schema/datatypes_discovery.txt
deleted file mode 100644
index 348561e..0000000
--- a/ext/open62541/tools/schema/datatypes_discovery.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-ServerOnNetwork

-FindServersOnNetworkRequest

-FindServersOnNetworkResponse

-RegisteredServer

-RegisterServerRequest

-RegisterServerResponse

-DiscoveryConfiguration

-MdnsDiscoveryConfiguration

-RegisterServer2Request

-RegisterServer2Response

diff --git a/ext/open62541/tools/schema/datatypes_events.txt b/ext/open62541/tools/schema/datatypes_events.txt
deleted file mode 100644
index 4ffa4bf..0000000
--- a/ext/open62541/tools/schema/datatypes_events.txt
+++ /dev/null
@@ -1 +0,0 @@
-TimeZoneDataType

diff --git a/ext/open62541/tools/schema/datatypes_historizing.txt b/ext/open62541/tools/schema/datatypes_historizing.txt
deleted file mode 100644
index 9344d8b..0000000
--- a/ext/open62541/tools/schema/datatypes_historizing.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-HistoryReadRequest

-HistoryReadResponse

-HistoryReadResult

-HistoryReadValueId

-ReadEventDetails

-ReadRawModifiedDetails

-ReadProcessedDetails

-ReadAtTimeDetails

-HistoryData

-HistoryModifiedData

-HistoryUpdateType

-ModificationInfo

-HistoryEvent

-HistoryEventFieldList

-HistoryUpdateRequest

-HistoryUpdateResponse

-HistoryUpdateResult

-UpdateDataDetails

-DeleteRawModifiedDetails

-PerformUpdateType

diff --git a/ext/open62541/tools/schema/datatypes_method.txt b/ext/open62541/tools/schema/datatypes_method.txt
deleted file mode 100644
index 7a461d1..0000000
--- a/ext/open62541/tools/schema/datatypes_method.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-CallMethodRequest

-CallMethodResult

-CallResponse

-CallRequest

-Argument

diff --git a/ext/open62541/tools/schema/datatypes_minimal.txt b/ext/open62541/tools/schema/datatypes_minimal.txt
deleted file mode 100644
index 73fa33c..0000000
--- a/ext/open62541/tools/schema/datatypes_minimal.txt
+++ /dev/null
@@ -1,118 +0,0 @@
-Boolean

-SByte

-Byte

-Int16

-UInt16

-Int32

-UInt32

-Int64

-UInt64

-Float

-Double

-String

-DateTime

-Guid

-ByteString

-XmlElement

-NodeId

-ExpandedNodeId

-StatusCode

-QualifiedName

-LocalizedText

-ExtensionObject

-DataValue

-Variant

-DiagnosticInfo

-NodeClass

-ApplicationDescription

-ApplicationType

-ChannelSecurityToken

-OpenSecureChannelRequest

-OpenSecureChannelResponse

-CloseSecureChannelRequest

-CloseSecureChannelResponse

-RequestHeader

-ResponseHeader

-SecurityTokenRequestType

-MessageSecurityMode

-CloseSessionResponse

-CloseSessionRequest

-ActivateSessionRequest

-ActivateSessionResponse

-SignatureData

-SignedSoftwareCertificate

-ServiceFault

-UserIdentityToken

-UserNameIdentityToken

-AnonymousIdentityToken

-X509IdentityToken

-IssuedIdentityToken

-CreateSessionResponse

-CreateSessionRequest

-EndpointDescription

-UserTokenPolicy

-UserTokenType

-GetEndpointsRequest

-GetEndpointsResponse

-FindServersRequest

-FindServersResponse

-TimestampsToReturn

-ReadRequest

-ReadResponse

-ReadValueId

-WriteRequest

-WriteResponse

-WriteValue

-TranslateBrowsePathsToNodeIdsRequest

-TranslateBrowsePathsToNodeIdsResponse

-BrowseResultMask

-BrowsePath

-BrowsePathResult

-BrowsePathTarget

-RelativePath

-RelativePathElement

-BrowseResponse

-BrowseResult

-ReferenceDescription

-ViewDescription

-BrowseRequest

-BrowseNextRequest

-BrowseNextResponse

-BrowseDescription

-BrowseDirection

-AddNodesRequest

-AddNodesResponse

-AddNodesItem

-AddNodesResult

-AddReferencesRequest

-AddReferencesResponse

-AddReferencesItem

-NodeAttributes

-VariableAttributes

-ObjectAttributes

-ReferenceTypeAttributes

-ViewAttributes

-MethodAttributes

-ObjectTypeAttributes

-VariableTypeAttributes

-DataTypeAttributes

-NodeAttributesMask

-DeleteNodesItem

-DeleteNodesRequest

-DeleteNodesResponse

-DeleteReferencesItem

-DeleteReferencesRequest

-DeleteReferencesResponse

-RegisterNodesRequest

-RegisterNodesResponse

-UnregisterNodesRequest

-UnregisterNodesResponse

-Duration

-UtcTime

-LocaleId

-EnumValueType

-BuildInfo

-ServerStatusDataType

-ServerState

-ServerDiagnosticsSummaryDataType

-RedundancySupport

diff --git a/ext/open62541/tools/schema/datatypes_pubsub.txt b/ext/open62541/tools/schema/datatypes_pubsub.txt
deleted file mode 100644
index aa1d66f..0000000
--- a/ext/open62541/tools/schema/datatypes_pubsub.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-KeyValuePair

-DataSetMetaDataType

-ConfigurationVersionDataType

-UadpDataSetWriterMessageDataType

-UadpWriterGroupMessageDataType

-UadpDataSetMessageContentMask

-UadpNetworkMessageContentMask

-NetworkAddressUrlDataType

-PublishedVariableDataType

-DataSetOrderingType

-DataSetFieldContentMask

-StructureDefinition

-StructureDescription

-StructureType

-StructureField

-EnumField

-EnumDefinition

-EnumDescription

-SimpleTypeDescription

-DataSetFieldFlags

-FieldMetaData

-PubSubConnectionDataType

-WriterGroupDataType

-ReaderGroupDataType

-DataSetWriterDataType

-DataSetReaderDataType

-PubSubState

-JsonDataSetWriterMessageDataType

-JsonDataSetMessageContentMask

-JsonNetworkMessageContentMask

-BrokerTransportQualityOfService

-BrokerConnectionTransportDataType

-BrokerWriterGroupTransportDataType

-BrokerDataSetWriterTransportDataType

-BrokerWriterGroupTransportType

-UadpDataSetReaderMessageDataType

-TargetVariablesDataType

-FieldTargetDataType

-OverrideValueHandling
\ No newline at end of file
diff --git a/ext/open62541/tools/schema/datatypes_query.txt b/ext/open62541/tools/schema/datatypes_query.txt
deleted file mode 100644
index 42282a8..0000000
--- a/ext/open62541/tools/schema/datatypes_query.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-ParsingResult

-NodeTypeDescription

-QueryDataDescription

-QueryDataSet

-QueryFirstRequest

-QueryFirstResponse

-QueryNextRequest

-QueryNextResponse

diff --git a/ext/open62541/tools/schema/datatypes_subscriptions.txt b/ext/open62541/tools/schema/datatypes_subscriptions.txt
deleted file mode 100644
index f43dda4..0000000
--- a/ext/open62541/tools/schema/datatypes_subscriptions.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-SubscriptionAcknowledgement

-FilterOperator

-ContentFilterElement

-ContentFilter

-ContentFilterElementResult

-ContentFilterResult

-EventFilterResult

-DeadbandType

-AggregateConfiguration

-AggregateFilter

-MonitoringMode

-MonitoringParameters

-CreateMonitoredItemsRequest

-MonitoredItemCreateRequest

-MonitoredItemCreateResult

-CreateMonitoredItemsResponse

-MonitoredItemModifyRequest

-ModifyMonitoredItemsRequest

-MonitoredItemModifyResult

-ModifyMonitoredItemsResponse

-SetMonitoringModeRequest

-SetMonitoringModeResponse

-DataChangeTrigger

-SetTriggeringRequest

-SetTriggeringResponse

-DeleteMonitoredItemsRequest

-DeleteMonitoredItemsResponse

-CreateSubscriptionRequest

-CreateSubscriptionResponse

-ModifySubscriptionRequest

-ModifySubscriptionResponse

-SetPublishingModeRequest

-SetPublishingModeResponse

-DataChangeFilter

-EventFilter

-FilterOperand

-ElementOperand

-LiteralOperand

-AttributeOperand

-SimpleAttributeOperand

-EventNotificationList

-EventFieldList

-DataChangeNotification

-NotificationMessage

-MonitoredItemNotification

-StatusChangeNotification

-PublishRequest

-PublishResponse

-RepublishRequest

-RepublishResponse

-DeleteSubscriptionsRequest

-DeleteSubscriptionsResponse

diff --git a/ext/open62541/tools/schema/datatypes_transport.txt b/ext/open62541/tools/schema/datatypes_transport.txt
deleted file mode 100644
index 399add9..0000000
--- a/ext/open62541/tools/schema/datatypes_transport.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-MessageType

-ChunkType

-TcpMessageHeader

-TcpHelloMessage

-TcpAcknowledgeMessage

-TcpErrorMessage

-SecureConversationMessageHeader

-AsymmetricAlgorithmSecurityHeader

-SymmetricAlgorithmSecurityHeader

-SequenceHeader

-SecureConversationMessageFooter

-SecureConversationMessageAbortBody

diff --git a/ext/open62541/tools/schema/datatypes_typedescription.txt b/ext/open62541/tools/schema/datatypes_typedescription.txt
deleted file mode 100644
index d6535a1..0000000
--- a/ext/open62541/tools/schema/datatypes_typedescription.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-StructureDefinition

-StructureField

-StructureType
\ No newline at end of file
diff --git a/ext/open62541/tools/travis/travis_linux_after_success.sh b/ext/open62541/tools/travis/travis_linux_after_success.sh
deleted file mode 100644
index 7de72ea..0000000
--- a/ext/open62541/tools/travis/travis_linux_after_success.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-set -e
-
-# We only want to push the docs once, so we just take the travis run where MINGW=true which is only enabled once
-if [ "$MINGW" = "true" ] && [ "${TRAVIS_REPO_SLUG}" = "open62541/open62541" ] && [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then
-    echo "=== Executing after_success scripts ==="
-    # List branches where the doc should be pushed to the webpage
-    if [ "${TRAVIS_BRANCH}" = "master" ] || [ "${TRAVIS_BRANCH}" = "0.3" ] || [ "${TRAVIS_BRANCH}" = "1.0" ]; then
-        sh ./tools/travis/travis_push_doc.sh
-    fi
-    sh ./tools/travis/travis_push_release.sh;
-else
-    echo "=== Not in the main repository or not the main build; Skip release scripts ==="
-    exit 0;
-fi
diff --git a/ext/open62541/tools/travis/travis_linux_before_install.sh b/ext/open62541/tools/travis/travis_linux_before_install.sh
deleted file mode 100644
index 29ed699..0000000
--- a/ext/open62541/tools/travis/travis_linux_before_install.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/bin/bash
-set -e
-
-if [ -z ${LOCAL_PKG+x} ] || [ -z "$LOCAL_PKG" ]; then
-    echo "LOCAL_PKG is not set. Aborting..."
-    exit 1
-fi
-
-if ! [ -z ${CLANG_FORMAT+x} ]; then
-    echo "CLANG_FORMAT does not need any dependencies. Done."
-    exit 0
-fi
-
-if [ -z ${DOCKER+x} ] && [ -z ${SONAR+x} ]; then
-	# Only on non-docker builds required
-
- 	echo "=== Installing from external package sources in $LOCAL_PKG ===" && echo -en 'travis_fold:start:before_install.external\\r'
-
-   # Increase the environment version to force a rebuild of the packages
-    # The version is writen to the cache file after every build of the dependencies
-    ENV_VERSION="1"
-    ENV_INSTALLED=""
-    if [ -e $LOCAL_PKG/.build_env ]; then
-        echo "=== No cached build environment ==="
-        read -r ENV_INSTALLED < $LOCAL_PKG/.build_env
-    fi
-
-    # travis caches the $LOCAL_PKG dir. If it is loaded, we don't need to reinstall the packages
-    if [ "$ENV_VERSION" = "$ENV_INSTALLED" ]; then
-        echo "=== The build environment is current ==="
-        exit 0
-    fi
-
-    echo "=== The build environment is outdated ==="
-
-    # Clean up
-    # additional safety measure to avoid rm -rf on root
-    # only execute it on travis
-    if ! [ -z ${TRAVIS+x} ]; then
-        echo "rm -rf $LOCAL_PKG/*"
-    fi
-
-	if [ "$CC" = "tcc" ]; then
-		mkdir tcc_install && cd tcc_install
-		wget https://mirror.netcologne.de/savannah/tinycc/tcc-0.9.27.tar.bz2
-		tar xf tcc-0.9.27.tar.bz2
-		cd tcc-0.9.27
-		./configure --prefix=$LOCAL_PKG
-		make
-		make install
-		cd ../..
-		rm -rf tcc_install
-	fi
-
-	wget https://github.com/ARMmbed/mbedtls/archive/mbedtls-2.7.1.tar.gz
-	tar xf mbedtls-2.7.1.tar.gz
-	cd mbedtls-mbedtls-2.7.1
-	cmake -DENABLE_TESTING=Off -DCMAKE_INSTALL_PREFIX=$LOCAL_PKG .
-	make -j
-	make install
-
-	echo -en 'travis_fold:end:script.before_install.external\\r'
-
-	echo "=== Installing python packages ===" && echo -en 'travis_fold:start:before_install.python\\r'
-	pip install --user cpp-coveralls
-	# Pin docutils to version smaller 0.15. Otherwise we run into https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=839299
-	pip install --user 'docutils<=0.14'
-	pip install --user sphinx_rtd_theme
-	pip install --user cpplint
-	echo -en 'travis_fold:end:script.before_install.python\\r'
-
-fi
diff --git a/ext/open62541/tools/travis/travis_linux_script.sh b/ext/open62541/tools/travis/travis_linux_script.sh
deleted file mode 100644
index b9709b8..0000000
--- a/ext/open62541/tools/travis/travis_linux_script.sh
+++ /dev/null
@@ -1,560 +0,0 @@
-#!/bin/bash
-set -e
-
-
-# Sonar code quality
-if ! [ -z ${SONAR+x} ]; then
-    if ([ "${TRAVIS_REPO_SLUG}" != "open62541/open62541" ] ||
-        [ "${TRAVIS_PULL_REQUEST}" != "false" ] ||
-        [ "${TRAVIS_BRANCH}" != "master" ]); then
-        echo "Skipping Sonarcloud on forks"
-        # Skip on forks
-        exit 0;
-    fi
-	mkdir -p build && cd build
-	build-wrapper-linux-x86-64 --out-dir ../bw-output cmake \
-        -DCMAKE_BUILD_TYPE=Debug \
-        -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/$PYTHON \
-	    -DUA_BUILD_EXAMPLES=ON \
-        -DUA_ENABLE_DISCOVERY=ON \
-        -DUA_ENABLE_DISCOVERY_MULTICAST=ON \
-        -DUA_ENABLE_ENCRYPTION .. \
-    && make -j
-	cd ..
-	sonar-scanner
-	exit 0
-fi
-
-# Docker build test
-if ! [ -z ${DOCKER+x} ]; then
-    docker build -t open62541 .
-    docker run -d -p 127.0.0.1:4840:4840 --name open62541 open62541 /bin/sh
-    docker ps | grep -q open62541
-    # disabled since it randomly fails
-    # docker ps | grep -q open62541
-    exit 0
-fi
-
-# Cpplint checking
-if ! [ -z ${LINT+x} ]; then
-    mkdir -p build
-    cd build
-    cmake ..
-    make cpplint
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-    exit 0
-fi
-
-# Fuzzer build test
-if ! [ -z ${FUZZER+x} ]; then
-    # First check if the build is successful
-    ./tests/fuzz/check_build.sh
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-
-
-    # Test the corpus generator and use new corpus for fuzz test
-    ./tests/fuzz/generate_corpus.sh
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-
-    cd build_fuzz
-    make && make run_fuzzer
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-    exit 0
-fi
-
-# INSTALL build test
-if ! [ -z ${INSTALL+x} ]; then
-echo "=== Install build, then compile examples ===" && echo -en 'travis_fold:start:script.build.install\\r'
-    # Use make install to deploy files and then test if we can build the examples based on the installed files
-    mkdir -p build
-    cd build
-    cmake \
-        -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/$PYTHON \
-        -DBUILD_SHARED_LIBS=ON \
-        -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-        -DUA_NAMESPACE_ZERO=FULL \
-        -DUA_ENABLE_AMALGAMATION=OFF \
-        -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/open62541_install ..
-    make -j install
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-
-    cd .. && rm build -rf
-    echo -en 'travis_fold:end:script.build.install\\r'
-
-    echo -en 'travis_fold:start:script.build.mini-example\\r'
-    # Now create a simple CMake Project which uses the installed file
-    mkdir compile
-    cp -r examples compile/examples && cd compile/examples
-    cmake \
-        -DCMAKE_PREFIX_PATH=$TRAVIS_BUILD_DIR/open62541_install \
-        -DUA_NAMESPACE_ZERO=FULL .
-    make -j
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-    cd ../..
-    rm -rf compile
-    echo -en 'travis_fold:end:script.build.mini-example\\r'
-    exit 0
-fi
-
-if ! [ -z ${CLANG_FORMAT+x} ]; then
-
-    # Only run clang format on Pull requests, not on direct push
-    if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then
-        echo -en "\\nSkipping clang-format on non-pull request\\n"
-        exit 0
-    fi
-
-    echo "=== Running clang-format with diff against branch '$TRAVIS_BRANCH' ===" && echo -en 'travis_fold:start:script.clang-format\\r'
-
-    # add clang-format-ci
-    curl -Ls "https://raw.githubusercontent.com/llvm-mirror/clang/c510fac5695e904b43d5bf0feee31cc9550f110e/tools/clang-format/git-clang-format" -o "$LOCAL_PKG/bin/git-clang-format"
-    chmod +x $LOCAL_PKG/bin/git-clang-format
-
-    # Ignore files in the deps directory diff by resetting them to master
-    git diff --name-only $TRAVIS_BRANCH | grep 'deps/*' | xargs git checkout $TRAVIS_BRANCH --
-
-    # clang-format the diff to the target branch of the PR
-    difference="$($LOCAL_PKG/bin/git-clang-format --style=file --diff $TRAVIS_BRANCH)"
-
-    if ! case $difference in *"no modified files to format"*) false;; esac; then
-        echo "====== clang-format did not find any issues. Well done! ======"
-        exit 0
-    fi
-    if ! case $difference in *"clang-format did not modify any files"*) false;; esac; then
-        echo "====== clang-format did not find any issues. Well done! ======"
-        exit 0
-    fi
-
-    echo "====== clang-format Format Errors ======"
-
-    echo "Uploading the patch to a pastebin page ..."
-    pastebinUrl="$($LOCAL_PKG/bin/git-clang-format --style=file --diff $TRAVIS_BRANCH | curl -F 'sprunge=<-' http://sprunge.us)"
-
-    echo "Created a patch file under: $pastebinUrl"
-
-    echo "Please fix the following issues.\n\n"
-    echo "You can also use the following command to apply the diff to your source locally:\n-------------\n"
-    echo "curl -o format.patch $pastebinUrl && git apply format.patch\n-------------\n"
-    echo "=============== DIFFERENCE - START =================\n"
-    # We want to get colored diff output into the variable
-    git config color.diff always
-    $LOCAL_PKG/bin/git-clang-format --binary=clang-format-6.0 --style=file --diff $TRAVIS_BRANCH
-    echo "\n============= DIFFERENCE - END ===================="
-
-    echo -en 'travis_fold:start:script.clang-format\\r'
-    exit 1
-fi
-
-if ! [ -z ${ANALYZE+x} ]; then
-    echo "=== Running static code analysis ===" && echo -en 'travis_fold:start:script.analyze\\r'
-    if ! case $CC in clang*) false;; esac; then
-        mkdir -p build
-        cd build
-        scan-build-6.0 cmake \
-            -DUA_BUILD_EXAMPLES=ON \
-            -DUA_BUILD_UNIT_TESTS=ON ..
-        scan-build-6.0 -enable-checker security.FloatLoopCounter \
-          -enable-checker security.insecureAPI.UncheckedReturn \
-          --status-bugs -v \
-          make -j
-        cd .. && rm build -rf
-
-        mkdir -p build
-        cd build
-        scan-build-6.0 cmake \
-            -DUA_ENABLE_PUBSUB=ON \
-            -DUA_ENABLE_PUBSUB_DELTAFRAMES=ON \
-            -DUA_ENABLE_PUBSUB_INFORMATIONMODEL=ON ..
-        scan-build-6.0 -enable-checker security.FloatLoopCounter \
-          -enable-checker security.insecureAPI.UncheckedReturn \
-          --status-bugs -v \
-          make -j
-        cd .. && rm build -rf
-
-        mkdir -p build
-        cd build
-        scan-build-6.0 cmake \
-            -DUA_ENABLE_AMALGAMATION=OFF ..
-        scan-build-6.0 -enable-checker security.FloatLoopCounter \
-          -enable-checker security.insecureAPI.UncheckedReturn \
-          --status-bugs -v \
-          make -j
-        cd .. && rm build -rf
-
-        #mkdir -p build && cd build
-        #cmake -DUA_ENABLE_STATIC_ANALYZER=REDUCED ..
-        ## previous clang-format to reduce to non-trivial warnings
-        #make clangformat
-        #make
-        #cd .. && rm build -rf
-    else
-        cppcheck --template "{file}({line}): {severity} ({id}): {message}" \
-            --enable=style --force --std=c++11 -j 8 \
-            --suppress=duplicateBranch \
-            --suppress=incorrectStringBooleanError \
-            --suppress=invalidscanf --inline-suppr \
-            -I include src plugins examples 2> cppcheck.txt
-        if [ -s cppcheck.txt ]; then
-            echo "====== CPPCHECK Static Analysis Errors ======"
-            cat cppcheck.txt
-            # flush output
-            sleep 5
-            exit 1
-        fi
-    fi
-    echo -en 'travis_fold:end:script.analyze\\r'
-    exit 0
-fi
-
-echo -en "\r\n=== Building ===\r\n"
-
-echo -e "\r\n== Documentation build =="  && echo -en 'travis_fold:start:script.build.doc\\r'
-mkdir -p build
-cd build
-cmake \
-    -DCMAKE_BUILD_TYPE=Release \
-    -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/$PYTHON \
-    -DUA_BUILD_EXAMPLES=ON ..
-make doc
-make doc_pdf
-cp -r doc ../../
-cp -r doc_latex ../../
-cd .. && rm build -rf
-echo -en 'travis_fold:end:script.build.doc\\r'
-
-# cross compilation only with gcc
-if ! [ -z ${MINGW+x} ]; then
-    echo -e "\r\n== Cross compile release build for MinGW 32 bit =="  && echo -en 'travis_fold:start:script.build.cross_mingw32\\r'
-    mkdir -p build && cd build
-    cmake \
-        -DBUILD_SHARED_LIBS=ON \
-        -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-        -DCMAKE_INSTALL_PREFIX=${TRAVIS_BUILD_DIR}/open62541-win32 \
-        -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-mingw32.cmake \
-        -DUA_BUILD_EXAMPLES=ON \
-        -DUA_ENABLE_AMALGAMATION=OFF ..
-    make -j
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-    make install
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-    cd ..
-    zip -r open62541-win32.zip ../doc_latex/open62541.pdf LICENSE AUTHORS README.md open62541-win32/*
-    rm build -rf
-    echo -en 'travis_fold:end:script.build.cross_mingw32\\r'
-
-    echo -e "\r\n== Cross compile release build for MinGW 64 bit =="  && echo -en 'travis_fold:start:script.build.cross_mingw64\\r'
-    mkdir -p build && cd build
-    cmake \
-        -DBUILD_SHARED_LIBS=ON \
-        -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-        -DCMAKE_INSTALL_PREFIX=${TRAVIS_BUILD_DIR}/open62541-win64 \
-        -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-mingw64.cmake \
-        -DUA_BUILD_EXAMPLES=ON \
-        -DUA_ENABLE_AMALGAMATION=OFF ..
-    make -j
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-    make install
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-    cd ..
-    zip -r open62541-win64.zip ../doc_latex/open62541.pdf LICENSE AUTHORS README.md open62541-win64/*
-    rm build -rf
-    echo -en 'travis_fold:end:script.build.cross_mingw64\\r'
-
-    echo -e "\r\n== Cross compile release build for 32-bit linux =="  && echo -en 'travis_fold:start:script.build.cross_linux\\r'
-    mkdir -p build && cd build
-    cmake \
-        -DBUILD_SHARED_LIBS=ON \
-        -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-        -DCMAKE_INSTALL_PREFIX=${TRAVIS_BUILD_DIR}/open62541-linux32 \
-        -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-gcc-m32.cmake \
-        -DUA_BUILD_EXAMPLES=ON \
-        -DUA_ENABLE_AMALGAMATION=OFF ..
-    make -j
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-    make install
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-    cd ..
-    tar -pczf open62541-linux32.tar.gz ../doc_latex/open62541.pdf LICENSE AUTHORS README.md open62541-linux32/*
-    rm build -rf
-    echo -en 'travis_fold:end:script.build.cross_linux\\r'
-
-    echo -e "\r\n== Cross compile release build for RaspberryPi =="  && echo -en 'travis_fold:start:script.build.cross_raspi\\r'
-    mkdir -p build && cd build
-    git clone https://github.com/raspberrypi/tools
-    export PATH=$PATH:${TRAVIS_BUILD_DIR}/build/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/
-    cmake \
-        -DBUILD_SHARED_LIBS=ON \
-        -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-        -DCMAKE_INSTALL_PREFIX=${TRAVIS_BUILD_DIR}/open62541-raspberrypi \
-        -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-rpi64.cmake \
-        -DUA_BUILD_EXAMPLES=ON \
-        -DUA_ENABLE_AMALGAMATION=OFF ..
-    make -j
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-    make install
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-    cd ..
-    tar -pczf open62541-raspberrypi.tar.gz ../doc_latex/open62541.pdf LICENSE AUTHORS README.md open62541-raspberrypi/*
-    rm build -rf
-    echo -en 'travis_fold:end:script.build.cross_raspi\\r'
-fi
-
-echo -e "\r\n== Compile release build for 64-bit linux =="  && echo -en 'travis_fold:start:script.build.linux_64\\r'
-mkdir -p build && cd build
-cmake \
-    -DBUILD_SHARED_LIBS=ON \
-    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-    -DCMAKE_INSTALL_PREFIX=${TRAVIS_BUILD_DIR}/open62541-linux64 \
-    -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/$PYTHON \
-    -DUA_BUILD_EXAMPLES=ON \
-    -DUA_ENABLE_AMALGAMATION=OFF ..
-make -j
-if [ $? -ne 0 ] ; then exit 1 ; fi
-make install
-if [ $? -ne 0 ] ; then exit 1 ; fi
-cd ..
-tar -pczf open62541-linux64.tar.gz ../doc_latex/open62541.pdf LICENSE AUTHORS README.md open62541-linux64/*
-rm build -rf
-echo -en 'travis_fold:end:script.build.linux_64\\r'
-
-echo -e "\r\n== Compile with amalgamation =="  && echo -en 'travis_fold:start:script.build.amalgamate\\r'
-mkdir -p build && cd build
-cmake \
-    -DBUILD_SHARED_LIBS=ON \
-    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-    -DCMAKE_INSTALL_PREFIX=${TRAVIS_BUILD_DIR}/open62541-linux64 \
-    -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/$PYTHON \
-    -DUA_BUILD_EXAMPLES=OFF \
-    -DUA_ENABLE_AMALGAMATION=ON \
-    -DUA_ENABLE_HISTORIZING=ON  ..
-make -j
-cp open62541.h ../.. # copy single file-release
-cp open62541.c ../.. # copy single file-release
-gcc -std=c99 -c open62541.c
-g++ ../examples/server.cpp -I./ open62541.o -lrt -o cpp-server
-if [ $? -ne 0 ] ; then exit 1 ; fi
-cd .. && rm build -rf
-echo -en 'travis_fold:end:script.build.amalgamate\\r'
-
-echo "Compile as shared lib version" && echo -en 'travis_fold:start:script.build.shared_libs\\r'
-mkdir -p build && cd build
-cmake \
-    -DBUILD_SHARED_LIBS=ON \
-    -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/$PYTHON \
-    -DUA_BUILD_EXAMPLES=ON \
-    -DUA_ENABLE_AMALGAMATION=OFF ..
-make -j
-if [ $? -ne 0 ] ; then exit 1 ; fi
-cd .. && rm build -rf
-echo -en 'travis_fold:end:script.build.shared_libs\\r'
-
-if [ "$CC" != "tcc" ]; then
-    echo -e "\r\n==Compile multithreaded version==" && echo -en 'travis_fold:start:script.build.multithread\\r'
-    mkdir -p build && cd build
-    cmake \
-    -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/$PYTHON \
-    -DUA_BUILD_EXAMPLES=ON \
-    -DUA_MULTITHREADING=200 ..
-    make -j
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-    cd .. && rm build -rf
-    echo -en 'travis_fold:end:script.build.multithread\\r'
-fi
-
-echo -e "\r\n== Compile with encryption ==" && echo -en 'travis_fold:start:script.build.encryption\\r'
-mkdir -p build && cd build
-cmake \
-    -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/$PYTHON \
-    -DUA_BUILD_EXAMPLES=ON \
-    -DUA_ENABLE_ENCRYPTION=ON ..
-make -j
-if [ $? -ne 0 ] ; then exit 1 ; fi
-cd .. && rm build -rf
-echo -en 'travis_fold:end:script.build.encryption\\r'
-
-echo -e "\r\n== Compile without discovery version ==" && echo -en 'travis_fold:start:script.build.discovery\\r'
-mkdir -p build && cd build
-cmake \
-    -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/$PYTHON \
-    -DUA_BUILD_EXAMPLES=ON \
-    -DUA_ENABLE_DISCOVERY=OFF \
-    -DUA_ENABLE_DISCOVERY_MULTICAST=OFF ..
-make -j
-if [ $? -ne 0 ] ; then exit 1 ; fi
-cd .. && rm build -rf
-echo -en 'travis_fold:end:script.build.discovery\\r'
-
-if [ "$CC" != "tcc" ]; then
-    echo -e "\r\n== Compile multithreaded version with discovery ==" && echo -en 'travis_fold:start:script.build.multithread_discovery\\r'
-    mkdir -p build && cd build
-    cmake \
-        -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/$PYTHON \
-        -DUA_BUILD_EXAMPLES=ON \
-        -DUA_ENABLE_DISCOVERY=ON \
-        -DUA_ENABLE_DISCOVERY_MULTICAST=ON \
-        -DUA_MULTITHREADING=200 ..
-    make -j
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-    cd .. && rm build -rf
-    echo -en 'travis_fold:end:script.build.multithread_discovery\\r'
-fi
-
-echo -e "\r\n== Compile JSON encoding ==" && echo -en 'travis_fold:start:script.build.json\\r'
-mkdir -p build && cd build
-cmake \
-    -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/$PYTHON \
-    -DUA_ENABLE_JSON_ENCODING=ON ..
-make -j
-if [ $? -ne 0 ] ; then exit 1 ; fi
-cd .. && rm build -rf
-echo -en 'travis_fold:end:script.build.json\\r'
-
-echo -e "\r\n== Unit tests (full NS0) ==" && echo -en 'travis_fold:start:script.build.unit_test_ns0_full\\r'
-mkdir -p build && cd build
-# Valgrind cannot handle the full NS0 because the generated file is too big. Thus run NS0 full without valgrind
-cmake \
-    -DCMAKE_BUILD_TYPE=Debug \
-    -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/$PYTHON \
-    -DUA_BUILD_EXAMPLES=ON \
-    -DUA_BUILD_UNIT_TESTS=ON \
-    -DUA_ENABLE_COVERAGE=OFF \
-    -DUA_ENABLE_DA=ON \
-    -DUA_ENABLE_DISCOVERY=ON \
-    -DUA_ENABLE_DISCOVERY_MULTICAST=ON \
-    -DUA_ENABLE_ENCRYPTION=ON \
-    -DUA_ENABLE_JSON_ENCODING=ON \
-    -DUA_ENABLE_PUBSUB=ON \
-    -DUA_ENABLE_PUBSUB_DELTAFRAMES=ON \
-    -DUA_ENABLE_PUBSUB_INFORMATIONMODEL=ON \
-    -DUA_ENABLE_SUBSCRIPTIONS=ON \
-    -DUA_ENABLE_SUBSCRIPTIONS_EVENTS=ON \
-    -DUA_ENABLE_UNIT_TESTS_MEMCHECK=OFF \
-    -DUA_NAMESPACE_ZERO=FULL ..
-make -j && make test ARGS="-V"
-if [ $? -ne 0 ] ; then exit 1 ; fi
-cd .. && rm build -rf
-echo -en 'travis_fold:end:script.build.unit_test_ns0_full\\r'
-
-if ! [ -z ${DEBIAN+x} ]; then
-    echo -e "\r\n== Building the Debian package =="  && echo -en 'travis_fold:start:script.build.debian\\r'
-    /usr/bin/$PYTHON ./tools/prepare_packaging.py
-    echo -e "\r\n --- New debian changelog content ---"
-    echo "--------------------------------------"
-    cat ./debian/changelog
-    echo "--------------------------------------"
-    # Create a backup copy. We need the clean debian directory for later packaging
-    cp -r debian debian_bak
-    dpkg-buildpackage -b
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-    rm -rf debian
-    mv debian_bak debian
-    cp ../libopen62541*.deb .
-    # Copy for github release script
-    cp ../libopen62541*.deb ../..
-    echo -en 'travis_fold:end:script.build.debian\\r'
-fi
-
-
-if [ "$CC" != "tcc" ]; then
-    echo -e "\r\n== Unit tests (minimal NS0) ==" && echo -en 'travis_fold:start:script.build.unit_test_ns0_minimal\\r'
-    mkdir -p build && cd build
-    cmake \
-        -DCMAKE_BUILD_TYPE=Debug \
-        -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/$PYTHON \
-        -DUA_BUILD_EXAMPLES=ON \
-        -DUA_BUILD_UNIT_TESTS=ON \
-        -DUA_ENABLE_COVERAGE=ON \
-        -DUA_ENABLE_DA=ON \
-        -DUA_ENABLE_DISCOVERY=ON \
-        -DUA_ENABLE_DISCOVERY_MULTICAST=ON \
-        -DUA_ENABLE_ENCRYPTION=ON \
-        -DUA_ENABLE_JSON_ENCODING=ON \
-        -DUA_ENABLE_PUBSUB=ON \
-        -DUA_ENABLE_PUBSUB_DELTAFRAMES=ON \
-        -DUA_ENABLE_PUBSUB_INFORMATIONMODEL=OFF \
-        -DUA_ENABLE_UNIT_TESTS_MEMCHECK=ON \
-        -DUA_NAMESPACE_ZERO=MINIMAL ..
-    make -j && make test ARGS="-V"
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-    cd .. && rm build -rf
-    echo -en 'travis_fold:end:script.build.unit_test_ns0_minimal\\r'
-
-    echo -e "\r\n== Unit tests (reduced NS0) ==" && echo -en 'travis_fold:start:script.build.unit_test_ns0_reduced\\r'
-    mkdir -p build && cd build
-    cmake \
-        -DCMAKE_BUILD_TYPE=Debug \
-        -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/$PYTHON \
-        -DUA_BUILD_EXAMPLES=ON \
-        -DUA_BUILD_UNIT_TESTS=ON \
-        -DUA_ENABLE_COVERAGE=ON \
-        -DUA_ENABLE_DA=ON \
-        -DUA_ENABLE_DISCOVERY=ON \
-        -DUA_ENABLE_DISCOVERY_MULTICAST=ON \
-        -DUA_ENABLE_ENCRYPTION=ON \
-        -DUA_ENABLE_JSON_ENCODING=ON \
-        -DUA_ENABLE_PUBSUB=ON \
-        -DUA_ENABLE_PUBSUB_DELTAFRAMES=ON \
-        -DUA_ENABLE_PUBSUB_INFORMATIONMODEL=ON \
-        -DUA_ENABLE_UNIT_TESTS_MEMCHECK=ON \
-        -DUA_NAMESPACE_ZERO=REDUCED ..
-    make -j && make test ARGS="-V"
-    if [ $? -ne 0 ] ; then exit 1 ; fi
-    echo -en 'travis_fold:end:script.build.unit_test_ns0_reduced\\r'
-
-    # only run coveralls on main repo and when MINGW=true
-    # We only want to build coveralls once, so we just take the travis run where MINGW=true which is only enabled once
-    echo -e "\r\n== -> Current repo: ${TRAVIS_REPO_SLUG} =="
-    if [ $MINGW = "true" ] && [ "${TRAVIS_REPO_SLUG}" = "open62541/open62541" ]; then
-        echo -en "\r\n==   Building codecov.io for ${TRAVIS_REPO_SLUG} ==" && echo -en 'travis_fold:start:script.build.codecov\\r'
-        cd ..
-        /bin/bash -c "bash <(curl -s https://codecov.io/bash)"
-        if [ $? -ne 0 ] ; then exit 1 ; fi
-        cd build
-        echo -en 'travis_fold:end:script.build.codecov\\r'
-
-        echo -en "\r\n==   Building coveralls for ${TRAVIS_REPO_SLUG} ==" && echo -en 'travis_fold:start:script.build.coveralls\\r'
-        coveralls -E '.*/build/CMakeFiles/.*' -E '.*/examples/.*' -E '.*/tests/.*' -E '.*\.h' -E '.*CMakeCXXCompilerId\.cpp' -E '.*CMakeCCompilerId\.c' -r ../ || true # ignore result since coveralls is unreachable from time to time
-        cd .. && rm build -rf
-        echo -en 'travis_fold:end:script.build.coveralls\\r'
-
-		if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then
-			REAL_BRANCH="${TRAVIS_BRANCH}"
-       		echo -en "== Checking branch for packing: BRANCH_FOR_TAG='$BRANCH_FOR_TAG' and TRAVIS_TAG='${TRAVIS_TAG}'. \n"
-			if [ "${TRAVIS_TAG}" = "${TRAVIS_BRANCH}" ]; then
-				REAL_BRANCH="$BRANCH_FOR_TAG"
-        		echo -en "== Commit is tag build for '${TRAVIS_TAG}'. Detected branch for tag = '$BRANCH_FOR_TAG' \n"
-			fi
-
-			if [ "${REAL_BRANCH}" = "master" ] || [ "${REAL_BRANCH}" = "1.0" ]; then
-				# Create a separate branch with the `pack/` prefix. This branch has the correct debian/changelog set, and
-				# The submodules are directly copied
-				echo -e "\r\n== Pushing 'pack/${REAL_BRANCH}' branch =="  && echo -en 'travis_fold:start:script.build.pack-branch\\r'
-
-				git checkout -b pack-tmp/${REAL_BRANCH}
-				cp -r deps/mdnsd deps/mdnsd_back
-				cp -r deps/ua-nodeset deps/ua-nodeset_back
-				git rm -rf --cached deps/mdnsd
-				git rm -rf --cached deps/ua-nodeset
-				mv deps/mdnsd_back deps/mdnsd
-				rm -rf deps/mdnsd/.git
-				mv deps/ua-nodeset_back deps/ua-nodeset
-				rm -rf deps/ua-nodeset/.git
-				rm -rf .gitmodules
-				git add deps/*
-				git add debian/*
-				git add CMakeLists.txt
-				git commit -m "[ci skip] Pack with inline submodules"
-				git remote add origin-auth https://$GITAUTH@github.com/${TRAVIS_REPO_SLUG}
-				git push -uf origin-auth pack-tmp/${REAL_BRANCH}:pack/${REAL_BRANCH}
-
-				echo -en 'travis_fold:end:script.build.pack-branch\\r'
-			else
-				echo -en "== Skipping push to pack/ because branch does not match: REAL_BRANCH='${REAL_BRANCH}' \n"
-			fi
-        else
-        	echo -en "== Skipping push to pack/ because TRAVIS_PULL_REQUEST=false \n"
-        fi
-
-
-    fi
-fi
diff --git a/ext/open62541/tools/travis/travis_osx_before_install.sh b/ext/open62541/tools/travis/travis_osx_before_install.sh
deleted file mode 100644
index a326e75..0000000
--- a/ext/open62541/tools/travis/travis_osx_before_install.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-set -e
-
-brew install check
-brew install --HEAD valgrind
-brew install graphviz
-brew install python
-brew install mbedtls
diff --git a/ext/open62541/tools/travis/travis_osx_script.sh b/ext/open62541/tools/travis/travis_osx_script.sh
deleted file mode 100644
index 0e31181..0000000
--- a/ext/open62541/tools/travis/travis_osx_script.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/bin/bash
-set -e
-
-echo "\n=== Building ==="
-export OPENSSL_ROOT_DIR="/usr/local/opt/openssl"
-export PATH="/Users/travis/Library/Python/2.7/bin:$PATH"
-
-# OSX may have different hostnames between processes, which causes multicast unit test to fail.
-# Hardcode the hostname here
-# Note: do not use the `hostname` addon from travis:
-# addons:
-#  hostname: travis-osx
-#
-# Travis support says:
-# the `hostname` command is actually a super ephemeral way to change it. There’s a different way:
-# `sudo scutil --set HostName <new host name>` which is more permanent and potentially more resilient
-sudo scutil --set HostName travis-osx
-
-echo "Full Namespace 0 Generation" && echo -en 'travis_fold:start:script.build.ns0\\r'
-mkdir -p build
-cd build
-cmake \
-    -DCMAKE_BUILD_TYPE=Debug \
-    -DUA_BUILD_EXAMPLES=ON \
-    -DUA_NAMESPACE_ZERO=FULL ..
-make -j
-if [ $? -ne 0 ] ; then exit 1 ; fi
-cd .. && rm -rf build
-echo -en 'travis_fold:end:script.build.ns0\\r'
-
-echo "Compile release build for OS X" && echo -en 'travis_fold:start:script.build.osx\\r'
-mkdir -p build && cd build
-cmake \
-    -DCMAKE_BUILD_TYPE=Release \
-    -DCMAKE_INSTALL_PREFIX=${TRAVIS_BUILD_DIR}/open62541-osx \
-    -DUA_BUILD_EXAMPLES=ON \
-    -DUA_ENABLE_AMALGAMATION=OFF ..
-make -j
-if [ $? -ne 0 ] ; then exit 1 ; fi
-make install
-if [ $? -ne 0 ] ; then exit 1 ; fi
-cd ..
-tar -pczf open62541-osx.tar.gz LICENSE AUTHORS README.md ${TRAVIS_BUILD_DIR}/open62541-osx/*
-rm -rf build
-echo -en 'travis_fold:end:script.build.osx\\r'
-
-echo "Compile multithreaded version" && echo -en 'travis_fold:start:script.build.multithread\\r'
-mkdir -p build && cd build
-cmake \
-    -DUA_BUILD_EXAMPLES=ON \
-    -DUA_MULTITHREADING=200 ..
-make -j
-if [ $? -ne 0 ] ; then exit 1 ; fi
-cd .. && rm -rf build
-echo -en 'travis_fold:end:script.build.multithread\\r'
-
-echo "Debug build and unit tests with valgrind" && echo -en 'travis_fold:start:script.build.unit_test\\r'
-mkdir -p build && cd build
-cmake \
-    -DCHECK_PREFIX=/usr/local/Cellar/check/0.11.0 \
-    -DCMAKE_BUILD_TYPE=Debug \
-    -DUA_BUILD_EXAMPLES=ON \
-    -DUA_BUILD_UNIT_TESTS=ON \
-    -DUA_ENABLE_COVERAGE=OFF \
-    -DUA_ENABLE_DISCOVERY=ON \
-    -DUA_ENABLE_DISCOVERY_MULTICAST=ON \
-    -DUA_ENABLE_ENCRYPTION=ON \
-    -DUA_ENABLE_UNIT_TESTS_MEMCHECK=OFF ..
-make -j && make test ARGS="-V"
-if [ $? -ne 0 ] ; then exit 1 ; fi
-cd .. && rm -rf build
-echo -en 'travis_fold:end:script.build.unit_test\\r'
diff --git a/ext/open62541/tools/travis/travis_push_doc.sh b/ext/open62541/tools/travis/travis_push_doc.sh
deleted file mode 100644
index 2986b7f..0000000
--- a/ext/open62541/tools/travis/travis_push_doc.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/bin/bash
-set -e
-
-# This script will only be executed on branches which are either master or a release
-# See travis_linux_after_success.sh
-
-# The encrypted key is not available in pull requests from forks
-if [ -z "$GITAUTH" ]; then
-    exit 0
-fi
-
-git clone --depth=5 -b gh-pages https://$GITAUTH@github.com/open62541/open62541-www
-cd open62541-www
-
-target_dir="${TRAVIS_BRANCH}"
-
-if [ "${TRAVIS_BRANCH}" = "master" ]; then
-    target_dir="current"
-fi
-
-echo "=== Pushing doc for ${target_dir} ==="
-
-rm -r -f ./doc/${target_dir} || true # ignore result
-mkdir ./doc/${target_dir} || true # ignore result
-cp -r ../../doc/* ./doc/${target_dir}/
-cp -r ../../doc_latex/open62541.pdf ./doc/open62541-${target_dir}.pdf
-git add -A ./doc
-git config --global user.email "open62541-travis-ci@users.noreply.github.com"
-git config --global user.name "Open62541 travis-ci"
-git config --global push.default simple
-git commit -am "updated generated documentation on webpage by travis-ci [ci skip]"
-git push https://$GITAUTH@github.com/open62541/open62541-www
-
-cd .. && rm -rf open62541-www
diff --git a/ext/open62541/tools/travis/travis_push_release.sh b/ext/open62541/tools/travis/travis_push_release.sh
deleted file mode 100644
index debcbcb..0000000
--- a/ext/open62541/tools/travis/travis_push_release.sh
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/bash
-set -e
-
-TAGSTOSAVE=50
-TAG="$(git rev-parse --short=10 HEAD)"
-BRANCH="$(git log --pretty=format:"%d" --date=iso --abbrev=10 --all -1)"
-DATE="$(git log --pretty=format:"%ad" --date=iso --abbrev=10 --all -1)"
-COMMENT="$(git log --pretty=format:"%s" --date=iso --abbrev=10 --all -1)"
-
-# The encrypted key is not available in pull requests from forks
-if [ -z "$GITAUTH" ]; then
-    exit 0
-fi
-
-git clone --depth=5 -b gh-pages https://$GITAUTH@github.com/open62541/open62541-www
-cd open62541-www
-
-if [ ! -e "releases/$TAG.zip" ]; then
-    cd releases
-    #add the first line
-    echo "<tr><td><a href='./$TAG.zip'>$TAG</a></td><td>$BRANCH</td><td>$DATE</td><td>$COMMENT</td></tr>" | cat - rawtable.txt > temp && mv temp rawtable.txt
-
-    #keep top lines only
-    head "-$TAGSTOSAVE" rawtable.txt > temp && mv temp rawtable.txt
-
-    #compose the index file
-    cat head.txt rawtable.txt foot.txt > index.html
-
-    #create a zip for single-file release and copy the files
-    cp ../../../open62541.c .
-    cp ../../../open62541.h .
-    cp ../../../doc_latex/open62541.pdf .
-    cp ./../../README.md .
-    cp ./../../LICENSE .
-    cp ./../../AUTHORS .
-    cp ./../../libopen62541*.deb .
-
-    zip -r "$TAG.zip" open62541.c open62541.h open62541.pdf README.md LICENSE AUTHORS open62541*.deb
-    rm open62541.c
-    rm open62541.h
-    rm open62541.pdf
-    rm README.md
-    rm LICENSE
-    rm AUTHORS
-    rm libopen62541*.deb
-    git add "$TAG.zip"
-
-    echo "$TAG.zip" | cat - raw.txt > temp && mv temp raw.txt
-
-    LINETOSTART=$((TAGSTOSAVE+1))
-    #remove obsolete zips
-    tail -n +"$LINETOSTART" raw.txt | xargs git rm --ignore-unmatch
-
-    #remove obsolete zips from list
-    head "-$TAGSTOSAVE" raw.txt > temp && mv temp raw.txt
-
-    # quit releases
-    cd ..
-
-    git config --global user.email "open62541-travis-ci@users.noreply.github.com"
-    git config --global user.name "Open62541 travis-ci"
-    git config --global push.default simple
-    git commit --allow-empty -am "added release files and updated releases webpage by travis-ci [ci skip]"
-    git pull && git push https://$GITAUTH@github.com/open62541/open62541-www
-fi
-
-#quit open62541-www
-cd ..
-rm -rf open62541-www
diff --git a/ext/open62541/tools/ua2json/CMakeLists.txt b/ext/open62541/tools/ua2json/CMakeLists.txt
deleted file mode 100644
index 092e626..0000000
--- a/ext/open62541/tools/ua2json/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

-include_directories(${PROJECT_SOURCE_DIR}/src)

-

-add_executable(ua2json ua2json.c)

-target_link_libraries(ua2json open62541 ${open62541_LIBRARIES})

-assign_source_group(ua2json)

-add_dependencies(ua2json open62541-object)

-set_target_properties(ua2json PROPERTIES FOLDER "open62541/tools/ua2json")

-set_target_properties(ua2json PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/bin")

diff --git a/ext/open62541/tools/ua2json/README.md b/ext/open62541/tools/ua2json/README.md
deleted file mode 100644
index eabd700..0000000
--- a/ext/open62541/tools/ua2json/README.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# ua2json
-
-ua2json is a command line tool to translate between OPC UA JSON encoding and OPC
-UA binary encoding. ua2json follows the tradition of shell-based unix-tools and
-provides translation between the binary and JSON encoding formats of OPC UA
-messages as a reusable building block. Input can be piped through ua2json from
-stdin to stdout. File input and output is possible as well.
-
-At the core of the OPC UA protocol lies a type system in which the protocol
-messages are defined. The built-in data types include integers, strings, and so
-on. From these, more complex structures are assembled. For example the
-`ReadRequest` and `ReadResponse` message pair.
-
-## Usage
-
-```
-Usage: ua2json [encode|decode] [-t dataType] [-o outputFile] [inputFile]
-- encode/decode: Translate UA binary input to UA JSON / Translate UA JSON input to UA binary (required)
-- dataType: UA DataType of the input (default: Variant)
-- outputFile: Output target (default: write to stdout)
-- inputFile: Input source (default: read from stdin)
-```
-
-## Examples
-
-Take the following JSON encoding of a Variant data type instance with a 2x4
-matrix of numerical values. Variants can encapsulate scalars and
-multi-dimensional arrays of any data type.
-
-```json
-{
-    "Type": 3,
-    "Body": [1,2,3,4,5,6,7,8],
-    "Dimension": [2, 4]
-}
-```
-
-Piping this JSON-encoding through ua2json (and the xxd tool to print the output
-as hex) yields the binary OPC UA encoding.
-
-```bash
-$ cat variant.json | ua2json decode -t Variant | xxd
-00000000: c308 0000 0001 0203 0405 0607 0802 0000  ................
-00000010: 0002 0000 0004 0000 00                   .........
-```
-
-The inverse transformation returns the original JSON (modulo pretty-printing).
-
-```bash
-$ cat variant.bin | ua2json encode -t Variant
-```
\ No newline at end of file
diff --git a/ext/open62541/tools/ua2json/examples/datavalue.bin b/ext/open62541/tools/ua2json/examples/datavalue.bin
deleted file mode 100644
index bc52609..0000000
--- a/ext/open62541/tools/ua2json/examples/datavalue.bin
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tools/ua2json/examples/datavalue.json b/ext/open62541/tools/ua2json/examples/datavalue.json
deleted file mode 100644
index 2837aad..0000000
--- a/ext/open62541/tools/ua2json/examples/datavalue.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-    "ServerPicoseconds": 0,
-    "ServerTimestamp": "1970-01-15T06:56:07Z",
-    "SourcePicoseconds": 0,
-    "SourceTimestamp": "1970-01-15T06:56:07Z",
-    "Status": 2153250816,
-    "Value": {
-        "Type": 1,
-        "Body": true
-    }
-}
diff --git a/ext/open62541/tools/ua2json/examples/pubsub.bin b/ext/open62541/tools/ua2json/examples/pubsub.bin
deleted file mode 100644
index feec842..0000000
--- a/ext/open62541/tools/ua2json/examples/pubsub.bin
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tools/ua2json/examples/pubsub.json b/ext/open62541/tools/ua2json/examples/pubsub.json
deleted file mode 100644
index ec0e142..0000000
--- a/ext/open62541/tools/ua2json/examples/pubsub.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-    "MessageId": "1CD777E3-9590-A4E2-6DB6-4BE40EE09EB9",
-    "MessageType": "ua-data",
-    "Messages": [
-        {
-            "DataSetWriterId": 62541,
-            "MetaDataVersion": {
-                "MajorVersion": 1708098706,
-                "MinorVersion": 0
-            },
-            "Timestamp": "2019-01-20T23:33:28.493Z",
-            "Payload": {
-                "": {
-                    "Type": 13,
-                    "Body": "2019-01-20T23:33:28.493Z"
-                }
-            }
-        }
-    ]
-}
diff --git a/ext/open62541/tools/ua2json/examples/readrequest.bin b/ext/open62541/tools/ua2json/examples/readrequest.bin
deleted file mode 100644
index ebd4bfb..0000000
--- a/ext/open62541/tools/ua2json/examples/readrequest.bin
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tools/ua2json/examples/readrequest.json b/ext/open62541/tools/ua2json/examples/readrequest.json
deleted file mode 100644
index cc4b05d..0000000
--- a/ext/open62541/tools/ua2json/examples/readrequest.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
-    "RequestHeader": {
-        "AdditionalHeader": null,
-        "AuditEntryId": null,
-        "AuthenticationToken": {
-            "Id": "D358AA6F-D5C7-4AA9-0CB0-EB0E1491E91E",
-            "IdType": 2,
-            "Namespace": 1
-        },
-        "RequestHandle": 1000059,
-        "ReturnDiagnostics": 0,
-        "TimeoutHint": 5000,
-        "Timestamp": "2019-01-09T21:54:40.179Z"
-    },
-    "TimestampsToReturn": 1,
-    "MaxAge": 0,
-    "NodesToRead": [
-        {
-            "AttributeId": 13,
-            "DataEncoding": {
-                "Name": null
-            },
-            "IndexRange": null,
-            "NodeId": {"Id": 2259}
-        }
-    ]
-}
diff --git a/ext/open62541/tools/ua2json/examples/variant.bin b/ext/open62541/tools/ua2json/examples/variant.bin
deleted file mode 100644
index 021b276..0000000
--- a/ext/open62541/tools/ua2json/examples/variant.bin
+++ /dev/null
Binary files differ
diff --git a/ext/open62541/tools/ua2json/examples/variant.json b/ext/open62541/tools/ua2json/examples/variant.json
deleted file mode 100644
index d35b9bf..0000000
--- a/ext/open62541/tools/ua2json/examples/variant.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-    "Type": 3,
-    "Body": [1,2,3,4,5,6,7,8],
-    "Dimension": [2, 4]
-}
diff --git a/ext/open62541/tools/ua2json/ua2json.c b/ext/open62541/tools/ua2json/ua2json.c
deleted file mode 100644
index a1effe7..0000000
--- a/ext/open62541/tools/ua2json/ua2json.c
+++ /dev/null
@@ -1,340 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
- *
- *    Copyright 2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- */
-
-/* Enable POSIX features */
-#if !defined(_XOPEN_SOURCE)
-# define _XOPEN_SOURCE 600
-#endif
-#ifndef _DEFAULT_SOURCE
-# define _DEFAULT_SOURCE
-#endif
-/* On older systems we need to define _BSD_SOURCE.
- * _DEFAULT_SOURCE is an alias for that. */
-#ifndef _BSD_SOURCE
-# define _BSD_SOURCE
-#endif
-
-#include <open62541/types.h>
-
-#include <stdio.h>
-
-/* Internal headers */
-#include <open62541/types_generated.h>
-#include <open62541/types_generated_handling.h>
-
-#include "ua_pubsub_networkmessage.h"
-#include "ua_types_encoding_binary.h"
-#include "ua_types_encoding_json.h"
-
-static UA_StatusCode
-encode(const UA_ByteString *buf, UA_ByteString *out,
-       const UA_DataType *type) {
-    void *data = malloc(type->memSize);
-    if(!data)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    size_t offset = 0;
-    UA_StatusCode retval = UA_decodeBinary(buf, &offset, data, type, NULL);
-    if(retval != UA_STATUSCODE_GOOD) {
-        free(data);
-        return retval;
-    }
-    if(offset != buf->length) {
-        UA_delete(data, type);
-        fprintf(stderr, "Input buffer not completely read\n");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    size_t jsonLength = UA_calcSizeJson(data, type, NULL, 0, NULL, 0, true);
-    retval = UA_ByteString_allocBuffer(out, jsonLength);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_delete(data, type);
-        return retval;
-    }
-
-    uint8_t *bufPos = &out->data[0];
-    const uint8_t *bufEnd = &out->data[out->length];
-    retval = UA_encodeJson(data, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, true);
-    UA_delete(data, type);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ByteString_deleteMembers(out);
-        return retval;
-    }
-
-    out->length = (size_t)((uintptr_t)bufPos - (uintptr_t)out->data);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-decode(const UA_ByteString *buf, UA_ByteString *out,
-       const UA_DataType *type) {
-    void *data = malloc(type->memSize);
-    if(!data)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    UA_StatusCode retval = UA_decodeJson(buf, data, type);
-    if(retval != UA_STATUSCODE_GOOD) {
-        free(data);
-        return retval;
-    }
-
-    size_t binLength = UA_calcSizeBinary(data, type);
-    retval = UA_ByteString_allocBuffer(out, binLength);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_delete(data, type);
-        return retval;
-    }
-
-    uint8_t *bufPos = &out->data[0];
-    const uint8_t *bufEnd = &out->data[out->length];
-    retval = UA_encodeBinary(data, type, &bufPos, &bufEnd, NULL, NULL);
-    UA_delete(data, type);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ByteString_deleteMembers(out);
-        return retval;
-    }
-
-    out->length = (size_t)((uintptr_t)bufPos - (uintptr_t)out->data);
-    return UA_STATUSCODE_GOOD;
-}
-
-#ifdef UA_ENABLE_PUBSUB
-
-static UA_StatusCode
-encodeNetworkMessage(const UA_ByteString *buf, UA_ByteString *out) {
-    size_t offset = 0;
-    UA_NetworkMessage msg;
-    UA_StatusCode retval = UA_NetworkMessage_decodeBinary(buf, &offset, &msg);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    if(offset != buf->length) {
-        UA_NetworkMessage_deleteMembers(&msg);
-        fprintf(stderr, "Input buffer not completely read\n");
-        return UA_STATUSCODE_BADINTERNALERROR;
-    }
-
-    size_t jsonLength = UA_NetworkMessage_calcSizeJson(&msg, NULL, 0, NULL, 0, true);
-    retval = UA_ByteString_allocBuffer(out, jsonLength);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_NetworkMessage_deleteMembers(&msg);
-        return retval;
-    }
-
-    uint8_t *bufPos = &out->data[0];
-    const uint8_t *bufEnd = &out->data[out->length];
-    retval = UA_NetworkMessage_encodeJson(&msg, &bufPos, &bufEnd, NULL, 0, NULL, 0, true);
-    UA_NetworkMessage_deleteMembers(&msg);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ByteString_deleteMembers(out);
-        return retval;
-    }
-
-    out->length = (size_t)((uintptr_t)bufPos - (uintptr_t)out->data);
-    return UA_STATUSCODE_GOOD;
-}
-
-static UA_StatusCode
-decodeNetworkMessage(const UA_ByteString *buf, UA_ByteString *out) {
-    UA_NetworkMessage msg;
-    UA_StatusCode retval = UA_NetworkMessage_decodeJson(&msg, buf);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    size_t binLength = UA_NetworkMessage_calcSizeBinary(&msg);
-    retval = UA_ByteString_allocBuffer(out, binLength);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_NetworkMessage_deleteMembers(&msg);
-        return retval;
-    }
-
-    uint8_t *bufPos = &out->data[0];
-    const uint8_t *bufEnd = &out->data[out->length];
-    retval = UA_NetworkMessage_encodeBinary(&msg, &bufPos, bufEnd);
-    UA_NetworkMessage_deleteMembers(&msg);
-    if(retval != UA_STATUSCODE_GOOD) {
-        UA_ByteString_deleteMembers(out);
-        return retval;
-    }
-
-    out->length = (size_t)((uintptr_t)bufPos - (uintptr_t)out->data);
-    return UA_STATUSCODE_GOOD;
-}
-
-#endif
-
-static void
-usage(void) {
-    printf("Usage: ua2json [encode|decode] [-t dataType] [-o outputFile] [inputFile]\n"
-           "- encode/decode: Translate UA binary input to UA JSON / "
-             "Translate UA JSON input to UA binary (required)\n"
-           "- dataType: UA DataType of the input (default: Variant)\n"
-           "- outputFile: Output target (default: write to stdout)\n"
-           "- inputFile: Input source (default: read from stdin)\n");
-}
-
-int main(int argc, char **argv) {
-    UA_Boolean encode_option = true;
-    UA_Boolean pubsub = false;
-    const char *datatype_option = "Variant";
-    const char *input_option = NULL;
-    const char *output_option = NULL;
-    UA_ByteString outbuf = UA_BYTESTRING_NULL;
-    UA_ByteString buf = UA_BYTESTRING_NULL;
-    FILE *in = stdin;
-    FILE *out = stdout;
-    int retcode = -1;
-
-    /* Read the command line options */
-    if(argc < 2) {
-        usage();
-        return 0;
-    }
-
-    if(strcmp(argv[1], "encode") == 0) {
-        encode_option = true;
-    } else if(strcmp(argv[1], "decode") == 0) {
-        encode_option = false;
-    } else {
-        fprintf(stderr, "Error: The first argument must be \"encode\" or \"decode\"\n");
-        return -1;
-    }
-        
-    for(int argpos = 2; argpos < argc; argpos++) {
-        if(strcmp(argv[argpos], "--help") == 0) {
-            usage();
-            return 0;
-        }
-
-        if(strcmp(argv[argpos], "-t") == 0) {
-            if(argpos + 1 == argc) {
-                usage();
-                return -1;
-            }
-            argpos++;
-            datatype_option = argv[argpos];
-            continue;
-        }
-
-        if(strcmp(argv[argpos], "-o") == 0) {
-            if(argpos + 1 == argc) {
-                usage();
-                return -1;
-            }
-            argpos++;
-            output_option = argv[argpos];
-            continue;
-        }
-
-        if(argpos + 1 == argc) {
-            input_option = argv[argpos];
-            continue;
-        }
-
-        usage();
-        return -1;
-    }
-
-    /* Find the data type */
-    const UA_DataType *type = NULL;
-    if(strcmp(datatype_option, "PubSub") == 0) {
-        pubsub = true;
-    } else {
-        for(size_t i = 0; i < UA_TYPES_COUNT; ++i) {
-            if(strcmp(datatype_option, UA_TYPES[i].typeName) == 0) {
-                type = &UA_TYPES[i];
-                break;
-            }
-        }
-        if(!type) {
-            fprintf(stderr, "Error: Datatype not found\n");
-            return -1;
-        }
-    }
-
-    /* Open files */
-    if(input_option) {
-        in = fopen(input_option, "rb");
-        if(!in) {
-            fprintf(stderr, "Could not open input file %s\n", input_option);
-            goto cleanup;
-        }
-    }
-    if(output_option) {
-        out = fopen(output_option, "wb");
-        if(!out) {
-            fprintf(stderr, "Could not open output file %s\n", output_option);
-            goto cleanup;
-        }
-    }
-
-    /* Read input until EOF */
-    size_t pos = 0;
-    size_t length = 128;
-    while(true) {
-        if(pos >= buf.length) {
-            length = length * 8;
-            UA_Byte *r = (UA_Byte*)realloc(buf.data, length);
-            if(!r) {
-                fprintf(stderr, "Out of memory\n");
-                goto cleanup;
-            }
-            buf.length = length;
-            buf.data = r;
-        }
-
-        ssize_t c = read(fileno(in), &buf.data[pos], length - pos);
-        if(c == 0)
-            break;
-        if(c < 0) {
-            fprintf(stderr, "Reading from input failed\n");
-            goto cleanup;
-        }
-
-        pos += (size_t)c;
-    }
-
-    if(pos == 0) {
-        fprintf(stderr, "No input\n");
-        goto cleanup;
-    }
-    buf.length = pos;
-
-    /* Convert */
-    UA_StatusCode result = UA_STATUSCODE_BADNOTIMPLEMENTED;
-#ifdef UA_ENABLE_PUBSUB
-    if(pubsub && encode_option) {
-        result = encodeNetworkMessage(&buf, &outbuf);
-    } else if(pubsub) {
-        result = decodeNetworkMessage(&buf, &outbuf);
-    } else
-#endif
-    if(encode_option) {
-        result = encode(&buf, &outbuf, type);
-    } else {
-        result = decode(&buf, &outbuf, type);
-    }
-    
-    if(result != UA_STATUSCODE_GOOD) {
-        fprintf(stderr, "Error: Parsing failed with code %s\n",
-                UA_StatusCode_name(result));
-        goto cleanup;
-    }
-
-    /* Print the output and quit */
-    fwrite(outbuf.data, 1, outbuf.length, out);
-    retcode = 0;
-
- cleanup:
-    UA_ByteString_deleteMembers(&buf);
-    UA_ByteString_deleteMembers(&outbuf);
-    if(in != stdin && in)
-        fclose(in);
-    if(out != stdout && out)
-        fclose(out);
-    return retcode;
-}
diff --git a/ext/open62541/tools/update_copyright_header.py b/ext/open62541/tools/update_copyright_header.py
deleted file mode 100644
index a8d950d..0000000
--- a/ext/open62541/tools/update_copyright_header.py
+++ /dev/null
@@ -1,229 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-# It is based on the idea of http://0pointer.net/blog/projects/copyright.html
-
-import os
-import re
-import io
-import sys
-
-from git import *
-from shutil import move
-
-if sys.version_info[0] >= 3:
-    # strings are already parsed to unicode
-    def unicode(s):
-        return s
-
-
-# Replace the name by another value, i.e. add affiliation or replace user name by full name
-# only use lower case name
-authorFullName = {
-    'staldert': 'Thomas Stalder, Blue Time Concept SA',
-    'mark giraud': 'Mark Giraud, Fraunhofer IOSB',
-    'julius pfrommer': 'Julius Pfrommer, Fraunhofer IOSB',
-    'stefan profanter': 'Stefan Profanter, fortiss GmbH',
-}
-
-# Skip commits with the following authors, since they are not valid names
-# and come from an invalid git config
-skipNames = ['=', 'open62541', 'opcua']
-
-def compactYears(yearList):
-
-    current = None
-    last = None
-    result = []
-
-    for yStr in yearList:
-        y = int(yStr)
-        if last is None:
-            current = y
-            last = y
-            continue
-
-        if y == last + 1:
-            last = y
-            continue
-
-        if last == current:
-            result.append("%i" % last)
-        else:
-            result.append("%i-%i" % (current, last))
-
-        current = y
-        last = y
-
-    if not last is None:
-        if last == current:
-            result.append("%i" % last)
-        else:
-            result.append("%i-%i" % (current, last))
-
-    return ", ".join(result)
-
-fileAuthorStats = dict()
-
-def insertCopyrightAuthors(file, authorsList):
-    copyrightEntries = list()
-    for author in authorsList:
-        copyrightEntries.append(unicode("Copyright {} (c) {}").format(compactYears(author['years']), author['author']))
-
-    copyrightAdded = False
-    commentPattern = re.compile(r"(.*)\*/$")
-
-    tmpName = file + ".new"
-    tempFile = io.open(tmpName, mode="w", encoding="utf-8")
-    with io.open(file, mode="r", encoding="utf-8") as f:
-        for line in f:
-            if copyrightAdded or not commentPattern.match(line):
-                tempFile.write(line)
-            else:
-                tempFile.write(commentPattern.match(line).group(1) + "\n *\n")
-                for e in copyrightEntries:
-                    tempFile.write(unicode(" *    {}\n").format(e))
-                tempFile.write(unicode(" */\n"))
-                copyrightAdded = True
-    tempFile.close()
-    os.unlink(file)
-    move(tmpName, file)
-
-def updateCopyright(repo, file):
-    print("Checking file {}".format(file))
-
-    # Build the info on how many lines every author commited every year
-    relativeFilePath = file[len(repo.working_dir)+1:].replace("\\","/")
-
-    if not relativeFilePath in fileAuthorStats:
-        print("File not found in list: {}".format(relativeFilePath))
-        return
-
-    stats = fileAuthorStats[relativeFilePath]
-
-    # Now create a sorted list and filter out small contributions
-    authorList = list()
-
-    for author in stats:
-        if author in skipNames:
-            continue
-
-        authorYears = list()
-        for year in stats[author]['years']:
-            if stats[author]['years'][year] < 10:
-                # ignore contributions for this year if less than 10 lines changed
-                continue
-            authorYears.append(year)
-        if len(authorYears) == 0:
-            continue
-        authorYears.sort()
-
-        if author.lower() in authorFullName:
-            authorName = authorFullName[author.lower()]
-        else:
-            authorName = author
-
-
-        authorList.append({
-            'author': authorName,
-            'years': authorYears,
-            'first_commit': stats[author]['first_commit']
-        })
-
-    # Sort the authors list first by year, and then by name
-
-    authorListSorted = sorted(authorList, key=lambda a: a['first_commit'])
-    insertCopyrightAuthors(file, authorListSorted)
-
-
-# This is required since some commits use different author names for the same person
-assumeSameAuthor = {
-    'Mark': u'Mark Giraud',
-    'Infinity95': u'Mark Giraud',
-    'janitza-thbe': u'Thomas Bender',
-    'Stasik0': u'Sten Grüner',
-    'Sten': u'Sten Grüner',
-    'Frank Meerkoetter': u'Frank Meerkötter',
-    'ichrispa': u'Chris Iatrou',
-    'Chris Paul Iatrou': u'Chris Iatrou',
-    'Torben-D': u'TorbenD',
-    'FlorianPalm': u'Florian Palm',
-    'ChristianFimmers': u'Christian Fimmers'
-}
-
-def buildFileStats(repo):
-
-    fileRenameMap = dict()
-    renamePattern = re.compile(r"(.*){(.*) => (.*)}(.*)")
-
-    cnt = 0
-    for commit in repo.iter_commits():
-        cnt += 1
-
-    curr = 0
-    for commit in repo.iter_commits():
-        curr += 1
-        print("Checking commit {}/{}  ->   {}".format(curr, cnt, commit.hexsha))
-
-        for objpath, stats in commit.stats.files.items():
-
-            match = renamePattern.match(objpath)
-
-            if match:
-                # the file was renamed, store the rename to follow up later
-                oldFile = (match.group(1) + match.group(2) + match.group(4)).replace("//", "/")
-                newFile = (match.group(1) + match.group(3) + match.group(4)).replace("//", "/")
-
-                while newFile in fileRenameMap:
-                    newFile = fileRenameMap[newFile]
-
-                if oldFile != newFile:
-                    fileRenameMap[oldFile] = newFile
-            else:
-                newFile = fileRenameMap[objpath] if objpath in fileRenameMap else objpath
-
-            if stats['insertions'] > 0:
-                if not newFile in fileAuthorStats:
-                    fileAuthorStats[newFile] = dict()
-
-                authorName = unicode(commit.author.name)
-                if authorName in assumeSameAuthor:
-                    authorName = assumeSameAuthor[authorName]
-
-                if not authorName in fileAuthorStats[newFile]:
-                    fileAuthorStats[newFile][authorName] = {
-                        'years': dict(),
-                        'first_commit': commit.committed_datetime
-                    }
-                elif commit.committed_datetime < fileAuthorStats[newFile][authorName]['first_commit']:
-                    fileAuthorStats[newFile][authorName]['first_commit'] = commit.committed_datetime
-
-                if not commit.committed_datetime.year in fileAuthorStats[newFile][authorName]['years']:
-                    fileAuthorStats[newFile][authorName]['years'][commit.committed_datetime.year] = 0
-
-                fileAuthorStats[newFile][authorName]['years'][commit.committed_datetime.year] += stats['insertions']
-
-
-
-
-def walkFiles(repo, folder, pattern):
-    patternCompiled = re.compile(pattern)
-    for root, subdirs, files in os.walk(folder):
-        for f in files:
-            if patternCompiled.match(f):
-                fname = os.path.join(root,f)
-                updateCopyright(repo, fname)
-
-if __name__ == '__main__':
-    baseDir = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir))
-    repo = Repo(baseDir)
-    assert not repo.bare
-
-    buildFileStats(repo)
-
-    dirs = ['src', 'plugins', 'include']
-
-    for dir in dirs:
-        walkFiles(repo, os.path.join(baseDir, dir), r"(.*\.c|.*\.h)$")
diff --git a/ext/open62541/tools/valgrind_check_error.py b/ext/open62541/tools/valgrind_check_error.py
deleted file mode 100644
index 5797dbe..0000000
--- a/ext/open62541/tools/valgrind_check_error.py
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/usr/bin/env python
-
-# coding: UTF-8
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# This script checks the valgrind output for errors.
-# The track-fds does not cause an error if there are too many FDs open,
-# therefore we parse the output and fail if there are open FDs
-
-import sys
-import subprocess
-import os.path
-import re
-import os
-
-logfile = sys.argv[1]
-
-valgrind_command = ' '.join('"' + item + '"' for item in sys.argv[2:])
-
-# Execute a command and output its stdout text
-def execute(command):
-
-    process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
-
-    # Poll process for new output until finished
-    while True:
-        nextline = process.stdout.readline().decode('utf-8')
-        if nextline == '' and process.poll() is not None:
-            break
-        sys.stdout.write(nextline)
-        sys.stdout.flush()
-
-    return process.returncode
-
-ret_code = execute(valgrind_command)
-
-if not os.path.isfile(logfile):
-    print("### PYTHON ERROR: Valgrind logfile does not exist: " + logfile)
-    exit(1)
-
-log_content = ""
-with open(logfile, 'r') as content_file:
-    log_content = content_file.read()
-
-if len(log_content) == 0:
-    print("### PYTHON ERROR: Valgrind logfile is empty: " + logfile)
-    exit(1)
-
-# Remove output of possible bug in OSX
-# --16672-- run: /usr/bin/dsymutil "/Users/travis/build/Pro/open62541/build/bin/tests/check_utils"
-# --16672-- WARNING: unhandled amd64-darwin syscall: unix:464
-# --16672-- You may be able to write your own handler.
-# --16672-- Read the file README_MISSING_SYSCALL_OR_IOCTL.
-# --16672-- Nevertheless we consider this a bug.  Please report
-# --16672-- it at http://valgrind.org/support/bug_reports.html.
-replace_re = re.compile(r"^--(\d+)--\s+run: .*-- it at http://valgrind.org/support/bug_reports.html\.$\n", re.MULTILINE | re.DOTALL)
-log_content = replace_re.sub('', log_content)
-
-# Try to parse the output. Look for the following line:
-# ==17054== FILE DESCRIPTORS: 5 open at exit.
-descriptors_re = re.compile(r".*==(\d+)==\s+FILE DESCRIPTORS: (\d+) open at exit\..*", re.DOTALL)
-m = descriptors_re.match(log_content)
-
-if not m:
-    print("### PYTHON ERROR: File descriptors header not found: " + logfile)
-    print(log_content)
-    exit(1)
-
-log_content = descriptors_re.sub('', log_content)
-
-valgrind_number = m.group(1)
-open_count = int(m.group(2))
-
-# Remove the open file descriptors which are inherited from parent. they look like this:
-#==21343== Open file descriptor 3: /home/user/open62541/build/bin/tests/discovery.log
-#==21343==    <inherited from parent>
-#==21343==
-#==21343== Open file descriptor 2:
-#==21343==    <inherited from parent>
-#==21343==
-#==21343== Open file descriptor 1:
-#==21343==    <inherited from parent>
-#==21343==
-#==21343== Open file descriptor 0: /dev/pts/1
-#==21343==    <inherited from parent>
-
-replace_re = re.compile(r"^=="+str(valgrind_number)+r"==\s+Open file descriptor \d+:\s*[^\s]*$\n^=="+str(valgrind_number)+r"==\s+<inherited from parent>$\n(^=="+str(valgrind_number)+r"==\s+$\n)*", re.MULTILINE)
-log_content = replace_re.sub('', log_content)
-
-# Valgrind detected a memleak if ret_code != 0
-if ret_code != 0:
-    print(log_content)
-    exit(ret_code)
-
-# No issues by valgrind
-if len(log_content) == 0 or log_content.isspace():
-    exit(0)
-
-# There is something fishy in the valgrind output, so error-exit
-print(log_content)
-exit(1)
diff --git a/ext/open62541/tools/valgrind_suppressions.supp b/ext/open62541/tools/valgrind_suppressions.supp
deleted file mode 100644
index 591ffa6..0000000
--- a/ext/open62541/tools/valgrind_suppressions.supp
+++ /dev/null
@@ -1,737 +0,0 @@
-# Probably this: https://bugzilla.redhat.com/show_bug.cgi?id=754026
-{
-   <glibc noai6ai_cached>
-   Memcheck:Free
-   fun:free
-   fun:__libc_freeres
-   fun:_vgnU_freeres
-   fun:__run_exit_handlers
-   fun:exit
-}
-
-
-
-# Custom suppressions added by @Pro
-
-{
-   osx_tmpfile_2
-   Memcheck:Cond
-   ...
-   fun:find_temp_path
-   ...
-   fun:open_tmp_file
-   ...
-}
-{
-   osx_tmpfile_3
-   Memcheck:Value8
-   ...
-   fun:find_temp_path
-   ...
-   fun:open_tmp_file
-   ...
-}
-{
-   osx_tmpfile_4
-   Memcheck:Leak
-   fun:malloc
-   ...
-   fun:find_temp_path
-   ...
-   fun:open_tmp_file
-   ...
-   fun:main
-}
-{
-   osx_leak_1
-   Memcheck:Leak
-   ...
-   fun:map_images_nolock
-   fun:map_images
-   ...
-}
-
-
-
-# Suppressions for Darwin 14.x / Mac OS X 10.10 Yosemite
-
-# Source: https://raw.githubusercontent.com/svn2github/valgrind/master/darwin14.supp
-
-############################################
-## Leaks.  For other stuff see below.
-
-{
-   OSX1010:1-Leak
-   Memcheck:Leak
-   match-leak-kinds: possible
-   fun:malloc_zone_?alloc
-   ...
-   fun:_read_images
-}
-
-#{
-#   OSX1010:2-Leak
-#   Memcheck:Leak
-#   match-leak-kinds: definite
-#   fun:?alloc
-#   ...
-#   fun:_ZN4dyld24initializeMainExecutableEv
-#}
-
-{
-   OSX1010:3-Leak
-   Memcheck:Leak
-   match-leak-kinds: definite
-   fun:malloc_zone_?alloc
-   fun:recursive_mutex_init
-   ...
-   fun:_os_object_init
-   fun:libdispatch_init
-   fun:libSystem_initializer
-   ...
-}
-
-#{
-#   OSX1010:4-Leak
-#   Memcheck:Leak
-#   match-leak-kinds: reachable
-#   fun:malloc_zone_?alloc
-#   ...
-#   fun:dyld_register_image_state_change_handler
-#   ...
-#}
-
-{
-   OSX1010:5-Leak
-   Memcheck:Leak
-   match-leak-kinds: reachable
-   fun:?alloc
-   ...
-   fun:dyld_register_image_state_change_handler
-   ...
-}
-
-{
-   OSX1010:6-Leak
-   Memcheck:Leak
-   match-leak-kinds: reachable
-   fun:malloc_zone_?alloc
-   ...
-   fun:map_images_nolock
-   fun:map_images
-   ...
-}
-
-{
-   OSX1010:7-Leak
-   Memcheck:Leak
-   match-leak-kinds: possible
-   fun:malloc_zone_?alloc
-   ...
-   fun:map_images_nolock
-   fun:map_images
-   ...
-}
-
-#{
-#   OSX1010:8-Leak
-#   Memcheck:Leak
-#   match-leak-kinds: indirect
-#   fun:?alloc
-#   ...
-#   fun:libSystem_initializer
-#   ...
-#}
-
-{
-   OSX1010:9-Leak
-   Memcheck:Leak
-   match-leak-kinds: reachable
-   fun:malloc_zone_?alloc
-   ...
-   fun:libSystem_initializer
-   ...
-}
-
-{
-   OSX1010:10-Leak
-   Memcheck:Leak
-   match-leak-kinds: reachable
-   fun:?alloc
-   ...
-   fun:libSystem_initializer
-   ...
-}
-
-#{
-#   OSX1010:11-Leak
-#   Memcheck:Leak
-#   match-leak-kinds: definite
-#   fun:malloc
-#   fun:currentlocale
-#}
-#
-#{
-#   OSX1010:12-Leak
-#   Memcheck:Leak
-#   match-leak-kinds: possible
-#   fun:malloc
-#   fun:tzsetwall_basic
-#   fun:_st_tzset_basic
-#}
-
-{
-   OSX1010:13-Leak
-   Memcheck:Leak
-   match-leak-kinds: reachable
-   fun:malloc_zone_memalign
-   ...
-   fun:_ZN4dyld24initializeMainExecutableEv
-   ...
-}
-
-############################################
-## Non-leak errors
-
-##{
-##   OSX1010:CoreFoundation-1
-##   Memcheck:Cond
-##   obj:*CoreFoundation.framework*CoreFoundation*
-##   obj:*CoreFoundation.framework*CoreFoundation*
-##   obj:*CoreFoundation.framework*CoreFoundation*
-##}
-
-{
-   OSX1010:CoreFoundation-2
-   Memcheck:Cond
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*libdispatch.dylib*
-   obj:*libdispatch.dylib*
-}
-
-{
-   OSX1010:CoreFoundation-3
-   Memcheck:Cond
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*Foundation.framework*Foundation*
-}
-
-{
-   OSX1010:CoreFoundation-4
-   Memcheck:Cond
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*SystemConfiguration.framework*SystemConfiguration*
-}
-
-{
-   OSX1010:CoreFoundation-5
-   Memcheck:Cond
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*HIServices.framework*HIServices*
-}
-
-{
-   OSX1010:CoreFoundation-6
-   Memcheck:Cond
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*SystemConfiguration.framework*SystemConfiguration*
-   obj:*SystemConfiguration.framework*SystemConfiguration*
-}
-
-{
-   OSX1010:CoreFoundation-7
-   Memcheck:Cond
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*SystemConfiguration.framework*SystemConfiguration*
-   obj:*CoreFoundation.framework*CoreFoundation*
-}
-
-{
-   OSX1010:CoreFoundation-8
-   Memcheck:Cond
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*IOKit.framework*IOKit*
-}
-
-{
-   OSX1010:CoreFoundation-9
-   Memcheck:Cond
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*Foundation.framework*Foundation*
-   obj:*AppKit.framework*AppKit*
-}
-
-{
-   OSX1010:CoreFoundation-10
-   Memcheck:Cond
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*HIToolbox.framework*HIToolbox*
-   obj:*HIToolbox.framework*HIToolbox*
-}
-
-{
-   OSX1010:CoreFoundation-11
-   Memcheck:Cond
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*AE.framework*AE*
-   obj:*AE.framework*AE*
-}
-
-{
-   OSX1010:CoreFoundation-12
-   Memcheck:Cond
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*HIToolbox.framework*HIToolbox*
-}
-
-{
-   OSX1010:CoreFoundation-13
-   Memcheck:Cond
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*CoreFoundation.framework*CoreFoundation*
-   obj:*AE.framework*AE*
-}
-
-{
-   OSX1010:AppKit-1
-   Memcheck:Cond
-   obj:*AppKit.framework*AppKit*
-   obj:*AppKit.framework*AppKit*
-   obj:*AppKit.framework*AppKit*
-}
-
-{
-   OSX1010:AppKit-2
-   Memcheck:Cond
-   obj:*AppKit.framework*AppKit*
-   obj:*AppKit.framework*AppKit*
-   obj:*libdispatch.dylib*
-}
-
-#{
-#   OSX1010:AppKit-3
-#   Memcheck:Cond
-#   obj:*AppKit.framework*AppKit*
-#   obj:*libdispatch.dylib*
-#   obj:*libdispatch.dylib*
-#}
-
-##{
-##   OSX1010:AppKit-4
-##   Memcheck:Cond
-##   obj:*AppKit.framework*AppKit*
-##   obj:*AppKit.framework*AppKit*
-##   obj:*CoreFoundation.framework*CoreFoundation*
-##}
-
-{
-   OSX1010:AppKit-5
-   Memcheck:Cond
-   obj:*AppKit.framework*AppKit*
-   obj:*AppKit.framework*AppKit*
-   obj:*Foundation.framework*Foundation*
-}
-
-{
-   OSX1010:AppKit-6
-   Memcheck:Cond
-   obj:*AppKit.framework*AppKit*
-   obj:*Foundation.framework*Foundation*
-   obj:*AppKit.framework*AppKit*
-}
-
-{
-   OSX1010:AppKit-7
-   Memcheck:Cond
-   obj:*AppKit.framework*AppKit*
-   obj:*libdispatch.dylib*
-   obj:*libdispatch.dylib*
-}
-
-{
-   OSX1010:AppKit-8
-   Memcheck:Cond
-   obj:*AppKit.framework*AppKit*
-   obj:*Foundation.framework*Foundation*
-   obj:*Foundation.framework*Foundation*
-}
-
-{
-   OSX1010:ColorSync-1
-   Memcheck:Cond
-   obj:*ColorSync.framework*ColorSync*
-   obj:*ColorSync.framework*ColorSync*
-   obj:*ColorSync.framework*ColorSync*
-}
-
-#{
-#   OSX1010:ColorSync-2
-#   Memcheck:Value8
-#   obj:*ColorSync.framework*ColorSync*
-#   obj:*ColorSync.framework*ColorSync*
-#   obj:*ColorSync.framework*ColorSync*
-#}
-
-{
-   OSX1010:CoreGraphics-1
-   Memcheck:Cond
-   obj:*CoreGraphics.framework*CoreGraphics*
-   obj:*CoreGraphics.framework*CoreGraphics*
-}
-
-#{
-#   OSX1010:CoreGraphics-2
-#   Memcheck:Value8
-#   obj:*CoreGraphics.framework*CoreGraphics*
-#   obj:*CoreGraphics.framework*CoreGraphics*
-#   obj:*CoreGraphics.framework*CoreGraphics*
-#}
-
-{
-   OSX1010:CoreGraphics-3
-   Memcheck:Cond
-   obj:*CoreGraphics.framework*CoreGraphics*
-   obj:*CoreGraphics.framework*libRIP*
-   obj:*CoreGraphics.framework*libRIP*
-}
-
-#{
-#   OSX1010:CoreGraphics-4
-#   Memcheck:Cond
-#   obj:*CoreGraphics.framework*CoreGraphics*
-#   obj:*CoreGraphics.framework*CoreGraphics*
-#   obj:*CoreGraphics.framework*libRIP*
-#}
-
-{
-   OSX1010:CoreGraphics-5
-   Memcheck:Cond
-   obj:*CoreGraphics.framework*CoreGraphics*
-   obj:*libdispatch.dylib*
-   obj:*libdispatch.dylib*
-}
-
-#{
-#   OSX1010:CoreGraphics-6
-#   Memcheck:Cond
-#   obj:*CoreGraphics.framework*CoreGraphics*
-#   obj:*CoreGraphics.framework*CoreGraphics*
-#   obj:*HIToolbox.framework*HIToolbox*
-#}
-
-{
-   OSX1010:HIServices-1
-   Memcheck:Cond
-   obj:*HIServices.framework*HIServices*
-   obj:*HIToolbox.framework*HIToolbox*
-   obj:*HIToolbox.framework*HIToolbox*
-}
-
-{
-   OSX1010:LaunchServices-1
-   Memcheck:Cond
-   obj:*LaunchServices.framework*LaunchServices*
-   obj:*AppKit.framework*AppKit*
-   obj:*AppKit.framework*AppKit*
-}
-
-{
-   OSX1010:LaunchServices-2
-   Memcheck:Cond
-   obj:*LaunchServices.framework*LaunchServices*
-   obj:*libdispatch.dylib*
-   obj:*libdispatch.dylib*
-}
-
-{
-   OSX1010:QuartzCore-1
-   Memcheck:Cond
-   obj:*QuartzCore.framework*QuartzCore
-   obj:*QuartzCore.framework*QuartzCore
-   obj:*QuartzCore.framework*QuartzCore
-}
-
-#{
-#   OSX1010:vImage-1
-#   Memcheck:Cond
-#   obj:*vImage.framework*vImage*
-#   obj:*vImage.framework*vImage*
-#   obj:*CoreGraphics.framework*CoreGraphics*
-#}
-
-{
-   OSX1010:zlib-C
-   Memcheck:Cond
-   obj:/usr/lib/libz.*dylib
-   obj:/usr/lib/libz.*dylib
-}
-
-{
-   OSX1010:zlib-8
-   Memcheck:Value8
-   obj:/usr/lib/libz.*dylib
-   obj:/usr/lib/libz.*dylib
-}
-
-#{
-#   OSX1010:32bit:_libxpc_initializer
-#   Memcheck:Cond
-#   fun:_libxpc_initializer
-#   fun:libSystem_initializer
-#   fun:*ImageLoaderMachO*doModInitFunctions*
-#}
-
-{
-   OSX1010:dyld-1
-   Memcheck:Cond
-   fun:*ImageLoader*weakBind*
-   fun:*ImageLoader*link*
-   fun:*dyld*link*
-}
-
-{
-   OSX1010:dyld-2
-   Memcheck:Cond
-   fun:exit
-   obj:*libdyld*dylib*
-}
-
-{
-   OSX1010:libsystem_kernel-1
-   Memcheck:Cond
-   obj:*libsystem_kernel*dylib*
-   obj:*libsystem_kernel*dylib*
-   obj:*CoreFoundation.framework*CoreFoundation*
-}
-
-{
-   OSX1010:CoreServicesInternal-1
-   Memcheck:Cond
-   obj:*CoreServicesInternal.framework*CoreServicesInternal*
-   obj:*CoreServices.framework*LaunchServices*
-   obj:*CoreServices.framework*LaunchServices*
-}
-
-{
-   OSX1010:CoreServicesInternal-2
-   Memcheck:Cond
-   obj:*CoreServicesInternal.framework*CoreServicesInternal*
-   obj:*CoreServicesInternal.framework*CoreServicesInternal*
-   obj:*CoreServicesInternal.framework*CoreServicesInternal*
-}
-
-{
-   OSX1010:CoreServicesInternal-3
-   Memcheck:Cond
-   obj:*CoreServicesInternal.framework*CoreServicesInternal*
-   obj:*CoreServicesInternal.framework*CoreServicesInternal*
-   obj:*CoreFoundation.framework*CoreFoundation*
-}
-
-{
-   OSX1010:CoreServices-1
-   Memcheck:Cond
-   obj:*CoreServices.framework*LaunchServices*
-   obj:*CoreServices.framework*LaunchServices*
-   obj:*CoreServices.framework*LaunchServices*
-}
-
-##{
-##   OSX1010:libsystem_pthread-1
-##   Memcheck:Cond
-##   obj:*libsystem_pthread*dylib*
-##   obj:*ImageIO.framework*ImageIO*
-##   obj:*ImageIO.framework*ImageIO*
-##}
-
-{
-   OSX1010:ApplicationServices-1
-   Memcheck:Cond
-   obj:*ApplicationServices.framework*ATS*
-   obj:*libsystem_pthread*dylib*
-   obj:*libsystem_platform*dylib*
-}
-
-{
-   OSX1010:HIToolbox-1
-   Memcheck:Cond
-   obj:*HIToolbox.framework*HIToolbox*
-   obj:*HIToolbox.framework*HIToolbox*
-   obj:*HIToolbox.framework*HIToolbox*
-}
-
-{
-   OSX1010:RawCamera-1
-   Memcheck:Cond
-   obj:*RawCamera.bundle*RawCamera*
-   obj:*libdispatch.dylib*
-   obj:*libdispatch.dylib*
-}
-
-##{
-##   OSX1010:CoreImage-1
-##   Memcheck:Cond
-##   obj:*CoreImage.framework*CoreImage*
-##   obj:*CoreImage.framework*CoreImage*
-##   obj:*CoreImage.framework*CoreImage*
-##}
-
-##{
-##   OSX1010:strncpy-1
-##   Memcheck:Cond
-##   fun:strncpy
-##   obj:*CoreServicesInternal.framework*CoreServicesInternal
-##   obj:*CoreServicesInternal.framework*CoreServicesInternal
-##}
-
-{
-   OSX1010:pthread_rwlock_init
-   Memcheck:Cond
-   fun:pthread_rwlock_init
-   obj:*ImageIO.framework*ImageIO*
-   obj:*ImageIO.framework*ImageIO*
-}
-
-{
-   OSX1010:CFBasicHash
-   Memcheck:Value8
-   fun:*CFBasicHash*
-   fun:*CF*
-}
-
-{
-   OSX1010:AppleIntelHD4000GraphicsGLDriver-1-Addr8
-   Memcheck:Addr8
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-}
-{
-   OSX1010:AppleIntelHD4000GraphicsGLDriver-1-Addr8
-   Memcheck:Addr4
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-}
-
-{
-   OSX1010:AppleIntelHD4000GraphicsGLDriver-2-Addr8
-   Memcheck:Addr8
-   fun:*platform_memmove*
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-}
-{
-   OSX1010:AppleIntelHD4000GraphicsGLDriver-2-Addr2
-   Memcheck:Addr2
-   fun:*platform_memmove*
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-}
-
-{
-   OSX1010:AppleIntelHD4000GraphicsGLDriver-3-Addr8
-   Memcheck:Addr8
-   fun:*platform_memmove*
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-   obj:*GLEngine.bundle*GLEngine*
-}
-{
-   OSX1010:AppleIntelHD4000GraphicsGLDriver-3-Addr2
-   Memcheck:Addr2
-   fun:*platform_memmove*
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-   obj:*GLEngine.bundle*GLEngine*
-}
-{
-   OSX1010:AppleIntelHD4000GraphicsGLDriver-3-Addr1
-   Memcheck:Addr1
-   fun:*platform_memmove*
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-   obj:*GLEngine.bundle*GLEngine*
-}
-
-{
-   OSX1010:AppleIntelHD4000GraphicsGLDriver-4
-   Memcheck:Addr8
-   fun:*platform_bzero*
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-}
-
-{
-   OSX1010:AppleIntelHD4000GraphicsGLDriver-6-Addr8
-   Memcheck:Addr8
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-   obj:*GLEngine.bundle*GLEngine*
-}
-{
-   OSX1010:AppleIntelHD4000GraphicsGLDriver-6-Addr4
-   Memcheck:Addr4
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-   obj:*GLEngine.bundle*GLEngine*
-}
-
-{
-   OSX1010:AppleIntelHD4000GraphicsGLDriver-7
-   Memcheck:Addr4
-   obj:*AppleIntelHD4000GraphicsGLDriver.bundle*AppleIntelHD4000GraphicsGLDriver*
-   obj:*GLEngine.bundle*GLEngine*
-}
-
-{
-   OSX1010:OSAtomicAdd32
-   Memcheck:Addr4
-   fun:*OSAtomicAdd32*
-   obj:*IOAccelerator.framework*IOAccelerator*
-   obj:*GPUSupport.framework*GPUSupportMercury*
-}
-
-{
-   OSX1010:IOAccelerator-1
-   Memcheck:Addr4
-   obj:*IOAccelerator.framework*IOAccelerator*
-   obj:*GPUSupport.framework*GPUSupportMercury*
-}
-
-{
-   OSX1010:mach_msg_trap-1
-   Memcheck:Param
-   msg->desc.port.name
-   fun:mach_msg_trap
-   obj:*libsystem_kernel.dylib*
-   obj:*SystemConfiguration.framework*SystemConfiguration*
-}
-
-{
-   OSX1010:mach_msg_trap-2
-   Memcheck:Param
-   msg->desc.port.name
-   fun:mach_msg_trap
-   obj:*SystemConfiguration.framework*SystemConfiguration*
-   obj:*SystemConfiguration.framework*SystemConfiguration*
-}
-
-# See https://bugs.kde.org/show_bug.cgi?id=188572 about this;  it's
-# unavoidable due to BSD setenv() semantics.
-{
-   macos-__setenv-leak-see-our-bug-188572
-   Memcheck:Leak
-   match-leak-kinds: definite
-   fun:malloc
-   fun:_owned_ptr_alloc
-   fun:setenv
-}
-
-# See https://bugs.kde.org/show_bug.cgi?id=196528
-{
-macos-__pthread_rwlock_init-see-our-bug-196528
-Memcheck:Cond
-fun:pthread_rwlock_init
-}
diff --git a/ext/open62541_lib.cmake b/ext/open62541_lib.cmake
deleted file mode 100644
index bcf3fdb..0000000
--- a/ext/open62541_lib.cmake
+++ /dev/null
@@ -1,153 +0,0 @@
-# Copyright 2019 NXP
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-
-PROJECT(open62541_lib)
-
-SET(OPEN62541_VER_MAJOR 0)
-SET(OPEN62541_VER_MINOR 0)
-SET(OPEN62541_VER_PATCH 0)
-SET(OPEN62541_VER_LABEL "-")
-SET(OPEN62541_VER_COMMIT "-")
-SET(UA_LOGLEVEL 300)
-
-SET(UA_ENABLE_METHODCALLS 1)
-SET(UA_ENABLE_NODEMANAGEMENT 1)
-SET(UA_ENABLE_SUBSCRIPTIONS 1)
-SET(UA_ENABLE_DA 1)
-SET(UA_ENABLE_ENCRYPTION 1)
-SET(UA_MULTITHREADING 0)
-SET(UA_ENABLE_STATUSCODE_DESCRIPTIONS 1)
-SET(UA_ENABLE_TYPEDESCRIPTION 1)
-SET(UA_ENABLE_NODESET_COMPILER_DESCRIPTIONS 1)
-SET(UA_ENABLE_DISCOVERY 1)
-SET(UA_ENABLE_DISCOVERY_SEMAPHORE 1)
-SET(UA_VALGRIND_INTERACTIVE_INTERVAL 1000)
-SET(UA_GENERATED_NAMESPACE_ZERO 1)
-SET(UA_DEBUG 1)
-
-IF(WithHost_PCWindows)
-    SET(UA_ARCHITECTURE "win32")
-ELSEIF(
-    WithHost_iMXLinux
-    OR WithHost_PCLinux64
-    OR WithHost_Raspbian
-)
-    SET(UA_ARCHITECTURE "posix")
-ENDIF()
-
-SET(
-    UA_ARCHITECTURES_NODEF
-    "1  && !defined(UA_ARCHITECTURE_ECOS) && !defined(UA_ARCHITECTURE_FREERTOSLWIP) && !defined(UA_ARCHITECTURE_POSIX) && !defined(UA_ARCHITECTURE_VXWORKS) && !defined(UA_ARCHITECTURE_WEC7) && !defined(UA_ARCHITECTURE_WIN32)"
-)
-
-CONFIGURE_FILE(
-    ${CMAKE_CURRENT_SOURCE_DIR}/open62541/include/open62541/config.h.in
-    ${CMAKE_CURRENT_SOURCE_DIR}/open62541/build/src_generated/open62541/config.h
-)
-
-FILE(
-    GLOB
-    ${PROJECT_NAME}_files
-    ${CMAKE_CURRENT_SOURCE_DIR}/../sss/plugin/open62541/plugins/securityPolicies/*.c
-    ${CMAKE_CURRENT_SOURCE_DIR}/../sss/plugin/open62541/sss_interface.c
-    open62541/arch/network_tcp.c
-    open62541/build/src_generated/open62541/*.c
-    open62541/deps/base64.c
-    open62541/deps/libc_time.c
-    open62541/deps/pcg_basic.c
-    open62541/plugins/securityPolicies/securitypolicy_mbedtls_common.c
-    open62541/plugins/securityPolicies/ua_securitypolicy_none.c
-    open62541/plugins/ua_accesscontrol_default.c
-    open62541/plugins/ua_config_default.c
-    open62541/plugins/ua_log_stdout.c
-    open62541/plugins/ua_nodestore_default.c
-    open62541/plugins/ua_pki_default.c
-    open62541/src/client/*.c
-    open62541/src/pubsub/ua_pubsub.c
-    open62541/src/pubsub/ua_pubsub_manager.c
-    open62541/src/pubsub/ua_pubsub_networkmessage.c
-    open62541/src/pubsub/ua_pubsub_ns0.c
-    open62541/src/server/*.c
-    open62541/src/ua_connection.c
-    open62541/src/ua_securechannel.c
-    open62541/src/ua_timer.c
-    open62541/src/ua_types.c
-    open62541/src/ua_types_encoding_binary.c
-    open62541/src/ua_util.c
-    open62541/src/ua_workqueue.c
-)
-
-IF(WithHost_PCWindows)
-    LIST(
-        APPEND
-        ${PROJECT_NAME}_files
-        open62541/arch/win32/ua_clock.c
-        open62541/arch/win32/ua_architecture_functions.c
-    )
-ELSEIF(
-    WithHost_iMXLinux
-    OR WithHost_PCLinux64
-    OR WithHost_Raspbian
-)
-    LIST(
-        APPEND
-        ${PROJECT_NAME}_files
-        open62541/arch/posix/ua_clock.c
-        open62541/arch/posix/ua_architecture_functions.c
-    )
-ENDIF()
-
-ADD_LIBRARY(${PROJECT_NAME} ${${PROJECT_NAME}_files})
-
-TARGET_LINK_LIBRARIES(${PROJECT_NAME} ex_common)
-
-TARGET_INCLUDE_DIRECTORIES(
-    ${PROJECT_NAME}
-    PUBLIC open62541/include
-    PUBLIC open62541/plugins/include
-    PUBLIC open62541/examples
-    PUBLIC open62541/build/src_generated/
-    PUBLIC open62541/arch
-    PUBLIC open62541/deps
-    PUBLIC open62541/src
-    PUBLIC open62541/src/server
-    PUBLIC open62541/src/client
-    PUBLIC mbedtls/include
-    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../sss/plugin/open62541
-)
-
-IF(WithHost_PCWindows)
-    ADD_DEFINITIONS(-DUA_ARCHITECTURE_WIN32)
-    ADD_COMPILE_DEFINITIONS(PCWindows=1)
-ELSEIF(
-    WithHost_iMXLinux
-    OR WithHost_PCLinux64
-    OR WithHost_Raspbian
-)
-    ADD_DEFINITIONS(-DUA_ARCHITECTURE_POSIX)
-ENDIF()
-
-IF(
-    "${CMAKE_CXX_COMPILER_ID}"
-    MATCHES
-    "MSVC"
-)
-    TARGET_COMPILE_OPTIONS(
-        ${PROJECT_NAME}
-        PRIVATE
-            /wd4706 # assignment within conditional expression
-            /wd4701 # potentially uninitialized local variable
-            /wd4703 # potentially uninitialized local pointer variable
-    )
-    # 1900 matches VS2015
-    IF(
-        ${MSVC_VERSION}
-        LESS_EQUAL
-        1900
-    )
-        TARGET_COMPILE_OPTIONS(${PROJECT_NAME} PRIVATE /wd4127 # conditional expression is constant
-        )
-    ENDIF()
-ENDIF()