Index: /branches/DataAnalysis Refactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammar.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammar.cs	(revision 5741)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammar.cs	(revision 5742)
@@ -21,5 +21,7 @@
 
 using HeuristicLab.Common;
+using System.Linq;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System.Collections.Generic;
 
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
@@ -104,4 +106,6 @@
       startSymbol = (StartSymbol)cloner.Clone(original.StartSymbol);
       defunSymbol = (Defun)cloner.Clone(original.defunSymbol);
+      symbols = original.symbols
+        .ToDictionary(x => x.Key, y => (ISymbol)cloner.Clone(y.Value));
       maximumFunctionArguments = original.maximumFunctionArguments;
       minimumFunctionArguments = original.minimumFunctionArguments;
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveProblem.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveProblem.cs	(revision 5741)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveProblem.cs	(revision 5742)
@@ -66,5 +66,5 @@
       Parameters.Add(new FixedValueParameter<DoubleValue>(UpperEstimationLimitParameterName, UpperEstimationLimitParameterDescription, new DoubleValue()));
 
-      Maximization = new BoolArray(new bool[] { false, false });
+      Maximization = new BoolArray(new bool[] { true, false });
       MaximumSymbolicExpressionTreeDepth.Value = InitialMaximumTreeDepth;
       MaximumSymbolicExpressionTreeLength.Value = InitialMaximumTreeLength;
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/SymbolicRegressionSingleObjectivePearsonRSquaredEvaluator.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/SymbolicRegressionSingleObjectivePearsonRSquaredEvaluator.cs	(revision 5741)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/SymbolicRegressionSingleObjectivePearsonRSquaredEvaluator.cs	(revision 5742)
@@ -26,4 +26,5 @@
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System.Linq;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression {
@@ -54,6 +55,5 @@
       IEnumerable<double> estimatedValues = interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, rows);
       IEnumerable<double> originalValues = problemData.Dataset.GetEnumeratedVariableValues(problemData.TargetVariable, rows);
-      IEnumerable<double> boundedEstimatedValues = estimatedValues.LimitToRange(lowerEstimationLimit, upperEstimationLimit);
-      return OnlinePearsonsRSquaredEvaluator.Calculate(originalValues, boundedEstimatedValues);
+      return OnlinePearsonsRSquaredEvaluator.Calculate(estimatedValues, originalValues);
     }
 
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisMultiObjectiveTrainingBestSolutionAnalyzer.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisMultiObjectiveTrainingBestSolutionAnalyzer.cs	(revision 5741)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisMultiObjectiveTrainingBestSolutionAnalyzer.cs	(revision 5742)
@@ -30,4 +30,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
@@ -95,6 +96,8 @@
         if (IsNonDominated(qualities[i], trainingBestQualities, maximization) &&
           IsNonDominated(qualities[i], qualities, maximization)) {
-          newNonDominatedQualities.Add(qualities[i]);
-          nonDominatedIndexes.Add(i);
+          if (!newNonDominatedQualities.Contains(qualities[i], new DoubleArrayComparer())) {
+            newNonDominatedQualities.Add(qualities[i]);
+            nonDominatedIndexes.Add(i);
+          }
         }
       }
@@ -113,6 +116,8 @@
         for (int i = 0; i < trainingBestQualities.Count; i++) {
           if (IsNonDominated(trainingBestQualities[i], newNonDominatedQualities, maximization)) {
-            nonDominatedSolutions.Add(TrainingBestSolutions[i]);
-            nonDominatedQualities.Add(TrainingBestSolutionQualities[i]);
+            if (!newNonDominatedQualities.Contains(trainingBestQualities[i], new DoubleArrayComparer())) {
+              nonDominatedSolutions.Add(TrainingBestSolutions[i]);
+              nonDominatedQualities.Add(TrainingBestSolutionQualities[i]);
+            }
           }
         }
@@ -125,4 +130,21 @@
     }
 
+    private class DoubleArrayComparer : IEqualityComparer<double[]> {
+      public bool Equals(double[] x, double[] y) {
+        if (y.Length != x.Length) throw new ArgumentException();
+        for (int i = 0; i < x.Length;i++ ) {
+          if (!x[i].IsAlmost(y[i])) return false;
+        }
+        return true;
+      }
+
+      public int GetHashCode(double[] obj) {
+        int c = obj.Length;
+        for (int i = 0; i < obj.Length; i++)
+          c ^= obj[i].GetHashCode();
+        return c;
+      }
+    }
+
     protected abstract T CreateSolution(ISymbolicExpressionTree bestTree, double[] bestQuality);
 
@@ -131,5 +153,5 @@
         bool refPointDominatesPoint = true;
         for (int i = 0; i < point.Length; i++) {
-          refPointDominatesPoint &= IsBetter(refPoint[i], point[i], maximization[i]);
+          refPointDominatesPoint &= IsBetterOrEqual(refPoint[i], point[i], maximization[i]);
         }
         if (refPointDominatesPoint) return false;
@@ -137,5 +159,5 @@
       return true;
     }
-    private bool IsBetter(double lhs, double rhs, bool maximization) {
+    private bool IsBetterOrEqual(double lhs, double rhs, bool maximization) {
       if (maximization) return lhs > rhs;
       else return lhs < rhs;
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisMultiObjectiveValidationBestSolutionAnalyzer.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisMultiObjectiveValidationBestSolutionAnalyzer.cs	(revision 5741)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisMultiObjectiveValidationBestSolutionAnalyzer.cs	(revision 5742)
@@ -30,4 +30,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
@@ -120,6 +121,8 @@
         if (IsNonDominated(qualities[i], trainingBestQualities, maximization) &&
           IsNonDominated(qualities[i], qualities, maximization)) {
-          newNonDominatedQualities.Add(qualities[i]);
-          nonDominatedIndexes.Add(i);
+          if (!newNonDominatedQualities.Contains(qualities[i], new DoubleArrayComparer())) {
+            newNonDominatedQualities.Add(qualities[i]);
+            nonDominatedIndexes.Add(i);
+          }
         }
       }
@@ -138,6 +141,8 @@
         for (int i = 0; i < trainingBestQualities.Count; i++) {
           if (IsNonDominated(trainingBestQualities[i], newNonDominatedQualities, maximization)) {
-            nonDominatedSolutions.Add(ValidationBestSolutions[i]);
-            nonDominatedQualities.Add(ValidationBestSolutionQualities[i]);
+            if (!newNonDominatedQualities.Contains(trainingBestQualities[i], new DoubleArrayComparer())) {
+              nonDominatedSolutions.Add(ValidationBestSolutions[i]);
+              nonDominatedQualities.Add(ValidationBestSolutionQualities[i]);
+            }
           }
         }
@@ -166,4 +171,22 @@
       else return lhs < rhs;
     }
+
+    private class DoubleArrayComparer : IEqualityComparer<double[]> {
+      public bool Equals(double[] x, double[] y) {
+        if (y.Length != x.Length) throw new ArgumentException();
+        for (int i = 0; i < x.Length; i++) {
+          if (!x[i].IsAlmost(y[i])) return false;
+        }
+        return true;
+      }
+
+      public int GetHashCode(double[] obj) {
+        int c = obj.Length;
+        for (int i = 0; i < obj.Length; i++)
+          c ^= obj[i].GetHashCode();
+        return c;
+      }
+    }
+
   }
 }
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis/3.4/OnlineEvaluators/OnlineCovarianceEvaluator.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis/3.4/OnlineEvaluators/OnlineCovarianceEvaluator.cs	(revision 5741)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis/3.4/OnlineEvaluators/OnlineCovarianceEvaluator.cs	(revision 5742)
@@ -30,8 +30,5 @@
     public double Covariance {
       get {
-        if (n < 1)
-          throw new InvalidOperationException("No elements");
-        else
-          return Cn / n;
+        return n > 0 ? Cn / n : 0.0;
       }
     }
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis/3.4/OnlineEvaluators/OnlineMeanAbsolutePercentageErrorEvaluator.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis/3.4/OnlineEvaluators/OnlineMeanAbsolutePercentageErrorEvaluator.cs	(revision 5741)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis/3.4/OnlineEvaluators/OnlineMeanAbsolutePercentageErrorEvaluator.cs	(revision 5742)
@@ -31,8 +31,5 @@
     public double MeanAbsolutePercentageError {
       get {
-        if (n < 1)
-          throw new InvalidOperationException("No elements");
-        else
-          return sre / n;
+        return n > 0 ? sre / n : 0.0;
       }
     }
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis/3.4/OnlineEvaluators/OnlinePearsonsRSquaredEvaluator.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis/3.4/OnlineEvaluators/OnlinePearsonsRSquaredEvaluator.cs	(revision 5741)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis/3.4/OnlineEvaluators/OnlinePearsonsRSquaredEvaluator.cs	(revision 5742)
@@ -66,5 +66,5 @@
     #endregion
 
-    private bool IsInvalidValue(double x) {
+    private static bool IsInvalidValue(double x) {
       return double.IsNaN(x) || double.IsInfinity(x);
     }
@@ -79,5 +79,6 @@
         double estimated = secondEnumerator.Current;
         double original = firstEnumerator.Current;
-        rSquaredEvaluator.Add(original, estimated);
+        if (!IsInvalidValue(estimated) && !IsInvalidValue(original))
+          rSquaredEvaluator.Add(original, estimated);
       }
 
