Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionTreeTile.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionTreeTile.cs	(revision 10745)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionTreeTile.cs	(revision 10746)
@@ -23,4 +23,5 @@
 using System.Collections.Generic;
 using System.Drawing;
+using System.Drawing.Drawing2D;
 using System.Linq;
 using HeuristicLab.Common;
@@ -37,4 +38,7 @@
     public int PreferredNodeWidth { get; set; }
     public int PreferredNodeHeight { get; set; }
+    public ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode> LayoutEngine { get; set; }
+    private readonly Dictionary<IPrimitive, ISymbolicExpressionTreeNode> primitivesToNodes;
+    private readonly Dictionary<ISymbolicExpressionTreeNode, IPrimitive> nodesToPrimitives;
 
     private Size size;
@@ -70,4 +74,16 @@
     }
 
+    public IPrimitive GetPrimitive(ISymbolicExpressionTreeNode node) {
+      IPrimitive primitive;
+      nodesToPrimitives.TryGetValue(node, out primitive);
+      return primitive;
+    }
+
+    public ISymbolicExpressionTreeNode GetExpressionTreeNode(IPrimitive primitive) {
+      ISymbolicExpressionTreeNode node;
+      primitivesToNodes.TryGetValue(primitive, out node);
+      return node;
+    }
+
     private ISymbolicExpressionTree symbolicExpressionTree;
     public ISymbolicExpressionTree SymbolicExpressionTree {
@@ -81,5 +97,6 @@
     new private void Clear() {
       Group.Clear();
-      primitiveMap.Clear();
+      primitivesToNodes.Clear();
+      nodesToPrimitives.Clear();
     }
 
@@ -92,10 +109,9 @@
       }
     }
-    public ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode> LayoutEngine { get; set; }
-    private readonly Dictionary<IPrimitive, ISymbolicExpressionTreeNode> primitiveMap;
 
     public SymbolicExpressionTreeTile(IChart chart)
       : base(chart) {
-      primitiveMap = new Dictionary<IPrimitive, ISymbolicExpressionTreeNode>();
+      primitivesToNodes = new Dictionary<IPrimitive, ISymbolicExpressionTreeNode>();
+      nodesToPrimitives = new Dictionary<ISymbolicExpressionTreeNode, IPrimitive>();
       PreferredNodeWidth = 80;
       PreferredNodeHeight = 40;
@@ -124,4 +140,5 @@
         var upperRight = new PointD(visualNode.X + preferredNodeWidth, visualNode.Y + preferredNodeHeight);
         var node = visualNode.Content;
+
         RectangularPrimitiveBase rectangularPrimitive;
         if (node.SubtreeCount == 0) {
@@ -131,5 +148,6 @@
         }
 
-        primitiveMap.Add(rectangularPrimitive, node); // to be able to retrieve nodes via primitives
+        primitivesToNodes.Add(rectangularPrimitive, node); // to be able to retrieve nodes via primitives
+        nodesToPrimitives.Add(node, rectangularPrimitive);
         this.Add(rectangularPrimitive);
 
@@ -179,4 +197,9 @@
       }
     }
+
+    public override void Draw(Graphics graphics) {
+      graphics.SmoothingMode = SmoothingMode.HighQuality;
+      base.Draw(graphics);
+    }
   }
 }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 10745)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 10746)
@@ -225,6 +225,7 @@
     private static void DrawLineage(VisualGenealogyGraphNode node, Func<VisualGenealogyGraphNode, IEnumerable<VisualGenealogyGraphArc>> arcSelector, Func<VisualGenealogyGraphArc, VisualGenealogyGraphNode> nodeSelector) {
       var brush = (SolidBrush)node.Brush;
+      if (brush.Color != Color.Transparent) return; // this lineage was already drawn (avoid redrawing common ancestors)
       brush.Color = node.Data.GetColor();
-      var arcs = arcSelector(node).ToList();
+      var arcs = arcSelector(node);
       foreach (var arc in arcs) {
         var source = arc.Source.Data;
@@ -234,5 +235,4 @@
         arc.Pen.Brush = new LinearGradientBrush(start, end, source.GetColor(), target.GetColor());
         arc.Pen.Color = Color.Transparent;
-        //        if (arc == arcs[0]) { arc.Pen.Width = 2; } // mark connection to the root parent
         DrawLineage(nodeSelector(arc), arcSelector, nodeSelector);
       }
Index: anches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/FragmentGraphView.Designer.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/FragmentGraphView.Designer.cs	(revision 10745)
+++ 	(revision )
@@ -1,55 +1,0 @@
-﻿namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
-  partial class FragmentGraphView {
-    /// <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.symbolicExpressionChartControl = new HeuristicLab.Problems.DataAnalysis.Symbolic.Views.SymbolicExpressionChartControl();
-      this.SuspendLayout();
-      // 
-      // symbolicExpressionChartControl
-      // 
-      this.symbolicExpressionChartControl.BackColor = System.Drawing.SystemColors.Control;
-      this.symbolicExpressionChartControl.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.symbolicExpressionChartControl.Location = new System.Drawing.Point(0, 0);
-      this.symbolicExpressionChartControl.Name = "symbolicExpressionChartControl";
-      this.symbolicExpressionChartControl.ScaleOnResize = true;
-      this.symbolicExpressionChartControl.Size = new System.Drawing.Size(1144, 682);
-      this.symbolicExpressionChartControl.TabIndex = 0;
-      this.symbolicExpressionChartControl.UpdateEnabled = true;
-      // 
-      // FragmentGraphView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.symbolicExpressionChartControl);
-      this.Name = "FragmentGraphView";
-      this.Size = new System.Drawing.Size(1144, 682);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private SymbolicExpressionChartControl symbolicExpressionChartControl;
-  }
-}
Index: anches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/FragmentGraphView.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/FragmentGraphView.cs	(revision 10745)
+++ 	(revision )
@@ -1,155 +1,0 @@
-﻿using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using HeuristicLab.Core.Views;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views;
-using HeuristicLab.EvolutionTracking;
-using HeuristicLab.MainForm;
-using HeuristicLab.Visualization;
-
-namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
-  [View("FragmentGraphView")]
-  [Content(typeof(IGenealogyGraph<IFragment<ISymbolicExpressionTreeNode>>), IsDefaultView = true)]
-  public sealed partial class FragmentGraphView : ItemView {
-    private int PreferredSpacing = 50;
-
-    private ReingoldTilfordLayoutEngine<TileLayoutNode> layoutEngine;
-    private ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode> symbolicExpressionEngine;
-
-    private Dictionary<IGenealogyGraphNode<IFragment<ISymbolicExpressionTreeNode>>, TileLayoutNode> tileDictionary;
-
-    private SymbolicExpressionTreeTile Root { get; set; }
-
-    public new IGenealogyGraph<IFragment<ISymbolicExpressionTreeNode>> Content {
-      get { return (IGenealogyGraph<IFragment<ISymbolicExpressionTreeNode>>)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public FragmentGraphView() {
-      InitializeComponent();
-
-      layoutEngine = new ReingoldTilfordLayoutEngine<TileLayoutNode>(n => n.Children) {
-        HorizontalSpacing = 50,
-        VerticalSpacing = 50,
-      };
-      symbolicExpressionEngine = new ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode>(n => n.Subtrees) {
-        HorizontalSpacing = 50,
-        VerticalSpacing = 50,
-        NodeWidth = 80,
-        NodeHeight = 40
-      };
-      tileDictionary = new Dictionary<IGenealogyGraphNode<IFragment<ISymbolicExpressionTreeNode>>, TileLayoutNode>();
-    }
-
-    private void MakeTiles() {
-      var chart = symbolicExpressionChartControl.Chart;
-      tileDictionary.Clear();
-      foreach (var node in Content.Nodes) {
-        var tile = new SymbolicExpressionTreeTile(chart);
-        tile.LayoutEngine = symbolicExpressionEngine;
-        tile.Root = node.Content.Root;
-        var tileNode = new TileLayoutNode { Tile = tile };
-        tileDictionary.Add(node, tileNode);
-      }
-      foreach (var node in Content.Nodes.Where(n => n.Children.Any())) {
-        var layoutNode = tileDictionary[node];
-        layoutNode.Children = new List<TileLayoutNode>(node.Children.Select(x => tileDictionary[x]));
-      }
-    }
-
-    private void Draw() {
-      var chart = symbolicExpressionChartControl.Chart;
-      var nodes = Content.Nodes.ToList();
-      var root = nodes[0];
-      var fragmentRoot = tileDictionary[root];
-      int maxTileWidth = 0, maxTileHeight = 0;
-      var tiles = nodes.Select(x => tileDictionary[x].Tile).ToList();
-
-      foreach (var tile in tiles) {
-        var size = tile.Size;
-        if (maxTileWidth < size.Width) maxTileWidth = size.Width;
-        if (maxTileHeight < size.Height) maxTileHeight = size.Height;
-      }
-      layoutEngine.NodeWidth = maxTileWidth;
-      layoutEngine.NodeHeight = maxTileHeight;
-      layoutEngine.HorizontalSpacing = PreferredSpacing;
-      layoutEngine.VerticalSpacing = PreferredSpacing;
-
-      var visualNodes = layoutEngine.CalculateLayout(fragmentRoot);
-
-      symbolicExpressionChartControl.UpdateEnabled = false;
-      foreach (var visualNode in visualNodes) {
-        var tile = visualNode.Content.Tile;
-        tile.Position = new Point(visualNode.X, visualNode.Y);
-        symbolicExpressionChartControl.Add(tile);
-      }
-
-      // add connections between the tiles
-      foreach (var node in nodes) {
-        var aTile = tileDictionary[node].Tile;
-        var aSize = aTile.Size;
-        var aPos = aTile.Position;
-
-        var lowerLeftMarker = new FixedSizeCircle(chart, aTile.Position, 5, new Pen(Color.Red), new SolidBrush(Color.Transparent));
-        var upperRightMarker = new FixedSizeCircle(chart, new PointD(aPos.X + aSize.Width, aPos.Y + aSize.Height), 5,
-          new Pen(Color.Blue), new SolidBrush(Color.Transparent));
-        symbolicExpressionChartControl.Add(lowerLeftMarker); symbolicExpressionChartControl.Add(upperRightMarker);
-
-        foreach (var child in node.Children) {
-          var bTile = tileDictionary[child].Tile;
-          var bSize = bTile.Size;
-          var bPos = bTile.Position;
-
-          var line = new Line(chart, new PointD(aPos.X + aSize.Width / 2.0, aPos.Y + aSize.Height), new PointD(bPos.X + bSize.Width / 2.0, bPos.Y));
-          symbolicExpressionChartControl.Add(line);
-        }
-      }
-      //      symbolicExpressionChartControl.FlipVertical();
-      symbolicExpressionChartControl.UpdateEnabled = true;
-      symbolicExpressionChartControl.EnforceUpdate();
-    }
-
-    protected override void DeregisterContentEvents() {
-      // TODO: Deregister your event handlers here
-      base.DeregisterContentEvents();
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      // TODO: Register your event handlers here
-    }
-
-    #region Event Handlers (Content)
-    // TODO: Put event handlers of the content here
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content != null) {
-        MakeTiles();
-        Draw();
-      }
-    }
-    #endregion
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      // TODO: Enable or disable controls based on whether the content is null or the view is set readonly
-    }
-
-    #region Event Handlers (child controls)
-
-    // TODO: Put event handlers of child controls here.
-
-    #endregion
-  }
-
-  internal class TileLayoutNode {
-    public SymbolicExpressionTreeTile Tile { get; set; }
-
-    private List<TileLayoutNode> children;
-    public IEnumerable<TileLayoutNode> Children {
-      get { return children ?? Enumerable.Empty<TileLayoutNode>(); }
-      set { children = value.ToList(); }
-    }
-  }
-}
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 10745)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj	(revision 10746)
@@ -193,10 +193,4 @@
   <ItemGroup>
     <Compile Include="Exporters\SymbolicSolutionExcelExporter.cs" />
-    <Compile Include="FragmentGraphView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="FragmentGraphView.Designer.cs">
-      <DependentUpon>FragmentGraphView.cs</DependentUpon>
-    </Compile>
     <Compile Include="InteractiveSymbolicExpressionTreeChart.cs">
       <SubType>UserControl</SubType>
@@ -225,26 +219,4 @@
       <DependentUpon>SlidingWindowDataView.cs</DependentUpon>
     </Compile>
-    <Compile Include="SymboldDataAnalysisGenealogyView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="SymboldDataAnalysisGenealogyView.Designer.cs">
-      <DependentUpon>SymboldDataAnalysisGenealogyView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="SymbolicDataAnalysisExpressionGenealogyGraphChart.cs" />
-    <Compile Include="SymbolicDataAnalysisExpressionGenealogyGraphChart.Designer.cs">
-      <DependentUpon>SymbolicDataAnalysisExpressionGenealogyGraphChart.cs</DependentUpon>
-    </Compile>
-    <Compile Include="SymbolicExpressionChartControl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="SymbolicExpressionChartControl.Designer.cs">
-      <DependentUpon>SymbolicExpressionChartControl.cs</DependentUpon>
-    </Compile>
-    <Compile Include="SymbolicDataAnalysisExpressionLineageExplorerView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="SymbolicDataAnalysisExpressionLineageExplorerView.Designer.cs">
-      <DependentUpon>SymbolicDataAnalysisExpressionLineageExplorerView.cs</DependentUpon>
-    </Compile>
     <Compile Include="TextualSymbolicDataAnalysisModelView.cs">
       <SubType>UserControl</SubType>
@@ -294,4 +266,34 @@
     <Compile Include="Symbols\VariableView.Designer.cs">
       <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\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>
+    <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">
@@ -366,4 +368,5 @@
     </Content>
   </ItemGroup>
+  <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
Index: anches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymboldDataAnalysisGenealogyView.Designer.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymboldDataAnalysisGenealogyView.Designer.cs	(revision 10745)
+++ 	(revision )
@@ -1,167 +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
-
-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.genealogyGraphChart = new HeuristicLab.Problems.DataAnalysis.Symbolic.Views.SymbolicDataAnalysisExpressionGenealogyGraphChart();
-      this.symbolicExpressionTreeChart = new HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views.SymbolicExpressionTreeChart();
-      this.trace_checkBox = new System.Windows.Forms.CheckBox();
-      this.lockGraph_checkBox = new System.Windows.Forms.CheckBox();
-      this.simpleLineages_checkBox = new System.Windows.Forms.CheckBox();
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
-      this.splitContainer1.Panel1.SuspendLayout();
-      this.splitContainer1.Panel2.SuspendLayout();
-      this.splitContainer1.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // splitContainer1
-      // 
-      this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Bottom;
-      this.splitContainer1.Location = new System.Drawing.Point(0, 33);
-      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(1247, 722);
-      this.splitContainer1.SplitterDistance = 607;
-      this.splitContainer1.TabIndex = 0;
-      // 
-      // genealogyGraphChart
-      // 
-      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);
-      this.genealogyGraphChart.LockGenealogy = false;
-      this.genealogyGraphChart.Name = "genealogyGraphChart";
-      this.genealogyGraphChart.ScaleOnResize = true;
-      this.genealogyGraphChart.SimpleLineages = false;
-      this.genealogyGraphChart.Size = new System.Drawing.Size(607, 722);
-      this.genealogyGraphChart.TabIndex = 0;
-      this.genealogyGraphChart.TraceFragments = false;
-      // 
-      // symbolicExpressionTreeChart
-      // 
-      this.symbolicExpressionTreeChart.BackgroundColor = System.Drawing.Color.White;
-      this.symbolicExpressionTreeChart.Dock = System.Windows.Forms.DockStyle.Fill;
-      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(636, 722);
-      this.symbolicExpressionTreeChart.Spacing = 5;
-      this.symbolicExpressionTreeChart.SuspendRepaint = false;
-      this.symbolicExpressionTreeChart.TabIndex = 0;
-      this.symbolicExpressionTreeChart.TextFont = new System.Drawing.Font("Microsoft Sans Serif", 12F);
-      this.symbolicExpressionTreeChart.Tree = null;
-      // 
-      // trace_checkBox
-      // 
-      this.trace_checkBox.AutoSize = true;
-      this.trace_checkBox.Location = new System.Drawing.Point(611, 10);
-      this.trace_checkBox.Name = "trace_checkBox";
-      this.trace_checkBox.Size = new System.Drawing.Size(54, 17);
-      this.trace_checkBox.TabIndex = 1;
-      this.trace_checkBox.Text = "Trace";
-      this.trace_checkBox.UseVisualStyleBackColor = true;
-      this.trace_checkBox.CheckedChanged += new System.EventHandler(this.trace_checkBox_CheckedChanged);
-      // 
-      // lockGraph_checkBox
-      // 
-      this.lockGraph_checkBox.AutoSize = true;
-      this.lockGraph_checkBox.Location = new System.Drawing.Point(4, 10);
-      this.lockGraph_checkBox.Name = "lockGraph_checkBox";
-      this.lockGraph_checkBox.Size = new System.Drawing.Size(82, 17);
-      this.lockGraph_checkBox.TabIndex = 2;
-      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.AutoSize = true;
-      this.simpleLineages_checkBox.Location = new System.Drawing.Point(91, 10);
-      this.simpleLineages_checkBox.Name = "simpleLineages_checkBox";
-      this.simpleLineages_checkBox.Size = new System.Drawing.Size(103, 17);
-      this.simpleLineages_checkBox.TabIndex = 3;
-      this.simpleLineages_checkBox.Text = "Simple Lineages";
-      this.simpleLineages_checkBox.UseVisualStyleBackColor = true;
-      this.simpleLineages_checkBox.CheckedChanged += new System.EventHandler(this.simpleLineages_checkBox_CheckedChanged);
-      // 
-      // SymboldDataAnalysisGenealogyView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.simpleLineages_checkBox);
-      this.Controls.Add(this.lockGraph_checkBox);
-      this.Controls.Add(this.trace_checkBox);
-      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.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.SplitContainer splitContainer1;
-    private SymbolicDataAnalysisExpressionGenealogyGraphChart genealogyGraphChart;
-    private Encodings.SymbolicExpressionTreeEncoding.Views.SymbolicExpressionTreeChart symbolicExpressionTreeChart;
-    private System.Windows.Forms.CheckBox trace_checkBox;
-    private System.Windows.Forms.CheckBox lockGraph_checkBox;
-    private System.Windows.Forms.CheckBox simpleLineages_checkBox;
-
-  }
-}
Index: anches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymboldDataAnalysisGenealogyView.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymboldDataAnalysisGenealogyView.cs	(revision 10745)
+++ 	(revision )
@@ -1,280 +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.IO;
-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;
-
-using FragmentGraph = HeuristicLab.EvolutionTracking.IGenealogyGraph<HeuristicLab.EvolutionTracking.IFragment<HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode>>;
-using FragmentNode = HeuristicLab.EvolutionTracking.GenealogyGraphNode<HeuristicLab.EvolutionTracking.IFragment<HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode>>;
-
-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;
-      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.Content;
-      symbolicExpressionTreeChart.Tree = tree;
-
-      if (graphNode.InArcs.Any()) {
-        var fragment = (IFragment<ISymbolicExpressionTreeNode>)graphNode.InArcs.Last().Data;
-        treeChart_HighlightSubtree(fragment.Root);
-      }
-    }
-
-    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 fragmentGraph = TraceSubtree(subtree);
-        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.Nodes.Select(x => x.Content);
-        var matchingTrees = trees.Where(x => x.Root.ContainsSubtree(subtree, comparer));
-
-        var matchingVertices = matchingTrees.SelectMany(x => Content[x]).Cast<IGenealogyGraphNode<ISymbolicExpressionTree>>();
-        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) {
-      foreach (var s in subtree.IterateNodesPrefix()) {
-        var visualNode = symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(s);
-        visualNode.LineColor = Color.RoyalBlue;
-        visualNode.FillColor = Color.LightBlue;
-
-        foreach (var c in s.Subtrees) {
-          var visualArc = symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNodeConnection(s, c);
-          visualArc.LineColor = Color.RoyalBlue;
-        }
-      }
-      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
-
-    #region fragment tracing
-    private FragmentGraph TraceSubtree(ISymbolicExpressionTreeNode subtree) {
-      var graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)genealogyGraphChart.SelectedGraphNode;
-      var graph = new GenealogyGraph<IFragment<ISymbolicExpressionTreeNode>>();
-      Trace(graphNode, subtree, graph);
-      return graph;
-    }
-
-    private static void Trace(IGenealogyGraphNode<ISymbolicExpressionTree> graphNode, ISymbolicExpressionTreeNode subtree, FragmentGraph fragmentGraph, FragmentNode parentNode = null) {
-      while (true) {
-        if (!graphNode.InArcs.Any()) return;
-
-        var parentVertices = graphNode.Parents.ToList();
-        // the subtree must belong to the currently displayed tree which in turn must belong to the currently selected graph node
-        var tree = graphNode.Content;
-        var subtreeIndex = tree.IndexOf(subtree);
-        var subtreeLength = subtree.GetLength();
-
-        var fragment = (IFragment<ISymbolicExpressionTreeNode>)graphNode.InArcs.Last().Data;
-        if (fragment == null) return;
-        var fragmentLength = fragment.Root.GetLength();
-
-        var fragmentNode = new FragmentNode { Content = new Fragment<ISymbolicExpressionTreeNode> { Root = subtree }, Rank = graphNode.Rank };
-        if (parentNode != null) {
-          if (parentNode == fragmentNode)
-            throw new Exception("Node cannot be a child of itself!");
-          var arc = new GenealogyGraphArc { Source = parentNode, Target = fragmentNode };
-          parentNode.AddForwardArc(arc);
-        }
-        fragmentGraph.AddVertex(fragmentNode);
-        parentNode = fragmentNode;
-
-        // if the selected subtree is the actual fragment
-        if (fragment.Index == subtreeIndex) {
-          if (fragmentLength != subtreeLength) throw new Exception("Fragment and subtree lengths should be the same!");
-          graphNode = parentVertices.Last();
-          tree = graphNode.Content;
-          subtree = tree.NodeAt(fragment.OldIndex);
-          continue;
-        }
-        // if the fragment contains the selected subtree => track fragment, then track subtree
-        if (fragment.Index < subtreeIndex && subtreeIndex < fragment.Index + fragmentLength) {
-          if (subtreeLength >= fragmentLength) throw new Exception("Fragment contains subtree, so subtree length should be less than the fragment length.");
-
-          graphNode = parentVertices.Last();
-          tree = graphNode.Content;
-          var i = fragment.Root.IndexOf(subtree); // get the index of the selected subtree, relative to the fragment root
-          subtree = tree.NodeAt(fragment.OldIndex + i);
-          continue;
-        }
-        // if the selected subtree contains the fragment => track fragment and subtree
-        if (subtreeIndex < fragment.Index && fragment.Index < subtreeIndex + subtreeLength) {
-          if (fragmentLength >= subtreeLength) throw new Exception("Subtree contains fragment, so fragment length should be less than the subtree length.");
-
-          graphNode = parentVertices[0];
-          tree = graphNode.Content;
-          subtree = tree.NodeAt(subtreeIndex);
-          // track subtree
-          Trace(graphNode, subtree, fragmentGraph, fragmentNode);
-
-          // track fragment
-          if (parentVertices.Count > 1) {
-            graphNode = parentVertices[1];
-            tree = graphNode.Content;
-            subtree = tree.NodeAt(fragment.OldIndex);
-            continue;
-          }
-        } else {
-          // fragment and subtree are completely distinct => we only track the subtree (contained by the root parent)
-          // if the subtree comes AFTER the fragment in the prefix iteration of nodes, 
-          // then its index is affected by the difference in fragment size between current tree and parent
-          graphNode = parentVertices[0];
-          tree = graphNode.Content;
-          if (subtreeIndex > fragment.Index) {
-            var diff = tree.NodeAt(fragment.Index).GetLength() - fragmentLength;
-            subtreeIndex += diff;
-          }
-          subtree = tree.NodeAt(subtreeIndex);
-          continue;
-        }
-        break;
-      }
-    }
-    #endregion
-  }
-
-  internal static class Util {
-    private static string ViewAsText(this ISymbolicExpressionTreeNode root) {
-      var writer = new StringWriter();
-      SymbolicExpressionTreeHierarchicalFormatter.RenderNode(writer, root, string.Empty);
-      return writer.ToString();
-    }
-    #region some helper methods for shortening the tracing code
-
-    internal static void AddChild(this IGenealogyGraphNode parent, IGenealogyGraphNode child) {
-      parent.AddForwardArc(child);
-      child.AddReverseArc(parent);
-      child.Rank = parent.Rank - 1;
-    }
-    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);
-    }
-    internal static int IndexOf(this ISymbolicExpressionTree tree, ISymbolicExpressionTreeNode node) {
-      return IndexOf(tree.Root, node);
-    }
-    internal static int IndexOf(this ISymbolicExpressionTreeNode root, ISymbolicExpressionTreeNode node) {
-      int i = 0;
-      foreach (var n in root.IterateNodesPrefix()) {
-        if (n == node) return i;
-        ++i;
-      }
-      return -1;
-    }
-    #endregion
-  }
-}
Index: anches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisExpressionGenealogyGraphChart.Designer.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisExpressionGenealogyGraphChart.Designer.cs	(revision 10745)
+++ 	(revision )
@@ -1,32 +1,0 @@
-﻿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() {
-      components = new System.ComponentModel.Container();
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-    }
-
-    #endregion
-  }
-}
Index: anches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisExpressionGenealogyGraphChart.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisExpressionGenealogyGraphChart.cs	(revision 10745)
+++ 	(revision )
@@ -1,38 +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 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; }
-    }
-    // add event handlers here for processing events coming from the tree chart
-  }
-}
Index: anches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisExpressionLineageExplorerView.Designer.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisExpressionLineageExplorerView.Designer.cs	(revision 10745)
+++ 	(revision )
@@ -1,74 +1,0 @@
-﻿namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
-  partial class SymbolicDataAnalysisExpressionLineageExplorerView {
-    /// <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.treeView = new System.Windows.Forms.TreeView();
-      this.symbolicExpressionChartControl = new HeuristicLab.Problems.DataAnalysis.Symbolic.Views.SymbolicExpressionChartControl();
-      this.SuspendLayout();
-      // 
-      // treeView
-      // 
-      this.treeView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-            | System.Windows.Forms.AnchorStyles.Left)));
-      this.treeView.Location = new System.Drawing.Point(3, 3);
-      this.treeView.Name = "treeView";
-      this.treeView.Size = new System.Drawing.Size(167, 590);
-      this.treeView.TabIndex = 0;
-      this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterSelect);
-      // 
-      // symbolicExpressionChartControl
-      // 
-      this.symbolicExpressionChartControl.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.symbolicExpressionChartControl.AutoSize = true;
-      this.symbolicExpressionChartControl.BackColor = System.Drawing.SystemColors.Control;
-      this.symbolicExpressionChartControl.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
-      this.symbolicExpressionChartControl.Chart = null;
-      this.symbolicExpressionChartControl.Location = new System.Drawing.Point(176, 3);
-      this.symbolicExpressionChartControl.Name = "symbolicExpressionChartControl";
-      this.symbolicExpressionChartControl.ScaleOnResize = true;
-      this.symbolicExpressionChartControl.Size = new System.Drawing.Size(657, 593);
-      this.symbolicExpressionChartControl.TabIndex = 1;
-      // 
-      // SymbolicDataAnalysisExpressionLineageExplorerView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.symbolicExpressionChartControl);
-      this.Controls.Add(this.treeView);
-      this.DoubleBuffered = true;
-      this.Name = "SymbolicDataAnalysisExpressionLineageExplorerView";
-      this.Size = new System.Drawing.Size(836, 596);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.TreeView treeView;
-    private SymbolicExpressionChartControl symbolicExpressionChartControl;
-  }
-}
Index: anches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisExpressionLineageExplorerView.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisExpressionLineageExplorerView.cs	(revision 10745)
+++ 	(revision )
@@ -1,88 +1,0 @@
-﻿using System.Collections.Generic;
-using System.Globalization;
-using System.Linq;
-using System.Windows.Forms;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views;
-using HeuristicLab.EvolutionTracking;
-using HeuristicLab.MainForm;
-using HeuristicLab.MainForm.WindowsForms;
-using HeuristicLab.Visualization;
-
-namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
-  [View("LineageExplorerView")]
-  [Content(typeof(IGenealogyGraph), false)]
-  public partial class SymbolicDataAnalysisExpressionLineageExplorerView : AsynchronousContentView {
-    private readonly ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode> symbolicExpressionTreeNodeLayoutEngine;
-
-    private readonly Dictionary<TreeNode, ISymbolicExpressionTree> treeMap;
-
-    private const int MinHorizontalSpacing = 50;
-    private const int MinVerticalSpacing = 50;
-    private const int PreferredNodeWidth = 80;
-    private const int PreferredNodeHeight = 40;
-
-    public new IGenealogyGraph Content {
-      get { return (IGenealogyGraph)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public SymbolicDataAnalysisExpressionLineageExplorerView() {
-      InitializeComponent();
-      symbolicExpressionTreeNodeLayoutEngine = new ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode>(node => node.Subtrees) {
-        HorizontalSpacing = MinHorizontalSpacing,
-        VerticalSpacing = MinVerticalSpacing,
-        NodeWidth = PreferredNodeWidth,
-        NodeHeight = PreferredNodeHeight
-      };
-
-      treeMap = new Dictionary<TreeNode, ISymbolicExpressionTree>();
-      double width = symbolicExpressionChartControl.PreferredSize.Width;
-      double height = symbolicExpressionChartControl.PreferredSize.Height;
-      if (symbolicExpressionChartControl.Chart == null) {
-        symbolicExpressionChartControl.Chart = new Chart(0, 0, width, height);
-      }
-    }
-
-    #region events
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content != null) { updateTreeView(); }
-    }
-    #endregion
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      treeView.Enabled = Content != null;
-    }
-
-    private void updateTreeView() {
-      var lastGen = Content.Ranks.OrderBy(x => x.Key).Last().Value.ToList();
-      treeMap.Clear();
-      symbolicExpressionChartControl.Clear();
-      foreach (var g in lastGen) {
-        var treeNode = new TreeNode(g.Quality.ToString(CultureInfo.InvariantCulture));
-        treeView.Nodes.Add(treeNode);
-        treeMap.Add(treeNode, (ISymbolicExpressionTree)g.Content);
-      }
-    }
-
-    private void treeView_AfterSelect(object sender, TreeViewEventArgs e) {
-      symbolicExpressionChartControl.Clear();
-      var selectedNode = treeView.SelectedNode;
-      var symbolicExpressionTree = treeMap[selectedNode];
-      var chart = symbolicExpressionChartControl.Chart;
-      var tile = new SymbolicExpressionTreeTile(chart) {
-        LayoutEngine = symbolicExpressionTreeNodeLayoutEngine,
-        PreferredNodeWidth = PreferredNodeWidth,
-        PreferredNodeHeight = PreferredNodeHeight,
-        SymbolicExpressionTree = symbolicExpressionTree
-      };
-      symbolicExpressionChartControl.UpdateEnabled = false;
-      symbolicExpressionChartControl.Add(tile);
-      //      symbolicExpressionChartControl.FlipVertical();
-      symbolicExpressionChartControl.UpdateEnabled = true;
-      symbolicExpressionChartControl.EnforceUpdate();
-    }
-  }
-}
Index: anches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicExpressionChartControl.Designer.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicExpressionChartControl.Designer.cs	(revision 10745)
+++ 	(revision )
@@ -1,43 +1,0 @@
-﻿namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
-  partial class SymbolicExpressionChartControl {
-    /// <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();
-      // 
-      // SymbolicExpressionChartControl
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.DoubleBuffered = true;
-      this.Name = "SymbolicExpressionChartControl";
-      this.Controls.SetChildIndex(this.pictureBox, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-  }
-}
Index: anches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicExpressionChartControl.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicExpressionChartControl.cs	(revision 10745)
+++ 	(revision )
@@ -1,58 +1,0 @@
-﻿using System.Collections.Generic;
-using System.Drawing;
-using System.Drawing.Drawing2D;
-using System.Linq;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views;
-using HeuristicLab.Visualization;
-
-namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
-  public partial class SymbolicExpressionChartControl : ChartControl {
-    public SymbolicExpressionChartControl() {
-      InitializeComponent();
-      if (Chart == null) { Chart = new Chart(0, 0, PreferredSize.Width, PreferredSize.Height); }
-    }
-
-    public void Clear() {
-      Chart.Group.Clear();
-    }
-
-    public void Add(IPrimitive primitive) {
-      Chart.Group.Add(primitive);
-    }
-
-    public void AddRange(IEnumerable<IPrimitive> primitives) {
-      Chart.Group.AddRange(primitives);
-    }
-
-    public void Draw(Graphics graphics) {
-      graphics.SmoothingMode = SmoothingMode.HighQuality;
-      Chart.Group.Draw(graphics);
-    }
-
-    public bool UpdateEnabled {
-      get { return Chart.UpdateEnabled; }
-      set { Chart.UpdateEnabled = value; }
-    }
-
-    public void EnforceUpdate() {
-      Chart.EnforceUpdate();
-    }
-
-    public void FlipVertical() {
-      foreach (var p in Chart.Group.Primitives.OfType<SymbolicExpressionTreeTile>().SelectMany(x => x.Primitives)) {
-        FlipPrimitive(p);
-      }
-    }
-
-    public void FlipPrimitive(IPrimitive primitive) {
-      var height = pictureBox.Height;
-      var rect = primitive as RectangularPrimitiveBase;
-      var line = primitive as LinearPrimitiveBase;
-      if (rect != null) {
-        rect.SetPosition(rect.LowerLeft.X, height - rect.UpperRight.Y, rect.UpperRight.X, height - rect.LowerLeft.Y);
-      } else if (line != null) {
-        line.SetPosition(line.Start.X, height - line.Start.Y, line.End.X, height - line.End.Y);
-      }
-    }
-  }
-}
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/FragmentGraphView.Designer.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/FragmentGraphView.Designer.cs	(revision 10746)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/FragmentGraphView.Designer.cs	(revision 10746)
@@ -0,0 +1,55 @@
+﻿namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
+  partial class FragmentGraphView {
+    /// <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.symbolicExpressionChartControl = new HeuristicLab.Problems.DataAnalysis.Symbolic.Views.SymbolicExpressionChartControl();
+      this.SuspendLayout();
+      // 
+      // symbolicExpressionChartControl
+      // 
+      this.symbolicExpressionChartControl.BackColor = System.Drawing.SystemColors.Control;
+      this.symbolicExpressionChartControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.symbolicExpressionChartControl.Location = new System.Drawing.Point(0, 0);
+      this.symbolicExpressionChartControl.Name = "symbolicExpressionChartControl";
+      this.symbolicExpressionChartControl.ScaleOnResize = true;
+      this.symbolicExpressionChartControl.Size = new System.Drawing.Size(1144, 682);
+      this.symbolicExpressionChartControl.TabIndex = 0;
+      this.symbolicExpressionChartControl.UpdateEnabled = true;
+      // 
+      // FragmentGraphView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.symbolicExpressionChartControl);
+      this.Name = "FragmentGraphView";
+      this.Size = new System.Drawing.Size(1144, 682);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private SymbolicExpressionChartControl symbolicExpressionChartControl;
+  }
+}
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/FragmentGraphView.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/FragmentGraphView.cs	(revision 10746)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/FragmentGraphView.cs	(revision 10746)
@@ -0,0 +1,184 @@
+﻿using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using HeuristicLab.Core.Views;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views;
+using HeuristicLab.EvolutionTracking;
+using HeuristicLab.MainForm;
+using HeuristicLab.Visualization;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
+  [View("FragmentGraphView")]
+  [Content(typeof(IGenealogyGraph<IFragment<ISymbolicExpressionTreeNode>>), IsDefaultView = true)]
+  public sealed partial class FragmentGraphView : ItemView {
+    private const int PreferredHorizontalSpacing = 10;
+    private const int PreferredVerticalSpacing = 25;
+
+    private ReingoldTilfordLayoutEngine<TileLayoutNode> layoutEngine;
+    private ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode> symbolicExpressionEngine;
+
+    private Dictionary<IGenealogyGraphNode<IFragment<ISymbolicExpressionTreeNode>>, TileLayoutNode> tileDictionary;
+
+    private SymbolicExpressionTreeTile Root { get; set; }
+
+    public new IGenealogyGraph<IFragment<ISymbolicExpressionTreeNode>> Content {
+      get { return (IGenealogyGraph<IFragment<ISymbolicExpressionTreeNode>>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public FragmentGraphView() {
+      InitializeComponent();
+
+      layoutEngine = new ReingoldTilfordLayoutEngine<TileLayoutNode>(n => n.Children) {
+        HorizontalSpacing = PreferredHorizontalSpacing,
+        VerticalSpacing = PreferredVerticalSpacing,
+      };
+      symbolicExpressionEngine = new ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode>(n => n.Subtrees) {
+        HorizontalSpacing = PreferredHorizontalSpacing,
+        VerticalSpacing = PreferredVerticalSpacing,
+        NodeWidth = 80,
+        NodeHeight = 40
+      };
+      tileDictionary = new Dictionary<IGenealogyGraphNode<IFragment<ISymbolicExpressionTreeNode>>, TileLayoutNode>();
+    }
+
+    private void MakeTiles() {
+      var chart = symbolicExpressionChartControl.Chart;
+      tileDictionary.Clear();
+      foreach (var node in Content.Nodes) {
+        var tile = new SymbolicExpressionTreeTile(chart);
+        tile.LayoutEngine = symbolicExpressionEngine;
+        tile.Root = node.Content.Root;
+        var tileNode = new TileLayoutNode { Tile = tile };
+        tileDictionary.Add(node, tileNode);
+      }
+      foreach (var node in Content.Nodes.Where(n => n.Children.Any())) {
+        var layoutNode = tileDictionary[node];
+        layoutNode.Children = new List<TileLayoutNode>(node.Children.Select(x => tileDictionary[x]));
+      }
+    }
+
+    private void Draw() {
+      var chart = symbolicExpressionChartControl.Chart;
+      var nodes = Content.Nodes.ToList();
+      var root = nodes[0];
+      var fragmentRoot = tileDictionary[root];
+      int maxTileWidth = 0, maxTileHeight = 0;
+      var tiles = nodes.Select(x => tileDictionary[x].Tile).ToList();
+
+      foreach (var tile in tiles) {
+        var size = tile.Size;
+        if (maxTileWidth < size.Width) maxTileWidth = size.Width;
+        if (maxTileHeight < size.Height) maxTileHeight = size.Height;
+      }
+      layoutEngine.NodeWidth = maxTileWidth;
+      layoutEngine.NodeHeight = maxTileHeight;
+      layoutEngine.HorizontalSpacing = PreferredHorizontalSpacing;
+      layoutEngine.VerticalSpacing = PreferredVerticalSpacing;
+
+      var visualNodes = layoutEngine.CalculateLayout(fragmentRoot);
+
+      symbolicExpressionChartControl.UpdateEnabled = false;
+      foreach (var visualNode in visualNodes) {
+        var tile = visualNode.Content.Tile;
+        tile.Position = new Point(visualNode.X, visualNode.Y);
+        symbolicExpressionChartControl.Add(tile);
+      }
+
+      // add connections between the tiles
+      foreach (var node in nodes) {
+        var aTile = tileDictionary[node].Tile;
+        var aSize = aTile.Size;
+        var aPos = aTile.Position;
+
+        // mark swapped fragment
+        if (node.Content.Index != 0) {
+          var subtree = node.Content.Root.NodeAt(node.Content.Index);
+          foreach (var s in subtree.IterateNodesPrefix()) {
+            var primitive = aTile.GetPrimitive(s);
+            if (primitive != null) {
+              var rpb = primitive as RectangularPrimitiveBase;
+              if (rpb != null) {
+                rpb.Pen = new Pen(Color.RoyalBlue);
+              }
+            }
+          }
+        }
+
+        // mark the subtree that was replaced by the fragment
+        if (node.Children.Any() && node.Content.Index != 0) {
+          var child = node.Children.First();
+          {
+            var subtree = child.Content.Root.NodeAt(node.Content.Index);
+            var tile = tileDictionary[child].Tile;
+            foreach (var s in subtree.IterateNodesPrefix()) {
+              var primitive = tile.GetPrimitive(s);
+              if (primitive != null) {
+                var rpb = primitive as RectangularPrimitiveBase;
+                if (rpb != null) {
+                  rpb.Pen = new Pen(Color.DarkOrange);
+                }
+              }
+            }
+          }
+        }
+
+        foreach (var child in node.Children) {
+          var bTile = tileDictionary[child].Tile;
+          var bSize = bTile.Size;
+          var bPos = bTile.Position;
+
+          var line = new Line(chart, new PointD(aPos.X + aSize.Width / 2.0, aPos.Y + aSize.Height), new PointD(bPos.X + bSize.Width / 2.0, bPos.Y));
+          symbolicExpressionChartControl.Add(line);
+
+
+        }
+      }
+      symbolicExpressionChartControl.UpdateEnabled = true;
+      symbolicExpressionChartControl.EnforceUpdate();
+    }
+
+    protected override void DeregisterContentEvents() {
+      // TODO: Deregister your event handlers here
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      // TODO: Register your event handlers here
+    }
+
+    #region Event Handlers (Content)
+    // TODO: Put event handlers of the content here
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content != null) {
+        MakeTiles();
+        Draw();
+      }
+    }
+    #endregion
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      // TODO: Enable or disable controls based on whether the content is null or the view is set readonly
+    }
+
+    #region Event Handlers (child controls)
+
+    // TODO: Put event handlers of child controls here.
+
+    #endregion
+  }
+
+  internal class TileLayoutNode {
+    public SymbolicExpressionTreeTile Tile { get; set; }
+
+    private List<TileLayoutNode> children;
+    public IEnumerable<TileLayoutNode> Children {
+      get { return children ?? Enumerable.Empty<TileLayoutNode>(); }
+      set { children = value.ToList(); }
+    }
+  }
+}
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 10746)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymboldDataAnalysisGenealogyView.Designer.cs	(revision 10746)
@@ -0,0 +1,167 @@
+﻿#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 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.genealogyGraphChart = new HeuristicLab.Problems.DataAnalysis.Symbolic.Views.SymbolicDataAnalysisExpressionGenealogyGraphChart();
+      this.symbolicExpressionTreeChart = new HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views.SymbolicExpressionTreeChart();
+      this.trace_checkBox = new System.Windows.Forms.CheckBox();
+      this.lockGraph_checkBox = new System.Windows.Forms.CheckBox();
+      this.simpleLineages_checkBox = new System.Windows.Forms.CheckBox();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Bottom;
+      this.splitContainer1.Location = new System.Drawing.Point(0, 33);
+      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(1247, 722);
+      this.splitContainer1.SplitterDistance = 607;
+      this.splitContainer1.TabIndex = 0;
+      // 
+      // genealogyGraphChart
+      // 
+      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);
+      this.genealogyGraphChart.LockGenealogy = false;
+      this.genealogyGraphChart.Name = "genealogyGraphChart";
+      this.genealogyGraphChart.ScaleOnResize = true;
+      this.genealogyGraphChart.SimpleLineages = false;
+      this.genealogyGraphChart.Size = new System.Drawing.Size(607, 722);
+      this.genealogyGraphChart.TabIndex = 0;
+      this.genealogyGraphChart.TraceFragments = false;
+      // 
+      // symbolicExpressionTreeChart
+      // 
+      this.symbolicExpressionTreeChart.BackgroundColor = System.Drawing.Color.White;
+      this.symbolicExpressionTreeChart.Dock = System.Windows.Forms.DockStyle.Fill;
+      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(636, 722);
+      this.symbolicExpressionTreeChart.Spacing = 5;
+      this.symbolicExpressionTreeChart.SuspendRepaint = false;
+      this.symbolicExpressionTreeChart.TabIndex = 0;
+      this.symbolicExpressionTreeChart.TextFont = new System.Drawing.Font("Microsoft Sans Serif", 12F);
+      this.symbolicExpressionTreeChart.Tree = null;
+      // 
+      // trace_checkBox
+      // 
+      this.trace_checkBox.AutoSize = true;
+      this.trace_checkBox.Location = new System.Drawing.Point(611, 10);
+      this.trace_checkBox.Name = "trace_checkBox";
+      this.trace_checkBox.Size = new System.Drawing.Size(54, 17);
+      this.trace_checkBox.TabIndex = 1;
+      this.trace_checkBox.Text = "Trace";
+      this.trace_checkBox.UseVisualStyleBackColor = true;
+      this.trace_checkBox.CheckedChanged += new System.EventHandler(this.trace_checkBox_CheckedChanged);
+      // 
+      // lockGraph_checkBox
+      // 
+      this.lockGraph_checkBox.AutoSize = true;
+      this.lockGraph_checkBox.Location = new System.Drawing.Point(4, 10);
+      this.lockGraph_checkBox.Name = "lockGraph_checkBox";
+      this.lockGraph_checkBox.Size = new System.Drawing.Size(82, 17);
+      this.lockGraph_checkBox.TabIndex = 2;
+      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.AutoSize = true;
+      this.simpleLineages_checkBox.Location = new System.Drawing.Point(91, 10);
+      this.simpleLineages_checkBox.Name = "simpleLineages_checkBox";
+      this.simpleLineages_checkBox.Size = new System.Drawing.Size(103, 17);
+      this.simpleLineages_checkBox.TabIndex = 3;
+      this.simpleLineages_checkBox.Text = "Simple Lineages";
+      this.simpleLineages_checkBox.UseVisualStyleBackColor = true;
+      this.simpleLineages_checkBox.CheckedChanged += new System.EventHandler(this.simpleLineages_checkBox_CheckedChanged);
+      // 
+      // SymboldDataAnalysisGenealogyView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.simpleLineages_checkBox);
+      this.Controls.Add(this.lockGraph_checkBox);
+      this.Controls.Add(this.trace_checkBox);
+      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.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private SymbolicDataAnalysisExpressionGenealogyGraphChart genealogyGraphChart;
+    private Encodings.SymbolicExpressionTreeEncoding.Views.SymbolicExpressionTreeChart symbolicExpressionTreeChart;
+    private System.Windows.Forms.CheckBox trace_checkBox;
+    private System.Windows.Forms.CheckBox lockGraph_checkBox;
+    private System.Windows.Forms.CheckBox simpleLineages_checkBox;
+
+  }
+}
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 10746)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymboldDataAnalysisGenealogyView.cs	(revision 10746)
@@ -0,0 +1,293 @@
+﻿#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.IO;
+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;
+
+using FragmentGraph = HeuristicLab.EvolutionTracking.IGenealogyGraph<HeuristicLab.EvolutionTracking.IFragment<HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode>>;
+using FragmentNode = HeuristicLab.EvolutionTracking.GenealogyGraphNode<HeuristicLab.EvolutionTracking.IFragment<HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode>>;
+
+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;
+      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.Content;
+      symbolicExpressionTreeChart.Tree = tree;
+
+      if (graphNode.InArcs.Any()) {
+        var fragment = (IFragment<ISymbolicExpressionTreeNode>)graphNode.InArcs.Last().Data;
+        treeChart_HighlightSubtree(fragment.Root);
+      }
+    }
+
+    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 fragmentGraph = TraceSubtree(subtree);
+        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.Nodes.Select(x => x.Content);
+        var matchingTrees = trees.Where(x => x.Root.ContainsSubtree(subtree, comparer));
+
+        var matchingVertices = matchingTrees.SelectMany(x => Content[x]).Cast<IGenealogyGraphNode<ISymbolicExpressionTree>>();
+        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) {
+      foreach (var s in subtree.IterateNodesPrefix()) {
+        var visualNode = symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(s);
+        visualNode.LineColor = Color.RoyalBlue;
+        visualNode.FillColor = Color.LightBlue;
+
+        foreach (var c in s.Subtrees) {
+          var visualArc = symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNodeConnection(s, c);
+          visualArc.LineColor = Color.RoyalBlue;
+        }
+      }
+      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
+
+    #region fragment tracing
+    private FragmentGraph TraceSubtree(ISymbolicExpressionTreeNode subtree) {
+      var graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)genealogyGraphChart.SelectedGraphNode;
+      var graph = new GenealogyGraph<IFragment<ISymbolicExpressionTreeNode>>();
+      Trace(graphNode, subtree, graph);
+      return graph;
+    }
+
+    private static void Trace(IGenealogyGraphNode<ISymbolicExpressionTree> graphNode, ISymbolicExpressionTreeNode subtree, FragmentGraph fragmentGraph, FragmentNode parentNode = null) {
+      while (true) {
+        if (!graphNode.InArcs.Any()) return;
+
+        var parentVertices = graphNode.Parents.ToList();
+        // the subtree must belong to the currently displayed tree which in turn must belong to the currently selected graph node
+        var tree = graphNode.Content;
+        var subtreeIndex = tree.IndexOf(subtree);
+        var subtreeLength = subtree.GetLength();
+
+        var fragment = (IFragment<ISymbolicExpressionTreeNode>)graphNode.InArcs.Last().Data;
+        if (fragment == null) return;
+        var fragmentLength = fragment.Root.GetLength();
+
+        var fragmentNode = new FragmentNode {
+          Content = new Fragment<ISymbolicExpressionTreeNode> {
+            Root = subtree,
+          },
+          Rank = graphNode.Rank
+        };
+
+        if (parentNode != null) {
+          if (parentNode == fragmentNode) {
+            throw new Exception("Node cannot be a child of itself!");
+          }
+          var arc = new GenealogyGraphArc { Source = parentNode, Target = fragmentNode };
+          parentNode.AddForwardArc(arc);
+        }
+        fragmentGraph.AddVertex(fragmentNode);
+
+        parentNode = fragmentNode;
+
+        // if the selected subtree is the actual fragment
+        if (fragment.Index == subtreeIndex) {
+          if (fragmentLength != subtreeLength) throw new Exception("Fragment and subtree lengths should be the same!");
+          graphNode = parentVertices.Last();
+          tree = graphNode.Content;
+          subtree = tree.NodeAt(fragment.OldIndex);
+          continue;
+        }
+        // if the fragment contains the selected subtree => track fragment, then track subtree
+        if (fragment.Index < subtreeIndex && subtreeIndex < fragment.Index + fragmentLength) {
+          if (subtreeLength >= fragmentLength) throw new Exception("Fragment contains subtree, so subtree length should be less than the fragment length.");
+
+          graphNode = parentVertices.Last();
+          tree = graphNode.Content;
+          var i = fragment.Root.IndexOf(subtree); // get the index of the selected subtree, relative to the fragment root
+          subtree = tree.NodeAt(fragment.OldIndex + i);
+          continue;
+        }
+        // if the selected subtree contains the fragment => track fragment and subtree
+        if (subtreeIndex < fragment.Index && fragment.Index < subtreeIndex + subtreeLength) {
+          if (fragmentLength >= subtreeLength) throw new Exception("Subtree contains fragment, so fragment length should be less than the subtree length.");
+          fragmentNode.Content.Index = fragment.Index - subtreeIndex;
+          graphNode = parentVertices[0];
+          // debug check
+          tree = graphNode.Content;
+          subtree = tree.NodeAt(subtreeIndex);
+          if (subtree.GetLength() <= fragmentNode.Content.Index) {
+            throw new Exception("Index exceeds subtree length.");
+          }
+          // track subtree
+          Trace(graphNode, subtree, fragmentGraph, fragmentNode);
+
+          // track fragment
+          if (parentVertices.Count > 1) {
+            // save the index of the current fragment in the tree where it was swapped
+            graphNode = parentVertices[1];
+            tree = graphNode.Content;
+            subtree = tree.NodeAt(fragment.OldIndex);
+            continue;
+          }
+        } else {
+          // fragment and subtree are completely distinct => we only track the subtree (contained by the root parent)
+          // if the subtree comes AFTER the fragment in the prefix iteration of nodes, 
+          // then its index is affected by the difference in fragment size between current tree and parent
+          graphNode = parentVertices[0];
+          tree = graphNode.Content;
+          if (subtreeIndex > fragment.Index) {
+            var diff = tree.NodeAt(fragment.Index).GetLength() - fragmentLength;
+            subtreeIndex += diff;
+          }
+          subtree = tree.NodeAt(subtreeIndex);
+          continue;
+        }
+        break;
+      }
+    }
+    #endregion
+  }
+
+  internal static class Util {
+    private static string ViewAsText(this ISymbolicExpressionTreeNode root) {
+      var writer = new StringWriter();
+      SymbolicExpressionTreeHierarchicalFormatter.RenderNode(writer, root, string.Empty);
+      return writer.ToString();
+    }
+    #region some helper methods for shortening the tracing code
+
+    internal static void AddChild(this IGenealogyGraphNode parent, IGenealogyGraphNode child) {
+      parent.AddForwardArc(child);
+      child.AddReverseArc(parent);
+      child.Rank = parent.Rank - 1;
+    }
+    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);
+    }
+    internal static int IndexOf(this ISymbolicExpressionTree tree, ISymbolicExpressionTreeNode node) {
+      return IndexOf(tree.Root, node);
+    }
+    internal static int IndexOf(this ISymbolicExpressionTreeNode root, ISymbolicExpressionTreeNode node) {
+      int i = 0;
+      foreach (var n in root.IterateNodesPrefix()) {
+        if (n == node) return i;
+        ++i;
+      }
+      return -1;
+    }
+    #endregion
+  }
+}
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 10746)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisExpressionGenealogyGraphChart.Designer.cs	(revision 10746)
@@ -0,0 +1,32 @@
+﻿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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #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 10746)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisExpressionGenealogyGraphChart.cs	(revision 10746)
@@ -0,0 +1,38 @@
+﻿#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 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; }
+    }
+    // add event handlers here for processing events coming from the tree chart
+  }
+}
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisExpressionLineageExplorerView.Designer.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisExpressionLineageExplorerView.Designer.cs	(revision 10746)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisExpressionLineageExplorerView.Designer.cs	(revision 10746)
@@ -0,0 +1,74 @@
+﻿namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
+  partial class SymbolicDataAnalysisExpressionLineageExplorerView {
+    /// <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.treeView = new System.Windows.Forms.TreeView();
+      this.symbolicExpressionChartControl = new HeuristicLab.Problems.DataAnalysis.Symbolic.Views.SymbolicExpressionChartControl();
+      this.SuspendLayout();
+      // 
+      // treeView
+      // 
+      this.treeView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+            | System.Windows.Forms.AnchorStyles.Left)));
+      this.treeView.Location = new System.Drawing.Point(3, 3);
+      this.treeView.Name = "treeView";
+      this.treeView.Size = new System.Drawing.Size(167, 590);
+      this.treeView.TabIndex = 0;
+      this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterSelect);
+      // 
+      // symbolicExpressionChartControl
+      // 
+      this.symbolicExpressionChartControl.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.symbolicExpressionChartControl.AutoSize = true;
+      this.symbolicExpressionChartControl.BackColor = System.Drawing.SystemColors.Control;
+      this.symbolicExpressionChartControl.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+      this.symbolicExpressionChartControl.Chart = null;
+      this.symbolicExpressionChartControl.Location = new System.Drawing.Point(176, 3);
+      this.symbolicExpressionChartControl.Name = "symbolicExpressionChartControl";
+      this.symbolicExpressionChartControl.ScaleOnResize = true;
+      this.symbolicExpressionChartControl.Size = new System.Drawing.Size(657, 593);
+      this.symbolicExpressionChartControl.TabIndex = 1;
+      // 
+      // SymbolicDataAnalysisExpressionLineageExplorerView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.symbolicExpressionChartControl);
+      this.Controls.Add(this.treeView);
+      this.DoubleBuffered = true;
+      this.Name = "SymbolicDataAnalysisExpressionLineageExplorerView";
+      this.Size = new System.Drawing.Size(836, 596);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TreeView treeView;
+    private SymbolicExpressionChartControl symbolicExpressionChartControl;
+  }
+}
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisExpressionLineageExplorerView.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisExpressionLineageExplorerView.cs	(revision 10746)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisExpressionLineageExplorerView.cs	(revision 10746)
@@ -0,0 +1,88 @@
+﻿using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views;
+using HeuristicLab.EvolutionTracking;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Visualization;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
+  [View("LineageExplorerView")]
+  [Content(typeof(IGenealogyGraph), false)]
+  public partial class SymbolicDataAnalysisExpressionLineageExplorerView : AsynchronousContentView {
+    private readonly ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode> symbolicExpressionTreeNodeLayoutEngine;
+
+    private readonly Dictionary<TreeNode, ISymbolicExpressionTree> treeMap;
+
+    private const int MinHorizontalSpacing = 50;
+    private const int MinVerticalSpacing = 50;
+    private const int PreferredNodeWidth = 80;
+    private const int PreferredNodeHeight = 40;
+
+    public new IGenealogyGraph Content {
+      get { return (IGenealogyGraph)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public SymbolicDataAnalysisExpressionLineageExplorerView() {
+      InitializeComponent();
+      symbolicExpressionTreeNodeLayoutEngine = new ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode>(node => node.Subtrees) {
+        HorizontalSpacing = MinHorizontalSpacing,
+        VerticalSpacing = MinVerticalSpacing,
+        NodeWidth = PreferredNodeWidth,
+        NodeHeight = PreferredNodeHeight
+      };
+
+      treeMap = new Dictionary<TreeNode, ISymbolicExpressionTree>();
+      double width = symbolicExpressionChartControl.PreferredSize.Width;
+      double height = symbolicExpressionChartControl.PreferredSize.Height;
+      if (symbolicExpressionChartControl.Chart == null) {
+        symbolicExpressionChartControl.Chart = new Chart(0, 0, width, height);
+      }
+    }
+
+    #region events
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content != null) { updateTreeView(); }
+    }
+    #endregion
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      treeView.Enabled = Content != null;
+    }
+
+    private void updateTreeView() {
+      var lastGen = Content.Ranks.OrderBy(x => x.Key).Last().Value.ToList();
+      treeMap.Clear();
+      symbolicExpressionChartControl.Clear();
+      foreach (var g in lastGen) {
+        var treeNode = new TreeNode(g.Quality.ToString(CultureInfo.InvariantCulture));
+        treeView.Nodes.Add(treeNode);
+        treeMap.Add(treeNode, (ISymbolicExpressionTree)g.Content);
+      }
+    }
+
+    private void treeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      symbolicExpressionChartControl.Clear();
+      var selectedNode = treeView.SelectedNode;
+      var symbolicExpressionTree = treeMap[selectedNode];
+      var chart = symbolicExpressionChartControl.Chart;
+      var tile = new SymbolicExpressionTreeTile(chart) {
+        LayoutEngine = symbolicExpressionTreeNodeLayoutEngine,
+        PreferredNodeWidth = PreferredNodeWidth,
+        PreferredNodeHeight = PreferredNodeHeight,
+        SymbolicExpressionTree = symbolicExpressionTree
+      };
+      symbolicExpressionChartControl.UpdateEnabled = false;
+      symbolicExpressionChartControl.Add(tile);
+      //      symbolicExpressionChartControl.FlipVertical();
+      symbolicExpressionChartControl.UpdateEnabled = true;
+      symbolicExpressionChartControl.EnforceUpdate();
+    }
+  }
+}
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicExpressionChartControl.Designer.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicExpressionChartControl.Designer.cs	(revision 10746)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicExpressionChartControl.Designer.cs	(revision 10746)
@@ -0,0 +1,43 @@
+﻿namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
+  partial class SymbolicExpressionChartControl {
+    /// <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();
+      // 
+      // SymbolicExpressionChartControl
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.DoubleBuffered = true;
+      this.Name = "SymbolicExpressionChartControl";
+      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/SymbolicExpressionChartControl.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicExpressionChartControl.cs	(revision 10746)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicExpressionChartControl.cs	(revision 10746)
@@ -0,0 +1,58 @@
+﻿using System.Collections.Generic;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Linq;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views;
+using HeuristicLab.Visualization;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
+  public partial class SymbolicExpressionChartControl : ChartControl {
+    public SymbolicExpressionChartControl() {
+      InitializeComponent();
+      if (Chart == null) { Chart = new Chart(0, 0, PreferredSize.Width, PreferredSize.Height); }
+    }
+
+    public void Clear() {
+      Chart.Group.Clear();
+    }
+
+    public void Add(IPrimitive primitive) {
+      Chart.Group.Add(primitive);
+    }
+
+    public void AddRange(IEnumerable<IPrimitive> primitives) {
+      Chart.Group.AddRange(primitives);
+    }
+
+    public void Draw(Graphics graphics) {
+      graphics.SmoothingMode = SmoothingMode.HighQuality;
+      Chart.Group.Draw(graphics);
+    }
+
+    public bool UpdateEnabled {
+      get { return Chart.UpdateEnabled; }
+      set { Chart.UpdateEnabled = value; }
+    }
+
+    public void EnforceUpdate() {
+      Chart.EnforceUpdate();
+    }
+
+    public void FlipVertical() {
+      foreach (var p in Chart.Group.Primitives.OfType<SymbolicExpressionTreeTile>().SelectMany(x => x.Primitives)) {
+        FlipPrimitive(p);
+      }
+    }
+
+    public void FlipPrimitive(IPrimitive primitive) {
+      var height = pictureBox.Height;
+      var rect = primitive as RectangularPrimitiveBase;
+      var line = primitive as LinearPrimitiveBase;
+      if (rect != null) {
+        rect.SetPosition(rect.LowerLeft.X, height - rect.UpperRight.Y, rect.UpperRight.X, height - rect.LowerLeft.Y);
+      } else if (line != null) {
+        line.SetPosition(line.Start.X, height - line.Start.Y, line.End.X, height - line.End.Y);
+      }
+    }
+  }
+}
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeMatching.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeMatching.cs	(revision 10745)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeMatching.cs	(revision 10746)
@@ -16,8 +16,5 @@
     public static IEnumerable<ISymbolicExpressionTreeNode> FindMatches(ISymbolicExpressionTreeNode root, ISymbolicExpressionTreeNode subtree, ISymbolicExpressionTreeNodeSimilarityComparer comp) {
       var fragmentLength = subtree.GetLength();
-      // below, we use ">=" for Match(n, subtree, comp) >= fragmentLength because in case of relaxed conditions, 
-      // we can have multiple matches of the same node
-
-      return root.IterateNodesBreadth().Where(n => n.GetLength() >= fragmentLength && Match(n, subtree, comp) == fragmentLength);
+      return root.IterateNodesBreadth().Where(n => n.GetLength() >= fragmentLength && Match(n, subtree, comp) >= fragmentLength);
     }
 
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Tracking.sln
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Tracking.sln	(revision 10745)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Tracking.sln	(revision 10746)
@@ -2,5 +2,5 @@
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 2013
-VisualStudioVersion = 12.0.21005.1
+VisualStudioVersion = 12.0.30110.0
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{C80F4C35-CB87-4695-8A53-6F2D08275253}"
@@ -9,4 +9,5 @@
 		HeuristicLab.Tracking.vsmdi = HeuristicLab.Tracking.vsmdi
 		Local.testsettings = Local.testsettings
+		Performance1.psess = Performance1.psess
 		PreBuildEvent.cmd = PreBuildEvent.cmd
 		TraceAndTestImpact.testsettings = TraceAndTestImpact.testsettings
@@ -169,4 +170,7 @@
 		HideSolutionNode = FALSE
 	EndGlobalSection
+	GlobalSection(Performance) = preSolution
+		HasPerformanceSessions = true
+	EndGlobalSection
 	GlobalSection(TestCaseManagementSettings) = postSolution
 		CategoryFile = HeuristicLab.Tracking.vsmdi
