Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/GraphicalSymbolicExpressionTreeView.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/GraphicalSymbolicExpressionTreeView.cs	(revision 11814)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/GraphicalSymbolicExpressionTreeView.cs	(revision 11817)
@@ -52,4 +52,10 @@
       symbolicExpressionTreeChart.Enabled = Content != null;
     }
+
+    public SymbolicExpressionTreeChart SymbolicExpressionTreeChart {
+      get {
+        return symbolicExpressionTreeChart;
+      }
+    }
   }
 }
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 11814)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 11817)
@@ -94,6 +94,5 @@
     }
 
-    public GenealogyGraphChart()
-      : base() {
+    public GenealogyGraphChart() {
       InitializeComponent();
 
@@ -198,11 +197,11 @@
         return;
       }
-      var visualNodes = Chart.GetAllPrimitives(e.Location).Where(p => p is VisualGenealogyGraphNode).ToList();
-      if (!visualNodes.Any()) {
+      var primitive = Chart.GetAllPrimitives(e.Location).FirstOrDefault(p => p is VisualGenealogyGraphNode);
+      if (primitive == null) {
         SelectedVisualNode = null;
         return;
       }
-      if (SelectedVisualNode == visualNodes[0]) return;
-      SelectedVisualNode = visualNodes[0] as VisualGenealogyGraphNode;
+      if (SelectedVisualNode == primitive) return;
+      SelectedVisualNode = primitive as VisualGenealogyGraphNode;
       if (SelectedVisualNode == null) return;
 
@@ -259,7 +258,7 @@
       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();
-      foreach (var ggn in GenealogyGraph.Ranks[rank]) {
-        foreach (var ancestor in ggn.Ancestors) {
+      var rank = GenealogyGraph.Ranks.Max(x => x.Key);
+      foreach (var graphNode in GenealogyGraph.GetByRank(rank)) {
+        foreach (var ancestor in graphNode.Ancestors) {
           foreach (var arc in ancestor.InArcs) {
             arc.Weight++;
@@ -357,4 +356,6 @@
   internal static class Util {
     public static Color GetColor(this IGenealogyGraphNode node) {
+      if (double.IsNaN(node.Quality))
+        return ColorGradient.Colors[0];
       var colorIndex = (int)Math.Round(node.Quality * ColorGradient.Colors.Count);
       if (colorIndex >= ColorGradient.Colors.Count) return ColorGradient.Colors.Last();
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.Designer.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.Designer.cs	(revision 11814)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.Designer.cs	(revision 11817)
@@ -1,5 +1,5 @@
 ﻿
 namespace HeuristicLab.EvolutionTracking.Views {
-  partial class GenealogyGraphView {
+  partial class GenealogyGraphView<T> {
     /// <summary> 
     /// Required designer variable.
@@ -26,16 +26,23 @@
     private void InitializeComponent() {
       this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.groupBox = new System.Windows.Forms.GroupBox();
+      this.lockGraph_checkBox = new System.Windows.Forms.CheckBox();
+      this.simpleLineages_checkBox = new System.Windows.Forms.CheckBox();
+      this.trace_checkBox = new System.Windows.Forms.CheckBox();
       this.genealogyGraphChart = new HeuristicLab.EvolutionTracking.Views.GenealogyGraphChart();
-      this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
       this.splitContainer.Panel1.SuspendLayout();
       this.splitContainer.Panel2.SuspendLayout();
       this.splitContainer.SuspendLayout();
+      this.groupBox.SuspendLayout();
       this.SuspendLayout();
       // 
       // splitContainer
       // 
-      this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.splitContainer.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer.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.splitContainer.Location = new System.Drawing.Point(3, 55);
       this.splitContainer.Name = "splitContainer";
       // 
@@ -47,12 +54,79 @@
       // 
       this.splitContainer.Panel2.Controls.Add(this.viewHost);
-      this.splitContainer.Size = new System.Drawing.Size(894, 678);
-      this.splitContainer.SplitterDistance = 417;
+      this.splitContainer.Size = new System.Drawing.Size(1394, 742);
+      this.splitContainer.SplitterDistance = 694;
       this.splitContainer.TabIndex = 0;
+      // 
+      // viewHost
+      // 
+      this.viewHost.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.viewHost.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+      this.viewHost.Caption = "View";
+      this.viewHost.Content = null;
+      this.viewHost.Enabled = false;
+      this.viewHost.Location = new System.Drawing.Point(0, 0);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.ReadOnly = false;
+      this.viewHost.Size = new System.Drawing.Size(697, 743);
+      this.viewHost.TabIndex = 0;
+      this.viewHost.ViewsLabelVisible = true;
+      this.viewHost.ViewType = null;
+      // 
+      // groupBox
+      // 
+      this.groupBox.Controls.Add(this.lockGraph_checkBox);
+      this.groupBox.Controls.Add(this.simpleLineages_checkBox);
+      this.groupBox.Controls.Add(this.trace_checkBox);
+      this.groupBox.Location = new System.Drawing.Point(3, 4);
+      this.groupBox.Name = "groupBox";
+      this.groupBox.Size = new System.Drawing.Size(411, 44);
+      this.groupBox.TabIndex = 1;
+      this.groupBox.TabStop = false;
+      this.groupBox.Text = "Genealogy Options";
+      // 
+      // lockGraph_checkBox
+      // 
+      this.lockGraph_checkBox.Appearance = System.Windows.Forms.Appearance.Button;
+      this.lockGraph_checkBox.AutoSize = true;
+      this.lockGraph_checkBox.Location = new System.Drawing.Point(157, 15);
+      this.lockGraph_checkBox.Name = "lockGraph_checkBox";
+      this.lockGraph_checkBox.Size = new System.Drawing.Size(73, 23);
+      this.lockGraph_checkBox.TabIndex = 0;
+      this.lockGraph_checkBox.Text = "Lock Graph";
+      this.lockGraph_checkBox.UseVisualStyleBackColor = true;
+      this.lockGraph_checkBox.CheckedChanged += new System.EventHandler(this.lockGraph_checkBox_CheckedChanged);
+      // 
+      // simpleLineages_checkBox
+      // 
+      this.simpleLineages_checkBox.Appearance = System.Windows.Forms.Appearance.Button;
+      this.simpleLineages_checkBox.AutoSize = true;
+      this.simpleLineages_checkBox.Location = new System.Drawing.Point(57, 15);
+      this.simpleLineages_checkBox.Name = "simpleLineages_checkBox";
+      this.simpleLineages_checkBox.Size = new System.Drawing.Size(94, 23);
+      this.simpleLineages_checkBox.TabIndex = 0;
+      this.simpleLineages_checkBox.Text = "Simple Lineages";
+      this.simpleLineages_checkBox.UseVisualStyleBackColor = true;
+      this.simpleLineages_checkBox.CheckedChanged += new System.EventHandler(this.simpleLineages_checkBox_CheckedChanged);
+      // 
+      // trace_checkBox
+      // 
+      this.trace_checkBox.Appearance = System.Windows.Forms.Appearance.Button;
+      this.trace_checkBox.AutoSize = true;
+      this.trace_checkBox.Location = new System.Drawing.Point(6, 15);
+      this.trace_checkBox.Name = "trace_checkBox";
+      this.trace_checkBox.Size = new System.Drawing.Size(45, 23);
+      this.trace_checkBox.TabIndex = 0;
+      this.trace_checkBox.Text = "Trace";
+      this.trace_checkBox.UseVisualStyleBackColor = true;
+      this.trace_checkBox.CheckedChanged += new System.EventHandler(this.trace_checkBox_CheckedChanged);
       // 
       // 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.Dock = System.Windows.Forms.DockStyle.Fill;
       this.genealogyGraphChart.GenealogyGraph = null;
       this.genealogyGraphChart.Location = new System.Drawing.Point(0, 0);
@@ -61,21 +135,7 @@
       this.genealogyGraphChart.ScaleOnResize = true;
       this.genealogyGraphChart.SimpleLineages = false;
-      this.genealogyGraphChart.Size = new System.Drawing.Size(417, 678);
-      this.genealogyGraphChart.TabIndex = 2;
+      this.genealogyGraphChart.Size = new System.Drawing.Size(689, 738);
+      this.genealogyGraphChart.TabIndex = 0;
       this.genealogyGraphChart.TraceFragments = false;
-      // 
-      // viewHost
-      // 
-      this.viewHost.Caption = "View";
-      this.viewHost.Content = null;
-      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.viewHost.Enabled = false;
-      this.viewHost.Location = new System.Drawing.Point(0, 0);
-      this.viewHost.Name = "viewHost";
-      this.viewHost.ReadOnly = false;
-      this.viewHost.Size = new System.Drawing.Size(473, 678);
-      this.viewHost.TabIndex = 0;
-      this.viewHost.ViewsLabelVisible = true;
-      this.viewHost.ViewType = null;
       // 
       // GenealogyGraphView
@@ -83,11 +143,14 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.groupBox);
       this.Controls.Add(this.splitContainer);
       this.Name = "GenealogyGraphView";
-      this.Size = new System.Drawing.Size(894, 678);
+      this.Size = new System.Drawing.Size(1400, 800);
       this.splitContainer.Panel1.ResumeLayout(false);
       this.splitContainer.Panel2.ResumeLayout(false);
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
       this.splitContainer.ResumeLayout(false);
+      this.groupBox.ResumeLayout(false);
+      this.groupBox.PerformLayout();
       this.ResumeLayout(false);
 
@@ -99,4 +162,8 @@
     protected MainForm.WindowsForms.ViewHost viewHost;
     protected GenealogyGraphChart genealogyGraphChart;
+    private System.Windows.Forms.GroupBox groupBox;
+    protected System.Windows.Forms.CheckBox trace_checkBox;
+    protected System.Windows.Forms.CheckBox simpleLineages_checkBox;
+    protected System.Windows.Forms.CheckBox lockGraph_checkBox;
 
   }
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.cs	(revision 11814)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.cs	(revision 11817)
@@ -1,4 +1,4 @@
 ﻿using System.Windows.Forms;
-using HeuristicLab.Common;
+using HeuristicLab.Core;
 using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
@@ -6,8 +6,8 @@
 namespace HeuristicLab.EvolutionTracking.Views {
   [View("GenealogyGraphView")]
-  [Content(typeof(IGenealogyGraph), IsDefaultView = false)]
-  public partial class GenealogyGraphView : ItemView {
-    public new IGenealogyGraph Content {
-      get { return (IGenealogyGraph)base.Content; }
+  [Content(typeof(IGenealogyGraph<>), IsDefaultView = false)]
+  public partial class GenealogyGraphView<T> : ItemView where T : class,IItem {
+    public new IGenealogyGraph<T> Content {
+      get { return (IGenealogyGraph<T>)base.Content; }
       set { base.Content = value; }
     }
@@ -20,4 +20,5 @@
       // TODO: Deregister your event handlers here
       genealogyGraphChart.GenealogyGraphNodeClicked -= graphChart_GenealogyGraphNodeClicked;
+      genealogyGraphChart.GenealogyGraphNodeDoubleClicked -= graphChart_GenealogyGraphNodeDoubleClicked;
       base.DeregisterContentEvents();
     }
@@ -27,4 +28,5 @@
       // TODO: Register your event handlers here
       genealogyGraphChart.GenealogyGraphNodeClicked += graphChart_GenealogyGraphNodeClicked;
+      genealogyGraphChart.GenealogyGraphNodeDoubleClicked += graphChart_GenealogyGraphNodeDoubleClicked;
     }
 
@@ -45,8 +47,26 @@
     // TODO: Put event handlers of child controls here.
     public virtual void graphChart_GenealogyGraphNodeClicked(object sender, MouseEventArgs args) {
-      var content = ((VisualGenealogyGraphNode)sender).Data.Data;
-      if (content != null) {
-        viewHost.Content = (IContent)content;
-      }
+      var visualNode = (VisualGenealogyGraphNode)sender;
+      var graphNode = (IGenealogyGraphNode<T>)visualNode.Data;
+      if (graphNode == null) return;
+      var content = graphNode.Data;
+      if (content == null) return;
+      viewHost.Content = content;
+    }
+    public virtual void graphChart_GenealogyGraphNodeDoubleClicked(object sender, MouseEventArgs arcs) {
+    }
+    #endregion
+
+    #region events for configuring the behavior of the genealogy chart (trace/match, simple lineages, etc)
+    private void trace_checkBox_CheckedChanged(object sender, System.EventArgs e) {
+      genealogyGraphChart.TraceFragments = trace_checkBox.Checked;
+    }
+
+    private void simpleLineages_checkBox_CheckedChanged(object sender, System.EventArgs e) {
+      genealogyGraphChart.SimpleLineages = simpleLineages_checkBox.Checked;
+    }
+
+    private void lockGraph_checkBox_CheckedChanged(object sender, System.EventArgs e) {
+      genealogyGraphChart.LockGenealogy = lockGraph_checkBox.Checked;
     }
     #endregion
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 11814)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj	(revision 11817)
@@ -279,15 +279,9 @@
       <DependentUpon>FragmentGraphView.cs</DependentUpon>
     </Compile>
-    <Compile Include="Tracking\SymboldDataAnalysisGenealogyView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Tracking\SymboldDataAnalysisGenealogyView.Designer.cs">
-      <DependentUpon>SymboldDataAnalysisGenealogyView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Tracking\SymbolicDataAnalysisExpressionGenealogyGraphChart.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Tracking\SymbolicDataAnalysisExpressionGenealogyGraphChart.Designer.cs">
-      <DependentUpon>SymbolicDataAnalysisExpressionGenealogyGraphChart.cs</DependentUpon>
+    <Compile Include="Tracking\SymbolicDataAnalysisGenealogyGraphView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Tracking\SymbolicDataAnalysisGenealogyGraphView.Designer.cs">
+      <DependentUpon>SymbolicDataAnalysisGenealogyGraphView.cs</DependentUpon>
     </Compile>
     <Compile Include="Tracking\SymbolicDataAnalysisExpressionLineageExplorerView.cs">
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymboldDataAnalysisGenealogyView.Designer.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymboldDataAnalysisGenealogyView.Designer.cs	(revision 11814)
+++ 	(revision )
@@ -1,204 +1,0 @@
-﻿#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.Drawing;
-
-namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
-  partial class SymboldDataAnalysisGenealogyView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
-      this.symbolicExpressionTreeChart = new HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views.SymbolicExpressionTreeChart();
-      this.groupBox1 = new System.Windows.Forms.GroupBox();
-      this.hotPaths_button = new System.Windows.Forms.Button();
-      this.simpleLineages_checkBox = new System.Windows.Forms.CheckBox();
-      this.lockGraph_checkBox = new System.Windows.Forms.CheckBox();
-      this.trace_checkBox = new System.Windows.Forms.CheckBox();
-      this.genealogyGraphChart = new HeuristicLab.Problems.DataAnalysis.Symbolic.Views.SymbolicDataAnalysisExpressionGenealogyGraphChart();
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
-      this.splitContainer1.Panel1.SuspendLayout();
-      this.splitContainer1.Panel2.SuspendLayout();
-      this.splitContainer1.SuspendLayout();
-      this.groupBox1.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // splitContainer1
-      // 
-      this.splitContainer1.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.splitContainer1.Location = new System.Drawing.Point(0, 57);
-      this.splitContainer1.Name = "splitContainer1";
-      // 
-      // splitContainer1.Panel1
-      // 
-      this.splitContainer1.Panel1.Controls.Add(this.genealogyGraphChart);
-      // 
-      // splitContainer1.Panel2
-      // 
-      this.splitContainer1.Panel2.Controls.Add(this.symbolicExpressionTreeChart);
-      this.splitContainer1.Size = new System.Drawing.Size(1244, 695);
-      this.splitContainer1.SplitterDistance = 605;
-      this.splitContainer1.TabIndex = 0;
-      // 
-      // symbolicExpressionTreeChart
-      // 
-      this.symbolicExpressionTreeChart.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.symbolicExpressionTreeChart.BackgroundColor = System.Drawing.Color.White;
-      this.symbolicExpressionTreeChart.LineColor = System.Drawing.Color.Black;
-      this.symbolicExpressionTreeChart.Location = new System.Drawing.Point(0, 0);
-      this.symbolicExpressionTreeChart.Name = "symbolicExpressionTreeChart";
-      this.symbolicExpressionTreeChart.Size = new System.Drawing.Size(635, 692);
-      this.symbolicExpressionTreeChart.Spacing = 5;
-      this.symbolicExpressionTreeChart.SuspendRepaint = false;
-      this.symbolicExpressionTreeChart.TabIndex = 0;
-      this.symbolicExpressionTreeChart.TextFont = new System.Drawing.Font("Microsoft Sans Serif", 10F);
-      this.symbolicExpressionTreeChart.Tree = null;
-      // 
-      // groupBox1
-      // 
-      this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.groupBox1.Controls.Add(this.hotPaths_button);
-      this.groupBox1.Controls.Add(this.simpleLineages_checkBox);
-      this.groupBox1.Controls.Add(this.lockGraph_checkBox);
-      this.groupBox1.Controls.Add(this.trace_checkBox);
-      this.groupBox1.Location = new System.Drawing.Point(3, 3);
-      this.groupBox1.Name = "groupBox1";
-      this.groupBox1.Size = new System.Drawing.Size(1241, 48);
-      this.groupBox1.TabIndex = 4;
-      this.groupBox1.TabStop = false;
-      this.groupBox1.Text = "Controls";
-      // 
-      // hotPaths_button
-      // 
-      this.hotPaths_button.Location = new System.Drawing.Point(263, 15);
-      this.hotPaths_button.Name = "hotPaths_button";
-      this.hotPaths_button.Size = new System.Drawing.Size(75, 23);
-      this.hotPaths_button.TabIndex = 7;
-      this.hotPaths_button.Text = "Hot paths";
-      this.hotPaths_button.UseVisualStyleBackColor = true;
-      this.hotPaths_button.Click += new System.EventHandler(this.hotPaths_button_Click);
-      // 
-      // simpleLineages_checkBox
-      // 
-      this.simpleLineages_checkBox.AutoSize = true;
-      this.simpleLineages_checkBox.Location = new System.Drawing.Point(94, 19);
-      this.simpleLineages_checkBox.Name = "simpleLineages_checkBox";
-      this.simpleLineages_checkBox.Size = new System.Drawing.Size(103, 17);
-      this.simpleLineages_checkBox.TabIndex = 6;
-      this.simpleLineages_checkBox.Text = "Simple Lineages";
-      this.simpleLineages_checkBox.UseVisualStyleBackColor = true;
-      this.simpleLineages_checkBox.CheckedChanged += new System.EventHandler(this.simpleLineages_checkBox_CheckedChanged);
-      // 
-      // lockGraph_checkBox
-      // 
-      this.lockGraph_checkBox.AutoSize = true;
-      this.lockGraph_checkBox.Location = new System.Drawing.Point(6, 19);
-      this.lockGraph_checkBox.Name = "lockGraph_checkBox";
-      this.lockGraph_checkBox.Size = new System.Drawing.Size(82, 17);
-      this.lockGraph_checkBox.TabIndex = 5;
-      this.lockGraph_checkBox.Text = "Lock Graph";
-      this.lockGraph_checkBox.UseVisualStyleBackColor = true;
-      this.lockGraph_checkBox.CheckedChanged += new System.EventHandler(this.lockGraph_checkBox_CheckedChanged);
-      // 
-      // trace_checkBox
-      // 
-      this.trace_checkBox.AutoSize = true;
-      this.trace_checkBox.Location = new System.Drawing.Point(203, 19);
-      this.trace_checkBox.Name = "trace_checkBox";
-      this.trace_checkBox.Size = new System.Drawing.Size(54, 17);
-      this.trace_checkBox.TabIndex = 4;
-      this.trace_checkBox.Text = "Trace";
-      this.trace_checkBox.UseVisualStyleBackColor = true;
-      this.trace_checkBox.CheckedChanged += new System.EventHandler(this.trace_checkBox_CheckedChanged);
-      // 
-      // 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(-5, 0);
-      this.genealogyGraphChart.LockGenealogy = false;
-      this.genealogyGraphChart.Name = "genealogyGraphChart";
-      this.genealogyGraphChart.ScaleOnResize = true;
-      this.genealogyGraphChart.SimpleLineages = false;
-      this.genealogyGraphChart.Size = new System.Drawing.Size(607, 692);
-      this.genealogyGraphChart.TabIndex = 0;
-      this.genealogyGraphChart.TraceFragments = false;
-      // 
-      // SymboldDataAnalysisGenealogyView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.groupBox1);
-      this.Controls.Add(this.splitContainer1);
-      this.Name = "SymboldDataAnalysisGenealogyView";
-      this.Size = new System.Drawing.Size(1247, 755);
-      this.splitContainer1.Panel1.ResumeLayout(false);
-      this.splitContainer1.Panel2.ResumeLayout(false);
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
-      this.splitContainer1.ResumeLayout(false);
-      this.groupBox1.ResumeLayout(false);
-      this.groupBox1.PerformLayout();
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.SplitContainer splitContainer1;
-    private SymbolicDataAnalysisExpressionGenealogyGraphChart genealogyGraphChart;
-    private Encodings.SymbolicExpressionTreeEncoding.Views.SymbolicExpressionTreeChart symbolicExpressionTreeChart;
-    private System.Windows.Forms.GroupBox groupBox1;
-    private System.Windows.Forms.CheckBox simpleLineages_checkBox;
-    private System.Windows.Forms.CheckBox lockGraph_checkBox;
-    private System.Windows.Forms.CheckBox trace_checkBox;
-    private System.Windows.Forms.Button hotPaths_button;
-
-  }
-}
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 11814)
+++ 	(revision )
@@ -1,193 +1,0 @@
-﻿#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;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using System.Windows.Forms;
-using HeuristicLab.Core.Views;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views;
-using HeuristicLab.EvolutionTracking;
-using HeuristicLab.EvolutionTracking.Views;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
-  [View("SymboldDataAnalysisGenealogyView")]
-  [Content(typeof(IGenealogyGraph<ISymbolicExpressionTree>), IsDefaultView = true)]
-  public partial class SymboldDataAnalysisGenealogyView : ItemView {
-    private readonly ISymbolicExpressionTreeNodeSimilarityComparer comparer;
-
-    public SymboldDataAnalysisGenealogyView() {
-      InitializeComponent();
-
-      comparer = new SymbolicExpressionTreeNodeSimilarityComparer();
-    }
-
-    public new IGenealogyGraph<ISymbolicExpressionTree> Content {
-      get { return (IGenealogyGraph<ISymbolicExpressionTree>)base.Content; }
-      set { base.Content = value; }
-    }
-
-    #region event handlers
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content != null) {
-        genealogyGraphChart.GenealogyGraph = Content;
-      }
-    }
-
-    #endregion
-
-    protected override void RegisterContentEvents() {
-      genealogyGraphChart.GenealogyGraphNodeClicked += graphChart_GenealogyGraphNodeClicked;
-      genealogyGraphChart.GenealogyGraphNodeDoubleClicked += graphChart_GenealogyGraphNodeDoubleClicked;
-      symbolicExpressionTreeChart.SymbolicExpressionTreeNodeClicked += treeChart_SymbolicExpressionNodeClicked;
-      base.RegisterContentEvents();
-    }
-
-    protected override void DeregisterContentEvents() {
-      base.DeregisterContentEvents();
-      genealogyGraphChart.GenealogyGraphNodeClicked -= graphChart_GenealogyGraphNodeClicked;
-      symbolicExpressionTreeChart.SymbolicExpressionTreeNodeClicked -= treeChart_SymbolicExpressionNodeClicked;
-    }
-
-    public void graphChart_GenealogyGraphNodeClicked(object sender, MouseEventArgs args) {
-      var visualNode = (VisualGenealogyGraphNode)sender;
-      var graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)visualNode.Data;
-      var tree = graphNode.Data;
-      symbolicExpressionTreeChart.Tree = tree;
-      if (graphNode.InArcs.Any()) {
-        var fragment = graphNode.InArcs.Last().Data as IFragment<ISymbolicExpressionTreeNode>;
-        if (fragment != null) {
-          treeChart_HighlightSubtree(graphNode.Data.NodeAt(fragment.Index1));
-        }
-      }
-      if (graphNode.OutArcs.Any()) {
-        var td = graphNode.OutArcs.Last().Data as Tuple<int, int, int, int>;
-        if (td != null) {
-          var s = graphNode.Data.NodeAt(td.Item3); // subtree index
-          var f = graphNode.Data.NodeAt(td.Item4); // fragment index 
-          treeChart_HighlightSubtree(s, Color.Orange);
-          treeChart_HighlightSubtree(f, Color.RoyalBlue);
-        }
-      }
-    }
-
-    public void graphChart_GenealogyGraphNodeDoubleClicked(object sender, MouseEventArgs arcs) {
-      var visualNode = (VisualGenealogyGraphNode)sender;
-      var graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)visualNode.Data;
-      //      var tree = graphNode.Data;
-      //      var model = new RegressionModel();
-      //      var solution = new RegressionSolution()
-      //      MainFormManager.MainForm.ShowContent(tree);
-    }
-
-    public void treeChart_SymbolicExpressionNodeClicked(object sender, MouseEventArgs args) {
-      var visualNode = (VisualTreeNode<ISymbolicExpressionTreeNode>)sender;
-      var subtree = visualNode.Content;
-
-      // highlight the selected subtree inside the displayed tree on the right hand side
-      treeChart_ClearColors();
-      treeChart_HighlightSubtree(subtree);
-
-      bool trace = genealogyGraphChart.TraceFragments; // check whether the mode is 'trace' or 'match'
-
-      if (trace) {
-        // perform fragment tracing
-        var graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)genealogyGraphChart.SelectedGraphNode;
-        var subtreeIndex = graphNode.Data.IterateNodesPrefix().ToList().IndexOf(subtree);
-        var fragmentGraph = SymbolicDataAnalysisExpressionTracing.TraceSubtree(graphNode, subtreeIndex);
-
-        if (fragmentGraph.Vertices.Any()) {
-          var genealogyNodes = fragmentGraph.Vertices.Select(v => Content.GetByContent(v.Data));
-          genealogyGraphChart.HighlightNodes(genealogyNodes);
-          foreach (var a in fragmentGraph.Arcs) {
-            genealogyGraphChart.HighlightArc(Content.GetByContent(a.Target.Data), Content.GetByContent(a.Source.Data));
-          }
-          MainFormManager.MainForm.ShowContent(fragmentGraph); // display the fragment graph on the screen
-        }
-      } else {
-        // perform matching like it was done before
-        // currently there is no possibility to specify the subtree matching criteria
-        var trees = Content.Vertices.Select(x => x.Data);
-        var matchingTrees = trees.Where(x => x.Root.ContainsSubtree(subtree, comparer));
-
-        var matchingVertices = matchingTrees.Select(x => Content.GetByContent(x));
-        graphChart_highlightMatchingVertices(matchingVertices);
-      }
-    }
-
-    private void graphChart_highlightMatchingVertices(IEnumerable<IGenealogyGraphNode> vertices) {
-      genealogyGraphChart.Chart.UpdateEnabled = false;
-      genealogyGraphChart.ClearPrimitives();
-      genealogyGraphChart.HighlightNodes(vertices);
-      genealogyGraphChart.Chart.UpdateEnabled = true;
-      genealogyGraphChart.Chart.EnforceUpdate();
-    }
-
-    private void treeChart_ClearColors() {
-      foreach (var node in symbolicExpressionTreeChart.Tree.IterateNodesPrefix()) {
-        var visualNode = symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(node);
-        if (visualNode != null) {
-          visualNode.LineColor = Color.Black;
-          visualNode.FillColor = Color.Transparent;
-        }
-      }
-      symbolicExpressionTreeChart.RepaintNodes();
-    }
-
-    private void treeChart_HighlightSubtree(ISymbolicExpressionTreeNode subtree, Color? color = null) {
-      Color myColor = color == null ? Color.RoyalBlue : (Color)color;
-      foreach (var s in subtree.IterateNodesPrefix()) {
-        var visualNode = symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(s);
-        visualNode.LineColor = myColor;
-        //        visualNode.FillColor = myColor;
-
-        foreach (var c in s.Subtrees) {
-          var visualArc = symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNodeConnection(s, c);
-          visualArc.LineColor = myColor;
-        }
-      }
-      symbolicExpressionTreeChart.RepaintNodes();
-    }
-
-    #region events for configuring the behavior of the genealogy chart (trace/match, simple lineages, etc)
-    private void trace_checkBox_CheckedChanged(object sender, System.EventArgs e) {
-      genealogyGraphChart.TraceFragments = trace_checkBox.Checked;
-    }
-
-    private void simpleLineages_checkBox_CheckedChanged(object sender, System.EventArgs e) {
-      genealogyGraphChart.SimpleLineages = simpleLineages_checkBox.Checked;
-    }
-
-    private void lockGraph_checkBox_CheckedChanged(object sender, System.EventArgs e) {
-      genealogyGraphChart.LockGenealogy = lockGraph_checkBox.Checked;
-    }
-    #endregion
-
-    private void hotPaths_button_Click(object sender, System.EventArgs e) {
-      genealogyGraphChart.HighlightHotPaths();
-    }
-  }
-}
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisExpressionGenealogyGraphChart.Designer.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisExpressionGenealogyGraphChart.Designer.cs	(revision 11814)
+++ 	(revision )
@@ -1,48 +1,0 @@
-﻿using System.Windows.Forms;
-
-namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
-  partial class SymbolicDataAnalysisExpressionGenealogyGraphChart {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // pictureBox
-      // 
-      this.pictureBox.MouseDoubleClick += new MouseEventHandler(this.pictureBox_DoubleClick);
-      // 
-      // SymbolicDataAnalysisExpressionGenealogyGraphChart
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Name = "SymbolicDataAnalysisExpressionGenealogyGraphChart";
-      this.Controls.SetChildIndex(this.pictureBox, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-  }
-}
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisExpressionGenealogyGraphChart.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisExpressionGenealogyGraphChart.cs	(revision 11814)
+++ 	(revision )
@@ -1,51 +1,0 @@
-﻿#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.Linq;
-using System.Windows.Forms;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.EvolutionTracking;
-using HeuristicLab.EvolutionTracking.Views;
-
-namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
-  public partial class SymbolicDataAnalysisExpressionGenealogyGraphChart : GenealogyGraphChart {
-    public SymbolicDataAnalysisExpressionGenealogyGraphChart() {
-      InitializeComponent();
-    }
-
-    public new IGenealogyGraph<ISymbolicExpressionTree> GenealogyGraph {
-      get { return (IGenealogyGraph<ISymbolicExpressionTree>)base.GenealogyGraph; }
-      set { base.GenealogyGraph = value; }
-    }
-
-    private void pictureBox_DoubleClick(object sender, MouseEventArgs e) {
-      var visualNodes = Chart.GetAllPrimitives(e.Location).Where(p => p is VisualGenealogyGraphNode).ToList();
-      if (!visualNodes.Any()) {
-        SelectedVisualNode = null;
-        return;
-      }
-      var visualNode = visualNodes.First();
-
-      base.OnGenealogyGraphNodeDoubleClicked(visualNode, e);
-    }
-    // add event handlers here for processing events coming from the tree chart
-  }
-}
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.Designer.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.Designer.cs	(revision 11817)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.Designer.cs	(revision 11817)
@@ -0,0 +1,61 @@
+﻿#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
+
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
+  partial class SymbolicDataAnalysisGenealogyGraphView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.SuspendLayout();
+      // 
+      // SymbolicDataAnalysisGenealogyGraphView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "SymbolicDataAnalysisGenealogyGraphView";
+      this.Size = new System.Drawing.Size(1247, 755);
+      this.ResumeLayout(false);
+    }
+
+    #endregion
+  }
+}
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 11817)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.cs	(revision 11817)
@@ -0,0 +1,163 @@
+﻿#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;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views;
+using HeuristicLab.EvolutionTracking;
+using HeuristicLab.EvolutionTracking.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
+  [View("SymbolicDataAnalysisGenealogyGraphView")]
+  [Content(typeof(IGenealogyGraph<ISymbolicExpressionTree>), IsDefaultView = true)]
+  public partial class SymbolicDataAnalysisGenealogyGraphView : SymbolicDataAnalysisGenealogyGraphViewDesignable {
+    private readonly ISymbolicExpressionTreeNodeSimilarityComparer comparer;
+
+    public SymbolicDataAnalysisGenealogyGraphView() {
+      InitializeComponent();
+      comparer = new SymbolicExpressionTreeNodeSimilarityComparer();
+      viewHost.ViewType = typeof(GraphicalSymbolicExpressionTreeView);
+    }
+    #region event handlers
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content != null) { genealogyGraphChart.GenealogyGraph = Content; }
+    }
+    #endregion
+
+    public SymbolicExpressionTreeChart SymbolicExpressionTreeChart {
+      get {
+        var view = (GraphicalSymbolicExpressionTreeView)base.viewHost.ActiveView;
+        return view == null ? null : view.SymbolicExpressionTreeChart;
+      }
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      if (SymbolicExpressionTreeChart != null)
+        SymbolicExpressionTreeChart.SymbolicExpressionTreeNodeClicked += treeChart_SymbolicExpressionTreeNodeClicked;
+    }
+
+    protected override void DeregisterContentEvents() {
+      if (SymbolicExpressionTreeChart != null)
+        SymbolicExpressionTreeChart.SymbolicExpressionTreeNodeClicked -= treeChart_SymbolicExpressionTreeNodeClicked;
+      base.DeregisterContentEvents();
+    }
+
+    public override void graphChart_GenealogyGraphNodeClicked(object sender, MouseEventArgs args) {
+      base.graphChart_GenealogyGraphNodeClicked(sender, args);
+      var visualNode = (VisualGenealogyGraphNode)sender;
+      var graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)visualNode.Data;
+      if (graphNode.InArcs.Any()) {
+        var fragment = graphNode.InArcs.Last().Data as IFragment<ISymbolicExpressionTreeNode>;
+        if (fragment != null) {
+          treeChart_HighlightSubtree(graphNode.Data.NodeAt(fragment.Index1));
+        }
+      }
+      if (graphNode.OutArcs.Any()) {
+        var td = graphNode.OutArcs.Last().Data as Tuple<int, int, int, int>;
+        if (td != null) {
+          var s = graphNode.Data.NodeAt(td.Item3); // subtree index
+          var f = graphNode.Data.NodeAt(td.Item4); // fragment index 
+          treeChart_HighlightSubtree(s, Color.Orange);
+          treeChart_HighlightSubtree(f, Color.RoyalBlue);
+        }
+      }
+    }
+
+    public void treeChart_SymbolicExpressionTreeNodeClicked(object sender, MouseEventArgs args) {
+      var visualNode = (VisualTreeNode<ISymbolicExpressionTreeNode>)sender;
+      var subtree = visualNode.Content;
+
+      // highlight the selected subtree inside the displayed tree on the right hand side
+      treeChart_ClearColors();
+      treeChart_HighlightSubtree(subtree);
+
+      bool trace = genealogyGraphChart.TraceFragments; // check whether we are in 'trace' or 'match' mode
+
+      if (trace) {
+        // perform fragment tracing
+        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()) {
+          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));
+          }
+          MainFormManager.MainForm.ShowContent(traceGraph); // display the fragment graph on the screen
+        }
+      } else {
+        // perform matching like it was done before
+        // currently there is no possibility to specify the subtree matching criteria
+        var trees = Content.Vertices.Select(x => x.Data);
+        var matchingTrees = trees.Where(x => x.Root.ContainsSubtree(subtree, comparer));
+
+        var matchingVertices = matchingTrees.Select(x => Content.GetByContent(x));
+        graphChart_highlightMatchingVertices(matchingVertices);
+      }
+    }
+
+    private void graphChart_highlightMatchingVertices(IEnumerable<IGenealogyGraphNode> vertices) {
+      genealogyGraphChart.Chart.UpdateEnabled = false;
+      genealogyGraphChart.ClearPrimitives();
+      genealogyGraphChart.HighlightNodes(vertices);
+      genealogyGraphChart.Chart.UpdateEnabled = true;
+      genealogyGraphChart.Chart.EnforceUpdate();
+    }
+
+    private void treeChart_ClearColors() {
+      foreach (var node in SymbolicExpressionTreeChart.Tree.IterateNodesPrefix()) {
+        var visualNode = SymbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(node);
+        if (visualNode != null) {
+          visualNode.LineColor = Color.Black;
+          visualNode.FillColor = Color.Transparent;
+        }
+      }
+      SymbolicExpressionTreeChart.RepaintNodes();
+    }
+
+    private void treeChart_HighlightSubtree(ISymbolicExpressionTreeNode subtree, Color? color = null) {
+      Color myColor = color ?? Color.RoyalBlue;
+      foreach (var s in subtree.IterateNodesPrefix()) {
+        var visualNode = SymbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(s);
+        visualNode.LineColor = myColor;
+        //        visualNode.FillColor = myColor;
+
+        foreach (var c in s.Subtrees) {
+          var visualArc = SymbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNodeConnection(s, c);
+          visualArc.LineColor = myColor;
+        }
+      }
+      SymbolicExpressionTreeChart.RepaintNodes();
+    }
+  }
+
+  public class SymbolicDataAnalysisGenealogyGraphViewDesignable : GenealogyGraphView<ISymbolicExpressionTree> { }
+}
