Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting.Views/3.4/VRPProblemInstanceView.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting.Views/3.4/VRPProblemInstanceView.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting.Views/3.4/VRPProblemInstanceView.cs	(revision 17698)
@@ -37,6 +37,6 @@
     }
 
-    private IVRPEncoding solution;
-    public IVRPEncoding Solution {
+    private IVRPEncodedSolution solution;
+    public IVRPEncodedSolution Solution {
       get {
         return solution;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/BestVRPSolutionAnalyzer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/BestVRPSolutionAnalyzer.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/BestVRPSolutionAnalyzer.cs	(revision 17698)
@@ -42,6 +42,6 @@
       get { return (ILookupParameter<IVRPProblemInstance>)Parameters["ProblemInstance"]; }
     }
-    public ScopeTreeLookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ScopeTreeLookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ScopeTreeLookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ScopeTreeLookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
 
@@ -83,5 +83,5 @@
       : base() {
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The problem instance."));
-      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncoding>("VRPTours", "The VRP tours which should be evaluated."));
+      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours which should be evaluated."));
 
       Parameters.Add(new LookupParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this VRP instance."));
@@ -119,5 +119,5 @@
     public override IOperation Apply() {
       IVRPProblemInstance problemInstance = ProblemInstanceParameter.ActualValue;
-      ItemArray<IVRPEncoding> solutions = VRPToursParameter.ActualValue;
+      ItemArray<IVRPEncodedSolution> solutions = VRPToursParameter.ActualValue;
       ResultCollection results = ResultsParameter.ActualValue;
 
@@ -127,8 +127,8 @@
 
       int i = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
-      IVRPEncoding best = solutions[i].Clone() as IVRPEncoding;
+      IVRPEncodedSolution best = solutions[i].Clone() as IVRPEncodedSolution;
       VRPSolution solution = BestSolutionParameter.ActualValue;
       if (solution == null) {
-        solution = new VRPSolution(problemInstance, best.Clone() as IVRPEncoding, new DoubleValue(qualities[i].Value));
+        solution = new VRPSolution(problemInstance, best.Clone() as IVRPEncodedSolution, new DoubleValue(qualities[i].Value));
         BestSolutionParameter.ActualValue = solution;
         results.Add(new Result("Best VRP Solution", solution));
@@ -140,5 +140,5 @@
         if (qualities[i].Value <= eval.Quality) {
           solution.ProblemInstance = problemInstance;
-          solution.Solution = best.Clone() as IVRPEncoding;
+          solution.Solution = best.Clone() as IVRPEncodedSolution;
           solution.Quality.Value = qualities[i].Value;
           (results["Best VRP Solution Distance"].Value as DoubleValue).Value = distances[i].Value;
@@ -150,8 +150,8 @@
       if (idx != null) {
         int j = idx.index;
-        IVRPEncoding bestFeasible = solutions[j].Clone() as IVRPEncoding;
+        IVRPEncodedSolution bestFeasible = solutions[j].Clone() as IVRPEncodedSolution;
         VRPSolution validSolution = BestValidSolutionParameter.ActualValue;
         if (validSolution == null) {
-          validSolution = new VRPSolution(problemInstance, best.Clone() as IVRPEncoding, new DoubleValue(qualities[j].Value));
+          validSolution = new VRPSolution(problemInstance, best.Clone() as IVRPEncodedSolution, new DoubleValue(qualities[j].Value));
           BestValidSolutionParameter.ActualValue = validSolution;
           if (results.ContainsKey("Best valid VRP Solution"))
@@ -166,5 +166,5 @@
             if (ProblemInstanceParameter.ActualValue.Feasible(best)) {
               validSolution.ProblemInstance = problemInstance;
-              validSolution.Solution = best.Clone() as IVRPEncoding;
+              validSolution.Solution = best.Clone() as IVRPEncodedSolution;
               validSolution.Quality.Value = qualities[j].Value;
               (results["Best valid VRP Solution Distance"].Value as DoubleValue).Value = distances[j].Value;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/Capacitated/BestCapacitatedVRPSolutionAnalyzer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/Capacitated/BestCapacitatedVRPSolutionAnalyzer.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/Capacitated/BestCapacitatedVRPSolutionAnalyzer.cs	(revision 17698)
@@ -42,6 +42,6 @@
       get { return (ILookupParameter<IVRPProblemInstance>)Parameters["ProblemInstance"]; }
     }
-    public ScopeTreeLookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ScopeTreeLookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ScopeTreeLookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ScopeTreeLookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
@@ -70,5 +70,5 @@
       : base() {
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The problem instance."));
-      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncoding>("VRPTours", "The VRP tours which should be evaluated."));
+      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours which should be evaluated."));
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the VRP solutions which should be analyzed."));
 
@@ -89,5 +89,5 @@
     public override IOperation Apply() {
       IVRPProblemInstance problemInstance = ProblemInstanceParameter.ActualValue;
-      ItemArray<IVRPEncoding> solutions = VRPToursParameter.ActualValue;
+      ItemArray<IVRPEncodedSolution> solutions = VRPToursParameter.ActualValue;
       ResultCollection results = ResultsParameter.ActualValue;
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/PickupAndDelivery/BestPickupAndDeliveryVRPSolutionAnalyzer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/PickupAndDelivery/BestPickupAndDeliveryVRPSolutionAnalyzer.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/PickupAndDelivery/BestPickupAndDeliveryVRPSolutionAnalyzer.cs	(revision 17698)
@@ -42,6 +42,6 @@
       get { return (ILookupParameter<IVRPProblemInstance>)Parameters["ProblemInstance"]; }
     }
-    public ScopeTreeLookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ScopeTreeLookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ScopeTreeLookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ScopeTreeLookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
@@ -70,5 +70,5 @@
       : base() {
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The problem instance."));
-      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncoding>("VRPTours", "The VRP tours which should be evaluated."));
+      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours which should be evaluated."));
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the VRP solutions which should be analyzed."));
 
@@ -89,5 +89,5 @@
     public override IOperation Apply() {
       IVRPProblemInstance problemInstance = ProblemInstanceParameter.ActualValue;
-      ItemArray<IVRPEncoding> solutions = VRPToursParameter.ActualValue;
+      ItemArray<IVRPEncodedSolution> solutions = VRPToursParameter.ActualValue;
       ResultCollection results = ResultsParameter.ActualValue;
 
@@ -97,5 +97,5 @@
       int i = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
 
-      IVRPEncoding best = solutions[i] as IVRPEncoding;
+      IVRPEncodedSolution best = solutions[i] as IVRPEncodedSolution;
       VRPSolution solution = BestSolutionParameter.ActualValue;
       if (solution != null) {
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/TimeWindowed/BestTimeWindowedVRPSolutionAnalyzer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/TimeWindowed/BestTimeWindowedVRPSolutionAnalyzer.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/TimeWindowed/BestTimeWindowedVRPSolutionAnalyzer.cs	(revision 17698)
@@ -42,6 +42,6 @@
       get { return (ILookupParameter<IVRPProblemInstance>)Parameters["ProblemInstance"]; }
     }
-    public ScopeTreeLookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ScopeTreeLookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ScopeTreeLookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ScopeTreeLookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
@@ -73,5 +73,5 @@
       : base() {
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The problem instance."));
-      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncoding>("VRPTours", "The VRP tours which should be evaluated."));
+      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours which should be evaluated."));
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the VRP solutions which should be analyzed."));
 
@@ -93,5 +93,5 @@
     public override IOperation Apply() {
       IVRPProblemInstance problemInstance = ProblemInstanceParameter.ActualValue;
-      ItemArray<IVRPEncoding> solutions = VRPToursParameter.ActualValue;
+      ItemArray<IVRPEncodedSolution> solutions = VRPToursParameter.ActualValue;
       ResultCollection results = ResultsParameter.ActualValue;
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/Capacitated/CapacityRelaxationVRPAnalyzer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/Capacitated/CapacityRelaxationVRPAnalyzer.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/Capacitated/CapacityRelaxationVRPAnalyzer.cs	(revision 17698)
@@ -40,6 +40,6 @@
       get { return (ILookupParameter<IVRPProblemInstance>)Parameters["ProblemInstance"]; }
     }
-    public ScopeTreeLookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ScopeTreeLookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ScopeTreeLookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ScopeTreeLookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
@@ -78,5 +78,5 @@
       : base() {
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The problem instance."));
-      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncoding>("VRPTours", "The VRP tours which should be evaluated."));
+      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours which should be evaluated."));
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the VRP solutions which should be analyzed."));
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/PickupAndDelivery/PickupViolationsRelaxationVRPAnalyzer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/PickupAndDelivery/PickupViolationsRelaxationVRPAnalyzer.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/PickupAndDelivery/PickupViolationsRelaxationVRPAnalyzer.cs	(revision 17698)
@@ -40,6 +40,6 @@
       get { return (ILookupParameter<IVRPProblemInstance>)Parameters["ProblemInstance"]; }
     }
-    public ScopeTreeLookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ScopeTreeLookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ScopeTreeLookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ScopeTreeLookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
@@ -78,5 +78,5 @@
       : base() {
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The problem instance."));
-      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncoding>("VRPTours", "The VRP tours which should be evaluated."));
+      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours which should be evaluated."));
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the VRP solutions which should be analyzed."));
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/TimeWindowed/TimeWindowRelaxationVRPAnalyzer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/TimeWindowed/TimeWindowRelaxationVRPAnalyzer.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/TimeWindowed/TimeWindowRelaxationVRPAnalyzer.cs	(revision 17698)
@@ -40,6 +40,6 @@
       get { return (ILookupParameter<IVRPProblemInstance>)Parameters["ProblemInstance"]; }
     }
-    public ScopeTreeLookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ScopeTreeLookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ScopeTreeLookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ScopeTreeLookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
@@ -78,5 +78,5 @@
       : base() {
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The problem instance."));
-      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncoding>("VRPTours", "The VRP tours which should be evaluated."));
+      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours which should be evaluated."));
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the VRP solutions which should be analyzed."));
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/VRPSolution.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/VRPSolution.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/VRPSolution.cs	(revision 17698)
@@ -53,6 +53,6 @@
     }
     [Storable]
-    private IVRPEncoding solution;
-    public IVRPEncoding Solution {
+    private IVRPEncodedSolution solution;
+    public IVRPEncodedSolution Solution {
       get { return solution; }
       set {
@@ -81,5 +81,5 @@
     public VRPSolution() : base() { }
 
-    public VRPSolution(IVRPProblemInstance problemInstance, IVRPEncoding solution, DoubleValue quality)
+    public VRPSolution(IVRPProblemInstance problemInstance, IVRPEncodedSolution solution, DoubleValue quality)
       : base() {
       this.problemInstance = problemInstance;
@@ -106,5 +106,5 @@
     private VRPSolution(VRPSolution original, Cloner cloner)
       : base(original, cloner) {
-      this.solution = (IVRPEncoding)cloner.Clone(original.solution);
+      this.solution = (IVRPEncodedSolution)cloner.Clone(original.solution);
       this.quality = (DoubleValue)cloner.Clone(original.quality);
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/AlbaEncodedSolution.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/AlbaEncodedSolution.cs	(revision 17698)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/AlbaEncodedSolution.cs	(revision 17698)
@@ -0,0 +1,178 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Problems.VehicleRouting.Interfaces;
+
+namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
+  [Item("AlbaEncodedSolution", "Represents an Alba encoded solution for the VRP. It is implemented as described in Alba, E. and Dorronsoro, B. (2004). Solving the Vehicle Routing Problem by Using Cellular Genetic Algorithms.")]
+  [StorableType("8BB9735D-8371-46C1-B843-A6864B2ACDA5")]
+  public class AlbaEncodedSolution : General.PermutationEncoding {
+    #region IVRPEncoding Members
+    public override List<Tour> GetTours() {
+      Repair();
+      List<Tour> result = new List<Tour>();
+
+      int cities = ProblemInstance.Cities.Value;
+
+      Tour tour = new Tour();
+      for (int i = 0; i < this.array.Length; i++) {
+        if (this.array[i] >= cities) {
+          if (tour.Stops.Count > 0) {
+            result.Add(tour);
+
+            tour = new Tour();
+          }
+        } else {
+          tour.Stops.Add(this.array[i] + 1);
+        }
+      }
+
+      if (tour.Stops.Count > 0) {
+        result.Add(tour);
+      }
+
+      return result;
+    }
+
+    public override int GetVehicleAssignment(int tour) {
+      int vehicleAssignment = -1;
+      Tour currentTour = GetTours()[tour];
+
+      int lastStop = currentTour.Stops[
+        currentTour.Stops.Count - 1] - 1;
+
+      int lastStopIndex = this.IndexOf(lastStop);
+
+      if (lastStopIndex == this.Length - 1) {
+        int i = this.Length - 1;
+
+        while (vehicleAssignment == -1) {
+          if (this.array[i] >= ProblemInstance.Cities.Value) {
+            vehicleAssignment = this.array[i] - ProblemInstance.Cities.Value;
+          }
+
+          i--;
+        }
+      } else
+        vehicleAssignment = this[lastStopIndex + 1] - this.ProblemInstance.Cities.Value;
+
+      return vehicleAssignment;
+    }
+    #endregion
+
+    public void Repair() {
+      int cities = ProblemInstance.Cities.Value;
+
+      if (this[this.Length - 1] < cities) {
+        int index = this.Length - 2;
+        while (this[index] < cities) {
+          index--;
+        }
+
+        int vehicle = this[index];
+        for (int i = index; i < this.Length - 1; i++)
+          this[i] = this[i + 1];
+        this[Length - 1] = vehicle;
+      }
+    }
+
+    public AlbaEncodedSolution(Permutation permutation, IVRPProblemInstance instance)
+      : base(permutation, instance) {
+    }
+
+    [StorableConstructor]
+    protected AlbaEncodedSolution(StorableConstructorFlag _) : base(_) {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlbaEncodedSolution(this, cloner);
+    }
+
+    protected AlbaEncodedSolution(AlbaEncodedSolution original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public static AlbaEncodedSolution ConvertFrom(List<int> routeParam, IVRPProblemInstance instance) {
+      List<int> route = new List<int>(routeParam);
+
+      int cities = instance.Cities.Value;
+
+      for (int i = 0; i < route.Count; i++) {
+        if (route[i] <= 0) {
+          int vehicle = -route[i];
+          route[i] = cities + vehicle;
+        } else {
+          route[i] = route[i] - 1;
+        }
+      }
+
+      return new AlbaEncodedSolution(
+        new Permutation(PermutationTypes.RelativeUndirected, route.ToArray()),
+        instance);
+    }
+
+    public static AlbaEncodedSolution ConvertFrom(IVRPEncodedSolution encoding, IVRPProblemInstance instance) {
+      List<Tour> tours = encoding.GetTours();
+
+      int cities = 0;
+      foreach (Tour tour in tours) {
+        cities += tour.Stops.Count;
+      }
+
+      int emptyVehicles = instance.Vehicles.Value - tours.Count;
+
+      int[] array = new int[cities + tours.Count + emptyVehicles];
+      int delimiter = 0;
+      int arrayIndex = 0;
+
+      foreach (Tour tour in tours) {
+        foreach (int city in tour.Stops) {
+          array[arrayIndex] = city - 1;
+          arrayIndex++;
+        }
+
+        if (arrayIndex != array.Length) {
+          array[arrayIndex] = cities + encoding.GetVehicleAssignment(delimiter);
+
+          delimiter++;
+          arrayIndex++;
+        }
+      }
+
+      for (int i = 0; i < emptyVehicles; i++) {
+        array[arrayIndex] = cities + encoding.GetVehicleAssignment(delimiter);
+
+        delimiter++;
+        arrayIndex++;
+      }
+
+      AlbaEncodedSolution solution = new AlbaEncodedSolution(new Permutation(PermutationTypes.RelativeUndirected, new IntArray(array)), instance);
+
+      return solution;
+    }
+  }
+}
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/AlbaEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/AlbaEncoding.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/AlbaEncoding.cs	(revision 17698)
@@ -20,159 +20,60 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
+using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Encodings.PermutationEncoding;
-using HEAL.Attic;
-using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
-  [Item("AlbaEncoding", "Represents an Alba encoding of VRP solutions. It is implemented as described in Alba, E. and Dorronsoro, B. (2004). Solving the Vehicle Routing Problem by Using Cellular Genetic Algorithms.")]
-  [StorableType("8BB9735D-8371-46C1-B843-A6864B2ACDA5")]
-  public class AlbaEncoding : General.PermutationEncoding {
-    #region IVRPEncoding Members
-    public override List<Tour> GetTours() {
-      Repair();
-      List<Tour> result = new List<Tour>();
+  [Item("AlbaEncoding", "Represents the encoding for Alba encoded solutions.")]
+  [StorableType("9ff9f959-31d2-44e5-8a5e-b122220535c2")]
+  public class AlbaEncoding : Encoding<AlbaEncodedSolution>, IVRPEncoding<AlbaEncodedSolution> {
 
-      int cities = ProblemInstance.Cities.Value;
-
-      Tour tour = new Tour();
-      for (int i = 0; i < this.array.Length; i++) {
-        if (this.array[i] >= cities) {
-          if (tour.Stops.Count > 0) {
-            result.Add(tour);
-
-            tour = new Tour();
-          }
-        } else {
-          tour.Stops.Add(this.array[i] + 1);
-        }
-      }
-
-      if (tour.Stops.Count > 0) {
-        result.Add(tour);
-      }
-
-      return result;
+    [StorableConstructor]
+    private AlbaEncoding(StorableConstructorFlag _) : base(_) { }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      DiscoverOperators();
     }
 
-    public override int GetVehicleAssignment(int tour) {
-      int vehicleAssignment = -1;
-      Tour currentTour = GetTours()[tour];
+    public override IDeepCloneable Clone(Cloner cloner) { return new AlbaEncoding(this, cloner); }
+    private AlbaEncoding(AlbaEncoding original, Cloner cloner) : base(original, cloner) { }
 
-      int lastStop = currentTour.Stops[
-        currentTour.Stops.Count - 1] - 1;
 
-      int lastStopIndex = this.IndexOf(lastStop);
+    public AlbaEncoding() : this("VRPTours") { }
+    public AlbaEncoding(string name) : base(name) {
+      DiscoverOperators();
+    }
 
-      if (lastStopIndex == this.Length - 1) {
-        int i = this.Length - 1;
+    #region Operator Discovery
+    private static readonly IEnumerable<Type> encodingSpecificOperatorTypes;
+    static AlbaEncoding() {
+      encodingSpecificOperatorTypes = new List<Type>() {
+          typeof (IAlbaOperator)
+      };
+    }
+    private void DiscoverOperators() {
+      var assembly = typeof(IAlbaOperator).Assembly;
+      var discoveredTypes = ApplicationManager.Manager.GetTypes(encodingSpecificOperatorTypes, assembly, true, false, false);
+      var operators = discoveredTypes.Select(t => (IOperator)Activator.CreateInstance(t));
+      var newOperators = operators.Except(Operators, new TypeEqualityComparer<IOperator>()).ToList();
 
-        while (vehicleAssignment == -1) {
-          if (this.array[i] >= ProblemInstance.Cities.Value) {
-            vehicleAssignment = this.array[i] - ProblemInstance.Cities.Value;
-          }
-
-          i--;
-        }
-      } else
-        vehicleAssignment = this[lastStopIndex + 1] - this.ProblemInstance.Cities.Value;
-
-      return vehicleAssignment;
+      ConfigureOperators(newOperators);
+      foreach (var @operator in newOperators)
+        AddOperator(@operator);
     }
     #endregion
 
-    public void Repair() {
-      int cities = ProblemInstance.Cities.Value;
-
-      if (this[this.Length - 1] < cities) {
-        int index = this.Length - 2;
-        while (this[index] < cities) {
-          index--;
-        }
-
-        int vehicle = this[index];
-        for (int i = index; i < this.Length - 1; i++)
-          this[i] = this[i + 1];
-        this[Length - 1] = vehicle;
-      }
+    public override void ConfigureOperators(IEnumerable<IItem> operators) {
+      base.ConfigureOperators(operators);
     }
 
-    public AlbaEncoding(Permutation permutation, IVRPProblemInstance instance)
-      : base(permutation, instance) {
-    }
+    #region specific operator wiring
 
-    [StorableConstructor]
-    protected AlbaEncoding(StorableConstructorFlag _) : base(_) {
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new AlbaEncoding(this, cloner);
-    }
-
-    protected AlbaEncoding(AlbaEncoding original, Cloner cloner)
-      : base(original, cloner) {
-    }
-
-    public static AlbaEncoding ConvertFrom(List<int> routeParam, IVRPProblemInstance instance) {
-      List<int> route = new List<int>(routeParam);
-
-      int cities = instance.Cities.Value;
-
-      for (int i = 0; i < route.Count; i++) {
-        if (route[i] <= 0) {
-          int vehicle = -route[i];
-          route[i] = cities + vehicle;
-        } else {
-          route[i] = route[i] - 1;
-        }
-      }
-
-      return new AlbaEncoding(
-        new Permutation(PermutationTypes.RelativeUndirected, route.ToArray()),
-        instance);
-    }
-
-    public static AlbaEncoding ConvertFrom(IVRPEncoding encoding, IVRPProblemInstance instance) {
-      List<Tour> tours = encoding.GetTours();
-
-      int cities = 0;
-      foreach (Tour tour in tours) {
-        cities += tour.Stops.Count;
-      }
-
-      int emptyVehicles = instance.Vehicles.Value - tours.Count;
-
-      int[] array = new int[cities + tours.Count + emptyVehicles];
-      int delimiter = 0;
-      int arrayIndex = 0;
-
-      foreach (Tour tour in tours) {
-        foreach (int city in tour.Stops) {
-          array[arrayIndex] = city - 1;
-          arrayIndex++;
-        }
-
-        if (arrayIndex != array.Length) {
-          array[arrayIndex] = cities + encoding.GetVehicleAssignment(delimiter);
-
-          delimiter++;
-          arrayIndex++;
-        }
-      }
-
-      for (int i = 0; i < emptyVehicles; i++) {
-        array[arrayIndex] = cities + encoding.GetVehicleAssignment(delimiter);
-
-        delimiter++;
-        arrayIndex++;
-      }
-
-      AlbaEncoding solution = new AlbaEncoding(new Permutation(PermutationTypes.RelativeUndirected, new IntArray(array)), instance);
-
-      return solution;
-    }
+    #endregion
   }
 }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/AlbaCreator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/AlbaCreator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/AlbaCreator.cs	(revision 17698)
@@ -20,7 +20,8 @@
 #endregion
 
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HEAL.Attic;
+using HeuristicLab.Optimization;
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
@@ -29,5 +30,5 @@
   [Item("AlbaCreator", "A VRP creator.")]
   [StorableType("95DC1B24-02C9-4AF0-8A00-21A47AFB9E39")]
-  public abstract class AlbaCreator : VRPCreator, IAlbaOperator, IVRPCreator {
+  public abstract class AlbaCreator : VRPCreator, IAlbaOperator, IVRPCreator, ISolutionCreator<AlbaEncodedSolution> {
     public override bool CanChangeName {
       get { return false; }
@@ -46,5 +47,5 @@
 
     public override IOperation InstrumentedApply() {
-      (VRPToursParameter.ActualValue as AlbaEncoding).Repair();
+      (VRPToursParameter.ActualValue as AlbaEncodedSolution).Repair();
 
       return base.InstrumentedApply();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/RandomCreator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/RandomCreator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Creators/RandomCreator.cs	(revision 17698)
@@ -88,5 +88,5 @@
     public override IOperation InstrumentedApply() {
       //choose default encoding here
-      VRPToursParameter.ActualValue = AlbaEncoding.ConvertFrom(CreateSolution(), ProblemInstance);
+      VRPToursParameter.ActualValue = AlbaEncodedSolution.ConvertFrom(CreateSolution(), ProblemInstance);
 
       return base.InstrumentedApply();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Crossovers/AlbaCrossover.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Crossovers/AlbaCrossover.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Crossovers/AlbaCrossover.cs	(revision 17698)
@@ -49,13 +49,13 @@
     }
 
-    protected abstract AlbaEncoding Crossover(IRandom random, AlbaEncoding parent1, AlbaEncoding parent2);
+    protected abstract AlbaEncodedSolution Crossover(IRandom random, AlbaEncodedSolution parent1, AlbaEncodedSolution parent2);
 
     public override IOperation InstrumentedApply() {
-      ItemArray<IVRPEncoding> parents = new ItemArray<IVRPEncoding>(ParentsParameter.ActualValue.Length);
+      ItemArray<IVRPEncodedSolution> parents = new ItemArray<IVRPEncodedSolution>(ParentsParameter.ActualValue.Length);
       for (int i = 0; i < ParentsParameter.ActualValue.Length; i++) {
-        IVRPEncoding solution = ParentsParameter.ActualValue[i];
+        IVRPEncodedSolution solution = ParentsParameter.ActualValue[i];
 
-        if (!(solution is AlbaEncoding)) {
-          parents[i] = AlbaEncoding.ConvertFrom(solution, ProblemInstance);
+        if (!(solution is AlbaEncodedSolution)) {
+          parents[i] = AlbaEncodedSolution.ConvertFrom(solution, ProblemInstance);
         } else {
           parents[i] = solution;
@@ -65,6 +65,6 @@
 
       ChildParameter.ActualValue =
-        Crossover(RandomParameter.ActualValue, parents[0] as AlbaEncoding, parents[1] as AlbaEncoding);
-      (ChildParameter.ActualValue as AlbaEncoding).Repair();
+        Crossover(RandomParameter.ActualValue, parents[0] as AlbaEncodedSolution, parents[1] as AlbaEncodedSolution);
+      (ChildParameter.ActualValue as AlbaEncodedSolution).Repair();
 
       return base.InstrumentedApply();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs	(revision 17698)
@@ -50,9 +50,9 @@
     }
 
-    protected override AlbaEncoding Crossover(IRandom random, AlbaEncoding parent1, AlbaEncoding parent2) {
+    protected override AlbaEncodedSolution Crossover(IRandom random, AlbaEncodedSolution parent1, AlbaEncodedSolution parent2) {
       //note - the inner crossover is called here and the result is converted to an alba representation
       //some refactoring should be done here in the future - the crossover operation should be called directly
       if (parent1.Length != parent2.Length)
-        return parent1.Clone() as AlbaEncoding;
+        return parent1.Clone() as AlbaEncodedSolution;
 
       InnerCrossoverParameter.ActualValue.ParentsParameter.ActualName = ParentsParameter.ActualName;
@@ -66,5 +66,5 @@
         ExecutionContext.Scope.Variables.Remove(childName);
 
-        return new AlbaEncoding(permutation, ProblemInstance);
+        return new AlbaEncodedSolution(permutation, ProblemInstance);
       } else
         return null;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/LocalImprovement/AlbaLambdaInterchangeLocalImprovementOperator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/LocalImprovement/AlbaLambdaInterchangeLocalImprovementOperator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/LocalImprovement/AlbaLambdaInterchangeLocalImprovementOperator.cs	(revision 17698)
@@ -45,6 +45,6 @@
     }
 
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
 
@@ -75,5 +75,5 @@
       Parameters.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "The amount of evaluated solutions (here a move is counted only as 4/n evaluated solutions with n being the length of the permutation)."));
       Parameters.Add(new LookupParameter<ResultCollection>("Results", "The collection where to store results."));
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours to be manipulated."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours to be manipulated."));
       Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality value of the assignment."));
       Parameters.Add(new ValueParameter<IntValue>("Lambda", "The lambda value.", new IntValue(1)));
@@ -86,5 +86,5 @@
     }
 
-    public static void Apply(AlbaEncoding solution, int maxIterations,
+    public static void Apply(AlbaEncodedSolution solution, int maxIterations,
       int lambda, int samples, IRandom random, IVRPProblemInstance problemInstance, ref double quality, out int evaluatedSolutions) {
       evaluatedSolutions = 0;
@@ -93,5 +93,5 @@
         AlbaLambdaInterchangeMove bestMove = null;
         foreach (AlbaLambdaInterchangeMove move in AlbaStochasticLambdaInterchangeMultiMoveGenerator.GenerateAllMoves(solution, problemInstance, lambda, samples, random)) {
-          AlbaEncoding newSolution = solution.Clone() as AlbaEncoding;
+          AlbaEncodedSolution newSolution = solution.Clone() as AlbaEncodedSolution;
           AlbaLambdaInterchangeMoveMaker.Apply(newSolution, move);
           double moveQuality =
@@ -111,10 +111,10 @@
     public override IOperation InstrumentedApply() {
       int maxIterations = MaximumIterationsParameter.ActualValue.Value;
-      AlbaEncoding solution = null;
+      AlbaEncodedSolution solution = null;
 
-      if (VRPToursParameter.ActualValue is AlbaEncoding)
-        solution = VRPToursParameter.ActualValue as AlbaEncoding;
+      if (VRPToursParameter.ActualValue is AlbaEncodedSolution)
+        solution = VRPToursParameter.ActualValue as AlbaEncodedSolution;
       else
-        VRPToursParameter.ActualValue = solution = AlbaEncoding.ConvertFrom(VRPToursParameter.ActualValue, ProblemInstance);
+        VRPToursParameter.ActualValue = solution = AlbaEncodedSolution.ConvertFrom(VRPToursParameter.ActualValue, ProblemInstance);
 
       int lambda = LambdaParameter.Value.Value;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerInsertionManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerInsertionManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerInsertionManipulator.cs	(revision 17698)
@@ -43,6 +43,6 @@
     }
 
-    protected override void Manipulate(IRandom random, AlbaEncoding individual) {
-      AlbaEncoding original = (AlbaEncoding)individual.Clone();
+    protected override void Manipulate(IRandom random, AlbaEncodedSolution individual) {
+      AlbaEncodedSolution original = (AlbaEncodedSolution)individual.Clone();
       int cutIndex, insertIndex, number;
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerInversionManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerInversionManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerInversionManipulator.cs	(revision 17698)
@@ -44,5 +44,5 @@
     }
 
-    protected override void Manipulate(IRandom random, AlbaEncoding individual) {
+    protected override void Manipulate(IRandom random, AlbaEncodedSolution individual) {
       int breakPoint1, breakPoint2;
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerSwapManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerSwapManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaCustomerSwapManipulator.cs	(revision 17698)
@@ -43,5 +43,5 @@
     }
 
-    protected override void Manipulate(IRandom random, AlbaEncoding individual) {
+    protected override void Manipulate(IRandom random, AlbaEncodedSolution individual) {
       int index1, index2, temp;
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaIntraRouteInversionManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaIntraRouteInversionManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaIntraRouteInversionManipulator.cs	(revision 17698)
@@ -44,5 +44,5 @@
     }
 
-    public static void Apply(AlbaEncoding individual, int index1, int index2) {
+    public static void Apply(AlbaEncodedSolution individual, int index1, int index2) {
       if (index1 != -1 && index2 != -1) {
         int breakPoint1 = index1 + 1;
@@ -56,5 +56,5 @@
     }
 
-    protected override void Manipulate(IRandom rand, AlbaEncoding individual) {
+    protected override void Manipulate(IRandom rand, AlbaEncodedSolution individual) {
       int index1 = -1;
       int index2 = -1;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaLambdaInterchangeManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaLambdaInterchangeManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaLambdaInterchangeManipulator.cs	(revision 17698)
@@ -52,5 +52,5 @@
     }
 
-    public static void Apply(AlbaEncoding individual, int tour1Index, int position1, int length1,
+    public static void Apply(AlbaEncodedSolution individual, int tour1Index, int position1, int length1,
       int tour2Index, int position2, int length2) {
       List<Tour> tours = individual.GetTours();
@@ -74,5 +74,5 @@
       }
 
-      AlbaEncoding original = individual.Clone() as AlbaEncoding;
+      AlbaEncodedSolution original = individual.Clone() as AlbaEncodedSolution;
       int index = 0;
 
@@ -106,5 +106,5 @@
     }
 
-    protected override void Manipulate(IRandom rand, AlbaEncoding individual) {
+    protected override void Manipulate(IRandom rand, AlbaEncodedSolution individual) {
       List<Tour> tours = individual.GetTours();
       if (tours.Count > 1) {
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaManipulator.cs	(revision 17698)
@@ -48,7 +48,7 @@
     }
 
-    protected abstract void Manipulate(IRandom random, AlbaEncoding individual);
+    protected abstract void Manipulate(IRandom random, AlbaEncodedSolution individual);
 
-    protected int FindCustomerLocation(int customer, AlbaEncoding individual) {
+    protected int FindCustomerLocation(int customer, AlbaEncodedSolution individual) {
       int pos = -1;
       for (int i = 0; i < individual.Length; i++) {
@@ -63,11 +63,11 @@
 
     public override IOperation InstrumentedApply() {
-      IVRPEncoding solution = VRPToursParameter.ActualValue;
-      if (!(solution is AlbaEncoding)) {
-        VRPToursParameter.ActualValue = AlbaEncoding.ConvertFrom(solution, ProblemInstance);
+      IVRPEncodedSolution solution = VRPToursParameter.ActualValue;
+      if (!(solution is AlbaEncodedSolution)) {
+        VRPToursParameter.ActualValue = AlbaEncodedSolution.ConvertFrom(solution, ProblemInstance);
       }
 
-      Manipulate(RandomParameter.ActualValue, VRPToursParameter.ActualValue as AlbaEncoding);
-      (VRPToursParameter.ActualValue as AlbaEncoding).Repair();
+      Manipulate(RandomParameter.ActualValue, VRPToursParameter.ActualValue as AlbaEncodedSolution);
+      (VRPToursParameter.ActualValue as AlbaEncodedSolution).Repair();
 
       return base.InstrumentedApply();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaPermutationManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaPermutationManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Manipulators/AlbaPermutationManipulator.cs	(revision 17698)
@@ -50,5 +50,5 @@
     }
 
-    protected override void Manipulate(IRandom random, AlbaEncoding individual) {
+    protected override void Manipulate(IRandom random, AlbaEncodedSolution individual) {
       InnerManipulatorParameter.ActualValue.PermutationParameter.ActualName = VRPToursParameter.ActualName;
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveGenerator.cs	(revision 17698)
@@ -42,7 +42,7 @@
 
     public override IOperation InstrumentedApply() {
-      IVRPEncoding solution = VRPToursParameter.ActualValue;
-      if (!(solution is AlbaEncoding)) {
-        VRPToursParameter.ActualValue = AlbaEncoding.ConvertFrom(solution, ProblemInstance);
+      IVRPEncodedSolution solution = VRPToursParameter.ActualValue;
+      if (!(solution is AlbaEncodedSolution)) {
+        VRPToursParameter.ActualValue = AlbaEncodedSolution.ConvertFrom(solution, ProblemInstance);
       }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaExhaustiveIntraRouteInversionMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaExhaustiveIntraRouteInversionMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaExhaustiveIntraRouteInversionMoveGenerator.cs	(revision 17698)
@@ -46,5 +46,5 @@
     }
 
-    protected override AlbaIntraRouteInversionMove[] GenerateMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override AlbaIntraRouteInversionMove[] GenerateMoves(AlbaEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<AlbaIntraRouteInversionMove> moves = new List<AlbaIntraRouteInversionMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionEvaluator.cs	(revision 17698)
@@ -55,5 +55,5 @@
 
     protected override void EvaluateMove() {
-      AlbaEncoding newSolution = IntraRouteInversionMoveParameter.ActualValue.Permutation.Clone() as AlbaEncoding;
+      AlbaEncodedSolution newSolution = IntraRouteInversionMoveParameter.ActualValue.Permutation.Clone() as AlbaEncodedSolution;
       AlbaIntraRouteInversionMoveMaker.Apply(newSolution, IntraRouteInversionMoveParameter.ActualValue);
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMove.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMove.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMove.cs	(revision 17698)
@@ -32,5 +32,5 @@
   [StorableType("F0A32074-2D3F-4236-A732-8C095FA5F64E")]
   public class AlbaIntraRouteInversionMove : TwoIndexMove, IVRPMove {
-    public IVRPEncoding Individual { get { return Permutation as AlbaEncoding; } }
+    public IVRPEncodedSolution Individual { get { return Permutation as AlbaEncodedSolution; } }
 
     [StorableConstructor]
@@ -49,7 +49,7 @@
     }
 
-    public AlbaIntraRouteInversionMove(int index1, int index2, AlbaEncoding permutation)
+    public AlbaIntraRouteInversionMove(int index1, int index2, AlbaEncodedSolution permutation)
       : base(index1, index2, null) {
-      this.Permutation = permutation.Clone() as AlbaEncoding;
+      this.Permutation = permutation.Clone() as AlbaEncodedSolution;
     }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveGenerator.cs	(revision 17698)
@@ -56,10 +56,10 @@
     }
 
-    protected abstract AlbaIntraRouteInversionMove[] GenerateMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance);
+    protected abstract AlbaIntraRouteInversionMove[] GenerateMoves(AlbaEncodedSolution individual, IVRPProblemInstance problemInstance);
 
     public override IOperation InstrumentedApply() {
       IOperation next = base.InstrumentedApply();
 
-      AlbaEncoding individual = VRPToursParameter.ActualValue as AlbaEncoding;
+      AlbaEncodedSolution individual = VRPToursParameter.ActualValue as AlbaEncodedSolution;
       AlbaIntraRouteInversionMove[] moves = GenerateMoves(individual, ProblemInstance);
       Scope[] moveScopes = new Scope[moves.Length];
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveMaker.cs	(revision 17698)
@@ -54,5 +54,5 @@
     }
 
-    public static void Apply(AlbaEncoding solution, AlbaIntraRouteInversionMove move) {
+    public static void Apply(AlbaEncodedSolution solution, AlbaIntraRouteInversionMove move) {
       AlbaIntraRouteInversionManipulator.Apply(solution, move.Index1, move.Index2);
     }
@@ -61,6 +61,6 @@
       AlbaIntraRouteInversionMove move = IntraRouteInversionMoveParameter.ActualValue;
 
-      Apply(move.Individual as AlbaEncoding, move);
-      VRPToursParameter.ActualValue = move.Individual as AlbaEncoding;
+      Apply(move.Individual as AlbaEncodedSolution, move);
+      VRPToursParameter.ActualValue = move.Individual as AlbaEncodedSolution;
     }
   }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaStochasticIntraRouteInversionMutliMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaStochasticIntraRouteInversionMutliMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaStochasticIntraRouteInversionMutliMoveGenerator.cs	(revision 17698)
@@ -59,5 +59,5 @@
     }
 
-    protected override AlbaIntraRouteInversionMove[] GenerateMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override AlbaIntraRouteInversionMove[] GenerateMoves(AlbaEncodedSolution individual, IVRPProblemInstance problemInstance) {
       int sampleSize = SampleSizeParameter.ActualValue.Value;
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaStochasticIntraRouteInversionSingleMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaStochasticIntraRouteInversionSingleMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/IntraRouteInversion/AlbaStochasticIntraRouteInversionSingleMoveGenerator.cs	(revision 17698)
@@ -61,5 +61,5 @@
     }
 
-    public static AlbaIntraRouteInversionMove Apply(AlbaEncoding individual, int cities, IRandom rand) {
+    public static AlbaIntraRouteInversionMove Apply(AlbaEncodedSolution individual, int cities, IRandom rand) {
       int index1 = -1;
       int index2 = -1;
@@ -96,5 +96,5 @@
     }
 
-    protected override AlbaIntraRouteInversionMove[] GenerateMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override AlbaIntraRouteInversionMove[] GenerateMoves(AlbaEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<AlbaIntraRouteInversionMove> moves = new List<AlbaIntraRouteInversionMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaExhaustiveLambdaInterchangeMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaExhaustiveLambdaInterchangeMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaExhaustiveLambdaInterchangeMoveGenerator.cs	(revision 17698)
@@ -47,5 +47,5 @@
     }
 
-    protected override AlbaLambdaInterchangeMove[] GenerateMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance, int lambda) {
+    protected override AlbaLambdaInterchangeMove[] GenerateMoves(AlbaEncodedSolution individual, IVRPProblemInstance problemInstance, int lambda) {
       List<AlbaLambdaInterchangeMove> moves = new List<AlbaLambdaInterchangeMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMove.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMove.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMove.cs	(revision 17698)
@@ -32,5 +32,5 @@
   public class AlbaLambdaInterchangeMove : Item, IVRPMove {
     [Storable]
-    public IVRPEncoding Individual { get; protected set; }
+    public IVRPEncodedSolution Individual { get; protected set; }
 
     [Storable]
@@ -66,5 +66,5 @@
 
     public AlbaLambdaInterchangeMove(int tour1, int position1, int length1,
-      int tour2, int position2, int length2, AlbaEncoding permutation) {
+      int tour2, int position2, int length2, AlbaEncodedSolution permutation) {
       Tour1 = tour1;
       Position1 = position1;
@@ -75,5 +75,5 @@
       Length2 = length2;
 
-      this.Individual = permutation.Clone() as AlbaEncoding;
+      this.Individual = permutation.Clone() as AlbaEncodedSolution;
     }
 
@@ -95,5 +95,5 @@
       this.Length2 = original.Length2;
 
-      this.Individual = cloner.Clone(Individual) as AlbaEncoding;
+      this.Individual = cloner.Clone(Individual) as AlbaEncodedSolution;
     }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveEvaluator.cs	(revision 17698)
@@ -55,5 +55,5 @@
 
     protected override void EvaluateMove() {
-      AlbaEncoding newSolution = LambdaInterchangeMoveParameter.ActualValue.Individual.Clone() as AlbaEncoding;
+      AlbaEncodedSolution newSolution = LambdaInterchangeMoveParameter.ActualValue.Individual.Clone() as AlbaEncodedSolution;
       AlbaLambdaInterchangeMoveMaker.Apply(newSolution, LambdaInterchangeMoveParameter.ActualValue);
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveGenerator.cs	(revision 17698)
@@ -66,10 +66,10 @@
     }
 
-    protected abstract AlbaLambdaInterchangeMove[] GenerateMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance, int lambda);
+    protected abstract AlbaLambdaInterchangeMove[] GenerateMoves(AlbaEncodedSolution individual, IVRPProblemInstance problemInstance, int lambda);
 
     public override IOperation InstrumentedApply() {
       IOperation next = base.InstrumentedApply();
 
-      AlbaEncoding individual = VRPToursParameter.ActualValue as AlbaEncoding;
+      AlbaEncodedSolution individual = VRPToursParameter.ActualValue as AlbaEncodedSolution;
       AlbaLambdaInterchangeMove[] moves = GenerateMoves(individual, ProblemInstanceParameter.ActualValue, LambdaParameter.Value.Value);
       Scope[] moveScopes = new Scope[moves.Length];
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveMaker.cs	(revision 17698)
@@ -57,5 +57,5 @@
     }
 
-    public static void Apply(AlbaEncoding solution, AlbaLambdaInterchangeMove move) {
+    public static void Apply(AlbaEncodedSolution solution, AlbaLambdaInterchangeMove move) {
       AlbaLambdaInterchangeManipulator.Apply(
         solution,
@@ -67,5 +67,5 @@
       AlbaLambdaInterchangeMove move = LambdaInterchangeMoveParameter.ActualValue;
 
-      Apply(move.Individual as AlbaEncoding, move);
+      Apply(move.Individual as AlbaEncodedSolution, move);
       VRPToursParameter.ActualValue = move.Individual;
     }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeMutliMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeMutliMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeMutliMoveGenerator.cs	(revision 17698)
@@ -59,5 +59,5 @@
     }
 
-    public static AlbaLambdaInterchangeMove[] GenerateAllMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance, int lambda, int sampleSize, IRandom rand) {
+    public static AlbaLambdaInterchangeMove[] GenerateAllMoves(AlbaEncodedSolution individual, IVRPProblemInstance problemInstance, int lambda, int sampleSize, IRandom rand) {
       AlbaLambdaInterchangeMove[] moves = new AlbaLambdaInterchangeMove[sampleSize];
       for (int i = 0; i < sampleSize; i++) {
@@ -69,5 +69,5 @@
     }
 
-    protected override AlbaLambdaInterchangeMove[] GenerateMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance, int lambda) {
+    protected override AlbaLambdaInterchangeMove[] GenerateMoves(AlbaEncodedSolution individual, IVRPProblemInstance problemInstance, int lambda) {
       return GenerateAllMoves(individual, problemInstance, lambda, SampleSizeParameter.ActualValue.Value, RandomParameter.ActualValue);
     }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeSingleMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeSingleMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeSingleMoveGenerator.cs	(revision 17698)
@@ -62,5 +62,5 @@
     }
 
-    public static AlbaLambdaInterchangeMove Apply(AlbaEncoding individual, int cities, int lambda, IRandom rand) {
+    public static AlbaLambdaInterchangeMove Apply(AlbaEncodedSolution individual, int cities, int lambda, IRandom rand) {
       List<Tour> tours = individual.GetTours();
 
@@ -90,5 +90,5 @@
     }
 
-    protected override AlbaLambdaInterchangeMove[] GenerateMoves(AlbaEncoding individual, IVRPProblemInstance problemInstance, int lambda) {
+    protected override AlbaLambdaInterchangeMove[] GenerateMoves(AlbaEncodedSolution individual, IVRPProblemInstance problemInstance, int lambda) {
       List<AlbaLambdaInterchangeMove> moves = new List<AlbaLambdaInterchangeMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaStochasticTranslocationSingleMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaStochasticTranslocationSingleMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaStochasticTranslocationSingleMoveGenerator.cs	(revision 17698)
@@ -72,5 +72,5 @@
       IOperation next = base.InstrumentedApply();
 
-      IVRPEncoding solution = VRPToursParameter.ActualValue;
+      IVRPEncodedSolution solution = VRPToursParameter.ActualValue;
 
       generator.PermutationParameter.ActualName = VRPToursParameter.ActualName;
@@ -87,5 +87,5 @@
           moveVariable.Value =
             new AlbaTranslocationMove(
-              move.Index1, move.Index2, move.Index3, solution as AlbaEncoding);
+              move.Index1, move.Index2, move.Index3, solution as AlbaEncodedSolution);
         }
       }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMove.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMove.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMove.cs	(revision 17698)
@@ -32,5 +32,5 @@
   [StorableType("C9BA8BFE-712F-4575-82E6-B94C604C001B")]
   public class AlbaTranslocationMove : TranslocationMove, IVRPMove {
-    public IVRPEncoding Individual { get { return Permutation as AlbaEncoding; } }
+    public IVRPEncodedSolution Individual { get { return Permutation as AlbaEncodedSolution; } }
 
     public AlbaTranslocationMove(int index1, int index2, int index3) :
@@ -38,6 +38,6 @@
     }
 
-    public AlbaTranslocationMove(int index1, int index2, int index3, AlbaEncoding individual) :
-      base(index1, index2, index3, individual.Clone() as AlbaEncoding) {
+    public AlbaTranslocationMove(int index1, int index2, int index3, AlbaEncodedSolution individual) :
+      base(index1, index2, index3, individual.Clone() as AlbaEncodedSolution) {
     }
 
@@ -55,5 +55,5 @@
       this.Index3 = original.Index3;
 
-      this.Permutation = cloner.Clone(Permutation) as AlbaEncoding;
+      this.Permutation = cloner.Clone(Permutation) as AlbaEncodedSolution;
     }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveEvaluator.cs	(revision 17698)
@@ -59,5 +59,5 @@
       TranslocationMove move = TranslocationMoveParameter.ActualValue;
       //perform move
-      AlbaEncoding newSolution = move.Permutation.Clone() as AlbaEncoding;
+      AlbaEncodedSolution newSolution = move.Permutation.Clone() as AlbaEncodedSolution;
       TranslocationManipulator.Apply(newSolution, move.Index1, move.Index2, move.Index3);
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveGenerator.cs	(revision 17698)
@@ -96,5 +96,5 @@
       IOperation next = base.InstrumentedApply();
 
-      IVRPEncoding solution = VRPToursParameter.ActualValue;
+      IVRPEncodedSolution solution = VRPToursParameter.ActualValue;
 
       PermutationMoveOperatorParameter.PermutationParameter.ActualName = VRPToursParameter.ActualName;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveHardTabuCriterion.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveHardTabuCriterion.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveHardTabuCriterion.cs	(revision 17698)
@@ -84,5 +84,5 @@
       IOperation next = base.InstrumentedApply();
 
-      IVRPEncoding solution = VRPToursParameter.ActualValue;
+      IVRPEncodedSolution solution = VRPToursParameter.ActualValue;
 
       PermutationMoveOperatorParameter.PermutationParameter.ActualName = VRPToursParameter.ActualName;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveMaker.cs	(revision 17698)
@@ -65,5 +65,5 @@
         TranslocationMoveParameter.ActualName];
       TranslocationMove move = moveVariable.Value as TranslocationMove;
-      VRPToursParameter.ActualValue = move.Permutation as AlbaEncoding;
+      VRPToursParameter.ActualValue = move.Permutation as AlbaEncodedSolution;
 
       moveMaker.PermutationParameter.ActualName = VRPToursParameter.ActualName;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveSoftTabuCriterion.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveSoftTabuCriterion.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveSoftTabuCriterion.cs	(revision 17698)
@@ -84,5 +84,5 @@
       IOperation next = base.InstrumentedApply();
 
-      IVRPEncoding solution = VRPToursParameter.ActualValue;
+      IVRPEncodedSolution solution = VRPToursParameter.ActualValue;
 
       PermutationMoveOperatorParameter.PermutationParameter.ActualName = VRPToursParameter.ActualName;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveTabuMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveTabuMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveTabuMaker.cs	(revision 17698)
@@ -84,5 +84,5 @@
       IOperation next = base.InstrumentedApply();
 
-      IVRPEncoding solution = VRPToursParameter.ActualValue;
+      IVRPEncodedSolution solution = VRPToursParameter.ActualValue;
 
       PermutationMoveOperatorParameter.PermutationParameter.ActualName = VRPToursParameter.ActualName;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Crossovers/GVRCrossover.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Crossovers/GVRCrossover.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Crossovers/GVRCrossover.cs	(revision 17698)
@@ -52,6 +52,6 @@
     }
 
-    private GVREncoding Crossover(IRandom random, GVREncoding parent1, GVREncoding parent2) {
-      GVREncoding child = parent1.Clone() as GVREncoding;
+    private GVREncodedSolution Crossover(IRandom random, GVREncodedSolution parent1, GVREncodedSolution parent2) {
+      GVREncodedSolution child = parent1.Clone() as GVREncodedSolution;
 
       Tour tour = parent2.Tours[random.Next(parent2.Tours.Count)];
@@ -97,5 +97,5 @@
       } else {
         //special case -> only one tour, whole tour has been chosen as subroute
-        child = parent1.Clone() as GVREncoding;
+        child = parent1.Clone() as GVREncodedSolution;
       }
 
@@ -104,9 +104,9 @@
 
     public override IOperation InstrumentedApply() {
-      ItemArray<IVRPEncoding> parents = new ItemArray<IVRPEncoding>(ParentsParameter.ActualValue.Length);
+      ItemArray<IVRPEncodedSolution> parents = new ItemArray<IVRPEncodedSolution>(ParentsParameter.ActualValue.Length);
       for (int i = 0; i < ParentsParameter.ActualValue.Length; i++) {
-        IVRPEncoding solution = ParentsParameter.ActualValue[i];
-        if (!(solution is GVREncoding)) {
-          parents[i] = GVREncoding.ConvertFrom(solution, ProblemInstance);
+        IVRPEncodedSolution solution = ParentsParameter.ActualValue[i];
+        if (!(solution is GVREncodedSolution)) {
+          parents[i] = GVREncodedSolution.ConvertFrom(solution, ProblemInstance);
         } else {
           parents[i] = solution;
@@ -115,5 +115,5 @@
       ParentsParameter.ActualValue = parents;
 
-      ChildParameter.ActualValue = Crossover(RandomParameter.ActualValue, parents[0] as GVREncoding, parents[1] as GVREncoding);
+      ChildParameter.ActualValue = Crossover(RandomParameter.ActualValue, parents[0] as GVREncodedSolution, parents[1] as GVREncodedSolution);
 
       return base.InstrumentedApply();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/GVREncodedSolution.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/GVREncodedSolution.cs	(revision 17698)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/GVREncodedSolution.cs	(revision 17698)
@@ -0,0 +1,130 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Problems.VehicleRouting.Encodings.General;
+using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Problems.VehicleRouting.Variants;
+
+namespace HeuristicLab.Problems.VehicleRouting.Encodings.GVR {
+  [Item("GVREncodedSolution", "Represents a genetic vehicle routing encoded solution of the VRP. It is implemented as described in Pereira, F.B. et al (2002). GVR: a New Genetic Representation for the Vehicle Routing Problem. AICS 2002, LNAI 2464, pp. 95-102.")]
+  [StorableType("27A8F267-9865-4AEA-9ECF-88D950D81D74")]
+  public class GVREncodedSolution : TourEncoding {
+    public override List<Tour> GetTours() {
+      List<Tour> tours = new List<Tour>();
+
+      foreach (Tour tour in base.Tours) {
+        Tour newTour = new Tour();
+        double currentDemand = 0;
+
+        DoubleValue capacity = new DoubleValue(double.MaxValue);
+        if (ProblemInstance is IHomogenousCapacitatedProblemInstance) {
+          capacity.Value = (ProblemInstance as IHomogenousCapacitatedProblemInstance).Capacity.Value;
+        }
+
+
+        foreach (int city in tour.Stops) {
+          currentDemand += ProblemInstance.GetDemand(city);
+
+          if (currentDemand > capacity.Value) {
+            if (newTour.Stops.Count > 0)
+              tours.Add(newTour);
+
+            newTour = new Tour();
+            newTour.Stops.Add(city);
+            currentDemand = ProblemInstance.GetDemand(city);
+          } else {
+            newTour.Stops.Add(city);
+          }
+        }
+
+        if (newTour.Stops.Count > 0)
+          tours.Add(newTour);
+      }
+
+      //repair if there are too many vehicles used
+      while (tours.Count > ProblemInstance.Vehicles.Value) {
+        Tour tour = tours[tours.Count - 1];
+        tours[tours.Count - 2].Stops.AddRange(tour.Stops);
+
+        tours.Remove(tour);
+      }
+
+      return tours;
+    }
+
+    public GVREncodedSolution(IVRPProblemInstance problemInstance)
+      : base(problemInstance) {
+    }
+
+    [StorableConstructor]
+    protected GVREncodedSolution(StorableConstructorFlag _) : base(_) {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GVREncodedSolution(this, cloner);
+    }
+
+    protected GVREncodedSolution(GVREncodedSolution original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public static GVREncodedSolution ConvertFrom(IVRPEncodedSolution encoding, IVRPProblemInstance problemInstance) {
+      GVREncodedSolution solution = new GVREncodedSolution(problemInstance);
+
+      TourEncoding.ConvertFrom(encoding, solution, problemInstance);
+
+      return solution;
+    }
+
+    public static GVREncodedSolution ConvertFrom(List<int> route, IVRPProblemInstance problemInstance) {
+      GVREncodedSolution solution = new GVREncodedSolution(problemInstance);
+
+      TourEncoding.ConvertFrom(route, solution);
+
+      return solution;
+    }
+
+    internal void FindCustomer(int customer, out Tour tour, out int index) {
+      tour = null;
+      index = -1;
+
+      int currentTour = 0;
+      while (tour == null && currentTour < Tours.Count) {
+        int currentCity = 0;
+        while (tour == null && currentCity < Tours[currentTour].Stops.Count) {
+          if (Tours[currentTour].Stops[currentCity] == customer) {
+            tour = Tours[currentTour];
+            index = currentCity;
+          }
+
+          currentCity++;
+        }
+
+        currentTour++;
+      }
+    }
+  }
+}
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/GVREncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/GVREncoding.cs	(revision 17697)
+++ 	(revision )
@@ -1,130 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System.Collections.Generic;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HEAL.Attic;
-using HeuristicLab.Problems.VehicleRouting.Encodings.General;
-using HeuristicLab.Problems.VehicleRouting.Interfaces;
-using HeuristicLab.Problems.VehicleRouting.Variants;
-
-namespace HeuristicLab.Problems.VehicleRouting.Encodings.GVR {
-  [Item("GVREncoding", "Represents a potvin encoding of VRP solutions. It is implemented as described in Pereira, F.B. et al (2002). GVR: a New Genetic Representation for the Vehicle Routing Problem. AICS 2002, LNAI 2464, pp. 95-102.")]
-  [StorableType("27A8F267-9865-4AEA-9ECF-88D950D81D74")]
-  public class GVREncoding : TourEncoding {
-    public override List<Tour> GetTours() {
-      List<Tour> tours = new List<Tour>();
-
-      foreach (Tour tour in base.Tours) {
-        Tour newTour = new Tour();
-        double currentDemand = 0;
-
-        DoubleValue capacity = new DoubleValue(double.MaxValue);
-        if (ProblemInstance is IHomogenousCapacitatedProblemInstance) {
-          capacity.Value = (ProblemInstance as IHomogenousCapacitatedProblemInstance).Capacity.Value;
-        }
-
-
-        foreach (int city in tour.Stops) {
-          currentDemand += ProblemInstance.GetDemand(city);
-
-          if (currentDemand > capacity.Value) {
-            if (newTour.Stops.Count > 0)
-              tours.Add(newTour);
-
-            newTour = new Tour();
-            newTour.Stops.Add(city);
-            currentDemand = ProblemInstance.GetDemand(city);
-          } else {
-            newTour.Stops.Add(city);
-          }
-        }
-
-        if (newTour.Stops.Count > 0)
-          tours.Add(newTour);
-      }
-
-      //repair if there are too many vehicles used
-      while (tours.Count > ProblemInstance.Vehicles.Value) {
-        Tour tour = tours[tours.Count - 1];
-        tours[tours.Count - 2].Stops.AddRange(tour.Stops);
-
-        tours.Remove(tour);
-      }
-
-      return tours;
-    }
-
-    public GVREncoding(IVRPProblemInstance problemInstance)
-      : base(problemInstance) {
-    }
-
-    [StorableConstructor]
-    protected GVREncoding(StorableConstructorFlag _) : base(_) {
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new GVREncoding(this, cloner);
-    }
-
-    protected GVREncoding(GVREncoding original, Cloner cloner)
-      : base(original, cloner) {
-    }
-
-    public static GVREncoding ConvertFrom(IVRPEncoding encoding, IVRPProblemInstance problemInstance) {
-      GVREncoding solution = new GVREncoding(problemInstance);
-
-      TourEncoding.ConvertFrom(encoding, solution, problemInstance);
-
-      return solution;
-    }
-
-    public static GVREncoding ConvertFrom(List<int> route, IVRPProblemInstance problemInstance) {
-      GVREncoding solution = new GVREncoding(problemInstance);
-
-      TourEncoding.ConvertFrom(route, solution);
-
-      return solution;
-    }
-
-    internal void FindCustomer(int customer, out Tour tour, out int index) {
-      tour = null;
-      index = -1;
-
-      int currentTour = 0;
-      while (tour == null && currentTour < Tours.Count) {
-        int currentCity = 0;
-        while (tour == null && currentCity < Tours[currentTour].Stops.Count) {
-          if (Tours[currentTour].Stops[currentCity] == customer) {
-            tour = Tours[currentTour];
-            index = currentCity;
-          }
-
-          currentCity++;
-        }
-
-        currentTour++;
-      }
-    }
-  }
-}
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRDisplacementManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRDisplacementManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRDisplacementManipulator.cs	(revision 17698)
@@ -44,5 +44,5 @@
     }
 
-    protected override void Manipulate(IRandom random, GVREncoding individual) {
+    protected override void Manipulate(IRandom random, GVREncodedSolution individual) {
       Tour tour = individual.Tours[random.Next(individual.Tours.Count)];
       int breakPoint1 = random.Next(tour.Stops.Count);
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRInsertionManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRInsertionManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRInsertionManipulator.cs	(revision 17698)
@@ -43,5 +43,5 @@
     }
 
-    protected override void Manipulate(IRandom random, GVREncoding individual) {
+    protected override void Manipulate(IRandom random, GVREncodedSolution individual) {
       int customer = random.Next(1, individual.Cities + 1);
       Tour tour;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRInversionManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRInversionManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRInversionManipulator.cs	(revision 17698)
@@ -43,5 +43,5 @@
     }
 
-    protected override void Manipulate(IRandom random, GVREncoding individual) {
+    protected override void Manipulate(IRandom random, GVREncodedSolution individual) {
       Tour tour = individual.Tours[random.Next(individual.Tours.Count)];
       int breakPoint1 = random.Next(tour.Stops.Count);
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRManipulator.cs	(revision 17698)
@@ -47,13 +47,13 @@
     }
 
-    protected abstract void Manipulate(IRandom random, GVREncoding individual);
+    protected abstract void Manipulate(IRandom random, GVREncodedSolution individual);
 
     public override IOperation InstrumentedApply() {
-      IVRPEncoding solution = VRPToursParameter.ActualValue;
-      if (!(solution is GVREncoding)) {
-        VRPToursParameter.ActualValue = GVREncoding.ConvertFrom(solution, ProblemInstance);
+      IVRPEncodedSolution solution = VRPToursParameter.ActualValue;
+      if (!(solution is GVREncodedSolution)) {
+        VRPToursParameter.ActualValue = GVREncodedSolution.ConvertFrom(solution, ProblemInstance);
       }
 
-      Manipulate(RandomParameter.ActualValue, VRPToursParameter.ActualValue as GVREncoding);
+      Manipulate(RandomParameter.ActualValue, VRPToursParameter.ActualValue as GVREncodedSolution);
 
       return base.InstrumentedApply();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRSwapManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRSwapManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/Manipulators/GVRSwapManipulator.cs	(revision 17698)
@@ -43,5 +43,5 @@
     }
 
-    protected override void Manipulate(IRandom random, GVREncoding individual) {
+    protected override void Manipulate(IRandom random, GVREncodedSolution individual) {
       int customer1 = random.Next(1, individual.Cities + 1);
       int customer2 = random.Next(1, individual.Cities + 1);
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/MultiVRPSolutionCreator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/MultiVRPSolutionCreator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/MultiVRPSolutionCreator.cs	(revision 17698)
@@ -48,6 +48,6 @@
     }
 
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
 
@@ -56,5 +56,5 @@
     public MultiVRPSolutionCreator()
       : base() {
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The new VRP tours."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The new VRP tours."));
 
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/VRPCreator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/VRPCreator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/VRPCreator.cs	(revision 17698)
@@ -30,6 +30,6 @@
   [StorableType("E37923DB-8BA5-4FE3-956D-3D65AA18037C")]
   public abstract class VRPCreator : VRPOperator, IVRPCreator {
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
 
@@ -39,5 +39,5 @@
     public VRPCreator()
       : base() {
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours to be created."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours to be created."));
     }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Crossovers/MultiVRPSolutionCrossover.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Crossovers/MultiVRPSolutionCrossover.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Crossovers/MultiVRPSolutionCrossover.cs	(revision 17698)
@@ -48,10 +48,10 @@
     }
 
-    public ILookupParameter<ItemArray<IVRPEncoding>> ParentsParameter {
-      get { return (ScopeTreeLookupParameter<IVRPEncoding>)Parameters["Parents"]; }
+    public ILookupParameter<ItemArray<IVRPEncodedSolution>> ParentsParameter {
+      get { return (ScopeTreeLookupParameter<IVRPEncodedSolution>)Parameters["Parents"]; }
     }
 
-    public ILookupParameter<IVRPEncoding> ChildParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["Child"]; }
+    public ILookupParameter<IVRPEncodedSolution> ChildParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["Child"]; }
     }
 
@@ -63,7 +63,7 @@
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
 
-      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncoding>("Parents", "The parent permutations which should be crossed."));
+      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncodedSolution>("Parents", "The parent permutations which should be crossed."));
       ParentsParameter.ActualName = "VRPTours";
-      Parameters.Add(new LookupParameter<IVRPEncoding>("Child", "The child permutation resulting from the crossover."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("Child", "The child permutation resulting from the crossover."));
       ChildParameter.ActualName = "VRPTours";
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Crossovers/RandomParentCloneCrossover.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Crossovers/RandomParentCloneCrossover.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Crossovers/RandomParentCloneCrossover.cs	(revision 17698)
@@ -36,10 +36,10 @@
     }
 
-    public ILookupParameter<ItemArray<IVRPEncoding>> ParentsParameter {
-      get { return (ScopeTreeLookupParameter<IVRPEncoding>)Parameters["Parents"]; }
+    public ILookupParameter<ItemArray<IVRPEncodedSolution>> ParentsParameter {
+      get { return (ScopeTreeLookupParameter<IVRPEncodedSolution>)Parameters["Parents"]; }
     }
 
-    public ILookupParameter<IVRPEncoding> ChildParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["Child"]; }
+    public ILookupParameter<IVRPEncodedSolution> ChildParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["Child"]; }
     }
 
@@ -51,7 +51,7 @@
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
 
-      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncoding>("Parents", "The parent permutations which should be crossed."));
+      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncodedSolution>("Parents", "The parent permutations which should be crossed."));
       ParentsParameter.ActualName = "VRPTours";
-      Parameters.Add(new LookupParameter<IVRPEncoding>("Child", "The child permutation resulting from the crossover."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("Child", "The child permutation resulting from the crossover."));
       ChildParameter.ActualName = "VRPTours";
     }
@@ -67,7 +67,7 @@
     public override IOperation InstrumentedApply() {
       if (RandomParameter.ActualValue.Next() < 0.5)
-        ChildParameter.ActualValue = ParentsParameter.ActualValue[0].Clone() as IVRPEncoding;
+        ChildParameter.ActualValue = ParentsParameter.ActualValue[0].Clone() as IVRPEncodedSolution;
       else
-        ChildParameter.ActualValue = ParentsParameter.ActualValue[1].Clone() as IVRPEncoding;
+        ChildParameter.ActualValue = ParentsParameter.ActualValue[1].Clone() as IVRPEncodedSolution;
 
       return base.InstrumentedApply();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Crossovers/VRPCrossover.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Crossovers/VRPCrossover.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Crossovers/VRPCrossover.cs	(revision 17698)
@@ -30,10 +30,10 @@
   [StorableType("E26BAD0A-49E6-477C-AEA0-CB41552F0B2B")]
   public abstract class VRPCrossover : VRPOperator, IVRPCrossover {
-    public ILookupParameter<ItemArray<IVRPEncoding>> ParentsParameter {
-      get { return (ScopeTreeLookupParameter<IVRPEncoding>)Parameters["Parents"]; }
+    public ILookupParameter<ItemArray<IVRPEncodedSolution>> ParentsParameter {
+      get { return (ScopeTreeLookupParameter<IVRPEncodedSolution>)Parameters["Parents"]; }
     }
 
-    public ILookupParameter<IVRPEncoding> ChildParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["Child"]; }
+    public ILookupParameter<IVRPEncodedSolution> ChildParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["Child"]; }
     }
 
@@ -43,7 +43,7 @@
     public VRPCrossover()
       : base() {
-      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncoding>("Parents", "The parent permutations which should be crossed."));
+      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncodedSolution>("Parents", "The parent permutations which should be crossed."));
       ParentsParameter.ActualName = "VRPTours";
-      Parameters.Add(new LookupParameter<IVRPEncoding>("Child", "The child permutation resulting from the crossover."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("Child", "The child permutation resulting from the crossover."));
       ChildParameter.ActualName = "VRPTours";
     }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Manipulators/MultiVRPSolutionManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Manipulators/MultiVRPSolutionManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Manipulators/MultiVRPSolutionManipulator.cs	(revision 17698)
@@ -44,6 +44,6 @@
     }
 
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
 
@@ -58,5 +58,5 @@
       : base() {
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours to be manipulated."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours to be manipulated."));
 
       SelectedOperatorParameter.ActualName = "SelectedManipulationOperator";
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Manipulators/VRPManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Manipulators/VRPManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Manipulators/VRPManipulator.cs	(revision 17698)
@@ -30,6 +30,6 @@
   [StorableType("6A7616B7-0BA2-45DA-B89F-C4ECE93080BD")]
   public abstract class VRPManipulator : VRPOperator, IVRPManipulator {
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
 
@@ -39,5 +39,5 @@
     public VRPManipulator()
       : base() {
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours to be manipulated."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours to be manipulated."));
     }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveGenerator.cs	(revision 17698)
@@ -49,6 +49,6 @@
     }
 
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
 
@@ -86,5 +86,5 @@
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
 
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours."));
       Parameters.Add(new LookupParameter<IVRPMove>("VRPMove", "The generated moves."));
     }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveTabuChecker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveTabuChecker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveTabuChecker.cs	(revision 17698)
@@ -38,6 +38,6 @@
     }
 
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ILookupParameter<IVRPProblemInstance> ProblemInstanceParameter {
@@ -72,5 +72,5 @@
       : base() {
       Parameters.Add(new LookupParameter<IVRPMove>("VRPMove", "The move."));
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours considered in the move."));
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveTabuMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveTabuMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveTabuMaker.cs	(revision 17698)
@@ -52,6 +52,6 @@
       get { return (IValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
     }
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ILookupParameter<IVRPProblemInstance> ProblemInstanceParameter {
@@ -71,5 +71,5 @@
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, else if it is a minimization problem."));
 
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours considered in the move."));
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
     }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveEvaluator.cs	(revision 17698)
@@ -59,5 +59,5 @@
 
     //helper method to evaluate an updated individual
-    protected void UpdateEvaluation(IVRPEncoding updatedTours) {
+    protected void UpdateEvaluation(IVRPEncodedSolution updatedTours) {
       IVRPEvaluator evaluator = ProblemInstance.MoveEvaluator;
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveOperator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveOperator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveOperator.cs	(revision 17698)
@@ -30,6 +30,6 @@
   [StorableType("B2A37CCE-3EF6-4648-8A9B-2BCBD4EC93F1")]
   public abstract class VRPMoveOperator : VRPOperator, IVRPMoveOperator {
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
 
@@ -40,5 +40,5 @@
 
     public VRPMoveOperator() {
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours considered in the move."));
     }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/PermutationEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/PermutationEncoding.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/PermutationEncoding.cs	(revision 17698)
@@ -31,5 +31,5 @@
   [Item("PermutationEncoding", "Represents a base class for permutation encodings of VRP solutions.")]
   [StorableType("070CEB2B-0A37-4EE1-87DA-1D80F6D88B4A")]
-  public abstract class PermutationEncoding : Permutation, IVRPEncoding {
+  public abstract class PermutationEncoding : Permutation, IVRPEncodedSolution {
     #region IVRPEncoding Members
     public abstract List<Tour> GetTours();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/ShakingOperators/VehicleRoutingShakingOperator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/ShakingOperators/VehicleRoutingShakingOperator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/ShakingOperators/VehicleRoutingShakingOperator.cs	(revision 17698)
@@ -39,6 +39,6 @@
   public class VehicleRoutingShakingOperator : ShakingOperator<IVRPManipulator>, IVRPMultiNeighborhoodShakingOperator, IGeneralVRPOperator, IStochasticOperator {
     #region Parameters
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
 
@@ -65,5 +65,5 @@
     public VehicleRoutingShakingOperator()
       : base() {
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The vrp tour encoding to shake."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The vrp tour encoding to shake."));
       Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator that will be used for stochastic shaking operators."));
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/TourEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/TourEncoding.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/TourEncoding.cs	(revision 17698)
@@ -30,5 +30,5 @@
   [Item("TourEncoding", "Represents a base class for tour encodings of VRP solutions.")]
   [StorableType("FC5DBAE6-05D9-4C55-AA85-6E3C2330700F")]
-  public abstract class TourEncoding : Item, IVRPEncoding {
+  public abstract class TourEncoding : Item, IVRPEncodedSolution {
     public static new Image StaticItemImage {
       get { return HeuristicLab.Common.Resources.VSImageLibrary.Class; }
@@ -117,5 +117,5 @@
     }
 
-    public static void ConvertFrom(IVRPEncoding encoding, TourEncoding solution, IVRPProblemInstance problemInstance) {
+    public static void ConvertFrom(IVRPEncodedSolution encoding, TourEncoding solution, IVRPProblemInstance problemInstance) {
       solution.Tours = new ItemList<Tour>(encoding.GetTours());
       solution.Repair();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Creators/IterativeInsertionCreator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Creators/IterativeInsertionCreator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Creators/IterativeInsertionCreator.cs	(revision 17698)
@@ -81,6 +81,6 @@
     }
 
-    public static PotvinEncoding CreateSolution(IVRPProblemInstance instance, IRandom random, bool adhereTimeWindows) {
-      PotvinEncoding result = new PotvinEncoding(instance);
+    public static PotvinEncodedSolution CreateSolution(IVRPProblemInstance instance, IRandom random, bool adhereTimeWindows) {
+      PotvinEncodedSolution result = new PotvinEncodedSolution(instance);
 
       IPickupAndDeliveryProblemInstance pdp = instance as IPickupAndDeliveryProblemInstance;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Creators/PushForwardInsertionCreator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Creators/PushForwardInsertionCreator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Creators/PushForwardInsertionCreator.cs	(revision 17698)
@@ -194,8 +194,8 @@
     }
 
-    public static PotvinEncoding CreateSolution(IVRPProblemInstance problemInstance, IRandom random,
+    public static PotvinEncodedSolution CreateSolution(IVRPProblemInstance problemInstance, IRandom random,
       double alphaValue = 0.7, double betaValue = 0.1, double gammaValue = 0.2,
       double alphaVariance = 0.5, double betaVariance = 0.07, double gammaVariance = 0.14) {
-      PotvinEncoding result = new PotvinEncoding(problemInstance);
+      PotvinEncodedSolution result = new PotvinEncodedSolution(problemInstance);
 
       IPickupAndDeliveryProblemInstance pdp = problemInstance as IPickupAndDeliveryProblemInstance;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinCrossover.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinCrossover.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinCrossover.cs	(revision 17698)
@@ -54,7 +54,7 @@
     }
 
-    protected abstract PotvinEncoding Crossover(IRandom random, PotvinEncoding parent1, PotvinEncoding parent2);
+    protected abstract PotvinEncodedSolution Crossover(IRandom random, PotvinEncodedSolution parent1, PotvinEncodedSolution parent2);
 
-    protected static bool FindInsertionPlace(PotvinEncoding individual, int city, bool allowInfeasible,
+    protected static bool FindInsertionPlace(PotvinEncodedSolution individual, int city, bool allowInfeasible,
         out int route, out int place) {
       return individual.FindInsertionPlace(
@@ -63,5 +63,5 @@
     }
 
-    protected static Tour FindRoute(PotvinEncoding solution, int city) {
+    protected static Tour FindRoute(PotvinEncodedSolution solution, int city) {
       Tour found = null;
 
@@ -76,5 +76,5 @@
     }
 
-    protected static bool RouteUnrouted(PotvinEncoding solution, bool allowInfeasible) {
+    protected static bool RouteUnrouted(PotvinEncodedSolution solution, bool allowInfeasible) {
       bool success = true;
       int index = 0;
@@ -99,5 +99,5 @@
     }
 
-    protected static bool Repair(IRandom random, PotvinEncoding solution, Tour newTour, IVRPProblemInstance instance, bool allowInfeasible) {
+    protected static bool Repair(IRandom random, PotvinEncodedSolution solution, Tour newTour, IVRPProblemInstance instance, bool allowInfeasible) {
       bool success = true;
 
@@ -145,10 +145,10 @@
 
     public override IOperation InstrumentedApply() {
-      ItemArray<IVRPEncoding> parents = new ItemArray<IVRPEncoding>(ParentsParameter.ActualValue.Length);
+      ItemArray<IVRPEncodedSolution> parents = new ItemArray<IVRPEncodedSolution>(ParentsParameter.ActualValue.Length);
       for (int i = 0; i < ParentsParameter.ActualValue.Length; i++) {
-        IVRPEncoding solution = ParentsParameter.ActualValue[i];
+        IVRPEncodedSolution solution = ParentsParameter.ActualValue[i];
 
-        if (!(solution is PotvinEncoding)) {
-          parents[i] = PotvinEncoding.ConvertFrom(solution, ProblemInstance);
+        if (!(solution is PotvinEncodedSolution)) {
+          parents[i] = PotvinEncodedSolution.ConvertFrom(solution, ProblemInstance);
         } else {
           parents[i] = solution;
@@ -157,6 +157,6 @@
       ParentsParameter.ActualValue = parents;
 
-      ChildParameter.ActualValue = Crossover(RandomParameter.ActualValue, parents[0] as PotvinEncoding, parents[1] as PotvinEncoding);
-      (ChildParameter.ActualValue as PotvinEncoding).Repair();
+      ChildParameter.ActualValue = Crossover(RandomParameter.ActualValue, parents[0] as PotvinEncodedSolution, parents[1] as PotvinEncodedSolution);
+      (ChildParameter.ActualValue as PotvinEncodedSolution).Repair();
 
       return base.InstrumentedApply();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinInsertionBasedCrossover.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinInsertionBasedCrossover.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinInsertionBasedCrossover.cs	(revision 17698)
@@ -51,5 +51,5 @@
     }
 
-    private static int SelectRandomTourBiasedByLength(IRandom random, PotvinEncoding individual) {
+    private static int SelectRandomTourBiasedByLength(IRandom random, PotvinEncodedSolution individual) {
       int tourIndex = -1;
 
@@ -109,5 +109,5 @@
     }
 
-    private int SelectCityBiasedByNeighborDistance(IRandom random, Tour tour, IVRPEncoding solution) {
+    private int SelectCityBiasedByNeighborDistance(IRandom random, Tour tour, IVRPEncodedSolution solution) {
       int cityIndex = -1;
 
@@ -150,5 +150,5 @@
 
     private bool FindRouteInsertionPlace(
-      PotvinEncoding individual,
+      PotvinEncodedSolution individual,
       Tour tour,
       int city, bool allowInfeasible, out int place) {
@@ -181,5 +181,5 @@
     }
 
-    private ICollection<int> GetUnrouted(PotvinEncoding solution, int cities) {
+    private ICollection<int> GetUnrouted(PotvinEncodedSolution solution, int cities) {
       HashSet<int> undiscovered = new HashSet<int>();
       for (int i = 1; i <= cities; i++) {
@@ -195,6 +195,6 @@
     }
 
-    protected override PotvinEncoding Crossover(IRandom random, PotvinEncoding parent1, PotvinEncoding parent2) {
-      PotvinEncoding child = parent1.Clone() as PotvinEncoding;
+    protected override PotvinEncodedSolution Crossover(IRandom random, PotvinEncodedSolution parent1, PotvinEncodedSolution parent2) {
+      PotvinEncodedSolution child = parent1.Clone() as PotvinEncodedSolution;
       child.Tours.Clear();
 
@@ -202,5 +202,5 @@
 
       List<Tour> R1 = new List<Tour>();
-      PotvinEncoding p1Clone = parent1.Clone() as PotvinEncoding;
+      PotvinEncodedSolution p1Clone = parent1.Clone() as PotvinEncodedSolution;
 
       int length = Math.Min(Length.Value.Value, parent1.Tours.Count) + 1;
@@ -277,7 +277,7 @@
       else {
         if (random.NextDouble() < 0.5)
-          return parent1.Clone() as PotvinEncoding;
+          return parent1.Clone() as PotvinEncodedSolution;
         else
-          return parent2.Clone() as PotvinEncoding;
+          return parent2.Clone() as PotvinEncodedSolution;
       }
     }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinRouteBasedCrossover.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinRouteBasedCrossover.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinRouteBasedCrossover.cs	(revision 17698)
@@ -44,6 +44,6 @@
     }
 
-    public static PotvinEncoding Apply(IRandom random, PotvinEncoding parent1, PotvinEncoding parent2, IVRPProblemInstance problemInstance, bool allowInfeasible) {
-      PotvinEncoding child = parent2.Clone() as PotvinEncoding;
+    public static PotvinEncodedSolution Apply(IRandom random, PotvinEncodedSolution parent1, PotvinEncodedSolution parent2, IVRPProblemInstance problemInstance, bool allowInfeasible) {
+      PotvinEncodedSolution child = parent2.Clone() as PotvinEncodedSolution;
 
       if (parent1.Tours.Count > 0 && child.Tours.Count > 0) {
@@ -78,7 +78,7 @@
         else {
           if (random.NextDouble() < 0.5)
-            return parent1.Clone() as PotvinEncoding;
+            return parent1.Clone() as PotvinEncodedSolution;
           else
-            return parent2.Clone() as PotvinEncoding;
+            return parent2.Clone() as PotvinEncodedSolution;
         }
       } else {
@@ -87,5 +87,5 @@
     }
 
-    protected override PotvinEncoding Crossover(IRandom random, PotvinEncoding parent1, PotvinEncoding parent2) {
+    protected override PotvinEncodedSolution Crossover(IRandom random, PotvinEncodedSolution parent1, PotvinEncodedSolution parent2) {
       return Apply(random, parent1, parent2, ProblemInstance, AllowInfeasibleSolutions.Value.Value);
     }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinSequenceBasedCrossover.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinSequenceBasedCrossover.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinSequenceBasedCrossover.cs	(revision 17698)
@@ -43,6 +43,6 @@
     }
 
-    public static PotvinEncoding Apply(IRandom random, PotvinEncoding parent1, PotvinEncoding parent2, IVRPProblemInstance problemInstance, bool allowInfeasible) {
-      PotvinEncoding child = parent1.Clone() as PotvinEncoding;
+    public static PotvinEncodedSolution Apply(IRandom random, PotvinEncodedSolution parent1, PotvinEncodedSolution parent2, IVRPProblemInstance problemInstance, bool allowInfeasible) {
+      PotvinEncodedSolution child = parent1.Clone() as PotvinEncodedSolution;
       Tour newTour = new Tour();
 
@@ -80,7 +80,7 @@
         } else {
           if (random.NextDouble() < 0.5)
-            return parent1.Clone() as PotvinEncoding;
+            return parent1.Clone() as PotvinEncodedSolution;
           else
-            return parent2.Clone() as PotvinEncoding;
+            return parent2.Clone() as PotvinEncodedSolution;
         }
       } else {
@@ -89,5 +89,5 @@
     }
 
-    protected override PotvinEncoding Crossover(IRandom random, PotvinEncoding parent1, PotvinEncoding parent2) {
+    protected override PotvinEncodedSolution Crossover(IRandom random, PotvinEncodedSolution parent1, PotvinEncodedSolution parent2) {
       return Apply(random, parent1, parent2, ProblemInstance, AllowInfeasibleSolutions.Value.Value);
     }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinLocalSearchManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinLocalSearchManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinLocalSearchManipulator.cs	(revision 17698)
@@ -53,5 +53,5 @@
 
     private static bool FindBetterInsertionPlace(
-      PotvinEncoding individual, IVRPProblemInstance instance, int tour, int city, int length,
+      PotvinEncodedSolution individual, IVRPProblemInstance instance, int tour, int city, int length,
       out int insertionTour, out int insertionPlace) {
       bool insertionFound = false;
@@ -92,5 +92,5 @@
     }
 
-    public static void ApplyManipulation(IRandom random, PotvinEncoding individual, IVRPProblemInstance instance, int maxIterations) {
+    public static void ApplyManipulation(IRandom random, PotvinEncodedSolution individual, IVRPProblemInstance instance, int maxIterations) {
       //only apply to feasible individuals
       if (instance.Feasible(individual)) {
@@ -141,5 +141,5 @@
  
 
-    protected override void Manipulate(IRandom random, PotvinEncoding individual) {
+    protected override void Manipulate(IRandom random, PotvinEncodedSolution individual) {
       ApplyManipulation(random, individual, ProblemInstance, Iterations.Value.Value);     
     }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinManipulator.cs	(revision 17698)
@@ -53,7 +53,7 @@
     }
 
-    protected abstract void Manipulate(IRandom random, PotvinEncoding individual);
+    protected abstract void Manipulate(IRandom random, PotvinEncodedSolution individual);
 
-    protected static int SelectRandomTourBiasedByLength(IRandom random, PotvinEncoding individual, IVRPProblemInstance instance) {
+    protected static int SelectRandomTourBiasedByLength(IRandom random, PotvinEncodedSolution individual, IVRPProblemInstance instance) {
       int tourIndex = -1;
 
@@ -82,5 +82,5 @@
     }
 
-    protected static bool FindInsertionPlace(PotvinEncoding individual, int city, int routeToAvoid, bool allowInfeasible, out int route, out int place) {
+    protected static bool FindInsertionPlace(PotvinEncodedSolution individual, int city, int routeToAvoid, bool allowInfeasible, out int route, out int place) {
       return individual.FindInsertionPlace(
         city, routeToAvoid, allowInfeasible, out route, out place);
@@ -88,11 +88,11 @@
 
     public override IOperation InstrumentedApply() {
-      IVRPEncoding solution = VRPToursParameter.ActualValue;
-      if (!(solution is PotvinEncoding)) {
-        VRPToursParameter.ActualValue = PotvinEncoding.ConvertFrom(solution, ProblemInstance);
+      IVRPEncodedSolution solution = VRPToursParameter.ActualValue;
+      if (!(solution is PotvinEncodedSolution)) {
+        VRPToursParameter.ActualValue = PotvinEncodedSolution.ConvertFrom(solution, ProblemInstance);
       }
 
-      Manipulate(RandomParameter.ActualValue, VRPToursParameter.ActualValue as PotvinEncoding);
-      (VRPToursParameter.ActualValue as PotvinEncoding).Repair();
+      Manipulate(RandomParameter.ActualValue, VRPToursParameter.ActualValue as PotvinEncodedSolution);
+      (VRPToursParameter.ActualValue as PotvinEncodedSolution).Repair();
 
       return base.InstrumentedApply();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinOneLevelExchangeManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinOneLevelExchangeManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinOneLevelExchangeManipulator.cs	(revision 17698)
@@ -42,5 +42,5 @@
     }
 
-    public static void ApplyManipulation(IRandom random, PotvinEncoding individual, IVRPProblemInstance instance, bool allowInfeasible) {
+    public static void ApplyManipulation(IRandom random, PotvinEncodedSolution individual, IVRPProblemInstance instance, bool allowInfeasible) {
       int selectedIndex = SelectRandomTourBiasedByLength(random, individual, instance);
       if (selectedIndex >= 0) {
@@ -68,5 +68,5 @@
     }
 
-    protected override void Manipulate(IRandom random, PotvinEncoding individual) {
+    protected override void Manipulate(IRandom random, PotvinEncodedSolution individual) {
       bool allowInfeasible = AllowInfeasibleSolutions.Value.Value;
       ApplyManipulation(random, individual, ProblemInstance, allowInfeasible);      
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinPairwiseOneLevelExchangeManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinPairwiseOneLevelExchangeManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinPairwiseOneLevelExchangeManipulator.cs	(revision 17698)
@@ -44,5 +44,5 @@
     }
 
-    public static bool PairwiseMove(PotvinEncoding individual, IVRPProblemInstance instance, int city, bool allowInfeasible) {
+    public static bool PairwiseMove(PotvinEncodedSolution individual, IVRPProblemInstance instance, int city, bool allowInfeasible) {
       bool success;
 
@@ -128,5 +128,5 @@
     }
 
-    public static void ApplyManipulation(IRandom random, PotvinEncoding individual, IPickupAndDeliveryProblemInstance pdp, bool allowInfeasible) {
+    public static void ApplyManipulation(IRandom random, PotvinEncodedSolution individual, IPickupAndDeliveryProblemInstance pdp, bool allowInfeasible) {
       int selectedIndex = SelectRandomTourBiasedByLength(random, individual, pdp);
       if (selectedIndex >= 0) {
@@ -149,5 +149,5 @@
 
 
-    protected override void Manipulate(IRandom random, PotvinEncoding individual) {
+    protected override void Manipulate(IRandom random, PotvinEncodedSolution individual) {
       bool allowInfeasible = AllowInfeasibleSolutions.Value.Value;
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinPairwiseTwoLevelExchangeManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinPairwiseTwoLevelExchangeManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinPairwiseTwoLevelExchangeManipulator.cs	(revision 17698)
@@ -45,6 +45,6 @@
     }
 
-    private static PotvinEncoding ReplacePair(PotvinEncoding individual, IVRPProblemInstance instance, int replaced, int replacing, bool allowInfeasible) {
-      individual = individual.Clone() as PotvinEncoding;
+    private static PotvinEncodedSolution ReplacePair(PotvinEncodedSolution individual, IVRPProblemInstance instance, int replaced, int replacing, bool allowInfeasible) {
+      individual = individual.Clone() as PotvinEncodedSolution;
       IPickupAndDeliveryProblemInstance pdp = instance as IPickupAndDeliveryProblemInstance;
 
@@ -128,6 +128,6 @@
     }
 
-    public static PotvinEncoding ApplyManipulation(IRandom random, PotvinEncoding individual, IPickupAndDeliveryProblemInstance pdp, bool allowInfeasible) {
-      PotvinEncoding result = null;
+    public static PotvinEncodedSolution ApplyManipulation(IRandom random, PotvinEncodedSolution individual, IPickupAndDeliveryProblemInstance pdp, bool allowInfeasible) {
+      PotvinEncodedSolution result = null;
       
       int selectedIndex = SelectRandomTourBiasedByLength(random, individual, pdp);
@@ -182,10 +182,10 @@
     }
 
-    protected override void Manipulate(IRandom random, PotvinEncoding individual) {
+    protected override void Manipulate(IRandom random, PotvinEncodedSolution individual) {
       bool allowInfeasible = AllowInfeasibleSolutions.Value.Value;
       IPickupAndDeliveryProblemInstance pdp = ProblemInstance as IPickupAndDeliveryProblemInstance;
 
       if (pdp != null) {
-        PotvinEncoding result = ApplyManipulation(random, individual, pdp, allowInfeasible);
+        PotvinEncodedSolution result = ApplyManipulation(random, individual, pdp, allowInfeasible);
         if (result != null) {
           VRPToursParameter.ActualValue = result;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs	(revision 17698)
@@ -42,5 +42,5 @@
     }
 
-    public static void ApplyManipulation(IRandom random, PotvinEncoding individual, IVRPProblemInstance instance, bool allowInfeasible) {
+    public static void ApplyManipulation(IRandom random, PotvinEncodedSolution individual, IVRPProblemInstance instance, bool allowInfeasible) {
       int selectedIndex = SelectRandomTourBiasedByLength(random, individual, instance);
       if (selectedIndex >= 0) {
@@ -93,5 +93,5 @@
       
 
-    protected override void Manipulate(IRandom random, PotvinEncoding individual) {
+    protected override void Manipulate(IRandom random, PotvinEncodedSolution individual) {
       bool allowInfeasible = AllowInfeasibleSolutions.Value.Value;
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinVehicleAssignmentManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinVehicleAssignmentManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinVehicleAssignmentManipulator.cs	(revision 17698)
@@ -61,12 +61,12 @@
 
     public override IOperation InstrumentedApply() {
-      IVRPEncoding solution = VRPToursParameter.ActualValue;
-      if (!(solution is PotvinEncoding)) {
-        VRPToursParameter.ActualValue = PotvinEncoding.ConvertFrom(solution, ProblemInstance);
+      IVRPEncodedSolution solution = VRPToursParameter.ActualValue;
+      if (!(solution is PotvinEncodedSolution)) {
+        VRPToursParameter.ActualValue = PotvinEncodedSolution.ConvertFrom(solution, ProblemInstance);
       }
 
       OperationCollection next = new OperationCollection(base.InstrumentedApply());
 
-      VehicleAssignmentParameter.ActualValue = (VRPToursParameter.ActualValue as PotvinEncoding).VehicleAssignment;
+      VehicleAssignmentParameter.ActualValue = (VRPToursParameter.ActualValue as PotvinEncodedSolution).VehicleAssignment;
       VehicleAssignmentManipuator.Value.PermutationParameter.ActualName = VehicleAssignmentParameter.ActualName;
       next.Insert(0, ExecutionContext.CreateOperation(VehicleAssignmentManipuator.Value));
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationExhaustiveMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationExhaustiveMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationExhaustiveMoveGenerator.cs	(revision 17698)
@@ -46,5 +46,5 @@
     }
 
-    protected override PotvinCustomerRelocationMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinCustomerRelocationMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinCustomerRelocationMove> result = new List<PotvinCustomerRelocationMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMove.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMove.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMove.cs	(revision 17698)
@@ -32,5 +32,5 @@
   public class PotvinCustomerRelocationMove : Item, IVRPMove {
     [Storable]
-    public IVRPEncoding Individual { get; protected set; }
+    public IVRPEncodedSolution Individual { get; protected set; }
 
     [Storable]
@@ -51,10 +51,10 @@
     }
 
-    public PotvinCustomerRelocationMove(int city, int oldTour, int tour, PotvinEncoding individual) {
+    public PotvinCustomerRelocationMove(int city, int oldTour, int tour, PotvinEncodedSolution individual) {
       City = city;
       OldTour = oldTour;
       Tour = tour;
 
-      this.Individual = individual.Clone() as PotvinEncoding;
+      this.Individual = individual.Clone() as PotvinEncodedSolution;
     }
 
@@ -69,5 +69,5 @@
       this.Tour = original.Tour;
 
-      this.Individual = cloner.Clone(Individual) as PotvinEncoding;
+      this.Individual = cloner.Clone(Individual) as PotvinEncodedSolution;
     }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveEvaluator.cs	(revision 17698)
@@ -73,5 +73,5 @@
       PotvinCustomerRelocationMove move = CustomerRelocationMoveParameter.ActualValue;
 
-      PotvinEncoding newSolution = CustomerRelocationMoveParameter.ActualValue.Individual.Clone() as PotvinEncoding;
+      PotvinEncodedSolution newSolution = CustomerRelocationMoveParameter.ActualValue.Individual.Clone() as PotvinEncodedSolution;
       PotvinCustomerRelocationMoveMaker.Apply(newSolution, move, ProblemInstance);
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveGenerator.cs	(revision 17698)
@@ -55,10 +55,10 @@
     }
 
-    protected abstract PotvinCustomerRelocationMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance);
+    protected abstract PotvinCustomerRelocationMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance);
 
     public override IOperation InstrumentedApply() {
       IOperation next = base.InstrumentedApply();
 
-      PotvinEncoding individual = VRPToursParameter.ActualValue as PotvinEncoding;
+      PotvinEncodedSolution individual = VRPToursParameter.ActualValue as PotvinEncodedSolution;
       PotvinCustomerRelocationMove[] moves = GenerateMoves(individual, ProblemInstance);
       Scope[] moveScopes = new Scope[moves.Length];
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveMaker.cs	(revision 17698)
@@ -68,5 +68,5 @@
     }
 
-    public static void Apply(PotvinEncoding solution, PotvinCustomerRelocationMove move, IVRPProblemInstance problemInstance) {
+    public static void Apply(PotvinEncodedSolution solution, PotvinCustomerRelocationMove move, IVRPProblemInstance problemInstance) {
       if (move.Tour >= solution.Tours.Count)
         solution.Tours.Add(new Tour());
@@ -87,5 +87,5 @@
       PotvinCustomerRelocationMove move = CustomerRelocationMoveParameter.ActualValue;
 
-      PotvinEncoding newSolution = move.Individual.Clone() as PotvinEncoding;
+      PotvinEncodedSolution newSolution = move.Individual.Clone() as PotvinEncodedSolution;
       Apply(newSolution, move, ProblemInstance);
       newSolution.Repair();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveTabuCriterion.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveTabuCriterion.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveTabuCriterion.cs	(revision 17698)
@@ -44,6 +44,6 @@
       get { return CustomerRelocationMoveParameter; }
     }
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ILookupParameter<IVRPProblemInstance> ProblemInstanceParameter {
@@ -78,5 +78,5 @@
       : base() {
       Parameters.Add(new LookupParameter<PotvinCustomerRelocationMove>("PotvinCustomerRelocationMove", "The moves that should be made."));
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours considered in the move."));
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveTabuMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveTabuMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveTabuMaker.cs	(revision 17698)
@@ -37,6 +37,6 @@
       get { return CustomerRelocationMoveParameter; }
     }
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ILookupParameter<IVRPProblemInstance> ProblemInstanceParameter {
@@ -50,5 +50,5 @@
       : base() {
       Parameters.Add(new LookupParameter<PotvinCustomerRelocationMove>("PotvinCustomerRelocationMove", "The moves that should be made."));
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours considered in the move."));
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
     }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMultiMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMultiMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMultiMoveGenerator.cs	(revision 17698)
@@ -59,5 +59,5 @@
     }
 
-    protected override PotvinCustomerRelocationMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinCustomerRelocationMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinCustomerRelocationMove> result = new List<PotvinCustomerRelocationMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationSingleMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationSingleMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationSingleMoveGenerator.cs	(revision 17698)
@@ -61,5 +61,5 @@
     }
 
-    public static PotvinCustomerRelocationMove Apply(PotvinEncoding individual, IVRPProblemInstance problemInstance, IRandom rand) {
+    public static PotvinCustomerRelocationMove Apply(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance, IRandom rand) {
       int city = 1 + rand.Next(individual.Cities);
       Tour oldTour = individual.Tours.Find(t => t.Stops.Contains(city));
@@ -77,5 +77,5 @@
     }
 
-    protected override PotvinCustomerRelocationMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinCustomerRelocationMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinCustomerRelocationMove> result = new List<PotvinCustomerRelocationMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeExhaustiveMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeExhaustiveMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeExhaustiveMoveGenerator.cs	(revision 17698)
@@ -47,5 +47,5 @@
     }
 
-    protected override PotvinPDExchangeMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinPDExchangeMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinPDExchangeMove> result = new List<PotvinPDExchangeMove>();
       IPickupAndDeliveryProblemInstance pdp = problemInstance as IPickupAndDeliveryProblemInstance;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMove.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMove.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMove.cs	(revision 17698)
@@ -33,5 +33,5 @@
   public class PotvinPDExchangeMove : Item, IVRPMove {
     [Storable]
-    public IVRPEncoding Individual { get; protected set; }
+    public IVRPEncodedSolution Individual { get; protected set; }
 
     [Storable]
@@ -55,5 +55,5 @@
     }
 
-    public PotvinPDExchangeMove(int city, int oldTour, int tour, int replaced, PotvinEncoding individual) {
+    public PotvinPDExchangeMove(int city, int oldTour, int tour, int replaced, PotvinEncodedSolution individual) {
       City = city;
       OldTour = oldTour;
@@ -61,5 +61,5 @@
       Replaced = replaced;
 
-      this.Individual = individual.Clone() as PotvinEncoding;
+      this.Individual = individual.Clone() as PotvinEncodedSolution;
     }
 
@@ -78,5 +78,5 @@
       this.Replaced = original.Replaced;
 
-      this.Individual = cloner.Clone(Individual) as PotvinEncoding;
+      this.Individual = cloner.Clone(Individual) as PotvinEncodedSolution;
     }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMoveEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMoveEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMoveEvaluator.cs	(revision 17698)
@@ -73,5 +73,5 @@
       PotvinPDExchangeMove move = PDExchangeMoveParameter.ActualValue;
 
-      PotvinEncoding newSolution = PDExchangeMoveParameter.ActualValue.Individual.Clone() as PotvinEncoding;
+      PotvinEncodedSolution newSolution = PDExchangeMoveParameter.ActualValue.Individual.Clone() as PotvinEncodedSolution;
       PotvinPDExchangeMoveMaker.Apply(newSolution, move, ProblemInstance);
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMoveGenerator.cs	(revision 17698)
@@ -55,10 +55,10 @@
     }
 
-    protected abstract PotvinPDExchangeMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance);
+    protected abstract PotvinPDExchangeMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance);
 
     public override IOperation InstrumentedApply() {
       IOperation next = base.InstrumentedApply();
 
-      PotvinEncoding individual = VRPToursParameter.ActualValue as PotvinEncoding;
+      PotvinEncodedSolution individual = VRPToursParameter.ActualValue as PotvinEncodedSolution;
       PotvinPDExchangeMove[] moves = GenerateMoves(individual, ProblemInstance);
       Scope[] moveScopes = new Scope[moves.Length];
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMoveMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMoveMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMoveMaker.cs	(revision 17698)
@@ -56,5 +56,5 @@
     }
 
-    public static void Apply(PotvinEncoding solution, PotvinPDExchangeMove move, IVRPProblemInstance problemInstance) {
+    public static void Apply(PotvinEncodedSolution solution, PotvinPDExchangeMove move, IVRPProblemInstance problemInstance) {
       if (move.Tour >= solution.Tours.Count)
         solution.Tours.Add(new Tour());
@@ -95,5 +95,5 @@
       PotvinPDExchangeMove move = PDExchangeMoveParameter.ActualValue;
 
-      PotvinEncoding newSolution = move.Individual.Clone() as PotvinEncoding;
+      PotvinEncodedSolution newSolution = move.Individual.Clone() as PotvinEncodedSolution;
       Apply(newSolution, move, ProblemInstance);
       VRPToursParameter.ActualValue = newSolution;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMoveTabuCriterion.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMoveTabuCriterion.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMoveTabuCriterion.cs	(revision 17698)
@@ -44,6 +44,6 @@
       get { return PDExchangeMoveParameter; }
     }
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ILookupParameter<IVRPProblemInstance> ProblemInstanceParameter {
@@ -88,5 +88,5 @@
       : base() {
       Parameters.Add(new LookupParameter<PotvinPDExchangeMove>("PotvinPDExchangeMove", "The moves that should be made."));
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours considered in the move."));
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMoveTabuMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMoveTabuMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMoveTabuMaker.cs	(revision 17698)
@@ -56,6 +56,6 @@
       get { return PDExchangeMoveParameter; }
     }
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ILookupParameter<IVRPProblemInstance> ProblemInstanceParameter {
@@ -88,5 +88,5 @@
 
       Parameters.Add(new LookupParameter<PotvinPDExchangeMove>("PotvinPDExchangeMove", "The moves that should be made."));
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours considered in the move."));
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMultiMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMultiMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMultiMoveGenerator.cs	(revision 17698)
@@ -59,5 +59,5 @@
     }
 
-    protected override PotvinPDExchangeMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinPDExchangeMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinPDExchangeMove> result = new List<PotvinPDExchangeMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeSingleMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeSingleMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeSingleMoveGenerator.cs	(revision 17698)
@@ -54,5 +54,5 @@
     }
 
-    public static PotvinPDExchangeMove Apply(PotvinEncoding individual, IVRPProblemInstance problemInstance, IRandom rand) {
+    public static PotvinPDExchangeMove Apply(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance, IRandom rand) {
       List<int> cities = new List<int>();
 
@@ -99,5 +99,5 @@
     }
 
-    protected override PotvinPDExchangeMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinPDExchangeMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinPDExchangeMove> result = new List<PotvinPDExchangeMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeExhaustiveMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeExhaustiveMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeExhaustiveMoveGenerator.cs	(revision 17698)
@@ -47,5 +47,5 @@
     }
 
-    protected override PotvinPDRearrangeMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinPDRearrangeMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinPDRearrangeMove> result = new List<PotvinPDRearrangeMove>();
       IPickupAndDeliveryProblemInstance pdp = problemInstance as IPickupAndDeliveryProblemInstance;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMove.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMove.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMove.cs	(revision 17698)
@@ -33,5 +33,5 @@
   public class PotvinPDRearrangeMove : Item, IVRPMove {
     [Storable]
-    public IVRPEncoding Individual { get; protected set; }
+    public IVRPEncodedSolution Individual { get; protected set; }
 
     [Storable]
@@ -49,9 +49,9 @@
     }
 
-    public PotvinPDRearrangeMove(int city, int tour, PotvinEncoding individual) {
+    public PotvinPDRearrangeMove(int city, int tour, PotvinEncodedSolution individual) {
       City = city;
       Tour = tour;
 
-      this.Individual = individual.Clone() as PotvinEncoding;
+      this.Individual = individual.Clone() as PotvinEncodedSolution;
     }
 
@@ -65,5 +65,5 @@
       this.Tour = original.Tour;
 
-      this.Individual = cloner.Clone(Individual) as PotvinEncoding;
+      this.Individual = cloner.Clone(Individual) as PotvinEncodedSolution;
     }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMoveEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMoveEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMoveEvaluator.cs	(revision 17698)
@@ -73,5 +73,5 @@
       PotvinPDRearrangeMove move = PDRearrangeMoveParameter.ActualValue;
 
-      PotvinEncoding newSolution = PDRearrangeMoveParameter.ActualValue.Individual.Clone() as PotvinEncoding;
+      PotvinEncodedSolution newSolution = PDRearrangeMoveParameter.ActualValue.Individual.Clone() as PotvinEncodedSolution;
       PotvinPDRearrangeMoveMaker.Apply(newSolution, move, ProblemInstance);
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMoveGenerator.cs	(revision 17698)
@@ -55,10 +55,10 @@
     }
 
-    protected abstract PotvinPDRearrangeMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance);
+    protected abstract PotvinPDRearrangeMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance);
 
     public override IOperation InstrumentedApply() {
       IOperation next = base.InstrumentedApply();
 
-      PotvinEncoding individual = VRPToursParameter.ActualValue as PotvinEncoding;
+      PotvinEncodedSolution individual = VRPToursParameter.ActualValue as PotvinEncodedSolution;
       PotvinPDRearrangeMove[] moves = GenerateMoves(individual, ProblemInstance);
       Scope[] moveScopes = new Scope[moves.Length];
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMoveMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMoveMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMoveMaker.cs	(revision 17698)
@@ -56,5 +56,5 @@
     }
 
-    public static void Apply(PotvinEncoding solution, PotvinPDRearrangeMove move, IVRPProblemInstance problemInstance) {
+    public static void Apply(PotvinEncodedSolution solution, PotvinPDRearrangeMove move, IVRPProblemInstance problemInstance) {
       Tour tour = solution.Tours[move.Tour];
       int position = tour.Stops.IndexOf(move.City);
@@ -82,5 +82,5 @@
       PotvinPDRearrangeMove move = PDRearrangeMoveParameter.ActualValue;
 
-      PotvinEncoding newSolution = move.Individual.Clone() as PotvinEncoding;
+      PotvinEncodedSolution newSolution = move.Individual.Clone() as PotvinEncodedSolution;
       Apply(newSolution, move, ProblemInstance);
       VRPToursParameter.ActualValue = newSolution;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMoveTabuCriterion.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMoveTabuCriterion.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMoveTabuCriterion.cs	(revision 17698)
@@ -44,6 +44,6 @@
       get { return PDRearrangeMoveParameter; }
     }
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ILookupParameter<IVRPProblemInstance> ProblemInstanceParameter {
@@ -88,5 +88,5 @@
       : base() {
       Parameters.Add(new LookupParameter<PotvinPDRearrangeMove>("PotvinPDRearrangeMove", "The moves that should be made."));
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours considered in the move."));
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMoveTabuMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMoveTabuMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMoveTabuMaker.cs	(revision 17698)
@@ -38,6 +38,6 @@
       get { return PDRearrangeMoveParameter; }
     }
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ILookupParameter<IVRPProblemInstance> ProblemInstanceParameter {
@@ -64,5 +64,5 @@
       : base() {
       Parameters.Add(new LookupParameter<PotvinPDRearrangeMove>("PotvinPDRearrangeMove", "The moves that should be made."));
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours considered in the move."));
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMultiMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMultiMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMultiMoveGenerator.cs	(revision 17698)
@@ -59,5 +59,5 @@
     }
 
-    protected override PotvinPDRearrangeMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinPDRearrangeMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinPDRearrangeMove> result = new List<PotvinPDRearrangeMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeSingleMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeSingleMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeSingleMoveGenerator.cs	(revision 17698)
@@ -54,5 +54,5 @@
     }
 
-    public static PotvinPDRearrangeMove Apply(PotvinEncoding individual, IVRPProblemInstance problemInstance, IRandom rand) {
+    public static PotvinPDRearrangeMove Apply(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance, IRandom rand) {
       List<int> cities = new List<int>();
 
@@ -72,5 +72,5 @@
     }
 
-    protected override PotvinPDRearrangeMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinPDRearrangeMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinPDRearrangeMove> result = new List<PotvinPDRearrangeMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftExhaustiveMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftExhaustiveMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftExhaustiveMoveGenerator.cs	(revision 17698)
@@ -47,5 +47,5 @@
     }
 
-    protected override PotvinPDShiftMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinPDShiftMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinPDShiftMove> result = new List<PotvinPDShiftMove>();
       IPickupAndDeliveryProblemInstance pdp = problemInstance as IPickupAndDeliveryProblemInstance;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMove.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMove.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMove.cs	(revision 17698)
@@ -33,5 +33,5 @@
   public class PotvinPDShiftMove : Item, IVRPMove {
     [Storable]
-    public IVRPEncoding Individual { get; protected set; }
+    public IVRPEncodedSolution Individual { get; protected set; }
 
     [Storable]
@@ -52,10 +52,10 @@
     }
 
-    public PotvinPDShiftMove(int city, int oldTour, int tour, PotvinEncoding individual) {
+    public PotvinPDShiftMove(int city, int oldTour, int tour, PotvinEncodedSolution individual) {
       City = city;
       OldTour = oldTour;
       Tour = tour;
 
-      this.Individual = individual.Clone() as PotvinEncoding;
+      this.Individual = individual.Clone() as PotvinEncodedSolution;
     }
 
@@ -70,5 +70,5 @@
       this.Tour = original.Tour;
 
-      this.Individual = cloner.Clone(Individual) as PotvinEncoding;
+      this.Individual = cloner.Clone(Individual) as PotvinEncodedSolution;
     }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMoveEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMoveEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMoveEvaluator.cs	(revision 17698)
@@ -73,5 +73,5 @@
       PotvinPDShiftMove move = PDShiftMoveParameter.ActualValue;
 
-      PotvinEncoding newSolution = PDShiftMoveParameter.ActualValue.Individual.Clone() as PotvinEncoding;
+      PotvinEncodedSolution newSolution = PDShiftMoveParameter.ActualValue.Individual.Clone() as PotvinEncodedSolution;
       PotvinPDShiftMoveMaker.Apply(newSolution, move, ProblemInstance);
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMoveGenerator.cs	(revision 17698)
@@ -55,10 +55,10 @@
     }
 
-    protected abstract PotvinPDShiftMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance);
+    protected abstract PotvinPDShiftMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance);
 
     public override IOperation InstrumentedApply() {
       IOperation next = base.InstrumentedApply();
 
-      PotvinEncoding individual = VRPToursParameter.ActualValue as PotvinEncoding;
+      PotvinEncodedSolution individual = VRPToursParameter.ActualValue as PotvinEncodedSolution;
       PotvinPDShiftMove[] moves = GenerateMoves(individual, ProblemInstance);
       Scope[] moveScopes = new Scope[moves.Length];
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMoveMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMoveMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMoveMaker.cs	(revision 17698)
@@ -57,5 +57,5 @@
     }
 
-    public static void Apply(PotvinEncoding solution, PotvinPDShiftMove move, IVRPProblemInstance problemInstance) {
+    public static void Apply(PotvinEncodedSolution solution, PotvinPDShiftMove move, IVRPProblemInstance problemInstance) {
       bool newTour = false;
 
@@ -121,5 +121,5 @@
       PotvinPDShiftMove move = PDShiftMoveParameter.ActualValue;
 
-      PotvinEncoding newSolution = move.Individual.Clone() as PotvinEncoding;
+      PotvinEncodedSolution newSolution = move.Individual.Clone() as PotvinEncodedSolution;
       Apply(newSolution, move, ProblemInstance);
       VRPToursParameter.ActualValue = newSolution;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMoveTabuCriterion.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMoveTabuCriterion.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMoveTabuCriterion.cs	(revision 17698)
@@ -44,6 +44,6 @@
       get { return PDShiftMoveParameter; }
     }
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ILookupParameter<IVRPProblemInstance> ProblemInstanceParameter {
@@ -88,5 +88,5 @@
       : base() {
       Parameters.Add(new LookupParameter<PotvinPDShiftMove>("PotvinPDShiftMove", "The moves that should be made."));
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours considered in the move."));
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMoveTabuMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMoveTabuMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMoveTabuMaker.cs	(revision 17698)
@@ -38,6 +38,6 @@
       get { return PDShiftMoveParameter; }
     }
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ILookupParameter<IVRPProblemInstance> ProblemInstanceParameter {
@@ -64,5 +64,5 @@
       : base() {
       Parameters.Add(new LookupParameter<PotvinPDShiftMove>("PotvinPDShiftMove", "The moves that should be made."));
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours considered in the move."));
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMultiMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMultiMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMultiMoveGenerator.cs	(revision 17698)
@@ -59,5 +59,5 @@
     }
 
-    protected override PotvinPDShiftMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinPDShiftMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinPDShiftMove> result = new List<PotvinPDShiftMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftSingleMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftSingleMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftSingleMoveGenerator.cs	(revision 17698)
@@ -54,5 +54,5 @@
     }
 
-    public static PotvinPDShiftMove Apply(PotvinEncoding individual, IVRPProblemInstance problemInstance, IRandom rand) {
+    public static PotvinPDShiftMove Apply(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance, IRandom rand) {
       List<int> cities = new List<int>();
 
@@ -82,5 +82,5 @@
     }
 
-    protected override PotvinPDShiftMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinPDShiftMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinPDShiftMove> result = new List<PotvinPDShiftMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PotvinMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PotvinMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PotvinMoveGenerator.cs	(revision 17698)
@@ -42,7 +42,7 @@
 
     public override IOperation InstrumentedApply() {
-      IVRPEncoding solution = VRPToursParameter.ActualValue;
-      if (!(solution is PotvinEncoding)) {
-        VRPToursParameter.ActualValue = PotvinEncoding.ConvertFrom(solution, ProblemInstance);
+      IVRPEncodedSolution solution = VRPToursParameter.ActualValue;
+      if (!(solution is PotvinEncodedSolution)) {
+        VRPToursParameter.ActualValue = PotvinEncodedSolution.ConvertFrom(solution, ProblemInstance);
       }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarExhaustiveMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarExhaustiveMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarExhaustiveMoveGenerator.cs	(revision 17698)
@@ -46,5 +46,5 @@
     }
 
-    protected override PotvinTwoOptStarMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinTwoOptStarMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinTwoOptStarMove> result = new List<PotvinTwoOptStarMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMove.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMove.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMove.cs	(revision 17698)
@@ -32,5 +32,5 @@
   public class PotvinTwoOptStarMove : Item, IVRPMove {
     [Storable]
-    public IVRPEncoding Individual { get; protected set; }
+    public IVRPEncodedSolution Individual { get; protected set; }
 
     [Storable]
@@ -56,5 +56,5 @@
     }
 
-    public PotvinTwoOptStarMove(int tour1, int x1, int tour2, int x2, PotvinEncoding individual) {
+    public PotvinTwoOptStarMove(int tour1, int x1, int tour2, int x2, PotvinEncodedSolution individual) {
       Tour1 = tour1;
       X1 = x1;
@@ -62,5 +62,5 @@
       X2 = x2;
 
-      this.Individual = individual.Clone() as PotvinEncoding;
+      this.Individual = individual.Clone() as PotvinEncodedSolution;
     }
 
@@ -76,5 +76,5 @@
       this.X2 = original.X2;
 
-      this.Individual = cloner.Clone(Individual) as PotvinEncoding;
+      this.Individual = cloner.Clone(Individual) as PotvinEncodedSolution;
     }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMoveEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMoveEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMoveEvaluator.cs	(revision 17698)
@@ -55,5 +55,5 @@
       PotvinTwoOptStarMove move = TwoOptStarMoveParameter.ActualValue;
 
-      PotvinEncoding newSolution = TwoOptStarMoveParameter.ActualValue.Individual.Clone() as PotvinEncoding;
+      PotvinEncodedSolution newSolution = TwoOptStarMoveParameter.ActualValue.Individual.Clone() as PotvinEncodedSolution;
       PotvinTwoOptStarMoveMaker.Apply(newSolution, move, ProblemInstance);
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMoveGenerator.cs	(revision 17698)
@@ -55,10 +55,10 @@
     }
 
-    protected abstract PotvinTwoOptStarMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance);
+    protected abstract PotvinTwoOptStarMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance);
 
     public override IOperation InstrumentedApply() {
       IOperation next = base.InstrumentedApply();
 
-      PotvinEncoding individual = VRPToursParameter.ActualValue as PotvinEncoding;
+      PotvinEncodedSolution individual = VRPToursParameter.ActualValue as PotvinEncodedSolution;
       PotvinTwoOptStarMove[] moves = GenerateMoves(individual, ProblemInstance);
       Scope[] moveScopes = new Scope[moves.Length];
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMoveMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMoveMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMoveMaker.cs	(revision 17698)
@@ -57,5 +57,5 @@
 
     public static void GetSegments(PotvinTwoOptStarMove move, out List<int> segmentX1, out List<int> segmentX2) {
-      PotvinEncoding solution = move.Individual as PotvinEncoding;
+      PotvinEncodedSolution solution = move.Individual as PotvinEncodedSolution;
 
       Tour route1 = solution.Tours[move.Tour1];
@@ -78,5 +78,5 @@
     }
 
-    public static void Apply(PotvinEncoding solution, PotvinTwoOptStarMove move, IVRPProblemInstance problemInstance) {
+    public static void Apply(PotvinEncodedSolution solution, PotvinTwoOptStarMove move, IVRPProblemInstance problemInstance) {
       List<int> segmentX1;
       List<int> segmentX2;
@@ -98,5 +98,5 @@
       PotvinTwoOptStarMove move = TwoOptStarMoveParameter.ActualValue;
 
-      PotvinEncoding newSolution = move.Individual.Clone() as PotvinEncoding;
+      PotvinEncodedSolution newSolution = move.Individual.Clone() as PotvinEncodedSolution;
       Apply(newSolution, move, ProblemInstance);
       newSolution.Repair();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMoveTabuCriterion.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMoveTabuCriterion.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMoveTabuCriterion.cs	(revision 17698)
@@ -45,6 +45,6 @@
       get { return TwoOptStarMoveParameter; }
     }
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ILookupParameter<IVRPProblemInstance> ProblemInstanceParameter {
@@ -89,5 +89,5 @@
       : base() {
       Parameters.Add(new LookupParameter<PotvinTwoOptStarMove>("PotvinTwoOptStarMove", "The moves that should be made."));
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours considered in the move."));
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMoveTabuMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMoveTabuMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMoveTabuMaker.cs	(revision 17698)
@@ -57,6 +57,6 @@
       get { return TwoOptStarMoveParameter; }
     }
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ILookupParameter<IVRPProblemInstance> ProblemInstanceParameter {
@@ -86,5 +86,5 @@
 
       Parameters.Add(new LookupParameter<PotvinTwoOptStarMove>("PotvinTwoOptStarMove", "The moves that should be made."));
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours considered in the move."));
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMultiMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMultiMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarMultiMoveGenerator.cs	(revision 17698)
@@ -59,5 +59,5 @@
     }
 
-    protected override PotvinTwoOptStarMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinTwoOptStarMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinTwoOptStarMove> result = new List<PotvinTwoOptStarMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarSingleMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarSingleMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/TwoOptStar/PotvinTwoOptStarSingleMoveGenerator.cs	(revision 17698)
@@ -61,5 +61,5 @@
     }
 
-    public static PotvinTwoOptStarMove Apply(PotvinEncoding individual, IVRPProblemInstance problemInstance, IRandom rand) {
+    public static PotvinTwoOptStarMove Apply(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance, IRandom rand) {
       int route1Idx = rand.Next(individual.Tours.Count);
       int route2Idx = rand.Next(individual.Tours.Count - 1);
@@ -76,5 +76,5 @@
     }
 
-    protected override PotvinTwoOptStarMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinTwoOptStarMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinTwoOptStarMove> result = new List<PotvinTwoOptStarMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentExhaustiveMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentExhaustiveMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentExhaustiveMoveGenerator.cs	(revision 17698)
@@ -46,5 +46,5 @@
     }
 
-    protected override PotvinVehicleAssignmentMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinVehicleAssignmentMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinVehicleAssignmentMove> result = new List<PotvinVehicleAssignmentMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMove.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMove.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMove.cs	(revision 17698)
@@ -32,5 +32,5 @@
   public class PotvinVehicleAssignmentMove : Item, IVRPMove {
     [Storable]
-    public IVRPEncoding Individual { get; protected set; }
+    public IVRPEncodedSolution Individual { get; protected set; }
 
     [Storable]
@@ -49,9 +49,9 @@
     }
 
-    public PotvinVehicleAssignmentMove(int tour1, int tour2, PotvinEncoding individual) {
+    public PotvinVehicleAssignmentMove(int tour1, int tour2, PotvinEncodedSolution individual) {
       Tour1 = tour1;
       Tour2 = tour2;
 
-      this.Individual = individual.Clone() as PotvinEncoding;
+      this.Individual = individual.Clone() as PotvinEncodedSolution;
     }
 
@@ -65,5 +65,5 @@
       this.Tour2 = original.Tour2;
 
-      this.Individual = cloner.Clone(Individual) as PotvinEncoding;
+      this.Individual = cloner.Clone(Individual) as PotvinEncodedSolution;
     }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMoveEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMoveEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMoveEvaluator.cs	(revision 17698)
@@ -56,5 +56,5 @@
       PotvinVehicleAssignmentMove move = VehicleAssignmentMoveParameter.ActualValue;
 
-      PotvinEncoding newSolution = VehicleAssignmentMoveParameter.ActualValue.Individual.Clone() as PotvinEncoding;
+      PotvinEncodedSolution newSolution = VehicleAssignmentMoveParameter.ActualValue.Individual.Clone() as PotvinEncodedSolution;
       PotvinVehicleAssignmentMoveMaker.Apply(newSolution, move, ProblemInstance);
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMoveGenerator.cs	(revision 17698)
@@ -55,10 +55,10 @@
     }
 
-    protected abstract PotvinVehicleAssignmentMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance);
+    protected abstract PotvinVehicleAssignmentMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance);
 
     public override IOperation InstrumentedApply() {
       IOperation next = base.InstrumentedApply();
 
-      PotvinEncoding individual = VRPToursParameter.ActualValue as PotvinEncoding;
+      PotvinEncodedSolution individual = VRPToursParameter.ActualValue as PotvinEncodedSolution;
       PotvinVehicleAssignmentMove[] moves = GenerateMoves(individual, ProblemInstance);
       Scope[] moveScopes = new Scope[moves.Length];
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMoveMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMoveMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMoveMaker.cs	(revision 17698)
@@ -67,5 +67,5 @@
     }
 
-    public static void Apply(PotvinEncoding solution, PotvinVehicleAssignmentMove move, IVRPProblemInstance problemInstance) {
+    public static void Apply(PotvinEncodedSolution solution, PotvinVehicleAssignmentMove move, IVRPProblemInstance problemInstance) {
       int vehicle1 = solution.VehicleAssignment[move.Tour1];
       int vehicle2 = solution.VehicleAssignment[move.Tour2];
@@ -78,5 +78,5 @@
       PotvinVehicleAssignmentMove move = VehicleAssignmentMoveParameter.ActualValue;
 
-      PotvinEncoding newSolution = move.Individual.Clone() as PotvinEncoding;
+      PotvinEncodedSolution newSolution = move.Individual.Clone() as PotvinEncodedSolution;
       Apply(newSolution, move, ProblemInstance);
       newSolution.Repair();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMoveTabuCriterion.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMoveTabuCriterion.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMoveTabuCriterion.cs	(revision 17698)
@@ -44,6 +44,6 @@
       get { return VehicleAssignmentMoveParameter; }
     }
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ILookupParameter<IVRPProblemInstance> ProblemInstanceParameter {
@@ -88,5 +88,5 @@
       : base() {
       Parameters.Add(new LookupParameter<PotvinVehicleAssignmentMove>("PotvinVehicleAssignmentMove", "The moves that should be made."));
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours considered in the move."));
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMoveTabuMaker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMoveTabuMaker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMoveTabuMaker.cs	(revision 17698)
@@ -56,6 +56,6 @@
       get { return VehicleAssignmentMoveParameter; }
     }
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
     public ILookupParameter<IVRPProblemInstance> ProblemInstanceParameter {
@@ -85,5 +85,5 @@
 
       Parameters.Add(new LookupParameter<PotvinVehicleAssignmentMove>("PotvinVehicleAssignmentMove", "The moves that should be made."));
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours considered in the move."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours considered in the move."));
       Parameters.Add(new LookupParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMultiMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMultiMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMultiMoveGenerator.cs	(revision 17698)
@@ -59,5 +59,5 @@
     }
 
-    protected override PotvinVehicleAssignmentMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinVehicleAssignmentMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinVehicleAssignmentMove> result = new List<PotvinVehicleAssignmentMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentSingleMoveGenerator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentSingleMoveGenerator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentSingleMoveGenerator.cs	(revision 17698)
@@ -61,5 +61,5 @@
     }
 
-    public static PotvinVehicleAssignmentMove Apply(PotvinEncoding individual, IVRPProblemInstance problemInstance, IRandom rand) {
+    public static PotvinVehicleAssignmentMove Apply(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance, IRandom rand) {
       if (individual.Tours.Count > 1) {
         int tour1 = rand.Next(individual.Tours.Count);
@@ -75,5 +75,5 @@
     }
 
-    protected override PotvinVehicleAssignmentMove[] GenerateMoves(PotvinEncoding individual, IVRPProblemInstance problemInstance) {
+    protected override PotvinVehicleAssignmentMove[] GenerateMoves(PotvinEncodedSolution individual, IVRPProblemInstance problemInstance) {
       List<PotvinVehicleAssignmentMove> result = new List<PotvinVehicleAssignmentMove>();
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncodedSolution.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncodedSolution.cs	(revision 17698)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncodedSolution.cs	(revision 17698)
@@ -0,0 +1,245 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Problems.VehicleRouting.Encodings.General;
+using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
+
+namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
+  [Item("PotvinEncodedSolution", "Represents a potvin encoded solution of the VRP. It is implemented as described in Potvin, J.-Y. and Bengio, S. (1996). The Vehicle Routing Problem with Time Windows - Part II: Genetic Search. INFORMS Journal of Computing, 8:165–172.")]
+  [StorableType("A998C6C9-BCB3-46B7-B035-D7E76BE70184")]
+  public class PotvinEncodedSolution : TourEncoding {
+    [Storable]
+    public List<int> Unrouted { get; set; }
+
+    // VehicleAssignment[tour] retreives the assigned vehicle for the given tour
+    [Storable]
+    public Permutation VehicleAssignment { get; private set; }
+
+    public PotvinEncodedSolution(IVRPProblemInstance instance)
+      : base(instance) {
+      Unrouted = new List<int>();
+      VehicleAssignment = new Permutation(PermutationTypes.Absolute, instance.Vehicles.Value);
+    }
+
+    [StorableConstructor]
+    protected PotvinEncodedSolution(StorableConstructorFlag _) : base(_) {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PotvinEncodedSolution(this, cloner);
+    }
+
+    protected PotvinEncodedSolution(PotvinEncodedSolution original, Cloner cloner)
+      : base(original, cloner) {
+      this.Unrouted = new List<int>(original.Unrouted);
+      this.VehicleAssignment = cloner.Clone<Permutation>(original.VehicleAssignment);
+    }
+
+    public override void Repair() {
+      List<Tour> toBeRemoved = new List<Tour>();
+      foreach (Tour tour in Tours) {
+        if (tour.Stops.Count == 0)
+          toBeRemoved.Add(tour);
+      }
+
+      foreach (Tour tour in toBeRemoved) {
+        int index = Tours.IndexOf(tour);
+        Tours.Remove(tour);
+        if (index < VehicleAssignment.Length) {
+          int vehicle = VehicleAssignment[index];
+          int max = System.Math.Min(VehicleAssignment.Length - 1, Tours.Count);
+
+          for (int i = index; i < max; i++) {
+            VehicleAssignment[i] = VehicleAssignment[i + 1];
+          }
+          VehicleAssignment[max] = vehicle;
+        }
+      }
+
+      while (Tours.Count > ProblemInstance.Vehicles.Value) {
+        Tour tour = Tours[Tours.Count - 1];
+        Tours[Tours.Count - 2].Stops.AddRange(tour.Stops);
+
+        Tours.Remove(tour);
+      }
+    }
+
+    public override int GetVehicleAssignment(int tour) {
+      return VehicleAssignment[tour];
+    }
+
+    public static PotvinEncodedSolution ConvertFrom(IVRPEncodedSolution encoding, IVRPProblemInstance instance) {
+      PotvinEncodedSolution solution = new PotvinEncodedSolution(instance);
+
+      TourEncoding.ConvertFrom(encoding, solution, instance);
+
+      List<int> vehicles = new List<int>();
+      for (int i = 0; i < instance.Vehicles.Value; i++)
+        vehicles.Add(i);
+
+      int[] assignment = new int[instance.Vehicles.Value];
+      for (int i = 0; i < assignment.Length; i++)
+        assignment[i] = -1;
+
+      for (int i = 0; i < solution.Tours.Count; i++) {
+        int vehicle = encoding.GetVehicleAssignment(i);
+        assignment[i] = vehicle;
+        vehicles.Remove(vehicle);
+      }
+
+      for (int i = 0; i < instance.Vehicles.Value; i++) {
+        if (assignment[i] == -1) {
+          int vehicle = vehicles[0];
+          assignment[i] = vehicle;
+          vehicles.RemoveAt(0);
+        }
+      }
+
+      solution.VehicleAssignment = new Permutation(PermutationTypes.Absolute, assignment);
+
+      return solution;
+    }
+
+    public static PotvinEncodedSolution ConvertFrom(List<int> route, IVRPProblemInstance instance) {
+      PotvinEncodedSolution solution = new PotvinEncodedSolution(instance);
+
+      solution.Tours = new ItemList<Tour>();
+
+      Tour tour = new Tour();
+      int routeIdx = 0;
+      for (int i = 0; i < route.Count; i++) {
+        if (route[i] <= 0) {
+          if (tour.Stops.Count > 0) {
+            solution.Tours.Add(tour);
+            tour = new Tour();
+          }
+          int vehicle = -route[i];
+          solution.VehicleAssignment[routeIdx] = vehicle;
+          routeIdx++;
+        } else {
+          tour.Stops.Add(route[i]);
+        }
+      }
+
+      solution.Repair();
+
+      return solution;
+    }
+
+    public double GetTourLength(Tour tour) {
+      return tour.GetTourLength(ProblemInstance, this);
+    }
+
+    public int FindBestInsertionPlace(Tour tour, int city, int positionToAvoid = -1) {
+      if (tour.Stops.Count == 0)
+        return 0;
+
+      int place = -1;
+      double minQuality = -1;
+
+      VRPEvaluation eval = ProblemInstance.EvaluateTour(tour, this);
+
+      for (int i = 0; i <= tour.Stops.Count; i++) {
+        if (positionToAvoid != i) {
+          bool feasible;
+          double quality = ProblemInstance.GetInsertionCosts(eval, this, city, 0, i, out feasible);
+          if (place < 0 || quality < minQuality) {
+            place = i;
+            minQuality = quality;
+          }
+        }
+      }
+
+      if (place == -1)
+        place = 0;
+
+      return place;
+    }
+
+    public void InsertPair(Tour tour, int source, int target, IVRPProblemInstance problemInstance, int positionToAvoid = -1, int positionToAvoid2 = -1) {
+      int stops = tour.Stops.Count;
+      VRPEvaluation eval = problemInstance.EvaluateTour(tour, this);
+      double minCosts = double.MaxValue;
+      int sourceLocation = -1;
+      int targetLocation = -1;
+
+      for (int i = 0; i <= stops; i++) {
+        tour.Stops.Insert(i, source);
+        VRPEvaluation tourEval = problemInstance.EvaluateTour(tour, this);
+        double sourceCosts = tourEval.Quality - eval.Quality;
+
+        for (int j = i + 1; j <= stops + 1; j++) {
+          if (positionToAvoid != i || positionToAvoid2 != j || stops == 0) {
+            bool feasible;
+            double targetCosts = problemInstance.GetInsertionCosts(tourEval, this, target, 0, j, out feasible);
+
+            double costs = sourceCosts + targetCosts;
+            if (costs < minCosts) {
+              minCosts = costs;
+              sourceLocation = i;
+              targetLocation = j;
+            }
+          }
+        }
+        tour.Stops.Remove(source);
+      }
+
+      tour.Stops.Insert(sourceLocation, source);
+      tour.Stops.Insert(targetLocation, target);
+    }
+
+    public bool FindInsertionPlace(int city, int routeToAvoid, bool allowInfeasible, out int route, out int place) {
+      route = -1;
+      place = -1;
+      double minDetour = double.MaxValue;
+
+      VRPEvaluation eval = ProblemInstance.Evaluate(this);
+      bool originalFeasible = ProblemInstance.Feasible(eval);
+
+      for (int tour = 0; tour < Tours.Count; tour++) {
+        if (tour != routeToAvoid) {
+          double length = eval.Quality;
+
+          for (int i = 0; i <= Tours[tour].Stops.Count; i++) {
+            bool feasible;
+            double detour = ProblemInstance.GetInsertionCosts(eval, this, city, tour, i, out feasible);
+
+            if (feasible || allowInfeasible) {
+              if (route < 0 || detour < minDetour) {
+                route = tour;
+                place = i;
+                minDetour = detour;
+              }
+            }
+          }
+        }
+      }
+
+      return route >= 0 && place >= 0;
+    }
+  }
+}
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncoding.cs	(revision 17697)
+++ 	(revision )
@@ -1,245 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System.Collections.Generic;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Encodings.PermutationEncoding;
-using HEAL.Attic;
-using HeuristicLab.Problems.VehicleRouting.Encodings.General;
-using HeuristicLab.Problems.VehicleRouting.Interfaces;
-using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
-
-namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
-  [Item("PotvinEncoding", "Represents a potvin encoding of VRP solutions. It is implemented as described in Potvin, J.-Y. and Bengio, S. (1996). The Vehicle Routing Problem with Time Windows - Part II: Genetic Search. INFORMS Journal of Computing, 8:165–172.")]
-  [StorableType("A998C6C9-BCB3-46B7-B035-D7E76BE70184")]
-  public class PotvinEncoding : TourEncoding {
-    [Storable]
-    public List<int> Unrouted { get; set; }
-
-    // VehicleAssignment[tour] retreives the assigned vehicle for the given tour
-    [Storable]
-    public Permutation VehicleAssignment { get; private set; }
-
-    public PotvinEncoding(IVRPProblemInstance instance)
-      : base(instance) {
-      Unrouted = new List<int>();
-      VehicleAssignment = new Permutation(PermutationTypes.Absolute, instance.Vehicles.Value);
-    }
-
-    [StorableConstructor]
-    protected PotvinEncoding(StorableConstructorFlag _) : base(_) {
-    }
-
-    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);
-      this.VehicleAssignment = cloner.Clone<Permutation>(original.VehicleAssignment);
-    }
-
-    public override void Repair() {
-      List<Tour> toBeRemoved = new List<Tour>();
-      foreach (Tour tour in Tours) {
-        if (tour.Stops.Count == 0)
-          toBeRemoved.Add(tour);
-      }
-
-      foreach (Tour tour in toBeRemoved) {
-        int index = Tours.IndexOf(tour);
-        Tours.Remove(tour);
-        if (index < VehicleAssignment.Length) {
-          int vehicle = VehicleAssignment[index];
-          int max = System.Math.Min(VehicleAssignment.Length - 1, Tours.Count);
-
-          for (int i = index; i < max; i++) {
-            VehicleAssignment[i] = VehicleAssignment[i + 1];
-          }
-          VehicleAssignment[max] = vehicle;
-        }
-      }
-
-      while (Tours.Count > ProblemInstance.Vehicles.Value) {
-        Tour tour = Tours[Tours.Count - 1];
-        Tours[Tours.Count - 2].Stops.AddRange(tour.Stops);
-
-        Tours.Remove(tour);
-      }
-    }
-
-    public override int GetVehicleAssignment(int tour) {
-      return VehicleAssignment[tour];
-    }
-
-    public static PotvinEncoding ConvertFrom(IVRPEncoding encoding, IVRPProblemInstance instance) {
-      PotvinEncoding solution = new PotvinEncoding(instance);
-
-      TourEncoding.ConvertFrom(encoding, solution, instance);
-
-      List<int> vehicles = new List<int>();
-      for (int i = 0; i < instance.Vehicles.Value; i++)
-        vehicles.Add(i);
-
-      int[] assignment = new int[instance.Vehicles.Value];
-      for (int i = 0; i < assignment.Length; i++)
-        assignment[i] = -1;
-
-      for (int i = 0; i < solution.Tours.Count; i++) {
-        int vehicle = encoding.GetVehicleAssignment(i);
-        assignment[i] = vehicle;
-        vehicles.Remove(vehicle);
-      }
-
-      for (int i = 0; i < instance.Vehicles.Value; i++) {
-        if (assignment[i] == -1) {
-          int vehicle = vehicles[0];
-          assignment[i] = vehicle;
-          vehicles.RemoveAt(0);
-        }
-      }
-
-      solution.VehicleAssignment = new Permutation(PermutationTypes.Absolute, assignment);
-
-      return solution;
-    }
-
-    public static PotvinEncoding ConvertFrom(List<int> route, IVRPProblemInstance instance) {
-      PotvinEncoding solution = new PotvinEncoding(instance);
-
-      solution.Tours = new ItemList<Tour>();
-
-      Tour tour = new Tour();
-      int routeIdx = 0;
-      for (int i = 0; i < route.Count; i++) {
-        if (route[i] <= 0) {
-          if (tour.Stops.Count > 0) {
-            solution.Tours.Add(tour);
-            tour = new Tour();
-          }
-          int vehicle = -route[i];
-          solution.VehicleAssignment[routeIdx] = vehicle;
-          routeIdx++;
-        } else {
-          tour.Stops.Add(route[i]);
-        }
-      }
-
-      solution.Repair();
-
-      return solution;
-    }
-
-    public double GetTourLength(Tour tour) {
-      return tour.GetTourLength(ProblemInstance, this);
-    }
-
-    public int FindBestInsertionPlace(Tour tour, int city, int positionToAvoid = -1) {
-      if (tour.Stops.Count == 0)
-        return 0;
-
-      int place = -1;
-      double minQuality = -1;
-
-      VRPEvaluation eval = ProblemInstance.EvaluateTour(tour, this);
-
-      for (int i = 0; i <= tour.Stops.Count; i++) {
-        if (positionToAvoid != i) {
-          bool feasible;
-          double quality = ProblemInstance.GetInsertionCosts(eval, this, city, 0, i, out feasible);
-          if (place < 0 || quality < minQuality) {
-            place = i;
-            minQuality = quality;
-          }
-        }
-      }
-
-      if (place == -1)
-        place = 0;
-
-      return place;
-    }
-
-    public void InsertPair(Tour tour, int source, int target, IVRPProblemInstance problemInstance, int positionToAvoid = -1, int positionToAvoid2 = -1) {
-      int stops = tour.Stops.Count;
-      VRPEvaluation eval = problemInstance.EvaluateTour(tour, this);
-      double minCosts = double.MaxValue;
-      int sourceLocation = -1;
-      int targetLocation = -1;
-
-      for (int i = 0; i <= stops; i++) {
-        tour.Stops.Insert(i, source);
-        VRPEvaluation tourEval = problemInstance.EvaluateTour(tour, this);
-        double sourceCosts = tourEval.Quality - eval.Quality;
-
-        for (int j = i + 1; j <= stops + 1; j++) {
-          if (positionToAvoid != i || positionToAvoid2 != j || stops == 0) {
-            bool feasible;
-            double targetCosts = problemInstance.GetInsertionCosts(tourEval, this, target, 0, j, out feasible);
-
-            double costs = sourceCosts + targetCosts;
-            if (costs < minCosts) {
-              minCosts = costs;
-              sourceLocation = i;
-              targetLocation = j;
-            }
-          }
-        }
-        tour.Stops.Remove(source);
-      }
-
-      tour.Stops.Insert(sourceLocation, source);
-      tour.Stops.Insert(targetLocation, target);
-    }
-
-    public bool FindInsertionPlace(int city, int routeToAvoid, bool allowInfeasible, out int route, out int place) {
-      route = -1;
-      place = -1;
-      double minDetour = double.MaxValue;
-
-      VRPEvaluation eval = ProblemInstance.Evaluate(this);
-      bool originalFeasible = ProblemInstance.Feasible(eval);
-
-      for (int tour = 0; tour < Tours.Count; tour++) {
-        if (tour != routeToAvoid) {
-          double length = eval.Quality;
-
-          for (int i = 0; i <= Tours[tour].Stops.Count; i++) {
-            bool feasible;
-            double detour = ProblemInstance.GetInsertionCosts(eval, this, city, tour, i, out feasible);
-
-            if (feasible || allowInfeasible) {
-              if (route < 0 || detour < minDetour) {
-                route = tour;
-                place = i;
-                minDetour = detour;
-              }
-            }
-          }
-        }
-      }
-
-      return route >= 0 && place >= 0;
-    }
-  }
-}
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsCrossover.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsCrossover.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsCrossover.cs	(revision 17698)
@@ -49,13 +49,13 @@
     }
 
-    protected abstract PrinsEncoding Crossover(IRandom random, PrinsEncoding parent1, PrinsEncoding parent2);
+    protected abstract PrinsEncodedSolution Crossover(IRandom random, PrinsEncodedSolution parent1, PrinsEncodedSolution parent2);
 
     public override IOperation InstrumentedApply() {
-      ItemArray<IVRPEncoding> parents = new ItemArray<IVRPEncoding>(ParentsParameter.ActualValue.Length);
+      ItemArray<IVRPEncodedSolution> parents = new ItemArray<IVRPEncodedSolution>(ParentsParameter.ActualValue.Length);
       for (int i = 0; i < ParentsParameter.ActualValue.Length; i++) {
-        IVRPEncoding solution = ParentsParameter.ActualValue[i];
+        IVRPEncodedSolution solution = ParentsParameter.ActualValue[i];
 
-        if (!(solution is PrinsEncoding)) {
-          parents[i] = PrinsEncoding.ConvertFrom(solution, ProblemInstance);
+        if (!(solution is PrinsEncodedSolution)) {
+          parents[i] = PrinsEncodedSolution.ConvertFrom(solution, ProblemInstance);
         } else {
           parents[i] = solution;
@@ -65,5 +65,5 @@
 
       ChildParameter.ActualValue =
-        Crossover(RandomParameter.ActualValue, parents[0] as PrinsEncoding, parents[1] as PrinsEncoding);
+        Crossover(RandomParameter.ActualValue, parents[0] as PrinsEncodedSolution, parents[1] as PrinsEncodedSolution);
 
       return base.InstrumentedApply();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsPermutationCrossover.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsPermutationCrossover.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsPermutationCrossover.cs	(revision 17698)
@@ -50,7 +50,7 @@
     }
 
-    protected override PrinsEncoding Crossover(IRandom random, PrinsEncoding parent1, PrinsEncoding parent2) {
+    protected override PrinsEncodedSolution Crossover(IRandom random, PrinsEncodedSolution parent1, PrinsEncodedSolution parent2) {
       if (parent1.Length != parent2.Length)
-        return parent1.Clone() as PrinsEncoding;
+        return parent1.Clone() as PrinsEncodedSolution;
 
       //note - the inner crossover is called here and the result is converted to a prins representation
@@ -67,5 +67,5 @@
         ExecutionContext.Scope.Variables.Remove(childName);
 
-        return new PrinsEncoding(permutation, ProblemInstance);
+        return new PrinsEncodedSolution(permutation, ProblemInstance);
       } else
         return null;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsExhaustiveLSManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsExhaustiveLSManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsExhaustiveLSManipulator.cs	(revision 17698)
@@ -44,5 +44,5 @@
     }
 
-    protected override void Manipulate(IRandom random, PrinsEncoding individual) {
+    protected override void Manipulate(IRandom random, PrinsEncodedSolution individual) {
       List<Tour> tours = individual.GetTours();
       bool improvement = false;
@@ -53,5 +53,5 @@
         improvement = false;
         double originalQuality = GetQuality(individual);
-        PrinsEncoding child = null;
+        PrinsEncodedSolution child = null;
 
         while (!improvement && u < ProblemInstance.Cities.Value) {
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsLSManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsLSManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsLSManipulator.cs	(revision 17698)
@@ -48,9 +48,9 @@
     }
 
-    protected double GetQuality(PrinsEncoding individual) {
+    protected double GetQuality(PrinsEncodedSolution individual) {
       return ProblemInstance.Evaluate(individual).Quality;
     }
 
-    private int FindCity(PrinsEncoding individual, int city) {
+    private int FindCity(PrinsEncodedSolution individual, int city) {
       int index = -1;
 
@@ -68,5 +68,5 @@
     protected const int depot = -1;
 
-    private Tour FindTour(PrinsEncoding individual, int city) {
+    private Tour FindTour(PrinsEncodedSolution individual, int city) {
       Tour found = null;
 
@@ -85,5 +85,5 @@
 
     //inserts u after v in the child
-    private void InsertAfter(int u, int v, PrinsEncoding parent, PrinsEncoding child) {
+    private void InsertAfter(int u, int v, PrinsEncodedSolution parent, PrinsEncodedSolution child) {
       int pi = 0;
       int ci = 0;
@@ -104,5 +104,5 @@
 
     //inserts (u, x) after v in the child
-    private void InsertAfter(int u, int x, int v, PrinsEncoding parent, PrinsEncoding child) {
+    private void InsertAfter(int u, int x, int v, PrinsEncodedSolution parent, PrinsEncodedSolution child) {
       int pi = 0;
       int ci = 0;
@@ -126,5 +126,5 @@
 
     //inserts u before v in the child
-    private void InsertBefore(int u, int v, PrinsEncoding parent, PrinsEncoding child) {
+    private void InsertBefore(int u, int v, PrinsEncodedSolution parent, PrinsEncodedSolution child) {
       int pi = 0;
       int ci = 0;
@@ -145,5 +145,5 @@
 
     //inserts (u, x) before v in the child
-    private void InsertBefore(int u, int x, int v, PrinsEncoding parent, PrinsEncoding child) {
+    private void InsertBefore(int u, int x, int v, PrinsEncodedSolution parent, PrinsEncodedSolution child) {
       int pi = 0;
       int ci = 0;
@@ -167,5 +167,5 @@
 
     //swaps u and v
-    private void Swap(int u, int v, PrinsEncoding parent, PrinsEncoding child) {
+    private void Swap(int u, int v, PrinsEncodedSolution parent, PrinsEncodedSolution child) {
       for (int i = 0; i < child.Length; i++) {
         if (parent[i] == u)
@@ -179,5 +179,5 @@
 
     //swaps (u, x) and v
-    private void Swap(int u, int x, int v, PrinsEncoding parent, PrinsEncoding child) {
+    private void Swap(int u, int x, int v, PrinsEncodedSolution parent, PrinsEncodedSolution child) {
       int childIndex = 0;
       int parentIndex = 0;
@@ -201,5 +201,5 @@
 
     //swaps (u, x) and (v, y)
-    private void Swap(int u, int x, int v, int y, PrinsEncoding parent, PrinsEncoding child) {
+    private void Swap(int u, int x, int v, int y, PrinsEncodedSolution parent, PrinsEncodedSolution child) {
       int i = 0;
 
@@ -222,5 +222,5 @@
 
     //swaps (u, x) and (v, y) by (u, y) and (x, v)
-    private void Swap2(int u, int x, int v, int y, PrinsEncoding parent, PrinsEncoding child) {
+    private void Swap2(int u, int x, int v, int y, PrinsEncodedSolution parent, PrinsEncodedSolution child) {
       int i = 0;
 
@@ -240,5 +240,5 @@
     }
 
-    private void M1(PrinsEncoding parent, PrinsEncoding child, int u, int v) {
+    private void M1(PrinsEncodedSolution parent, PrinsEncodedSolution child, int u, int v) {
       if (u != depot) {
         if (v == depot) {
@@ -252,5 +252,5 @@
     }
 
-    private void M2(PrinsEncoding parent, PrinsEncoding child, int u, int v) {
+    private void M2(PrinsEncodedSolution parent, PrinsEncodedSolution child, int u, int v) {
       if (u != depot) {
         Tour tour = FindTour(child, u + 1);
@@ -270,5 +270,5 @@
     }
 
-    private void M3(PrinsEncoding parent, PrinsEncoding child, int u, int v) {
+    private void M3(PrinsEncodedSolution parent, PrinsEncodedSolution child, int u, int v) {
       if (u != depot) {
         Tour tour = FindTour(child, u + 1);
@@ -288,5 +288,5 @@
     }
 
-    private void M4(PrinsEncoding parent, PrinsEncoding child, int u, int v) {
+    private void M4(PrinsEncodedSolution parent, PrinsEncodedSolution child, int u, int v) {
       if (u != depot && v != depot) {
         Swap(u, v, parent, child);
@@ -294,5 +294,5 @@
     }
 
-    private void M5(PrinsEncoding parent, PrinsEncoding child, int u, int v) {
+    private void M5(PrinsEncodedSolution parent, PrinsEncodedSolution child, int u, int v) {
       if (u != depot && v != depot) {
         Tour tour = FindTour(child, u + 1);
@@ -307,5 +307,5 @@
     }
 
-    private void M6(PrinsEncoding parent, PrinsEncoding child, int u, int v) {
+    private void M6(PrinsEncodedSolution parent, PrinsEncodedSolution child, int u, int v) {
       if (u != depot && v != depot) {
         Tour tour = FindTour(child, u + 1);
@@ -326,5 +326,5 @@
     }
 
-    private void M7(PrinsEncoding parent, PrinsEncoding child, int u, int v) {
+    private void M7(PrinsEncodedSolution parent, PrinsEncodedSolution child, int u, int v) {
       if (u != depot && v != depot) {
         Tour tu = FindTour(child, u + 1);
@@ -348,5 +348,5 @@
     }
 
-    private void M8(PrinsEncoding parent, PrinsEncoding child, int u, int v) {
+    private void M8(PrinsEncodedSolution parent, PrinsEncodedSolution child, int u, int v) {
       if (u != depot && v != depot) {
         Tour tu = FindTour(child, u + 1);
@@ -370,5 +370,5 @@
     }
 
-    private void M9(PrinsEncoding parent, PrinsEncoding child, int u, int v) {
+    private void M9(PrinsEncodedSolution parent, PrinsEncodedSolution child, int u, int v) {
       if (u != depot && v != depot) {
         Tour tu = FindTour(child, u + 1);
@@ -392,16 +392,16 @@
     }
 
-    protected PrinsEncoding Manipulate(PrinsEncoding individual,
+    protected PrinsEncodedSolution Manipulate(PrinsEncodedSolution individual,
       double originalQuality, int u, int v) {
-      PrinsEncoding child = null;
+      PrinsEncodedSolution child = null;
       bool improvement = false;
 
       if (u != v) {
-        child = individual.Clone() as PrinsEncoding;
+        child = individual.Clone() as PrinsEncodedSolution;
         M1(individual, child, u, v);
         improvement = GetQuality(child) < originalQuality;
 
         if (!improvement) {
-          child = individual.Clone() as PrinsEncoding;
+          child = individual.Clone() as PrinsEncodedSolution;
           M2(individual, child, u, v);
           improvement = GetQuality(child) < originalQuality;
@@ -409,5 +409,5 @@
 
         if (!improvement) {
-          child = individual.Clone() as PrinsEncoding;
+          child = individual.Clone() as PrinsEncodedSolution;
           M3(individual, child, u, v);
           improvement = GetQuality(child) < originalQuality;
@@ -415,5 +415,5 @@
 
         if (!improvement) {
-          child = individual.Clone() as PrinsEncoding;
+          child = individual.Clone() as PrinsEncodedSolution;
           M4(individual, child, u, v);
           improvement = GetQuality(child) < originalQuality;
@@ -421,5 +421,5 @@
 
         if (!improvement) {
-          child = individual.Clone() as PrinsEncoding;
+          child = individual.Clone() as PrinsEncodedSolution;
           M5(individual, child, u, v);
           improvement = GetQuality(child) < originalQuality;
@@ -427,5 +427,5 @@
 
         if (!improvement) {
-          child = individual.Clone() as PrinsEncoding;
+          child = individual.Clone() as PrinsEncodedSolution;
           M6(individual, child, u, v);
           improvement = GetQuality(child) < originalQuality;
@@ -433,5 +433,5 @@
 
         if (!improvement) {
-          child = individual.Clone() as PrinsEncoding;
+          child = individual.Clone() as PrinsEncodedSolution;
           M7(individual, child, u, v);
           improvement = GetQuality(child) < originalQuality;
@@ -439,5 +439,5 @@
 
         if (!improvement) {
-          child = individual.Clone() as PrinsEncoding;
+          child = individual.Clone() as PrinsEncodedSolution;
           M8(individual, child, u, v);
           improvement = GetQuality(child) < originalQuality;
@@ -445,5 +445,5 @@
 
         if (!improvement) {
-          child = individual.Clone() as PrinsEncoding;
+          child = individual.Clone() as PrinsEncodedSolution;
           M9(individual, child, u, v);
           improvement = GetQuality(child) < originalQuality;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsManipulator.cs	(revision 17698)
@@ -48,13 +48,13 @@
     }
 
-    protected abstract void Manipulate(IRandom random, PrinsEncoding individual);
+    protected abstract void Manipulate(IRandom random, PrinsEncodedSolution individual);
 
     public override IOperation InstrumentedApply() {
-      IVRPEncoding solution = VRPToursParameter.ActualValue;
-      if (!(solution is PrinsEncoding)) {
-        VRPToursParameter.ActualValue = PrinsEncoding.ConvertFrom(solution, ProblemInstance);
+      IVRPEncodedSolution solution = VRPToursParameter.ActualValue;
+      if (!(solution is PrinsEncodedSolution)) {
+        VRPToursParameter.ActualValue = PrinsEncodedSolution.ConvertFrom(solution, ProblemInstance);
       }
 
-      Manipulate(RandomParameter.ActualValue, VRPToursParameter.ActualValue as PrinsEncoding);
+      Manipulate(RandomParameter.ActualValue, VRPToursParameter.ActualValue as PrinsEncodedSolution);
 
       return base.InstrumentedApply();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsPermutationManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsPermutationManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsPermutationManipulator.cs	(revision 17698)
@@ -50,5 +50,5 @@
     }
 
-    protected override void Manipulate(IRandom random, PrinsEncoding individual) {
+    protected override void Manipulate(IRandom random, PrinsEncodedSolution individual) {
       InnerManipulatorParameter.ActualValue.PermutationParameter.ActualName = VRPToursParameter.ActualName;
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsStochasticLSManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsStochasticLSManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Manipulators/PrinsStochasticLSManipulator.cs	(revision 17698)
@@ -51,5 +51,5 @@
     }
 
-    protected override void Manipulate(IRandom random, PrinsEncoding individual) {
+    protected override void Manipulate(IRandom random, PrinsEncodedSolution individual) {
       List<Tour> tours = individual.GetTours();
       bool improvement = false;
@@ -59,5 +59,5 @@
         improvement = false;
         double originalQuality = GetQuality(individual);
-        PrinsEncoding child = null;
+        PrinsEncodedSolution child = null;
 
         int samples = 0;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/PrinsEncodedSolution.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/PrinsEncodedSolution.cs	(revision 17698)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/PrinsEncodedSolution.cs	(revision 17698)
@@ -0,0 +1,177 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
+
+namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
+  [Item("PrinsEncodedSolution", "Represents a Prins encoded solution of the VRP. It is implemented as described in Prins, C. (2004). A simple and effective evolutionary algorithm for the vehicle routing problem. Computers & Operations Research, 12:1985-2002.")]
+  [StorableType("A0E1EBC1-C0F5-4CD5-9279-1A669C6633CD")]
+  public class PrinsEncodedSolution : General.PermutationEncoding {
+    #region IVRPEncoding Members
+    public override int GetTourIndex(Tour tour) {
+      return 0;
+    }
+
+    public override List<Tour> GetTours() {
+      List<Tour> result = new List<Tour>();
+
+      int cities = ProblemInstance.Cities.Value;
+
+      //Split permutation into vector P
+      int[] P = new int[cities + 1];
+      for (int i = 0; i <= cities; i++)
+        P[i] = -1;
+
+      double[] V = new double[cities + 1];
+      V[0] = 0;
+      for (int i = 1; i <= cities; i++) {
+        V[i] = double.MaxValue;
+      }
+
+      for (int i = 1; i <= cities; i++) {
+        int j = i;
+        Tour tour = new Tour();
+        bool feasible = true;
+
+        do {
+          tour.Stops.Add(this[j - 1] + 1);
+
+          VRPEvaluation eval =
+            ProblemInstance.EvaluateTour(tour, this);
+
+          double cost = eval.Quality;
+          feasible = ProblemInstance.Feasible(eval);
+
+          if (feasible || j == i) {
+            if (V[i - 1] + cost < V[j]) {
+              V[j] = V[i - 1] + cost;
+              P[j] = i - 1;
+            }
+            j++;
+          }
+
+        } while (j <= cities && feasible);
+      }
+
+      //extract VRP solution from vector P
+      int index = 0;
+      int index2 = cities;
+      Tour trip = null;
+      do {
+        index = P[index2];
+        trip = new Tour();
+
+        for (int k = index + 1; k <= index2; k++) {
+          trip.Stops.Add(this[k - 1] + 1);
+        }
+
+        if (trip.Stops.Count > 0)
+          result.Add(trip);
+
+        index2 = index;
+      } while (index != 0);
+
+      //if there are too many vehicles - repair
+      while (result.Count > ProblemInstance.Vehicles.Value) {
+        Tour tour = result[result.Count - 1];
+
+        //find predecessor / successor in permutation
+        int predecessorIndex = Array.IndexOf(this.array, tour.Stops[0] - 1) - 1;
+        if (predecessorIndex >= 0) {
+          int predecessor = this[predecessorIndex] + 1;
+
+          foreach (Tour t in result) {
+            int insertPosition = t.Stops.IndexOf(predecessor) + 1;
+            if (insertPosition != -1) {
+              t.Stops.InsertRange(insertPosition, tour.Stops);
+              break;
+            }
+          }
+        } else {
+          int successorIndex = Array.IndexOf(this.array,
+            tour.Stops[tour.Stops.Count - 1] - 1) + 1;
+          int successor = this[successorIndex] + 1;
+
+          foreach (Tour t in result) {
+            int insertPosition = t.Stops.IndexOf(successor);
+            if (insertPosition != -1) {
+              t.Stops.InsertRange(insertPosition, tour.Stops);
+              break;
+            }
+          }
+        }
+
+        result.Remove(tour);
+      }
+
+      return result;
+    }
+    #endregion
+    public PrinsEncodedSolution(Permutation permutation, IVRPProblemInstance problemInstance)
+      : base(permutation, problemInstance) {
+    }
+
+    [StorableConstructor]
+    protected PrinsEncodedSolution(StorableConstructorFlag _) : base(_) {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PrinsEncodedSolution(this, cloner);
+    }
+
+    protected PrinsEncodedSolution(PrinsEncodedSolution original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public static PrinsEncodedSolution ConvertFrom(IVRPEncodedSolution encoding, IVRPProblemInstance problemInstance) {
+      List<Tour> tours = encoding.GetTours();
+      List<int> route = new List<int>();
+
+      foreach (Tour tour in tours) {
+        foreach (int city in tour.Stops)
+          route.Add(city - 1);
+      }
+
+      return new PrinsEncodedSolution(
+        new Permutation(PermutationTypes.RelativeUndirected, route.ToArray()), problemInstance);
+    }
+
+    public static PrinsEncodedSolution ConvertFrom(List<int> routeParam, IVRPProblemInstance problemInstance) {
+      List<int> route = new List<int>(routeParam);
+
+      while (route.Remove(0)) { //remove all delimiters (0)
+      }
+
+      for (int i = 0; i < route.Count; i++)
+        route[i]--;
+
+      return new PrinsEncodedSolution(
+        new Permutation(PermutationTypes.RelativeUndirected, route.ToArray()), problemInstance);
+    }
+  }
+}
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/PrinsEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/PrinsEncoding.cs	(revision 17697)
+++ 	(revision )
@@ -1,177 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Encodings.PermutationEncoding;
-using HEAL.Attic;
-using HeuristicLab.Problems.VehicleRouting.Interfaces;
-using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
-
-namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
-  [Item("PrinsEncoding", "Represents an Prins encoding of VRP solutions. It is implemented as described in Prins, C. (2004). A simple and effective evolutionary algorithm for the vehicle routing problem. Computers & Operations Research, 12:1985-2002.")]
-  [StorableType("A0E1EBC1-C0F5-4CD5-9279-1A669C6633CD")]
-  public class PrinsEncoding : General.PermutationEncoding {
-    #region IVRPEncoding Members
-    public override int GetTourIndex(Tour tour) {
-      return 0;
-    }
-
-    public override List<Tour> GetTours() {
-      List<Tour> result = new List<Tour>();
-
-      int cities = ProblemInstance.Cities.Value;
-
-      //Split permutation into vector P
-      int[] P = new int[cities + 1];
-      for (int i = 0; i <= cities; i++)
-        P[i] = -1;
-
-      double[] V = new double[cities + 1];
-      V[0] = 0;
-      for (int i = 1; i <= cities; i++) {
-        V[i] = double.MaxValue;
-      }
-
-      for (int i = 1; i <= cities; i++) {
-        int j = i;
-        Tour tour = new Tour();
-        bool feasible = true;
-
-        do {
-          tour.Stops.Add(this[j - 1] + 1);
-
-          VRPEvaluation eval =
-            ProblemInstance.EvaluateTour(tour, this);
-
-          double cost = eval.Quality;
-          feasible = ProblemInstance.Feasible(eval);
-
-          if (feasible || j == i) {
-            if (V[i - 1] + cost < V[j]) {
-              V[j] = V[i - 1] + cost;
-              P[j] = i - 1;
-            }
-            j++;
-          }
-
-        } while (j <= cities && feasible);
-      }
-
-      //extract VRP solution from vector P
-      int index = 0;
-      int index2 = cities;
-      Tour trip = null;
-      do {
-        index = P[index2];
-        trip = new Tour();
-
-        for (int k = index + 1; k <= index2; k++) {
-          trip.Stops.Add(this[k - 1] + 1);
-        }
-
-        if (trip.Stops.Count > 0)
-          result.Add(trip);
-
-        index2 = index;
-      } while (index != 0);
-
-      //if there are too many vehicles - repair
-      while (result.Count > ProblemInstance.Vehicles.Value) {
-        Tour tour = result[result.Count - 1];
-
-        //find predecessor / successor in permutation
-        int predecessorIndex = Array.IndexOf(this.array, tour.Stops[0] - 1) - 1;
-        if (predecessorIndex >= 0) {
-          int predecessor = this[predecessorIndex] + 1;
-
-          foreach (Tour t in result) {
-            int insertPosition = t.Stops.IndexOf(predecessor) + 1;
-            if (insertPosition != -1) {
-              t.Stops.InsertRange(insertPosition, tour.Stops);
-              break;
-            }
-          }
-        } else {
-          int successorIndex = Array.IndexOf(this.array,
-            tour.Stops[tour.Stops.Count - 1] - 1) + 1;
-          int successor = this[successorIndex] + 1;
-
-          foreach (Tour t in result) {
-            int insertPosition = t.Stops.IndexOf(successor);
-            if (insertPosition != -1) {
-              t.Stops.InsertRange(insertPosition, tour.Stops);
-              break;
-            }
-          }
-        }
-
-        result.Remove(tour);
-      }
-
-      return result;
-    }
-    #endregion
-    public PrinsEncoding(Permutation permutation, IVRPProblemInstance problemInstance)
-      : base(permutation, problemInstance) {
-    }
-
-    [StorableConstructor]
-    protected PrinsEncoding(StorableConstructorFlag _) : base(_) {
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new PrinsEncoding(this, cloner);
-    }
-
-    protected PrinsEncoding(PrinsEncoding original, Cloner cloner)
-      : base(original, cloner) {
-    }
-
-    public static PrinsEncoding ConvertFrom(IVRPEncoding encoding, IVRPProblemInstance problemInstance) {
-      List<Tour> tours = encoding.GetTours();
-      List<int> route = new List<int>();
-
-      foreach (Tour tour in tours) {
-        foreach (int city in tour.Stops)
-          route.Add(city - 1);
-      }
-
-      return new PrinsEncoding(
-        new Permutation(PermutationTypes.RelativeUndirected, route.ToArray()), problemInstance);
-    }
-
-    public static PrinsEncoding ConvertFrom(List<int> routeParam, IVRPProblemInstance problemInstance) {
-      List<int> route = new List<int>(routeParam);
-
-      while (route.Remove(0)) { //remove all delimiters (0)
-      }
-
-      for (int i = 0; i < route.Count; i++)
-        route[i]--;
-
-      return new PrinsEncoding(
-        new Permutation(PermutationTypes.RelativeUndirected, route.ToArray()), problemInstance);
-    }
-  }
-}
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Tour.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Tour.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Tour.cs	(revision 17698)
@@ -48,5 +48,5 @@
     protected Tour(StorableConstructorFlag _) : base(_) { }
 
-    public double GetTourLength(IVRPProblemInstance instance, IVRPEncoding solution) {
+    public double GetTourLength(IVRPProblemInstance instance, IVRPEncodedSolution solution) {
       double length = 0;
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuCrossover.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuCrossover.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuCrossover.cs	(revision 17698)
@@ -48,13 +48,13 @@
     }
 
-    protected abstract ZhuEncoding Crossover(IRandom random, ZhuEncoding parent1, ZhuEncoding parent2);
+    protected abstract ZhuEncodedSolution Crossover(IRandom random, ZhuEncodedSolution parent1, ZhuEncodedSolution parent2);
 
     public override IOperation InstrumentedApply() {
-      ItemArray<IVRPEncoding> parents = new ItemArray<IVRPEncoding>(ParentsParameter.ActualValue.Length);
+      ItemArray<IVRPEncodedSolution> parents = new ItemArray<IVRPEncodedSolution>(ParentsParameter.ActualValue.Length);
       for (int i = 0; i < ParentsParameter.ActualValue.Length; i++) {
-        IVRPEncoding solution = ParentsParameter.ActualValue[i];
+        IVRPEncodedSolution solution = ParentsParameter.ActualValue[i];
 
-        if (!(solution is ZhuEncoding)) {
-          parents[i] = ZhuEncoding.ConvertFrom(solution, ProblemInstance);
+        if (!(solution is ZhuEncodedSolution)) {
+          parents[i] = ZhuEncodedSolution.ConvertFrom(solution, ProblemInstance);
         } else {
           parents[i] = solution;
@@ -64,5 +64,5 @@
 
       ChildParameter.ActualValue =
-        Crossover(RandomParameter.ActualValue, parents[0] as ZhuEncoding, parents[1] as ZhuEncoding);
+        Crossover(RandomParameter.ActualValue, parents[0] as ZhuEncodedSolution, parents[1] as ZhuEncodedSolution);
 
       return base.InstrumentedApply();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover1.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover1.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover1.cs	(revision 17698)
@@ -43,5 +43,5 @@
     }
 
-    private void Swap(ZhuEncoding individual, int city1, int city2) {
+    private void Swap(ZhuEncodedSolution individual, int city1, int city2) {
       int index1 = individual.IndexOf(city1);
       int index2 = individual.IndexOf(city2);
@@ -52,9 +52,9 @@
     }
 
-    protected override ZhuEncoding Crossover(IRandom random, ZhuEncoding parent1, ZhuEncoding parent2) {
-      parent1 = parent1.Clone() as ZhuEncoding;
-      parent2 = parent2.Clone() as ZhuEncoding;
+    protected override ZhuEncodedSolution Crossover(IRandom random, ZhuEncodedSolution parent1, ZhuEncodedSolution parent2) {
+      parent1 = parent1.Clone() as ZhuEncodedSolution;
+      parent2 = parent2.Clone() as ZhuEncodedSolution;
 
-      ZhuEncoding child = parent2.Clone() as ZhuEncoding;
+      ZhuEncodedSolution child = parent2.Clone() as ZhuEncodedSolution;
 
       if (parent1.Length != parent2.Length)
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover2.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover2.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover2.cs	(revision 17698)
@@ -44,9 +44,9 @@
     }
 
-    protected override ZhuEncoding Crossover(IRandom random, ZhuEncoding parent1, ZhuEncoding parent2) {
+    protected override ZhuEncodedSolution Crossover(IRandom random, ZhuEncodedSolution parent1, ZhuEncodedSolution parent2) {
       List<int> p1 = new List<int>(parent1);
       List<int> p2 = new List<int>(parent2);
 
-      ZhuEncoding child = parent2.Clone() as ZhuEncoding;
+      ZhuEncodedSolution child = parent2.Clone() as ZhuEncodedSolution;
 
       if (parent1.Length != parent2.Length)
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover1.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover1.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover1.cs	(revision 17698)
@@ -45,5 +45,5 @@
     }
 
-    private void Swap(ZhuEncoding individual, int city1, int city2) {
+    private void Swap(ZhuEncodedSolution individual, int city1, int city2) {
       int index1 = individual.IndexOf(city1);
       int index2 = individual.IndexOf(city2);
@@ -54,9 +54,9 @@
     }
 
-    protected override ZhuEncoding Crossover(IRandom random, ZhuEncoding parent1, ZhuEncoding parent2) {
-      parent1 = parent1.Clone() as ZhuEncoding;
-      parent2 = parent2.Clone() as ZhuEncoding;
+    protected override ZhuEncodedSolution Crossover(IRandom random, ZhuEncodedSolution parent1, ZhuEncodedSolution parent2) {
+      parent1 = parent1.Clone() as ZhuEncodedSolution;
+      parent2 = parent2.Clone() as ZhuEncodedSolution;
 
-      ZhuEncoding child = parent2.Clone() as ZhuEncoding;
+      ZhuEncodedSolution child = parent2.Clone() as ZhuEncodedSolution;
 
       if (parent1.Length != parent2.Length)
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover2.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover2.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover2.cs	(revision 17698)
@@ -46,9 +46,9 @@
     }
 
-    protected override ZhuEncoding Crossover(IRandom random, ZhuEncoding parent1, ZhuEncoding parent2) {
+    protected override ZhuEncodedSolution Crossover(IRandom random, ZhuEncodedSolution parent1, ZhuEncodedSolution parent2) {
       List<int> p1 = new List<int>(parent1);
       List<int> p2 = new List<int>(parent2);
 
-      ZhuEncoding child = parent2.Clone() as ZhuEncoding;
+      ZhuEncodedSolution child = parent2.Clone() as ZhuEncodedSolution;
 
       if (parent1.Length != parent2.Length)
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuPermutationCrossover.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuPermutationCrossover.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuPermutationCrossover.cs	(revision 17698)
@@ -50,9 +50,9 @@
     }
 
-    protected override ZhuEncoding Crossover(IRandom random, ZhuEncoding parent1, ZhuEncoding parent2) {
+    protected override ZhuEncodedSolution Crossover(IRandom random, ZhuEncodedSolution parent1, ZhuEncodedSolution parent2) {
       //note - the inner crossover is called here and the result is converted to a prins representation
       //some refactoring should be done here in the future - the crossover operation should be called directly
       if (parent1.Length != parent2.Length)
-        return parent1.Clone() as ZhuEncoding;
+        return parent1.Clone() as ZhuEncodedSolution;
 
       InnerCrossoverParameter.ActualValue.ParentsParameter.ActualName = ParentsParameter.ActualName;
@@ -66,5 +66,5 @@
         ExecutionContext.Scope.Variables.Remove(childName);
 
-        return new ZhuEncoding(permutation, ProblemInstance);
+        return new ZhuEncodedSolution(permutation, ProblemInstance);
       } else
         return null;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Manipulators/ZhuManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Manipulators/ZhuManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Manipulators/ZhuManipulator.cs	(revision 17698)
@@ -48,13 +48,13 @@
     }
 
-    protected abstract void Manipulate(IRandom random, ZhuEncoding individual);
+    protected abstract void Manipulate(IRandom random, ZhuEncodedSolution individual);
 
     public override IOperation InstrumentedApply() {
-      IVRPEncoding solution = VRPToursParameter.ActualValue;
-      if (!(solution is ZhuEncoding)) {
-        VRPToursParameter.ActualValue = ZhuEncoding.ConvertFrom(solution, ProblemInstance);
+      IVRPEncodedSolution solution = VRPToursParameter.ActualValue;
+      if (!(solution is ZhuEncodedSolution)) {
+        VRPToursParameter.ActualValue = ZhuEncodedSolution.ConvertFrom(solution, ProblemInstance);
       }
 
-      Manipulate(RandomParameter.ActualValue, VRPToursParameter.ActualValue as ZhuEncoding);
+      Manipulate(RandomParameter.ActualValue, VRPToursParameter.ActualValue as ZhuEncodedSolution);
 
       return base.InstrumentedApply();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Manipulators/ZhuPermutationManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Manipulators/ZhuPermutationManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Manipulators/ZhuPermutationManipulator.cs	(revision 17698)
@@ -50,5 +50,5 @@
     }
 
-    protected override void Manipulate(IRandom random, ZhuEncoding individual) {
+    protected override void Manipulate(IRandom random, ZhuEncodedSolution individual) {
       InnerManipulatorParameter.ActualValue.PermutationParameter.ActualName = VRPToursParameter.ActualName;
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/ZhuEncodedSolution.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/ZhuEncodedSolution.cs	(revision 17698)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/ZhuEncodedSolution.cs	(revision 17698)
@@ -0,0 +1,139 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Problems.VehicleRouting.Interfaces;
+
+namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
+  [Item("ZhuEncodedSolution", "Represents a Zhu encoded solution of the VRP. It is implemented as described in Zhu, K.Q. (2000). A New Genetic Algorithm For VRPTW. Proceedings of the International Conference on Artificial Intelligence.")]
+  [StorableType("1A5F5A1D-E4F5-4477-887E-45FC488BC459")]
+  public class ZhuEncodedSolution : General.PermutationEncoding {
+    #region IVRPEncoding Members
+    public override int GetTourIndex(Tour tour) {
+      return 0;
+    }
+
+    public override List<Tour> GetTours() {
+      List<Tour> result = new List<Tour>();
+
+      Tour newTour = new Tour();
+
+      for (int i = 0; i < this.Length; i++) {
+        int city = this[i] + 1;
+        newTour.Stops.Add(city);
+        if (!ProblemInstance.TourFeasible(newTour, this)) {
+          newTour.Stops.Remove(city);
+          if (newTour.Stops.Count > 0)
+            result.Add(newTour);
+
+          newTour = new Tour();
+          newTour.Stops.Add(city);
+        }
+      }
+
+      if (newTour.Stops.Count > 0)
+        result.Add(newTour);
+
+      //if there are too many vehicles - repair
+      while (result.Count > ProblemInstance.Vehicles.Value) {
+        Tour tour = result[result.Count - 1];
+
+        //find predecessor / successor in permutation
+        int predecessorIndex = Array.IndexOf(this.array, tour.Stops[0] - 1) - 1;
+        if (predecessorIndex >= 0) {
+          int predecessor = this[predecessorIndex] + 1;
+
+          foreach (Tour t in result) {
+            int insertPosition = t.Stops.IndexOf(predecessor) + 1;
+            if (insertPosition != -1) {
+              t.Stops.InsertRange(insertPosition, tour.Stops);
+              break;
+            }
+          }
+        } else {
+          int successorIndex = Array.IndexOf(this.array,
+            tour.Stops[tour.Stops.Count - 1] - 1) + 1;
+          int successor = this[successorIndex] + 1;
+
+          foreach (Tour t in result) {
+            int insertPosition = t.Stops.IndexOf(successor);
+            if (insertPosition != -1) {
+              t.Stops.InsertRange(insertPosition, tour.Stops);
+              break;
+            }
+          }
+        }
+
+        result.Remove(tour);
+      }
+
+      return result;
+    }
+    #endregion
+
+    public ZhuEncodedSolution(Permutation permutation, IVRPProblemInstance problemInstance)
+      : base(permutation, problemInstance) {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ZhuEncodedSolution(this, cloner);
+    }
+
+    protected ZhuEncodedSolution(ZhuEncodedSolution original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    [StorableConstructor]
+    protected ZhuEncodedSolution(StorableConstructorFlag _) : base(_) {
+    }
+
+    public static ZhuEncodedSolution ConvertFrom(IVRPEncodedSolution encoding, IVRPProblemInstance problemInstance) {
+      List<Tour> tours = encoding.GetTours();
+      List<int> route = new List<int>();
+
+      foreach (Tour tour in tours) {
+        foreach (int city in tour.Stops)
+          route.Add(city - 1);
+      }
+
+      return new ZhuEncodedSolution(
+        new Permutation(PermutationTypes.RelativeUndirected, route.ToArray()), problemInstance);
+    }
+
+    public static ZhuEncodedSolution ConvertFrom(List<int> routeParam, IVRPProblemInstance problemInstance) {
+      List<int> route = new List<int>(routeParam);
+
+      while (route.Remove(0)) { //remove all delimiters (0)
+      }
+
+      for (int i = 0; i < route.Count; i++)
+        route[i]--;
+
+      return new ZhuEncodedSolution(
+        new Permutation(PermutationTypes.RelativeUndirected, route.ToArray()), problemInstance);
+    }
+  }
+}
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/ZhuEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/ZhuEncoding.cs	(revision 17697)
+++ 	(revision )
@@ -1,139 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Encodings.PermutationEncoding;
-using HEAL.Attic;
-using HeuristicLab.Problems.VehicleRouting.Interfaces;
-
-namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
-  [Item("ZhuEncoding", "Represents a Zhu encoding of VRP solutions. It is implemented as described in Zhu, K.Q. (2000). A New Genetic Algorithm For VRPTW. Proceedings of the International Conference on Artificial Intelligence.")]
-  [StorableType("1A5F5A1D-E4F5-4477-887E-45FC488BC459")]
-  public class ZhuEncoding : General.PermutationEncoding {
-    #region IVRPEncoding Members
-    public override int GetTourIndex(Tour tour) {
-      return 0;
-    }
-
-    public override List<Tour> GetTours() {
-      List<Tour> result = new List<Tour>();
-
-      Tour newTour = new Tour();
-
-      for (int i = 0; i < this.Length; i++) {
-        int city = this[i] + 1;
-        newTour.Stops.Add(city);
-        if (!ProblemInstance.TourFeasible(newTour, this)) {
-          newTour.Stops.Remove(city);
-          if (newTour.Stops.Count > 0)
-            result.Add(newTour);
-
-          newTour = new Tour();
-          newTour.Stops.Add(city);
-        }
-      }
-
-      if (newTour.Stops.Count > 0)
-        result.Add(newTour);
-
-      //if there are too many vehicles - repair
-      while (result.Count > ProblemInstance.Vehicles.Value) {
-        Tour tour = result[result.Count - 1];
-
-        //find predecessor / successor in permutation
-        int predecessorIndex = Array.IndexOf(this.array, tour.Stops[0] - 1) - 1;
-        if (predecessorIndex >= 0) {
-          int predecessor = this[predecessorIndex] + 1;
-
-          foreach (Tour t in result) {
-            int insertPosition = t.Stops.IndexOf(predecessor) + 1;
-            if (insertPosition != -1) {
-              t.Stops.InsertRange(insertPosition, tour.Stops);
-              break;
-            }
-          }
-        } else {
-          int successorIndex = Array.IndexOf(this.array,
-            tour.Stops[tour.Stops.Count - 1] - 1) + 1;
-          int successor = this[successorIndex] + 1;
-
-          foreach (Tour t in result) {
-            int insertPosition = t.Stops.IndexOf(successor);
-            if (insertPosition != -1) {
-              t.Stops.InsertRange(insertPosition, tour.Stops);
-              break;
-            }
-          }
-        }
-
-        result.Remove(tour);
-      }
-
-      return result;
-    }
-    #endregion
-
-    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) {
-    }
-
-    [StorableConstructor]
-    protected ZhuEncoding(StorableConstructorFlag _) : base(_) {
-    }
-
-    public static ZhuEncoding ConvertFrom(IVRPEncoding encoding, IVRPProblemInstance problemInstance) {
-      List<Tour> tours = encoding.GetTours();
-      List<int> route = new List<int>();
-
-      foreach (Tour tour in tours) {
-        foreach (int city in tour.Stops)
-          route.Add(city - 1);
-      }
-
-      return new ZhuEncoding(
-        new Permutation(PermutationTypes.RelativeUndirected, route.ToArray()), problemInstance);
-    }
-
-    public static ZhuEncoding ConvertFrom(List<int> routeParam, IVRPProblemInstance problemInstance) {
-      List<int> route = new List<int>(routeParam);
-
-      while (route.Remove(0)) { //remove all delimiters (0)
-      }
-
-      for (int i = 0; i < route.Count; i++)
-        route[i]--;
-
-      return new ZhuEncoding(
-        new Permutation(PermutationTypes.RelativeUndirected, route.ToArray()), problemInstance);
-    }
-  }
-}
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj	(revision 17698)
@@ -135,4 +135,5 @@
     <Compile Include="Analyzer\ConstraintRelaxation\TimeWindowed\TimeWindowRelaxationVRPAnalyzer.cs" />
     <Compile Include="Analyzer\VRPSolution.cs" />
+    <Compile Include="Encodings\Alba\AlbaEncoding.cs" />
     <Compile Include="Encodings\Potvin\Moves\TwoOptStar\IPotvinTwoOptStarMoveOperator.cs" />
     <Compile Include="Encodings\Potvin\Moves\TwoOptStar\PotvinTwoOptStarExhaustiveMoveGenerator.cs" />
@@ -148,4 +149,5 @@
     <Compile Include="Improver\VRPImprovementOperator.cs" />
     <Compile Include="Improver\VRPIntraRouteImprovementOperator.cs" />
+    <Compile Include="Interfaces\IVRPEncoding.cs" />
     <Compile Include="Interfaces\IVRPLocalSearchManipulator.cs" />
     <Compile Include="Interpreters\MDCVRPInterpreter.cs" />
@@ -158,5 +160,5 @@
     <Compile Include="PathRelinkers\VRPPathRelinker.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Encodings\Alba\AlbaEncoding.cs" />
+    <Compile Include="Encodings\Alba\AlbaEncodedSolution.cs" />
     <Compile Include="Encodings\Alba\Creators\RandomCreator.cs" />
     <Compile Include="Encodings\Alba\Creators\AlbaCreator.cs" />
@@ -227,5 +229,5 @@
     <Compile Include="Encodings\General\TourEncoding.cs" />
     <Compile Include="Encodings\GVR\Crossovers\GVRCrossover.cs" />
-    <Compile Include="Encodings\GVR\GVREncoding.cs" />
+    <Compile Include="Encodings\GVR\GVREncodedSolution.cs" />
     <Compile Include="Encodings\GVR\IGVROperator.cs" />
     <Compile Include="Encodings\GVR\Manipulators\GVRDisplacementManipulator.cs" />
@@ -304,5 +306,5 @@
     <Compile Include="Encodings\Potvin\Moves\VehicleAssignment\PotvinVehicleAssignmentMultiMoveGenerator.cs" />
     <Compile Include="Encodings\Potvin\Moves\VehicleAssignment\PotvinVehicleAssignmentSingleMoveGenerator.cs" />
-    <Compile Include="Encodings\Potvin\PotvinEncoding.cs" />
+    <Compile Include="Encodings\Potvin\PotvinEncodedSolution.cs" />
     <Compile Include="Encodings\Prins\Crossovers\PrinsCrossover.cs" />
     <Compile Include="Encodings\Prins\Crossovers\PrinsPermutationCrossover.cs" />
@@ -313,5 +315,5 @@
     <Compile Include="Encodings\Prins\Manipulators\PrinsPermutationManipulator.cs" />
     <Compile Include="Encodings\Prins\Manipulators\PrinsStochasticLSManipulator.cs" />
-    <Compile Include="Encodings\Prins\PrinsEncoding.cs" />
+    <Compile Include="Encodings\Prins\PrinsEncodedSolution.cs" />
     <Compile Include="Encodings\VRPOperator.cs" />
     <Compile Include="Encodings\Zhu\Crossovers\ZhuCrossover.cs" />
@@ -324,5 +326,5 @@
     <Compile Include="Encodings\Zhu\Manipulators\ZhuManipulator.cs" />
     <Compile Include="Encodings\Zhu\Manipulators\ZhuPermutationManipulator.cs" />
-    <Compile Include="Encodings\Zhu\ZhuEncoding.cs" />
+    <Compile Include="Encodings\Zhu\ZhuEncodedSolution.cs" />
     <Compile Include="Interfaces\IMultiVRPOperator.cs" />
     <Compile Include="Interfaces\IVRPManipulator.cs" />
@@ -333,5 +335,5 @@
     <Compile Include="Interfaces\IVRPMultiNeighborhoodShakingOperator.cs" />
     <Compile Include="Interfaces\IVRPOperator.cs" />
-    <Compile Include="Interfaces\IVRPEncoding.cs" />
+    <Compile Include="Interfaces\IVRPEncodedSolution.cs" />
     <Compile Include="Interfaces\IVRPProblemInstance.cs" />
     <Compile Include="Plugin.cs" />
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Improver/VRPImprovementOperator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Improver/VRPImprovementOperator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Improver/VRPImprovementOperator.cs	(revision 17698)
@@ -76,6 +76,6 @@
 
     public override IOperation InstrumentedApply() {
-      var solution = SolutionParameter.ActualValue as IVRPEncoding;
-      var potvinSolution = solution is PotvinEncoding ? solution as PotvinEncoding : PotvinEncoding.ConvertFrom(solution, ProblemInstance);
+      var solution = SolutionParameter.ActualValue as IVRPEncodedSolution;
+      var potvinSolution = solution is PotvinEncodedSolution ? solution as PotvinEncodedSolution : PotvinEncodedSolution.ConvertFrom(solution, ProblemInstance);
 
       if (solution == null)
@@ -90,5 +90,5 @@
     }
 
-    protected abstract int Improve(PotvinEncoding solution);
+    protected abstract int Improve(PotvinEncodedSolution solution);
   }
 }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Improver/VRPIntraRouteImprovementOperator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Improver/VRPIntraRouteImprovementOperator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Improver/VRPIntraRouteImprovementOperator.cs	(revision 17698)
@@ -42,5 +42,5 @@
     }
 
-    protected override int Improve(PotvinEncoding solution) {
+    protected override int Improve(PotvinEncodedSolution solution) {
       int evaluatedSolutions = 0;
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPCreator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPCreator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPCreator.cs	(revision 17698)
@@ -27,5 +27,5 @@
   [StorableType("36C4F904-7B59-4C09-81C4-BC07D9ABC496")]
   public interface IVRPCreator : IVRPOperator, ISolutionCreator {
-    ILookupParameter<IVRPEncoding> VRPToursParameter { get; }
+    ILookupParameter<IVRPEncodedSolution> VRPToursParameter { get; }
   }
 }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPCrossover.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPCrossover.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPCrossover.cs	(revision 17698)
@@ -27,6 +27,6 @@
   [StorableType("FFAE16E2-265C-464E-9903-24154F6B0628")]
   public interface IVRPCrossover : IVRPOperator, ICrossover {
-    ILookupParameter<ItemArray<IVRPEncoding>> ParentsParameter { get; }
-    ILookupParameter<IVRPEncoding> ChildParameter { get; }
+    ILookupParameter<ItemArray<IVRPEncodedSolution>> ParentsParameter { get; }
+    ILookupParameter<IVRPEncodedSolution> ChildParameter { get; }
   }
 }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPEncodedSolution.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPEncodedSolution.cs	(revision 17698)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPEncodedSolution.cs	(revision 17698)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using HEAL.Attic;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Problems.VehicleRouting.Interfaces {
+  [StorableType("A8B95552-3A3D-43B3-95C3-B04602AEACF5")]
+  public interface IVRPEncodedSolution : IItem, IEncodedSolution {
+    List<Tour> GetTours();
+    int GetTourIndex(Tour tour);
+    int GetVehicleAssignment(int tour);
+  }
+}
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPEncoding.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPEncoding.cs	(revision 17698)
@@ -20,14 +20,14 @@
 #endregion
 
-using System.Collections.Generic;
-using HeuristicLab.Core;
 using HEAL.Attic;
+using HeuristicLab.Optimization;
+using HeuristicLab.Problems.VehicleRouting.Interfaces;
 
-namespace HeuristicLab.Problems.VehicleRouting.Interfaces {
-  [StorableType("A8B95552-3A3D-43B3-95C3-B04602AEACF5")]
-  public interface IVRPEncoding : IItem {
-    List<Tour> GetTours();
-    int GetTourIndex(Tour tour);
-    int GetVehicleAssignment(int tour);
-  }
+namespace HeuristicLab.Problems.VehicleRouting {
+
+  [StorableType("b6674651-cc95-48d8-a2c3-83ee9325def3")]
+  public interface IVRPEncoding : IEncoding { }
+
+  [StorableType("7d010ab3-2e01-4383-bb6c-7c47ef9d803f")]
+  public interface IVRPEncoding<T> : IVRPEncoding, IEncoding<T> where T : class, IVRPEncodedSolution { }
 }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPEvaluator.cs	(revision 17698)
@@ -28,10 +28,10 @@
   [StorableType("C3423687-3CBE-41E4-9227-FF4F1D6912E1")]
   public interface IVRPEvaluator : IVRPOperator, ISingleObjectiveEvaluator {
-    ILookupParameter<IVRPEncoding> VRPToursParameter { get; }
+    ILookupParameter<IVRPEncodedSolution> VRPToursParameter { get; }
 
-    VRPEvaluation Evaluate(IVRPProblemInstance instance, IVRPEncoding solution);
-    VRPEvaluation EvaluateTour(IVRPProblemInstance instance, Tour tour, IVRPEncoding solution);
+    VRPEvaluation Evaluate(IVRPProblemInstance instance, IVRPEncodedSolution solution);
+    VRPEvaluation EvaluateTour(IVRPProblemInstance instance, Tour tour, IVRPEncodedSolution solution);
     bool Feasible(VRPEvaluation evaluation);
-    double GetInsertionCosts(IVRPProblemInstance instance, IVRPEncoding solution, VRPEvaluation eval, int customer, int tour, int index, out bool feasible);
+    double GetInsertionCosts(IVRPProblemInstance instance, IVRPEncodedSolution solution, VRPEvaluation eval, int customer, int tour, int index, out bool feasible);
   }
 }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPManipulator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPManipulator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPManipulator.cs	(revision 17698)
@@ -27,5 +27,5 @@
   [StorableType("AC249F6E-B3A0-49C2-A582-811C132B4DAE")]
   public interface IVRPManipulator : IVRPOperator, IManipulator {
-    ILookupParameter<IVRPEncoding> VRPToursParameter { get; }
+    ILookupParameter<IVRPEncodedSolution> VRPToursParameter { get; }
   }
 }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPMoveOperator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPMoveOperator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPMoveOperator.cs	(revision 17698)
@@ -27,5 +27,5 @@
   [StorableType("9425CBF4-8F21-43FC-9AAB-52E263B2BB12")]
   public interface IVRPMoveOperator : IVRPOperator, IMoveOperator {
-    ILookupParameter<IVRPEncoding> VRPToursParameter { get; }
+    ILookupParameter<IVRPEncodedSolution> VRPToursParameter { get; }
     ILookupParameter VRPMoveParameter { get; }
   }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPMultiNeighborhoodShakingOperator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPMultiNeighborhoodShakingOperator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPMultiNeighborhoodShakingOperator.cs	(revision 17698)
@@ -27,5 +27,5 @@
   [StorableType("48732EFD-AB16-4C96-A720-FB6CAEA0133D")]
   public interface IVRPMultiNeighborhoodShakingOperator : IMultiNeighborhoodShakingOperator, IVRPOperator {
-    ILookupParameter<IVRPEncoding> VRPToursParameter { get; }
+    ILookupParameter<IVRPEncodedSolution> VRPToursParameter { get; }
   }
 }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPProblemInstance.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPProblemInstance.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPProblemInstance.cs	(revision 17698)
@@ -48,12 +48,12 @@
     double[] GetCoordinates(int city);
     double GetDemand(int city);
-    double GetDistance(int start, int end, IVRPEncoding solution);
-    double GetInsertionDistance(int start, int customer, int end, IVRPEncoding solution, out double startDistance, out double endDistance);
-    bool Feasible(IVRPEncoding solution);
-    bool TourFeasible(Tour tour, IVRPEncoding solution);
-    VRPEvaluation Evaluate(IVRPEncoding solution);
-    VRPEvaluation EvaluateTour(Tour tour, IVRPEncoding solution);
+    double GetDistance(int start, int end, IVRPEncodedSolution solution);
+    double GetInsertionDistance(int start, int customer, int end, IVRPEncodedSolution solution, out double startDistance, out double endDistance);
+    bool Feasible(IVRPEncodedSolution solution);
+    bool TourFeasible(Tour tour, IVRPEncodedSolution solution);
+    VRPEvaluation Evaluate(IVRPEncodedSolution solution);
+    VRPEvaluation EvaluateTour(Tour tour, IVRPEncodedSolution solution);
     bool Feasible(VRPEvaluation eval);
-    double GetInsertionCosts(VRPEvaluation eval, IVRPEncoding solution, int customer, int tour, int index, out bool feasible);
+    double GetInsertionCosts(VRPEvaluation eval, IVRPEncodedSolution solution, int customer, int tour, int index, out bool feasible);
   }
 }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interpreters/IVRPDataInterpreter.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interpreters/IVRPDataInterpreter.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interpreters/IVRPDataInterpreter.cs	(revision 17698)
@@ -29,5 +29,5 @@
     public IVRPProblemInstance ProblemInstance { get; set; }
     public double? BestKnownQuality { get; set; }
-    public IVRPEncoding BestKnownSolution { get; set; }
+    public IVRPEncodedSolution BestKnownSolution { get; set; }
   }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interpreters/VRPInterpreter.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interpreters/VRPInterpreter.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Interpreters/VRPInterpreter.cs	(revision 17698)
@@ -29,7 +29,7 @@
     protected abstract void Interpret(IVRPData data, IVRPProblemInstance problemInstance);
 
-    protected virtual IVRPEncoding GetBestKnowTour(IVRPData data, IVRPProblemInstance problemInstance) {
+    protected virtual IVRPEncodedSolution GetBestKnowTour(IVRPData data, IVRPProblemInstance problemInstance) {
       if (data.BestKnownTour != null) {
-        PotvinEncoding solution = new PotvinEncoding(problemInstance);
+        PotvinEncodedSolution solution = new PotvinEncodedSolution(problemInstance);
 
         for (int i = 0; i < data.BestKnownTour.GetLength(0); i++) {
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/PathRelinkers/VRPPathRelinker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/PathRelinkers/VRPPathRelinker.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/PathRelinkers/VRPPathRelinker.cs	(revision 17698)
@@ -72,5 +72,5 @@
     }
 
-    public static ItemArray<IItem> Apply(PotvinEncoding initiator, PotvinEncoding guide, PercentValue n, int sampleSize, int iterations, IRandom rand, IVRPProblemInstance problemInstance) {
+    public static ItemArray<IItem> Apply(PotvinEncodedSolution initiator, PotvinEncodedSolution guide, PercentValue n, int sampleSize, int iterations, IRandom rand, IVRPProblemInstance problemInstance) {
       if (initiator == null || guide == null)
         throw new ArgumentException("Cannot relink path because one of the provided solutions or both are null.");
@@ -87,8 +87,8 @@
         originalTardinessPenalty.Value = (problemInstance as ITimeWindowedProblemInstance).TardinessPenalty.Value;
 
-      PotvinEncoding current = MatchTours(initiator, guide, problemInstance);
+      PotvinEncodedSolution current = MatchTours(initiator, guide, problemInstance);
       double currentSimilarity = VRPSimilarityCalculator.CalculateSimilarity(current, guide);
 
-      IList<PotvinEncoding> solutions = new List<PotvinEncoding>();
+      IList<PotvinEncodedSolution> solutions = new List<PotvinEncodedSolution>();
       int i = 0;
       while (i < iterations && !currentSimilarity.IsAlmost(1.0)) {
@@ -98,5 +98,5 @@
         if (currentSimilarity < 1.0) {
           for (int sample = 0; sample < sampleSize; sample++) {
-            var next = current.Clone() as PotvinEncoding;
+            var next = current.Clone() as PotvinEncodedSolution;
 
             int neighborhood = rand.Next(3);
@@ -159,5 +159,5 @@
     }
 
-    private static IList<IItem> ChooseSelection(IList<PotvinEncoding> solutions, PercentValue n) {
+    private static IList<IItem> ChooseSelection(IList<PotvinEncodedSolution> solutions, PercentValue n) {
       IList<IItem> selection = new List<IItem>();
       if (solutions.Count > 0) {
@@ -176,10 +176,10 @@
         throw new ArgumentException("The number of parents is not equal to 2.");
 
-      if (!(parents[0] is PotvinEncoding))
-        parents[0] = PotvinEncoding.ConvertFrom(parents[0] as IVRPEncoding, ProblemInstanceParameter.ActualValue);
-      if (!(parents[1] is PotvinEncoding))
-        parents[1] = PotvinEncoding.ConvertFrom(parents[1] as IVRPEncoding, ProblemInstanceParameter.ActualValue);
-
-      return Apply(parents[0] as PotvinEncoding, parents[1] as PotvinEncoding, n,
+      if (!(parents[0] is PotvinEncodedSolution))
+        parents[0] = PotvinEncodedSolution.ConvertFrom(parents[0] as IVRPEncodedSolution, ProblemInstanceParameter.ActualValue);
+      if (!(parents[1] is PotvinEncodedSolution))
+        parents[1] = PotvinEncodedSolution.ConvertFrom(parents[1] as IVRPEncodedSolution, ProblemInstanceParameter.ActualValue);
+
+      return Apply(parents[0] as PotvinEncodedSolution, parents[1] as PotvinEncodedSolution, n,
         SampleSizeParameter.Value.Value, IterationsParameter.Value.Value, RandomParameter.ActualValue, ProblemInstanceParameter.ActualValue);
     }
@@ -189,6 +189,6 @@
     }
 
-    private static PotvinEncoding MatchTours(PotvinEncoding initiator, PotvinEncoding guide, IVRPProblemInstance problemInstance) {
-      var result = new PotvinEncoding(problemInstance);
+    private static PotvinEncodedSolution MatchTours(PotvinEncodedSolution initiator, PotvinEncodedSolution guide, IVRPProblemInstance problemInstance) {
+      var result = new PotvinEncodedSolution(problemInstance);
 
       var used = new List<bool>();
@@ -226,13 +226,13 @@
 
     #region moves
-    public static PotvinEncoding RouteBasedXOver(PotvinEncoding initiator, PotvinEncoding guide, IRandom random, IVRPProblemInstance problemInstance) {
+    public static PotvinEncodedSolution RouteBasedXOver(PotvinEncodedSolution initiator, PotvinEncodedSolution guide, IRandom random, IVRPProblemInstance problemInstance) {
       return PotvinRouteBasedCrossover.Apply(random, initiator, guide, problemInstance, false);
     }
 
-    public static PotvinEncoding SequenceBasedXOver(PotvinEncoding initiator, PotvinEncoding guide, IRandom random, IVRPProblemInstance problemInstance) {
+    public static PotvinEncodedSolution SequenceBasedXOver(PotvinEncodedSolution initiator, PotvinEncodedSolution guide, IRandom random, IVRPProblemInstance problemInstance) {
       return PotvinSequenceBasedCrossover.Apply(random, initiator, guide, problemInstance, false);
     }
 
-    public static void GuidedRelocateMove(PotvinEncoding initiator, PotvinEncoding guide, IRandom random) {
+    public static void GuidedRelocateMove(PotvinEncodedSolution initiator, PotvinEncodedSolution guide, IRandom random) {
       List<int> cities = new List<int>();
       foreach (Tour tour in initiator.Tours) {
@@ -291,5 +291,5 @@
     }
 
-    public static void RelocateMove(PotvinEncoding individual, IRandom random) {
+    public static void RelocateMove(PotvinEncodedSolution individual, IRandom random) {
       int cities = individual.Cities;
       int city = 1 + random.Next(cities);
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/MultiDepotVRP/MDCVRP/MDCVRPEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/MultiDepotVRP/MDCVRP/MDCVRPEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/MultiDepotVRP/MDCVRP/MDCVRPEvaluator.cs	(revision 17698)
@@ -40,5 +40,5 @@
     }
 
-    protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncoding solution) {
+    protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncodedSolution solution) {
       TourInsertionInfo tourInfo = new TourInsertionInfo(solution.GetVehicleAssignment(solution.GetTourIndex(tour)));
       eval.InsertionInfo.AddTourInsertionInfo(tourInfo);
@@ -96,5 +96,5 @@
     }
 
-    protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncoding solution, TourInsertionInfo tourInsertionInfo, int index, int customer,
+    protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncodedSolution solution, TourInsertionInfo tourInsertionInfo, int index, int customer,
       out bool feasible) {
       CVRPInsertionInfo insertionInfo = tourInsertionInfo.GetStopInsertionInfo(index) as CVRPInsertionInfo;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/MultiDepotVRP/MDCVRP/MDCVRPTW/MDCVRPPDTW/MDCVRPPDTWEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/MultiDepotVRP/MDCVRP/MDCVRPTW/MDCVRPPDTW/MDCVRPPDTWEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/MultiDepotVRP/MDCVRP/MDCVRPTW/MDCVRPPDTW/MDCVRPPDTWEvaluator.cs	(revision 17698)
@@ -42,5 +42,5 @@
     }
 
-    protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncoding solution) {
+    protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncodedSolution solution) {
       TourInsertionInfo tourInfo = new TourInsertionInfo(solution.GetVehicleAssignment(solution.GetTourIndex(tour)));
       eval.InsertionInfo.AddTourInsertionInfo(tourInfo);
@@ -182,5 +182,5 @@
     }
 
-    protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncoding solution, TourInsertionInfo tourInsertionInfo, int index, int customer,
+    protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncodedSolution solution, TourInsertionInfo tourInsertionInfo, int index, int customer,
       out bool feasible) {
       CVRPPDTWInsertionInfo insertionInfo = tourInsertionInfo.GetStopInsertionInfo(index) as CVRPPDTWInsertionInfo;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/MultiDepotVRP/MDCVRP/MDCVRPTW/MDCVRPTWEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/MultiDepotVRP/MDCVRP/MDCVRPTW/MDCVRPTWEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/MultiDepotVRP/MDCVRP/MDCVRPTW/MDCVRPTWEvaluator.cs	(revision 17698)
@@ -45,5 +45,5 @@
     }
 
-    protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncoding solution) {
+    protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncodedSolution solution) {
       TourInsertionInfo tourInfo = new TourInsertionInfo(solution.GetVehicleAssignment(solution.GetTourIndex(tour)));
       eval.InsertionInfo.AddTourInsertionInfo(tourInfo);
@@ -161,5 +161,5 @@
     }
 
-    protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncoding solution, TourInsertionInfo tourInsertionInfo, int index, int customer,
+    protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncodedSolution solution, TourInsertionInfo tourInsertionInfo, int index, int customer,
       out bool feasible) {
       CVRPTWInsertionInfo insertionInfo = tourInsertionInfo.GetStopInsertionInfo(index) as CVRPTWInsertionInfo;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/MultiDepotVRP/MultiDepotVRPEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/MultiDepotVRP/MultiDepotVRPEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/MultiDepotVRP/MultiDepotVRPEvaluator.cs	(revision 17698)
@@ -30,5 +30,5 @@
   [StorableType("AFC33483-2E8A-4469-8216-1F4FEE0AEB51")]
   public class MultiDepotVRPEvaluator : VRPEvaluator {
-    protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncoding solution) {
+    protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncodedSolution solution) {
       TourInsertionInfo tourInfo = new TourInsertionInfo(solution.GetVehicleAssignment(solution.GetTourIndex(tour)));
       eval.InsertionInfo.AddTourInsertionInfo(tourInfo);
@@ -66,5 +66,5 @@
     }
 
-    protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncoding solution, TourInsertionInfo tourInsertionInfo, int index, int customer,
+    protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncodedSolution solution, TourInsertionInfo tourInsertionInfo, int index, int customer,
       out bool feasible) {
       StopInsertionInfo insertionInfo = tourInsertionInfo.GetStopInsertionInfo(index);
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/MultiDepotVRP/MultiDepotVRPProblemInstance.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/MultiDepotVRP/MultiDepotVRPProblemInstance.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/MultiDepotVRP/MultiDepotVRPProblemInstance.cs	(revision 17698)
@@ -116,5 +116,5 @@
     }
 
-    public int GetDepot(int customer, IVRPEncoding solution) {
+    public int GetDepot(int customer, IVRPEncodedSolution solution) {
       int depot = -1;
 
@@ -131,5 +131,5 @@
     }
 
-    public override double GetDistance(int start, int end, IVRPEncoding solution) {
+    public override double GetDistance(int start, int end, IVRPEncodedSolution solution) {
       if (start == 0 && end == 0)
         return 0;
@@ -149,5 +149,5 @@
     }
 
-    public override double GetInsertionDistance(int start, int customer, int end, IVRPEncoding solution,
+    public override double GetInsertionDistance(int start, int customer, int end, IVRPEncodedSolution solution,
       out double startDistance, out double endDistance) {
       if (start == 0) {
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPEvaluator.cs	(revision 17698)
@@ -40,5 +40,5 @@
     }
 
-    protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncoding solution) {
+    protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncodedSolution solution) {
       TourInsertionInfo tourInfo = new TourInsertionInfo(solution.GetVehicleAssignment(solution.GetTourIndex(tour))); ;
       eval.InsertionInfo.AddTourInsertionInfo(tourInfo);
@@ -98,5 +98,5 @@
     }
 
-    protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncoding solution, TourInsertionInfo tourInsertionInfo, int index, int customer,
+    protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncodedSolution solution, TourInsertionInfo tourInsertionInfo, int index, int customer,
       out bool feasible) {
       CVRPInsertionInfo insertionInfo = tourInsertionInfo.GetStopInsertionInfo(index) as CVRPInsertionInfo;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPPDTW/CVRPPDTWEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPPDTW/CVRPPDTWEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPPDTW/CVRPPDTWEvaluator.cs	(revision 17698)
@@ -42,5 +42,5 @@
     }
 
-    protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncoding solution) {
+    protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncodedSolution solution) {
       TourInsertionInfo tourInfo = new TourInsertionInfo(solution.GetVehicleAssignment(solution.GetTourIndex(tour)));
       eval.InsertionInfo.AddTourInsertionInfo(tourInfo);
@@ -167,5 +167,5 @@
     }
 
-    protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncoding solution, TourInsertionInfo tourInsertionInfo, int index, int customer,
+    protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncodedSolution solution, TourInsertionInfo tourInsertionInfo, int index, int customer,
       out bool feasible) {
       CVRPPDTWInsertionInfo insertionInfo = tourInsertionInfo.GetStopInsertionInfo(index) as CVRPPDTWInsertionInfo;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPTWEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPTWEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPTWEvaluator.cs	(revision 17698)
@@ -45,5 +45,5 @@
     }
 
-    protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncoding solution) {
+    protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncodedSolution solution) {
       TourInsertionInfo tourInfo = new TourInsertionInfo(solution.GetVehicleAssignment(solution.GetTourIndex(tour)));
       eval.InsertionInfo.AddTourInsertionInfo(tourInfo);
@@ -149,5 +149,5 @@
     }
 
-    protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncoding solution, TourInsertionInfo tourInsertionInfo, int index, int customer,
+    protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncodedSolution solution, TourInsertionInfo tourInsertionInfo, int index, int customer,
       out bool feasible) {
       CVRPTWInsertionInfo insertionInfo = tourInsertionInfo.GetStopInsertionInfo(index) as CVRPTWInsertionInfo;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPEvaluator.cs	(revision 17698)
@@ -30,5 +30,5 @@
   [StorableType("1E0DECD9-54BF-4F69-A743-228C481749A0")]
   public class SingleDepotVRPEvaluator : VRPEvaluator {
-    protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncoding solution) {
+    protected override void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncodedSolution solution) {
       TourInsertionInfo tourInfo = new TourInsertionInfo(solution.GetVehicleAssignment(solution.GetTourIndex(tour)));
       eval.InsertionInfo.AddTourInsertionInfo(tourInfo);
@@ -66,5 +66,5 @@
     }
 
-    protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncoding solution, TourInsertionInfo tourInsertionInfo, int index, int customer,
+    protected override double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncodedSolution solution, TourInsertionInfo tourInsertionInfo, int index, int customer,
       out bool feasible) {
       StopInsertionInfo insertionInfo = tourInsertionInfo.GetStopInsertionInfo(index);
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPProblemInstance.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPProblemInstance.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPProblemInstance.cs	(revision 17698)
@@ -22,9 +22,9 @@
 using System.Collections.Generic;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Optimization;
-using HEAL.Attic;
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPEvaluator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPEvaluator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPEvaluator.cs	(revision 17698)
@@ -32,6 +32,6 @@
   [StorableType("164315D4-BCCF-4A79-B75B-11A49C56C5E1")]
   public abstract class VRPEvaluator : VRPOperator, IVRPEvaluator {
-    public ILookupParameter<IVRPEncoding> VRPToursParameter {
-      get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPTours"]; }
+    public ILookupParameter<IVRPEncodedSolution> VRPToursParameter {
+      get { return (ILookupParameter<IVRPEncodedSolution>)Parameters["VRPTours"]; }
     }
 
@@ -57,5 +57,5 @@
 
     public VRPEvaluator() {
-      Parameters.Add(new LookupParameter<IVRPEncoding>("VRPTours", "The VRP tours which should be evaluated."));
+      Parameters.Add(new LookupParameter<IVRPEncodedSolution>("VRPTours", "The VRP tours which should be evaluated."));
 
       Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The evaluated quality of the VRP solution."));
@@ -74,5 +74,5 @@
     }
 
-    protected abstract void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncoding solution);
+    protected abstract void EvaluateTour(VRPEvaluation eval, IVRPProblemInstance instance, Tour tour, IVRPEncodedSolution solution);
 
     protected virtual void InitResultParameters() {
@@ -96,7 +96,7 @@
     }
 
-    protected abstract double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncoding solution, TourInsertionInfo tourInsertionInfo, int index, int customer, out bool feasible);
+    protected abstract double GetTourInsertionCosts(IVRPProblemInstance instance, IVRPEncodedSolution solution, TourInsertionInfo tourInsertionInfo, int index, int customer, out bool feasible);
 
-    public double GetInsertionCosts(IVRPProblemInstance instance, IVRPEncoding solution, VRPEvaluation eval, int customer, int tour, int index, out bool feasible) {
+    public double GetInsertionCosts(IVRPProblemInstance instance, IVRPEncodedSolution solution, VRPEvaluation eval, int customer, int tour, int index, out bool feasible) {
       bool tourFeasible;
       double costs = GetTourInsertionCosts(
@@ -112,5 +112,5 @@
     }
 
-    public VRPEvaluation EvaluateTour(IVRPProblemInstance instance, Tour tour, IVRPEncoding solution) {
+    public VRPEvaluation EvaluateTour(IVRPProblemInstance instance, Tour tour, IVRPEncodedSolution solution) {
       VRPEvaluation evaluation = CreateTourEvaluation();
       EvaluateTour(evaluation, instance, tour, solution);
@@ -118,5 +118,5 @@
     }
 
-    public virtual VRPEvaluation Evaluate(IVRPProblemInstance instance, IVRPEncoding solution) {
+    public virtual VRPEvaluation Evaluate(IVRPProblemInstance instance, IVRPEncodedSolution solution) {
       VRPEvaluation evaluation = CreateTourEvaluation();
 
@@ -132,5 +132,5 @@
 
       VRPEvaluation evaluation = CreateTourEvaluation();
-      IVRPEncoding solution = VRPToursParameter.ActualValue;
+      IVRPEncodedSolution solution = VRPToursParameter.ActualValue;
       foreach (Tour tour in solution.GetTours()) {
         EvaluateTour(evaluation, ProblemInstance, tour, solution);
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPProblemInstance.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPProblemInstance.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPProblemInstance.cs	(revision 17698)
@@ -23,9 +23,9 @@
 using System.Collections.Generic;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
@@ -178,5 +178,4 @@
         return evaluator;
       }
-
       set {
         lock (locker) {
@@ -188,5 +187,5 @@
     }
 
-    public virtual double GetDistance(int start, int end, IVRPEncoding solution) {
+    public virtual double GetDistance(int start, int end, IVRPEncodedSolution solution) {
       if (distanceMatrix == null && UseDistanceMatrix.Value) {
         distanceMatrix = DistanceMatrix ?? CreateDistanceMatrix();
@@ -197,5 +196,5 @@
     }
 
-    public virtual double GetInsertionDistance(int start, int customer, int end, IVRPEncoding solution,
+    public virtual double GetInsertionDistance(int start, int customer, int end, IVRPEncodedSolution solution,
       out double startDistance, out double endDistance) {
       double distance = GetDistance(start, end, solution);
@@ -209,5 +208,5 @@
     }
 
-    public bool Feasible(IVRPEncoding solution) {
+    public bool Feasible(IVRPEncodedSolution solution) {
       return evaluator.Feasible(
         evaluator.Evaluate(
@@ -215,5 +214,5 @@
     }
 
-    public bool TourFeasible(Tour tour, IVRPEncoding solution) {
+    public bool TourFeasible(Tour tour, IVRPEncodedSolution solution) {
       return evaluator.Feasible(
         evaluator.EvaluateTour(
@@ -221,9 +220,9 @@
     }
 
-    public VRPEvaluation Evaluate(IVRPEncoding solution) {
+    public VRPEvaluation Evaluate(IVRPEncodedSolution solution) {
       return evaluator.Evaluate(this, solution);
     }
 
-    public VRPEvaluation EvaluateTour(Tour tour, IVRPEncoding solution) {
+    public VRPEvaluation EvaluateTour(Tour tour, IVRPEncodedSolution solution) {
       return evaluator.EvaluateTour(this, tour, solution);
     }
@@ -233,5 +232,5 @@
     }
 
-    public double GetInsertionCosts(VRPEvaluation eval, IVRPEncoding solution, int customer, int tour, int index, out bool feasible) {
+    public double GetInsertionCosts(VRPEvaluation eval, IVRPEncodedSolution solution, int customer, int tour, int index, out bool feasible) {
       return evaluator.GetInsertionCosts(this, solution, eval, customer, tour, index, out feasible);
     }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/SimilarityCalculators/VRPSimilarityCalculator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/SimilarityCalculators/VRPSimilarityCalculator.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/SimilarityCalculators/VRPSimilarityCalculator.cs	(revision 17698)
@@ -57,5 +57,5 @@
     }
 
-    public static double CalculateSimilarity(PotvinEncoding left, PotvinEncoding right) {
+    public static double CalculateSimilarity(PotvinEncodedSolution left, PotvinEncodedSolution right) {
       if (left == null || right == null)
         throw new ArgumentException("Cannot calculate similarity because one of the provided solutions or both are null.");
@@ -93,9 +93,9 @@
 
     public override double CalculateSolutionSimilarity(IScope leftSolution, IScope rightSolution) {
-      var sol1 = leftSolution.Variables[SolutionVariableName].Value as IVRPEncoding;
-      var sol2 = rightSolution.Variables[SolutionVariableName].Value as IVRPEncoding;
+      var sol1 = leftSolution.Variables[SolutionVariableName].Value as IVRPEncodedSolution;
+      var sol2 = rightSolution.Variables[SolutionVariableName].Value as IVRPEncodedSolution;
 
-      var potvinSol1 = sol1 is PotvinEncoding ? sol1 as PotvinEncoding : PotvinEncoding.ConvertFrom(sol1, ProblemInstance);
-      var potvinSol2 = sol2 is PotvinEncoding ? sol2 as PotvinEncoding : PotvinEncoding.ConvertFrom(sol2, ProblemInstance);
+      var potvinSol1 = sol1 is PotvinEncodedSolution ? sol1 as PotvinEncodedSolution : PotvinEncodedSolution.ConvertFrom(sol1, ProblemInstance);
+      var potvinSol2 = sol2 is PotvinEncodedSolution ? sol2 as PotvinEncodedSolution : PotvinEncodedSolution.ConvertFrom(sol2, ProblemInstance);
 
       return CalculateSimilarity(potvinSol1, potvinSol2);
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs	(revision 17697)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs	(revision 17698)
@@ -24,4 +24,5 @@
 using System.Drawing;
 using System.Linq;
+using System.Threading;
 using HEAL.Attic;
 using HeuristicLab.Analysis;
@@ -44,6 +45,5 @@
   [Creatable(CreatableAttribute.Categories.CombinatorialProblems, Priority = 110)]
   [StorableType("95137523-AE3B-4638-958C-E86829D54CE3")]
-  public sealed class VehicleRoutingProblem : EncodedProblem, ISingleObjectiveHeuristicOptimizationProblem, IStorableContent, IProblemInstanceConsumer<IVRPData> {
-    public string Filename { get; set; }
+  public sealed class VehicleRoutingProblem : SingleObjectiveProblem<AlbaEncoding, AlbaEncodedSolution>, IProblemInstanceConsumer<IVRPData> {
 
     public static new Image StaticItemImage {
@@ -52,27 +52,9 @@
 
     #region Parameter Properties
-    public ValueParameter<BoolValue> MaximizationParameter {
-      get { return (ValueParameter<BoolValue>)Parameters["Maximization"]; }
-    }
-    IParameter ISingleObjectiveHeuristicOptimizationProblem.MaximizationParameter {
-      get { return MaximizationParameter; }
-    }
     public ValueParameter<IVRPProblemInstance> ProblemInstanceParameter {
       get { return (ValueParameter<IVRPProblemInstance>)Parameters["ProblemInstance"]; }
     }
-    public OptionalValueParameter<DoubleValue> BestKnownQualityParameter {
-      get { return (OptionalValueParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
-    }
-    IParameter ISingleObjectiveHeuristicOptimizationProblem.BestKnownQualityParameter {
-      get { return BestKnownQualityParameter; }
-    }
     public OptionalValueParameter<VRPSolution> BestKnownSolutionParameter {
       get { return (OptionalValueParameter<VRPSolution>)Parameters["BestKnownSolution"]; }
-    }
-    public IValueParameter<IVRPEvaluator> EvaluatorParameter {
-      get { return (IValueParameter<IVRPEvaluator>)Parameters["Evaluator"]; }
-    }
-    IParameter IHeuristicOptimizationProblem.EvaluatorParameter {
-      get { return EvaluatorParameter; }
     }
     #endregion
@@ -88,17 +70,4 @@
       set { BestKnownSolutionParameter.Value = value; }
     }
-
-    public DoubleValue BestKnownQuality {
-      get { return BestKnownQualityParameter.Value; }
-      set { BestKnownQualityParameter.Value = value; }
-    }
-
-    public ISingleObjectiveEvaluator Evaluator {
-      get { return EvaluatorParameter.Value; }
-    }
-
-    IEvaluator IHeuristicOptimizationProblem.Evaluator {
-      get { return this.Evaluator; }
-    }
     #endregion
 
@@ -106,13 +75,7 @@
     private VehicleRoutingProblem(StorableConstructorFlag _) : base(_) { }
     public VehicleRoutingProblem()
-      : base() {
-      Parameters.Add(new ValueParameter<BoolValue>("Maximization", "Set to false as the Vehicle Routing Problem is a minimization problem.", new BoolValue(false)));
+      : base(new AlbaEncoding()) {
       Parameters.Add(new ValueParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
-      Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this VRP instance."));
       Parameters.Add(new OptionalValueParameter<VRPSolution>("BestKnownSolution", "The best known solution of this VRP instance."));
-
-      Parameters.Add(new ValueParameter<IVRPEvaluator>("Evaluator", "The operator which should be used to evaluate VRP solutions."));
-
-      EvaluatorParameter.Hidden = true;
 
       InitializeRandomVRPInstance();
@@ -121,6 +84,4 @@
       AttachEventHandlers();
       AttachProblemInstanceEventHandlers();
-
-      EvaluatorParameter.Value = ProblemInstance.SolutionEvaluator;
     }
 
@@ -134,15 +95,9 @@
       this.AttachEventHandlers();
       this.AttachProblemInstanceEventHandlers();
-
-      ProblemInstance.SolutionEvaluator = EvaluatorParameter.Value;
-    }
-
-    #region Events
-    public event EventHandler EvaluatorChanged;
-    private void OnEvaluatorChanged() {
-      EventHandler handler = EvaluatorChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    #endregion
+    }
+
+    public override ISingleObjectiveEvaluationResult Evaluate(AlbaEncodedSolution solution, IRandom random, CancellationToken cancellationToken) {
+      return new SingleObjectiveEvaluationResult(ProblemInstance.Evaluate(solution).Quality);
+    }
 
     #region Helpers
@@ -151,6 +106,4 @@
       AttachEventHandlers();
       AttachProblemInstanceEventHandlers();
-
-      ProblemInstance.SolutionEvaluator = EvaluatorParameter.Value;
     }
 
@@ -163,5 +116,4 @@
       ProblemInstanceParameter.ValueChanged += new EventHandler(ProblemInstanceParameter_ValueChanged);
       BestKnownSolutionParameter.ValueChanged += new EventHandler(BestKnownSolutionParameter_ValueChanged);
-      EvaluatorParameter.ValueChanged += new EventHandler(EvaluatorParameter_ValueChanged);
     }
 
@@ -176,8 +128,8 @@
       try {
         //call evaluator
-        BestKnownQuality = new DoubleValue(ProblemInstance.Evaluate(BestKnownSolution.Solution).Quality);
-        BestKnownSolution.Quality = BestKnownQuality;
+        BestKnownQuality = ProblemInstance.Evaluate(BestKnownSolution.Solution).Quality;
+        BestKnownSolution.Quality = new DoubleValue(BestKnownQuality);
       } catch {
-        BestKnownQuality = null;
+        BestKnownQuality = double.NaN;
         BestKnownSolution = null;
       }
@@ -189,5 +141,5 @@
 
     void ProblemInstance_EvaluationChanged(object sender, EventArgs e) {
-      BestKnownQuality = null;
+      BestKnownQuality = double.NaN;
       if (BestKnownSolution != null) {
         // the tour is not valid if there are more vehicles in it than allowed
@@ -202,7 +154,4 @@
       AttachProblemInstanceEventHandlers();
 
-      EvaluatorParameter.Value = ProblemInstance.SolutionEvaluator;
-
-      OnEvaluatorChanged();
       OnOperatorsChanged();
     }
@@ -214,13 +163,5 @@
       AttachProblemInstanceEventHandlers();
 
-      OnEvaluatorChanged();
-
       ProblemInstanceParameter.ValueChanged += new EventHandler(ProblemInstanceParameter_ValueChanged);
-    }
-
-    private void EvaluatorParameter_ValueChanged(object sender, EventArgs e) {
-      if (ProblemInstance != null)
-        ProblemInstance.SolutionEvaluator = EvaluatorParameter.Value;
-      OnEvaluatorChanged();
     }
 
@@ -247,8 +188,13 @@
       }
 
-      ParameterizeOperators();
-    }
-
-    private void ParameterizeOperators() {
+      Parameterize();
+    }
+
+    protected override void ParameterizeOperators() {
+      base.ParameterizeOperators();
+      Parameterize();
+    }
+
+    private void Parameterize() {
       foreach (IOperator op in Operators.OfType<IOperator>()) {
         if (op is IMultiVRPOperator) {
@@ -256,5 +202,5 @@
         }
       }
-      if (ProblemInstance != null) {
+      if (Parameters.ContainsKey("ProblemInstance") && ProblemInstance != null) {
         foreach (ISingleObjectiveImprovementOperator op in Operators.OfType<ISingleObjectiveImprovementOperator>()) {
           //op.SolutionParameter.ActualName = SolutionCreator.VRPToursParameter.ActualName;
@@ -315,5 +261,5 @@
       parser.Parse();
 
-      HeuristicLab.Problems.VehicleRouting.Encodings.Potvin.PotvinEncoding encoding = new Encodings.Potvin.PotvinEncoding(ProblemInstance);
+      HeuristicLab.Problems.VehicleRouting.Encodings.Potvin.PotvinEncodedSolution encoding = new Encodings.Potvin.PotvinEncodedSolution(ProblemInstance);
 
       int cities = 0;
@@ -341,5 +287,5 @@
       Description = instance.Description;
 
-      BestKnownQuality = null;
+      BestKnownQuality = double.NaN;
       BestKnownSolution = null;
 
@@ -353,5 +299,5 @@
 
       if (instance.BestKnownQuality != null) {
-        BestKnownQuality = new DoubleValue((double)instance.BestKnownQuality);
+        BestKnownQuality = instance.BestKnownQuality ?? double.NaN;
       }
 
@@ -383,5 +329,4 @@
       return interpreterInterface.GetGenericArguments()[0];
     }
-
     #endregion
   }
