Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting.Views/3.3/VRPSolutionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting.Views/3.3/VRPSolutionView.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting.Views/3.3/VRPSolutionView.cs	(revision 4154)
@@ -156,5 +156,5 @@
                       Brush customerBrush = Brushes.Black;
 
-                      t += VehicleRoutingProblem.GetDistance(
+                      t += VRPUtilities.GetDistance(
                         lastCustomer, location, coordinates, distanceMatrix, useDistanceMatrix);
 
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Creators/AlbaPushForwardInsertionCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Creators/AlbaPushForwardInsertionCreator.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Creators/AlbaPushForwardInsertionCreator.cs	(revision 4154)
@@ -28,4 +28,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Crossovers/AlbaCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Crossovers/AlbaCrossover.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Crossovers/AlbaCrossover.cs	(revision 4154)
@@ -28,24 +28,13 @@
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
   [StorableClass]
-  public abstract class AlbaCrossover : VRPCrossover {
-    public ILookupParameter<IntValue> VehiclesParameter {
-      get { return (ILookupParameter<IntValue>)Parameters["Vehicles"]; }
-    }
-
-    public AlbaCrossover()
-      : base() {
-        Parameters.Add(new LookupParameter<IntValue>("Vehicles", "The vehicles count."));
-    }
-    
+  public abstract class AlbaCrossover : VRPCrossover {    
     protected virtual void Crossover() {
     }
 
     public override IOperation Apply() {
-      int cities = 0;
-
       ItemArray<IVRPEncoding> parents = new ItemArray<IVRPEncoding>(ParentsParameter.ActualValue.Length);
       for (int i = 0; i < ParentsParameter.ActualValue.Length; i++) {
         IVRPEncoding solution = ParentsParameter.ActualValue[i];
-        cities = solution.Cities;
+
         if (!(solution is AlbaEncoding)) {
           parents[i] = AlbaEncoding.ConvertFrom(solution, VehiclesParameter.ActualValue.Value);
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs	(revision 4154)
@@ -39,6 +39,4 @@
 
     protected override void Crossover() {
-      int cities = ParentsParameter.ActualValue[0].Cities;
-
       PermutationCrossoverParameter.ActualValue.ParentsParameter.ActualName = ParentsParameter.ActualName;
       IAtomicOperation op = this.ExecutionContext.CreateOperation(
@@ -51,5 +49,5 @@
         ExecutionContext.Scope.Variables.Remove(childName);
 
-        ChildParameter.ActualValue = new AlbaEncoding(permutation, cities);
+        ChildParameter.ActualValue = new AlbaEncoding(permutation, Cities);
       } else
         ChildParameter.ActualValue = null;
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaManipulator.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaManipulator.cs	(revision 4154)
@@ -28,14 +28,5 @@
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
   [StorableClass]
-  public abstract class AlbaManipulator : VRPManipulator {
-    public ILookupParameter<IntValue> VehiclesParameter {
-      get { return (ILookupParameter<IntValue>)Parameters["Vehicles"]; }
-    }
-
-    public AlbaManipulator()
-      : base() {
-        Parameters.Add(new LookupParameter<IntValue>("Vehicles", "The vehicles count."));
-    }
-    
+  public abstract class AlbaManipulator : VRPManipulator {    
     protected virtual void Manipulate() {
     }
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/AlbaMoveOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/AlbaMoveOperator.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/AlbaMoveOperator.cs	(revision 4154)
@@ -29,14 +29,5 @@
   [Item("AlbaMoveOperator", "A move operator for an alba VRP representation.")]
   [StorableClass]
-  public abstract class AlbaMoveOperator : VRPMoveOperator {
-    public ILookupParameter<IntValue> VehiclesParameter {
-      get { return (ILookupParameter<IntValue>)Parameters["Vehicles"]; }
-    }
-
-    public AlbaMoveOperator()
-      : base() {
-      Parameters.Add(new LookupParameter<IntValue>("Vehicles", "The vehicles count."));
-    }
-    
+  public abstract class AlbaMoveOperator : VRPMoveOperator {    
     [Storable]
     protected abstract IPermutationMoveOperator PermutationMoveOperatorParameter { get; set; }
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveGenerator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveGenerator.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveGenerator.cs	(revision 4154)
@@ -82,5 +82,4 @@
       Permutation permutation = VRPSolutionParameter.ActualValue as Permutation;
       string moveName = TranslocationMoveGeneratorParameter.ActualValue.TranslocationMoveParameter.Name;
-      int cities = VRPSolutionParameter.ActualValue.Cities;
 
       List<Scope> toBeDeleted = new List<Scope>();
@@ -93,7 +92,7 @@
             if (move.Index1 - 1 >= 0 &&
               move.Index3 - 1 >= 0)
-              criteria1 = (permutation[move.Index1] >= cities &&
-                permutation[move.Index1 - 1] >= cities &&
-                permutation[move.Index3 - 1] >= cities);
+              criteria1 = (permutation[move.Index1] >= Cities &&
+                permutation[move.Index1 - 1] >= Cities &&
+                permutation[move.Index3 - 1] >= Cities);
 
             int index3 = move.Index3 + (move.Index2 - move.Index1) + 1;
@@ -101,7 +100,7 @@
             if (move.Index2 + 1 < permutation.Length &&
               index3 < permutation.Length)
-              criteria2 = (permutation[move.Index2] >= cities &&
-                permutation[move.Index2 + 1] >= cities &&
-                permutation[index3] >= cities);
+              criteria2 = (permutation[move.Index2] >= Cities &&
+                permutation[move.Index2 + 1] >= Cities &&
+                permutation[index3] >= Cities);
 
             if (criteria1 && criteria2)
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/IntListRepresentationCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/IntListRepresentationCreator.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/IntListRepresentationCreator.cs	(revision 4154)
@@ -26,6 +26,7 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using System.Collections.Generic;
+using HeuristicLab.Problems.VehicleRouting.Encodings;
 
-namespace HeuristicLab.Problems.VehicleRouting {
+namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
   [StorableClass]
   public abstract class IntListRepresentationCreator : VRPCreator {
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/PushForwardInsertionCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/PushForwardInsertionCreator.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/PushForwardInsertionCreator.cs	(revision 4154)
@@ -29,5 +29,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
-namespace HeuristicLab.Problems.VehicleRouting {
+namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
   [StorableClass]
   public abstract class PushForwardCreator : IntListRepresentationCreator, IStochasticOperator {
@@ -199,5 +199,5 @@
        *-----------------------------------------------------------------------------
        */
-      for (int i = 1; i <= CitiesParameter.ActualValue.Value; i++) {
+      for (int i = 1; i <= Cities; i++) {
         distance = Distance(i, 0);
         if (CoordinatesParameter.ActualValue[i, 0] < x0) distance = -distance;
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Creators/PotvinPushForwardInsertionCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Creators/PotvinPushForwardInsertionCreator.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Creators/PotvinPushForwardInsertionCreator.cs	(revision 4154)
@@ -28,4 +28,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/VRPCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/VRPCreator.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/VRPCreator.cs	(revision 4154)
@@ -26,7 +26,7 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
-namespace HeuristicLab.Problems.VehicleRouting {
+namespace HeuristicLab.Problems.VehicleRouting.Encodings {
   [StorableClass]
-  public abstract class VRPCreator : SingleSuccessorOperator, IVRPCreator {
+  public abstract class VRPCreator : VRPOperator, IVRPCreator {
     public override bool CanChangeName {
       get { return false; }
@@ -34,51 +34,14 @@
 
     #region IVRPCreator Members
-    public IValueLookupParameter<IntValue> CitiesParameter {
-      get { return (IValueLookupParameter<IntValue>)Parameters["Cities"]; }
-    }
     public ILookupParameter<IVRPEncoding> VRPSolutionParameter {
       get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPSolution"]; }
     }
-    public ILookupParameter<DoubleMatrix> CoordinatesParameter {
-      get { return (ILookupParameter<DoubleMatrix>)Parameters["Coordinates"]; }
-    }
-    public ILookupParameter<DoubleMatrix> DistanceMatrixParameter {
-      get { return (ILookupParameter<DoubleMatrix>)Parameters["DistanceMatrix"]; }
-    }
-    public ILookupParameter<BoolValue> UseDistanceMatrixParameter {
-      get { return (ILookupParameter<BoolValue>)Parameters["UseDistanceMatrix"]; }
-    }
-    public ILookupParameter<IntValue> VehiclesParameter {
-      get { return (ILookupParameter<IntValue>)Parameters["Vehicles"]; }
-    }
-    public ILookupParameter<DoubleValue> CapacityParameter {
-      get { return (ILookupParameter<DoubleValue>)Parameters["Capacity"]; }
-    }
-    public ILookupParameter<DoubleArray> DemandParameter {
-      get { return (ILookupParameter<DoubleArray>)Parameters["Demand"]; }
-    }
-    public ILookupParameter<DoubleArray> ReadyTimeParameter {
-      get { return (ILookupParameter<DoubleArray>)Parameters["ReadyTime"]; }
-    }
-    public ILookupParameter<DoubleArray> DueTimeParameter {
-      get { return (ILookupParameter<DoubleArray>)Parameters["DueTime"]; }
-    }
-    public ILookupParameter<DoubleArray> ServiceTimeParameter {
-      get { return (ILookupParameter<DoubleArray>)Parameters["ServiceTime"]; }
-    }
+    
+      public IValueLookupParameter<IntValue> CitiesParameter {
+	      get { return (IValueLookupParameter<IntValue>)Parameters["Cities"]; }
+	    }
 
     public VRPCreator()
       : base() {
-      Parameters.Add(new ValueLookupParameter<IntValue>("Cities", "The city count."));
-      Parameters.Add(new LookupParameter<IntValue>("Vehicles", "The vehicles count."));
-      Parameters.Add(new LookupParameter<DoubleMatrix>("Coordinates", "The coordinates of the cities."));
-      Parameters.Add(new LookupParameter<DoubleMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities."));
-      Parameters.Add(new LookupParameter<BoolValue>("UseDistanceMatrix", "True if a distance matrix should be calculated and used for evaluation, otherwise false."));
-      Parameters.Add(new LookupParameter<DoubleValue>("Capacity", "The capacity of each vehicle."));
-      Parameters.Add(new LookupParameter<DoubleArray>("Demand", "The demand of each customer."));
-      Parameters.Add(new LookupParameter<DoubleArray>("ReadyTime", "The ready time of each customer."));
-      Parameters.Add(new LookupParameter<DoubleArray>("DueTime", "The due time of each customer."));
-      Parameters.Add(new LookupParameter<DoubleArray>("ServiceTime", "The service time of each customer."));
-
       Parameters.Add(new LookupParameter<IVRPEncoding>("VRPSolution", "The new VRP solution."));
     }
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/VRPCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/VRPCrossover.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/VRPCrossover.cs	(revision 4154)
@@ -26,5 +26,5 @@
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings {
-  public abstract class VRPCrossover : SingleSuccessorOperator, IVRPCrossover {
+  public abstract class VRPCrossover : VRPOperator, IVRPCrossover {
     #region IVRPCrossover Members
 
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/VRPManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/VRPManipulator.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/VRPManipulator.cs	(revision 4154)
@@ -26,5 +26,5 @@
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings {
-  public abstract class VRPManipulator : SingleSuccessorOperator, IVRPManipulator {
+  public abstract class VRPManipulator : VRPOperator, IVRPManipulator {
     #region IVRPManipulator Members
 
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/VRPMoveOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/VRPMoveOperator.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/VRPMoveOperator.cs	(revision 4154)
@@ -26,5 +26,5 @@
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings {
-  public abstract class VRPMoveOperator : SingleSuccessorOperator, IVRPMoveOperator {
+  public abstract class VRPMoveOperator : VRPOperator, IVRPMoveOperator {
     #region IVRPManipulator Members
 
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Evaluators/VRPEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Evaluators/VRPEvaluator.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Evaluators/VRPEvaluator.cs	(revision 4154)
@@ -39,5 +39,5 @@
   [Item("VRPEvaluator", "Evaluates solutions for the VRP problem.")]
   [StorableClass]
-  public sealed class VRPEvaluator : SingleSuccessorOperator, IVRPEvaluator {
+  public sealed class VRPEvaluator : VRPOperator, IVRPEvaluator {
     #region ISingleObjectiveEvaluator Members
     public ILookupParameter<DoubleValue> QualityParameter {
@@ -65,31 +65,5 @@
       get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPSolution"]; }
     }
-    public ILookupParameter<DoubleMatrix> CoordinatesParameter {
-      get { return (ILookupParameter<DoubleMatrix>)Parameters["Coordinates"]; }
-    }
-    public ILookupParameter<DoubleMatrix> DistanceMatrixParameter {
-      get { return (ILookupParameter<DoubleMatrix>)Parameters["DistanceMatrix"]; }
-    }
-    public ILookupParameter<BoolValue> UseDistanceMatrixParameter {
-      get { return (ILookupParameter<BoolValue>)Parameters["UseDistanceMatrix"]; }
-    }
-    public ILookupParameter<IntValue> VehiclesParameter {
-      get { return (ILookupParameter<IntValue>)Parameters["Vehicles"]; }
-    }
-    public ILookupParameter<DoubleValue> CapacityParameter {
-      get { return (ILookupParameter<DoubleValue>)Parameters["Capacity"]; }
-    }
-    public ILookupParameter<DoubleArray> DemandParameter {
-      get { return (ILookupParameter<DoubleArray>)Parameters["Demand"]; }
-    }
-    public ILookupParameter<DoubleArray> ReadyTimeParameter {
-      get { return (ILookupParameter<DoubleArray>)Parameters["ReadyTime"]; }
-    }
-    public ILookupParameter<DoubleArray> DueTimeParameter {
-      get { return (ILookupParameter<DoubleArray>)Parameters["DueTime"]; }
-    }
-    public ILookupParameter<DoubleArray> ServiceTimeParameter {
-      get { return (ILookupParameter<DoubleArray>)Parameters["ServiceTime"]; }
-    }
+   
     public ILookupParameter<DoubleValue> FleetUsageFactor {
       get { return (ILookupParameter<DoubleValue>)Parameters["FleetUsageFactor"]; }
@@ -117,13 +91,4 @@
       Parameters.Add(new LookupParameter<DoubleValue>("Tardiness", "The tardiness."));
       Parameters.Add(new LookupParameter<IVRPEncoding>("VRPSolution", "The VRP solution which should be evaluated."));
-      Parameters.Add(new LookupParameter<DoubleMatrix>("Coordinates", "The coordinates of the cities."));
-      Parameters.Add(new LookupParameter<DoubleMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities."));
-      Parameters.Add(new LookupParameter<BoolValue>("UseDistanceMatrix", "True if a distance matrix should be calculated and used for evaluation, otherwise false."));
-      Parameters.Add(new LookupParameter<IntValue>("Vehicles", "The number of vehicles."));
-      Parameters.Add(new LookupParameter<DoubleValue>("Capacity", "The capacity of each vehicle."));
-      Parameters.Add(new LookupParameter<DoubleArray>("Demand", "The demand of each customer."));
-      Parameters.Add(new LookupParameter<DoubleArray>("ReadyTime", "The ready time of each customer."));
-      Parameters.Add(new LookupParameter<DoubleArray>("DueTime", "The due time of each customer."));
-      Parameters.Add(new LookupParameter<DoubleArray>("ServiceTime", "The service time of each customer."));
       Parameters.Add(new LookupParameter<DoubleValue>("FleetUsageFactor", "The fleet usage factor considered in the evaluation."));
       Parameters.Add(new LookupParameter<DoubleValue>("TimeFactor", "The time factor considered in the evaluation."));
@@ -166,5 +131,5 @@
 
         //drive there
-        double currentDistace = VehicleRoutingProblem.GetDistance(start, end, coordinates, distanceMatrix, useDistanceMatrix);
+        double currentDistace = VRPUtilities.GetDistance(start, end, coordinates, distanceMatrix, useDistanceMatrix);
         distance += currentDistace;
         time += currentDistace;
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/HeuristicLab.Problems.VehicleRouting-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/HeuristicLab.Problems.VehicleRouting-3.3.csproj	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/HeuristicLab.Problems.VehicleRouting-3.3.csproj	(revision 4154)
@@ -107,4 +107,6 @@
   <ItemGroup>
     <Compile Include="Analyzers\BestVRPSolutionAnalyzer.cs" />
+    <Compile Include="VRPUtilities.cs" />
+    <Compile Include="VRPOperator.cs" />
     <Compile Include="Encodings\General\PushForwardInsertionCreator.cs" />
     <Compile Include="Encodings\General\IntListRepresentationCreator.cs" />
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Interfaces/IVRPCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Interfaces/IVRPCreator.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Interfaces/IVRPCreator.cs	(revision 4154)
@@ -27,14 +27,4 @@
   public interface IVRPCreator : IVRPOperator, ISolutionCreator {
     IValueLookupParameter<IntValue> CitiesParameter { get; }
-    ILookupParameter<IntValue> VehiclesParameter { get; }
-    ILookupParameter<DoubleMatrix> CoordinatesParameter { get; }
-    ILookupParameter<DoubleMatrix> DistanceMatrixParameter { get; }
-    ILookupParameter<BoolValue> UseDistanceMatrixParameter { get; }
-    ILookupParameter<DoubleValue> CapacityParameter { get; }
-    ILookupParameter<DoubleArray> DemandParameter { get; }
-    ILookupParameter<DoubleArray> ReadyTimeParameter { get; }
-    ILookupParameter<DoubleArray> DueTimeParameter { get; }
-    ILookupParameter<DoubleArray> ServiceTimeParameter { get; }
-
     ILookupParameter<IVRPEncoding> VRPSolutionParameter { get; }
   }
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Interfaces/IVRPEncoding.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Interfaces/IVRPEncoding.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Interfaces/IVRPEncoding.cs	(revision 4154)
@@ -28,8 +28,4 @@
       get;
     }
-
-    int Cities {
-      get;
-    }
   }
 }
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Interfaces/IVRPEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Interfaces/IVRPEvaluator.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Interfaces/IVRPEvaluator.cs	(revision 4154)
@@ -25,16 +25,7 @@
 
 namespace HeuristicLab.Problems.VehicleRouting {
-  public interface IVRPEvaluator : ISingleObjectiveEvaluator {
+  public interface IVRPEvaluator : ISingleObjectiveEvaluator, IVRPOperator {
     ILookupParameter<IVRPEncoding> VRPSolutionParameter { get; }
-    ILookupParameter<DoubleMatrix> CoordinatesParameter { get; }
-    ILookupParameter<DoubleMatrix> DistanceMatrixParameter { get; }
-    ILookupParameter<BoolValue> UseDistanceMatrixParameter { get; }
-    ILookupParameter<IntValue> VehiclesParameter { get; }
-    ILookupParameter<DoubleValue> CapacityParameter { get; }
-    ILookupParameter<DoubleArray> DemandParameter { get; }
-    ILookupParameter<DoubleArray> ReadyTimeParameter { get; }
-    ILookupParameter<DoubleArray> DueTimeParameter { get; }
-    ILookupParameter<DoubleArray> ServiceTimeParameter { get; }
-
+    
     ILookupParameter<DoubleValue> VehcilesUtilizedParameter { get; }
     ILookupParameter<DoubleValue> TravelTimeParameter { get; }
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Interfaces/IVRPMoveEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Interfaces/IVRPMoveEvaluator.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Interfaces/IVRPMoveEvaluator.cs	(revision 4154)
@@ -25,15 +25,5 @@
 
 namespace HeuristicLab.Problems.VehicleRouting {
-  public interface IVRPMoveEvaluator : ISingleObjectiveMoveEvaluator, IVRPMoveOperator {
-    ILookupParameter<DoubleMatrix> CoordinatesParameter { get; }
-    ILookupParameter<DoubleMatrix> DistanceMatrixParameter { get; }
-    ILookupParameter<BoolValue> UseDistanceMatrixParameter { get; }
-    ILookupParameter<IntValue> VehiclesParameter { get; }
-    ILookupParameter<DoubleValue> CapacityParameter { get; }
-    ILookupParameter<DoubleArray> DemandParameter { get; }
-    ILookupParameter<DoubleArray> ReadyTimeParameter { get; }
-    ILookupParameter<DoubleArray> DueTimeParameter { get; }
-    ILookupParameter<DoubleArray> ServiceTimeParameter { get; }
-
+  public interface IVRPMoveEvaluator : ISingleObjectiveMoveEvaluator, IVRPMoveOperator {    
     ILookupParameter<DoubleValue> MoveVehcilesUtilizedParameter { get; }
     ILookupParameter<DoubleValue> MoveTravelTimeParameter { get; }
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Interfaces/IVRPOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Interfaces/IVRPOperator.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Interfaces/IVRPOperator.cs	(revision 4154)
@@ -21,6 +21,19 @@
 
 
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
 namespace HeuristicLab.Problems.VehicleRouting {
   public interface IVRPOperator {
+    ILookupParameter<DoubleMatrix> CoordinatesParameter { get; }
+    int Cities { get; }
+    ILookupParameter<DoubleMatrix> DistanceMatrixParameter { get; }
+    ILookupParameter<BoolValue> UseDistanceMatrixParameter { get; }
+    ILookupParameter<IntValue> VehiclesParameter { get; }
+    ILookupParameter<DoubleValue> CapacityParameter { get; }
+    ILookupParameter<DoubleArray> DemandParameter { get; }
+    ILookupParameter<DoubleArray> ReadyTimeParameter { get; }
+    ILookupParameter<DoubleArray> DueTimeParameter { get; }
+    ILookupParameter<DoubleArray> ServiceTimeParameter { get; }
   }
 }
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/MoveEvaluators/VRPMoveEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/MoveEvaluators/VRPMoveEvaluator.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/MoveEvaluators/VRPMoveEvaluator.cs	(revision 4154)
@@ -26,9 +26,10 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.VehicleRouting.Encodings;
 
 namespace HeuristicLab.Problems.VehicleRouting {
   [Item("VRPMoveEvaluator", "A base class for operators which evaluate VRP moves.")]
   [StorableClass]
-  public abstract class VRPMoveEvaluator : SingleSuccessorOperator, IVRPMoveEvaluator, IMoveOperator {
+  public abstract class VRPMoveEvaluator : VRPOperator, IVRPMoveEvaluator, IMoveOperator {
     public override bool CanChangeName {
       get { return false; }
@@ -38,31 +39,5 @@
       get { return (ILookupParameter<IVRPEncoding>)Parameters["VRPSolution"]; }
     }
-    public ILookupParameter<DoubleMatrix> CoordinatesParameter {
-      get { return (ILookupParameter<DoubleMatrix>)Parameters["Coordinates"]; }
-    }
-    public ILookupParameter<DoubleMatrix> DistanceMatrixParameter {
-      get { return (ILookupParameter<DoubleMatrix>)Parameters["DistanceMatrix"]; }
-    }
-    public ILookupParameter<BoolValue> UseDistanceMatrixParameter {
-      get { return (ILookupParameter<BoolValue>)Parameters["UseDistanceMatrix"]; }
-    }
-    public ILookupParameter<IntValue> VehiclesParameter {
-      get { return (ILookupParameter<IntValue>)Parameters["Vehicles"]; }
-    }
-    public ILookupParameter<DoubleValue> CapacityParameter {
-      get { return (ILookupParameter<DoubleValue>)Parameters["Capacity"]; }
-    }
-    public ILookupParameter<DoubleArray> DemandParameter {
-      get { return (ILookupParameter<DoubleArray>)Parameters["Demand"]; }
-    }
-    public ILookupParameter<DoubleArray> ReadyTimeParameter {
-      get { return (ILookupParameter<DoubleArray>)Parameters["ReadyTime"]; }
-    }
-    public ILookupParameter<DoubleArray> DueTimeParameter {
-      get { return (ILookupParameter<DoubleArray>)Parameters["DueTime"]; }
-    }
-    public ILookupParameter<DoubleArray> ServiceTimeParameter {
-      get { return (ILookupParameter<DoubleArray>)Parameters["ServiceTime"]; }
-    }
+   
     public ILookupParameter<DoubleValue> FleetUsageFactor {
       get { return (ILookupParameter<DoubleValue>)Parameters["FleetUsageFactor"]; }
@@ -113,13 +88,4 @@
       Parameters.Add(new LookupParameter<DoubleValue>("MoveTardiness", "The tardiness."));
       Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The evaluated quality of a move on a VRP solution."));
-      Parameters.Add(new LookupParameter<DoubleMatrix>("Coordinates", "The coordinates of the cities."));
-      Parameters.Add(new LookupParameter<DoubleMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities."));
-      Parameters.Add(new LookupParameter<BoolValue>("UseDistanceMatrix", "True if a distance matrix should be calculated and used for evaluation, otherwise false."));
-      Parameters.Add(new LookupParameter<IntValue>("Vehicles", "The number of vehicles."));
-      Parameters.Add(new LookupParameter<DoubleValue>("Capacity", "The capacity of each vehicle."));
-      Parameters.Add(new LookupParameter<DoubleArray>("Demand", "The demand of each customer."));
-      Parameters.Add(new LookupParameter<DoubleArray>("ReadyTime", "The ready time of each customer."));
-      Parameters.Add(new LookupParameter<DoubleArray>("DueTime", "The due time of each customer."));
-      Parameters.Add(new LookupParameter<DoubleArray>("ServiceTime", "The service time of each customer."));
       Parameters.Add(new LookupParameter<DoubleValue>("FleetUsageFactor", "The fleet usage factor considered in the evaluation."));
       Parameters.Add(new LookupParameter<DoubleValue>("TimeFactor", "The time factor considered in the evaluation."));
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/VRPOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/VRPOperator.cs	(revision 4154)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/VRPOperator.cs	(revision 4154)
@@ -0,0 +1,74 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Problems.VehicleRouting {
+  public abstract class VRPOperator : SingleSuccessorOperator, IVRPOperator {
+    public int Cities {
+      get { return CoordinatesParameter.ActualValue.Rows - 1; }
+    }
+    public ILookupParameter<DoubleMatrix> CoordinatesParameter {
+      get { return (ILookupParameter<DoubleMatrix>)Parameters["Coordinates"]; }
+    }
+    public ILookupParameter<DoubleMatrix> DistanceMatrixParameter {
+      get { return (ILookupParameter<DoubleMatrix>)Parameters["DistanceMatrix"]; }
+    }
+    public ILookupParameter<BoolValue> UseDistanceMatrixParameter {
+      get { return (ILookupParameter<BoolValue>)Parameters["UseDistanceMatrix"]; }
+    }
+    public ILookupParameter<IntValue> VehiclesParameter {
+      get { return (ILookupParameter<IntValue>)Parameters["Vehicles"]; }
+    }
+    public ILookupParameter<DoubleValue> CapacityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters["Capacity"]; }
+    }
+    public ILookupParameter<DoubleArray> DemandParameter {
+      get { return (ILookupParameter<DoubleArray>)Parameters["Demand"]; }
+    }
+    public ILookupParameter<DoubleArray> ReadyTimeParameter {
+      get { return (ILookupParameter<DoubleArray>)Parameters["ReadyTime"]; }
+    }
+    public ILookupParameter<DoubleArray> DueTimeParameter {
+      get { return (ILookupParameter<DoubleArray>)Parameters["DueTime"]; }
+    }
+    public ILookupParameter<DoubleArray> ServiceTimeParameter {
+      get { return (ILookupParameter<DoubleArray>)Parameters["ServiceTime"]; }
+    }
+
+    public VRPOperator()
+      : base() {
+      Parameters.Add(new ValueLookupParameter<IntValue>("Cities", "The city count."));
+      Parameters.Add(new LookupParameter<DoubleMatrix>("Coordinates", "The coordinates of the cities."));
+      Parameters.Add(new LookupParameter<DoubleMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities."));
+      Parameters.Add(new LookupParameter<BoolValue>("UseDistanceMatrix", "True if a distance matrix should be calculated and used for evaluation, otherwise false."));
+      Parameters.Add(new LookupParameter<IntValue>("Vehicles", "The number of vehicles."));
+      Parameters.Add(new LookupParameter<DoubleValue>("Capacity", "The capacity of each vehicle."));
+      Parameters.Add(new LookupParameter<DoubleArray>("Demand", "The demand of each customer."));
+      Parameters.Add(new LookupParameter<DoubleArray>("ReadyTime", "The ready time of each customer."));
+      Parameters.Add(new LookupParameter<DoubleArray>("DueTime", "The due time of each customer."));
+      Parameters.Add(new LookupParameter<DoubleArray>("ServiceTime", "The service time of each customer."));
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/VRPUtilities.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/VRPUtilities.cs	(revision 4154)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/VRPUtilities.cs	(revision 4154)
@@ -0,0 +1,87 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Drawing;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.VehicleRouting {
+  public sealed class VRPUtilities {
+    public static double CalculateDistance(int start, int end, DoubleMatrix coordinates) {
+      double distance = 0.0;
+
+      distance =
+          Math.Sqrt(
+            Math.Pow(coordinates[start, 0] - coordinates[end, 0], 2) +
+            Math.Pow(coordinates[start, 1] - coordinates[end, 1], 2));
+
+      return distance;
+    }
+
+    private static DoubleMatrix CreateDistanceMatrix(DoubleMatrix coordinates) {
+      DoubleMatrix distanceMatrix = new DoubleMatrix(coordinates.Rows, coordinates.Rows);
+
+      for (int i = 0; i < distanceMatrix.Rows; i++) {
+        for (int j = i; j < distanceMatrix.Columns; j++) {
+          double distance = CalculateDistance(i, j, coordinates);
+
+          distanceMatrix[i, j] = distance;
+          distanceMatrix[j, i] = distance;
+        }
+      }
+
+      return distanceMatrix;
+    }
+
+    public static double GetDistance(int start, int end,
+      DoubleMatrix coordinates, ILookupParameter<DoubleMatrix> distanceMatrix, BoolValue useDistanceMatrix) {
+      double distance = 0.0;
+
+      if (useDistanceMatrix.Value) {
+        if (distanceMatrix.ActualValue == null) {
+          distanceMatrix.ActualValue = CreateDistanceMatrix(coordinates);
+        }
+
+        distance = distanceMatrix.ActualValue[start, end];
+      } else {
+        distance = CalculateDistance(start, end, coordinates);
+      }
+
+      return distance;
+    }
+
+    public static double GetDistance(int start, int end,
+      DoubleMatrix coordinates, DoubleMatrix distanceMatrix, BoolValue useDistanceMatrix) {
+      double distance = 0.0;
+
+      if (useDistanceMatrix.Value) {
+        distance = distanceMatrix[start, end];
+      } else {
+        distance = CalculateDistance(start, end, coordinates);
+      }
+
+      return distance;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/VehicleRoutingProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/VehicleRoutingProblem.cs	(revision 4153)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/VehicleRoutingProblem.cs	(revision 4154)
@@ -375,17 +375,8 @@
     }
     private void ParameterizeOperators() {
-      foreach (IVRPMoveOperator op in Operators.OfType<IVRPMoveOperator>()) {
-        op.VRPSolutionParameter.ActualName = SolutionCreator.VRPSolutionParameter.ActualName;
-      }
-      foreach (AlbaMoveOperator op in Operators.OfType<AlbaMoveOperator>()) {
-        op.VehiclesParameter.ActualName = VehiclesParameter.Name;
-      }
-
-      foreach (IVRPMoveEvaluator op in Operators.OfType<IVRPMoveEvaluator>()) {
+      foreach (IVRPOperator op in Operators.OfType<IVRPOperator>()) {
         op.CoordinatesParameter.ActualName = CoordinatesParameter.Name;
         op.DistanceMatrixParameter.ActualName = DistanceMatrixParameter.Name;
         op.UseDistanceMatrixParameter.ActualName = UseDistanceMatrixParameter.Name;
-        op.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
-        op.VRPSolutionParameter.ActualName = SolutionCreator.VRPSolutionParameter.ActualName;
         op.VehiclesParameter.ActualName = VehiclesParameter.Name;
         op.CapacityParameter.ActualName = CapacityParameter.Name;
@@ -394,4 +385,11 @@
         op.DueTimeParameter.ActualName = DueTimeParameter.Name;
         op.ServiceTimeParameter.ActualName = ServiceTimeParameter.Name;
+      }
+      
+      foreach (IVRPMoveOperator op in Operators.OfType<IVRPMoveOperator>()) {
+        op.VRPSolutionParameter.ActualName = SolutionCreator.VRPSolutionParameter.ActualName;
+      }
+
+      foreach (IVRPMoveEvaluator op in Operators.OfType<IVRPMoveEvaluator>()) {
         op.FleetUsageFactor.ActualName = FleetUsageFactor.Name;
         op.TimeFactor.ActualName = TimeFactor.Name;
@@ -399,4 +397,6 @@
         op.OverloadPenalty.ActualName = OverloadPenalty.Name;
         op.TardinessPenalty.ActualName = TardinessPenalty.Name;
+        op.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
+        op.VRPSolutionParameter.ActualName = SolutionCreator.VRPSolutionParameter.ActualName;
       }
       string translocationMove = Operators.OfType<IMoveGenerator>().OfType<IAlbaTranslocationMoveOperator>().First().TranslocationMoveParameter.ActualName;
@@ -408,14 +408,8 @@
         op.ChildParameter.ActualName = SolutionCreator.VRPSolutionParameter.ActualName;
       }
-      foreach (AlbaCrossover op in Operators.OfType<AlbaCrossover>()) {
-        op.VehiclesParameter.ActualName = VehiclesParameter.Name;
-      }
 
       foreach (IVRPManipulator op in Operators.OfType<IVRPManipulator>()) {
         op.VRPSolutionParameter.ActualName = SolutionCreator.VRPSolutionParameter.ActualName;
       }
-      foreach (AlbaManipulator op in Operators.OfType<AlbaManipulator>()) {
-        op.VehiclesParameter.ActualName = VehiclesParameter.Name;
-      }
     }
     private void ClearDistanceMatrix() {
@@ -423,60 +417,4 @@
     }
     #endregion
-
-    private static double CalculateDistance(int start, int end, DoubleMatrix coordinates) {
-      double distance = 0.0;
-
-      distance =
-          Math.Sqrt(
-            Math.Pow(coordinates[start, 0] - coordinates[end, 0], 2) +
-            Math.Pow(coordinates[start, 1] - coordinates[end, 1], 2));
-
-      return distance;
-    }
-
-    private static DoubleMatrix CreateDistanceMatrix(DoubleMatrix coordinates) {
-      DoubleMatrix distanceMatrix = new DoubleMatrix(coordinates.Rows, coordinates.Rows);
-
-      for (int i = 0; i < distanceMatrix.Rows; i++) {
-        for (int j = i; j < distanceMatrix.Columns; j++) {
-          double distance = CalculateDistance(i, j, coordinates);
-
-          distanceMatrix[i, j] = distance;
-          distanceMatrix[j, i] = distance;
-        }
-      }
-
-      return distanceMatrix;
-    }
-
-    public static double GetDistance(int start, int end,
-      DoubleMatrix coordinates, ILookupParameter<DoubleMatrix> distanceMatrix, BoolValue useDistanceMatrix) {
-      double distance = 0.0;
-
-      if (useDistanceMatrix.Value) {
-        if (distanceMatrix.ActualValue == null) {
-          distanceMatrix.ActualValue = CreateDistanceMatrix(coordinates);
-        }
-
-        distance = distanceMatrix.ActualValue[start, end];
-      } else {
-        distance = CalculateDistance(start, end, coordinates);
-      }
-
-      return distance;
-    }
-
-    public static double GetDistance(int start, int end,
-      DoubleMatrix coordinates, DoubleMatrix distanceMatrix, BoolValue useDistanceMatrix) {
-      double distance = 0.0;
-
-      if (useDistanceMatrix.Value) {
-        distance = distanceMatrix[start, end];
-      } else {
-        distance = CalculateDistance(start, end, coordinates);
-      }
-
-      return distance;
-    }
 
     public void ImportFromSolomon(string solomonFileName) {
@@ -522,5 +460,5 @@
         } else {
           Demand[i] = rand.Next(10, 50);
-          DueTime[i] = rand.Next((int)Math.Ceiling(CalculateDistance(0, i, Coordinates)), 1200);
+          DueTime[i] = rand.Next((int)Math.Ceiling(VRPUtilities.CalculateDistance(0, i, Coordinates)), 1200);
           ReadyTime[i] = DueTime[i] - rand.Next(0, 100);
           ServiceTime[i] = 90;
