Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/BinPacking2D.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/BinPacking2D.cs	(revision 14153)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/BinPacking2D.cs	(revision 14154)
@@ -32,14 +32,16 @@
   public class BinPacking2D : BinPacking.BinPacking<PackingPosition, PackingShape, PackingItem> {
 
-    public BinPacking2D(PackingShape binMeasures)
-      : base(binMeasures) {
+    public BinPacking2D(PackingShape binShape)
+      : base(binShape) {
       ExtremePoints = new SortedSet<PackingPosition>(new EPComparer2D());
-      ExtremePoints.Add(binMeasures.Origin);
-    }
+      ExtremePoints.Add(binShape.Origin);
+      InitializeOccupationLayers();
+    }
+
     [StorableConstructor]
     protected BinPacking2D(bool deserializing) : base(deserializing) { }
     protected BinPacking2D(BinPacking2D original, Cloner cloner)
       : base(original, cloner) {
-      this.ExtremePoints = new SortedSet<PackingPosition>(original.ExtremePoints, new EPComparer2D());
+      this.ExtremePoints = new SortedSet<PackingPosition>(original.ExtremePoints.Select(p => cloner.Clone(p)), new EPComparer2D());
     }
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -54,5 +56,5 @@
       //Find ExtremePoints beginning from sourcepointX
       var sourcePointX = new PackingPosition(0, position.X + newWidth, position.Y);
-      if (sourcePointX.X < BinMeasures.Width && sourcePointX.Y < BinMeasures.Height) {
+      if (sourcePointX.X < BinShape.Width && sourcePointX.Y < BinShape.Height) {
         //Traversing down the y-axis        
         var newPoint = new PackingPosition(0, sourcePointX.X, sourcePointX.Y - 1);
@@ -66,5 +68,5 @@
       //Find ExtremePoints beginning from sourcepointY
       var sourcePointY = new PackingPosition(0, position.X, position.Y + newHeight);
-      if (sourcePointY.X < BinMeasures.Width && sourcePointY.Y < BinMeasures.Height) {
+      if (sourcePointY.X < BinShape.Width && sourcePointY.Y < BinShape.Height) {
         //Traversing down the x-axis  
         var newPoint = new PackingPosition(0, sourcePointY.X - 1, sourcePointY.Y);
@@ -96,6 +98,6 @@
     public override PackingPosition FindPositionBySliding(PackingItem item, bool rotated) {
       PackingPosition currentPosition = new PackingPosition(0,
-        BinMeasures.Width - (rotated ? item.Height : item.Width),
-        BinMeasures.Height - (rotated ? item.Width : item.Height), rotated);
+        BinShape.Width - (rotated ? item.Height : item.Width),
+        BinShape.Height - (rotated ? item.Width : item.Height), rotated);
       //Slide the item as far as possible to the left
       while (IsPositionFeasible(item, PackingPosition.MoveLeft(currentPosition))
@@ -159,6 +161,6 @@
     public override int ShortestPossibleSideFromPoint(PackingPosition position) {
       int shortestSide = int.MaxValue;
-      int width = BinMeasures.Width;
-      int height = BinMeasures.Height;
+      int width = BinShape.Width;
+      int height = BinShape.Height;
 
       if (position.X >= width || position.Y >= height)
@@ -182,13 +184,13 @@
     }
 
-
     protected override void InitializeOccupationLayers() {
-      for (int i = 0; i * 10 <= BinMeasures.Width; i += 1) {
+      for (int i = 0; i * 10 <= BinShape.Width; i += 1) {
         OccupationLayers[i] = new List<int>();
       }
     }
-    protected override void AddNewItemToOccupationLayers(int itemID, PackingItem measures, PackingPosition position) {
+
+    protected override void AddNewItemToOccupationLayers(int itemID, PackingItem item, PackingPosition position) {
       int x1 = position.X / 10;
-      int x2 = (position.X + (position.Rotated ? measures.Height : measures.Width)) / 10;
+      int x2 = (position.X + (position.Rotated ? item.Height : item.Width)) / 10;
 
       for (int i = x1; i <= x2; i++)
@@ -198,8 +200,8 @@
       return OccupationLayers[position.X / 10];
     }
-    protected override List<int> GetLayerItemIDs(PackingItem measures, PackingPosition position) {
+    protected override List<int> GetLayerItemIDs(PackingItem item, PackingPosition position) {
       List<int> result = new List<int>();
       int x1 = position.X / 10;
-      int x2 = (position.X + (position.Rotated ? measures.Height : measures.Width)) / 10;
+      int x2 = (position.X + (position.Rotated ? item.Height : item.Width)) / 10;
 
       for (int i = x1; i <= x2; i++)
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Evaluators/BinUtilizationEvaluator.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Evaluators/BinUtilizationEvaluator.cs	(revision 14153)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Evaluators/BinUtilizationEvaluator.cs	(revision 14154)
@@ -53,6 +53,6 @@
 
       for (int i = 0; i < nrOfBins; i++) {
-        totalUsableSpace += solution.BinPackings[i].BinMeasures.Volume;
-        totalUsedSpace += solution.BinPackings[i].ItemMeasures.Sum(kvp => kvp.Value.Volume);
+        totalUsableSpace += solution.BinPackings[i].BinShape.Volume;
+        totalUsedSpace += solution.BinPackings[i].Items.Sum(kvp => kvp.Value.Volume);
       }
 
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Evaluators/PackingRatioEvaluator.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Evaluators/PackingRatioEvaluator.cs	(revision 14153)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Evaluators/PackingRatioEvaluator.cs	(revision 14154)
@@ -60,6 +60,6 @@
       const double k = 2;
       for (int i = 0; i < nrOfBins; i++) {
-        double f = solution.BinPackings[i].ItemMeasures.Sum(kvp => kvp.Value.Volume);
-        double c = solution.BinPackings[i].BinMeasures.Volume;
+        double f = solution.BinPackings[i].Items.Sum(kvp => kvp.Value.Volume);
+        double c = solution.BinPackings[i].BinShape.Volume;
         result += Math.Pow(f / c, k);
       }
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/HeuristicLab.Problems.BinPacking2D-3.3.csproj
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/HeuristicLab.Problems.BinPacking2D-3.3.csproj	(revision 14153)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/HeuristicLab.Problems.BinPacking2D-3.3.csproj	(revision 14154)
@@ -172,4 +172,5 @@
     <Compile Include="IntegerVectorEncoding\ExtremePointIntegerVectorDecoder.cs" />
     <Compile Include="IntegerVectorEncoding\IntegerVectorProblem.cs" />
+    <Compile Include="Interfaces\IOperator.cs" />
     <Compile Include="Interfaces\IDecoder.cs" />
     <Compile Include="Interfaces\IEvaluator.cs" />
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Interfaces/IOperator.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Interfaces/IOperator.cs	(revision 14154)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Interfaces/IOperator.cs	(revision 14154)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Joseph Helm and 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;
+
+namespace HeuristicLab.Problems.BinPacking2D {
+  public interface IOperator<TSol> : IItem {
+    ILookupParameter<ReadOnlyItemList<PackingItem>> ItemsParameter { get; }
+    ILookupParameter<PackingShape> BinShapeParameter { get; }
+    ILookupParameter<IDecoder<TSol>> DecoderParameter { get; }
+    ILookupParameter<IEvaluator> SolutionEvaluatorParameter { get; }
+  }
+}
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/MoveEvaluatorBase.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/MoveEvaluatorBase.cs	(revision 14153)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/MoveEvaluatorBase.cs	(revision 14154)
@@ -31,5 +31,5 @@
   [StorableClass]
   public abstract class MoveEvaluatorBase<TSol, TMove> : SingleSuccessorOperator,
-    ISingleObjectiveMoveEvaluator, ISingleObjectiveMoveOperator
+    ISingleObjectiveMoveEvaluator, ISingleObjectiveMoveOperator, IOperator<TSol>
     where TSol : class, IItem
     where TMove : class, IItem {
@@ -43,14 +43,14 @@
       get { return (ILookupParameter<DoubleValue>)Parameters["MoveQuality"]; }
     }
-    public ILookupParameter<ReadOnlyItemList<PackingItem>> PackingItemMeasuresParameter {
+    public ILookupParameter<ReadOnlyItemList<PackingItem>> ItemsParameter {
       get { return (LookupParameter<ReadOnlyItemList<PackingItem>>)Parameters["Items"]; }
     }
-    public ILookupParameter<PackingShape> PackingBinMeasuresParameter {
+    public ILookupParameter<PackingShape> BinShapeParameter {
       get { return (LookupParameter<PackingShape>)Parameters["BinShape"]; }
     }
-    public ILookupParameter<IDecoder<TSol>> PackingSolutionDecoderParameter {
+    public ILookupParameter<IDecoder<TSol>> DecoderParameter {
       get { return (ILookupParameter<IDecoder<TSol>>)Parameters["Decoder"]; }
     }
-    public ILookupParameter<IEvaluator> PackingPlanEvaluatorParameter {
+    public ILookupParameter<IEvaluator> SolutionEvaluatorParameter {
       get { return (ILookupParameter<IEvaluator>)Parameters["SolutionEvaluator"]; }
     }
@@ -78,6 +78,6 @@
       var move = MoveParameter.ActualValue;
       var encSolCandidate = EncodedSolutionParameter.ActualValue;
-      var binShape = PackingBinMeasuresParameter.ActualValue;
-      var items = PackingItemMeasuresParameter.ActualValue;
+      var binShape = BinShapeParameter.ActualValue;
+      var items = ItemsParameter.ActualValue;
 
 
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/PermutationEncoding/PermutationProblem.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/PermutationEncoding/PermutationProblem.cs	(revision 14153)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/PermutationEncoding/PermutationProblem.cs	(revision 14154)
@@ -23,4 +23,5 @@
 
 using System.Linq;
+using System.Windows.Forms;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -72,5 +73,10 @@
       Encoding.ConfigureOperators(Operators.OfType<IOperator>());
 
-      // TODO: configure the move evaluators (add interface for my move evaluators)
+      foreach (var op in Operators.OfType<IOperator<Permutation>>()) {
+        op.BinShapeParameter.ActualName = BinShapeParameter.Name;
+        op.ItemsParameter.ActualName = ItemsParameter.Name;
+        op.SolutionEvaluatorParameter.ActualName = SolutionEvaluatorParameter.Name;
+        op.DecoderParameter.ActualName = DecoderParameter.Name;
+      }
     }
 
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/PermutationEncoding/Swap2MoveEvaluator.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/PermutationEncoding/Swap2MoveEvaluator.cs	(revision 14153)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/PermutationEncoding/Swap2MoveEvaluator.cs	(revision 14154)
@@ -50,7 +50,7 @@
       // uses full evaluation
       Swap2Manipulator.Apply(permutation, move.Index1, move.Index2);
-      var solution = PackingSolutionDecoderParameter.ActualValue.Decode(permutation, binShape, items);
+      var solution = DecoderParameter.ActualValue.Decode(permutation, binShape, items);
 
-      return PackingPlanEvaluatorParameter.ActualValue.Evaluate(solution);
+      return SolutionEvaluatorParameter.ActualValue.Evaluate(solution);
     }
   }
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 14153)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/PermutationEncoding/TranslocationMoveEvaluator.cs	(revision 14154)
@@ -51,7 +51,7 @@
       // uses full evaluation
       TranslocationManipulator.Apply(permutation, move.Index1, move.Index2, move.Index3);
-      var solution = PackingSolutionDecoderParameter.ActualValue.Decode(permutation, binShape, items);
+      var solution = DecoderParameter.ActualValue.Decode(permutation, binShape, items);
 
-      return PackingPlanEvaluatorParameter.ActualValue.Evaluate(solution);
+      return SolutionEvaluatorParameter.ActualValue.Evaluate(solution);
     }
   }
