Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMove.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMove.cs	(revision 6713)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMove.cs	(revision 6751)
@@ -30,5 +30,5 @@
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
-  [Item("AlbaLambdaInterchangeMove", "Item that describes a lambda move on a VRP representation.  It is implemented as described in Alba, E. and Dorronsoro, B. (2004). Solving the Vehicle Routing Problem by Using Cellular Genetic Algorithms.")]
+  [Item("PotvinCustomerRelocationMove", "Item that describes a relocation move on a VRP representation.")]
   [StorableClass]
   public class PotvinCustomerRelocationMove: Item, IVRPMove {
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveEvaluator.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveEvaluator.cs	(revision 6713)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveEvaluator.cs	(revision 6751)
@@ -76,5 +76,5 @@
 
       PotvinEncoding newSolution = CustomerRelocationMoveParameter.ActualValue.Individual.Clone() as PotvinEncoding;
-      PotvinCustomerRelocationMoveMaker.Apply(newSolution, move);
+      PotvinCustomerRelocationMoveMaker.Apply(newSolution, move, ProblemInstance);
 
       UpdateEvaluation(newSolution);
@@ -91,14 +91,11 @@
           if (additionFrequency.ContainsKey(attr)) {
             int frequency = additionFrequency[attr].Value;
-            double quality = MoveQualityParameter.ActualValue.Value - MovePenaltyParameter.ActualValue.Value;
+            double quality = MoveQualityParameter.ActualValue.Value;
 
             MoveQualityParameter.ActualValue.Value +=
-              LambdaParameter.Value.Value * quality * frequency * System.Math.Sqrt(ProblemInstance.Cities.Value * ProblemInstance.Vehicles.Value);
+              LambdaParameter.Value.Value * quality * frequency;
           }
         }
       }
-
-      //Apply constraint relaxation
-      MoveQualityParameter.ActualValue.Value += MovePenaltyParameter.ActualValue.Value * (newSolution.PenaltyFactor - 1.0); 
     } 
   }
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveMaker.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveMaker.cs	(revision 6713)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/CustomerRelocation/PotvinCustomerRelocationMoveMaker.cs	(revision 6751)
@@ -28,4 +28,6 @@
 using HeuristicLab.Common;
 using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
+using HeuristicLab.Problems.VehicleRouting.Interfaces;
+using HeuristicLab.Problems.VehicleRouting.Variants;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
@@ -39,16 +41,4 @@
     public override ILookupParameter VRPMoveParameter {
          get { return CustomerRelocationMoveParameter; }
-    }
-
-    public IValueParameter<DoubleValue> SigmaParameter {
-      get { return (IValueParameter<DoubleValue>)Parameters["Sigma"]; }
-    }
-
-    public IValueParameter<DoubleValue> MinPenaltyFactorParameter {
-      get { return (IValueParameter<DoubleValue>)Parameters["MinPenaltyFactor"]; }
-    }
-
-    public IValueParameter<DoubleValue> MaxPenaltyFactorParameter {
-      get { return (IValueParameter<DoubleValue>)Parameters["MaxPenaltyFactor"]; }
     }
 
@@ -67,7 +57,4 @@
       : base() {
       Parameters.Add(new LookupParameter<PotvinCustomerRelocationMove>("PotvinCustomerRelocationMove", "The moves that should be made."));
-      Parameters.Add(new ValueParameter<DoubleValue>("Sigma", "The sigma applied to the penalty factor.", new DoubleValue(0.5)));
-      Parameters.Add(new ValueParameter<DoubleValue>("MinPenaltyFactor", "The minimum penalty factor.", new DoubleValue(-1000.0)));
-      Parameters.Add(new ValueParameter<DoubleValue>("MaxPenaltyFactor", "The maximum penalty factor.", new DoubleValue(1000.0)));
 
       Parameters.Add(new LookupParameter<VariableCollection>("Memories", "The TS memory collection."));
@@ -83,5 +70,5 @@
     }
 
-    public static void Apply(PotvinEncoding solution, PotvinCustomerRelocationMove move) {
+    public static void Apply(PotvinEncoding solution, PotvinCustomerRelocationMove move, IVRPProblemInstance problemInstance) {
       if (move.Tour >= solution.Tours.Count)
         solution.Tours.Add(new Tour());
@@ -94,5 +81,4 @@
 
       int place = solution.FindBestInsertionPlace(tour, move.City);
-
       tour.Stops.Insert(place, move.City);
     }
@@ -102,5 +88,5 @@
 
       PotvinEncoding newSolution = move.Individual.Clone() as PotvinEncoding;
-      Apply(newSolution, move);
+      Apply(newSolution, move, ProblemInstance);
       VRPToursParameter.ActualValue = newSolution;
 
@@ -108,16 +94,4 @@
       VRPEvaluation eval = ProblemInstance.Evaluate(newSolution);
       MoveQualityParameter.ActualValue.Value = eval.Quality;
-
-      //update penalty factor
-      double sigma = SigmaParameter.Value.Value;
-      if (ProblemInstance.Feasible(eval)) {
-        newSolution.PenaltyFactor /= (1 + sigma);
-        if (newSolution.PenaltyFactor < MinPenaltyFactorParameter.Value.Value)
-          newSolution.PenaltyFactor = MinPenaltyFactorParameter.Value.Value;
-      } else {
-        newSolution.PenaltyFactor *= (1 + sigma);
-        if (newSolution.PenaltyFactor > MaxPenaltyFactorParameter.Value.Value)
-          newSolution.PenaltyFactor = MaxPenaltyFactorParameter.Value.Value;
-      }
 
       //update memory
