Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/ClassificationPerformanceMeasuresCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/ClassificationPerformanceMeasuresCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/ClassificationPerformanceMeasuresCalculator.cs	(revision 14294)
@@ -33,14 +33,12 @@
     }
 
-    // private constructor used internally by the Clone() method
-    private ClassificationPerformanceMeasuresCalculator(ClassificationPerformanceMeasuresCalculator other) {
-      // copy everything including the errorState
-      positiveClassName = other.positiveClassName;
-      positiveClassValue = other.positiveClassValue;
-      truePositiveCount = other.truePositiveCount;
-      falsePositiveCount = other.falsePositiveCount;
-      trueNegativeCount = other.trueNegativeCount;
-      falseNegativeCount = other.falseNegativeCount;
-      errorState = other.errorState;
+    protected ClassificationPerformanceMeasuresCalculator(ClassificationPerformanceMeasuresCalculator original, Cloner cloner = null) {
+      positiveClassName = original.positiveClassName;
+      positiveClassValue = original.positiveClassValue;
+      truePositiveCount = original.truePositiveCount;
+      falsePositiveCount = original.falsePositiveCount;
+      trueNegativeCount = original.trueNegativeCount;
+      falseNegativeCount = original.falseNegativeCount;
+      errorState = original.errorState;
     }
 
@@ -158,5 +156,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        clone = (IDeepCloneable)this.Clone();
+        clone = new ClassificationPerformanceMeasuresCalculator(this);
         cloner.RegisterClonedObject(this, clone);
       }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineAccuracyCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineAccuracyCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineAccuracyCalculator.cs	(revision 14294)
@@ -40,5 +40,5 @@
 
     // private constructor used internally by the Clone() method
-    private OnlineAccuracyCalculator(OnlineAccuracyCalculator other) {
+    protected OnlineAccuracyCalculator(OnlineAccuracyCalculator other, Cloner cloner = null) {
       correctlyClassified = other.correctlyClassified;
       n = other.n;
@@ -106,5 +106,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        clone = (IDeepCloneable)this.Clone();
+        clone = new OnlineAccuracyCalculator(this);
         cloner.RegisterClonedObject(this, clone);
       }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineBoundedMeanSquaredErrorCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineBoundedMeanSquaredErrorCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineBoundedMeanSquaredErrorCalculator.cs	(revision 14294)
@@ -45,11 +45,10 @@
     }
 
-    // private constructor used internally by the Clone() method
-    private OnlineBoundedMeanSquaredErrorCalculator(OnlineBoundedMeanSquaredErrorCalculator other) {
-      LowerBound = other.LowerBound;
-      UpperBound = other.UpperBound;
-      n = other.n;
-      errorSum = other.errorSum;
-      errorState = other.ErrorState;
+    protected OnlineBoundedMeanSquaredErrorCalculator(OnlineBoundedMeanSquaredErrorCalculator original, Cloner cloner = null) {
+      LowerBound = original.LowerBound;
+      UpperBound = original.UpperBound;
+      n = original.n;
+      errorSum = original.errorSum;
+      errorState = original.ErrorState;
     }
 
@@ -115,5 +114,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        clone = (IDeepCloneable)this.Clone();
+        clone = new OnlineBoundedMeanSquaredErrorCalculator(this);
         cloner.RegisterClonedObject(this, clone);
       }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineCovarianceCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineCovarianceCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineCovarianceCalculator.cs	(revision 14294)
@@ -39,6 +39,5 @@
     }
 
-    // private constructor used internally by the Clone() method
-    private OnlineCovarianceCalculator(OnlineCovarianceCalculator other) : this() {
+    protected OnlineCovarianceCalculator(OnlineCovarianceCalculator other, Cloner cloner = null) {
       Cn = other.Cn;
       xMean = other.xMean;
@@ -113,5 +112,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        clone = (IDeepCloneable)this.Clone();
+        clone = new OnlineCovarianceCalculator(this);
         cloner.RegisterClonedObject(this, clone);
       }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineDirectionalSymmetryCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineDirectionalSymmetryCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineDirectionalSymmetryCalculator.cs	(revision 14294)
@@ -41,6 +41,5 @@
     }
 
-    // private constructor used internally by the Clone() method
-    private OnlineDirectionalSymmetryCalculator(OnlineDirectionalSymmetryCalculator other) {
+    protected OnlineDirectionalSymmetryCalculator(OnlineDirectionalSymmetryCalculator other, Cloner cloner = null) {
       n = other.n;
       nCorrect = other.nCorrect;
@@ -132,5 +131,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        clone = (IDeepCloneable)this.Clone();
+        clone = new OnlineDirectionalSymmetryCalculator(this);
         cloner.RegisterClonedObject(this, clone);
       }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineLinearScalingParameterCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineLinearScalingParameterCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineLinearScalingParameterCalculator.cs	(revision 14294)
@@ -66,9 +66,8 @@
     }
 
-    // private constructor used internally by the Clone() method
-    private OnlineLinearScalingParameterCalculator(OnlineMeanAndVarianceCalculator targetMeanCalculator, OnlineMeanAndVarianceCalculator originalMeanAndVarianceCalculator, OnlineCovarianceCalculator originalTargetCovarianceCalculator) {
-      this.targetMeanCalculator = targetMeanCalculator;
-      this.originalMeanAndVarianceCalculator = originalMeanAndVarianceCalculator;
-      this.originalTargetCovarianceCalculator = originalTargetCovarianceCalculator;
+    protected OnlineLinearScalingParameterCalculator(OnlineLinearScalingParameterCalculator other, Cloner cloner) {
+      targetMeanCalculator = (OnlineMeanAndVarianceCalculator)other.targetMeanCalculator.Clone(cloner);
+      originalMeanAndVarianceCalculator = (OnlineMeanAndVarianceCalculator)other.originalMeanAndVarianceCalculator.Clone(cloner);
+      originalTargetCovarianceCalculator = (OnlineCovarianceCalculator)other.originalTargetCovarianceCalculator.Clone(cloner);
       // do not reset the calculators here
     }
@@ -129,8 +128,6 @@
     // IDeepCloneable interface members
     public object Clone() {
-      var targetMeanCalculatorClone = (OnlineMeanAndVarianceCalculator)targetMeanCalculator.Clone();
-      var originalMeanAndVarianceCalculatorClone = (OnlineMeanAndVarianceCalculator)originalMeanAndVarianceCalculator.Clone();
-      var originalTargetCovarianceCalculatorClone = (OnlineCovarianceCalculator)originalTargetCovarianceCalculator.Clone();
-      return new OnlineLinearScalingParameterCalculator(targetMeanCalculatorClone, originalMeanAndVarianceCalculatorClone, originalTargetCovarianceCalculatorClone);
+      var cloner = new Cloner();
+      return new OnlineLinearScalingParameterCalculator(this, cloner);
     }
 
@@ -138,8 +135,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        var targetMeanCalculatorClone = (OnlineMeanAndVarianceCalculator)targetMeanCalculator.Clone(cloner);
-        var originalMeanAndVarianceCalculatorClone = (OnlineMeanAndVarianceCalculator)originalMeanAndVarianceCalculator.Clone(cloner);
-        var originalTargetCovarianceCalculatorClone = (OnlineCovarianceCalculator)originalTargetCovarianceCalculator.Clone(cloner);
-        clone = new OnlineLinearScalingParameterCalculator(targetMeanCalculatorClone, originalMeanAndVarianceCalculatorClone, originalTargetCovarianceCalculatorClone);
+        clone = new OnlineLinearScalingParameterCalculator(this, cloner);
         cloner.RegisterClonedObject(this, clone);
       }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMaxAbsoluteErrorCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMaxAbsoluteErrorCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMaxAbsoluteErrorCalculator.cs	(revision 14294)
@@ -39,6 +39,5 @@
     }
 
-    // private constructor used internally by the Clone() method
-    private OnlineMaxAbsoluteErrorCalculator(OnlineMaxAbsoluteErrorCalculator other) {
+    protected OnlineMaxAbsoluteErrorCalculator(OnlineMaxAbsoluteErrorCalculator other, Cloner cloner = null) {
       mae = other.mae;
       n = other.n;
@@ -105,5 +104,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        clone = (IDeepCloneable)this.Clone();
+        clone = new OnlineMaxAbsoluteErrorCalculator(this);
         cloner.RegisterClonedObject(this, clone);
       }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAbsoluteErrorCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAbsoluteErrorCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAbsoluteErrorCalculator.cs	(revision 14294)
@@ -39,5 +39,5 @@
     }
 
-    private OnlineMeanAbsoluteErrorCalculator(OnlineMeanAbsoluteErrorCalculator other) {
+    protected OnlineMeanAbsoluteErrorCalculator(OnlineMeanAbsoluteErrorCalculator other, Cloner cloner = null) {
       sae = other.sae;
       n = other.n;
@@ -103,5 +103,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        clone = (IDeepCloneable)this.Clone();
+        clone = new OnlineMeanAbsoluteErrorCalculator(this);
         cloner.RegisterClonedObject(this, clone);
       }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAbsolutePercentageErrorCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAbsolutePercentageErrorCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAbsolutePercentageErrorCalculator.cs	(revision 14294)
@@ -39,6 +39,5 @@
     }
 
-    // private constructor used internally by the Clone() method
-    private OnlineMeanAbsolutePercentageErrorCalculator(OnlineMeanAbsolutePercentageErrorCalculator other) {
+    protected OnlineMeanAbsolutePercentageErrorCalculator(OnlineMeanAbsolutePercentageErrorCalculator other, Cloner cloner = null) {
       sre = other.sre;
       n = other.n;
@@ -105,5 +104,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        clone = (IDeepCloneable)this.Clone();
+        clone = new OnlineMeanAbsolutePercentageErrorCalculator(this);
         cloner.RegisterClonedObject(this, clone);
       }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAndVarianceCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAndVarianceCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAndVarianceCalculator.cs	(revision 14294)
@@ -67,5 +67,5 @@
     }
 
-    private OnlineMeanAndVarianceCalculator(OnlineMeanAndVarianceCalculator other) : this() {
+    protected OnlineMeanAndVarianceCalculator(OnlineMeanAndVarianceCalculator other, Cloner cloner = null) {
       m_oldS = other.m_oldS;
       m_oldM = other.m_oldM;
@@ -126,5 +126,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        clone = (IDeepCloneable)this.Clone();
+        clone = new OnlineMeanAndVarianceCalculator(this);
         cloner.RegisterClonedObject(this, clone);
       }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanErrorCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanErrorCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanErrorCalculator.cs	(revision 14294)
@@ -37,6 +37,6 @@
     }
 
-    private OnlineMeanErrorCalculator(OnlineMeanAndVarianceCalculator meanAndVarianceCalculator) {
-      this.meanAndVarianceCalculator = meanAndVarianceCalculator;
+    protected OnlineMeanErrorCalculator(OnlineMeanErrorCalculator other, Cloner cloner) {
+      meanAndVarianceCalculator = (OnlineMeanAndVarianceCalculator)other.meanAndVarianceCalculator.Clone(cloner);
     }
 
@@ -82,6 +82,6 @@
     // IDeepCloneable members
     public object Clone() {
-      var meanAndVarianceCalculatorClone = (OnlineMeanAndVarianceCalculator)meanAndVarianceCalculator.Clone();
-      return new OnlineMeanErrorCalculator(meanAndVarianceCalculatorClone);
+      var cloner = new Cloner();
+      return new OnlineMeanErrorCalculator(this, cloner);
     }
 
@@ -89,6 +89,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        var meanAndVarianceCalculatorClone = (OnlineMeanAndVarianceCalculator)meanAndVarianceCalculator.Clone(cloner);
-        clone = new OnlineMeanErrorCalculator(meanAndVarianceCalculatorClone);
+        clone = new OnlineMeanErrorCalculator(this, cloner);
         cloner.RegisterClonedObject(this, clone);
       }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanSquaredErrorCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanSquaredErrorCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanSquaredErrorCalculator.cs	(revision 14294)
@@ -39,6 +39,5 @@
     }
 
-    // private constructor used internally by the Clone() method
-    private OnlineMeanSquaredErrorCalculator(OnlineMeanSquaredErrorCalculator other) {
+    protected OnlineMeanSquaredErrorCalculator(OnlineMeanSquaredErrorCalculator other, Cloner cloner = null) {
       sse = other.sse;
       n = other.n;
@@ -104,5 +103,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        clone = (IDeepCloneable)this.Clone();
+        clone = new OnlineMeanSquaredErrorCalculator(this);
         cloner.RegisterClonedObject(this, clone);
       }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineNormalizedMeanSquaredErrorCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineNormalizedMeanSquaredErrorCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineNormalizedMeanSquaredErrorCalculator.cs	(revision 14294)
@@ -43,8 +43,7 @@
     }
 
-    // private constructor used internally by the Clone() method
-    public OnlineNormalizedMeanSquaredErrorCalculator(OnlineMeanAndVarianceCalculator meanSquaredErrorCalculator, OnlineMeanAndVarianceCalculator originalVarianceCalculator) {
-      this.meanSquaredErrorCalculator = meanSquaredErrorCalculator;
-      this.originalVarianceCalculator = originalVarianceCalculator;
+    protected OnlineNormalizedMeanSquaredErrorCalculator(OnlineNormalizedMeanSquaredErrorCalculator other, Cloner cloner) {
+      meanSquaredErrorCalculator = (OnlineMeanAndVarianceCalculator)other.meanSquaredErrorCalculator.Clone(cloner);
+      originalVarianceCalculator = (OnlineMeanAndVarianceCalculator)originalVarianceCalculator.Clone(cloner);
     }
 
@@ -102,7 +101,6 @@
     // IDeepCloneable members
     public object Clone() {
-      var meanSquaredErrorCalculatorClone = (OnlineMeanAndVarianceCalculator)meanSquaredErrorCalculator.Clone();
-      var originalVarianceCalculatorClone = (OnlineMeanAndVarianceCalculator)originalVarianceCalculator.Clone();
-      return new OnlineNormalizedMeanSquaredErrorCalculator(meanSquaredErrorCalculatorClone, originalVarianceCalculatorClone);
+      var cloner = new Cloner();
+      return new OnlineNormalizedMeanSquaredErrorCalculator(this, cloner);
     }
 
@@ -110,7 +108,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        var meanSquaredErrorCalculatorClone = (OnlineMeanAndVarianceCalculator)meanSquaredErrorCalculator.Clone(cloner);
-        var originalVarianceCalculatorClone = (OnlineMeanAndVarianceCalculator)originalVarianceCalculator.Clone(cloner);
-        clone = new OnlineNormalizedMeanSquaredErrorCalculator(meanSquaredErrorCalculatorClone, originalVarianceCalculatorClone);
+        clone = new OnlineNormalizedMeanSquaredErrorCalculator(this, cloner);
         cloner.RegisterClonedObject(this, clone);
       }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlinePearsonsRCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlinePearsonsRCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlinePearsonsRCalculator.cs	(revision 14294)
@@ -47,9 +47,8 @@
     public OnlinePearsonsRCalculator() { }
 
-    // private constructor used internally by the Clone() method
-    private OnlinePearsonsRCalculator(OnlineCovarianceCalculator covCalculator, OnlineMeanAndVarianceCalculator sxCalculator, OnlineMeanAndVarianceCalculator syCalculator) {
-      this.covCalculator = covCalculator;
-      this.sxCalculator = sxCalculator;
-      this.syCalculator = syCalculator;
+    protected OnlinePearsonsRCalculator(OnlinePearsonsRCalculator other, Cloner cloner) {
+      covCalculator = (OnlineCovarianceCalculator)other.covCalculator.Clone(cloner);
+      sxCalculator = (OnlineMeanAndVarianceCalculator)other.sxCalculator.Clone(cloner);
+      syCalculator = (OnlineMeanAndVarianceCalculator)other.syCalculator.Clone(cloner);
     }
 
@@ -101,8 +100,6 @@
     // IDeepCloneable members
     public object Clone() {
-      var covCalculatorClone = (OnlineCovarianceCalculator)covCalculator.Clone();
-      var sxCalculatorClone = (OnlineMeanAndVarianceCalculator)sxCalculator.Clone();
-      var syCalculatorClone = (OnlineMeanAndVarianceCalculator)syCalculator.Clone();
-      return new OnlinePearsonsRCalculator(covCalculatorClone, sxCalculatorClone, syCalculatorClone);
+      var cloner = new Cloner();
+      return new OnlinePearsonsRCalculator(this, cloner);
     }
 
@@ -110,8 +107,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        var covCalculatorClone = (OnlineCovarianceCalculator)covCalculator.Clone(cloner);
-        var sxCalculatorClone = (OnlineMeanAndVarianceCalculator)sxCalculator.Clone(cloner);
-        var syCalculatorClone = (OnlineMeanAndVarianceCalculator)syCalculator.Clone(cloner);
-        clone = new OnlinePearsonsRCalculator(covCalculatorClone, sxCalculatorClone, syCalculatorClone);
+        clone = new OnlinePearsonsRCalculator(this, cloner);
         cloner.RegisterClonedObject(this, clone);
       }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlinePearsonsRSquaredCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlinePearsonsRSquaredCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlinePearsonsRSquaredCalculator.cs	(revision 14294)
@@ -38,6 +38,6 @@
     public OnlinePearsonsRSquaredCalculator() { }
 
-    private OnlinePearsonsRSquaredCalculator(OnlinePearsonsRCalculator rCalculator) {
-      this.rCalculator = rCalculator;
+    protected OnlinePearsonsRSquaredCalculator(OnlinePearsonsRSquaredCalculator other, Cloner cloner) {
+      this.rCalculator = (OnlinePearsonsRCalculator)other.rCalculator.Clone(cloner);
     }
 
@@ -66,6 +66,6 @@
     // IDeepCloneable members
     public object Clone() {
-      var rCalculatorClone = (OnlinePearsonsRCalculator)rCalculator.Clone();
-      return new OnlinePearsonsRSquaredCalculator(rCalculatorClone);
+      var cloner = new Cloner();
+      return new OnlinePearsonsRSquaredCalculator(this, cloner);
     }
 
@@ -73,6 +73,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        var rCalculatorClone = (OnlinePearsonsRCalculator)rCalculator.Clone(cloner);
-        clone = new OnlinePearsonsRSquaredCalculator(rCalculatorClone);
+        clone = new OnlinePearsonsRSquaredCalculator(this, cloner);
         cloner.RegisterClonedObject(this, clone);
       }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineTheilsUStatisticCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineTheilsUStatisticCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineTheilsUStatisticCalculator.cs	(revision 14294)
@@ -46,8 +46,7 @@
     }
 
-    // private constructor used internally by the Clone() method
-    private OnlineTheilsUStatisticCalculator(OnlineMeanAndVarianceCalculator squaredErrorMeanCalculator, OnlineMeanAndVarianceCalculator unbiasedEstimatorMeanCalculator) {
-      this.squaredErrorMeanCalculator = squaredErrorMeanCalculator;
-      this.unbiasedEstimatorMeanCalculator = unbiasedEstimatorMeanCalculator;
+    protected OnlineTheilsUStatisticCalculator(OnlineTheilsUStatisticCalculator other, Cloner cloner) {
+      squaredErrorMeanCalculator = (OnlineMeanAndVarianceCalculator)other.squaredErrorMeanCalculator.Clone(cloner);
+      unbiasedEstimatorMeanCalculator = (OnlineMeanAndVarianceCalculator)other.unbiasedEstimatorMeanCalculator.Clone(cloner);
     }
 
@@ -135,7 +134,6 @@
     // IDeepCloneable members
     public object Clone() {
-      var squaredErrorMeanCalculatorClone = (OnlineMeanAndVarianceCalculator)squaredErrorMeanCalculator.Clone();
-      var unbiasedEstimatorMeanCalculatorClone = (OnlineMeanAndVarianceCalculator)unbiasedEstimatorMeanCalculator.Clone();
-      return new OnlineTheilsUStatisticCalculator(squaredErrorMeanCalculatorClone, unbiasedEstimatorMeanCalculatorClone);
+      var cloner = new Cloner();
+      return new OnlineTheilsUStatisticCalculator(this, cloner);
     }
 
@@ -143,7 +141,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        var squaredErrorMeanCalculatorClone = (OnlineMeanAndVarianceCalculator)squaredErrorMeanCalculator.Clone(cloner);
-        var unbiasedEstimatorMeanCalculatorClone = (OnlineMeanAndVarianceCalculator)unbiasedEstimatorMeanCalculator.Clone(cloner);
-        clone = new OnlineTheilsUStatisticCalculator(squaredErrorMeanCalculatorClone, unbiasedEstimatorMeanCalculatorClone);
+        clone = new OnlineTheilsUStatisticCalculator(this, cloner);
         cloner.RegisterClonedObject(this, clone);
       }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineWeightedDirectionalSymmetryCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineWeightedDirectionalSymmetryCalculator.cs	(revision 14293)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineWeightedDirectionalSymmetryCalculator.cs	(revision 14294)
@@ -42,6 +42,5 @@
     }
 
-    // private constructor used internally by the Clone() method
-    private OnlineWeightedDirectionalSymmetryCalculator(OnlineWeightedDirectionalSymmetryCalculator other) {
+    protected OnlineWeightedDirectionalSymmetryCalculator(OnlineWeightedDirectionalSymmetryCalculator other, Cloner cloner = null) {
       n = other.n;
       correctSum = other.correctSum;
@@ -135,5 +134,5 @@
       var clone = cloner.GetClone(this);
       if (clone == null) {
-        clone = (IDeepCloneable)this.Clone();
+        clone = new OnlineWeightedDirectionalSymmetryCalculator(this);
         cloner.RegisterClonedObject(this, clone);
       }
