You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2020/01/16 08:11:54 UTC

[plc4x-build-tools] branch develop updated: - Working on a new site-skin.

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

cdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x-build-tools.git


The following commit(s) were added to refs/heads/develop by this push:
     new b78c1ca  - Working on a new site-skin.
b78c1ca is described below

commit b78c1ca70e7d4c1980021e78bebe4ed112914f15
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Thu Jan 16 09:11:44 2020 +0100

    - Working on a new site-skin.
---
 plc4x-site-skin/pom.xml                            |  61 ++-
 plc4x-site-skin/src/it/plc4x-website/pom.xml       | 393 ++++++++++++++++
 .../src/site/asciidoc/developers/building.adoc     | 129 +++++
 .../src/site/asciidoc/developers/ci.adoc           |  63 +++
 .../site/asciidoc/developers/code-gen/index.adoc   | 396 ++++++++++++++++
 .../developers/code-gen/language/freemarker.adoc   | 117 +++++
 .../asciidoc/developers/code-gen/protocol/df1.adoc |  94 ++++
 .../developers/code-gen/protocol/mspec.adoc        | 351 ++++++++++++++
 .../src/site/asciidoc/developers/conferences.adoc  |  49 ++
 .../src/site/asciidoc/developers/contributing.adoc | 202 ++++++++
 .../src/site/asciidoc/developers/decisions.adoc    |  66 +++
 .../src/site/asciidoc/developers/issues.adoc       |  20 +
 .../src/site/asciidoc/developers/jqassistant.adoc  | 126 +++++
 .../src/site/asciidoc/developers/maturity.adoc     |  76 +++
 .../src/site/asciidoc/developers/preparing.adoc    | 394 ++++++++++++++++
 .../asciidoc/developers/release-build-tools.adoc   | 461 ++++++++++++++++++
 .../src/site/asciidoc/developers/release.adoc      | 519 +++++++++++++++++++++
 .../src/site/asciidoc/developers/sonar.adoc        |  20 +
 .../src/site/asciidoc/developers/team.adoc         |  55 +++
 .../src/site/asciidoc/developers/vm.adoc           |  95 ++++
 .../src/site/asciidoc/developers/vpn.adoc          | 189 ++++++++
 .../src/site/asciidoc/developers/website.adoc      | 198 ++++++++
 .../src/site/asciidoc/developers/wiki.adoc         |  20 +
 .../developers/writing-driver/writing-driver.adoc  |  57 +++
 .../it/plc4x-website/src/site/asciidoc/index.adoc  | 101 ++++
 .../src/site/asciidoc/users/download.adoc          | 133 ++++++
 .../src/site/asciidoc/users/gettingstarted.adoc    |  24 +
 .../src/site/asciidoc/users/industry40.adoc        | 124 +++++
 .../plc4x-website/src/site/asciidoc/users/opm.adoc |  73 +++
 .../src/site/asciidoc/users/security.adoc          |  26 ++
 .../src/site/asciidoc/users/testing.adoc           | 165 +++++++
 .../site/resources/images/apache_brooklyn_logo.png | Bin 0 -> 4892 bytes
 .../site/resources/images/apache_camel_logo.png    | Bin 0 -> 15358 bytes
 .../site/resources/images/apache_edgent_logo.png   | Bin 0 -> 19377 bytes
 .../site/resources/images/apache_kafka_logo.png    | Bin 0 -> 78411 bytes
 .../src/site/resources/images/apache_logo.png      | Bin 0 -> 16457 bytes
 .../site/resources/images/apache_logo_small.png    | Bin 0 -> 7763 bytes
 .../site/resources/images/apache_mynewt_logo.png   | Bin 0 -> 157734 bytes
 .../src/site/resources/images/apache_nifi_logo.svg |  19 +
 .../site/resources/images/apache_plc4x_logo.png    | Bin 0 -> 46022 bytes
 .../resources/images/apache_plc4x_logo_small.png   | Bin 0 -> 10460 bytes
 .../resources/images/community-contribute-fork.png | Bin 0 -> 195211 bytes
 .../contributing-github-create-pull-request.png    | Bin 0 -> 112177 bytes
 .../resources/images/contributing-github-fork.png  | Bin 0 -> 96553 bytes
 .../src/site/resources/images/iot-lab.jpg          | Bin 0 -> 664977 bytes
 .../neo4j-intellij-database-connections-view.png   | Bin 0 -> 54579 bytes
 .../images/neo4j-intellij-query-results.png        | Bin 0 -> 177104 bytes
 .../resources/images/neo4j-intellij-settings.png   | Bin 0 -> 75308 bytes
 .../site/resources/images/neo4j-web-console.png    | Bin 0 -> 1194388 bytes
 .../images/plc4x-vpn-beckhoff-route-1.png          | Bin 0 -> 99036 bytes
 .../images/plc4x-vpn-beckhoff-route-2.png          | Bin 0 -> 87524 bytes
 .../images/plc4x-vpn-beckhoff-route-3.png          | Bin 0 -> 185843 bytes
 .../site/resources/images/plc4x-vpn-beckhoff.jpg   | Bin 0 -> 177770 bytes
 .../resources/images/plc4x-vpn-client-download.png | Bin 0 -> 83864 bytes
 .../src/site/resources/images/plc4x-vpn-fatek.jpg  | Bin 0 -> 175304 bytes
 .../resources/images/plc4x-vpn-siemens-hmi.jpg     | Bin 0 -> 129282 bytes
 .../site/resources/images/plc4x-vpn-siemens-s7.jpg | Bin 0 -> 146523 bytes
 .../src/site/resources/images/plc4x-vpn-wago.jpg   | Bin 0 -> 195501 bytes
 ...release-git-diff-next-development-iteration.png | Bin 0 -> 134548 bytes
 .../images/release-git-diff-prepare-release.png    | Bin 0 -> 132752 bytes
 .../site/resources/images/release-git-history.png  | Bin 0 -> 160255 bytes
 .../src/site/resources/images/team/cdutz.png       | Bin 0 -> 27791 bytes
 .../src/site/resources/images/team/jfeinauer.jpg   | Bin 0 -> 24689 bytes
 .../src/site/resources/images/team/sruehl.jpg      | Bin 0 -> 15008 bytes
 .../src/site/resources/images/team/tmitsch.png     | Bin 0 -> 33005 bytes
 .../src/it/plc4x-website/src/site/site.xml         |  94 ++++
 plc4x-site-skin/src/it/sample/pom.xml              |  61 ---
 .../src/it/sample/src/site/apt/index.apt.vm        | 154 ------
 plc4x-site-skin/src/it/sample/src/site/site.xml    |  30 --
 plc4x-site-skin/src/it/sample/verify.groovy        |   5 -
 .../main/resources/META-INF/maven/site-macros.vm   |  28 +-
 .../src/main/resources/META-INF/maven/site.vm      |  79 +++-
 .../src/main/resources/images/maven-feather.png    | Bin 0 -> 3581 bytes
 73 files changed, 4967 insertions(+), 300 deletions(-)

diff --git a/plc4x-site-skin/pom.xml b/plc4x-site-skin/pom.xml
index 9454725..f4d2d1f 100644
--- a/plc4x-site-skin/pom.xml
+++ b/plc4x-site-skin/pom.xml
@@ -26,8 +26,10 @@
     <sitePluginVersion>3.7.1</sitePluginVersion>
     <mpirVersion>3.0.0</mpirVersion>
 
-    <bootstrap.version>4.3.1</bootstrap.version>
-    <fontawesome.version>5.2.0</fontawesome.version>
+    <bootstrap.version>4.4.1</bootstrap.version>
+    <proper.version>1.16.0</proper.version>
+    <jquery.version>3.4.1</jquery.version>
+    <fontawesome.version>5.12.0</fontawesome.version>
   </properties>
 
   <scm>
@@ -40,7 +42,7 @@
   <build>
     <plugins>
       <!--
-        Download Fontawesome.
+        Download Bootstrap and Fontawesome.
       -->
       <plugin>
         <groupId>com.googlecode.maven-download-plugin</groupId>
@@ -60,6 +62,18 @@
             </configuration>
           </execution>
           <execution>
+            <id>get-propper</id>
+            <phase>generate-resources</phase>
+            <goals>
+              <goal>wget</goal>
+            </goals>
+            <configuration>
+              <url>https://github.com/popperjs/popper.js/archive/v${proper.version}.zip</url>
+              <unpack>true</unpack>
+              <outputDirectory>${project.build.directory}/dependency/popper</outputDirectory>
+            </configuration>
+          </execution>
+          <execution>
             <id>get-fontawesome</id>
             <phase>generate-resources</phase>
             <goals>
@@ -76,6 +90,35 @@
 
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>get-jquery</id>
+            <phase>generate-resources</phase>
+            <goals>
+              <goal>unpack</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.webjars</groupId>
+                  <artifactId>jquery</artifactId>
+                  <version>${jquery.version}</version>
+                  <type>jar</type>
+                </artifactItem>
+              </artifactItems>
+              <outputDirectory>${project.build.directory}/dependency/jquery</outputDirectory>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!--
+        Copy stuff from the downloaded bootstrap and fontawesome packages and hereby
+        assemble a local distribution customized to our needs.
+      -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-resources-plugin</artifactId>
         <executions>
           <execution>
@@ -113,6 +156,18 @@
                   </directory>
                   <targetPath>fonts</targetPath>
                 </resource>
+                <resource>
+                  <directory>
+                    ${project.build.directory}/dependency/jquery/META-INF/resources/webjars/jquery/${jquery.version}
+                  </directory>
+                  <targetPath>js</targetPath>
+                </resource>
+                <resource>
+                  <directory>
+                    ${project.build.directory}/dependency/popper/popper.js-${proper.version}/dist/umd
+                  </directory>
+                  <targetPath>js</targetPath>
+                </resource>
               </resources>
             </configuration>
           </execution>
diff --git a/plc4x-site-skin/src/it/plc4x-website/pom.xml b/plc4x-site-skin/src/it/plc4x-website/pom.xml
new file mode 100644
index 0000000..4b74451
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/pom.xml
@@ -0,0 +1,393 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache</groupId>
+    <artifactId>apache</artifactId>
+    <version>22</version>
+  </parent>
+
+  <groupId>org.apache.maven.skins.its</groupId>
+  <artifactId>@project.artifactId@</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>jar</packaging>
+
+  <name>@project.artifactId@ IT</name>
+  <description>
+    PLC4X is an effort to create a universal library for accessing industrial programmable logic controllers
+    using a variety of protocols using a uniform API.
+  </description>
+  <url>https://plc4x.apache.org</url>
+  <inceptionYear>2017</inceptionYear>
+
+  <scm>
+    <connection>scm:git:https://gitbox.apache.org/repos/asf/plc4x.git</connection>
+    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/plc4x.git</developerConnection>
+    <url>https://github.com/apache/plc4x</url>
+    <tag>HEAD</tag>
+  </scm>
+
+  <!-- Only configure the site distribution as the rest is handled by the apache parent -->
+  <distributionManagement>
+    <site>
+      <id>apache.website</id>
+      <url>scm:git:https://gitbox.apache.org/repos/asf/plc4x-website.git</url>
+    </site>
+  </distributionManagement>
+
+  <issueManagement>
+    <system>Jira</system>
+    <url>https://issues.apache.org/jira/browse/PLC4X</url>
+  </issueManagement>
+
+  <mailingLists>
+    <mailingList>
+      <name>Apache PLC4X Developer List</name>
+      <subscribe>mailto:dev-subscribe@plc4x.apache.org</subscribe>
+      <unsubscribe>mailto:dev-unsubscribe@plc4x.apache.org</unsubscribe>
+      <post>mailto:dev@plc4x.apache.org</post>
+      <archive>http://mail-archives.apache.org/mod_mbox/plc4x-dev/</archive>
+    </mailingList>
+    <mailingList>
+      <name>PLC4X Commits List</name>
+      <subscribe>mailto:commit-subscribe@plc4x.apache.org</subscribe>
+      <unsubscribe>mailto:commits-unsubscribe@plc4x.apache.org</unsubscribe>
+      <post>mailto:commits@plc4x.apache.org</post>
+      <archive>http://mail-archives.apache.org/mod_mbox/plc4x-commits/</archive>
+    </mailingList>
+    <mailingList>
+      <name>PLC4X Jira Notifications List</name>
+      <subscribe>mailto:issues-subscribe@plc4x.apache.org</subscribe>
+      <unsubscribe>mailto:issues-unsubscribe@plc4x.apache.org</unsubscribe>
+      <post>mailto:issues@plc4x.apache.org</post>
+      <archive>http://mail-archives.apache.org/mod_mbox/plc4x-issues/</archive>
+    </mailingList>
+  </mailingLists>
+
+  <properties>
+    <skinName>@project.name@</skinName>
+    <skinGroupId>@project.groupId@</skinGroupId>
+    <skinArtifactId>@project.artifactId@</skinArtifactId>
+    <skinVersion>@project.version@</skinVersion>
+    <!--
+      At least 3.3.3 required for camel-package-maven-plugin
+    -->
+    <maven.version>3.3.3</maven.version>
+
+    <java.version>1.8</java.version>
+
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <project.reporting.outputencoding>UTF-8</project.reporting.outputencoding>
+
+    <!-- Timestamp for the reproducible builds -->
+    <project.build.outputTimestamp>2019-11-01T10:30:00Z</project.build.outputTimestamp>
+
+    <!-- URL of the ASF SonarQube server -->
+    <sonar.host.url>https://builds.apache.org/analysis</sonar.host.url>
+    <!-- Exclude all generated code -->
+    <sonar.exclusions>**/generated-sources</sonar.exclusions>
+
+    <plc4x-code-generation.version>1.1.0</plc4x-code-generation.version>
+
+    <antlr.version>4.7.2</antlr.version>
+    <asm.version>5.0.4</asm.version>
+    <assertj.version>3.11.1</assertj.version>
+    <bouncycastle.version>1.60</bouncycastle.version>
+    <boost.version>1.71.0</boost.version>
+    <boost.version.underline-short>1_71</boost.version.underline-short>
+    <boost.version.underline>${boost.version.underline-short}_0</boost.version.underline>
+    <byte-buddy.version>1.9.10</byte-buddy.version>
+    <cmake-version>3.16.0</cmake-version>
+    <commons-beanutils.version>1.9.4</commons-beanutils.version>
+    <commons-codec.version>1.12</commons-codec.version>
+    <commons-collections4.version>4.1</commons-collections4.version>
+    <commons-configuration2.version>2.6</commons-configuration2.version>
+    <commons-io.version>2.6</commons-io.version>
+    <commons-lang.version>2.6</commons-lang.version>
+    <commons-lang3.version>3.9</commons-lang3.version>
+    <commons-logging.version>1.2</commons-logging.version>
+    <commons-math3.version>3.6.1</commons-math3.version>
+    <commons-pool2.version>2.8.0</commons-pool2.version>
+    <commons-text.version>1.8</commons-text.version>
+    <crc.version>1.0.1</crc.version>
+    <elasticsearch.version>7.4.0</elasticsearch.version>
+    <equalsverifier.version>3.0.2</equalsverifier.version>
+    <findbugs.version>3.0.1</findbugs.version>
+    <freemarker.version>2.3.28</freemarker.version>
+    <groovy.version>2.5.8</groovy.version>
+    <gson.version>2.8.5</gson.version>
+    <guava.version>27.0.1-jre</guava.version>
+    <hamcrest.version>1.3</hamcrest.version>
+    <httpclient.version>4.5.10</httpclient.version>
+    <jackson.version>2.10.0</jackson.version>
+    <jmh.version>1.21</jmh.version>
+    <jna.version>5.3.1</jna.version>
+    <joda-time.version>2.10.5</joda-time.version>
+    <jopt-simple.version>5.0.2</jopt-simple.version>
+    <jserialcom.version>2.5.1</jserialcom.version>
+    <junit.jupiter.version>5.5.0</junit.jupiter.version>
+    <junit.platform.version>1.3.2</junit.platform.version>
+    <junit.version>4.12</junit.version>
+    <log4j.version>2.11.1</log4j.version>
+    <logback.version>1.2.3</logback.version>
+    <logstash.version>7.4.0</logstash.version>
+    <lucene.version>8.2.0</lucene.version>
+    <metrics-core.version>3.1.2</metrics-core.version>
+    <mockito.version>2.24.5</mockito.version>
+    <netty.version>4.1.39.Final</netty.version>
+    <owasp-dependency-check.version>5.0.0-M1</owasp-dependency-check.version>
+    <pcap4j.version>1.8.2</pcap4j.version>
+    <scala.version>2.12.6</scala.version>
+    <slf4j.version>1.7.25</slf4j.version>
+    <snakeyaml.version>1.23</snakeyaml.version>
+    <spock-reports.version>1.6.1</spock-reports.version>
+    <spock.version>1.2-groovy-2.5</spock.version>
+    <t-digest.version>3.2</t-digest.version>
+    <thrift.version>0.13.0</thrift.version>
+    <xmlunit.version>2.6.3</xmlunit.version>
+
+    <!-- Site properties -->
+    <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
+    <asciidoctorj.version>2.0.0</asciidoctorj.version>
+    <asciidoctorj.diagram.version>1.5.16</asciidoctorj.diagram.version>
+    <reflow.skin.version>1.5.0</reflow.skin.version>
+    <bootstrap.version>3.3.7</bootstrap.version>
+    <jquery.version>3.3.1</jquery.version>
+    <anchorjs.version>3.2.2</anchorjs.version>
+    <fontawesome.version>5.2.0</fontawesome.version>
+  </properties>
+
+  <build>
+    <plugins>
+      <!-- Make some additional properties available to simplify keeping some content up to date -->
+      <plugin>
+        <groupId>org.codehaus.gmaven</groupId>
+        <artifactId>groovy-maven-plugin</artifactId>
+        <executions>
+          <!-- Set some dynamic variables which are useful for the site generation -->
+          <execution>
+            <id>provide-custom-properties</id>
+            <phase>pre-site</phase>
+            <goals>
+              <goal>execute</goal>
+            </goals>
+            <configuration>
+              <source>
+                print "\nCalculating some additional properties:"
+                // Get the current year
+                def currentYear = Calendar.getInstance().get(Calendar.YEAR) as String
+                print "\nCurrent year:                     " + currentYear
+                project.properties['current-year'] = currentYear
+
+                // Calculate some version related stuff
+                def currentVersion = project.version as String
+                def match = (currentVersion =~ /(\d+)\.(\d+)\.(\d+)(-SNAPSHOT)?/)
+                print "\nCurrent version:                  " + currentVersion
+                if(match.count &gt;= 1) {
+                  def majorVersion = match[0][1] as Integer
+                  def minorVersion = match[0][2] as Integer
+                  def bugfixVersion = match[0][3] as Integer
+
+                  def currentFullVersion = majorVersion + "." + minorVersion + "." + bugfixVersion
+                  def currentShortVersion = majorVersion + "." + minorVersion
+                  def currentNextIncrementalVersion = majorVersion + "." + minorVersion + "." + (bugfixVersion + 1)
+                  def currentNextMinorVersion = majorVersion + "." + (minorVersion + 1) + ".0"
+
+                  print "\nCurrent full version:             " + currentFullVersion + " (current-full-version)"
+                  project.properties['current-full-version'] = currentFullVersion
+                  print "\nCurrent short version:            " + currentShortVersion + "   (current-short-version)"
+                  project.properties['current-short-version'] = currentShortVersion
+                  print "\nCurrent next incremental version: " + currentNextIncrementalVersion + " (current-next-incremental-version)"
+                  project.properties['current-next-incremental-version'] = currentNextIncrementalVersion
+                  print "\nCurrent next minor version:       " + currentNextMinorVersion + " (current-next-minor-version)"
+                  project.properties['current-next-minor-version'] = currentNextMinorVersion
+                }
+                print "\n"
+              </source>
+            </configuration>
+          </execution>
+        </executions>
+        <dependencies>
+          <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+            <version>2.10.5</version>
+          </dependency>
+        </dependencies>
+      </plugin>
+
+      <!-- Write all the properties into a file so we can access them from asciidoctor -->
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>properties-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>pre-site</phase>
+            <goals>
+              <goal>write-project-properties</goal>
+            </goals>
+            <configuration>
+              <outputFile>${project.build.directory}/pom.adoc</outputFile>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+    </plugins>
+
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.codehaus.mojo</groupId>
+          <artifactId>properties-maven-plugin</artifactId>
+          <version>1.0.0</version>
+        </plugin>
+
+        <plugin>
+          <groupId>org.codehaus.mojo</groupId>
+          <artifactId>buildnumber-maven-plugin</artifactId>
+          <version>1.4</version>
+        </plugin>
+
+        <plugin>
+          <groupId>org.codehaus.gmaven</groupId>
+          <artifactId>groovy-maven-plugin</artifactId>
+          <version>2.1.1</version>
+        </plugin>
+
+        <plugin>
+          <groupId>com.google.code.maven-replacer-plugin</groupId>
+          <artifactId>replacer</artifactId>
+          <version>1.5.3</version>
+        </plugin>
+
+        <!-- Configure the Site generation -->
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.8.2</version>
+          <configuration>
+            <!--templateFile>${session.executionRootDirectory}/src/site/template/site.vm</templateFile-->
+            <generateReports>true</generateReports>
+            <generateSitemap>true</generateSitemap>
+            <relativizeDecorationLinks>false</relativizeDecorationLinks>
+            <locales>en</locales>
+            <inputEncoding>${project.build.sourceEncoding}</inputEncoding>
+            <outputEncoding>${project.reporting.outputencoding}</outputEncoding>
+            <!--
+              IntelliJ can't find the asciidoc config option in the site plugin, which is correct.
+              However this config section is used by the asciidoctor site plugin extension. So plead
+              ignore this error, it's actually ok.
+            -->
+            <asciidoc>
+              <attributes>
+                <source-highlighter>prettify</source-highlighter>
+                <imagesoutdir>${project.build.directory}/site/images</imagesoutdir>
+                <pom-adoc>${project.build.directory}/pom.adoc</pom-adoc>
+              </attributes>
+              <requires>
+                <require>asciidoctor-diagram</require>
+              </requires>
+            </asciidoc>
+          </configuration>
+          <dependencies>
+            <!-- All dependencies needed by the reflow skin -->
+            <dependency>
+              <groupId>io.github.devacfr.maven.skins</groupId>
+              <artifactId>reflow-velocity-tools</artifactId>
+              <version>${reflow.skin.version}</version>
+            </dependency>
+
+            <!-- add support for scm/git site deployment -->
+            <dependency>
+              <groupId>org.apache.maven.wagon</groupId>
+              <artifactId>wagon-scm</artifactId>
+              <version>2.12</version>
+            </dependency>
+            <dependency>
+              <groupId>org.apache.maven.scm</groupId>
+              <artifactId>maven-scm-api</artifactId>
+              <version>1.9.5</version>
+            </dependency>
+            <dependency>
+              <groupId>org.apache.maven.scm</groupId>
+              <artifactId>maven-scm-manager-plexus</artifactId>
+              <version>1.9.5</version>
+            </dependency>
+            <dependency>
+              <groupId>org.apache.maven.scm</groupId>
+              <artifactId>maven-scm-provider-gitexe</artifactId>
+              <version>1.9.5</version>
+            </dependency>
+
+            <!-- Add support for asciidoctor -->
+            <dependency>
+              <groupId>org.asciidoctor</groupId>
+              <artifactId>asciidoctor-maven-plugin</artifactId>
+              <version>${asciidoctor.maven.plugin.version}</version>
+            </dependency>
+            <dependency>
+              <groupId>org.asciidoctor</groupId>
+              <artifactId>asciidoctorj</artifactId>
+              <version>${asciidoctorj.version}</version>
+            </dependency>
+            <dependency>
+              <groupId>org.asciidoctor</groupId>
+              <artifactId>asciidoctorj-diagram</artifactId>
+              <version>${asciidoctorj.diagram.version}</version>
+            </dependency>
+          </dependencies>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+
+  <!-- Make Snapshots of Apache projects available -->
+  <repositories>
+    <repository>
+      <id>apache-snapshots</id>
+      <url>https://repository.apache.org/content/repositories/snapshots</url>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+    </repository>
+  </repositories>
+
+  <!-- Make Snapshots of Apache plugins available -->
+  <pluginRepositories>
+    <pluginRepository>
+      <id>apache-snapshots</id>
+      <url>https://repository.apache.org/content/repositories/snapshots</url>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+    </pluginRepository>
+  </pluginRepositories>
+
+</project>
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/building.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/building.adoc
new file mode 100644
index 0000000..28f4143
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/building.adoc
@@ -0,0 +1,129 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+== Building PLC4X
+
+PLC4X is built with `Apache Maven` and we have tried to make the build as simple as possible.
+
+However PLC4X aims at providing means to communicate with PLCs of multiple vendors using a shared API but also in a variety of different languages.
+
+We have partitioned the build to allow selecting the parts that are of interest.
+This is done by selecting so-called `Maven profiles`.
+More about these later down in this manual.
+
+For your convenience we also have provided a `Maven-Wrapper`, that should allow building of PLC4X with only `Java 8` or greater as requirement.
+
+=== Requirements
+
+The only requirements to building PLC4X should be:
+
+* Java 8 JDK (or newer - latest tested version: Java 12)
+* Git (Even if you are building the source distribution, the Kafka plugin seems to require a `git` executable being available on the systems `PATH`)
+* Apache Maven (3.1.0 or newer) *(Optional)* (See next chapter)
+
+=== Using the Maven-Wrapper
+
+The so-called `Maven-Wrapper` is used by calling the Maven-Wrapper scripts `mvnw` (Mac & Linux) or `mvnw.cmd` (Windows) instead of the default Maven commands `mvn` and `mvn.cmd`.
+
+These helpers ensure Maven is available in at least the version defined in `.mvn/maven-wrapper.properties`.
+If no suitable version can be found, it is automatically downloaded and installed alongside the project (So it doesn't have to be downloaded every time and every project can have it's own Maven version)
+
+After the script has ensured a suitable Maven version is available, this is used and all arguments and parameters are transparently forwarded to this.
+So simply adding the additional `w` to each of the Maven commands, there should be no difference to using a pre-installed Maven version.
+
+=== Using Maven
+
+This document can't provide you with all the details needed to get started with `Maven` itself.
+But there is a lot of good documentation out there.
+
+Justin McLean and Christofer Dutz even recorded a not quite 2 hour Maven training Video some time ago for another Apache project.
+
+It should handle all the details needed to get a general understanding of Maven and how it works.
+
+.Recording of a Maven Training for Apache Flex from 2016
+video::167857327[vimeo,width=640,height=420]
+
+=== Building PLC4X with Maven
+
+In general all modules which are not considered production-ready are located in the `sandbox` section of the project.
+
+They are not built per default and are enabled by enabling the `with-sandbox` Maven profile.
+
+As especially building the C++, and C# drivers requires building of some third party artifacts and increases build-time dramatically and requires setting up some additional third party tools, we have excluded these parts form the default Maven build.
+
+The following profiles are available (*They have to be enabled additionally to the `with-sandbox` profile*):
+
+- `with-cpp`: Builds all C++ related modules, integrations and examples
+- `with-dotnet`: Builds all C# and .Net related modules, integrations and examples
+- `with-python`: Builds all Python related modules, integrations and examples
+
+WARNING: As these profiles typically require some preparation and setup on your development machine, please read the link:preparing.html[Preparing your Computer] guide for a detailed description on this.
+
+Beyond that there is an additional profile `with-proxies` which will enable additional modules in each of the activated languages.
+This `proxies` module, uses `Apache Thrift` to generate modules for forwarding requests to an `interop server` which runs somewhere else or on the same machine.
+
+WARNING: Currently when enabling the `with-python` module, you are required to also enable the `with-proxies` profile too as this is currently required there but will probably change in the near future.
+
+PLC4X is built by executing the following command (Example for building all modules):
+
+    mvn -P with-sandbox,with-cpp,with-dotnet,with-python,with-proxies install
+
+This not only builds the artifacts and creates the jar files, but also runs all unit- and integration-tests.
+
+If you want to skip the running of tests (even if this is not encouraged) you can skip them all together.
+
+    mvn -P with-sandbox,with-cpp,with-dotnet,with-python,with-proxies install -DskipTests
+
+This will not skip the compilation of tests however.
+
+=== Building the PLC4X Website with Maven
+
+The PLC4X Website is also part of the same GIT repository that contains the code and it is built by Maven as well.
+
+In order to build the website the following command should be sufficient:
+
+    mvn site
+
+However this will generate the website for each module inside it's `target/site` directory.
+Opening this in a browser and navigating from pages of one module to another will not work as these links expect a different directory structure.
+In order to create a fully navigatable version of the Website, the following command should be sufficient:
+
+    mvn site site:stage
+
+This will generate an additional `target/staging` directory which contains the fully functional version.
+
+A lot of documentation on Maven suggests to use the `site:site` goal directly instead of calling the `site` phase, but in case of PLC4X there is more than just the site generation that has to be executed.
+
+This is just a quick-start version of the site generation, for a fully detailed documentation please read the http://plc4x.apache.org/developers/website.html[Website] documentation page.
+
+=== Some special Maven profiles
+
+Maven supports so-called `profiles` for customizing the build in special cases.
+We have tried to keep the number of profiles as low as possible.
+So far there is only one profile.
+
+==== debug-pom profile
+
+Especially for Maven beginners, it might be difficult to understand why a module builds the way it does.
+Maven contains a lot of concepts to inherit and override settings.
+
+The `debug-pom` profile will generate the so-called `effective pom` in the modules `target` directory.
+
+This file contains 100% of the settings Maven uses to execute. All settings are inherited and overridden.
+All Properties are expanded to the value Maven uses.
+
+So whenever Maven doesn't behave the way you expect it to, just enable this profile and it should help you find out, what's going on.
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/ci.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/ci.adoc
new file mode 100644
index 0000000..8c768fc
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/ci.adoc
@@ -0,0 +1,63 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+:imagesdir: ../images/
+
+== Continuous Integration
+
+We are currently using Apache's `Jenkins` as single CI system.
+
+- Apache's Jenkins at: https://builds.apache.org/view/M-R/job/PLC4X/
+
+However we might add Travis for automatically building and testing Pull-Requests in the near future.
+
+Hereby Apache Jenkins' clearly is responsible for running the full testsuite with all integration-tests.
+Also only jobs on Apache Jenkins are allowed to publish SNAPSHOT versions of the Maven artifacts to `Apaches Nexus` at: https://repository.apache.org.
+
+=== Structure of the Jenkins Pipeline build
+
+We are using the Jenkins `multi-branch pipeline plugin` to automatically setup build for branches based upon the build definition in the `Jenkinsfile` in the root of the project.
+
+In general it builds the `develop` branch and all branches starting with the prefix `feature/`.
+However when building the `develop` branch some additional steps are performed.
+
+When building `develop` the build not only builds the project itself and runs all tests, it also runs the `sonarcloud` analysis, deploys the artifacts built to the `Apache Nexus` as well as generates and deploys the website.
+
+The general structure of the build is as follows:
+
+[blockdiag,developers-ci-pipeline,svg]
+....
+{
+  Start [shape = beginpoint];
+  Initialization [label = "Initialization"];
+  Cleanup [label = "Cleanup"];
+  Checkout [color = "#068D9D", textcolor="#FFFFFF"];
+  Build [label = "Build"];
+  BuildDevelop [label = "Build develop"];
+  CodeQuality [label = "Code Quality"];
+  Deploy [label = "Deploy"];
+  BuildSite [label = "Build Site"];
+  StageSite [label = "Stage site"];
+  DeploySite [label = "Deploy site"];
+  Finish [shape = endpoint];
+
+  Start -> Initialization -> Cleanup -> Checkout;
+  Checkout -> Build [label = "feature branch"];
+  Build -> Finish;
+  Checkout -> BuildDevelop [label = "develop"];
+  BuildDevelop -> CodeQuality -> Deploy -> BuildSite -> StageSite -> DeploySite; -> Finish;
+}
+....
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/code-gen/index.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/code-gen/index.adoc
new file mode 100644
index 0000000..c6ad292
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/code-gen/index.adoc
@@ -0,0 +1,396 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+:imagesdir: ../../images/
+
+== Code Generation
+
+As hand-writing code for a lot of drivers in multiple languages would be quite a nightmare, we have invested a very large amount of time into finding a way to automate this.
+
+So in the end we need 3 parts:
+
+1. Protocol definition
+2. Language template
+3. A maven plugin which generates the code
+
+This maven plugin uses a given protocol definition as well as a language template and generates code for reading/writing data in that protocol with the given language.
+
+[ditaa,code-generation-intro]
+....
+                  +------------+
+                  |c05A        |
+                  |  Language  |
+       +--------->|    Base    |------------+
+       |          |            |            |
+       |          +------------+            v
++------------+                       +------------+      +------------+
+|c05A        |                       |c05A        |      |            |
+|   Types    |                       |   PLC4X    |      |            |
+|    Base    |                       |   Maven    |----->|    Code    |
+|            |                       |   Plugin   |      |            |
++------------+                       +------------+      +------------+
+       |          +------------+            ^
+       |          |c05A        |            |
+       |          |  Protocol  |            |
+       +--------->|    Base    |------------+
+                  |            |
+                  +------------+
+....
+
+The `Types Base` module provides all the structures the `Protocol` modules output which are then used in the `Language` templates to generate code.
+
+`Protocol Base` and `Language Base` hereby just provide the interfaces that reference these types and provide the API for the `plc4x-maven-plugin` to use.
+
+These modules are also maintained in a repository which is separate from the rest of the PLC4X code.
+
+This is due to some restrictions in the Maven build system. If you are interested in understanding the reasons - please read the chapter on `Problems with Maven` near the end of this page.
+
+Concrete protocol spec parsers and templates that actually generate code are implemented in derived modules.
+
+Also didn't we want to tie ourselves to only one way to specify protocols and to generate code.
+
+This adds another layer to the hierarchy.
+
+So for example in case of generating a Siemens S7 Driver for Java this would look like this:
+
+[ditaa,code-generation-intro-s7-java]
+....
+               +------------+
+               |c05A        |
+               |   Types    |
+       +-------|    Base    |--------+
+       |       |            |        |
+       |       +------------+        |
+       v                             v
++------------+                +------------+
+|c05A        |                |c05A        |
+|  Protocol  |                |  Language  |
+|    Base    |                |    Base    |
+|            |                |            |
++------------+                +------------+
+       |                             |
+       |                             |
+       v                             v
++------------+                +------------+
+|c0BA        |                |c0BA        |
+|  Protocol  |                |  Language  |
+|    Base    |                |    Base    |
+|   MSpec    |                | Freemarker |
++------------+                +------------+
+       |                             |
+       |                             |
+       v                             v
++------------+                +------------+
+|c0BA        |                |c0BA        |
+|     S7     |                |    Java    |
+|  Protocol  |                |  Language  |
+|            |                |            |
++------------+                +------------+
+       |                             |
+       |                             |
+       |       +------------+        |
+       |       |c05A        |        |
+       |       |   PLC4X    |        |
+       +------>|   Maven    |<-------+
+               |   Plugin   |
+               +------------+
+                      |
+                      |
+                      v
+               +------------+
+               |c0BA        |
+               |     S7     |
+               |    Java    |
+               |    Code    |
+               +------------+
+....
+
+The dark blue parts are the ones released externally, the turquoise ones are part of the main PLC4X repo.
+
+=== Introduction
+
+The maven plugin is built up very modular.
+
+So in general it is possible to add new forms of providing protocol definitions as well as language templates.
+
+For the formats of specifying a protocol we have tried out numerous tools and frameworks, however the results were never quite satisfying.
+
+Usually using them required a large amount of workarounds, which made the solution quite complicated.
+
+In the end only DFDL and the corresponding Apache project https://daffodil.apache.org[Apache Daffodil (incubating)] seemed to provide what we were looking for.
+
+With this we were able to provide first driver versions fully specified in XML.
+
+The downside was, that the PLC4X community regarded this XML format as pretty complicated and when implementing an experimental code generator we quickly noticed that generating a nice object model would not be possible, due to the lack ability to model the inheritance of types in DFDL.
+
+In the end we came up with our own solution which we called `MSpec` and is described in the link:protocol/mspec.html[MSpec Format description].
+
+=== Configuration
+
+The `plc4x-maven-plugin` has a very limited set of configuration options.
+
+In general all you need to specify, is the `protocolName` and the `languageName`.
+
+There is also an additional parameter: `outputDir`, which defaults to `${project.build.directory}/generated-sources/plc4x/` and usually shouldn't require being changed.
+
+Here's an example of a driver pom for building a `S7` driver for `java`:
+
+....
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.plc4x.plugins</groupId>
+    <artifactId>plc4x-code-generaton</artifactId>
+    <version>0.6.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>test-java-s7-driver</artifactId>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.plc4x.plugins</groupId>
+        <artifactId>plc4x-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>test</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>generate-driver</goal>
+            </goals>
+            <configuration>
+              <protocolName>s7</protocolName>
+              <languageName>java</languageName>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.plc4x.plugins</groupId>
+      <artifactId>plc4x-code-generation-driver-base-java</artifactId>
+      <version>0.6.0-SNAPSHOT</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.plc4x.plugins</groupId>
+      <artifactId>plc4x-code-generation-language-java</artifactId>
+      <version>0.6.0-SNAPSHOT</version>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.plc4x.plugins</groupId>
+      <artifactId>plc4x-code-generation-protocol-s7</artifactId>
+      <version>0.6.0-SNAPSHOT</version>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+
+</project>
+....
+
+So the plugin configuration is pretty straight forward, all that is specified, is the `protocolName` and the `languageName`.
+
+The dependency:
+
+    <dependency>
+      <groupId>org.apache.plc4x.plugins</groupId>
+      <artifactId>plc4x-code-generation-driver-base-java</artifactId>
+      <version>0.6.0-SNAPSHOT</version>
+    </dependency>
+
+For example contains all classes the generated code relies on.
+
+The definitions of both the `s7` protocol as well as the `java` language are provided by the two dependencies:
+
+    <dependency>
+      <groupId>org.apache.plc4x.plugins</groupId>
+      <artifactId>plc4x-code-generation-language-java</artifactId>
+      <version>0.6.0-SNAPSHOT</version>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+
+and:
+
+    <dependency>
+      <groupId>org.apache.plc4x.plugins</groupId>
+      <artifactId>plc4x-code-generation-protocol-s7</artifactId>
+      <version>0.6.0-SNAPSHOT</version>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+
+The reason for why the dependencies are added as code-dependencies and why the scope is set the way it is is described in the <<Why are the protocol and language dependencies done so strangely?>> section.
+
+=== Custom Modules
+
+The plugin uses the https://docs.oracle.com/javase/7/docs/api/java/util/ServiceLoader.html[Java Serviceloader] mechanism to find modules.
+
+==== Protocol Modules
+
+In order to provide a new protocol module, all that is required, it so create a module containing a `META-INF/services/org.apache.plc4x.plugins.codegenerator.protocol.Protocol` file referencing an implementation of the `org.apache.plc4x.plugins.codegenerator.protocol.Protocol` interface.
+
+This interface is located in the `org.apache.plc4x.plugins:plc4x-code-generation-protocol-base` module and generally only defines two methods:
+
+....
+package org.apache.plc4x.plugins.codegenerator.protocol;
+
+import org.apache.plc4x.plugins.codegenerator.types.definitions.ComplexTypeDefinition;
+import org.apache.plc4x.plugins.codegenerator.types.exceptions.GenerationException;
+
+import java.util.Map;
+
+public interface Protocol {
+
+    /**
+     * The name of the protocol what the plugin will use to select the correct protocol module.
+     *
+     * @return the name of the protocol.
+     */
+    String getName();
+
+    /**
+     * Returns a map of complex type definitions for which code has to be generated.
+     *
+     * @return the Map of types that need to be generated.
+     * @throws GenerationException if anything goes wrong parsing.
+     */
+    Map<String, ComplexTypeDefinition> getTypeDefinitions() throws GenerationException;
+
+}
+....
+
+These implementations could use any form of way to generate the Map of `ComplexTypeDefinition`'s.
+They could even be hard coded.
+
+However we have currently implemented utilities for universally providing input:
+
+- link:protocol/mspec.html[MSpec Format] PLC4X proprietary format.
+
+==== Language Modules
+
+Analog to the <<Protocol Modules>> the Language modules are constructed equally.
+
+The `Language` interface is very simplistic too and is located in the `org.apache.plc4x.plugins:plc4x-code-generation-language-base` module and generally only defines two methods:
+
+....
+package org.apache.plc4x.plugins.codegenerator.language;
+
+import org.apache.plc4x.plugins.codegenerator.types.definitions.ComplexTypeDefinition;
+import org.apache.plc4x.plugins.codegenerator.types.exceptions.GenerationException;
+
+import java.io.File;
+import java.util.Map;
+
+public interface LanguageOutput {
+
+    /**
+     * The name of the template is what the plugin will use to select the correct language module.
+     *
+     * @return the name of the template.
+     */
+    String getName();
+
+    void generate(File outputDir, String packageName, Map<String, ComplexTypeDefinition> types)
+        throws GenerationException;
+
+}
+....
+
+The file for registering Language modules is located at: `META-INF/services/org.apache.plc4x.plugins.codegenerator.language.LanguageOutput`
+
+Same as with the protocol modules, the language modules could too be implemented in any thinkable way, however we have already implemented some helpers for using:
+
+- link:language/freemarker.html[Apache Freemarker Format] Generate output using https://freemarker.apache.org[Apache Freemarker] Project.
+
+=== Problems with Maven
+
+==== Why are the 4 modules released separately?
+
+We mentioned in the introduction, that the first 4 modules are maintained and released from outside the main PLC4X repository.
+
+This is due to some restrictions in Maven, which result from the way Maven generally works.
+
+The main problem is that when starting a build, in the `validate` phase, Maven goes through the configuration, downloads the plugins and configures these.
+This means that Maven also tries to download the dependencies of the plugins too.
+
+In case of using a Maven plugin in a project which also produces the maven plugin, this is guaranteed to fail - Especially during releases.
+While during normal development, Maven will probably just download the latest `SNAPSHOT` from our Maven repository and be happy with this and not complain that this version will be overwritten later on in the build.
+It will just use the new version as soon as it has to.
+
+During releases however the release plugin changes the version to a release version and then spawns a build.
+In this case the build will fail because there is no Plugin with that version to download.
+In this case the only option would be to manually build and install the plugin in the release version and to re-start the release (Which is not a nice thing for the release manager).
+
+For this reason we have stripped down the plugin and it's dependencies to an absolute minimum and have released (or will release) that separately from the rest, hoping due to the minimality of the dependencies that we will not have to do it very often.
+
+As soon as the tooling is released, the version is updated in the PLC4X build and the release version is used without any complications.
+
+==== Why are the protocol and language dependencies done so strangely?
+
+It would certainly be a lot cleaner, if we provided the modules as plugin dependencies.
+
+However, as we mentioned in the previous sub-chapter, Maven tries to download and configure the plugins prior to running the build.
+So during a release the new versions of the modules wouldn't exist, this would cause the build to fail.
+
+We could release the protocol- and the language modules separately too, but we want the language and protocol modules to be part of the project, to not over-complicate things - especially during a release.
+
+So the Maven plugin is built in a way, that it uses the modules dependencies and creates it's own Classloader to contain all of these modules at runtime.
+
+This brings the benefit of being able to utilize Maven's capability of determining the build order and dynamically creating the modules build classpath.
+
+Adding a normal dependency however would make Maven deploy the artifacts with the rest of the modules.
+
+We don't want that as the modules are useless as soon as they have been used to generate the code.
+
+So we use a trick that is usually used in Web applications, for example:
+Here the vendor of a Servlet engine is expected to provide an implementation of the `Servlet API`.
+It is forbidden for an application to bring this along, but it is required to build the application.
+
+For this the Maven scope `provided`, which tells Maven to provide it during the build, but to exclude it from any applications it builds because it will be provided by the system running the application.
+
+This is not quite true, but it does the trick.
+
+
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/code-gen/language/freemarker.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/code-gen/language/freemarker.adoc
new file mode 100644
index 0000000..2fd324b
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/code-gen/language/freemarker.adoc
@@ -0,0 +1,117 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+:imagesdir: ../../../images/
+
+== Apache Freemarker
+
+For the Freemarker language output we are using an unmodified version of https://freemarker.apache.org[Apache Freemarker] to generate output.
+
+The boilerplate code for providing a PLC4X language module is located in the `org.apache.plc4x.plugins:plc4x-code-generation-language-base-freemarker` maven module, inside the `FreemarkerLanguageOutput` class.
+
+This class configures a Freemarker context and provides standardized attributes inside this:
+
+- packageName: Java style package name which can be used to create some form of directory structure.
+- typeName: Simple string type name
+- type: `ComplexTypeDefinition` instance containing all the information for the type that code should be generated for.
+- helper: As some times it is pretty complicated to create all the output in Freemarker, the helper allows to provide code that is used by the template that help with generating output.
+
+A Freemarker-based output module, has to provide a list of `Template` instances as well as provide a `FreemarkerLanguageTemplateHelper` instance.
+
+What the `FreemarkerLanguageOutput` then does, is iterate over all complex types provided by the protocol module, and then iterates over all templates the current language defines.
+
+The only convention used in this utility, is that the first line of output a template generates will be treated as the path relative to the base output directory.
+
+It will automatically create all needed intermediate directories and generate the rest of the input to the file specified by the first line.
+
+If this line is empty, the output is skipped for this instance.
+
+=== Example `Java` output
+
+....
+package org.apache.plc4x.language.java;
+
+import freemarker.template.*;
+import org.apache.plc4x.plugins.codegenerator.protocol.freemarker.FreemarkerLanguageOutput;
+import org.apache.plc4x.plugins.codegenerator.protocol.freemarker.FreemarkerLanguageTemplateHelper;
+import org.apache.plc4x.plugins.codegenerator.types.definitions.ComplexTypeDefinition;
+
+import java.io.*;
+import java.util.*;
+
+public class JavaLanguageOutput extends FreemarkerLanguageOutput {
+
+    @Override
+    public String getName() {
+        return "Java";
+    }
+
+    protected List<Template> getTemplates(Configuration freemarkerConfiguration) throws IOException {
+        return Arrays.asList(
+            freemarkerConfiguration.getTemplate("templates/java/pojo-template.ftlh"),
+            freemarkerConfiguration.getTemplate("templates/java/io-template.ftlh"));
+    }
+
+    protected FreemarkerLanguageTemplateHelper getHelper(Map<String, ComplexTypeDefinition> types) {
+        return new JavaLanguageTemplateHelper(types);
+    }
+
+}
+....
+
+As you can see, this output generates up to two files for every complex type.
+
+This is one file, providing the code for the POJO itself.
+The second one generates the IO-component, which contains all the code for parsing and serializing the corresponding POJO.
+
+In other languages, for example `C++` it's possible to use a third one to generate Header files or for `Python` perhaps only one in total.
+
+Here an example for a part of a template for generating Java POJOs:
+
+....
+${packageName?replace(".", "/")}/${typeName}.java
+/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/
+
+package ${packageName};
+
+import org.apache.plc4x.java.utils.SizeAware;
+
+public<#if type.abstract> abstract</#if> class ${typeName}<#if type.parentType??> extends ${type.parentType.name}</#if> implements SizeAware {
+
+    ... SNIP ...
+
+}
+....
+
+So as you can see, the first line will generate the file-path of the to be generated output.
+Which is followed
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/code-gen/protocol/df1.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/code-gen/protocol/df1.adoc
new file mode 100644
index 0000000..a598cad
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/code-gen/protocol/df1.adoc
@@ -0,0 +1,94 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      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.
+//
+
+== Example: DF1 MSpec
+
+The DF1 protocol has three basic messages: a command message, acknowledge and not acknowledge.
+A `0x10` is used as delimiter to differentiate between the messages and parts of the command message.
+
+[width="25%",cols="^,^"]
+|============
+|ACK | NAK
+
+|10 06 |10 15
+|============
+
+
+This is what a read command message looks like in full-duplex mode using CRC as checksum:
+[cols="^,^,^,^,^,^,^,^,^,^,^,^,^"]
+|===
+|Name | DLE | STX | DST | SRC | CMD | STS | TNS | ADDR | SIZE | DLE | ETX | CRC
+
+|Value | 10 | 02 | XX | XX | 01 | 00 | XX XX | XX XX | 02 | 10 | 03 | XX XX
+|===
+
+The according response with the requested byte data:
+[cols="^,^,^,^,^,^,^,^,^,^,^,^,^"]
+|===
+|Name | DLE | STX | DST | SRC | CMD | STS | TNS | DATA | SIZE | DLE | ETX | CRC
+
+|Value | 10 | 02 | XX | XX | 41 | 00 | XX XX | XX XX | 02 | 10 | 03 | XX XX
+|===
+
+Every message starts with a `DLE = 0x10`. The second byte is used to differentiate what type of message will follow.
+In the case of a command message it is `0x02`. DST and SRC specify the target and source of the message.
+`CMD = 0x01` means an unprotected read is requested, the command response code is always attained with the addition of `0x40`. STS is a status byte,
+TNS is the transaction counter that is incremented by the master and used to recognize the specific message response.
+ADDR is the memory address being requested, size specifies how many bytes are to be read.
+DLE + ETX mark the end of the message, the last two bytes are the CRC that is calculated using the previously sent bytes.
+
+Here is the MSpec to model the behaviour:
+
+....
+[discriminatedType 'DF1Symbol'
+    [const            uint 8       'messageStart' '0x10']
+    [discriminator    uint 8       'symbolType']
+    [typeSwitch 'symbolType'
+        ['0x02' DF1SymbolMessageFrame
+            [simple   uint 8       'destinationAddress']
+            [simple   uint 8       'sourceAddress']
+            [simple   DF1Command   'command']
+            [const    uint 8       'messageEnd' '0x10']
+            [const    uint 8       'endTransaction' '0x03']
+            [checksum uint 16      'crc' 'STATIC_CALL("org.apache.plc4x.java.df1.util.DF1Utils.crcCheck", destinationAddress, sourceAddress, command)']
+        ]
+        ['0x06' DF1SymbolMessageFrameACK
+        ]
+        ['0x15' DF1SymbolMessageFrameNAK
+        ]
+    ]
+]
+
+[discriminatedType 'DF1Command'
+    [discriminator uint 8  'commandCode']
+    [simple    uint 8       'status']
+    [simple    uint 16      'transactionCounter']
+    [typeSwitch 'commandCode'
+        ['0x01' DF1UnprotectedReadRequest
+            [simple uint 16    'address']
+            [simple uint 8     'size']
+        ]
+        ['0x41' DF1UnprotectedReadResponse
+            [manualArray  uint 8 'data' terminated 'STATIC_CALL("org.apache.plc4x.java.df1.util.DF1Utils.dataTerminate", io)' 'STATIC_CALL("org.apache.plc4x.java.df1.util.DF1Utils.readData", io)' 'STATIC_CALL("org.apache.plc4x.java.df1.util.DF1Utils.writeData", io, element)' 'STATIC_CALL("org.apache.plc4x.java.df1.util.DF1Utils.dataLength", data)']
+        ]
+    ]
+]
+....
+
+The basic object is the DF1Symbol, where the second byte is used to distinguish between the different message types using a typeSwitch.
+In the case of a command message, the message frame contains the DF1Command to further differentiate between the command types.
+Currently only the unprotected read and its response are implemented.
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/code-gen/protocol/mspec.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/code-gen/protocol/mspec.adoc
new file mode 100644
index 0000000..357beda
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/code-gen/protocol/mspec.adoc
@@ -0,0 +1,351 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+:imagesdir: ../../../images/
+
+== The MSpec format
+
+The `MSpec` format (Message Specification) was a result of a brainstorming session after evaluating a lot of other options.
+
+We simply sat down and started to write some imaginary format (`imaginary` was even the initial Name we used) and created parses for this afterwards and fine tuned spec and parsers as part of the process of implementing first protocols and language templates.
+
+It's a text-based format.
+
+At the root level of these specs are a set of `type` or `discriminatedType` blocks.
+
+`type` elements are objects that are independent from the input.
+
+An example would be the `TPKTPacket` of the S7 format:
+
+....
+[type 'TPKTPacket'
+    [const    uint 8     'protocolId' '0x03']
+    [reserved uint 8     '0x00']
+    [implicit uint 16    'len'        'payload.lengthInBytes + 4']
+    [field    COTPPacket 'payload']
+]
+....
+
+A `discriminatedType` type is in contrast an object who's content is dependent in the input.
+
+Every discriminated type can contain at most one `discriminator` field and exactly one `typeSwitch` element.
+
+For example part of the spec for the S7 format looks like this:
+
+....
+[discriminatedType 'S7Message'
+    [const         uint 8  'protocolId'      '0x32']
+    [discriminator uint 8  'messageType']
+    [reserved      uint 16 '0x0000']
+    [field         uint 16 'tpduReference']
+    [implicit      uint 16 'parameterLength' 'parameter.lengthInBytes']
+    [implicit      uint 16 'payloadLength'   'payload.lengthInBytes']
+    [typeSwitch 'messageType'
+        ['0x01' S7MessageRequest
+        ]
+        ['0x03' S7MessageResponse
+            [field uint 8 'errorClass']
+            [field uint 8 'errorCode']
+        ]
+        ['0x07' S7MessageUserData
+        ]
+    ]
+    [field S7Parameter 'parameter' ['messageType']]
+    [field S7Payload   'payload'   ['messageType', 'parameter']]
+]
+....
+
+An types start is declared by an opening square bracket `[` and ended with a closing one `]`.
+
+Also to both provide a name as first argument.
+
+Every type definition contains a list of fields that can have different types.
+
+The list of available types are:
+
+- const: expects a given value
+- reserved: expects a given value, but only warns if condition is not meet
+- field: simple or complex typed object
+- array: array of simple or complex typed objects
+- optional: simple or complex typed object, that is only present in some conditions
+- implicit: a field required for parsing, but is usually defined though other data
+- discriminator: special type of simple typed field which is used to determine the concrete type of an object (max one per type and always has to be accompanied with a `switch` field) (reserved for `discriminatedType`)
+- typeSwitch: not a real field, but indicates the existence of sub-types, which are declared inline (reserved for `discriminatedType`)
+
+The full syntax and explanations of these type follow in the following chapters.
+
+Another thing we have to explain are how types are specified.
+
+In general we distinguish between two types of types used in field definitions:
+
+- simple types
+- complex types
+
+=== Simple Types
+
+Simple types are usually raw data the format is:
+
+    {base-type} {size}
+
+The base types available are currently:
+
+- *bit*: Simple boolean value
+- *uint*: The input is treated as unsigned integer value
+- *int*: The input is treated as signed integer value
+- *float*: The input is treated as floating point number
+- *string*: The input is treated as string
+
+The size value then provides how many `bits` should be read.
+
+In case of `string` types, it refers to the number of characters.
+
+So reading an unsigned byte would be: `uint 8`.
+
+=== Complex Types
+
+In contrast to simple types, complex type reference other complex types (Root elements of the spec document).
+
+How the parser should interpret them is defined in the referenced types definition.
+
+In the example above, for example the `S7Parameter` is defined in another part of the spec.
+
+=== Field Types and their Syntax
+
+==== array Field
+
+An `array` field is exactly what you expect.
+It generates an field which is not a single-value element but an array or list of elements.
+
+    [array {simple-type} {size} '{name}' {'count', 'length', 'terminated'} '{expression}']
+
+    [array {complex-type} '{name}' {'count', 'length', 'terminated'} '{expression}']
+
+Array types can be both simple and complex typed and have a name.
+An array field must specify the way it's length is determined as well as an expression defining it's length.
+Possible values are:
+- `count`: This means that exactly the number of elements are parsed as the `expression` specifies.
+- `length`: In this case a given number of bytes are being read. So if an element has been parsed and there are still bytes left, another element is parsed.
+- `terminated`: In this case the parser will continue reading elements until it encounters a termination sequence.
+
+==== checksum Field
+
+A checksum field can only operate on simple types.
+
+    [checksum {simple-type} {size} '{name}' '{checksum-expression}']
+
+When parsing a given simple type is parsed and then the result is compared to the value the `checksum-expression` provides.
+If they don't match an exception is thrown.
+
+When serializing, the `checksum-expression` is evaluated and the result is then output.
+
+This field doesn't keep any data in memory.
+
+See also:
+- implicit field: A checksum field is similar to an implicit field, however the `checksum-expression` is evaluated are parsing time and throws an exception if the values don't match.
+
+==== const Field
+
+A const field simply reads a given simple type and compares to a given reference value.
+
+    [const {simple-type} {size} '{name}' '{reference}']
+
+When parsing it makes the parser throw an Exception if the parsed value does not match.
+
+When serializing is simply outputs the expected constant.
+
+This field doesn't keep any data in memory.
+
+See also:
+- implicit field: A const field is similar to an implicit field, however it compares the parsed input to the reference value and throws an exception if the values don't match.
+
+==== discriminator Field
+
+Discriminator fields are only used in `discriminatedType`s.
+
+    [discriminator {simple-type} {size} '{name}']
+
+When parsing a discriminator fields result just in being a locally available variable.
+
+When serializing is accesses the discriminated types constants and uses these as output.
+
+See also:
+- implicit field: A discriminator field is similar to an implicit field, however doesn't provide a serialization expression as it uses the discrimination constants of the type it is.
+- discriminated types
+
+==== implicit Field
+
+Implicit types are fields that get their value implicitly from the data they contain.
+
+    [implicit {simple-type} {size} '{name}' '{serialization-expression}']
+
+When parsing an implicit type is available as a local variable and can be used by other expressions.
+
+When serializing the serialization-expression is executed and the resulting value is output.
+
+This type of field is generally used for fields that handle numbers of elements or length values as these can be implicitly calculated at serialization time.
+
+This field doesn't keep any data in memory.
+
+==== manualArray Field
+
+    [manualArray {simple-type} {size} '{name}' {'count', 'length', 'terminated'} '{loop-expression}' '{serialization-expression}' '{deserialization-expression}' '{length-expression}']
+
+    [manualArray {complex-type} '{name}' {'count', 'length', 'terminated'} '{loop-expression}' '{serialization-expression}' '{deserialization-expression}' '{length-expression}']
+
+==== manual Field
+
+    [manual {simple-type} {size} '{name}' '{serialization-expression}' '{deserialization-expression}' '{length-expression}']
+
+    [manual {complex-type} '{name}' '{serialization-expression}' '{deserialization-expression}' '{length-expression}']
+
+==== optional Field
+
+An optional field is a type of field that can also be `null`.
+
+    [optional {simple-type} {size} '{name}' '{optional-expression}']
+
+    [optional {complex-type} '{name}' '{optional-expression}']
+
+When parsing the `optional-expression` is evaluated. If this results in`false` nothing is output, if it evaluates to `true` it is serialized as a `simple` field.
+
+When serializing, if the field is `null` nothing is output, if it is not `null` it is serialized normally.
+
+See also:
+- simple field: In general `optional` fields are identical to `simple` fields except the ability to be `null` or be skipped.
+
+==== padding Field
+
+A padding field outputs additional padding data, if an expression evaluates to `true`.
+
+    [padding {simple-type} {size} '{pading-value}' '{padding-expression}']
+
+When parsing a `padding` field is just consumed without being made available as property or local valiable if the `padding-expression` evaluates to true.
+If it doesn't, it is just skipped.
+
+This field doesn't keep any data in memory.
+
+==== reserved Field
+
+Reserved fields are very similar to `const` fields, however they don't throw exceptions, but instead log messages if the values don't match.
+
+The reason for this is that in general reserved fields have the given value until they start to be used.
+
+If the field starts to be used this shouldn't break existing applications, but it should raise a flag as it might make sense to update the drivers.
+
+    [reserved {simple-type} {size} '{name}' '{reference}']
+
+When parsing the values is parsed and the result is compared to the reference value.
+If the values don't match, a log message is sent.
+
+This field doesn't keep any data in memory.
+
+See also:
+- `const` field
+
+==== simple Field
+
+Simple fields are the most common types of fields.
+A `simple` field directly mapped to a normally typed field.
+
+    [simple {simple-type} {size} '{name}']
+
+    [simple {complex-type} '{name}']
+
+When parsing, the given type is parsed (can't be `null`) and saved in the corresponding model instance's property field.
+
+When serializing it is serialized normally.
+
+==== virtual Field
+
+Virtual fields have no impact on the input or output.
+They simply result in creating artificial get-methods in the generated model classes.
+
+    [virtual {simple-type} {size} '{name}' '{value-expression}']
+
+    [virtual {complex-type} '{name}' '{value-expression}']
+
+Instead of being bound to a property, the return value of a `virtual` property is created by evaluating the `value-expression`.
+
+==== typeSwitch Field
+
+These types of fields can only occur in discriminated types.
+
+A `discriminatedType` must contain *exactly one* `typeSwitch` field, as it defines the sub-types.
+
+    [typeSwitch '{arument-1}', '{arument-2}', ...
+        ['{argument-1-value-1}' {subtype-1-name}
+            ... Fields ...
+        ]
+        ['{vargument-1-value-2}', '{argument-2-value-1}' {subtype-2-name}
+            ... Fields ...
+        ]
+        ['{vargument-1-value-3}', '{argument-2-value-2}' {subtype-2-name} [uint 8 'existing-attribute-1', uint 16 'existing-attribute-2']
+            ... Fields ...
+        ]
+
+A type switch element must contain a list of at least one argument expression.
+Only the last option can stay empty, which results in a default type.
+
+Each sub-type declares a comma-separated list of concrete values.
+
+It must contain at most as many elements as arguments are declared for the type switch.
+
+The matching type is found during parsing by starting with the first argument.
+
+If it matches and there are no more values, the type is found, if more values are provided, they are compared to the other argument values.
+
+If no type is found, an exception is thrown.
+
+Inside each sub-type can declare fields using a subset of the types (`discriminator` and `typeSwitch` can't be used here)
+
+The third case in above code-snippet also passes a named attribute to the sub-type.
+The name must be identical to any argument or named field parsed before the switchType.
+These arguments are then available for expressions or passing on in the subtypes.
+
+See also:
+- `discriminatedType`
+
+==== Parameters
+
+Some times it is necessary to pass along additional parameters.
+
+If a complex type requires parameters, these are declared in the header of that type.
+
+....
+[discriminatedType 'S7Payload' [uint 8 'messageType', S7Parameter 'parameter']
+    [typeSwitch 'parameter.discriminatorValues[0]', 'messageType'
+        ['0xF0' S7PayloadSetupCommunication]
+        ['0x04','0x01' S7PayloadReadVarRequest]
+        ['0x04','0x03' S7PayloadReadVarResponse
+            [arrayField S7VarPayloadDataItem 'items' count 'CAST(parameter, S7ParameterReadVarResponse).numItems']
+        ]
+        ['0x05','0x01' S7PayloadWriteVarRequest
+            [arrayField S7VarPayloadDataItem 'items' count 'COUNT(CAST(parameter, S7ParameterWriteVarRequest).items)']
+        ]
+        ['0x05','0x03' S7PayloadWriteVarResponse
+            [arrayField S7VarPayloadStatusItem 'items' count 'CAST(parameter, S7ParameterWriteVarResponse).numItems']
+        ]
+        ['0x00','0x07' S7PayloadUserData
+        ]
+    ]
+]
+....
+
+Therefore wherever a complex type is referenced an additional list of parameters can be passed to the next type.
+
+Here comes an example of this in above snippet:
+
+    [field S7Payload   'payload'   ['messageType', 'parameter']]
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/conferences.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/conferences.adoc
new file mode 100644
index 0000000..9224a00
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/conferences.adoc
@@ -0,0 +1,49 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+== Conferences & Events
+
+On this page we are listing options to attend talks and events around PLC4X.
+
+[width="100%",cols="2,^2,2,^2,^3",options="header"]
+|=========================================================
+|Date |Location |Type |Event | Title
+|18th June 2019 |Erfurt (GER) |Meetup |https://www.meetup.com/de-DE/iothde/events/260140057/[IoT Thüringen] |Industrie & IoT: Die perfekte Verbindung mit Flexibus & Apache PLC4X
+|24th May 2019  |Frankfurt (GER) |Meetup |https://www.meetup.com/de-DE/IoT-Hessen/events/261422034/[IoT Hessen] |Industrial IoT goes Open Source: Apache PLC4X Talks & Party
+|3th April 2019 |Cologne (GER) |Conference |https://www.buildingiot.de[Building IoT] |Apache PLC4X: Industry 4.0 done our way
+|8th March 2019 |Solingen (GER) |Conference |https://www.codecentric.de/2019/02/05/industrial-iot-day-solingen[Industrial IoT Day] |Apache PLC4X: Industry 4.0 done our way
+|21th February 2019 |Aachen (GER) |Meetup | http://www.euregjug.eu/2019/01/29/episode-iv-a-new-hope-industry-40-done-our-way[EURegJUG Maas-Rhine] |Episode IV - A New Hope: Industry 4.0 Done Our Way
+|15th February 2019 |Nürtingen (GER) |Meetup | PLC4X Meetup |Special Hackathon looking deeper into some new Protocols
+|15th November 2018 |Düsseldorf (GER) |Meetup |RheinJUG |http://www.rheinjug.de/rheinjug/event/2018/11/15/wie-wir-mit-apache-plc4x-die-silos-in-der-automatisierungsindustrie-aufbrechen.html[Wie wir mit Apache PLC4X die Silos in der Automatisierungsindustrie aufbrechen]
+|12th-13th November 2018 |Berlin (GER) |Conference |https://www.sv-veranstaltungen.de/fachbereiche/big-data-3/[3. Fachkonferenz: Industrial Analytics & Big Data in der Industrie] |Kommunikation mit Industrieanlagen ohne Umbau- und Lizenzkosten
+|22th-24th October 2018 |Edinburgh (GB) |Conference |https://events.linuxfoundation.org/events/open-source-summit-europe-2018/[Open-Source Summit Europe] |Revolutionizing the production industry with Apache PLC4X
+|24th-19th September 2018 |Montreal (CAN) |Conference |http://apachecon.com/acna18/?ref=apachecon.com[ApacheCon NA 2018] |https://apachecon.dukecon.org/acna/2018/#/scheduledEvent/51feeb6f55f250c39[Revolutionizing the Production Industry with Apache PLC4X (incubating)]
+|20th September 2018 |Nürtingen (GER) |Meetup |PLC4X Meetup |First general committer meetup
+|13th-14th June 2018 |Berlin (GER) |Conference |http://www.apachecon.com/euroadshow18/#[Apache EU Roadshow] |https://foss-backstage.de/session/revolutionizing-production-industry-apache-plc4x[Revolutionizing the production industry with Apache PLC4X]
+|4th June 2018 |Cologne (GER) |Conference |https://www.buildingiot.de/[Building IoT] |https://www.buildingiot.de/veranstaltung-6815-industrial-iot-und-edge-computing-mit-apache-plc4x-und-apache-edgent-%5Bsponsored-talk%5D.html?id=6815[Industrial IoT und Edge Computing mit Apache PLC4X und Apache Edgent]
+|5th April 2018 |Hamburg (GER) |Conference |https://techcamp.hamburg/[TechCamp Hamburg] |https://techcamp.hamburg/events/revolutionizing-industrial-iot-with-apache-plc4x/[Revolutionizing Industrial IoT with Apache PLC4X]
+|21th January 2018 |Hamburg (GER) |Conference |https://www.nortec-hamburg.de/[Nortec] |Mehr für Weniger? Aber Sicher!
+|4th-5th May 2019 |Brussels (BE) |Hackathon |https://eufossahackathon.bemyapp.com[EU FOSSA Apache Hackathon] | Co-creating the future of open source
+|=========================================================
+
+Looking forward to meeting you.
+
+If you've got or found any events or talks we might be missing, please inform us on dev@plc4x.apache.org.
+
+== Additional Material
+
+link:/images/PLC4X_rollup_83x237cm-final.pdf[PLC4X Banner]
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/contributing.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/contributing.adoc
new file mode 100644
index 0000000..78a1f9d
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/contributing.adoc
@@ -0,0 +1,202 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+:imagesdir: ../images/
+
+== Contributing
+
+=== Forms of contribution
+
+There are multiple forms in which you can become involved with the PLC4X project.
+
+These usually are, but are not limited to:
+
+- Submitting Pull Requests
+- Filing Bug-Reports
+- Active communication on our mailing lists
+- Promoting the project (articles, blog posts, talks at conferences)
+- Documentation
+
+We are a very friendly bunch and don't be afraid to step forward.
+
+=== Pull-Requests
+
+The simplest way to submit code changes, is via a GitHub pull-request.
+
+In order to do this first create a GitHub account and sign into you account.
+
+After that's done, please to to our https://github.com/apache/plc4x[GitHub site] and create a so-called `Fork`.
+
+image::contributing-github-fork.png[]
+
+What happens now, is that GitHub creates a full copy of the PLC4X repo in your account. Only you can commit to this.
+
+Now ideally you check-out your cloned repository:
+
+    git clone https://github.com/{your-user-id}/plc4x.git
+
+Now you have a copy of PLC4X on your computer and you can change whatever you want and as it's your copy, you can even commit these changes without any danger of breaking things.
+
+As soon as you're finished with your changes and want us to have a look, it's time to create a so-called `Pull-Request`.
+
+You do that by going to your forked repository page on GitHub.
+
+Every forked repository has an additional button called "New Pull Request":
+
+image::contributing-github-create-pull-request.png[]
+
+If you click on this, we will receive a notification on your changes and can review them.
+We also can discuss your changes and have you perfect your pull request before we accept and merge it into PLC4X.
+
+==== Keeping your fork up to date
+
+As we are continuously working on PLC4X and you created a copy of our repo, this will become out-of-date pretty soon.
+
+In order get the changes we introduced in the official repo you have to tell git about that.
+
+You do this locally by adding a new so-called `remote`.
+Per default the remote you cloned from is called `origin`.
+
+Usually you will call the second remote `upstream` but in general you can call it whatever you like.
+
+Add the remote on the commandline (or your git gui of choice):
+
+    git remote add upstream https://github.com/apache/plc4x.git
+
+If you list all your remotes, with the following command:
+
+    git remote -v
+
+It should output something like this:
+
+    origin    https://github.com/{your-user-id}/plc4x.git (fetch)
+    origin    https://github.com/{your-user-id}/plc4x.git (push)
+    upstream    https://github.com/apache/plc4x.git (fetch)
+    upstream    https://github.com/apache/plc4x.git (push)
+
+If that's so, you're fine to continue, if not ... well you could ask for assistance on our dev-list.
+
+In order to get all changes of our upstream-repository, just execute the following command:
+
+    git pull upstream
+
+This will get all changed from upstream and merge them locally. In order to update your GitHub version, you have to push things back to `origin`.
+You can do this by executing the following command:
+
+    git push
+
+(If no remote is provided, git will use `origin` per default)
+
+===  Bug Reports
+
+We use https://issues.apache.org/jira/projects/PLC4X[JIRA] as our Bug & Issue Tracker.
+
+Feel free to submit `feature requests`, `bug reports`, `patches`, `comment on issues`, ...
+
+In order to be able to do so, you need to create an account first.
+
+Currently Apache has a separate login system for JIRA and all other services, this might change in the future, but right now it's the way things are.
+
+So if you are considering to contribute more than just a one-time-patch, please choose a username that hasn't been used by an existing http://people.apache.org/committer-index.html[Apache committer] as this will simplify things if we invite you to become part of the team.
+
+If you want to be assigned to an issue because you want to work on it, please request to be added to the JIRA groups on our http://plc4x.apache.org/mailing-lists.html[developers mailing list]
+
+=== Documentation
+
+As our documentation and website are generated as a side-product of our build, contributing to this technically the same as contributing to the code.
+
+All our content is written in Asciidoctor and is located in `src/site/asciidoc` directories.
+For a reference of the Asciidoctor syntax please have a look at the https://asciidoctor.org/docs/user-manual/#introduction-to-asciidoctor[Asciidoctor documentation].
+
+=== Branching model
+
+The PLC4X project uses the following branching model.
+
+The same model is used for a wide variety of other projects, so it should be pretty straight forward.
+
+- `master` contains the latest released state.
+- Development is performed on the `develop` branch.
+- Features are developed in Feature-Branches with a prefix `feature/`
+- Each minor release has a corresponding release branch `rel/{major-version}.{minor-version}`
+- A release branch is spawned from `develop` only
+- Bugfix releases don't have a dedicated release branch, they are just performed on the corresponding minor versions release branch
+
+// Use http://www.webgraphviz.com/ for online editiing this ...
+[graphviz, plc4x-branching-model, png]
+----
+digraph g{
+    rankdir="LR";
+    pad=0.5;
+    nodesep=0.6;
+    ranksep=0.5;
+    forcelabels=true;
+
+    node [fixedsize=true,
+        shape=circle, style=empty, color="#909090", height=0.5
+        fontcolor="deepskyblue", font="Arial bold", fontsize="14pt" ];
+    edge [color="#909090", penwidth=3];
+
+    node  [group="master"];
+    m1    [label="master", width=0.9];
+    m2   [label="0.2.0", width=0.9];
+    m3   [label="0.2.1", width=0.9];
+    m4   [label="", shape=circle, color="#b0b0b0"];
+    m1 -> m2 -> m3
+    m3 -> m4 [color="#b0b0b0", style=dashed];
+
+    node  [group="rel/0.1", Ylabel="hurz"];
+    r11   [label="rel/0.1", width=2, shape=box];
+    r12   [label="0.1.0-SNAPSHOT", width=2, shape=box];
+    r13   [label="0.1.0", width=0.9];
+    r14   [label="0.1.1-SNAPSHOT", width=2, shape=box];
+    r15   [label="", shape=circle, color="#b0b0b0"];
+    r11 -> r12 -> r13 -> r14;
+    r14 -> r15 [color="#b0b0b0", style=dashed];
+    r13 -> m1
+
+    node  [group="rel/0.2", Ylabel="hurz"];
+    r21   [label="rel/0.2", width=2, shape=box];
+    r22   [label="0.2.0-SNAPSHOT", width=2, shape=box];
+    r23   [label="0.2.0", width=0.9];
+    r24   [label="0.2.1-SNAPSHOT", width=2, shape=box];
+    r25   [label="0.2.1", width=0.9];
+    r26   [label="0.2.2-SNAPSHOT", width=2, shape=box];
+    r27   [label="", shape=circle, color="#b0b0b0"];
+    r21 -> r22 -> r23 -> r24 -> r25 -> r26;
+    r26 -> r27 [color="#b0b0b0", style=dashed];
+    r23 -> m2
+    r25 -> m3
+
+    node  [group="develop"];
+    d1    [label="develop", width=2, shape=box];
+    d2    [label="0.1.0-SNAPSHOT", width=2, shape=box];
+    d3    [label="0.1.0-SNAPSHOT", width=2, shape=box];
+    d4    [label="0.2.0-SNAPSHOT", width=2, shape=box];
+    d5    [label="0.2.0-SNAPSHOT", width=2, shape=box];
+    d6    [label="0.2.0-SNAPSHOT", width=2, shape=box];
+    d7    [label="0.3.0-SNAPSHOT", width=2, shape=box];
+    d8    [label="0.3.0-SNAPSHOT", width=2, shape=box];
+    d9    [label="0.3.0-SNAPSHOT", width=2, shape=box];
+    d10    [label="", shape=circle, color="#b0b0b0"];
+    d1 -> d2 -> d3 -> d4 -> d5 -> d6 -> d7 -> d8 -> d9;
+    d9 -> d10 [color="#b0b0b0", style=dashed];
+
+    d3 -> r11
+    d6 -> r21
+}
+----
+
+
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/decisions.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/decisions.adoc
new file mode 100644
index 0000000..bdb6f89
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/decisions.adoc
@@ -0,0 +1,66 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+:imagesdir: ../images/
+
+== Decision Making
+
+=== Introduction
+
+This document describes the roles and responsibilities of the project, who may vote, how voting works, how conflicts are resolved, etc.
+
+The https://www.apache.org/foundation/faq[Apache Foundation FAQ] and http://www.apache.org/foundation/faq.html[How-It-Works] explain the operation and background of the foundation. Terms used are defined in the https://www.apache.org/foundation/glossary[ASF glossary].
+
+Apache has a http://www.apache.org/foundation/policies/conduct.html[code of conduct] that it expects its members to follow.
+
+=== Roles and Responsibilities
+
+Apache projects define a set of https://www.apache.org/foundation/how-it-works.html#roles[roles] with associated rights and responsibilities.
+
+==== Project Management Committee
+
+The http://www.apache.org/dev/pmc.html#what-is-a-pmc[PMC] has many https://www.apache.org/foundation/how-it-works.html#pmc[responsibilities] including complying with http://www.apache.org/dev/pmc.html#policy[ASF policies], https://www.apache.org/foundation/board/reporting[reporting to the board], https://www.apache.org/foundation/voting.html[approving releases] and adding new http://www.apache.org/dev/pmc.html#newcommitter[committers] and http://www.apache.org/dev/pmc.html#newpmc[PMC members].
+
+==== The Chair
+
+The http://www.apache.org/dev/pmc.html#chair[chair] ensures board reports are submitted and that the project's roster is up to date.
+
+=== Decision Making
+
+Different decisions require different forms of approval but community consensus is always the goal. Voting when needed should be open for http://www.apache.org/legal/release-policy.html#release-approval[at least 72 hours].
+
+- https://www.apache.org/foundation/glossary.html#ConsensusApproval[Consensus Approval] – Consensus approval requires 3 https://www.apache.org/foundation/voting.html#binding-votes[binding] +1 votes and no -1 votes (https://www.apache.org/foundation/glossary.html#Veto[vetoes]).
+- https://www.apache.org/foundation/glossary.html#MajorityApproval[Majority Approval] – requires at least 3 https://www.apache.org/foundation/voting.html#binding-votes[binding] +1 votes more +1 votes than -1 votes.
+- https://www.apache.org/foundation/glossary.html#LazyConsensus[Lazy Consensus] – consensus no objections (‘silence gives assent’).
+
+|===
+|Action                     |Who can vote |Approval           |Where to vote             |Board approval required
+|Code change                |Committer    |Lazy Consensus     |public dev or commit list |
+|Release                    |PMC          |Majority Approval  |public dev list           |
+|New committer              |PMC          |Consensus Approval |private list              |
+|New PMC member             |PMC          |Consensus Approval |private list              |Yes 1)
+|Existing committer removal |PMC          |Consensus Approval |private list              |
+|Existing PMC removal       |PMC          |Consensus Approval |private list              |Yes 2)
+|Change chair               |PMC          |Consensus Approval |private list              |Yes 3)
+|===
+
+1. http://www.apache.org/dev/pmc.html#notice_period[Notice] must be given to board.
+2. Except PMC member in question. Only the board can http://www.apache.org/dev/pmc.html#pmc-removal[remove PMC members].
+3. Need to be http://www.apache.org/dev/pmc.html#newchair[approved by the board] at the next board meeting.
+
+
+
+
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/issues.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/issues.adoc
new file mode 100644
index 0000000..f813330
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/issues.adoc
@@ -0,0 +1,20 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+== Bug & Issue Tracker
+
+https://issues.apache.org/jira/projects/PLC4X
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/jqassistant.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/jqassistant.adoc
new file mode 100644
index 0000000..0bbbde5
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/jqassistant.adoc
@@ -0,0 +1,126 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+:imagesdir: ../images/
+
+== Using JQAssistant
+
+In PLC4X we are using a tool called `https://jqassistant.org/[JQAssistant]` for enforcing quality assurance rules.
+
+`JQAssistant` can be thought of as a set of two components:
+
+- A set of scanners that analyse a project and stores the gathered information in for of linked graphs in a Neo4j database.
+- An engine that executes defined rules against the graph created during the scan phase of the build
+
+These rules can produce either reports and tables or they are used to enforce rules.
+
+If a pre-defined rule is violated the failed checks can be marked as `warning` or `error` that breaks the build.
+
+In contrast to using the `maven-enforcer-plugin` doing cross-domain checks is really simple as all information is available in one big graph.
+
+Currently the following scanners are active:
+
+- CDI
+- Common
+- Common Test
+- Core Analysis
+- EJB3
+- GraphML
+- JAX-RS
+- JPA 2
+- JSON
+- JUnit
+- Java
+- Java 8
+- Java EE 6
+- Maven 3
+- OSGi
+- RDBMS
+- TestNG
+- Tycho
+- XML
+- YAML
+
+These rules that are automatically checked during the build are defined in `src/jjqassistant`.
+If defined in a reactor project, the rules apply to all modules of that (sub-)reactor.
+So if they are defined in the root module of the project, it applies to all modules.
+
+=== Defining JQAssistant rules
+
+TODO: Finish this "little detail" ...
+
+=== Using the Web-UI
+
+The scan and analysis is automatically performed during a normal Maven build.
+In order to do ad-hoc queries against the project or develop new rules, the Web-UI is very helpful.
+
+To start the Web-UI, all you need to do, is run the following command (after a build):
+
+   mvn jqassistant:server
+
+This will start a Neo4j server with web console.
+
+   [INFO] --- jqassistant-maven-plugin:1.3.0:server (default-cli) @ plclogger ---
+   [INFO] Connecting to store at 'file:/Users/christofer.dutz/Projects/Apache/PLC4X/target/jqassistant/store/'
+   2018-04-05 19:11:14.369+0200 INFO  [o.n.s.CommunityNeoServer] No SSL certificate found, generating a self-signed certificate..
+   2018-04-05 19:11:14.683+0200 INFO  [o.n.s.CommunityNeoServer] Starting HTTP on port 7474 (8 threads available)
+   2018-04-05 19:11:14.859+0200 INFO  [o.n.s.w.Jetty9WebServer] Mounting static content at /webadmin
+   2018-04-05 19:11:14.892+0200 INFO  [o.n.s.w.Jetty9WebServer] Mounting static content at /browser
+   Apr 05, 2018 7:11:15 PM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
+   INFORMATION: Initiating Jersey application, version 'Jersey: 1.19 02/11/2015 03:25 AM'
+   Apr 05, 2018 7:11:15 PM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
+   INFORMATION: Initiating Jersey application, version 'Jersey: 1.19 02/11/2015 03:25 AM'
+   Apr 05, 2018 7:11:15 PM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
+   INFORMATION: Initiating Jersey application, version 'Jersey: 1.19 02/11/2015 03:25 AM'
+   2018-04-05 19:11:15.396+0200 INFO  [o.n.s.CommunityNeoServer] Remote interface ready and available at http://localhost:7474/
+   [INFO] Running server for module org.apache.plc4x:plc4x-parent:0.0.1-SNAPSHOT
+   [INFO] Press <Enter> to finish.
+
+So when visiting the anounced url with a browser, you can use the pretty useful neo4j web console.
+
+image::neo4j-web-console.png[Neo4j Web Console]
+
+=== Using IntelliJ Idea
+
+IntelliJ comes with some interesting Neo4J support. Unfortunately this only supports `Neo4j 3`.
+
+Unfortunately the process of enabling this toolset is a little less comfortable than the Web-UI version.
+
+Even if JQAssistant uses `Neo4j 2` per default, we can force it to use `Neo4j 3` by providing an additional commandline parameter.
+
+    mvn -Djqassistant.neo4jVersion=3 clean install
+
+JQAssistant uses Neo4j 3 and the resulting data directory is then in Neo4j 3 format.
+
+In this case the server has to be started with the same parameter:
+
+   mvn -Djqassistant.neo4jVersion=3 jqassistant:server
+
+As soon as the server is started, we can connect from the IntelliJ plugin.
+
+Note: The connection settings also contain a username and a password.
+
+image::neo4j-intellij-settings.png[width=800]
+
+It appears that this can simply be left empty of can contain random values.
+
+After creating the connection, the `Graph Neo4j` view should list the new connection.
+
+image::neo4j-intellij-database-connections-view.png[width=300]
+
+You can now use this to perform queries
+
+image::neo4j-intellij-query-results.png[width=800]
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/maturity.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/maturity.adoc
new file mode 100644
index 0000000..51ae0c9
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/maturity.adoc
@@ -0,0 +1,76 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+:icons: font
+
+== Apache Maturity Model Assessment for PLC4X
+
+=== Overview
+
+This is an assessment of the PLC4X podling’s maturity, meant to help inform the decision (of the mentors, community, Incubator PMC and ASF Board of Directors) to graduate it as a top-level Apache project.
+
+It is based on the ASF project maturity model at https://community.apache.org/apache-way/apache-project-maturity-model.html
+
+=== Maturity model assessment
+
+Mentors and community members are encouraged to contribute to this page and comment on it, the following table summarizes project’s self-assessment against the Apache Maturity Model.
+
+[width="100%",options="header"]
+|=========================================================
+|ID |Description |Status
+|*Code* 2+|icon:check[role=green]
+|CD10 |The project produces Open Source software, for distribution to the public at no charge. |icon:check[role=green] The project source code is licensed under the Apache License, version 2.0.
+|CD20 |The project's code is easily discoverable and publicly accessible. |icon:check[role=green] Our sourcecode is available at https://gitbox.apache.org/repos/asf/incubator-plc4x.git[Apache GitBox] and https://github.com/apache/incubator-plc4x[GitHub] and linked to from our https://plc4x.apache.org/scm.html[website]
+|CD30 |The code can be built in a reproducible way using widely available standard tools. |icon:check[role=green] our https://maven.apache.org[Maven] build has been tested on Linux, MacOS and Windows and build description is available on our https://plc4x.apache.org/developers/building.html[website]
+|CD40 |The full history of the project's code is available via a source code control system, in a way that allows any released version to be recreated. |icon:check[role=green] The entire commit history is available from the https://gitbox.apache.org/repos/asf?p=incubator-plc4x.git;a=commit;h=dd1fcf4649107762e91f7c494a10e55319a18785[beginning].
+|CD50 |The provenance of each line of code is established via the source code control system, in a reliable way based on strong authentication of the committer. When third-party contributions are committed, commit messages provide reliable information about the code provenance. |icon:check[role=green] The project uses the git repository, managed by Apache Infra, ensuring provenance of each line of code to a committer, each line committed before entering incubation was equally configured.
+|*Licenses and Copyright* 2+|icon:check[role=green]
+|LC10 |The code is released under the Apache License, version 2.0. |icon:check[role=green] Both the source distribution as well as the convenience binary artifacts clearly declare that they are licensed under the Apache 2.0 license
+|LC20 |Libraries that are mandatory dependencies of the project's code do not create more restrictions than the Apache License does. |icon:check[role=green] The list of mandatory dependencies have been reviewed to contain approved licenses only.
+|LC30 |The libraries mentioned in LC20 are available as Open Source software. |icon:check[role=green] All mandatory dependencies are available as open source software.
+|LC40 |Committers are bound by an Individual Contributor Agreement (the http://www.apache.org/licenses/icla.txt["Apache iCLA"]) that defines which code they are allowed to commit and how they need to identify code that is not their own. |icon:check[role=green] The project uses a repository managed by Apache Gitbox -- write access requires an Apache account, which requires an ICLA on file.
+|LC50 |The copyright ownership of everything that the project produces is clearly defined and documented. |All files in the source repository have appropriate headers which is enforced by tooling included in the build. ICLAs from all initial committers have been documented. CCLAs from all companies involved have been documented. SGA is on file for the initial contribution.
+|*Releases* 2+|icon:wrench[role=yellow]
+|RE10 |Releases consist of source code, distributed using standard and open archive formats that are expected to stay readable in the long term. |icon:check[role=green] https://dist.apache.org/repos/dist/release/incubator/plc4x/[Current source releases] are distributed via dist.apache.org and http://archive.apache.org/dist/incubator/plc4x/[Older source releases] are available from archive.apache.org. Both are linked from the http://plc4x.apache.org/users/download.html[website].
+|RE20 |Releases are approved by the project's PMC (see CS10), in order to make them an act of the Foundation. |icon:check[role=green] All incubating releases have been unanimously approved by the PLC4X community and the Incubator, all with at least 3 (P)PMC votes and more +1 than -1.
+|RE30 |Releases are signed and/or distributed along with digests that can be reliably used to validate the downloaded archives. |icon:check[role=green] All releases are signed, and the https://dist.apache.org/repos/dist/release/incubator/plc4x/KEYS[KEYS] file is provided on dist.apache.org
+|RE40 |Convenience binaries can be distributed alongside source code but they are not Apache Releases -- they are just a convenience provided with no guarantee. |icon:wrench[role=yellow] Convenience binaries are distributed via Maven Central Repository only. Currently due to the platform-dependency of C++ libraries, these are not distributed currently.
+|RE50 |The release process is documented and repeatable to the extent that someone new to the project is able to independently generate the complete set of artifacts required for a release. |icon:check[role=green] We have a guide for release managers, that has been tested by multiple release managers available on our http://plc4x.apache.org/developers/release.html[website].
+|*Quality* 2+|icon:check[role=green]
+|QU10 |The project is open and honest about the quality of its code. Various levels of quality and maturity for various modules are natural and acceptable as long as they are clearly communicated. |icon:check[role=green] All issues are documented in our https://issues.apache.org/jira/projects/PLC4X[JIRA] instance, which is our primary bug and issue tracker.
+|QU20 |The project puts a very high priority on producing secure software. |icon:check[role=green] even if we haven't received any security issues targeted at PLC4X yet, we pro-actively monitor our dependencies and if reported would treat them with the highest priority, according to the https://www.apache.org/security/committers.html[CVE/Security Advisory procedure].
+|QU30 |The project provides a well-documented, secure and private channel to report security issues, along with a documented way of responding to them. |icon:check[role=green] We are using Apaches default way to submit security related information, which is described on our http://plc4x.apache.org/users/security.html[website]
+|QU40 |The project puts a high priority on backwards compatibility and aims to document any incompatible changes and provide tools and documentation to help users transition to new features. |icon:check[role=green] We try to keep everything as backward compatible as possible. If we are forced to introduce incompatible changes, these is documented in a `Incompatible changes` section as part of our release notes.
+|QU50 |The project strives to respond to documented bug reports in a timely manner. |icon:check[role=green] Bug reports are treated with priority and are automatically posted to our developer mailing list https://lists.apache.org/list.html?dev@plc4x.apache.org so they are prominently recognised.
+|*Community* 2+|icon:check[role=green]
+|CO10 |The project has a well-known homepage that points to all the information required to operate according to this maturity model. |icon:check[role=green] The project website has a http://plc4x.apache.org/[description of the project] with technical details, http://plc4x.apache.org/developers/contributing.html[how to contribute], http://plc4x.apache.org/developers/team.html[team].
+|CO20 |The community welcomes contributions from anyone who acts in good faith and in a respectful manner and adds value to the project. |icon:check[role=green] So far we have recognized any form of contribution and every contributor with the desire to become part of the team has been invited to join.
+|CO30 |Contributions include not only source code, but also documentation, constructive bug reports, constructive discussions, marketing and generally anything that adds value to the project. |icon:check[role=green] It’s part of the http://plc4x.apache.org/developers/contributing.html[contribution guide] and the current committers are really keen to welcome contributions.
+|CO40 |The community is meritocratic and over time aims to give more rights and responsibilities to contributors who add value to the project. |icon:check[role=green] So far the community has elected 4 committers, all of them also being added to the PPMC.
+|CO50 |The way in which contributors can be granted more rights such as commit access or decision power is clearly documented and is the same for all contributors. |icon:check[role=green] The criteria is documented in the http://plc4x.apache.org/developers/contributing.html[contribution guide].
+|CO60 |The community operates based on consensus of its members (see CS10) who have decision power. Dictators, benevolent or not, are not welcome in Apache projects. |icon:check[role=green] The project works to build consensus. All votes have been unanimous so far.
+|CO70 |The project strives to answer user questions in a timely manner. |icon:check[role=green] Responses to reported issues or asked questions typically are handled by the community withing a matter of a few hours (Responses being faster during typical European time-zone business-hours).
+|*Consensus Building* 2+|icon:times[role=red]
+|CS10 |The project maintains a public list of its contributors who have decision power -- the project's PMC (Project Management Committee) consists of those contributors. |icon:wrench[role=yellow] We're currently working on filling the http://plc4x.apache.org/developers/team.html[team page].
+|CS20 |Decisions are made by consensus among PMC members 9 and are documented on the project's main communications channel. Community opinions are taken into account but the PMC has the final word if needed. |icon:check[role=green] All decisions are made on one of our mailing lists. Every decision discussed off-list has been taken back to the list for final discussion and we'll keep on doing that.
+|CS30 |Documented voting rules are used to build consensus when discussion is not sufficient. |icon:check[role=green] We have documented our decision making rule on our http://plc4x.apache.org/developers/decisions.html[website].
+|CS40 |In Apache projects, vetoes are only valid for code commits and are justified by a technical explanation, as per the Apache voting rules defined in CS30. |icon:times[role=red] This part actively contradicts the voting rules of the Apache Incubator. This project follows the voting rules of the Apache Incubator which we documented on our http://plc4x.apache.org/developers/decisions.html[website].
+|CS50 |All "important" discussions happen asynchronously in written form on the project's main communications channel. Offline, face-to-face or private discussions 11 that affect the project are also documented on that channel. |icon:check[role=green] As mentioned in CS20 it is impossible to prevent off-list discussions when meeting in person. But we have always handled things in a way that we always write up summaries of important discussions and post them to the mailing lists.
+|*Independence* 2+|icon:check[role=green]
+|IN10 |The project is independent from any corporate or organizational influence. |icon:check[role=green] The group of active committers and PPMCs consists of members of more than independent 4 companies.
+|IN20 |Contributors act as themselves as opposed to representatives of a corporation or organization. |icon:check[role=green] While there are several cases where committers and PPMC members utilize corporate infrastructure or these companies, no case has been found where any of these committers and PPMCs have represented corporate interests.
+|=========================================================
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/preparing.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/preparing.adoc
new file mode 100644
index 0000000..7ab93c9
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/preparing.adoc
@@ -0,0 +1,394 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+== Preparing your Computer
+
+Building a project like Apache PLC4X on multiple target operating-systems is quite a challenge, but I think we managed to make it as simple as possible.
+
+However when building any of the parts of PLC4X there are some requirements the build is expecting you to have provided.
+
+In order to build at all you are required to have `Java 8` installed on your machine.
+We have tested the build with Java 8 up to Java 13.
+If a new version comes out, please give us a little time to handle any related issues, but we'll probably fix them as soon as possible.
+However in the past with Oracle's new release strategy, there have been a few bumps on the road.
+
+[width=100%]
+|===
+| Profile        | Description                                              | Requirements
+|                | Builds Java API, drivers, integrations, examples        a|
+* Git
+* LibPCAP (Optional)
+| `with-cpp`     | Builds C++ API, drivers, integrations, examples         a|
+* gcc
+* g++
+| `with-dotnet`  | Builds C# and .Net API, drivers, integrations, examples a|
+* dotnet
+| `with-python`  | Builds Python API, drivers, integrations, examples      a|
+* python (2.7)
+| `with-proxies` | Adds proxy modules to each enabled language             a|
+* bison
+* flex
+* python
+|===
+
+The following chapters will describe how to provide these requirements sorted by operating system.
+
+=== Linux
+
+==== Git
+
+Checking:
+
+ git --version
+
+If you get any successful output, you probably don't need to do anything.
+
+Apt-based systems:
+
+ sudo apt-get install git
+
+Yum based systems:
+
+ sudo yum install git
+
+==== LibPCAP
+
+Apt-based systems:
+
+ sudo apt-get install libpcap-dev
+
+Yum based systems:
+
+ sudo yum install libpcap-devel
+
+==== gcc
+
+Checking:
+
+ gcc --version
+
+If you get any successful output, you probably don't need to do anything.
+
+Apt-based systems:
+
+ sudo apt-get install gcc
+
+Yum based systems:
+
+ sudo yum install gcc
+
+==== g++
+
+Checking:
+
+ g++ --version
+
+If you get any successful output, you probably don't need to do anything.
+
+Apt-based systems:
+
+ sudo apt-get install g++
+
+Yum based systems:
+
+ sudo yum install g++
+
+==== dotnet
+
+Checking:
+
+ dotnet --version
+
+If you get any successful output, you probably don't need to do anything.
+
+Microsoft has documented what is needed to install `.Net SDK` https://dotnet.microsoft.com/download/linux-package-manager/rhel/sdk-2.2.203[here]
+
+For Ubuntu this would be:
+
+ wget -q https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb
+ sudo dpkg -i packages-microsoft-prod.deb
+
+ sudo apt-get install apt-transport-https
+ sudo apt-get update
+ sudo apt-get install dotnet-sdk-2.2
+
+For other distributions, please select the distribution in the drop-down menu and follow the instructions there.
+
+==== python
+
+Checking:
+
+ python --version
+
+If you get a version of 2.7 or higher reported, you probably don't need to do anything.
+
+Apt-based systems:
+
+ sudo apt-get install python-dev
+
+Yum based systems:
+
+ yum install gcc
+ cd /usr/src
+ wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz
+ tar xzf Python-2.7.10.tgz
+ cd Python-2.7.10
+ ./configure
+ make altinstall
+
+==== bison
+
+Checking:
+
+ bison --version
+
+If you get a version above 2.3 output, you don't need to do anything.
+
+Apt-based systems:
+
+ sudo apt-get install bison
+
+Yum based systems:
+
+ sudo yum install bison-devel
+
+==== flex
+
+Checking:
+
+ flex --version
+
+If you get any successful output, you probably don't need to do anything.
+
+Apt-based systems:
+
+ sudo apt-get install flex
+
+Yum based systems:
+
+ sudo yum install flex
+
+=== macOS
+
+Most libraries on Mac are installed using `Homebrew`.
+
+Make sure `Homebrew` ist installed in order to install most of these.
+
+    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+
+==== Git
+
+Checking:
+
+ git --version
+
+If you get any successful output, you probably don't need to do anything.
+
+In order to install it, please execute the following command:
+
+ brew install git
+
+==== LibPCAP
+
+==== gcc
+
+Checking:
+
+ gcc --version
+
+If you get any successful output, you probably don't need to do anything.
+
+It seems macOS comes with a version of gcc which is good enough for our usecases.
+
+==== g++
+
+Checking:
+
+ g++ --version
+
+If you get any successful output, you probably don't need to do anything.
+
+It seems macOS comes with a version of g++ which is good enough for our usecases.
+
+==== dotnet
+
+Checking:
+
+ dotnet --version
+
+If you get any successful output, you probably don't need to do anything.
+
+Microsoft is offering an installer for MacOS which is available from https://dotnet.microsoft.com/download/dotnet-core/2.2[here].
+
+==== python
+
+Checking:
+
+ python --version
+
+If you get a version of 2.7 or higher reported, you probably don't need to do anything.
+
+In order to install it, please execute the following command:
+
+ brew install python@2
+
+==== bison
+
+Checking:
+
+ python --version
+
+If you get a version above 2.3 output, you don't need to do anything.
+
+macOS comes with a pre-installed version of bison, however this version is 2.3 and hereby too old.
+So you need to update to a more recent version:
+
+ brew install bison
+ brew link bison --force
+ echo 'export PATH="/usr/local/opt/bison/bin:$PATH"' >> ~/.bash_profile
+
+Be sure to reboot or at least restart your IDE or commandline in order for the changes to become effective.
+
+==== flex
+
+Checking:
+
+ flex --version
+
+If you get any successful output, you probably don't need to do anything.
+
+It seems macOS comes with a version of flex which is good enough for our usecases.
+
+=== Windows
+
+==== Git
+
+Checking:
+
+ git --version
+
+If you get any successful output, you probably don't need to do anything.
+
+In order to install it, please download end execute the installer from https://git-scm.com/download/win[here] and make sure to have it add the git executable to your systems `PATH`.
+
+==== LibPCAP
+
+A special version of LibPCAP is available for Windows, which is called WinPCAP.
+It is available from https://www.winpcap.org/[here].
+
+However this is a based on a very old version (1.0) of LibPCAP and in order to read PCAPNG files we require a libpcap version 1.1.0 or greater.
+A patched windows version can be found here: https://sourceforge.net/projects/winpcap413-176/
+(At this location is a patched version based on libpcap 1.7.4)
+
+So in order to install things correctly:
+
+1. install the version WinPCP from above location.
+2. Then download the patched version from the sourceforge link and unpack it somewhere.
+3. After that copy bin\x64\wpcap.dll from archive to \Windows\System32
+4. Copy bin\wpcap.dll from archive to \Windows\SysWOW64
+
+After this all should be working.
+
+==== gcc
+
+Checking:
+
+ gcc --version
+
+If you get any successful output, you probably don't need to do anything.
+
+On windows we will be using something called WinBuilds, which is sort of a package consisting of a typical build environment consisting of multiple build tools. So please look at the WinBuilds chapter at the end of the Windows section.
+
+==== g++
+
+Checking:
+
+ g++ --version
+
+If you get any successful output, you probably don't need to do anything.
+
+On windows we will be using something called WinBuilds, which is sort of a package consisting of a typical build environment consisting of multiple build tools. So please look at the WinBuilds chapter at the end of the Windows section.
+
+==== dotnet
+
+Checking:
+
+ dotnet --version
+
+If you get any successful output, you probably don't need to do anything.
+
+Usually this is already installed on Windows machines.
+
+==== python
+
+Checking:
+
+ python --version
+
+If you get any successful output, you probably don't need to do anything.
+
+You can get Python from https://www.python.org/downloads/release/python-2716/[here].
+
+Make sure directory containing `python.exe` is added to your systems `PATH`.
+Also make sure you restarted your IDE and or console window after changing the `PATH` settings for the changes to take effect.
+
+==== bison
+
+Checking:
+
+ bison --version
+
+If you get any successful output, you probably don't need to do anything.
+
+For Bison, please download the Setup installer version from http://gnuwin32.sourceforge.net/packages/bison.htm[here] (When using the zip version the bison.exe couldn't find some DLL files)
+It seems the official 2.4.1 version has issues when installed in a directory which's path contains spaces. Please make sure you replace the exe with a patched version form http://marin.jb.free.fr/bison/bison-2.4.1-modified.zip[here]
+(More infos on this issue https://sourceforge.net/p/gnuwin32/bugs/473/[here])
+
+It seems there are issues if these tools are installed in paths with spaces.
+So if it is for example installed in the 32 bit `Programs (x86)` directory, the build will probably fail.
+
+Make sure all tools `bin` directories are added to your systems `PATH`.
+For tools like OpenSSL be sure to add the directory containing the `openssl.exe` (Usually the root directory).
+Also make sure you restarted your IDE and or console window after changing the `PATH` settings for the changes to take effect.
+
+==== flex
+
+Checking:
+
+ flex --version
+
+If you get any successful output, you probably don't need to do anything.
+
+Please download the Flex compiler from http://gnuwin32.sourceforge.net/packages/flex.htm[here] (Ideally download the binary zip distribution)
+
+Make sure it's `bin` directory is added to your systems `PATH`.
+Also make sure you restarted your IDE and or console window after changing the `PATH` settings for the changes to take effect.
+
+==== WinBuilds
+
+He have tested WinBuilds with the bundle found http://win-builds.org/doku.php/download_and_installation_from_windows[here].
+
+WARNING: Please use the installer. When using the zip distribution and manually adding that to the `PATH` the build will fail without a log output as some binaries can't find some of the DLL files.
+
+When running the installer, make sure to select the options:
+- Native Windows
+- x86_64
+Not quite sure which elements are really needed, better just install all of them.
+
+Make sure it's `bin` directory is added to your systems `PATH`, however the installer should have taken care of this.
+Also make sure you restarted your IDE and or console window after changing the `PATH` settings for the changes to take effect.
+
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/release-build-tools.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/release-build-tools.adoc
new file mode 100644
index 0000000..fe6a6d6
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/release-build-tools.adoc
@@ -0,0 +1,461 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+include::{pom-adoc}[]
+:imagesdir: ../images/
+:icons: font
+
+== Releasing PLC4X Build-Tools
+
+In contrast to the main project, the `plc4x-build-tools` repository contains a loose collection of sub-projects.
+
+The main `pom.xml` in the root directory is mainly for allowing to import all modules into an IDE and shouldn't be used for releases.
+
+If you want to release a part of the build-tools, please execute the following release steps in the parts sub-directory.
+
+In general the preparation steps for releasing a build-tool is equal to those of the main project.
+So please check link:release.html[here] (Chapters: `Preparing your system for being able to release` and `Preparing the codebase for a release`)
+
+The rest of the steps are a lot simpler than those of the main project as there aren't any profiles involved.
+
+=== Creating a release branch (For the code-generation module)
+
+According to SemVer, we have: Major, Minor and Bugfix releases.
+
+For each new Major and Minor release we create a new branch at the beginning of a code-freeze phase.
+
+So if currently the project version in develop is `{current-full-version}-SNAPSHOT`, we create a branch `rel/{current-short-version}`.
+
+When creating the branch is exactly the moment in which the version in `develop` is incremented to the next minor version.
+
+This can and should be automated by the `maven-release-plugin`.
+
+Per default the plugin will ask for the working copy version during the build execution.
+This is the version the `develop` branch will be changed to.
+
+The parameter `autoVersionSubmodules` will tell the release plugin to release all modules with the same version.
+Otherwise we would have to define the working copy version for each module.
+
+   mvn release:branch -DbranchName=rel/code-generation/{minor-version} -DautoVersionSubmodules=true
+
+Per default the plugin suggests the next bugfix version as working version, however we want it to use the next minor version.
+So in case of preparing the release branch for `{project.version}` the command would be the following:
+
+[subs="verbatim,attributes"]
+----
+   mvn release:branch -DbranchName=rel/code-generation/{current-short-version} -DautoVersionSubmodules=true
+----
+
+The plugin will then aks for the version:
+
+[subs="verbatim,attributes"]
+----
+   What is the new working copy version for "PLC4X Build Tools: Code Generation"? (org.apache.plc4x.plugins:plc4x-code-generaton) {current-next-incremental-version}-SNAPSHOT: : {current-next-minor-version}-SNAPSHOT
+----
+
+Where the suggested default is manually overridden.
+
+This step now should perform quite quickly as no build and no tests are involved.
+
+However in the end the versions of the `develop` branch are updated and a new `rel/code-generation/{current-short-version}` branch is created.
+
+=== Preparing `develop` for the next iteration
+
+Now is a good time to add a new section to the `RELEASE_NOTES` document for the new `SNAPSHOT` version.
+
+Here comes a template:
+
+[subs="verbatim,attributes"]
+----
+==============================================================
+(Unreleased) Apache PLC4X {current-next-minor-version}-SNAPSHOT
+==============================================================
+
+New Features
+------------
+
+Incompatible changes
+--------------------
+
+Bug Fixes
+---------
+
+// Rest of the file
+
+----
+
+Also be sure to do a quick full-text-search to check if the version was updated correctly everywhere.
+
+WARNING: If you find anything here, you will need to pay attention during the release.
+
+=== Release stabilization phase
+
+Now usually comes a phase in which last tests and checks should be performed.
+
+If any problems are found they have to be fixed in the release branch.
+
+Changes should either be re applied in `develop` or `cherry-picked`, however merging things back can cause a lot of problems ans we no longer have the same versions.
+
+=== Preparing a release
+
+Before you start preparing the release it is important to manually make the `RELEASE_NOTES` reflect the version we are planning on releasing.
+
+So be sure to remove the `(Unreleased)` and `SNAPSHOT` from the version.
+
+As especially when switching a lot between different branches, it is recommended to do a clean checkout of the repository.
+Otherwise a lot of directories can be left over, which would be included in the source-release zip.
+In order to prepare a release-candidate, the first step is switching to the corresponding release-branch.
+
+After that, the following command will to all preparation steps for the release:
+
+   mvn release:prepare -DautoVersionSubmodules=true
+
+In general the plugin will now ask you 3 questions:
+
+1. The version we want to release as (It will suggest the version you get by omitting the `-SNAPSHOT` suffix)
+2. The name of the tag the release commit will be tagged with in the SCM (Name it `release/code-generation/{release-version}` (`release/code-generation/{current-full-version}` in our case)
+3. The next development version (The version present in the pom after the release) (`{current-next-minor-version}` in our case)
+
+Usually for 1 and 3 the defaults are just fine, make sure the tag name is correct as this usually is different.
+
+However it is important to check that nowhere else SNAPSHOT versions are referenced.
+
+What the plugin now does, is automatically execute the following operations:
+
+1. Check we aren't referencing any `SNAPSHOT` dependencies.
+2. Update all pom versions to the release version.
+3. Run a build with all tests
+4. Commit the changes (commit message: `[maven-release-plugin] prepare release release/code-generation/{current-full-version}`)
+5. Push the commit
+6. Tag the commit
+7. Update all poms to the next development version.
+8. Commit the changes (commit message: `[maven-release-plugin] prepare for next development iteration`)
+9. Push the commit
+
+However this just prepared the git repository for the release, we have to perform the release to produce and stage the release artifacts.
+
+Please verify the git repository at: https://gitbox.apache.org/repos/asf?p=plc4x-build-tools.git
+is in the correct state. Please select the release branch and verify the commit log looks similar to this
+
+image::release-git-history.png[]
+
+It is important that the commit with the message "[maven-release-plugin] prepare release release/code-generation/{current-full-version}" is tagged with the release tag (in this case release/code-generation/{current-full-version})
+
+If you check the commit itself, it should mainly consist of version updates like this:
+
+image::release-git-diff-prepare-release.png[]
+
+The root pom has a few more changes, but in general this should be what you are seeing.
+
+After that should come a second commit:
+
+image::release-git-diff-next-development-iteration.png[]
+
+This now updates the versions again, but this time from the release version to the one we selected for the next development iteration (in this case `{current-next-minor-version}-SNAPSHOT`)
+
+NOTE: If the commit history doesn't look like this, something went wrong.
+
+== What if something goes wrong?
+
+If something goes wrong, you can always execute:
+
+   mvn release:rollback
+
+And it will change the versions back and commit and push things.
+
+However it will not delete the tag in GIT (locally and remotely). So you have to do that manually or use a different tag next time.
+
+=== Performing a release
+
+This is done by executing another goal of the `maven-release-plugin`:
+
+   mvn release:perform
+
+This executes automatically as all information it requires is located in the `release.properties` file the `prepare` goal prepared.
+
+The first step is that the `perform` goal checks out the previously tagged revision into the root modules `target/checkout` directory.
+Here it automatically executes a maven build (You don't have to do this, it's just that you know what's happening):
+
+   mvn clean deploy -P apache-release
+
+As the `apache-release` profile is activated, this builds and tests the project as well as creates the JavaDocs, Source packages and signs each of these with your PGP key.
+
+As this time the build is building with release versions, Maven will automatically choose the release url for deploying artifacts.
+
+The way things are setup in the apache parent pom, is that release artifacts are deployed to a so-called `staging repository`.
+
+You can think of a `staging repository` as a dedicated repository created on the fly as soon as the first artifact comes in.
+
+After the build you will have a nice and clean Maven repository at https://repository.apache.org/ that contains only artifacts from the current build.
+
+After the build it is important to log in to `Nexus` at https://repository.apache.org/, select `Staging Repositories` and find the repository with the name: `orgapacheplc4x-{somenumber}`.
+
+Select that and click on the `Close` button.
+
+Now Nexus will do some checks on the artifacts and check the signatures.
+
+As soon as it's finished, we are done on the Maven side and ready to continue with the rest of the release process.
+
+A release build also produces a so-called `source-assembly` zip.
+
+This contains all sources of the project and will be what's actually the release from an Apache point of view and will be the thing we will be voting on.
+
+This file will also be signed and `SHA512` hashes will be created.
+
+=== Staging a release
+
+Each new release and release-candidate has to be staged in the Apache SVN under:
+
+https://dist.apache.org/repos/dist/dev/plc4x/
+
+The directory structure of this directory is as follows:
+
+[subs="verbatim,attributes"]
+----
+   ./KEYS
+   ./{current-full-version}/build-tools/code-generation
+   ./{current-full-version}/build-tools/code-generation/rc1
+   ./{current-full-version}/build-tools/code-generation/rc1/README
+   ./{current-full-version}/build-tools/code-generation/rc1/RELEASE_NOTES
+   ./{current-full-version}/build-tools/code-generation/rc1/apache-plc4x-code-generation-{current-full-version}-source-release.zip
+   ./{current-full-version}/build-tools/code-generation/rc1/apache-plc4x-code-generation-{current-full-version}-source-release.zip.asc
+   ./{current-full-version}/build-tools/code-generation/rc1/apache-plc4x-code-generation-{current-full-version}-source-release.zip.sha512
+----
+
+The `KEYS` file contains the PGP public key which belongs to the private key used to sign the release artifacts.
+
+If this is your first release be sure to add your key to this file.
+For the format have a look at the file itself.
+It should contain all the information needed.
+
+Be sure to stage exactly the `README` and `RELEASE_NOTES` files contained in the root of your project.
+Ideally you just copy them there from there.
+
+All of the three `*-source-relese.zip*` artifacts should be located in the directory: `target/checkout/target`
+
+So after committing these files to SVN you are ready to start the vote.
+
+=== Starting a vote on the mailing list
+
+After staging the release candidate in the Apache SVN, it is time to actually call out the vote.
+
+For this we usually send two emails.
+The following would be the one used to do our first TLP release:
+
+[subs="verbatim,attributes"]
+----
+   E-Mail Topic:
+   [VOTE] Apache PLC4X Build-Tools Code-Generation {current-full-version RC1
+
+   Message:
+   Apache PLC4X Build-Tools Code-Generation {current-full-version} has been staged under [2]
+   and it’s time to vote on accepting it for release.
+
+   All Maven artifacts are available under [1]. Voting will be open for 72hr.
+
+   A minimum of 3 binding +1 votes and more binding +1 than binding -1
+   are required to pass.
+
+   Repository: https://gitbox.apache.org/repos/asf/plc4x-build-tools.git
+   Release tag: release/code-generation/{current-full-version}
+   Hash for the release tag: {replacethiswiththerealgitcommittag}
+
+   Per [3] "Before voting +1 PMC members are required to download
+   the signed source code package, compile it as provided, and test
+   the resulting executable on their own platform, along with also
+   verifying that the package meets the requirements of the ASF policy
+   on releases."
+
+   You can achieve the above by following [4].
+
+   [ ]  +1 accept (indicate what you validated - e.g. performed the non-RM items in [4])
+   [ ]  -1 reject (explanation required)
+
+
+   [1] https://repository.apache.org/content/repositories/orgapacheplc4x-{somefourdigitnumber}
+   [2] https://dist.apache.org/repos/dist/dev/plc4x/build-tools/code-generation/{current-full-version}/rc1/
+   [3] https://www.apache.org/dev/release.html#approving-a-release
+   [4] https://cwiki.apache.org/confluence/display/PLC4X/Validating+a+staged+Release
+----
+
+As it is sometimes to do the vote counting, if voting and discussions are going on in the same thread, we send a second email:
+
+
+[subs="verbatim,attributes"]
+----
+   E-Mail Topic:
+   [DISCUSS] Apache PLC4X {current-full-version} RC1
+
+   Message:
+   This is the discussion thread for the corresponding VOTE thread.
+
+   Please keep discussions in this thread to simplify the counting of votes.
+
+   If you have to vote -1 please mention a brief description on why and then take the details to this thread.
+----
+
+Now we have to wait 72 hours till we can announce the result of the vote.
+
+This is an Apache policy to make it possible for anyone to participate in the vote, no matter where that person lives and not matter what weekends or public holidays might currently be.
+
+The vote passes, if at least 3 `+1` votes are received and more `+1` are received than `-1`.
+
+After the 72 hour minimum wait period is over and we have fulfilled the requirement of at least 3 +1 votes and more +1 than -1, a final reply is sent to the vote thread with a prefix of `[RESULT]` in the title in which the summary of the vote is presented in an aggregated form.
+
+[subs="verbatim,attributes"]
+----
+    E-Mail Topic:
+    [RESULT] [VOTE] Apache PLC4X {current-full-version} RC1
+
+    Message:
+    So, the vote passes with 3 +1 votes by PMC members and one +1 vote by a non PMC member.
+
+    Chris
+----
+
+=== Releasing after a successful vote
+
+As soon as the votes are finished and the results were in favor of a release, the staged artifacts can be released.
+This is done by moving them inside the Apache SVN.
+
+[subs="verbatim,attributes"]
+----
+   svn move -m "Release Apache PLC4X {current-full-version}" \
+       https://dist.apache.org/repos/dist/dev/plc4x/{current-full-version}/rc1 \
+       https://dist.apache.org/repos/dist/release/plc4x/{current-full-version}
+----
+
+This will make the release artifacts available and will trigger them being copied to mirror sites.
+
+This is also the reason why you should wait at least 24 hours before sending out the release notification emails.
+
+=== Cleaning up older release versions
+
+As a lot of mirrors are serving our releases, it is the Apache policy to clean old releases from the repo if newer versions are released.
+
+This can be done like this:
+
+    svn delete https://dist.apache.org/repos/dist/release/plc4x/0.3.0/ -m"deleted version 0.3.0"
+
+After this https://dist.apache.org/repos/dist/release/plc4x should only contain the latest release directory.
+
+=== Releasing the Maven artifacts
+
+The probably simplest part is releasing the Maven artifacts.
+
+In order to do this, the release manager logs into Nexus at https://repository.apache.org/, selects the staging repository and clicks on the `Release` button.
+
+This will move all artifacts into the Apache release repository and delete the staging repository after that.
+
+All release artifacts released to the Apache release repo, will automatically be synced to Maven central.
+
+=== Merge back release version to master branch
+
+The master branch should always point to the last released version.
+This has to be done with git
+
+[subs="verbatim,attributes"]
+----
+git checkout master
+git merge release/{current-full-version}
+----
+
+When there are conflicts it could help to use the "theirs" merge strategy, i.e.,
+
+[subs="verbatim,attributes"]
+----
+git merge -X theirs release/{current-full-version}
+----
+
+Possibly a manual conflict resolution has to be done afterwards. After that, changes need to
+be pushed.
+
+=== Updating Jira
+
+1. Set the released version to "released" and set the "release-date"
+2. Add the next version to the versions.
+
+=== Update the download site
+
+The URL http://plc4x.apache.org/users/download.html has to be changed and the current release
+has to be listed there.
+This is done by changing the `download.adoc` under `src/site/users/` (**in the develop branch, as this is where the site is generated from!**)
+
+1. Copy the last release down to _Previous Releases_
+2. Point the download links of the last release to archive, e.g. `http://archive.apache.org/dist/plc4x/{current-full-version}/apache-plc4x-{current-full-version}-source-release.zip`
+3. Add the new Release under _Current Releases_ and change all links.
+_Note: Please add an anchor for the toc_
+4. Update the sections for the changes according to the _RELEASE_NOTES_ from the release
+_Note: Transfer all to ascii-doc notation to ensure correct rendering of the site_
+_Also remove the JIRA TICKET ids in Front_
+
+=== Notifying the world
+
+Make sure you have given the Apache mirrors time to fetch the release files by waiting at least 24 hours after moving the release candidate to the release part of the SVN.
+
+After that it is time to announce your release to the world:
+
+[subs="verbatim,attributes"]
+----
+    From:
+your apache email address
+    To:
+announce@apache.org
+
+    CC:
+dev@plc4x.apache.org
+
+    E-Mail Topic:
+[ANNOUNCE] Apache PLC4X {current-full-version} released
+
+    Message:
+The Apache PLC4X team is pleased to announce the release of Apache PLC4X {current-full-version}
+
+PLC4X is a set of libraries for communicating with industrial programmable
+logic controllers (PLCs) using a variety of protocols but with a shared API.
+
+The current release contains drivers able to communicate with industrial PLCs using one of the following protocols:
+
+  *   Siemens S7 (0x32)
+  *   Beckhoff ADS
+  *   Modbus
+  *   EtherNet/IP
+
+Beyond that we also provide integration modules for the following Apache projects and frameworks:
+
+  *   Apache Edgent (Incubating)
+  *   Apache Camel
+  *   Apache Kafka (Kafka Connect)
+
+Visit the Apache PLC4X website [1] for general information or
+the downloads page [2] for release notes and download information.
+
+Regards,
+The Apache PLC4X team
+
+[1] http://plc4x.apache.org
+[2] http://plc4x.apache.org/users/download.html
+----
+
+It is important to note that you have to send this email from your apache email address or it will be rejected.
+This wasn't very simple for me to setup.
+A general description can be found here:
+https://reference.apache.org/committer/email
+Here's what I did in google mail to allow sending of emails:
+https://gmail.googleblog.com/2009/07/send-mail-from-another-address-without.html
+Note ... you will be able to select the alternate sending address if you click into the recipients line of a new email (Not very intuitive).
+
+After that email is out the door, you're done. Congrats!
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/release.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/release.adoc
new file mode 100644
index 0000000..379a248
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/release.adoc
@@ -0,0 +1,519 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+include::{pom-adoc}[]
+:imagesdir: ../images/
+:icons: font
+
+== Releasing PLC4X
+
+=== Preparing your system for being able to release
+
+As part of the release process, Maven will upload maven release artifacts to a so-called staging repository.
+
+This can be thought of as an ad-hoc Maven repository that contains only the artifacts for one release.
+This helps reviewers to see what's in the convenience maven package and to release that to the public repos with one click.
+
+But in order to be allowed to upload artifacts, your account has to be enabled for this and you have to tell Maven about your credentials.
+
+:current-full-version:
+
+In order to do this, you should provide these credentials via `.m2/settings.xml`.
+
+So if you don't already have one, you should create a `.m2` directory in your user home and inside that create a `settings.xml` file with at least this content:
+
+   <?xml version="1.0" encoding="UTF-8"?>
+   <settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+     <servers>
+       <!-- Apache Repo Settings -->
+       <server>
+           <id>apache.snapshots.https</id>
+           <username>{user-id}</username>
+           <password>{user-pass}</password>
+       </server>
+       <server>
+           <id>apache.releases.https</id>
+           <username>{user-id}</username>
+           <password>{user-pass}</password>
+       </server>
+     </servers>
+   </settings>
+
+This tells maven to use above credentials as soon as a repository with the id `apache.snapshots.https` or `apache.releases.https` is being used.
+For a release all you need is the `releases` repo, but it is good to have the other in place as it enables you to also deploy SNAPSHOTs from your system.
+There repos are defined in the `apache` parent pom and is identical for all Apache projects.
+
+Additionally all artifacts are automatically signed by the release build. In order to be able to do this you need to setup GPG.
+
+The key being used to sign the artifacts will have to be linked to your Apache E-Mail ({apache-id}@apache.org) and verified by at least one fellow Apache committer (Ideally more) that have trusted keys themselves.
+Usually for this you have to get in touch - in real life - with any Apache committer with a trusted key.
+Attending an `ApacheCon` is usually a great way to do this as usually every ApacheCon has a `Key Signing event` in it's schedule.
+He can then sign your key and hereby enable you to sign Apache release artifacts.
+
+There's a detailed description https://github.com/apache/incubator-pulsar/wiki/Create-GPG-keys-to-sign-release-artifacts[here].
+
+If you happen to have multiple keys, adding the following profile to your `settings.xml` should help:
+
+    <profile>
+      <id>apache-release</id>
+      <properties>
+        <gpg.keyname>5C60D6B9</gpg.keyname><!-- Your GPG Keyname here -->
+        <!-- Use an agent: Prevents being asked for the password during the build -->
+        <gpg.useagent>true</gpg.useagent>
+        <gpg.passphrase>topsecret-password</gpg.passphrase>
+      </properties>
+    </profile>
+
+=== Preparing the codebase for a release
+
+Usually you will have to update the RELEASE_NOTES document to the new version.
+I would suggest doing this prior to the branch as otherwise you will definitely have to port it back to `develop`.
+So remove the `SNAPSHOT` and `(Unreleased)` markers from the file and add missing parts.
+
+Also if you are doing the first release in a new year, it is advisable to search for the old year and check if any occurrences are ok the way they are.
+Usually the `NOTICE` file has to be adjusted.
+
+=== Creating a release branch
+
+According to SemVer, we have: Major, Minor and Bugfix releases.
+
+For each new Major and Minor release we create a new branch at the beginning of a code-freeze phase.
+
+So if currently the project version in develop is `{current-full-version}-SNAPSHOT`, we create a branch `rel/{current-short-version}`.
+
+When creating the branch is exactly the moment in which the version in `develop` is incremented to the next minor version.
+
+This can and should be automated by the `maven-release-plugin`.
+
+Per default the plugin will ask for the working copy version during the build execution.
+This is the version the `develop` branch will be changed to.
+
+The parameter `autoVersionSubmodules` will tell the release plugin to release all modules with the same version.
+Otherwise we would have to define the working copy version for each module.
+
+   mvn release:branch -P with-sandbox,with-cpp,with-boost,with-dotnet,with-python,with-proxies,with-logstash -DbranchName=rel/{minor-version} -DautoVersionSubmodules=true
+
+Per default the plugin suggests the next bugfix version as working version, however we want it to use the next minor version.
+So in case of preparing the release branch for `0.6.0-SNAPSHOT` the command would be the following:
+
+[subs="verbatim,attributes"]
+----
+   mvn release:branch -P with-sandbox,with-cpp,with-boost,with-dotnet,with-python,with-proxies,with-logstash -DbranchName=rel/{current-short-version} -DautoVersionSubmodules=true
+----
+
+The plugin will then aks for the version:
+
+[subs="verbatim,attributes"]
+----
+   What is the new working copy version for "PLC4X"? (org.apache.plc4x:plc4x-parent) {current-next-incremental-version}-SNAPSHOT: : {current-next-minor-version}-SNAPSHOT
+----
+
+Where the suggested default is manually overridden.
+
+This step now should perform quite quickly as no build and no tests are involved.
+
+However in the end the versions of the `develop` branch are updated and a new `rel/{current-short-version}` branch is created.
+
+=== Preparing `develop` for the next iteration
+
+Now is a good time to add a new section to the `RELEASE_NOTES` document for the new `SNAPSHOT` version.
+
+Here comes a template:
+
+[subs="verbatim,attributes"]
+----
+==============================================================
+(Unreleased) Apache PLC4X {current-next-minor-version}-SNAPSHOT
+==============================================================
+
+New Features
+------------
+
+Incompatible changes
+--------------------
+
+Bug Fixes
+---------
+
+// Rest of the file
+
+----
+
+Also be sure to do a quick full-text-search to check if the version was updated correctly everywhere.
+
+WARNING: If you find anything here, you will need to pay attention during the release.
+
+=== Release stabilization phase
+
+Now usually comes a phase in which last tests and checks should be performed.
+
+If any problems are found they have to be fixed in the release branch.
+
+Changes should either be re applied in `develop` or `cherry-picked`, however merging things back can cause a lot of problems ans we no longer have the same versions.
+
+=== Preparing a release
+
+As especially when switching a lot between different branches, it is recommended to do a clean checkout of the repository.
+Otherwise a lot of directories can be left over, which would be included in the source-release zip.
+In order to prepare a release-candidate, the first step is switching to the corresponding release-branch.
+
+After that, the following command will to all preparation steps for the release:
+
+   mvn release:prepare -P with-sandbox,with-cpp,with-boost,with-dotnet,with-python,with-proxies,with-logstash -DautoVersionSubmodules=true
+
+(The `-P with-sandbox,with-cpp,with-boost,with-dotnet,with-python,with-proxies,with-logstash` tells maven to activate the all profiles that partition the build and makes sure the versions of all modules are updated as part of the release)
+In general the plugin will now ask you 3 questions:
+
+1. The version we want to release as (It will suggest the version you get by omitting the `-SNAPSHOT` suffix)
+2. The name of the tag the release commit will be tagged with in the SCM (Name it `release/{release-version}` (`release/{current-full-version}` in our case)
+3. The next development version (The version present in the pom after the release) (`{current-next-bugfix-version}` in our case)
+
+Usually for 1 and 3 the defaults are just fine, make sure the tag name is correct as this usually is different.
+
+What the plugin now does, is automatically execute the following operations:
+
+1. Check we aren't referencing any `SNAPSHOT` dependencies.
+2. Update all pom versions to the release version.
+3. Run a build with all tests
+4. Commit the changes (commit message: `[maven-release-plugin] prepare release release/{current-full-version}`)
+5. Push the commit
+6. Tag the commit
+7. Update all poms to the next development version.
+8. Commit the changes (commit message: `[maven-release-plugin] prepare for next development iteration`)
+9. Push the commit
+
+However this just prepared the git repository for the release, we have to perform the release to produce and stage the release artifacts.
+
+Please verify the git repository at: https://gitbox.apache.org/repos/asf?p=plc4x.git
+is in the correct state. Please select the release branch and verify the commit log looks similar to this
+
+image::release-git-history.png[]
+
+It is important that the commit with the message "[maven-release-plugin] prepare release release/{current-full-version}" is tagged with the release tag (in this case release/0.3.0)
+
+If you check the commit itself, it should mainly consist of version updates like this:
+
+image::release-git-diff-prepare-release.png[]
+
+The root pom has a few more changes, but in general this should be what you are seeing.
+
+After that should come a second commit:
+
+image::release-git-diff-next-development-iteration.png[]
+
+This now updates the versions again, but this time from the release version to the one we selected for the next development iteration (in this case 0.3.1-SNAPSHOT)
+
+NOTE: If the commit history doesn't look like this, something went wrong.
+
+== What if something goes wrong?
+
+If something goes wrong, you can always execute:
+
+   mvn release:rollback
+
+And it will change the versions back and commit and push things.
+
+However it will not delete the tag in GIT (locally and remotely). So you have to do that manually or use a different tag next time.
+
+=== Performing a release
+
+This is done by executing another goal of the `maven-release-plugin`:
+
+   mvn release:perform -DreleaseProfiles=apache-release,with-proxies,with-logstash
+
+This executes automatically as all information it requires is located in the `release.properties` file the `prepare` goal prepared.
+
+The first step is that the `perform` goal checks out the previously tagged revision into the root modules `target/checkout` directory.
+Here it automatically executes a maven build (You don't have to do this, it's just that you know what's happening):
+
+   mvn clean deploy -P apache-release,with-proxies,with-logstash
+
+As the `apache-release` profile is also activated, this builds and tests the project as well as creates the JavaDocs, Source packages and signs each of these with your PGP key.
+
+We are intentionally not adding the other profiles, as these either produce binary artifacts that usually only work on the system they were compiled on (C++, .Net) or we haven't found a good way to distribute them via Maven yet (Python) or deployment is disabled anyway (sandbox).
+
+As this time the build is building with release versions, Maven will automatically choose the release url for deploying artifacts.
+
+The way things are setup in the apache parent pom, is that release artifacts are deployed to a so-called `staging repository`.
+
+You can think of a `staging repository` as a dedicated repository created on the fly as soon as the first artifact comes in.
+
+After the build you will have a nice and clean Maven repository at https://repository.apache.org/ that contains only artifacts from the current build.
+
+After the build it is important to log in to `Nexus` at https://repository.apache.org/, select `Staging Repositories` and find the repository with the name: `orgapacheplc4x-{somenumber}`.
+
+Select that and click on the `Close` button.
+
+Now Nexus will do some checks on the artifacts and check the signatures.
+
+As soon as it's finished, we are done on the Maven side and ready to continue with the rest of the release process.
+
+A release build also produces a so-called `source-assembly` zip.
+
+This contains all sources of the project and will be what's actually the release from an Apache point of view and will be the thing we will be voting on.
+
+This file will also be signed and `SHA512` hashes will be created.
+
+=== Staging a release
+
+Each new release and release-candidate has to be staged in the Apache SVN under:
+
+https://dist.apache.org/repos/dist/dev/plc4x/
+
+The directory structure of this directory is as follows:
+
+[subs="verbatim,attributes"]
+----
+   ./KEYS
+   ./{current-full-version}/
+   ./{current-full-version}/rc1
+   ./{current-full-version}/rc1/README
+   ./{current-full-version}/rc1/RELEASE_NOTES
+   ./{current-full-version}/rc1/apache-plc4x-{current-full-version}-source-release.zip
+   ./{current-full-version}/rc1/apache-plc4x-{current-full-version}-source-release.zip.asc
+   ./{current-full-version}/rc1/apache-plc4x-{current-full-version}-source-release.zip.sha512
+----
+
+You can generally import the stuff, by preparing a directory structure like above locally and then using `svn import` to do the importing:
+
+----
+cd ./{current-full-version}
+svn import rc1 https://dist.apache.org/repos/dist/dev/plc4x/{current-full-version}/rc1 -m"Staging of rc1 of PLC4X {current-full-version}"
+----
+
+The `KEYS` file contains the PGP public key which belongs to the private key used to sign the release artifacts.
+
+If this is your first release be sure to add your key to this file.
+For the format have a look at the file itself.
+It should contain all the information needed.
+
+Be sure to stage exactly the `README` and `RELEASE_NOTES` files contained in the root of your project.
+Ideally you just copy them there from there.
+
+All of the three `*-source-relese.zip*` artifacts should be located in the directory: `target/checkout/target`
+
+So after committing these files to SVN you are ready to start the vote.
+
+=== Starting a vote on the mailing list
+
+After staging the release candidate in the Apache SVN, it is time to actually call out the vote.
+
+For this we usually send two emails.
+The following would be the one used to do our first TLP release:
+
+[subs="verbatim,attributes"]
+----
+   E-Mail Topic:
+   [VOTE] Apache PLC4X {current-full-version} RC1
+
+   Message:
+   Apache PLC4X {current-full-version} has been staged under [2] and it’s time to vote
+   on accepting it for release. All Maven artifacts are available under [1].
+   Voting will be open for 72hr.
+
+   A minimum of 3 binding +1 votes and more binding +1 than binding -1
+   are required to pass.
+
+   Release tag: release/{current-full-version}
+   Hash for the release tag: {replacethiswiththerealgitcommittag}
+
+   Per [3] "Before voting +1 PMC members are required to download
+   the signed source code package, compile it as provided, and test
+   the resulting executable on their own platform, along with also
+   verifying that the package meets the requirements of the ASF policy
+   on releases."
+
+   You can achieve the above by following [4].
+
+   [ ]  +1 accept (indicate what you validated - e.g. performed the non-RM items in [4])
+   [ ]  -1 reject (explanation required)
+
+
+   [1] https://repository.apache.org/content/repositories/orgapacheplc4x-{somefourdigitnumber}
+   [2] https://dist.apache.org/repos/dist/dev/plc4x/{current-full-version}/rc1
+   [3] https://www.apache.org/dev/release.html#approving-a-release
+   [4] https://cwiki.apache.org/confluence/display/PLC4X/Validating+a+staged+Release
+----
+
+As it is sometimes to do the vote counting, if voting and discussions are going on in the same thread, we send a second email:
+
+
+[subs="verbatim,attributes"]
+----
+   E-Mail Topic:
+   [DISCUSS] Apache PLC4X {current-full-version} RC1
+
+   Message:
+   This is the discussion thread for the corresponding VOTE thread.
+
+   Please keep discussions in this thread to simplify the counting of votes.
+
+   If you have to vote -1 please mention a brief description on why and then take the details to this thread.
+----
+
+Now we have to wait 72 hours till we can announce the result of the vote.
+
+This is an Apache policy to make it possible for anyone to participate in the vote, no matter where that person lives and not matter what weekends or public holidays might currently be.
+
+The vote passes, if at least 3 `+1` votes are received and more `+1` are received than `-1`.
+
+After the 72 hour minimum wait period is over and we have fulfilled the requirement of at least 3 +1 votes and more +1 than -1, a final reply is sent to the vote thread with a prefix of `[RESULT]` in the title in which the summary of the vote is presented in an aggregated form.
+
+[subs="verbatim,attributes"]
+----
+    E-Mail Topic:
+    [RESULT] [VOTE] Apache PLC4X {current-full-version} RC1
+
+    Message:
+    So, the vote passes with 3 +1 votes by PMC members and one +1 vote by a non PMC member.
+
+    Chris
+----
+
+=== Releasing after a successful vote
+
+As soon as the votes are finished and the results were in favor of a release, the staged artifacts can be released.
+This is done by moving them inside the Apache SVN.
+
+[subs="verbatim,attributes"]
+----
+   svn move -m "Release Apache PLC4X {current-full-version}" \
+       https://dist.apache.org/repos/dist/dev/plc4x/{current-full-version}/rc1 \
+       https://dist.apache.org/repos/dist/release/plc4x/{current-full-version}
+----
+
+This will make the release artifacts available and will trigger them being copied to mirror sites.
+
+This is also the reason why you should wait at least 24 hours before sending out the release notification emails.
+
+=== Cleaning up older release versions
+
+As a lot of mirrors are serving our releases, it is the Apache policy to clean old releases from the repo if newer versions are released.
+
+This can be done like this:
+
+    svn delete https://dist.apache.org/repos/dist/release/plc4x/0.3.0/ -m"deleted version 0.3.0"
+
+After this https://dist.apache.org/repos/dist/release/plc4x should only contain the latest release directory.
+
+=== Releasing the Maven artifacts
+
+The probably simplest part is releasing the Maven artifacts.
+
+In order to do this, the release manager logs into Nexus at https://repository.apache.org/, selects the staging repository and clicks on the `Release` button.
+
+This will move all artifacts into the Apache release repository and delete the staging repository after that.
+
+All release artifacts released to the Apache release repo, will automatically be synced to Maven central.
+
+=== Merge back release version to master branch
+
+The master branch should always point to the last released version.
+This has to be done with git
+
+[subs="verbatim,attributes"]
+----
+git checkout master
+git merge release/{current-full-version}
+----
+
+When there are conflicts it could help to use the "theirs" merge strategy, i.e.,
+
+[subs="verbatim,attributes"]
+----
+git merge -X theirs release/{current-full-version}
+----
+
+Possibly a manual conflict resolution has to be done afterwards. After that, changes need to
+be pushed.
+
+=== Updating Jira
+
+1. Set the released version to "released" and set the "release-date"
+2. Add the next version to the versions.
+
+=== Update the download site
+
+The URL http://plc4x.apache.org/users/download.html has to be changed and the current release
+has to be listed there.
+This is done by changing the `download.adoc` under `src/site/users/` (**in the develop branch, as this is where the site is generated from!**)
+
+1. Copy the last release down to _Previous Releases_
+2. Point the download links of the last release to archive, e.g. `http://archive.apache.org/dist/plc4x/{current-full-version}/apache-plc4x-{current-full-version}-source-release.zip`
+3. Add the new Release under _Current Releases_ and change all links.
+_Note: Please add an anchor for the toc_
+4. Update the sections for the changes according to the _RELEASE_NOTES_ from the release
+_Note: Transfer all to ascii-doc notation to ensure correct rendering of the site_
+_Also remove the JIRA TICKET ids in Front_
+
+=== Notifying the world
+
+Make sure you have given the Apache mirrors time to fetch the release files by waiting at least 24 hours after moving the release candidate to the release part of the SVN.
+
+After that it is time to announce your release to the world:
+
+[subs="verbatim,attributes"]
+----
+    From:
+your apache email address
+    To:
+announce@apache.org
+
+    CC:
+dev@plc4x.apache.org
+
+    E-Mail Topic:
+[ANNOUNCE] Apache PLC4X {current-full-version} released
+
+    Message:
+The Apache PLC4X team is pleased to announce the release of Apache PLC4X {current-full-version}
+
+PLC4X is a set of libraries for communicating with industrial programmable
+logic controllers (PLCs) using a variety of protocols but with a shared API.
+
+The current release contains drivers able to communicate with industrial PLCs using one of the following protocols:
+
+  *   Siemens S7 (0x32)
+  *   Beckhoff ADS
+  *   Modbus
+  *   EtherNet/IP
+
+Beyond that we also provide integration modules for the following Apache projects and frameworks:
+
+  *   Apache Edgent (Incubating)
+  *   Apache Camel
+  *   Apache Kafka (Kafka Connect)
+
+Visit the Apache PLC4X website [1] for general information or
+the downloads page [2] for release notes and download information.
+
+Regards,
+The Apache PLC4X team
+
+[1] http://plc4x.apache.org
+[2] http://plc4x.apache.org/users/download.html
+----
+
+It is important to note that you have to send this email from your apache email address or it will be rejected.
+This wasn't very simple for me to setup.
+A general description can be found here:
+https://reference.apache.org/committer/email
+Here's what I did in google mail to allow sending of emails:
+https://gmail.googleblog.com/2009/07/send-mail-from-another-address-without.html
+Note ... you will be able to select the alternate sending address if you click into the recipients line of a new email (Not very intuitive).
+
+After that email is out the door, you're done. Congrats!
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/sonar.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/sonar.adoc
new file mode 100644
index 0000000..a84eed4
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/sonar.adoc
@@ -0,0 +1,20 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+== Code Analysis
+
+https://builds.apache.org/analysis/overview?id=55410
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/team.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/team.adoc
new file mode 100644
index 0000000..04e8320
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/team.adoc
@@ -0,0 +1,55 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+:imagesdir: ../images/
+:icons: font
+
+== Team
+
+Sorted by first name:
+
+[width="100%",cols="2,4,1,1",options="header"]
+|=========================================================
+|Name |Bio | |
+| *Christofer Dutz*
+
+IoT Consultant
+
+codecentric AG
+
+Frankfurt |Likes to swim outside the mainstream. He is really passionate about walking new paths. His first email to an Apache list on file was to the Cocoon project back in the year 2000. His direct involvement started in 2012 when he was elected to become an Apache Flex committer. Since then he became involved with a lot of Apache-internal groups and committees and was elected to become a Member of the Apache Software Foundation in 2015 and recently has taken up the role of mentoring s [...]
+| *Julian Feinauer*
+
+Founder / CEO
+
+pragmatic minds GmbH /
+pragmatic industries GmbH
+
+Nürtingen |Has studied mathematics in Stuttgart. Besides his interest in open source software and big data, he focuses on the analysis of time series and traces from testing or manufacturing. PLC4X was the first project where he was offered a position as (P)PMC but he is also engaged in other Apache projects like Edgent and IotDB. | a|image::team/jfeinauer.jpg[jfeinauer, 240, 320]
+| *Sebastian Rühl*
+
+IoT Consultant
+
+codecentric AG
+
+Frankfurt |Software engineer, member of the (P)PMC of PLC4X| a| image::team/sruehl.jpg[sruehl, 240, 320]
+| *Tim Mitsch*
+
+Engineer
+
+pragmatic industries GmbH
+
+Nürtingen |Electrical engineer (HW, SW and interface-stuff) from passion and very new to Apache projects. The more he is involved in open-source the more he likes it, focusing on PLC4X at first. | a|image::team/tmitsch.png[tmitsch, 240, 263]
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/vm.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/vm.adoc
new file mode 100644
index 0000000..095bcc0
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/vm.adoc
@@ -0,0 +1,95 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+== The PLC4X Project VM
+
+As, especially for the raw socket functionality of PLC4X, our project had higher demands on the infrastructure as other projects.
+Apache Infra kindly provided us with a dedicated VM.
+
+This is included as build agent into Apache's Jenkins with the label `plc4x1` and is marked for exclusive usage by our project.
+
+The host name of this machine is: `plc4x-vm.apache.org`
+
+On this machine we can even `sudo` to perform operations only available to `root`.
+
+Project members can request access to the machine.
+
+=== Requesting access
+
+In order to be able to login, users need to add their SSH public key to their Apache ID first.
+
+This is done under the following url: https://id.apache.org/
+
+Here just add the content in the follwoing format to one of the `SSH Key (authorized_keys line)` fields:
+
+    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDd10ykYAZLxHJVTER71IrrVVpyR8OBdlJd1aVwb67Ts+ueJjzo8ofQKLASaQw9EQOSfprGZW0sfzhepeJvbX0n1IfsRexoyIGlD8WzyX/UoLiRLPHFv+eSGJVlN90x/l+zps+yo3lq6qfuIqkXQQvB4aJBYsYC/jifpMLvx06zaUBPfdWIaGiBgaWbX/59Q0QsSpX5r8tgdA+XLw/8Zg5AbKazuS2Cm/soJCfQQ7km4bd/WtF5R5xvakVbyILMT8Dk9Hs9OfVL/RFGLYqX4bjy5uCTwPBrwlWqFyq1u7JR39i870XNgn+bIeChaZU098BGyBH/cWMGt7bTJQSKxksF2SZAHjt8Ga2Pl+J6MTW6/EPzIYENgvfOBVSlVaz9SlM26nel1+SHDND9dK/4gRNbujbmzHZLfTjMk7oc4R+WPCBIw99CFeShTKHSxhJKz/3K [...]
+
+(I just had to copy this line from my `~/.ssh/id_rsa.pub` file)
+
+TIP: Note, the Email Address in the end doesn't seem to matter, I simply added it for the sake of completeness. So if this doesn't match your Apache email, this is not a problem.
+
+As soon as that's done, access needs to be requested from Apache Infra.
+
+This is done using the Infra Jira at: https://issues.apache.org/jira
+
+Here make sure to select the Project `Infrastructure (INFRA)`.
+
+As soon as that's handled by the Infra team, you should be ready to log-in on the machine.
+
+=== Login to the machine
+
+Using SSH we should now be able to login to the VM.
+
+   ssh apacheId@plc4x-vm.apache.org
+
+Be sure to use the username matching your Apache ID or the login will fail.
+
+If all wen't well you should now be able to login to the machine using your apache user.
+
+=== Doing things as `root`
+
+Apache Infra is great at keeping things safe.
+Providing a sudo password directly would increase the danger of having this intercepted, therefore they are using a tool called `opiepasswd`.
+
+Instead of now entering a password, a challenge is displayed:
+
+    myid@plc4x-vm:~$ sudo apt-get update
+    otp-md5 496 pl8230
+    Password:
+
+If you now enter your normal password, you'll simply get `permission denied` errors.
+
+In order to execute operations as root on the machine, you need to use an opie client.
+As with the latest version of Mac Catalina the existing clients no longer work and using a public web service is a really bad idea, Apache has a service to calculate:
+https://reference.apache.org/pdf.lua?/committer/opie
+
+   otp-md5 496 pl8230
+
+into OPIE client's `challenge` field.
+
+In the `password` field you provide your Apache LDAP password.
+
+When hitting enter or clicking on `Compute` the tool should automatically generate a response.
+
+Now all you need to do is copy & paste that as password into your SSH client session.
+
+=== Required software
+
+For being able to build the charts and graphics as part of the site generation, we need to add some additional packages:
+
+   sudo apt-get install python-seqdiag
+   sudo apt-get install python-nwdiag
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/vpn.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/vpn.adoc
new file mode 100644
index 0000000..ba7f08e
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/vpn.adoc
@@ -0,0 +1,189 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+:imagesdir: ../images/
+
+== The PLC4X PLC VPN
+
+As attaching physical PLC devices to a cloud infrastructure is challenging, we decided to setup a VPN in the IoT lab of codecentric Frankfurt and to grant committers of the Apache PLC4X project access to that.
+
+This document contains all the information needed to setup the VPN and to communicate with the different PLCs.
+
+=== Network
+
+All nodes of the IoT VPN are configured to use the IP range: '10.10.64.0/24'.
+
+In order to access the VPN from outside, a VPN gateway is configured to accept incoming connections.
+
+This VPN gateway is listening on port `vpn.plc4x.apache.org` on port `444` and should it should be possible to connect to it via OpenVPN.
+
+[nwdiag,plc4x-vpn-network,svg]
+....
+{
+      network internet {
+        address = "X.X.X.0/28"
+
+        vpn.plc4x.a.o [address = "217.110.130.19"];
+        plc4x-vm.a.o [address = "62.210.60.247"];
+        committer-a;
+        committer-b;
+      }
+
+      network plc4x-iot-lab {
+        address = "10.10.64.x/24"
+
+        vpn.plc4x.a.o [address = "10.10.64.1"];
+        F-FBs-40MC [address = "10.10.64.10"];
+        S-S7-1212 [address = "10.10.64.20"];
+        S-KTP-400 [address = "10.10.64.25"];
+        WG-750-352 [address = "10.10.64.30"];
+        BH-C6920-0030 [address = "10.10.64.40"];
+        committer-int [address = "10.10.64.200"];
+    }
+}
+....
+
+Note the PLC4X Project VM and Jenkins build node `plc4x-vm.apache.org` also dials in to the `plc4x-iot-lab` network.
+
+=== PLCs
+
+The following PLCs have been configured and should be available in the VPN.
+
+==== Fatek: FBs-40MC
+
+image::plc4x-vpn-fatek.jpg[float=right, width=200]
+
+This device is able to use the following protocols:
+
+- Modbus (Port `502`)
+- Fatek (Port `500`)
+
+It is configured to use the IP: `10.10.64.10`
+
+==== Siemens: S7-1212AC/DC
+
+image::plc4x-vpn-siemens-s7.jpg[float=right, width=200]
+
+This device is able to use the following protocols:
+
+- S7 (32 flavour) (Port `102`)
+- S7 (72 flavour) (Port `102`)
+- ProfiNet
+
+It is configured to use the IP: `10.10.64.20`
+
+==== Siemens: KTP 400 Basic Mono
+
+image::plc4x-vpn-siemens-hmi.jpg[float=right, width=200]
+
+This device is able to use the following protocols:
+
+- S7 (32 flavour) (Port `102`)
+- S7 (72 flavour) (Port `102`)
+- ProfiNet
+
+It is configured to use the IP: `10.10.64.25`
+
+==== WaGo: 750-352 Feldbuskoppler ETHERNET
+
+image::plc4x-vpn-wago.jpg[float=right, width=200]
+
+This device is not a typical PLC, but more a device making I/O values available via Ethernet protocols.
+
+For our job however it is exactly what we need as it allows testing the protocols without the need to develop a sophisticated PLC software in the first place.
+
+This device is able to use the following protocols:
+
+- Modbus (TCP port `502`, UDP port `502`)
+- EtherNet/IP (TCP port `44818`, UDP port `2222`)
+
+It is configured to use the IP: `10.10.64.30`
+The web-interface is available at http://10.10.64.30/webserv/index.ssi
+The login for this is user: 'admin' pass: 'wago'.
+
+==== Beckhoff: C6920-0030
+
+image::plc4x-vpn-beckhoff.jpg[float=right, width=200]
+
+This device is able to use the following protocols:
+
+- ADS (Port `48898`)
+- EtherNet/IP (Port `48181`)
+
+It is configured to use the IP: `10.10.64.40`
+
+Beckhoff PLCs are processes running on a host operating system.
+
+In this case, this host OS is `Windows 7 Professional`.
+
+These processes seem to communicate with an internal network, which isn't connected to the physical network of the host.
+
+In order to be able to communicate with the PLC from the outside world, a so-called `AMS Route` needs to be added.
+Unfortunately it seems that this route needs to be added individually for every clients ip.
+As the VPN gateway is automatically assigning IPs to the clients, this step eventually has to be done every time you log in.
+Right now we hope that as soon as routes have been added for quite some ips, eventually we won't have to do this anymore, but right now it looks as if we do.
+
+Adding a route is done by opening the ADS Route Editor on the Beckhoff machine:
+
+image::plc4x-vpn-beckhoff-route-1.png[]
+
+Here you click on add:
+
+image::plc4x-vpn-beckhoff-route-2.png[]
+
+And enter the details of the new route:
+
+image::plc4x-vpn-beckhoff-route-3.png[]
+
+Here it is important to give the route a name.
+The `AmsNetId` is sort of like a 6-segment ipv4-address. It could be chosen independently from the real ip address, however the default is to use the ip address for the first 4 segments and to append `.1.1` after this.
+So from an ip address: `10.10.57.104` the corresponding `AmsNetId` would be: `10.10.57.104.1.1`.
+`Transport Type` should be set to: `TCP_IP`.
+`Address Info` is where the clients ip address is added.
+Be sure to select the `IP Address` radio button below.
+Next thing, you should ensure, is that the type of `Remote Route` is set to `None`.
+
+When clicking on `Add Route`, don't be surprised that the window doesn't close, you have to click on `Close` after that and then you should see your new route in the route list screen.
+
+When planning on using the `EtherNet/IP` communication, the configuration of the TwinCAT device is described here:
+
+https://download.beckhoff.com/download/document/automation/twincat3/TF6280_EtherNet_IP_Slave_EN.pdf
+
+=== Requesting an account
+
+The PLC hardware in the `PLC4X IoT Lab` is hosted in the codecentric Frankfurt office.
+
+Even if we wanted to integrate our VPN Gateway with Apache's LDAP service, this is currently not possible.
+
+In order to get access to the hardware, please request an account on the `PLC4X Developer Mailinglist`: dev@plc4x.apache.org
+
+We'll try to create the account as quickly as possible.
+
+=== Setup
+
+By accessing the following URL with the `username` and `password`, provided by `codecentric`, you will be provided with links to download the VPN clients for different platforms.
+
+   https://vpn.plc4x.apache.org:444
+
+image::plc4x-vpn-client-download.png[float=right]
+
+However it is also possible to use other VPN clients based on `OpenVPN`.
+
+To do this, just download the option labeled: `Mobile VPN with SSL client profile`.
+
+It's a normal `tgz` file, so rename the file and unpack it.
+
+The archive contains a `client.ovpn` file which contains the configuration needed by `OpenVPN`.
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/website.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/website.adoc
new file mode 100644
index 0000000..a73a4fe
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/website.adoc
@@ -0,0 +1,198 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+== Generating the Website
+
+We are currently using the normal `Maven` build to not only generate the project artifacts, but also the projects website.
+
+In order to provide content, every module can have a `src/site` directory. This content will be generated to that modules site-part.
+
+The `skin` being used to generate the site is none of the default `Maven` skins, but a more up-to-date looking skin using:
+
+- Bootstrap (For the CSS)
+- JQuery (For the JavaScript magic)
+- Fontawesome (For icons and symbols)
+
+But we don't have to worry about the details, all is configured to be used automatically.
+
+The site content itself is generated from `asciidoc` files (ending `.adoc`) which is a simple yet powerful markup language.
+(See http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/[AsciiDoc Syntax Quick Reference] or https://powerman.name/doc/asciidoc[AsciiDoc cheatsheet] for details)
+
+Beyond the basic goodies, the build is also configured to generate images from ASCII data using the `asciidoctor-diagram` plugin.
+
+This allows us to generate images like the ones on the http://plc4x.apache.org/protocols/s7/index.html[S7 Protocol Description page]
+
+=== Providing new content
+
+Within the `src/site` directory there is a file `site.xml` which generally controls the menu and the look of the site.
+
+Most setting are inherited from the `plc4x-parent` module. That's also why this is more complicated than the others.
+
+The `site.xml` file is optional. Even if this is not available a site will be generated however no additional content will be linked from any of the navigation menus.
+
+So if we wanted to add a new page on some (hopefully non existent) `Wombat PLC Protocol`, we would create a file called:
+
+`index.adoc` in the `src/site/asciidoc/protocols/wombat` directory.
+
+For example with this content:
+
+```
+== Wombat PLC Protocol
+
+If you want to waste your money, brains and time, feel free to use a `Wombat PLC`.
+
+In order to help you waste even more of that, we'll skip documenting anything.
+
+```
+
+Notice the double equals sign? This is the site Title. It seems the level `One` with only one equals sign is only used for ebook output.
+
+So just keep in mind: Two equals signs is the top level title, all lower levels have more equals signs.
+
+In order to generate the content you need to execute the Maven `site` workflow.
+
+This is for example done by executing:
+
+    mvn site
+
+This will not build the artifact itself, but only it's website.
+
+After the build, you would find a file `target/site/protocols/wombat/index.html`
+
+However you can link to this page from any other page, but it is not added ot the navigation menu.
+
+=== Adding links to menus
+
+In order to add links to the menus, you have to create or modify the `site.xml` for the module you want to add content to.
+
+The simplest form would probably be something like this:
+
+```
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ -->
+<project name="PLC4J">
+
+  <body>
+    <menu name="Wombat">
+      <item name="lalala" href="https://plc4x.apache.org/somemodule/somedocument.html"/>
+    </menu>
+  </body>
+
+</project>
+```
+
+This will generate a `Wombat` menu at the end, and this has one link named `lalala`.
+
+Notice that the link has to have a file ending of `.html` and not `.adoc`.
+
+If you want to insert the menu somewhere else, you will have to re-define the entire menu.
+
+```
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ -->
+<project name="PLC4J">
+
+  <body>
+
+      <menu ref="reports" inherit="top"/>
+      <menu ref="parent" inherit="top"/>
+
+      <menu name="Wombat">
+        <item name="lalala" href="https://plc4x.apache.org/somemodule/"/>
+      </menu>
+
+      <menu ref="modules" inherit="top"/>
+
+  </body>
+
+</project>
+```
+
+The `menu ref` items hereby reference standard menus provided by the `Maven` build.
+
+=== Deploying the Website
+
+The PLC4X project uses Apache `gitpubsub` system for maintaining the website.
+
+In general all content in a repos `asf-site` branch is copied to the Webservers, if that repo is registered for it.
+
+The content in this branch is generated and maintained during the `Maven` build as part of the `site` generation if the `site-deploy` phase is executed.
+
+The build system needs to check-in content to the `asf-site` branch and usually ASF Jenkins nodes don't have the permissions to do that.
+
+In order to be able to push to the `asf-site` GIT branch, a dedicated build job is configured to build on nodes with the Jenkins label `git-websites`.
+
+Only on these machines are jobs allowed to push changes to a Git repo and here only to a branch named `asf-site`.
+
+See https://builds.apache.org/view/M-R/job/PLC4X/job/PLC4X%20Site/ for details on the PLC4X Jenkins Website build job.
+
+As soon as content is updated in the `asf-site` the `gitpubsub` mechanism will make those changes available at https://plc4x.apache.org
+
+== Bells and Whistles
+
+=== Making all pom properties available to asciidoctor
+
+While trying to automate keeping the content of the release documentation up-to-date, we added a groovy script to automatically calculate some version numbers.
+Unfortunately it wasn't possible to use these in asciidoctor using the normal `attributes` as the values aren't set as soon as Maven configures the plugin.
+
+We came up with an option to still achieve this:
+
+* The `groovy-maven-plugin` sets the dynamic properties in the `provide-custom-properties` execution.
+* Then we use the `properties-maven-plugin` to write all maven properties into a property file `target/pom.adoc`.
+* As Asciidoctor doesn't understand property files, we use the `replacer` to convert the content into an Asciidoctor property file in the `convert-property-to-adoc` execution.
+* Now we provide access to the location of this file by setting the `pom-adoc` attribute.
+* If we now need to access the properties, all we need to do, is to import the `pom.adoc` file with the following statement:
+
+   include::{pom-adoc}[]
+
+* After this all maven properties can be accessed via:
+
+   We are currently working on releasing ApachePLC4X {current-full-version}
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/wiki.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/wiki.adoc
new file mode 100644
index 0000000..3e6d859
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/wiki.adoc
@@ -0,0 +1,20 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+== WIKI
+
+https://cwiki.apache.org/confluence/display/PLC4X
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/writing-driver/writing-driver.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/writing-driver/writing-driver.adoc
new file mode 100644
index 0000000..f071fac
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/developers/writing-driver/writing-driver.adoc
@@ -0,0 +1,57 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+:imagesdir: ../../images/
+
+== Basic Building Blocs of a Driver / Protocol
+
+The general pipeline for a Protocol looks like the following:
+
+[ditaa,driver-anatomy]
+....
++-------------------------------------+
+|  Upstream (e.g. PLC4X API           :
++-------------------------------------+
+                  |
+                  :
+                  v
++-------------------------------------+
+|  PLC4X Optimizier                   :
+|  Possibly collapse requests         |
++-------------------------------------+
+                  |
+                  :
+                  v
++-------------------------------------+
+|  Protocol L1                        |
+|  Req. to (generated) Message Objects|
++-------------------------------------+
+                  |
+                  |
+                  v
++-------------------------------------+
+|  Protocol L2                        |
+|  Generated Objects to bytes         |
++-------------------------------------+
+                  |
+                  |
+                  v
++-------------------------------------+
+|  Downstream (e.g. Socket for I/O)   :
++-------------------------------------+
+....
+
+A driver has the task to assemble the pipeline for the protocol(s).
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/index.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/index.adoc
new file mode 100644
index 0000000..76492b2
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/index.adoc
@@ -0,0 +1,101 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+:imagesdir: images/
+:icons: font
+
+== Apache PLC4X™: Universal Protocol Adapter for Industrial IoT
+
+image::iot-lab.jpg[width=480, float=right]
+
+[.lead]
+Just like OPC-UA, but totally different.
+
+We are currently probably experiencing the greatest advances in the way we process information in human history.
+
+While these advances are taking over more and more parts of our world, it seems one large segment has continuously been missing out all the fun.
+
+As everyone is talking about IoT, virtualization, BigData, FastData and machine-learning, the manufacturing industry has seemed to been stuck in a closed-source proprietary world.
+
+Unfortunately the industry's Programmable Logic Controllers (PLCs) communicate with a large number of usually incompatible protocols.
+This has made it difficult to create applications that integrate these systems with the new world.
+
+This is where PLC4X™ comes in:
+
+*It is our goal to create a set of libraries, that allow unified access to any type of PLC*
+
+In general we are trying to achieve the same goal OPC-UA is trying to address, but we try to do this by going a completely different path.
+
+While with OPC-UA every device has to be retrofitted with the ability to speak a new protocol and use a common client to speak with these devices,
+PLC4X tries to provide a unified API by implementing drivers for communicating with most industrial controllers in the protocols they natively understand.
+
+Each of these drivers is being implemented from the specs or by reverse engineering protocols in order to be fully Apache 2.0 licensed.
+
+The major benefits of PLC4X™ over OPC-UA, from our point of view are:
+
+- No need to modify existing hardware
+- Activating OPC-UA support on existing PLCs greatly increases the load on the PLCs
+- No need to pay for licenses to activate OPC-UA support
+
+At first we will be concentrating on providing adapters for the most widely used protocols such as:
+
+- icon:pause-circle[role=light-gray] BACnet
+- icon:check[role=green] link:protocols/ads/index.html[Beckhoff ADS (TCP)]
+- icon:wrench[role=yellow] link:protocpls/delta-v/index.html[Emerson DeltaV (UDP)]
+- icon:wrench[role=yellow] link:protocols/ethernet-ip/index.html[EtherNet/IP (TCP)]
+- icon:wrench[role=yellow] KNXNet/IP (UDP)
+- icon:check[role=green] link:protocols/modbus/index.html[Modbus (TCP)]
+- icon:check[role=green] link:protocols/opc-ua/index.html[OPC-UA (TCP)]
+- icon:pause-circle[role=light-gray] Profinet
+- icon:check[role=green] link:protocols/s7/index.html[S7-STEP7 (TCP)]
+- icon:wrench[role=yellow] link:protocols/s7/index.html[S7-TIA (TCP)]
+
+We are planning on providing support for the following programming languages:
+
+- icon:wrench[role=yellow] C++
+- icon:wrench[role=yellow] C# (.Net)
+- icon:check[role=green] link:plc4j/index.html[Java]
+- icon:wrench[role=yellow] Python
+
+Beyond implementing the pure adapters we have already implemented some of the planned integration modules to popular projects in the Apache IoT world such as:
+
+[width=100%]
+|===
+a|image::apache_edgent_logo.png[width=80%,link=https://edgent.apache.org] a|image::apache_camel_logo.png[width=80%,link=https://camel.apache.org] a|image::apache_kafka_logo.png[width=80%,link=https://kafka.apache.org]
+|icon:check[role=green] https://edgent.apache.org[Apache Edgent™ (Incubating)] |icon:check[role=green] https://camel.apache.org[Apache Camel™] |icon:check[role=green] https://kafka.apache.org[Apache Kafka™]
+
+a|image::apache_nifi_logo.svg[width=80%,link=https://nifi.apache.org] a|image::apache_brooklyn_logo.png[width=80%,link=https://brooklyn.apache.org] a|image::apache_mynewt_logo.png[width=80%,link=https://mynewt.apache.org]
+|icon:wrench[role=yellow] https://nifi.apache.org[Apache Nifi™] |icon:pause-circle[role=light-gray] https://brooklyn.apache.org[Apache Brooklyn™] |icon:pause-circle[role=light-gray] https://mynewt.apache.org[Apache Mynewt™]
+|===
+
+This greatly reduces the barriers and the learning curve for creating industrial IoT applications.
+
+=== Upcoming Conferences & Meetups
+
+On this page we are listing options to attend talks and events around PLC4X.
+
+[width="100%",cols="2,^2,2,^2,^3",options="header"]
+|=========================================================
+|Date           |Location        |Type   |Event                                                                 |Title
+|24th May 2019  |Frankfurt (GER) |Meetup |https://www.meetup.com/de-DE/IoT-Hessen/events/261422034/[IoT Hessen] |Industrial IoT goes Open Source: Apache PLC4X Talks & Party
+|18th June 2019 |Erfurt (GER)    |Meetup |https://www.meetup.com/de-DE/iothde/events/260140057/[IoT Thüringen]  |Industrie & IoT: Die perfekte Verbindung mit Flexibus & Apache PLC4X
+|=========================================================
+
+A full list containing also previous events can be found https://plc4x.apache.org/developers/conferences.html[here].
+
+Looking forward to meeting you.
+
+If you've got or found any events or talks we might be missing, please inform us on dev@plc4x.apache.org.
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/download.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/download.adoc
new file mode 100644
index 0000000..9a1b96c
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/download.adoc
@@ -0,0 +1,133 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+== Download
+
+Be sure to verify your downloads by these https://www.apache.org/info/verification[procedures] using these https://www.apache.org/dist/plc4x/KEYS[KEYS] for any Apache release.
+
+=== Current Releases
+
+[#release-0.5.0]
+==== 0.5.0 Official https://www.apache.org/dyn/closer.lua/plc4x/0.5.0/apache-plc4x-0.5.0-source-release.zip[source release] [ https://www.apache.org/dist/plc4x/0.5.0/apache-plc4x-0.5.0-source-release.zip.sha512[SHA512] ] [ https://www.apache.org/dist/plc4x/0.5.0/apache-plc4x-0.5.0-source-release.zip.asc[ASC] ]
+
+This is the first release containing our new generated drivers (AB-ETH)
+
+===== New Features
+
+- Implemented a new Apache Kafka Connect integration module
+- Implemented a new Apache NiFi integration module
+- Implemented a new Logstash integration module
+- Implemented a driver for the AB-ETH protocol
+- Implemented Apache Karaf features for S7 OSGI drivers
+- PLC4X-121	Develop Code Generation to allow Generated Drivers in multiple Languages
+
+Sandbox (Beta-Features)
+- Implemented a new BACnet/IP passive mode driver
+- Implemented a new Serial DF1 driver
+
+===== Incompatible changes
+
+===== Bug Fixes
+
+- PLC4X-104	S7 Driver Datatype TIME_OF_DAY causes ArrayOutOfBoundException
+- PLC4X-134	S7 is terminating the connection during handshake
+- PLC4X-139	PLC4X leaks sockets in case of connection problems
+- PLC4X-141	String with real length of greater 127 throw an exception
+- PLC4X-144	When requesting invalid addresses, the DefaultS7MessageProcessor produces errors
+
+=== Previous Releases
+
+[#release-0.4.0]
+==== 0.4.0 Official https://archive.apache.org/dist/plc4x/0.4.0/apache-plc4x-0.4.0-source-release.zip[source release] [ https://archive.apache.org/dist/plc4x/0.4.0/apache-plc4x-0.4.0-source-release.zip.sha512[SHA512] ] [ https://archive.apache.org/dist/plc4x/0.4.0/apache-plc4x-0.4.0-source-release.zip.asc[ASC] ]
+
+This is the first release of Apache PLC4X as top-level project.
+
+===== New Features
+
+- The PlcConnection now supports a `ping` method to allow checking if an existing connection is still alive.
+- Support of the OPC-UA protocol with the `opc-ua-driver`.
+- Other Languages Support:
+-- Added first versions of a C# .Net PLC4X API (`plc4net`)
+-- Added first versions of a Python PLC4X API (`plc4py`)
+- Added an Interop server which allows to relay requests from other languages to a Java Server
+
+===== Incompatible changes
+
+- ElasticSearch example was updated to use ElasticSearch 7.0.1, this might cause problems with older Kibana versions.
+
+===== Bug Fixes
+
+=== Incubating Releases
+
+==== 0.3.1 (incubating) Official https://archive.apache.org/dist/incubator/plc4x/0.3.1-incubating/apache-plc4x-incubating-0.3.1-source-release.zip[source release] [ https://archive.apache.org/dist/incubator/plc4x/0.3.1-incubating/apache-plc4x-incubating-0.3.1-source-release.zip.sha512[SHA512] ] [ https://archive.apache.org/dist/incubator/plc4x/0.3.1-incubating/apache-plc4x-incubating-0.3.1-source-release.zip.asc[ASC] ]
+
+===== New Features
+
+- No new features
+
+===== Incompatible changes
+
+- No incompatible changes.
+
+===== Bug Fixes
+
+- The S7 driver didn't correctly handle "fill-bytes" in multi-item read-responses and multi-item write-requests
+- Fixed NPE when reading odd-length array of one-byte base types
+- Renamed flags "F" to Siemens Standard "M" (Marker)
+- Fixed a bug in the DefaultS7MessageProcessor which didn't correctly merge together split up items
+
+[#release-0.3.0]
+==== 0.3.0 (incubating) Official https://archive.apache.org/dist/incubator/plc4x/0.3.0-incubating/apache-plc4x-incubating-0.3.0-source-release.zip[source release] [ https://archive.apache.org/dist/incubator/plc4x/0.3.0-incubating/apache-plc4x-incubating-0.3.0-source-release.zip.sha512[SHA512] ] [ https://archive.apache.org/dist/incubator/plc4x/0.3.0-incubating/apache-plc4x-incubating-0.3.0-source-release.zip.asc[ASC] ]
+
+===== New Features
+
+- Object PLC Mapping (OPM) now has a Alias Registry to allow
+  variable substitution at runtime and write support
+- New module `plc-scraper` for applications that have to
+  scrape a lot of sps fields with high frequency
+- New integration `apache-karaf` to enable plc4j in a karaf
+  runtime environment
+
+===== Incompatible changes
+
+- The 'plc4j-core' module has been merged into 'plc4j-api'.
+  So there is no 'plc4j-core' module anymore. Just remove that
+  dependency.
+- The driver artifact names have changed so if you were using
+  a `plc4j-protocol-{name}` you now need to change this to
+  `plc4j-driver-{name}`
+
+===== Bug Fixes
+
+- Fixing dependency to the wrap url-handler
+- When receiving responses with more than 512 byte, the IsoOnTcp protocol doesn't work
+- When the last item in a request is a DINT, the DefaultS7MessageProcessor dies
+- Write operations seem to fail
+- Fixed a Bug where S7 was not able to read arrays.
+
+[#release-0.2.0]
+==== 0.2.0 (incubating) Official https://archive.apache.org/dist/incubator/plc4x/0.2.0-incubating/apache-plc4x-incubating-0.2.0-source-release.zip[source release] [ https://archive.apache.org/dist/incubator/plc4x/0.2.0-incubating/apache-plc4x-incubating-0.2.0-source-release.zip.sha512[SHA512] ] [ https://archive.apache.org/dist/incubator/plc4x/0.2.0-incubating/apache-plc4x-incubating-0.2.0-source-release.zip.asc[ASC] ]
+
+===== Changes:
+
+* Changed API: instead of passing request object to `read({read-request})`, `write({write-request})` or `subscribe({subscribe-request})` methods now the `execute()` method is called on the request itself
+* New Connection Pool component
+* New OPM (Object PLC Mapping) component (JPA for PLCs)
+* Bug fixes
+
+[#release-0.1.0]
+==== 0.1.0 (incubating) Official https://archive.apache.org/dist/incubator/plc4x/0.1.0-incubating/apache-plc4x-incubating-0.1.0-source-release.zip[source release] [ https://archive.apache.org/dist/incubator/plc4x/0.1.0-incubating/apache-plc4x-incubating-0.1.0-source-release.zip.sha512[SHA512] ] [ https://archive.apache.org/dist/incubator/plc4x/0.1.0-incubating/apache-plc4x-incubating-0.1.0-source-release.zip.asc[ASC] ]
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/gettingstarted.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/gettingstarted.adoc
new file mode 100644
index 0000000..6de1c67
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/gettingstarted.adoc
@@ -0,0 +1,24 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+== Getting Started
+
+Depending on the programming language, the usage will differ, therefore please go to the `Getting Started` version of the language of choice.
+
+=== Java
+
+For guides on how to write PLC4X applications with Java, please go to the link:../plc4j/users/gettingstarted.html[Java Getting Started]
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/industry40.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/industry40.adoc
new file mode 100644
index 0000000..e4cbecb
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/industry40.adoc
@@ -0,0 +1,124 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+== Industry 4.0 with Apache
+
+Since the introduction of programmable logic controllers in the production industry in the early 80s, they have been the core of almost every piece of production machinery.
+
+While first PLCs were usually stand-alone controllers.
+These were soon extended by the ability to talk to other controllers of the same type via proprietary protocols.
+After that came first computer based control systems, which were able to monitor and parametrize these controllers.
+Usually however in order to do this, a company needed to use the control system that was provided by the PLC vendor.
+This has tied companies to stick to the company they decided to use the PLCs of.
+Making it almost impossible to switch to another vendor.
+
+In the last 20 years in the IT industry, the concept of Open-Source has come up and has more and more proven to be the engine of great innovation.
+Most of the biggest changes in how we create modern IT systems is a result of this.
+
+Unfortunately the production industry has been missing a lot of this innovation.
+Only a small number of companies today use Open-Source software in their production systems.
+
+=== Benefits of using Open-Source
+
+The benefit of using Open-Source could be huge:
+
+* Increased Flexibility
+* Increased Stability
+* Increased Extendability
+* Improved Security
+* Great Cost-Reduction
+
+==== Increased Flexibility
+
+If a company had decided to use PLCs and control systems of a certain vendor, it is almost impossible to change this decision.
+This reduces the options available when adding new machinery or replacing existing ones.
+
+Technologically speaking, also the company can only use the options and solution it's vendor is able to provide.
+
+==== Increased Stability
+
+Current control systems are usually based on the concept of "backup systems".
+If the main control system fails, all activity is switched to the standby system.
+
+When using modern public- or private cloud systems, there is no need for a backup system, because the cluster is designed in a way that it can live with the failure of most of its hosts before loosing the ability to function.
+
+==== Increased Extendability
+
+From the perspective of designing and scaling the IT infrastructure:
+If a control system was designed to handle the current size of plant, for cost reasons the IT infrastructure isn't designed to handle much more than that.
+Now if the plant should be extended in the future, extending it's control-systems IT infrastructure would probably result in replacing this with a bigger system.
+
+By utilizing modern virtualization frameworks, extending the existing cloud solution, would only require adding more compute resources, by adding more systems to the cluster and it should be possible to extend the existing system without problems.
+If the company decided to utilize a public cloud provider, it makes things even simpler, as it would only require booking more resources.
+
+==== Improved Security
+
+This is probably one of the most concerning aspects of modern production control systems.
+Right now, in order to run these systems, a lot of the most popular solutions require companies to run not up-to-date systems.
+If applying all updates, the company is risking either loss of commercial support or even loss of functionality.
+Therefore an attacker can probably be certain to be able to exploit certain vulnerabilities just by knowing the type and version of the used control-system.
+
+==== Cost-Reduction
+
+Well the probably biggest and most obvious cost-reduction factor is definitely, that if the software you are using is fee, you will not have to pay for it.
+
+Additionally, the ability to get the computing power of one insanely expensive system by using a cluster of cheap commodity systems, helps saving a lot of money.
+
+Being freed of the requirement to stick to the products of one vendor alonw anf to be able to choose the technology and the vendor of used systems freely will definitely also reduce costs.
+
+=== Options to communicating with PLCs
+
+In general there are two options for communicating with industrial PLCs:
+
+* Using a protocol converter
+** Hardware protocol converter
+** Software protocol converter
+* Using a driver for direct communication
+** Commercial drivers
+** Open-Source drivers
+
+Well protocol converters are all software in the end, but while a "hardware converter" is usually a closed hardware box that runs some sort of software, a "software converter" is usually an installable service or program that runs on a host system.
+
+In both cases the configuration of the protocol converter tells the system which information to get and how to make that available in another protocol.
+It usually doesn't allow full access to all information available in a PLC, but only the ones the adapter is configured to make available.
+Here, there is a big trade-off. If a system should be used in the most versatile way, also the most information has to be made available.
+Even if most of this information is never needed.
+Limiting the system only to the needed information, greatly reduces the systems versatility.
+
+Another disadvantage is a slightly increased latency when making information available.
+This is due to the fact that the protocol converter has to send a request to the PLC to get information and as soon as this information is returned to the converter this new information can only be passed on in the other protocol in the next request.
+
+The usage of a protocol converter is probably the ideal solution, if all a company wants to do, is integrate PLCs communicating in one protocol into an existing system using a different protocol.
+In case of integrating open-source software, this usually is a protocol converter that converts into one of the well established open source protocols.
+The most widely used protocol here currently will probably be `MQTT`.
+
+The option that provides the most possibilities is directly communicating with the PLCs.
+Here the system can always directly access only the exact information required and can do this without any detours that would add latency.
+
+There is a wide variety of drivers available, that generally would allow writing software that directly accesses PLCs.
+Unfortunately most of these are commercial drivers.
+
+While there is a number of open-source drivers, most of these have licenses that render them useless for commercial applications.
+Either they are licensed with restrictive licenses such as GPL or they are dual licensed with a restriction to non-commercial usage for the open-source version and the requirement to purchase a commercial license for commercial use-cases.
+
+The APIs of all drivers usually differs quite greatly from each one another. This makes it extremely difficult to create solutions that work with a variety of PLCs and protocols.
+
+This is where `Apache PLC4X` comes in. It is the goal of `PLC4X` to provide a suite of drivers for communicating with industrial PLCs using a variety of protocols, but with a shared API and a license model, that is suitable for creating commercial applications.
+
+Hereby `PLC4X` forms the missing link between the automation and the open-source world.
+Making it possible to use the entire stack of open-source technologies to create a new generation of open industrial control systems.
+
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/opm.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/opm.adoc
new file mode 100644
index 0000000..e41c3c3
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/opm.adoc
@@ -0,0 +1,73 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+== Object PLC Mapping
+
+
+=== What is Object PLC Mapping
+
+Object PLC Mapping (OPM) is heavily inspired by the Java Persistence API (JPA) [1].
+One of the main goal of the PLC4X Project is to make it easy to communicate with PLC devices to enable the development
+of applications that interact with PLCs.
+As many (or even most) of the application programmers are no experts in PLC Communication and protocols it should be as
+easy as possible to interact with PLCs without too much domain knowledge.
+This is exactly the reason why JPA was initialized many years ago to allow the interaction with a Database by simply
+calling methods on POJOs (Plain old Java Object).
+This is exactly what the OPM Module is for, to enable PLC communication by simply interacting with a POJO.
+
+=== Simple Example
+
+The following short code snippet shows how to read one value from a PLC via OPM.
+First, a _PlcEntityManager_ is instantiated, then a *connected* entity is fetched for a given PLC connection address.
+Connected means that all method calls of the entity are intersected and replaced by PLC calls.
+This is then used to print one value to the console.
+In the second snippet one can see how the Entity class looks. The address where to read the variable _pressure_ from is given
+in the _@PlcField_ annotation.
+[source,java]
+----
+public static void main(String[] args) {
+    PlcEntityManager em = new PlcEntityManager();
+    MyEntity entity = em.connect(MyEntity.class, "s7://...");
+    System.out.println(entity.getPressure());
+}
+----
+The class _MyEntity_ is given by
+[source,java]
+----
+@PlcEntity
+public class MyEntity {
+
+    @PlcField("DB01:DW01:LONG")
+    private double pressure;
+
+    public void MyEntity() {
+        // For OPM
+    }
+
+    public double getPressure() {
+        return pressure;
+    }
+}
+----
+
+=== Annotations
+
+=== More details
+
+=== References
+
+[1] https://www.oracle.com/technetwork/java/javaee/tech/persistence-jsp-140049.html
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/security.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/security.adoc
new file mode 100644
index 0000000..f72e7ea
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/security.adoc
@@ -0,0 +1,26 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+== Security Vulnerabilities
+
+Please note that binary patches are not produced for individual vulnerabilities. To obtain the binary fix for a particular vulnerability you should upgrade to an Apache PLC4X version where that vulnerability has been fixed.
+
+For more information about reporting vulnerabilities, see the https://www.apache.org/security/[Apache Security Team] page.
+
+=== Known Vulnerabilities
+
+No vulnerabilities have been reported.
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/testing.adoc b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/testing.adoc
new file mode 100644
index 0000000..55dde26
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/asciidoc/users/testing.adoc
@@ -0,0 +1,165 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+
+== Testing (or using PLC4X without a PLC)
+
+=== The Mock Driver
+
+PLC4X has a _Mock Driver_ which was initially implemented to be used for Unit Tests and this still is its main purpose.
+But this driver is also very suitable to play around a bit with the PLC4X API if no _Hardware_ PLC is available.
+The driver can be found in the Maven module
+
+```
+<dependency>
+  <groupId>org.apache.plc4x</groupId>
+  <artifactId>plc4j-transport-test</artifactId>
+  <version>${current.version}</version>
+  <scope>test</scope>
+</dependency>
+```
+
+The connection string Syntax for the mock driver is `mock:{name-of-the-connection}`. So you can use multiple Mock Devices at the same time.
+
+The Mock Driver does nothing else than forwarding all Requests to a _Virtual Device_ which we can provide to control all responses and also Monitor them, e.g. for unit tests.
+The Interface for the Mock Device is
+
+```
+public interface MockDevice {
+
+    Pair<PlcResponseCode, PlcValue> read(String fieldQuery);
+
+    PlcResponseCode write(String fieldQuery, Object value);
+
+    Pair<PlcResponseCode, PlcSubscriptionHandle> subscribe(String fieldQuery);
+
+    void unsubscribe();
+
+    // ...
+
+}
+```
+
+=== Simple Example
+
+Imagine we have some Code which we cannot control or whose functionality we want to test.
+This can be done with the Mock Driver in the following way.
+
+First, a new Mock Connection is established (like any other connection also would be):
+```
+PlcDriverManager driverManager = new PlcDriverManager();
+PlcMockConnection connection = (PlcMockConnection) driverManager.getConnection("mock:my-mock-connection");
+```
+You see, that we directly cast the Connection to a `PlcMockConnection`. This is done, because we need to _connect_ a Device to this Mock Connection.
+
+This is done in the following Snippet
+```
+connection.setDevice(mockDevice);
+```
+Here, we pass it an instance of `MockDevice` which could be a simple Implementation of the interface like
+```
+MockDevice mockDevice = new MockDevice() {
+
+    Pair<PlcResponseCode, PlcValue> read(String fieldQuery) {
+        System.out.println("I got a read to " + fieldQuery);
+        return Pair.of(PlcResponseCode.OK, new PlcString("hello"));
+    }
+
+    PlcResponseCode write(String fieldQuery, Object value) {
+        System.out.println("I got a write to " + fieldQuery + " with the value " + value);
+        return PlcResponseCode.OK;
+    }
+
+    // ...
+
+}
+```
+This would just return a String Value `hello` for every request and print all read and write requests to the Console.
+
+=== Unit Testing with the Mock Driver
+
+To use the Mock driver in Unit Tests the easiest way is to generate the `MockDriver` instance as Mockito (or any other Framework) Mock.
+Like in the following Example
+
+```
+MockDevice mockDevice = Mockito.mock(MockDevice.class);
+
+PlcDriverManager driverManager = new PlcDriverManager();
+PlcMockConnection connection = (PlcMockConnection) driverManager.getConnection("mock:my-mock-connection");
+connection.setDevice(mockDevice);
+
+// Populate the Mock to avoid a NPE
+when(mockDevice).read(anyString()).thenReturn(Pair.of(PlcResponseCode.OK, new PlcString("hello")));
+
+// Some Demo code that uses the same Driver Manager and either the connection from above
+// or at least mock:my-mock-connection as connection string
+// Here: send a request to the field "MyAdress"
+connection
+    .readRequestBuilder
+    .addItem("station", "MyAdress")
+    .build()
+    .execute()
+    .get();
+
+// Check that the we really issued a Read request to the Field "MyAdress"
+verify(mockDevice).read(eq("MyAdress"));
+```
+
+But as the _MockDriver_ uses a static Mock Connection registry the following Code works also
+
+```
+MockDevice mockDevice = Mockito.mock(MockDevice.class);
+
+// Setup
+PlcDriverManager driverManager = new PlcDriverManager();
+PlcMockConnection connection = (PlcMockConnection) driverManager.getConnection("mock:my-mock-connection");
+connection.setDevice(mockDevice);
+// Populate the Mock to avoid a NPE
+when(mockDevice).read(anyString()).thenReturn(Pair.of(PlcResponseCode.OK, new PlcString("hello")));
+
+// Some Demo code that uses the same Driver Manager and either the connection from above
+// or at least mock:my-mock-connection as connection string
+// Here: send a request to the field "MyAdress"
+// and we build up a new Connection
+try (PlcConnection conn = driverManager.getConnection("mock:my-mock-connection")) {
+    conn
+        .readRequestBuilder
+        .addItem("station", "MyAdress")
+        .build()
+        .execute()
+        .get();
+} catch (Exception e) {
+    // do nothing
+}
+
+// Check that the we really issued a Read request to the Field "MyAdress"
+verify(mockDevice).read(eq("MyAdress"));
+```
+
+The Snippet above shows that the part under test really has to share nothing with the test code except for the connection string.
+
+=== Conclusion
+
+The above examples show that the `MockDriver` driver can not only be used to play around with the API but is also a powerful tool to
+do unit testing of Code which uses the PLC4X API.
+All that needs to be done is to either pass an instance of the Mocked Connection or just use the same Connection string (e.g. from a test configuration) that was used to Prepare a Mock Device.
+Some Examples of futher (more Complex) use cases can be found in the PLC4X Codebases, e.g. in the following classes
+
+* `org.apache.plc4x.java.opm.PlcEntityManagerTest`
+* `org.apache.plc4x.java.opm.PlcEntityManagerComplexTest`
+* `org.apache.plc4x.java.scraper.ScraperTest`
+
+and many more Test classes, especially in the OPM and the Scraper Module.
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_brooklyn_logo.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_brooklyn_logo.png
new file mode 100644
index 0000000..7434e7a
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_brooklyn_logo.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_camel_logo.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_camel_logo.png
new file mode 100644
index 0000000..c0e19a0
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_camel_logo.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_edgent_logo.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_edgent_logo.png
new file mode 100644
index 0000000..b236a66
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_edgent_logo.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_kafka_logo.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_kafka_logo.png
new file mode 100644
index 0000000..72b4446
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_kafka_logo.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_logo.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_logo.png
new file mode 100644
index 0000000..08b9d87
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_logo.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_logo_small.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_logo_small.png
new file mode 100644
index 0000000..053948f
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_logo_small.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_mynewt_logo.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_mynewt_logo.png
new file mode 100644
index 0000000..feca5be
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_mynewt_logo.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_nifi_logo.svg b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_nifi_logo.svg
new file mode 100644
index 0000000..7e1f9a5
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_nifi_logo.svg
@@ -0,0 +1,19 @@
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="1989 332.039 180.456 75.739"><defs><style>.a{fill:#728e9b;}.b{fill:#b9c6cd;}</style></defs><g transform="translate(1989 332.039)"><g transform="translate(1.299 0)"><g transform="translate(0 3.597)"><path class="a" d="M14.683,32.525v6.036h.192a13.416,13.416,0,0,1,5.461-5.6A16.158,16.158,0,0,1,28,31.183q6.323,0,9.724,3.449t3.4,11.209V84.068H27.9V48.524q0-4.024-1.341-5.6a5.361,5.361,0,0,0-4.312-1.581q-6.995,0-6.994,8.527v34.2H2.037V32.525Z" t [...]
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_plc4x_logo.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_plc4x_logo.png
new file mode 100644
index 0000000..cfb6339
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_plc4x_logo.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_plc4x_logo_small.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_plc4x_logo_small.png
new file mode 100644
index 0000000..6257eb5
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/apache_plc4x_logo_small.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/community-contribute-fork.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/community-contribute-fork.png
new file mode 100644
index 0000000..b7e8607
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/community-contribute-fork.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/contributing-github-create-pull-request.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/contributing-github-create-pull-request.png
new file mode 100644
index 0000000..1d8721a
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/contributing-github-create-pull-request.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/contributing-github-fork.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/contributing-github-fork.png
new file mode 100644
index 0000000..8600ffd
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/contributing-github-fork.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/iot-lab.jpg b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/iot-lab.jpg
new file mode 100644
index 0000000..477b3dc
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/iot-lab.jpg differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/neo4j-intellij-database-connections-view.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/neo4j-intellij-database-connections-view.png
new file mode 100644
index 0000000..170e301
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/neo4j-intellij-database-connections-view.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/neo4j-intellij-query-results.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/neo4j-intellij-query-results.png
new file mode 100644
index 0000000..aa09217
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/neo4j-intellij-query-results.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/neo4j-intellij-settings.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/neo4j-intellij-settings.png
new file mode 100644
index 0000000..084558b
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/neo4j-intellij-settings.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/neo4j-web-console.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/neo4j-web-console.png
new file mode 100644
index 0000000..c4569bc
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/neo4j-web-console.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-beckhoff-route-1.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-beckhoff-route-1.png
new file mode 100644
index 0000000..ae4d50c
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-beckhoff-route-1.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-beckhoff-route-2.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-beckhoff-route-2.png
new file mode 100644
index 0000000..1c37c3d
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-beckhoff-route-2.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-beckhoff-route-3.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-beckhoff-route-3.png
new file mode 100644
index 0000000..c826d43
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-beckhoff-route-3.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-beckhoff.jpg b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-beckhoff.jpg
new file mode 100644
index 0000000..0c4b22e
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-beckhoff.jpg differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-client-download.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-client-download.png
new file mode 100644
index 0000000..06db7ef
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-client-download.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-fatek.jpg b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-fatek.jpg
new file mode 100644
index 0000000..67dd7c6
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-fatek.jpg differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-siemens-hmi.jpg b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-siemens-hmi.jpg
new file mode 100644
index 0000000..3117eae
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-siemens-hmi.jpg differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-siemens-s7.jpg b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-siemens-s7.jpg
new file mode 100644
index 0000000..ce659f7
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-siemens-s7.jpg differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-wago.jpg b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-wago.jpg
new file mode 100644
index 0000000..f6c8234
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/plc4x-vpn-wago.jpg differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/release-git-diff-next-development-iteration.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/release-git-diff-next-development-iteration.png
new file mode 100644
index 0000000..3d84f01
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/release-git-diff-next-development-iteration.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/release-git-diff-prepare-release.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/release-git-diff-prepare-release.png
new file mode 100644
index 0000000..eef1a8c
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/release-git-diff-prepare-release.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/release-git-history.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/release-git-history.png
new file mode 100644
index 0000000..785a800
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/release-git-history.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/team/cdutz.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/team/cdutz.png
new file mode 100644
index 0000000..2e42eb5
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/team/cdutz.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/team/jfeinauer.jpg b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/team/jfeinauer.jpg
new file mode 100644
index 0000000..c06bf3c
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/team/jfeinauer.jpg differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/team/sruehl.jpg b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/team/sruehl.jpg
new file mode 100644
index 0000000..0bdf214
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/team/sruehl.jpg differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/team/tmitsch.png b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/team/tmitsch.png
new file mode 100644
index 0000000..4493330
Binary files /dev/null and b/plc4x-site-skin/src/it/plc4x-website/src/site/resources/images/team/tmitsch.png differ
diff --git a/plc4x-site-skin/src/it/plc4x-website/src/site/site.xml b/plc4x-site-skin/src/it/plc4x-website/src/site/site.xml
new file mode 100644
index 0000000..f429fa2
--- /dev/null
+++ b/plc4x-site-skin/src/it/plc4x-website/src/site/site.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ 
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+ 
+ http://www.apache.org/licenses/LICENSE-2.0
+ 
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ 
+ -->
+<project name="PLC4X">
+
+  <skin>
+    <groupId>${skinGroupId}</groupId>
+    <artifactId>${skinArtifactId}</artifactId>
+    <version>${skinVersion}</version>
+  </skin>
+
+  <!-- Hide the publish date as this will cause changes on every generated page every day -->
+  <publishDate position="none"/>
+  <!-- Hide the version as we are usually deploying the develop version -->
+  <version position="none" />
+
+  <custom>
+  </custom>
+
+  <bannerLeft>
+    <name>Apache PLC4X</name>
+    <src>images/apache_plc4x_logo_small.png</src>
+    <href>https://plc4x.apache.org/</href>
+  </bannerLeft>
+
+  <bannerRight>
+    <name>Apache Software Foundation</name>
+    <src>images/apache_logo_small.png</src>
+    <href>https://www.apache.org/</href>
+  </bannerRight>
+
+  <body>
+    <menu name="Deciders">
+      <item name="Section Home" href="deciders/index.html"/>
+    </menu>
+    <menu name="Users">
+      <item name="Section Home" href="users/index.html"/>
+      <item name="Download" href="users/download.html"/>
+      <item name="Getting Started" href="users/gettingstarted.html"/>
+      <item name="PLC4X without a PLC and Unit Testing" href="users/testing.html"/>
+      <item name="Object PLC Mapping (OPM)" href="users/opm.html"/>
+      <item name="Industry 4.0 with Apache" href="users/industry40.html"/>
+      <item name="Security" href="users/security.html"/>
+    </menu>
+    <menu name="Developers">
+      <item name="Section Home" href="developers/index.html"/>
+      <item name="Bug &amp; Issue Tracker" href="developers/issues.html"/>
+      <item name="Building PLC4X" href="developers/building.html"/>
+      <item name="Code Analysis" href="developers/sonar.html"/>
+      <item name="Code Generation" href="developers/code-gen/index.html">
+        <item name="Protocol: MSpec Format" href="developers/code-gen/protocol/mspec.html"/>
+        <item name="Language: Apache Freemarker" href="developers/code-gen/language/freemarker.html"/>
+        <item name="Example: DF1 MSpec" href="developers/code-gen/protocol/df1.html"/>
+      </item>
+      <item name="Continuous Integration" href="developers/ci.html"/>
+      <item name="Contributing" href="developers/contributing.html"/>
+      <item name="Decision Making" href="developers/decisions.html"/>
+      <!--item name="JQassistant" href="developers/jqassistant.html"/-->
+      <item name="Maturity" href="developers/maturity.html"/>
+      <item name="Preparing your Computer" href="developers/preparing.html"/>
+      <item name="Releasing" href="developers/release.html"/>
+      <item name="Releasing Build-Tools" href="developers/release-build-tools.html"/>
+      <item name="Team" href="developers/team.html"/>
+      <item name="VM Access" href="developers/vm.html"/>
+      <item name="VPN Access" href="developers/vpn.html"/>
+      <item name="Website" href="developers/website.html"/>
+      <item name="Wiki" href="developers/wiki.html"/>
+    </menu>
+    <menu name="Apache" inherit="bottom">
+      <item name="Apache Software Foundation" href="http://www.apache.org/"/>
+      <item name="How Apache Works" href="https://www.apache.org/foundation/how-it-works.html"/>
+      <item name="License" href="http://www.apache.org/licenses/"/>
+      <item name="Sponsoring Apache" href="http://www.apache.org/foundation/sponsorship.html"/>
+      <item name="Thanks" href="http://www.apache.org/foundation/thanks.html"/>
+    </menu>
+  </body>
+
+</project>
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/sample/pom.xml b/plc4x-site-skin/src/it/sample/pom.xml
deleted file mode 100644
index 5090b63..0000000
--- a/plc4x-site-skin/src/it/sample/pom.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.skins.its</groupId>
-  <artifactId>@project.artifactId@</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>jar</packaging>
-
-  <name>@project.artifactId@ IT</name>
-  <!-- FIXME change it to the project's website -->
-  <url>http://www.example.com</url>
-
-  <properties>
-    <skinName>@project.name@</skinName>
-    <skinGroupId>@project.groupId@</skinGroupId>
-    <skinArtifactId>@project.artifactId@</skinArtifactId>
-    <skinVersion>@project.version@</skinVersion>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>3.8.2</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <artifactId>maven-site-plugin</artifactId>
-          <version>@sitePluginVersion@</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-project-info-reports-plugin</artifactId>
-          <version>@mpirVersion@</version>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-
-  <reporting>
-    <plugins>
-      <plugin>
-        <artifactId>maven-project-info-reports-plugin</artifactId>
-        <configuration>
-          <dependencyDetailsEnabled>false</dependencyDetailsEnabled>
-          <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
-        </configuration>
-      </plugin>
-    </plugins>
-  </reporting>
-
-</project>
diff --git a/plc4x-site-skin/src/it/sample/src/site/apt/index.apt.vm b/plc4x-site-skin/src/it/sample/src/site/apt/index.apt.vm
deleted file mode 100644
index dd0ac23..0000000
--- a/plc4x-site-skin/src/it/sample/src/site/apt/index.apt.vm
+++ /dev/null
@@ -1,154 +0,0 @@
- ------
- ${skinName} test
- ------
- Hervé Boutemy
- ------
- 2011-10-15
- ------
-
-~~ Licensed to the Apache Software Foundation (ASF) under one
-~~ or more contributor license agreements.  See the NOTICE file
-~~ distributed with this work for additional information
-~~ regarding copyright ownership.  The ASF licenses this file
-~~ to you under the Apache License, Version 2.0 (the
-~~ "License"); you may not use this file except in compliance
-~~ with the License.  You may obtain a copy of the License at
-~~
-~~   http://www.apache.org/licenses/LICENSE-2.0
-~~
-~~ Unless required by applicable law or agreed to in writing,
-~~ software distributed under the License is distributed on an
-~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-~~ KIND, either express or implied.  See the License for the
-~~ specific language governing permissions and limitations
-~~ under the License.
-
-~~ NOTE: For help with the syntax of this file, see:
-~~ http://maven.apache.org/doxia/references/apt-format.html
-
-${skinName} test
-
- This is a test for ${skinName}.
-
-* Usage
-
- To use this skin in your project, use the skin element of
- {{{/doxia/doxia-sitetools/doxia-decoration-model/decoration.html}the <<<site.xml>>> site descriptor}}:
-
-+-----+
-<project name="xxx">
-  ...
-  <skin>
-    <groupId>${skinGroupId}</groupId>
-    <artifactId>${skinArtifactId}</artifactId>
-    <version>${skinVersion}</version>
-  </skin>
-  ...
-</project>
-+-----+
-
-Sample content
-
-  Paragraph 1, line 1.
-  Paragraph 1, line 2.
-
-  Paragraph 2, line 1.
-  Paragraph 2, line 2.
-
-Section title
-
-* Sub-section title
-
-** Sub-sub-section title
-
-*** Sub-sub-sub-section title
-
-**** Sub-sub-sub-sub-section title
-
-      * List item 1.
-
-      * List item 2.
-
-        Paragraph contained in list item 2.
-
-            * Sub-list item 1.
-
-            * Sub-list item 2.
-
-      * List item 3.
-        Force end of list:
-
-      []
-
-+------------------------------------------+
-Verbatim text not contained in list item 3
-+------------------------------------------+
-
-      [[1]] Numbered item 1.
-
-                [[A]] Numbered item A.
-
-                [[B]] Numbered item B.
-
-      [[2]] Numbered item 2.
-
-  List numbering schemes: [[1]], [[a]], [[A]], [[i]], [[I]].
-
-      [Defined term 1] of definition list.
-
-      [Defined term 2] of definition list.
-
-+-------------------------------+
-Verbatim text
-                        in a box        
-+-------------------------------+
-
----------------------------------
-Verbatim text
-                     without box        
----------------------------------
-
-[figure] Figure caption
-
-*----------*--------------+----------------:
-| Centered | Left-aligned | Right-aligned  |
-| cell 1,1 | cell 1,2     | cell 1,3       |
-*----------*--------------+----------------:
-| cell 2,1 | cell 2,2     | cell 2,3       |
-*----------*--------------+----------------:
-Table caption
-
-  No grid, no caption:
-
-*-----*------*
- cell | cell
-*-----*------*
- cell | cell
-*-----*------*
-
-*---------*---------*
-|| header || header |
-*---------*---------*
-|  cell   |  cell   |
-*---------*---------*
-
-  Horizontal line:
-
-=======================================================================
-
-  <Italic> font. <<Bold>> font. <<<Monospaced>>> font.
-
-  {Anchor}. Link to {{Anchor}}. Link to {{http://www.pixware.fr}}. 
-  Link to {{{Anchor}showing alternate text}}.
-  Link to {{{http://www.pixware.fr}Pixware home page}}.
-
-  Force line\
-  break.
-
-  Non\ breaking\ space.
-
-  Escaped special characters: \~, \=, \-, \+, \*, \[, \], \<, \>, \{, \}, \\.
-
-  Copyright symbol: \251, \xA9, \u00a9.
-
-~~Commented out.
diff --git a/plc4x-site-skin/src/it/sample/src/site/site.xml b/plc4x-site-skin/src/it/sample/src/site/site.xml
deleted file mode 100644
index d0d5f9c..0000000
--- a/plc4x-site-skin/src/it/sample/src/site/site.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<project xmlns="http://maven.apache.org/DECORATION/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.0.xsd"
-  name="${skinName}">
-
-  <skin>
-    <groupId>${skinGroupId}</groupId>
-    <artifactId>${skinArtifactId}</artifactId>
-    <version>${skinVersion}</version>
-  </skin>
-
-  <publishDate format="yyyy-MM-dd" position="right" />
-  <version position="right" />
-
-  <body>
-    <breadcrumbs>
-      <item name="skins" href="/skins/"/>
-      <item name="${skinArtifactId}" href="/skins/${skinArtifactId}/"/>
-    </breadcrumbs>
-
-    <menu name="Overview">
-      <item name="Introduction" href="index.html"/>
-    </menu>
-
-    <menu ref="reports"/>
-
-  </body>
-
-</project>
\ No newline at end of file
diff --git a/plc4x-site-skin/src/it/sample/verify.groovy b/plc4x-site-skin/src/it/sample/verify.groovy
deleted file mode 100644
index 541e7b0..0000000
--- a/plc4x-site-skin/src/it/sample/verify.groovy
+++ /dev/null
@@ -1,5 +0,0 @@
-File index = new File( basedir, "target/site/index.html" )
-assert index.exists()
-
-String html = index.getText()
-assert html.contains( '<!DOCTYPE html PUBLIC' )
diff --git a/plc4x-site-skin/src/main/resources/META-INF/maven/site-macros.vm b/plc4x-site-skin/src/main/resources/META-INF/maven/site-macros.vm
index 1a8140d..d82653e 100644
--- a/plc4x-site-skin/src/main/resources/META-INF/maven/site-macros.vm
+++ b/plc4x-site-skin/src/main/resources/META-INF/maven/site-macros.vm
@@ -59,7 +59,7 @@
 #**##end
 #end
 ##
-#macro ( banner $banner $id )
+#macro ( banner $banner $id $class)
 #**##if ( $banner )
 #*  *##if( $banner.href )
 #*    *##set ( $hrf = $banner.href )
@@ -72,7 +72,7 @@
 #*    *##end
 #*    *#<a href="$hrf" id="$id"#if( $banner.alt ) title="$banner.alt"#end>##
 #*  *##else
-#*  *#<div id="$id">
+#*  *#<div id="$id" class="$class">
 #*  *##end
 ##
 #*  *##if( $banner.src )
@@ -402,7 +402,7 @@
 #*    *##if( $item.img )
 #*      *##set ( $img = $item.img )
 #*    *##else
-#*      *##set ( $img = "images/logos/maven-feather.png" )
+#*      *##set ( $img = "images/maven-feather.png" )
 #*    *##end
 ##
 #*    *##if ( !$decoration.isLink( $img ) )
@@ -444,31 +444,13 @@
 #*  *##end
 #*  *##if( $poweredBy.isEmpty() )
       <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy">
-        <img class="poweredBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/logos/maven-feather.png" />
+        <img class="poweredBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/maven-feather.png" />
       </a>
 #*  *##end
 #**##else
     <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy">
-      <img class="poweredBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/logos/maven-feather.png" />
+      <img class="poweredBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/maven-feather.png" />
     </a>
 #**##end
 #end
 ##
-#macro ( googleAnalytics $accountId )
-#**##if( $accountId && $accountId != "" )
-    <!-- Google Analytics -->
-    <script type="text/javascript">
-
-      var _gaq = _gaq || [];
-      _gaq.push(['_setAccount', '$accountId']);
-      _gaq.push(['_trackPageview']);
-
-      (function() {
-        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
-        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
-        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
-      })();
-
-    </script>
-#**##end
-#end
\ No newline at end of file
diff --git a/plc4x-site-skin/src/main/resources/META-INF/maven/site.vm b/plc4x-site-skin/src/main/resources/META-INF/maven/site.vm
index d5cd8f5..dd65d01 100644
--- a/plc4x-site-skin/src/main/resources/META-INF/maven/site.vm
+++ b/plc4x-site-skin/src/main/resources/META-INF/maven/site.vm
@@ -7,17 +7,18 @@
 #end
  at $dateFormat.format( $currentDate ) -->
 <html xmlns="http://www.w3.org/1999/xhtml"#if ( $locale ) xml:lang="$locale.language" lang="$locale.language"#end>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=${outputEncoding}" />
-    <title>$title</title>
-    <style type="text/css" media="all">
-      @import url("$relativePath/css/all.min.css");
-      @import url("$relativePath/css/bootstrap.min.css");
-      @import url("$relativePath/css/maven-base.css");
-      @import url("$relativePath/css/maven-theme.css");
-      @import url("$relativePath/css/site.css");
-    </style>
-    <link rel="stylesheet" href="$relativePath/css/print.css" type="text/css" media="print" />
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=${outputEncoding}" />
+      <title>$title</title>
+       <script src="$relativePath/js/jquery.slim.min.js" type="javascript"></script>
+       <!--script src="$relativePath/js/popper.min.js" type="javascript"></script-->
+       <script src="$relativePath/js/bootstrap.bundle.min.js" type="javascript"></script>
+       <link rel="stylesheet" href="$relativePath/css/all.min.css" type="text/css" />
+       <link rel="stylesheet" href="$relativePath/css/bootstrap.min.css" type="text/css" />
+       <link rel="stylesheet" href="$relativePath/css/amaven-base.css" type="text/css" />
+       <link rel="stylesheet" href="$relativePath/css/maven-theme.css" type="text/css" />
+       <link rel="stylesheet" href="$relativePath/css/site.css" type="text/css" />
+       <link rel="stylesheet" href="$relativePath/css/print.css" type="text/css" media="print" />
 #foreach( $author in $authors )
       <meta name="author" content="$author" />
 #end
@@ -31,24 +32,47 @@
 #**#$render.eval( $decoration.body.head )
 #end
     $headContent
-#**##googleAnalytics( $decoration.googleAnalyticsAccountId )
   </head>
   <body class="composite">
-    <div id="banner">
-#*  *##banner( $decoration.bannerLeft "bannerLeft" )
-#*  *##banner( $decoration.bannerRight "bannerRight" )
-      <div class="clear">
-        <hr/>
+  <nav class="navbar navbar-light navbar-expand-md bg-faded justify-content-center">
+      <!--a href="/" class="navbar-brand d-flex w-50 mr-auto">Navbar 3</a-->
+      #banner( $decoration.bannerLeft "bannerLeft" "navbar-brand")
+      <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsingNavbar3">
+          <span class="navbar-toggler-icon"></span>
+      </button>
+      <div class="navbar-collapse collapse w-100" id="collapsingNavbar3">
+          <ul class="navbar-nav w-100 justify-content-center">
+              <li class="nav-item active">
+                  <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
+              </li>
+              <li class="nav-item">
+                  <a class="nav-link" href="#">Deciders</a>
+              </li>
+              <li class="nav-item">
+                  <a class="nav-link" href="#">Users</a>
+              </li>
+              <li class="nav-item">
+                  <a class="nav-link" href="#">Developers</a>
+              </li>
+              <li class="nav-item">
+                  <a class="nav-link" href="#">Apache</a>
+              </li>
+          </ul>
+          <ul class="nav navbar-nav ml-auto w-100 justify-content-end">
+              <li class="nav-item">
+                  #banner( $decoration.bannerRight "bannerRight")
+              </li>
+          </ul>
       </div>
-    </div>
+  </nav>
     <div id="breadcrumbs">
-#*  *##publishDate( "left" $decoration.publishDate $decoration.version )
-      <div class="xright">#links( $decoration.body.links )
+        #*  *##publishDate( "left" $decoration.publishDate $decoration.version )
+        <div class="xright">#links( $decoration.body.links )
 #*  *##publishDate( "right" $decoration.publishDate $decoration.version )
-      </div>
-      <div class="clear">
-        <hr/>
-      </div>
+        </div>
+        <div class="clear">
+            <hr/>
+        </div>
     </div>
     <div id="leftColumn">
       <div id="navcolumn">
@@ -78,5 +102,12 @@
         <hr/>
       </div>
     </div>
+
+    <!-- Bootstrap core JavaScript
+    ================================================== -->
+    <!-- Placed at the end of the document so the pages load faster -->
+    <script src="$relativePath/js/jquery.slim.min.js"></script>
+    <script src="$relativePath/js/popper.min.js"></script>
+    <script src="$relativePath/js/bootstrap.min.js"></script>
   </body>
 </html>
diff --git a/plc4x-site-skin/src/main/resources/images/maven-feather.png b/plc4x-site-skin/src/main/resources/images/maven-feather.png
new file mode 100644
index 0000000..f509f82
Binary files /dev/null and b/plc4x-site-skin/src/main/resources/images/maven-feather.png differ