diff --git a/solve/build.gradle b/solve/build.gradle
index d267d6c126704d718b587de0ef44d55b9334f2bb..453bc94084d8bab418368d1226eac20bb459a5b0 100644
--- a/solve/build.gradle
+++ b/solve/build.gradle
@@ -52,7 +52,7 @@ task jastadd(type: JavaExec) {
             "--incremental=param,debug",
             "--package=de.tudresden.inf.st.ttc18live.jastadd.model",
             "--o=src/gen/java",
-            "--tracing=api",
+            "--tracing",
     ] + fileTree("./src/main/jastadd/")
 
     doFirst {
@@ -60,7 +60,7 @@ task jastadd(type: JavaExec) {
         delete fileTree('src/gen/java/')
     }
 
-    inputs.files fileTree("./solve/src/main/jastadd/")
+    inputs.files fileTree("./solve/src/main/jastadd/") + file("libs/jastadd2.jar")
     outputs.files file("src/gen/java/ASTNode.java")
 }
 
diff --git a/solve/libs/jastadd2.jar b/solve/libs/jastadd2.jar
index bb6b93ec6a845b0ca7c5b8b091288fe60cf2bd90..6d774ba8ebfc5e9189e1feae9d9e8ac04cf723f9 100644
Binary files a/solve/libs/jastadd2.jar and b/solve/libs/jastadd2.jar differ
diff --git a/solve/src/main/jastadd/Printing.jrag b/solve/src/main/jastadd/Printing.jrag
index 7d5860de077c6a70e189bc3e464b91eef90abbda..4a49a9bc69714c4ec12494416b1a7c43cba0f49f 100644
--- a/solve/src/main/jastadd/Printing.jrag
+++ b/solve/src/main/jastadd/Printing.jrag
@@ -26,12 +26,12 @@ aspect Printing {
     return "CompositionListInsertion (affected = " + (getAffectedElement() == null ? "null" : getAffectedElement().getId()) + ", feature = " + getFeature() + ", index = " + getIndex() + ", addedElement = " + getAddedElement() + ")";
   }
 
-  syn String ModelChange.toString() = print();
-  eq ChangeTransaction.toString() = "ChangeTransaction@" + Integer.toHexString(hashCode());
+//  syn String ModelChange.toString() = print();
+//  eq ChangeTransaction.toString() = "ChangeTransaction@" + Integer.toHexString(hashCode());
 
-  syn String ModelElement.toString();
-  eq SocialNetwork.toString() = "SocialNetwork" + getId();
-  eq User.toString() = "User-" + getId();
-  eq Post.toString() = "Post-" + getId();
-  eq Comment.toString() = "Comment-" + getId();
+//  syn String ModelElement.toString();
+//  eq SocialNetwork.toString() = "SocialNetwork" + getId();
+//  eq User.toString() = "User-" + getId();
+//  eq Post.toString() = "Post-" + getId();
+//  eq Comment.toString() = "Comment-" + getId();
 }
diff --git a/solve/src/main/jastadd/Tracing.jadd b/solve/src/main/jastadd/Tracing.jadd
new file mode 100644
index 0000000000000000000000000000000000000000..a00b6e0fec500e1c025ec13811206ffd8da594a7
--- /dev/null
+++ b/solve/src/main/jastadd/Tracing.jadd
@@ -0,0 +1,21 @@
+aspect Tracing {
+
+  private java.util.List<String> SocialNetwork.events = new java.util.ArrayList<>();
+
+  public void SocialNetwork.enableTracing() {
+    this.trace().setReceiver((event, node, attribute, params, value) -> {
+      String eventString = System.currentTimeMillis() + "," + event + "," + attribute;
+      events.add(eventString);
+    });
+  }
+
+  public void SocialNetwork.insertCustomEvent(String event, String text) {
+    String eventString = System.currentTimeMillis() + "," + event.replace(",", "_") + "," + text.replace(",", "_");
+    events.add(eventString);
+  }
+
+  public void SocialNetwork.writeTracingEvents(java.nio.file.Path destination) throws java.io.IOException {
+    java.nio.file.Files.write(destination, events);
+  }
+
+}
diff --git a/solve/src/main/java/de/tudresden/inf/st/ttc18live/AbstractLiveContestDriver.java b/solve/src/main/java/de/tudresden/inf/st/ttc18live/AbstractLiveContestDriver.java
index 9708a7e7628ce78727704c13a5473f7075a51bc9..816121b63b26c3c11efe4e673d2555d382c01424 100644
--- a/solve/src/main/java/de/tudresden/inf/st/ttc18live/AbstractLiveContestDriver.java
+++ b/solve/src/main/java/de/tudresden/inf/st/ttc18live/AbstractLiveContestDriver.java
@@ -87,6 +87,7 @@ public abstract class AbstractLiveContestDriver {
     stopwatch = System.nanoTime();
 
     SocialNetwork socialNetwork = LoadImpl();
+    socialNetwork.enableTracing();
 
     solution.setSocialNetwork(socialNetwork);
     stopwatch = System.nanoTime() - stopwatch;
@@ -96,6 +97,7 @@ public abstract class AbstractLiveContestDriver {
   abstract SocialNetwork LoadImpl() throws Exception;
 
   public void Initial() {
+    solution.getSocialNetwork().insertCustomEvent("TTC_INITIAL", ChangeSet);
     stopwatch = System.nanoTime();
     String result = solution.Initial();
     stopwatch = System.nanoTime() - stopwatch;
@@ -106,8 +108,11 @@ public abstract class AbstractLiveContestDriver {
   private void Update(int iteration) throws Exception {
     System.err.print(iteration + " ");
 
+    String size_iteration = ChangeSet + Integer.toString(iteration);
+    solution.getSocialNetwork().insertCustomEvent("TTC_TRANSFORMATION", size_iteration);
     ModelChangeSet modelChangeSet = UpdateImpl(iteration);
 
+    solution.getSocialNetwork().insertCustomEvent("TTC_RECHECK", size_iteration);
     stopwatch = System.nanoTime();
     String result = solution.Update(modelChangeSet);
     stopwatch = System.nanoTime() - stopwatch;
diff --git a/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverEMF.java b/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverEMF.java
index 492a3d1d145f6f16ff87521492e3bce96937f73a..08036a81bc10065e8a07ed26d47d4c30ba93bb63 100644
--- a/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverEMF.java
+++ b/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverEMF.java
@@ -16,6 +16,7 @@ import org.eclipse.emf.ecore.xmi.impl.XMLParserPoolImpl;
 
 
 import java.io.IOException;
+import java.nio.file.Paths;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -27,8 +28,9 @@ import java.util.Map;
  */
 public class LiveContestDriverEMF extends AbstractLiveContestDriver {
 
-  public static void main(String[] args) {
+  public static void main(String[] args) throws IOException {
     new LiveContestDriverEMF().mainImpl();
+    getSolution().getSocialNetwork().writeTracingEvents(Paths.get("events-emf.csv"));
   }
 
   private static ResourceSet repository;
diff --git a/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverXml.java b/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverXml.java
index d62e10b985e9c923f401c2f3289dc09490e1ae9c..ca14762c4fff4fdb62daded4545b35ce84ff838b 100644
--- a/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverXml.java
+++ b/solve/src/main/java/de/tudresden/inf/st/ttc18live/LiveContestDriverXml.java
@@ -8,6 +8,7 @@ import de.tudresden.inf.st.ttc18live.translator.XmlToJastaddTranslator;
 
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.Unmarshaller;
+import java.io.IOException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
@@ -18,8 +19,9 @@ import java.nio.file.Paths;
  * @author jmey - Implementation of 2nd query
  */
 public class LiveContestDriverXml extends AbstractLiveContestDriver {
-  public static void main(String[] args) {
+  public static void main(String[] args) throws IOException {
     new LiveContestDriverXml().mainImpl();
+    getSolution().getSocialNetwork().writeTracingEvents(Paths.get("events-xml.csv"));
   }
 
   @Override
diff --git a/solve/src/main/java/de/tudresden/inf/st/ttc18live/Main.java b/solve/src/main/java/de/tudresden/inf/st/ttc18live/Main.java
index f8cc432542bf554ba34ad70f58e87532cf154931..5e3a801c94c2c41b59ffb604810ccd8c1fa7e03f 100644
--- a/solve/src/main/java/de/tudresden/inf/st/ttc18live/Main.java
+++ b/solve/src/main/java/de/tudresden/inf/st/ttc18live/Main.java
@@ -10,9 +10,12 @@ import org.apache.logging.log4j.Logger;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Unmarshaller;
+import java.io.IOException;
+import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.text.ParseException;
+import java.util.ArrayList;
 import java.util.stream.Collectors;
 
 @SuppressWarnings("FieldCanBeLocal")
@@ -21,7 +24,7 @@ public class Main {
 
   private static boolean splitApply = true;
   private static int changeSet = 2;
-  private static int maxChanges = 20;
+  private static int maxChanges = 5;
 
   private static User mkUser(long id, SocialNetwork sn, Comment... likes) {
     User result = new User();
@@ -130,9 +133,15 @@ public class Main {
     System.exit(0);
   }
 
-  public static void main(String[] args) throws JAXBException, ParseException {
+  public static void main(String[] args) throws Exception {
 //    test();
     SocialNetwork socialNetwork = parseSocialNetwork();
+//    java.util.List<String> events = new ArrayList<>();
+//    socialNetwork.trace().setReceiver((event, node, attribute, params, value) -> {
+//      String eventString = System.currentTimeMillis() + "," + event + "," + attribute;
+//      events.add(eventString);
+//    });
+    socialNetwork.enableTracing();
     logger.info("Validity: {}", socialNetwork.isValid());
 
 //    JsonSerializer.write(socialNetwork, "serializedModelOne");
@@ -160,15 +169,15 @@ public class Main {
         for (ModelChange change : modelChangeSet.getModelChangeList()) {
           change.apply();
           // flush to update for changes
-          modelChangeSet.flushTreeCache();
-          socialNetwork.flushTreeCache();
+//          modelChangeSet.flushTreeCache();
+//          socialNetwork.flushTreeCache();
           // and validate
           socialNetwork.isValid();
         }
       } else {
         modelChangeSet.apply();
         // flush to update for changes
-        socialNetwork.flushTreeCache();
+//        socialNetwork.flushTreeCache();
       }
 
       logger.info("Validity after application of changes: {}", socialNetwork.isValid());
@@ -178,6 +187,7 @@ public class Main {
 
       printQ2Scores(socialNetwork);
     }
+    socialNetwork.writeTracingEvents(Paths.get("events.txt"));
   }
 
   private static void printQ2Scores(SocialNetwork socialNetwork) {