Index: /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/MultinomialLogitClassificationSolution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/MultinomialLogitClassificationSolution.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/MultinomialLogitClassificationSolution.cs	(revision 8723)
@@ -45,5 +45,4 @@
     public MultinomialLogitClassificationSolution(IClassificationProblemData problemData, MultinomialLogitModel logitModel)
       : base(logitModel, problemData) {
-      RecalculateResults();
     }
 
@@ -51,8 +50,4 @@
       return new MultinomialLogitClassificationSolution(this, cloner);
     }
-
-    protected override void RecalculateResults() {
-      CalculateResults();
-    }
   }
 }
Index: /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/Nca/NcaClassificationSolution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/Nca/NcaClassificationSolution.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/Nca/NcaClassificationSolution.cs	(revision 8723)
@@ -42,5 +42,4 @@
     public NcaClassificationSolution(IClassificationProblemData problemData, INcaModel ncaModel)
       : base(ncaModel, problemData) {
-      RecalculateResults();
     }
 
@@ -48,8 +47,4 @@
       return new NcaClassificationSolution(this, cloner);
     }
-
-    protected override void RecalculateResults() {
-      CalculateResults();
-    }
   }
 }
Index: /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/NearestNeighbour/NearestNeighbourClassificationSolution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/NearestNeighbour/NearestNeighbourClassificationSolution.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/NearestNeighbour/NearestNeighbourClassificationSolution.cs	(revision 8723)
@@ -45,5 +45,4 @@
     public NearestNeighbourClassificationSolution(IClassificationProblemData problemData, INearestNeighbourModel nnModel)
       : base(nnModel, problemData) {
-      RecalculateResults();
     }
 
@@ -51,8 +50,4 @@
       return new NearestNeighbourClassificationSolution(this, cloner);
     }
-
-    protected override void RecalculateResults() {
-      CalculateResults();
-    }
   }
 }
Index: /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/NeuralNetwork/NeuralNetworkClassificationSolution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/NeuralNetwork/NeuralNetworkClassificationSolution.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/NeuralNetwork/NeuralNetworkClassificationSolution.cs	(revision 8723)
@@ -45,5 +45,4 @@
     public NeuralNetworkClassificationSolution(IClassificationProblemData problemData, INeuralNetworkModel nnModel)
       : base(nnModel, problemData) {
-      RecalculateResults();
     }
 
@@ -51,7 +50,5 @@
       return new NeuralNetworkClassificationSolution(this, cloner);
     }
-    protected override void RecalculateResults() {
-      CalculateResults();
-    }
+
   }
 }
Index: /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/NeuralNetwork/NeuralNetworkEnsembleClassificationSolution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/NeuralNetwork/NeuralNetworkEnsembleClassificationSolution.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/NeuralNetwork/NeuralNetworkEnsembleClassificationSolution.cs	(revision 8723)
@@ -45,5 +45,4 @@
     public NeuralNetworkEnsembleClassificationSolution(IClassificationProblemData problemData, INeuralNetworkEnsembleModel nnModel)
       : base(nnModel, problemData) {
-      RecalculateResults();
     }
 
@@ -51,8 +50,4 @@
       return new NeuralNetworkEnsembleClassificationSolution(this, cloner);
     }
-
-    protected override void RecalculateResults() {
-      CalculateResults();
-    }
   }
 }
Index: /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/RandomForest/RandomForestClassificationSolution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/RandomForest/RandomForestClassificationSolution.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/RandomForest/RandomForestClassificationSolution.cs	(revision 8723)
@@ -45,5 +45,4 @@
     public RandomForestClassificationSolution(IClassificationProblemData problemData, IRandomForestModel randomForestModel)
       : base(randomForestModel, problemData) {
-      RecalculateResults();
     }
 
@@ -51,8 +50,4 @@
       return new RandomForestClassificationSolution(this, cloner);
     }
-
-    protected override void RecalculateResults() {
-      CalculateResults();
-    }
   }
 }
Index: /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorClassificationSolution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorClassificationSolution.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorClassificationSolution.cs	(revision 8723)
@@ -45,5 +45,4 @@
     public SupportVectorClassificationSolution(SupportVectorMachineModel model, IClassificationProblemData problemData)
       : base(model, problemData) {
-      RecalculateResults();
     }
 
@@ -51,8 +50,4 @@
       return new SupportVectorClassificationSolution(this, cloner);
     }
-
-    protected override void RecalculateResults() {
-      CalculateResults();
-    }
   }
 }
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicClassificationSolution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicClassificationSolution.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicClassificationSolution.cs	(revision 8723)
@@ -71,7 +71,7 @@
 
     protected override void RecalculateResults() {
+      base.RecalculateResults();
       ModelLength = Model.SymbolicExpressionTree.Length;
       ModelDepth = Model.SymbolicExpressionTree.Depth;
-      CalculateResults();
     }
   }
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicDiscriminantFunctionClassificationSolution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicDiscriminantFunctionClassificationSolution.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicDiscriminantFunctionClassificationSolution.cs	(revision 8723)
@@ -20,4 +20,5 @@
 #endregion
 
+using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -35,4 +36,13 @@
     private const string ModelLengthResultName = "Model Length";
     private const string ModelDepthResultName = "Model Depth";
+
+    private const string EstimationLimitsResultsResultName = "Estimation Limits Results";
+    private const string EstimationLimitsResultName = "Estimation Limits";
+    private const string TrainingUpperEstimationLimitHitsResultName = "Training Upper Estimation Limit Hits";
+    private const string TestLowerEstimationLimitHitsResultName = "Test Lower Estimation Limit Hits";
+    private const string TrainingLowerEstimationLimitHitsResultName = "Training Lower Estimation Limit Hits";
+    private const string TestUpperEstimationLimitHitsResultName = "Test Upper Estimation Limit Hits";
+    private const string TrainingNaNEvaluationsResultName = "Training NaN Evaluations";
+    private const string TestNaNEvaluationsResultName = "Test NaN Evaluations";
 
     public new ISymbolicDiscriminantFunctionClassificationModel Model {
@@ -57,4 +67,37 @@
       private set { ((IntValue)this[ModelDepthResultName].Value).Value = value; }
     }
+
+    private ResultCollection EstimationLimitsResultCollection {
+      get { return (ResultCollection)this[EstimationLimitsResultsResultName].Value; }
+    }
+    public DoubleLimit EstimationLimits {
+      get { return (DoubleLimit)EstimationLimitsResultCollection[EstimationLimitsResultName].Value; }
+    }
+
+    public int TrainingUpperEstimationLimitHits {
+      get { return ((IntValue)EstimationLimitsResultCollection[TrainingUpperEstimationLimitHitsResultName].Value).Value; }
+      private set { ((IntValue)EstimationLimitsResultCollection[TrainingUpperEstimationLimitHitsResultName].Value).Value = value; }
+    }
+    public int TestUpperEstimationLimitHits {
+      get { return ((IntValue)EstimationLimitsResultCollection[TestUpperEstimationLimitHitsResultName].Value).Value; }
+      private set { ((IntValue)EstimationLimitsResultCollection[TestUpperEstimationLimitHitsResultName].Value).Value = value; }
+    }
+    public int TrainingLowerEstimationLimitHits {
+      get { return ((IntValue)EstimationLimitsResultCollection[TrainingLowerEstimationLimitHitsResultName].Value).Value; }
+      private set { ((IntValue)EstimationLimitsResultCollection[TrainingLowerEstimationLimitHitsResultName].Value).Value = value; }
+    }
+    public int TestLowerEstimationLimitHits {
+      get { return ((IntValue)EstimationLimitsResultCollection[TestLowerEstimationLimitHitsResultName].Value).Value; }
+      private set { ((IntValue)EstimationLimitsResultCollection[TestLowerEstimationLimitHitsResultName].Value).Value = value; }
+    }
+    public int TrainingNaNEvaluations {
+      get { return ((IntValue)EstimationLimitsResultCollection[TrainingNaNEvaluationsResultName].Value).Value; }
+      private set { ((IntValue)EstimationLimitsResultCollection[TrainingNaNEvaluationsResultName].Value).Value = value; }
+    }
+    public int TestNaNEvaluations {
+      get { return ((IntValue)EstimationLimitsResultCollection[TestNaNEvaluationsResultName].Value).Value; }
+      private set { ((IntValue)EstimationLimitsResultCollection[TestNaNEvaluationsResultName].Value).Value = value; }
+    }
+
     [StorableConstructor]
     private SymbolicDiscriminantFunctionClassificationSolution(bool deserializing) : base(deserializing) { }
@@ -66,5 +109,17 @@
       Add(new Result(ModelLengthResultName, "Length of the symbolic classification model.", new IntValue()));
       Add(new Result(ModelDepthResultName, "Depth of the symbolic classification model.", new IntValue()));
-      CalculateSymbolicDiscriminantFunctionClassificationResults();
+
+
+      ResultCollection estimationLimitResults = new ResultCollection();
+      estimationLimitResults.Add(new Result(EstimationLimitsResultName, "", new DoubleLimit()));
+      estimationLimitResults.Add(new Result(TrainingUpperEstimationLimitHitsResultName, "", new IntValue()));
+      estimationLimitResults.Add(new Result(TestUpperEstimationLimitHitsResultName, "", new IntValue()));
+      estimationLimitResults.Add(new Result(TrainingLowerEstimationLimitHitsResultName, "", new IntValue()));
+      estimationLimitResults.Add(new Result(TestLowerEstimationLimitHitsResultName, "", new IntValue()));
+      estimationLimitResults.Add(new Result(TrainingNaNEvaluationsResultName, "", new IntValue()));
+      estimationLimitResults.Add(new Result(TestNaNEvaluationsResultName, "", new IntValue()));
+      Add(new Result(EstimationLimitsResultsResultName, "Results concerning the estimation limits of symbolic regression solution", estimationLimitResults));
+
+      CalculateResults();
     }
 
@@ -73,13 +128,39 @@
     }
 
-    private void CalculateSymbolicDiscriminantFunctionClassificationResults() {
-      CalculateResults();
-      CalculateRegressionResults();
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      if (!ContainsKey(EstimationLimitsResultsResultName)) {
+        ResultCollection estimationLimitResults = new ResultCollection();
+        estimationLimitResults.Add(new Result(EstimationLimitsResultName, "", new DoubleLimit()));
+        estimationLimitResults.Add(new Result(TrainingUpperEstimationLimitHitsResultName, "", new IntValue()));
+        estimationLimitResults.Add(new Result(TestUpperEstimationLimitHitsResultName, "", new IntValue()));
+        estimationLimitResults.Add(new Result(TrainingLowerEstimationLimitHitsResultName, "", new IntValue()));
+        estimationLimitResults.Add(new Result(TestLowerEstimationLimitHitsResultName, "", new IntValue()));
+        estimationLimitResults.Add(new Result(TrainingNaNEvaluationsResultName, "", new IntValue()));
+        estimationLimitResults.Add(new Result(TestNaNEvaluationsResultName, "", new IntValue()));
+        Add(new Result(EstimationLimitsResultsResultName, "Results concerning the estimation limits of symbolic regression solution", estimationLimitResults));
+        CalculateResults();
+      }
+    }
+
+
+    private void CalculateResults() {
       ModelLength = Model.SymbolicExpressionTree.Length;
       ModelDepth = Model.SymbolicExpressionTree.Depth;
+
+      EstimationLimits.Lower = Model.LowerEstimationLimit;
+      EstimationLimits.Upper = Model.UpperEstimationLimit;
+
+      TrainingUpperEstimationLimitHits = EstimatedTrainingValues.Count(x => x.IsAlmost(Model.UpperEstimationLimit));
+      TestUpperEstimationLimitHits = EstimatedTestValues.Count(x => x.IsAlmost(Model.UpperEstimationLimit));
+      TrainingLowerEstimationLimitHits = EstimatedTrainingValues.Count(x => x.IsAlmost(Model.LowerEstimationLimit));
+      TestLowerEstimationLimitHits = EstimatedTestValues.Count(x => x.IsAlmost(Model.LowerEstimationLimit));
+      TrainingNaNEvaluations = Model.Interpreter.GetSymbolicExpressionTreeValues(Model.SymbolicExpressionTree, ProblemData.Dataset, ProblemData.TrainingIndices).Count(double.IsNaN);
+      TestNaNEvaluations = Model.Interpreter.GetSymbolicExpressionTreeValues(Model.SymbolicExpressionTree, ProblemData.Dataset, ProblemData.TestIndices).Count(double.IsNaN);
     }
 
     protected override void RecalculateResults() {
-      CalculateSymbolicDiscriminantFunctionClassificationResults();
+      base.RecalculateResults();
+      CalculateResults();
     }
   }
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionSolution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionSolution.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionSolution.cs	(revision 8723)
@@ -20,4 +20,5 @@
 #endregion
 
+using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -35,4 +36,13 @@
     private const string ModelLengthResultName = "Model Length";
     private const string ModelDepthResultName = "Model Depth";
+
+    private const string EstimationLimitsResultsResultName = "Estimation Limits Results";
+    private const string EstimationLimitsResultName = "Estimation Limits";
+    private const string TrainingUpperEstimationLimitHitsResultName = "Training Upper Estimation Limit Hits";
+    private const string TestLowerEstimationLimitHitsResultName = "Test Lower Estimation Limit Hits";
+    private const string TrainingLowerEstimationLimitHitsResultName = "Training Lower Estimation Limit Hits";
+    private const string TestUpperEstimationLimitHitsResultName = "Test Upper Estimation Limit Hits";
+    private const string TrainingNaNEvaluationsResultName = "Training NaN Evaluations";
+    private const string TestNaNEvaluationsResultName = "Test NaN Evaluations";
 
     public new ISymbolicRegressionModel Model {
@@ -53,4 +63,36 @@
     }
 
+    private ResultCollection EstimationLimitsResultCollection {
+      get { return (ResultCollection)this[EstimationLimitsResultsResultName].Value; }
+    }
+    public DoubleLimit EstimationLimits {
+      get { return (DoubleLimit)EstimationLimitsResultCollection[EstimationLimitsResultName].Value; }
+    }
+
+    public int TrainingUpperEstimationLimitHits {
+      get { return ((IntValue)EstimationLimitsResultCollection[TrainingUpperEstimationLimitHitsResultName].Value).Value; }
+      private set { ((IntValue)EstimationLimitsResultCollection[TrainingUpperEstimationLimitHitsResultName].Value).Value = value; }
+    }
+    public int TestUpperEstimationLimitHits {
+      get { return ((IntValue)EstimationLimitsResultCollection[TestUpperEstimationLimitHitsResultName].Value).Value; }
+      private set { ((IntValue)EstimationLimitsResultCollection[TestUpperEstimationLimitHitsResultName].Value).Value = value; }
+    }
+    public int TrainingLowerEstimationLimitHits {
+      get { return ((IntValue)EstimationLimitsResultCollection[TrainingLowerEstimationLimitHitsResultName].Value).Value; }
+      private set { ((IntValue)EstimationLimitsResultCollection[TrainingLowerEstimationLimitHitsResultName].Value).Value = value; }
+    }
+    public int TestLowerEstimationLimitHits {
+      get { return ((IntValue)EstimationLimitsResultCollection[TestLowerEstimationLimitHitsResultName].Value).Value; }
+      private set { ((IntValue)EstimationLimitsResultCollection[TestLowerEstimationLimitHitsResultName].Value).Value = value; }
+    }
+    public int TrainingNaNEvaluations {
+      get { return ((IntValue)EstimationLimitsResultCollection[TrainingNaNEvaluationsResultName].Value).Value; }
+      private set { ((IntValue)EstimationLimitsResultCollection[TrainingNaNEvaluationsResultName].Value).Value = value; }
+    }
+    public int TestNaNEvaluations {
+      get { return ((IntValue)EstimationLimitsResultCollection[TestNaNEvaluationsResultName].Value).Value; }
+      private set { ((IntValue)EstimationLimitsResultCollection[TestNaNEvaluationsResultName].Value).Value = value; }
+    }
+
     [StorableConstructor]
     private SymbolicRegressionSolution(bool deserializing) : base(deserializing) { }
@@ -62,4 +104,15 @@
       Add(new Result(ModelLengthResultName, "Length of the symbolic regression model.", new IntValue()));
       Add(new Result(ModelDepthResultName, "Depth of the symbolic regression model.", new IntValue()));
+
+      ResultCollection estimationLimitResults = new ResultCollection();
+      estimationLimitResults.Add(new Result(EstimationLimitsResultName, "", new DoubleLimit()));
+      estimationLimitResults.Add(new Result(TrainingUpperEstimationLimitHitsResultName, "", new IntValue()));
+      estimationLimitResults.Add(new Result(TestUpperEstimationLimitHitsResultName, "", new IntValue()));
+      estimationLimitResults.Add(new Result(TrainingLowerEstimationLimitHitsResultName, "", new IntValue()));
+      estimationLimitResults.Add(new Result(TestLowerEstimationLimitHitsResultName, "", new IntValue()));
+      estimationLimitResults.Add(new Result(TrainingNaNEvaluationsResultName, "", new IntValue()));
+      estimationLimitResults.Add(new Result(TestNaNEvaluationsResultName, "", new IntValue()));
+      Add(new Result(EstimationLimitsResultsResultName, "Results concerning the estimation limits of symbolic regression solution", estimationLimitResults));
+
       RecalculateResults();
     }
@@ -69,8 +122,38 @@
     }
 
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      if (!ContainsKey(EstimationLimitsResultsResultName)) {
+        ResultCollection estimationLimitResults = new ResultCollection();
+        estimationLimitResults.Add(new Result(EstimationLimitsResultName, "", new DoubleLimit()));
+        estimationLimitResults.Add(new Result(TrainingUpperEstimationLimitHitsResultName, "", new IntValue()));
+        estimationLimitResults.Add(new Result(TestUpperEstimationLimitHitsResultName, "", new IntValue()));
+        estimationLimitResults.Add(new Result(TrainingLowerEstimationLimitHitsResultName, "", new IntValue()));
+        estimationLimitResults.Add(new Result(TestLowerEstimationLimitHitsResultName, "", new IntValue()));
+        estimationLimitResults.Add(new Result(TrainingNaNEvaluationsResultName, "", new IntValue()));
+        estimationLimitResults.Add(new Result(TestNaNEvaluationsResultName, "", new IntValue()));
+        Add(new Result(EstimationLimitsResultsResultName, "Results concerning the estimation limits of symbolic regression solution", estimationLimitResults));
+        CalculateResults();
+      }
+    }
+
     protected override void RecalculateResults() {
       base.RecalculateResults();
+      CalculateResults();
+    }
+
+    private void CalculateResults() {
       ModelLength = Model.SymbolicExpressionTree.Length;
       ModelDepth = Model.SymbolicExpressionTree.Depth;
+
+      EstimationLimits.Lower = Model.LowerEstimationLimit;
+      EstimationLimits.Upper = Model.UpperEstimationLimit;
+
+      TrainingUpperEstimationLimitHits = EstimatedTrainingValues.Count(x => x.IsAlmost(Model.UpperEstimationLimit));
+      TestUpperEstimationLimitHits = EstimatedTestValues.Count(x => x.IsAlmost(Model.UpperEstimationLimit));
+      TrainingLowerEstimationLimitHits = EstimatedTrainingValues.Count(x => x.IsAlmost(Model.LowerEstimationLimit));
+      TestLowerEstimationLimitHits = EstimatedTestValues.Count(x => x.IsAlmost(Model.LowerEstimationLimit));
+      TrainingNaNEvaluations = Model.Interpreter.GetSymbolicExpressionTreeValues(Model.SymbolicExpressionTree, ProblemData.Dataset, ProblemData.TrainingIndices).Count(double.IsNaN);
+      TestNaNEvaluations = Model.Interpreter.GetSymbolicExpressionTreeValues(Model.SymbolicExpressionTree, ProblemData.Dataset, ProblemData.TestIndices).Count(double.IsNaN);
     }
   }
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleSolution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleSolution.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleSolution.cs	(revision 8723)
@@ -153,7 +153,4 @@
     }
 
-    protected override void RecalculateResults() {
-      CalculateResults();
-    }
 
     #region Evaluation
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationSolution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationSolution.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationSolution.cs	(revision 8723)
@@ -45,4 +45,5 @@
       : base(model, problemData) {
       evaluationCache = new Dictionary<int, double>(problemData.Dataset.Rows);
+      CalculateClassificationResults();
     }
 
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationSolutionBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationSolutionBase.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationSolutionBase.cs	(revision 8723)
@@ -85,5 +85,5 @@
     }
 
-    protected void CalculateResults() {
+    protected void CalculateClassificationResults() {
       double[] estimatedTrainingClassValues = EstimatedTrainingClassValues.ToArray(); // cache values
       double[] originalTrainingClassValues = ProblemData.Dataset.GetDoubleValues(ProblemData.TargetVariable, ProblemData.TrainingIndices).ToArray();
@@ -114,4 +114,8 @@
 
     public abstract IEnumerable<double> GetEstimatedClassValues(IEnumerable<int> rows);
+
+    protected override void RecalculateResults() {
+      CalculateClassificationResults();
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/DiscriminantFunctionClassificationSolution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/DiscriminantFunctionClassificationSolution.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/DiscriminantFunctionClassificationSolution.cs	(revision 8723)
@@ -51,5 +51,6 @@
       valueEvaluationCache = new Dictionary<int, double>();
       classValueEvaluationCache = new Dictionary<int, double>();
-      CalculateDiscriminantFunctionClassificationResults();
+      CalculateRegressionResults();
+      CalculateClassificationResults();
     }
 
@@ -117,14 +118,4 @@
       base.OnProblemDataChanged();
     }
-
-
-    private void CalculateDiscriminantFunctionClassificationResults() {
-      CalculateResults();
-      CalculateRegressionResults();
-    }
-
-    protected override void RecalculateResults() {
-      CalculateDiscriminantFunctionClassificationResults();
-    }
   }
 }
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/DiscriminantFunctionClassificationSolutionBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/DiscriminantFunctionClassificationSolutionBase.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/DiscriminantFunctionClassificationSolutionBase.cs	(revision 8723)
@@ -85,5 +85,4 @@
       Add(new Result(TrainingRSquaredResultName, "Squared Pearson's correlation coefficient of the model output and the actual values on the training partition", new DoubleValue()));
       Add(new Result(TestRSquaredResultName, "Squared Pearson's correlation coefficient of the model output and the actual values on the test partition", new DoubleValue()));
-
       RegisterEventHandler();
     }
@@ -139,4 +138,9 @@
 
     public abstract IEnumerable<double> GetEstimatedValues(IEnumerable<int> rows);
+
+    protected override void RecalculateResults() {
+      base.RecalculateResults();
+      CalculateRegressionResults();
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionEnsembleSolution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionEnsembleSolution.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionEnsembleSolution.cs	(revision 8723)
@@ -155,8 +155,4 @@
     }
 
-    protected override void RecalculateResults() {
-      CalculateResults();
-    }
-
     #region Evaluation
     public override IEnumerable<double> EstimatedTrainingValues {
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionSolution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionSolution.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionSolution.cs	(revision 8723)
@@ -45,9 +45,7 @@
       : base(model, problemData) {
       evaluationCache = new Dictionary<int, double>(problemData.Dataset.Rows);
+      CalculateRegressionResults();
     }
 
-    protected override void RecalculateResults() {
-      CalculateResults();
-    }
 
     public override IEnumerable<double> EstimatedValues {
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionSolutionBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionSolutionBase.cs	(revision 8722)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionSolutionBase.cs	(revision 8723)
@@ -164,5 +164,9 @@
     }
 
-    protected void CalculateResults() {
+    protected override void RecalculateResults() {
+      CalculateRegressionResults();
+    }
+
+    protected void CalculateRegressionResults() {
       IEnumerable<double> estimatedTrainingValues = EstimatedTrainingValues; // cache values
       IEnumerable<double> originalTrainingValues = ProblemData.Dataset.GetDoubleValues(ProblemData.TargetVariable, ProblemData.TrainingIndices);
