Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.3/CrossValidation.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.3/CrossValidation.cs	(revision 4617)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.3/CrossValidation.cs	(revision 4722)
@@ -72,19 +72,22 @@
     }
 
+    private CrossValidation(CrossValidation original, Cloner cloner)
+      : base(original, cloner) {
+      executionState = original.executionState;
+      storeAlgorithmInEachRun = original.storeAlgorithmInEachRun;
+      runs = cloner.Clone(original.runs);
+      runsCounter = original.runsCounter;
+      algorithm = cloner.Clone(original.algorithm);
+      clonedAlgorithms = cloner.Clone(original.clonedAlgorithms);
+      folds = cloner.Clone(original.folds);
+      numberOfWorkers = cloner.Clone(original.numberOfWorkers);
+      samplesStart = cloner.Clone(original.samplesStart);
+      samplesEnd = cloner.Clone(original.samplesEnd);
+      RegisterEvents();
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
-      CrossValidation clone = (CrossValidation)base.Clone(cloner);
-      clone.executionState = executionState;
-      clone.storeAlgorithmInEachRun = storeAlgorithmInEachRun;
-      clone.runs = (RunCollection)cloner.Clone(runs);
-      clone.runsCounter = runsCounter;
-      clone.algorithm = (IAlgorithm)cloner.Clone(algorithm);
-      clone.clonedAlgorithms = (ItemCollection<IAlgorithm>)cloner.Clone(clonedAlgorithms);
-      clone.folds = (IntValue)cloner.Clone(folds);
-      clone.numberOfWorkers = (IntValue)cloner.Clone(numberOfWorkers);
-      clone.samplesStart = (IntValue)cloner.Clone(samplesStart);
-      clone.samplesEnd = (IntValue)cloner.Clone(samplesEnd);
-      clone.RegisterEvents();
-      return clone;
-    }
+      return new CrossValidation(this, cloner);
+    }
+
     #endregion
 
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.3/LinearRegression.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.3/LinearRegression.cs	(revision 4617)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.3/LinearRegression.cs	(revision 4722)
@@ -99,13 +99,19 @@
     [StorableConstructor]
     private LinearRegression(bool deserializing) : base(deserializing) { }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      Initialize();
+    }
 
+    private LinearRegression(LinearRegression original, Cloner cloner)
+      : base(original, cloner) {
+      solutionCreator = cloner.Clone(original.solutionCreator);
+      evaluator = cloner.Clone(original.evaluator);
+      mseEvaluator = cloner.Clone(original.mseEvaluator);
+      analyzer = cloner.Clone(original.analyzer);
+      Initialize();
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
-      LinearRegression clone = (LinearRegression)base.Clone(cloner);
-      clone.solutionCreator = (LinearRegressionSolutionCreator)cloner.Clone(solutionCreator);
-      clone.evaluator = (SimpleSymbolicRegressionEvaluator)cloner.Clone(evaluator);
-      clone.mseEvaluator = (SimpleMSEEvaluator)cloner.Clone(mseEvaluator);
-      clone.analyzer = (BestSymbolicRegressionSolutionAnalyzer)cloner.Clone(analyzer);
-      clone.Initialize();
-      return clone;
+      return new LinearRegression(this, cloner);
     }
 
@@ -133,5 +139,4 @@
 
     #region Helpers
-    [StorableHook(HookType.AfterDeserialization)]
     private void Initialize() {
       solutionCreator.SamplesStartParameter.ActualName = TrainingSamplesStartParameter.Name;
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.3/SupportVectorMachine.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.3/SupportVectorMachine.cs	(revision 4617)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.3/SupportVectorMachine.cs	(revision 4722)
@@ -145,13 +145,19 @@
     [StorableConstructor]
     private SupportVectorMachine(bool deserializing) : base(deserializing) { }
-
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      Initialize();
+    }
+
+    private SupportVectorMachine(SupportVectorMachine original, Cloner cloner)
+      : base(original, cloner) {
+      solutionCreator = cloner.Clone(original.solutionCreator);
+      evaluator = cloner.Clone(original.evaluator);
+      mseEvaluator = cloner.Clone(original.mseEvaluator);
+      analyzer = cloner.Clone(original.analyzer);
+      Initialize();
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
-      SupportVectorMachine clone = (SupportVectorMachine)base.Clone(cloner);
-      clone.solutionCreator = (SupportVectorMachineModelCreator)cloner.Clone(solutionCreator);
-      clone.evaluator = (SupportVectorMachineModelEvaluator)cloner.Clone(evaluator);
-      clone.mseEvaluator = (SimpleMSEEvaluator)cloner.Clone(mseEvaluator);
-      clone.analyzer = (BestSupportVectorRegressionSolutionAnalyzer)cloner.Clone(analyzer);
-      clone.Initialize();
-      return clone;
+      return new SupportVectorMachine(this, cloner);
     }
 
@@ -178,5 +184,4 @@
 
     #region Helpers
-    [StorableHook(HookType.AfterDeserialization)]
     private void Initialize() {
       solutionCreator.SvmTypeParameter.ActualName = SvmTypeParameter.Name;
