Index: /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/OneMaxSolution.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/OneMaxSolution.cs	(revision 4690)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/OneMaxSolution.cs	(revision 4691)
@@ -75,4 +75,7 @@
       Initialize();
     }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new OneMaxSolution(this, cloner);
+    }
     public OneMaxSolution() : base() { }
     public OneMaxSolution(BinaryVector binaryVector, DoubleValue quality)
Index: /branches/CloningRefactoring/HeuristicLab.Problems.TravelingSalesman/3.3/Evaluators/TSPEuclideanPathEvaluator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.TravelingSalesman/3.3/Evaluators/TSPEuclideanPathEvaluator.cs	(revision 4690)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.TravelingSalesman/3.3/Evaluators/TSPEuclideanPathEvaluator.cs	(revision 4691)
@@ -33,6 +33,6 @@
   public sealed class TSPEuclideanPathEvaluator : TSPCoordinatesPathEvaluator {
     [StorableConstructor]
-    protected TSPEuclideanPathEvaluator(bool deserializing) : base(deserializing) { }
-    protected TSPEuclideanPathEvaluator(TSPEuclideanPathEvaluator original, Cloner cloner) : base(original, cloner) { }
+    private TSPEuclideanPathEvaluator(bool deserializing) : base(deserializing) { }
+    private TSPEuclideanPathEvaluator(TSPEuclideanPathEvaluator original, Cloner cloner) : base(original, cloner) { }
     public TSPEuclideanPathEvaluator() : base() { }
 
Index: /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs	(revision 4690)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs	(revision 4691)
@@ -20,15 +20,14 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.PermutationEncoding;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Data;
-using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
   [Item("AlbaPermutationCrossover", "An operator which crosses two VRP representations using a standard permutation operator.  It is implemented as described in Alba, E. and Dorronsoro, B. (2004). Solving the Vehicle Routing Problem by Using Cellular Genetic Algorithms.")]
   [StorableClass]
-  public sealed class AlbaPermutationCrossover : AlbaCrossover {    
+  public sealed class AlbaPermutationCrossover : AlbaCrossover {
     public IValueLookupParameter<IPermutationCrossover> InnerCrossoverParameter {
       get { return (IValueLookupParameter<IPermutationCrossover>)Parameters["InnerCrossover"]; }
@@ -39,4 +38,7 @@
     private AlbaPermutationCrossover(AlbaPermutationCrossover original, Cloner cloner)
       : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaPermutationCrossover(this, cloner);
     }
     public AlbaPermutationCrossover()
Index: /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMove.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMove.cs	(revision 4690)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMove.cs	(revision 4691)
@@ -20,19 +20,17 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
+using HeuristicLab.Data;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Common;
-using System.Collections.Generic;
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
-using HeuristicLab.Data;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
   [Item("InversionMove", "Item that describes a lambda move on a VRP representation.  It is implemented as described in Alba, E. and Dorronsoro, B. (2004). Solving the Vehicle Routing Problem by Using Cellular Genetic Algorithms.")]
   [StorableClass]
-  public class AlbaLambdaInterchangeMove: Item, IVRPMove {
+  public class AlbaLambdaInterchangeMove : Item, IVRPMove {
     [Storable]
     public IVRPEncoding Individual { get; protected set; }
-    
+
     [Storable]
     public int Tour1 { get; protected set; }
@@ -55,5 +53,6 @@
     [StorableConstructor]
     protected AlbaLambdaInterchangeMove(bool deserializing) : base(deserializing) { }
-    protected AlbaLambdaInterchangeMove(AlbaLambdaInterchangeMove original, Cloner cloner)      : base(original, cloner) {
+    protected AlbaLambdaInterchangeMove(AlbaLambdaInterchangeMove original, Cloner cloner)
+      : base(original, cloner) {
       Tour1 = original.Tour1;
       Position1 = original.Position1;
@@ -66,6 +65,10 @@
       Individual = cloner.Clone(original.Individual);
     }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaLambdaInterchangeMove(this, cloner);
+    }
 
-    public AlbaLambdaInterchangeMove(): base() {
+    public AlbaLambdaInterchangeMove()
+      : base() {
       Tour1 = -1;
       Position1 = -1;
@@ -79,15 +82,15 @@
     }
 
-    public AlbaLambdaInterchangeMove(int tour1, int position1, int length1, 
+    public AlbaLambdaInterchangeMove(int tour1, int position1, int length1,
       int tour2, int position2, int length2, AlbaEncoding permutation) {
-        Tour1 = tour1;
-        Position1 = position1;
-        Length1 = length1;
+      Tour1 = tour1;
+      Position1 = position1;
+      Length1 = length1;
 
-        Tour2 = tour2;
-        Position2 = position2;
-        Length2 = length2;
+      Tour2 = tour2;
+      Position2 = position2;
+      Length2 = length2;
 
-        this.Individual = permutation.Clone() as AlbaEncoding;
+      this.Individual = permutation.Clone() as AlbaEncoding;
     }
 
@@ -96,13 +99,13 @@
     public TourEvaluation GetMoveQuality(
       IntValue vehicles,
-      DoubleArray dueTimeArray, DoubleArray serviceTimeArray, DoubleArray readyTimeArray, 
+      DoubleArray dueTimeArray, DoubleArray serviceTimeArray, DoubleArray readyTimeArray,
       DoubleArray demandArray, DoubleValue capacity, DoubleMatrix coordinates,
       DoubleValue fleetUsageFactor, DoubleValue timeFactor, DoubleValue distanceFactor,
       DoubleValue overloadPenalty, DoubleValue tardinessPenalty,
       ILookupParameter<DoubleMatrix> distanceMatrix, Data.BoolValue useDistanceMatrix) {
-        return AlbaLambdaInterchangeMoveEvaluator.GetMoveQuality(Individual as AlbaEncoding, this, vehicles,
-          dueTimeArray, serviceTimeArray, readyTimeArray, demandArray, capacity,
-          coordinates, fleetUsageFactor, timeFactor, distanceFactor,
-          overloadPenalty, tardinessPenalty, distanceMatrix, useDistanceMatrix);
+      return AlbaLambdaInterchangeMoveEvaluator.GetMoveQuality(Individual as AlbaEncoding, this, vehicles,
+        dueTimeArray, serviceTimeArray, readyTimeArray, demandArray, capacity,
+        coordinates, fleetUsageFactor, timeFactor, distanceFactor,
+        overloadPenalty, tardinessPenalty, distanceMatrix, useDistanceMatrix);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Creators/PushForwardInsertionCreator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Creators/PushForwardInsertionCreator.cs	(revision 4690)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Creators/PushForwardInsertionCreator.cs	(revision 4691)
@@ -60,5 +60,5 @@
     [StorableConstructor]
     private PushForwardCreator(bool deserializing) : base(deserializing) { }
-    protected PushForwardCreator(PushForwardCreator original, Cloner cloner) : base(original, cloner) { }
+    private PushForwardCreator(PushForwardCreator original, Cloner cloner) : base(original, cloner) { }
     public override IDeepCloneable Clone(Cloner cloner) {
       return new PushForwardCreator(this, cloner);
Index: /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Crossovers/RandomParentCloneCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Crossovers/RandomParentCloneCrossover.cs	(revision 4690)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Crossovers/RandomParentCloneCrossover.cs	(revision 4691)
@@ -36,8 +36,9 @@
     [StorableConstructor]
     private RandomParentCloneCrossover(bool deserializing) : base(deserializing) { }
-    protected RandomParentCloneCrossover(RandomParentCloneCrossover original, Cloner cloner) : base(original, cloner) { }
+    private RandomParentCloneCrossover(RandomParentCloneCrossover original, Cloner cloner) : base(original, cloner) { }
     public override IDeepCloneable Clone(Cloner cloner) {
       return new RandomParentCloneCrossover(this, cloner);
     }
+
 
     public RandomParentCloneCrossover()
Index: /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinCrossover.cs	(revision 4690)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinCrossover.cs	(revision 4691)
@@ -20,11 +20,10 @@
 #endregion
 
+using System.Collections.Generic;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Data;
-using HeuristicLab.Optimization;
-using System.Collections.Generic;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -38,4 +37,7 @@
     [StorableConstructor]
     protected PotvinCrossover(bool deserializing) : base(deserializing) { }
+    protected PotvinCrossover(PotvinCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
 
     public PotvinCrossover() {
@@ -68,5 +70,5 @@
     protected bool Repair(IRandom random, PotvinEncoding solution, Tour newTour) {
       bool success = true;
-      
+
       //remove duplicates from new tour      
       for (int i = 0; i < newTour.Cities.Count; i++) {
@@ -80,5 +82,5 @@
         }
       }
-      while(newTour.Cities.Contains(0))
+      while (newTour.Cities.Contains(0))
         newTour.Cities.Remove(0);
 
@@ -108,5 +110,5 @@
 
         int route, place;
-        if(FindInsertionPlace(solution, unrouted, out route, out place)) {
+        if (FindInsertionPlace(solution, unrouted, out route, out place)) {
           solution.Tours[route].Cities.Insert(place, unrouted);
         } else {
Index: /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinRouteBasedCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinRouteBasedCrossover.cs	(revision 4690)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinRouteBasedCrossover.cs	(revision 4691)
@@ -20,9 +20,7 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Data;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -32,8 +30,13 @@
     [StorableConstructor]
     private PotvinRouteBasedCrossover(bool deserializing) : base(deserializing) { }
-
+    private PotvinRouteBasedCrossover(PotvinRouteBasedCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PotvinRouteBasedCrossover(this, cloner);
+    }
     public PotvinRouteBasedCrossover()
       : base() { }
-     
+
     protected override PotvinEncoding Crossover(IRandom random, PotvinEncoding parent1, PotvinEncoding parent2) {
       PotvinEncoding child = parent2.Clone() as PotvinEncoding;
@@ -55,5 +58,5 @@
         return child;
       else {
-        if(random.NextDouble() < 0.5)
+        if (random.NextDouble() < 0.5)
           return parent1.Clone() as PotvinEncoding;
         else
Index: /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinSequenceBasedCrossover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinSequenceBasedCrossover.cs	(revision 4690)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinSequenceBasedCrossover.cs	(revision 4691)
@@ -20,9 +20,7 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Data;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -32,8 +30,14 @@
     [StorableConstructor]
     private PotvinSequenceBasedCrossover(bool deserializing) : base(deserializing) { }
+    private PotvinSequenceBasedCrossover(PotvinSequenceBasedCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PotvinSequenceBasedCrossover(this, cloner);
+    }
 
     public PotvinSequenceBasedCrossover()
       : base() { }
-        
+
     protected override PotvinEncoding Crossover(IRandom random, PotvinEncoding parent1, PotvinEncoding parent2) {
       PotvinEncoding child = parent1.Clone() as PotvinEncoding;
Index: /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinLocalSearchManipulator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinLocalSearchManipulator.cs	(revision 4690)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinLocalSearchManipulator.cs	(revision 4691)
@@ -20,10 +20,10 @@
 #endregion
 
+using System.Collections.Generic;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Data;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Data;
-using System.Collections.Generic;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -37,6 +37,12 @@
     [StorableConstructor]
     private PotvinLocalSearchManipulator(bool deserializing) : base(deserializing) { }
-
-    public PotvinLocalSearchManipulator() : base() {
+    private PotvinLocalSearchManipulator(PotvinLocalSearchManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PotvinLocalSearchManipulator(this, cloner);
+    }
+    public PotvinLocalSearchManipulator()
+      : base() {
       Parameters.Add(new ValueParameter<IntValue>("Iterations", "The number of max iterations.", new IntValue(100)));
     }
@@ -71,5 +77,5 @@
           }
           individual.Tours[currentTour].Cities.RemoveRange(currentCity, length);
-          
+
           currentCity++;
         }
@@ -106,5 +112,5 @@
                   individual.Tours[insertionTour].Cities.InsertRange(
                     insertionPlace,
-                    toBeInserted); 
+                    toBeInserted);
                 }
                 city++;
@@ -115,5 +121,5 @@
           }
           iterations++;
-        } while (insertionFound && 
+        } while (insertionFound &&
           iterations < Iterations.Value.Value);
 
Index: /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinManipulator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinManipulator.cs	(revision 4690)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinManipulator.cs	(revision 4691)
@@ -20,10 +20,9 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Data;
-using HeuristicLab.Optimization;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -37,5 +36,7 @@
     [StorableConstructor]
     protected PotvinManipulator(bool deserializing) : base(deserializing) { }
-
+    protected PotvinManipulator(PotvinManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public PotvinManipulator() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
@@ -73,10 +74,10 @@
     protected bool FindInsertionPlace(PotvinEncoding individual, int city, int routeToAvoid, out int route, out int place) {
       return individual.FindInsertionPlace(
-        DueTimeParameter.ActualValue, ServiceTimeParameter.ActualValue, ReadyTimeParameter.ActualValue, 
-        DemandParameter.ActualValue, CapacityParameter.ActualValue, CoordinatesParameter.ActualValue, 
+        DueTimeParameter.ActualValue, ServiceTimeParameter.ActualValue, ReadyTimeParameter.ActualValue,
+        DemandParameter.ActualValue, CapacityParameter.ActualValue, CoordinatesParameter.ActualValue,
         DistanceMatrixParameter, UseDistanceMatrixParameter.ActualValue,
         city, routeToAvoid, out route, out place);
     }
-    
+
     public override IOperation Apply() {
       IVRPEncoding solution = VRPToursParameter.ActualValue;
@@ -84,5 +85,5 @@
         VRPToursParameter.ActualValue = PotvinEncoding.ConvertFrom(solution, DistanceMatrixParameter);
       }
-      
+
       Manipulate(RandomParameter.ActualValue, VRPToursParameter.ActualValue as PotvinEncoding);
 
Index: /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinOneLevelExchangeManipulator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinOneLevelExchangeManipulator.cs	(revision 4690)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinOneLevelExchangeManipulator.cs	(revision 4691)
@@ -20,10 +20,8 @@
 #endregion
 
+using System.Collections.Generic;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Data;
-using System.Collections.Generic;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -33,7 +31,12 @@
     [StorableConstructor]
     private PotvinOneLevelExchangeMainpulator(bool deserializing) : base(deserializing) { }
+    private PotvinOneLevelExchangeMainpulator(PotvinOneLevelExchangeMainpulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PotvinOneLevelExchangeMainpulator(this, cloner);
+    }
+    public PotvinOneLevelExchangeMainpulator() : base() { }
 
-    public PotvinOneLevelExchangeMainpulator() : base() { }
-    
     protected override void Manipulate(IRandom random, PotvinEncoding individual) {
       int selectedIndex = SelectRandomTourBiasedByLength(random, individual);
@@ -52,7 +55,7 @@
 
       route1.Cities.RemoveAll(
-        new System.Predicate<int>( 
+        new System.Predicate<int>(
           delegate(int val) {
-            return (replaced.Contains(val)); 
+            return (replaced.Contains(val));
           }
         )
Index: /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs	(revision 4690)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs	(revision 4691)
@@ -20,10 +20,7 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Data;
-using System.Collections.Generic;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -33,7 +30,10 @@
     [StorableConstructor]
     private PotvinTwoLevelExchangeManipulator(bool deserializing) : base(deserializing) { }
+    private PotvinTwoLevelExchangeManipulator(PotvinTwoLevelExchangeManipulator original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PotvinTwoLevelExchangeManipulator(this, cloner);
+    }
+    public PotvinTwoLevelExchangeManipulator() : base() { }
 
-    public PotvinTwoLevelExchangeManipulator() : base() { }
-    
     protected override void Manipulate(IRandom random, PotvinEncoding individual) {
       int selectedIndex = SelectRandomTourBiasedByLength(random, individual);
@@ -54,5 +54,5 @@
                 if (FindInsertionPlace(individual,
                   customer2, selectedIndex, out route, out place)) {
-                    individual.Tours[route].Cities.Insert(place, customer2);
+                  individual.Tours[route].Cities.Insert(place, customer2);
                   route1.Cities.RemoveAt(customer1Position);
 
Index: /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/PotvinEncoding.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/PotvinEncoding.cs	(revision 4690)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/PotvinEncoding.cs	(revision 4691)
@@ -20,11 +20,9 @@
 #endregion
 
+using System.Collections.Generic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
-using HeuristicLab.Encodings.PermutationEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System.Drawing;
-using System.Collections.Generic;
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 
@@ -32,25 +30,25 @@
   [Item("PotvinEncoding", "Represents a potvin encoding of VRP solutions. It is implemented as described in Potvin, J.-Y. and Bengio, S. (1996). The Vehicle Routing Problem with Time Windows - Part II: Genetic Search. INFORMS Journal of Computing, 8:165–172.")]
   [StorableClass]
-  public class PotvinEncoding : TourEncoding {   
+  public class PotvinEncoding : TourEncoding {
     [Storable]
     public List<int> Unrouted { get; set; }
 
-    public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
-      PotvinEncoding clone = new PotvinEncoding();
-      cloner.RegisterClonedObject(this, clone);
-      clone.Tours = (ItemList<Tour>)cloner.Clone(this.Tours);
-      clone.Unrouted = new List<int>(Unrouted);
-      return clone;
-    }
-
-    public PotvinEncoding(): base() {
+    public PotvinEncoding()
+      : base() {
       Unrouted = new List<int>();
     }
-
+    protected PotvinEncoding(PotvinEncoding original, Cloner cloner)
+      : base(original, cloner) {
+      Tours = cloner.Clone(original.Tours);
+      Unrouted = new List<int>(original.Unrouted);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PotvinEncoding(this, cloner);
+    }
     [StorableConstructor]
     private PotvinEncoding(bool serializing)
       : base() {
     }
-    
+
     public static PotvinEncoding ConvertFrom(IVRPEncoding encoding, ILookupParameter<DoubleMatrix> distanceMatrix) {
       PotvinEncoding solution = new PotvinEncoding();
@@ -85,7 +83,7 @@
             Tours[tour].Cities.Insert(i, city);
 
-            if (Tours[tour].Feasible(dueTimeArray, serviceTimeArray, readyTimeArray, demandArray, 
+            if (Tours[tour].Feasible(dueTimeArray, serviceTimeArray, readyTimeArray, demandArray,
               capacity, coordinates, distanceMatrix, useDistanceMatrix)) {
-                double newLength = Tours[tour].GetLength(coordinates, distanceMatrix, useDistanceMatrix);
+              double newLength = Tours[tour].GetLength(coordinates, distanceMatrix, useDistanceMatrix);
 
               double detour = newLength - length;
Index: /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Manipulators/ZhuPermutationManipulator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Manipulators/ZhuPermutationManipulator.cs	(revision 4690)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Manipulators/ZhuPermutationManipulator.cs	(revision 4691)
@@ -20,9 +20,9 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.PermutationEncoding;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Data;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
@@ -44,5 +44,5 @@
     public ZhuPermutationManipulator()
       : base() {
-        Parameters.Add(new ValueLookupParameter<IPermutationManipulator>("InnerManipulator", "The permutation manipulator.", new TranslocationManipulator()));
+      Parameters.Add(new ValueLookupParameter<IPermutationManipulator>("InnerManipulator", "The permutation manipulator.", new TranslocationManipulator()));
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/VRPSolution.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/VRPSolution.cs	(revision 4690)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.VehicleRouting/3.3/VRPSolution.cs	(revision 4691)
@@ -223,5 +223,5 @@
     private VRPSolution(bool deserializing) : base(deserializing) { }
 
-    protected VRPSolution(VRPSolution original, Cloner cloner)
+    private VRPSolution(VRPSolution original, Cloner cloner)
       : base(original, cloner) {
       coordinates = cloner.Clone(original.coordinates);
