Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Dimensions/OccupiedPoints.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Dimensions/OccupiedPoints.cs	(revision 9593)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Dimensions/OccupiedPoints.cs	(revision 9596)
@@ -33,12 +33,13 @@
   [Item("Occupated Points", "A datastructure holding all currently occupied points of a packing-bin.")]
   [StorableClass]
-  public abstract class OccupiedPoints<D, I> : Item
+  public abstract class OccupiedPoints<D, B, I> : Item
     where D : class, IPackingDimensions
+    where B : PackingShape<D>, IPackingBin
     where I : PackingShape<D>, IPackingItem {
 
-    public OccupiedPoints() : base() { }
+    public OccupiedPoints(B binMeasures) : base() { }
     [StorableConstructor]
     protected OccupiedPoints(bool deserializing) : base(deserializing) { }
-    protected OccupiedPoints(OccupiedPoints<D,I> original, Cloner cloner)
+    protected OccupiedPoints(OccupiedPoints<D,B,I> original, Cloner cloner)
       : base(original, cloner) {
     }
@@ -51,5 +52,5 @@
     public abstract bool IsStaticStable(I item, D ep);
     public abstract bool WeightIsSupported(I item, D ep, ItemList<I> items);
-  
+    public abstract void ChangeBinMeasures(B binMeasures);
   }
 }
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Dimensions/OccupiedPoints2D.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Dimensions/OccupiedPoints2D.cs	(revision 9593)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Dimensions/OccupiedPoints2D.cs	(revision 9596)
@@ -35,10 +35,10 @@
   [Item("Occupated Points 2D", "A datastructure holding all currently occupied points of a 2D packing-bin.")]
   [StorableClass]
-  public class OccupiedPoints2D : OccupiedPoints<TwoDimensionalPacking, RectangularPackingItem> {
+  public class OccupiedPoints2D : OccupiedPoints<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem> {
                    
     [Storable]
     private int[,] occupiedPoints { get; set; }
 
-    public OccupiedPoints2D(RectangularPackingBin binMeasures) : base() {
+    public OccupiedPoints2D(RectangularPackingBin binMeasures) : base(binMeasures) {
       occupiedPoints = new int[binMeasures.Width, binMeasures.Height];
       for (int w = 0; w < binMeasures.Width; w++) {
@@ -67,5 +67,4 @@
       return true;
     }
-
     public override void OccupyPoints(RectangularPackingItem measures, TwoDimensionalPacking position, int itemID) {
       int width = position.Rotated ? measures.Height : measures.Width;
@@ -77,9 +76,7 @@
       }
     }
-
     public override bool IsPointOccupied(TwoDimensionalPacking point) {
       return occupiedPoints[point.X, point.Y] != -1;
     }
-
     public override int ShortestPossibleSideFromEP(TwoDimensionalPacking ep) {
       int shortestSide = int.MaxValue;
@@ -102,13 +99,15 @@
       return shortestSide;
     }
-
     public override bool IsStaticStable(RectangularPackingItem item, TwoDimensionalPacking ep) {
       //For the current implementation there was no need for stacking-constraints in the 2D-case. 
       //But it could be interesting for shelf-packing applications!
-      return true;
+      throw new NotImplementedException();
     }
     public override bool WeightIsSupported(RectangularPackingItem item, TwoDimensionalPacking ep, ItemList<RectangularPackingItem> items) {
       return true;
     }
+    public override void ChangeBinMeasures(RectangularPackingBin binMeasures) {
+      throw new NotImplementedException();
+    }
   }
 }
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Dimensions/OccupiedPoints3D.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Dimensions/OccupiedPoints3D.cs	(revision 9593)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Dimensions/OccupiedPoints3D.cs	(revision 9596)
@@ -35,10 +35,10 @@
   [Item("Occupied Points 3D", "A datastructure holding all currently occupied points of a 3D packing-bin.")]
   [StorableClass]
-  public class OccupiedPoints3D : OccupiedPoints<ThreeDimensionalPacking, CuboidPackingItem> {
+  public class OccupiedPoints3D : OccupiedPoints<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> {
 
     [Storable]
     private int[, ,] occupiedPoints { get; set; }
 
-    public OccupiedPoints3D(CuboidPackingBin binMeasures) {
+    public OccupiedPoints3D(CuboidPackingBin binMeasures) : base(binMeasures) {
       occupiedPoints = new int[binMeasures.Width, binMeasures.Height, binMeasures.Depth];
       for (int w = 0; w < binMeasures.Width; w++) {
@@ -71,5 +71,4 @@
       return true;
     }
-
     public override void OccupyPoints(CuboidPackingItem measures, ThreeDimensionalPacking position, int itemID) {
       int width = position.Rotated ? measures.Depth : measures.Width;
@@ -83,9 +82,7 @@
       }
     }
-
     public override bool IsPointOccupied(ThreeDimensionalPacking point) {
       return occupiedPoints[point.X, point.Y, point.Z] != -1;
     }
-
     public override int ShortestPossibleSideFromEP(ThreeDimensionalPacking ep) {
       int shortestSide = int.MaxValue;
@@ -114,6 +111,4 @@
       return shortestSide;
     }
-
-
     public override bool IsStaticStable(CuboidPackingItem item, ThreeDimensionalPacking ep) {
       //Static stability is given, if item is placed on the ground
@@ -164,5 +159,19 @@
       return false;
     }
-  
+    public override void ChangeBinMeasures(CuboidPackingBin binMeasures) {
+      int oldDepth = occupiedPoints.GetLength(2);
+      var newBinOccupation = new int[binMeasures.Width, binMeasures.Height, binMeasures.Depth];
+      for (int w = 0; w < binMeasures.Width; w++) {
+        for (int h = 0; h < binMeasures.Height; h++) {
+          for (int d = 0; d < binMeasures.Depth; d++) {
+            if (d < oldDepth)
+              newBinOccupation[w, h, d] = occupiedPoints[w, h, d];
+            else
+              newBinOccupation[w, h, d] = -1;
+          }
+        }
+      }
+      occupiedPoints = newBinOccupation;
+    }
   }
 }
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Dimensions/ThreeDimensionalPacking.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Dimensions/ThreeDimensionalPacking.cs	(revision 9593)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Dimensions/ThreeDimensionalPacking.cs	(revision 9596)
@@ -81,4 +81,24 @@
       return base.GetHashCode() + 13 * X + 17 * Y + 23 * Z;
     }
+
+    public static ThreeDimensionalPacking MoveLeft(ThreeDimensionalPacking original) {
+      return new ThreeDimensionalPacking(original.AssignedBin, original.X - 1, original.Y, original.Z, original.Rotated);
+    }
+    public static ThreeDimensionalPacking MoveDown(ThreeDimensionalPacking original) {
+      return new ThreeDimensionalPacking(original.AssignedBin, original.X, original.Y - 1, original.Z, original.Rotated);
+    }
+    public static ThreeDimensionalPacking MoveBack(ThreeDimensionalPacking original) {
+      return new ThreeDimensionalPacking(original.AssignedBin, original.X, original.Y, original.Z - 1, original.Rotated);
+    }
+
+    public static ThreeDimensionalPacking MoveRight(ThreeDimensionalPacking original) {
+      return new ThreeDimensionalPacking(original.AssignedBin, original.X + 1, original.Y, original.Z, original.Rotated);
+    }
+    public static ThreeDimensionalPacking MoveUp(ThreeDimensionalPacking original) {
+      return new ThreeDimensionalPacking(original.AssignedBin, original.X, original.Y + 1, original.Z, original.Rotated);
+    }
+    public static ThreeDimensionalPacking MoveFront(ThreeDimensionalPacking original) {
+      return new ThreeDimensionalPacking(original.AssignedBin, original.X, original.Y, original.Z + 1, original.Rotated);
+    }
   }
 }
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Dimensions/TwoDimensionalPacking.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Dimensions/TwoDimensionalPacking.cs	(revision 9593)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Dimensions/TwoDimensionalPacking.cs	(revision 9596)
@@ -77,4 +77,19 @@
       return base.GetHashCode() + 13 * X + 17 * Y;
     }
+
+    public static TwoDimensionalPacking MoveLeft(TwoDimensionalPacking original) {
+      return new TwoDimensionalPacking(original.AssignedBin, original.X - 1, original.Y, original.Rotated);
+    }
+    public static TwoDimensionalPacking MoveDown(TwoDimensionalPacking original) {
+      return new TwoDimensionalPacking(original.AssignedBin, original.X, original.Y - 1, original.Rotated);
+    }
+
+    public static TwoDimensionalPacking MoveRight(TwoDimensionalPacking original) {
+      return new TwoDimensionalPacking(original.AssignedBin, original.X + 1, original.Y, original.Rotated);
+    }
+    public static TwoDimensionalPacking MoveUp(TwoDimensionalPacking original) {
+      return new TwoDimensionalPacking(original.AssignedBin, original.X, original.Y + 1, original.Rotated);
+    }
+
   }
 }
