diff --git a/src/main/java/kieker/analysis/graph/GraphTester.java b/src/main/java/kieker/analysis/graph/GraphTester.java
new file mode 100644
index 0000000000000000000000000000000000000000..577ec64016841692bc20e30a8e2762d23edfe678
--- /dev/null
+++ b/src/main/java/kieker/analysis/graph/GraphTester.java
@@ -0,0 +1,38 @@
+package kieker.analysis.graph;
+
+import com.tinkerpop.blueprints.Graph;
+import com.tinkerpop.blueprints.impls.tg.TinkerGraph;
+
+public class GraphTester {
+
+	public static void main(final String[] args) {
+
+		Graph graph1 = new TinkerGraph();
+		Graph graph2 = new TinkerGraph();
+
+		com.tinkerpop.blueprints.Vertex g1n1 = graph1.addVertex("g1::n1");
+
+		com.tinkerpop.blueprints.Vertex g2n1 = graph2.addVertex("g2::n1");
+
+		com.tinkerpop.blueprints.Edge edge = g1n1.addEdge("...", g2n1);
+
+		System.out.println(graph1);
+		System.out.println(graph2);
+
+		/*
+		 * Graph graph = new GraphImpl();
+		 *
+		 * Vertex node1 = graph.addVertex("n1");
+		 *
+		 * Vertex node2 = graph.addVertex("n2");
+		 *
+		 * Graph subgraph = node1.addSubgraph();
+		 *
+		 * Vertex node11 = subgraph.addVertex("n1::n1");
+		 *
+		 * node2.addEdgeTo(node11);*
+		 *
+		 */
+	}
+
+}
diff --git a/src/main/java/kieker/analysis/graph/Vertex.java b/src/main/java/kieker/analysis/graph/Vertex.java
index 2581b37b93b5353bc78e956b62969de5d983a316..7953729e577442ab20831637696d1d99a89e63d0 100644
--- a/src/main/java/kieker/analysis/graph/Vertex.java
+++ b/src/main/java/kieker/analysis/graph/Vertex.java
@@ -6,10 +6,14 @@ public interface Vertex extends Element {
 
 	public Graph getSubgraph();
 
+	public Graph addSubgraph();
+
 	// public Iterable<Edge> getEdges(Direction direction, String... labels);
 
 	// public Iterable<Vertex> getVertices(Direction direction, String... labels);
 
-	// public Edge addEdge(String label, Vertex inVertex);
+	public Edge addEdge(Vertex inVertex);
+
+	public Edge addEdge(Object id, Vertex inVertex);
 
 }
diff --git a/src/main/java/kieker/analysis/graph/impl/EdgeImpl.java b/src/main/java/kieker/analysis/graph/impl/EdgeImpl.java
index 126eec949cc4f4b900cc3642d693c1cd05816162..05cc2949555802a70be9cf7db7827359cc3cc370 100644
--- a/src/main/java/kieker/analysis/graph/impl/EdgeImpl.java
+++ b/src/main/java/kieker/analysis/graph/impl/EdgeImpl.java
@@ -1,9 +1,24 @@
 package kieker.analysis.graph.impl;
 
 import kieker.analysis.graph.Edge;
+import kieker.analysis.graph.Vertex;
 
 class EdgeImpl extends ElementImpl implements Edge {
 
+	private final Vertex outVertex;
+	private final Vertex inVertex;
+
+	protected EdgeImpl(final String id, final Vertex outVertex, final Vertex inVertex, final GraphImpl graph) {
+		super(id, graph);
+		this.outVertex = outVertex;
+		this.inVertex = inVertex;
+	}
+
+	@Override
+	public void remove() {
+		this.graph.removeEdge(this);
+	}
+
 	// public Vertex getVertex(Direction direction) throws IllegalArgumentException;
 
 }
diff --git a/src/main/java/kieker/analysis/graph/impl/ElementImpl.java b/src/main/java/kieker/analysis/graph/impl/ElementImpl.java
index 5f23f4cc54be5db30c35f45bc34800101f43f37a..e1c2fbd6b26cecf3508fb5bfd22fc40f296e9750 100644
--- a/src/main/java/kieker/analysis/graph/impl/ElementImpl.java
+++ b/src/main/java/kieker/analysis/graph/impl/ElementImpl.java
@@ -41,10 +41,7 @@ abstract class ElementImpl implements Element {
 	}
 
 	@Override
-	public void remove() {
-		// TODO Auto-generated method stub
-
-	}
+	abstract public void remove();
 
 	@Override
 	public Object getId() {
diff --git a/src/main/java/kieker/analysis/graph/impl/GraphImpl.java b/src/main/java/kieker/analysis/graph/impl/GraphImpl.java
index faa216dc6f484db63a189d37ddb2476c01e0dee1..14c70dbb9610930020465f6c49addd083005f819 100644
--- a/src/main/java/kieker/analysis/graph/impl/GraphImpl.java
+++ b/src/main/java/kieker/analysis/graph/impl/GraphImpl.java
@@ -33,7 +33,7 @@ public class GraphImpl implements Graph {
 
 		Vertex vertex = new VertexImpl(idString, this);
 		vertices.put(vertex.getId().toString(), vertex);
-		return null;
+		return vertex;
 	}
 
 	@Override
@@ -72,7 +72,7 @@ public class GraphImpl implements Graph {
 			}
 		}
 
-		Edge edge = EdgeImpl(id, outVertex, inVertex, this);
+		Edge edge = new EdgeImpl(idString, outVertex, inVertex, this);
 		edges.put(edge.getId().toString(), edge);
 
 		// TODO Add Edge to vertices
diff --git a/src/main/java/kieker/analysis/graph/impl/VertexImpl.java b/src/main/java/kieker/analysis/graph/impl/VertexImpl.java
index 44f3e069c0bc98fb20e687e205b3b074854fdf2b..0135d1b539ee276da09e28b2d4b43ef7e992f331 100644
--- a/src/main/java/kieker/analysis/graph/impl/VertexImpl.java
+++ b/src/main/java/kieker/analysis/graph/impl/VertexImpl.java
@@ -1,10 +1,15 @@
 package kieker.analysis.graph.impl;
 
+import kieker.analysis.graph.Edge;
 import kieker.analysis.graph.Graph;
 import kieker.analysis.graph.Vertex;
 
 class VertexImpl extends ElementImpl implements Vertex {
 
+	protected VertexImpl(final String id, final GraphImpl graph) {
+		super(id, graph);
+	}
+
 	@Override
 	public Boolean hasSubgraph() {
 		// TODO Auto-generated method stub
@@ -17,4 +22,24 @@ class VertexImpl extends ElementImpl implements Vertex {
 		return null;
 	}
 
+	@Override
+	public Graph addSubgraph() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public Edge addEdge(final Vertex inVertex) {
+		return addEdge(null, inVertex);
+	}
+
+	@Override
+	public Edge addEdge(final Object id, final Vertex inVertex) {
+		return this.graph.addEdge(id, this, inVertex);
+	}
+
+	@Override
+	public void remove() {
+		graph.removeVertex(this);
+	}
 }