Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionTreeTile.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionTreeTile.cs	(revision 10729)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionTreeTile.cs	(revision 10730)
@@ -38,17 +38,8 @@
     public int PreferredNodeHeight { get; set; }
 
+    private Size size;
     public Size Size {
-      get {
-        int xmin = 0, ymin = 0, xmax = 0, ymax = 0;
-
-        foreach (var p in Primitives.OfType<RectangularPrimitiveBase>()) {
-          if (xmin > p.LowerLeft.X) xmin = (int)Math.Floor(p.LowerLeft.X);
-          if (xmax < p.UpperRight.X) xmax = (int)Math.Ceiling(p.UpperRight.X);
-          if (ymin > p.LowerLeft.Y) ymin = (int)Math.Floor(p.LowerLeft.Y);
-          if (ymax < p.UpperRight.Y) ymax = (int)Math.Ceiling(p.UpperRight.Y);
-        }
-
-        return new Size(xmax - xmin, ymax - ymin);
-      }
+      private set { size = value; }
+      get { return size; }
     }
 
@@ -123,5 +114,5 @@
       LayoutEngine.NodeHeight = PreferredNodeHeight;
 
-      var visualNodes = LayoutEngine.CalculateLayout(actualRoot);
+      var visualNodes = LayoutEngine.CalculateLayout(actualRoot).ToList();
 
       var font = new Font(FontFamily.GenericSansSerif, 10, GraphicsUnit.Pixel);
@@ -157,10 +148,16 @@
         }
       }
-
-      // add a bounding rectangle and flip primitives vertically
+      int xmin = 0, ymin = 0, xmax = 0, ymax = 0;
+      foreach (var rpb in Primitives.OfType<RectangularPrimitiveBase>()) {
+        if (xmin > rpb.LowerLeft.X) xmin = (int)Math.Floor(rpb.LowerLeft.X);
+        if (xmax < rpb.UpperRight.X) xmax = (int)Math.Ceiling(rpb.UpperRight.X);
+        if (ymin > rpb.LowerLeft.Y) ymin = (int)Math.Floor(rpb.LowerLeft.Y);
+        if (ymax < rpb.UpperRight.Y) ymax = (int)Math.Ceiling(rpb.UpperRight.Y);
+      }
+      Size = new Size(xmax - xmin, ymax - ymin);
+      var width = Size.Width;
+      var height = Size.Height;
       // draw a rectangle to mark the countour of this tile
-      var size = this.Size;
-      var height = size.Height;
-      var rectangle = new Rectangle(this.Chart, new PointD(0, 0), new PointD(size.Width, size.Height)) {
+      var rectangle = new Rectangle(this.Chart, new PointD(0, 0), new PointD(width, height)) {
         Pen = new Pen(Color.Gray),
         Brush = new SolidBrush(Color.Transparent)
@@ -168,8 +165,10 @@
       this.Add(rectangle);
 
+      // flip primitives vertically 
       foreach (var primitive in Primitives) {
         var rpb = primitive as RectangularPrimitiveBase;
         if (rpb != null) {
           rpb.SetPosition(rpb.LowerLeft.X, height - rpb.UpperRight.Y, rpb.UpperRight.X, height - rpb.LowerLeft.Y);
+
         } else {
           var line = primitive as LinearPrimitiveBase;
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 10729)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 10730)
@@ -196,7 +196,8 @@
         // new node has been selected, clean up
         Chart.UpdateEnabled = false;
-        if (ModifierKeys != Keys.Shift)
+        if (ModifierKeys != Keys.Shift) {
           // clear colors
           ClearPrimitives();
+        }
         // use a rectangle to highlight the currently selected genealogy graph node
         var gNode = SelectedVisualNode.Data;
@@ -222,10 +223,8 @@
     #endregion
 
-    private void DrawLineage(VisualGenealogyGraphNode node, Func<VisualGenealogyGraphNode, IEnumerable<VisualGenealogyGraphArc>> arcSelector, Func<VisualGenealogyGraphArc, VisualGenealogyGraphNode> nodeSelector) {
+    private static void DrawLineage(VisualGenealogyGraphNode node, Func<VisualGenealogyGraphNode, IEnumerable<VisualGenealogyGraphArc>> arcSelector, Func<VisualGenealogyGraphArc, VisualGenealogyGraphNode> nodeSelector) {
       if (node.Brush != null) return;
       node.Brush = new SolidBrush(node.Data.GetColor());
-      var arcs = arcSelector(node);
-      if (arcs == null) return;
-
+      var arcs = arcSelector(node).ToList();
       foreach (var arc in arcs) {
         var source = arc.Source.Data;
@@ -235,5 +234,5 @@
         arc.Pen.Brush = new LinearGradientBrush(start, end, source.GetColor(), target.GetColor());
         arc.Pen.Color = Color.Transparent;
-        //        arc.Pen.FontBrush = new SolidBrush(Color.DarkGray);
+        //        if (arc == arcs[0]) { arc.Pen.Width = 2; } // mark connection to the root parent
         DrawLineage(nodeSelector(arc), arcSelector, nodeSelector);
       }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/VisualGenealogyGraphNode.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/VisualGenealogyGraphNode.cs	(revision 10729)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/VisualGenealogyGraphNode.cs	(revision 10730)
@@ -70,6 +70,6 @@
     }
 
-    public override void SetPosition(PointD lowLeft, PointD upRight) {
-      base.SetPosition(lowLeft, upRight);
+    public override void SetPosition(PointD lowerLeft, PointD upperRight) {
+      base.SetPosition(lowerLeft, upperRight);
       foreach (var a in IncomingArcs) a.UpdatePosition();
       foreach (var a in OutgoingArcs) a.UpdatePosition();
@@ -83,9 +83,10 @@
       Point p = Chart.TransformWorldToPixel(new PointD(LowerLeft.X, LowerLeft.Y + Size.Height));
       Size s = Chart.TransformWorldToPixel(Size);
-      if (Brush != null)
+      if (Brush != null) {
         graphics.FillEllipse(Brush, p.X, p.Y, s.Width, s.Height);
-      graphics.DrawEllipse(Pen, p.X, p.Y, s.Width, s.Height);
-      if (Data.IsElite) {
-        graphics.DrawEllipse(Pen, p.X + 2, p.Y + 2, s.Width - 4, s.Height - 4);
+        graphics.DrawEllipse(Pen, p.X, p.Y, s.Width, s.Height);
+        if (Data.IsElite) {
+          graphics.DrawEllipse(Pen, p.X + 2, p.Y + 2, s.Width - 4, s.Height - 4);
+        }
       }
     }
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 10729)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/FragmentGraphView.cs	(revision 10730)
@@ -7,4 +7,5 @@
 using HeuristicLab.EvolutionTracking;
 using HeuristicLab.MainForm;
+using HeuristicLab.Visualization;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
@@ -59,9 +60,12 @@
 
     private void Draw() {
-      var root = Content.Nodes.First();
-
+      var chart = symbolicExpressionChartControl.Chart;
+      var nodes = Content.Nodes.ToList();
+      var root = nodes[0];
       var fragmentRoot = tileDictionary[root];
       int maxTileWidth = 0, maxTileHeight = 0;
-      foreach (var tile in Content.Nodes.Select(x => tileDictionary[x].Tile)) {
+      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;
@@ -80,4 +84,25 @@
         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();
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 10729)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymboldDataAnalysisGenealogyView.cs	(revision 10730)
@@ -82,5 +82,5 @@
       symbolicExpressionTreeChart.Tree = tree;
 
-      if (graphNode.InArcs != null) {
+      if (graphNode.InArcs.Any()) {
         var fragment = (IFragment<ISymbolicExpressionTreeNode>)graphNode.InArcs.Last().Data;
         treeChart_HighlightSubtree(fragment.Root);
