diff --git a/src/main/java/kieker/analysis/dev/DependencyGraphCreator.java b/src/main/java/kieker/analysis/dev/DependencyGraphCreator.java
new file mode 100644
index 0000000000000000000000000000000000000000..2c02c92b148c40a0c94e55a98ffa89d1f44ae959
--- /dev/null
+++ b/src/main/java/kieker/analysis/dev/DependencyGraphCreator.java
@@ -0,0 +1,80 @@
+package kieker.analysis.dev;
+
+import java.util.Collection;
+
+import kieker.analysis.domain.systemdependency.Component;
+import kieker.analysis.domain.systemdependency.Container;
+import kieker.analysis.domain.systemdependency.Operation;
+import kieker.analysis.domain.systemdependency.SoftwareSystem;
+import kieker.analysis.domain.systemdependency.SystemEntity;
+import kieker.analysis.util.graph.Graph;
+import kieker.analysis.util.graph.Vertex;
+import kieker.analysis.util.graph.impl.GraphImpl;
+
+public class DependencyGraphCreator {
+
+	private final boolean containers = true;
+	private final boolean components = true;
+	private final boolean operations = true;
+
+	private final boolean containerDependencies = true;
+	private final boolean componentDependencies = true;
+	private final boolean operationDependencies = true;
+
+	public Graph create(final SoftwareSystem softwareSystem) {
+
+		Graph graph = new GraphImpl();
+
+		addContainers(graph, softwareSystem.getContainers());
+
+		return graph;
+	}
+
+	private void addContainers(final Graph graph, final Collection<Container> containers) {
+		for (Container container : containers) {
+			if (this.containers) {
+				Vertex vertex = graph.addVertex(container.getIdentifier());
+				vertex.setProperty("ContainerName", container.getName());
+				addDurationStatistics(vertex, container);
+				addComponents(vertex.addChildGraph(), container.getComponents());
+			} else {
+				addComponents(graph, container.getComponents());
+			}
+		}
+	}
+
+	private void addComponents(final Graph graph, final Collection<Component> components) {
+		for (Component component : components) {
+			if (this.components) {
+				Vertex vertex = graph.addVertex(component.getIdentifier());
+				vertex.setProperty("ComponentName", component.getName());
+				vertex.setProperty("ContainerName", component.getContainer().getName());
+				addDurationStatistics(vertex, component);
+				addOperations(vertex.addChildGraph(), component.getOperations());
+			} else {
+				addOperations(graph, component.getOperations());
+			}
+		}
+	}
+
+	private void addOperations(final Graph graph, final Collection<Operation> operations) {
+		for (Operation operation : operations) {
+			if (this.operations) {
+				Vertex vertex = graph.addVertex(operation.getIdentifier());
+				vertex.setProperty("OperationName", operation.getName());
+				vertex.setProperty("ComponentName", operation.getComponent().getName());
+				vertex.setProperty("ContainerName", operation.getComponent().getContainer().getName());
+				addDurationStatistics(vertex, operation);
+			}
+		}
+	}
+
+	private void addDurationStatistics(final Vertex vertex, final SystemEntity systemEntity) {
+		vertex.setProperty("MaxDuration", systemEntity.getMaxDuration());
+		vertex.setProperty("MinDuration", systemEntity.getMinDuration());
+		vertex.setProperty("MeanDuration", systemEntity.getMeanDuration());
+		vertex.setProperty("MedianDuration", systemEntity.getMedianDuration());
+		vertex.setProperty("TotalDuration", systemEntity.getTotalDuration());
+	}
+
+}