diff --git a/.gitignore b/.gitignore
index 63f236cd2623aed0ea8a512c6829b2c24d6fc7e6..1e36626d306f081a5319e89e9214bc182fcc2a7b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 *.jar
 !gradle/wrapper/gradle-wrapper.jar
+!libs/*.jar
 .project
 .classpath
 .idea/
diff --git a/build.gradle b/build.gradle
index ecfc52fd2186d1d1a436d97e7d54dadec4d81733..9edf6be656d042436ded4bdb2787e1b1487f8ad9 100644
--- a/build.gradle
+++ b/build.gradle
@@ -55,6 +55,37 @@ jar {
     }
 }
 
+task preprocess(type: JavaExec) {
+    group = 'Build'
+    main = "-jar"
+
+    doFirst {
+        delete "./src/gen/jastadd/*.ast"
+        delete "./src/gen/jastadd/RelAst.jadd"
+        delete "./src/gen/jastadd/RelAstRefResolver.jadd"
+        delete "./src/gen/jastadd/RelAstResolverStubs.jrag"
+        mkdir  "src/gen/jastadd/"
+    }
+
+    args = [
+            "libs/relast.jar",
+            "./src/main/jastadd/RelAst.relast",
+            "--listClass=java.util.ArrayList",
+            "--jastAddList=JastAddList",
+            "--useJastAddNames",
+            "--file",
+            "--resolverHelper",
+            "--grammarName=./src/gen/jastadd/RelAST"
+    ]
+
+    inputs.files file("./src/main/jastadd/RelAST.relast"),
+            file("./libs/relast.jar")
+    outputs.files file("./src/gen/jastadd/RelAst.ast"),
+            file("./src/gen/jastadd/RelAst.jadd"),
+            file("./src/gen/jastadd/RelAstRefResolver.jadd"),
+            file('./src/gen/jastadd/RelAstResolverStubs.jrag')
+}
+
 jastadd {
     configureModuleBuild()
     modules {
@@ -68,10 +99,13 @@ jastadd {
             }
 
             jastadd {
-                basedir "src/main/jastadd/"
-                include "**/*.ast"
-                include "**/*.jadd"
-                include "**/*.jrag"
+                basedir "src/"
+                include "main/jastadd/**/*.ast"
+                include "main/jastadd/**/*.jadd"
+                include "main/jastadd/**/*.jrag"
+                include "gen/jastadd/**/*.ast"
+                include "gen/jastadd/**/*.jadd"
+                include "gen/jastadd/**/*.jrag"
             }
 
             scanner {
@@ -112,3 +146,4 @@ jastadd {
     jastaddOptions = ["--lineColumnNumbers", "--safeLazy", "--visitCheck=true", "--rewrite=cnta", "--cache=all"]
 }
 
+generateAst.dependsOn preprocess
diff --git a/libs/relast.jar b/libs/relast.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a3430dfc1754b92676e2beb6b9f8ce4f1bb4429f
Binary files /dev/null and b/libs/relast.jar differ
diff --git a/src/main/jastadd/RelAst.ast b/src/main/jastadd/RelAst.relast
similarity index 100%
rename from src/main/jastadd/RelAst.ast
rename to src/main/jastadd/RelAst.relast