Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/FragmentGraphView.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/FragmentGraphView.cs	(revision 10655)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/FragmentGraphView.cs	(revision 10656)
@@ -23,4 +23,5 @@
         base.Content = value;
         MakeTiles();
+        Draw();
       }
     }
@@ -31,13 +32,14 @@
       layoutEngine = new ReingoldTilfordLayoutEngine<TileLayoutNode>(n => n.Children);
       symbolicExpressionEngine = new ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode>(n => n.Subtrees);
+      tileDictionary = new Dictionary<IGenealogyGraphNode<IFragment<ISymbolicExpressionTreeNode>>, TileLayoutNode>();
     }
 
     private void MakeTiles() {
       var chart = symbolicExpressionChartControl.Chart;
+      tileDictionary.Clear();
       foreach (var node in Content.Nodes.Cast<IGenealogyGraphNode<IFragment<ISymbolicExpressionTreeNode>>>()) {
-        var tile = new SymbolicExpressionTreeTile(chart) {
-          Root = node.Content.Root,
-          LayoutEngine = symbolicExpressionEngine
-        };
+        var tile = new SymbolicExpressionTreeTile(chart);
+        tile.LayoutEngine = symbolicExpressionEngine;
+        tile.Root = node.Content.Root;
         var tileNode = new TileLayoutNode {
           Tile = tile
@@ -59,4 +61,12 @@
       var root = tileDictionary[(IGenealogyGraphNode<IFragment<ISymbolicExpressionTreeNode>>)Content.Nodes[0]];
       var visualNodes = layoutEngine.CalculateLayout(root);
+
+      symbolicExpressionChartControl.UpdateEnabled = false;
+      foreach (var visualNode in visualNodes) {
+        var tile = visualNode.Content.Tile;
+        symbolicExpressionChartControl.Add(tile);
+      }
+      symbolicExpressionChartControl.UpdateEnabled = true;
+      symbolicExpressionChartControl.EnforceUpdate();
     }
 
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymboldDataAnalysisGenealogyView.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymboldDataAnalysisGenealogyView.cs	(revision 10655)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymboldDataAnalysisGenealogyView.cs	(revision 10656)
@@ -82,4 +82,9 @@
       var tree = graphNode.Content;
       symbolicExpressionTreeChart.Tree = tree;
+
+      if (graphNode.InArcs != null) {
+        var fragment = (IFragment<ISymbolicExpressionTreeNode>)graphNode.InArcs.Last().Data;
+        treeChart_HighlightSubtree(fragment.Root);
+      }
     }
 
@@ -97,4 +102,7 @@
         // perform fragment tracing
         var fragmentGraph = TraceSubtree(subtree);
+        var fragmentGraphView = MainFormManager.CreateView(typeof(FragmentGraphView));
+        fragmentGraphView.Content = fragmentGraph;
+        fragmentGraphView.Show();
 
         // open a FragmentGraphView displaying this fragmentGraph
@@ -173,4 +181,5 @@
 
       var fragment = (IFragment<ISymbolicExpressionTreeNode>)graphNode.InArcs.Last().Data;
+      if (fragment == null) return;
       var fragmentLength = fragment.Root.GetLength();
 
@@ -193,7 +202,7 @@
         fragmentGraph.AddVertex(node);
 
-        graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)graphNode.InArcs.Last().Source;
-        subtree = graphNode.Content.IterateNodesPrefix().ToList()[fragment.OldIndex];
-        Trace(graphNode, subtree, fragmentGraph, node);
+        var g = (IGenealogyGraphNode<ISymbolicExpressionTree>)graphNode.InArcs.Last().Source;
+        var s = g.Content.IterateNodesPrefix().ToList()[fragment.OldIndex];
+        Trace(g, s, fragmentGraph, node);
       } else if (fragment.Index < index && index < fragment.Index + fragmentLength) {
         // the fragment contains the selected subtree 
@@ -207,29 +216,47 @@
         fragmentGraph.AddVertex(node);
 
-        graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)graphNode.InArcs.Last().Source;
+        var g = (IGenealogyGraphNode<ISymbolicExpressionTree>)graphNode.InArcs.Last().Source;
         var i = fragment.Root.IterateNodesPrefix().ToList().IndexOf(subtree);
-        subtree = graphNode.Content.IterateNodesPrefix().ToList()[fragment.OldIndex + i];
-        Trace(graphNode, subtree, fragmentGraph, node);
+        var s = g.Content.IterateNodesPrefix().ToList()[fragment.OldIndex + i];
+        Trace(g, s, fragmentGraph, node);
 
       } else if (index < fragment.Index && fragment.Index < index + length) {
         // the selected subtree contains the fragment
-        if (fragmentLength >= length) throw new Exception("Subtree contains fragment, so fragment length should be less than the subtree length.");
-
-        var node = new FragmentNode { Content = new Fragment<ISymbolicExpressionTreeNode> { Root = subtree }, Rank = graphNode.Rank };
-
-        if (parentNode != null) {
-          AddChild(parentNode, node);
-        }
-        fragmentGraph.AddVertex(node);
-
-        var graphNode0 = (IGenealogyGraphNode<ISymbolicExpressionTree>)graphNode.InArcs[0].Source;
-        var subtree0 = graphNode0.Content.IterateNodesPrefix().ToList()[index];
-        Trace(graphNode0, subtree0, fragmentGraph, node);
+        if (fragmentLength >= length)
+          throw new Exception("Subtree contains fragment, so fragment length should be less than the subtree length.");
+
+        var node = new FragmentNode {
+          Content = new Fragment<ISymbolicExpressionTreeNode> { Root = subtree },
+          Rank = graphNode.Rank
+        };
+
+        if (parentNode != null) {
+          AddChild(parentNode, node);
+        }
+        fragmentGraph.AddVertex(node);
+
+        var g0 = (IGenealogyGraphNode<ISymbolicExpressionTree>)graphNode.InArcs[0].Source;
+        var s0 = g0.Content.IterateNodesPrefix().ToList()[index];
+        Trace(g0, s0, fragmentGraph, node);
 
         if (graphNode.InArcs.Count > 1) {
-          var graphNode1 = (IGenealogyGraphNode<ISymbolicExpressionTree>)graphNode.InArcs[1].Source;
-          var subtree1 = graphNode1.Content.IterateNodesPrefix().ToList()[fragment.OldIndex];
-          Trace(graphNode1, subtree1, fragmentGraph, node);
-        }
+          var g1 = (IGenealogyGraphNode<ISymbolicExpressionTree>)graphNode.InArcs[1].Source;
+          var s1 = g1.Content.IterateNodesPrefix().ToList()[fragment.OldIndex];
+          Trace(g1, s1, fragmentGraph, node);
+        }
+      } else {
+        // fragment and subtree are completely distinct, therefore we will track the subtree
+        var node = new FragmentNode {
+          Content = new Fragment<ISymbolicExpressionTreeNode> { Root = subtree },
+          Rank = graphNode.Rank
+        };
+
+        if (parentNode != null) {
+          AddChild(parentNode, node);
+        }
+        fragmentGraph.AddVertex(node);
+        var g = (IGenealogyGraphNode<ISymbolicExpressionTree>)graphNode.InArcs[0].Source;
+        var s = graphNode.Content.IterateNodesPrefix().ToList()[index];
+        Trace(g, s, fragmentGraph, node);
       }
     }
