Index: trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/ExhaustiveOneBitflipMoveGenerator.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/ExhaustiveOneBitflipMoveGenerator.cs	(revision 4068)
+++ trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/ExhaustiveOneBitflipMoveGenerator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Optimization;
@@ -27,5 +28,14 @@
   [Item("ExhaustiveBitflipMoveGenerator", "Generates all possible one bitflip moves from a given binaryVector.")]
   [StorableClass]
-  public class ExhaustiveOneBitflipMoveGenerator : OneBitflipMoveGenerator, IExhaustiveMoveGenerator {
+  public sealed class ExhaustiveOneBitflipMoveGenerator : OneBitflipMoveGenerator, IExhaustiveMoveGenerator {
+    [StorableConstructor]
+    private ExhaustiveOneBitflipMoveGenerator(bool deserializing) : base(deserializing) { }
+    private ExhaustiveOneBitflipMoveGenerator(ExhaustiveOneBitflipMoveGenerator original, Cloner cloner) : base(original, cloner) { }
+    public ExhaustiveOneBitflipMoveGenerator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ExhaustiveOneBitflipMoveGenerator(this, cloner);
+    }
+
     public static OneBitflipMove[] Apply(BinaryVector binaryVector) {
       int length = binaryVector.Length;
Index: trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMove.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMove.cs	(revision 4068)
+++ trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMove.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -27,14 +28,13 @@
   [StorableClass]
   public class OneBitflipMove : OneIndexMove {
-    public OneBitflipMove()
-      : base() {
-    }
+    [StorableConstructor]
+    protected OneBitflipMove(bool deserializing) : base(deserializing) { }
+    protected OneBitflipMove(OneBitflipMove original, Cloner cloner) : base(original, cloner) { }
+    public OneBitflipMove() : base() { }
+    public OneBitflipMove(int index) : this(index, null) { }
+    public OneBitflipMove(int index, BinaryVector binaryVector) : base(index, binaryVector) { }
 
-    public OneBitflipMove(int index)
-      : base(index, null) {
-    }
-
-    public OneBitflipMove(int index, BinaryVector binaryVector)
-      : base(index, binaryVector) {
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new OneBitflipMove(this, cloner);
     }
   }
Index: trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveAttribute.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveAttribute.cs	(revision 4068)
+++ trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveAttribute.cs	(revision 4722)
@@ -25,5 +25,5 @@
 
 namespace HeuristicLab.Encodings.BinaryVectorEncoding {
-  [Item("OneBitflipMoveAttribute", "Base class for specifying a move attribute.")]
+  [Item("OneBitflipMoveAttribute", "Describes the attributes (move quality and index) of a single bitflip move.")]
   [StorableClass]
   public class OneBitflipMoveAttribute : Item {
@@ -33,8 +33,12 @@
     public int Index { get; protected set; }
 
-    public OneBitflipMoveAttribute()
-      : this(-1, 0) {
+    [StorableConstructor]
+    protected OneBitflipMoveAttribute(bool deserializing) : base(deserializing) { }
+    protected OneBitflipMoveAttribute(OneBitflipMoveAttribute original, Cloner cloner)
+      : base(original, cloner) {
+      this.MoveQuality = original.MoveQuality;
+      this.Index = original.Index;
     }
-
+    public OneBitflipMoveAttribute() : this(-1, 0) { }
     public OneBitflipMoveAttribute(int index, double moveQuality)
       : base() {
@@ -44,8 +48,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      OneBitflipMoveAttribute clone = (OneBitflipMoveAttribute)base.Clone(cloner);
-      clone.MoveQuality = MoveQuality;
-      clone.Index = Index;
-      return clone;
+      return new OneBitflipMoveAttribute(this, cloner);
     }
   }
Index: trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveGenerator.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveGenerator.cs	(revision 4068)
+++ trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveGenerator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Operators;
@@ -43,4 +44,7 @@
     }
 
+    [StorableConstructor]
+    protected OneBitflipMoveGenerator(bool deserializing) : base(deserializing) { }
+    protected OneBitflipMoveGenerator(OneBitflipMoveGenerator original, Cloner cloner) : base(original, cloner) { }
     public OneBitflipMoveGenerator()
       : base() {
Index: trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveMaker.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveMaker.cs	(revision 4068)
+++ trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveMaker.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -47,4 +48,7 @@
     }
 
+    [StorableConstructor]
+    protected OneBitflipMoveMaker(bool deserializing) : base(deserializing) { }
+    protected OneBitflipMoveMaker(OneBitflipMoveMaker original, Cloner cloner) : base(original, cloner) { }
     public OneBitflipMoveMaker()
       : base() {
@@ -53,4 +57,8 @@
       Parameters.Add(new LookupParameter<OneBitflipMove>("OneBitflipMove", "The move to evaluate."));
       Parameters.Add(new LookupParameter<BinaryVector>("BinaryVector", "The solution as BinaryVector."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new OneBitflipMoveMaker(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveTabuChecker.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveTabuChecker.cs	(revision 4068)
+++ trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveTabuChecker.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -61,4 +62,7 @@
     }
 
+    [StorableConstructor]
+    protected OneBitflipMoveTabuChecker(bool deserializing) : base(deserializing) { }
+    protected OneBitflipMoveTabuChecker(OneBitflipMoveTabuChecker original, Cloner cloner) : base(original, cloner) { }
     public OneBitflipMoveTabuChecker()
       : base() {
@@ -70,4 +74,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 OneBitflipMoveTabuChecker(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveTabuMaker.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveTabuMaker.cs	(revision 4068)
+++ trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveTabuMaker.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Optimization.Operators;
@@ -36,8 +37,15 @@
     }
 
+    [StorableConstructor]
+    protected OneBitflipMoveTabuMaker(bool deserializing) : base(deserializing) { }
+    protected OneBitflipMoveTabuMaker(OneBitflipMoveTabuMaker original, Cloner cloner) : base(original, cloner) { }
     public OneBitflipMoveTabuMaker()
       : base() {
       Parameters.Add(new LookupParameter<BinaryVector>("BinaryVector", "The solution as BinaryVector."));
       Parameters.Add(new LookupParameter<OneBitflipMove>("OneBitflipMove", "The move that was made."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new OneBitflipMoveTabuMaker(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/StochasticOneBitflipMultiMoveGenerator.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/StochasticOneBitflipMultiMoveGenerator.cs	(revision 4068)
+++ trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/StochasticOneBitflipMultiMoveGenerator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -42,8 +43,15 @@
     }
 
+    [StorableConstructor]
+    protected StochasticOneBitflipMultiMoveGenerator(bool deserializing) : base(deserializing) { }
+    protected StochasticOneBitflipMultiMoveGenerator(StochasticOneBitflipMultiMoveGenerator original, Cloner cloner) : base(original, cloner) { }
     public StochasticOneBitflipMultiMoveGenerator()
       : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator."));
       Parameters.Add(new ValueLookupParameter<IntValue>("SampleSize", "The number of moves to generate."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new StochasticOneBitflipMultiMoveGenerator(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/StochasticOneBitflipSingleMoveGenerator.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/StochasticOneBitflipSingleMoveGenerator.cs	(revision 4068)
+++ trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/StochasticOneBitflipSingleMoveGenerator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Optimization;
@@ -33,7 +34,14 @@
     }
 
+    [StorableConstructor]
+    protected StochasticOneBitflipSingleMoveGenerator(bool deserializing) : base(deserializing) { }
+    protected StochasticOneBitflipSingleMoveGenerator(StochasticOneBitflipSingleMoveGenerator original, Cloner cloner) : base(original, cloner) { }
     public StochasticOneBitflipSingleMoveGenerator()
       : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new StochasticOneBitflipSingleMoveGenerator(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneIndexMove.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneIndexMove.cs	(revision 4068)
+++ trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneIndexMove.cs	(revision 4722)
@@ -33,10 +33,13 @@
     public BinaryVector BinaryVector { get; protected set; }
 
-    public OneIndexMove()
-      : base() {
-      Index = -1;
-      BinaryVector = null;
+    [StorableConstructor]
+    protected OneIndexMove(bool deserializing) : base(deserializing) { }
+    protected OneIndexMove(OneIndexMove original, Cloner cloner)
+      : base(original, cloner) {
+      this.Index = original.Index;
+      if (original.BinaryVector != null)
+        this.BinaryVector = cloner.Clone(original.BinaryVector);
     }
-
+    public OneIndexMove() : this(-1, null) { }
     public OneIndexMove(int index, BinaryVector binaryVector)
       : base() {
@@ -46,9 +49,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      OneIndexMove clone = (OneIndexMove)base.Clone(cloner);
-      clone.Index = Index;
-      if (BinaryVector != null)
-        clone.BinaryVector = (BinaryVector)BinaryVector.Clone(cloner);
-      return clone;
+      return new OneIndexMove(this, cloner);
     }
   }
