Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/PermutationEncoding/TranslocationMoveEvaluator.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/PermutationEncoding/TranslocationMoveEvaluator.cs	(revision 14148)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/PermutationEncoding/TranslocationMoveEvaluator.cs	(revision 14149)
@@ -22,9 +22,5 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Data;
 using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Operators;
-using HeuristicLab.Optimization;
-using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
@@ -32,35 +28,11 @@
   [Item("TranslocationMoveEvaluator", "Move evaluator for insertion or translocation moves.")]
   [StorableClass]
-  public sealed class TranslocationMoveEvaluator : SingleSuccessorOperator,
-    ISingleObjectiveMoveEvaluator, ISingleObjectiveMoveOperator, IPermutationTranslocationMoveOperator {
-    public override bool CanChangeName {
-      get { return false; }
+  public sealed class TranslocationMoveEvaluator : MoveEvaluatorBase<Permutation, TranslocationMove>, IPermutationTranslocationMoveOperator {
+    public ILookupParameter<TranslocationMove> TranslocationMoveParameter {
+      get { return MoveParameter; }
     }
     public ILookupParameter<Permutation> PermutationParameter {
-      get { return (ILookupParameter<Permutation>)Parameters["PackingSequence"]; }
+      get { return EncodedSolutionParameter; }
     }
-    public ILookupParameter<DoubleValue> QualityParameter {
-      get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; }
-    }
-    public ILookupParameter<DoubleValue> MoveQualityParameter {
-      get { return (ILookupParameter<DoubleValue>)Parameters["MoveQuality"]; }
-    }
-    public ILookupParameter<ReadOnlyItemList<PackingItem>> PackingItemMeasuresParameter {
-      get { return (LookupParameter<ReadOnlyItemList<PackingItem>>)Parameters["Items"]; }
-    }
-    public ILookupParameter<PackingShape> PackingBinMeasuresParameter {
-      get { return (LookupParameter<PackingShape>)Parameters["BinShape"]; }
-    }
-    public ILookupParameter<IPermutationDecoder> PackingSolutionDecoderParameter {
-      get { return (ILookupParameter<IPermutationDecoder>)Parameters["Decoder"]; }
-    }
-    public ILookupParameter<IEvaluator> PackingPlanEvaluatorParameter {
-      get { return (ILookupParameter<IEvaluator>)Parameters["SolutionEvaluator"]; }
-    }
-
-    public ILookupParameter<TranslocationMove> TranslocationMoveParameter {
-      get { return (ILookupParameter<TranslocationMove>)Parameters["TranslocationMove"]; }
-    }
-
     [StorableConstructor]
     private TranslocationMoveEvaluator(bool deserializing) : base(deserializing) { }
@@ -68,12 +40,4 @@
     public TranslocationMoveEvaluator()
       : base() {
-      Parameters.Add(new LookupParameter<Permutation>("PackingSequence", "The encoded solution candidate to evaluate"));
-      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality of a packing solution."));
-      Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The evaluated quality of a move on a packing solution."));
-      Parameters.Add(new LookupParameter<ReadOnlyItemList<PackingItem>>("Items", "Packing-item data taken from the bin-packing problem-instance."));
-      Parameters.Add(new LookupParameter<PackingShape>("BinShape", "Packing-bin data taken from the bin-packing problem-instance."));
-      Parameters.Add(new LookupParameter<IPermutationDecoder>("Decoder", "The decoding operator that is used to calculate a packing plan from the used representation."));
-      Parameters.Add(new LookupParameter<IEvaluator>("SolutionEvaluator", "The actual packing plan evaluation operator."));
-      Parameters.Add(new LookupParameter<TranslocationMove>("TranslocationMove", "The move to evaluate."));
     }
 
@@ -82,25 +46,12 @@
     }
 
-
-    public override IOperation Apply() {
-      var move = TranslocationMoveParameter.ActualValue;
-      var permutation = PermutationParameter.ActualValue;
-      var binShape = PackingBinMeasuresParameter.ActualValue;
-      var items = PackingItemMeasuresParameter.ActualValue;
+    public override double EvaluateMove(Permutation permutation, TranslocationMove move, PackingShape binShape,
+      ReadOnlyItemList<PackingItem> items) {
 
       // uses full evaluation
-
       TranslocationManipulator.Apply(permutation, move.Index1, move.Index2, move.Index3);
       var solution = PackingSolutionDecoderParameter.ActualValue.Decode(permutation, binShape, items);
 
-      var quality = PackingPlanEvaluatorParameter.ActualValue.Evaluate(solution);
-
-      double moveQuality = quality;
-
-      if (MoveQualityParameter.ActualValue == null)
-        MoveQualityParameter.ActualValue = new DoubleValue(moveQuality);
-      else
-        MoveQualityParameter.ActualValue.Value = moveQuality;
-      return base.Apply();
+      return PackingPlanEvaluatorParameter.ActualValue.Evaluate(solution);
     }
   }
