diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000000000000000000000000000000000000..9971a6482e1a133c7c7d1aeb85778a9563ec59b1
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "relast-preprocessor"]
+	path = relast-preprocessor
+	url = ../relast-preprocessor.git
diff --git a/libs/relast.jar b/libs/relast.jar
new file mode 100644
index 0000000000000000000000000000000000000000..b1a7542048dd1611db7f479307b0285efd8bb1f6
Binary files /dev/null and b/libs/relast.jar differ
diff --git a/.gitignore b/ragconnect.base/.gitignore
similarity index 100%
rename from .gitignore
rename to ragconnect.base/.gitignore
diff --git a/build.gradle b/ragconnect.base/build.gradle
similarity index 75%
rename from build.gradle
rename to ragconnect.base/build.gradle
index c986f2a61adf610a9c2e5fdc7fd20eb193a9a46a..b0bf2e8ceb252325b9f125fbf3ed1d7678526a08 100644
--- a/build.gradle
+++ b/ragconnect.base/build.gradle
@@ -1,11 +1,17 @@
+apply plugin: 'java-library'
+apply plugin: 'idea'
 apply plugin: 'jastadd'
 apply plugin: 'application'
 
+group = 'de.tudresden.inf.st'
+
 sourceCompatibility = 1.8
+targetCompatibility = 1.8
 
 mainClassName = 'org.jastadd.ragconnect.compiler.Compiler'
 
 repositories {
+        mavenCentral()
     jcenter()
 }
 
@@ -17,9 +23,11 @@ buildscript {
 }
 
 dependencies {
-    implementation project(':relast.preprocessor')
-    implementation group: 'com.github.spullara.mustache.java', name: 'compiler', version: '0.9.6'
+    implementation project(':relast-preprocessor')
+    implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.2'
+    implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.2'
     implementation group: 'org.apache.logging.log4j', name: 'log4j-jul', version: '2.11.2'
+    implementation group: 'com.github.spullara.mustache.java', name: 'compiler', version: '0.9.6'
     runtime group: 'org.jastadd', name: 'jastadd', version: '2.3.4'
     api group: 'net.sf.beaver', name: 'beaver-rt', version: '0.9.11'
 }
@@ -43,16 +51,8 @@ task newVersion() {
     }
 }
 
-sourceSets {
-    main {
-        java.srcDir "src/gen/java"
-    }
-}
-
-test {
-    useJUnitPlatform()
-
-    maxHeapSize = '1G'
+sourceSets.main.java {
+    srcDir "src/gen/java"
 }
 
 jar {
@@ -71,7 +71,7 @@ task relast(type: JavaExec) {
 
     args = [
             "../libs/relast.jar",
-            "../relast.preprocessor/src/main/jastadd/RelAst.relast",
+            "../relast-preprocessor/src/main/jastadd/RelAst.relast",
             "./src/main/jastadd/RagConnect.relast",
             "./src/main/jastadd/MustacheNodes.relast",
             "./src/main/jastadd/YAML.relast",
@@ -84,7 +84,7 @@ task relast(type: JavaExec) {
     ]
 
     inputs.files("../libs/relast.jar",
-            "../relast.preprocessor/src/main/jastadd/RelAst.relast",
+            "../relast-preprocessor/src/main/jastadd/RelAst.relast",
             "./src/main/jastadd/RagConnect.relast",
             "./src/main/jastadd/MustacheNodes.relast",
             "./src/main/jastadd/YAML.relast")
@@ -102,17 +102,17 @@ jastadd {
 
             java {
                 basedir ".."
-                include "relast.preprocessor/main/**/*.java"
-                include "relast.preprocessor/gen/**/*.java"
+                include "relast-preprocessor/main/**/*.java"
+                include "relast-preprocessor/gen/**/*.java"
                 include "ragconnect.base/src/main/**/*.java"
                 include "ragconnect.base/src/gen/**/*.java"
             }
 
             jastadd {
                 basedir ".."
-                include "relast.preprocessor/src/main/jastadd/**/*.ast"
-                include "relast.preprocessor/src/main/jastadd/**/*.jadd"
-                include "relast.preprocessor/src/main/jastadd/**/*.jrag"
+                include "relast-preprocessor/src/main/jastadd/**/*.ast"
+                include "relast-preprocessor/src/main/jastadd/**/*.jadd"
+                include "relast-preprocessor/src/main/jastadd/**/*.jrag"
                 include "ragconnect.base/src/main/jastadd/**/*.ast"
                 include "ragconnect.base/src/main/jastadd/**/*.jadd"
                 include "ragconnect.base/src/main/jastadd/**/*.jrag"
@@ -123,23 +123,23 @@ jastadd {
 
             scanner {
                 basedir ".."
-                include "ragconnect.base/src/main/jastadd/scanner/Header.flex",               [-5]
-                include "relast.preprocessor/src/main/jastadd/scanner/Preamble.flex",      [-4]
-                include "relast.preprocessor/src/main/jastadd/scanner/Macros.flex",        [-3]
-                include "ragconnect.base/src/main/jastadd/scanner/Macros.flex",               [-3]
-                include "relast.preprocessor/src/main/jastadd/scanner/RulesPreamble.flex", [-2]
-                include "ragconnect.base/src/main/jastadd/scanner/MappingContent.flex",       [-1]
+                include "ragconnect.base/src/main/jastadd/scanner/Header.flex",             [-5]
+                include "relast-preprocessor/src/main/jastadd/scanner/Preamble.flex",       [-4]
+                include "relast-preprocessor/src/main/jastadd/scanner/Macros.flex",         [-3]
+                include "ragconnect.base/src/main/jastadd/scanner/Macros.flex",             [-3]
+                include "relast-preprocessor/src/main/jastadd/scanner/RulesPreamble.flex",  [-2]
+                include "ragconnect.base/src/main/jastadd/scanner/MappingContent.flex",     [-1]
                 include "ragconnect.base/src/main/jastadd/scanner/Keywords.flex"
-                include "relast.preprocessor/src/main/jastadd/scanner/Keywords.flex"
-                include "relast.preprocessor/src/main/jastadd/scanner/Symbols.flex",        [1]
-                include "relast.preprocessor/src/main/jastadd/scanner/RulesPostamble.flex", [2]
+                include "relast-preprocessor/src/main/jastadd/scanner/Keywords.flex"
+                include "relast-preprocessor/src/main/jastadd/scanner/Symbols.flex",        [1]
+                include "relast-preprocessor/src/main/jastadd/scanner/RulesPostamble.flex", [2]
             }
 
             parser {
                 basedir ".."
                 include "ragconnect.base/src/main/jastadd/parser/Preamble.parser"
                 include "ragconnect.base/src/main/jastadd/parser/RagConnect.parser"
-                include "relast.preprocessor/src/main/jastadd/parser/RelAst.parser"
+                include "relast-preprocessor/src/main/jastadd/parser/RelAst.parser"
             }
         }
     }
diff --git a/src/main/jastadd/Analysis.jrag b/ragconnect.base/src/main/jastadd/Analysis.jrag
similarity index 100%
rename from src/main/jastadd/Analysis.jrag
rename to ragconnect.base/src/main/jastadd/Analysis.jrag
diff --git a/src/main/jastadd/Errors.jrag b/ragconnect.base/src/main/jastadd/Errors.jrag
similarity index 100%
rename from src/main/jastadd/Errors.jrag
rename to ragconnect.base/src/main/jastadd/Errors.jrag
diff --git a/src/main/jastadd/MustacheNodes.relast b/ragconnect.base/src/main/jastadd/MustacheNodes.relast
similarity index 100%
rename from src/main/jastadd/MustacheNodes.relast
rename to ragconnect.base/src/main/jastadd/MustacheNodes.relast
diff --git a/src/main/jastadd/NameResolution.jrag b/ragconnect.base/src/main/jastadd/NameResolution.jrag
similarity index 100%
rename from src/main/jastadd/NameResolution.jrag
rename to ragconnect.base/src/main/jastadd/NameResolution.jrag
diff --git a/src/main/jastadd/Navigation.jrag b/ragconnect.base/src/main/jastadd/Navigation.jrag
similarity index 100%
rename from src/main/jastadd/Navigation.jrag
rename to ragconnect.base/src/main/jastadd/Navigation.jrag
diff --git a/src/main/jastadd/Printing.jrag b/ragconnect.base/src/main/jastadd/Printing.jrag
similarity index 100%
rename from src/main/jastadd/Printing.jrag
rename to ragconnect.base/src/main/jastadd/Printing.jrag
diff --git a/src/main/jastadd/RagConnect.relast b/ragconnect.base/src/main/jastadd/RagConnect.relast
similarity index 100%
rename from src/main/jastadd/RagConnect.relast
rename to ragconnect.base/src/main/jastadd/RagConnect.relast
diff --git a/src/main/jastadd/Util.jadd b/ragconnect.base/src/main/jastadd/Util.jadd
similarity index 100%
rename from src/main/jastadd/Util.jadd
rename to ragconnect.base/src/main/jastadd/Util.jadd
diff --git a/src/main/jastadd/YAML.jrag b/ragconnect.base/src/main/jastadd/YAML.jrag
similarity index 100%
rename from src/main/jastadd/YAML.jrag
rename to ragconnect.base/src/main/jastadd/YAML.jrag
diff --git a/src/main/jastadd/YAML.relast b/ragconnect.base/src/main/jastadd/YAML.relast
similarity index 100%
rename from src/main/jastadd/YAML.relast
rename to ragconnect.base/src/main/jastadd/YAML.relast
diff --git a/src/main/jastadd/backend/Configuration.jadd b/ragconnect.base/src/main/jastadd/backend/Configuration.jadd
similarity index 100%
rename from src/main/jastadd/backend/Configuration.jadd
rename to ragconnect.base/src/main/jastadd/backend/Configuration.jadd
diff --git a/src/main/jastadd/backend/Generation.jadd b/ragconnect.base/src/main/jastadd/backend/Generation.jadd
similarity index 100%
rename from src/main/jastadd/backend/Generation.jadd
rename to ragconnect.base/src/main/jastadd/backend/Generation.jadd
diff --git a/src/main/jastadd/backend/Mappings.jrag b/ragconnect.base/src/main/jastadd/backend/Mappings.jrag
similarity index 100%
rename from src/main/jastadd/backend/Mappings.jrag
rename to ragconnect.base/src/main/jastadd/backend/Mappings.jrag
diff --git a/src/main/jastadd/backend/MustacheNodesToYAML.jrag b/ragconnect.base/src/main/jastadd/backend/MustacheNodesToYAML.jrag
similarity index 100%
rename from src/main/jastadd/backend/MustacheNodesToYAML.jrag
rename to ragconnect.base/src/main/jastadd/backend/MustacheNodesToYAML.jrag
diff --git a/src/main/jastadd/parser/Preamble.parser b/ragconnect.base/src/main/jastadd/parser/Preamble.parser
similarity index 100%
rename from src/main/jastadd/parser/Preamble.parser
rename to ragconnect.base/src/main/jastadd/parser/Preamble.parser
diff --git a/src/main/jastadd/parser/RagConnect.parser b/ragconnect.base/src/main/jastadd/parser/RagConnect.parser
similarity index 100%
rename from src/main/jastadd/parser/RagConnect.parser
rename to ragconnect.base/src/main/jastadd/parser/RagConnect.parser
diff --git a/src/main/jastadd/scanner/Header.flex b/ragconnect.base/src/main/jastadd/scanner/Header.flex
similarity index 100%
rename from src/main/jastadd/scanner/Header.flex
rename to ragconnect.base/src/main/jastadd/scanner/Header.flex
diff --git a/src/main/jastadd/scanner/Keywords.flex b/ragconnect.base/src/main/jastadd/scanner/Keywords.flex
similarity index 100%
rename from src/main/jastadd/scanner/Keywords.flex
rename to ragconnect.base/src/main/jastadd/scanner/Keywords.flex
diff --git a/src/main/jastadd/scanner/Macros.flex b/ragconnect.base/src/main/jastadd/scanner/Macros.flex
similarity index 100%
rename from src/main/jastadd/scanner/Macros.flex
rename to ragconnect.base/src/main/jastadd/scanner/Macros.flex
diff --git a/src/main/jastadd/scanner/MappingContent.flex b/ragconnect.base/src/main/jastadd/scanner/MappingContent.flex
similarity index 100%
rename from src/main/jastadd/scanner/MappingContent.flex
rename to ragconnect.base/src/main/jastadd/scanner/MappingContent.flex
diff --git a/src/main/java/org/jastadd/ragconnect/compiler/AppendableWriter.java b/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/AppendableWriter.java
similarity index 100%
rename from src/main/java/org/jastadd/ragconnect/compiler/AppendableWriter.java
rename to ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/AppendableWriter.java
diff --git a/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java b/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java
similarity index 100%
rename from src/main/java/org/jastadd/ragconnect/compiler/Compiler.java
rename to ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java
diff --git a/src/main/java/org/jastadd/ragconnect/compiler/SimpleMain.java b/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/SimpleMain.java
similarity index 100%
rename from src/main/java/org/jastadd/ragconnect/compiler/SimpleMain.java
rename to ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/SimpleMain.java
diff --git a/src/main/java/org/jastadd/ragconnect/compiler/Utils.java b/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Utils.java
similarity index 100%
rename from src/main/java/org/jastadd/ragconnect/compiler/Utils.java
rename to ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Utils.java
diff --git a/src/main/resources/MqttHandler.jadd b/ragconnect.base/src/main/resources/MqttHandler.jadd
similarity index 100%
rename from src/main/resources/MqttHandler.jadd
rename to ragconnect.base/src/main/resources/MqttHandler.jadd
diff --git a/src/main/resources/RestHandler.jadd b/ragconnect.base/src/main/resources/RestHandler.jadd
similarity index 100%
rename from src/main/resources/RestHandler.jadd
rename to ragconnect.base/src/main/resources/RestHandler.jadd
diff --git a/src/main/resources/dependencyDefinition.mustache b/ragconnect.base/src/main/resources/dependencyDefinition.mustache
similarity index 100%
rename from src/main/resources/dependencyDefinition.mustache
rename to ragconnect.base/src/main/resources/dependencyDefinition.mustache
diff --git a/src/main/resources/handleUri.mustache b/ragconnect.base/src/main/resources/handleUri.mustache
similarity index 100%
rename from src/main/resources/handleUri.mustache
rename to ragconnect.base/src/main/resources/handleUri.mustache
diff --git a/src/main/resources/handler.mustache b/ragconnect.base/src/main/resources/handler.mustache
similarity index 100%
rename from src/main/resources/handler.mustache
rename to ragconnect.base/src/main/resources/handler.mustache
diff --git a/src/main/resources/log4j2.xml b/ragconnect.base/src/main/resources/log4j2.xml
similarity index 100%
rename from src/main/resources/log4j2.xml
rename to ragconnect.base/src/main/resources/log4j2.xml
diff --git a/src/main/resources/mappingApplication.mustache b/ragconnect.base/src/main/resources/mappingApplication.mustache
similarity index 100%
rename from src/main/resources/mappingApplication.mustache
rename to ragconnect.base/src/main/resources/mappingApplication.mustache
diff --git a/src/main/resources/mappingDefinition.mustache b/ragconnect.base/src/main/resources/mappingDefinition.mustache
similarity index 100%
rename from src/main/resources/mappingDefinition.mustache
rename to ragconnect.base/src/main/resources/mappingDefinition.mustache
diff --git a/src/main/resources/mqtt.mustache b/ragconnect.base/src/main/resources/mqtt.mustache
similarity index 100%
rename from src/main/resources/mqtt.mustache
rename to ragconnect.base/src/main/resources/mqtt.mustache
diff --git a/src/main/resources/ragConnectVersion.properties b/ragconnect.base/src/main/resources/ragConnectVersion.properties
similarity index 100%
rename from src/main/resources/ragConnectVersion.properties
rename to ragconnect.base/src/main/resources/ragConnectVersion.properties
diff --git a/src/main/resources/ragconnect.mustache b/ragconnect.base/src/main/resources/ragconnect.mustache
similarity index 100%
rename from src/main/resources/ragconnect.mustache
rename to ragconnect.base/src/main/resources/ragconnect.mustache
diff --git a/src/main/resources/receiveDefinition.mustache b/ragconnect.base/src/main/resources/receiveDefinition.mustache
similarity index 100%
rename from src/main/resources/receiveDefinition.mustache
rename to ragconnect.base/src/main/resources/receiveDefinition.mustache
diff --git a/src/main/resources/rest.mustache b/ragconnect.base/src/main/resources/rest.mustache
similarity index 100%
rename from src/main/resources/rest.mustache
rename to ragconnect.base/src/main/resources/rest.mustache
diff --git a/src/main/resources/sendDefinition.mustache b/ragconnect.base/src/main/resources/sendDefinition.mustache
similarity index 100%
rename from src/main/resources/sendDefinition.mustache
rename to ragconnect.base/src/main/resources/sendDefinition.mustache
diff --git a/src/main/resources/tokenComponent.mustache b/ragconnect.base/src/main/resources/tokenComponent.mustache
similarity index 100%
rename from src/main/resources/tokenComponent.mustache
rename to ragconnect.base/src/main/resources/tokenComponent.mustache
diff --git a/relast-preprocessor b/relast-preprocessor
new file mode 160000
index 0000000000000000000000000000000000000000..79d237fda220364ffebf77dc7de0a7b29635e360
--- /dev/null
+++ b/relast-preprocessor
@@ -0,0 +1 @@
+Subproject commit 79d237fda220364ffebf77dc7de0a7b29635e360
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..63cc07e51bd795158585056c756f0dc269181ff9
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,4 @@
+rootProject.name = 'ragconnect'
+
+include 'relast-preprocessor'
+include 'ragconnect.base'