Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Tests/GenealogyOperationsPerformanceTests.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Tests/GenealogyOperationsPerformanceTests.cs	(revision 11851)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Tests/GenealogyOperationsPerformanceTests.cs	(revision 11852)
@@ -48,5 +48,5 @@
       //      var trace = tc.Trace(bestIndividual, 2);
       sw.Stop();
-      Console.WriteLine("Avg trace size: {0}", s / graph.Ranks.Last().Value.Count);
+      Console.WriteLine("Avg trace size: {0}", s / graph.Ranks.Last().Value.Count());
       //      var ancestry = bestIndividual.Ancestors;
       //      Console.WriteLine("Ancestry size: {0}", ancestry.Count());
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 11851)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 11852)
@@ -40,4 +40,7 @@
     private readonly Pen defaultPen;
 
+    private Dictionary<IGenealogyGraphNode, VisualGenealogyGraphNode> nodeMap;
+    private Dictionary<Tuple<VisualGenealogyGraphNode, VisualGenealogyGraphNode>, VisualGenealogyGraphArc> arcMap;
+
     public IGenealogyGraph GenealogyGraph {
       get { return genealogyGraph; }
@@ -63,6 +66,12 @@
     }
 
-    private Dictionary<IGenealogyGraphNode, VisualGenealogyGraphNode> nodeMap;
-    private Dictionary<Tuple<VisualGenealogyGraphNode, VisualGenealogyGraphNode>, VisualGenealogyGraphArc> arcMap;
+    public bool UpdateEnabled {
+      get { return Chart.UpdateEnabled; }
+      set { Chart.UpdateEnabled = value; }
+    }
+
+    public void EnforceUpdate() {
+      Chart.EnforceUpdate();
+    }
 
     #region chart modes
@@ -225,10 +234,9 @@
 
       // update
-      Chart.UpdateEnabled = true;
-      Chart.EnforceUpdate();
+      UpdateEnabled = true;
+      EnforceUpdate();
 
       if (SelectedVisualNode != null)
-        /* emit clicked event */
-        OnGenealogyGraphNodeClicked(SelectedVisualNode, e);
+        OnGenealogyGraphNodeClicked(SelectedVisualNode, e); // emit clicked event
 
       base.pictureBox_MouseUp(sender, e);
@@ -306,4 +314,17 @@
     }
 
+    public void ClearArcs() {
+      foreach (var primitive in Chart.Group.Primitives.OfType<VisualGenealogyGraphArc>()) {
+        primitive.Pen = Pens.Transparent;
+      }
+    }
+
+    public void ClearNodes() {
+      foreach (var primitive in Chart.Group.Primitives.OfType<VisualGenealogyGraphNode>()) {
+        primitive.Brush = new SolidBrush(Color.Transparent);
+        primitive.Pen = new Pen(Color.LightGray);
+      }
+    }
+
     public virtual void ClearPrimitives() {
       foreach (var primitive in Chart.Group.Primitives) {
@@ -313,21 +334,29 @@
           primitive.Brush = new SolidBrush(Color.Transparent);
           primitive.Pen = new Pen(Color.DarkGray);
-        }
-      }
-    }
-
-    public void HighlightNodes(IEnumerable<IGenealogyGraphNode> nodes) {
-      Chart.UpdateEnabled = false;
-      ClearPrimitives();
+          //          primitive.Pen = Pens.Transparent; // remove the node contour
+        }
+      }
+    }
+
+    public void HighlightNodes(IEnumerable<IGenealogyGraphNode> nodes, bool clearPrimitives = true) {
+      if (clearPrimitives)
+        ClearPrimitives();
+
       foreach (var node in nodes) {
         var graphNode = GetMappedNode(node);
         graphNode.Brush = new SolidBrush(node.GetColor());
       }
-      Chart.UpdateEnabled = true;
-      Chart.EnforceUpdate();
+    }
+
+    public void HighlightNodes(IEnumerable<IGenealogyGraphNode> nodes, Color color, bool clearPrimitives = true) {
+      if (clearPrimitives)
+        ClearPrimitives();
+
+      foreach (var node in nodes.Select(GetMappedNode)) {
+        node.Brush = new SolidBrush(color);
+      }
     }
 
     public void HighlightAll() {
-      Chart.UpdateEnabled = false;
       foreach (var visualNode in nodeMap.Values) {
         visualNode.Brush = new SolidBrush(visualNode.Data.GetColor());
@@ -340,6 +369,4 @@
         arc.Pen.Brush = new LinearGradientBrush(start, end, source.GetColor(), target.GetColor());
       }
-      Chart.UpdateEnabled = true;
-      Chart.EnforceUpdate();
     }
 
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.Designer.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.Designer.cs	(revision 11851)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.Designer.cs	(revision 11852)
@@ -26,4 +26,5 @@
     private void InitializeComponent() {
       this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.genealogyGraphChart = new HeuristicLab.EvolutionTracking.Views.GenealogyGraphChart();
       this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
       this.groupBox = new System.Windows.Forms.GroupBox();
@@ -31,5 +32,5 @@
       this.simpleLineages_checkBox = new System.Windows.Forms.CheckBox();
       this.trace_checkBox = new System.Windows.Forms.CheckBox();
-      this.genealogyGraphChart = new HeuristicLab.EvolutionTracking.Views.GenealogyGraphChart();
+      this.openNew_CheckBox = new System.Windows.Forms.CheckBox();
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
       this.splitContainer.Panel1.SuspendLayout();
@@ -58,4 +59,21 @@
       this.splitContainer.TabIndex = 0;
       // 
+      // genealogyGraphChart
+      // 
+      this.genealogyGraphChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.genealogyGraphChart.BackColor = System.Drawing.SystemColors.Control;
+      this.genealogyGraphChart.GenealogyGraph = null;
+      this.genealogyGraphChart.Location = new System.Drawing.Point(0, 0);
+      this.genealogyGraphChart.LockGenealogy = false;
+      this.genealogyGraphChart.Name = "genealogyGraphChart";
+      this.genealogyGraphChart.ScaleOnResize = true;
+      this.genealogyGraphChart.SimpleLineages = false;
+      this.genealogyGraphChart.Size = new System.Drawing.Size(689, 738);
+      this.genealogyGraphChart.TabIndex = 0;
+      this.genealogyGraphChart.TraceFragments = false;
+      this.genealogyGraphChart.UpdateEnabled = true;
+      // 
       // viewHost
       // 
@@ -77,4 +95,5 @@
       // groupBox
       // 
+      this.groupBox.Controls.Add(this.openNew_CheckBox);
       this.groupBox.Controls.Add(this.lockGraph_checkBox);
       this.groupBox.Controls.Add(this.simpleLineages_checkBox);
@@ -123,19 +142,13 @@
       this.trace_checkBox.CheckedChanged += new System.EventHandler(this.trace_checkBox_CheckedChanged);
       // 
-      // genealogyGraphChart
+      // openNew_CheckBox
       // 
-      this.genealogyGraphChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.genealogyGraphChart.BackColor = System.Drawing.SystemColors.Control;
-      this.genealogyGraphChart.GenealogyGraph = null;
-      this.genealogyGraphChart.Location = new System.Drawing.Point(0, 0);
-      this.genealogyGraphChart.LockGenealogy = false;
-      this.genealogyGraphChart.Name = "genealogyGraphChart";
-      this.genealogyGraphChart.ScaleOnResize = true;
-      this.genealogyGraphChart.SimpleLineages = false;
-      this.genealogyGraphChart.Size = new System.Drawing.Size(689, 738);
-      this.genealogyGraphChart.TabIndex = 0;
-      this.genealogyGraphChart.TraceFragments = false;
+      this.openNew_CheckBox.AutoSize = true;
+      this.openNew_CheckBox.Location = new System.Drawing.Point(237, 20);
+      this.openNew_CheckBox.Name = "openNew_CheckBox";
+      this.openNew_CheckBox.Size = new System.Drawing.Size(111, 17);
+      this.openNew_CheckBox.TabIndex = 1;
+      this.openNew_CheckBox.Text = "Open in new view";
+      this.openNew_CheckBox.UseVisualStyleBackColor = true;
       // 
       // GenealogyGraphView
@@ -166,4 +179,5 @@
     protected System.Windows.Forms.CheckBox simpleLineages_checkBox;
     protected System.Windows.Forms.CheckBox lockGraph_checkBox;
+    protected System.Windows.Forms.CheckBox openNew_CheckBox;
 
   }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/HeuristicLab.EvolutionTracking.Views-3.4.csproj
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/HeuristicLab.EvolutionTracking.Views-3.4.csproj	(revision 11851)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/HeuristicLab.EvolutionTracking.Views-3.4.csproj	(revision 11852)
@@ -129,4 +129,9 @@
     <None Include="HeuristicLab.snk" />
   </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="GenealogyGraphView.resx">
+      <DependentUpon>GenealogyGraphView.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Fragment.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Fragment.cs	(revision 11851)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Fragment.cs	(revision 11852)
@@ -19,5 +19,4 @@
       set { root = value; }
     }
-
     [StorableConstructor]
     protected Fragment(bool deserializable) : base(deserializable) { }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs	(revision 11851)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs	(revision 11852)
@@ -154,5 +154,6 @@
       sb.AppendLine("graph fragmentgraph {");
       foreach (var v in Vertices) {
-        sb.AppendLine("\"" + v.Id + "\"[shape=circle, style = filled, width = " + v.Degree / 2.0 + ", label = " + v.Rank + ", fillcolor = \"" + ColorTranslator.ToHtml(GetColor(v)) + "\"]");
+        double width = Math.Max(0.5, v.Degree);
+        sb.AppendLine("\"" + v.Id + "\"[shape=circle, style = filled, width = " + width + ", label = " + v.Rank + "\n" + String.Format("{0:00}", v.Quality) + ", fillcolor = \"" + ColorTranslator.ToHtml(GetColor(v)) + "\"]");
       }
       foreach (var a in Arcs) {
@@ -167,4 +168,9 @@
       if (colorIndex >= ColorGradient.Colors.Count) return ColorGradient.Colors.Last();
       return ColorGradient.Colors[colorIndex];
+    }
+
+    public override void AddVertices(IEnumerable<IVertex> vertexList) {
+      base.AddVertices(vertexList);
+      RebuildDictionaries();
     }
   }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphNode.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphNode.cs	(revision 11851)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphNode.cs	(revision 11852)
@@ -62,4 +62,5 @@
       get { return InArcs.Select(a => a.Source); }
     }
+
     public IEnumerable<IGenealogyGraphNode> Children {
       get { return OutArcs.Select(a => a.Target); }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Symbols/VariableView.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Symbols/VariableView.cs	(revision 11851)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Symbols/VariableView.cs	(revision 11852)
@@ -132,5 +132,6 @@
         Content.Fixed = true;
         DeregisterContentEvents();
-        Content.VariableNames = variableNamesView.Content.CheckedItems.Select(x => x.Value).ToList();
+        Content.VariableNames = variableNamesView.Content.CheckedItems.Select(x => x.Value);
+        Content.AllVariableNames = variableNamesView.Content.Select(x => x.Value);
         RegisterContentEvents();
       }
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 11851)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.cs	(revision 11852)
@@ -25,4 +25,5 @@
 using System.Linq;
 using System.Windows.Forms;
+using HeuristicLab.Common;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views;
@@ -72,4 +73,20 @@
       var visualNode = (VisualGenealogyGraphNode)sender;
       var graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)visualNode.Data;
+
+      if (openNew_CheckBox.Checked) {
+        // get the ancestors into a new view
+        var cloner = new Cloner();
+
+        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));
+        }
+        //        graph.AddVertices(graphNode.Ancestors);
+        MainFormManager.MainForm.ShowContent(graph);
+      }
+
       if (graphNode.InArcs.Any()) {
         var fragment = graphNode.InArcs.Last().Data as IFragment<ISymbolicExpressionTreeNode>;
@@ -92,5 +109,4 @@
       var visualNode = (VisualTreeNode<ISymbolicExpressionTreeNode>)sender;
       var subtree = visualNode.Content;
-
       // highlight the selected subtree inside the displayed tree on the right hand side
       treeChart_ClearColors();
@@ -103,13 +119,17 @@
         var graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)genealogyGraphChart.SelectedGraphNode;
         var subtreeIndex = graphNode.Data.IterateNodesPrefix().ToList().IndexOf(subtree);
-        //        var fragmentGraph = SymbolicDataAnalysisExpressionTracing.TraceSubtree(graphNode, subtreeIndex);
         var traceGraph = TraceCalculator.TraceSubtree(graphNode, subtreeIndex);
-
         if (traceGraph.Vertices.Any()) {
+          genealogyGraphChart.UpdateEnabled = false;
+          genealogyGraphChart.ClearArcs();
+          //          genealogyGraphChart.ClearPrimitives();
           var genealogyNodes = traceGraph.Vertices.Select(v => Content.GetByContent(v.Data));
-          genealogyGraphChart.HighlightNodes(genealogyNodes);
-          foreach (var a in traceGraph.Arcs) {
-            genealogyGraphChart.HighlightArc(Content.GetByContent(a.Target.Data), Content.GetByContent(a.Source.Data));
-          }
+          //          genealogyGraphChart.HighlightNodes(graphNode.Ancestors, Color.Gray, false);
+          genealogyGraphChart.HighlightNodes(genealogyNodes, Color.Black, false);
+          //          foreach (var a in traceGraph.Arcs) {
+          //            genealogyGraphChart.HighlightArc(Content.GetByContent(a.Target.Data), Content.GetByContent(a.Source.Data));
+          //          }
+          genealogyGraphChart.UpdateEnabled = true;
+          genealogyGraphChart.EnforceUpdate();
           MainFormManager.MainForm.ShowContent(traceGraph); // display the fragment graph on the screen
         }
@@ -121,9 +141,9 @@
 
         var matchingVertices = matchingTrees.Select(x => Content.GetByContent(x));
-        graphChart_highlightMatchingVertices(matchingVertices);
+        graphChart_HighlightMatchingVertices(matchingVertices);
       }
     }
 
-    private void graphChart_highlightMatchingVertices(IEnumerable<IGenealogyGraphNode> vertices) {
+    private void graphChart_HighlightMatchingVertices(IEnumerable<IGenealogyGraphNode> vertices) {
       genealogyGraphChart.Chart.UpdateEnabled = false;
       genealogyGraphChart.ClearPrimitives();
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisSingleObjectiveValidationAnalyzer.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisSingleObjectiveValidationAnalyzer.cs	(revision 11851)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisSingleObjectiveValidationAnalyzer.cs	(revision 11852)
@@ -26,4 +26,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Data;
+using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -36,5 +37,5 @@
   [StorableClass]
   public abstract class SymbolicDataAnalysisSingleObjectiveValidationAnalyzer<T, U> : SymbolicDataAnalysisSingleObjectiveAnalyzer,
-    ISymbolicDataAnalysisValidationAnalyzer<T, U>
+    ISymbolicDataAnalysisValidationAnalyzer<T, U>, IStochasticOperator
     where T : class, ISymbolicDataAnalysisSingleObjectiveEvaluator<U>
     where U : class, IDataAnalysisProblemData {
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 11851)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionBeforeCrossoverOperator.cs	(revision 11852)
@@ -45,5 +45,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.GetByContent(parents[0]); // use the parent since it is actually the child before crossover (and the ChildParameter doesn't have a value yet)
+      var childVertex = GenealogyGraph.GetByContent(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/TraceCalculator.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/TraceCalculator.cs	(revision 11851)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/TraceCalculator.cs	(revision 11852)
@@ -204,6 +204,6 @@
         return;
       var lastTraceData = traceMap[last];
-      int lastSi = lastTraceData.Item1; // last subtree index
-      int lastFi = lastTraceData.Item2; // last fragment index
+      int lastSi = lastTraceData.Item1; // last subtree index (index of the traced subtree in the parent)
+      int lastFi = lastTraceData.Item2; // last fragment index (index of the fragment in the parent)
       var td = new Tuple<int, int, int, int>(si, fi, lastSi, lastFi); // trace data
       var arc = n.InArcs.SingleOrDefault(a => a.Source == last && a.Data.Equals(td));
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Tracking.sln
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Tracking.sln	(revision 11851)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Tracking.sln	(revision 11852)
@@ -184,7 +184,4 @@
 		HideSolutionNode = FALSE
 	EndGlobalSection
-	GlobalSection(Performance) = preSolution
-		HasPerformanceSessions = true
-	EndGlobalSection
 	GlobalSection(TestCaseManagementSettings) = postSolution
 		CategoryFile = HeuristicLab.Tracking.vsmdi
