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 17711)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveEvaluator.cs	(revision 17712)
@@ -20,4 +20,5 @@
 #endregion
 
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -25,6 +26,6 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
@@ -43,4 +44,7 @@
       get { return (ILookupParameter<DoubleValue>)Parameters["MovePenalty"]; }
     }
+    public ILookupParameter<VRPEvaluation> MoveEvaluationResultParameter {
+      get { return (ILookupParameter<VRPEvaluation>)Parameters["MoveEvaluationResult"]; }
+    }
 
     [StorableConstructor]
@@ -52,4 +56,5 @@
       Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The relative quality of the move."));
       Parameters.Add(new LookupParameter<DoubleValue>("MovePenalty", "The penalty applied to the move."));
+      Parameters.Add(new LookupParameter<VRPEvaluation>("MoveEvaluationResult", "The evaluation result of the move."));
     }
 
@@ -60,16 +65,8 @@
     //helper method to evaluate an updated individual
     protected void UpdateEvaluation(IVRPEncodedSolution updatedTours) {
-      IVRPEvaluator evaluator = ProblemInstance.MoveEvaluator;
-
-      try {
-        this.ExecutionContext.Scope.Variables.Add(new Variable(evaluator.VRPToursParameter.ActualName,
-          updatedTours));
-
-        IAtomicOperation op = this.ExecutionContext.CreateChildOperation(evaluator);
-        op.Operator.Execute((IExecutionContext)op, CancellationToken);
-      }
-      finally {
-        this.ExecutionContext.Scope.Variables.Remove(evaluator.VRPToursParameter.ActualName);
-      }
+      var evaluation = ProblemInstance.Evaluate(updatedTours);
+      MoveEvaluationResultParameter.ActualValue = evaluation;
+      MoveQualityParameter.ActualValue = new DoubleValue(evaluation.Quality);
+      MovePenaltyParameter.ActualValue = new DoubleValue(evaluation.Penalty);
     }
 
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveMaker.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveMaker.cs	(revision 17711)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveMaker.cs	(revision 17712)
@@ -20,5 +20,5 @@
 #endregion
 
-using System.Collections.Generic;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -26,6 +26,5 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
-using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
@@ -36,4 +35,7 @@
       get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
+    public ILookupParameter<VRPEvaluation> EvaluationResultParameter {
+      get { return (ILookupParameter<VRPEvaluation>)Parameters["EvaluationResult"]; }
+    }
     public ILookupParameter<DoubleValue> MoveQualityParameter {
       get { return (ILookupParameter<DoubleValue>)Parameters["MoveQuality"]; }
@@ -41,4 +43,7 @@
     public ILookupParameter<DoubleValue> MovePenaltyParameter {
       get { return (ILookupParameter<DoubleValue>)Parameters["MovePenalty"]; }
+    }
+    public ILookupParameter<VRPEvaluation> MoveEvaluationResultParameter {
+      get { return (ILookupParameter<VRPEvaluation>)Parameters["MoveEvaluationResult"]; }
     }
 
@@ -49,6 +54,8 @@
       : base() {
       Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality of the solution."));
+      Parameters.Add(new LookupParameter<VRPEvaluation>("EvaluationResult", "The evaluation of the solution."));
       Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The relative quality of the move."));
       Parameters.Add(new LookupParameter<DoubleValue>("MovePenalty", "The penalty applied to the move."));
+      Parameters.Add(new LookupParameter<VRPEvaluation>("MoveEvaluationResult", "The move evaluation."));
     }
 
@@ -60,40 +67,6 @@
 
     private void UpdateMoveEvaluation() {
-      IVRPEvaluator evaluator = ProblemInstance.SolutionEvaluator;
-      ICollection<IParameter> addedParameters = new List<IParameter>();
-
-      try {
-        foreach (IParameter parameter in evaluator.Parameters) {
-          if (parameter is ILookupParameter
-            && parameter != evaluator.VRPToursParameter
-            && parameter != evaluator.ProblemInstanceParameter) {
-            ILookupParameter evaluatorParameter = parameter as ILookupParameter;
-
-            string resultName = evaluatorParameter.ActualName;
-            if (!this.Parameters.ContainsKey(resultName)) {
-              ILookupParameter resultParameter = new LookupParameter<IItem>(resultName);
-              resultParameter.ExecutionContext = ExecutionContext;
-              this.Parameters.Add(resultParameter);
-              addedParameters.Add(resultParameter);
-            }
-
-            string moveResultName = VRPMoveEvaluator.MovePrefix + resultName;
-            if (!this.Parameters.ContainsKey(moveResultName)) {
-              ILookupParameter moveResultParameter = new LookupParameter<IItem>(moveResultName);
-              moveResultParameter.ExecutionContext = ExecutionContext;
-              this.Parameters.Add(moveResultParameter);
-              addedParameters.Add(moveResultParameter);
-            }
-
-            ILookupParameter result = Parameters[resultName] as ILookupParameter;
-            ILookupParameter moveResult = Parameters[moveResultName] as ILookupParameter;
-            result.ActualValue = moveResult.ActualValue;
-          }
-        }
-      } finally {
-        foreach (IParameter parameter in addedParameters) {
-          this.Parameters.Remove(parameter);
-        }
-      }
+      EvaluationResultParameter.ActualValue = MoveEvaluationResultParameter.ActualValue;
+      QualityParameter.ActualValue = MoveQualityParameter.ActualValue;
     }
 
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 17711)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Creators/PushForwardInsertionCreator.cs	(revision 17712)
@@ -22,4 +22,5 @@
 using System;
 using System.Collections.Generic;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -27,5 +28,4 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
@@ -299,6 +299,5 @@
             } else {
               double cost = tourCost;
-              bool feasible = problemInstance.Feasible(eval);
-              if (cost < minimumCost && feasible) {
+              if (cost < minimumCost && eval.IsFeasible) {
                 customer = unrouted;
                 minimumCost = cost;
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 17711)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinCrossover.cs	(revision 17712)
@@ -21,4 +21,5 @@
 
 using System.Collections.Generic;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -26,5 +27,4 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 using HeuristicLab.Problems.VehicleRouting.Encodings.General;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
@@ -134,6 +134,6 @@
         solution.Tours.Remove(tour);
       }
-
-      if (newTour.Stops.Count > 0 && !allowInfeasible && !instance.TourFeasible(newTour, solution))
+      var tourEval = instance.EvaluateTour(newTour, solution);
+      if (newTour.Stops.Count > 0 && !allowInfeasible && !tourEval.IsFeasible)
         return false;
 
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 17711)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinInsertionBasedCrossover.cs	(revision 17712)
@@ -20,13 +20,13 @@
 #endregion
 
+using System;
+using System.Collections.Generic;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HEAL.Attic;
-using System.Collections.Generic;
 using HeuristicLab.Data;
-using System;
 using HeuristicLab.Parameters;
+using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
-using HeuristicLab.Problems.VehicleRouting.Interfaces;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -165,5 +165,4 @@
       double minDetour = 0;
       VRPEvaluation eval = ProblemInstance.EvaluateTour(tour, individual);
-      bool originalFeasible = ProblemInstance.Feasible(eval);
 
       for (int i = 0; i <= tour.Stops.Count; i++) {
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 17711)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinLocalSearchManipulator.cs	(revision 17712)
@@ -21,9 +21,9 @@
 
 using System.Collections.Generic;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
 
@@ -70,5 +70,6 @@
           distance = individual.GetTourLength(individual.Tours[currentTour]);
           individual.Tours[currentTour].Stops.InsertRange(currentCity, toBeDeleted);
-          if (instance.TourFeasible(individual.Tours[currentTour], individual)) {
+          var tourEval = instance.EvaluateTour(individual.Tours[currentTour], individual);
+          if (tourEval.IsFeasible) {
             double lengthIncrease =
               individual.GetTourLength(individual.Tours[currentTour]) - distance;
@@ -94,5 +95,6 @@
     public static void ApplyManipulation(IRandom random, PotvinEncodedSolution individual, IVRPProblemInstance instance, int maxIterations) {
       //only apply to feasible individuals
-      if (instance.Feasible(individual)) {
+      var eval = instance.Evaluate(individual);
+      if (eval.IsFeasible) {
         bool insertionFound;
         int iterations = 0;
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 17711)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinPairwiseOneLevelExchangeManipulator.cs	(revision 17712)
@@ -20,10 +20,10 @@
 #endregion
 
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HEAL.Attic;
+using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
 using HeuristicLab.Problems.VehicleRouting.Variants;
-using HeuristicLab.Problems.VehicleRouting.Interfaces;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -88,5 +88,5 @@
 
             if (delta < bestQuality &&
-               (instance.Feasible(evalNew) || allowInfeasible)) {
+               (evalNew.IsFeasible || allowInfeasible)) {
               bestQuality = delta;
               bestTour = tourIdx;
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 17711)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinPairwiseTwoLevelExchangeManipulator.cs	(revision 17712)
@@ -20,11 +20,11 @@
 #endregion
 
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.PermutationEncoding;
-using HEAL.Attic;
+using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
 using HeuristicLab.Problems.VehicleRouting.Variants;
-using HeuristicLab.Problems.VehicleRouting.Interfaces;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -77,9 +77,11 @@
 
       replacedSourceTour.Stops[replacedSourceTour.Stops.IndexOf(replacedSource)] = replacingSource;
-      if (!allowInfeasible && !instance.TourFeasible(replacedSourceTour, individual))
+      var evalSourceTour = instance.EvaluateTour(replacedSourceTour, individual);
+      if (!allowInfeasible && !evalSourceTour.IsFeasible)
         return null;
 
+      var evalTargetTour = instance.EvaluateTour(replacedTargetTour, individual);
       replacedTargetTour.Stops[replacedTargetTour.Stops.IndexOf(replacedTarget)] = replacingTarget;
-      if (!allowInfeasible && !instance.TourFeasible(replacedTargetTour, individual))
+      if (!allowInfeasible && !evalTargetTour.IsFeasible)
         return null;
 
@@ -101,5 +103,5 @@
 
           if (delta < bestQuality &&
-              (instance.Feasible(evalNew) || allowInfeasible)) {
+              (evalNew.IsFeasible || allowInfeasible)) {
             bestQuality = delta;
             bestTour = tourIdx;
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 17711)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs	(revision 17712)
@@ -20,7 +20,7 @@
 #endregion
 
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HEAL.Attic;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
 
@@ -62,5 +62,6 @@
                 route1.Stops.RemoveAt(customer1Position);
 
-                if (instance.TourFeasible(tour, individual)) {
+                var tourEval = instance.EvaluateTour(tour, individual);
+                if (tourEval.IsFeasible) {
                   int routeIdx, place;
                   if (FindInsertionPlace(individual,
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 17711)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncodedSolution.cs	(revision 17712)
@@ -219,5 +219,4 @@
 
       VRPEvaluation eval = ProblemInstance.Evaluate(this);
-      bool originalFeasible = ProblemInstance.Feasible(eval);
 
       for (int tour = 0; tour < Tours.Count; tour++) {
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 17711)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/PrinsEncodedSolution.cs	(revision 17712)
@@ -66,5 +66,5 @@
 
           double cost = eval.Quality;
-          feasible = ProblemInstance.Feasible(eval);
+          feasible = eval.IsFeasible;
 
           if (feasible || j == i) {
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 17711)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/ZhuEncodedSolution.cs	(revision 17712)
@@ -45,5 +45,6 @@
         int city = this[i] + 1;
         newTour.Stops.Add(city);
-        if (!ProblemInstance.TourFeasible(newTour, this)) {
+        var evalNewTour = ProblemInstance.EvaluateTour(newTour, this);
+        if (!evalNewTour.IsFeasible) {
           newTour.Stops.Remove(city);
           if (newTour.Stops.Count > 0)
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/GAVrpSampleTest.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/GAVrpSampleTest.cs	(revision 17711)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/GAVrpSampleTest.cs	(revision 17712)
@@ -79,5 +79,4 @@
       instance.TardinessPenalty.Value = 100;
       instance.TimeFactor.Value = 0;
-      vrpProblem.MaximizationParameter.Value.Value = false;
       instance.UseDistanceMatrix.Value = true;
       instance.Vehicles.Value = 25;
