Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionTreeTile.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionTreeTile.cs	(revision 10825)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionTreeTile.cs	(revision 10827)
@@ -41,4 +41,8 @@
 
     private const int labelHeight = 30;
+
+    private readonly SolidBrush defaultBrush;
+    private readonly Pen defaultPen;
+    private readonly Font defaultFont;
 
     public ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode> LayoutEngine { get; set; }
@@ -127,4 +131,8 @@
       PreferredNodeHeight = 40;
       Group = new Group(chart);
+
+      defaultBrush = new SolidBrush(Color.Transparent);
+      defaultPen = new Pen(Color.Black);
+      defaultFont = new Font(FontFamily.GenericSansSerif, 12, GraphicsUnit.Pixel);
     }
     public SymbolicExpressionTreeTile(IChart chart, ISymbolicExpressionTree tree)
@@ -142,6 +150,4 @@
       var visualNodes = LayoutEngine.CalculateLayout(actualRoot).ToList();
 
-      var font = new Font(FontFamily.GenericSansSerif, 10, GraphicsUnit.Pixel);
-
       var visualNodeMap = visualNodes.ToDictionary(x => x.Content, x => x);
 
@@ -154,7 +160,11 @@
         var shortenedLabel = ShortenLabel(node);
         if (node.SubtreeCount == 0) {
-          rectangularPrimitive = new Rectangle(Chart, lowerLeft, upperRight) { Font = font, Text = shortenedLabel };
+          rectangularPrimitive = new Rectangle(Chart, lowerLeft, upperRight) {
+            Font = defaultFont, Text = shortenedLabel, Brush = defaultBrush, Pen = defaultPen, MaximumFontSize = 12f
+          };
         } else {
-          rectangularPrimitive = new Ellipse(Chart, lowerLeft, upperRight) { Font = font, Text = shortenedLabel };
+          rectangularPrimitive = new Ellipse(Chart, lowerLeft, upperRight) {
+            Font = defaultFont, Text = shortenedLabel, Brush = defaultBrush, Pen = defaultPen, MaximumFontSize = 12f
+          };
         }
 
@@ -189,8 +199,8 @@
       // draw a primitive to display the label
       var labelRect = new Rectangle(this.Chart, new PointD(0, height), new PointD(width, height + labelHeight)) {
-        Pen = new Pen(Color.Black),
-        Brush = new SolidBrush(Color.Transparent),
+        Pen = defaultPen,
+        Brush = defaultBrush,
         Text = Label,
-        Font = new Font(FontFamily.GenericSansSerif, 12)
+        Font = defaultFont
       };
       this.Add(labelRect);
@@ -200,6 +210,6 @@
 
       var rectangle = new Rectangle(this.Chart, new PointD(0, 0), new PointD(Size.Width, Size.Height)) {
-        Pen = new Pen(Color.Gray),
-        Brush = new SolidBrush(Color.Transparent)
+        Pen = defaultPen,
+        Brush = defaultBrush
       };
       this.Add(rectangle);
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 10825)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 10827)
@@ -37,4 +37,7 @@
     private const double Diameter = 20;
 
+    private readonly Brush defaultBrush;
+    private readonly Pen defaultPen;
+
     public IGenealogyGraph GenealogyGraph {
       get { return genealogyGraph; }
@@ -95,4 +98,7 @@
       : base() {
       InitializeComponent();
+
+      defaultBrush = new SolidBrush(Color.Transparent);
+      defaultPen = new Pen(Color.DarkGray);
     }
 
@@ -111,8 +117,7 @@
 
         foreach (var node in nodes) {
-          var pen = new Pen(Color.DarkGray);
           var brush = new SolidBrush(node.GetColor());
 
-          var visualNode = new VisualGenealogyGraphNode(Chart, x, y, x + diameter, y + diameter, pen, brush) {
+          var visualNode = new VisualGenealogyGraphNode(Chart, x, y, x + diameter, y + diameter, defaultPen, brush) {
             Data = node,
             ToolTipText = "Rank: " + node.Rank + nl +
@@ -138,5 +143,5 @@
           var visualParent = GetMappedNode(parent);
           if (visualParent == null) continue;
-          var pen = new Pen(Color.Transparent);
+          var pen = Pens.Transparent;
           var visualArc = AddArc(Chart, visualParent, visualNode, pen);
           if (!arcMap.ContainsKey(Tuple.Create(visualParent, visualNode)))
@@ -233,6 +238,6 @@
         var start = new Point((int)arc.Start.X, (int)arc.Start.Y);
         var end = new Point((int)arc.End.X, (int)arc.End.Y);
+        arc.Pen = new Pen(Color.Transparent);
         arc.Pen.Brush = new LinearGradientBrush(start, end, source.GetColor(), target.GetColor());
-        arc.Pen.Color = Color.Transparent;
         DrawLineage(nodeSelector(arc), arcSelector, nodeSelector);
       }
@@ -266,9 +271,8 @@
       foreach (var primitive in Chart.Group.Primitives) {
         if (primitive is VisualGenealogyGraphArc) {
-          primitive.Pen.Brush = new SolidBrush(Color.Transparent);
+          primitive.Pen = Pens.Transparent;
         } else if (primitive is VisualGenealogyGraphNode) {
-          var brush = (SolidBrush)primitive.Brush;
-          brush.Color = Color.Transparent;
-          primitive.Pen.Color = Color.DarkGray;
+          primitive.Brush = Brushes.Transparent;
+          primitive.Pen = Pens.DarkGray;
         }
       }
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 10825)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj	(revision 10827)
@@ -237,21 +237,31 @@
       <DependentUpon>GraphicalSymbolicDataAnalysisModelView.cs</DependentUpon>
     </Compile>
-    <Compile Include="Symbols\ConstantView.cs" />
+    <Compile Include="Symbols\ConstantView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Include="Symbols\ConstantView.Designer.cs">
       <DependentUpon>ConstantView.cs</DependentUpon>
     </Compile>
-    <Compile Include="Symbols\LaggedVariableView.cs" />
+    <Compile Include="Symbols\LaggedVariableView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Include="Symbols\LaggedVariableView.Designer.cs">
       <DependentUpon>LaggedVariableView.cs</DependentUpon>
     </Compile>
-    <Compile Include="Symbols\TimeLagView.cs" />
+    <Compile Include="Symbols\TimeLagView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Include="Symbols\TimeLagView.Designer.cs">
       <DependentUpon>TimeLagView.cs</DependentUpon>
     </Compile>
-    <Compile Include="Symbols\VariableConditionView.cs" />
+    <Compile Include="Symbols\VariableConditionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Include="Symbols\VariableConditionView.Designer.cs">
       <DependentUpon>VariableConditionView.cs</DependentUpon>
     </Compile>
-    <Compile Include="Symbols\VariableView.cs" />
+    <Compile Include="Symbols\VariableView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Include="Symbols\VariableView.Designer.cs">
       <DependentUpon>VariableView.cs</DependentUpon>
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 10825)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/FragmentGraphView.cs	(revision 10827)
@@ -101,5 +101,5 @@
               var rpb = primitive as RectangularPrimitiveBase;
               if (rpb != null) {
-                rpb.Pen = new Pen(Color.RoyalBlue);
+                rpb.Pen = Pens.RoyalBlue;
               }
             }
@@ -123,5 +123,5 @@
                   var rpb = primitive as RectangularPrimitiveBase;
                   if (rpb != null) {
-                    rpb.Pen = new Pen(Color.DarkOrange);
+                    rpb.Pen = Pens.DarkOrange;
                   }
                 }
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionAfterCrossoverOperator.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionAfterCrossoverOperator.cs	(revision 10825)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionAfterCrossoverOperator.cs	(revision 10827)
@@ -1,3 +1,24 @@
-﻿using System;
+﻿#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.Linq;
@@ -25,6 +46,8 @@
         break;
       }
-      // if the fragment is null then it means crossover did not do anything
-      //      if (fragment == null) throw new Exception("Could not determine fragment!");
+      //
+      //      if (fragment == null) {
+      //        throw new Exception("SymbolicDataAnalysisExpressionAfterCrossoverOperator: Could not identify fragment");
+      //      }
 
       arcs[0].Data = null;
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionAfterManipulatorOperator.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionAfterManipulatorOperator.cs	(revision 10825)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionAfterManipulatorOperator.cs	(revision 10827)
@@ -1,3 +1,24 @@
-﻿using System;
+﻿#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.Linq;
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionBeforeManipulatorOperator.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionBeforeManipulatorOperator.cs	(revision 10825)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionBeforeManipulatorOperator.cs	(revision 10827)
@@ -1,3 +1,24 @@
-﻿using System.Linq;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Linq;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
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 10825)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SymbolicDataAnalysisExpressionTracing.cs	(revision 10827)
@@ -10,5 +10,5 @@
 using IGraphNode = HeuristicLab.EvolutionTracking.IGenealogyGraphNode<HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTree>;
 
-namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
   public static class SymbolicDataAnalysisExpressionTracing {
     public static IGenealogyGraph<IFragment<ISymbolicExpressionTreeNode>> TraceSubtree(IGenealogyGraphNode<ISymbolicExpressionTree> graphNode, int subtreeIndex) {
@@ -40,54 +40,82 @@
           break;
         }
-
+        var parents = node.Parents.ToList();
         if (node.IsElite) {
-          node = node.Parents.First();
+          // skip elite, go up the graph to original individual
+          node = parents[0];
           continue;
-        } // skip elite, go up the graph to original individual
-
+        }
+        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;
+        }
+        var fragmentLength = fragment.Root.GetLength();
         var tree = node.Content;
         var subtree = tree.NodeAt(index);
         var subtreeLength = subtree.GetLength();
 
-        var fragment = (IFragment<ISymbolicExpressionTreeNode>)node.InArcs.Last().Data;
-        if (fragment == null) break;
-        var fragmentLength = fragment.Root.GetLength();
+        if (parents.Count == 1) {
+          // we are tracing a mutation operation
+          var fragmentNode = new FragmentNode {
+            Content = new Fragment<ISymbolicExpressionTreeNode> { Root = subtree },
+            Rank = node.Rank
+          };
+          if (parent != null) {
+            var arc = new GenealogyGraphArc { Source = parent, Target = fragmentNode };
+            parent.AddForwardArc(arc);
+          }
+          yield return fragmentNode;
+          var up = Trace(parents[0], fragment.Index1, fragmentNode);
+          foreach (var v in up) { yield return v; }
+          break;
+        }
 
-        if (fragment.Index1 == index) {
-          node = node.Parents.Last(); // take second parent which contains the fragment
-          index = fragment.Index2;
-        } else if (fragment.Index1 < index) {
-          if (fragment.Index1 + fragmentLength > index) {
-            node = node.Parents.Last(); // fragment contains subtree, take second parent
-            index += fragment.Index2 - fragment.Index1; // the subtree has the same index relative to the fragment
-          } else {
-            // fragment distinct from subtree
-            node = node.Parents.First(); // take first parent which contains the subtree
-            index += node.Content.NodeAt(fragment.Index1).GetLength() - fragmentLength; // subtreeIndex must be adjusted according to swapped fragments sizes
+        if (parents.Count == 2) {
+          // we are tracing a crossover operation
+          if (fragment.Index1 == index) {
+            node = parents[1]; // take second parent which contains the fragment
+            index = fragment.Index2;
+            continue;
           }
-        } else if (fragment.Index1 > index) {
-          if (fragment.Index1 < index + subtreeLength) {
-            // subtree contains fragment => bifurcation point in the fragment graph
-            var fragmentNode = new FragmentNode {
-              Content = new Fragment<ISymbolicExpressionTreeNode> { Root = subtree },
-              Rank = node.Rank
-            };
-            if (parent != null) {
-              var arc = new GenealogyGraphArc { Source = parent, Target = fragmentNode };
-              parent.AddForwardArc(arc);
+
+          if (fragment.Index1 < index) {
+            if (fragment.Index1 + fragmentLength > index) {
+              node = parents[1]; // fragment contains subtree, take second parent
+              index += fragment.Index2 - fragment.Index1; // the subtree has the same index relative to the fragment
+            } else {
+              // fragment distinct from subtree
+              node = parents[0]; // take first parent which contains the subtree
+              index += node.Content.NodeAt(fragment.Index1).GetLength() - fragmentLength; // subtreeIndex must be adjusted according to swapped fragments sizes
             }
-            fragmentNode.Content.Index1 = fragment.Index1 - index;
-            yield return fragmentNode;
+            continue;
+          }
 
-            var left = Trace(node.Parents.First(), index, fragmentNode); // trace subtree
+          if (fragment.Index1 > index) {
+            if (fragment.Index1 < index + subtreeLength) {
+              // subtree contains fragment => bifurcation point in the fragment graph
+              var fragmentNode = new FragmentNode {
+                Content = new Fragment<ISymbolicExpressionTreeNode> { Root = subtree },
+                Rank = node.Rank
+              };
+              if (parent != null) {
+                var arc = new GenealogyGraphArc { Source = parent, Target = fragmentNode };
+                parent.AddForwardArc(arc);
+              }
+              fragmentNode.Content.Index1 = fragment.Index1 - index;
+              yield return fragmentNode;
 
-            if (node.Parents.Last().Content.NodeAt(fragment.Index2).GetLength() != fragmentLength) {
-              throw new Exception("Fragment lengths should match!");
+              if (parents[1].Content.NodeAt(fragment.Index2).GetLength() != fragmentLength) {
+                throw new Exception("Fragment lengths should match!");
+              }
+              // the two paths below ("left" and "right") correspond to the subtree and the fragment, respectively
+              var left = Trace(parents[0], index, fragmentNode); // trace subtree
+              var right = Trace(parents[1], fragment.Index2, fragmentNode); // trace fragment
+              foreach (var v in left.Concat(right)) { yield return v; }
+              break;
+            } else {
+              node = parents[0]; // fragment distinct from subtree: update node, index remains unchanged
             }
-            var right = Trace(node.Parents.Last(), fragment.Index2, fragmentNode); // trace fragment
-            foreach (var v in left.Concat(right)) { yield return v; }
-            break;
-          } else {
-            node = node.Parents.First(); // fragment distinct from subtree: update node, index remains unchanged
           }
         }
@@ -101,5 +129,4 @@
     }
     #region some helper methods for shortening the tracing code
-
     private static void AddChild(this IGenealogyGraphNode parent, IGenealogyGraphNode child) {
       parent.AddForwardArc(child);
