diff --git a/src/main/java/kieker/analysis/dev/DependencyCreator.java b/src/main/java/kieker/analysis/dev/DependencyCreator.java
index 419f43406a13e64988c0b3a12d711ec455f15037..d53d9c3ce5613a2e58bb3143cc764370f29fb7ca 100644
--- a/src/main/java/kieker/analysis/dev/DependencyCreator.java
+++ b/src/main/java/kieker/analysis/dev/DependencyCreator.java
@@ -1,26 +1,40 @@
 package kieker.analysis.dev;
 
 import kieker.analysis.domain.AggregatedOperationCall;
-import kieker.analysis.domain.OperationsDependency;
+import kieker.analysis.domain.systemdependency.SoftwareSystem;
 import kieker.analysis.trace.traversal.OperationCallVisitor;
 
 public class DependencyCreator extends OperationCallVisitor<AggregatedOperationCall> {
 
-	private final OperationsDependency operationsDependency;
+	private final SoftwareSystem softwareSystem;
 
-	public DependencyCreator(final OperationsDependency operationsDependency) {
-		this.operationsDependency = operationsDependency;
+	public DependencyCreator(final SoftwareSystem softwareSystem) {
+		this.softwareSystem = softwareSystem;
 	}
 
 	@Override
 	public void visit(final AggregatedOperationCall operationCall) {
 
-		operationsDependency.addCall(operationCall);
+		// softwareSystem.getContainers().contains()
 
+		// ist container in software system?
+		// softwareSystem.getContainers().add(e)
+		// wenn nein -> hinzufügen
+		// getContainer
+
+		// ist component in container?
+		// wenn nein -> hinzufügen
+		// getComponent
+
+		// ist operation in component?
+		// wenn nein -> hinzufügen
+		// getOperation
+
+		// Jetzt die Dependencies eintragen
 	}
 
-	public OperationsDependency getOperationsDependency() {
-		return operationsDependency;
+	public SoftwareSystem getSoftwareSystem() {
+		return softwareSystem;
 	}
 
 }
diff --git a/src/main/java/kieker/analysis/domain/systemdependency/Component.java b/src/main/java/kieker/analysis/domain/systemdependency/Component.java
index f69346e526d6ca1e1a2073a2767dbbbcb8128f21..2820a411cffc382d329c6bb6580468d0cce7d7df 100644
--- a/src/main/java/kieker/analysis/domain/systemdependency/Component.java
+++ b/src/main/java/kieker/analysis/domain/systemdependency/Component.java
@@ -1,30 +1,22 @@
 package kieker.analysis.domain.systemdependency;
 
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
 public class Component extends SystemEntity {
 
 	private final Container container;
-	private final Map<String, Operation> operations = new HashMap<>();
+	private final SystemEntitySet<Operation> operations = new SystemEntitySet<>();
 
 	public Component(final String name, final Container container) {
 		super(name, container.getIdentifier() + ',' + name);
 		this.container = container;
-		container.addComponent(this);
+		container.getComponents().add(this);
 	}
 
 	public Container getContainer() {
 		return container;
 	}
 
-	public Collection<Operation> getOperations() {
-		return operations.values();
-	}
-
-	protected void addOperation(final Operation operation) {
-		this.operations.put(operation.getName(), operation);
+	public SystemEntitySet<Operation> getOperations() {
+		return operations;
 	}
 
 }
diff --git a/src/main/java/kieker/analysis/domain/systemdependency/Container.java b/src/main/java/kieker/analysis/domain/systemdependency/Container.java
index 65f2a62efbac2e62ddb0d0b4cde8c52b99a5c3cd..152845e95c518635f589c79a70ef28f6af542f35 100644
--- a/src/main/java/kieker/analysis/domain/systemdependency/Container.java
+++ b/src/main/java/kieker/analysis/domain/systemdependency/Container.java
@@ -1,23 +1,15 @@
 package kieker.analysis.domain.systemdependency;
 
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
 public class Container extends SystemEntity {
 
-	private final Map<String, Component> components = new HashMap<>();
+	private final SystemEntitySet<Component> components = new SystemEntitySet<>();
 
 	public Container(final String name) {
 		super(name, name);
 	}
 
-	public Collection<Component> getComponents() {
-		return components.values();
-	}
-
-	protected void addComponent(final Component component) {
-		this.components.put(component.getName(), component);
+	public SystemEntitySet<Component> getComponents() {
+		return components;
 	}
 
 }
diff --git a/src/main/java/kieker/analysis/domain/systemdependency/Operation.java b/src/main/java/kieker/analysis/domain/systemdependency/Operation.java
index 5444c14d2371ecf225485cfb2d795250f8a8063f..7e36ddbb0ce1afc8a308ee6946edcc6344287ae6 100644
--- a/src/main/java/kieker/analysis/domain/systemdependency/Operation.java
+++ b/src/main/java/kieker/analysis/domain/systemdependency/Operation.java
@@ -7,7 +7,7 @@ public class Operation extends SystemEntity {
 	public Operation(final String name, final Component component) {
 		super(name, component.getIdentifier() + ',' + name);
 		this.component = component;
-		component.addOperation(this);
+		component.getOperations().add(this);
 	}
 
 	public Component getComponent() {
diff --git a/src/main/java/kieker/analysis/domain/systemdependency/SoftwareSystem.java b/src/main/java/kieker/analysis/domain/systemdependency/SoftwareSystem.java
index de8f0552ebc74ca6247eed87556ab9ca658ea97a..824a3671257da8b4625e0a15975d3f501f9b9917 100644
--- a/src/main/java/kieker/analysis/domain/systemdependency/SoftwareSystem.java
+++ b/src/main/java/kieker/analysis/domain/systemdependency/SoftwareSystem.java
@@ -2,12 +2,11 @@ package kieker.analysis.domain.systemdependency;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.Set;
 
 public class SoftwareSystem {
 
-	private final Map<String, Container> containers = new HashMap<>();
+	private final SystemEntitySet<Container> containers = new SystemEntitySet<>();
 
 	private Collection<Dependency<Container>> containerDependencies = new ArrayList<>();
 	private Collection<Dependency<Component>> componentDependencies = new ArrayList<>();
@@ -15,12 +14,8 @@ public class SoftwareSystem {
 
 	public SoftwareSystem() {}
 
-	public Collection<Container> getContainers() {
-		return containers.values();
-	}
-
-	public void addContainer(final Container container) {
-		containers.put(container.getName(), container);
+	public Set<Container> getContainers() {
+		return containers;
 	}
 
 	public Collection<Dependency<Container>> getContainerDependencies() {
diff --git a/src/main/java/kieker/analysis/domain/systemdependency/SystemEntitySet.java b/src/main/java/kieker/analysis/domain/systemdependency/SystemEntitySet.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ffbcdcb144639d9a1f91ca25ee15cfdc7746b3c
--- /dev/null
+++ b/src/main/java/kieker/analysis/domain/systemdependency/SystemEntitySet.java
@@ -0,0 +1,111 @@
+package kieker.analysis.domain.systemdependency;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+public class SystemEntitySet<E extends SystemEntity> implements Set<E> {
+
+	private final Map<String, E> entries;
+
+	public SystemEntitySet() {
+		this.entries = new HashMap<>();
+	}
+
+	@Override
+	public int size() {
+		return entries.size();
+	}
+
+	@Override
+	public boolean isEmpty() {
+		return entries.isEmpty();
+	}
+
+	@Override
+	public boolean contains(final Object o) {
+		return this.entries.containsValue(o);
+	}
+
+	@Override
+	public Iterator<E> iterator() {
+		return this.entries.values().iterator();
+	}
+
+	@Override
+	public Object[] toArray() {
+		return this.entries.values().toArray();
+	}
+
+	@Override
+	public <T> T[] toArray(final T[] a) {
+		return this.entries.values().toArray(a);
+	}
+
+	@Override
+	public boolean add(final E e) {
+		if (this.entries.containsKey(e)) {
+			return false;
+		}
+		this.entries.put(e.getName(), e);
+		return true;
+	}
+
+	@Override
+	public boolean remove(final Object o) {
+		return this.entries.values().remove(o);
+	}
+
+	@Override
+	public boolean containsAll(final Collection<?> c) {
+		return this.entries.values().containsAll(c);
+	}
+
+	@Override
+	public boolean addAll(final Collection<? extends E> c) {
+		return c.stream().map(e -> add(e)).reduce(false, (r, s) -> r || s);
+	}
+
+	@Override
+	public boolean removeAll(final Collection<?> c) {
+		return this.entries.values().removeAll(c);
+	}
+
+	@Override
+	public boolean retainAll(final Collection<?> c) {
+		return this.entries.values().retainAll(c);
+	}
+
+	@Override
+	public void clear() {
+		this.entries.clear();
+
+	}
+
+	public E getByName(final String name) {
+		return this.entries.get(name);
+	}
+
+	public boolean containsByName(final Object o) {
+		return this.entries.containsKey(o);
+	}
+
+	public boolean removeByName(final Object o) {
+		return this.entries.keySet().remove(o);
+	}
+
+	public boolean containsAllByName(final Collection<?> c) {
+		return this.entries.keySet().containsAll(c);
+	}
+
+	public boolean removeAllByName(final Collection<?> c) {
+		return this.entries.keySet().removeAll(c);
+	}
+
+	public boolean retainAllByName(final Collection<?> c) {
+		return this.entries.keySet().retainAll(c);
+	}
+
+}