diff --git a/trainbenchmark/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java b/trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
similarity index 88%
rename from trainbenchmark/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
rename to trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
index ee595c277943eb8beee61a7438802b63eff7a7ed..94ccaeb7daba675880d3beef14f970ac34a543b8 100644
--- a/trainbenchmark/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
+++ b/trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
@@ -6,21 +6,14 @@ import de.tudresden.inf.st.train.jastadd.driver.deserializer.JsonDeserializer;
 import hu.bme.mit.trainbenchmark.benchmark.driver.Driver;
 
 import java.io.File;
-import java.io.IOException;
 
 
 public class JastaddDriver extends Driver {
 
-  RailwayContainer root;
-
-  private int idCounter = 0;
-
-  public boolean flushCaches() {
-    return flushCaches;
-  }
-
   private final boolean flushCaches;
   private final ASTState.Trace.Receiver receiver;
+  private RailwayContainer root;
+  private int idCounter = 0;
 
   public JastaddDriver(boolean flushCaches, ASTState.Trace.Receiver receiver) {
     super();
@@ -42,10 +35,12 @@ public class JastaddDriver extends Driver {
   }
 
   @Override
-  public void read(final String modelPath) throws IOException {
+  public void read(final String modelPath) {
 
     File modelFile = new File(modelPath);
+    new RailwayContainer().state().enterConstruction();
     root = JsonDeserializer.read(modelFile);
+    root.state().exitConstruction();
 
     // enable tracing if there is a receiver
     if (receiver != null) {
diff --git a/trainbenchmark/trainbenchmark-tool-jastadd-intrinsic/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java b/trainbenchmark/trainbenchmark-tool-jastadd-intrinsic/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
new file mode 100644
index 0000000000000000000000000000000000000000..2074523858bd78db4e379c494662623fa5ea99ab
--- /dev/null
+++ b/trainbenchmark/trainbenchmark-tool-jastadd-intrinsic/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
@@ -0,0 +1,59 @@
+package de.tudresden.inf.st.train.jastadd.driver;
+
+import de.tudresden.inf.st.train.jastadd.ast.ASTState;
+import de.tudresden.inf.st.train.jastadd.ast.RailwayContainer;
+import de.tudresden.inf.st.train.jastadd.driver.deserializer.JsonDeserializer;
+import hu.bme.mit.trainbenchmark.benchmark.driver.Driver;
+
+import java.io.File;
+
+
+public class JastaddDriver extends Driver {
+
+  private final boolean flushCaches;
+  private final ASTState.Trace.Receiver receiver;
+  private RailwayContainer root;
+  private int idCounter = 0;
+
+  public JastaddDriver(boolean flushCaches, ASTState.Trace.Receiver receiver) {
+    super();
+    this.flushCaches = flushCaches;
+    this.receiver = receiver;
+  }
+
+  public static JastaddDriver create(boolean flushCaches, ASTState.Trace.Receiver receiver) {
+    return new JastaddDriver(flushCaches, receiver);
+  }
+
+  public int nextId() {
+    idCounter--;
+    return idCounter;
+  }
+
+  public RailwayContainer getModel() {
+    return root;
+  }
+
+  @Override
+  public void read(final String modelPath) {
+
+    File modelFile = new File(modelPath);
+    root = JsonDeserializer.read(modelFile);
+
+    // enable tracing if there is a receiver
+    if (receiver != null) {
+      getModel().trace().setReceiver(receiver);
+    }
+  }
+
+  @Override
+  public String getPostfix() {
+    return "-jastadd-manual.json";
+  }
+
+  public void flushCache() {
+    if (flushCaches) {
+      getModel().flushTreeCache();
+    }
+  }
+}
diff --git a/trainbenchmark/trainbenchmark-tool-jastadd-manual-relast-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java b/trainbenchmark/trainbenchmark-tool-jastadd-manual-relast-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
index 302490b8f46336fadfe3337e61c0ac8fa4f8c62d..6e7871d360456bd57503d74b5091c2508b9e9a83 100644
--- a/trainbenchmark/trainbenchmark-tool-jastadd-manual-relast-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
+++ b/trainbenchmark/trainbenchmark-tool-jastadd-manual-relast-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
@@ -6,15 +6,15 @@ import de.tudresden.inf.st.train.jastadd.driver.deserializer.JsonDeserializer;
 import hu.bme.mit.trainbenchmark.benchmark.driver.Driver;
 
 import java.io.File;
-import java.io.IOException;
 
 
 public class JastaddDriver extends Driver {
 
   private final boolean flushCaches;
   private final ASTState.Trace.Receiver receiver;
-  RailwayContainer root;
+  private RailwayContainer root;
   private int idCounter = 0;
+
   public JastaddDriver(boolean flushCaches, ASTState.Trace.Receiver receiver) {
     super();
     this.flushCaches = flushCaches;
@@ -25,10 +25,6 @@ public class JastaddDriver extends Driver {
     return new JastaddDriver(flushCaches, receiver);
   }
 
-  public boolean flushCaches() {
-    return flushCaches;
-  }
-
   public int nextId() {
     idCounter--;
     return idCounter;
@@ -39,10 +35,12 @@ public class JastaddDriver extends Driver {
   }
 
   @Override
-  public void read(final String modelPath) throws IOException {
+  public void read(final String modelPath) {
 
     File modelFile = new File(modelPath);
+    new RailwayContainer().state().enterConstruction();
     root = JsonDeserializer.read(modelFile);
+    root.state().exitConstruction();
 
     // enable tracing if there is a receiver
     if (receiver != null) {
diff --git a/trainbenchmark/trainbenchmark-tool-jastadd-namelookup-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java b/trainbenchmark/trainbenchmark-tool-jastadd-namelookup-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
new file mode 100644
index 0000000000000000000000000000000000000000..94ccaeb7daba675880d3beef14f970ac34a543b8
--- /dev/null
+++ b/trainbenchmark/trainbenchmark-tool-jastadd-namelookup-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
@@ -0,0 +1,61 @@
+package de.tudresden.inf.st.train.jastadd.driver;
+
+import de.tudresden.inf.st.train.jastadd.ast.ASTState;
+import de.tudresden.inf.st.train.jastadd.ast.RailwayContainer;
+import de.tudresden.inf.st.train.jastadd.driver.deserializer.JsonDeserializer;
+import hu.bme.mit.trainbenchmark.benchmark.driver.Driver;
+
+import java.io.File;
+
+
+public class JastaddDriver extends Driver {
+
+  private final boolean flushCaches;
+  private final ASTState.Trace.Receiver receiver;
+  private RailwayContainer root;
+  private int idCounter = 0;
+
+  public JastaddDriver(boolean flushCaches, ASTState.Trace.Receiver receiver) {
+    super();
+    this.flushCaches = flushCaches;
+    this.receiver = receiver;
+  }
+
+  public static JastaddDriver create(boolean flushCaches, ASTState.Trace.Receiver receiver) {
+    return new JastaddDriver(flushCaches, receiver);
+  }
+
+  public int nextId() {
+    idCounter--;
+    return idCounter;
+  }
+
+  public RailwayContainer getModel() {
+    return root;
+  }
+
+  @Override
+  public void read(final String modelPath) {
+
+    File modelFile = new File(modelPath);
+    new RailwayContainer().state().enterConstruction();
+    root = JsonDeserializer.read(modelFile);
+    root.state().exitConstruction();
+
+    // enable tracing if there is a receiver
+    if (receiver != null) {
+      getModel().trace().setReceiver(receiver);
+    }
+  }
+
+  @Override
+  public String getPostfix() {
+    return "-jastadd-manual.json";
+  }
+
+  public void flushCache() {
+    if (flushCaches) {
+      getModel().flushTreeCache();
+    }
+  }
+}
diff --git a/trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java b/trainbenchmark/trainbenchmark-tool-jastadd-namelookup/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
similarity index 100%
rename from trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
rename to trainbenchmark/trainbenchmark-tool-jastadd-namelookup/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
diff --git a/trainbenchmark/trainbenchmark-tool-jastadd-relast-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java b/trainbenchmark/trainbenchmark-tool-jastadd-relast-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
index 668f03e495b5c09bb5103702068208d3af1ae55e..eeee13f0d65b673475891791ad1565900f5061d7 100644
--- a/trainbenchmark/trainbenchmark-tool-jastadd-relast-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
+++ b/trainbenchmark/trainbenchmark-tool-jastadd-relast-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
@@ -3,8 +3,6 @@ package de.tudresden.inf.st.train.jastadd.driver;
 import de.tudresden.inf.st.train.jastadd.ast.ASTState;
 import de.tudresden.inf.st.train.jastadd.ast.DeserializationException;
 import de.tudresden.inf.st.train.jastadd.ast.RailwayContainer;
-import de.tudresden.inf.st.train.jastadd.ast.SerializationException;
-import de.tudresden.inf.st.train.jastadd.driver.deserializer.JsonDeserializer;
 import hu.bme.mit.trainbenchmark.benchmark.driver.Driver;
 
 import java.io.File;
@@ -13,16 +11,10 @@ import java.io.IOException;
 
 public class JastaddDriver extends Driver {
 
-  RailwayContainer root;
-
-  private int idCounter = 0;
-
-  public boolean flushCaches() {
-    return flushCaches;
-  }
-
   private final boolean flushCaches;
   private final ASTState.Trace.Receiver receiver;
+  private RailwayContainer root;
+  private int idCounter = 0;
 
   public JastaddDriver(boolean flushCaches, ASTState.Trace.Receiver receiver) {
     super();
@@ -48,7 +40,9 @@ public class JastaddDriver extends Driver {
 
     File modelFile = new File(modelPath);
     try {
+      new RailwayContainer().state().enterConstruction();
       root = RailwayContainer.deserialize(modelFile);
+      root.state().exitConstruction();
     } catch (DeserializationException e) {
       throw new IOException(e);
     }