diff --git a/settings.gradle b/settings.gradle
index 36aee84fb4317c74cad172205254355162c2acd7..0c705c21afae601469f6caa4c7e1c6c2b48d37e4 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,6 +1,4 @@
 rootProject.name = 'ifm-refactoring-jastadd'
 
 include 'statemachine'
-include 'trainbenchmark'
-//include 'ragdoc-builder'
 include 'ragdoc-view'
diff --git a/statemachine/.gitignore b/statemachine/.gitignore
index 19ad8f831544c2661c133c48b7da7a78df83a50d..1ff83bae793351073fb8c6fdf7ad16dde44aeeed 100644
--- a/statemachine/.gitignore
+++ b/statemachine/.gitignore
@@ -5,3 +5,4 @@ src/gen-res/
 /bin/
 logs/
 /doc/
+DrAST.cfg
diff --git a/statemachine/DrAST.cfg b/statemachine/DrAST.cfg
deleted file mode 100644
index a5e75e925199099f743ed7cea31321a0f60d70d4..0000000000000000000000000000000000000000
--- a/statemachine/DrAST.cfg
+++ /dev/null
@@ -1,16 +0,0 @@
-#DrAST settings file.
-#Mon Nov 18 17:23:41 CET 2019
-normalEdgeWidth=1.0
-showEdges=true
-refEdgeWidth=2.0
-NTA-depth=1
-NTA-cached=1
-dynamic-values=0
-prevJar=build/libs/statemachine-0.1.jar
-dashedVertexEdgeWidth=0.2
-NTA-computed=0
-normalVertexEdgeWidth=1.0
-nodeThreshold=1000
-showNodes=true
-curvedEdges=true
-dashedEdgeWidth=0.2
diff --git a/statemachine/build.gradle b/statemachine/build.gradle
index 022baba06ecc05ab5fb30f0896959dda4e67b8b8..f0aad7522477fa80eeb1e55b2f2272b900fefa5d 100644
--- a/statemachine/build.gradle
+++ b/statemachine/build.gradle
@@ -1,5 +1,5 @@
 group 'de.tudresden.inf.st'
-version '2.0-SNAPSHOT'
+version '0.1'
 
 apply plugin: 'java'
 apply plugin: 'jastadd'
@@ -62,25 +62,29 @@ buildscript {
 jar {
     manifest {
         attributes(
-                'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
                 'Main-Class': 'de.tudresden.inf.st.statemachine.Main'
         )
     }
 }
 
-task DrAST(type: JavaExec, dependsOn:jar) {
-    group = "verification"
-    description = 'run the DrAST visual debugger tool'
-    classpath = sourceSets.test.runtimeClasspath
-    main = 'de.tudresden.inf.st.statemachine.DrAstRunner'
+task jarDrAst(type: Jar) {
+    group = "build"
+    description = 'create a jar to runthe DrAST visual debugger tool'
+    manifest {
+        attributes 'Implementation-Title': 'DrAST visual debugger tool for StateMachine',
+                'Implementation-Version': project.version,
+                'Main-Class': 'de.tudresden.inf.st.statemachine.DrAstRunner'
+    }
+    archivesBaseName = 'drast-statemachine-all'
+    from { sourceSets.main.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
+    with jar
 }
 
-String[] drastArguments = ['../libs/DrAST-1.2.2.jar']
-task DrASTjar(type: JavaExec, dependsOn:jar) {
-    group = "verification"
-    description = 'run the DrAST visual debugger tool as a JAR'
-    main = '-jar'
-    args drastArguments
+task runDrAST(type: JavaExec, dependsOn:jar) {
+    group = "application"
+    description = 'run the DrAST visual debugger tool'
+    classpath = sourceSets.main.runtimeClasspath
+    main = 'de.tudresden.inf.st.statemachine.DrAstRunner'
 }
 
 def relastFiles = fileTree('src/main/jastadd/') {
diff --git a/statemachine/run_DrAST.sh b/statemachine/run_DrAST.sh
new file mode 100755
index 0000000000000000000000000000000000000000..2e043e4b40962534cc337e5afea2e4b5f1567f2f
--- /dev/null
+++ b/statemachine/run_DrAST.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+java -Dlog4j2.disableJmx=true -jar build/libs/drast-statemachine-all-0.1.jar
diff --git a/statemachine/src/main/jastadd/Util.jadd b/statemachine/src/main/jastadd/Util.jadd
index aa431f923b708d0b68399990d49f45ae2ba9dabf..517b6a51d6c7ea953aeb2a59f7b42ca354a77979 100644
--- a/statemachine/src/main/jastadd/Util.jadd
+++ b/statemachine/src/main/jastadd/Util.jadd
@@ -33,7 +33,7 @@ aspect JastAddAPIExtension {
     return getLabel();
   }
 
-  public String State.toString() {
+  public String Element.toString() {
     return getLabel();
   }
 }
diff --git a/statemachine/src/main/java/de/tudresden/inf/st/statemachine/DrAstRunner.java b/statemachine/src/main/java/de/tudresden/inf/st/statemachine/DrAstRunner.java
index d22a3a3f1faf6bb1639e1fc696d784a17b8cdfdc..2fd811e0f2604e506ea8634a0a6943a88d5767de 100644
--- a/statemachine/src/main/java/de/tudresden/inf/st/statemachine/DrAstRunner.java
+++ b/statemachine/src/main/java/de/tudresden/inf/st/statemachine/DrAstRunner.java
@@ -38,14 +38,15 @@ public class DrAstRunner extends DrASTGUI {
   private static void openView() {
     guiHasBeenCreated = true;
     DrASTSettings.put(DrASTSettings.PREV_JAR, "build/libs/statemachine-0.1.jar");
-    launch(new String[0]);
+    DrASTSettings.put(DrASTSettings.PREV_TAIL_ARGS, "-Dlog4j2.disable.jmx=true");
+    launch();
     con.onApplicationClose();
   }
 
   public void setRoot(Object root) {
     long timeStart = System.currentTimeMillis();
     DrAST newAst = new DrAST(root, TreeFilter.readFilter(con.getFilter()));
-    Log.info("Filter update: done after %d ms", new Object[]{System.currentTimeMillis() - timeStart});
+    Log.info("Filter update: done after %d ms", System.currentTimeMillis() - timeStart);
     Platform.runLater(() -> {
       mon.reset(newAst);
       if (guiHasBeenCreated) {
@@ -59,8 +60,8 @@ public class DrAstRunner extends DrASTGUI {
 
   public void start(Stage stage) throws Exception {
     FXMLLoader loader = new FXMLLoader();
-    Parent rootView = (Parent)loader.load(this.getClass().getResource("/main.fxml").openStream());
-    con = (Controller)loader.getController();
+    Parent rootView = loader.load(this.getClass().getResource("/main.fxml").openStream());
+    con = loader.getController();
     mon.setParentStage(stage);
     mon.setController(con);
     mon.setDrASTUI(this);
diff --git a/statemachine/src/main/java/de/tudresden/inf/st/statemachine/Main.java b/statemachine/src/main/java/de/tudresden/inf/st/statemachine/Main.java
index 11292538e652a485cb067934f693480a90a7d970..c10cff5f340983827a57aac27c7894aea33ee578 100644
--- a/statemachine/src/main/java/de/tudresden/inf/st/statemachine/Main.java
+++ b/statemachine/src/main/java/de/tudresden/inf/st/statemachine/Main.java
@@ -1,54 +1,68 @@
 package de.tudresden.inf.st.statemachine;
 
-import de.tudresden.inf.st.statemachine.jastadd.model.*;
-import drast.model.DrAST;
+import beaver.Parser;
+import de.tudresden.inf.st.statemachine.jastadd.model.State;
+import de.tudresden.inf.st.statemachine.jastadd.model.StateMachine;
+import de.tudresden.inf.st.statemachine.jastadd.model.Transition;
 
+import java.io.IOException;
+import java.nio.file.Paths;
 import java.util.Set;
 
 public class Main {
 
+	@SuppressWarnings("WeakerAccess")
 	public static Object DrAST_root_node;
 
 	public static void main(String[] args) {
-		// manual construction of a simple statemachine
-		// (S) -- 1 --> (A) -- 3 --> (E)
-		//  ^            |
-		//  \            /
-		//  `---- 2 ----*
-		StateMachine statemachine = new StateMachine();
-		State start = new State();
-		start.setLabel("S");
-		State stateA = new State();
-		stateA.setLabel("A");
-		State end = new State();
-		end.setLabel("E");
-		Transition t1 = new Transition();
-		t1.setLabel("1");
-		Transition t2 = new Transition();
-		t2.setLabel("2");
-		Transition t3 = new Transition();
-		t3.setLabel("3");
-		t1.setFrom(start);
-		t1.setTo(stateA);
-		t2.setFrom(stateA);
-		t2.setTo(start);
-		t3.setFrom(stateA);
-		t3.setTo(end);
-		statemachine.addElement(start);
-		statemachine.addElement(stateA);
-		statemachine.addElement(end);
-		statemachine.setInitial(start);
-		statemachine.addFinal(end);
+		if (args.length == 0) {
+			// manual construction of a simple statemachine
+			// (S) -- 1 --> (B) -- 3 --> (E)
+			//  ^            |
+			//  \            /
+			//  `---- 2 ----*
+			StateMachine statemachine = new StateMachine();
+			State start = new State();
+			start.setLabel("S");
+			State stateB = new State();
+			stateB.setLabel("B");
+			State end = new State();
+			end.setLabel("E");
+			Transition t1 = new Transition();
+			t1.setLabel("1");
+			Transition t2 = new Transition();
+			t2.setLabel("2");
+			Transition t3 = new Transition();
+			t3.setLabel("3");
+			t1.setFrom(start);
+			t1.setTo(stateB);
+			t2.setFrom(stateB);
+			t2.setTo(start);
+			t3.setFrom(stateB);
+			t3.setTo(end);
+			statemachine.addElement(start);
+			statemachine.addElement(stateB);
+			statemachine.addElement(end);
+			statemachine.setInitial(start);
+			statemachine.addFinal(end);
 
-		// reachability analysis
-		Set<Set<State>> sccs = statemachine.SCC();
-		System.out.println("SCCs found:");
-		for (Set<State> scc : sccs) {
-			System.out.println(scc);
+			// reachability analysis
+			Set<Set<State>> sccs = statemachine.SCC();
+			System.out.println("SCCs found:");
+			for (Set<State> scc : sccs) {
+				System.out.println(scc);
+			}
+			DrAST_root_node = statemachine;
+		} else {
+			// load the file given as first argument
+			try {
+				StateMachine stateMachine = ParserUtils.load(Paths.get(args[0]));
+				stateMachine.treeResolveAll();
+				DrAST_root_node = stateMachine;
+			} catch (IOException | Parser.Exception e) {
+				e.printStackTrace();
+			}
 		}
-
-		DrAST_root_node = statemachine;
-//		DrAST.ui.DrASTUI debugger = new DrAST.ui.DrASTUI(statemachine);
 	}
 
 }
diff --git a/statemachine/src/main/java/de/tudresden/inf/st/statemachine/ParserUtils.java b/statemachine/src/main/java/de/tudresden/inf/st/statemachine/ParserUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..ef4e50169c525b631a10a531b9965283a967d2f4
--- /dev/null
+++ b/statemachine/src/main/java/de/tudresden/inf/st/statemachine/ParserUtils.java
@@ -0,0 +1,27 @@
+package de.tudresden.inf.st.statemachine;
+
+import beaver.Parser;
+import de.tudresden.inf.st.statemachine.jastadd.model.StateMachine;
+import de.tudresden.inf.st.statemachine.jastadd.parser.StateMachineParser;
+import de.tudresden.inf.st.statemachine.jastadd.scanner.StateMachineScanner;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+/**
+ * Utility methods for loading statemachine files.
+ *
+ * @author rschoene - Initial contribution
+ */
+public class ParserUtils {
+  static StateMachine load(Path path) throws IOException, Parser.Exception {
+    Reader reader = Files.newBufferedReader(path);
+    StateMachineScanner scanner = new StateMachineScanner(reader);
+    StateMachineParser parser = new StateMachineParser();
+    StateMachine result = (StateMachine) parser.parse(scanner);
+    reader.close();
+    return result;
+  }
+}
diff --git a/statemachine/src/test/java/de/tudresden/inf/st/statemachine/ParserTest.java b/statemachine/src/test/java/de/tudresden/inf/st/statemachine/ParserTest.java
index 7628327f4fdc8c58294fab94de040b4e7307971b..16a6344661f21f81096f4223186bd6bf51877663 100644
--- a/statemachine/src/test/java/de/tudresden/inf/st/statemachine/ParserTest.java
+++ b/statemachine/src/test/java/de/tudresden/inf/st/statemachine/ParserTest.java
@@ -4,14 +4,9 @@ import beaver.Parser;
 import de.tudresden.inf.st.statemachine.jastadd.model.State;
 import de.tudresden.inf.st.statemachine.jastadd.model.StateMachine;
 import de.tudresden.inf.st.statemachine.jastadd.model.Transition;
-import de.tudresden.inf.st.statemachine.jastadd.parser.StateMachineParser;
-import de.tudresden.inf.st.statemachine.jastadd.scanner.StateMachineScanner;
 import org.junit.Test;
 
 import java.io.IOException;
-import java.io.Reader;
-import java.nio.file.Files;
-import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -21,7 +16,7 @@ import static org.hamcrest.collection.IsEmptyCollection.empty;
 import static org.junit.Assert.*;
 
 /**
- * TODO: Add description.
+ * Testing the statemachine parser.
  *
  * @author rschoene - Initial contribution
  */
@@ -29,7 +24,7 @@ public class ParserTest {
 
   @Test
   public void test1() throws IOException, Parser.Exception {
-    StateMachine stateMachine = load(Paths.get("src", "test", "resources", "machine_one.sm"));
+    StateMachine stateMachine = ParserUtils.load(Paths.get("src", "test", "resources", "machine_one.sm"));
 
     assertEquals(6, stateMachine.getNumElement());
     assertEquals(3, stateMachine.states().size());
@@ -87,12 +82,4 @@ public class ParserTest {
     return s.getOutgoingList().stream().map(Transition::getTo).collect(Collectors.toList());
   }
 
-  private static StateMachine load(Path path) throws IOException, Parser.Exception {
-    Reader reader = Files.newBufferedReader(path);
-    StateMachineScanner scanner = new StateMachineScanner(reader);
-    StateMachineParser parser = new StateMachineParser();
-    StateMachine result = (StateMachine) parser.parse(scanner);
-    reader.close();
-    return result;
-  }
 }