Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/BestAverageWorstVRPToursAnalyzer.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestAverageWorstTours/BestAverageWorstVRPToursAnalyzer.cs	(revision 4539)
+++ 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 4539)
+++ 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 4539)
+++ 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 4539)
+++ 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 4539)
+++ 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 4539)
+++ 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 4539)
+++ 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 4539)
+++ 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 4539)
+++ 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 4539)
+++ 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 4539)
+++ 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 4539)
+++ 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 4539)
+++ 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();
     }
 
