Index: trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinCrossover.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinCrossover.cs	(revision 4352)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinCrossover.cs	(revision 4722)
@@ -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: trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinRouteBasedCrossover.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinRouteBasedCrossover.cs	(revision 4352)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinRouteBasedCrossover.cs	(revision 4722)
@@ -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: trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinSequenceBasedCrossover.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinSequenceBasedCrossover.cs	(revision 4352)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinSequenceBasedCrossover.cs	(revision 4722)
@@ -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: trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinLocalSearchManipulator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinLocalSearchManipulator.cs	(revision 4352)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinLocalSearchManipulator.cs	(revision 4722)
@@ -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: trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinManipulator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinManipulator.cs	(revision 4352)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinManipulator.cs	(revision 4722)
@@ -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: trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinOneLevelExchangeManipulator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinOneLevelExchangeManipulator.cs	(revision 4352)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinOneLevelExchangeManipulator.cs	(revision 4722)
@@ -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: trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs	(revision 4352)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs	(revision 4722)
@@ -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: trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/PotvinEncoding.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/PotvinEncoding.cs	(revision 4352)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/PotvinEncoding.cs	(revision 4722)
@@ -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,24 @@
   [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;
+    [StorableConstructor]
+    protected PotvinEncoding(bool deserializing) : base(deserializing) { }
+    protected PotvinEncoding(PotvinEncoding original, Cloner cloner)
+      : base(original, cloner) {
+      Tours = cloner.Clone(original.Tours);
+      Unrouted = new List<int>(original.Unrouted);
     }
-
-    public PotvinEncoding(): base() {
+    public PotvinEncoding()
+      : base() {
       Unrouted = new List<int>();
     }
 
-    [StorableConstructor]
-    private PotvinEncoding(bool serializing)
-      : base() {
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PotvinEncoding(this, cloner);
     }
-    
+
     public static PotvinEncoding ConvertFrom(IVRPEncoding encoding, ILookupParameter<DoubleMatrix> distanceMatrix) {
       PotvinEncoding solution = new PotvinEncoding();
@@ -85,7 +82,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;
