- Initial checkin to the new repo.
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ac3cf67
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,97 @@
+# User-specific stuff:
+.idea/**
+*.iml
+
+# Sensitive or high-churn files:
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.xml
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+### Java template
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# Package Files #
+*.jar
+*.war
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+# Asciidoctor plugin
+.asciidoctor
+
+### Maven template
+target/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+pom.xml.next
+release.properties
+dependency-reduced-pom.xml
+buildNumber.properties
+.mvn/timing.properties
+
+### Eclipse template
+.metadata
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.settings/
+.loadpath
+.recommenders
+.project
+.classpath
+
+# Locally stored "Eclipse launch configurations"
+*.launch
+
+# STS (Spring Tool Suite)
+.springBeans
+
+# Scala IDE specific (Scala & Java development for Eclipse)
+.cache-main
+.scala_dependencies
+.worksheet
+
+# Emacs backup files
+*~
+.scannerwork
+
+spock-reports
+
+# Other exclusions
+
+.DS_Store
+elasticsearch-data/
+jqassistant/
+
+# Exclude the C++ libs
+plc4cpp/libs/libs/
+plc4cpp/.idea/
+plc4cpp/cmake-build-debug/
+
+    # Ignore VisualStudio related files
+**/CMakeSettings.json
+**/.vs/**
+
+# Exclude temporary python stuff
+plc4py/venv/
+**/__pycache__/**/*
+/plc4cpp/.vscode/ipch
diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000..20f16fd
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,235 @@
+#!groovy
+
+/*
+ *
+ *  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.
+ *
+ */
+pipeline {
+
+    agent {
+        node {
+            label 'plc4x'
+        }
+    }
+
+    environment {
+        // It seems the login the jenkins slave uses, doesn't pick up the environment changes,
+        // so we have to try to manually add theme here.
+        MAVEN_HOME = '/opt/maven'
+        PATH = "${MAVEN_HOME}/bin:${env.PATH}"
+
+        PLC4X_BUILD_ON_JENKINS = true
+        JENKINS_PROFILE = 'jenkins-build'
+        // On non develop build we don't want to pollute the global m2 repo
+        MVN_LOCAL_REPO_OPT = '-Dmaven.repo.local=.repository'
+        // Test failures will be handled by the jenkins junit steps and mark the build as unstable.
+        MVN_TEST_FAIL_IGNORE = '-Dmaven.test.failure.ignore=true'
+    }
+
+    tools {
+        maven 'Maven 3 (latest)'
+        jdk 'JDK 1.8 (latest)'
+    }
+
+    options {
+        // Kill this job after one hour.
+        timeout(time: 2, unit: 'HOURS')
+        // When we have test-fails e.g. we don't need to run the remaining steps
+        skipStagesAfterUnstable()
+        buildDiscarder(logRotator(numToKeepStr: '5', artifactNumToKeepStr: '3'))
+    }
+
+    stages {
+        stage('Initialization') {
+            steps {
+                echo 'Building Branch: ' + env.BRANCH_NAME
+                echo 'Using PATH = ' + env.PATH
+            }
+        }
+
+        stage('Cleanup') {
+            steps {
+                echo 'Cleaning up the workspace'
+                deleteDir()
+            }
+        }
+
+        stage('Checkout') {
+            steps {
+                echo 'Checking out branch ' + env.BRANCH_NAME
+                checkout scm
+            }
+        }
+
+        stage('Build') {
+            when {
+                expression {
+                    env.BRANCH_NAME != 'develop'
+                }
+            }
+            steps {
+                echo 'Building'
+                sh 'mvn -P${JENKINS_PROFILE},development,with-cpp,with-java,with-dotnet,with-python,with-proxies,with-sandbox ${MVN_TEST_FAIL_IGNORE} ${MVN_LOCAL_REPO_OPT} clean install'
+            }
+            post {
+                always {
+                    junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
+                    junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true)
+                }
+            }
+        }
+
+        stage('Build develop') {
+            when {
+                branch 'develop'
+            }
+            steps {
+                echo 'Building'
+                // Clean up the snapshots directory.
+                dir("local-snapshots-dir/") {
+                    deleteDir()
+                }
+
+                // We'll deploy to a relative directory so we can save
+                // that and deploy in a later step on a different node
+                sh 'mvn -U -P${JENKINS_PROFILE},development,with-java,with-dotnet,with-cpp,with-python,with-proxies,with-sandbox ${MVN_TEST_FAIL_IGNORE} ${JQASSISTANT_NEO4J_VERSION} -DaltDeploymentRepository=snapshot-repo::default::file:./local-snapshots-dir clean deploy'
+
+                // Stash the build results so we can deploy them on another node
+                stash name: 'plc4x-build-snapshots', includes: 'local-snapshots-dir/**'
+            }
+            post {
+                always {
+                    junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
+                    junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true)
+                }
+            }
+        }
+
+        stage('Deploy') {
+            when {
+                branch 'develop'
+            }
+            // Only the official build nodes have the credentials to deploy setup.
+            agent {
+                node {
+                    label 'ubuntu'
+                }
+            }
+            steps {
+                echo 'Deploying'
+                // Clean up the snapshots directory.
+                dir("local-snapshots-dir/") {
+                    deleteDir()
+                }
+
+                // Unstash the previously stashed build results.
+                unstash name: 'plc4x-build-snapshots'
+
+                // Deploy the artifacts using the wagon-maven-plugin.
+                sh 'mvn -f jenkins.pom -X -P deploy-snapshots wagon:upload'
+
+                // Clean up the snapshots directory (freeing up more space after deploying).
+                dir("local-snapshots-dir/") {
+                    deleteDir()
+                }
+            }
+        }
+
+    }
+
+    // Send out notifications on unsuccessful builds.
+    post {
+        // If this build failed, send an email to the list.
+        failure {
+            script {
+                if(env.BRANCH_NAME == "develop") {
+                    emailext(
+                        subject: "[BUILD-FAILURE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
+                        body: """
+BUILD-FAILURE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
+
+Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]</a>"
+""",
+                        to: "dev@plc4x.apache.org",
+                        recipientProviders: [[$class: 'DevelopersRecipientProvider']]
+                    )
+                }
+            }
+        }
+
+        // If this build didn't fail, but there were failing tests, send an email to the list.
+        unstable {
+            script {
+                if(env.BRANCH_NAME == "develop") {
+                    emailext(
+                        subject: "[BUILD-UNSTABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
+                        body: """
+BUILD-UNSTABLE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
+
+Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]</a>"
+""",
+                        to: "dev@plc4x.apache.org",
+                        recipientProviders: [[$class: 'DevelopersRecipientProvider']]
+                    )
+                }
+            }
+        }
+
+        // Send an email, if the last build was not successful and this one is.
+        success {
+            // Cleanup the build directory if the build was successful
+            // (in this cae we probably don't have to do any post-build analysis)
+            deleteDir()
+            script {
+                if ((env.BRANCH_NAME == "develop") && (currentBuild.previousBuild != null) && (currentBuild.previousBuild.result != 'SUCCESS')) {
+                    emailext (
+                        subject: "[BUILD-STABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
+                        body: """
+BUILD-STABLE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
+
+Is back to normal.
+""",
+                        to: "dev@plc4x.apache.org",
+                        recipientProviders: [[$class: 'DevelopersRecipientProvider']]
+                    )
+                }
+            }
+        }
+
+        always {
+            script {
+                if(env.BRANCH_NAME == "master") {
+                    // Double check if something was really changed as sometimes the
+                    // build just runs without any changes.
+                    if(currentBuild.changeSets.size() > 0) {
+                        emailext(
+                            subject: "[COMMIT-TO-MASTER]: A commit to the master branch was made'",
+                            body: """
+COMMIT-TO-MASTER: A commit to the master branch was made:
+
+Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]</a>"
+""",
+                            to: "dev@plc4x.apache.org",
+                            recipientProviders: [[$class: 'DevelopersRecipientProvider']]
+                        )
+                    }
+                }
+            }
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/language-base/pom.xml b/code-generation/language-base/pom.xml
similarity index 95%
rename from language-base/pom.xml
rename to code-generation/language-base/pom.xml
index 7980f7a..d4e1ed2 100644
--- a/language-base/pom.xml
+++ b/code-generation/language-base/pom.xml
@@ -29,7 +29,7 @@
 
   <artifactId>plc4x-code-generation-language-base</artifactId>
 
-  <name>Sandbox: Code Generation: Language Template Base</name>
+  <name>PLC4X Build Tools: Code Generation: Language Base</name>
   <description>Base stuff for building language templates</description>
 
   <dependencies>
diff --git a/language-base/src/main/java/org/apache/plc4x/plugins/codegenerator/language/LanguageOutput.java b/code-generation/language-base/src/main/java/org/apache/plc4x/plugins/codegenerator/language/LanguageOutput.java
similarity index 100%
rename from language-base/src/main/java/org/apache/plc4x/plugins/codegenerator/language/LanguageOutput.java
rename to code-generation/language-base/src/main/java/org/apache/plc4x/plugins/codegenerator/language/LanguageOutput.java
diff --git a/plc4x-maven-plugin/pom.xml b/code-generation/plc4x-maven-plugin/pom.xml
similarity index 98%
rename from plc4x-maven-plugin/pom.xml
rename to code-generation/plc4x-maven-plugin/pom.xml
index 33d3709..bab3c22 100644
--- a/plc4x-maven-plugin/pom.xml
+++ b/code-generation/plc4x-maven-plugin/pom.xml
@@ -31,7 +31,7 @@
   <artifactId>plc4x-maven-plugin</artifactId>
   <packaging>maven-plugin</packaging>
 
-  <name>Sandbox: Code Generation: PLC4X Maven Plugin</name>
+  <name>PLC4X Build Tools: Code Generation: PLC4X Maven Plugin</name>
 
   <dependencies>
     <dependency>
diff --git a/plc4x-maven-plugin/src/main/java/org/apache/plc4x/plugins/codegenerator/GenerateMojo.java b/code-generation/plc4x-maven-plugin/src/main/java/org/apache/plc4x/plugins/codegenerator/GenerateMojo.java
similarity index 100%
rename from plc4x-maven-plugin/src/main/java/org/apache/plc4x/plugins/codegenerator/GenerateMojo.java
rename to code-generation/plc4x-maven-plugin/src/main/java/org/apache/plc4x/plugins/codegenerator/GenerateMojo.java
diff --git a/code-generation/pom.xml b/code-generation/pom.xml
new file mode 100644
index 0000000..c06ffde
--- /dev/null
+++ b/code-generation/pom.xml
@@ -0,0 +1,113 @@
+<?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>
+
+  <!--
+    This is intentionally set to the apache parent as this way
+    we can release this module separately from the rest of the project
+  -->
+  <parent>
+    <groupId>org.apache</groupId>
+    <artifactId>apache</artifactId>
+    <version>21</version>
+    <relativePath/>
+  </parent>
+
+  <groupId>org.apache.plc4x.plugins</groupId>
+  <artifactId>plc4x-code-generaton</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>PLC4X Build Tools: Code Generation</name>
+  <description>This module groups all the modules that will be moved outside the core repository.</description>
+
+  <properties>
+    <maven.version>3.3.9</maven.version>
+    <java.version>1.8</java.version>
+  </properties>
+
+  <prerequisites>
+    <maven>${maven.version}</maven>
+  </prerequisites>
+
+  <modules>
+    <module>types-base</module>
+    <module>language-base</module>
+    <module>protocol-base</module>
+    <module>plc4x-maven-plugin</module>
+  </modules>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.1.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.8.0</version>
+          <configuration>
+            <source>${java.version}</source>
+            <target>${java.version}</target>
+            <testSource>${java.version}</testSource>
+            <testTarget>${java.version}</testTarget>
+          </configuration>
+        </plugin>
+        <plugin>
+          <artifactId>maven-plugin-plugin</artifactId>
+          <version>3.6.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.5.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.8.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-invoker-plugin</artifactId>
+          <version>3.1.0</version>
+        </plugin>
+        <plugin>
+          <groupId>org.antlr</groupId>
+          <artifactId>antlr4-maven-plugin</artifactId>
+          <version>${antlr.version}</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/protocol-base/pom.xml b/code-generation/protocol-base/pom.xml
similarity index 95%
rename from protocol-base/pom.xml
rename to code-generation/protocol-base/pom.xml
index 1a58611..6ad27a7 100644
--- a/protocol-base/pom.xml
+++ b/code-generation/protocol-base/pom.xml
@@ -29,7 +29,7 @@
 
   <artifactId>plc4x-code-generation-protocol-base</artifactId>
 
-  <name>Sandbox: Code Generation: Protocol Base</name>
+  <name>PLC4X Build Tools: Code Generation: Protocol Base</name>
   <description>Base stuff for building protocols</description>
 
   <dependencies>
diff --git a/protocol-base/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/Protocol.java b/code-generation/protocol-base/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/Protocol.java
similarity index 100%
rename from protocol-base/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/Protocol.java
rename to code-generation/protocol-base/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/Protocol.java
diff --git a/types-base/pom.xml b/code-generation/types-base/pom.xml
similarity index 95%
rename from types-base/pom.xml
rename to code-generation/types-base/pom.xml
index 03d30ec..11a6ce2 100644
--- a/types-base/pom.xml
+++ b/code-generation/types-base/pom.xml
@@ -29,7 +29,7 @@
 
   <artifactId>plc4x-code-generation-types-base</artifactId>
 
-  <name>Sandbox: Code Generation: Base Types</name>
+  <name>PLC4X Build Tools: Code Generation: Base Types</name>
   <description>Base used throughout the code-generation.</description>
 
 </project>
\ No newline at end of file
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/Argument.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/Argument.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/Argument.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/Argument.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/ComplexTypeDefinition.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/ComplexTypeDefinition.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/ComplexTypeDefinition.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/ComplexTypeDefinition.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/DiscriminatedComplexTypeDefinition.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/DiscriminatedComplexTypeDefinition.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/DiscriminatedComplexTypeDefinition.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/DiscriminatedComplexTypeDefinition.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/EnumTypeDefinition.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/EnumTypeDefinition.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/EnumTypeDefinition.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/EnumTypeDefinition.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/TypeDefinition.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/TypeDefinition.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/TypeDefinition.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/definitions/TypeDefinition.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/exceptions/GenerationException.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/exceptions/GenerationException.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/exceptions/GenerationException.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/exceptions/GenerationException.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/ArrayField.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/ArrayField.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/ArrayField.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/ArrayField.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/ConstField.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/ConstField.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/ConstField.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/ConstField.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/DiscriminatorField.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/DiscriminatorField.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/DiscriminatorField.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/DiscriminatorField.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/Field.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/Field.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/Field.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/Field.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/ImplicitField.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/ImplicitField.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/ImplicitField.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/ImplicitField.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/OptionalField.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/OptionalField.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/OptionalField.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/OptionalField.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/PropertyField.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/PropertyField.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/PropertyField.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/PropertyField.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/ReservedField.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/ReservedField.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/ReservedField.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/ReservedField.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/SimpleField.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/SimpleField.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/SimpleField.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/SimpleField.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/SwitchField.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/SwitchField.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/SwitchField.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/SwitchField.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/TypedField.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/TypedField.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/TypedField.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/fields/TypedField.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/references/ComplexTypeReference.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/references/ComplexTypeReference.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/references/ComplexTypeReference.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/references/ComplexTypeReference.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/references/SimpleTypeReference.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/references/SimpleTypeReference.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/references/SimpleTypeReference.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/references/SimpleTypeReference.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/references/SimpleVarLengthTypeReference.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/references/SimpleVarLengthTypeReference.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/references/SimpleVarLengthTypeReference.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/references/SimpleVarLengthTypeReference.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/references/TypeReference.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/references/TypeReference.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/references/TypeReference.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/references/TypeReference.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/BinaryTerm.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/BinaryTerm.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/BinaryTerm.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/BinaryTerm.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/BooleanLiteral.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/BooleanLiteral.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/BooleanLiteral.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/BooleanLiteral.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/Literal.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/Literal.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/Literal.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/Literal.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/NullLiteral.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/NullLiteral.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/NullLiteral.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/NullLiteral.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/NumericLiteral.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/NumericLiteral.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/NumericLiteral.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/NumericLiteral.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/StringLiteral.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/StringLiteral.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/StringLiteral.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/StringLiteral.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/Term.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/Term.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/Term.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/Term.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/TernaryTerm.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/TernaryTerm.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/TernaryTerm.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/TernaryTerm.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/UnaryTerm.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/UnaryTerm.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/UnaryTerm.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/UnaryTerm.java
diff --git a/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/VariableLiteral.java b/code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/VariableLiteral.java
similarity index 100%
rename from types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/VariableLiteral.java
rename to code-generation/types-base/src/main/java/org/apache/plc4x/plugins/codegenerator/types/terms/VariableLiteral.java
diff --git a/pom.xml b/pom.xml
index b15d1e7..648318f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,92 +22,15 @@
          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>
 
-  <!--
-    This is intentionally set to the apache parent as this way
-    we can release this module separately from the rest of the project
-  -->
-  <parent>
-    <groupId>org.apache</groupId>
-    <artifactId>apache</artifactId>
-    <version>21</version>
-    <relativePath/>
-  </parent>
-
   <groupId>org.apache.plc4x.plugins</groupId>
-  <artifactId>plc4x-code-generaton-external</artifactId>
+  <artifactId>plc4x-build-tools</artifactId>
   <version>1.0.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
-  <name>Sandbox: Code Generation: External</name>
-  <description>This module groups all the modules that will be moved outside the core repository.</description>
-
-  <properties>
-    <maven.version>3.3.9</maven.version>
-    <java.version>1.8</java.version>
-  </properties>
-
-  <prerequisites>
-    <maven>${maven.version}</maven>
-  </prerequisites>
+  <name>PLC4X Build-Tools</name>
 
   <modules>
-    <module>types-base</module>
-    <module>language-base</module>
-    <module>protocol-base</module>
-    <module>plc4x-maven-plugin</module>
+    <module>code-generation</module>
   </modules>
 
-  <build>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <artifactId>maven-clean-plugin</artifactId>
-          <version>3.1.0</version>
-        </plugin>
-        <plugin>
-          <artifactId>maven-resources-plugin</artifactId>
-          <version>3.0.2</version>
-        </plugin>
-        <plugin>
-          <artifactId>maven-compiler-plugin</artifactId>
-          <version>3.8.0</version>
-          <configuration>
-            <source>${java.version}</source>
-            <target>${java.version}</target>
-            <testSource>${java.version}</testSource>
-            <testTarget>${java.version}</testTarget>
-          </configuration>
-        </plugin>
-        <plugin>
-          <artifactId>maven-plugin-plugin</artifactId>
-          <version>3.6.0</version>
-        </plugin>
-        <plugin>
-          <artifactId>maven-surefire-plugin</artifactId>
-          <version>2.22.1</version>
-        </plugin>
-        <plugin>
-          <artifactId>maven-jar-plugin</artifactId>
-          <version>3.0.2</version>
-        </plugin>
-        <plugin>
-          <artifactId>maven-install-plugin</artifactId>
-          <version>2.5.2</version>
-        </plugin>
-        <plugin>
-          <artifactId>maven-deploy-plugin</artifactId>
-          <version>2.8.2</version>
-        </plugin>
-        <plugin>
-          <artifactId>maven-invoker-plugin</artifactId>
-          <version>3.1.0</version>
-        </plugin>
-        <plugin>
-          <groupId>org.antlr</groupId>
-          <artifactId>antlr4-maven-plugin</artifactId>
-          <version>${antlr.version}</version>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
 </project>