Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/Plugin.cs.frame
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/Plugin.cs.frame	(revision 10890)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/Plugin.cs.frame	(revision 10897)
@@ -22,5 +22,5 @@
 using HeuristicLab.PluginInfrastructure;
 
-namespace HeuristicLab.EvolutionaryTracking.Views {
+namespace HeuristicLab.EvolutionTracking.Views {
   [Plugin("HeuristicLab.EvolutionTracking.Views", "Provides controls and views for the evolution graph and related structures.", "3.4.2.$WCREV$")]
   [PluginFile("HeuristicLab.EvolutionTracking.Views-3.4.dll", PluginFileType.Assembly)]
@@ -33,5 +33,5 @@
   [PluginDependency("HeuristicLab.EvolutionTracking", "3.4")]
 
-  public class HeuristicLabEvolutionaryTrackingPlugin : PluginBase {
+  public class HeuristicLabEvolutionTrackingPlugin : PluginBase {
   }
 }
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Analyzers/GenealogyAnalyzer.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Analyzers/GenealogyAnalyzer.cs	(revision 10890)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Analyzers/GenealogyAnalyzer.cs	(revision 10897)
@@ -252,5 +252,5 @@
         for (int i = 0; i < population.Count; ++i) {
           var individual = population[i];
-          var vertex = new GenealogyGraphNode<T> { Content = individual, Rank = Generations.Value };
+          var vertex = new GenealogyGraphNode<T>(individual) { Rank = Generations.Value };
           GenealogyGraph.AddVertex(vertex);
           // save the vertex id in the individual scope (so that we can identify graph indices)
@@ -258,13 +258,21 @@
         }
       } else {
-        var elite = population.FirstOrDefault(x => GenealogyGraph.Contains(x));
+        int index = 0;
+        T elite = null;
+        for (int i = 0; i < population.Count; ++i) {
+          if (GenealogyGraph.Contains(population[i])) {
+            elite = population[i];
+            index = i;
+          }
+          break;
+        }
+
         if (elite != null) {
-          var prevVertex = (IGenealogyGraphNode<T>)GenealogyGraph[elite];
+          var prevVertex = (IGenealogyGraphNode<T>)GenealogyGraph.GetVertex(elite);
           prevVertex.IsElite = true; // mark elites in the graph retroactively
 
           var clone = (T)elite.Clone();
 
-          var vertex = new GenealogyGraphNode<T> {
-            Content = prevVertex.Content,
+          var vertex = new GenealogyGraphNode<T>(prevVertex.Content) {
             Rank = Generations.Value,
             Quality = prevVertex.Quality,
@@ -272,11 +280,8 @@
           };
 
-          GenealogyGraph.SetContent(prevVertex, clone);
-          // swap id
-          var id = prevVertex.Id;
-          GenealogyGraph.SetId(prevVertex, vertex.Id);
-
-          // add new vertex to the graph
-          vertex.Id = id;
+          prevVertex.Content = clone;
+
+          ExecutionContext.Scope.SubScopes[index].Variables["Id"].Value = new StringValue(vertex.Id);
+
           GenealogyGraph.AddVertex(vertex);
 
@@ -290,5 +295,5 @@
       // update qualities
       for (int i = 0; i < population.Count; ++i) {
-        var vertex = (IGenealogyGraphNode)GenealogyGraph[population[i]];
+        var vertex = (IGenealogyGraphNode)GenealogyGraph.GetVertex(population[i]);
         vertex.Quality = qualities[i].Value;
       }
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Arc.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Arc.cs	(revision 10890)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Arc.cs	(revision 10897)
@@ -31,18 +31,17 @@
   public class Arc : Item, IArc {
     [Storable]
-    private IVertex source;
-    public IVertex Source { get { return source; } set { source = value; } }
+    public IVertex Source { get; set; }
+
     [Storable]
-    private IVertex target;
-    public IVertex Target { get { return target; } set { target = value; } }
+    public IVertex Target { get; set; }
+
     [Storable]
-    private string label;
-    public string Label { get { return label; } set { label = value; } }
+    public string Label { get; set; }
+
     [Storable]
-    private double weight;
-    public double Weight { get { return weight; } set { weight = value; } }
+    public double Weight { get; set; }
+
     [Storable]
-    private object data;
-    public object Data { get { return data; } set { data = value; } }
+    public object Data { get; set; }
 
     [StorableConstructor]
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/DirectedGraph.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/DirectedGraph.cs	(revision 10890)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/DirectedGraph.cs	(revision 10897)
@@ -45,4 +45,10 @@
     [Storable]
     private readonly Dictionary<object, IVertex> contentMap;
+
+    [StorableConstructor]
+    protected DirectedGraph(bool serializing)
+      : base(serializing) {
+    }
+
     public DirectedGraph() {
       nodes = new List<IVertex>();
@@ -50,8 +56,5 @@
       idMap = new Dictionary<string, IVertex>();
     }
-    [StorableConstructor]
-    protected DirectedGraph(bool serializing)
-      : base(serializing) {
-    }
+
     protected DirectedGraph(DirectedGraph original, Cloner cloner)
       : base(original, cloner) {
@@ -60,7 +63,9 @@
       idMap = new Dictionary<string, IVertex>(original.idMap);
     }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new DirectedGraph(this, cloner);
     }
+
     public bool Contains(IVertex t) {
       return nodes.Contains(t);
@@ -77,24 +82,18 @@
     }
 
-    public IVertex this[object key] {
-      get {
-        IVertex result;
-        contentMap.TryGetValue(key, out result);
-        return result;
-      }
-      set {
-        if (contentMap.ContainsKey(key)) {
-          idMap.Remove(contentMap[key].Id);
-        }
-        contentMap[key] = value;
-        idMap[value.Id] = value;
-      }
+    public IVertex GetVertex(object content) {
+      IVertex result;
+      contentMap.TryGetValue(content, out result);
+      return result;
     }
+
     public virtual bool Any(Func<IVertex, bool> predicate) {
       return nodes.Any(predicate);
     }
+
     public virtual bool IsEmpty {
       get { return !nodes.Any(); }
     }
+
     public virtual void Clear() {
       nodes.Clear();
@@ -102,11 +101,26 @@
       idMap.Clear();
     }
+
     public virtual void AddVertex(IVertex vertex) {
-      if (!AllowDuplicateContent && contentMap.ContainsKey(vertex.Content)) {
-        throw new Exception("Content already exists in the graph.");
+      if (vertex.Content != null) {
+        if (!AllowDuplicateContent && contentMap.ContainsKey(vertex.Content)) {
+          throw new Exception("Content already exists in the graph.");
+        }
+        contentMap.Add(vertex.Content, vertex);
       }
-      contentMap[vertex.Content] = vertex;
-      idMap[vertex.Id] = vertex;
+      idMap.Add(vertex.Id, vertex);
       nodes.Add(vertex);
+
+      vertex.PreContentChanged += Vertex_PreContentChanged;
+      vertex.PostContentChanged += Vertex_PostContentChanged;
+    }
+
+    public virtual void RemoveVertex(IVertex vertex) {
+      contentMap.Remove(vertex.Content);
+      idMap.Remove(vertex.Id);
+      nodes.Remove(vertex);
+
+      vertex.PreContentChanged -= Vertex_PreContentChanged;
+      vertex.PostContentChanged -= Vertex_PostContentChanged;
     }
 
@@ -118,6 +132,15 @@
     }
 
-    public virtual void RemoveVertex(IVertex vertex) {
-      nodes.Remove(vertex);
+    private void Vertex_PreContentChanged(object sender, EventArgs args) {
+      var vertex = (IVertex)sender;
+      if (contentMap.ContainsKey(vertex.Content)) {
+        contentMap.Remove(vertex.Content);
+      }
+    }
+
+    private void Vertex_PostContentChanged(object sender, EventArgs args) {
+      var vertex = (IVertex)sender;
+      if (vertex.Content != null)
+        contentMap.Add(vertex.Content, vertex);
     }
 
@@ -125,18 +148,4 @@
       get { return Common.Resources.VSImageLibrary.Graph; }
     }
-
-    public void SetContent(IVertex vertex, object content) {
-      var oldContent = vertex.Content;
-      contentMap.Remove(oldContent);
-      vertex.Content = content;
-      contentMap[content] = vertex;
-    }
-
-    public void SetId(IVertex vertex, string id) {
-      var oldId = vertex.Id;
-      idMap.Remove(oldId);
-      vertex.Id = id;
-      idMap[id] = vertex;
-    }
   }
 }
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Interfaces/IDirectedGraph.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Interfaces/IDirectedGraph.cs	(revision 10890)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Interfaces/IDirectedGraph.cs	(revision 10897)
@@ -33,9 +33,7 @@
     void RemoveVertex(IVertex vertex);
     IEnumerable<IVertex> Nodes { get; }
-    IVertex this[object content] { get; set; }
     bool Contains(object content);
     IVertex GetVertex(string id);
-    void SetContent(IVertex vertex, object content);
-    void SetId(IVertex vertex, string id);
+    IVertex GetVertex(object content);
   }
 }
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Interfaces/IVertex.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Interfaces/IVertex.cs	(revision 10890)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Interfaces/IVertex.cs	(revision 10897)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
 using HeuristicLab.Core;
@@ -25,7 +26,10 @@
 namespace HeuristicLab.EvolutionTracking {
   public interface IVertex : IItem {
-    string Id { get; set; }
-    IEnumerable<IArc> InArcs { get; }
-    IEnumerable<IArc> OutArcs { get; }
+    event EventHandler PreContentChanged;
+    event EventHandler PostContentChanged;
+
+    string Id { get; }
+    IEnumerable<IArc> InArcs { get; set; }
+    IEnumerable<IArc> OutArcs { get; set; }
 
     int InDegree { get; }
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Vertex.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Vertex.cs	(revision 10890)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/DirectedGraph/Vertex.cs	(revision 10897)
@@ -30,16 +30,44 @@
   [StorableClass]
   public class Vertex : Item, IVertex {
+    public event EventHandler PreContentChanged;
+    protected virtual void OnPreContentChanged(object sender, EventArgs args) {
+      var changed = PreContentChanged;
+      if (changed != null) {
+        changed(sender, args);
+      }
+    }
+
+    public event EventHandler PostContentChanged;
+    protected virtual void OnPostContentChanged(object sender, EventArgs args) {
+      var changed = PostContentChanged;
+      if (changed != null) {
+        changed(sender, args);
+      }
+    }
+
     [Storable]
     private string id;
+
     public string Id {
       get { return id; }
-      set { id = value; }
     }
+
     [Storable]
-    private string label;
-    public string Label { get { return label; } set { label = value; } }
+    public string Label { get; set; }
+
     [Storable]
-    private double weight;
-    public double Weight { get { return weight; } set { weight = value; } }
+    public double Weight { get; set; }
+
+    [Storable]
+    protected object content;
+    public object Content {
+      get { return content; }
+      set {
+        OnPreContentChanged(this, EventArgs.Empty);
+        content = value;
+        OnPostContentChanged(this, EventArgs.Empty);
+      }
+    }
+
     [Storable]
     private List<IArc> inArcs;
@@ -48,4 +76,5 @@
       set { inArcs = value.ToList(); }
     }
+
     [Storable]
     private List<IArc> outArcs;
@@ -54,6 +83,4 @@
       set { outArcs = value.ToList(); }
     }
-    [Storable]
-    public object Content { get; set; }
 
     [StorableConstructor]
@@ -64,8 +91,15 @@
     }
 
+    public Vertex(object content)
+      : this() {
+      this.content = content;
+    }
+
     protected Vertex(Vertex original, Cloner cloner)
       : base(original, cloner) {
-      Id = Guid.NewGuid().ToString();
+      id = Guid.NewGuid().ToString();
+      content = original.content;
       Label = original.Label;
+      Weight = original.Weight;
       inArcs = new List<IArc>(original.inArcs);
       outArcs = new List<IArc>(original.outArcs);
@@ -79,5 +113,5 @@
     protected void AfterDeserialization() {
       if (Id == null) {
-        Id = Guid.NewGuid().ToString();
+        id = Guid.NewGuid().ToString();
       }
     }
@@ -117,5 +151,4 @@
     protected Vertex(Vertex<T> original, Cloner cloner)
       : base(original, cloner) {
-      Content = original.Content; // not sure if to Clone()
     }
 
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs	(revision 10890)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs	(revision 10897)
@@ -81,12 +81,4 @@
     }
 
-    public new IGenealogyGraphNode this[object content] {
-      get {
-        var result = base[content];
-        return result == null ? null : (IGenealogyGraphNode)result;
-      }
-      set { base[content] = value; }
-    }
-
     public override void Clear() {
       base.Clear();
@@ -123,5 +115,5 @@
     public override void AddVertex(IVertex vertex) {
       base.AddVertex(vertex);
-      var node = (IGenealogyGraphNode<T>)vertex;
+      var node = (IGenealogyGraphNode)vertex;
       if (!Ranks.ContainsKey(node.Rank)) {
         Ranks[node.Rank] = new List<IGenealogyGraphNode>();
@@ -150,10 +142,4 @@
       if (updated != null) updated(sender, args);
     }
-    public new IGenealogyGraphNode<T> this[object content] {
-      get {
-        var result = base[content];
-        return result == null ? null : (IGenealogyGraphNode<T>)result;
-      }
-    }
   }
 }
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphNode.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphNode.cs	(revision 10890)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphNode.cs	(revision 10897)
@@ -40,4 +40,5 @@
 
     public GenealogyGraphNode() { }
+    public GenealogyGraphNode(object content) : base(content) { }
 
     public new IEnumerable<IGenealogyGraphArc> InArcs {
@@ -122,5 +123,8 @@
       set { base.Content = value; }
     }
+
     public GenealogyGraphNode() { }
+    public GenealogyGraphNode(object content) : base(content) { }
+
     protected GenealogyGraphNode(GenealogyGraphNode<T> original, Cloner cloner)
       : base(original, cloner) {
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/BeforeCrossoverOperator.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/BeforeCrossoverOperator.cs	(revision 10890)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/BeforeCrossoverOperator.cs	(revision 10897)
@@ -77,10 +77,5 @@
       var parents = ParentsParameter.ActualValue.ToList();
 
-      var childVertex = new GenealogyGraphNode<T> {
-        // the child parameter does not have a value yet (it will be assigned after crossover), 
-        // but the first parent is actually the future child so we use this
-        Content = parents[0],
-        Rank = parentVertices[0].Rank + 1
-      };
+      var childVertex = new GenealogyGraphNode<T>(parents[0]) { Rank = parentVertices[0].Rank + 1 };
 
       GenealogyGraph.AddVertex(childVertex);
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/BeforeManipulatorOperator.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/BeforeManipulatorOperator.cs	(revision 10890)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/BeforeManipulatorOperator.cs	(revision 10897)
@@ -51,5 +51,5 @@
     public override IOperation Apply() {
       // since mutation always takes place after crossover, the vertex for the current child is already in the tree
-      var v = (IGenealogyGraphNode<T>)GenealogyGraph[ChildParameter.ActualValue];
+      var v = (IGenealogyGraphNode<T>)GenealogyGraph.GetVertex(ChildParameter.ActualValue);
 
       if (!v.Rank.IsAlmost(Generations.Value + 1)) {
@@ -58,8 +58,5 @@
       var clone = (T)ChildParameter.ActualValue.Clone();
 
-      var c = new GenealogyGraphNode<T> {
-        Rank = v.Rank - 0.5,
-        Content = clone
-      };
+      var c = new GenealogyGraphNode<T>(clone) { Rank = v.Rank - 0.5 };
 
       foreach (var a in v.InArcs) {
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 10890)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymboldDataAnalysisGenealogyView.cs	(revision 10897)
@@ -109,5 +109,5 @@
         var matchingTrees = trees.Where(x => x.Root.ContainsSubtree(subtree, comparer));
 
-        var matchingVertices = matchingTrees.Select(x => Content[x]).Cast<IGenealogyGraphNode<ISymbolicExpressionTree>>();
+        var matchingVertices = matchingTrees.Select(x => Content.GetVertex(x)).Cast<IGenealogyGraphNode<ISymbolicExpressionTree>>();
         graphChart_highlightMatchingVertices(matchingVertices);
       }
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionAfterCrossoverOperator.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionAfterCrossoverOperator.cs	(revision 10890)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionAfterCrossoverOperator.cs	(revision 10897)
@@ -30,5 +30,5 @@
   public class SymbolicDataAnalysisExpressionAfterCrossoverOperator : AfterCrossoverOperator<ISymbolicExpressionTree> {
     public override IOperation Apply() {
-      var childVertex = (IGenealogyGraphNode<ISymbolicExpressionTree>)GenealogyGraph[ChildParameter.ActualValue];
+      var childVertex = (IGenealogyGraphNode<ISymbolicExpressionTree>)GenealogyGraph.GetVertex(ChildParameter.ActualValue);
       var arcs = childVertex.InArcs.ToList();
       var nodes0 = (List<ISymbolicExpressionTreeNode>)arcs[0].Data;
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionAfterManipulatorOperator.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionAfterManipulatorOperator.cs	(revision 10890)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionAfterManipulatorOperator.cs	(revision 10897)
@@ -40,5 +40,5 @@
 
     public override IOperation Apply() {
-      var vChild = (IGenealogyGraphNode<ISymbolicExpressionTree>)GenealogyGraph[ChildParameter.ActualValue];
+      var vChild = (IGenealogyGraphNode<ISymbolicExpressionTree>)GenealogyGraph.GetVertex(ChildParameter.ActualValue);
       var nodesBefore = (List<ISymbolicExpressionTreeNode>)vChild.InArcs.First().Data;
       var nodesAfter = ChildParameter.ActualValue.IterateNodesPrefix().ToList();
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionBeforeCrossoverOperator.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionBeforeCrossoverOperator.cs	(revision 10890)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionBeforeCrossoverOperator.cs	(revision 10897)
@@ -30,5 +30,5 @@
       var result = base.Apply(); // the base operator will add the child to the graph before the actual crossover operation takes place
       var parents = ParentsParameter.ActualValue.ToList();
-      var childVertex = (IGenealogyGraphNode<ISymbolicExpressionTree>)GenealogyGraph[parents[0]]; // use the parent since it is actually the child before crossover (and the ChildParameter doesn't have a value yet)
+      var childVertex = (IGenealogyGraphNode<ISymbolicExpressionTree>)GenealogyGraph.GetVertex(parents[0]); // use the parent since it is actually the child before crossover (and the ChildParameter doesn't have a value yet)
       var arcs = childVertex.InArcs.ToList();
 
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionBeforeManipulatorOperator.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionBeforeManipulatorOperator.cs	(revision 10890)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionBeforeManipulatorOperator.cs	(revision 10897)
@@ -30,5 +30,5 @@
       var result = base.Apply(); // add the vertex in the genealogy graph
 
-      var vChild = (IGenealogyGraphNode<ISymbolicExpressionTree>)GenealogyGraph[ChildParameter.ActualValue];
+      var vChild = (IGenealogyGraphNode<ISymbolicExpressionTree>)GenealogyGraph.GetVertex(ChildParameter.ActualValue);
       var vClone = vChild.Parents.Last();
       vChild.InArcs.First().Data = vClone.Content.IterateNodesPrefix().ToList();
