diff --git a/.gitignore b/.gitignore
index 84af703d4fb7139e5599f61f0b7e4044c62d3b4d..aa0282eb2dcea439ad181e21a62ce01a7d5c80bb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,6 @@
 /build/
 /src/gen
 /src/gen-res
+/*.png
+uml.md
+gradle.properties
diff --git a/build.gradle b/build.gradle
index 88458d3cd6bd932cb2339a9f40b58ec80c43ae58..a34e4f04292d23b7ab6a2b0a5258c72c2b8d7061 100644
--- a/build.gradle
+++ b/build.gradle
@@ -17,9 +17,17 @@ mainClassName = 'de.tudresden.inf.st.mrc.MinimalMain'
 
 repositories {
     jcenter()
+//    maven {
+//        name "gitlab-maven"
+//        url "https://git-st.inf.tu-dresden.de/api/v4/groups/jastadd/-/packages/maven"
+//    }
     maven {
-        name "gitlab-maven"
-        url "https://gitlab.example.com/api/v4/groups/jastadd/-/packages/maven"
+        name "gitlab-maven-ragconnect"
+        url "https://git-st.inf.tu-dresden.de/api/v4/projects/708/packages/maven"
+    }
+    maven {
+        name "gitlab-maven-relast2uml"
+        url "https://git-st.inf.tu-dresden.de/api/v4/projects/679/packages/maven"
     }
 }
 
@@ -28,6 +36,7 @@ apply plugin: 'jastadd'
 configurations {
     baseRuntimeClasspath
     ragconnectClasspath
+    grammar2umlClasspath
 }
 
 run {
@@ -39,18 +48,34 @@ sourceSets.main.java.srcDir genSrc
 idea.module.generatedSourceDirs += genSrc
 
 dependencies {
-    implementation fileTree(include: ['dumpAst2uml.jar'], dir: 'libs')
+//    implementation fileTree(include: ['dumpAst2uml.jar'], dir: 'libs')
     implementation group: 'org.fusesource.mqtt-client', name: 'mqtt-client', version: '1.15'
     implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.2'
     implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.2'
-    ragconnectClasspath group: 'de.tudresden.inf.st', name: 'ragconnect.base', version: '0.2.3'
+    implementation group: 'de.tudresden.inf.st', name: 'dumpAstWithPlantuml', version: '0.3.5'
+    grammar2umlClasspath group: 'de.tudresden.inf.st', name: 'grammar2uml', version: '0.1.1'
 
-    jastadd2 "org.jastadd:jastadd:2.3.4"
+//    ragconnectClasspath group: 'de.tudresden.inf.st', name: 'ragconnect', version: '0.2.4'
+    ragconnectClasspath fileTree(include: ['ragconnect-0.2.4.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
+
+    args([
+            '--verbose',
+         ]
+    +
+         relastFiles)
+}
+
 // phases: ragConnect -> RelAst -> JastAdd
 // phase: ragConnect
 task ragConnect(type: JavaExec) {
@@ -132,7 +157,17 @@ jastadd {
 
     // jastaddOptions = ["--lineColumnNumbers", "--visitCheck=true", "--rewrite=cnta", "--cache=all"]
     // default options are: '--rewrite=cnta', '--safeLazy', '--visitCheck=false', '--cacheCycle=false'
-    extraJastAddOptions = ["--lineColumnNumbers", '--List=JastAddList']
+    extraJastAddOptions = [
+            '--lineColumnNumbers',
+            '--List=JastAddList',
+//            '--incremental=param',
+//            '--cache=all',
+//            '--tracing=api,flush',
+//
+//            "--flush=full",
+//            "--incremental=param,debug",
+            "--tracing=api",
+    ]
 }
 
 cleanGen.doFirst {
diff --git a/src/main/java/de/tudresden/inf/st/mrc/MinimalMain.java b/src/main/java/de/tudresden/inf/st/mrc/MinimalMain.java
index 937fe5fc4524427d2482b37cec01e0bf9eb636cb..9b72db0ffaea26d6f02c8a539e20f43e3775ba27 100644
--- a/src/main/java/de/tudresden/inf/st/mrc/MinimalMain.java
+++ b/src/main/java/de/tudresden/inf/st/mrc/MinimalMain.java
@@ -1,10 +1,16 @@
 package de.tudresden.inf.st.mrc;
 
+import de.tudresden.inf.st.jastadd.dumpAst.ast.Dumper;
 import de.tudresden.inf.st.mrc.ast.A;
 import de.tudresden.inf.st.mrc.ast.B;
+import de.tudresden.inf.st.mrc.ast.MqttHandler;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.IOException;
+import java.nio.file.Paths;
 import java.util.Scanner;
+import java.util.concurrent.TimeUnit;
 
 /**
  * Minimal main.
@@ -12,30 +18,82 @@ import java.util.Scanner;
  * @author rschoene - Initial contribution
  */
 public class MinimalMain {
-  public static void main(String[] args) throws IOException {
-    A a = new A();
-    // set some default value for input
-    a.setInput("");
-    B b1 = new B();
-    B b2 = new B();
-    a.addB(b1);
-    a.addB(b2);
+  private static final Logger logger = LogManager.getLogger(MinimalMain.class);
+  private static final String TOPIC_FOR_INPUT = "topic/for/input";
+  private static final String TOPIC_URI_FOR_INPUT = "mqtt://localhost/" + TOPIC_FOR_INPUT;
+  private static MqttHandler publisher;
+
+  public static void main(String[] args) throws Exception {
+    publisher = new MqttHandler("publisher").setHost("localhost");
+    publisher.waitUntilReady(2, TimeUnit.SECONDS);
+    publisher.publish("---", "---".getBytes());
+
+    A normalA = addNewA();
+    enableTracing(normalA);
+    B b1 = normalA.getB(0);
+    B b2 = normalA.getB(1);
 
     // a.OutputOnA -> a.Input
-    a.addDependencyA(a);
+    normalA.addDependencyA(normalA);
     // b1.OutputOnB -> a.Input
-    b1.addDependencyB(a);
+    b1.addDependencyB(normalA);
     // b2.OutputOnB -> a.Input
-    b2.addDependencyB(a);
+    b2.addDependencyB(normalA);
+
+    normalA.connectInput(TOPIC_URI_FOR_INPUT);
+    normalA.connectOutputOnA("mqtt://localhost/normalA/out", true);
+    b1.connectOutputOnB("mqtt://localhost/normalA/b1/out", true);
+    b2.connectOutputOnB("mqtt://localhost/normalA/b2/out", false);
+
+    A aWithNoDependency = addNewA();
+    enableTracing(aWithNoDependency);
+
+    aWithNoDependency.connectInput(TOPIC_URI_FOR_INPUT);
+    aWithNoDependency.connectOutputOnA("mqtt://localhost/aNoDep/out", true);
+    aWithNoDependency.getB(0).connectOutputOnB("mqtt://localhost/aNoDep/b1/out", true);
+    aWithNoDependency.getB(1).connectOutputOnB("mqtt://localhost/aNoDep/b2/out", false);
+
+    // stimulated incremental evaluation
+    aWithNoDependency.getB(0).getOutputOnB();
+
+    Dumper.read(normalA).dumpAsPNG(Paths.get("images.png"));
 
-    a.connectInput("mqtt://localhost/topic/for/input");
-    a.connectOutputOnA("mqtt://localhost/a/out", true);
-    b1.connectOutputOnB("mqtt://localhost/b1/out", true);
-    b2.connectOutputOnB("mqtt://localhost/b2/out", false);
+    waitAndRun(1, "Publish 2", () -> publisher.publish(TOPIC_FOR_INPUT, "2".getBytes()));
+    waitAndRun(2, "Disconnect normalA", () -> {
+      try {
+        boolean success = normalA.disconnectInput(TOPIC_URI_FOR_INPUT);
+        System.out.println("disconnect success: " + success);
+      } catch (IOException e) {
+        e.printStackTrace();
+      }
+    });
+    waitAndRun(3, "Publish 4", () -> publisher.publish(TOPIC_FOR_INPUT, "4".getBytes()));
 
 //    while (true) {}
-    System.out.println("[Enter] to exit");
-    Scanner scanner = new Scanner(System.in);
-    scanner.nextLine();
+//    System.out.println("[Enter] to exit");
+//    Scanner scanner = new Scanner(System.in);
+//    scanner.nextLine();
+    Thread.sleep(6);
+  }
+
+  private static void waitAndRun(long seconds, String description, Runnable runnable) throws InterruptedException {
+    Thread.sleep(seconds);
+    System.out.println(description);
+    publisher.publish("---", description.getBytes());
+    runnable.run();
+  }
+
+  private static A addNewA() {
+    A result = new A();
+    result.setInput("1");
+    B b1 = new B();
+    B b2 = new B();
+    result.addB(b1);
+    result.addB(b2);
+    return result;
+  }
+
+  private static void enableTracing(A a) {
+    a.trace().setReceiver((event, node, attribute, params, value) -> logger.info("event: {}, node: {}, attribute: {}, params: {}, value: {},", event, node, attribute, params, value));
   }
 }
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
index 9566029b0cd86cf4a23425159c85150b13e4882c..16afeebf06d7ec39a50ab503c86dc2e6dec3951a 100644
--- a/src/main/resources/log4j2.xml
+++ b/src/main/resources/log4j2.xml
@@ -6,7 +6,7 @@
         </Console>
     </Appenders>
     <Loggers>
-        <Root level="info">
+        <Root level="debug">
             <AppenderRef ref="Console"/>
         </Root>
     </Loggers>