Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/BoundsChecker.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/BoundsChecker.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/BoundsChecker.cs	(revision 4672)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -42,4 +43,7 @@
     }
 
+    [StorableConstructor]
+    protected BoundsChecker(bool deserializing) : base(deserializing) { }
+    protected BoundsChecker(BoundsChecker original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of <see cref="BoundsChecker"/> with two parameters
@@ -50,4 +54,8 @@
       Parameters.Add(new LookupParameter<RealVector>("RealVector", "The real-valued vector for which the bounds should be checked."));
       Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bound (1st and 2nd column) of the positions in the vector. If there are less rows than dimensions, the rows are cycled."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BoundsChecker(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Creators/UniformRandomRealVectorCreator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Creators/UniformRandomRealVectorCreator.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Creators/UniformRandomRealVectorCreator.cs	(revision 4672)
@@ -25,4 +25,5 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -33,4 +34,13 @@
   [StorableClass]
   public class UniformRandomRealVectorCreator : RealVectorCreator, IStrategyParameterCreator {
+    [StorableConstructor]
+    protected UniformRandomRealVectorCreator(bool deserializing) : base(deserializing) { }
+    protected UniformRandomRealVectorCreator(UniformRandomRealVectorCreator original, Cloner cloner) : base(original, cloner) { }
+    public UniformRandomRealVectorCreator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new UniformRandomRealVectorCreator(this, cloner);
+    }
+    
     /// <summary>
     /// Generates a new random real vector with the given <paramref name="length"/> and in the interval [min,max).
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/AverageCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/AverageCrossover.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/AverageCrossover.cs	(revision 4672)
@@ -23,4 +23,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -34,4 +35,13 @@
   [StorableClass]
   public class AverageCrossover : RealVectorCrossover {
+    [StorableConstructor]
+    protected AverageCrossover(bool deserializing) : base(deserializing) { }
+    protected AverageCrossover(AverageCrossover original, Cloner cloner) : base(original, cloner) { }
+    public AverageCrossover() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AverageCrossover(this, cloner);
+    }
+    
     /// <summary>
     /// Performs the average crossover (intermediate recombination) on a list of parents.
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/BlendAlphaBetaCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/BlendAlphaBetaCrossover.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/BlendAlphaBetaCrossover.cs	(revision 4672)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -65,4 +66,7 @@
     }
 
+    [StorableConstructor]
+    protected BlendAlphaBetaCrossover(bool deserializing) : base(deserializing) { }
+    protected BlendAlphaBetaCrossover(BlendAlphaBetaCrossover original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of <see cref="BlendAlphaBetaCrossover"/> with four additional parameters
@@ -75,4 +79,8 @@
       Parameters.Add(new ValueLookupParameter<DoubleValue>("Alpha", "The Alpha parameter controls the extension of the range beyond the better parent. The value must be >= 0 and does not depend on Beta.", new DoubleValue(0.75)));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("Beta", "The Beta parameter controls the extension of the range beyond the worse parent. The value must be >= 0 and does not depend on Alpha.", new DoubleValue(0.25)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BlendAlphaBetaCrossover(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/BlendAlphaCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/BlendAlphaCrossover.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/BlendAlphaCrossover.cs	(revision 4672)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -48,4 +49,8 @@
       get { return (ValueLookupParameter<DoubleValue>)Parameters["Alpha"]; }
     }
+
+    [StorableConstructor]
+    protected BlendAlphaCrossover(bool deserializing) : base(deserializing) { }
+    protected BlendAlphaCrossover(BlendAlphaCrossover original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of <see cref="BlendAlphaCrossover"/> with one parameter (<c>Alpha</c>).
@@ -54,4 +59,8 @@
       : base() {
       Parameters.Add(new ValueLookupParameter<DoubleValue>("Alpha", "The Alpha parameter controls the extension of the range beyond the two parents. It must be >= 0. A value of 0.5 means that half the range is added to both sides of the intervals.", new DoubleValue(0.5)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BlendAlphaCrossover(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/DiscreteCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/DiscreteCrossover.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/DiscreteCrossover.cs	(revision 4672)
@@ -23,4 +23,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -36,4 +37,13 @@
   [StorableClass]
   public class DiscreteCrossover : RealVectorCrossover {
+    [StorableConstructor]
+    protected DiscreteCrossover(bool deserializing) : base(deserializing) { }
+    protected DiscreteCrossover(DiscreteCrossover original, Cloner cloner) : base(original, cloner) { }
+    public DiscreteCrossover() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new DiscreteCrossover(this, cloner);
+    }
+    
     /// <summary>
     /// Performs a discrete crossover operation on multiple parents.
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/HeuristicCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/HeuristicCrossover.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/HeuristicCrossover.cs	(revision 4672)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -50,4 +51,7 @@
     }
 
+    [StorableConstructor]
+    protected HeuristicCrossover(bool deserializing) : base(deserializing) { }
+    protected HeuristicCrossover(HeuristicCrossover original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of <see cref="HeuristicCrossover"/> with two variable infos
@@ -58,4 +62,8 @@
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "Whether the problem is a maximization problem or not."));
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The quality values of the parents."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HeuristicCrossover(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/LocalCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/LocalCrossover.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/LocalCrossover.cs	(revision 4672)
@@ -23,4 +23,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -34,4 +35,13 @@
   [StorableClass]
   public class LocalCrossover : RealVectorCrossover {
+    [StorableConstructor]
+    protected LocalCrossover(bool deserializing) : base(deserializing) { }
+    protected LocalCrossover(LocalCrossover original, Cloner cloner) : base(original, cloner) { }
+    public LocalCrossover() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LocalCrossover(this, cloner);
+    }
+    
     /// <summary>
     /// Performs a local crossover on the two given parent vectors.
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/MultiRealVectorCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/MultiRealVectorCrossover.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/MultiRealVectorCrossover.cs	(revision 4672)
@@ -30,4 +30,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -53,5 +54,8 @@
 
     [StorableConstructor]
-    private MultiRealVectorCrossover(bool deserializing) : base(deserializing) { }
+    protected MultiRealVectorCrossover(bool deserializing) : base(deserializing) { }
+    protected MultiRealVectorCrossover(MultiRealVectorCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public MultiRealVectorCrossover()
       : base() {
@@ -66,4 +70,8 @@
           Operators.Add((IRealVectorCrossover)Activator.CreateInstance(type), true);
       }
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MultiRealVectorCrossover(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/RandomConvexCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/RandomConvexCrossover.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/RandomConvexCrossover.cs	(revision 4672)
@@ -23,4 +23,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -34,4 +35,13 @@
   [StorableClass]
   public class RandomConvexCrossover : RealVectorCrossover {
+    [StorableConstructor]
+    protected RandomConvexCrossover(bool deserializing) : base(deserializing) { }
+    protected RandomConvexCrossover(RandomConvexCrossover original, Cloner cloner) : base(original, cloner) { }
+    public RandomConvexCrossover() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RandomConvexCrossover(this, cloner);
+    }
+    
     /// <summary>
     /// Performs a random convex crossover on the two given parents.
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/SimulatedBinaryCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/SimulatedBinaryCrossover.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/SimulatedBinaryCrossover.cs	(revision 4672)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -44,4 +45,7 @@
     }
 
+    [StorableConstructor]
+    protected SimulatedBinaryCrossover(bool deserializing) : base(deserializing) { }
+    protected SimulatedBinaryCrossover(SimulatedBinaryCrossover original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of <see cref="SimulatedBinaryCrossover"/> with one 
@@ -51,4 +55,8 @@
       : base() {
       Parameters.Add(new ValueLookupParameter<DoubleValue>("Contiguity", "Specifies whether the crossover should produce very different (small value) or very similar (large value) children. Valid values must be greater or equal to 0.", new DoubleValue(2)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SimulatedBinaryCrossover(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/SinglePointCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/SinglePointCrossover.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/SinglePointCrossover.cs	(revision 4672)
@@ -23,4 +23,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -36,4 +37,13 @@
   [StorableClass]
   public class SinglePointCrossover : RealVectorCrossover {
+    [StorableConstructor]
+    protected SinglePointCrossover(bool deserializing) : base(deserializing) { }
+    protected SinglePointCrossover(SinglePointCrossover original, Cloner cloner) : base(original, cloner) { }
+    public SinglePointCrossover() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SinglePointCrossover(this, cloner);
+    }
+    
     /// <summary>
     /// Performs the single point crossover for real vectors. The implementation is similar to the single point crossover for binary vectors.
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/UniformAllPositionsArithmeticCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/UniformAllPositionsArithmeticCrossover.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/UniformAllPositionsArithmeticCrossover.cs	(revision 4672)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -44,4 +45,7 @@
     }
 
+    [StorableConstructor]
+    protected UniformAllPositionsArithmeticCrossover(bool deserializing) : base(deserializing) { }
+    protected UniformAllPositionsArithmeticCrossover(UniformAllPositionsArithmeticCrossover original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance with one parameter (<c>Alpha</c>).
@@ -50,4 +54,8 @@
       : base() {
       Parameters.Add(new ValueLookupParameter<DoubleValue>("Alpha", "The alpha value in the range [0;1]", new DoubleValue(0.33)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new UniformAllPositionsArithmeticCrossover(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/UniformSomePositionsArithmeticCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/UniformSomePositionsArithmeticCrossover.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/UniformSomePositionsArithmeticCrossover.cs	(revision 4672)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -50,4 +51,7 @@
     }
 
+    [StorableConstructor]
+    protected UniformSomePositionsArithmeticCrossover(bool deserializing) : base(deserializing) { }
+    protected UniformSomePositionsArithmeticCrossover(UniformSomePositionsArithmeticCrossover original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance with two parameters (<c>Alpha</c> and <c>Probability</c>).
@@ -57,4 +61,8 @@
       Parameters.Add(new ValueLookupParameter<DoubleValue>("Alpha", "The alpha value in the range [0;1] that defines whether the point should be close to parent1 (=1) or parent2 (=0)", new DoubleValue(0.5)));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("Probability", "The probability for crossing a position in the range [0;1]", new DoubleValue(0.5)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new UniformSomePositionsArithmeticCrossover(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/BreederGeneticAlgorithmManipulator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/BreederGeneticAlgorithmManipulator.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/BreederGeneticAlgorithmManipulator.cs	(revision 4672)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -41,4 +42,8 @@
       get { return (ValueLookupParameter<DoubleValue>)Parameters["SearchIntervalFactor"]; }
     }
+
+    [StorableConstructor]
+    protected BreederGeneticAlgorithmManipulator(bool deserializing) : base(deserializing) { }
+    protected BreederGeneticAlgorithmManipulator(BreederGeneticAlgorithmManipulator original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of <see cref="BreederGeneticAlgorithmManipulator"/> with two
@@ -48,4 +53,8 @@
       : base() {
       Parameters.Add(new ValueLookupParameter<DoubleValue>("SearchIntervalFactor", "The factor determining the size of the search interval, that will be added/removed to/from the allele selected for manipulation. E.g. a value of 0.1 means 10% of the range will be maximally added/removed.", new DoubleValue(0.1)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BreederGeneticAlgorithmManipulator(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MichalewiczNonUniformAllPositionsManipulator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MichalewiczNonUniformAllPositionsManipulator.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MichalewiczNonUniformAllPositionsManipulator.cs	(revision 4672)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -57,4 +58,7 @@
     }
 
+    [StorableConstructor]
+    protected MichalewiczNonUniformAllPositionsManipulator(bool deserializing) : base(deserializing) { }
+    protected MichalewiczNonUniformAllPositionsManipulator(MichalewiczNonUniformAllPositionsManipulator original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of <see cref="MichalewiczNonUniformAllPositionsManipulator"/> with three 
@@ -66,4 +70,8 @@
       Parameters.Add(new ValueLookupParameter<IntValue>("MaximumIterations", "Maximum number of iterations"));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("IterationDependency", "Specifies the degree of dependency on the number of iterations. A value of 0 means no dependency and the higher the value the stronger the progress towards maximum iterations will be taken into account by sampling closer around the current position. Value must be >= 0.", new DoubleValue(5)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MichalewiczNonUniformAllPositionsManipulator(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MichalewiczNonUniformOnePositionManipulator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MichalewiczNonUniformOnePositionManipulator.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MichalewiczNonUniformOnePositionManipulator.cs	(revision 4672)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -57,4 +58,7 @@
     }
 
+    [StorableConstructor]
+    protected MichalewiczNonUniformOnePositionManipulator(bool deserializing) : base(deserializing) { }
+    protected MichalewiczNonUniformOnePositionManipulator(MichalewiczNonUniformOnePositionManipulator original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of <see cref="MichalewiczNonUniformOnePositionManipulator"/> with three 
@@ -66,4 +70,8 @@
       Parameters.Add(new ValueLookupParameter<IntValue>("MaximumIterations", "Maximum number of iterations."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("IterationDependency", "Specifies the degree of dependency on the number of iterations. A value of 0 means no dependency and the higher the value the stronger the progress towards maximum iterations will be taken into account by sampling closer around the current position. Value must be >= 0.", new DoubleValue(5)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MichalewiczNonUniformOnePositionManipulator(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MultiRealVectorManipulator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MultiRealVectorManipulator.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MultiRealVectorManipulator.cs	(revision 4672)
@@ -30,4 +30,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -50,5 +51,6 @@
 
     [StorableConstructor]
-    private MultiRealVectorManipulator(bool deserializing) : base(deserializing) { }
+    protected MultiRealVectorManipulator(bool deserializing) : base(deserializing) { }
+    protected MultiRealVectorManipulator(MultiRealVectorManipulator original, Cloner cloner) : base(original, cloner) { }
     public MultiRealVectorManipulator()
       : base() {
@@ -60,4 +62,8 @@
           Operators.Add((IRealVectorManipulator)Activator.CreateInstance(type), true);
       }
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MultiRealVectorManipulator(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/NormalAllPositionsManipulator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/NormalAllPositionsManipulator.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/NormalAllPositionsManipulator.cs	(revision 4672)
@@ -26,4 +26,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Random;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -52,4 +53,8 @@
       get { return StrategyParameterParameter; }
     }
+
+    [StorableConstructor]
+    protected NormalAllPositionsManipulator(bool deserializing) : base(deserializing) { }
+    protected NormalAllPositionsManipulator(NormalAllPositionsManipulator original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of <see cref="NormalAllPositionsManipulator"/> with one
@@ -59,4 +64,8 @@
       : base() {
       Parameters.Add(new ValueLookupParameter<RealVector>("StrategyParameter", "The vector containing the endogenous strategy parameters."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new NormalAllPositionsManipulator(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/PolynomialAllPositionManipulator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/PolynomialAllPositionManipulator.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/PolynomialAllPositionManipulator.cs	(revision 4672)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -54,4 +55,7 @@
     }
 
+    [StorableConstructor]
+    protected PolynomialAllPositionManipulator(bool deserializing) : base(deserializing) { }
+    protected PolynomialAllPositionManipulator(PolynomialAllPositionManipulator original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of <see cref="PolynomialAllPositionManipulator"/> with two parameters
@@ -62,4 +66,8 @@
       Parameters.Add(new ValueLookupParameter<DoubleValue>("Contiguity", "Specifies whether the manipulation should produce far stretching (small value) or close (large value) manipulations with higher probability. Valid values must be greater or equal to 0.", new DoubleValue(2)));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("MaximumManipulation", "Specifies the maximum value that should be added or subtracted by the manipulation. If this value is set to 0 no mutation will be performed.", new DoubleValue(1)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PolynomialAllPositionManipulator(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/PolynomialOnePositionManipulator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/PolynomialOnePositionManipulator.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/PolynomialOnePositionManipulator.cs	(revision 4672)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -53,4 +54,7 @@
     }
 
+    [StorableConstructor]
+    protected PolynomialOnePositionManipulator(bool deserializing) : base(deserializing) { }
+    protected PolynomialOnePositionManipulator(PolynomialOnePositionManipulator original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of <see cref="PolynomialOnePositionManipulator"/> with two parameters
@@ -61,4 +65,8 @@
       Parameters.Add(new ValueLookupParameter<DoubleValue>("Contiguity", "Specifies whether the manipulation should produce far stretching (small value) or close (large value) manipulations with higher probability. Valid values must be greater or equal to 0.", new DoubleValue(2)));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("MaximumManipulation", "Specifies the maximum value that should be added or subtracted by the manipulation. If this value is set to 0 no mutation will be performed.", new DoubleValue(1)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PolynomialOnePositionManipulator(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/UniformOnePositionManipulator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/UniformOnePositionManipulator.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/UniformOnePositionManipulator.cs	(revision 4672)
@@ -24,4 +24,5 @@
 using HeuristicLab.Data;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -35,4 +36,13 @@
   [StorableClass]
   public class UniformOnePositionManipulator : RealVectorManipulator {
+    [StorableConstructor]
+    protected UniformOnePositionManipulator(bool deserializing) : base(deserializing) { }
+    protected UniformOnePositionManipulator(UniformOnePositionManipulator original, Cloner cloner) : base(original, cloner) { }
+    public UniformOnePositionManipulator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new UniformOnePositionManipulator(this, cloner);
+    }
+    
     /// <summary>
     /// Changes randomly a single position in the given real <paramref name="vector"/>.
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMove.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMove.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMove.cs	(revision 4672)
@@ -35,12 +35,15 @@
     public RealVector RealVector { get; protected set; }
 
-    public AdditiveMove()
-      : this(-1, 0, null) {
+    [StorableConstructor]
+    protected AdditiveMove(bool deserializing) : base(deserializing) { }
+    protected AdditiveMove(AdditiveMove original, Cloner cloner)
+      : base(original, cloner) {
+      this.Dimension = original.Dimension;
+      this.MoveDistance = original.MoveDistance;
+      if (original.RealVector != null)
+        this.RealVector = cloner.Clone(original.RealVector);
     }
-
-    public AdditiveMove(int dimension, double moveDistance)
-      : this(dimension, moveDistance, null) {
-    }
-
+    public AdditiveMove() : this(-1, 0, null) { }
+    public AdditiveMove(int dimension, double moveDistance) : this(dimension, moveDistance, null) { }
     public AdditiveMove(int dimension, double moveDistance, RealVector realVector)
       : base() {
@@ -51,10 +54,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      AdditiveMove clone = (AdditiveMove)base.Clone(cloner);
-      clone.Dimension = Dimension;
-      clone.MoveDistance = MoveDistance;
-      if (RealVector != null)
-        clone.RealVector = (RealVector)RealVector.Clone(cloner);
-      return clone;
+      return new AdditiveMove(this, cloner);
     }
   }
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveGenerator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveGenerator.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveGenerator.cs	(revision 4672)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -50,4 +51,7 @@
     }
 
+    [StorableConstructor]
+    protected AdditiveMoveGenerator(bool deserializing) : base(deserializing) { }
+    protected AdditiveMoveGenerator(AdditiveMoveGenerator original, Cloner cloner) : base(original, cloner) { }
     public AdditiveMoveGenerator()
       : base() {
@@ -57,4 +61,8 @@
       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope where the moves should be added as subscopes."));
       Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "A 2 column matrix specifying the lower and upper bound for each dimension. If there are less rows than dimension the bounds vector is cycled."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AdditiveMoveGenerator(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveMaker.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveMaker.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveMaker.cs	(revision 4672)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -47,4 +48,7 @@
     }
 
+    [StorableConstructor]
+    protected AdditiveMoveMaker(bool deserializing) : base(deserializing) { }
+    protected AdditiveMoveMaker(AdditiveMoveMaker original, Cloner cloner) : base(original, cloner) { }
     public AdditiveMoveMaker()
       : base() {
@@ -53,4 +57,8 @@
       Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The relative quality of the move."));
       Parameters.Add(new LookupParameter<RealVector>("RealVector", "The solution as permutation."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AdditiveMoveMaker(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveTabuAttribute.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveTabuAttribute.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveTabuAttribute.cs	(revision 4672)
@@ -38,15 +38,13 @@
 
     [StorableConstructor]
-    private AdditiveMoveTabuAttribute(bool deserializing)
-      : base() {
+    protected AdditiveMoveTabuAttribute(bool deserializing) : base(deserializing) { }
+    protected AdditiveMoveTabuAttribute(AdditiveMoveTabuAttribute original, Cloner cloner)
+      : base(original, cloner) {
+      this.Dimension = original.Dimension;
+      this.OriginalPosition = original.OriginalPosition;
+      this.MovedPosition = original.MovedPosition;
+      this.MoveQuality = original.MoveQuality;
     }
-    public AdditiveMoveTabuAttribute()
-      : base() {
-      Dimension = -1;
-      OriginalPosition = 0;
-      MovedPosition = 0;
-      MoveQuality = 0;
-    }
-
+    public AdditiveMoveTabuAttribute() : this(-1, 0, 0, 0) { }
     public AdditiveMoveTabuAttribute(int dimension, double originalPosition, double movedPosition, double moveQuality)
       : base() {
@@ -58,10 +56,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      AdditiveMoveTabuAttribute clone = (AdditiveMoveTabuAttribute)base.Clone(cloner);
-      clone.Dimension = Dimension;
-      clone.OriginalPosition = OriginalPosition;
-      clone.MovedPosition = MovedPosition;
-      clone.MoveQuality = MoveQuality;
-      return clone;
+      return new AdditiveMoveTabuAttribute(this, cloner);
     }
   }
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveTabuChecker.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveTabuChecker.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveTabuChecker.cs	(revision 4672)
@@ -27,4 +27,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -62,5 +63,7 @@
     }
 
-
+    [StorableConstructor]
+    protected AdditiveMoveTabuChecker(bool deserializing) : base(deserializing) { }
+    protected AdditiveMoveTabuChecker(AdditiveMoveTabuChecker original, Cloner cloner) : base(original, cloner) { }
     public AdditiveMoveTabuChecker()
       : base() {
@@ -72,4 +75,8 @@
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, else if it is a minimization problem."));
       Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The quality of the current move."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AdditiveMoveTabuChecker(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveTabuMaker.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveTabuMaker.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveTabuMaker.cs	(revision 4672)
@@ -24,4 +24,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -36,8 +37,15 @@
     }
 
+    [StorableConstructor]
+    protected AdditiveMoveTabuMaker(bool deserializing) : base(deserializing) { }
+    protected AdditiveMoveTabuMaker(AdditiveMoveTabuMaker original, Cloner cloner) : base(original, cloner) { }
     public AdditiveMoveTabuMaker()
       : base() {
       Parameters.Add(new LookupParameter<AdditiveMove>("AdditiveMove", "The move to evaluate."));
       Parameters.Add(new LookupParameter<RealVector>("RealVector", "The solution as permutation."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AdditiveMoveTabuMaker(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/StochasticNormalMultiMoveGenerator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/StochasticNormalMultiMoveGenerator.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/StochasticNormalMultiMoveGenerator.cs	(revision 4672)
@@ -26,4 +26,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Random;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -38,8 +39,15 @@
     }
 
+    [StorableConstructor]
+    protected StochasticNormalMultiMoveGenerator(bool deserializing) : base(deserializing) { }
+    protected StochasticNormalMultiMoveGenerator(StochasticNormalMultiMoveGenerator original, Cloner cloner) : base(original, cloner) { }
     public StochasticNormalMultiMoveGenerator()
       : base() {
       Parameters.Add(new ValueLookupParameter<DoubleValue>("Sigma", "The standard deviation of the normal distribution.", new DoubleValue(1)));
       Parameters.Add(new ValueLookupParameter<IntValue>("SampleSize", "The number of moves that should be generated."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new StochasticNormalMultiMoveGenerator(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/StochasticPolynomialMultiMoveGenerator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/StochasticPolynomialMultiMoveGenerator.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/StochasticPolynomialMultiMoveGenerator.cs	(revision 4672)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -47,4 +48,7 @@
     }
 
+    [StorableConstructor]
+    protected StochasticPolynomialMultiMoveGenerator(bool deserializing) : base(deserializing) { }
+    protected StochasticPolynomialMultiMoveGenerator(StochasticPolynomialMultiMoveGenerator original, Cloner cloner) : base(original, cloner) { }
     public StochasticPolynomialMultiMoveGenerator()
       : base() {
@@ -52,4 +56,8 @@
       Parameters.Add(new ValueLookupParameter<IntValue>("SampleSize", "The number of moves that should be generated."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("MaximumManipulation", "Specifies the maximum value that should be added or subtracted by the manipulation. If this value is set to 0 no mutation will be performed.", new DoubleValue(1)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new StochasticPolynomialMultiMoveGenerator(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVector.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVector.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVector.cs	(revision 4672)
@@ -29,4 +29,7 @@
   [Item("RealVector", "Represents a vector of real values.")]
   public class RealVector : DoubleArray {
+    [StorableConstructor]
+    protected RealVector(bool deserializing) : base(deserializing) { }
+    protected RealVector(RealVector original, Cloner cloner) : base(original, cloner) { }
     public RealVector() : base() { }
     public RealVector(int length) : base(length) { }
@@ -43,8 +46,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      RealVector clone = new RealVector(array);
-      cloner.RegisterClonedObject(this, clone);
-      clone.readOnly = readOnly;
-      return clone;
+      return new RealVector(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCreator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCreator.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCreator.cs	(revision 4672)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -51,4 +52,7 @@
     }
 
+    [StorableConstructor]
+    protected RealVectorCreator(bool deserializing) : base(deserializing) { }
+    protected RealVectorCreator(RealVectorCreator original, Cloner cloner) : base(original, cloner) { }
     protected RealVectorCreator()
       : base() {
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs	(revision 4672)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -51,4 +52,7 @@
     }
 
+    [StorableConstructor]
+    protected RealVectorCrossover(bool deserializing) : base(deserializing) { }
+    protected RealVectorCrossover(RealVectorCrossover original, Cloner cloner) : base(original, cloner) { }
     protected RealVectorCrossover()
       : base() {
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorManipulator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorManipulator.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorManipulator.cs	(revision 4672)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -48,4 +49,7 @@
     }
 
+    [StorableConstructor]
+    protected RealVectorManipulator(bool deserializing) : base(deserializing) { }
+    protected RealVectorManipulator(RealVectorManipulator original, Cloner cloner) : base(original, cloner) { }
     protected RealVectorManipulator()
       : base() {
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorCreator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorCreator.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorCreator.cs	(revision 4672)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -47,4 +48,7 @@
     }
 
+    [StorableConstructor]
+    protected StdDevStrategyVectorCreator(bool deserializing) : base(deserializing) { }
+    protected StdDevStrategyVectorCreator(StdDevStrategyVectorCreator original, Cloner cloner) : base(original, cloner) { }
     public StdDevStrategyVectorCreator()
       : base() {
@@ -55,4 +59,8 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new StdDevStrategyVectorCreator(this, cloner);
+    }
+
     public override IOperation Apply() {
       StrategyParameterParameter.ActualValue = UniformRandomRealVectorCreator.Apply(RandomParameter.ActualValue, LengthParameter.ActualValue.Value, BoundsParameter.ActualValue);
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorCrossover.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorCrossover.cs	(revision 4672)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -43,4 +44,7 @@
     }
 
+    [StorableConstructor]
+    protected StdDevStrategyVectorCrossover(bool deserializing) : base(deserializing) { }
+    protected StdDevStrategyVectorCrossover(StdDevStrategyVectorCrossover original, Cloner cloner) : base(original, cloner) { }
     public StdDevStrategyVectorCrossover()
       : base() {
@@ -51,4 +55,8 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new StdDevStrategyVectorCrossover(this, cloner);
+    }
+
     public override IOperation Apply() {
       StrategyParameterParameter.ActualValue = AverageCrossover.Apply(RandomParameter.ActualValue, ParentsParameter.ActualValue);
Index: /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorManipulator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorManipulator.cs	(revision 4671)
+++ /branches/CloningRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorManipulator.cs	(revision 4672)
@@ -28,4 +28,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Random;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -54,4 +55,8 @@
       get { return (IValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; }
     }
+
+    [StorableConstructor]
+    protected StdDevStrategyVectorManipulator(bool deserializing) : base(deserializing) { }
+    protected StdDevStrategyVectorManipulator(StdDevStrategyVectorManipulator original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of <see cref="StrategyVectorManipulator"/> with four 
@@ -66,4 +71,8 @@
       Parameters.Add(new ValueLookupParameter<DoubleValue>("LearningRate", "The learning rate (tau)."));
       Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "A 2 column matrix specifying the lower and upper bound for each dimension. If there are less rows than dimension the bounds vector is cycled.", new DoubleMatrix(new double[,] { { 0, 5 } })));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new StdDevStrategyVectorManipulator(this, cloner);
     }
 
