Index: branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Creators/UniformRandomIntegerVectorCreator.cs
===================================================================
--- branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Creators/UniformRandomIntegerVectorCreator.cs	(revision 4656)
+++ branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Creators/UniformRandomIntegerVectorCreator.cs	(revision 4664)
@@ -23,4 +23,5 @@
 using HeuristicLab.Data;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.IntegerVectorEncoding {
@@ -31,4 +32,13 @@
   [StorableClass]
   public class UniformRandomIntegerVectorCreator : IntegerVectorCreator {
+    [StorableConstructor]
+    protected UniformRandomIntegerVectorCreator(bool deserializing) : base(deserializing) { }
+    protected UniformRandomIntegerVectorCreator(UniformRandomIntegerVectorCreator original, Cloner cloner) : base(original, cloner) { }
+    public UniformRandomIntegerVectorCreator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new UniformRandomIntegerVectorCreator(this, cloner);
+    }
+
     /// <summary>
     /// Generates a new random integer vector with the given <paramref name="length"/>.
Index: branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/DiscreteCrossover.cs
===================================================================
--- branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/DiscreteCrossover.cs	(revision 4656)
+++ branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/DiscreteCrossover.cs	(revision 4664)
@@ -23,4 +23,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.IntegerVectorEncoding {
@@ -34,4 +35,13 @@
   [StorableClass]
   public class DiscreteCrossover : IntegerVectorCrossover {
+    [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 of the two given parents.
Index: branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/MultiIntegerVectorCrossover.cs
===================================================================
--- branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/MultiIntegerVectorCrossover.cs	(revision 4656)
+++ branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/MultiIntegerVectorCrossover.cs	(revision 4664)
@@ -29,4 +29,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.IntegerVectorEncoding {
@@ -50,5 +51,6 @@
 
     [StorableConstructor]
-    private MultiIntegerVectorCrossover(bool deserializing) : base(deserializing) { }
+    protected MultiIntegerVectorCrossover(bool deserializing) : base(deserializing) { }
+    protected MultiIntegerVectorCrossover(MultiIntegerVectorCrossover original, Cloner cloner) : base(original, cloner) { }
     public MultiIntegerVectorCrossover()
       : base() {
@@ -62,4 +64,8 @@
           Operators.Add((IIntegerVectorCrossover)Activator.CreateInstance(type), true);
       }
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MultiIntegerVectorCrossover(this, cloner);
     }
 
Index: branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/SinglePointCrossover.cs
===================================================================
--- branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/SinglePointCrossover.cs	(revision 4656)
+++ branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/SinglePointCrossover.cs	(revision 4664)
@@ -23,4 +23,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.IntegerVectorEncoding {
@@ -34,4 +35,13 @@
   [StorableClass]
   public class SinglePointCrossover : IntegerVectorCrossover {
+    [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 a single point crossover at a randomly chosen position of the two 
Index: branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVector.cs
===================================================================
--- branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVector.cs	(revision 4656)
+++ branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVector.cs	(revision 4664)
@@ -29,4 +29,7 @@
   [Item("IntegerVector", "Represents a vector of integer values.")]
   public class IntegerVector : IntArray {
+    [StorableConstructor]
+    protected IntegerVector(bool deserializing) : base(deserializing) { }
+    protected IntegerVector(IntegerVector original, Cloner cloner) : base(original, cloner) { }
     public IntegerVector() : base() { }
     public IntegerVector(int length) : base(length) { }
@@ -43,8 +46,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      IntegerVector clone = new IntegerVector(array);
-      cloner.RegisterClonedObject(this, clone);
-      clone.readOnly = readOnly;
-      return clone;
+      return new IntegerVector(this, cloner);
     }
 
Index: branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorCreator.cs
===================================================================
--- branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorCreator.cs	(revision 4656)
+++ branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorCreator.cs	(revision 4664)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.IntegerVectorEncoding {
@@ -53,4 +54,7 @@
     }
 
+    [StorableConstructor]
+    protected IntegerVectorCreator(bool deserializing) : base(deserializing) { }
+    protected IntegerVectorCreator(IntegerVectorCreator original, Cloner cloner) : base(original, cloner) { }
     protected IntegerVectorCreator()
       : base() {
Index: branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorCrossover.cs
===================================================================
--- branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorCrossover.cs	(revision 4656)
+++ branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorCrossover.cs	(revision 4664)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.IntegerVectorEncoding {
@@ -46,4 +47,7 @@
     }
 
+    [StorableConstructor]
+    protected IntegerVectorCrossover(bool deserializing) : base(deserializing) { }
+    protected IntegerVectorCrossover(IntegerVectorCrossover original, Cloner cloner) : base(original, cloner) { }
     protected IntegerVectorCrossover()
       : base() {
Index: branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorManipulator.cs
===================================================================
--- branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorManipulator.cs	(revision 4656)
+++ branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorManipulator.cs	(revision 4664)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.IntegerVectorEncoding {
@@ -43,4 +44,7 @@
     }
 
+    [StorableConstructor]
+    protected IntegerVectorManipulator(bool deserializing) : base(deserializing) { }
+    protected IntegerVectorManipulator(IntegerVectorManipulator original, Cloner cloner) : base(original, cloner) { }
     protected IntegerVectorManipulator()
       : base() {
Index: branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Manipulators/UniformOnePositionManipulator.cs
===================================================================
--- branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Manipulators/UniformOnePositionManipulator.cs	(revision 4656)
+++ branches/CloningRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Manipulators/UniformOnePositionManipulator.cs	(revision 4664)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Encodings.IntegerVectorEncoding {
@@ -49,11 +50,19 @@
     }
 
+    [StorableConstructor]
+    protected UniformOnePositionManipulator(bool deserializing) : base(deserializing) { }
+    protected UniformOnePositionManipulator(UniformOnePositionManipulator original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of <see cref="UniformOnePositionManipulator"/> with two parameters
     /// (<c>Minimum</c> and <c>Maximum</c>).
     /// </summary>
-    public UniformOnePositionManipulator() {
+    public UniformOnePositionManipulator()
+      : base() {
       Parameters.Add(new ValueLookupParameter<IntValue>("Minimum", "Minimum of the sampling range for the vector element (included)"));
       Parameters.Add(new ValueLookupParameter<IntValue>("Maximum", "Maximum of the sampling range for the vector element (excluded)"));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new UniformOnePositionManipulator(this, cloner);
     }
 
