Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Analyzers/BestSingleObjectiveTestFunctionSolutionAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Analyzers/BestSingleObjectiveTestFunctionSolutionAnalyzer.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Analyzers/BestSingleObjectiveTestFunctionSolutionAnalyzer.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System.Linq;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -72,4 +73,5 @@
     [StorableConstructor]
     protected BestSingleObjectiveTestFunctionSolutionAnalyzer(bool deserializing) : base(deserializing) { }
+    protected BestSingleObjectiveTestFunctionSolutionAnalyzer(BestSingleObjectiveTestFunctionSolutionAnalyzer original, Cloner cloner) : base(original, cloner) { }
     public BestSingleObjectiveTestFunctionSolutionAnalyzer()
       : base() {
@@ -89,9 +91,13 @@
     /// </summary>
     [StorableHook(HookType.AfterDeserialization)]
-    private void CompatibilityMethod() {
+    private void AfterDeserialization() {
       // BackwardsCompatibility3.3
       // Bounds are introduced in 3.3.0.3894
       if (!Parameters.ContainsKey("Bounds"))
         Parameters.Add(new LookupParameter<DoubleMatrix>("Bounds", "The bounds of the function."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestSingleObjectiveTestFunctionSolutionAnalyzer(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/AckleyEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/AckleyEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/AckleyEvaluator.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -65,4 +66,13 @@
     }
 
+    [StorableConstructor]
+    protected AckleyEvaluator(bool deserializing) : base(deserializing) { }
+    protected AckleyEvaluator(AckleyEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public AckleyEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AckleyEvaluator(this, cloner);
+    }
+
     public override RealVector GetBestKnownSolution(int dimension) {
       return new RealVector(dimension);
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BealeEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BealeEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BealeEvaluator.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -65,4 +66,13 @@
     }
 
+    [StorableConstructor]
+    protected BealeEvaluator(bool deserializing) : base(deserializing) { }
+    protected BealeEvaluator(BealeEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public BealeEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BealeEvaluator(this, cloner);
+    }
+
     public override RealVector GetBestKnownSolution(int dimension) {
       if (dimension != 2) throw new ArgumentException(Name + ": This function is only defined for 2 dimensions.", "dimension");
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BoothEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BoothEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BoothEvaluator.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -64,4 +65,13 @@
     }
 
+    [StorableConstructor]
+    protected BoothEvaluator(bool deserializing) : base(deserializing) { }
+    protected BoothEvaluator(BoothEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public BoothEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BoothEvaluator(this, cloner);
+    }
+
     public override RealVector GetBestKnownSolution(int dimension) {
       if (dimension != 2) throw new ArgumentException(Name + ": This function is only defined for 2 dimensions.", "dimension");
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/GriewankEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/GriewankEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/GriewankEvaluator.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -64,4 +65,13 @@
     public override int MaximumProblemSize {
       get { return int.MaxValue; }
+    }
+
+    [StorableConstructor]
+    protected GriewankEvaluator(bool deserializing) : base(deserializing) { }
+    protected GriewankEvaluator(GriewankEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public GriewankEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GriewankEvaluator(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/LevyEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/LevyEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/LevyEvaluator.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -62,4 +63,13 @@
     public override int MaximumProblemSize {
       get { return int.MaxValue; }
+    }
+
+    [StorableConstructor]
+    protected LevyEvaluator(bool deserializing) : base(deserializing) { }
+    protected LevyEvaluator(LevyEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public LevyEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LevyEvaluator(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MatyasEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MatyasEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MatyasEvaluator.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -64,4 +65,13 @@
     }
 
+    [StorableConstructor]
+    protected MatyasEvaluator(bool deserializing) : base(deserializing) { }
+    protected MatyasEvaluator(MatyasEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public MatyasEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MatyasEvaluator(this, cloner);
+    }
+
     public override RealVector GetBestKnownSolution(int dimension) {
       if (dimension != 2) throw new ArgumentException(Name + ": This function is only defined for 2 dimensions.", "dimension");
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MultinormalEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MultinormalEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MultinormalEvaluator.cs	(revision 4722)
@@ -1,6 +1,28 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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;
@@ -23,7 +45,4 @@
     }
     private static Random Random = new Random();
-
-    [StorableConstructor]
-    public MultinormalEvaluator(bool deserializing) { }
 
     private Dictionary<int, List<RealVector>> stdCenters;
@@ -66,4 +85,7 @@
     }
 
+    [StorableConstructor]
+    protected MultinormalEvaluator(bool deserializing) : base(deserializing) { }
+    protected MultinormalEvaluator(MultinormalEvaluator original, Cloner cloner) : base(original, cloner) { }
     public MultinormalEvaluator() {
       Parameters.Add(new ValueParameter<ItemList<RealVector>>("Centers", "Centers of normal distributions"));
@@ -72,4 +94,8 @@
       centers = new ItemList<RealVector>();
       s_2s = new RealVector();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MultinormalEvaluator(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RastriginEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RastriginEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RastriginEvaluator.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -83,4 +84,7 @@
     }
 
+    [StorableConstructor]
+    protected RastriginEvaluator(bool deserializing) : base(deserializing) { }
+    protected RastriginEvaluator(RastriginEvaluator original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of the RastriginEvaluator with one parameter (<c>A</c>).
@@ -89,4 +93,8 @@
       : base() {
       Parameters.Add(new ValueParameter<DoubleValue>("A", "The parameter A is a parameter of the objective function y = Sum((x_i)^2 + A * (1 - Cos(2pi*x_i))). Default is A = 10.", new DoubleValue(10)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RastriginEvaluator(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RosenbrockEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RosenbrockEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RosenbrockEvaluator.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -68,4 +69,13 @@
     }
 
+    [StorableConstructor]
+    protected RosenbrockEvaluator(bool deserializing) : base(deserializing) { }
+    protected RosenbrockEvaluator(RosenbrockEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public RosenbrockEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RosenbrockEvaluator(this, cloner);
+    }
+
     public override RealVector GetBestKnownSolution(int dimension) {
       if (dimension < 2) throw new ArgumentException(Name + ": This function is not defined for 1 dimension.");
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SchwefelEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SchwefelEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SchwefelEvaluator.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -64,4 +65,13 @@
     }
 
+    [StorableConstructor]
+    protected SchwefelEvaluator(bool deserializing) : base(deserializing) { }
+    protected SchwefelEvaluator(SchwefelEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public SchwefelEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SchwefelEvaluator(this, cloner);
+    }
+
     public override RealVector GetBestKnownSolution(int dimension) {
       return null;
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SingleObjectiveTestFunctionProblemEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SingleObjectiveTestFunctionProblemEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SingleObjectiveTestFunctionProblemEvaluator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -67,9 +68,14 @@
       get { return (ILookupParameter<RealVector>)Parameters["Point"]; }
     }
+
+    [StorableConstructor]
+    protected SingleObjectiveTestFunctionProblemEvaluator(bool deserializing) : base(deserializing) { }
+    protected SingleObjectiveTestFunctionProblemEvaluator(SingleObjectiveTestFunctionProblemEvaluator original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of <see cref="SingleObjectiveTestFunctionEvaluator"/> with two parameters
     /// (<c>Quality</c> and <c>Point</c>).
     /// </summary>
-    public SingleObjectiveTestFunctionProblemEvaluator() {
+    public SingleObjectiveTestFunctionProblemEvaluator()
+      : base() {
       Parameters.Add(new LookupParameter<DoubleValue>("Quality", "Result of the evaluation of a solution."));
       Parameters.Add(new LookupParameter<RealVector>("Point", "The point at which the function should be evaluated."));
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SphereEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SphereEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SphereEvaluator.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -66,4 +67,8 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SphereEvaluator(this, cloner);
+    }
+
     public override RealVector GetBestKnownSolution(int dimension) {
       return new RealVector(dimension);
@@ -97,4 +102,7 @@
     }
 
+    [StorableConstructor]
+    protected SphereEvaluator(bool deserializing) : base(deserializing) { }
+    protected SphereEvaluator(SphereEvaluator original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of the SphereEvaluator with two parameters (<c>C</c> and <c>Alpha</c>).
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SumSquaresEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SumSquaresEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SumSquaresEvaluator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -63,4 +64,13 @@
     }
 
+    [StorableConstructor]
+    protected SumSquaresEvaluator(bool deserializing) : base(deserializing) { }
+    protected SumSquaresEvaluator(SumSquaresEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public SumSquaresEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SumSquaresEvaluator(this, cloner);
+    }
+
     public override RealVector GetBestKnownSolution(int dimension) {
       return new RealVector(dimension);
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/ZakharovEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/ZakharovEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/ZakharovEvaluator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -67,4 +68,13 @@
     }
 
+    [StorableConstructor]
+    protected ZakharovEvaluator(bool deserializing) : base(deserializing) { }
+    protected ZakharovEvaluator(ZakharovEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public ZakharovEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ZakharovEvaluator(this, cloner);
+    }
+
     /// <summary>
     /// Evaluates the test function for a specific <paramref name="point"/>.
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/AckleyAdditiveMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/AckleyAdditiveMoveEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/AckleyAdditiveMoveEvaluator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.RealVectorEncoding;
@@ -31,4 +32,14 @@
       get { return typeof(AckleyEvaluator); }
     }
+
+    [StorableConstructor]
+    protected AckleyAdditiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected AckleyAdditiveMoveEvaluator(AckleyAdditiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public AckleyAdditiveMoveEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AckleyAdditiveMoveEvaluator(this, cloner);
+    }
+
     protected override double Evaluate(double quality, RealVector point, AdditiveMove move) {
       RealVectorAdditiveMoveWrapper wrapper = new RealVectorAdditiveMoveWrapper(move, point);
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/AdditiveMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/AdditiveMoveEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/AdditiveMoveEvaluator.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -51,4 +52,7 @@
     }
 
+    [StorableConstructor]
+    protected AdditiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected AdditiveMoveEvaluator(AdditiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
     protected AdditiveMoveEvaluator()
       : base() {
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/BealeAdditiveMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/BealeAdditiveMoveEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/BealeAdditiveMoveEvaluator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.RealVectorEncoding;
@@ -31,4 +32,14 @@
       get { return typeof(BealeEvaluator); }
     }
+
+    [StorableConstructor]
+    protected BealeAdditiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected BealeAdditiveMoveEvaluator(BealeAdditiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public BealeAdditiveMoveEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BealeAdditiveMoveEvaluator(this, cloner);
+    }
+
     protected override double Evaluate(double quality, RealVector point, AdditiveMove move) {
       RealVectorAdditiveMoveWrapper wrapper = new RealVectorAdditiveMoveWrapper(move, point);
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/BoothAdditiveMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/BoothAdditiveMoveEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/BoothAdditiveMoveEvaluator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.RealVectorEncoding;
@@ -31,4 +32,14 @@
       get { return typeof(BoothEvaluator); }
     }
+
+    [StorableConstructor]
+    protected BoothAdditiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected BoothAdditiveMoveEvaluator(BoothAdditiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public BoothAdditiveMoveEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BoothAdditiveMoveEvaluator(this, cloner);
+    }
+
     protected override double Evaluate(double quality, RealVector point, AdditiveMove move) {
       RealVectorAdditiveMoveWrapper wrapper = new RealVectorAdditiveMoveWrapper(move, point);
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/GriewankAdditiveMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/GriewankAdditiveMoveEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/GriewankAdditiveMoveEvaluator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.RealVectorEncoding;
@@ -31,4 +32,14 @@
       get { return typeof(GriewankEvaluator); }
     }
+
+    [StorableConstructor]
+    protected GriewankAdditiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected GriewankAdditiveMoveEvaluator(GriewankAdditiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public GriewankAdditiveMoveEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GriewankAdditiveMoveEvaluator(this, cloner);
+    }
+
     protected override double Evaluate(double quality, RealVector point, AdditiveMove move) {
       RealVectorAdditiveMoveWrapper wrapper = new RealVectorAdditiveMoveWrapper(move, point);
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/LevyAdditiveMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/LevyAdditiveMoveEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/LevyAdditiveMoveEvaluator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.RealVectorEncoding;
@@ -31,4 +32,14 @@
       get { return typeof(LevyEvaluator); }
     }
+
+    [StorableConstructor]
+    protected LevyAdditiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected LevyAdditiveMoveEvaluator(LevyAdditiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public LevyAdditiveMoveEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LevyAdditiveMoveEvaluator(this, cloner);
+    }
+
     protected override double Evaluate(double quality, RealVector point, AdditiveMove move) {
       RealVectorAdditiveMoveWrapper wrapper = new RealVectorAdditiveMoveWrapper(move, point);
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/MatyasAdditiveMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/MatyasAdditiveMoveEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/MatyasAdditiveMoveEvaluator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.RealVectorEncoding;
@@ -31,4 +32,14 @@
       get { return typeof(MatyasEvaluator); }
     }
+
+    [StorableConstructor]
+    protected MatyasAdditiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected MatyasAdditiveMoveEvaluator(MatyasAdditiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public MatyasAdditiveMoveEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MatyasAdditiveMoveEvaluator(this, cloner);
+    }
+
     protected override double Evaluate(double quality, RealVector point, AdditiveMove move) {
       RealVectorAdditiveMoveWrapper wrapper = new RealVectorAdditiveMoveWrapper(move, point);
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/MultinormalAdditiveMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/MultinormalAdditiveMoveEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/MultinormalAdditiveMoveEvaluator.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.RealVectorEncoding;
@@ -35,8 +36,13 @@
     }
 
-    MultinormalEvaluator evaluator = new MultinormalEvaluator();
-
+    [StorableConstructor]
+    protected MultinormalAdditiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected MultinormalAdditiveMoveEvaluator(MultinormalAdditiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
     public MultinormalAdditiveMoveEvaluator() {
       Parameters.Add(new LookupParameter<ISingleObjectiveTestFunctionProblemEvaluator>("Evaluator", ""));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MultinormalAdditiveMoveEvaluator(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/RastriginAdditiveMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/RastriginAdditiveMoveEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/RastriginAdditiveMoveEvaluator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -47,6 +48,13 @@
     }
 
+    [StorableConstructor]
+    protected RastriginAdditiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected RastriginAdditiveMoveEvaluator(RastriginAdditiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
     public RastriginAdditiveMoveEvaluator() {
       Parameters.Add(new ValueParameter<DoubleValue>("A", "The parameter A is a parameter of the objective function y = Sum((x_i)^2 + A * (1 - Cos(2pi*x_i))). Default is A = 10.", new DoubleValue(10)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RastriginAdditiveMoveEvaluator(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/RealVectorAdditiveMoveWrapper.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/RealVectorAdditiveMoveWrapper.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/RealVectorAdditiveMoveWrapper.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Encodings.RealVectorEncoding;
 
@@ -26,9 +27,16 @@
   /// This wrapper disguises as real vector for use in the evaluation functions.
   /// </summary>
-  internal class RealVectorAdditiveMoveWrapper : RealVector {
+  internal sealed class RealVectorAdditiveMoveWrapper : RealVector {
     private int dimension;
     private double moveDistance;
     private RealVector vector;
 
+    private RealVectorAdditiveMoveWrapper(bool deserializing) : base(deserializing) { }
+    private RealVectorAdditiveMoveWrapper(RealVectorAdditiveMoveWrapper original, Cloner cloner)
+      : base(original, cloner) {
+      this.dimension = original.dimension;
+      this.moveDistance = original.moveDistance;
+      this.vector = cloner.Clone(vector);
+    }
     public RealVectorAdditiveMoveWrapper() {
       dimension = -1;
@@ -36,9 +44,12 @@
       this.vector = new RealVector();
     }
-
     public RealVectorAdditiveMoveWrapper(AdditiveMove move, RealVector vector) {
       dimension = move.Dimension;
       moveDistance = move.MoveDistance;
       this.vector = vector;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RealVectorAdditiveMoveWrapper(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/RosenbrockAdditiveMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/RosenbrockAdditiveMoveEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/RosenbrockAdditiveMoveEvaluator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.RealVectorEncoding;
@@ -31,4 +32,14 @@
       get { return typeof(RosenbrockEvaluator); }
     }
+
+    [StorableConstructor]
+    protected RosenbrockAdditiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected RosenbrockAdditiveMoveEvaluator(RosenbrockAdditiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public RosenbrockAdditiveMoveEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RosenbrockAdditiveMoveEvaluator(this, cloner);
+    }
+
     protected override double Evaluate(double quality, RealVector point, AdditiveMove move) {
       RealVectorAdditiveMoveWrapper wrapper = new RealVectorAdditiveMoveWrapper(move, point);
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/SchwefelAdditiveMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/SchwefelAdditiveMoveEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/SchwefelAdditiveMoveEvaluator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.RealVectorEncoding;
@@ -31,4 +32,14 @@
       get { return typeof(SchwefelEvaluator); }
     }
+
+    [StorableConstructor]
+    protected SchwefelAdditiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected SchwefelAdditiveMoveEvaluator(SchwefelAdditiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public SchwefelAdditiveMoveEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SchwefelAdditiveMoveEvaluator(this, cloner);
+    }
+
     protected override double Evaluate(double quality, RealVector point, AdditiveMove move) {
       RealVectorAdditiveMoveWrapper wrapper = new RealVectorAdditiveMoveWrapper(move, point);
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/SphereAdditiveMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/SphereAdditiveMoveEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/SphereAdditiveMoveEvaluator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -61,7 +62,14 @@
     }
 
+    [StorableConstructor]
+    protected SphereAdditiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected SphereAdditiveMoveEvaluator(SphereAdditiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
     public SphereAdditiveMoveEvaluator() {
       Parameters.Add(new ValueParameter<DoubleValue>("C", "The parameter C modifies the steepness of the objective function y = C * ||X||^Alpha. Default is C = 1.", new DoubleValue(1)));
       Parameters.Add(new ValueParameter<DoubleValue>("Alpha", "The parameter Alpha modifies the steepness of the objective function y = C * ||X||^Alpha. Default is Alpha = 2.", new DoubleValue(2)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SphereAdditiveMoveEvaluator(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/SumSquaresAdditiveMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/SumSquaresAdditiveMoveEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/SumSquaresAdditiveMoveEvaluator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.RealVectorEncoding;
@@ -31,4 +32,14 @@
       get { return typeof(SumSquaresEvaluator); }
     }
+
+    [StorableConstructor]
+    protected SumSquaresAdditiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected SumSquaresAdditiveMoveEvaluator(SumSquaresAdditiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public SumSquaresAdditiveMoveEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SumSquaresAdditiveMoveEvaluator(this, cloner);
+    }
+
     protected override double Evaluate(double quality, RealVector point, AdditiveMove move) {
       RealVectorAdditiveMoveWrapper wrapper = new RealVectorAdditiveMoveWrapper(move, point);
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/ZakharovAdditiveMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/ZakharovAdditiveMoveEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/ZakharovAdditiveMoveEvaluator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.RealVectorEncoding;
@@ -31,4 +32,14 @@
       get { return typeof(ZakharovEvaluator); }
     }
+
+    [StorableConstructor]
+    protected ZakharovAdditiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected ZakharovAdditiveMoveEvaluator(ZakharovAdditiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public ZakharovAdditiveMoveEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ZakharovAdditiveMoveEvaluator(this, cloner);
+    }
+
     protected override double Evaluate(double quality, RealVector point, AdditiveMove move) {
       RealVectorAdditiveMoveWrapper wrapper = new RealVectorAdditiveMoveWrapper(move, point);
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/RealVectorToRealVectorEncoder.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/RealVectorToRealVectorEncoder.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/RealVectorToRealVectorEncoder.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -25,4 +26,5 @@
 using HeuristicLab.Operators;
 using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Problems.TestFunctions {
@@ -55,4 +57,7 @@
     }
 
+    [StorableConstructor]
+    protected RealVectorToRealVectorEncoder(bool deserializing) : base(deserializing) { }
+    protected RealVectorToRealVectorEncoder(RealVectorToRealVectorEncoder original, Cloner cloner) : base(original, cloner) { }
     public RealVectorToRealVectorEncoder()
       : base() {
@@ -62,4 +67,8 @@
       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope bounds matrix should be cloned."));
       Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bounds in each dimension."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RealVectorToRealVectorEncoder(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs	(revision 4722)
@@ -134,4 +134,15 @@
     [StorableConstructor]
     private SingleObjectiveTestFunctionProblem(bool deserializing) : base(deserializing) { }
+    private SingleObjectiveTestFunctionProblem(SingleObjectiveTestFunctionProblem original, Cloner cloner)
+      : base(original, cloner) {
+      operators = original.operators.Where(x => original.IsNotFieldReferenced(x)).Select(x => cloner.Clone(x)).ToList();
+      strategyVectorCreator = cloner.Clone(original.strategyVectorCreator);
+      operators.Add(strategyVectorCreator);
+      strategyVectorCrossover = cloner.Clone(original.strategyVectorCrossover);
+      operators.Add(strategyVectorCrossover);
+      strategyVectorManipulator = cloner.Clone(original.strategyVectorManipulator);
+      operators.Add(strategyVectorManipulator);
+      AttachEventHandlers();
+    }
     public SingleObjectiveTestFunctionProblem()
       : base() {
@@ -164,14 +175,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      SingleObjectiveTestFunctionProblem clone = (SingleObjectiveTestFunctionProblem)base.Clone(cloner);
-      clone.operators = operators.Where(x => IsNotFieldReferenced(x)).Select(x => (IOperator)cloner.Clone(x)).ToList();
-      clone.strategyVectorCreator = (StdDevStrategyVectorCreator)cloner.Clone(strategyVectorCreator);
-      clone.operators.Add(clone.strategyVectorCreator);
-      clone.strategyVectorCrossover = (StdDevStrategyVectorCrossover)cloner.Clone(strategyVectorCrossover);
-      clone.operators.Add(strategyVectorCrossover);
-      clone.strategyVectorManipulator = (StdDevStrategyVectorManipulator)cloner.Clone(strategyVectorManipulator);
-      clone.operators.Add(strategyVectorManipulator);
-      clone.AttachEventHandlers();
-      return clone;
+      return new SingleObjectiveTestFunctionProblem(this, cloner);
     }
 
@@ -299,5 +301,5 @@
     #region Helpers
     [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserializationHook() {
+    private void AfterDeserialization() {
       // BackwardsCompatibility3.3
       #region Backwards compatible code (remove with 3.4)
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionSolution.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionSolution.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionSolution.cs	(revision 4722)
@@ -122,4 +122,16 @@
     }
 
+    [StorableConstructor]
+    protected SingleObjectiveTestFunctionSolution(bool deserializing) : base(deserializing) { }
+    protected SingleObjectiveTestFunctionSolution(SingleObjectiveTestFunctionSolution original, Cloner cloner)
+      : base(original, cloner) {
+      bestKnownRealVector = cloner.Clone(original.bestKnownRealVector);
+      bestRealVector = cloner.Clone(original.bestRealVector);
+      bestQuality = cloner.Clone(original.bestQuality);
+      population = cloner.Clone(original.population);
+      evaluator = cloner.Clone(original.evaluator);
+      bounds = cloner.Clone(original.bounds);
+      Initialize();
+    }
     public SingleObjectiveTestFunctionSolution() : base() { }
     public SingleObjectiveTestFunctionSolution(RealVector realVector, DoubleValue quality, ISingleObjectiveTestFunctionProblemEvaluator evaluator)
@@ -130,8 +142,10 @@
       Initialize();
     }
-    [StorableConstructor]
-    private SingleObjectiveTestFunctionSolution(bool deserializing) : base(deserializing) { }
 
     [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      Initialize();
+    }
+
     private void Initialize() {
       if (bestKnownRealVector != null) RegisterBestKnownRealVectorEvents();
@@ -143,14 +157,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      SingleObjectiveTestFunctionSolution clone = new SingleObjectiveTestFunctionSolution();
-      cloner.RegisterClonedObject(this, clone);
-      clone.bestKnownRealVector = (RealVector)cloner.Clone(bestKnownRealVector);
-      clone.bestRealVector = (RealVector)cloner.Clone(bestRealVector);
-      clone.bestQuality = (DoubleValue)cloner.Clone(bestQuality);
-      clone.population = (ItemArray<RealVector>)cloner.Clone(population);
-      clone.evaluator = (ISingleObjectiveTestFunctionProblemEvaluator)cloner.Clone(evaluator);
-      clone.bounds = (DoubleMatrix)cloner.Clone(bounds);
-      clone.Initialize();
-      return clone;
+      return new SingleObjectiveTestFunctionSolution(this, cloner);
     }
 
