diff --git a/build.gradle b/build.gradle
index 92d802db5928eaea018b2f654f0fc96023079209..44be1b36d9d7e77c5911551ad5368a567eaf3687 100644
--- a/build.gradle
+++ b/build.gradle
@@ -55,6 +55,38 @@ test {
     maxHeapSize = '1G'
 }
 
+// Input and output files for relast
+def relastInputFiles = [
+        "src/main/jastadd/OpenAPISpecification.relast"
+]
+def relastOutputFiles = [
+        "src/gen/jastadd/OpenAPISpecification.ast",
+        "src/gen/jastadd/OpenAPISpecification.jadd"
+]
+
+task relast(type: JavaExec) {
+    classpath = files("libs/relast.jar")
+    group = 'Build'
+
+    doFirst {
+        delete relastOutputFiles
+        mkdir "src/gen/jastadd/"
+    }
+
+    args = [
+            "--listClass=java.util.ArrayList",
+            "--jastAddList=JastAddList",
+            "--useJastAddNames",
+            "--file",
+            "--resolverHelper",
+            "--grammarName=./src/gen/jastadd/RelAst"
+    ] + relastInputFiles
+
+    inputs.files relastInputFiles
+    outputs.files relastOutputFiles
+}
+
+
 File genSrc = file("src/gen/java")
 sourceSets.main.java.srcDir genSrc
 idea.module.generatedSourceDirs += genSrc
diff --git a/libs/relast.jar b/libs/relast.jar
new file mode 100644
index 0000000000000000000000000000000000000000..9f1d60c7c99a1e35d9cf5558d5f329c5aa7ba66e
Binary files /dev/null and b/libs/relast.jar differ
diff --git a/src/main/jastadd/Composer.jrag b/src/main/jastadd/Composer.jrag
index 98f671ee8b1babc92693573b7940e74ab6db3b5d..49cbefc0445649aeb2fa34f8e388e6a8a9dee4f7 100644
--- a/src/main/jastadd/Composer.jrag
+++ b/src/main/jastadd/Composer.jrag
@@ -1,3 +1,4 @@
+/*
 import org.openapi4j.core.exception.ResolutionException;
 import org.openapi4j.core.validation.ValidationException;
 import org.openapi4j.parser.model.v3.*;
@@ -5,7 +6,6 @@ import org.openapi4j.core.model.reference.Reference;
 import org.openapi4j.core.model.OAIContext;
 
 import java.io.IOException;
-import java.util.*;
 import java.net.URL;
 
 aspect Composer {
@@ -765,13 +765,13 @@ aspect Composer {
       for (EnumObj e : s.getEnumObjs())
         schema.addEnum(e.getEnumOb());
     }
-    /*
+
     if (s.getExample() != null)
       schema.setExample(s.getExample());
     if (s.getExclusiveMaximum() != null)
       schema.setExclusiveMaximum(s.getExclusiveMaximum());
     if (s.getExclusiveMinimum() != null)
-      schema.setExclusiveMinimum(s.getExclusiveMinimum());*/
+      schema.setExclusiveMinimum(s.getExclusiveMinimum());
     if (s.hasExternalDocObject())
       schema.setExternalDocs(ExternalDocObject.composeExternalDocs(s.getExternalDocObject(), map));
     if (!s.getFormat().isEmpty())
@@ -808,7 +808,7 @@ aspect Composer {
     }
     /*
     if (s.getNullable() != null)
-      schema.setNullable(s.getNullable());*/
+      schema.setNullable(s.getNullable());
     if (!s.getPattern().isEmpty())
       schema.setPattern(s.getPattern());
     if (s.getNumPropertyItem() != 0) {
@@ -997,4 +997,6 @@ aspect Composer {
 
     return securityRequirement;
   }
-}
\ No newline at end of file
+}
+
+ */
\ No newline at end of file
diff --git a/src/main/jastadd/InferParameter.jrag b/src/main/jastadd/InferParameter.jrag
index ba577cb88d446d460cd5441fb0d22a5a999ea370..aa271cb10685d033ce04f2b3957d8df75f0adaa3 100644
--- a/src/main/jastadd/InferParameter.jrag
+++ b/src/main/jastadd/InferParameter.jrag
@@ -1,4 +1,4 @@
-import com.fasterxml.jackson.databind.JsonNode;
+/*import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 
@@ -198,4 +198,6 @@ aspect InferParameter{
       System.out.println(e.toString());
     }
   }
-}
\ No newline at end of file
+}
+
+ */
\ No newline at end of file
diff --git a/src/main/jastadd/OpenAPISpecification.ast b/src/main/jastadd/OpenAPISpecification.relast
similarity index 98%
rename from src/main/jastadd/OpenAPISpecification.ast
rename to src/main/jastadd/OpenAPISpecification.relast
index 58eb5844db0f48efd2faf1e6d7e383689ec0581e..f9321246c40cd1bb367a64bd94eb7c648a22cd8c 100644
--- a/src/main/jastadd/OpenAPISpecification.ast
+++ b/src/main/jastadd/OpenAPISpecification.relast
@@ -1,5 +1,5 @@
 //OpenAPI Object
-OpenAPIObject ::= <OpenAPI> [InfoObject] <JsonSchemaDialect> ServerObject* PathsObject* Webhook* [ComponentsObject] SecurityRequirementObject* TagObject* [ExternalDocObject] <Context:OAIContext> Extension* InferredParameter*;
+OpenAPIObject ::= <OpenAPI> [InfoObject] <JsonSchemaDialect> ServerObject* PathsObject* Webhook* [ComponentsObject] SecurityRequirementObject* TagObject* [ExternalDocObject] Extension* InferredParameter*;
 InferredParameter ::= <Parameter>;
 Webhook ::= <Key> PathItemOb;
 
diff --git a/src/main/jastadd/Parser.jrag b/src/main/jastadd/Parser.jrag
index e27176477084afa0c17ee6192cb46b34e1192744..05da4191c3a97cff8877dd3f2031205e9f296a7a 100644
--- a/src/main/jastadd/Parser.jrag
+++ b/src/main/jastadd/Parser.jrag
@@ -1,42 +1,8 @@
+/*
 import org.openapi4j.core.exception.DecodeException;
 
 aspect Parser {
 
-  inh OpenAPIObject ASTNode.root();
-  eq OpenAPIObject.getChild().root() = this;
-
-  coll List<SchemaTuple> OpenAPIObject.schemaTuples() [new ArrayList<>()] root OpenAPIObject;
-  SchemaTuple contributes this
-    to OpenAPIObject.schemaTuples();
-
-  coll List<ResponseTuple> OpenAPIObject.responseTuples() [new ArrayList<>()] root OpenAPIObject;
-  ResponseTuple contributes this
-    to OpenAPIObject.responseTuples();
-
-  coll List<ParameterTuple> OpenAPIObject.parameterTuples() [new ArrayList<>()] root OpenAPIObject;
-  ParameterTuple contributes this
-    to OpenAPIObject.parameterTuples();
-
-  coll List<RequestBodyTuple> OpenAPIObject.requestBodyTuples() [new ArrayList<>()] root OpenAPIObject;
-  RequestBodyTuple contributes this
-    to OpenAPIObject.requestBodyTuples();
-
-  coll List<HeaderTuple> OpenAPIObject.headerTuples() [new ArrayList<>()] root OpenAPIObject;
-  HeaderTuple contributes this
-    to OpenAPIObject.headerTuples();
-
-  coll List<SecuritySchemeTuple> OpenAPIObject.securitySchemeTuples() [new ArrayList<>()] root OpenAPIObject;
-  SecuritySchemeTuple contributes this
-    to OpenAPIObject.securitySchemeTuples();
-
-  coll List<LinkTuple> OpenAPIObject.linkTuples() [new ArrayList<>()] root OpenAPIObject;
-  LinkTuple contributes this
-    to OpenAPIObject.linkTuples();
-
-  coll List<CallbackTuple> OpenAPIObject.callbackTuples() [new ArrayList<>()] root OpenAPIObject;
-  CallbackTuple contributes this
-    to OpenAPIObject.callbackTuples();
-
   public static OpenAPIObject OpenAPIObject.parseOpenAPI(OpenApi3 api) throws IOException, ResolutionException, ValidationException, DecodeException {
     OpenAPIObject openapi = new OpenAPIObject();
     Map<Object, ASTNode> map = new HashMap<>();
@@ -678,7 +644,7 @@ aspect Parser {
       if (schema.getExclusiveMaximum() != null)
         schemaObject.setExclusiveMaximum(schema.getExclusiveMaximum());
       if (schema.getExclusiveMinimum() != null)
-        schemaObject.setExclusiveMinimum(schema.getExclusiveMinimum());*/
+        schemaObject.setExclusiveMinimum(schema.getExclusiveMinimum());
       if (schema.getExternalDocs() != null)
         schemaObject.setExternalDocObject(ExternalDocObject.parseExternalDocs(schema.getExternalDocs(), map));
       if (schema.getFormat() != null)
@@ -713,7 +679,7 @@ aspect Parser {
       }
       /*
       if (schema.getNullable() != null)
-        schemaObject.setNullable(schema.getNullable());*/
+        schemaObject.setNullable(schema.getNullable());
       if (schema.getPattern() != null)
         schemaObject.setPattern(schema.getPattern());
       if (schema.getProperties() != null) {
@@ -907,4 +873,6 @@ aspect Parser {
     map.put(securityRequirement, securityRequirementObject);
     return securityRequirementObject;
   }
-}
\ No newline at end of file
+}
+
+ */
\ No newline at end of file
diff --git a/src/main/jastadd/RandomRequestGenerator.jrag b/src/main/jastadd/RandomRequestGenerator.jrag
index 277e9afaa4b02be452ede1ddd7852222f95a7033..9473e1b2ddebe0d99248072317b825be0899366a 100644
--- a/src/main/jastadd/RandomRequestGenerator.jrag
+++ b/src/main/jastadd/RandomRequestGenerator.jrag
@@ -1,3 +1,4 @@
+/*
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.InputStreamReader;
@@ -191,4 +192,6 @@ aspect RandomRequestGenerator{
       return String.valueOf(rand.nextInt(maximum));
     return String.valueOf(rand.nextInt());
   }
-}
\ No newline at end of file
+}
+
+ */
\ No newline at end of file
diff --git a/src/main/jastadd/Reference.jrag b/src/main/jastadd/Reference.jrag
index e37c6183b242877916c14131791d7e5da8972fea..654c625d9f21691d31d06b71d8a4daf705e83128 100644
--- a/src/main/jastadd/Reference.jrag
+++ b/src/main/jastadd/Reference.jrag
@@ -1,5 +1,42 @@
+import java.util.*;
+
 aspect Reference {
 
+        inh OpenAPIObject ASTNode.root();
+        eq OpenAPIObject.getChild().root() = this;
+
+        coll List<SchemaTuple> OpenAPIObject.schemaTuples() [new ArrayList<>()] root OpenAPIObject;
+        SchemaTuple contributes this
+        to OpenAPIObject.schemaTuples();
+
+        coll List<ResponseTuple> OpenAPIObject.responseTuples() [new ArrayList<>()] root OpenAPIObject;
+        ResponseTuple contributes this
+        to OpenAPIObject.responseTuples();
+
+        coll List<ParameterTuple> OpenAPIObject.parameterTuples() [new ArrayList<>()] root OpenAPIObject;
+        ParameterTuple contributes this
+        to OpenAPIObject.parameterTuples();
+
+        coll List<RequestBodyTuple> OpenAPIObject.requestBodyTuples() [new ArrayList<>()] root OpenAPIObject;
+        RequestBodyTuple contributes this
+        to OpenAPIObject.requestBodyTuples();
+
+        coll List<HeaderTuple> OpenAPIObject.headerTuples() [new ArrayList<>()] root OpenAPIObject;
+        HeaderTuple contributes this
+        to OpenAPIObject.headerTuples();
+
+        coll List<SecuritySchemeTuple> OpenAPIObject.securitySchemeTuples() [new ArrayList<>()] root OpenAPIObject;
+        SecuritySchemeTuple contributes this
+        to OpenAPIObject.securitySchemeTuples();
+
+        coll List<LinkTuple> OpenAPIObject.linkTuples() [new ArrayList<>()] root OpenAPIObject;
+        LinkTuple contributes this
+        to OpenAPIObject.linkTuples();
+
+        coll List<CallbackTuple> OpenAPIObject.callbackTuples() [new ArrayList<>()] root OpenAPIObject;
+        CallbackTuple contributes this
+        to OpenAPIObject.callbackTuples();
+
   syn ParameterObject ParameterOb.parameterObject();
   eq ParameterObject.parameterObject() = this;
   eq ParameterReference.parameterObject() {
diff --git a/src/main/java/de/tudresden/inf/st/openapi/OpenAPIMain.java b/src/main/java/de/tudresden/inf/st/openapi/OpenAPIMain.java
index aa0842ab9dd95af2a8fdf2b57b50328e4e2a2a93..bb1896e1c28b3b4097b64b2e0149de8ced514ed9 100644
--- a/src/main/java/de/tudresden/inf/st/openapi/OpenAPIMain.java
+++ b/src/main/java/de/tudresden/inf/st/openapi/OpenAPIMain.java
@@ -65,8 +65,8 @@ public class OpenAPIMain {
     OpenApi3 api = new OpenApi3Parser().parse(expUrl, new ArrayList<>(), true);
     System.out.println("Loading expression DSL file '" + fileName + "'.");
 
-    openApi = OpenAPIObject.parseOpenAPI(api);
-    openApi.generateRequestsWithInferredParameters();
+    //openApi = OpenAPIObject.parseOpenAPI(api);
+    //openApi.generateRequestsWithInferredParameters();
 
     //writer.write(api3.toNode().toPrettyString());
     //writer.close();