Index: branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/CrossValidationView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/CrossValidationView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/CrossValidationView.Designer.cs	(revision 16518)
@@ -172,5 +172,5 @@
       // foldsNumericUpDown
       // 
-      this.foldsNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.foldsNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.foldsNumericUpDown.Location = new System.Drawing.Point(55, 27);
@@ -208,5 +208,5 @@
       // workersNumericUpDown
       // 
-      this.workersNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.workersNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.workersNumericUpDown.Location = new System.Drawing.Point(55, 1);
@@ -262,5 +262,5 @@
       // samplesEndStringConvertibleValueView
       // 
-      this.samplesEndStringConvertibleValueView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.samplesEndStringConvertibleValueView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.samplesEndStringConvertibleValueView.Caption = "StringConvertibleValue View";
@@ -275,5 +275,5 @@
       // samplesStartStringConvertibleValueView
       // 
-      this.samplesStartStringConvertibleValueView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.samplesStartStringConvertibleValueView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.samplesStartStringConvertibleValueView.Caption = "StringConvertibleValue View";
@@ -289,6 +289,6 @@
       // 
       this.tabControl.AllowDrop = true;
-      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.tabControl.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.tabControl.Controls.Add(this.algorithmTabPage);
@@ -303,4 +303,5 @@
       // algorithmTabPage
       // 
+      this.algorithmTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.algorithmTabPage.AllowDrop = true;
       this.algorithmTabPage.Controls.Add(this.algorithmNamedItemView);
@@ -314,5 +315,4 @@
       this.algorithmTabPage.TabIndex = 0;
       this.algorithmTabPage.Text = "Algorithm";
-      this.algorithmTabPage.UseVisualStyleBackColor = true;
       this.algorithmTabPage.DragDrop += new System.Windows.Forms.DragEventHandler(this.algorithmTabPage_DragDrop);
       this.algorithmTabPage.DragEnter += new System.Windows.Forms.DragEventHandler(this.algorithmTabPage_DragEnterOver);
@@ -321,5 +321,5 @@
       // algorithmNamedItemView
       // 
-      this.algorithmNamedItemView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.algorithmNamedItemView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.algorithmNamedItemView.Caption = "NamedItem View";
@@ -334,6 +334,6 @@
       // 
       this.algorithmTabControl.AllowDrop = true;
-      this.algorithmTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.algorithmTabControl.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.algorithmTabControl.Controls.Add(this.algorithmProblemTabPage);
@@ -347,4 +347,5 @@
       // algorithmProblemTabPage
       // 
+      this.algorithmProblemTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.algorithmProblemTabPage.AllowDrop = true;
       this.algorithmProblemTabPage.Controls.Add(this.openProblemButton);
@@ -357,5 +358,4 @@
       this.algorithmProblemTabPage.TabIndex = 0;
       this.algorithmProblemTabPage.Text = "Problem";
-      this.algorithmProblemTabPage.UseVisualStyleBackColor = true;
       this.algorithmProblemTabPage.DragDrop += new System.Windows.Forms.DragEventHandler(this.algorithmProblemTabPage_DragDrop);
       this.algorithmProblemTabPage.DragEnter += new System.Windows.Forms.DragEventHandler(this.algorithmProblemTabPage_DragEnterOver);
@@ -375,6 +375,6 @@
       // algorithmProblemViewHost
       // 
-      this.algorithmProblemViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.algorithmProblemViewHost.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.algorithmProblemViewHost.Caption = "View";
@@ -402,4 +402,5 @@
       // algorithmParametersTabPage
       // 
+      this.algorithmParametersTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.algorithmParametersTabPage.Controls.Add(this.algorithmParameterCollectionView);
       this.algorithmParametersTabPage.Location = new System.Drawing.Point(4, 22);
@@ -409,5 +410,4 @@
       this.algorithmParametersTabPage.TabIndex = 1;
       this.algorithmParametersTabPage.Text = "Parameters";
-      this.algorithmParametersTabPage.UseVisualStyleBackColor = true;
       // 
       // algorithmParameterCollectionView
@@ -448,4 +448,5 @@
       // resultsTabPage
       // 
+      this.resultsTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.resultsTabPage.Controls.Add(this.resultCollectionView);
       this.resultsTabPage.Location = new System.Drawing.Point(4, 22);
@@ -455,5 +456,4 @@
       this.resultsTabPage.TabIndex = 1;
       this.resultsTabPage.Text = "Results";
-      this.resultsTabPage.UseVisualStyleBackColor = true;
       // 
       // resultCollectionView
@@ -471,4 +471,5 @@
       // runsTabPage
       // 
+      this.runsTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.runsTabPage.Controls.Add(this.storeAlgorithmInEachRunCheckBox);
       this.runsTabPage.Controls.Add(this.runCollectionView);
@@ -479,5 +480,4 @@
       this.runsTabPage.TabIndex = 2;
       this.runsTabPage.Text = "Runs";
-      this.runsTabPage.UseVisualStyleBackColor = true;
       // 
       // storeAlgorithmInEachRunCheckBox
@@ -517,5 +517,5 @@
       // splitContainer
       // 
-      this.splitContainer.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.splitContainer.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.splitContainer.Location = new System.Drawing.Point(0, 26);
Index: branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj	(revision 16518)
@@ -142,4 +142,10 @@
     <Compile Include="OneFactorClassificationModelView.Designer.cs">
       <DependentUpon>OneFactorClassificationModelView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LinearRegressionModelView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LinearRegressionModelView.Designer.cs">
+      <DependentUpon>LinearRegressionModelView.cs</DependentUpon>
     </Compile>
     <Compile Include="RandomForestModelView.cs">
Index: branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/LinearRegressionModelView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/LinearRegressionModelView.Designer.cs	(revision 16518)
+++ branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/LinearRegressionModelView.Designer.cs	(revision 16518)
@@ -0,0 +1,153 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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
+
+namespace HeuristicLab.Algorithms.DataAnalysis.Views {
+  partial class LinearRegressionModelView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.parametersView = new HeuristicLab.Data.Views.StringConvertibleArrayView();
+      this.covarianceMatrixView = new HeuristicLab.Data.Views.StringConvertibleMatrixView();
+      this.parameterVectorLabel = new System.Windows.Forms.Label();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.covMatLabel = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // parametersView
+      // 
+      this.parametersView.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.parametersView.Caption = "StringConvertibleArray View";
+      this.parametersView.Content = null;
+      this.parametersView.Location = new System.Drawing.Point(6, 19);
+      this.parametersView.Name = "parametersView";
+      this.parametersView.ReadOnly = true;
+      this.parametersView.Size = new System.Drawing.Size(136, 267);
+      this.parametersView.TabIndex = 0;
+      // 
+      // covarianceMatrixView
+      // 
+      this.covarianceMatrixView.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.covarianceMatrixView.Caption = "StringConvertibleMatrix View";
+      this.covarianceMatrixView.Content = null;
+      this.covarianceMatrixView.Location = new System.Drawing.Point(3, 19);
+      this.covarianceMatrixView.Name = "covarianceMatrixView";
+      this.covarianceMatrixView.ReadOnly = true;
+      this.covarianceMatrixView.ShowRowsAndColumnsTextBox = true;
+      this.covarianceMatrixView.ShowStatisticalInformation = true;
+      this.covarianceMatrixView.Size = new System.Drawing.Size(194, 267);
+      this.covarianceMatrixView.TabIndex = 1;
+      // 
+      // parameterVectorLabel
+      // 
+      this.parameterVectorLabel.AutoSize = true;
+      this.parameterVectorLabel.Location = new System.Drawing.Point(3, 0);
+      this.parameterVectorLabel.Margin = new System.Windows.Forms.Padding(3);
+      this.parameterVectorLabel.Name = "parameterVectorLabel";
+      this.parameterVectorLabel.Size = new System.Drawing.Size(63, 13);
+      this.parameterVectorLabel.TabIndex = 2;
+      this.parameterVectorLabel.Text = "Parameters:";
+      // 
+      // splitContainer
+      // 
+      this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer.Name = "splitContainer1";
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.parametersView);
+      this.splitContainer.Panel1.Controls.Add(this.parameterVectorLabel);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.covMatLabel);
+      this.splitContainer.Panel2.Controls.Add(this.covarianceMatrixView);
+      this.splitContainer.Size = new System.Drawing.Size(349, 289);
+      this.splitContainer.SplitterDistance = 145;
+      this.splitContainer.TabIndex = 4;
+      // 
+      // covMatLabel
+      // 
+      this.covMatLabel.AutoSize = true;
+      this.covMatLabel.Location = new System.Drawing.Point(3, 0);
+      this.covMatLabel.Margin = new System.Windows.Forms.Padding(3);
+      this.covMatLabel.Name = "covMatLabel";
+      this.covMatLabel.Size = new System.Drawing.Size(94, 13);
+      this.covMatLabel.TabIndex = 3;
+      this.covMatLabel.Text = "Covariance matrix:";
+      // 
+      // LinearRegressionModelView
+      // 
+      this.AllowDrop = true;
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.splitContainer);
+      this.Name = "LinearRegressionModelView";
+      this.Size = new System.Drawing.Size(349, 289);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel1.PerformLayout();
+      this.splitContainer.Panel2.ResumeLayout(false);
+      this.splitContainer.Panel2.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+
+
+
+    #endregion
+
+    private Data.Views.StringConvertibleArrayView parametersView;
+    private Data.Views.StringConvertibleMatrixView covarianceMatrixView;
+    private System.Windows.Forms.Label parameterVectorLabel;
+    private System.Windows.Forms.SplitContainer splitContainer;
+    private System.Windows.Forms.Label covMatLabel;
+  }
+}
Index: branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/LinearRegressionModelView.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/LinearRegressionModelView.cs	(revision 16518)
+++ branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/LinearRegressionModelView.cs	(revision 16518)
@@ -0,0 +1,76 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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.Analysis;
+using HeuristicLab.Common;
+using HeuristicLab.Core.Views;
+using HeuristicLab.Data;
+using HeuristicLab.MainForm;
+using HeuristicLab.Problems.DataAnalysis;
+using HeuristicLab.Problems.DataAnalysis.Symbolic;
+using HeuristicLab.Problems.DataAnalysis.Symbolic.Regression;
+
+namespace HeuristicLab.Algorithms.DataAnalysis.Views {
+  [View("Linear regression model")]
+  [Content(typeof(LinearRegressionModel), true)]
+  public partial class LinearRegressionModelView : ItemView {
+
+    public new LinearRegressionModel Content {
+      get { return (LinearRegressionModel)base.Content; }
+      set { base.Content = value; }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      parametersView.Enabled = Content != null;
+      covarianceMatrixView.Enabled = Content != null;
+    }
+
+    public LinearRegressionModelView()
+      : base() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        parametersView.Content = null;
+        covarianceMatrixView.Content = null;
+      } else {
+        // format numbers to make them easier to read
+        var w = new StringArray(Content.W.Select(x => $"{x:e4}").ToArray());
+        w.ElementNames = Content.ParameterNames;
+        parametersView.Content = w;
+
+        // format all numbers in matrix
+        var cStr = new string[Content.C.GetLength(0), Content.C.GetLength(1)];
+        for (int i = 0; i < Content.C.GetLength(0); i++)
+          for (int j = 0; j < Content.C.GetLength(0); j++)
+            cStr[i, j] = $"{Content.C[i, j]:e4}";
+        var c = new StringMatrix(cStr);
+        c.RowNames = Content.ParameterNames;
+        c.ColumnNames = Content.ParameterNames;
+        covarianceMatrixView.Content = c;
+      }
+    }
+  }
+}
Index: branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearRegression.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearRegression.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearRegression.cs	(revision 16518)
@@ -41,5 +41,6 @@
   [StorableClass]
   public sealed class LinearRegression : FixedDataAnalysisAlgorithm<IRegressionProblem> {
-    private const string LinearRegressionModelResultName = "Linear regression solution";
+    private const string SolutionResultName = "Linear regression solution";
+    private const string ConfidenceSolutionResultName = "Solution with prediction intervals";
 
     [StorableConstructor]
@@ -62,6 +63,14 @@
     protected override void Run(CancellationToken cancellationToken) {
       double rmsError, cvRmsError;
+      // produce both solutions, to allow symbolic manipulation of LR solutions as well
+      // as the calculation of prediction intervals.
+      // There is no clean way to implement the new model class for LR as a symbolic model.
       var solution = CreateSolution(Problem.ProblemData, out rmsError, out cvRmsError);
-      Results.Add(new Result(LinearRegressionModelResultName, "The linear regression solution.", solution));
+#pragma warning disable 168, 3021
+      var symbolicSolution = CreateLinearRegressionSolution(Problem.ProblemData, out rmsError, out cvRmsError);
+#pragma warning restore 168, 3021
+      Results.Add(new Result(SolutionResultName, "The linear regression solution.", symbolicSolution));
+      Results.Add(new Result(ConfidenceSolutionResultName, "Linear regression solution with parameter covariance matrix " +
+                                                           "and calculation of prediction intervals", solution));
       Results.Add(new Result("Root mean square error", "The root of the mean of squared errors of the linear regression solution on the training set.", new DoubleValue(rmsError)));
       Results.Add(new Result("Estimated root mean square error (cross-validation)", "The estimated root of the mean of squared errors of the linear regression solution via cross validation.", new DoubleValue(cvRmsError)));
@@ -88,6 +97,6 @@
       double[] coefficients = new double[nFeatures + 1]; // last coefficient is for the constant
       alglib.lrunpack(lm, out coefficients, out nFeatures);
-      
-      int nFactorCoeff = factorVariables.Sum(kvp=>kvp.Value.Count());
+
+      int nFactorCoeff = factorVariables.Sum(kvp => kvp.Value.Count());
       int nVarCoeff = doubleVariables.Count();
       var tree = LinearModelToTreeConverter.CreateTree(factorVariables, coefficients.Take(nFactorCoeff).ToArray(),
@@ -132,7 +141,7 @@
     }
 
-    private static void PrepareData(IRegressionProblemData problemData, 
-      out double[,] inputMatrix, 
-      out IEnumerable<string> doubleVariables, 
+    private static void PrepareData(IRegressionProblemData problemData,
+      out double[,] inputMatrix,
+      out IEnumerable<string> doubleVariables,
       out IEnumerable<KeyValuePair<string, IEnumerable<string>>> factorVariables) {
       var dataset = problemData.Dataset;
Index: branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearRegressionModel.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearRegressionModel.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearRegressionModel.cs	(revision 16518)
@@ -22,4 +22,5 @@
 using System;
 using System.Collections.Generic;
+using System.Drawing;
 using System.Linq;
 using HeuristicLab.Common;
@@ -35,4 +36,7 @@
   [Item("Linear Regression Model", "Represents a linear regression model.")]
   public sealed class LinearRegressionModel : RegressionModel, IConfidenceRegressionModel {
+    public static new Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Function; }
+    }
 
     [Storable]
@@ -49,13 +53,24 @@
       get; private set;
     }
-    
+
     public override IEnumerable<string> VariablesUsedForPrediction {
-      get { return allowedInputVariables.Union(factorVariables.Select(f => f.Key)); }
+      get { return doubleVariables.Union(factorVariables.Select(f => f.Key)); }
     }
 
     [Storable]
-    private string[] allowedInputVariables;
+    private string[] doubleVariables;
     [Storable]
     private List<KeyValuePair<string, IEnumerable<string>>> factorVariables;
+
+    /// <summary>
+    /// Enumerable of variable names used by the model including one-hot-encoded of factor variables.
+    /// </summary>
+    public IEnumerable<string> ParameterNames {
+      get {
+        return factorVariables.SelectMany(kvp => kvp.Value.Select(factorVal => $"{kvp.Key}={factorVal}"))
+          .Concat(doubleVariables)
+          .Concat(new[] { "<const>" });
+      }
+    }
 
     [StorableConstructor]
@@ -69,5 +84,5 @@
       this.NoiseSigma = original.NoiseSigma;
 
-      allowedInputVariables = (string[])original.allowedInputVariables.Clone();
+      doubleVariables = (string[])original.doubleVariables.Clone();
       this.factorVariables = original.factorVariables.Select(kvp => new KeyValuePair<string, IEnumerable<string>>(kvp.Key, new List<string>(kvp.Value))).ToList();
     }
@@ -78,9 +93,9 @@
       this.W = new double[w.Length];
       Array.Copy(w, W, w.Length);
-      this.C = new double[covariance.GetLength(0),covariance.GetLength(1)];
+      this.C = new double[covariance.GetLength(0), covariance.GetLength(1)];
       Array.Copy(covariance, C, covariance.Length);
       this.NoiseSigma = noiseSigma;
-      var stringInputVariables = factorVariables.Select(f => f.Key).Distinct();
-      this.allowedInputVariables = doubleInputVariables.ToArray();
+      this.doubleVariables = doubleInputVariables.ToArray();
+      // clone
       this.factorVariables = factorVariables.Select(kvp => new KeyValuePair<string, IEnumerable<string>>(kvp.Key, new List<string>(kvp.Value))).ToList();
     }
@@ -95,5 +110,5 @@
 
     public override IEnumerable<double> GetEstimatedValues(IDataset dataset, IEnumerable<int> rows) {
-      double[,] inputData = dataset.ToArray(allowedInputVariables, rows);
+      double[,] inputData = dataset.ToArray(doubleVariables, rows);
       double[,] factorData = dataset.ToArray(factorVariables, rows);
 
@@ -114,5 +129,5 @@
 
     public IEnumerable<double> GetEstimatedVariances(IDataset dataset, IEnumerable<int> rows) {
-      double[,] inputData = dataset.ToArray(allowedInputVariables, rows);
+      double[,] inputData = dataset.ToArray(doubleVariables, rows);
       double[,] factorData = dataset.ToArray(factorVariables, rows);
 
@@ -123,21 +138,20 @@
 
       double[] d = new double[C.GetLength(0)];
-      
+
       for (int row = 0; row < n; row++) {
         for (int column = 0; column < columns; column++) {
-          d[column] = inputData[row,column];
+          d[column] = inputData[row, column];
         }
         d[columns] = 1;
 
         double var = 0.0;
-        for(int i=0;i<d.Length;i++) {
-          for(int j = 0;j<d.Length;j++) {
+        for (int i = 0; i < d.Length; i++) {
+          for (int j = 0; j < d.Length; j++) {
             var += d[i] * C[i, j] * d[j];
           }
         }
-        yield return var + NoiseSigma*NoiseSigma;
+        yield return var + NoiseSigma * NoiseSigma;
       }
     }
-
 
     public override IRegressionSolution CreateRegressionSolution(IRegressionProblemData problemData) {
Index: branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/Nca/NcaModel.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/Nca/NcaModel.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/Nca/NcaModel.cs	(revision 16518)
@@ -65,5 +65,5 @@
 
       var ds = ReduceDataset(dataset, rows);
-      nnModel = new NearestNeighbourModel(ds, Enumerable.Range(0, ds.Rows), k, ds.VariableNames.Last(), ds.VariableNames.Take(transformationMatrix.GetLength(1)), classValues: classValues);
+      nnModel = new NearestNeighbourModel(ds, Enumerable.Range(0, ds.Rows), k, false, ds.VariableNames.Last(), ds.VariableNames.Take(transformationMatrix.GetLength(1)), classValues: classValues);
     }
 
Index: branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/NearestNeighbour/NearestNeighbourClassification.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/NearestNeighbour/NearestNeighbourClassification.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/NearestNeighbour/NearestNeighbourClassification.cs	(revision 16518)
@@ -1,3 +1,3 @@
-#region License Information
+﻿#region License Information
 /* HeuristicLab
  * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
@@ -42,9 +42,12 @@
     private const string NearestNeighbourClassificationModelResultName = "Nearest neighbour classification solution";
     private const string WeightsParameterName = "Weights";
-
+    private const string SelfMatchParameterName = "SelfMatch";
 
     #region parameter properties
     public IFixedValueParameter<IntValue> KParameter {
       get { return (IFixedValueParameter<IntValue>)Parameters[KParameterName]; }
+    }
+    public IFixedValueParameter<BoolValue> SelfMatchParameter {
+      get { return (IFixedValueParameter<BoolValue>)Parameters[SelfMatchParameterName]; }
     }
     public IValueParameter<DoubleArray> WeightsParameter {
@@ -53,4 +56,8 @@
     #endregion
     #region properties
+    public bool SelfMatch {
+      get { return SelfMatchParameter.Value.Value; }
+      set { SelfMatchParameter.Value.Value = value; }
+    }
     public int K {
       get { return KParameter.Value.Value; }
@@ -73,4 +80,5 @@
     public NearestNeighbourClassification()
       : base() {
+      Parameters.Add(new FixedValueParameter<BoolValue>(SelfMatchParameterName, "Should we use equal points for classification?", new BoolValue(false)));
       Parameters.Add(new FixedValueParameter<IntValue>(KParameterName, "The number of nearest neighbours to consider for regression.", new IntValue(3)));
       Parameters.Add(new OptionalValueParameter<DoubleArray>(WeightsParameterName, "Optional: use weights to specify individual scaling values for all features. If not set the weights are calculated automatically (each feature is scaled to unit variance)"));
@@ -83,4 +91,7 @@
       if (!Parameters.ContainsKey(WeightsParameterName)) {
         Parameters.Add(new OptionalValueParameter<DoubleArray>(WeightsParameterName, "Optional: use weights to specify individual scaling values for all features. If not set the weights are calculated automatically (each feature is scaled to unit variance)"));
+      }
+      if (!Parameters.ContainsKey(SelfMatchParameterName)) {
+        Parameters.Add(new FixedValueParameter<BoolValue>(SelfMatchParameterName, "Should we use equal points for classification?", new BoolValue(false)));
       }
       #endregion
@@ -95,17 +106,18 @@
       double[] weights = null;
       if (Weights != null) weights = Weights.CloneAsArray();
-      var solution = CreateNearestNeighbourClassificationSolution(Problem.ProblemData, K, weights);
+      var solution = CreateNearestNeighbourClassificationSolution(Problem.ProblemData, K, SelfMatch, weights);
       Results.Add(new Result(NearestNeighbourClassificationModelResultName, "The nearest neighbour classification solution.", solution));
     }
 
-    public static IClassificationSolution CreateNearestNeighbourClassificationSolution(IClassificationProblemData problemData, int k, double[] weights = null) {
+    public static IClassificationSolution CreateNearestNeighbourClassificationSolution(IClassificationProblemData problemData, int k, bool selfMatch = false, double[] weights = null) {
       var problemDataClone = (IClassificationProblemData)problemData.Clone();
-      return new NearestNeighbourClassificationSolution(Train(problemDataClone, k, weights), problemDataClone);
+      return new NearestNeighbourClassificationSolution(Train(problemDataClone, k, selfMatch, weights), problemDataClone);
     }
 
-    public static INearestNeighbourModel Train(IClassificationProblemData problemData, int k, double[] weights = null) {
+    public static INearestNeighbourModel Train(IClassificationProblemData problemData, int k, bool selfMatch = false, double[] weights = null) {
       return new NearestNeighbourModel(problemData.Dataset,
         problemData.TrainingIndices,
         k,
+        selfMatch,
         problemData.TargetVariable,
         problemData.AllowedInputVariables,
Index: branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/NearestNeighbour/NearestNeighbourModel.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/NearestNeighbour/NearestNeighbourModel.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/NearestNeighbour/NearestNeighbourModel.cs	(revision 16518)
@@ -1,3 +1,3 @@
-#region License Information
+﻿#region License Information
 /* HeuristicLab
  * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
@@ -37,4 +37,5 @@
 
     private readonly object kdTreeLockObject = new object();
+
     private alglib.nearestneighbor.kdtree kdTree;
     public alglib.nearestneighbor.kdtree KDTree {
@@ -49,5 +50,4 @@
     }
 
-
     public override IEnumerable<string> VariablesUsedForPrediction {
       get { return allowedInputVariables; }
@@ -60,4 +60,6 @@
     [Storable]
     private int k;
+    [Storable(DefaultValue = false)]
+    private bool selfMatch;
     [Storable(DefaultValue = null)]
     private double[] weights; // not set for old versions loaded from disk
@@ -97,5 +99,5 @@
       kdTree.x = (double[])original.kdTree.x.Clone();
       kdTree.xy = (double[,])original.kdTree.xy.Clone();
-
+      selfMatch = original.selfMatch;
       k = original.k;
       isCompatibilityLoaded = original.IsCompatibilityLoaded;
@@ -110,8 +112,9 @@
         this.classValues = (double[])original.classValues.Clone();
     }
-    public NearestNeighbourModel(IDataset dataset, IEnumerable<int> rows, int k, string targetVariable, IEnumerable<string> allowedInputVariables, IEnumerable<double> weights = null, double[] classValues = null)
+    public NearestNeighbourModel(IDataset dataset, IEnumerable<int> rows, int k, bool selfMatch, string targetVariable, IEnumerable<string> allowedInputVariables, IEnumerable<double> weights = null, double[] classValues = null)
       : base(targetVariable) {
       Name = ItemName;
       Description = ItemDescription;
+      this.selfMatch = selfMatch;
       this.k = k;
       this.allowedInputVariables = allowedInputVariables.ToArray();
@@ -132,5 +135,5 @@
             .Select(name => {
               var pop = dataset.GetDoubleValues(name, rows).StandardDeviationPop();
-              return  pop.IsAlmost(0) ? 1.0 : 1.0/pop;
+              return pop.IsAlmost(0) ? 1.0 : 1.0 / pop;
             })
             .Concat(new double[] { 1.0 }) // no scaling for target variable
@@ -201,9 +204,25 @@
         int numNeighbours;
         lock (kdTreeLockObject) { // gkronber: the following calls change the kdTree data structure
-          numNeighbours = alglib.nearestneighbor.kdtreequeryknn(kdTree, x, k, false);
+          numNeighbours = alglib.nearestneighbor.kdtreequeryknn(kdTree, x, k, selfMatch);
           alglib.nearestneighbor.kdtreequeryresultsdistances(kdTree, ref dists);
           alglib.nearestneighbor.kdtreequeryresultsxy(kdTree, ref neighbours);
         }
-
+        if (selfMatch) {
+          // weights for neighbours are 1/d.
+          // override distances (=0) of exact matches using 1% of the distance of the next closest non-self-match neighbour -> selfmatches weight 100x more than the next closest neighbor.
+          // if all k neighbours are selfmatches then they all have weight 0.01.
+          double minDist = dists[0] + 1;
+          for (int i = 0; i < numNeighbours; i++) {
+            if ((minDist > dists[i]) && (dists[i] != 0)) {
+              minDist = dists[i];
+            }
+          }
+          minDist /= 100.0;
+          for (int i = 0; i < numNeighbours; i++) {
+            if (dists[i] == 0) {
+              dists[i] = minDist;
+            }
+          }
+        }
         double distanceWeightedValue = 0.0;
         double distsSum = 0.0;
@@ -238,5 +257,5 @@
         lock (kdTreeLockObject) {
           // gkronber: the following calls change the kdTree data structure
-          numNeighbours = alglib.nearestneighbor.kdtreequeryknn(kdTree, x, k, false);
+          numNeighbours = alglib.nearestneighbor.kdtreequeryknn(kdTree, x, k, selfMatch);
           alglib.nearestneighbor.kdtreequeryresultsdistances(kdTree, ref dists);
           alglib.nearestneighbor.kdtreequeryresultsxy(kdTree, ref neighbours);
Index: branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/NearestNeighbour/NearestNeighbourRegression.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/NearestNeighbour/NearestNeighbourRegression.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Algorithms.DataAnalysis/3.4/NearestNeighbour/NearestNeighbourRegression.cs	(revision 16518)
@@ -41,4 +41,5 @@
     private const string NearestNeighbourRegressionModelResultName = "Nearest neighbour regression solution";
     private const string WeightsParameterName = "Weights";
+    private const string SelfMatchParameterName = "SelfMatch";
 
     #region parameter properties
@@ -46,5 +47,7 @@
       get { return (IFixedValueParameter<IntValue>)Parameters[KParameterName]; }
     }
-
+    public IFixedValueParameter<BoolValue> SelfMatchParameter {
+      get { return (IFixedValueParameter<BoolValue>)Parameters[SelfMatchParameterName]; }
+    }
     public IValueParameter<DoubleArray> WeightsParameter {
       get { return (IValueParameter<DoubleArray>)Parameters[WeightsParameterName]; }
@@ -59,5 +62,8 @@
       }
     }
-
+    public bool SelfMatch {
+      get { return SelfMatchParameter.Value.Value; }
+      set { SelfMatchParameter.Value.Value = value; }
+    }
     public DoubleArray Weights {
       get { return WeightsParameter.Value; }
@@ -75,4 +81,5 @@
       Parameters.Add(new FixedValueParameter<IntValue>(KParameterName, "The number of nearest neighbours to consider for regression.", new IntValue(3)));
       Parameters.Add(new OptionalValueParameter<DoubleArray>(WeightsParameterName, "Optional: use weights to specify individual scaling values for all features. If not set the weights are calculated automatically (each feature is scaled to unit variance)"));
+      Parameters.Add(new FixedValueParameter<BoolValue>(SelfMatchParameterName, "Should we use equal points for classification?", new BoolValue(false)));
       Problem = new RegressionProblem();
     }
@@ -84,4 +91,7 @@
       if (!Parameters.ContainsKey(WeightsParameterName)) {
         Parameters.Add(new OptionalValueParameter<DoubleArray>(WeightsParameterName, "Optional: use weights to specify individual scaling values for all features. If not set the weights are calculated automatically (each feature is scaled to unit variance)"));
+      }
+      if (!Parameters.ContainsKey(SelfMatchParameterName)) {
+        Parameters.Add(new FixedValueParameter<BoolValue>(SelfMatchParameterName, "Should we use equal points for classification?", new BoolValue(false)));
       }
       #endregion
@@ -96,17 +106,18 @@
       double[] weights = null;
       if (Weights != null) weights = Weights.CloneAsArray();
-      var solution = CreateNearestNeighbourRegressionSolution(Problem.ProblemData, K, weights);
+      var solution = CreateNearestNeighbourRegressionSolution(Problem.ProblemData, K, SelfMatch, weights);
       Results.Add(new Result(NearestNeighbourRegressionModelResultName, "The nearest neighbour regression solution.", solution));
     }
 
-    public static IRegressionSolution CreateNearestNeighbourRegressionSolution(IRegressionProblemData problemData, int k, double[] weights = null) {
+    public static IRegressionSolution CreateNearestNeighbourRegressionSolution(IRegressionProblemData problemData, int k, bool selfMatch = false, double[] weights = null) {
       var clonedProblemData = (IRegressionProblemData)problemData.Clone();
-      return new NearestNeighbourRegressionSolution(Train(problemData, k, weights), clonedProblemData);
+      return new NearestNeighbourRegressionSolution(Train(problemData, k, selfMatch, weights), clonedProblemData);
     }
 
-    public static INearestNeighbourModel Train(IRegressionProblemData problemData, int k, double[] weights = null) {
+    public static INearestNeighbourModel Train(IRegressionProblemData problemData, int k, bool selfMatch = false, double[] weights = null) {
       return new NearestNeighbourModel(problemData.Dataset,
         problemData.TrainingIndices,
         k,
+        selfMatch,
         problemData.TargetVariable,
         problemData.AllowedInputVariables,
Index: branches/2972_PDPRowSelect/HeuristicLab.Analysis.Statistics.Views/3.3/StatisticalTestsView.designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Analysis.Statistics.Views/3.3/StatisticalTestsView.designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Analysis.Statistics.Views/3.3/StatisticalTestsView.designer.cs	(revision 16518)
@@ -102,6 +102,6 @@
       // stringConvertibleMatrixView
       // 
-      this.stringConvertibleMatrixView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.stringConvertibleMatrixView.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.stringConvertibleMatrixView.Caption = "StringConvertibleMatrix View";
@@ -152,5 +152,5 @@
       // resultComboBox
       // 
-      this.resultComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.resultComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.resultComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
@@ -176,5 +176,5 @@
       // pValTextBox
       // 
-      this.pValTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.pValTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.pValTextBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
@@ -187,5 +187,5 @@
       // groupComboBox
       // 
-      this.groupComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.groupComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.groupComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
@@ -200,6 +200,6 @@
       // splitContainer1
       // 
-      this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.splitContainer1.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.splitContainer1.Location = new System.Drawing.Point(6, 19);
@@ -222,6 +222,6 @@
       // splitContainer3
       // 
-      this.splitContainer3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.splitContainer3.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.splitContainer3.Location = new System.Drawing.Point(6, 6);
@@ -241,6 +241,6 @@
       // pairwiseTestGroupBox
       // 
-      this.pairwiseTestGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.pairwiseTestGroupBox.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.pairwiseTestGroupBox.Controls.Add(this.pairwiseTextLabel);
@@ -271,6 +271,6 @@
       // pairwiseStringConvertibleMatrixView
       // 
-      this.pairwiseStringConvertibleMatrixView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.pairwiseStringConvertibleMatrixView.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.pairwiseStringConvertibleMatrixView.Caption = "StringConvertibleMatrix View";
@@ -308,5 +308,5 @@
       // equalDistsTextBox
       // 
-      this.equalDistsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.equalDistsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.equalDistsTextBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
@@ -329,5 +329,5 @@
       // groupCompComboBox
       // 
-      this.groupCompComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.groupCompComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.groupCompComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
@@ -342,5 +342,5 @@
       // allGroupTestGroupBox
       // 
-      this.allGroupTestGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.allGroupTestGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.allGroupTestGroupBox.Controls.Add(this.groupComTextLabel);
@@ -378,5 +378,5 @@
       // normalityGroupBox
       // 
-      this.normalityGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.normalityGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.normalityGroupBox.Controls.Add(this.normalityTextLabel);
@@ -403,6 +403,6 @@
       // normalityStringConvertibleMatrixView
       // 
-      this.normalityStringConvertibleMatrixView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.normalityStringConvertibleMatrixView.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.normalityStringConvertibleMatrixView.Caption = "StringConvertibleMatrix View";
@@ -429,5 +429,5 @@
       // selectDataGroupBox
       // 
-      this.selectDataGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.selectDataGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.selectDataGroupBox.Controls.Add(this.splitContainer1);
@@ -442,6 +442,6 @@
       // tabControl
       // 
-      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.tabControl.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.tabControl.Controls.Add(this.tabPage1);
@@ -455,4 +455,5 @@
       // tabPage1
       // 
+      this.tabPage1.BackColor = System.Drawing.SystemColors.Window;
       this.tabPage1.Controls.Add(this.splitContainer3);
       this.tabPage1.Location = new System.Drawing.Point(4, 22);
@@ -462,8 +463,8 @@
       this.tabPage1.TabIndex = 0;
       this.tabPage1.Text = "Tests";
-      this.tabPage1.UseVisualStyleBackColor = true;
       // 
       // tabPage2
       // 
+      this.tabPage2.BackColor = System.Drawing.SystemColors.Window;
       this.tabPage2.Controls.Add(this.histogramControl);
       this.tabPage2.Location = new System.Drawing.Point(4, 22);
@@ -473,10 +474,9 @@
       this.tabPage2.TabIndex = 1;
       this.tabPage2.Text = "Histogram";
-      this.tabPage2.UseVisualStyleBackColor = true;
       // 
       // histogramControl
       // 
-      this.histogramControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.histogramControl.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.histogramControl.CalculateExactBins = false;
@@ -493,6 +493,6 @@
       // splitContainer2
       // 
-      this.splitContainer2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.splitContainer2.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.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
Index: branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/HiveAdministratorView.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/HiveAdministratorView.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/HiveAdministratorView.cs	(revision 16518)
@@ -36,21 +36,4 @@
       InitializeComponent();
     }
-
-    #region Register Content Events
-    protected override void DeregisterContentEvents() {
-      base.DeregisterContentEvents();
-    }
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-    }
-    #endregion
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-    }
   }
 }
Index: branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectResourcesView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectResourcesView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectResourcesView.Designer.cs	(revision 16518)
@@ -171,5 +171,5 @@
       this.Name = "ProjectResourcesView";
       this.Size = new System.Drawing.Size(830, 494);
-      this.Load += new System.EventHandler(this.ProjectResourcesView_Load);
+      this.Disposed += new System.EventHandler(this.ProjectResourcesView_Disposed);
       this.splitContainer.Panel1.ResumeLayout(false);
       this.splitContainer.Panel2.ResumeLayout(false);
Index: branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectResourcesView.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectResourcesView.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectResourcesView.cs	(revision 16518)
@@ -29,6 +29,4 @@
 using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
-using System.Collections;
-using HeuristicLab.Common;
 
 namespace HeuristicLab.Clients.Hive.Administrator.Views {
@@ -79,10 +77,4 @@
 
     #region Overrides
-    protected override void OnClosing(FormClosingEventArgs e) {
-      HiveAdminClient.Instance.Refreshed -= HiveAdminClient_Instance_Refreshed;
-      HiveAdminClient.Instance.Refreshing -= HiveAdminClient_Instance_Refreshing;
-      base.OnClosing(e);
-    }
-
     protected override void OnContentChanged() {
       base.OnContentChanged();
@@ -130,6 +122,7 @@
     }
 
-    private void ProjectResourcesView_Load(object sender, EventArgs e) {
-
+    private void ProjectResourcesView_Disposed(object sender, EventArgs e) {
+      HiveAdminClient.Instance.Refreshed -= HiveAdminClient_Instance_Refreshed;
+      HiveAdminClient.Instance.Refreshing -= HiveAdminClient_Instance_Refreshing;
     }
 
@@ -165,5 +158,5 @@
 
       var selectedResource = (Resource)e.Node.Tag;
-      if(HiveAdminClient.Instance.DisabledParentResources.Contains(selectedResource))
+      if (HiveAdminClient.Instance.DisabledParentResources.Contains(selectedResource))
         e.Cancel = true;
     }
@@ -179,17 +172,17 @@
         return;
       }
-        
+
       var checkedResource = (Resource)e.Node.Tag;
       if (checkedResource == null
         || checkedResource.Id == Guid.Empty
-        || HiveAdminClient.Instance.DisabledParentResources.Contains(checkedResource) 
+        || HiveAdminClient.Instance.DisabledParentResources.Contains(checkedResource)
         || newIncludedResources.Contains(checkedResource)) {
         e.Cancel = true;
       } else if (!IsAdmin()) {
-          if (!HiveAdminClient.Instance.CheckOwnershipOfParentProject(Content, UserInformation.Instance.User.Id) 
-            || !HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).Any() 
-            || projectExclusiveResources.Contains(checkedResource)) {
-            e.Cancel = true;
-          }
+        if (!HiveAdminClient.Instance.CheckOwnershipOfParentProject(Content, UserInformation.Instance.User.Id)
+          || !HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).Any()
+          || projectExclusiveResources.Contains(checkedResource)) {
+          e.Cancel = true;
+        }
       }
     }
@@ -232,5 +225,5 @@
 
       // get project specific assigned resources
-      var projectResources = resources.Where(x => 
+      var projectResources = resources.Where(x =>
         HiveAdminClient.Instance.ProjectResourceAssignments
           .Where(a => a.ProjectId == projectId)
@@ -242,5 +235,5 @@
       HiveAdminClient.Instance.GetAvailableProjectAncestors(projectId).ToList().ForEach(x => projectIds.Add(x.Id));
 
-      var ancestorProjectResources = resources.Where(x => 
+      var ancestorProjectResources = resources.Where(x =>
         HiveAdminClient.Instance.ProjectResourceAssignments
           .Where(a => projectIds.Contains(a.ProjectId))
@@ -251,5 +244,5 @@
       HashSet<Resource> availableResources = new HashSet<Resource>(ancestorProjectResources);
       foreach (var r in ancestorProjectResources) {
-        foreach(var d in HiveAdminClient.Instance.GetAvailableResourceDescendants(r.Id)) {
+        foreach (var d in HiveAdminClient.Instance.GetAvailableResourceDescendants(r.Id)) {
           availableResources.Add(d);
         }
@@ -267,5 +260,5 @@
           foreach (var d in HiveAdminClient.Instance.GetAvailableResourceDescendants(r.Id)) {
             projectExclusiveResources.Add(d);
-          }  
+          }
         }
       }
@@ -286,11 +279,11 @@
       if (projectId == null || resourceIds == null) return;
       HiveServiceLocator.Instance.CallHiveService(s => {
-       s.SaveProjectResourceAssignments(projectId, resourceIds.ToList(), reassign, cascading, reassignCascading);
+        s.SaveProjectResourceAssignments(projectId, resourceIds.ToList(), reassign, cascading, reassignCascading);
       });
     }
 
     private void UpdateNewAssignedResources() {
-      for(int i = newAssignedResources.Count -1; i >= 0; i--) {
-        if(newAssignedResources.Intersect(HiveAdminClient.Instance.GetAvailableResourceAncestors(newAssignedResources.ElementAt(i).Id)).Any()) {
+      for (int i = newAssignedResources.Count - 1; i >= 0; i--) {
+        if (newAssignedResources.Intersect(HiveAdminClient.Instance.GetAvailableResourceAncestors(newAssignedResources.ElementAt(i).Id)).Any()) {
           newAssignedResources.Remove(newAssignedResources.ElementAt(i));
         }
@@ -345,5 +338,5 @@
 
       var stack = new Stack<Resource>(mainResources.OrderByDescending(x => x.Name));
-      
+
       Resource top = null;
       //bool nodeSelected = false;
@@ -352,5 +345,5 @@
         top = resources.Where(x => x.Id == resourceId).FirstOrDefault();
       }
-      
+
 
       TreeNode currentNode = null;
@@ -366,5 +359,5 @@
         var newNode = new TreeNode(newResource.Name) { Tag = newResource };
 
-        if(top == null && !disabledParentResources.Contains(newResource)) {
+        if (top == null && !disabledParentResources.Contains(newResource)) {
           top = newResource;
         }
@@ -395,7 +388,7 @@
         } else if (newAssignedResources.Contains(newResource)) {
           newNode.Checked = true;
-          if(!HiveRoles.CheckAdminUserPermissions()) {
-            if (!HiveAdminClient.Instance.CheckOwnershipOfParentProject(Content, UserInformation.Instance.User.Id) 
-              || !HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).Any() 
+          if (!HiveRoles.CheckAdminUserPermissions()) {
+            if (!HiveAdminClient.Instance.CheckOwnershipOfParentProject(Content, UserInformation.Instance.User.Id)
+              || !HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).Any()
               || projectExclusiveResources.Contains(newResource)) {
               newNode.ForeColor = SystemColors.GrayText;
@@ -452,5 +445,5 @@
       bool expandUngroupedGroupNode = false;
       var ungroupedSlaves = subResources.OfType<Slave>().OrderBy(x => x.Name);
-      if(ungroupedSlaves.Any()) {
+      if (ungroupedSlaves.Any()) {
         ungroupedGroupNode = new TreeNode(UNGROUPED_GROUP_NAME) {
           ForeColor = SystemColors.GrayText,
@@ -486,5 +479,5 @@
         }
 
-        if(expandUngroupedGroupNode) ungroupedGroupNode.Expand();
+        if (expandUngroupedGroupNode) ungroupedGroupNode.Expand();
         treeView.Nodes.Add(ungroupedGroupNode);
       } else if (ungroupedGroupNode != null) {
@@ -493,5 +486,5 @@
 
       treeView.BeforeCheck += treeView_BeforeCheck;
-      treeView.AfterCheck += treeView_AfterCheck;          
+      treeView.AfterCheck += treeView_AfterCheck;
 
       return top;
Index: branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.Designer.cs	(revision 16518)
@@ -213,4 +213,5 @@
       this.Size = new System.Drawing.Size(539, 271);
       this.Load += new System.EventHandler(this.ProjectView_Load);
+      this.Disposed += new System.EventHandler(this.ProjectView_Disposed);
       this.ResumeLayout(false);
       this.PerformLayout();
Index: branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.cs	(revision 16518)
@@ -35,9 +35,7 @@
     private readonly object locker = new object();
 
-    private Guid persistedOwnerUserId;
-
     public new Project Content {
       get { return (Project)base.Content; }
-      set { base.Content = value; persistedOwnerUserId = Content != null ? Content.OwnerUserId : Guid.Empty; }
+      set { base.Content = value; }
     }
 
@@ -50,10 +48,4 @@
 
     #region Overrides
-    protected override void OnClosing(FormClosingEventArgs e) {
-      AccessClient.Instance.Refreshed -= AccessClient_Instance_Refreshed;
-      AccessClient.Instance.Refreshing -= AccessClient_Instance_Refreshing;
-      base.OnClosing(e);
-    }
-
     protected override void RegisterContentEvents() {
       base.RegisterContentEvents();
@@ -104,8 +96,11 @@
 
         ownerComboBox.SelectedIndexChanged -= ownerComboBox_SelectedIndexChanged;
-        var users = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>();
-        if (!Content.ParentProjectId.HasValue) users = users.Where(x => x.Roles.Select(y => y.Name).Contains(HiveRoles.Administrator));
-        ownerComboBox.DataSource = users.ToList();
-        ownerComboBox.SelectedItem = users.FirstOrDefault(x => x.Id == Content.OwnerUserId);
+        if (AccessClient.Instance.UsersAndGroups != null) {
+          var users = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>();
+          if (!Content.ParentProjectId.HasValue) users = users.Where(x => x.Roles.Select(y => y.Name).Contains(HiveRoles.Administrator));
+          var projectOwnerId = Content.OwnerUserId;
+          ownerComboBox.DataSource = users.OrderBy(x => x.UserName).ToList();
+          ownerComboBox.SelectedItem = users.FirstOrDefault(x => x.Id == projectOwnerId);
+        }
         ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged;
 
@@ -180,7 +175,12 @@
           var users = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>();
           if (Content != null && !Content.ParentProjectId.HasValue) users = users.Where(x => x.Roles.Select(y => y.Name).Contains(HiveRoles.Administrator));
-          ownerComboBox.DataSource = users.ToList();
+          ownerComboBox.DataSource = users.OrderBy(x => x.UserName).ToList();
           ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged;
         });
+    }
+
+    private void ProjectView_Disposed(object sender, EventArgs e) {
+      AccessClient.Instance.Refreshed -= AccessClient_Instance_Refreshed;
+      AccessClient.Instance.Refreshing -= AccessClient_Instance_Refreshing;
     }
 
Index: branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.Designer.cs	(revision 16518)
@@ -260,4 +260,5 @@
       this.Size = new System.Drawing.Size(853, 553);
       this.Load += new System.EventHandler(this.ProjectsView_Load);
+      this.Disposed += new System.EventHandler(this.ProjectsView_Disposed);
       this.splitContainer.Panel1.ResumeLayout(false);
       this.splitContainer.Panel2.ResumeLayout(false);
Index: branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.cs	(revision 16518)
@@ -56,4 +56,6 @@
 
     private readonly object locker = new object();
+    private bool refreshingInternal = false;
+    private bool refreshingExternal = false;
 
     public new IItemList<Project> Content {
@@ -70,17 +72,7 @@
       HiveAdminClient.Instance.Refreshing += HiveAdminClient_Instance_Refreshing;
       HiveAdminClient.Instance.Refreshed += HiveAdminClient_Instance_Refreshed;
-      AccessClient.Instance.Refreshing += AccessClient_Instance_Refreshing;
-      AccessClient.Instance.Refreshed += AccessClient_Instance_Refreshed;
     }
 
     #region Overrides
-    protected override void OnClosing(FormClosingEventArgs e) {
-      AccessClient.Instance.Refreshed -= AccessClient_Instance_Refreshed;
-      AccessClient.Instance.Refreshing -= AccessClient_Instance_Refreshing;
-      HiveAdminClient.Instance.Refreshed -= HiveAdminClient_Instance_Refreshed;
-      HiveAdminClient.Instance.Refreshing -= HiveAdminClient_Instance_Refreshing;
-      base.OnClosing(e);
-    }
-
     protected override void RegisterContentEvents() {
       base.RegisterContentEvents();
@@ -183,4 +175,9 @@
       if (InvokeRequired) Invoke((Action<object, EventArgs>)HiveAdminClient_Instance_Refreshing, sender, e);
       else {
+        lock (locker) {
+          if (refreshingExternal) return;
+          if (!refreshingInternal) refreshingExternal = true;
+        }
+
         Progress.Show(this, "Refreshing ...", ProgressMode.Indeterminate);
         SetEnabledStateOfControls();
@@ -191,20 +188,7 @@
       if (InvokeRequired) Invoke((Action<object, EventArgs>)HiveAdminClient_Instance_Refreshed, sender, e);
       else {
-        Progress.Hide(this);
-        SetEnabledStateOfControls();
-      }
-    }
-
-    private void AccessClient_Instance_Refreshing(object sender, EventArgs e) {
-      if (InvokeRequired) Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshing, sender, e);
-      else {
-        Progress.Show(this, "Refreshing ...", ProgressMode.Indeterminate);
-        SetEnabledStateOfControls();
-      }
-    }
-
-    private void AccessClient_Instance_Refreshed(object sender, EventArgs e) {
-      if (InvokeRequired) Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshed, sender, e);
-      else {
+        if (refreshingExternal) refreshingExternal = false;
+        Content = HiveAdminClient.Instance.Projects;
+
         Progress.Hide(this);
         SetEnabledStateOfControls();
@@ -215,4 +199,9 @@
       await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions(
         action: () => UpdateProjects());
+    }
+
+    private void ProjectsView_Disposed(object sender, EventArgs e) {
+      HiveAdminClient.Instance.Refreshed -= HiveAdminClient_Instance_Refreshed;
+      HiveAdminClient.Instance.Refreshing -= HiveAdminClient_Instance_Refreshing;
     }
 
@@ -515,9 +504,15 @@
 
     private void UpdateProjects() {
+      lock (locker) {
+        if (refreshingInternal || refreshingExternal) return;
+        refreshingInternal = true;
+      }
+
       try {
         HiveAdminClient.Instance.Refresh();
-        Content = HiveAdminClient.Instance.Projects;
       } catch (AnonymousUserException) {
         ShowHiveInformationDialog();
+      } finally {
+        refreshingInternal = false;
       }
     }
Index: branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.Designer.cs	(revision 16518)
@@ -239,4 +239,5 @@
       this.Size = new System.Drawing.Size(853, 553);
       this.Load += new System.EventHandler(this.ResourcesView_Load);
+      this.Disposed += new System.EventHandler(this.ResourcesView_Disposed);
       this.splitSlaves.Panel1.ResumeLayout(false);
       this.splitSlaves.Panel2.ResumeLayout(false);
Index: branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs	(revision 16518)
@@ -54,5 +54,4 @@
 
 
-
     private TreeNode ungroupedGroupNode;
 
@@ -64,4 +63,6 @@
 
     private readonly object locker = new object();
+    private bool refreshingInternal = false;
+    private bool refreshingExternal = false;
 
     public new IItemList<Resource> Content {
@@ -78,17 +79,7 @@
       HiveAdminClient.Instance.Refreshing += HiveAdminClient_Instance_Refreshing;
       HiveAdminClient.Instance.Refreshed += HiveAdminClient_Instance_Refreshed;
-      AccessClient.Instance.Refreshing += AccessClient_Instance_Refreshing;
-      AccessClient.Instance.Refreshed += AccessClient_Instance_Refreshed;
     }
 
     #region Overrides
-    protected override void OnClosing(FormClosingEventArgs e) {
-      AccessClient.Instance.Refreshed -= AccessClient_Instance_Refreshed;
-      AccessClient.Instance.Refreshing -= AccessClient_Instance_Refreshing;
-      HiveAdminClient.Instance.Refreshed -= HiveAdminClient_Instance_Refreshed;
-      HiveAdminClient.Instance.Refreshing -= HiveAdminClient_Instance_Refreshing;
-      base.OnClosing(e);
-    }
-
     protected override void RegisterContentEvents() {
       base.RegisterContentEvents();
@@ -185,4 +176,9 @@
       if (InvokeRequired) Invoke((Action<object, EventArgs>)HiveAdminClient_Instance_Refreshing, sender, e);
       else {
+        lock (locker) {
+          if (refreshingExternal) return;
+          if (!refreshingInternal) refreshingExternal = true;
+        }
+
         Progress.Show(this, "Refreshing ...", ProgressMode.Indeterminate);
         SetEnabledStateOfControls();
@@ -193,4 +189,7 @@
       if (InvokeRequired) Invoke((Action<object, EventArgs>)HiveAdminClient_Instance_Refreshed, sender, e);
       else {
+        if (refreshingExternal) refreshingExternal = false;
+        Content = HiveAdminClient.Instance.Resources;
+
         Progress.Hide(this);
         SetEnabledStateOfControls();
@@ -198,23 +197,11 @@
     }
 
-    private void AccessClient_Instance_Refreshing(object sender, EventArgs e) {
-      if (InvokeRequired) Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshing, sender, e);
-      else {
-        Progress.Show(this, "Refreshing ...", ProgressMode.Indeterminate);
-        SetEnabledStateOfControls();
-      }
-    }
-
-    private void AccessClient_Instance_Refreshed(object sender, EventArgs e) {
-      if (InvokeRequired) Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshed, sender, e);
-      else {
-        Progress.Hide(this);
-        SetEnabledStateOfControls();
-      }
-    }
-
     private async void ResourcesView_Load(object sender, EventArgs e) {
-      await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions(
-        action: () => UpdateResources());
+      await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions(() => UpdateResources());
+    }
+
+    private void ResourcesView_Disposed(object sender, EventArgs e) {
+      HiveAdminClient.Instance.Refreshed -= HiveAdminClient_Instance_Refreshed;
+      HiveAdminClient.Instance.Refreshing -= HiveAdminClient_Instance_Refreshing;
     }
 
@@ -550,9 +537,15 @@
 
     private void UpdateResources() {
+      lock (locker) {
+        if (refreshingInternal || refreshingExternal) return;
+        refreshingInternal = true;
+      }
+
       try {
         HiveAdminClient.Instance.Refresh();
-        Content = HiveAdminClient.Instance.Resources;
       } catch (AnonymousUserException) {
         ShowHiveInformationDialog();
+      } finally {
+        refreshingInternal = false;
       }
     }
Index: branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelectorDialog.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelectorDialog.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelectorDialog.cs	(revision 16518)
@@ -96,6 +96,9 @@
       if (InvokeRequired) Invoke((Action<object, EventArgs>)HiveClient_Instance_Refreshing, sender, e);
       else {
-        Progress.ShowOnControl(this, "Refreshing", ProgressMode.Indeterminate);
         refreshButton.Enabled = false;
+        okButton.Enabled = false;
+        cancelButton.Enabled = false;
+        // Progress cannot be shown on dialog (no parent control), thus it is shown on the selector
+        Progress.Show(hiveResourceSelector, "Refreshing", ProgressMode.Indeterminate);
       }
     }
@@ -104,5 +107,7 @@
       if (InvokeRequired) Invoke((Action<object, EventArgs>)HiveClient_Instance_Refreshed, sender, e);
       else {
-        Progress.HideFromControl(this);
+        Progress.Hide(hiveResourceSelector);
+        okButton.Enabled = true;
+        cancelButton.Enabled = true;
         refreshButton.Enabled = true;
       }
Index: branches/2972_PDPRowSelect/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.Designer.cs	(revision 16518)
@@ -94,5 +94,5 @@
       // lstMethods
       // 
-      this.lstMethods.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.lstMethods.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.lstMethods.FormattingEnabled = true;
@@ -122,5 +122,5 @@
       // grpBoxData
       // 
-      this.grpBoxData.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.grpBoxData.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.grpBoxData.Controls.Add(this.tabsData);
@@ -134,5 +134,5 @@
       // tabsData
       // 
-      this.tabsData.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.tabsData.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.tabsData.Controls.Add(this.tabPage1);
@@ -149,4 +149,5 @@
       // tabPage1
       // 
+      this.tabPage1.BackColor = System.Drawing.SystemColors.Window;
       this.tabPage1.Controls.Add(this.label7);
       this.tabPage1.Location = new System.Drawing.Point(4, 22);
@@ -156,6 +157,4 @@
       this.tabPage1.TabIndex = 5;
       this.tabPage1.Text = "tabDataInactive";
-      this.tabPage1.UseVisualStyleBackColor = true;
-      // 
       // label7
       // 
@@ -170,4 +169,5 @@
       // tabDataDeleteColumnsInformation
       // 
+      this.tabDataDeleteColumnsInformation.BackColor = System.Drawing.SystemColors.Window;
       this.tabDataDeleteColumnsInformation.Controls.Add(this.label2);
       this.tabDataDeleteColumnsInformation.Controls.Add(this.txtDeleteColumnsInfo);
@@ -179,5 +179,4 @@
       this.tabDataDeleteColumnsInformation.TabIndex = 0;
       this.tabDataDeleteColumnsInformation.Text = "del columns info";
-      this.tabDataDeleteColumnsInformation.UseVisualStyleBackColor = true;
       // 
       // label2
@@ -209,4 +208,5 @@
       // tabDataDeleteColumnsVariance
       // 
+      this.tabDataDeleteColumnsVariance.BackColor = System.Drawing.SystemColors.Window;
       this.tabDataDeleteColumnsVariance.Controls.Add(this.txtDeleteColumnsVariance);
       this.tabDataDeleteColumnsVariance.Controls.Add(this.label4);
@@ -217,5 +217,4 @@
       this.tabDataDeleteColumnsVariance.TabIndex = 1;
       this.tabDataDeleteColumnsVariance.Text = "del columns variance";
-      this.tabDataDeleteColumnsVariance.UseVisualStyleBackColor = true;
       // 
       // txtDeleteColumnsVariance
@@ -238,4 +237,5 @@
       // tabDataDeleteRowsInfo
       // 
+      this.tabDataDeleteRowsInfo.BackColor = System.Drawing.SystemColors.Window;
       this.tabDataDeleteRowsInfo.Controls.Add(this.label3);
       this.tabDataDeleteRowsInfo.Controls.Add(this.txtDeleteRowsInfo);
@@ -247,5 +247,4 @@
       this.tabDataDeleteRowsInfo.TabIndex = 2;
       this.tabDataDeleteRowsInfo.Text = "del rows info";
-      this.tabDataDeleteRowsInfo.UseVisualStyleBackColor = true;
       // 
       // label3
@@ -277,6 +276,6 @@
       // grpBoxPreview
       // 
-      this.grpBoxPreview.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.grpBoxPreview.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.grpBoxPreview.Controls.Add(this.tabsPreview);
@@ -290,5 +289,5 @@
       // tabsPreview
       // 
-      this.tabsPreview.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.tabsPreview.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.tabsPreview.Controls.Add(this.tabPreviewInactive);
@@ -305,4 +304,5 @@
       // tabPreviewInactive
       // 
+      this.tabPreviewInactive.BackColor = System.Drawing.SystemColors.Window;
       this.tabPreviewInactive.Controls.Add(this.lblPreviewInActive);
       this.tabPreviewInactive.Location = new System.Drawing.Point(4, 22);
@@ -312,5 +312,4 @@
       this.tabPreviewInactive.TabIndex = 5;
       this.tabPreviewInactive.Text = "inactive";
-      this.tabPreviewInactive.UseVisualStyleBackColor = true;
       // 
       // lblPreviewInActive
@@ -327,4 +326,5 @@
       // tabPreviewDeleteColumnsInfo
       // 
+      this.tabPreviewDeleteColumnsInfo.BackColor = System.Drawing.SystemColors.Window;
       this.tabPreviewDeleteColumnsInfo.Controls.Add(this.panel1);
       this.tabPreviewDeleteColumnsInfo.Location = new System.Drawing.Point(4, 22);
@@ -334,5 +334,4 @@
       this.tabPreviewDeleteColumnsInfo.TabIndex = 0;
       this.tabPreviewDeleteColumnsInfo.Text = "del columns info";
-      this.tabPreviewDeleteColumnsInfo.UseVisualStyleBackColor = true;
       // 
       // panel1
@@ -359,4 +358,5 @@
       // tabPreviewDeleteColumnsVariance
       // 
+      this.tabPreviewDeleteColumnsVariance.BackColor = System.Drawing.SystemColors.Window;
       this.tabPreviewDeleteColumnsVariance.Controls.Add(this.panel2);
       this.tabPreviewDeleteColumnsVariance.Controls.Add(this.label12);
@@ -367,5 +367,4 @@
       this.tabPreviewDeleteColumnsVariance.TabIndex = 1;
       this.tabPreviewDeleteColumnsVariance.Text = "del columns variance";
-      this.tabPreviewDeleteColumnsVariance.UseVisualStyleBackColor = true;
       // 
       // panel2
@@ -400,4 +399,5 @@
       // tabPreviewDeleteRowsInfo
       // 
+      this.tabPreviewDeleteRowsInfo.BackColor = System.Drawing.SystemColors.Window;
       this.tabPreviewDeleteRowsInfo.Controls.Add(this.lblPreviewRowsInfo);
       this.tabPreviewDeleteRowsInfo.Location = new System.Drawing.Point(4, 22);
@@ -407,5 +407,4 @@
       this.tabPreviewDeleteRowsInfo.TabIndex = 2;
       this.tabPreviewDeleteRowsInfo.Text = "del rows info";
-      this.tabPreviewDeleteRowsInfo.UseVisualStyleBackColor = true;
       // 
       // lblPreviewRowsInfo
Index: branches/2972_PDPRowSelect/HeuristicLab.DataPreprocessing.Views/3.4/SearchAndReplaceDialog.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.DataPreprocessing.Views/3.4/SearchAndReplaceDialog.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.DataPreprocessing.Views/3.4/SearchAndReplaceDialog.Designer.cs	(revision 16518)
@@ -79,4 +79,5 @@
       // tabSearch
       // 
+      this.tabSearch.BackColor = System.Drawing.SystemColors.Window;
       this.tabSearch.Location = new System.Drawing.Point(4, 22);
       this.tabSearch.Name = "tabSearch";
@@ -85,8 +86,8 @@
       this.tabSearch.TabIndex = 0;
       this.tabSearch.Text = "Search";
-      this.tabSearch.UseVisualStyleBackColor = true;
       // 
       // tabReplace
       // 
+      this.tabReplace.BackColor = System.Drawing.SystemColors.Window;
       this.tabReplace.Controls.Add(this.cmbComparisonOperator);
       this.tabReplace.Controls.Add(this.txtSearchString);
@@ -106,5 +107,4 @@
       this.tabReplace.TabIndex = 1;
       this.tabReplace.Text = "Replace";
-      this.tabReplace.UseVisualStyleBackColor = true;
       // 
       // cmbComparisonOperator
Index: branches/2972_PDPRowSelect/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ControlExtensions.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ControlExtensions.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ControlExtensions.cs	(revision 16518)
@@ -46,19 +46,4 @@
       }
     }
-
-    public static IEnumerable<Control> GetNestedControls(this Control control, Func<Control, bool> condition = null) {
-      if (control == null) yield break;
-      if (condition == null) condition = (c) => true;
-
-      Queue<Control> unprocessed = new Queue<Control>();
-      unprocessed.Enqueue(control);
-
-      while (unprocessed.Count > 0) {
-        Control c = unprocessed.Dequeue();
-        if (condition(c)) yield return c;
-        foreach (Control child in c.Controls)
-          unprocessed.Enqueue(child);
-      }
-    }
   }
 }
Index: branches/2972_PDPRowSelect/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.cs	(revision 16518)
@@ -38,4 +38,5 @@
       : base() {
       if (control == null) throw new ArgumentNullException("control");
+      if (control.Parent == null) throw new InvalidOperationException("A Progress can only be shown on controls that have a Parent-control. Therefore, Dialogs and Forms cannot have an associated ProgressView.");
       if (content == null) throw new ArgumentNullException("content");
       InitializeComponent();
@@ -114,7 +115,9 @@
       UpdateButtonsState();
 
+      Control.SuspendRepaint();
       Control.Enabled = false;
       Parent = Control.Parent;
       BringToFront();
+      Control.ResumeRepaint(true);
       Visible = true;
     }
@@ -128,5 +131,7 @@
 
       Visible = false;
+      Control.SuspendRepaint();
       Control.Enabled = true;
+      Control.ResumeRepaint(true);
       Parent = null;
     }
Index: branches/2972_PDPRowSelect/HeuristicLab.Operators.Programmable.Views/3.3/ProgrammableOperatorView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Operators.Programmable.Views/3.3/ProgrammableOperatorView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Operators.Programmable.Views/3.3/ProgrammableOperatorView.Designer.cs	(revision 16518)
@@ -94,4 +94,5 @@
       // tabPage2
       // 
+      this.tabPage2.BackColor = System.Drawing.SystemColors.Window;
       this.tabPage2.Controls.Add(this.splitContainer1);
       this.tabPage2.Location = new System.Drawing.Point(4, 22);
@@ -101,5 +102,4 @@
       this.tabPage2.TabIndex = 1;
       this.tabPage2.Text = "Code";
-      this.tabPage2.UseVisualStyleBackColor = true;
       // 
       // splitContainer1
@@ -248,4 +248,5 @@
       // tabPage1
       // 
+      this.tabPage1.BackColor = System.Drawing.SystemColors.Window;
       this.tabPage1.Controls.Add(this.parameterCollectionView);
       this.tabPage1.Location = new System.Drawing.Point(4, 22);
@@ -255,5 +256,4 @@
       this.tabPage1.TabIndex = 0;
       this.tabPage1.Text = "Parameters";
-      this.tabPage1.UseVisualStyleBackColor = true;
       // 
       // parameterCollectionView
Index: branches/2972_PDPRowSelect/HeuristicLab.Operators.Views/3.3/AlgorithmOperatorView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Operators.Views/3.3/AlgorithmOperatorView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Operators.Views/3.3/AlgorithmOperatorView.Designer.cs	(revision 16518)
@@ -85,4 +85,5 @@
       // parametersTabPage
       // 
+      this.parametersTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.parametersTabPage.Controls.Add(this.parameterCollectionView);
       this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
@@ -92,5 +93,4 @@
       this.parametersTabPage.TabIndex = 0;
       this.parametersTabPage.Text = "Parameters";
-      this.parametersTabPage.UseVisualStyleBackColor = true;
       // 
       // parameterCollectionView
@@ -109,4 +109,5 @@
       // operatorGraphTabPage
       // 
+      this.operatorGraphTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.operatorGraphTabPage.Controls.Add(this.operatorGraphViewHost);
       this.operatorGraphTabPage.Location = new System.Drawing.Point(4, 22);
@@ -116,5 +117,4 @@
       this.operatorGraphTabPage.TabIndex = 1;
       this.operatorGraphTabPage.Text = "Operator Graph";
-      this.operatorGraphTabPage.UseVisualStyleBackColor = true;
       // 
       // operatorGraphViewHost
Index: branches/2972_PDPRowSelect/HeuristicLab.Operators.Views/3.3/CheckedMultiOperatorView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Operators.Views/3.3/CheckedMultiOperatorView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Operators.Views/3.3/CheckedMultiOperatorView.Designer.cs	(revision 16518)
@@ -85,4 +85,5 @@
       // operatorsTabPage
       // 
+      this.operatorsTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.operatorsTabPage.Controls.Add(this.operatorListView);
       this.operatorsTabPage.Location = new System.Drawing.Point(4, 22);
@@ -92,5 +93,4 @@
       this.operatorsTabPage.TabIndex = 0;
       this.operatorsTabPage.Text = "Operators";
-      this.operatorsTabPage.UseVisualStyleBackColor = true;
       // 
       // operatorListView
@@ -109,4 +109,5 @@
       // parametersTabPage
       // 
+      this.parametersTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.parametersTabPage.Controls.Add(this.parameterCollectionView);
       this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
@@ -116,5 +117,4 @@
       this.parametersTabPage.TabIndex = 1;
       this.parametersTabPage.Text = "Parameters";
-      this.parametersTabPage.UseVisualStyleBackColor = true;
       // 
       // parameterCollectionView
Index: branches/2972_PDPRowSelect/HeuristicLab.Operators.Views/3.3/MultiOperatorView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Operators.Views/3.3/MultiOperatorView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Operators.Views/3.3/MultiOperatorView.Designer.cs	(revision 16518)
@@ -85,4 +85,5 @@
       // operatorsTabPage
       // 
+      this.operatorsTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.operatorsTabPage.Controls.Add(this.operatorListView);
       this.operatorsTabPage.Location = new System.Drawing.Point(4, 22);
@@ -92,5 +93,4 @@
       this.operatorsTabPage.TabIndex = 0;
       this.operatorsTabPage.Text = "Operators";
-      this.operatorsTabPage.UseVisualStyleBackColor = true;
       // 
       // operatorListView
@@ -109,4 +109,5 @@
       // parametersTabPage
       // 
+      this.parametersTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.parametersTabPage.Controls.Add(this.parameterCollectionView);
       this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
@@ -116,5 +117,4 @@
       this.parametersTabPage.TabIndex = 1;
       this.parametersTabPage.Text = "Parameters";
-      this.parametersTabPage.UseVisualStyleBackColor = true;
       // 
       // parameterCollectionView
Index: branches/2972_PDPRowSelect/HeuristicLab.Operators.Views/3.3/ValuesCollectorView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Operators.Views/3.3/ValuesCollectorView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Operators.Views/3.3/ValuesCollectorView.Designer.cs	(revision 16518)
@@ -85,4 +85,5 @@
       // collectedValuesTabPage
       // 
+      this.collectedValuesTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.collectedValuesTabPage.Controls.Add(this.collectedValuesView);
       this.collectedValuesTabPage.Location = new System.Drawing.Point(4, 22);
@@ -92,5 +93,4 @@
       this.collectedValuesTabPage.TabIndex = 0;
       this.collectedValuesTabPage.Text = "Collected Values";
-      this.collectedValuesTabPage.UseVisualStyleBackColor = true;
       // 
       // collectedValuesView
@@ -109,4 +109,5 @@
       // parametersTabPage
       // 
+      this.parametersTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.parametersTabPage.Controls.Add(this.parameterCollectionView);
       this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
@@ -116,5 +117,4 @@
       this.parametersTabPage.TabIndex = 1;
       this.parametersTabPage.Text = "Parameters";
-      this.parametersTabPage.UseVisualStyleBackColor = true;
       // 
       // parameterCollectionView
Index: branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/AlgorithmView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/AlgorithmView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/AlgorithmView.Designer.cs	(revision 16518)
@@ -114,4 +114,5 @@
       // 
       this.problemTabPage.AllowDrop = true;
+      this.problemTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.problemTabPage.Controls.Add(this.problemViewHost);
       this.problemTabPage.Controls.Add(this.openProblemButton);
@@ -123,5 +124,4 @@
       this.problemTabPage.TabIndex = 0;
       this.problemTabPage.Text = "Problem";
-      this.problemTabPage.UseVisualStyleBackColor = true;
       this.problemTabPage.DragDrop += new System.Windows.Forms.DragEventHandler(this.problemTabPage_DragDrop);
       this.problemTabPage.DragEnter += new System.Windows.Forms.DragEventHandler(this.problemTabPage_DragEnterOver);
@@ -168,4 +168,5 @@
       // parametersTabPage
       // 
+      this.parametersTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.parametersTabPage.Controls.Add(this.parameterCollectionView);
       this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
@@ -175,5 +176,4 @@
       this.parametersTabPage.TabIndex = 1;
       this.parametersTabPage.Text = "Algorithm";
-      this.parametersTabPage.UseVisualStyleBackColor = true;
       // 
       // parameterCollectionView
@@ -193,4 +193,5 @@
       // resultsTabPage
       // 
+      this.resultsTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.resultsTabPage.Controls.Add(this.resultsView);
       this.resultsTabPage.Location = new System.Drawing.Point(4, 22);
@@ -200,5 +201,4 @@
       this.resultsTabPage.TabIndex = 2;
       this.resultsTabPage.Text = "Results";
-      this.resultsTabPage.UseVisualStyleBackColor = true;
       // 
       // resultsView
@@ -217,4 +217,5 @@
       // runsTabPage
       // 
+      this.runsTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.runsTabPage.Controls.Add(this.storeAlgorithmInEachRunCheckBox);
       this.runsTabPage.Controls.Add(this.runsView);
@@ -225,5 +226,4 @@
       this.runsTabPage.TabIndex = 3;
       this.runsTabPage.Text = "Runs";
-      this.runsTabPage.UseVisualStyleBackColor = true;
       // 
       // storeAlgorithmInEachRunCheckBox
Index: branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/BatchRunView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/BatchRunView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/BatchRunView.Designer.cs	(revision 16518)
@@ -108,4 +108,5 @@
       // 
       this.optimizerTabPage.AllowDrop = true;
+      this.optimizerTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.optimizerTabPage.Controls.Add(this.optimizerViewHost);
       this.optimizerTabPage.Controls.Add(this.openOptimizerButton);
@@ -117,5 +118,4 @@
       this.optimizerTabPage.TabIndex = 1;
       this.optimizerTabPage.Text = "Optimizer";
-      this.optimizerTabPage.UseVisualStyleBackColor = true;
       this.optimizerTabPage.DragDrop += new System.Windows.Forms.DragEventHandler(this.optimizerTabPage_DragDrop);
       this.optimizerTabPage.DragEnter += new System.Windows.Forms.DragEventHandler(this.optimizerTabPage_DragEnterOver);
@@ -162,4 +162,5 @@
       // runsTabPage
       // 
+      this.runsTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.runsTabPage.Controls.Add(this.runsView);
       this.runsTabPage.Location = new System.Drawing.Point(4, 22);
@@ -169,5 +170,4 @@
       this.runsTabPage.TabIndex = 2;
       this.runsTabPage.Text = "Runs";
-      this.runsTabPage.UseVisualStyleBackColor = true;
       // 
       // runsView
Index: branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.Designer.cs	(revision 16518)
@@ -188,4 +188,5 @@
       // engineTabPage
       // 
+      this.engineTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.engineTabPage.Controls.Add(this.engineViewHost);
       this.engineTabPage.Controls.Add(this.engineComboBox);
@@ -197,5 +198,4 @@
       this.engineTabPage.TabIndex = 5;
       this.engineTabPage.Text = "Engine";
-      this.engineTabPage.UseVisualStyleBackColor = true;
       // 
       // engineViewHost
@@ -217,4 +217,5 @@
       // operatorGraphTabPage
       // 
+      this.operatorGraphTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.operatorGraphTabPage.Controls.Add(this.operatorGraphViewHost);
       this.operatorGraphTabPage.Location = new System.Drawing.Point(4, 22);
@@ -223,5 +224,4 @@
       this.operatorGraphTabPage.TabIndex = 4;
       this.operatorGraphTabPage.Text = "Operator Graph";
-      this.operatorGraphTabPage.UseVisualStyleBackColor = true;
       // 
       // operatorGraphViewHost
Index: branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/ExperimentListView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/ExperimentListView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/ExperimentListView.Designer.cs	(revision 16518)
@@ -111,4 +111,5 @@
       // optimizersTabPage
       // 
+      this.optimizersTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.optimizersTabPage.Controls.Add(this.optimizerListView);
       this.optimizersTabPage.Location = new System.Drawing.Point(4, 22);
@@ -118,5 +119,4 @@
       this.optimizersTabPage.TabIndex = 1;
       this.optimizersTabPage.Text = "Optimizers";
-      this.optimizersTabPage.UseVisualStyleBackColor = true;
       // 
       // optimizerListView
@@ -135,4 +135,5 @@
       // runsTabPage
       // 
+      this.runsTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.runsTabPage.Controls.Add(this.runsViewHost);
       this.runsTabPage.Location = new System.Drawing.Point(4, 22);
@@ -142,5 +143,4 @@
       this.runsTabPage.TabIndex = 2;
       this.runsTabPage.Text = "Runs";
-      this.runsTabPage.UseVisualStyleBackColor = true;
       // 
       // runsViewHost
Index: branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/ExperimentView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/ExperimentView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/ExperimentView.Designer.cs	(revision 16518)
@@ -101,6 +101,6 @@
       // 
       this.tabControl.AllowDrop = true;
-      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.tabControl.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.tabControl.Controls.Add(this.optimizersTabPage);
@@ -114,4 +114,5 @@
       // optimizersTabPage
       // 
+      this.optimizersTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.optimizersTabPage.Controls.Add(this.experimentTreeView);
       this.optimizersTabPage.Location = new System.Drawing.Point(4, 22);
@@ -121,5 +122,4 @@
       this.optimizersTabPage.TabIndex = 1;
       this.optimizersTabPage.Text = "Optimizers";
-      this.optimizersTabPage.UseVisualStyleBackColor = true;
       // 
       // experimentTreeView
@@ -136,4 +136,5 @@
       // runsTabPage
       // 
+      this.runsTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.runsTabPage.Controls.Add(this.runsViewHost);
       this.runsTabPage.Location = new System.Drawing.Point(4, 22);
@@ -143,10 +144,9 @@
       this.runsTabPage.TabIndex = 2;
       this.runsTabPage.Text = "Runs";
-      this.runsTabPage.UseVisualStyleBackColor = true;
       // 
       // runsViewHost
       // 
-      this.runsViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.runsViewHost.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.runsViewHost.Caption = "View";
Index: branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/ICharacteristicCalculatorView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/ICharacteristicCalculatorView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/ICharacteristicCalculatorView.Designer.cs	(revision 16518)
@@ -66,4 +66,5 @@
       // parametersTabPage
       // 
+      this.parametersTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.parametersTabPage.Controls.Add(this.parameterCollectionView);
       this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
@@ -73,8 +74,8 @@
       this.parametersTabPage.TabIndex = 0;
       this.parametersTabPage.Text = "Parameters";
-      this.parametersTabPage.UseVisualStyleBackColor = true;
       // 
       // characteristicsTabPage
       // 
+      this.characteristicsTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.characteristicsTabPage.Location = new System.Drawing.Point(4, 22);
       this.characteristicsTabPage.Name = "characteristicsTabPage";
@@ -83,5 +84,4 @@
       this.characteristicsTabPage.TabIndex = 1;
       this.characteristicsTabPage.Text = "Characteristics";
-      this.characteristicsTabPage.UseVisualStyleBackColor = true;
       // 
       // parameterCollectionView
Index: branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/MultiEncodingView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/MultiEncodingView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/MultiEncodingView.Designer.cs	(revision 16518)
@@ -210,4 +210,5 @@
       // encodingsTabPage
       // 
+      this.encodingsTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.encodingsTabPage.Controls.Add(this.encodingsGroupBox);
       this.encodingsTabPage.Location = new System.Drawing.Point(4, 22);
@@ -217,8 +218,8 @@
       this.encodingsTabPage.TabIndex = 0;
       this.encodingsTabPage.Text = "Encodings";
-      this.encodingsTabPage.UseVisualStyleBackColor = true;
       // 
       // parametersTabPage
       // 
+      this.parametersTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.parametersTabPage.Controls.Add(this.parameterCollectionView);
       this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
@@ -228,5 +229,4 @@
       this.parametersTabPage.TabIndex = 1;
       this.parametersTabPage.Text = "Parameters";
-      this.parametersTabPage.UseVisualStyleBackColor = true;
       // 
       // MultiEncodingView
Index: branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionRLDView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionRLDView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionRLDView.Designer.cs	(revision 16518)
@@ -87,5 +87,5 @@
       // dataTableComboBox
       // 
-      this.dataTableComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.dataTableComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.dataTableComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
@@ -117,5 +117,5 @@
       // groupComboBox
       // 
-      this.groupComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.groupComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.groupComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
@@ -141,5 +141,5 @@
       // targetsTextBox
       // 
-      this.targetsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.targetsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.targetsTextBox.Location = new System.Drawing.Point(59, 8);
@@ -198,5 +198,5 @@
       // budgetsTextBox
       // 
-      this.budgetsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.budgetsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.budgetsTextBox.Location = new System.Drawing.Point(59, 8);
@@ -233,6 +233,6 @@
       // tabControl
       // 
-      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.tabControl.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.tabControl.Controls.Add(this.byTargetTabPage);
@@ -247,4 +247,5 @@
       // byTargetTabPage
       // 
+      this.byTargetTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.byTargetTabPage.Controls.Add(this.relativeOrAbsoluteComboBox);
       this.byTargetTabPage.Controls.Add(this.targetChart);
@@ -264,5 +265,4 @@
       this.byTargetTabPage.TabIndex = 0;
       this.byTargetTabPage.Text = "Performance by Target";
-      this.byTargetTabPage.UseVisualStyleBackColor = true;
       // 
       // relativeOrAbsoluteComboBox
@@ -282,6 +282,6 @@
       // targetChart
       // 
-      this.targetChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.targetChart.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)));
       chartArea2.AxisX.IsStartedFromZero = false;
@@ -352,4 +352,5 @@
       // byCostTabPage
       // 
+      this.byCostTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.byCostTabPage.Controls.Add(this.byCostViewHost);
       this.byCostTabPage.Controls.Add(this.budgetLogScalingCheckBox);
@@ -364,10 +365,9 @@
       this.byCostTabPage.TabIndex = 1;
       this.byCostTabPage.Text = "Performance by Cost";
-      this.byCostTabPage.UseVisualStyleBackColor = true;
       // 
       // byCostViewHost
       // 
-      this.byCostViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.byCostViewHost.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.byCostViewHost.Caption = "View";
@@ -407,4 +407,5 @@
       // byTableTabPage
       // 
+      this.byTableTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.byTableTabPage.Controls.Add(this.ertTableView);
       this.byTableTabPage.Location = new System.Drawing.Point(4, 22);
@@ -414,5 +415,4 @@
       this.byTableTabPage.TabIndex = 2;
       this.byTableTabPage.Text = "Expected Runtime Tables";
-      this.byTableTabPage.UseVisualStyleBackColor = true;
       // 
       // ertTableView
@@ -431,5 +431,5 @@
       // problemComboBox
       // 
-      this.problemComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.problemComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.problemComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
Index: branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionView.Designer.cs	(revision 16518)
@@ -248,4 +248,5 @@
       // runPage
       // 
+      this.runPage.BackColor = System.Drawing.SystemColors.Window;
       this.runPage.Controls.Add(this.itemsGroupBox);
       this.runPage.Location = new System.Drawing.Point(4, 22);
@@ -255,8 +256,8 @@
       this.runPage.TabIndex = 0;
       this.runPage.Text = "Runs";
-      this.runPage.UseVisualStyleBackColor = true;
       // 
       // constraintPage
       // 
+      this.constraintPage.BackColor = System.Drawing.SystemColors.Window;
       this.constraintPage.Controls.Add(this.runCollectionConstraintCollectionView);
       this.constraintPage.Location = new System.Drawing.Point(4, 22);
@@ -266,5 +267,4 @@
       this.constraintPage.TabIndex = 1;
       this.constraintPage.Text = "Filtering";
-      this.constraintPage.UseVisualStyleBackColor = true;
       // 
       // runCollectionConstraintCollectionView
@@ -281,4 +281,5 @@
       // modifiersPage
       // 
+      this.modifiersPage.BackColor = System.Drawing.SystemColors.Window;
       this.modifiersPage.Controls.Add(this.runCollectionModifiersListView);
       this.modifiersPage.Location = new System.Drawing.Point(4, 22);
@@ -288,10 +289,9 @@
       this.modifiersPage.TabIndex = 2;
       this.modifiersPage.Text = "Modification";
-      this.modifiersPage.UseVisualStyleBackColor = true;
       // 
       // runCollectionModifiersListView
       // 
-      this.runCollectionModifiersListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.runCollectionModifiersListView.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.runCollectionModifiersListView.Caption = "Modifier View";
Index: branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/TimeLimitRunView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/TimeLimitRunView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/TimeLimitRunView.Designer.cs	(revision 16518)
@@ -113,5 +113,5 @@
       // timeLimitTextBox
       // 
-      this.timeLimitTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.timeLimitTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.timeLimitTextBox.Location = new System.Drawing.Point(69, 26);
@@ -132,5 +132,5 @@
       // snapshotsTextBox
       // 
-      this.snapshotsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.snapshotsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.snapshotsTextBox.Location = new System.Drawing.Point(69, 52);
@@ -155,6 +155,6 @@
       // 
       this.tabControl.AllowDrop = true;
-      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.tabControl.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.tabControl.Controls.Add(this.algorithmTabPage);
@@ -170,4 +170,5 @@
       // 
       this.algorithmTabPage.AllowDrop = true;
+      this.algorithmTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.algorithmTabPage.Controls.Add(this.algorithmViewHost);
       this.algorithmTabPage.Controls.Add(this.openAlgorithmButton);
@@ -179,5 +180,4 @@
       this.algorithmTabPage.TabIndex = 1;
       this.algorithmTabPage.Text = "Algorithm";
-      this.algorithmTabPage.UseVisualStyleBackColor = true;
       this.algorithmTabPage.DragDrop += new System.Windows.Forms.DragEventHandler(this.algorithmTabPage_DragDrop);
       this.algorithmTabPage.DragEnter += new System.Windows.Forms.DragEventHandler(this.algorithmTabPage_DragEnterOver);
@@ -186,6 +186,6 @@
       // algorithmViewHost
       // 
-      this.algorithmViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.algorithmViewHost.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.algorithmViewHost.Caption = "View";
@@ -224,4 +224,5 @@
       // snapshotsTabPage
       // 
+      this.snapshotsTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.snapshotsTabPage.Controls.Add(this.snapshotsView);
       this.snapshotsTabPage.Location = new System.Drawing.Point(4, 22);
@@ -231,10 +232,9 @@
       this.snapshotsTabPage.TabIndex = 2;
       this.snapshotsTabPage.Text = "Snapshots";
-      this.snapshotsTabPage.UseVisualStyleBackColor = true;
       // 
       // snapshotsView
       // 
-      this.snapshotsView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.snapshotsView.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.snapshotsView.Caption = "RunCollection View";
@@ -248,4 +248,5 @@
       // runsTabPage
       // 
+      this.runsTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.runsTabPage.Controls.Add(this.runsView);
       this.runsTabPage.Location = new System.Drawing.Point(4, 22);
@@ -254,10 +255,9 @@
       this.runsTabPage.TabIndex = 3;
       this.runsTabPage.Text = "Runs";
-      this.runsTabPage.UseVisualStyleBackColor = true;
       // 
       // runsView
       // 
-      this.runsView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.runsView.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.runsView.Caption = "RunCollection View";
Index: branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/UserDefinedAlgorithmView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/UserDefinedAlgorithmView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Optimization.Views/3.3/UserDefinedAlgorithmView.Designer.cs	(revision 16518)
@@ -108,4 +108,5 @@
       // globalScopeTabPage
       // 
+      this.globalScopeTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.globalScopeTabPage.Controls.Add(this.globalScopeView);
       this.globalScopeTabPage.Location = new System.Drawing.Point(4, 22);
@@ -114,5 +115,4 @@
       this.globalScopeTabPage.TabIndex = 6;
       this.globalScopeTabPage.Text = "Global Scope";
-      this.globalScopeTabPage.UseVisualStyleBackColor = true;
       // 
       // globalScopeView
Index: branches/2972_PDPRowSelect/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.Designer.cs	(revision 16518)
@@ -147,5 +147,5 @@
       // repetitionsNumericUpDown
       // 
-      this.repetitionsNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.repetitionsNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.repetitionsNumericUpDown.Location = new System.Drawing.Point(113, 28);
@@ -234,6 +234,6 @@
       // tabControl
       // 
-      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.tabControl.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.tabControl.Controls.Add(this.parametersTabPage);
@@ -247,4 +247,5 @@
       // parametersTabPage
       // 
+      this.parametersTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.parametersTabPage.Controls.Add(this.parametersSplitContainer);
       this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
@@ -254,5 +255,4 @@
       this.parametersTabPage.TabIndex = 1;
       this.parametersTabPage.Text = "Parameter Variations";
-      this.parametersTabPage.UseVisualStyleBackColor = true;
       // 
       // parametersSplitContainer
@@ -311,6 +311,6 @@
       // stringConvertibleArrayView
       // 
-      this.stringConvertibleArrayView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.stringConvertibleArrayView.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.stringConvertibleArrayView.Caption = "StringConvertibleArray View";
@@ -333,6 +333,6 @@
       // choicesListView
       // 
-      this.choicesListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.choicesListView.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.choicesListView.CheckBoxes = true;
@@ -354,4 +354,5 @@
       // instancesTabPage
       // 
+      this.instancesTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.instancesTabPage.Controls.Add(this.label1);
       this.instancesTabPage.Controls.Add(this.instanceDiscoveryProgressBar);
@@ -366,5 +367,4 @@
       this.instancesTabPage.TabIndex = 0;
       this.instancesTabPage.Text = "Problem Instances";
-      this.instancesTabPage.UseVisualStyleBackColor = true;
       // 
       // label1
@@ -379,6 +379,6 @@
       // instancesTreeView
       // 
-      this.instancesTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.instancesTreeView.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.instancesTreeView.CheckBoxes = true;
@@ -423,5 +423,5 @@
       // experimentCreationProgressBar
       // 
-      this.experimentCreationProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
+      this.experimentCreationProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.experimentCreationProgressBar.Location = new System.Drawing.Point(187, 377);
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj	(revision 16518)
@@ -121,4 +121,5 @@
     <Compile Include="MultiObjective\PearsonRSquaredNestedTreeSizeEvaluator.cs" />
     <Compile Include="MultiObjective\PearsonRSquaredNumberOfVariablesEvaluator.cs" />
+    <Compile Include="MultiObjective\PearsonRSquaredAverageSimilarityEvaluator.cs" />
     <Compile Include="MultiObjective\PearsonRSquaredTreeComplexityEvaluator.cs" />
     <Compile Include="MultiObjective\SymbolicRegressionMultiObjectiveValidationBestSolutionAnalyzer.cs" />
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/PearsonRSquaredAverageSimilarityEvaluator.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/PearsonRSquaredAverageSimilarityEvaluator.cs	(revision 16518)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/PearsonRSquaredAverageSimilarityEvaluator.cs	(revision 16518)
@@ -0,0 +1,134 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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.Diagnostics;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression {
+  [Item("Pearson R² & Average Similarity Evaluator", "Calculates the Pearson R² and the average similarity of a symbolic regression solution candidate.")]
+  [StorableClass]
+  public class PearsonRSquaredAverageSimilarityEvaluator : SymbolicRegressionMultiObjectiveEvaluator {
+    private const string StrictSimilarityParameterName = "StrictSimilarity";
+
+    private readonly object locker = new object();
+
+    public IFixedValueParameter<BoolValue> StrictSimilarityParameter {
+      get { return (IFixedValueParameter<BoolValue>)Parameters[StrictSimilarityParameterName]; }
+    }
+
+    public bool StrictSimilarity {
+      get { return StrictSimilarityParameter.Value.Value; }
+    }
+
+    [StorableConstructor]
+    protected PearsonRSquaredAverageSimilarityEvaluator(bool deserializing) : base(deserializing) { }
+    protected PearsonRSquaredAverageSimilarityEvaluator(PearsonRSquaredAverageSimilarityEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PearsonRSquaredAverageSimilarityEvaluator(this, cloner);
+    }
+
+    public PearsonRSquaredAverageSimilarityEvaluator() : base() {
+      Parameters.Add(new FixedValueParameter<BoolValue>(StrictSimilarityParameterName, "Use strict similarity calculation.", new BoolValue(false)));
+    }
+
+    public override IEnumerable<bool> Maximization { get { return new bool[2] { true, false }; } } // maximize R² and minimize model complexity 
+
+    public override IOperation InstrumentedApply() {
+      IEnumerable<int> rows = GenerateRowsToEvaluate();
+      var solution = SymbolicExpressionTreeParameter.ActualValue;
+      var problemData = ProblemDataParameter.ActualValue;
+      var interpreter = SymbolicDataAnalysisTreeInterpreterParameter.ActualValue;
+      var estimationLimits = EstimationLimitsParameter.ActualValue;
+      var applyLinearScaling = ApplyLinearScalingParameter.ActualValue.Value;
+
+      if (UseConstantOptimization) {
+        SymbolicRegressionConstantOptimizationEvaluator.OptimizeConstants(interpreter, solution, problemData, rows, applyLinearScaling, ConstantOptimizationIterations, updateVariableWeights: ConstantOptimizationUpdateVariableWeights, lowerEstimationLimit: estimationLimits.Lower, upperEstimationLimit: estimationLimits.Upper);
+      }
+      double[] qualities = Calculate(interpreter, solution, estimationLimits.Lower, estimationLimits.Upper, problemData, rows, applyLinearScaling, DecimalPlaces);
+      QualitiesParameter.ActualValue = new DoubleArray(qualities);
+      return base.InstrumentedApply();
+    }
+
+    public double[] Calculate(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, IRegressionProblemData problemData, IEnumerable<int> rows, bool applyLinearScaling, int decimalPlaces) {
+      double r2 = SymbolicRegressionSingleObjectivePearsonRSquaredEvaluator.Calculate(interpreter, solution, lowerEstimationLimit, upperEstimationLimit, problemData, rows, applyLinearScaling);
+      if (decimalPlaces >= 0)
+        r2 = Math.Round(r2, decimalPlaces);
+
+      var variables = ExecutionContext.Scope.Variables;
+      if (!variables.ContainsKey("AverageSimilarity")) {
+        lock (locker) {
+          CalculateAverageSimilarities(ExecutionContext.Scope.Parent.SubScopes.Where(x => x.Variables.ContainsKey("SymbolicExpressionTree")).ToArray(), StrictSimilarity);
+
+        }
+      }
+
+      double avgSim = ((DoubleValue)variables["AverageSimilarity"].Value).Value;
+      return new double[2] { r2, avgSim };
+    }
+
+    public override double[] Evaluate(IExecutionContext context, ISymbolicExpressionTree tree, IRegressionProblemData problemData, IEnumerable<int> rows) {
+      SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = context;
+      EstimationLimitsParameter.ExecutionContext = context;
+      ApplyLinearScalingParameter.ExecutionContext = context;
+      // DecimalPlaces parameter is a FixedValueParameter and doesn't need the context.
+
+      double[] quality = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, tree, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, problemData, rows, ApplyLinearScalingParameter.ActualValue.Value, DecimalPlaces);
+
+      SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = null;
+      EstimationLimitsParameter.ExecutionContext = null;
+      ApplyLinearScalingParameter.ExecutionContext = null;
+
+      return quality;
+    }
+
+    private readonly Stopwatch sw = new Stopwatch();
+    public void CalculateAverageSimilarities(IScope[] treeScopes, bool strict) {
+      var trees = treeScopes.Select(x => (ISymbolicExpressionTree)x.Variables["SymbolicExpressionTree"].Value).ToArray();
+      var similarityMatrix = SymbolicExpressionTreeHash.ComputeSimilarityMatrix(trees, simplify: false, strict: strict);
+
+      for (int i = 0; i < treeScopes.Length; ++i) {
+        var scope = treeScopes[i];
+        var avgSimilarity = 0d;
+        for (int j = 0; j < trees.Length; ++j) {
+          if (i == j) continue;
+          avgSimilarity += similarityMatrix[i, j];
+        }
+        avgSimilarity /= trees.Length - 1;
+
+        if (scope.Variables.ContainsKey("AverageSimilarity")) {
+          ((DoubleValue)scope.Variables["AverageSimilarity"].Value).Value = avgSimilarity;
+        } else {
+          scope.Variables.Add(new Core.Variable("AverageSimilarity", new DoubleValue(avgSimilarity)));
+        }
+      }
+    }
+  }
+}
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Symbols/VariableConditionView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Symbols/VariableConditionView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Symbols/VariableConditionView.Designer.cs	(revision 16518)
@@ -237,4 +237,5 @@
       // variableNamesTabPage
       // 
+      this.variableNamesTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.variableNamesTabPage.Location = new System.Drawing.Point(4, 22);
       this.variableNamesTabPage.Name = "variableNamesTabPage";
@@ -243,8 +244,8 @@
       this.variableNamesTabPage.TabIndex = 0;
       this.variableNamesTabPage.Text = "Variable Names";
-      this.variableNamesTabPage.UseVisualStyleBackColor = true;
       // 
       // parametersTabPage
       // 
+      this.parametersTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.parametersTabPage.Controls.Add(this.initializationGroupBox);
       this.parametersTabPage.Controls.Add(this.mutationGroupBox);
@@ -255,5 +256,4 @@
       this.parametersTabPage.TabIndex = 1;
       this.parametersTabPage.Text = "Parameters";
-      this.parametersTabPage.UseVisualStyleBackColor = true;
       // 
       // initializationGroupBox
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Symbols/VariableView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Symbols/VariableView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Symbols/VariableView.Designer.cs	(revision 16518)
@@ -124,5 +124,5 @@
       // weightInitializationMuTextBox
       // 
-      this.weightInitializationMuTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.weightInitializationMuTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.weightInitializationMuTextBox.Location = new System.Drawing.Point(92, 19);
@@ -136,5 +136,5 @@
       // initializationGroupBox
       // 
-      this.initializationGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.initializationGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.initializationGroupBox.Controls.Add(this.weightSigmaLabel);
@@ -161,5 +161,5 @@
       // weightInitializationSigmaTextBox
       // 
-      this.weightInitializationSigmaTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.weightInitializationSigmaTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.weightInitializationSigmaTextBox.Location = new System.Drawing.Point(92, 45);
@@ -173,5 +173,5 @@
       // mutationGroupBox
       // 
-      this.mutationGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.mutationGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.mutationGroupBox.Controls.Add(this.varChangeProbTextBox);
@@ -190,5 +190,5 @@
       // varChangeProbTextBox
       // 
-      this.varChangeProbTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.varChangeProbTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.varChangeProbTextBox.Location = new System.Drawing.Point(201, 13);
@@ -224,5 +224,5 @@
       // multiplicativeWeightChangeSigmaTextBox
       // 
-      this.multiplicativeWeightChangeSigmaTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.multiplicativeWeightChangeSigmaTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.multiplicativeWeightChangeSigmaTextBox.Location = new System.Drawing.Point(201, 65);
@@ -247,5 +247,5 @@
       // additiveWeightChangeSigmaTextBox
       // 
-      this.additiveWeightChangeSigmaTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.additiveWeightChangeSigmaTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.additiveWeightChangeSigmaTextBox.Location = new System.Drawing.Point(201, 39);
@@ -259,6 +259,6 @@
       // tabControl
       // 
-      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.tabControl.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.tabControl.Controls.Add(this.variableNamesTabPage);
@@ -272,4 +272,5 @@
       // variableNamesTabPage
       // 
+      this.variableNamesTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.variableNamesTabPage.Location = new System.Drawing.Point(4, 22);
       this.variableNamesTabPage.Name = "variableNamesTabPage";
@@ -278,8 +279,8 @@
       this.variableNamesTabPage.TabIndex = 0;
       this.variableNamesTabPage.Text = "Variable Names";
-      this.variableNamesTabPage.UseVisualStyleBackColor = true;
       // 
       // parametersTabPage
       // 
+      this.parametersTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.parametersTabPage.Controls.Add(this.mutationGroupBox);
       this.parametersTabPage.Controls.Add(this.initializationGroupBox);
@@ -290,5 +291,4 @@
       this.parametersTabPage.TabIndex = 1;
       this.parametersTabPage.Text = "Parameters";
-      this.parametersTabPage.UseVisualStyleBackColor = true;
       // 
       // VariableView
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Hashing/SymbolicExpressionTreeHash.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Hashing/SymbolicExpressionTreeHash.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Hashing/SymbolicExpressionTreeHash.cs	(revision 16518)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -39,98 +39,28 @@
 
     private static readonly ISymbolicExpressionTreeNodeComparer comparer = new SymbolicExpressionTreeNodeComparer();
-
-    public static ulong ComputeHash(this ISymbolicExpressionTree tree) {
-      return ComputeHash(tree.Root.GetSubtree(0).GetSubtree(0));
-    }
-
-    public static double ComputeSimilarity(ISymbolicExpressionTree t1, ISymbolicExpressionTree t2, bool simplify = false) {
-      return ComputeSimilarity(t1.Root.GetSubtree(0).GetSubtree(0), t2.Root.GetSubtree(0).GetSubtree(0), simplify);
-    }
-
-    public static double ComputeSimilarity(ISymbolicExpressionTreeNode t1, ISymbolicExpressionTreeNode t2, bool simplify = false) {
-      HashNode<ISymbolicExpressionTreeNode>[] lhs;
-      HashNode<ISymbolicExpressionTreeNode>[] rhs;
-
+    private static ISymbolicExpressionTreeNode ActualRoot(this ISymbolicExpressionTree tree) => tree.Root.GetSubtree(0).GetSubtree(0);
+
+    #region tree hashing
+    public static ulong[] Hash(this ISymbolicExpressionTree tree, bool simplify = false, bool strict = false) {
+      return tree.ActualRoot().Hash(simplify, strict);
+    }
+
+    public static ulong[] Hash(this ISymbolicExpressionTreeNode node, bool simplify = false, bool strict = false) {
       ulong hashFunction(byte[] input) => HashUtil.DJBHash(input);
 
-      if (simplify) {
-        lhs = t1.MakeNodes().Simplify(hashFunction);
-        rhs = t2.MakeNodes().Simplify(hashFunction);
-      } else {
-        lhs = t1.MakeNodes().Sort(hashFunction); // sort calculates hash values
-        rhs = t2.MakeNodes().Sort(hashFunction);
-      }
-
-      var lh = lhs.Select(x => x.CalculatedHashValue).ToArray();
-      var rh = rhs.Select(x => x.CalculatedHashValue).ToArray();
-
-      Array.Sort(lh);
-      Array.Sort(rh);
-
-      return ComputeSimilarity(lh, rh);
-    }
-
-    // this will only work if lh and rh are sorted
-    private static double ComputeSimilarity(ulong[] lh, ulong[] rh) {
-      double count = 0;
-      for (int i = 0, j = 0; i < lh.Length && j < rh.Length;) {
-        var h1 = lh[i];
-        var h2 = rh[j];
-        if (h1 == h2) {
-          ++count;
-          ++i;
-          ++j;
-        } else if (h1 < h2) {
-          ++i;
-        } else if (h1 > h2) {
-          ++j;
-        }
-      }
-
-      return 2d * count / (lh.Length + rh.Length);
-    }
-
-    public static double ComputeAverageSimilarity(IList<ISymbolicExpressionTree> trees, bool simplify = false, bool strict = false) {
-      var total = (double)trees.Count * (trees.Count - 1) / 2;
-      double avg = 0;
-      var hashes = new ulong[trees.Count][];
-      // build hash arrays
-      for (int i = 0; i < trees.Count; ++i) {
-        var nodes = trees[i].MakeNodes(strict);
-        hashes[i] = (simplify ? nodes.Simplify(HashUtil.DJBHash) : nodes.Sort(HashUtil.DJBHash)).Select(x => x.CalculatedHashValue).ToArray();
-        Array.Sort(hashes[i]);
-      }
-      // compute similarity matrix
-      for (int i = 0; i < trees.Count - 1; ++i) {
-        for (int j = i + 1; j < trees.Count; ++j) {
-          avg += ComputeSimilarity(hashes[i], hashes[j]);
-        }
-      }
-      return avg / total;
-    }
-
-    public static double[,] ComputeSimilarityMatrix(IList<ISymbolicExpressionTree> trees, bool simplify = false, bool strict = false) {
-      var sim = new double[trees.Count, trees.Count];
-      var hashes = new ulong[trees.Count][];
-      // build hash arrays
-      for (int i = 0; i < trees.Count; ++i) {
-        var nodes = trees[i].MakeNodes(strict);
-        hashes[i] = (simplify ? nodes.Simplify(HashUtil.DJBHash) : nodes.Sort(HashUtil.DJBHash)).Select(x => x.CalculatedHashValue).ToArray();
-        Array.Sort(hashes[i]);
-      }
-      // compute similarity matrix
-      for (int i = 0; i < trees.Count - 1; ++i) {
-        for (int j = i + 1; j < trees.Count; ++j) {
-          sim[i, j] = sim[j, i] = ComputeSimilarity(hashes[i], hashes[j]);
-        }
-      }
-      return sim;
-    }
-
-    public static ulong ComputeHash(this ISymbolicExpressionTreeNode treeNode, bool strict = false) {
-      ulong hashFunction(byte[] input) => HashUtil.JSHash(input);
-      var hashNodes = treeNode.MakeNodes(strict);
-      var simplified = hashNodes.Simplify(hashFunction);
-      return simplified.Last().CalculatedHashValue;
+      var hashNodes = simplify ? node.MakeNodes(strict).Simplify(hashFunction) : node.MakeNodes(strict).Sort(hashFunction);
+      var hashes = new ulong[hashNodes.Length];
+      for (int i = 0; i < hashes.Length; ++i) {
+        hashes[i] = hashNodes[i].CalculatedHashValue;
+      }
+      return hashes;
+    }
+
+    public static ulong ComputeHash(this ISymbolicExpressionTree tree, bool simplify = false, bool strict = false) {
+      return ComputeHash(tree.ActualRoot(), simplify, strict);
+    }
+
+    public static ulong ComputeHash(this ISymbolicExpressionTreeNode treeNode, bool simplify = false, bool strict = false) {
+      return treeNode.Hash(simplify, strict).Last();
     }
 
@@ -168,5 +98,5 @@
 
     public static HashNode<ISymbolicExpressionTreeNode>[] MakeNodes(this ISymbolicExpressionTree tree, bool strict = false) {
-      return MakeNodes(tree.Root.GetSubtree(0).GetSubtree(0), strict);
+      return MakeNodes(tree.ActualRoot(), strict);
     }
 
@@ -174,4 +104,98 @@
       return node.IterateNodesPostfix().Select(x => x.ToHashNode(strict)).ToArray().UpdateNodeSizes();
     }
+    #endregion
+
+    #region tree similarity
+    public static double ComputeSimilarity(ISymbolicExpressionTree t1, ISymbolicExpressionTree t2, bool simplify = false, bool strict = false) {
+      return ComputeSimilarity(t1.ActualRoot(), t2.ActualRoot(), simplify, strict);
+    }
+
+    public static double ComputeSimilarity(ISymbolicExpressionTreeNode t1, ISymbolicExpressionTreeNode t2, bool simplify = false, bool strict = false) {
+      var lh = t1.Hash(simplify, strict);
+      var rh = t2.Hash(simplify, strict);
+
+      Array.Sort(lh);
+      Array.Sort(rh);
+
+      return ComputeSimilarity(lh, rh);
+    }
+
+    // requires lhs and rhs to be sorted
+    public static int IntersectCount(this ulong[] lh, ulong[] rh) {
+      int count = 0;
+      for (int i = 0, j = 0; i < lh.Length && j < rh.Length;) {
+        var h1 = lh[i];
+        var h2 = rh[j];
+        if (h1 == h2) {
+          ++count;
+          ++i;
+          ++j;
+        } else if (h1 < h2) {
+          ++i;
+        } else if (h1 > h2) {
+          ++j;
+        }
+      }
+      return count;
+    }
+
+    public static IEnumerable<ulong> Intersect(this ulong[] lh, ulong[] rh) {
+      for (int i = 0, j = 0; i < lh.Length && j < rh.Length;) {
+        var h1 = lh[i];
+        var h2 = rh[j];
+        if (h1 == h2) {
+          yield return h1;
+          ++i;
+          ++j;
+        } else if (h1 < h2) {
+          ++i;
+        } else if (h1 > h2) {
+          ++j;
+        }
+      }
+    }
+
+    // this will only work if lh and rh are sorted
+    public static double ComputeSimilarity(ulong[] lh, ulong[] rh) {
+      return 2d * IntersectCount(lh, rh) / (lh.Length + rh.Length);
+    }
+
+    public static double ComputeAverageSimilarity(IList<ISymbolicExpressionTree> trees, bool simplify = false, bool strict = false) {
+      var total = trees.Count * (trees.Count - 1) / 2;
+      double avg = 0;
+      var hashes = new ulong[trees.Count][];
+      // build hash arrays
+      for (int i = 0; i < trees.Count; ++i) {
+        var nodes = trees[i].MakeNodes(strict);
+        hashes[i] = (simplify ? nodes.Simplify(HashUtil.DJBHash) : nodes.Sort(HashUtil.DJBHash)).Select(x => x.CalculatedHashValue).ToArray();
+        Array.Sort(hashes[i]);
+      }
+      // compute similarity matrix
+      for (int i = 0; i < trees.Count - 1; ++i) {
+        for (int j = i + 1; j < trees.Count; ++j) {
+          avg += ComputeSimilarity(hashes[i], hashes[j]);
+        }
+      }
+      return avg / total;
+    }
+
+    public static double[,] ComputeSimilarityMatrix(IList<ISymbolicExpressionTree> trees, bool simplify = false, bool strict = false) {
+      var sim = new double[trees.Count, trees.Count];
+      var hashes = new ulong[trees.Count][];
+      // build hash arrays
+      for (int i = 0; i < trees.Count; ++i) {
+        var nodes = trees[i].MakeNodes(strict);
+        hashes[i] = (simplify ? nodes.Simplify(HashUtil.DJBHash) : nodes.Sort(HashUtil.DJBHash)).Select(x => x.CalculatedHashValue).ToArray();
+        Array.Sort(hashes[i]);
+      }
+      // compute similarity matrix
+      for (int i = 0; i < trees.Count - 1; ++i) {
+        for (int j = i + 1; j < trees.Count; ++j) {
+          sim[i, j] = sim[j, i] = ComputeSimilarity(hashes[i], hashes[j]);
+        }
+      }
+      return sim;
+    }
+    #endregion
 
     #region parse a nodes array back into a tree
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.Orienteering.Views/3.3/OrienteeringProblemView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.Orienteering.Views/3.3/OrienteeringProblemView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.Orienteering.Views/3.3/OrienteeringProblemView.Designer.cs	(revision 16518)
@@ -90,4 +90,5 @@
       // parametersTabPage
       // 
+      this.parametersTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.parametersTabPage.Controls.Add(this.parameterCollectionView);
       this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
@@ -97,8 +98,8 @@
       this.parametersTabPage.TabIndex = 0;
       this.parametersTabPage.Text = "Parameters";
-      this.parametersTabPage.UseVisualStyleBackColor = true;
       // 
       // visualizationTabPage
       // 
+      this.visualizationTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.visualizationTabPage.Controls.Add(this.orienteeringSolutionView);
       this.visualizationTabPage.Location = new System.Drawing.Point(4, 22);
@@ -108,5 +109,4 @@
       this.visualizationTabPage.TabIndex = 1;
       this.visualizationTabPage.Text = "Visualization";
-      this.visualizationTabPage.UseVisualStyleBackColor = true;
       // 
       // orienteeringSolutionView
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.Orienteering.Views/3.3/OrienteeringSolutionView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.Orienteering.Views/3.3/OrienteeringSolutionView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.Orienteering.Views/3.3/OrienteeringSolutionView.Designer.cs	(revision 16518)
@@ -71,6 +71,6 @@
       // pictureBox
       // 
-      this.pictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.pictureBox.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.pictureBox.BackColor = System.Drawing.Color.White;
@@ -86,6 +86,6 @@
       // 
       this.tabControl.AllowDrop = true;
-      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.tabControl.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.tabControl.Controls.Add(this.visualizationTabPage);
@@ -99,4 +99,5 @@
       // visualizationTabPage
       // 
+      this.visualizationTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.visualizationTabPage.Controls.Add(this.pictureBox);
       this.visualizationTabPage.Location = new System.Drawing.Point(4, 22);
@@ -106,8 +107,8 @@
       this.visualizationTabPage.TabIndex = 0;
       this.visualizationTabPage.Text = "Visualization";
-      this.visualizationTabPage.UseVisualStyleBackColor = true;
       // 
       // valueTabPage
       // 
+      this.valueTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.valueTabPage.Controls.Add(this.tourGroupBox);
       this.valueTabPage.Location = new System.Drawing.Point(4, 22);
@@ -117,10 +118,9 @@
       this.valueTabPage.TabIndex = 1;
       this.valueTabPage.Text = "Value";
-      this.valueTabPage.UseVisualStyleBackColor = true;
       // 
       // tourGroupBox
       // 
-      this.tourGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.tourGroupBox.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.tourGroupBox.Controls.Add(this.tourViewHost);
@@ -134,6 +134,6 @@
       // tourViewHost
       // 
-      this.tourViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.tourViewHost.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.tourViewHost.Caption = "View";
@@ -176,5 +176,5 @@
       // qualityValueView
       // 
-      this.qualityValueView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.qualityValueView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.qualityValueView.Caption = "StringConvertibleValue View";
@@ -189,5 +189,5 @@
       // distanceValueView
       // 
-      this.distanceValueView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.distanceValueView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.distanceValueView.Caption = "StringConvertibleValue View";
@@ -202,5 +202,5 @@
       // penaltyValueView
       // 
-      this.penaltyValueView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.penaltyValueView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.penaltyValueView.Caption = "StringConvertibleValue View";
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.PTSP.Views/3.3/PathPTSPTourView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.PTSP.Views/3.3/PathPTSPTourView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.PTSP.Views/3.3/PathPTSPTourView.Designer.cs	(revision 16518)
@@ -94,4 +94,5 @@
       // visualizationTabPage
       // 
+      this.visualizationTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.visualizationTabPage.Controls.Add(this.pictureBox);
       this.visualizationTabPage.Location = new System.Drawing.Point(4, 22);
@@ -101,8 +102,8 @@
       this.visualizationTabPage.TabIndex = 0;
       this.visualizationTabPage.Text = "Visualization";
-      this.visualizationTabPage.UseVisualStyleBackColor = true;
       // 
       // valueTabPage
       // 
+      this.valueTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.valueTabPage.Controls.Add(this.tourGroupBox);
       this.valueTabPage.Location = new System.Drawing.Point(4, 22);
@@ -112,5 +113,4 @@
       this.valueTabPage.TabIndex = 1;
       this.valueTabPage.Text = "Value";
-      this.valueTabPage.UseVisualStyleBackColor = true;
       // 
       // tourGroupBox
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.PTSP.Views/3.3/ProbabilisticTravelingSalesmanProblemView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.PTSP.Views/3.3/ProbabilisticTravelingSalesmanProblemView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.PTSP.Views/3.3/ProbabilisticTravelingSalesmanProblemView.Designer.cs	(revision 16518)
@@ -77,6 +77,6 @@
       // 
       this.tabControl.AllowDrop = true;
-      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.tabControl.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.tabControl.Controls.Add(this.parametersTabPage);
@@ -90,4 +90,5 @@
       // parametersTabPage
       // 
+      this.parametersTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.parametersTabPage.Controls.Add(this.parameterCollectionView);
       this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
@@ -97,8 +98,8 @@
       this.parametersTabPage.TabIndex = 0;
       this.parametersTabPage.Text = "Parameters";
-      this.parametersTabPage.UseVisualStyleBackColor = true;
       // 
       // visualizationTabPage
       // 
+      this.visualizationTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.visualizationTabPage.Controls.Add(this.pathPTSPTourView);
       this.visualizationTabPage.Location = new System.Drawing.Point(4, 22);
@@ -108,10 +109,9 @@
       this.visualizationTabPage.TabIndex = 1;
       this.visualizationTabPage.Text = "Visualization";
-      this.visualizationTabPage.UseVisualStyleBackColor = true;
       // 
       // pathPTSPTourView
       // 
-      this.pathPTSPTourView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.pathPTSPTourView.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.pathPTSPTourView.Caption = "PathPTSPTour View";
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/QAPAssignmentView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/QAPAssignmentView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/QAPAssignmentView.Designer.cs	(revision 16518)
@@ -128,4 +128,5 @@
       // visualizationTabPage
       // 
+      this.visualizationTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.visualizationTabPage.Controls.Add(this.qapView);
       this.visualizationTabPage.Location = new System.Drawing.Point(4, 22);
@@ -135,8 +136,8 @@
       this.visualizationTabPage.TabIndex = 0;
       this.visualizationTabPage.Text = "Visualization";
-      this.visualizationTabPage.UseVisualStyleBackColor = true;
       // 
       // valueTabPage
       // 
+      this.valueTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.valueTabPage.Controls.Add(this.assignmentGroupBox);
       this.valueTabPage.Location = new System.Drawing.Point(4, 22);
@@ -146,5 +147,4 @@
       this.valueTabPage.TabIndex = 1;
       this.valueTabPage.Text = "Value";
-      this.valueTabPage.UseVisualStyleBackColor = true;
       // 
       // assignmentGroupBox
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/QuadraticAssignmentProblemView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/QuadraticAssignmentProblemView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/QuadraticAssignmentProblemView.Designer.cs	(revision 16518)
@@ -80,6 +80,6 @@
       // tabControl
       // 
-      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.tabControl.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.tabControl.Controls.Add(this.problemTabPage);
@@ -93,4 +93,5 @@
       // problemTabPage
       // 
+      this.problemTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.problemTabPage.Controls.Add(this.parameterCollectionView);
       this.problemTabPage.Location = new System.Drawing.Point(4, 22);
@@ -100,8 +101,8 @@
       this.problemTabPage.TabIndex = 0;
       this.problemTabPage.Text = "Problem";
-      this.problemTabPage.UseVisualStyleBackColor = true;
       // 
       // visualizationTabPage
       // 
+      this.visualizationTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.visualizationTabPage.Controls.Add(this.qapView);
       this.visualizationTabPage.Location = new System.Drawing.Point(4, 22);
@@ -111,5 +112,4 @@
       this.visualizationTabPage.TabIndex = 1;
       this.visualizationTabPage.Text = "Visualization";
-      this.visualizationTabPage.UseVisualStyleBackColor = true;
       // 
       // qapView
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.Designer.cs	(revision 16518)
@@ -96,4 +96,5 @@
       // problemTabPage
       // 
+      this.problemTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.problemTabPage.Controls.Add(this.parameterCollectionView);
       this.problemTabPage.Location = new System.Drawing.Point(4, 22);
@@ -103,8 +104,8 @@
       this.problemTabPage.TabIndex = 0;
       this.problemTabPage.Text = "Problem";
-      this.problemTabPage.UseVisualStyleBackColor = true;
       // 
       // visualizationTabPage
       // 
+      this.visualizationTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.visualizationTabPage.Controls.Add(this.ganttChart);
       this.visualizationTabPage.Location = new System.Drawing.Point(4, 22);
@@ -114,5 +115,4 @@
       this.visualizationTabPage.TabIndex = 1;
       this.visualizationTabPage.Text = "Visualization";
-      this.visualizationTabPage.UseVisualStyleBackColor = true;
       // 
       // ganttChart
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.TestFunctions.Views/3.3/SingleObjectiveTestFunctionSolutionView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.TestFunctions.Views/3.3/SingleObjectiveTestFunctionSolutionView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.TestFunctions.Views/3.3/SingleObjectiveTestFunctionSolutionView.Designer.cs	(revision 16518)
@@ -153,4 +153,5 @@
       // textualTabPage
       // 
+      this.textualTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.textualTabPage.Controls.Add(this.splitContainer1);
       this.textualTabPage.Location = new System.Drawing.Point(4, 22);
@@ -160,8 +161,8 @@
       this.textualTabPage.TabIndex = 0;
       this.textualTabPage.Text = "Textual";
-      this.textualTabPage.UseVisualStyleBackColor = true;
       // 
       // graphicalTabPage
       // 
+      this.graphicalTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.graphicalTabPage.Controls.Add(this.pictureBox);
       this.graphicalTabPage.Controls.Add(this.label1);
@@ -172,5 +173,4 @@
       this.graphicalTabPage.TabIndex = 1;
       this.graphicalTabPage.Text = "Graphical";
-      this.graphicalTabPage.UseVisualStyleBackColor = true;
       // 
       // pictureBox
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.TravelingSalesman.Views/3.3/PathTSPTourView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.TravelingSalesman.Views/3.3/PathTSPTourView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.TravelingSalesman.Views/3.3/PathTSPTourView.Designer.cs	(revision 16518)
@@ -94,4 +94,5 @@
       // visualizationTabPage
       // 
+      this.visualizationTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.visualizationTabPage.Controls.Add(this.pictureBox);
       this.visualizationTabPage.Location = new System.Drawing.Point(4, 22);
@@ -101,8 +102,8 @@
       this.visualizationTabPage.TabIndex = 0;
       this.visualizationTabPage.Text = "Visualization";
-      this.visualizationTabPage.UseVisualStyleBackColor = true;
       // 
       // valueTabPage
       // 
+      this.valueTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.valueTabPage.Controls.Add(this.tourGroupBox);
       this.valueTabPage.Location = new System.Drawing.Point(4, 22);
@@ -112,5 +113,4 @@
       this.valueTabPage.TabIndex = 1;
       this.valueTabPage.Text = "Value";
-      this.valueTabPage.UseVisualStyleBackColor = true;
       // 
       // tourGroupBox
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.TravelingSalesman.Views/3.3/TravelingSalesmanProblemView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.TravelingSalesman.Views/3.3/TravelingSalesmanProblemView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.TravelingSalesman.Views/3.3/TravelingSalesmanProblemView.Designer.cs	(revision 16518)
@@ -90,4 +90,5 @@
       // parametersTabPage
       // 
+      this.parametersTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.parametersTabPage.Controls.Add(this.parameterCollectionView);
       this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
@@ -97,8 +98,8 @@
       this.parametersTabPage.TabIndex = 0;
       this.parametersTabPage.Text = "Parameters";
-      this.parametersTabPage.UseVisualStyleBackColor = true;
       // 
       // visualizationTabPage
       // 
+      this.visualizationTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.visualizationTabPage.Controls.Add(this.pathTSPTourView);
       this.visualizationTabPage.Location = new System.Drawing.Point(4, 22);
@@ -108,5 +109,4 @@
       this.visualizationTabPage.TabIndex = 1;
       this.visualizationTabPage.Text = "Visualization";
-      this.visualizationTabPage.UseVisualStyleBackColor = true;
       // 
       // pathTSPTourView
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.VehicleRouting.Views/3.4/VRPProblemInstanceView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.VehicleRouting.Views/3.4/VRPProblemInstanceView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.VehicleRouting.Views/3.4/VRPProblemInstanceView.Designer.cs	(revision 16518)
@@ -100,4 +100,5 @@
       // tabPage1
       // 
+      this.tabPage1.BackColor = System.Drawing.SystemColors.Window;
       this.tabPage1.Controls.Add(this.pictureBox);
       this.tabPage1.Location = new System.Drawing.Point(4, 22);
@@ -107,8 +108,8 @@
       this.tabPage1.TabIndex = 0;
       this.tabPage1.Text = "Visualization";
-      this.tabPage1.UseVisualStyleBackColor = true;
       // 
       // tabPage2
       // 
+      this.tabPage2.BackColor = System.Drawing.SystemColors.Window;
       this.tabPage2.Controls.Add(this.parameterCollectionView);
       this.tabPage2.Location = new System.Drawing.Point(4, 22);
@@ -118,5 +119,4 @@
       this.tabPage2.TabIndex = 1;
       this.tabPage2.Text = "Parameters";
-      this.tabPage2.UseVisualStyleBackColor = true;
       // 
       // VRPProblemInstanceView
Index: branches/2972_PDPRowSelect/HeuristicLab.Problems.VehicleRouting.Views/3.4/VRPSolutionView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Problems.VehicleRouting.Views/3.4/VRPSolutionView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Problems.VehicleRouting.Views/3.4/VRPSolutionView.Designer.cs	(revision 16518)
@@ -70,4 +70,5 @@
       // tabPage1
       // 
+      this.tabPage1.BackColor = System.Drawing.SystemColors.Window;
       this.tabPage1.Controls.Add(this.problemInstanceView);
       this.tabPage1.Location = new System.Drawing.Point(4, 22);
@@ -77,5 +78,4 @@
       this.tabPage1.TabIndex = 0;
       this.tabPage1.Text = "ProblemInstance";
-      this.tabPage1.UseVisualStyleBackColor = true;
       // 
       // problemInstanceView
@@ -93,4 +93,5 @@
       // tabPage2
       // 
+      this.tabPage2.BackColor = System.Drawing.SystemColors.Window;
       this.tabPage2.Controls.Add(this.tourGroupBox);
       this.tabPage2.Location = new System.Drawing.Point(4, 22);
@@ -100,5 +101,4 @@
       this.tabPage2.TabIndex = 1;
       this.tabPage2.Text = "Tours";
-      this.tabPage2.UseVisualStyleBackColor = true;
       // 
       // tourGroupBox
Index: branches/2972_PDPRowSelect/HeuristicLab.Random/3.3/RandomEnumerable.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Random/3.3/RandomEnumerable.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Random/3.3/RandomEnumerable.cs	(revision 16518)
@@ -202,5 +202,5 @@
         var cur = list.First;
         double ball = cur.Value.Item2, sum = random.NextDouble() * total; // assert: sum < total. When there is only one item remaining: sum < ball
-        while (ball < sum) {
+        while (ball < sum && cur.Next != null) {
           cur = cur.Next;
           ball += cur.Value.Item2;
Index: branches/2972_PDPRowSelect/HeuristicLab.Scripting.Views/3.3/ScriptView.Designer.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Scripting.Views/3.3/ScriptView.Designer.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Scripting.Views/3.3/ScriptView.Designer.cs	(revision 16518)
@@ -118,6 +118,6 @@
       // infoTabControl
       // 
-      this.infoTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.infoTabControl.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.infoTabControl.Controls.Add(this.outputTabPage);
@@ -131,4 +131,5 @@
       // outputTabPage
       // 
+      this.outputTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.outputTabPage.Controls.Add(this.outputTextBox);
       this.outputTabPage.Location = new System.Drawing.Point(4, 22);
@@ -138,5 +139,4 @@
       this.outputTabPage.TabIndex = 1;
       this.outputTabPage.Text = "Output";
-      this.outputTabPage.UseVisualStyleBackColor = true;
       // 
       // outputTextBox
@@ -155,4 +155,5 @@
       // errorListTabPage
       // 
+      this.errorListTabPage.BackColor = System.Drawing.SystemColors.Window;
       this.errorListTabPage.Controls.Add(this.errorListView);
       this.errorListTabPage.Location = new System.Drawing.Point(4, 22);
@@ -162,5 +163,4 @@
       this.errorListTabPage.TabIndex = 0;
       this.errorListTabPage.Text = "Error List";
-      this.errorListTabPage.UseVisualStyleBackColor = true;
       // 
       // errorListView
Index: branches/2972_PDPRowSelect/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/DeriveTest.cs
===================================================================
--- branches/2972_PDPRowSelect/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/DeriveTest.cs	(revision 16517)
+++ branches/2972_PDPRowSelect/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/DeriveTest.cs	(revision 16518)
@@ -60,4 +60,6 @@
       Assert.AreEqual("(1 / (SQR(COS((3*'x'))) * 0.333333333333333))", Derive("tan(3*x)", "x")); // diff(tan(f(x)), x) = 1.0 / cos²(f(x)), simplifier puts constant factor into the denominator
 
+      Assert.AreEqual("0", Derive("(a+b)/(x+SQR(x))", "y")); // df(a,b,x) / dy = 0
+
       {
         // special case: Inv(x) using only one argument to the division symbol
@@ -114,8 +116,8 @@
 
         Assert.AreEqual("(('y' * 'z' * 60) / (SQR('y') * SQR('z') * 400))", // actually 3 / (4y  5z) but simplifier is not smart enough to cancel numerator and denominator
-                                                                             // 60 y z / y² z² 20² == 6 / y z 40 == 3 / y z 20
+                                                                            // 60 y z / y² z² 20² == 6 / y z 40 == 3 / y z 20
           formatter.Format(DerivativeCalculator.Derive(t, "x")));
         Assert.AreEqual("(('x' * 'z' * (-60)) / (SQR('y') * SQR('z') * 400))", // actually 3x * -(4 5 z) / (4y 5z)² = -3x / (20 y² z)
-                                                                         // -3 4 5 x z / 4² y² 5² z² = -60 x z / 20² z² y² ==    -60 x z / y² z² 20² 
+                                                                               // -3 4 5 x z / 4² y² 5² z² = -60 x z / 20² z² y² ==    -60 x z / y² z² 20² 
           formatter.Format(DerivativeCalculator.Derive(t, "y")));
         Assert.AreEqual("(('x' * 'y' * (-60)) / (SQR('y') * SQR('z') * 400))",
