diff --git a/src/main/java/kieker/analysis/util/DotBuilder.java b/src/main/java/kieker/analysis/util/DotBuilder.java
index c4c50f1ee2c03fdff18efab9d2d72fd969c8ae37..e277d2a8046e3a0055790bd599eddd6cca70eda4 100644
--- a/src/main/java/kieker/analysis/util/DotBuilder.java
+++ b/src/main/java/kieker/analysis/util/DotBuilder.java
@@ -2,9 +2,16 @@ package kieker.analysis.util;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import com.google.common.base.Joiner;
 
+/**
+ * Simple class for building and representing dot graph files.
+ *
+ * @author Sören Henning
+ *
+ */
 public class DotBuilder {
 
 	private final String start;
@@ -15,16 +22,12 @@ public class DotBuilder {
 	private Map<String, String> defaultEdgeProperties;
 	private Map<String, String> defaultProperties;
 
-	/*
-	 * TODO: Use default properties
-	 */
-
 	public DotBuilder() {
 		this("G");
 	}
 
 	public DotBuilder(final String name) {
-		start = "digraph " + name + " {";
+		start = "digraph " + name + " {\n";
 	}
 
 	public DotBuilder(final String name, final Map<String, String> defaultNodeProperties, final Map<String, String> defaultEdgeProperties) {
@@ -55,6 +58,11 @@ public class DotBuilder {
 		return start + body.toString() + end;
 	}
 
+	@Override
+	public String toString() {
+		return get();
+	}
+
 	public void addNode(final String id) {
 		addNode(id, new HashMap<>());
 	}
@@ -66,7 +74,7 @@ public class DotBuilder {
 	}
 
 	public void addNode(final String id, final Map<String, String> properties) {
-		addElement('"' + id + '"', properties);
+		addElement('"' + id + '"', extendNodeProperties(properties));
 	}
 
 	public void addEdge(final String from, final String to) {
@@ -80,17 +88,42 @@ public class DotBuilder {
 	}
 
 	public void addEdge(final String from, final String to, final Map<String, String> properties) {
-		addElement('"' + from + '"' + " -> " + '"' + to + '"', properties);
+		addElement('"' + from + '"' + " -> " + '"' + to + '"', extendEdgeProperties(properties));
 	}
 
 	private void addElement(final String element, final Map<String, String> properties) {
 		body.append(element);
 		if (properties != null && !properties.isEmpty()) {
-			body.append('[');
-			Joiner.on(", ").withKeyValueSeparator("=").appendTo(body, properties);
-			body.append(']');
+			body.append(" [");
+			Joiner.on("\", ").withKeyValueSeparator("=\"").appendTo(body, properties);
+			body.append("\"]");
 		}
 		body.append('\n');
 	}
 
+	private Map<String, String> extendNodeProperties(final Map<String, String> properties) {
+		return extendElementProperties(properties, defaultNodeProperties);
+	}
+
+	private Map<String, String> extendEdgeProperties(final Map<String, String> properties) {
+		return extendElementProperties(properties, defaultEdgeProperties);
+	}
+
+	private Map<String, String> extendElementProperties(final Map<String, String> properties, final Map<String, String> defaultElementProperties) {
+
+		if (defaultElementProperties != null) {
+			for (Entry<String, String> property : defaultElementProperties.entrySet()) {
+				properties.putIfAbsent(property.getKey(), property.getValue());
+			}
+		}
+
+		if (defaultProperties != null) {
+			for (Entry<String, String> property : defaultProperties.entrySet()) {
+				properties.putIfAbsent(property.getKey(), property.getValue());
+			}
+		}
+
+		return properties;
+	}
+
 }