Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveMaker.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveMaker.cs	(revision 4377)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/Moves/AlbaMoveMaker.cs	(revision 4378)
@@ -39,14 +39,4 @@
       : base() {
     }
-
-    public override IOperation Apply() {
-      IVRPEncoding solution = VRPToursParameter.ActualValue;
-      if (!(solution is AlbaEncoding)) {
-        //VRPToursParameter.ActualValue = AlbaEncoding.ConvertFrom(solution, VehiclesParameter.ActualValue.Value,
-        //  DistanceMatrixParameter);
-      }
-
-      return base.Apply();
-    }
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncoding.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncoding.cs	(revision 4377)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncoding.cs	(revision 4378)
@@ -99,11 +99,13 @@
       for (int tour = 0; tour < Tours.Count; tour++) {
         if (tour != routeToAvoid) {
+          double length = GetTourLength(Tours[tour]);
+
           for (int i = 0; i <= Tours[tour].Stops.Count; i++) {
-            double length = GetTourLength(Tours[tour]);
-
             Tours[tour].Stops.Insert(i, city);
 
-            if (ProblemInstance.Feasible(Tours[tour])) {
-              double newLength = GetTourLength(Tours[tour]);
+            VRPEvaluation eval = ProblemInstance.EvaluatorParameter.Value.Evaluate(
+              ProblemInstance, Tours[tour]);
+            if (ProblemInstance.EvaluatorParameter.Value.Feasible(eval)) {
+              double newLength = eval.Distance;
 
               double detour = newLength - length;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPEvaluator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPEvaluator.cs	(revision 4377)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPEvaluator.cs	(revision 4378)
@@ -26,4 +26,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Optimization;
+using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
 
 namespace HeuristicLab.Problems.VehicleRouting.Interfaces {
@@ -31,8 +32,7 @@
     ILookupParameter<IVRPEncoding> VRPToursParameter { get; }
     
-    bool Feasible(IVRPProblemInstance instance, IVRPEncoding solution);
-    bool Feasible(IVRPProblemInstance instance, Tour tour);
-    double Evaluate(IVRPProblemInstance instance, IVRPEncoding solution);
-    double Evaluate(IVRPProblemInstance instance, Tour tour);
+    VRPEvaluation Evaluate(IVRPProblemInstance instance, IVRPEncoding solution);
+    VRPEvaluation Evaluate(IVRPProblemInstance instance, Tour tour);
+    bool Feasible(VRPEvaluation evaluation);
   }
 }
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPEvaluator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPEvaluator.cs	(revision 4377)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPEvaluator.cs	(revision 4378)
@@ -73,6 +73,6 @@
       eval.Quality += instance.DistanceFactor.Value * distance;
 
-      eval.Distance = distance;
-      eval.VehicleUtilization = 1;
+      eval.Distance += distance;
+      eval.VehicleUtilization += 1;
 
       double capacity = cvrpInstance.Capacity.Value;
@@ -81,5 +81,5 @@
       }
 
-      (eval as CVRPEvaluation).Overload = overweight;
+      (eval as CVRPEvaluation).Overload += overweight;
       double penalty = overweight * cvrpInstance.OverloadPenalty.Value;
       eval.Penalty += penalty;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPTWEvaluator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPTWEvaluator.cs	(revision 4377)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/CVRP/CVRPTW/CVRPTWEvaluator.cs	(revision 4378)
@@ -101,6 +101,6 @@
       eval.Quality += instance.FleetUsageFactor.Value;
       eval.Quality += instance.DistanceFactor.Value * distance;
-      eval.Distance = distance;
-      eval.VehicleUtilization = 1;
+      eval.Distance += distance;
+      eval.VehicleUtilization += 1;
 
       double capacity = cvrpInstance.Capacity.Value;
@@ -109,11 +109,11 @@
       }
 
-      (eval as CVRPEvaluation).Overload = overweight;
+      (eval as CVRPEvaluation).Overload += overweight;
       double penalty = overweight * cvrpInstance.OverloadPenalty.Value;
       eval.Penalty += penalty;
       eval.Quality += penalty;
 
-      (eval as CVRPTWEvaluation).Tardiness = tardiness;
-      (eval as CVRPTWEvaluation).TravelTime = time;
+      (eval as CVRPTWEvaluation).Tardiness += tardiness;
+      (eval as CVRPTWEvaluation).TravelTime += time;
 
       penalty = tardiness * vrptw.TardinessPenalty.Value;
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPEvaluator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPEvaluator.cs	(revision 4377)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/SingleDepotVRP/SingleDepotVRPEvaluator.cs	(revision 4378)
@@ -62,8 +62,8 @@
       quality += instance.DistanceFactor.Value * distance;
 
-      eval.Distance = distance;
-      eval.VehicleUtilization = 1;
+      eval.Distance += distance;
+      eval.VehicleUtilization += 1;
 
-      eval.Quality = quality;
+      eval.Quality += quality;
     }
     
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPEvaluator.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPEvaluator.cs	(revision 4377)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPEvaluator.cs	(revision 4378)
@@ -84,5 +84,5 @@
     }
 
-    protected VRPEvaluation EvaluateTour(IVRPProblemInstance instance, Tour tour) {
+    private VRPEvaluation EvaluateTour(IVRPProblemInstance instance, Tour tour) {
       VRPEvaluation evaluation = CreateTourEvaluation();
       EvaluateTour(evaluation, instance, tour);
@@ -92,33 +92,20 @@
     #region IVRPEvaluator Members
 
-    public bool Feasible(IVRPProblemInstance instance, IVRPEncoding solution) {
-      bool feasible = true;
+    public bool Feasible(VRPEvaluation evaluation) {
+      return evaluation.Penalty < double.Epsilon;
+    }
+
+    public VRPEvaluation Evaluate(IVRPProblemInstance instance, IVRPEncoding solution) {
+      VRPEvaluation evaluation = CreateTourEvaluation();
 
       foreach (Tour tour in solution.GetTours()) {
-        if (!Feasible(instance, tour)) {
-          feasible = false;
-          break;
-        }
+        EvaluateTour(evaluation, instance, tour);
       }
 
-      return feasible;
+      return evaluation;
     }
 
-    public bool Feasible(IVRPProblemInstance instance, Tour tour) {
-      return EvaluateTour(instance, tour).Penalty < double.Epsilon;
-    }
-
-    public double Evaluate(IVRPProblemInstance instance, IVRPEncoding solution) {
-      double quality = 0;
-
-      foreach (Tour tour in solution.GetTours()) {
-        quality += Evaluate(instance, tour);
-      }
-
-      return quality;
-    }
-
-    public double Evaluate(IVRPProblemInstance instance, Tour tour) {
-      return EvaluateTour(instance, tour).Quality;
+    public VRPEvaluation Evaluate(IVRPProblemInstance instance, Tour tour) {
+      return EvaluateTour(instance, tour);
     }
 
Index: /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPProblemInstance.cs
===================================================================
--- /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPProblemInstance.cs	(revision 4377)
+++ /branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPProblemInstance.cs	(revision 4378)
@@ -147,17 +147,21 @@
 
     public bool Feasible(IVRPEncoding solution) {
-      return EvaluatorParameter.Value.Feasible(this, solution);
+      return EvaluatorParameter.Value.Feasible(
+        EvaluatorParameter.Value.Evaluate(
+          this, solution));
     }
 
     public bool Feasible(Tour tour) {
-      return EvaluatorParameter.Value.Feasible(this, tour);
+      return EvaluatorParameter.Value.Feasible(
+        EvaluatorParameter.Value.Evaluate(
+        this, tour));
     }
 
     public double Evaluate(IVRPEncoding solution) {
-      return EvaluatorParameter.Value.Evaluate(this, solution);
+      return EvaluatorParameter.Value.Evaluate(this, solution).Quality;
     }
 
     public double Evaluate(Tour tour) {
-      return EvaluatorParameter.Value.Evaluate(this, tour);
+      return EvaluatorParameter.Value.Evaluate(this, tour).Quality;
     }
 
