diff --git a/src/main/java/kieker/analysis/TraceAnalysisConfiguration.java b/src/main/java/kieker/analysis/TraceAnalysisConfiguration.java
index 4ec06db45ad158016d398ce5f4c1b7048ca07b74..23cdbc8dcf7afeaf639b84c6cd16273b0a10bbf0 100644
--- a/src/main/java/kieker/analysis/TraceAnalysisConfiguration.java
+++ b/src/main/java/kieker/analysis/TraceAnalysisConfiguration.java
@@ -11,9 +11,6 @@ import kieker.analysis.domain.AggregatedOperationCall;
 import kieker.analysis.domain.AggregatedTrace;
 import kieker.analysis.domain.OperationCall;
 import kieker.analysis.domain.Trace;
-import kieker.analysis.graph.Graph;
-import kieker.analysis.graph.export.dot.DotFileWriterStage;
-import kieker.analysis.graph.export.graphml.GraphMLFileWriterComposite;
 import kieker.analysis.stage.tracediagnosis.AllowedRecordsFilter;
 import kieker.analysis.stage.tracediagnosis.BeginEndOfMonitoringDetector;
 import kieker.analysis.stage.tracediagnosis.OperationCallHandlerComposite;
@@ -22,6 +19,9 @@ import kieker.analysis.stage.tracediagnosis.TraceAggregationComposite;
 import kieker.analysis.stage.tracediagnosis.TraceReconstructionComposite;
 import kieker.analysis.trace.traversal.AggrTraceTraverserStage;
 import kieker.analysis.trace.traversal.TraceTraverserStage;
+import kieker.analysis.util.graph.Graph;
+import kieker.analysis.util.graph.export.dot.DotFileWriterStage;
+import kieker.analysis.util.graph.export.graphml.GraphMLFileWriterComposite;
 import kieker.common.record.IMonitoringRecord;
 import kieker.common.record.misc.KiekerMetadataRecord;
 
diff --git a/src/main/java/kieker/analysis/graph/GraphTester.java b/src/main/java/kieker/analysis/dev/GraphTester.java
similarity index 93%
rename from src/main/java/kieker/analysis/graph/GraphTester.java
rename to src/main/java/kieker/analysis/dev/GraphTester.java
index 27b2d9e9167c8251bca210af4b7e5b8388ca8430..7de747dd3ce3c2d5a4e69f310998b731aae50382 100644
--- a/src/main/java/kieker/analysis/graph/GraphTester.java
+++ b/src/main/java/kieker/analysis/dev/GraphTester.java
@@ -1,10 +1,13 @@
-package kieker.analysis.graph;
+package kieker.analysis.dev;
 
 import java.io.OutputStreamWriter;
 import java.util.ArrayList;
 
-import kieker.analysis.graph.export.dot.DotExporter;
-import kieker.analysis.graph.impl.GraphImpl;
+import kieker.analysis.util.graph.Edge;
+import kieker.analysis.util.graph.Graph;
+import kieker.analysis.util.graph.Vertex;
+import kieker.analysis.util.graph.export.dot.DotExporter;
+import kieker.analysis.util.graph.impl.GraphImpl;
 
 public class GraphTester {
 
diff --git a/src/main/java/kieker/analysis/graph/traversal/EdgeVisitor.java b/src/main/java/kieker/analysis/graph/traversal/EdgeVisitor.java
deleted file mode 100644
index 6a5de1d3e88765517bb759adbfcacec40015d5cf..0000000000000000000000000000000000000000
--- a/src/main/java/kieker/analysis/graph/traversal/EdgeVisitor.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package kieker.analysis.graph.traversal;
-
-import kieker.analysis.graph.Edge;
-
-public interface EdgeVisitor {
-
-	public void visitEdge(Edge edge);
-
-}
diff --git a/src/main/java/kieker/analysis/graph/traversal/VertexVisitor.java b/src/main/java/kieker/analysis/graph/traversal/VertexVisitor.java
deleted file mode 100644
index ed5039947d79e2092e33ea212dcbf63e5a1901c2..0000000000000000000000000000000000000000
--- a/src/main/java/kieker/analysis/graph/traversal/VertexVisitor.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package kieker.analysis.graph.traversal;
-
-import kieker.analysis.graph.Vertex;
-
-public interface VertexVisitor {
-
-	public void visitVertex(Vertex vertex);
-
-}
diff --git a/src/main/java/kieker/analysis/trace/graphoutput/DotGraphWriter.java b/src/main/java/kieker/analysis/trace/graphoutput/DotGraphWriter.java
index 914f3b7bc9ca9724409b95fa90e6aca014c270ff..4777375604015ca1808581583715111360da7cdd 100644
--- a/src/main/java/kieker/analysis/trace/graphoutput/DotGraphWriter.java
+++ b/src/main/java/kieker/analysis/trace/graphoutput/DotGraphWriter.java
@@ -14,9 +14,9 @@ import com.tinkerpop.blueprints.Edge;
 import com.tinkerpop.blueprints.Graph;
 import com.tinkerpop.blueprints.Vertex;
 
-import kieker.analysis.graph.export.dot.DotFileWriterStage;
 import kieker.analysis.util.DotBuilder;
 import kieker.analysis.util.blueprintsgraph.NamedGraph;
+import kieker.analysis.util.graph.export.dot.DotFileWriterStage;
 
 import teetime.framework.AbstractConsumerStage;
 
diff --git a/src/main/java/kieker/analysis/trace/graphoutput/GraphMLWriter.java b/src/main/java/kieker/analysis/trace/graphoutput/GraphMLWriter.java
index 64a6d3b8aad949badd9807179c3160bc75c1a432..84a476704b5b3f3174d6611ea461609f2ed9fcad 100644
--- a/src/main/java/kieker/analysis/trace/graphoutput/GraphMLWriter.java
+++ b/src/main/java/kieker/analysis/trace/graphoutput/GraphMLWriter.java
@@ -4,8 +4,8 @@ import java.io.IOException;
 
 import com.tinkerpop.blueprints.Graph;
 
-import kieker.analysis.graph.export.graphml.GraphMLFileWriterComposite;
 import kieker.analysis.util.blueprintsgraph.NamedGraph;
+import kieker.analysis.util.graph.export.graphml.GraphMLFileWriterComposite;
 
 import teetime.framework.AbstractConsumerStage;
 
diff --git a/src/main/java/kieker/analysis/trace/traversal/AbstractTraceToGraphTransformer.java b/src/main/java/kieker/analysis/trace/traversal/AbstractTraceToGraphTransformer.java
index 4307507d205ef05537199276e50693fe95a1990a..1606c373c9a1706108c1974e2bdbe950191d2c5c 100644
--- a/src/main/java/kieker/analysis/trace/traversal/AbstractTraceToGraphTransformer.java
+++ b/src/main/java/kieker/analysis/trace/traversal/AbstractTraceToGraphTransformer.java
@@ -1,10 +1,10 @@
 package kieker.analysis.trace.traversal;
 
 import kieker.analysis.domain.AbstractOperationCall;
-import kieker.analysis.graph.Edge;
-import kieker.analysis.graph.Graph;
-import kieker.analysis.graph.Vertex;
-import kieker.analysis.graph.impl.GraphImpl;
+import kieker.analysis.util.graph.Edge;
+import kieker.analysis.util.graph.Graph;
+import kieker.analysis.util.graph.Vertex;
+import kieker.analysis.util.graph.impl.GraphImpl;
 
 public abstract class AbstractTraceToGraphTransformer<C extends AbstractOperationCall<C>> extends OperationCallVisitor<C> {
 
diff --git a/src/main/java/kieker/analysis/trace/traversal/AggrTraceToGraphTransformer.java b/src/main/java/kieker/analysis/trace/traversal/AggrTraceToGraphTransformer.java
index 4203ed75596eecba4221ff15181abd4abdd07d87..51f761a618bc24251ac075346d0bc011fbc95889 100644
--- a/src/main/java/kieker/analysis/trace/traversal/AggrTraceToGraphTransformer.java
+++ b/src/main/java/kieker/analysis/trace/traversal/AggrTraceToGraphTransformer.java
@@ -1,9 +1,9 @@
 package kieker.analysis.trace.traversal;
 
 import kieker.analysis.domain.AggregatedOperationCall;
-import kieker.analysis.graph.Edge;
-import kieker.analysis.graph.Vertex;
 import kieker.analysis.util.NameConverter;
+import kieker.analysis.util.graph.Edge;
+import kieker.analysis.util.graph.Vertex;
 
 public class AggrTraceToGraphTransformer extends AbstractTraceToGraphTransformer<AggregatedOperationCall> {
 
diff --git a/src/main/java/kieker/analysis/trace/traversal/AggrTraceTraverserStage.java b/src/main/java/kieker/analysis/trace/traversal/AggrTraceTraverserStage.java
index 52eba1aa8d7068934f657b14ef10c77ecc9fce22..eb29c6fab6e48524226097aabd2a4c0ff1f5c1db 100644
--- a/src/main/java/kieker/analysis/trace/traversal/AggrTraceTraverserStage.java
+++ b/src/main/java/kieker/analysis/trace/traversal/AggrTraceTraverserStage.java
@@ -2,7 +2,7 @@ package kieker.analysis.trace.traversal;
 
 import kieker.analysis.domain.AggregatedOperationCall;
 import kieker.analysis.domain.AggregatedTrace;
-import kieker.analysis.graph.Graph;
+import kieker.analysis.util.graph.Graph;
 
 import teetime.stage.basic.AbstractTransformation;
 
diff --git a/src/main/java/kieker/analysis/trace/traversal/TraceToGraphTransformer.java b/src/main/java/kieker/analysis/trace/traversal/TraceToGraphTransformer.java
index b139dcd48facc9a2e25bf292bbb622b6cd2ce09c..5fa9f5900e614963ae305821850e0ba3d07e4c6d 100644
--- a/src/main/java/kieker/analysis/trace/traversal/TraceToGraphTransformer.java
+++ b/src/main/java/kieker/analysis/trace/traversal/TraceToGraphTransformer.java
@@ -1,9 +1,9 @@
 package kieker.analysis.trace.traversal;
 
 import kieker.analysis.domain.OperationCall;
-import kieker.analysis.graph.Edge;
-import kieker.analysis.graph.Vertex;
 import kieker.analysis.util.NameConverter;
+import kieker.analysis.util.graph.Edge;
+import kieker.analysis.util.graph.Vertex;
 
 public class TraceToGraphTransformer extends AbstractTraceToGraphTransformer<OperationCall> {
 
diff --git a/src/main/java/kieker/analysis/trace/traversal/TraceTraverserStage.java b/src/main/java/kieker/analysis/trace/traversal/TraceTraverserStage.java
index 7c17e798d340ce2bd959bcacc097b136b8ccd9d2..5a0322b51399cc2b961ec95b56f331c9a15b48ca 100644
--- a/src/main/java/kieker/analysis/trace/traversal/TraceTraverserStage.java
+++ b/src/main/java/kieker/analysis/trace/traversal/TraceTraverserStage.java
@@ -2,7 +2,7 @@ package kieker.analysis.trace.traversal;
 
 import kieker.analysis.domain.OperationCall;
 import kieker.analysis.domain.Trace;
-import kieker.analysis.graph.Graph;
+import kieker.analysis.util.graph.Graph;
 
 import teetime.stage.basic.AbstractTransformation;
 
diff --git a/src/main/java/kieker/analysis/util/DotBuilder.java b/src/main/java/kieker/analysis/util/DotBuilder.java
index 638ae36e1bcdc5023d240ed68c376e8e134b9b50..c00f1cae0b0d0427aa7ae7921e7e9ab09524108c 100644
--- a/src/main/java/kieker/analysis/util/DotBuilder.java
+++ b/src/main/java/kieker/analysis/util/DotBuilder.java
@@ -6,7 +6,7 @@ import java.util.Map.Entry;
 
 import com.google.common.base.Joiner;
 
-import kieker.analysis.graph.util.dot.DotGraphWriter;
+import kieker.analysis.util.graph.util.dot.DotGraphWriter;
 
 /**
  * Simple class for building and representing dot graph files.
diff --git a/src/main/java/kieker/analysis/graph/Direction.java b/src/main/java/kieker/analysis/util/graph/Direction.java
similarity index 90%
rename from src/main/java/kieker/analysis/graph/Direction.java
rename to src/main/java/kieker/analysis/util/graph/Direction.java
index d10ff42b72b715e507b324d8677a76321c0cd925..666442f6602bb2ff7c72c96da8fb65b856128c4c 100644
--- a/src/main/java/kieker/analysis/graph/Direction.java
+++ b/src/main/java/kieker/analysis/util/graph/Direction.java
@@ -1,4 +1,4 @@
-package kieker.analysis.graph;
+package kieker.analysis.util.graph;
 
 /**
  * Direction is used to denote the direction of an edge or location of a vertex on an edge.
diff --git a/src/main/java/kieker/analysis/graph/Edge.java b/src/main/java/kieker/analysis/util/graph/Edge.java
similarity index 78%
rename from src/main/java/kieker/analysis/graph/Edge.java
rename to src/main/java/kieker/analysis/util/graph/Edge.java
index 78e516be22a7cc29baf4176c32ab44882a6ee5b3..a75ae7fcbfeab12cc9afabd27a6413dbad7d8613 100644
--- a/src/main/java/kieker/analysis/graph/Edge.java
+++ b/src/main/java/kieker/analysis/util/graph/Edge.java
@@ -1,4 +1,4 @@
-package kieker.analysis.graph;
+package kieker.analysis.util.graph;
 
 public interface Edge extends GraphElement {
 
diff --git a/src/main/java/kieker/analysis/graph/Element.java b/src/main/java/kieker/analysis/util/graph/Element.java
similarity index 82%
rename from src/main/java/kieker/analysis/graph/Element.java
rename to src/main/java/kieker/analysis/util/graph/Element.java
index 1e39d8d663abc5e08a93878dbce22d78f4802a84..4318e8a8175f32957bfb4cb14970ba8c436d1812 100644
--- a/src/main/java/kieker/analysis/graph/Element.java
+++ b/src/main/java/kieker/analysis/util/graph/Element.java
@@ -1,4 +1,4 @@
-package kieker.analysis.graph;
+package kieker.analysis.util.graph;
 
 import java.util.Set;
 
diff --git a/src/main/java/kieker/analysis/graph/Graph.java b/src/main/java/kieker/analysis/util/graph/Graph.java
similarity index 92%
rename from src/main/java/kieker/analysis/graph/Graph.java
rename to src/main/java/kieker/analysis/util/graph/Graph.java
index ca9f3de21f99d30ffa7713494179ea7c748b0ac0..d93e6c8c3976ceebed63d89caf34bad40fbdb3de 100644
--- a/src/main/java/kieker/analysis/graph/Graph.java
+++ b/src/main/java/kieker/analysis/util/graph/Graph.java
@@ -1,4 +1,4 @@
-package kieker.analysis.graph;
+package kieker.analysis.util.graph;
 
 public interface Graph extends Element {
 
diff --git a/src/main/java/kieker/analysis/graph/GraphElement.java b/src/main/java/kieker/analysis/util/graph/GraphElement.java
similarity index 75%
rename from src/main/java/kieker/analysis/graph/GraphElement.java
rename to src/main/java/kieker/analysis/util/graph/GraphElement.java
index 58a91e1cc7dabacbf9809e9e3e5c415773da8d56..2fa271d5ba691c965a24759d3fd2cff9eebbb181 100644
--- a/src/main/java/kieker/analysis/graph/GraphElement.java
+++ b/src/main/java/kieker/analysis/util/graph/GraphElement.java
@@ -1,4 +1,4 @@
-package kieker.analysis.graph;
+package kieker.analysis.util.graph;
 
 public abstract interface GraphElement extends Element {
 
diff --git a/src/main/java/kieker/analysis/graph/Vertex.java b/src/main/java/kieker/analysis/util/graph/Vertex.java
similarity index 91%
rename from src/main/java/kieker/analysis/graph/Vertex.java
rename to src/main/java/kieker/analysis/util/graph/Vertex.java
index 5fa0403d76bfcbeccccab564646ac515c0d7ab57..7e12eefdfc50d729c0f8203c64d4f1f7c28a97c5 100644
--- a/src/main/java/kieker/analysis/graph/Vertex.java
+++ b/src/main/java/kieker/analysis/util/graph/Vertex.java
@@ -1,4 +1,4 @@
-package kieker.analysis.graph;
+package kieker.analysis.util.graph;
 
 public interface Vertex extends GraphElement {
 
diff --git a/src/main/java/kieker/analysis/graph/export/AbstractTransformer.java b/src/main/java/kieker/analysis/util/graph/export/AbstractTransformer.java
similarity index 65%
rename from src/main/java/kieker/analysis/graph/export/AbstractTransformer.java
rename to src/main/java/kieker/analysis/util/graph/export/AbstractTransformer.java
index 352a176717621097df4696b83669845e7e3f0691..d820e3fd4b35d1ccaabc70e527e8c9d9cfc5ee33 100644
--- a/src/main/java/kieker/analysis/graph/export/AbstractTransformer.java
+++ b/src/main/java/kieker/analysis/util/graph/export/AbstractTransformer.java
@@ -1,12 +1,12 @@
-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;
+package kieker.analysis.util.graph.export;
+
+import kieker.analysis.util.graph.Edge;
+import kieker.analysis.util.graph.Graph;
+import kieker.analysis.util.graph.Vertex;
+import kieker.analysis.util.graph.traversal.EdgeVisitor;
+import kieker.analysis.util.graph.traversal.FlatGraphTraverser;
+import kieker.analysis.util.graph.traversal.GraphTraverser;
+import kieker.analysis.util.graph.traversal.VertexVisitor;
 
 public abstract class AbstractTransformer<O> implements VertexVisitor, EdgeVisitor {
 
diff --git a/src/main/java/kieker/analysis/graph/export/blueprints/BlueprintsTransformer.java b/src/main/java/kieker/analysis/util/graph/export/blueprints/BlueprintsTransformer.java
similarity index 83%
rename from src/main/java/kieker/analysis/graph/export/blueprints/BlueprintsTransformer.java
rename to src/main/java/kieker/analysis/util/graph/export/blueprints/BlueprintsTransformer.java
index 3f474754ccbbe8b3e66935ef9a350ccadbc44334..f6f81f7d6149a2414dbfe190a7c3e90a87bf41c5 100644
--- a/src/main/java/kieker/analysis/graph/export/blueprints/BlueprintsTransformer.java
+++ b/src/main/java/kieker/analysis/util/graph/export/blueprints/BlueprintsTransformer.java
@@ -1,15 +1,15 @@
-package kieker.analysis.graph.export.blueprints;
+package kieker.analysis.util.graph.export.blueprints;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import com.tinkerpop.blueprints.impls.tg.TinkerGraph;
 
-import kieker.analysis.graph.Direction;
-import kieker.analysis.graph.Edge;
-import kieker.analysis.graph.Graph;
-import kieker.analysis.graph.Vertex;
-import kieker.analysis.graph.export.AbstractTransformer;
+import kieker.analysis.util.graph.Direction;
+import kieker.analysis.util.graph.Edge;
+import kieker.analysis.util.graph.Graph;
+import kieker.analysis.util.graph.Vertex;
+import kieker.analysis.util.graph.export.AbstractTransformer;
 
 public class BlueprintsTransformer extends AbstractTransformer<com.tinkerpop.blueprints.Graph> {
 
diff --git a/src/main/java/kieker/analysis/graph/export/blueprints/BlueprintsTransformerStage.java b/src/main/java/kieker/analysis/util/graph/export/blueprints/BlueprintsTransformerStage.java
similarity index 76%
rename from src/main/java/kieker/analysis/graph/export/blueprints/BlueprintsTransformerStage.java
rename to src/main/java/kieker/analysis/util/graph/export/blueprints/BlueprintsTransformerStage.java
index 63d57f0627e7c9c203c38dbae091912e60c7e3cb..ebab5b7b7333f6ebc19fb7e0030701b4483bc364 100644
--- a/src/main/java/kieker/analysis/graph/export/blueprints/BlueprintsTransformerStage.java
+++ b/src/main/java/kieker/analysis/util/graph/export/blueprints/BlueprintsTransformerStage.java
@@ -1,6 +1,6 @@
-package kieker.analysis.graph.export.blueprints;
+package kieker.analysis.util.graph.export.blueprints;
 
-import kieker.analysis.graph.Graph;
+import kieker.analysis.util.graph.Graph;
 
 import teetime.stage.basic.AbstractTransformation;
 
diff --git a/src/main/java/kieker/analysis/graph/export/dot/DotElementExporter.java b/src/main/java/kieker/analysis/util/graph/export/dot/DotElementExporter.java
similarity index 86%
rename from src/main/java/kieker/analysis/graph/export/dot/DotElementExporter.java
rename to src/main/java/kieker/analysis/util/graph/export/dot/DotElementExporter.java
index 32c26a26ded257cc6357dc9f05381966ce3b6222..89a5f94d36d596693652e2763ad15f1f7ed4da9d 100644
--- a/src/main/java/kieker/analysis/graph/export/dot/DotElementExporter.java
+++ b/src/main/java/kieker/analysis/util/graph/export/dot/DotElementExporter.java
@@ -1,18 +1,19 @@
-package kieker.analysis.graph.export.dot;
+package kieker.analysis.util.graph.export.dot;
 
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Set;
 
-import kieker.analysis.graph.Direction;
-import kieker.analysis.graph.Edge;
-import kieker.analysis.graph.Element;
-import kieker.analysis.graph.Graph;
-import kieker.analysis.graph.Vertex;
-import kieker.analysis.graph.export.AbstractTransformer;
-import kieker.analysis.graph.util.dot.DotGraphWriter;
+import kieker.analysis.util.graph.Direction;
+import kieker.analysis.util.graph.Edge;
+import kieker.analysis.util.graph.Element;
+import kieker.analysis.util.graph.Graph;
+import kieker.analysis.util.graph.Vertex;
+import kieker.analysis.util.graph.export.AbstractTransformer;
+import kieker.analysis.util.graph.util.dot.DotGraphWriter;
+
+import java.util.Set;
 
 class DotElementExporter extends AbstractTransformer<Void> {
 
diff --git a/src/main/java/kieker/analysis/graph/export/dot/DotExportPropertyTokens.java b/src/main/java/kieker/analysis/util/graph/export/dot/DotExportPropertyTokens.java
similarity index 79%
rename from src/main/java/kieker/analysis/graph/export/dot/DotExportPropertyTokens.java
rename to src/main/java/kieker/analysis/util/graph/export/dot/DotExportPropertyTokens.java
index 240eb9a27151fc8f6dacbd8e6a6e0aa830c52d05..67f86c0e1b47478bc83d51212c42dc1b1e93ca47 100644
--- a/src/main/java/kieker/analysis/graph/export/dot/DotExportPropertyTokens.java
+++ b/src/main/java/kieker/analysis/util/graph/export/dot/DotExportPropertyTokens.java
@@ -1,4 +1,4 @@
-package kieker.analysis.graph.export.dot;
+package kieker.analysis.util.graph.export.dot;
 
 public final class DotExportPropertyTokens {
 
diff --git a/src/main/java/kieker/analysis/graph/export/dot/DotExporter.java b/src/main/java/kieker/analysis/util/graph/export/dot/DotExporter.java
similarity index 79%
rename from src/main/java/kieker/analysis/graph/export/dot/DotExporter.java
rename to src/main/java/kieker/analysis/util/graph/export/dot/DotExporter.java
index 0260e6f3c665ab9aa54bbecc6f1680e73d1dca34..27d4ec995c2ca92fe3fd80745505897e790c1c03 100644
--- a/src/main/java/kieker/analysis/graph/export/dot/DotExporter.java
+++ b/src/main/java/kieker/analysis/util/graph/export/dot/DotExporter.java
@@ -1,10 +1,10 @@
-package kieker.analysis.graph.export.dot;
+package kieker.analysis.util.graph.export.dot;
 
 import java.io.IOException;
 import java.io.Writer;
 
-import kieker.analysis.graph.Graph;
-import kieker.analysis.graph.util.dot.DotGraphWriter;
+import kieker.analysis.util.graph.Graph;
+import kieker.analysis.util.graph.util.dot.DotGraphWriter;
 
 public class DotExporter extends DotElementExporter {
 
diff --git a/src/main/java/kieker/analysis/graph/export/dot/DotFileWriterStage.java b/src/main/java/kieker/analysis/util/graph/export/dot/DotFileWriterStage.java
similarity index 74%
rename from src/main/java/kieker/analysis/graph/export/dot/DotFileWriterStage.java
rename to src/main/java/kieker/analysis/util/graph/export/dot/DotFileWriterStage.java
index 6d0ad70a8c015251de6c40a41d667765879d432b..9ea6190a2769cdf38f670ffb258438e5e7a0b90c 100644
--- a/src/main/java/kieker/analysis/graph/export/dot/DotFileWriterStage.java
+++ b/src/main/java/kieker/analysis/util/graph/export/dot/DotFileWriterStage.java
@@ -1,11 +1,11 @@
-package kieker.analysis.graph.export.dot;
+package kieker.analysis.util.graph.export.dot;
 
 import java.io.FileWriter;
 import java.io.IOException;
 import java.util.function.Function;
 
-import kieker.analysis.graph.Graph;
-import kieker.analysis.graph.mapping.SimpleFileNameMapper;
+import kieker.analysis.util.graph.Graph;
+import kieker.analysis.util.graph.mapping.SimpleFileNameMapper;
 
 public class DotFileWriterStage extends DotWriterStage {
 
diff --git a/src/main/java/kieker/analysis/graph/export/dot/DotWriterStage.java b/src/main/java/kieker/analysis/util/graph/export/dot/DotWriterStage.java
similarity index 82%
rename from src/main/java/kieker/analysis/graph/export/dot/DotWriterStage.java
rename to src/main/java/kieker/analysis/util/graph/export/dot/DotWriterStage.java
index 8879fe561302392840126bc5574f5207ddc73ff0..ae81d57437e5c663ff22d95483a99376a77ef57d 100644
--- a/src/main/java/kieker/analysis/graph/export/dot/DotWriterStage.java
+++ b/src/main/java/kieker/analysis/util/graph/export/dot/DotWriterStage.java
@@ -1,9 +1,9 @@
-package kieker.analysis.graph.export.dot;
+package kieker.analysis.util.graph.export.dot;
 
 import java.io.Writer;
 import java.util.function.Function;
 
-import kieker.analysis.graph.Graph;
+import kieker.analysis.util.graph.Graph;
 
 import teetime.framework.AbstractConsumerStage;
 
diff --git a/src/main/java/kieker/analysis/graph/export/graphml/GraphMLFileWriterComposite.java b/src/main/java/kieker/analysis/util/graph/export/graphml/GraphMLFileWriterComposite.java
similarity index 76%
rename from src/main/java/kieker/analysis/graph/export/graphml/GraphMLFileWriterComposite.java
rename to src/main/java/kieker/analysis/util/graph/export/graphml/GraphMLFileWriterComposite.java
index 341501885943d0f80698b29f61cc4866ff7c55f0..f5713e72a9200c8789bdfd69b5f623ba2cb09f08 100644
--- a/src/main/java/kieker/analysis/graph/export/graphml/GraphMLFileWriterComposite.java
+++ b/src/main/java/kieker/analysis/util/graph/export/graphml/GraphMLFileWriterComposite.java
@@ -1,11 +1,11 @@
-package kieker.analysis.graph.export.graphml;
+package kieker.analysis.util.graph.export.graphml;
 
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.util.function.Function;
 
-import kieker.analysis.graph.Graph;
-import kieker.analysis.graph.mapping.SimpleFileNameMapper;
+import kieker.analysis.util.graph.Graph;
+import kieker.analysis.util.graph.mapping.SimpleFileNameMapper;
 
 public class GraphMLFileWriterComposite extends GraphMLWriterComposite {
 
diff --git a/src/main/java/kieker/analysis/graph/export/graphml/GraphMLTransformationStage.java b/src/main/java/kieker/analysis/util/graph/export/graphml/GraphMLTransformationStage.java
similarity index 90%
rename from src/main/java/kieker/analysis/graph/export/graphml/GraphMLTransformationStage.java
rename to src/main/java/kieker/analysis/util/graph/export/graphml/GraphMLTransformationStage.java
index 311b5bee8b7b5f2ce4b406a115a5e942feff45a0..5ab46db314d6c324182a24344f3acec463f99bb2 100644
--- a/src/main/java/kieker/analysis/graph/export/graphml/GraphMLTransformationStage.java
+++ b/src/main/java/kieker/analysis/util/graph/export/graphml/GraphMLTransformationStage.java
@@ -1,4 +1,4 @@
-package kieker.analysis.graph.export.graphml;
+package kieker.analysis.util.graph.export.graphml;
 
 import java.io.OutputStream;
 import java.util.function.Function;
@@ -8,8 +8,8 @@ import javax.xml.bind.JAXBElement;
 import org.graphdrawing.graphml.GraphmlType;
 import org.graphdrawing.graphml.ObjectFactory;
 
-import kieker.analysis.graph.Graph;
 import kieker.analysis.util.JAXBMarshalElement;
+import kieker.analysis.util.graph.Graph;
 
 import teetime.stage.basic.AbstractTransformation;
 
diff --git a/src/main/java/kieker/analysis/graph/export/graphml/GraphMLWriterComposite.java b/src/main/java/kieker/analysis/util/graph/export/graphml/GraphMLWriterComposite.java
similarity index 87%
rename from src/main/java/kieker/analysis/graph/export/graphml/GraphMLWriterComposite.java
rename to src/main/java/kieker/analysis/util/graph/export/graphml/GraphMLWriterComposite.java
index 2c7a708b9c1a036ae7320b6a3f8744cd186252ee..7ed9e67312e51aa01d6d12175e12a864ab339225 100644
--- a/src/main/java/kieker/analysis/graph/export/graphml/GraphMLWriterComposite.java
+++ b/src/main/java/kieker/analysis/util/graph/export/graphml/GraphMLWriterComposite.java
@@ -1,12 +1,12 @@
-package kieker.analysis.graph.export.graphml;
+package kieker.analysis.util.graph.export.graphml;
 
 import java.io.OutputStream;
 import java.util.function.Function;
 
 import org.graphdrawing.graphml.GraphmlType;
 
-import kieker.analysis.graph.Graph;
 import kieker.analysis.util.JAXBMarshalStage;
+import kieker.analysis.util.graph.Graph;
 
 import teetime.framework.CompositeStage;
 import teetime.framework.InputPort;
diff --git a/src/main/java/kieker/analysis/graph/export/graphml/GraphTypeTransformer.java b/src/main/java/kieker/analysis/util/graph/export/graphml/GraphTypeTransformer.java
similarity index 85%
rename from src/main/java/kieker/analysis/graph/export/graphml/GraphTypeTransformer.java
rename to src/main/java/kieker/analysis/util/graph/export/graphml/GraphTypeTransformer.java
index 1ee3cfe916f67b4c5450ce601d5c5b67c931bf06..56be5f9abcefb7a0c2379251255242344b2524cd 100644
--- a/src/main/java/kieker/analysis/graph/export/graphml/GraphTypeTransformer.java
+++ b/src/main/java/kieker/analysis/util/graph/export/graphml/GraphTypeTransformer.java
@@ -1,4 +1,4 @@
-package kieker.analysis.graph.export.graphml;
+package kieker.analysis.util.graph.export.graphml;
 
 import java.util.List;
 
@@ -8,11 +8,11 @@ import org.graphdrawing.graphml.GraphEdgedefaultType;
 import org.graphdrawing.graphml.GraphType;
 import org.graphdrawing.graphml.NodeType;
 
-import kieker.analysis.graph.Direction;
-import kieker.analysis.graph.Edge;
-import kieker.analysis.graph.Graph;
-import kieker.analysis.graph.Vertex;
-import kieker.analysis.graph.export.AbstractTransformer;
+import kieker.analysis.util.graph.Direction;
+import kieker.analysis.util.graph.Edge;
+import kieker.analysis.util.graph.Graph;
+import kieker.analysis.util.graph.Vertex;
+import kieker.analysis.util.graph.export.AbstractTransformer;
 
 public class GraphTypeTransformer extends AbstractTransformer<GraphType> {
 
diff --git a/src/main/java/kieker/analysis/graph/impl/EdgeImpl.java b/src/main/java/kieker/analysis/util/graph/impl/EdgeImpl.java
similarity index 80%
rename from src/main/java/kieker/analysis/graph/impl/EdgeImpl.java
rename to src/main/java/kieker/analysis/util/graph/impl/EdgeImpl.java
index 16e53e25a2b8d29e8bdedcfd270ebe642261932b..c4428497c892dec6295532108de104fd7ec6e512 100644
--- a/src/main/java/kieker/analysis/graph/impl/EdgeImpl.java
+++ b/src/main/java/kieker/analysis/util/graph/impl/EdgeImpl.java
@@ -1,8 +1,8 @@
-package kieker.analysis.graph.impl;
+package kieker.analysis.util.graph.impl;
 
-import kieker.analysis.graph.Direction;
-import kieker.analysis.graph.Edge;
-import kieker.analysis.graph.Vertex;
+import kieker.analysis.util.graph.Direction;
+import kieker.analysis.util.graph.Edge;
+import kieker.analysis.util.graph.Vertex;
 
 class EdgeImpl extends GraphElementImpl implements Edge {
 
diff --git a/src/main/java/kieker/analysis/graph/impl/ElementImpl.java b/src/main/java/kieker/analysis/util/graph/impl/ElementImpl.java
similarity index 85%
rename from src/main/java/kieker/analysis/graph/impl/ElementImpl.java
rename to src/main/java/kieker/analysis/util/graph/impl/ElementImpl.java
index 02861de24475f15ab1d203e731f3e8360d7baafa..528add4e2c3ad667b5c2a83f3bbbe48447ef9ebf 100644
--- a/src/main/java/kieker/analysis/graph/impl/ElementImpl.java
+++ b/src/main/java/kieker/analysis/util/graph/impl/ElementImpl.java
@@ -1,11 +1,11 @@
-package kieker.analysis.graph.impl;
+package kieker.analysis.util.graph.impl;
 
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
-import kieker.analysis.graph.Element;
+import kieker.analysis.util.graph.Element;
 
 abstract class ElementImpl implements Element {
 
diff --git a/src/main/java/kieker/analysis/graph/impl/ExceptionFactory.java b/src/main/java/kieker/analysis/util/graph/impl/ExceptionFactory.java
similarity index 98%
rename from src/main/java/kieker/analysis/graph/impl/ExceptionFactory.java
rename to src/main/java/kieker/analysis/util/graph/impl/ExceptionFactory.java
index 862e44aa80133ad0ddc7f6c51bf2329ec3d96b95..10c786fb3e5549afc68704f709ad435d8c127eeb 100644
--- a/src/main/java/kieker/analysis/graph/impl/ExceptionFactory.java
+++ b/src/main/java/kieker/analysis/util/graph/impl/ExceptionFactory.java
@@ -1,4 +1,4 @@
-package kieker.analysis.graph.impl;
+package kieker.analysis.util.graph.impl;
 
 /**
  * The ExceptionFactory provides standard exceptions for graphs.
diff --git a/src/main/java/kieker/analysis/graph/impl/GraphElementImpl.java b/src/main/java/kieker/analysis/util/graph/impl/GraphElementImpl.java
similarity index 80%
rename from src/main/java/kieker/analysis/graph/impl/GraphElementImpl.java
rename to src/main/java/kieker/analysis/util/graph/impl/GraphElementImpl.java
index efbf231d23ea8cf1aed92ca55d7be79aee91f0ac..69d508f0a2a0751634f3e4cf525665b81a23b663 100644
--- a/src/main/java/kieker/analysis/graph/impl/GraphElementImpl.java
+++ b/src/main/java/kieker/analysis/util/graph/impl/GraphElementImpl.java
@@ -1,6 +1,6 @@
-package kieker.analysis.graph.impl;
+package kieker.analysis.util.graph.impl;
 
-import kieker.analysis.graph.GraphElement;
+import kieker.analysis.util.graph.GraphElement;
 
 abstract class GraphElementImpl extends ElementImpl implements GraphElement {
 
diff --git a/src/main/java/kieker/analysis/graph/impl/GraphImpl.java b/src/main/java/kieker/analysis/util/graph/impl/GraphImpl.java
similarity index 95%
rename from src/main/java/kieker/analysis/graph/impl/GraphImpl.java
rename to src/main/java/kieker/analysis/util/graph/impl/GraphImpl.java
index 58cccb73e4c3d5846e9265cef97dd18a44dcd5ae..d6df8acd73c3a683f628cd3ec28fddfe91da71a9 100644
--- a/src/main/java/kieker/analysis/graph/impl/GraphImpl.java
+++ b/src/main/java/kieker/analysis/util/graph/impl/GraphImpl.java
@@ -1,14 +1,14 @@
-package kieker.analysis.graph.impl;
+package kieker.analysis.util.graph.impl;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Stack;
 
-import kieker.analysis.graph.Direction;
-import kieker.analysis.graph.Edge;
-import kieker.analysis.graph.Graph;
-import kieker.analysis.graph.Vertex;
+import kieker.analysis.util.graph.Direction;
+import kieker.analysis.util.graph.Edge;
+import kieker.analysis.util.graph.Graph;
+import kieker.analysis.util.graph.Vertex;
 
 public class GraphImpl extends ElementImpl implements Graph {
 
diff --git a/src/main/java/kieker/analysis/graph/impl/VertexImpl.java b/src/main/java/kieker/analysis/util/graph/impl/VertexImpl.java
similarity index 91%
rename from src/main/java/kieker/analysis/graph/impl/VertexImpl.java
rename to src/main/java/kieker/analysis/util/graph/impl/VertexImpl.java
index 74f9dac661eb719d5d9d236a6a6b2324777fdf21..7dd55e0b3587d1a1b5aea15146cd5d06032ebc4f 100644
--- a/src/main/java/kieker/analysis/graph/impl/VertexImpl.java
+++ b/src/main/java/kieker/analysis/util/graph/impl/VertexImpl.java
@@ -1,13 +1,13 @@
-package kieker.analysis.graph.impl;
+package kieker.analysis.util.graph.impl;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 
-import kieker.analysis.graph.Direction;
-import kieker.analysis.graph.Edge;
-import kieker.analysis.graph.Graph;
-import kieker.analysis.graph.Vertex;
+import kieker.analysis.util.graph.Direction;
+import kieker.analysis.util.graph.Edge;
+import kieker.analysis.util.graph.Graph;
+import kieker.analysis.util.graph.Vertex;
 
 class VertexImpl extends GraphElementImpl implements Vertex {
 
diff --git a/src/main/java/kieker/analysis/graph/mapping/SimpleFileNameMapper.java b/src/main/java/kieker/analysis/util/graph/mapping/SimpleFileNameMapper.java
similarity index 84%
rename from src/main/java/kieker/analysis/graph/mapping/SimpleFileNameMapper.java
rename to src/main/java/kieker/analysis/util/graph/mapping/SimpleFileNameMapper.java
index 2b9431cb9adc8a7dc9df249c04e314eb817fa9d1..87f00a855577fdf8fb8ee3d84d57c640c8fa75ca 100644
--- a/src/main/java/kieker/analysis/graph/mapping/SimpleFileNameMapper.java
+++ b/src/main/java/kieker/analysis/util/graph/mapping/SimpleFileNameMapper.java
@@ -1,8 +1,8 @@
-package kieker.analysis.graph.mapping;
+package kieker.analysis.util.graph.mapping;
 
 import java.util.function.Function;
 
-import kieker.analysis.graph.Graph;
+import kieker.analysis.util.graph.Graph;
 
 /**
  * This mapper maps a graph to a file name with the pattern:
diff --git a/src/main/java/kieker/analysis/graph/traversal/DeepGraphTraverser.java b/src/main/java/kieker/analysis/util/graph/traversal/DeepGraphTraverser.java
similarity index 80%
rename from src/main/java/kieker/analysis/graph/traversal/DeepGraphTraverser.java
rename to src/main/java/kieker/analysis/util/graph/traversal/DeepGraphTraverser.java
index 4c6aba38e655d433cb6f66155daa852eda749ed7..d86a41728314be902be52b55fa3d6636f76f93b6 100644
--- a/src/main/java/kieker/analysis/graph/traversal/DeepGraphTraverser.java
+++ b/src/main/java/kieker/analysis/util/graph/traversal/DeepGraphTraverser.java
@@ -1,10 +1,10 @@
-package kieker.analysis.graph.traversal;
+package kieker.analysis.util.graph.traversal;
 
 import java.util.List;
 
-import kieker.analysis.graph.Edge;
-import kieker.analysis.graph.Graph;
-import kieker.analysis.graph.Vertex;
+import kieker.analysis.util.graph.Edge;
+import kieker.analysis.util.graph.Graph;
+import kieker.analysis.util.graph.Vertex;
 
 public class DeepGraphTraverser extends GraphTraverser {
 
diff --git a/src/main/java/kieker/analysis/util/graph/traversal/EdgeVisitor.java b/src/main/java/kieker/analysis/util/graph/traversal/EdgeVisitor.java
new file mode 100644
index 0000000000000000000000000000000000000000..0b53e12f6af672e119604c565e9ede7ed9a81bb6
--- /dev/null
+++ b/src/main/java/kieker/analysis/util/graph/traversal/EdgeVisitor.java
@@ -0,0 +1,9 @@
+package kieker.analysis.util.graph.traversal;
+
+import kieker.analysis.util.graph.Edge;
+
+public interface EdgeVisitor {
+
+	public void visitEdge(Edge edge);
+
+}
diff --git a/src/main/java/kieker/analysis/graph/traversal/FlatGraphTraverser.java b/src/main/java/kieker/analysis/util/graph/traversal/FlatGraphTraverser.java
similarity index 78%
rename from src/main/java/kieker/analysis/graph/traversal/FlatGraphTraverser.java
rename to src/main/java/kieker/analysis/util/graph/traversal/FlatGraphTraverser.java
index 020af24266538f10354bd59da4d59fca7a03da34..d26005b59bd42bf1ba74e9bd158118e1cb0a6125 100644
--- a/src/main/java/kieker/analysis/graph/traversal/FlatGraphTraverser.java
+++ b/src/main/java/kieker/analysis/util/graph/traversal/FlatGraphTraverser.java
@@ -1,10 +1,10 @@
-package kieker.analysis.graph.traversal;
+package kieker.analysis.util.graph.traversal;
 
 import java.util.List;
 
-import kieker.analysis.graph.Edge;
-import kieker.analysis.graph.Graph;
-import kieker.analysis.graph.Vertex;
+import kieker.analysis.util.graph.Edge;
+import kieker.analysis.util.graph.Graph;
+import kieker.analysis.util.graph.Vertex;
 
 public class FlatGraphTraverser extends GraphTraverser {
 
diff --git a/src/main/java/kieker/analysis/graph/traversal/GraphTraverser.java b/src/main/java/kieker/analysis/util/graph/traversal/GraphTraverser.java
similarity index 90%
rename from src/main/java/kieker/analysis/graph/traversal/GraphTraverser.java
rename to src/main/java/kieker/analysis/util/graph/traversal/GraphTraverser.java
index b1bce427bdce93708bc490afdd2be3d4ed2877d3..ddd0176ca435d52606afdb4d17e41a17a73c0731 100644
--- a/src/main/java/kieker/analysis/graph/traversal/GraphTraverser.java
+++ b/src/main/java/kieker/analysis/util/graph/traversal/GraphTraverser.java
@@ -1,9 +1,9 @@
-package kieker.analysis.graph.traversal;
+package kieker.analysis.util.graph.traversal;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import kieker.analysis.graph.Graph;
+import kieker.analysis.util.graph.Graph;
 
 public abstract class GraphTraverser {
 
diff --git a/src/main/java/kieker/analysis/util/graph/traversal/VertexVisitor.java b/src/main/java/kieker/analysis/util/graph/traversal/VertexVisitor.java
new file mode 100644
index 0000000000000000000000000000000000000000..a67521057f476a959b5bd495c7d1de38fd3b805b
--- /dev/null
+++ b/src/main/java/kieker/analysis/util/graph/traversal/VertexVisitor.java
@@ -0,0 +1,9 @@
+package kieker.analysis.util.graph.traversal;
+
+import kieker.analysis.util.graph.Vertex;
+
+public interface VertexVisitor {
+
+	public void visitVertex(Vertex vertex);
+
+}
diff --git a/src/main/java/kieker/analysis/graph/util/IndentWriter.java b/src/main/java/kieker/analysis/util/graph/util/IndentWriter.java
similarity index 92%
rename from src/main/java/kieker/analysis/graph/util/IndentWriter.java
rename to src/main/java/kieker/analysis/util/graph/util/IndentWriter.java
index ae43c5c0db4c546bd0e64237b416a22cedd7c477..b880f98276cad905702f37e1ee275b230fde2270 100644
--- a/src/main/java/kieker/analysis/graph/util/IndentWriter.java
+++ b/src/main/java/kieker/analysis/util/graph/util/IndentWriter.java
@@ -1,4 +1,4 @@
-package kieker.analysis.graph.util;
+package kieker.analysis.util.graph.util;
 
 import java.io.IOException;
 import java.io.Writer;
diff --git a/src/main/java/kieker/analysis/graph/util/dot/DotGraph.java b/src/main/java/kieker/analysis/util/graph/util/dot/DotGraph.java
similarity index 90%
rename from src/main/java/kieker/analysis/graph/util/dot/DotGraph.java
rename to src/main/java/kieker/analysis/util/graph/util/dot/DotGraph.java
index f64c2b7323e244bbd1d45a8057a202e315fdd30b..fbe966b91fb03be137f5fc5a14b60ceb99ad1c2e 100644
--- a/src/main/java/kieker/analysis/graph/util/dot/DotGraph.java
+++ b/src/main/java/kieker/analysis/util/graph/util/dot/DotGraph.java
@@ -1,4 +1,4 @@
-package kieker.analysis.graph.util.dot;
+package kieker.analysis.util.graph.util.dot;
 
 public final class DotGraph {
 
diff --git a/src/main/java/kieker/analysis/graph/util/dot/DotGraphType.java b/src/main/java/kieker/analysis/util/graph/util/dot/DotGraphType.java
similarity index 50%
rename from src/main/java/kieker/analysis/graph/util/dot/DotGraphType.java
rename to src/main/java/kieker/analysis/util/graph/util/dot/DotGraphType.java
index 4f39a8d067f74dbd3fe91b4369106d9afc7dcc37..f46cf154ea0c0fa9461113983445d0e4a08bcd78 100644
--- a/src/main/java/kieker/analysis/graph/util/dot/DotGraphType.java
+++ b/src/main/java/kieker/analysis/util/graph/util/dot/DotGraphType.java
@@ -1,4 +1,4 @@
-package kieker.analysis.graph.util.dot;
+package kieker.analysis.util.graph.util.dot;
 
 public enum DotGraphType {
 
diff --git a/src/main/java/kieker/analysis/graph/util/dot/DotGraphWriter.java b/src/main/java/kieker/analysis/util/graph/util/dot/DotGraphWriter.java
similarity index 94%
rename from src/main/java/kieker/analysis/graph/util/dot/DotGraphWriter.java
rename to src/main/java/kieker/analysis/util/graph/util/dot/DotGraphWriter.java
index 91a2522b22ba57d96a99603379c81dc99a82cf4e..374768c77c3de6c3b181d9893efd827cf73d7bfa 100644
--- a/src/main/java/kieker/analysis/graph/util/dot/DotGraphWriter.java
+++ b/src/main/java/kieker/analysis/util/graph/util/dot/DotGraphWriter.java
@@ -1,11 +1,11 @@
-package kieker.analysis.graph.util.dot;
+package kieker.analysis.util.graph.util.dot;
 
 import java.io.IOException;
 import java.io.Writer;
 import java.util.Map;
 import java.util.stream.Collectors;
 
-import kieker.analysis.graph.util.IndentWriter;
+import kieker.analysis.util.graph.util.IndentWriter;
 
 /**
  * Class to build and write a DOT Graph to a writer.