Index: /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/ExtremePointCreation/PointProjectionBasedEPCreator.cs
===================================================================
--- /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/ExtremePointCreation/PointProjectionBasedEPCreator.cs	(revision 15821)
+++ /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/ExtremePointCreation/PointProjectionBasedEPCreator.cs	(revision 15822)
@@ -50,13 +50,6 @@
       }
       
-      // generate all new extreme points parallel. This speeds up the creator.
-      var items = binPacking.Items.OrderBy(x => x.Value.Layer);
-      Parallel.ForEach(items.Where(x => x.Value.Layer < item.Layer), i => {
-        PackingItem it = i.Value;
-        PackingPosition pos = binPacking.Positions[i.Key];
-        GenerateNewExtremePointsForItem(binPacking, it, pos);
-      });
-      
-      Parallel.ForEach(items.Where(x => x.Value.Layer >= item.Layer), i => {
+      // generate all new extreme points parallel. This speeds up the creator.      
+      Parallel.ForEach(binPacking.Items, i => {
         PackingItem it = i.Value;
         PackingPosition pos = binPacking.Positions[i.Key];
Index: /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/ExtremePointPruning/ExtremePointPruning.cs
===================================================================
--- /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/ExtremePointPruning/ExtremePointPruning.cs	(revision 15821)
+++ /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/ExtremePointPruning/ExtremePointPruning.cs	(revision 15822)
@@ -47,9 +47,9 @@
     }
 
-    public void PruneExtremePoints(BinPacking3D binPacking, int layer) {
+    public void PruneExtremePoints(BinPacking3D binPacking, int sequenceNumber) {
       var pruningPositions = new List<KeyValuePair<int, PackingPosition>>();
       var pruning = new Dictionary<BinPacking3D, List<KeyValuePair<int, PackingPosition>>>();
       pruning.Add(binPacking, pruningPositions);
-      foreach (var item in binPacking.Items.Where(x => x.Value.Layer <= layer)) {
+      foreach (var item in binPacking.Items.Where(x => x.Value.SequenceGroup <= sequenceNumber)) {
         pruningPositions.Add(new KeyValuePair<int, PackingPosition>(item.Key, binPacking.Positions[item.Key]));
       }
Index: /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/ExtremePointPruning/IExtremePointPruning.cs
===================================================================
--- /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/ExtremePointPruning/IExtremePointPruning.cs	(revision 15821)
+++ /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/ExtremePointPruning/IExtremePointPruning.cs	(revision 15822)
@@ -50,5 +50,5 @@
     /// <param name="binPacking"></param>
     /// <param name="layer"
-    void PruneExtremePoints(BinPacking3D binPacking, int layer);
+    void PruneExtremePoints(BinPacking3D binPacking, int sequenceNumber);
   }
 }
Index: /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/Instances/ThreeDInstanceParser.cs
===================================================================
--- /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/Instances/ThreeDInstanceParser.cs	(revision 15821)
+++ /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/Instances/ThreeDInstanceParser.cs	(revision 15822)
@@ -56,5 +56,5 @@
             var tilt = GetNextInteger(reader);
             for (var i = 0; i < pieces; i++) {
-              PackingItem item = new PackingItem(width, height, length, Bin, weight, material) {
+              PackingItem item = new PackingItem(width, height, length, Bin, weight, 0, material) {
                 RotateEnabled = rotate == 0 ? false : true,
                 TiltEnabled = tilt == 0 ? false : true,
Index: /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/Packer/BinPacker.cs
===================================================================
--- /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/Packer/BinPacker.cs	(revision 15821)
+++ /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/Packer/BinPacker.cs	(revision 15822)
@@ -94,5 +94,8 @@
         packingItem.Height,
         packingItem.Depth,
-        packingItem.TargetBin, packingItem.Weight, packingItem.Layer);
+        packingItem.TargetBin, 
+        packingItem.Weight, 
+        packingItem.SequenceGroup, 
+        packingItem.Layer);
 
       // The extremepoints are sortet by Y / Z / X
Index: /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/Packer/BinPackerMinRSLeft.cs
===================================================================
--- /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/Packer/BinPackerMinRSLeft.cs	(revision 15821)
+++ /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/Packer/BinPackerMinRSLeft.cs	(revision 15822)
@@ -112,5 +112,5 @@
         var item = items[itemId];
         var clonedPackingBin = packingBin.Clone() as BinPacking3D;
-        ExtremePointPruningFactory.CreatePruning(ExtremePointPruningMethod.PruneBehind).PruneExtremePoints(clonedPackingBin, item.Layer - 1);
+        ExtremePointPruningFactory.CreatePruning(ExtremePointPruningMethod.PruneBehind).PruneExtremePoints(clonedPackingBin, item.SequenceGroup - 1);
 
         // If an item doesn't support any weight it should have a minimum waste of the residual space.
Index: /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/PackingItem.cs
===================================================================
--- /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/PackingItem.cs	(revision 15821)
+++ /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/PackingItem.cs	(revision 15822)
@@ -45,4 +45,8 @@
     }
 
+    public IFixedValueParameter<IntValue> SequenceGroupParameter {
+      get { return (IFixedValueParameter<IntValue>)Parameters["SequenceGroup"]; }
+    }
+
     public IFixedValueParameter<IntValue> IdParameter {
       get { return (IFixedValueParameter<IntValue>)Parameters["Id"]; }
@@ -64,4 +68,9 @@
     }
 
+    public int SequenceGroup {
+      get { return SequenceGroupParameter.Value.Value; }
+      set { SequenceGroupParameter.Value.Value = value; }
+    }
+    
     public int Id {
       get { return IdParameter.Value.Value; }
@@ -324,6 +333,7 @@
       : base() {
       Parameters.Add(new ValueParameter<PackingShape>("TargetBin"));
-      Parameters.Add(new FixedValueParameter<DoubleValue>("Weight"));
+      Parameters.Add(new FixedValueParameter<DoubleValue>("Weight"));      
       Parameters.Add(new FixedValueParameter<IntValue>("Layer"));
+      Parameters.Add(new FixedValueParameter<IntValue>("SequenceGroup"));
       Parameters.Add(new FixedValueParameter<IntValue>("Id"));
 
@@ -356,11 +366,10 @@
     }
 
-    public PackingItem(int width, int height, int depth, PackingShape targetBin, double weight, int layer)
+    public PackingItem(int width, int height, int depth, PackingShape targetBin, double weight, int sequenceNumber, int layer)
       : this(width, height, depth, targetBin) {
       this.Weight = weight;
       this.Layer = layer;
-    }
-
-
+      this.SequenceGroup = sequenceNumber;
+    }
 
     public PackingItem(PackingItem packingItem) : this() {
@@ -371,4 +380,5 @@
       Weight = packingItem.Weight;
       Layer = packingItem.Layer;
+      SequenceGroup = packingItem.SequenceGroup;
       Id = packingItem.Id;
       Rotated = packingItem.Rotated;
Index: /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/Sorting/PermutationPackingItemSorter.cs
===================================================================
--- /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/Sorting/PermutationPackingItemSorter.cs	(revision 15821)
+++ /branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/Sorting/PermutationPackingItemSorter.cs	(revision 15822)
@@ -136,5 +136,5 @@
       return new Permutation(PermutationTypes.Absolute,
                     items.Select((v, i) => new { Index = i, Item = v })
-                         .OrderBy(x => x.Item.Layer)
+                         .OrderBy(x => x.Item.SequenceGroup)
                          .ThenByDescending(x => x.Item.Depth * x.Item.Width * x.Item.Height)
                          .ThenByDescending(x => x.Item.Height)
@@ -150,5 +150,5 @@
       return new Permutation(PermutationTypes.Absolute,
                     items.Select((v, i) => new { Index = i, Item = v })
-                         .OrderBy(x => x.Item.Layer)
+                         .OrderBy(x => x.Item.SequenceGroup)
                          .ThenByDescending(x => x.Item.Height)
                          .ThenByDescending(x => x.Item.Depth * x.Item.Width * x.Item.Height)
@@ -164,5 +164,5 @@
       return new Permutation(PermutationTypes.Absolute,
                     items.Select((v, i) => new { Index = i, Item = v })
-                         .OrderBy(x => x.Item.Layer)
+                         .OrderBy(x => x.Item.SequenceGroup)
                          .ThenByDescending(x => x.Item.Depth * x.Item.Width)
                          .ThenByDescending(x => x.Item.Height)
@@ -178,5 +178,5 @@
       return new Permutation(PermutationTypes.Absolute,
                     items.Select((v, i) => new { Index = i, Item = v })
-                         .OrderBy(x => x.Item.Layer)
+                         .OrderBy(x => x.Item.SequenceGroup)
                          .ThenByDescending(x => x.Item.Height)
                          .ThenByDescending(x => x.Item.Depth * x.Item.Width)
@@ -198,5 +198,5 @@
                 items.Select((v, i) => new { Index = i, Item = v, ClusterId = (int)(Math.Ceiling(v.Width * v.Depth / clusterRange)) })
                     .GroupBy(x => x.ClusterId)
-                    .Select(x => new { Cluster = x.Key, Items = x.OrderBy(z => z.Item.Layer).ThenByDescending(y => y.Item.Height).ToList() })
+                    .Select(x => new { Cluster = x.Key, Items = x.OrderBy(z => z.Item.SequenceGroup).ThenByDescending(y => y.Item.Height).ToList() })
                     .OrderByDescending(x => x.Cluster)
                     .SelectMany(x => x.Items)
@@ -218,5 +218,5 @@
                 items.Select((v, i) => new { Index = i, Item = v, ClusterId = (int)(Math.Ceiling(v.Height / clusterRange2)) })
                     .GroupBy(x => x.ClusterId)
-                    .Select(x => new { Cluster = x.Key, Items = x.OrderBy(z => z.Item.Layer).ThenByDescending(y => y.Item.Depth * y.Item.Width).ToList() })
+                    .Select(x => new { Cluster = x.Key, Items = x.OrderBy(z => z.Item.SequenceGroup).ThenByDescending(y => y.Item.Depth * y.Item.Width).ToList() })
                     .OrderByDescending(x => x.Cluster)
                     .SelectMany(x => x.Items)
