Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 15560)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 15561)
@@ -32,6 +32,6 @@
   public partial class GenealogyGraphChart : ChartControl {
     private IGenealogyGraph genealogyGraph;
-    private const double XIncrement = 30;
-    private const double YIncrement = 30;
+    private const double XIncrement = 25;
+    private const double YIncrement = 25;
     private const double Diameter = 20;
     private readonly Brush defaultBrush;
@@ -44,5 +44,5 @@
     public bool SimpleLineages { get; set; }
     public bool LockGenealogy { get; set; }
-    public bool TraceFragments { get; set; }
+    public Func<IGenealogyGraphNode, Color> ColorSelector { get; set; }
     #endregion
 
@@ -98,9 +98,11 @@
     }
 
-    public GenealogyGraphChart() : base(new Chart(0, 0, 800, 600)) {
+    public GenealogyGraphChart() : base(new GridlessChart(0, 0, 800, 600)) {
       InitializeComponent();
       AddChartModes(new PanChartMode(this), new ZoomInChartMode(this), new ZoomOutChartMode(this), new SelectChartMode(this));
       defaultBrush = new SolidBrush(Color.Transparent);
       defaultPen = new Pen(Color.DarkGray);
+
+      ColorSelector = node => ColorGradient.Colors[(int)Math.Round(node.Quality * 255)];
     }
 
@@ -114,4 +116,11 @@
 
       foreach (var rank in ranks) {
+        var rect = new Visualization.Rectangle(Chart, new PointD(x, y), new PointD(x + diameter, y + diameter));
+        var font = new Font(FontFamily.GenericSansSerif, 12);
+        var genLabel = new LabeledPrimitive(rect, rank.Rank.ToString(), font);
+        Chart.Group.Add(genLabel);
+
+        x += xIncrement;
+
         var nodes = rank.Nodes.ToList();
         nodes.Sort((a, b) => b.CompareTo(a)); // sort descending by quality
@@ -119,5 +128,5 @@
 
         foreach (var node in nodes) {
-          var brush = new SolidBrush(node.GetColor());
+          var brush = new SolidBrush(ColorSelector(node));
           var visualNode = new VisualGenealogyGraphNode(Chart, x, y, x + diameter, y + diameter, defaultPen, brush) {
             Data = node,
@@ -199,7 +208,7 @@
         var visualNode = GetMappedNode(graphNode);
 
-        DrawLineage(visualNode, n => SimpleLineages ? n.IncomingArcs.Take(1) : n.IncomingArcs, a => a.Source);
+        DrawLineage(visualNode, n => SimpleLineages ? n.IncomingArcs.Take(1) : n.IncomingArcs, a => a.Source, ColorSelector);
         ((SolidBrush)visualNode.Brush).Color = Color.Transparent;
-        DrawLineage(visualNode, n => n.OutgoingArcs, a => a.Target);
+        DrawLineage(visualNode, n => n.OutgoingArcs, a => a.Target, ColorSelector);
       }
 
@@ -212,8 +221,8 @@
 
     #region drawing routines
-    private static 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, Func<IGenealogyGraphNode, Color> getNodeColor) {
       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();
+      brush.Color = getNodeColor(node.Data);
       var arcs = arcSelector(node);
       var pen = new Pen(Color.Transparent);
@@ -224,6 +233,6 @@
         var end = new Point((int)arc.End.X, (int)arc.End.Y);
         arc.Pen = pen;
-        arc.Pen.Brush = new LinearGradientBrush(start, end, source.GetColor(), target.GetColor());
-        DrawLineage(nodeSelector(arc), arcSelector, nodeSelector);
+        arc.Pen.Brush = new LinearGradientBrush(start, end, getNodeColor(source), getNodeColor(target));
+        DrawLineage(nodeSelector(arc), arcSelector, nodeSelector, getNodeColor);
       }
     }
@@ -287,5 +296,5 @@
       foreach (var node in nodes) {
         var graphNode = GetMappedNode(node);
-        graphNode.Brush = new SolidBrush(node.GetColor());
+        graphNode.Brush = new SolidBrush(ColorSelector(node));
       }
     }
@@ -302,6 +311,8 @@
     public void HighlightAll() {
       foreach (var visualNode in nodeMap.Values) {
-        visualNode.Brush = new SolidBrush(visualNode.Data.GetColor());
-      }
+        visualNode.Brush = new SolidBrush(ColorSelector(visualNode.Data));
+        Chart.IntoForeground(visualNode);
+      }
+      // draw arcs first and then nodes
       foreach (var arc in arcMap.Values) {
         var source = arc.Source.Data;
@@ -309,5 +320,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.Brush = new LinearGradientBrush(start, end, source.GetColor(), target.GetColor());
+        arc.Pen = new Pen(new LinearGradientBrush(start, end, ColorSelector(source), ColorSelector(target)));
+        Chart.IntoBackground(arc);
       }
     }
@@ -319,16 +331,16 @@
       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 = new Pen(new LinearGradientBrush(start, end, ColorSelector(source), ColorSelector(target)));
+      Chart.IntoBackground(arc);
     }
     #endregion
-  }
-
-  internal static class Util {
-    public static Color GetColor(this IGenealogyGraphNode node) {
-      if (double.IsNaN(node.Quality))
-        return ColorGradient.Colors[0];
-      var colorIndex = (int)Math.Round(node.Quality * ColorGradient.Colors.Count);
-      if (colorIndex >= ColorGradient.Colors.Count) return ColorGradient.Colors.Last();
-      return ColorGradient.Colors[colorIndex];
+
+    // workaround to disable the chart grid
+    private class GridlessChart : Chart {
+      public GridlessChart(PointD lowerLeft, PointD upperRight) : base(lowerLeft, upperRight) {
+        Grid = null;
+      }
+
+      public GridlessChart(double x1, double y1, double x2, double y2) : this(new PointD(x1, y1), new PointD(x2, y2)) { }
     }
   }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.Designer.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.Designer.cs	(revision 15560)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.Designer.cs	(revision 15561)
@@ -26,16 +26,10 @@
     private void InitializeComponent() {
       this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.genealogyGraphChart = new HeuristicLab.EvolutionTracking.Views.GenealogyGraphChart();
       this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.groupBox = new System.Windows.Forms.GroupBox();
-      this.openNew_CheckBox = new System.Windows.Forms.CheckBox();
-      this.lockGraph_checkBox = new System.Windows.Forms.CheckBox();
-      this.simpleLineages_checkBox = new System.Windows.Forms.CheckBox();
-      this.trace_checkBox = new System.Windows.Forms.CheckBox();
-      this.genealogyGraphChart = new HeuristicLab.EvolutionTracking.Views.GenealogyGraphChart();
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
       this.splitContainer.Panel1.SuspendLayout();
       this.splitContainer.Panel2.SuspendLayout();
       this.splitContainer.SuspendLayout();
-      this.groupBox.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -45,5 +39,5 @@
             | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
-      this.splitContainer.Location = new System.Drawing.Point(3, 55);
+      this.splitContainer.Location = new System.Drawing.Point(3, 3);
       this.splitContainer.Name = "splitContainer";
       // 
@@ -55,7 +49,26 @@
       // 
       this.splitContainer.Panel2.Controls.Add(this.viewHost);
-      this.splitContainer.Size = new System.Drawing.Size(1394, 742);
-      this.splitContainer.SplitterDistance = 694;
+      this.splitContainer.Size = new System.Drawing.Size(1404, 794);
+      this.splitContainer.SplitterDistance = 698;
       this.splitContainer.TabIndex = 0;
+      // 
+      // genealogyGraphChart
+      // 
+      this.genealogyGraphChart.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.genealogyGraphChart.BackColor = System.Drawing.SystemColors.Control;
+      this.genealogyGraphChart.GenealogyGraph = null;
+      this.genealogyGraphChart.Location = new System.Drawing.Point(0, 0);
+      this.genealogyGraphChart.LockGenealogy = false;
+      this.genealogyGraphChart.Mode = null;
+      this.genealogyGraphChart.Name = "genealogyGraphChart";
+      this.genealogyGraphChart.ScaleOnResize = true;
+      this.genealogyGraphChart.SelectedGraphNode = null;
+      this.genealogyGraphChart.ShowToolBar = true;
+      this.genealogyGraphChart.SimpleLineages = false;
+      this.genealogyGraphChart.Size = new System.Drawing.Size(693, 790);
+      this.genealogyGraphChart.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.Default;
+      this.genealogyGraphChart.TabIndex = 0;
       // 
       // viewHost
@@ -71,84 +84,8 @@
       this.viewHost.Name = "viewHost";
       this.viewHost.ReadOnly = false;
-      this.viewHost.Size = new System.Drawing.Size(697, 743);
+      this.viewHost.Size = new System.Drawing.Size(703, 795);
       this.viewHost.TabIndex = 0;
       this.viewHost.ViewsLabelVisible = true;
       this.viewHost.ViewType = null;
-      // 
-      // groupBox
-      // 
-      this.groupBox.Controls.Add(this.openNew_CheckBox);
-      this.groupBox.Controls.Add(this.lockGraph_checkBox);
-      this.groupBox.Controls.Add(this.simpleLineages_checkBox);
-      this.groupBox.Controls.Add(this.trace_checkBox);
-      this.groupBox.Location = new System.Drawing.Point(3, 4);
-      this.groupBox.Name = "groupBox";
-      this.groupBox.Size = new System.Drawing.Size(602, 44);
-      this.groupBox.TabIndex = 1;
-      this.groupBox.TabStop = false;
-      this.groupBox.Text = "Genealogy Options";
-      // 
-      // openNew_CheckBox
-      // 
-      this.openNew_CheckBox.AutoSize = true;
-      this.openNew_CheckBox.Location = new System.Drawing.Point(485, 19);
-      this.openNew_CheckBox.Name = "openNew_CheckBox";
-      this.openNew_CheckBox.Size = new System.Drawing.Size(111, 17);
-      this.openNew_CheckBox.TabIndex = 1;
-      this.openNew_CheckBox.Text = "Open in new view";
-      this.openNew_CheckBox.UseVisualStyleBackColor = true;
-      // 
-      // lockGraph_checkBox
-      // 
-      this.lockGraph_checkBox.Appearance = System.Windows.Forms.Appearance.Button;
-      this.lockGraph_checkBox.AutoSize = true;
-      this.lockGraph_checkBox.Location = new System.Drawing.Point(157, 15);
-      this.lockGraph_checkBox.Name = "lockGraph_checkBox";
-      this.lockGraph_checkBox.Size = new System.Drawing.Size(73, 23);
-      this.lockGraph_checkBox.TabIndex = 0;
-      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.Appearance = System.Windows.Forms.Appearance.Button;
-      this.simpleLineages_checkBox.AutoSize = true;
-      this.simpleLineages_checkBox.Location = new System.Drawing.Point(57, 15);
-      this.simpleLineages_checkBox.Name = "simpleLineages_checkBox";
-      this.simpleLineages_checkBox.Size = new System.Drawing.Size(94, 23);
-      this.simpleLineages_checkBox.TabIndex = 0;
-      this.simpleLineages_checkBox.Text = "Simple Lineages";
-      this.simpleLineages_checkBox.UseVisualStyleBackColor = true;
-      this.simpleLineages_checkBox.CheckedChanged += new System.EventHandler(this.simpleLineages_checkBox_CheckedChanged);
-      // 
-      // trace_checkBox
-      // 
-      this.trace_checkBox.Appearance = System.Windows.Forms.Appearance.Button;
-      this.trace_checkBox.AutoSize = true;
-      this.trace_checkBox.Location = new System.Drawing.Point(6, 15);
-      this.trace_checkBox.Name = "trace_checkBox";
-      this.trace_checkBox.Size = new System.Drawing.Size(45, 23);
-      this.trace_checkBox.TabIndex = 0;
-      this.trace_checkBox.Text = "Trace";
-      this.trace_checkBox.UseVisualStyleBackColor = true;
-      this.trace_checkBox.CheckedChanged += new System.EventHandler(this.trace_checkBox_CheckedChanged);
-      // 
-      // genealogyGraphChart
-      // 
-      this.genealogyGraphChart.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.genealogyGraphChart.BackColor = System.Drawing.SystemColors.Control;
-      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.SelectedGraphNode = null;
-      this.genealogyGraphChart.SimpleLineages = false;
-      this.genealogyGraphChart.Size = new System.Drawing.Size(689, 738);
-      this.genealogyGraphChart.TabIndex = 0;
-      this.genealogyGraphChart.TraceFragments = false;
       // 
       // GenealogyGraphView
@@ -156,14 +93,11 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.groupBox);
       this.Controls.Add(this.splitContainer);
       this.Name = "GenealogyGraphView";
-      this.Size = new System.Drawing.Size(1400, 800);
+      this.Size = new System.Drawing.Size(1410, 800);
       this.splitContainer.Panel1.ResumeLayout(false);
       this.splitContainer.Panel2.ResumeLayout(false);
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
       this.splitContainer.ResumeLayout(false);
-      this.groupBox.ResumeLayout(false);
-      this.groupBox.PerformLayout();
       this.ResumeLayout(false);
 
@@ -175,9 +109,4 @@
     protected MainForm.WindowsForms.ViewHost viewHost;
     protected GenealogyGraphChart genealogyGraphChart;
-    private System.Windows.Forms.GroupBox groupBox;
-    protected System.Windows.Forms.CheckBox trace_checkBox;
-    protected System.Windows.Forms.CheckBox simpleLineages_checkBox;
-    protected System.Windows.Forms.CheckBox lockGraph_checkBox;
-    protected System.Windows.Forms.CheckBox openNew_CheckBox;
 
   }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.cs	(revision 15560)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.cs	(revision 15561)
@@ -7,5 +7,5 @@
   [View("GenealogyGraphView")]
   [Content(typeof(IGenealogyGraph<>), IsDefaultView = false)]
-  public partial class GenealogyGraphView<T> : ItemView where T : class,IItem {
+  public partial class GenealogyGraphView<T> : ItemView where T : class, IItem {
     public new IGenealogyGraph<T> Content {
       get { return (IGenealogyGraph<T>)base.Content; }
@@ -49,8 +49,6 @@
       var visualNode = (VisualGenealogyGraphNode)sender;
       var graphNode = (IGenealogyGraphNode<T>)visualNode.Data;
-      if (graphNode == null) return;
-      var content = graphNode.Data;
-      if (content == null) return;
-      viewHost.Content = content;
+      if (graphNode == null || graphNode.Data == null) return;
+      viewHost.Content = graphNode.Data;
     }
     public virtual void graphChart_GenealogyGraphNodeDoubleClicked(object sender, MouseEventArgs arcs) {
@@ -60,13 +58,13 @@
     #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;
+      //genealogyGraphChart.TraceFragments = trace_checkBox.Checked;
     }
 
     private void simpleLineages_checkBox_CheckedChanged(object sender, System.EventArgs e) {
-      genealogyGraphChart.SimpleLineages = simpleLineages_checkBox.Checked;
+      //genealogyGraphChart.SimpleLineages = simpleLineages_checkBox.Checked;
     }
 
     private void lockGraph_checkBox_CheckedChanged(object sender, System.EventArgs e) {
-      genealogyGraphChart.LockGenealogy = lockGraph_checkBox.Checked;
+      //genealogyGraphChart.LockGenealogy = lockGraph_checkBox.Checked;
     }
     #endregion
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/HeuristicLab.EvolutionTracking.Views-3.4.csproj
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/HeuristicLab.EvolutionTracking.Views-3.4.csproj	(revision 15560)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/HeuristicLab.EvolutionTracking.Views-3.4.csproj	(revision 15561)
@@ -97,5 +97,7 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="GenealogyGraphChart.cs" />
+    <Compile Include="GenealogyGraphChart.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Include="GenealogyGraphChart.Designer.cs">
       <DependentUpon>GenealogyGraphChart.cs</DependentUpon>
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.Designer.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.Designer.cs	(revision 15560)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.Designer.cs	(revision 15561)
@@ -45,80 +45,98 @@
     /// </summary>
     private void InitializeComponent() {
-      this.groupBox1 = new System.Windows.Forms.GroupBox();
-      this.nodeWeightLabel = new System.Windows.Forms.Label();
-      this.nodeWeightLabelLabel = new System.Windows.Forms.Label();
+      this.selectedNodeStatusStrip = new System.Windows.Forms.StatusStrip();
+      this.colorModeLabel = new System.Windows.Forms.Label();
+      this.nodeColorsComboBox = new System.Windows.Forms.ComboBox();
+      this.traceCheckBox = new System.Windows.Forms.CheckBox();
+      this.createNewViewCheckBox = new System.Windows.Forms.CheckBox();
       this.navigateRightButton = new System.Windows.Forms.Button();
       this.navigateLeftButton = new System.Windows.Forms.Button();
-      this.nodeDegreeLabel = new System.Windows.Forms.Label();
-      this.nodeDegreeLabelLabel = new System.Windows.Forms.Label();
-      this.nodeRankLabel = new System.Windows.Forms.Label();
-      this.nodeRankLabelLabel = new System.Windows.Forms.Label();
-      this.nodeQualityLabel = new System.Windows.Forms.Label();
-      this.nodeQualityLabelLabel = new System.Windows.Forms.Label();
-      this.matchingModeButton = new System.Windows.Forms.CheckBox();
+      this.lockCheckBox = new System.Windows.Forms.CheckBox();
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
       this.splitContainer.Panel1.SuspendLayout();
       this.splitContainer.Panel2.SuspendLayout();
       this.splitContainer.SuspendLayout();
-      this.groupBox1.SuspendLayout();
       this.SuspendLayout();
       // 
       // splitContainer
       // 
-      this.splitContainer.Size = new System.Drawing.Size(1241, 700);
+      this.splitContainer.Location = new System.Drawing.Point(3, 31);
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.selectedNodeStatusStrip);
+      this.splitContainer.Size = new System.Drawing.Size(1241, 721);
       this.splitContainer.SplitterDistance = 617;
       // 
       // viewHost
       // 
-      this.viewHost.Size = new System.Drawing.Size(617, 697);
+      this.viewHost.Size = new System.Drawing.Size(617, 770);
       // 
       // genealogyGraphChart
       // 
-      this.genealogyGraphChart.Size = new System.Drawing.Size(614, 697);
-      // 
-      // groupBox1
-      // 
-      this.groupBox1.Controls.Add(this.matchingModeButton);
-      this.groupBox1.Controls.Add(this.nodeWeightLabel);
-      this.groupBox1.Controls.Add(this.nodeWeightLabelLabel);
-      this.groupBox1.Controls.Add(this.navigateRightButton);
-      this.groupBox1.Controls.Add(this.navigateLeftButton);
-      this.groupBox1.Controls.Add(this.nodeDegreeLabel);
-      this.groupBox1.Controls.Add(this.nodeDegreeLabelLabel);
-      this.groupBox1.Controls.Add(this.nodeRankLabel);
-      this.groupBox1.Controls.Add(this.nodeRankLabelLabel);
-      this.groupBox1.Controls.Add(this.nodeQualityLabel);
-      this.groupBox1.Controls.Add(this.nodeQualityLabelLabel);
-      this.groupBox1.Location = new System.Drawing.Point(624, 4);
-      this.groupBox1.Name = "groupBox1";
-      this.groupBox1.Size = new System.Drawing.Size(617, 44);
-      this.groupBox1.TabIndex = 2;
-      this.groupBox1.TabStop = false;
-      this.groupBox1.Text = "Current Node";
-      // 
-      // nodeWeightLabel
-      // 
-      this.nodeWeightLabel.AutoSize = true;
-      this.nodeWeightLabel.Location = new System.Drawing.Point(285, 20);
-      this.nodeWeightLabel.Name = "nodeWeightLabel";
-      this.nodeWeightLabel.Size = new System.Drawing.Size(0, 13);
-      this.nodeWeightLabel.TabIndex = 8;
-      // 
-      // nodeWeightLabelLabel
-      // 
-      this.nodeWeightLabelLabel.AutoSize = true;
-      this.nodeWeightLabelLabel.Location = new System.Drawing.Point(241, 20);
-      this.nodeWeightLabelLabel.Name = "nodeWeightLabelLabel";
-      this.nodeWeightLabelLabel.Size = new System.Drawing.Size(44, 13);
-      this.nodeWeightLabelLabel.TabIndex = 7;
-      this.nodeWeightLabelLabel.Text = "Weight:";
+      this.genealogyGraphChart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)));
+      this.genealogyGraphChart.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.genealogyGraphChart.Size = new System.Drawing.Size(617, 699);
+      // 
+      // selectedNodeStatusStrip
+      // 
+      this.selectedNodeStatusStrip.Location = new System.Drawing.Point(0, 699);
+      this.selectedNodeStatusStrip.Name = "selectedNodeStatusStrip";
+      this.selectedNodeStatusStrip.Size = new System.Drawing.Size(617, 22);
+      this.selectedNodeStatusStrip.TabIndex = 1;
+      this.selectedNodeStatusStrip.Text = "statusStrip1";
+      // 
+      // colorModeLabel
+      // 
+      this.colorModeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.colorModeLabel.AutoSize = true;
+      this.colorModeLabel.Location = new System.Drawing.Point(453, 9);
+      this.colorModeLabel.Name = "colorModeLabel";
+      this.colorModeLabel.Size = new System.Drawing.Size(39, 13);
+      this.colorModeLabel.TabIndex = 1;
+      this.colorModeLabel.Text = "Colors:";
+      // 
+      // nodeColorsComboBox
+      // 
+      this.nodeColorsComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.nodeColorsComboBox.FormattingEnabled = true;
+      this.nodeColorsComboBox.Items.AddRange(new object[] {
+            "Quality",
+            "Weight"});
+      this.nodeColorsComboBox.Location = new System.Drawing.Point(498, 6);
+      this.nodeColorsComboBox.Name = "nodeColorsComboBox";
+      this.nodeColorsComboBox.Size = new System.Drawing.Size(62, 21);
+      this.nodeColorsComboBox.TabIndex = 2;
+      this.nodeColorsComboBox.Text = "Quality";
+      this.nodeColorsComboBox.SelectedIndexChanged += new System.EventHandler(this.nodeColorsComboBox_SelectedIndexChanged);
+      // 
+      // traceCheckBox
+      // 
+      this.traceCheckBox.AutoSize = true;
+      this.traceCheckBox.Location = new System.Drawing.Point(3, 8);
+      this.traceCheckBox.Name = "traceCheckBox";
+      this.traceCheckBox.Size = new System.Drawing.Size(54, 17);
+      this.traceCheckBox.TabIndex = 3;
+      this.traceCheckBox.Text = "Trace";
+      this.traceCheckBox.UseVisualStyleBackColor = true;
+      // 
+      // createNewViewCheckBox
+      // 
+      this.createNewViewCheckBox.AutoSize = true;
+      this.createNewViewCheckBox.Location = new System.Drawing.Point(63, 8);
+      this.createNewViewCheckBox.Name = "createNewViewCheckBox";
+      this.createNewViewCheckBox.Size = new System.Drawing.Size(105, 17);
+      this.createNewViewCheckBox.TabIndex = 4;
+      this.createNewViewCheckBox.Text = "Create new view";
+      this.createNewViewCheckBox.UseVisualStyleBackColor = true;
       // 
       // navigateRightButton
       // 
+      this.navigateRightButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
       this.navigateRightButton.Image = global::HeuristicLab.Problems.DataAnalysis.Symbolic.Views.Properties.Resources.LargeLeftDiagonal_235;
-      this.navigateRightButton.Location = new System.Drawing.Point(589, 14);
+      this.navigateRightButton.Location = new System.Drawing.Point(595, 4);
       this.navigateRightButton.Name = "navigateRightButton";
-      this.navigateRightButton.Size = new System.Drawing.Size(22, 22);
-      this.navigateRightButton.TabIndex = 6;
+      this.navigateRightButton.Size = new System.Drawing.Size(23, 23);
+      this.navigateRightButton.TabIndex = 5;
       this.navigateRightButton.UseVisualStyleBackColor = true;
       this.navigateRightButton.Click += new System.EventHandler(this.navigateRightButton_Click);
@@ -126,74 +144,23 @@
       // navigateLeftButton
       // 
+      this.navigateLeftButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
       this.navigateLeftButton.Image = global::HeuristicLab.Problems.DataAnalysis.Symbolic.Views.Properties.Resources.LargeRightDiagonal_238;
-      this.navigateLeftButton.Location = new System.Drawing.Point(561, 14);
+      this.navigateLeftButton.Location = new System.Drawing.Point(566, 4);
       this.navigateLeftButton.Name = "navigateLeftButton";
-      this.navigateLeftButton.Size = new System.Drawing.Size(22, 22);
+      this.navigateLeftButton.Size = new System.Drawing.Size(23, 23);
       this.navigateLeftButton.TabIndex = 6;
       this.navigateLeftButton.UseVisualStyleBackColor = true;
       this.navigateLeftButton.Click += new System.EventHandler(this.navigateLeftButton_Click);
       // 
-      // nodeDegreeLabel
-      // 
-      this.nodeDegreeLabel.AutoSize = true;
-      this.nodeDegreeLabel.Location = new System.Drawing.Point(205, 20);
-      this.nodeDegreeLabel.Name = "nodeDegreeLabel";
-      this.nodeDegreeLabel.Size = new System.Drawing.Size(0, 13);
-      this.nodeDegreeLabel.TabIndex = 5;
-      // 
-      // nodeDegreeLabelLabel
-      // 
-      this.nodeDegreeLabelLabel.AutoSize = true;
-      this.nodeDegreeLabelLabel.Location = new System.Drawing.Point(154, 20);
-      this.nodeDegreeLabelLabel.Name = "nodeDegreeLabelLabel";
-      this.nodeDegreeLabelLabel.Size = new System.Drawing.Size(45, 13);
-      this.nodeDegreeLabelLabel.TabIndex = 4;
-      this.nodeDegreeLabelLabel.Text = "Degree:";
-      // 
-      // nodeRankLabel
-      // 
-      this.nodeRankLabel.AutoSize = true;
-      this.nodeRankLabel.Location = new System.Drawing.Point(123, 20);
-      this.nodeRankLabel.Name = "nodeRankLabel";
-      this.nodeRankLabel.Size = new System.Drawing.Size(0, 13);
-      this.nodeRankLabel.TabIndex = 3;
-      // 
-      // nodeRankLabelLabel
-      // 
-      this.nodeRankLabelLabel.AutoSize = true;
-      this.nodeRankLabelLabel.Location = new System.Drawing.Point(81, 20);
-      this.nodeRankLabelLabel.Name = "nodeRankLabelLabel";
-      this.nodeRankLabelLabel.Size = new System.Drawing.Size(36, 13);
-      this.nodeRankLabelLabel.TabIndex = 2;
-      this.nodeRankLabelLabel.Text = "Rank:";
-      // 
-      // nodeQualityLabel
-      // 
-      this.nodeQualityLabel.AutoSize = true;
-      this.nodeQualityLabel.Location = new System.Drawing.Point(54, 20);
-      this.nodeQualityLabel.Name = "nodeQualityLabel";
-      this.nodeQualityLabel.Size = new System.Drawing.Size(0, 13);
-      this.nodeQualityLabel.TabIndex = 1;
-      // 
-      // nodeQualityLabelLabel
-      // 
-      this.nodeQualityLabelLabel.AutoSize = true;
-      this.nodeQualityLabelLabel.Location = new System.Drawing.Point(6, 20);
-      this.nodeQualityLabelLabel.Name = "nodeQualityLabelLabel";
-      this.nodeQualityLabelLabel.Size = new System.Drawing.Size(42, 13);
-      this.nodeQualityLabelLabel.TabIndex = 0;
-      this.nodeQualityLabelLabel.Text = "Quality:";
-      // 
-      // matchingModeButton
-      // 
-      this.matchingModeButton.AutoSize = true;
-      this.matchingModeButton.Checked = true;
-      this.matchingModeButton.CheckState = System.Windows.Forms.CheckState.Checked;
-      this.matchingModeButton.Location = new System.Drawing.Point(455, 18);
-      this.matchingModeButton.Name = "matchingModeButton";
-      this.matchingModeButton.Size = new System.Drawing.Size(100, 17);
-      this.matchingModeButton.TabIndex = 9;
-      this.matchingModeButton.Text = "Exact Matching";
-      this.matchingModeButton.UseVisualStyleBackColor = true;
+      // lockCheckBox
+      // 
+      this.lockCheckBox.AutoSize = true;
+      this.lockCheckBox.Location = new System.Drawing.Point(174, 8);
+      this.lockCheckBox.Name = "lockCheckBox";
+      this.lockCheckBox.Size = new System.Drawing.Size(50, 17);
+      this.lockCheckBox.TabIndex = 7;
+      this.lockCheckBox.Text = "Lock";
+      this.lockCheckBox.UseVisualStyleBackColor = true;
+      this.lockCheckBox.CheckedChanged += new System.EventHandler(this.lockCheckBox_CheckedChanged);
       // 
       // SymbolicDataAnalysisGenealogyGraphView
@@ -201,33 +168,40 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.groupBox1);
+      this.Controls.Add(this.lockCheckBox);
+      this.Controls.Add(this.navigateLeftButton);
+      this.Controls.Add(this.navigateRightButton);
+      this.Controls.Add(this.createNewViewCheckBox);
+      this.Controls.Add(this.traceCheckBox);
+      this.Controls.Add(this.nodeColorsComboBox);
+      this.Controls.Add(this.colorModeLabel);
       this.Name = "SymbolicDataAnalysisGenealogyGraphView";
       this.Size = new System.Drawing.Size(1247, 755);
       this.Controls.SetChildIndex(this.splitContainer, 0);
-      this.Controls.SetChildIndex(this.groupBox1, 0);
+      this.Controls.SetChildIndex(this.colorModeLabel, 0);
+      this.Controls.SetChildIndex(this.nodeColorsComboBox, 0);
+      this.Controls.SetChildIndex(this.traceCheckBox, 0);
+      this.Controls.SetChildIndex(this.createNewViewCheckBox, 0);
+      this.Controls.SetChildIndex(this.navigateRightButton, 0);
+      this.Controls.SetChildIndex(this.navigateLeftButton, 0);
+      this.Controls.SetChildIndex(this.lockCheckBox, 0);
       this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel1.PerformLayout();
       this.splitContainer.Panel2.ResumeLayout(false);
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
       this.splitContainer.ResumeLayout(false);
-      this.groupBox1.ResumeLayout(false);
-      this.groupBox1.PerformLayout();
       this.ResumeLayout(false);
+      this.PerformLayout();
 
     }
 
     #endregion
-
-    private System.Windows.Forms.GroupBox groupBox1;
-    private System.Windows.Forms.Label nodeQualityLabelLabel;
-    private System.Windows.Forms.Label nodeQualityLabel;
-    private System.Windows.Forms.Label nodeRankLabelLabel;
-    private System.Windows.Forms.Label nodeRankLabel;
-    private System.Windows.Forms.Label nodeDegreeLabel;
-    private System.Windows.Forms.Label nodeDegreeLabelLabel;
+    private System.Windows.Forms.StatusStrip selectedNodeStatusStrip;
+    private System.Windows.Forms.Label colorModeLabel;
+    private System.Windows.Forms.ComboBox nodeColorsComboBox;
+    private System.Windows.Forms.CheckBox traceCheckBox;
+    private System.Windows.Forms.CheckBox createNewViewCheckBox;
     private System.Windows.Forms.Button navigateRightButton;
     private System.Windows.Forms.Button navigateLeftButton;
-    private System.Windows.Forms.Label nodeWeightLabelLabel;
-    private System.Windows.Forms.Label nodeWeightLabel;
-    private System.Windows.Forms.CheckBox matchingModeButton;
+    private System.Windows.Forms.CheckBox lockCheckBox;
   }
 }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.cs	(revision 15560)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.cs	(revision 15561)
@@ -103,8 +103,6 @@
       lastTd = null;
 
-      nodeQualityLabel.Text = string.Format("{0:0.000}", graphNode.Quality);
-      nodeRankLabel.Text = string.Format("{0:0.0}", graphNode.Rank);
-      nodeDegreeLabel.Text = string.Format("{0} / {1}", graphNode.InDegree, graphNode.OutDegree);
-      nodeWeightLabel.Text = string.Format("{0:0.00}", graphNode.Weight);
+      selectedNodeStatusStrip.Text = string.Format("Quality: {0:0.00}, Rank: {1:0.0}, Degree: {2}/{3}, Weight: {4:0.00}",
+        graphNode.Quality, graphNode.Rank, graphNode.InDegree, graphNode.OutDegree, graphNode.Weight);
 
       // update the righthand side tree view when another genealogy graph node is selected
@@ -113,5 +111,5 @@
       if (!graphNode.InArcs.Any()) return; // node has no ancestors, nothing to do
 
-      if (openNew_CheckBox.Checked) {
+      if (createNewViewCheckBox.Checked) {
         // get the ancestors into a new view
         var cloner = new Cloner();
@@ -169,5 +167,5 @@
     private void OnTreeNodeLeftClicked(ISymbolicExpressionTreeNode node) {
       SelectedSubtree = node;
-      bool trace = genealogyGraphChart.TraceFragments;
+      bool trace = traceCheckBox.Checked;
 
       // check whether we are in 'trace' or 'match' mode
@@ -183,55 +181,18 @@
         genealogyGraphChart.SuspendRendering();
         genealogyGraphChart.ClearPrimitives(); // clear everything
-        var rankMaximums = new Dictionary<double, double>();
-
-        if (openNew_CheckBox.Checked) {
+        bool newView = createNewViewCheckBox.Checked;
+        if (newView) {
           MainFormManager.MainForm.ShowContent(traceGraph);
         } else {
-        }
-        // fill each vertex in the graph with a grayscale color according to average subtree weight
-
-        /*
-                var colorGradient = ColorGradient.GrayscaledColors;
-                var colorCount = colorGradient.Count - 1;
-                foreach (var r in Content.Ranks) {
-                  var vertices = r.Value.Cast<IGenealogyGraphNode<ISymbolicExpressionTree>>().ToList();
-                  var averages = vertices.Select(x => x.Data.IterateNodesPrefix().Average(n => n.NodeWeight)).ToList();
-                  var max = averages.Max();
-                  rankMaximums.Add(r.Key, max);
-                  if (max.IsAlmost(0.0)) continue;
-                  for (int i = 0; i < vertices.Count; ++i) {
-                    var color = colorGradient[(int)Math.Round(averages[i] / max * colorCount)];
-                    var vNode = genealogyGraphChart.GetMappedNode(vertices[i]);
-                    vNode.Brush = new SolidBrush(color);
-                  }
-                }
-                // fill vertices that are part of the trace with a rgb color according to average subtree weight
-                if (traceGraph.Vertices.Any()) {
-                  var ranks = traceGraph.Vertices.Select(x => Content.GetByContent(x.Data)).GroupBy(x => x.Rank);
-                  foreach (var g in ranks) {
-                    var vertices = g.ToList();
-                    var averages = vertices.Select(x => x.Data.IterateNodesPrefix().Average(n => n.NodeWeight)).ToList();
-                    double max = rankMaximums[g.Key];
-                    if (max.IsAlmost(0.0)) continue;
-                    for (int i = 0; i < vertices.Count; ++i) {
-                      var vNode = genealogyGraphChart.GetMappedNode(vertices[i]);
-                      // use a grayscale gradient
-                      var color = colorGradient[(int)Math.Round(averages[i] / max * colorCount)];
-                      vNode.Brush = new SolidBrush(color);
-                    }
-                  }
-                  */
-
-        //          if (openNew_CheckBox.Checked) {
-        //            MainFormManager.MainForm.ShowContent(traceGraph); // display the fragment graph on the screen
-        //          }
-        //        }
-        genealogyGraphChart.ResumeRendering();
+          genealogyGraphChart.SuspendRendering();
+          genealogyGraphChart.HighlightNodes(traceGraph.Vertices);
+          genealogyGraphChart.ResumeRendering();
+        }
       } else {
         // perform matching like it was done before
         // currently there is no possibility to specify the subtree matching criteria
         var trees = Content.Vertices.Select(x => x.Data);
-        comparer.MatchVariableWeights = matchingModeButton.Checked;
-        comparer.MatchConstantValues = matchingModeButton.Checked;
+        //comparer.MatchVariableWeights = matchingModeButton.Checked;
+        //comparer.MatchConstantValues = matchingModeButton.Checked;
         var matchingTrees = trees.Where(x => x.Root.ContainsSubtree(node, comparer));
 
@@ -251,5 +212,5 @@
 
       var trees = Content.Vertices.Select(x => x.Data);
-      comparer.MatchVariableWeights = comparer.MatchConstantValues = matchingModeButton.Checked;
+      //comparer.MatchVariableWeights = comparer.MatchConstantValues = matchingModeButton.Checked;
       var matchingTrees = trees.Where(x => x.Root.ContainsSubtree(clonedSubtree, comparer));
 
@@ -281,6 +242,4 @@
     #endregion
 
-
-
     private void graphChart_HighlightMatchingVertices(IEnumerable<IGenealogyGraphNode> vertices) {
       genealogyGraphChart.SuspendRendering();
@@ -290,4 +249,5 @@
     }
 
+    #region treechart methods
     private void treeChart_ClearColors() {
       foreach (var node in SymbolicExpressionTreeChart.Tree.IterateNodesPrefix()) {
@@ -319,4 +279,5 @@
       SymbolicExpressionTreeChart.RepaintNodes();
     }
+    #endregion
 
     #region navigate the genealogy / trace graph
@@ -372,11 +333,16 @@
          });
         }
-
-
       }
       if (arc == null) return;
       lastTd = arc.Data as TraceData;
       genealogyGraphChart.SelectedGraphNode = arc.Source;
-      UpdateTreeChart((IGenealogyGraphNode<ISymbolicExpressionTree>)arc.Source);
+      graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)arc.Source;
+      UpdateTreeChart(graphNode);
+
+      var inDegreeDistinct = graphNode.InArcs.Select(x => x.Source).Distinct().Count();
+      var outDegreeDistinct = graphNode.OutArcs.Select(x => x.Target).Distinct().Count();
+
+      selectedNodeStatusStrip.Text = string.Format("Quality: {0:0.00}, Rank: {1:0.0}, Degree: {2}/{3}, Weight: {4:0.00}",
+        graphNode.Quality, graphNode.Rank, inDegreeDistinct, outDegreeDistinct, graphNode.Weight);
     }
 
@@ -412,5 +378,37 @@
       lastTd = arc.Data as TraceData;
       genealogyGraphChart.SelectedGraphNode = arc.Source;
-      UpdateTreeChart((IGenealogyGraphNode<ISymbolicExpressionTree>)arc.Source);
+      graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)arc.Source;
+      UpdateTreeChart(graphNode);
+
+      var inDegreeDistinct = graphNode.InArcs.Select(x => x.Source).Distinct().Count();
+      var outDegreeDistinct = graphNode.OutArcs.Select(x => x.Target).Distinct().Count();
+
+      selectedNodeStatusStrip.Text = string.Format("Quality: {0:0.00}, Rank: {1:0.0}, Degree: {2}/{3}, Weight: {4:0.00}",
+        graphNode.Quality, graphNode.Rank, inDegreeDistinct, outDegreeDistinct, graphNode.Weight);
+    }
+
+    private void nodeColorsComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      switch (nodeColorsComboBox.SelectedIndex) {
+        case 0: // color by quality
+          genealogyGraphChart.ColorSelector = node => ColorGradient.Colors[(int)Math.Round(node.Quality * 255)];
+          genealogyGraphChart.SuspendRendering();
+          genealogyGraphChart.HighlightAll();
+          genealogyGraphChart.ResumeRendering();
+          break;
+        case 1: // color by weight
+          var weights = Content.Vertices.ToDictionary(v => (IGenealogyGraphNode)v, v => v.Data.IterateNodesPrefix().Average(x => x.NodeWeight));
+          var max = weights.Values.Max();
+          genealogyGraphChart.ColorSelector = node => ColorGradient.GrayscaledColors[(int)Math.Round(weights[node] / max * 255)];
+          genealogyGraphChart.SuspendRendering();
+          genealogyGraphChart.HighlightAll();
+          genealogyGraphChart.ResumeRendering();
+          break;
+        default:
+          break;
+      }
+    }
+
+    private void lockCheckBox_CheckedChanged(object sender, EventArgs e) {
+      genealogyGraphChart.LockGenealogy = lockCheckBox.Checked;
     }
   }
