diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 340e07cd3d435ade01867ec7193fb1aca003c6b9..52200cdef6c313fa1c9122dccb9495960b49d7c0 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -45,6 +45,7 @@ publish_master:
   script:
     - "./gradlew publish"
   only:
+    - main
     - master
 
 ragdoc_build:
@@ -77,6 +78,7 @@ ragdoc_view:
   only:
     - dev
     - main
+    - master
   artifacts:
     paths:
       - "pages/docs/ragdoc"
@@ -96,3 +98,4 @@ pages:
       - public/
   only:
     - main
+    - master
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1b001cb8f7f67d2362aff1ea9f911948dbd1adde
--- /dev/null
+++ b/README.md
@@ -0,0 +1,3 @@
+# DumpAst
+
+For documentation, please see https://jastadd.pages.st.inf.tu-dresden.de/relast2uml/
diff --git a/buildSrc/src/main/groovy/relast2uml.java-application-conventions.gradle b/buildSrc/src/main/groovy/relast2uml.java-application-conventions.gradle
index a32686b88da9b321aa62cb18ddc319a12b9e483c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/buildSrc/src/main/groovy/relast2uml.java-application-conventions.gradle
+++ b/buildSrc/src/main/groovy/relast2uml.java-application-conventions.gradle
@@ -1,4 +0,0 @@
-plugins {
-  id 'relast2uml.java-common-conventions'
-  id 'application'
-}
diff --git a/buildSrc/src/main/groovy/relast2uml.java-common-conventions.gradle b/buildSrc/src/main/groovy/relast2uml.java-common-conventions.gradle
index 644c9bd4588c608573019e72d799a760d75a88dc..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/buildSrc/src/main/groovy/relast2uml.java-common-conventions.gradle
+++ b/buildSrc/src/main/groovy/relast2uml.java-common-conventions.gradle
@@ -1,19 +0,0 @@
-plugins {
-  id 'java'
-  id 'idea'
-  id 'com.github.ben-manes.versions'
-}
-
-repositories {
-  mavenCentral()
-}
-
-dependencies {
-  testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: "${jupiter_version}"
-  testImplementation group: 'org.assertj', name: 'assertj-core', version: '3.18.1'
-  testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: "${jupiter_version}"
-}
-
-tasks.named('test') {
-  useJUnitPlatform()
-}
diff --git a/buildSrc/src/main/groovy/relast2uml.java-jastadd-conventions.gradle b/buildSrc/src/main/groovy/relast2uml.java-jastadd-conventions.gradle
index d773a87cb157572d2712c04e39b91ad4a4169c0b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/buildSrc/src/main/groovy/relast2uml.java-jastadd-conventions.gradle
+++ b/buildSrc/src/main/groovy/relast2uml.java-jastadd-conventions.gradle
@@ -1,12 +0,0 @@
-plugins {
-  id 'relast2uml.java-common-conventions'
-  id 'java-library'
-}
-
-dependencies {
-  api group: 'net.sf.beaver', name: 'beaver-rt', version: '0.9.11'
-}
-
-File genSrc = file("src/gen/java")
-sourceSets.main.java.srcDir genSrc
-idea.module.generatedSourceDirs += genSrc
diff --git a/buildSrc/src/main/groovy/relast2uml.java-publishing-conventions.gradle b/buildSrc/src/main/groovy/relast2uml.java-publishing-conventions.gradle
index e3130c9008342d8dc2be8d80e2b29ba064cb31fa..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/buildSrc/src/main/groovy/relast2uml.java-publishing-conventions.gradle
+++ b/buildSrc/src/main/groovy/relast2uml.java-publishing-conventions.gradle
@@ -1,88 +0,0 @@
-plugins {
-  id 'java'
-  id 'idea'
-  id 'com.github.ben-manes.versions'
-  id 'maven-publish'
-}
-
-repositories {
-  mavenCentral()
-}
-
-dependencies {
-  testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: "${jupiter_version}"
-  testImplementation group: 'org.assertj', name: 'assertj-core', version: '3.18.1'
-  testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: "${jupiter_version}"
-}
-
-jar {
-  from {
-    configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
-  }
-}
-
-def versionFile = "src/main/resources/${project.getName()}Version.properties"
-def oldProps = new Properties()
-
-try {
-  file(versionFile).withInputStream { stream -> oldProps.load(stream) }
-  version = oldProps['version']
-} catch (e) {
-  // this happens, if either the properties file is not present, or cannot be read from
-  throw new GradleException("File ${versionFile} not found or unreadable. Aborting.", e)
-}
-
-task printVersion() {
-  doLast {
-    println(version)
-  }
-}
-
-task newVersion() {
-  doFirst {
-    def props = new Properties()
-    props['version'] = value
-    props.store(file(versionFile).newWriter(), null)
-  }
-}
-
-task setDevVersionForCI() {
-  doFirst {
-    def props = new Properties()
-    props['version'] = version + "-$System.env.CI_PIPELINE_IID"
-    props.store(file(versionFile).newWriter(), null)
-  }
-}
-
-//679
-publishing {
-  publications {
-    maven(MavenPublication) {
-      groupId = 'de.tudresden.inf.st'
-//      from components.java
-      artifact("build/libs/${project.getName()}-${project.getVersion()}.jar") {
-          extension 'jar'
-      }
-    }
-  }
-  repositories {
-    maven {
-      url "https://git-st.inf.tu-dresden.de/api/v4/projects/679/packages/maven"
-      // Uncomment the following lines to publish manually (and comment out the other credentials section)
-//            credentials(HttpHeaderCredentials) {
-//                name = "Private-Token"
-//                value = gitLabPrivateToken // the variable resides in ~/.gradle/gradle.properties
-//            }
-      credentials(HttpHeaderCredentials) {
-        name = 'Job-Token'
-        value = System.getenv("CI_JOB_TOKEN")
-      }
-      authentication {
-        header(HttpHeaderAuthentication)
-      }
-    }
-
-  }
-}
-
-publish.dependsOn jar
diff --git a/dumpAst/build.gradle b/dumpAst/build.gradle
index e751cf080448a433aeb67649de7dfc781c22f8d9..39e370c1df74809b6993201fd2082b35294e63b3 100644
--- a/dumpAst/build.gradle
+++ b/dumpAst/build.gradle
@@ -1,3 +1,4 @@
+// --- Buildscripts (must be at the top) ---
 buildscript {
     repositories.mavenLocal()
     repositories.mavenCentral()
@@ -6,20 +7,35 @@ buildscript {
     }
 }
 
+// --- Plugin definitions ---
 plugins {
-    id 'relast2uml.java-jastadd-conventions'
-    id 'relast2uml.java-publishing-conventions'
+    id 'java'
+    id 'idea'
+    id 'com.github.ben-manes.versions'
+    id 'java-library'
+    id 'maven-publish'
 }
 
 apply plugin: 'jastadd'
 
+// --- Dependencies ---
+repositories {
+    mavenCentral()
+}
+
 dependencies {
     jastadd2 "org.jastadd:jastadd:2.3.5"
     implementation fileTree(include: ['plantuml.jar'], dir: '../libs')
+    api group: 'net.sf.beaver', name: 'beaver-rt', version: '0.9.11'
     implementation group: 'com.github.spullara.mustache.java', name: 'compiler', version: "0.9.10"
     implementation group: 'org.yaml', name: 'snakeyaml', version: '1.27'
 }
 
+// --- Preprocessors ---
+File genSrc = file("src/gen/java")
+sourceSets.main.java.srcDir genSrc
+idea.module.generatedSourceDirs += genSrc
+
 File dumpAstGrammar = file('./src/main/jastadd/DumpAst.relast')
 File mustacheGrammar = file('./src/main/jastadd/mustache/Mustache.relast')
 
@@ -56,6 +72,7 @@ task relast(type: JavaExec) {
             file('./src/gen/jastadd/DumpAstResolverStubs.jrag'))
 }
 
+// --- JastAdd ---
 jastadd {
     configureModuleBuild()
     modules {
@@ -98,4 +115,70 @@ jastadd {
     jastaddOptions = ["--lineColumnNumbers", "--List=JastAddList", "--safeLazy", "--visitCheck=true", "--rewrite=cnta", "--cache=all"]
 }
 
+// --- Tests ---
+
+// --- Versioning and Publishing ---
+group = 'de.tudresden.inf.st'
+
+jar {
+    from {
+        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
+    }
+}
+
+def versionFile = "src/main/resources/${project.getName()}Version.properties"
+
+try {
+    def oldProps = new Properties()
+    file(versionFile).withInputStream { stream -> oldProps.load(stream) }
+    version = oldProps['version']
+} catch (e) {
+    // this happens, if either the properties file is not present, or cannot be read from
+    throw new GradleException("File ${versionFile} not found or unreadable. Aborting.", e)
+}
+
+task printVersion() {
+    doLast {
+        println(version)
+    }
+}
+
+task newVersion() {
+    doFirst {
+        def props = new Properties()
+        props['version'] = value
+        props.store(file(versionFile).newWriter(), null)
+    }
+}
+
+task setDevVersionForCI() {
+    doFirst {
+        def props = new Properties()
+        props['version'] = version + "-$System.env.CI_PIPELINE_IID"
+        props.store(file(versionFile).newWriter(), null)
+    }
+}
+
+publishing {
+    publications {
+        maven(MavenPublication) {
+            from components.java
+        }
+    }
+    repositories {
+        maven {
+            url "https://git-st.inf.tu-dresden.de/api/v4/projects/$System.env.CI_PROJECT_ID/packages/maven"
+            credentials(HttpHeaderCredentials) {
+                name = 'Job-Token'
+                value = System.getenv("CI_JOB_TOKEN")
+            }
+            authentication {
+                header(HttpHeaderAuthentication)
+            }
+        }
+    }
+}
+
+// --- Task order ---
 generateAst.dependsOn relast
+publish.dependsOn jar
diff --git a/featureTest/build.gradle b/featureTest/build.gradle
index 2bbb3d752fcac220b8544eea1747784d09c3fda8..ee343385c7fc3719b4420d063d34db968fb346bb 100644
--- a/featureTest/build.gradle
+++ b/featureTest/build.gradle
@@ -1,3 +1,4 @@
+// --- Buildscripts (must be at the top) ---
 buildscript {
     repositories.mavenCentral()
     dependencies {
@@ -5,30 +6,36 @@ buildscript {
     }
 }
 
+// --- Plugin definitions ---
 plugins {
-    id 'relast2uml.java-jastadd-conventions'
-    id 'relast2uml.java-application-conventions'
+    id 'java'
+    id 'java-library'
+    id 'idea'
+    id 'application'
+    id 'com.github.ben-manes.versions'
 }
 
 apply plugin: 'jastadd'
 
+// --- Dependencies ---
 repositories {
     mavenCentral()
 }
 
-mainClassName = 'de.tudresden.inf.st.jastadd.featureTest.FeatureTestMain'
-
 dependencies {
     implementation project(":dumpAst")
 
-    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
-    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
-}
+    api group: 'net.sf.beaver', name: 'beaver-rt', version: '0.9.11'
 
-test {
-    useJUnitPlatform()
+    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: "${jupiter_version}"
+    testImplementation group: 'org.assertj', name: 'assertj-core', version: '3.18.1'
+    testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: "${jupiter_version}"
 }
 
+// --- Preprocessors ---
+File genSrc = file("src/gen/java")
+sourceSets.main.java.srcDir genSrc
+idea.module.generatedSourceDirs += genSrc
 
 File testingGrammar = file('./src/main/jastadd/featureTest.relast')
 
@@ -64,6 +71,7 @@ task relast(type: JavaExec) {
             file('./src/gen/jastadd/featureTestResolverStubs.jrag'))
 }
 
+// --- JastAdd ---
 jastadd {
     configureModuleBuild()
     modules {
@@ -93,4 +101,11 @@ jastadd {
     jastaddOptions = ["--lineColumnNumbers", "--List=JastAddList", "--safeLazy", "--visitCheck=true", "--rewrite=cnta", "--cache=all"]
 }
 
+// --- Tests ---
+test.useJUnitPlatform()
+
+// --- Versioning and Publishing ---
+mainClassName = 'de.tudresden.inf.st.jastadd.featureTest.FeatureTestMain'
+
+// --- Task order ---
 generateAst.dependsOn relast
diff --git a/pages/docs/adding.md b/pages/docs/adding.md
index 388ea3d7b1769824b927b8cacee98e8b9d136157..8bfc64a25902b465da7c07f6da1a73e7979258b2 100644
--- a/pages/docs/adding.md
+++ b/pages/docs/adding.md
@@ -1,12 +1,12 @@
-# Add relast2uml to your project
+# Add DumpAst to your project
 
-If you want to use `Relast2Uml`, either use the latest [pre-build version](#use-packaged-version) or clone the repository and [build it yourself](#build-from-source).
+If you want to use `DumpAst`, either use the latest [pre-build version](#use-packaged-version) or clone the repository and [build it yourself](#build-from-source).
 
 ## Use packaged version
 
 Check the [package overview page](https://git-st.inf.tu-dresden.de/jastadd/relast2uml/-/packages) to find the latest versions of the individual packages.
 
-First add this GitLab as a repository in your `build.gradle`:
+Add this GitLab as a repository, and `dumpAst` as a dependency in your `build.gradle`:
 
 ```
 repositories {
@@ -15,50 +15,15 @@ repositories {
         url "https://git-st.inf.tu-dresden.de/api/v4/groups/jastadd/-/packages/maven"
     }
 }
-```
-
-### grammar2uml
-
-To use `Grammar2uml`, add it as a dependency:
-
-```
-configurations {
-    grammar2umlClasspath
-}
-
-dependencies {
-    grammar2umlClasspath group: 'de.tudresden.inf.st', name: 'grammar2uml', version: '0.1.1'
-}
-```
 
-Finally, add a task to create your visualization:
-
-```
-task grammar2uml(type: JavaExec) {
-    main = 'de.tudresden.inf.st.jastadd.grammar2uml.compiler.Compiler'
-    classpath = configurations.grammar2umlClasspath
-
-    args([
-            '--verbose',
-            'src/main/jastadd/GoalModel.relast'
-    ])
-}
-```
-
-### dumpAst
-
-To use `DumpAst`, add it as a dependency:
-
-```
 dependencies {
     implementation group: 'de.tudresden.inf.st', name: 'dumpAst', version: '0.3.7'
 }
 ```
 
-
 ## Build from source
 
-If you want to build the tools of `Relast2Uml` from source, first build the jar from the [Relast2Uml repository](https://git-st.inf.tu-dresden.de/jastadd/relast2uml):
+If you want to build the tools of `DumpAst` from source, first build the jar from the [repository](https://git-st.inf.tu-dresden.de/jastadd/relast2uml):
 
 ```bash
 git clone https://git-st.inf.tu-dresden.de/jastadd/relast2uml.git
@@ -67,14 +32,15 @@ cd relast2uml
 ls dumpAst/build/libs/
 ```
 
-Those JARs can then be copied to your project.
+This JAR can then be copied to your project.
 
 ```bash
 cp dumpAst/build/libs/dumpAst-<version>.jar ../your-project/libs/dumpAst.jar
 cd ../your-project/
 ```
 
-Finally, this JAR has to be integrated into your build process. In case [Gradle](https://gradle.org/) is used, the JAR file needs to be added as dependency using:
+Finally, this JAR has to be integrated into your build process.
+In case [Gradle](https://gradle.org/) is used, the JAR file needs to be added as dependency using:
 
 ```groovy
 dependencies {
diff --git a/testDumper/build.gradle b/testDumper/build.gradle
index d07d71cbaf03eabd96f26322d0570d0334ee6da6..694b01b6a2bbc808c8f8a3c0676dc1c5236aa27e 100644
--- a/testDumper/build.gradle
+++ b/testDumper/build.gradle
@@ -1,24 +1,39 @@
+// --- Buildscripts (must be at the top) ---
 buildscript {
-    repositories.mavenLocal()
     repositories.mavenCentral()
     dependencies {
         classpath group: 'org.jastadd', name: 'jastaddgradle', version: '1.13.3'
     }
 }
 
+// --- Plugin definitions ---
 plugins {
-    id 'relast2uml.java-jastadd-conventions'
-    id 'relast2uml.java-application-conventions'
+    id 'java'
+    id 'java-library'
+    id 'idea'
+    id 'application'
+    id 'com.github.ben-manes.versions'
 }
 
 apply plugin: 'jastadd'
 
+// --- Dependencies ---
+repositories {
+    mavenCentral()
+}
+
 dependencies {
     implementation project(':dumpAst')
+
+    api group: 'net.sf.beaver', name: 'beaver-rt', version: '0.9.11'
+
+    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: "${jupiter_version}"
+    testImplementation group: 'org.assertj', name: 'assertj-core', version: '3.18.1'
+    testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: "${jupiter_version}"
 }
 
-mainClassName = 'de.tudresden.inf.st.jastadd.testDumper.TestDumperMain'
 
+// --- Preprocessors ---
 File testingGrammar = file('./src/main/jastadd/testDumper.relast')
 
 task relast(type: JavaExec) {
@@ -53,6 +68,7 @@ task relast(type: JavaExec) {
             file('./src/gen/jastadd/testDumperResolverStubs.jrag'))
 }
 
+// --- JastAdd ---
 jastadd {
     configureModuleBuild()
     modules {
@@ -95,4 +111,11 @@ jastadd {
     jastaddOptions = ["--lineColumnNumbers", "--List=JastAddList", "--safeLazy", "--visitCheck=true", "--rewrite=cnta", "--cache=all"]
 }
 
+// --- Tests ---
+test.useJUnitPlatform()
+
+// --- Versioning and Publishing ---
+mainClassName = 'de.tudresden.inf.st.jastadd.testDumper.TestDumperMain'
+
+// --- Task order ---
 generateAst.dependsOn relast