Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/AncestryLayoutAdapter.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/AncestryLayoutAdapter.cs	(revision 11891)
+++ 	(revision )
@@ -1,38 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.EvolutionTracking.Views.Primitives;
-using HeuristicLab.Visualization;
-
-namespace HeuristicLab.EvolutionTracking.Views {
-  class AncestryLayoutAdapter : ILayoutAdapter<PrimitiveGroup> {
-    public IEnumerable<ILayoutNode<IGroup>> Convert(IGroup root, Func<PrimitiveGroup, ILayoutNode<PrimitiveGroup>> convertFunc) {
-      throw new NotImplementedException();
-    }
-
-    public IEnumerable<ILayoutNode<PrimitiveGroup>> Convert(PrimitiveGroup root, Func<PrimitiveGroup, ILayoutNode<PrimitiveGroup>> convertFunc) {
-      throw new NotImplementedException();
-    }
-  }
-}
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/Primitives/LabeledEllipse.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/Primitives/LabeledEllipse.cs	(revision 11891)
+++ 	(revision )
@@ -1,106 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Visualization;
-
-namespace HeuristicLab.EvolutionTracking.Views.Primitives {
-  public class LabeledEllipse : Ellipse, ILayoutNode<ISymbolicExpressionTreeNode> {
-    private string text;
-    public string Text { get { return text; } set { text = value; } }
-
-    private Font font;
-    public Font Font { get { return font; } set { font = value; } }
-
-    private Brush fontBrush;
-    public Brush FontBrush { get { return fontBrush; } set { fontBrush = value; } }
-
-    public LabeledEllipse(IChart chart, PointD lowerLeft, PointD upperRight)
-      : base(chart, lowerLeft, upperRight) {
-      font = new Font(FontFamily.GenericSansSerif, 10);
-    }
-    public LabeledEllipse(IChart chart, double x1, double y1, double x2, double y2)
-      : this(chart, new PointD(x1, y1), new PointD(x2, y2)) {
-    }
-    public LabeledEllipse(IChart chart, PointD lowerLeft, PointD upperRight, Pen pen, Brush brush)
-      : base(chart, lowerLeft, upperRight, pen, brush) {
-      font = new Font(FontFamily.GenericSansSerif, 10);
-    }
-    public LabeledEllipse(IChart chart, double x1, double y1, double x2, double y2, Pen pen, Brush brush)
-      : this(chart, new PointD(x1, y1), new PointD(x2, y2), pen, brush) {
-    }
-
-    public override void Draw(Graphics graphics) {
-      var p = Chart.TransformWorldToPixel(new PointD(LowerLeft.X, LowerLeft.Y));
-      var s = Chart.TransformWorldToPixel(Size);
-      var stringSize = graphics.MeasureString(Text, Font);
-      var fontSize = Font.Size * s.Width / stringSize.Width;
-      if (fontSize > 12) fontSize = 12; // limit maximum font size to 10pt
-      font = new Font(font.Name, fontSize, FontStyle.Regular, GraphicsUnit.Pixel);
-      stringSize = graphics.MeasureString(Text, Font);
-      graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
-      graphics.DrawString(Text, Font, FontBrush, p.X + (s.Width - stringSize.Width) / 2f, p.Y - (s.Height + stringSize.Height) / 2f);
-      base.Draw(graphics);
-    }
-
-    public ILayoutNode<ISymbolicExpressionTreeNode> Thread { get; set; }
-    public ILayoutNode<ISymbolicExpressionTreeNode> Ancestor { get; set; }
-    public ILayoutNode<ISymbolicExpressionTreeNode> Parent { get; set; }
-    public List<ILayoutNode<ISymbolicExpressionTreeNode>> Children { get; set; }
-    public float Mod { get; set; }
-    public float Prelim { get; set; }
-    public float Change { get; set; }
-    public float Shift { get; set; }
-    public int Number { get; set; }
-    public int Level { get; set; }
-    public float X { get; set; }
-    public float Y { get; set; }
-    public bool IsLeaf {
-      get { return Children == null || Children.Count == 0; }
-    }
-    public ILayoutNode<ISymbolicExpressionTreeNode> NextLeft {
-      get {
-        return Children == null ? Thread : Children.First();
-      }
-    }
-    public ILayoutNode<ISymbolicExpressionTreeNode> NextRight {
-      get {
-        return Children == null ? Thread : Children.Last();
-      }
-    }
-    public ILayoutNode<ISymbolicExpressionTreeNode> LeftSibling {
-      get {
-        if (Parent == null) return null;
-        return Number == 0 ? null : Parent.Children[Number - 1];
-      }
-    }
-    public ILayoutNode<ISymbolicExpressionTreeNode> LeftmostSibling {
-      get {
-        if (Parent == null) return null;
-        return Number == 0 ? null : Parent.Children[0];
-      }
-    }
-    public ISymbolicExpressionTreeNode Content { get; set; }
-  }
-}
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/Primitives/LabeledRectangle.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/Primitives/LabeledRectangle.cs	(revision 11891)
+++ 	(revision )
@@ -1,107 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Visualization;
-using Rectangle = HeuristicLab.Visualization.Rectangle;
-
-namespace HeuristicLab.EvolutionTracking.Views.Primitives {
-  public class LabeledRectangle : Rectangle, ILayoutNode<ISymbolicExpressionTreeNode> {
-    private string text;
-    public string Text { get { return text; } set { text = value; } }
-
-    private Font font;
-    public Font Font { get { return font; } set { font = value; } }
-
-    private Brush fontBrush;
-    public Brush FontBrush { get { return fontBrush; } set { fontBrush = value; } }
-
-    public LabeledRectangle(IChart chart, PointD lowerLeft, PointD upperRight)
-      : base(chart, lowerLeft, upperRight) {
-      font = new Font(FontFamily.GenericSansSerif, 10);
-    }
-    public LabeledRectangle(IChart chart, double x1, double y1, double x2, double y2)
-      : this(chart, new PointD(x1, y1), new PointD(x2, y2)) {
-    }
-    public LabeledRectangle(IChart chart, PointD lowerLeft, PointD upperRight, Pen pen, Brush brush)
-      : base(chart, lowerLeft, upperRight, pen, brush) {
-      font = new Font(FontFamily.GenericSansSerif, 10);
-    }
-    public LabeledRectangle(IChart chart, double x1, double y1, double x2, double y2, Pen pen, Brush brush)
-      : this(chart, new PointD(x1, y1), new PointD(x2, y2), pen, brush) {
-    }
-
-    public override void Draw(Graphics graphics) {
-      var p = Chart.TransformWorldToPixel(new PointD(LowerLeft.X, LowerLeft.Y));
-      var s = Chart.TransformWorldToPixel(Size);
-      var stringSize = graphics.MeasureString(Text, Font);
-      var fontSize = Font.Size * s.Width / stringSize.Width;
-      if (fontSize > 12) fontSize = 12; // limit maximum font size so that nodes look nicer
-      font = new Font(font.Name, fontSize, FontStyle.Regular, GraphicsUnit.Pixel);
-      stringSize = graphics.MeasureString(Text, Font);
-      graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
-      graphics.DrawString(Text, Font, FontBrush, p.X + (s.Width - stringSize.Width) / 2f, p.Y - (s.Height + stringSize.Height) / 2f);
-      base.Draw(graphics);
-    }
-
-    public ILayoutNode<ISymbolicExpressionTreeNode> Thread { get; set; }
-    public ILayoutNode<ISymbolicExpressionTreeNode> Ancestor { get; set; }
-    public ILayoutNode<ISymbolicExpressionTreeNode> Parent { get; set; }
-    public List<ILayoutNode<ISymbolicExpressionTreeNode>> Children { get; set; }
-    public float Mod { get; set; }
-    public float Prelim { get; set; }
-    public float Change { get; set; }
-    public float Shift { get; set; }
-    public int Number { get; set; }
-    public int Level { get; set; }
-    public float X { get; set; }
-    public float Y { get; set; }
-    public bool IsLeaf {
-      get { return Children == null || Children.Count == 0; }
-    }
-    public ILayoutNode<ISymbolicExpressionTreeNode> NextLeft {
-      get {
-        return Children == null ? Thread : Children.First();
-      }
-    }
-    public ILayoutNode<ISymbolicExpressionTreeNode> NextRight {
-      get {
-        return Children == null ? Thread : Children.Last();
-      }
-    }
-    public ILayoutNode<ISymbolicExpressionTreeNode> LeftSibling {
-      get {
-        if (Parent == null) return null;
-        return Number == 0 ? null : Parent.Children[Number - 1];
-      }
-    }
-    public ILayoutNode<ISymbolicExpressionTreeNode> LeftmostSibling {
-      get {
-        if (Parent == null) return null;
-        return Number == 0 ? null : Parent.Children[0];
-      }
-    }
-    public ISymbolicExpressionTreeNode Content { get; set; }
-  }
-}
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/Primitives/PrimitiveGroup.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/Primitives/PrimitiveGroup.cs	(revision 11891)
+++ 	(revision )
@@ -1,114 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Visualization;
-
-namespace HeuristicLab.EvolutionTracking.Views.Primitives {
-  // a class representing a primitive group with an area defined by the LowerLeft and UpperRight points
-  // the area is important for deciding which group was selected and for layouting
-  public class PrimitiveGroup : Group, ILayoutNode<ISymbolicExpressionTree> {
-    // two points to determine the area of the primitive group
-    private PointF lowerLeft;
-    public PointF LowerLeft {
-      get { return lowerLeft; }
-      set { lowerLeft = value; }
-    }
-    private PointF upperRight;
-    public PointF UpperRight {
-      get { return upperRight; }
-      set { upperRight = value; }
-    }
-
-    public PrimitiveGroup(IChart chart)
-      : base(chart) {
-      lowerLeft = new PointF();
-      upperRight = new PointF();
-    }
-
-    public SizeF Size {
-      get { return new SizeF(upperRight.X - lowerLeft.X, upperRight.Y - lowerLeft.Y); }
-    }
-
-    public void UpdateBounds() {
-      // update corner points
-      var primitives = Primitives.Where(p => p is RectangularPrimitiveBase).Cast<RectangularPrimitiveBase>().ToList();
-      var xmin = (float)primitives.Min(p => p.LowerLeft.X);
-      var ymin = (float)primitives.Min(p => p.LowerLeft.Y);
-      LowerLeft = new PointF(xmin, ymin);
-
-      var xmax = (float)primitives.Max(p => p.UpperRight.X);
-      var ymax = (float)primitives.Max(p => p.UpperRight.Y);
-      UpperRight = new PointF(xmax, ymax);
-    }
-    public override void AddRange(IEnumerable<IPrimitive> primitives) {
-      foreach (var primitive in primitives)
-        Add(primitive);
-    }
-    public override void Move(Offset delta) {
-      base.Move(delta);
-      UpdateBounds();
-    }
-    public bool IsLeaf {
-      get { return Children == null || Children.Count == 0; }
-    }
-    public ILayoutNode<ISymbolicExpressionTree> NextLeft {
-      get {
-        return Children == null ? Thread : Children.First();
-      }
-    }
-    public ILayoutNode<ISymbolicExpressionTree> NextRight {
-      get {
-        return Children == null ? Thread : Children.Last();
-      }
-    }
-    public ILayoutNode<ISymbolicExpressionTree> LeftSibling {
-      get {
-        if (Parent == null) return null;
-        return Number == 0 ? null : Parent.Children[Number - 1];
-      }
-    }
-    public ILayoutNode<ISymbolicExpressionTree> LeftmostSibling {
-      get {
-        if (Parent == null) return null;
-        return Number == 0 ? null : Parent.Children[0];
-      }
-    }
-
-    public ILayoutNode<ISymbolicExpressionTree> Thread { get; set; }
-    public ILayoutNode<ISymbolicExpressionTree> Ancestor { get; set; }
-    public ILayoutNode<ISymbolicExpressionTree> Parent { get; set; }
-    public List<ILayoutNode<ISymbolicExpressionTree>> Children { get; set; }
-    public float Mod { get; set; }
-    public float Prelim { get; set; }
-    public float Change { get; set; }
-    public float Shift { get; set; }
-    public int Number { get; set; }
-    public int Level { get; set; }
-    public float X { get; set; }
-    public float Y { get; set; }
-
-    public ISymbolicExpressionTree Content { get; set; }
-  }
-}
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Collections/CloneableCollection.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Collections/CloneableCollection.cs	(revision 11925)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Collections/CloneableCollection.cs	(revision 11925)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.EvolutionTracking {
+  public class CloneableCollection<T> : List<T>, IDeepCloneable {
+    public CloneableCollection() { }
+
+    public CloneableCollection(IEnumerable<T> elements) : base(elements) { }
+
+    public object Clone() { return new CloneableCollection<T>(this); }
+
+    public IDeepCloneable Clone(Cloner cloner) { return cloner.Clone(this); }
+  }
+
+  public static class CloneableCollectionExtensions {
+    public static CloneableCollection<T> ToCloneableCollection<T>(this IEnumerable<T> elements) {
+      return new CloneableCollection<T>(elements);
+    }
+  }
+}
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs	(revision 11891)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs	(revision 11925)
@@ -37,5 +37,5 @@
     private Dictionary<string, IGenealogyGraphNode> idMap;
 
-    private readonly Comparison<IArc> compareArcs = (a, b) => {
+    private readonly Comparison<IArc<IDeepCloneable>> compareArcs = (a, b) => {
       if (a.Data == b.Data)
         return 0;
@@ -56,5 +56,5 @@
       RebuildDictionaries();
 
-      foreach (var arcs in Vertices.Select(v => (List<IArc>)((IVertex)v).InArcs)) { arcs.Sort(compareArcs); }
+      foreach (var arcs in Vertices.Select(v => v.InArcs.ToList())) { arcs.Sort(compareArcs); }
     }
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -69,5 +69,5 @@
     private void AfterDeserialization() {
       RebuildDictionaries();
-      foreach (var arcs in Vertices.Select(v => (List<IArc>)((Vertex)v).InArcs)) { arcs.Sort(compareArcs); }
+      foreach (var arcs in Vertices.Select(v => v.InArcs.ToList())) { arcs.Sort(compareArcs); }
     }
     public GenealogyGraph() {
@@ -169,9 +169,4 @@
       return ColorGradient.Colors[colorIndex];
     }
-
-    public override void AddVertices(IEnumerable<IVertex> vertexList) {
-      base.AddVertices(vertexList);
-      RebuildDictionaries();
-    }
   }
 
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphArc.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphArc.cs	(revision 11891)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphArc.cs	(revision 11925)
@@ -27,5 +27,5 @@
   [StorableClass]
   [Item("GenealogyGraphArc", "A graph arc connecting two GenealogyGraphNodes and holding some data.")]
-  public class GenealogyGraphArc : Arc, IGenealogyGraphArc {
+  public class GenealogyGraphArc : Arc<IDeepCloneable>, IGenealogyGraphArc {
     [StorableConstructor]
     protected GenealogyGraphArc(bool deserializing) : base(deserializing) { }
@@ -55,4 +55,5 @@
     [StorableConstructor]
     protected GenealogyGraphArc(bool deserializing) : base(deserializing) { }
+
     protected GenealogyGraphArc(GenealogyGraphArc original, Cloner cloner)
       : base(original, cloner) {
@@ -62,4 +63,5 @@
       return new GenealogyGraphArc<T>(this, cloner);
     }
+
     public new T Data {
       get { return (T)base.Data; }
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphNode.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphNode.cs	(revision 11891)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphNode.cs	(revision 11925)
@@ -30,5 +30,5 @@
   [StorableClass]
   [Item("GenealogGraphNode", "A class representing a node in the GenealogyGraph")]
-  public class GenealogyGraphNode : Vertex, IGenealogyGraphNode {
+  public class GenealogyGraphNode : Vertex<IDeepCloneable>, IGenealogyGraphNode {
     [StorableConstructor]
     protected GenealogyGraphNode(bool deserializing) : base(deserializing) { }
@@ -46,7 +46,11 @@
     }
 
+    public GenealogyGraphNode() {
+      Id = Guid.NewGuid().ToString();
+    }
+
     public GenealogyGraphNode(IDeepCloneable data)
-      : base(data) {
-      Id = Guid.NewGuid().ToString();
+      : this() {
+      Data = data;
     }
 
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/Interfaces/IGenealogyGraphArc.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/Interfaces/IGenealogyGraphArc.cs	(revision 11891)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/Interfaces/IGenealogyGraphArc.cs	(revision 11925)
@@ -20,8 +20,9 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 
 namespace HeuristicLab.EvolutionTracking {
-  public interface IGenealogyGraphArc : IArc {
+  public interface IGenealogyGraphArc : IArc<IDeepCloneable> {
     new IGenealogyGraphNode Source { get; }
     new IGenealogyGraphNode Target { get; }
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/Interfaces/IGenealogyGraphNode.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/Interfaces/IGenealogyGraphNode.cs	(revision 11891)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/Interfaces/IGenealogyGraphNode.cs	(revision 11925)
@@ -22,8 +22,9 @@
 using System;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 
 namespace HeuristicLab.EvolutionTracking {
-  public interface IGenealogyGraphNode : IVertex, IComparable<IGenealogyGraphNode> {
+  public interface IGenealogyGraphNode : IVertex<IDeepCloneable>, IComparable<IGenealogyGraphNode> {
     double Rank { get; set; }
     double Quality { get; set; }
@@ -39,10 +40,11 @@
   }
 
-  public interface IGenealogyGraphNode<T> : IGenealogyGraphNode, IVertex<T> where T : class {
+  public interface IGenealogyGraphNode<T> : IGenealogyGraphNode where T : class {
     new IEnumerable<IGenealogyGraphNode<T>> Parents { get; }
     new IEnumerable<IGenealogyGraphNode<T>> Children { get; }
-
     new IEnumerable<IGenealogyGraphNode<T>> Ancestors { get; }
     new IEnumerable<IGenealogyGraphNode<T>> Descendants { get; }
+
+    new T Data { get; set; }
   }
 }
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/HeuristicLab.EvolutionTracking-3.4.csproj
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/HeuristicLab.EvolutionTracking-3.4.csproj	(revision 11891)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/HeuristicLab.EvolutionTracking-3.4.csproj	(revision 11925)
@@ -110,4 +110,5 @@
   <ItemGroup>
     <Compile Include="Analyzers\GenealogyAnalyzer.cs" />
+    <Compile Include="Collections\CloneableCollection.cs" />
     <Compile Include="Fragment.cs" />
     <Compile Include="Interfaces\IFragment.cs" />
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj	(revision 11891)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj	(revision 11925)
@@ -278,10 +278,4 @@
       <DependentUpon>VariableView.cs</DependentUpon>
     </Compile>
-    <Compile Include="Tracking\FragmentGraphView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Tracking\FragmentGraphView.Designer.cs">
-      <DependentUpon>FragmentGraphView.cs</DependentUpon>
-    </Compile>
     <Compile Include="Tracking\SymbolicDataAnalysisGenealogyGraphView.cs">
       <SubType>UserControl</SubType>
@@ -289,16 +283,4 @@
     <Compile Include="Tracking\SymbolicDataAnalysisGenealogyGraphView.Designer.cs">
       <DependentUpon>SymbolicDataAnalysisGenealogyGraphView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Tracking\SymbolicDataAnalysisExpressionLineageExplorerView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Tracking\SymbolicDataAnalysisExpressionLineageExplorerView.Designer.cs">
-      <DependentUpon>SymbolicDataAnalysisExpressionLineageExplorerView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Tracking\SymbolicExpressionChartControl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Tracking\SymbolicExpressionChartControl.Designer.cs">
-      <DependentUpon>SymbolicExpressionChartControl.cs</DependentUpon>
     </Compile>
     <Compile Include="TreeEditDialogs\SymbolicExpressionTreeConstantNodeEditDialog.cs">
@@ -384,7 +366,4 @@
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>
       <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Tracking\SymbolicDataAnalysisGenealogyGraphView.resx">
-      <DependentUpon>SymbolicDataAnalysisGenealogyGraphView.cs</DependentUpon>
     </EmbeddedResource>
   </ItemGroup>
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.cs	(revision 11891)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.cs	(revision 11925)
@@ -85,10 +85,7 @@
         // that will include just the individual and its ancestors
         var graph = new GenealogyGraph<ISymbolicExpressionTree>();
-        var ancestors = new[] { graphNode }.Concat(graphNode.Ancestors);
-        var cloned = ancestors.ToDictionary(x => x, x => cloner.Clone(x));
-        graph.AddVertices(cloned.Values);
-        foreach (var arc in cloned.Keys.SelectMany(x => x.InArcs)) {
-          graph.AddArc(cloner.Clone(arc));
-        }
+        var ancestors = new[] { graphNode }.Concat(graphNode.Ancestors).ToList();
+        graph.AddVertices(ancestors.Select(cloner.Clone));
+        graph.AddArcs(ancestors.SelectMany(x => x.InArcs).Select(cloner.Clone));
         MainFormManager.MainForm.ShowContent(graph);
       }
@@ -185,5 +182,5 @@
     private void navigateRightButton_Click(object sender, EventArgs e) {
       var graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)genealogyGraphChart.SelectedGraphNode;
-      var inArcs = (List<IArc>)((IVertex)graphNode).InArcs;
+      var inArcs = graphNode.InArcs.ToList();
       if (inArcs.Count > 0) {
         var data = inArcs.Last().Data;
@@ -205,5 +202,5 @@
           for (int i = 1; i < inArcs.Count; ++i) {
             td = (TraceData)inArcs[i].Data;
-            var f2 = ((ISymbolicExpressionTree)inArcs[i].Source.Data).NodeAt(td.SubtreeIndex);
+            var f2 = ((IGenealogyGraphNode<ISymbolicExpressionTree>)inArcs[i].Source).Data.NodeAt(td.SubtreeIndex);
             // if the subtrees are the same we have found a match
             // note: this is not necessarily 100% correct if in the trace graph we have identical fragments on different arcs
@@ -218,5 +215,13 @@
     }
   }
-
   public class SymbolicDataAnalysisGenealogyGraphViewDesignable : GenealogyGraphView<ISymbolicExpressionTree> { }
+
+  internal static class Util {
+    internal static ISymbolicExpressionTreeNode NodeAt(this ISymbolicExpressionTree tree, int position) {
+      return NodeAt(tree.Root, position);
+    }
+    internal static ISymbolicExpressionTreeNode NodeAt(this ISymbolicExpressionTreeNode root, int position) {
+      return root.IterateNodesPrefix().ElementAt(position);
+    }
+  }
 }
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 11891)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 11925)
@@ -321,5 +321,4 @@
     <Compile Include="Tracking\TraceCalculator.cs" />
     <Compile Include="TransformationToSymbolicTreeMapper.cs" />
-    <Compile Include="Tracking\FragmentGraph\FragmentGraph.cs" />
     <Compile Include="Tracking\SymbolicDataAnalysisExpressionAfterCrossoverOperator.cs" />
     <Compile Include="Tracking\SymbolicDataAnalysisExpressionBeforeCrossoverOperator.cs" />
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 11891)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionBeforeCrossoverOperator.cs	(revision 11925)
@@ -49,5 +49,5 @@
 
       for (int i = 0; i < parents.Count; ++i) {
-        arcs[i].Data = parents[i].IterateNodesPrefix().ToList();
+        arcs[i].Data = parents[i].IterateNodesPrefix().ToCloneableCollection();
       }
 
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/TraceCalculator.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/TraceCalculator.cs	(revision 11891)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/TraceCalculator.cs	(revision 11925)
@@ -95,5 +95,5 @@
         Debug.Assert(si < g.Data.Length);
         var inArcs = (List<IArc>)((IVertex)g).InArcs;
-        var fragment = (IFragment<ISymbolicExpressionTreeNode>)inArcs.Last().Data;
+        var fragment = (IFragment<ISymbolicExpressionTreeNode>)((IGenealogyGraphArc)inArcs.Last()).Data;
         if (fragment == null) {
           // TODO: think about what the correct behavior should be here (seems good so far)
@@ -225,5 +225,5 @@
   }
   // this class is here to help clarify the semantics
-  public class TraceData : Tuple<int, int, int, int> {
+  public class TraceData : Tuple<int, int, int, int>, IDeepCloneable {
     public TraceData(int currentSubtreeIndex, int currentFragmentIndex, int lastSubtreeIndex, int lastFragmentIndex)
       : base(currentSubtreeIndex, currentFragmentIndex, lastSubtreeIndex, lastFragmentIndex) {
@@ -234,4 +234,11 @@
     public int LastSubtreeIndex { get { return Item3; } }
     public int LastFragmentIndex { get { return Item4; } }
+    public object Clone() {
+      return new TraceData(SubtreeIndex, FragmentIndex, LastSubtreeIndex, LastFragmentIndex);
+    }
+
+    public IDeepCloneable Clone(Cloner cloner) {
+      return cloner.Clone(this);
+    }
   }
 
