diff --git a/src/main/java/kieker/analysis/TraceAnalysisConfiguration.java b/src/main/java/kieker/analysis/TraceAnalysisConfiguration.java
index 926355a1c5d11ca73892264827dc6f2fd7c4afc9..876161cae8d477fb4cd3d533f0a0838fe480ae1f 100644
--- a/src/main/java/kieker/analysis/TraceAnalysisConfiguration.java
+++ b/src/main/java/kieker/analysis/TraceAnalysisConfiguration.java
@@ -5,6 +5,7 @@ package kieker.analysis;
 
 import java.io.File;
 
+import kieker.analysis.dev.OperationsStatisticsDecoratorStage;
 import kieker.analysis.dev.SoftwareSystemCreatorStage;
 import kieker.analysis.domain.AggregatedTrace;
 import kieker.analysis.domain.Trace;
@@ -89,20 +90,21 @@ public class TraceAnalysisConfiguration extends Configuration {
 		super.connectPorts(graphDistributor2.getNewOutputPort(), dotTraceGraphFileWriterStage2.getInputPort());
 
 		SoftwareSystemCreatorStage softwareSystemCreator = new SoftwareSystemCreatorStage();
+		OperationsStatisticsDecoratorStage operationsStatisticsDecorator = new OperationsStatisticsDecoratorStage();
+		Distributor<SoftwareSystem> softwareSystemDistributor = new Distributor<>(new CopyByReferenceStrategy());
+		// ComponentStatisticsDecoratorStage componentsStatisticsDecorator = new ComponentStatisticsDecoratorStage();
+		// ContainerStatisticsDecoratorStage containersStatisticsDecorator = new ContainerStatisticsDecoratorStage();
 
 		super.connectPorts(aggregatedTraceDistributor.getNewOutputPort(), softwareSystemCreator.getInputPort());
-		super.connectPorts(softwareSystemCreator.getOutputPort(), new AbstractConsumerStage<SoftwareSystem>() {
+		super.connectPorts(softwareSystemCreator.getOutputPort(), operationsStatisticsDecorator.getInputPort());
+		super.connectPorts(operationsStatisticsDecorator.getOutputPort(), softwareSystemDistributor.getInputPort());
+		super.connectPorts(softwareSystemDistributor.getNewOutputPort(), new AbstractConsumerStage<SoftwareSystem>() {
 			@Override
 			protected void execute(final SoftwareSystem softwareSystem) {
 				System.out.println(softwareSystem);
 			}
 		}.getInputPort());
 
-		// DependencyCreatorStage dependencyCreatorStage = new DependencyCreatorStage();
-		// DependencyStatisticsDecoratorStage dependencyStatisticsDecoratorStage = new DependencyStatisticsDecoratorStage();
-		// super.connectPorts(aggregatedTraceDistributor.getNewOutputPort(), dependencyCreatorStage.getInputPort());
-		// super.connectPorts(dependencyCreatorStage.getOutputPort(), dependencyStatisticsDecoratorStage.getInputPort());
-
 		/*
 		 *
 		 *
diff --git a/src/main/java/kieker/analysis/dev/ComponentStatisticsDecoratorStage.java b/src/main/java/kieker/analysis/dev/ComponentStatisticsDecoratorStage.java
new file mode 100644
index 0000000000000000000000000000000000000000..3883ae5d7eedf67af901f54d5a0b1a4c621bd7b4
--- /dev/null
+++ b/src/main/java/kieker/analysis/dev/ComponentStatisticsDecoratorStage.java
@@ -0,0 +1,45 @@
+package kieker.analysis.dev;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+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.traceanalysisutil.Statistics;
+import kieker.analysis.traceanalysisutil.StatisticsUtility;
+
+import teetime.stage.basic.AbstractTransformation;
+
+public class ComponentStatisticsDecoratorStage extends AbstractTransformation<SoftwareSystem, SoftwareSystem> {
+
+	@Override
+	protected void execute(final SoftwareSystem softwareSystem) {
+
+		for (Container container : softwareSystem.getContainers()) {
+			for (Component component : container.getComponents()) {
+				// TODO How to handle Statistics?
+				// All durations of all OperationCalls
+
+				List<Long> durations = new ArrayList<>();
+
+				for (Operation operation : component.getOperations()) {
+					List<Long> operationsDurations = operation.getOperationCalls().stream().map(c -> c.getDuration()).collect(Collectors.toList());
+					durations.addAll(operationsDurations);
+				}
+
+				final Statistics statistics = StatisticsUtility.calculateStatistics(durations);
+				component.setTotalDuration(statistics.getTotalDuration());
+				component.setMaxDuration(statistics.getMaxDuration());
+				component.setMinDuration(statistics.getMinDuration());
+				component.setMeanDuration(statistics.getMeanDuration());
+				component.setMedianDuration(statistics.getMedianDuration());
+
+			}
+		}
+
+	}
+
+}
diff --git a/src/main/java/kieker/analysis/dev/ContainerStatisticsDecoratorStage.java b/src/main/java/kieker/analysis/dev/ContainerStatisticsDecoratorStage.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ef03e80945c0390935461b93df45c5cf172ad63
--- /dev/null
+++ b/src/main/java/kieker/analysis/dev/ContainerStatisticsDecoratorStage.java
@@ -0,0 +1,45 @@
+package kieker.analysis.dev;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+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.traceanalysisutil.Statistics;
+import kieker.analysis.traceanalysisutil.StatisticsUtility;
+
+import teetime.stage.basic.AbstractTransformation;
+
+public class ContainerStatisticsDecoratorStage extends AbstractTransformation<SoftwareSystem, SoftwareSystem> {
+
+	@Override
+	protected void execute(final SoftwareSystem softwareSystem) {
+
+		for (Container container : softwareSystem.getContainers()) {
+
+			// TODO How to handle Statistics?
+			// All durations of all OperationCalls
+
+			List<Long> durations = new ArrayList<>();
+			for (Component component : container.getComponents()) {
+				for (Operation operation : component.getOperations()) {
+					List<Long> operationsDurations = operation.getOperationCalls().stream().map(c -> c.getDuration()).collect(Collectors.toList());
+					durations.addAll(operationsDurations);
+				}
+			}
+
+			final Statistics statistics = StatisticsUtility.calculateStatistics(durations);
+			container.setTotalDuration(statistics.getTotalDuration());
+			container.setMaxDuration(statistics.getMaxDuration());
+			container.setMinDuration(statistics.getMinDuration());
+			container.setMeanDuration(statistics.getMeanDuration());
+			container.setMedianDuration(statistics.getMedianDuration());
+
+		}
+
+	}
+
+}
diff --git a/src/main/java/kieker/analysis/dev/DependencyStatisticsDecorator.java b/src/main/java/kieker/analysis/dev/DependencyStatisticsDecorator.java
index a91a378a06ecb3865f7da4426569964f44bde92e..27953778d115f8d68db3f8924e67abcd2d4163d7 100644
--- a/src/main/java/kieker/analysis/dev/DependencyStatisticsDecorator.java
+++ b/src/main/java/kieker/analysis/dev/DependencyStatisticsDecorator.java
@@ -13,6 +13,7 @@ import kieker.analysis.traceanalysisutil.StatisticsUtility;
  *
  */
 // TODO Maybe make static
+@Deprecated
 public class DependencyStatisticsDecorator {
 
 	public void decorate(final OperationsDependency operationsDependency) {
diff --git a/src/main/java/kieker/analysis/dev/DependencyStatisticsDecoratorStage.java b/src/main/java/kieker/analysis/dev/DependencyStatisticsDecoratorStage.java
index 75fb19d0c45a48d9b4f60e2d4357c7e20371b679..50be41422707affd7b3c0ccae131e9ff5473376a 100644
--- a/src/main/java/kieker/analysis/dev/DependencyStatisticsDecoratorStage.java
+++ b/src/main/java/kieker/analysis/dev/DependencyStatisticsDecoratorStage.java
@@ -8,6 +8,7 @@ import teetime.stage.basic.AbstractTransformation;
  * @author Sören Henning
  *
  */
+@Deprecated
 public class DependencyStatisticsDecoratorStage extends AbstractTransformation<OperationsDependency, OperationsDependency> {
 
 	private final DependencyStatisticsDecorator statisticsDecorator = new DependencyStatisticsDecorator();
diff --git a/src/main/java/kieker/analysis/dev/OperationsDependencyGraphCreatorStage.java b/src/main/java/kieker/analysis/dev/OperationsDependencyGraphCreatorStage.java
new file mode 100644
index 0000000000000000000000000000000000000000..31351940d0dd3d1c11c172a6192118632b567dc1
--- /dev/null
+++ b/src/main/java/kieker/analysis/dev/OperationsDependencyGraphCreatorStage.java
@@ -0,0 +1,72 @@
+package kieker.analysis.dev;
+
+import kieker.analysis.domain.systemdependency.Component;
+import kieker.analysis.domain.systemdependency.Container;
+import kieker.analysis.domain.systemdependency.Dependency;
+import kieker.analysis.domain.systemdependency.Operation;
+import kieker.analysis.domain.systemdependency.SoftwareSystem;
+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;
+
+import teetime.stage.basic.AbstractTransformation;
+
+public class OperationsDependencyGraphCreatorStage extends AbstractTransformation<SoftwareSystem, Graph> {
+
+	@Override
+	protected void execute(final SoftwareSystem softwareSystem) {
+
+		Graph graph = new GraphImpl();
+
+		for (Container container : softwareSystem.getContainers()) {
+
+			Vertex containerVertex = graph.addVertex(container.getIdentifier());
+
+			for (Component component : container.getComponents()) {
+
+				Vertex componentVertex = graph.addVertex(component.getIdentifier());
+
+				for (Operation operation : component.getOperations()) {
+
+					Vertex operationVertex = graph.addVertex(operation.getIdentifier());
+
+				}
+			}
+		}
+
+		for (Dependency<Container> containerDependency : softwareSystem.getContainerDependencies()) {
+
+			Vertex callerVertex = graph.getVertex(containerDependency.getCaller().getIdentifier());
+			Vertex calleeVertex = graph.getVertex(containerDependency.getCaller().getIdentifier());
+
+			Edge dependencyEdge = graph.addEdge(null, callerVertex, calleeVertex);
+			dependencyEdge.setProperty("calls", containerDependency.getCalls());
+			dependencyEdge.setProperty("failuredCalls", containerDependency.getFailuredCalls());
+		}
+
+		for (Dependency<Component> componentDependency : softwareSystem.getComponentDependencies()) {
+
+			Vertex callerVertex = graph.getVertex(componentDependency.getCaller().getIdentifier());
+			Vertex calleeVertex = graph.getVertex(componentDependency.getCaller().getIdentifier());
+
+			Edge dependencyEdge = graph.addEdge(null, callerVertex, calleeVertex);
+			dependencyEdge.setProperty("calls", componentDependency.getCalls());
+			dependencyEdge.setProperty("failuredCalls", componentDependency.getFailuredCalls());
+		}
+
+		for (Dependency<Operation> operationDependency : softwareSystem.getOperationDependencies()) {
+
+			Vertex callerVertex = graph.getVertex(operationDependency.getCaller().getIdentifier());
+			Vertex calleeVertex = graph.getVertex(operationDependency.getCaller().getIdentifier());
+
+			Edge dependencyEdge = graph.addEdge(null, callerVertex, calleeVertex);
+			dependencyEdge.setProperty("calls", operationDependency.getCalls());
+			dependencyEdge.setProperty("failuredCalls", operationDependency.getFailuredCalls());
+		}
+
+		this.outputPort.send(graph);
+
+	}
+
+}
diff --git a/src/main/java/kieker/analysis/dev/OperationsStatisticsDecoratorStage.java b/src/main/java/kieker/analysis/dev/OperationsStatisticsDecoratorStage.java
index 8c69048b6582e14bd330335a9ad82976efd634d4..c2f462179c862a0e4e543f487a73bf36a90cec51 100644
--- a/src/main/java/kieker/analysis/dev/OperationsStatisticsDecoratorStage.java
+++ b/src/main/java/kieker/analysis/dev/OperationsStatisticsDecoratorStage.java
@@ -35,6 +35,7 @@ public class OperationsStatisticsDecoratorStage extends AbstractTransformation<S
 			}
 		}
 
+		this.outputPort.send(softwareSystem);
 	}
 
 }