diff --git a/.gitignore b/.gitignore
index aa0282eb2dcea439ad181e21a62ce01a7d5c80bb..13c4bbbe76eea9afc71901c7f3401d51af57e06f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,4 +10,3 @@
 /src/gen-res
 /*.png
 uml.md
-gradle.properties
diff --git a/build.gradle b/build.gradle
index b496f6f6f2cfbe5c90442dc8c77dc3eb2c1a2df6..0a3b93f22a86f1cd020ce9f653c3352e1ec8cb6a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,75 +1,60 @@
-buildscript {
-    repositories.jcenter()
-    dependencies {
-        classpath 'org.jastadd:jastaddgradle:1.13.3'
-    }
-}
-
+// --- Plugin definitions ---
 plugins {
     id 'com.github.ben-manes.versions' version '0.36.0'
     id 'java'
     id 'idea'
+    id 'org.jastadd' version "${jastadd_gradle_version}"
     id 'application'
 }
 
-apply plugin: 'jastadd'
-
-mainClassName = 'de.tudresden.inf.st.mrc.MinimalMain'
-
+// --- Dependencies ---
 repositories {
-    jcenter()
+    mavenCentral()
     maven {
         name "gitlab-maven"
         url "https://git-st.inf.tu-dresden.de/api/v4/groups/jastadd/-/packages/maven"
     }
 }
 
-apply plugin: 'jastadd'
-
 configurations {
-    baseRuntimeClasspath
-    ragconnectClasspath
-    grammar2umlClasspath
+    ragconnect
+    grammar2uml
+    relast
 }
 
-run {
-    standardInput = System.in
+dependencies {
+    grammar2uml group: 'de.tudresden.inf.st', name: 'grammar2uml', version: '0.2.4'
+
+    relast group: 'org.jastadd', name: 'relast', version: "0.4.0-143"
+    ragconnect group: 'de.tudresden.inf.st', name: 'ragconnect', version: '1.0.0-alpha-214'
+
+    implementation group: 'de.tudresden.inf.st', name: 'dumpAst', version: '1.0.4-70'
+    jastadd2 group: 'org.jastadd', name: 'jastadd2', version: '2.3.5-dresden'
+
+    implementation group: 'org.fusesource.mqtt-client', name: 'mqtt-client', version: '1.16'
+    implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: "${log4j_version}"
+    implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: "${log4j_version}"
+    implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: "${jackson_version}"
+    implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: "${jackson_version}"
 }
 
+// --- Preprocessors ---
 File genSrc = file("src/gen/java")
 sourceSets.main.java.srcDir genSrc
 idea.module.generatedSourceDirs += genSrc
 
-dependencies {
-//    implementation fileTree(include: ['dumpAst2uml.jar'], dir: 'libs')
-    implementation group: 'org.fusesource.mqtt-client', name: 'mqtt-client', version: '1.16'
-    implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.14.0'
-    implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.14.0'
-    implementation group: 'de.tudresden.inf.st', name: 'dumpAstWithPlantuml', version: '0.3.5'
-    implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.12.1'
-    implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.12.1'
-    implementation group: 'de.tudresden.inf.st', name: 'dumpAst', version: '0.3.5'
-    grammar2umlClasspath group: 'de.tudresden.inf.st', name: 'grammar2uml', version: '0.1.1'
-
-//    ragconnectClasspath group: 'de.tudresden.inf.st', name: 'ragconnect', version: '0.2.4'
-    ragconnectClasspath fileTree(include: ['ragconnect-0.2.5.jar'], dir: '/data/git/jastadd-ragconnect/ragconnect.base/build/libs')
-//    jastadd2 "org.jastadd:jastadd:2.3.4"
-    jastadd2 fileTree(include: ['jastadd2.jar'], dir: '/data/git/jastadd-2/')
-}
-
 // Input files for relast
 def relastFiles = ["src/gen/jastadd/MinimalModel.relast", "src/gen/jastadd/RagConnect.relast"]
 
 task grammar2uml(type: JavaExec) {
     main = 'de.tudresden.inf.st.jastadd.grammar2uml.compiler.Compiler'
-    classpath = configurations.grammar2umlClasspath
-//    classpath = configurations.implementation
+    classpath = configurations.grammar2uml
 
     args([
-            '--verbose',
-         ]
-    +
-         relastFiles)
+            '--inputGrammar2Uml=minimal.folder',
+            '--output=uml.png',
+            'src/main/jastadd/MinimalModel.relast'
+         ])
 }
 
 // phases: ragConnect -> RelAst -> JastAdd
@@ -77,35 +62,36 @@ task grammar2uml(type: JavaExec) {
 task ragConnect(type: JavaExec) {
     group = 'Build'
     main = 'org.jastadd.ragconnect.compiler.Compiler'
-    classpath = configurations.ragconnectClasspath
+    classpath = configurations.ragconnect
 
     args([
             '--o=src/gen/jastadd',
             'src/main/jastadd/MinimalModel.relast',
             'src/main/jastadd/MinimalModel.connect',
+            '--List=JastAddList',
             '--logReads',
             '--logWrites',
-            '--verbose',
             '--rootNode=Root',
             '--incremental=param,debug',
             "--tracing=cache,flush"
     ])
-
 }
 
 // phase: RelAst
 task relastToJastAdd(type: JavaExec) {
     group = 'Build'
-    main = "-jar"
+    classpath = configurations.relast
+    mainClass = 'org.jastadd.relast.compiler.Compiler'
 
-    args(["libs/relast.jar",
+    args([
             "--grammarName=./src/gen/jastadd/model",
             "--useJastAddNames",
             "--listClass=java.util.ArrayList",
             "--jastAddList=JastAddList",
             "--serializer=jackson",
             "--resolverHelper",
-            "--file"]
+            "--file"
+    ]
     +
             relastFiles)
 
@@ -113,19 +99,13 @@ task relastToJastAdd(type: JavaExec) {
     outputs.files file("./src/gen/jastadd/model.ast"), file("./src/gen/jastadd/model.jadd")
 }
 
+// --- JastAdd ---
 // phase: JastAdd
 jastadd {
     configureModuleBuild()
     modules {
         //noinspection GroovyAssignabilityCheck
         module("minimal") {
-
-            java {
-                basedir "src/"
-                include "main/**/*.java"
-                include "gen/**/*.java"
-            }
-
             jastadd {
                 basedir "src/"
                 include "main/jastadd/**/*.ast"
@@ -144,17 +124,12 @@ jastadd {
     }
 
     preprocessParser.doFirst {
-
         args += ["--no-beaver-symbol"]
-
     }
 
     module = "minimal"
-
     astPackage = 'de.tudresden.inf.st.mrc.ast'
-
     genDir = 'src/gen/java'
-
     buildInfoDir = 'src/gen-res'
 
     // jastaddOptions = ["--lineColumnNumbers", "--visitCheck=true", "--rewrite=cnta", "--cache=all"]
@@ -173,6 +148,11 @@ cleanGen.doFirst {
     delete "src/gen/jastadd"
 }
 
-// Workflow configuration for phases
+// --- Versioning and Publishing ---
+mainClassName = 'de.tudresden.inf.st.mrc.MinimalMain'
+
+// --- Task order ---
 generateAst.dependsOn relastToJastAdd
 relastToJastAdd.dependsOn ragConnect
+
+// --- Misc ---
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000000000000000000000000000000000000..f42f592a3f2a51b0702e1ffa9b523faaf64a4d29
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,11 @@
+# suppress inspection "UnusedProperty" for whole file
+systemProp.socksProxyHost=127.0.0.1
+systemProp.socksProxyPort=9999
+jackson_version = 2.13.2
+jackson_yaml_version = 2.13.2
+jupiter_version = 5.8.2
+assertj_version = 3.22.0
+log4j_version = 2.17.2
+protobuf_version = 4.0.0-rc-2
+protobuf_plugin_version = 0.8.18
+jastadd_gradle_version = 1.14.5
diff --git a/minimal.folder b/minimal.folder
new file mode 100644
index 0000000000000000000000000000000000000000..1715663cc9392d3eb38102473d7825dfb41550f4
--- /dev/null
+++ b/minimal.folder
@@ -0,0 +1,3 @@
+folder Sender : SenderRoot, SenderSubTree
+folder Receiver : ReceiverRoot, ReceiverSubTree
+folder Alfa : Alfa, Echo, Foxtrot, Golf
diff --git a/src/main/jastadd/MinimalModel.connect b/src/main/jastadd/MinimalModel.connect
index 1015d1ee1e1343b9107ec9cf328a6425c48fac79..8bc77ebd212a5cb35fed25eda5ea3d2b692359e2 100644
--- a/src/main/jastadd/MinimalModel.connect
+++ b/src/main/jastadd/MinimalModel.connect
@@ -3,8 +3,8 @@ receive A.Input ;
 send A.OutputOnA ;
 send B.OutputOnB using Transformation ;
 send C.OutputOnC using Transformation ;
-send tree A.D ;
-receive tree A.Reading ;
+send A.D ;
+receive A.Reading ;
 
 // mapping definitions
 Transformation maps String s to String {:
@@ -17,5 +17,5 @@ B.OutputOnB canDependOn A.Input as dependencyB ;
 C.OutputOnC canDependOn A.Input as dependencyC ;
 
 // --- relational case ---
-send tree SenderRoot.Alfa ;
-receive tree ReceiverRoot.Alfa ;
+send SenderRoot.Alfa ;
+receive ReceiverRoot.Alfa ;