diff --git a/src/main/java/kieker/analysis/graph/export/AbstractTransformer.java b/src/main/java/kieker/analysis/graph/export/AbstractTransformer.java
index 0c640f4efc46982eabd823e6772a4e8a77c0dd52..d6f0c9ab7f38f85cda5a6ca98301bf267d804e2b 100644
--- a/src/main/java/kieker/analysis/graph/export/AbstractTransformer.java
+++ b/src/main/java/kieker/analysis/graph/export/AbstractTransformer.java
@@ -3,9 +3,15 @@ package kieker.analysis.graph.export;
 import kieker.analysis.graph.Edge;
 import kieker.analysis.graph.Graph;
 import kieker.analysis.graph.Vertex;
+import kieker.analysis.graph.traversal.EdgeVisitor;
+import kieker.analysis.graph.traversal.FlatGraphTraverser;
+import kieker.analysis.graph.traversal.GraphTraverser;
+import kieker.analysis.graph.traversal.VertexVisitor;
 
 //TODO better name mapper
-public abstract class AbstractTransformer<O> {
+public abstract class AbstractTransformer<O> implements VertexVisitor, EdgeVisitor {
+
+	private final GraphTraverser graphTraverser = new FlatGraphTraverser(this, this);
 
 	protected Graph graph;
 
@@ -15,13 +21,7 @@ public abstract class AbstractTransformer<O> {
 
 	public final O transform() {
 
-		for (final Vertex vertex : graph.getVertices()) {
-			mapVertex(vertex);
-		}
-
-		for (final Edge edge : graph.getEdges()) {
-			mapEdge(edge);
-		}
+		graphTraverser.traverse(graph);
 
 		return getTransformation();
 	}
@@ -31,4 +31,15 @@ public abstract class AbstractTransformer<O> {
 	protected abstract void mapEdge(Edge edge);
 
 	protected abstract O getTransformation();
+
+	@Override
+	public void visitVertex(final Vertex vertex) {
+		mapVertex(vertex);
+	}
+
+	@Override
+	public void visitEdge(final Edge edge) {
+		mapEdge(edge);
+	}
+
 }
diff --git a/src/main/java/kieker/analysis/graph/traversal/DeepGraphTraverser.java b/src/main/java/kieker/analysis/graph/traversal/DeepGraphTraverser.java
index 18773f3e2ee0305b5ad50029de1783e1c737a6ec..4c6aba38e655d433cb6f66155daa852eda749ed7 100644
--- a/src/main/java/kieker/analysis/graph/traversal/DeepGraphTraverser.java
+++ b/src/main/java/kieker/analysis/graph/traversal/DeepGraphTraverser.java
@@ -1,11 +1,25 @@
 package kieker.analysis.graph.traversal;
 
+import java.util.List;
+
 import kieker.analysis.graph.Edge;
 import kieker.analysis.graph.Graph;
 import kieker.analysis.graph.Vertex;
 
 public class DeepGraphTraverser extends GraphTraverser {
 
+	public DeepGraphTraverser() {
+		super();
+	}
+
+	public DeepGraphTraverser(final List<VertexVisitor> vertexVisitors, final List<EdgeVisitor> edgeVisitors) {
+		super(vertexVisitors, edgeVisitors);
+	}
+
+	public DeepGraphTraverser(final VertexVisitor vertexVisitor, final EdgeVisitor edgeVisitor) {
+		super(vertexVisitor, edgeVisitor);
+	}
+
 	@Override
 	public void traverse(final Graph graph) {
 		for (final Vertex vertex : graph.getVertices()) {
diff --git a/src/main/java/kieker/analysis/graph/traversal/FlatGraphTraverser.java b/src/main/java/kieker/analysis/graph/traversal/FlatGraphTraverser.java
index 46b3f56263cbdaabed1e7068eb1d42b0133a3cdc..020af24266538f10354bd59da4d59fca7a03da34 100644
--- a/src/main/java/kieker/analysis/graph/traversal/FlatGraphTraverser.java
+++ b/src/main/java/kieker/analysis/graph/traversal/FlatGraphTraverser.java
@@ -1,11 +1,25 @@
 package kieker.analysis.graph.traversal;
 
+import java.util.List;
+
 import kieker.analysis.graph.Edge;
 import kieker.analysis.graph.Graph;
 import kieker.analysis.graph.Vertex;
 
 public class FlatGraphTraverser extends GraphTraverser {
 
+	public FlatGraphTraverser() {
+		super();
+	}
+
+	public FlatGraphTraverser(final List<VertexVisitor> vertexVisitors, final List<EdgeVisitor> edgeVisitors) {
+		super(vertexVisitors, edgeVisitors);
+	}
+
+	public FlatGraphTraverser(final VertexVisitor vertexVisitor, final EdgeVisitor edgeVisitor) {
+		super(vertexVisitor, edgeVisitor);
+	}
+
 	@Override
 	public void traverse(final Graph graph) {