Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionTreeTile.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionTreeTile.cs	(revision 10837)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionTreeTile.cs	(revision 10838)
@@ -133,5 +133,5 @@
 
       defaultBrush = new SolidBrush(Color.Transparent);
-      defaultPen = new Pen(Color.Black);
+      defaultPen = new Pen(Color.DimGray);
       defaultFont = new Font(FontFamily.GenericSansSerif, 12, GraphicsUnit.Pixel);
     }
@@ -183,5 +183,5 @@
           var start = new PointD(node.X + preferredNodeWidth / 2, node.Y + preferredNodeHeight);
           var end = new PointD(child.X + preferredNodeWidth / 2, child.Y);
-          var line = new Line(this.Chart, start, end);
+          var line = new Line(this.Chart, start, end) { Pen = defaultPen };
           this.Add(line);
         }
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 10837)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/FragmentGraphView.cs	(revision 10838)
@@ -96,6 +96,7 @@
         var aPos = aTile.Position;
 
-        if (node.Content.Index1 > 0) {
-          var subtree = node.Content.Root.NodeAt(node.Content.Index1);
+        var fragment = node.Content;
+        if (fragment.Index1 > 0) {
+          var subtree = fragment.Root.NodeAt(fragment.Index1);
           foreach (var s in subtree.IterateNodesPrefix()) {
             var primitive = aTile.GetPrimitive(s);
@@ -103,8 +104,28 @@
               var rpb = primitive as RectangularPrimitiveBase;
               if (rpb != null) {
-                rpb.Pen = Pens.RoyalBlue;
+                rpb.Pen = new Pen(Color.Black);
               }
             }
           }
+        }
+        if (fragment.Index2 > 0) {
+          var subtree = fragment.Root.NodeAt(fragment.Index2);
+          foreach (var s in subtree.IterateNodesPrefix()) {
+            var primitive = aTile.GetPrimitive(s);
+            if (primitive != null) {
+              var rpb = primitive as RectangularPrimitiveBase;
+              if (rpb != null) {
+                rpb.Brush = new SolidBrush(Color.LightGray);
+              }
+            }
+          }
+        }
+
+        if (node.Parents.Any() && node == node.Parents.First().Children.First()) {
+          var parent = node.Parents.First();
+          var index = fragment.Index1 + (parent.Content.Index2 - parent.Content.Index1);
+          var subtree = fragment.Root.NodeAt(index);
+          var primitive = aTile.GetPrimitive(subtree);
+          primitive.Brush = new SolidBrush(Color.LightCoral);
         }
 
@@ -114,21 +135,19 @@
           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));
+          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)) {
+            Pen = Pens.DimGray
+          };
           symbolicExpressionChartControl.Add(line);
 
-          if (child == node.Children.First()) {
-            if (node.Content.Index1 > 0) {
-              var subtree = child.Content.Root.NodeAt(node.Content.Index1);
-              foreach (var s in subtree.IterateNodesPrefix()) {
-                var primitive = bTile.GetPrimitive(s);
-                if (primitive != null) {
-                  var rpb = primitive as RectangularPrimitiveBase;
-                  if (rpb != null) {
-                    rpb.Pen = Pens.DarkOrange;
-                  }
-                }
-              }
-            }
-          }
+          //          if (child == node.Children.First()) {
+          //            var subtree = child.Content.Root.NodeAt(fragment.Index2);
+          //            var primitive = bTile.GetPrimitive(subtree);
+          //            if (primitive != null) {
+          //              var rpb = primitive as RectangularPrimitiveBase;
+          //              if (rpb != null) {
+          //                rpb.Pen = new Pen(Color.RoyalBlue);
+          //              }
+          //            }
+          //          }
         }
       }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionTracing.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionTracing.cs	(revision 10837)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionTracing.cs	(revision 10838)
@@ -29,5 +29,9 @@
         if (!node.Parents.Any()) {
           var fragmentNode = new FragmentNode {
-            Content = new Fragment<ISymbolicExpressionTreeNode> { Root = node.Content.NodeAt(index) },
+            Content = new Fragment<ISymbolicExpressionTreeNode> {
+              Root = node.Content.Root,
+              //              Root = node.Content.NodeAt(index)
+              Index1 = index
+            },
             Rank = node.Rank,
             Quality = node.Quality
@@ -36,4 +40,5 @@
             var arc = new GenealogyGraphArc { Source = parent, Target = fragmentNode };
             parent.AddForwardArc(arc);
+            fragmentNode.AddReverseArc(parent);
           }
           yield return fragmentNode; // no tracing if there are no parents
@@ -41,12 +46,8 @@
         }
         var parents = node.Parents.ToList();
-        if (node.IsElite) {
+        var fragment = (IFragment<ISymbolicExpressionTreeNode>)node.InArcs.Last().Data;
+
+        if (node.IsElite || fragment == null) {
           // skip elite, go up the graph to original individual
-          node = parents[0];
-          continue;
-        }
-        var fragment = (IFragment<ISymbolicExpressionTreeNode>)node.InArcs.Last().Data;
-        if (fragment == null) {
-          // the fragment can be null when crossover or mutation did not actually make any change => then we skip
           node = parents[0];
           continue;
@@ -60,5 +61,10 @@
           // we are tracing a mutation operation
           var fragmentNode = new FragmentNode {
-            Content = new Fragment<ISymbolicExpressionTreeNode> { Root = subtree },
+            Content = new Fragment<ISymbolicExpressionTreeNode> {
+              Root = tree.Root,
+              //              Root = subtree
+              Index1 = index,
+              Index2 = fragment.Index1
+            },
             Rank = node.Rank,
             Quality = node.Quality
@@ -67,4 +73,5 @@
             var arc = new GenealogyGraphArc { Source = parent, Target = fragmentNode };
             parent.AddForwardArc(arc);
+            fragmentNode.AddReverseArc(parent);
           }
           yield return fragmentNode;
@@ -98,5 +105,9 @@
               // subtree contains fragment => bifurcation point in the fragment graph
               var fragmentNode = new FragmentNode {
-                Content = new Fragment<ISymbolicExpressionTreeNode> { Root = subtree },
+                Content = new Fragment<ISymbolicExpressionTreeNode> {
+                  Root = tree.Root,
+                  Index1 = index,
+                  Index2 = fragment.Index1
+                },
                 Rank = node.Rank,
                 Quality = node.Quality
@@ -105,6 +116,7 @@
                 var arc = new GenealogyGraphArc { Source = parent, Target = fragmentNode };
                 parent.AddForwardArc(arc);
+                fragmentNode.AddReverseArc(parent);
               }
-              fragmentNode.Content.Index1 = fragment.Index1 - index;
+              //              fragmentNode.Content.Index1 = fragment.Index1 - index;
               yield return fragmentNode;
 
@@ -131,9 +143,4 @@
     }
     #region some helper methods for shortening the tracing code
-    private static void AddChild(this IGenealogyGraphNode parent, IGenealogyGraphNode child) {
-      parent.AddForwardArc(child);
-      child.AddReverseArc(parent);
-      child.Rank = parent.Rank - 1;
-    }
     private static ISymbolicExpressionTreeNode NodeAt(this ISymbolicExpressionTree tree, int position) {
       return NodeAt(tree.Root, position);
@@ -142,15 +149,4 @@
       return root.IterateNodesPrefix().ElementAt(position);
     }
-    private static int IndexOf(this ISymbolicExpressionTree tree, ISymbolicExpressionTreeNode node) {
-      return IndexOf(tree.Root, node);
-    }
-    private 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
   }
