Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 10902)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 10903)
@@ -129,5 +129,5 @@
 
       // add arcs
-      foreach (var node in GenealogyGraph.Nodes) {
+      foreach (var node in GenealogyGraph.Vertices) {
         if (!node.InArcs.Any()) continue;
         var visualNode = GetMappedNode(node);
@@ -246,5 +246,5 @@
       Chart.UpdateEnabled = false;
       ClearPrimitives();
-      var arcs = GenealogyGraph.Nodes.SelectMany(n => n.InArcs).ToList();
+      var arcs = GenealogyGraph.Vertices.SelectMany(n => n.InArcs).ToList();
       foreach (var arc in arcs) { arc.Weight = 1.0; } // reset weights
       var rank = GenealogyGraph.Ranks.Keys.Max();
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/DirectedGraph.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/DirectedGraph.cs	(revision 10902)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/DirectedGraph.cs	(revision 10903)
@@ -35,7 +35,7 @@
 
     [Storable]
-    private readonly List<IVertex> nodes; // for performance reasons, maybe this should be a linked list (fast remove)
-    public IEnumerable<IVertex> Nodes {
-      get { return nodes; }
+    protected readonly List<IVertex> vertices; // for performance reasons, maybe this should be a linked list (fast remove)
+    public IEnumerable<IVertex> Vertices {
+      get { return vertices; }
     }
 
@@ -46,4 +46,10 @@
     private readonly Dictionary<object, IVertex> contentMap;
 
+    [Storable]
+    protected readonly List<IArc> arcs;
+    public IEnumerable<IArc> Arcs {
+      get { return arcs; }
+    }
+
     [StorableConstructor]
     protected DirectedGraph(bool serializing)
@@ -51,6 +57,20 @@
     }
 
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      foreach (var arc in arcs) {
+        arc.Source.AddForwardArc(arc);
+        arc.Target.AddReverseArc(arc);
+      }
+
+      foreach (var vertex in vertices) {
+        vertex.PreContentChanged += Vertex_PreContentChanged;
+        vertex.PostContentChanged += Vertex_PostContentChanged;
+      }
+    }
+
     public DirectedGraph() {
-      nodes = new List<IVertex>();
+      vertices = new List<IVertex>();
+      arcs = new List<IArc>();
       contentMap = new Dictionary<object, IVertex>();
       idMap = new Dictionary<string, IVertex>();
@@ -59,5 +79,6 @@
     protected DirectedGraph(DirectedGraph original, Cloner cloner)
       : base(original, cloner) {
-      nodes = new List<IVertex>(original.Nodes);
+      vertices = new List<IVertex>(original.vertices);
+      arcs = new List<IArc>(original.arcs);
       contentMap = new Dictionary<object, IVertex>(original.contentMap);
       idMap = new Dictionary<string, IVertex>(original.idMap);
@@ -69,5 +90,5 @@
 
     public bool Contains(IVertex t) {
-      return nodes.Contains(t);
+      return vertices.Contains(t);
     }
 
@@ -89,13 +110,13 @@
 
     public virtual bool Any(Func<IVertex, bool> predicate) {
-      return nodes.Any(predicate);
+      return vertices.Any(predicate);
     }
 
     public virtual bool IsEmpty {
-      get { return !nodes.Any(); }
+      get { return !vertices.Any(); }
     }
 
     public virtual void Clear() {
-      nodes.Clear();
+      vertices.Clear();
       contentMap.Clear();
       idMap.Clear();
@@ -110,5 +131,5 @@
       }
       idMap.Add(vertex.Id, vertex);
-      nodes.Add(vertex);
+      vertices.Add(vertex);
 
       vertex.PreContentChanged += Vertex_PreContentChanged;
@@ -119,6 +140,14 @@
       contentMap.Remove(vertex.Content);
       idMap.Remove(vertex.Id);
-      nodes.Remove(vertex);
+      vertices.Remove(vertex);
 
+      // remove connections to/from the removed vertex
+      foreach (var arc in vertex.InArcs) {
+        arc.Source.OutArcs = arc.Source.OutArcs.Where(x => x.Target != vertex);
+      }
+      foreach (var arc in vertex.OutArcs) {
+        arc.Target.InArcs = arc.Target.InArcs.Where(x => x.Source != vertex);
+      }
+      // de-register event handlers
       vertex.PreContentChanged -= Vertex_PreContentChanged;
       vertex.PostContentChanged -= Vertex_PostContentChanged;
@@ -129,4 +158,5 @@
       source.AddForwardArc(arc);
       target.AddReverseArc(arc);
+      arcs.Add(arc);
       return arc;
     }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Interfaces/IDirectedGraph.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Interfaces/IDirectedGraph.cs	(revision 10902)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Interfaces/IDirectedGraph.cs	(revision 10903)
@@ -32,5 +32,5 @@
     IArc AddArc(IVertex source, IVertex target);
     void RemoveVertex(IVertex vertex);
-    IEnumerable<IVertex> Nodes { get; }
+    IEnumerable<IVertex> Vertices { get; }
     bool Contains(object content);
     IVertex GetVertex(string id);
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Vertex.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Vertex.cs	(revision 10902)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Vertex.cs	(revision 10903)
@@ -70,5 +70,4 @@
     }
 
-    [Storable]
     private List<IArc> inArcs;
     public IEnumerable<IArc> InArcs {
@@ -77,5 +76,4 @@
     }
 
-    [Storable]
     private List<IArc> outArcs;
     public IEnumerable<IArc> OutArcs {
@@ -111,5 +109,5 @@
 
     [StorableHook(HookType.AfterDeserialization)]
-    protected void AfterDeserialization() {
+    private void AfterDeserialization() {
       if (Id == null) {
         id = Guid.NewGuid().ToString();
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs	(revision 10902)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs	(revision 10903)
@@ -37,6 +37,6 @@
       set { ranks = value; }
     }
-    public new IEnumerable<IGenealogyGraphNode> Nodes {
-      get { return from n in base.Nodes select (IGenealogyGraphNode)n; }
+    public new IEnumerable<IGenealogyGraphNode> Vertices {
+      get { return from n in base.Vertices select (IGenealogyGraphNode)n; }
     }
 
@@ -58,4 +58,5 @@
       source.AddForwardArc(arc);
       target.AddReverseArc(arc);
+      arcs.Add(arc);
       return arc;
     }
@@ -97,6 +98,6 @@
       set { ranks = value; }
     }
-    public new IEnumerable<IGenealogyGraphNode<T>> Nodes {
-      get { return from n in base.Nodes select (IGenealogyGraphNode<T>)n; }
+    public new IEnumerable<IGenealogyGraphNode<T>> Vertices {
+      get { return from n in base.Vertices select (IGenealogyGraphNode<T>)n; }
     }
     // contructors
@@ -132,8 +133,9 @@
       source.AddForwardArc(arc);
       target.AddReverseArc(arc);
+      arcs.Add(arc);
       return arc;
     }
-    IEnumerable<IGenealogyGraphNode> IGenealogyGraph.Nodes {
-      get { return Nodes; }
+    IEnumerable<IGenealogyGraphNode> IGenealogyGraph.Vertices {
+      get { return Vertices; }
     }
     public event EventHandler GraphUpdated;
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphArc.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphArc.cs	(revision 10902)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphArc.cs	(revision 10903)
@@ -31,11 +31,5 @@
     protected GenealogyGraphArc(bool deserializing) : base(deserializing) { }
     protected GenealogyGraphArc(GenealogyGraphArc original, Cloner cloner)
-      : base(original, cloner) {
-      this.Target = original.Target;
-      this.Source = original.Source;
-      this.Label = original.Label;
-      this.Weight = original.Weight;
-      this.Data = original.Data;
-    }
+      : base(original, cloner) { }
 
     protected GenealogyGraphArc() { }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/Interfaces/IGenealogyGraph.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/Interfaces/IGenealogyGraph.cs	(revision 10902)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/Interfaces/IGenealogyGraph.cs	(revision 10903)
@@ -26,9 +26,9 @@
   public interface IGenealogyGraph : IDirectedGraph {
     Dictionary<double, List<IGenealogyGraphNode>> Ranks { get; }
-    new IEnumerable<IGenealogyGraphNode> Nodes { get; }
+    new IEnumerable<IGenealogyGraphNode> Vertices { get; }
   }
 
   public interface IGenealogyGraph<T> : IGenealogyGraph where T : class, IItem {
-    new IEnumerable<IGenealogyGraphNode<T>> Nodes { get; }
+    new IEnumerable<IGenealogyGraphNode<T>> Vertices { get; }
   }
 }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymboldDataAnalysisGenealogyView.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymboldDataAnalysisGenealogyView.cs	(revision 10902)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymboldDataAnalysisGenealogyView.cs	(revision 10903)
@@ -106,5 +106,5 @@
         // perform matching like it was done before
         // currently there is no possibility to specify the subtree matching criteria
-        var trees = Content.Nodes.Select(x => x.Content);
+        var trees = Content.Vertices.Select(x => x.Content);
         var matchingTrees = trees.Where(x => x.Root.ContainsSubtree(subtree, comparer));
 
