Index: /branches/VRP/HeuristicLab 3.3.sln
===================================================================
--- /branches/VRP/HeuristicLab 3.3.sln	(revision 4751)
+++ /branches/VRP/HeuristicLab 3.3.sln	(revision 4752)
@@ -312,4 +312,6 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Common-3.3", "HeuristicLab.Clients.Common\3.3\HeuristicLab.Clients.Common-3.3.csproj", "{730A9104-D4D1-4360-966B-E49B7571DDA3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Visualization.ChartControlsExtensions-3.3", "HeuristicLab.Visualization.ChartControlsExtensions\3.3\HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj", "{315BDA09-3F4F-49B3-9790-B37CFC1C5750}"
 EndProject
 Global
@@ -1418,4 +1420,16 @@
 		{730A9104-D4D1-4360-966B-E49B7571DDA3}.Release|x86.ActiveCfg = Release|x86
 		{730A9104-D4D1-4360-966B-E49B7571DDA3}.Release|x86.Build.0 = Release|x86
+		{315BDA09-3F4F-49B3-9790-B37CFC1C5750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{315BDA09-3F4F-49B3-9790-B37CFC1C5750}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{315BDA09-3F4F-49B3-9790-B37CFC1C5750}.Debug|x64.ActiveCfg = Debug|x64
+		{315BDA09-3F4F-49B3-9790-B37CFC1C5750}.Debug|x64.Build.0 = Debug|x64
+		{315BDA09-3F4F-49B3-9790-B37CFC1C5750}.Debug|x86.ActiveCfg = Debug|x86
+		{315BDA09-3F4F-49B3-9790-B37CFC1C5750}.Debug|x86.Build.0 = Debug|x86
+		{315BDA09-3F4F-49B3-9790-B37CFC1C5750}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{315BDA09-3F4F-49B3-9790-B37CFC1C5750}.Release|Any CPU.Build.0 = Release|Any CPU
+		{315BDA09-3F4F-49B3-9790-B37CFC1C5750}.Release|x64.ActiveCfg = Release|x64
+		{315BDA09-3F4F-49B3-9790-B37CFC1C5750}.Release|x64.Build.0 = Release|x64
+		{315BDA09-3F4F-49B3-9790-B37CFC1C5750}.Release|x86.ActiveCfg = Release|x86
+		{315BDA09-3F4F-49B3-9790-B37CFC1C5750}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/BestAverageWorstVRPToursAnalyzer.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/BestAverageWorstVRPToursAnalyzer.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/BestAverageWorstVRPToursAnalyzer.cs	(revision 4752)
@@ -178,4 +178,13 @@
     private BestAverageWorstVRPToursAnalyzer(bool deserializing) : base() { }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestAverageWorstVRPToursAnalyzer(this, cloner);
+    }
+
+    private BestAverageWorstVRPToursAnalyzer(BestAverageWorstVRPToursAnalyzer original, Cloner cloner)
+      : base(original, cloner) {
+        this.Initialize();
+    }
+
     [StorableHook(HookType.AfterDeserialization)]
     private void Initialize() {
@@ -184,10 +193,4 @@
     }
 
-    public override IDeepCloneable Clone(Cloner cloner) {
-      BestAverageWorstVRPToursAnalyzer clone = (BestAverageWorstVRPToursAnalyzer)base.Clone(cloner);
-      clone.Initialize();
-      return clone;
-    }
-
     void DistanceParameter_DepthChanged(object sender, EventArgs e) {
       BestAverageWorstCalculator.DistanceParameter.Depth = DistanceParameter.Depth;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/BestAverageWorstVRPToursCalculator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/BestAverageWorstVRPToursCalculator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/BestAverageWorstVRPToursCalculator.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting {
@@ -67,4 +68,15 @@
       Parameters.Add(new ValueLookupParameter<DoubleValue>("AverageVehiclesUtilized", "The average utilized vehicles value of all solutions."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("WorstVehiclesUtilized", "The worst utilized vehicles value of all solutions."));
+    }
+
+    [StorableConstructor]
+    private BestAverageWorstVRPToursCalculator(bool deserializing) : base(deserializing) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestAverageWorstVRPToursCalculator(this, cloner);
+    }
+
+    private BestAverageWorstVRPToursCalculator(BestAverageWorstVRPToursCalculator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/BestVRPToursMemorizer.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/BestVRPToursMemorizer.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/BestVRPToursMemorizer.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting {
@@ -55,4 +56,15 @@
     }
 
+    [StorableConstructor]
+    protected BestVRPToursMemorizer(bool deserializing) : base(deserializing) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestVRPToursMemorizer(this, cloner);
+    }
+
+    protected BestVRPToursMemorizer(BestVRPToursMemorizer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     public override IOperation Apply() {
       int i = DistanceParameter.ActualValue.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/Capacitated/BestAverageWorstCapacitatedVRPToursAnalyzer.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/Capacitated/BestAverageWorstCapacitatedVRPToursAnalyzer.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/Capacitated/BestAverageWorstCapacitatedVRPToursAnalyzer.cs	(revision 4752)
@@ -137,7 +137,10 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      BestAverageWorstCapaciatatedVRPToursAnalyzer clone = (BestAverageWorstCapaciatatedVRPToursAnalyzer)base.Clone(cloner);
-      clone.Initialize();
-      return clone;
+      return new BestAverageWorstCapaciatatedVRPToursAnalyzer(this, cloner);
+    }
+
+    private BestAverageWorstCapaciatatedVRPToursAnalyzer(BestAverageWorstCapaciatatedVRPToursAnalyzer original, Cloner cloner)
+      : base(original, cloner) {
+        this.Initialize();
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/Capacitated/BestAverageWorstCapacitatedVRPToursCalculator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/Capacitated/BestAverageWorstCapacitatedVRPToursCalculator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/Capacitated/BestAverageWorstCapacitatedVRPToursCalculator.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting {
@@ -50,4 +51,15 @@
       Parameters.Add(new ValueLookupParameter<DoubleValue>("WorstOverload", "The worst overload value of all solutions."));
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestAverageWorstCapacitatedVRPToursCalculator(this, cloner);
+    }
+
+    private BestAverageWorstCapacitatedVRPToursCalculator(BestAverageWorstCapacitatedVRPToursCalculator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    [StorableConstructor]
+    private BestAverageWorstCapacitatedVRPToursCalculator(bool deserializing) : base(deserializing) { }
 
     private void UpdateOverloads() {
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/Capacitated/BestCapacitatedVRPToursMemorizer.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/Capacitated/BestCapacitatedVRPToursMemorizer.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/Capacitated/BestCapacitatedVRPToursMemorizer.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting {
@@ -46,4 +47,15 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestCapacitatedVRPToursMemorizer(this, cloner);
+    }
+
+    protected BestCapacitatedVRPToursMemorizer(BestCapacitatedVRPToursMemorizer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    [StorableConstructor]
+    protected BestCapacitatedVRPToursMemorizer(bool deserializing) : base(deserializing) { }
+
     public override IOperation Apply() {
       int i = OverloadParameter.ActualValue.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/TimeWindowed/BestAverageWorstTimeWindowedVRPToursAnalyzer.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/TimeWindowed/BestAverageWorstTimeWindowedVRPToursAnalyzer.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/TimeWindowed/BestAverageWorstTimeWindowedVRPToursAnalyzer.cs	(revision 4752)
@@ -185,7 +185,10 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      BestAverageWorstTimeWindowedVRPToursAnalyzer clone = (BestAverageWorstTimeWindowedVRPToursAnalyzer)base.Clone(cloner);
-      clone.Initialize();
-      return clone;
+      return new BestAverageWorstTimeWindowedVRPToursAnalyzer(this, cloner);
+    }
+
+    private BestAverageWorstTimeWindowedVRPToursAnalyzer(BestAverageWorstTimeWindowedVRPToursAnalyzer original, Cloner cloner)
+      : base(original, cloner) {
+       this.Initialize();
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/TimeWindowed/BestAverageWorstTimeWindowedVRPToursCalculator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/TimeWindowed/BestAverageWorstTimeWindowedVRPToursCalculator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/TimeWindowed/BestAverageWorstTimeWindowedVRPToursCalculator.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting {
@@ -67,4 +68,15 @@
       Parameters.Add(new ValueLookupParameter<DoubleValue>("AverageTravelTime", "The average travel time value of all solutions."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("WorstTravelTime", "The worst travel time value of all solutions."));
+    }
+
+    [StorableConstructor]
+    private BestAverageWorstTimeWindowedVRPToursCalculator(bool deserializing) : base(deserializing) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestAverageWorstTimeWindowedVRPToursCalculator(this, cloner);
+    }
+
+    private BestAverageWorstTimeWindowedVRPToursCalculator(BestAverageWorstTimeWindowedVRPToursCalculator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/TimeWindowed/BestTimeWindowedVRPToursMemorizer.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/TimeWindowed/BestTimeWindowedVRPToursMemorizer.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/TimeWindowed/BestTimeWindowedVRPToursMemorizer.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting {
@@ -69,4 +70,15 @@
       return base.Apply();
     }
+
+    [StorableConstructor]
+    protected BestTimeWindowedVRPToursMemorizer(bool deserializing) : base(deserializing) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestTimeWindowedVRPToursMemorizer(this, cloner);
+    }
+
+    protected BestTimeWindowedVRPToursMemorizer(BestTimeWindowedVRPToursMemorizer original, Cloner cloner)
+      : base(original, cloner) {
+    }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/BestVRPSolutionAnalyzer.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/BestVRPSolutionAnalyzer.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/BestVRPSolutionAnalyzer.cs	(revision 4752)
@@ -29,4 +29,5 @@
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Problems.VehicleRouting.Variants;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting {
@@ -77,4 +78,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestVRPSolutionAnalyzer(this, cloner);
+    }
+
+    private BestVRPSolutionAnalyzer(BestVRPSolutionAnalyzer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     public override IOperation Apply() {
       IVRPProblemInstance problemInstance = ProblemInstanceParameter.ActualValue;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/Capacitated/BestCapacitatedVRPSolutionAnalyzer.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/Capacitated/BestCapacitatedVRPSolutionAnalyzer.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/Capacitated/BestCapacitatedVRPSolutionAnalyzer.cs	(revision 4752)
@@ -29,4 +29,5 @@
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Problems.VehicleRouting.Variants;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting {
@@ -73,4 +74,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestCapacitatedVRPSolutionAnalyzer(this, cloner);
+    }
+
+    private BestCapacitatedVRPSolutionAnalyzer(BestCapacitatedVRPSolutionAnalyzer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     public override IOperation Apply() {
       ItemArray<IVRPEncoding> solutions = VRPToursParameter.ActualValue;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/TimeWindowed/BestTimeWindowedVRPSolutionAnalyzer.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/TimeWindowed/BestTimeWindowedVRPSolutionAnalyzer.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/TimeWindowed/BestTimeWindowedVRPSolutionAnalyzer.cs	(revision 4752)
@@ -29,4 +29,5 @@
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Problems.VehicleRouting.Variants;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting {
@@ -77,4 +78,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestTimeWindowedVRPSolutionAnalyzer(this, cloner);
+    }
+
+    private BestTimeWindowedVRPSolutionAnalyzer(BestTimeWindowedVRPSolutionAnalyzer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     public override IOperation Apply() {
       ItemArray<IVRPEncoding> solutions = VRPToursParameter.ActualValue;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/VRPSolution.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/VRPSolution.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/VRPSolution.cs	(revision 4752)
@@ -99,13 +99,16 @@
     }
 
+
     public override IDeepCloneable Clone(Cloner cloner) {
-      VRPSolution clone = new VRPSolution();
-      cloner.RegisterClonedObject(this, clone);
-      clone.problemInstance = (IVRPProblemInstance)cloner.Clone(problemInstance);
-      clone.solution = (IVRPEncoding)cloner.Clone(solution);
-      clone.quality = (DoubleValue)cloner.Clone(quality);
-      
-      clone.Initialize();
-      return clone;
+      return new VRPSolution(this, cloner);
+    }
+
+    private VRPSolution(VRPSolution original, Cloner cloner)
+      : base(original, cloner) {
+      this.problemInstance = (IVRPProblemInstance)cloner.Clone(original.problemInstance);
+      this.solution = (IVRPEncoding)cloner.Clone(original.solution);
+      this.quality = (DoubleValue)cloner.Clone(original.quality);
+
+      this.Initialize();
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/AlbaEncoding.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/AlbaEncoding.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/AlbaEncoding.cs	(revision 4752)
@@ -81,12 +81,4 @@
     #endregion
 
-    public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
-      AlbaEncoding clone = new AlbaEncoding(
-        new Permutation(this.PermutationType, new IntArray(this.array)), ProblemInstance);
-      cloner.RegisterClonedObject(this, clone);
-      clone.readOnly = readOnly;
-      return clone;
-    }
-
     public AlbaEncoding(Permutation permutation, IVRPProblemInstance instance)
       : base(permutation, instance) {
@@ -96,4 +88,12 @@
     private AlbaEncoding(bool serializing)
       : base(serializing) {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaEncoding(this, cloner);
+    }
+
+    protected AlbaEncoding(AlbaEncoding original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/AlbaCreator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/AlbaCreator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/AlbaCreator.cs	(revision 4752)
@@ -27,4 +27,5 @@
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -42,4 +43,8 @@
       : base() {
     }
+
+    protected AlbaCreator(AlbaCreator original, Cloner cloner)
+      : base(original, cloner) {
+    }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/DefaultRepresentationCreator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/DefaultRepresentationCreator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/DefaultRepresentationCreator.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings;
 using HeuristicLab.Problems.VehicleRouting.Variants;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -40,4 +41,8 @@
     public DefaultRepresentationCreator() : base() { }
 
+    protected DefaultRepresentationCreator(DefaultRepresentationCreator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     public override IOperation Apply() {
       //choose default encoding here
@@ -45,5 +50,5 @@
 
       return base.Apply();
-    }    
+    }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/PushForwardInsertionCreator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/PushForwardInsertionCreator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/PushForwardInsertionCreator.cs	(revision 4752)
@@ -29,4 +29,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Problems.VehicleRouting.Variants;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -71,4 +72,12 @@
       Parameters.Add(new ValueParameter<DoubleValue>("Gamma", "The gamma value.", new DoubleValue(0.2)));
       Parameters.Add(new ValueParameter<DoubleValue>("GammaVariance", "The gamma variance.", new DoubleValue(0.14)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PushForwardCreator(this, cloner);
+    }
+
+    private PushForwardCreator(PushForwardCreator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/RandomCreator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/RandomCreator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/RandomCreator.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -45,4 +46,12 @@
       : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RandomCreator(this, cloner);
+    }
+
+    private RandomCreator(RandomCreator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Crossovers/AlbaCrossover.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Crossovers/AlbaCrossover.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Crossovers/AlbaCrossover.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -44,4 +45,8 @@
       : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
+    }
+
+    protected AlbaCrossover(AlbaCrossover original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -40,4 +41,12 @@
       : base() {
       Parameters.Add(new ValueLookupParameter<IPermutationCrossover>("InnerCrossover", "The permutation crossover.", new EdgeRecombinationCrossover()));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaPermutationCrossover(this, cloner);
+    }
+
+    private AlbaPermutationCrossover(AlbaPermutationCrossover original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerInsertionManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerInsertionManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerInsertionManipulator.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -35,4 +36,12 @@
     public AlbaCustomerInsertionManipulator()
       : base() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaCustomerInsertionManipulator(this, cloner);
+    }
+
+    private AlbaCustomerInsertionManipulator(AlbaCustomerInsertionManipulator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerInversionManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerInversionManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerInversionManipulator.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Data;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -36,4 +37,12 @@
     public AlbaCustomerInversionManipulator()
       : base() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaCustomerInversionManipulator(this, cloner);
+    }
+
+    private AlbaCustomerInversionManipulator(AlbaCustomerInversionManipulator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerSwapManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerSwapManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerSwapManipulator.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -35,4 +36,12 @@
     public AlbaCustomerSwapManipulator()
       : base() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaCustomerSwapManipulator(this, cloner);
+    }
+
+    private AlbaCustomerSwapManipulator(AlbaCustomerSwapManipulator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaIntraRouteInversionManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaIntraRouteInversionManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaIntraRouteInversionManipulator.cs	(revision 4752)
@@ -27,4 +27,5 @@
 using System;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -38,4 +39,12 @@
       : base() {
      }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaIntraRouteInversionManipulator(this, cloner);
+    }
+
+    private AlbaIntraRouteInversionManipulator(AlbaIntraRouteInversionManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
 
     public static void Apply(AlbaEncoding individual, int index1, int index2) {
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaLambdaInterchangeManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaLambdaInterchangeManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaLambdaInterchangeManipulator.cs	(revision 4752)
@@ -27,4 +27,5 @@
 using System;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -43,4 +44,12 @@
         Parameters.Add(new ValueParameter<IntValue>("Lambda", "The lambda value.", new IntValue(1)));
      }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaLambdaInterchangeManipulator(this, cloner);
+    }
+
+    private AlbaLambdaInterchangeManipulator(AlbaLambdaInterchangeManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
 
     public static void Apply(AlbaEncoding individual, int tour1Index, int position1, int length1, 
@@ -100,25 +109,28 @@
     protected override void Manipulate(IRandom rand, AlbaEncoding individual) {
       List<Tour> tours = individual.GetTours();
-      int lambda = LambdaParameter.Value.Value;
+      if (tours.Count > 1) {
+        int lambda = LambdaParameter.Value.Value;
 
-      int route1Index = rand.Next(tours.Count);
-      Tour route1 = tours[route1Index];
+        int route1Index = rand.Next(tours.Count);
+        Tour route1 = tours[route1Index];
 
-      int route2Index = rand.Next(tours.Count - 1);
-      if (route2Index >= route1Index)
-        route2Index += 1;
-      Tour route2 = tours[route2Index];
 
-      int length1 = rand.Next(Math.Min(lambda + 1, route1.Stops.Count + 1));
-      int index1 = rand.Next(route1.Stops.Count - length1 + 1);
+        int route2Index = rand.Next(tours.Count - 1);
+        if (route2Index >= route1Index)
+          route2Index += 1;
+        Tour route2 = tours[route2Index];
 
-      int l2Min = 0;
-      if (length1 == 0)
-        l2Min = 1;
-      int length2 = rand.Next(l2Min, Math.Min(lambda + 1, route2.Stops.Count + 1));
-      int index2 = rand.Next(route2.Stops.Count - length2 + 1);
+        int length1 = rand.Next(Math.Min(lambda + 1, route1.Stops.Count + 1));
+        int index1 = rand.Next(route1.Stops.Count - length1 + 1);
 
-      Apply(individual, route1Index, index1, length1,
-        route2Index, index2, length2);
+        int l2Min = 0;
+        if (length1 == 0)
+          l2Min = 1;
+        int length2 = rand.Next(l2Min, Math.Min(lambda + 1, route2.Stops.Count + 1));
+        int index2 = rand.Next(route2.Stops.Count - length2 + 1);
+
+        Apply(individual, route1Index, index1, length1,
+          route2Index, index2, length2);
+      }
     }
   }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaManipulator.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -43,4 +44,8 @@
       : base() {
         Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
+    }
+
+    protected AlbaManipulator(AlbaManipulator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaPermutationManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaPermutationManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaPermutationManipulator.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -42,4 +43,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaPermutationManipualtor(this, cloner);
+    }
+
+    private AlbaPermutationManipualtor(AlbaPermutationManipualtor original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected override void Manipulate(IRandom random, AlbaEncoding individual) {
       InnerManipulatorParameter.ActualValue.PermutationParameter.ActualName = VRPToursParameter.ActualName;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveEvaluator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveEvaluator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveEvaluator.cs	(revision 4752)
@@ -27,4 +27,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -38,4 +39,8 @@
       : base() {
     }
+
+       protected AlbaMoveEvaluator(AlbaMoveEvaluator original, Cloner cloner)
+         : base(original, cloner) {
+       }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveGenerator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveGenerator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveGenerator.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -40,4 +41,8 @@
     }
 
+    protected AlbaMoveGenerator(AlbaMoveGenerator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     public override IOperation Apply() {
       IVRPEncoding solution = VRPToursParameter.ActualValue;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveMaker.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveMaker.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveMaker.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -39,4 +40,8 @@
       : base() {
     }
+
+    protected AlbaMoveMaker(AlbaMoveMaker original, Cloner cloner)
+      : base(original, cloner) {
+    }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaExhaustiveIntraRouteInversionMoveGenerator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaExhaustiveIntraRouteInversionMoveGenerator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaExhaustiveIntraRouteInversionMoveGenerator.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using System.Collections.Generic;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -38,4 +39,12 @@
     public AlbaExhaustiveIntraRouteInversionGenerator()
       : base() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaExhaustiveIntraRouteInversionGenerator(this, cloner);
+    }
+
+    private AlbaExhaustiveIntraRouteInversionGenerator(AlbaExhaustiveIntraRouteInversionGenerator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionEvaluator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionEvaluator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionEvaluator.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings.Alba;
 using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting {
@@ -47,4 +48,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaIntraRouteInversionMoveEvaluator(this, cloner);
+    }
+
+    private AlbaIntraRouteInversionMoveEvaluator(AlbaIntraRouteInversionMoveEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected override void EvaluateMove() {
       AlbaEncoding newSolution = IntraRouteInversionMoveParameter.ActualValue.Permutation.Clone() as AlbaEncoding;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMove.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMove.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMove.cs	(revision 4752)
@@ -46,13 +46,12 @@
      }
 
-    public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
-      AlbaIntraRouteInversionMove clone = new AlbaIntraRouteInversionMove(
-        Index1, Index2);
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaIntraRouteInversionMove(this, cloner);
+    }
 
-      if (Permutation != null)
-        clone.Permutation = Permutation.Clone() as AlbaEncoding;
-
-      cloner.RegisterClonedObject(this, clone);
-      return clone;
+    protected AlbaIntraRouteInversionMove(AlbaIntraRouteInversionMove original, Cloner cloner)
+      : base(original, cloner) {
+        if (Permutation != null)
+          this.Permutation = cloner.Clone(original.Permutation);
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveGenerator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveGenerator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveGenerator.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using System.Collections.Generic;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -54,4 +55,8 @@
     }
 
+    protected AlbaIntraRouteInversionMoveGenerator(AlbaIntraRouteInversionMoveGenerator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected abstract AlbaIntraRouteInversionMove[] GenerateMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance);
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveMaker.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveMaker.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveMaker.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -47,4 +48,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaIntraRouteInversionMoveMaker(this, cloner);
+    }
+
+    protected AlbaIntraRouteInversionMoveMaker(AlbaIntraRouteInversionMoveMaker original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     public static void Apply(AlbaEncoding solution, AlbaIntraRouteInversionMove move) {
       AlbaIntraRouteInversionManipulator.Apply(solution, move.Index1, move.Index2);
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaStochasticIntraRouteInversionMutliMoveGenerator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaStochasticIntraRouteInversionMutliMoveGenerator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaStochasticIntraRouteInversionMutliMoveGenerator.cs	(revision 4752)
@@ -29,4 +29,5 @@
 using HeuristicLab.Data;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -51,4 +52,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaStochasticIntraRouteInversionMultiMoveGenerator(this, cloner);
+    }
+
+    private AlbaStochasticIntraRouteInversionMultiMoveGenerator(AlbaStochasticIntraRouteInversionMultiMoveGenerator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected override AlbaIntraRouteInversionMove[] GenerateMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance) {
       int sampleSize = SampleSizeParameter.ActualValue.Value;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaStochasticIntraRouteInversionSingleMoveGenerator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaStochasticIntraRouteInversionSingleMoveGenerator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaStochasticIntraRouteInversionSingleMoveGenerator.cs	(revision 4752)
@@ -29,4 +29,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -53,4 +54,12 @@
       : base() {
         Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaStochasticIntraRouteInversionSingleMoveGenerator(this, cloner);
+    }
+
+    private AlbaStochasticIntraRouteInversionSingleMoveGenerator(AlbaStochasticIntraRouteInversionSingleMoveGenerator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaExhaustiveLambdaInterchangeMoveGenerator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaExhaustiveLambdaInterchangeMoveGenerator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaExhaustiveLambdaInterchangeMoveGenerator.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using System.Collections.Generic;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -38,4 +39,12 @@
     public AlbaExhaustiveLambdaInterchangeMoveGenerator()
       : base() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaExhaustiveLambdaInterchangeMoveGenerator(this, cloner);
+    }
+
+    private AlbaExhaustiveLambdaInterchangeMoveGenerator(AlbaExhaustiveLambdaInterchangeMoveGenerator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMove.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMove.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMove.cs	(revision 4752)
@@ -79,23 +79,20 @@
     }
 
-    public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
-      AlbaLambdaInterchangeMove clone = new AlbaLambdaInterchangeMove();
-
-      clone.Tour1 = Tour1;
-      clone.Position1 = Position1;
-      clone.Length1 = Length1;
-
-      clone.Tour2 = Tour2;
-      clone.Position2 = Position2;
-      clone.Length2 = Length2;
-
-      if (Individual != null)
-        clone.Individual = Individual.Clone() as AlbaEncoding;
-
-      cloner.RegisterClonedObject(this, clone);
-      return clone;
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaLambdaInterchangeMove(this, cloner);
     }
 
+    protected AlbaLambdaInterchangeMove(AlbaLambdaInterchangeMove original, Cloner cloner)
+      : base(original, cloner) {
+      this.Tour1 = original.Tour1;
+      this.Position1 = original.Position1;
+      this.Length1 = original.Length1;
 
+      this.Tour2 = original.Tour2;
+      this.Position2 = original.Position2;
+      this.Length2 = original.Length2;
+
+      this.Individual = cloner.Clone(Individual) as AlbaEncoding;
+    }
 
     #region IVRPMove Members
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveEvaluator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveEvaluator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveEvaluator.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings.Alba;
 using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting {
@@ -47,4 +48,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaLambdaInterchangeMoveEvaluator(this, cloner);
+    }
+
+    private AlbaLambdaInterchangeMoveEvaluator(AlbaLambdaInterchangeMoveEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected override void EvaluateMove() {
       AlbaEncoding newSolution = LambdaInterchangeMoveParameter.ActualValue.Individual.Clone() as AlbaEncoding;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveGenerator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveGenerator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveGenerator.cs	(revision 4752)
@@ -29,4 +29,5 @@
 using HeuristicLab.Data;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -64,4 +65,8 @@
     }
 
+    protected AlbaLambdaInterchangeMoveGenerator(AlbaLambdaInterchangeMoveGenerator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected abstract AlbaLambdaInterchangeMove[] GenerateMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance, int lambda);
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveMaker.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveMaker.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveMaker.cs	(revision 4752)
@@ -27,4 +27,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -51,4 +52,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaLambdaInterchangeMoveMaker(this, cloner);
+    }
+
+    protected AlbaLambdaInterchangeMoveMaker(AlbaLambdaInterchangeMoveMaker original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     public static void Apply(AlbaEncoding solution, AlbaLambdaInterchangeMove move) {
       AlbaLambdaInterchangeManipulator.Apply(
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeMutliMoveGenerator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeMutliMoveGenerator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeMutliMoveGenerator.cs	(revision 4752)
@@ -29,4 +29,5 @@
 using HeuristicLab.Data;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -51,4 +52,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaStochasticLambdaInterchangeMultiMoveGenerator(this, cloner);
+    }
+
+    private AlbaStochasticLambdaInterchangeMultiMoveGenerator(AlbaStochasticLambdaInterchangeMultiMoveGenerator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected override AlbaLambdaInterchangeMove[] GenerateMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance, int lambda) {
       int sampleSize = SampleSizeParameter.ActualValue.Value;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeSingleMoveGenerator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeSingleMoveGenerator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeSingleMoveGenerator.cs	(revision 4752)
@@ -29,4 +29,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -53,4 +54,12 @@
       : base() {
         Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaStochasticLambdaInterchangeSingleMoveGenerator(this, cloner);
+    }
+
+    private AlbaStochasticLambdaInterchangeSingleMoveGenerator(AlbaStochasticLambdaInterchangeSingleMoveGenerator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaStochasticTranslocationSingleMoveGenerator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaStochasticTranslocationSingleMoveGenerator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaStochasticTranslocationSingleMoveGenerator.cs	(revision 4752)
@@ -29,4 +29,5 @@
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -63,4 +64,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaStochasticTranslocationSingleMoveGenerator(this, cloner);
+    }
+
+    private AlbaStochasticTranslocationSingleMoveGenerator(AlbaStochasticTranslocationSingleMoveGenerator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     public override IOperation Apply() {
       IOperation next = base.Apply();
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMove.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMove.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMove.cs	(revision 4752)
@@ -43,12 +43,18 @@
     }
 
-    public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
-      AlbaTranslocationMove clone = new AlbaTranslocationMove(
-        Index1, Index2, Index3);
-      if (Permutation != null)
-        clone.Permutation = Permutation.Clone() as AlbaEncoding;
+    [StorableConstructor]
+    protected AlbaTranslocationMove(bool deserializing) : base(deserializing) { }
 
-      cloner.RegisterClonedObject(this, clone);
-      return clone;
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaTranslocationMove(this, cloner);
+    }
+
+    protected AlbaTranslocationMove(AlbaTranslocationMove original, Cloner cloner)
+      : base(original, cloner) {
+        this.Index1 = original.Index1;
+        this.Index2 = original.Index2;
+        this.Index3 = original.Index3;
+
+        this.Permutation = cloner.Clone(Permutation) as AlbaEncoding;
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveEvaluator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveEvaluator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveEvaluator.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Problems.VehicleRouting.Encodings.Alba;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting {
@@ -47,4 +48,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaTranslocationMoveEvaluator(this, cloner);
+    }
+
+    private AlbaTranslocationMoveEvaluator(AlbaTranslocationMoveEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected override void EvaluateMove() {
       TranslocationMove move = TranslocationMoveParameter.ActualValue;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveGenerator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveGenerator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveGenerator.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -85,4 +86,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaTranslocationMoveGenerator(this, cloner);
+    }
+
+    private AlbaTranslocationMoveGenerator(AlbaTranslocationMoveGenerator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     public override IOperation Apply() {
       IOperation next = base.Apply();
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveHardTabuCriterion.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveHardTabuCriterion.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveHardTabuCriterion.cs	(revision 4752)
@@ -27,4 +27,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -70,4 +71,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaTranslocationMoveHardTabuCriterion(this, cloner);
+    }
+
+    private AlbaTranslocationMoveHardTabuCriterion(AlbaTranslocationMoveHardTabuCriterion original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     public override IOperation Apply() {
       IOperation next = base.Apply();
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveMaker.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveMaker.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveMaker.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -53,4 +54,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaTranslocationMoveMaker(this, cloner);
+    }
+
+    private AlbaTranslocationMoveMaker(AlbaTranslocationMoveMaker original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected override void PerformMove() {
       IVariable moveVariable = this.ExecutionContext.Scope.Variables[
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveSoftTabuCriterion.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveSoftTabuCriterion.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveSoftTabuCriterion.cs	(revision 4752)
@@ -27,4 +27,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -70,4 +71,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaTranslocationMoveSoftTabuCriterion(this, cloner);
+    }
+
+    private AlbaTranslocationMoveSoftTabuCriterion(AlbaTranslocationMoveSoftTabuCriterion original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     public override IOperation Apply() {
       IOperation next = base.Apply();
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveTabuMaker.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveTabuMaker.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveTabuMaker.cs	(revision 4752)
@@ -27,4 +27,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
@@ -70,4 +71,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaTranslocationMoveTabuMaker(this, cloner);
+    }
+
+    private AlbaTranslocationMoveTabuMaker(AlbaTranslocationMoveTabuMaker original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     public override IOperation Apply() {
       IOperation next = base.Apply();
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Crossovers/GVRCrossover.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Crossovers/GVRCrossover.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Crossovers/GVRCrossover.cs	(revision 4752)
@@ -29,4 +29,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.GVR {
@@ -43,4 +44,12 @@
     public GVRCrossover() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GVRCrossover(this, cloner);
+    }
+
+    private GVRCrossover(GVRCrossover original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/GVREncoding.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/GVREncoding.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/GVREncoding.cs	(revision 4752)
@@ -79,12 +79,4 @@
     }
     
-    public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
-      GVREncoding clone = new GVREncoding(ProblemInstance);
-      cloner.RegisterClonedObject(this, clone);
-      clone.Tours = (ItemList<Tour>)cloner.Clone(this.Tours);
-     
-      return clone;
-    }
-
     public GVREncoding(IVRPProblemInstance problemInstance)
       : base(problemInstance) {
@@ -94,4 +86,12 @@
     private GVREncoding(bool serializing)
       : base(serializing) {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GVREncoding(this, cloner);
+    }
+
+    protected GVREncoding(GVREncoding original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRDisplacementManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRDisplacementManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRDisplacementManipulator.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Data;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.GVR {
@@ -36,4 +37,12 @@
     public GVRDisplacementManipulator()
       : base() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GVRDisplacementManipulator(this, cloner);
+    }
+
+    private GVRDisplacementManipulator(GVRDisplacementManipulator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRInsertionManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRInsertionManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRInsertionManipulator.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.GVR {
@@ -35,4 +36,12 @@
     public GVRInsertionManipulator()
       : base() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GVRInsertionManipulator(this, cloner);
+    }
+
+    private GVRInsertionManipulator(GVRInsertionManipulator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRInversionManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRInversionManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRInversionManipulator.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.GVR {
@@ -37,4 +38,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GVRInversionManipulator(this, cloner);
+    }
+
+    private GVRInversionManipulator(GVRInversionManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected override void Manipulate(IRandom random, GVREncoding individual) {
       Tour tour = individual.Tours[random.Next(individual.Tours.Count)];
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRManipulator.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.GVR {
@@ -44,4 +45,8 @@
     }
 
+    protected GVRManipulator(GVRManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected abstract void Manipulate(IRandom random, GVREncoding individual);
    
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRSwapManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRSwapManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRSwapManipulator.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.GVR {
@@ -35,4 +36,12 @@
     public GVRSwapManipulator()
       : base() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GVRSwapManipulator(this, cloner);
+    }
+
+    private GVRSwapManipulator(GVRSwapManipulator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/MultiVRPSolutionCreator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/MultiVRPSolutionCreator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/MultiVRPSolutionCreator.cs	(revision 4752)
@@ -33,4 +33,5 @@
 using HeuristicLab.Problems.VehicleRouting.Variants;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
@@ -60,4 +61,12 @@
 
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MultiVRPSolutionCreator(this, cloner);
+    }
+
+    protected MultiVRPSolutionCreator(MultiVRPSolutionCreator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/VRPCreator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/VRPCreator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/VRPCreator.cs	(revision 4752)
@@ -30,4 +30,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
@@ -46,4 +47,8 @@
         Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours to be created."));
     }
+
+    protected VRPCreator(VRPCreator original, Cloner cloner)
+      : base(original, cloner) {
+    }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveEvaluator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveEvaluator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveEvaluator.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Variants;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting {
@@ -43,4 +44,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MultiVRPMoveEvaluator(this, cloner);
+    }
+
+    private MultiVRPMoveEvaluator(MultiVRPMoveEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected override void EvaluateMove() {
       IVRPMove move = VRPMoveParameter.ActualValue as IVRPMove;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveGenerator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveGenerator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveGenerator.cs	(revision 4752)
@@ -33,4 +33,5 @@
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Problems.VehicleRouting.Variants;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
@@ -86,4 +87,12 @@
       Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours."));
       Parameters.Add(new LookupParameter<IVRPMove>("VRPMove", "The generated moves."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MultiVRPMoveGenerator(this, cloner);
+    }
+
+    protected MultiVRPMoveGenerator(MultiVRPMoveGenerator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveMaker.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveMaker.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveMaker.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using System.Collections.Generic;
 using HeuristicLab.Problems.VehicleRouting.Variants;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.General{
@@ -45,4 +46,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MultiVRPMoveMaker(this, cloner);
+    }
+
+    protected MultiVRPMoveMaker(MultiVRPMoveMaker original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected override void PerformMove() {
       IVRPMove move = VRPMoveParameter.ActualValue as IVRPMove;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveEvaluator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveEvaluator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveEvaluator.cs	(revision 4752)
@@ -30,4 +30,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
@@ -51,4 +52,8 @@
       Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality of the solution."));
       Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The relative quality of the move."));
+    }
+
+    protected VRPMoveEvaluator(VRPMoveEvaluator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveGenerator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveGenerator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveGenerator.cs	(revision 4752)
@@ -30,4 +30,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
@@ -42,4 +43,8 @@
       : base() {
     }
+
+    protected VRPMoveGenerator(VRPMoveGenerator original, Cloner cloner)
+      : base(original, cloner) {
+    }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveMaker.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveMaker.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveMaker.cs	(revision 4752)
@@ -30,4 +30,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
@@ -49,4 +50,8 @@
       Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality of the solution."));
       Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The relative quality of the move."));
+    }
+
+    protected VRPMoveMaker(VRPMoveMaker original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveOperator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveOperator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveOperator.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Parameters;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
@@ -45,4 +46,8 @@
       Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
     }
+
+    protected VRPMoveOperator(VRPMoveOperator original, Cloner cloner)
+      : base(original, cloner) {
+    }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/PermutationEncoding.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/PermutationEncoding.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/PermutationEncoding.cs	(revision 4752)
@@ -40,10 +40,8 @@
     protected IVRPProblemInstance ProblemInstance { get; set; }
 
-    public override IDeepCloneable Clone(Cloner cloner) {
-      PermutationEncoding clone = (PermutationEncoding)base.Clone(cloner);
-
-      clone.ProblemInstance = (IVRPProblemInstance)cloner.Clone(ProblemInstance);
-
-      return clone;
+    protected PermutationEncoding(PermutationEncoding original, Cloner cloner)
+      : base(original, cloner) {
+        this.ProblemInstance = (IVRPProblemInstance)cloner.Clone(original.ProblemInstance);
+        this.readOnly = original.readOnly;
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/TourEncoding.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/TourEncoding.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/TourEncoding.cs	(revision 4752)
@@ -82,4 +82,10 @@
     }
 
+    protected TourEncoding(TourEncoding original, Cloner cloner)
+      : base(original, cloner) {
+       this.Tours = (ItemList<Tour>)cloner.Clone(original.Tours);
+       this.ProblemInstance = (IVRPProblemInstance)cloner.Clone(original.ProblemInstance);
+    }
+
     public static void ConvertFrom(IVRPEncoding encoding, TourEncoding solution, IVRPProblemInstance problemInstance) {
       solution.Tours = new ItemList<Tour>(encoding.GetTours());
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinCrossover.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinCrossover.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinCrossover.cs	(revision 4752)
@@ -29,4 +29,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -43,4 +44,8 @@
     public PotvinCrossover() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
+    }
+
+    protected PotvinCrossover(PotvinCrossover original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinRouteBasedCrossover.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinRouteBasedCrossover.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinRouteBasedCrossover.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -35,4 +36,12 @@
     public PotvinRouteBasedCrossover()
       : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PotvinRouteBasedCrossover(this, cloner);
+    }
+
+    private PotvinRouteBasedCrossover(PotvinRouteBasedCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
      
     protected override PotvinEncoding Crossover(IRandom random, PotvinEncoding parent1, PotvinEncoding parent2) {
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinSequenceBasedCrossover.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinSequenceBasedCrossover.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinSequenceBasedCrossover.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -35,4 +36,12 @@
     public PotvinSequenceBasedCrossover()
       : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PotvinSequenceBasedCrossover(this, cloner);
+    }
+
+    private PotvinSequenceBasedCrossover(PotvinSequenceBasedCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
         
     protected override PotvinEncoding Crossover(IRandom random, PotvinEncoding parent1, PotvinEncoding parent2) {
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinLocalSearchManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinLocalSearchManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinLocalSearchManipulator.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Data;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -40,4 +41,12 @@
     public PotvinLocalSearchManipulator() : base() {
       Parameters.Add(new ValueParameter<IntValue>("Iterations", "The number of max iterations.", new IntValue(100)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PotvinLocalSearchManipulator(this, cloner);
+    }
+
+    private PotvinLocalSearchManipulator(PotvinLocalSearchManipulator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinManipulator.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -42,4 +43,8 @@
     public PotvinManipulator() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
+    }
+
+    protected PotvinManipulator(PotvinManipulator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinOneLevelExchangeManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinOneLevelExchangeManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinOneLevelExchangeManipulator.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Data;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -35,4 +36,12 @@
 
     public PotvinOneLevelExchangeMainpulator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PotvinOneLevelExchangeMainpulator(this, cloner);
+    }
+
+    private PotvinOneLevelExchangeMainpulator(PotvinOneLevelExchangeMainpulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
     
     protected override void Manipulate(IRandom random, PotvinEncoding individual) {
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Data;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -35,4 +36,12 @@
 
     public PotvinTwoLevelExchangeManipulator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PotvinTwoLevelExchangeManipulator(this, cloner);
+    }
+
+    private PotvinTwoLevelExchangeManipulator(PotvinTwoLevelExchangeManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
     
     protected override void Manipulate(IRandom random, PotvinEncoding individual) {
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncoding.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncoding.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncoding.cs	(revision 4752)
@@ -39,12 +39,4 @@
     public List<int> Unrouted { get; set; }
 
-    public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
-      PotvinEncoding clone = new PotvinEncoding(ProblemInstance);
-      cloner.RegisterClonedObject(this, clone);
-      clone.Tours = (ItemList<Tour>)cloner.Clone(this.Tours);
-      clone.Unrouted = new List<int>(Unrouted);
-      return clone;
-    }
-
     public PotvinEncoding(IVRPProblemInstance instance)
       : base(instance) {
@@ -55,4 +47,13 @@
     private PotvinEncoding(bool serializing)
       : base(serializing) {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PotvinEncoding(this, cloner);
+    }
+
+    protected PotvinEncoding(PotvinEncoding original, Cloner cloner)
+      : base(original, cloner) {
+        this.Unrouted = new List<int>(original.Unrouted);
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsCrossover.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsCrossover.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsCrossover.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
@@ -44,4 +45,8 @@
       : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
+    }
+
+    protected PrinsCrossover(PrinsCrossover original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsPermutationCrossover.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsPermutationCrossover.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsPermutationCrossover.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
@@ -40,4 +41,12 @@
       : base() {
       Parameters.Add(new ValueLookupParameter<IPermutationCrossover>("InnerCrossover", "The permutation crossover.", new OrderCrossover()));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PrinsPermutationCrossover(this, cloner);
+    }
+
+    private PrinsPermutationCrossover(PrinsPermutationCrossover original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsExhaustiveLSManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsExhaustiveLSManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsExhaustiveLSManipulator.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Data;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
@@ -36,4 +37,12 @@
     public PrinsExhaustiveLSManipulator()
       : base() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PrinsExhaustiveLSManipulator(this, cloner);
+    }
+
+    private PrinsExhaustiveLSManipulator(PrinsExhaustiveLSManipulator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsLSManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsLSManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsLSManipulator.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Data;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
@@ -41,4 +42,8 @@
       : base() {
       Parameters.Add(new ValueParameter<IntValue>("Iterations", "The number of max iterations.", new IntValue(5)));
+    }
+
+    protected PrinsLSManipulator(PrinsLSManipulator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsManipulator.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
@@ -45,4 +46,8 @@
     }
 
+    protected PrinsManipulator(PrinsManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected abstract void Manipulate(IRandom random, PrinsEncoding individual);
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsPermutationManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsPermutationManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsPermutationManipulator.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
@@ -42,4 +43,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PrinsPermutationManipulator(this, cloner);
+    }
+
+    private PrinsPermutationManipulator(PrinsPermutationManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected override void Manipulate(IRandom random, PrinsEncoding individual) {
       InnerManipulatorParameter.ActualValue.PermutationParameter.ActualName = VRPToursParameter.ActualName;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsStochasticLSManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsStochasticLSManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsStochasticLSManipulator.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Data;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
@@ -41,4 +42,12 @@
       : base() {
         Parameters.Add(new ValueParameter<IntValue>("SampleSize", "The sample size.", new IntValue(200)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PrinsStochasticLSManipulator(this, cloner);
+    }
+
+    private PrinsStochasticLSManipulator(PrinsStochasticLSManipulator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/PrinsEncoding.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/PrinsEncoding.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/PrinsEncoding.cs	(revision 4752)
@@ -132,14 +132,4 @@
     }
     #endregion
-
-    public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
-      PrinsEncoding clone = new PrinsEncoding(
-        new Permutation(this.PermutationType, this.array), ProblemInstance);
-
-      cloner.RegisterClonedObject(this, clone);
-      clone.readOnly = readOnly;
-      return clone;
-    }
-
     public PrinsEncoding(Permutation permutation, IVRPProblemInstance problemInstance)
       : base(permutation, problemInstance) {
@@ -149,4 +139,12 @@
     private PrinsEncoding(bool serializing)
       : base(serializing) {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PrinsEncoding(this, cloner);
+    }
+
+    protected PrinsEncoding(PrinsEncoding original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Tour.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Tour.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Tour.cs	(revision 4752)
@@ -39,8 +39,10 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      Tour clone = base.Clone(cloner) as Tour;
-      clone.Stops = new List<int>(Stops);
+      return new Tour(this, cloner);
+    }
 
-      return clone;
+    protected Tour(Tour original, Cloner cloner)
+      : base(original, cloner) {
+        this.Stops = new List<int>(original.Stops);
     }
   }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/VRPOperator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/VRPOperator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/VRPOperator.cs	(revision 4752)
@@ -29,4 +29,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Operators;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings {
@@ -49,4 +50,8 @@
         Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
     }
+
+    protected VRPOperator(VRPOperator original, Cloner cloner)
+      : base(original, cloner) {
+    }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuCrossover.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuCrossover.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuCrossover.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
@@ -43,4 +44,8 @@
       : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
+    }
+
+    protected ZhuCrossover(ZhuCrossover original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover1.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover1.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover1.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
@@ -35,4 +36,12 @@
     public ZhuHeuristicCrossover1()
       : base() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ZhuHeuristicCrossover1(this, cloner);
+    }
+
+    private ZhuHeuristicCrossover1(ZhuHeuristicCrossover1 original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover2.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover2.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover2.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Data;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
@@ -36,4 +37,12 @@
     public ZhuHeuristicCrossover2()
       : base() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ZhuHeuristicCrossover2(this, cloner);
+    }
+
+    private ZhuHeuristicCrossover2(ZhuHeuristicCrossover2 original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover1.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover1.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover1.cs	(revision 4752)
@@ -26,4 +26,5 @@
 using HeuristicLab.Data;
 using HeuristicLab.Problems.VehicleRouting.Variants;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
@@ -36,4 +37,12 @@
     public ZhuMergeCrossover1()
       : base() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ZhuMergeCrossover1(this, cloner);
+    }
+
+    private ZhuMergeCrossover1(ZhuMergeCrossover1 original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover2.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover2.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover2.cs	(revision 4752)
@@ -27,4 +27,5 @@
 using System.Collections.Generic;
 using HeuristicLab.Problems.VehicleRouting.Variants;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
@@ -37,4 +38,12 @@
     public ZhuMergeCrossover2()
       : base() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ZhuMergeCrossover2(this, cloner);
+    }
+
+    private ZhuMergeCrossover2(ZhuMergeCrossover2 original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuPermutationCrossover.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuPermutationCrossover.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuPermutationCrossover.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
@@ -40,4 +41,12 @@
       : base() {
       Parameters.Add(new ValueLookupParameter<IPermutationCrossover>("InnerCrossover", "The permutation crossover.", new PartiallyMatchedCrossover()));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PrinsPermutationCrossover(this, cloner);
+    }
+
+    private PrinsPermutationCrossover(PrinsPermutationCrossover original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Manipulators/ZhuManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Manipulators/ZhuManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Manipulators/ZhuManipulator.cs	(revision 4752)
@@ -28,4 +28,5 @@
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
@@ -45,4 +46,8 @@
     }
 
+    protected ZhuManipulator(ZhuManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected abstract void Manipulate(IRandom random, ZhuEncoding individual);
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Manipulators/ZhuPermutationManipulator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Manipulators/ZhuPermutationManipulator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Manipulators/ZhuPermutationManipulator.cs	(revision 4752)
@@ -25,4 +25,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
@@ -42,4 +43,12 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ZhuPermutationManipulator(this, cloner);
+    }
+
+    private ZhuPermutationManipulator(ZhuPermutationManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
     protected override void Manipulate(IRandom random, ZhuEncoding individual) {
       InnerManipulatorParameter.ActualValue.PermutationParameter.ActualName = VRPToursParameter.ActualName;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/ZhuEncoding.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/ZhuEncoding.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/ZhuEncoding.cs	(revision 4752)
@@ -93,15 +93,14 @@
     #endregion
 
-    public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
-      ZhuEncoding clone = new ZhuEncoding(
-        new Permutation(this.PermutationType, this.array), ProblemInstance);
-
-      cloner.RegisterClonedObject(this, clone);
-      clone.readOnly = readOnly;
-      return clone;
+    public ZhuEncoding(Permutation permutation, IVRPProblemInstance problemInstance)
+      : base(permutation, problemInstance) {
     }
 
-    public ZhuEncoding(Permutation permutation, IVRPProblemInstance problemInstance)
-      : base(permutation, problemInstance) {
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ZhuEncoding(this, cloner);
+    }
+
+    protected ZhuEncoding(ZhuEncoding original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPEvaluator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPEvaluator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPEvaluator.cs	(revision 4752)
@@ -33,4 +33,5 @@
 using HeuristicLab.Problems.VehicleRouting.Variants;
 using HeuristicLab.Problems.VehicleRouting.Encodings;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.ProblemInstances {
@@ -105,4 +106,12 @@
       Parameters.Add(new LookupParameter<DoubleValue>("Overload", "The overload."));
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CVRPEvaluator(this, cloner);
+    }
+
+    protected CVRPEvaluator(CVRPEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPProblemInstance.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPProblemInstance.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPProblemInstance.cs	(revision 4752)
@@ -32,4 +32,5 @@
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Problems.VehicleRouting.Variants;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.ProblemInstances {
@@ -77,4 +78,12 @@
       Parameters.Add(new ValueParameter<DoubleValue>("EvalOverloadPenalty", "The overload penalty considered in the evaluation.", new DoubleValue(100)));
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CVRPProblemInstance(this, cloner);
+    }
+
+    protected CVRPProblemInstance(CVRPProblemInstance original, Cloner cloner)
+      : base(original, cloner) {
+    }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPTWEvaluator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPTWEvaluator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPTWEvaluator.cs	(revision 4752)
@@ -33,4 +33,5 @@
 using HeuristicLab.Problems.VehicleRouting.Variants;
 using HeuristicLab.Problems.VehicleRouting.Encodings;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.ProblemInstances {
@@ -144,4 +145,12 @@
       Parameters.Add(new LookupParameter<DoubleValue>("TravelTime", "The travel time."));
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CVRPTWEvaluator(this, cloner);
+    }
+
+    protected CVRPTWEvaluator(CVRPTWEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPTWProblemInstance.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPTWProblemInstance.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPTWProblemInstance.cs	(revision 4752)
@@ -32,4 +32,5 @@
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Problems.VehicleRouting.Variants;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.ProblemInstances {
@@ -103,4 +104,12 @@
       Parameters.Add(new ValueParameter<DoubleValue>("EvalTardinessPenalty", "The tardiness penalty considered in the evaluation.", new DoubleValue(100)));
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CVRPTWProblemInstance(this, cloner);
+    }
+
+    protected CVRPTWProblemInstance(CVRPTWProblemInstance original, Cloner cloner)
+      : base(original, cloner) {
+    }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPEvaluator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPEvaluator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPEvaluator.cs	(revision 4752)
@@ -33,4 +33,5 @@
 using HeuristicLab.Problems.VehicleRouting.Variants;
 using HeuristicLab.Problems.VehicleRouting.Encodings;
+using HeuristicLab.Common;
 
 
@@ -73,4 +74,12 @@
     public SingleDepotVRPEvaluator() {
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SingleDepotVRPEvaluator(this, cloner);
+    }
+
+    protected SingleDepotVRPEvaluator(SingleDepotVRPEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPProblemInstance.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPProblemInstance.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPProblemInstance.cs	(revision 4752)
@@ -32,4 +32,5 @@
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Problems.VehicleRouting.Variants;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.ProblemInstances {
@@ -70,4 +71,12 @@
     public SingleDepotVRPProblemInstance() {
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SingleDepotVRPProblemInstance(this, cloner);
+    }
+
+    protected SingleDepotVRPProblemInstance(SingleDepotVRPProblemInstance original, Cloner cloner)
+      : base(original, cloner) {
+    }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPEvaluator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPEvaluator.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPEvaluator.cs	(revision 4752)
@@ -33,4 +33,5 @@
 using HeuristicLab.Problems.VehicleRouting.Variants;
 using HeuristicLab.Problems.VehicleRouting.Encodings;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.ProblemInstances {
@@ -64,4 +65,8 @@
       Parameters.Add(new LookupParameter<DoubleValue>("Distance", "The distance."));
       Parameters.Add(new LookupParameter<DoubleValue>("VehiclesUtilized", "The number of vehicles utilized."));
+    }
+
+    protected VRPEvaluator(VRPEvaluator original, Cloner cloner)
+      : base(original, cloner) {
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPProblemInstance.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPProblemInstance.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPProblemInstance.cs	(revision 4752)
@@ -31,4 +31,5 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.VehicleRouting.ProblemInstances {
@@ -192,4 +193,8 @@
       Parameters.Add(new ValueParameter<IVRPEvaluator>("Evaluator", "The operator which should be used to evaluate VRP solutions.", Evaluator));
     }
+
+    protected VRPProblemInstance(VRPProblemInstance original, Cloner cloner)
+      : base(original, cloner) {
+    }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs	(revision 4751)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs	(revision 4752)
@@ -122,8 +122,11 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      VehicleRoutingProblem clone = (VehicleRoutingProblem)base.Clone(cloner);
-      clone.operators = operators.Select(x => (IOperator)cloner.Clone(x)).ToList();
-      clone.AttachEventHandlers();
-      return clone;
+      return new VehicleRoutingProblem(this, cloner);
+    }
+
+    private VehicleRoutingProblem(VehicleRoutingProblem original, Cloner cloner)
+      : base(original, cloner) {
+      this.operators = original.operators.Select(x => (IOperator)cloner.Clone(x)).ToList();
+      this.AttachEventHandlers();
     }
 
Index: /branches/VRP/HeuristicLab/3.3/Files.txt
===================================================================
--- /branches/VRP/HeuristicLab/3.3/Files.txt	(revision 4751)
+++ /branches/VRP/HeuristicLab/3.3/Files.txt	(revision 4752)
@@ -67,4 +67,5 @@
 HeuristicLab.Tracing\3.3:HeuristicLab.Tracing-3.3.dll
 HeuristicLab.Tracing\3.3:HeuristicLab.log4net.xml
+HeuristicLab.Visualization.ChartControlsExtensions\3.3:HeuristicLab.Visualization.ChartControlsExtensions-3.3.dll
 
 ;External Libraries
