Index: /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/BinPacking2D.cs
===================================================================
--- /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/BinPacking2D.cs	(revision 14054)
+++ /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/BinPacking2D.cs	(revision 14055)
@@ -85,12 +85,12 @@
     }
 
-    public override PackingPosition FindExtremePointForItem(PackingItem measures, bool rotated, bool stackingConstraints) {
-      PackingItem item = new PackingItem(
-        rotated ? measures.Height : measures.Width,
-        rotated ? measures.Width : measures.Height,
-        measures.TargetBin);
+    public override PackingPosition FindExtremePointForItem(PackingItem item, bool rotated, bool stackingConstraints) {
+      PackingItem rotatedItem = new PackingItem(
+        rotated ? item.Height : item.Width,
+        rotated ? item.Width : item.Height,
+        item.TargetBin);
 
       int epIndex = 0;
-      while (epIndex < ExtremePoints.Count && (!IsPositionFeasible(item, ExtremePoints.ElementAt(epIndex)))) { epIndex++; }
+      while (epIndex < ExtremePoints.Count && (!IsPositionFeasible(rotatedItem, ExtremePoints.ElementAt(epIndex)))) { epIndex++; }
 
       if (epIndex < ExtremePoints.Count) {
@@ -102,26 +102,26 @@
       return null;
     }
-    public override PackingPosition FindPositionBySliding(PackingItem measures, bool rotated) {
+    public override PackingPosition FindPositionBySliding(PackingItem item, bool rotated) {
       PackingPosition currentPosition = new PackingPosition(0,
-        BinMeasures.Width - (rotated ? measures.Height : measures.Width),
-        BinMeasures.Height - (rotated ? measures.Width : measures.Height), rotated);
+        BinMeasures.Width - (rotated ? item.Height : item.Width),
+        BinMeasures.Height - (rotated ? item.Width : item.Height), rotated);
       //Slide the item as far as possible to the left
-      while (IsPositionFeasible(measures, PackingPosition.MoveLeft(currentPosition))
-        || IsPositionFeasible(measures, PackingPosition.MoveDown(currentPosition))) {
+      while (IsPositionFeasible(item, PackingPosition.MoveLeft(currentPosition))
+        || IsPositionFeasible(item, PackingPosition.MoveDown(currentPosition))) {
         //Slide the item as far as possible to the bottom
-        while (IsPositionFeasible(measures, PackingPosition.MoveDown(currentPosition))) {
+        while (IsPositionFeasible(item, PackingPosition.MoveDown(currentPosition))) {
           currentPosition = PackingPosition.MoveDown(currentPosition);
         }
-        if (IsPositionFeasible(measures, PackingPosition.MoveLeft(currentPosition)))
+        if (IsPositionFeasible(item, PackingPosition.MoveLeft(currentPosition)))
           currentPosition = PackingPosition.MoveLeft(currentPosition);
       }
 
-      return IsPositionFeasible(measures, currentPosition) ? currentPosition : null;
-    }
-
-    public override void SlidingBasedPacking(ref List<int> sequence, ItemList<PackingItem> itemMeasures) {
+      return IsPositionFeasible(item, currentPosition) ? currentPosition : null;
+    }
+
+    public override void SlidingBasedPacking(ref List<int> sequence, ItemList<PackingItem> items) {
       var temp = new List<int>(sequence);
       for (int i = 0; i < temp.Count; i++) {
-        var item = itemMeasures[temp[i]];
+        var item = items[temp[i]];
         var position = FindPositionBySliding(item, false);
         if (position != null) {
@@ -131,8 +131,8 @@
       }
     }
-    public override void SlidingBasedPacking(ref List<int> sequence, ItemList<PackingItem> itemMeasures, Dictionary<int, bool> rotationArray) {
+    public override void SlidingBasedPacking(ref List<int> sequence, ItemList<PackingItem> items, Dictionary<int, bool> rotationArray) {
       var temp = new List<int>(sequence);
       for (int i = 0; i < temp.Count; i++) {
-        var item = itemMeasures[temp[i]];
+        var item = items[temp[i]];
         var position = FindPositionBySliding(item, rotationArray[temp[i]]);
         if (position != null) {
@@ -142,8 +142,8 @@
       }
     }
-    public override void ExtremePointBasedPacking(ref List<int> sequence, ItemList<PackingItem> itemMeasures, bool stackingConstraints) {
+    public override void ExtremePointBasedPacking(ref List<int> sequence, ItemList<PackingItem> items, bool stackingConstraints) {
       var temp = new List<int>(sequence);
       foreach (int itemID in temp) {
-        var item = itemMeasures[itemID];
+        var item = items[itemID];
         var positionFound = FindExtremePointForItem(item, false, false);
         if (positionFound != null) {
@@ -153,8 +153,8 @@
       }
     }
-    public override void ExtremePointBasedPacking(ref List<int> sequence, ItemList<PackingItem> itemMeasures, bool stackingConstraints, Dictionary<int, bool> rotationArray) {
+    public override void ExtremePointBasedPacking(ref List<int> sequence, ItemList<PackingItem> items, bool stackingConstraints, Dictionary<int, bool> rotationArray) {
       var temp = new List<int>(sequence);
       foreach (int itemID in temp) {
-        var item = itemMeasures[itemID];
+        var item = items[itemID];
         var positionFound = FindExtremePointForItem(item, rotationArray[itemID], false);
         if (positionFound != null) {
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 14054)
+++ /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/HeuristicLab.Problems.BinPacking2D-3.3.csproj	(revision 14055)
@@ -169,5 +169,4 @@
     <Compile Include="Instances\BPPORLIBDataDescriptor.cs" />
     <Compile Include="Instances\BPPORLIBParser.cs" />
-    <Compile Include="Instances\RealBPPData.cs" />
     <Compile Include="Interfaces\I2DGVDecoder.cs" />
     <Compile Include="Interfaces\I2DMCVDecoder.cs" />
Index: /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Instances/BPPData.cs
===================================================================
--- /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Instances/BPPData.cs	(revision 14054)
+++ /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Instances/BPPData.cs	(revision 14055)
@@ -23,10 +23,5 @@
 
 namespace HeuristicLab.Problems.BinPacking2D {
-  /// <summary>
-  /// Describes instances of the regular two dimensional bin packing problem (2DBPP).
 
-  /// </summary>
-
-  // TODO implement specifically for 2d and 3d instances
   public class BPPData {
     /// <summary>
@@ -42,14 +37,7 @@
     /// The number of items.
     /// </summary>
-    public int Items { get; set; }
-    /// <summary>
-    /// The measures of the bin.
-    /// </summary>
-    public int[] BinMeasures { get; set; }
-    /// <summary>
-    /// The measures of the items.
-    /// </summary>
-    public int[][] ItemMeasures { get; set; }
-
+    public int NumItems { get { return Items == null ? 0 : Items.Length; } }
+    public PackingShape BinShape { get; set; }
+    public PackingItem[] Items { get; set; }
     /// <summary>
     /// Optional! The quality of the best-known solution.
Index: /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Instances/BPPInstanceProvider.cs
===================================================================
--- /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Instances/BPPInstanceProvider.cs	(revision 14054)
+++ /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Instances/BPPInstanceProvider.cs	(revision 14055)
@@ -42,5 +42,5 @@
 
     public override Uri WebLink {
-      get { return new Uri("http://people.brunel.ac.uk/~mastjjb/jeb/orlib/binpacktwoinfo.html , http://www.diku.dk/~pisinger/new3dbpp/readme.3dbpp"); }
+      get { return new Uri("http://people.brunel.ac.uk/~mastjjb/jeb/orlib/binpacktwoinfo.html"); }
     }
 
@@ -74,7 +74,5 @@
 
         using (var stream = entry.Open()) {
-          var parser = new BPPORLIBParser();
-          parser.Parse(stream);
-          var instance = Load(parser);
+          var instance = BPPORLIBParser.Parse(stream);
           instance.Name = id.Name;
           instance.Description = id.Description;
@@ -89,18 +87,7 @@
     }
     public override BPPData ImportData(string path) {
-      var parser = new BPPORLIBParser();
-      parser.Parse(path);
-      var instance = Load(parser);
+      var instance = BPPORLIBParser.Parse(path);
       instance.Name = Path.GetFileName(path);
       instance.Description = "Loaded from file \"" + path + "\" on " + DateTime.Now;
-      return instance;
-    }
-
-    private BPPData Load(BPPORLIBParser parser) {
-      var instance = new BPPData {
-        Items = parser.Items,
-        BinMeasures = parser.BinMeasures,
-        ItemMeasures = parser.ItemMeasures
-      };
       return instance;
     }
@@ -111,12 +98,5 @@
 
     public override void ExportData(BPPData instance, string path) {
-      var parser = new BPPORLIBParser {
-        Name = instance.Name,
-        Description = instance.Description,
-        Items = instance.Items,
-        BinMeasures = instance.BinMeasures,
-        ItemMeasures = instance.ItemMeasures
-      };
-      parser.Export(path);
+      BPPORLIBParser.Export(instance, path);
     }
 
Index: /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Instances/BPPORLIBParser.cs
===================================================================
--- /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Instances/BPPORLIBParser.cs	(revision 14054)
+++ /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Instances/BPPORLIBParser.cs	(revision 14055)
@@ -25,31 +25,14 @@
 
 namespace HeuristicLab.Problems.BinPacking2D {
-  public class BPPORLIBParser {
-    public string Name { get; set; }
-    public string Description { get; set; }
-    public int Items { get; set; }
-    public int[] BinMeasures { get; set; }
-    public int[][] ItemMeasures { get; set; }
-
-    public BPPORLIBParser() {
-      Reset();
-    }
-
-    public void Reset() {
-      Name = Description = String.Empty;
-      Items = 0;
-      BinMeasures = null;
-      ItemMeasures = null;
-    }
-
-    public void Parse(string file) {
+  public static class BPPORLIBParser {
+    public static BPPData Parse(string file) {
       using (Stream stream = new FileStream(file, FileMode.Open, FileAccess.Read)) {
-        Parse(stream);
+        return Parse(stream);
       }
     }
 
-    public void Export(string file) {
+    public static void Export(BPPData instance, string file) {
       using (Stream stream = new FileStream(file, FileMode.Open, FileAccess.Read)) {
-        Export(stream);
+        Export(instance, stream);
       }
     }
@@ -62,80 +45,59 @@
     /// </remarks>
     /// <param name="stream">The stream to read data from.</param>
-    /// <returns>True if the file was successfully read or false otherwise.</returns>
-    public void Parse(Stream stream) {
-      var reader = new StreamReader(stream);
-      var delim = new char[] { ' ', '\t' };
-      var problemClass = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries);
+    /// <returns>The parsed problem instance</returns>
+    public static BPPData Parse(Stream stream) {
+      using (var reader = new StreamReader(stream)) {
+        var instance = new BPPData();
+        var delim = new char[] { ' ', '\t' };
+        var problemClass = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries);
 
-      var nrOfItems = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries);
-      Items = int.Parse(nrOfItems[0]);
-      //Numbering of instances..
-      reader.ReadLine();
-      var binMeasures = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries);
-      int depth;
-      bool isThreeDimensional = false;
-      if (int.TryParse(binMeasures[2], out depth)) {
-        isThreeDimensional = true;
-        BinMeasures = new int[3];
-        BinMeasures[0] = int.Parse(binMeasures[0]);
-        BinMeasures[1] = int.Parse(binMeasures[1]);
-        BinMeasures[2] = depth;
-      } else {
-        BinMeasures = new int[2];
-        BinMeasures[0] = int.Parse(binMeasures[0]);
-        BinMeasures[1] = int.Parse(binMeasures[1]);
+        var tok = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries);
+        var numItems = int.Parse(tok[0]);
+        //Numbering of instances..
+        reader.ReadLine();
+        tok = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries);
+        instance.BinShape = new PackingShape(int.Parse(tok[0]), int.Parse(tok[1]));
+        instance.Items = new PackingItem[numItems];
+
+        for (int k = 0; k < numItems; k++) {
+          if (reader.EndOfStream) throw new InvalidDataException("Unexpected End of Stream (at line " + k + ").");
+          var valLine = reader.ReadLine();
+          while (String.IsNullOrWhiteSpace(valLine)) valLine = reader.ReadLine();
+          tok = valLine.Split(delim, StringSplitOptions.RemoveEmptyEntries);
+          instance.Items[k] = new PackingItem(int.Parse(tok[0]), int.Parse(tok[1]), instance.BinShape) { Material = 1, Weight = 1.0 }; // these problem instances do not specify weights and materials
+        }
+
+        int problemClassNr = -1;
+        if (int.TryParse(problemClass[0], out problemClassNr)) {
+          instance.Name = "dbpp_class_0" + problemClassNr;
+          if (problemClassNr >= 1 && problemClassNr <= 5)
+            instance.Description = "Proposed by Berkey and Wang.";
+          else if (problemClassNr >= 6 && problemClassNr <= 10)
+            instance.Description = "Proposed by Martello and Vigo.";
+        } else {
+          instance.Name = "Unknown";
+          instance.Description = "<Missing>";
+        }
+
+        return instance;
       }
-      ItemMeasures = new int[Items][];
-
-      for (int k = 0; k < Items; k++) {
-        if (reader.EndOfStream) throw new InvalidDataException("Unexpected End of Stream (at line " + k + ").");
-        var valLine = reader.ReadLine();
-        while (String.IsNullOrWhiteSpace(valLine)) valLine = reader.ReadLine();
-        var vals = valLine.Split(delim, StringSplitOptions.RemoveEmptyEntries);
-        ItemMeasures[k] = new int[isThreeDimensional ? 3 : 2];
-        ItemMeasures[k][0] = int.Parse(vals[0]);
-        ItemMeasures[k][1] = int.Parse(vals[1]);
-        if (isThreeDimensional)
-          ItemMeasures[k][2] = int.Parse(vals[2]);
-      }
-
-      Int32 problemClassNr = -1;
-      if (int.TryParse(problemClass[0], out problemClassNr)) {
-        Name = (isThreeDimensional ? "3" : "2") + "dbpp_class_0" + problemClassNr;
-        if (!isThreeDimensional) {
-          if (problemClassNr >= 1 && problemClassNr <= 5)
-            Description = "Proposed by Berkey and Wang.";
-          else if (problemClassNr >= 6 && problemClassNr <= 10)
-            Description = "Proposed by Martello and Vigo.";
-        } else {
-          if (problemClassNr >= 1 && problemClassNr <= 5)
-            Description = "Proposed by Martello and Vigo.";
-          else if (problemClassNr >= 6 && problemClassNr <= 9)
-            Description = "Proposed by Berkey and Wang.";
-        }
-      } else {
-        Name = "Unknown";
-        Description = "<Missing>";
-      }
-
-
     }
 
-    public void Export(Stream stream) {
-      bool isThreeDimensional = BinMeasures.Length == 3;
-      var nameParts = Name.Split('_');
+    public static void Export(BPPData instance, Stream stream) {
+      var nameParts = instance.Name.Split('_');
       int problemClassNr = int.Parse(nameParts[2]);
 
-      var writer = new StreamWriter(stream);
-      writer.WriteLine(String.Format("{0,-5}               PROBLEM CLASS ({1})", problemClassNr, Description));
-      writer.WriteLine(String.Format("{0,-5} {1,-5} {2,-5}   WBIN,HBIN,DBIN", BinMeasures[0], BinMeasures[1], BinMeasures[2]));
-      for (int i = 0; i < Items; i++) {
-        if (i == 0)
-          writer.WriteLine("{0,-5} {1,-5} {2,-5}   W(I),H(I),D(I),I=1,...,N", ItemMeasures[i][0], ItemMeasures[i][1], ItemMeasures[i][2]);
-        else
-          writer.WriteLine("{0,-5} {1,-5} {2,-5}", ItemMeasures[i][0], ItemMeasures[i][1], ItemMeasures[i][2]);
+      using (var writer = new StreamWriter(stream)) {
+        writer.WriteLine(String.Format("{0,-5}               PROBLEM CLASS ({1})", problemClassNr, instance.Description));
+        writer.WriteLine(String.Format("{0,-5} {1,-5}   WBIN,HBIN", instance.BinShape.Width, instance.BinShape.Height));
+        for (int i = 0; i < instance.NumItems; i++) {
+          if (i == 0)
+            writer.WriteLine("{0,-5} {1,-5}   W(I),H(I),I=1,...,N", instance.Items[i].Width, instance.Items[i].Height);
+          else
+            writer.WriteLine("{0,-5} {1,-5}", instance.Items[i].Width, instance.Items[i].Height);
 
+        }
+        writer.Flush();
       }
-      writer.Flush();
     }
 
Index: anches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Instances/RealBPPData.cs
===================================================================
--- /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Instances/RealBPPData.cs	(revision 14054)
+++ 	(revision )
@@ -1,39 +1,0 @@
-﻿#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
-
-
-
-namespace HeuristicLab.Problems.BinPacking2D {
-  /// <summary>
-  /// Describes instances of the regular two dimensional bin packing problem (2DBPP).
-  /// </summary>
-  public class RealBPPData : BPPData {
-    /// <summary>
-    /// The weight of the items.
-    /// </summary>
-    public double[] ItemWeights { get; set; }
-    /// <summary>
-    /// The category of packing material for each item.
-    /// </summary>
-    public int[] ItemMaterials { get; set; }
-
-  }
-}
Index: /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Problem.cs
===================================================================
--- /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Problem.cs	(revision 14054)
+++ /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.2D/3.3/Problem.cs	(revision 14055)
@@ -44,45 +44,44 @@
       Name = "2D BPP Default Instance",
       Description = "The default instance for 2D Bin Packing.",
-      BinMeasures = new int[] { 20, 16 },
-      ItemMeasures = new int[][] {
-        new int[] {3,8},
-        new int[] {5,3},
-        new int[] {9,3},
-        new int[] {2,7},
-        new int[] {5,3},
-        new int[] {9,3},
-        new int[] {2,7},
-        new int[] {5,3},
-        new int[] {9,3},
-        new int[] {2,7},
-        new int[] {5,3},
-        new int[] {9,3},
-        new int[] {2,7},
-        new int[] {5,3},
-        new int[] {9,3},
-        new int[] {2,7},
-        new int[] {5,3},
-        new int[] {9,3},
-        new int[] {2,7},
-        new int[] {5,3},
-        new int[] {9,3},
-        new int[] {2,7},
-        new int[] {5,3},
-        new int[] {9,3},
-        new int[] {2,7},
-        new int[] {5,3},
-        new int[] {9,3},
-        new int[] {2,7},
-        new int[] {5,3},
-        new int[] {9,3},
-        new int[] {2,7},
-        new int[] {5,3},
-        new int[] {9,3},
-        new int[] {2,7},
-        new int[] {5,3},
-        new int[] {9,3},
-        new int[] {2,7}
+      BinShape = new PackingShape(20, 16),
+      Items = new PackingItem[] {
+        new PackingItem(3,  8, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(5,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(9,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(2,  7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(5,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(9,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(2,  7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(5,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(9,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(2,  7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(5,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(9,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(2,  7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(5,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(9,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(2,  7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(5,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(9,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(2,  7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(5,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(9,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(2,  7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(5,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(9,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(2,  7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(5,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(9,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(2,  7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(5,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(9,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(2,  7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(5,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(9,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(2,  7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(5,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(9,  3, new PackingShape(20, 16)) { Material = 1, Weight = 1.0},
+        new PackingItem(2,  7, new PackingShape(20, 16)) { Material = 1, Weight = 1.0}
       },
-      Items = 30
     };
     #endregion
@@ -91,5 +90,5 @@
     protected Problem(bool deserializing) : base(deserializing) { }
     protected Problem(Problem original, Cloner cloner)
-      : base(original, cloner) {
+          : base(original, cloner) {
     }
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -97,27 +96,14 @@
     }
     public Problem() : base(
-      new DecodingEvaluator<Permutation, PackingPosition, PackingShape, PackingItem>()) {
+          new DecodingEvaluator<Permutation, PackingPosition, PackingShape, PackingItem>()) {
     }
 
     #region Problem instance handling
     public void Load(BPPData data) {
-      var realData = data as RealBPPData;
-      var binData = new PackingShape(data.BinMeasures[0], data.BinMeasures[1]);
-
-      var itemData = new ItemList<PackingItem>(data.Items);
-      for (int j = 0; j < data.Items; j++) {
-        var bin = new PackingShape(data.BinMeasures[0], data.BinMeasures[1]);
-        var item = new PackingItem(data.ItemMeasures[j][0], data.ItemMeasures[j][1], bin);
-        if (realData != null) {
-          item.Weight = realData.ItemWeights[j];
-          item.Material = realData.ItemMaterials[j];
-        }
-        itemData.Add(item);
-      }
 
       BestKnownQuality = data.BestKnownQuality.HasValue ? new DoubleValue(data.BestKnownQuality.Value) : null;
 
-      PackingBinMeasures = binData;
-      PackingItemMeasures = itemData;
+      PackingBinMeasures = data.BinShape;
+      PackingItemMeasures = new ItemList<PackingItem>(data.Items);
 
       ApplyHorizontalOrientation();
@@ -129,19 +115,10 @@
 
     public BPPData Export() {
-      var result = new BPPData {
+      return new BPPData {
         Name = Name,
         Description = Description,
-        Items = PackingItemsParameter.Value.Value,
-        BinMeasures = new int[] { PackingBinMeasures.Width, PackingBinMeasures.Height }
+        BinShape = PackingBinMeasures,
+        Items = PackingItemMeasures.ToArray()
       };
-
-      var itemMeasures = new int[result.Items][];
-      int i = 0;
-      foreach (var item in PackingItemMeasures) {
-        itemMeasures[i] = new int[] { item.Width, item.Height };
-        i++;
-      }
-      result.ItemMeasures = itemMeasures;
-      return result;
     }
     #endregion
Index: /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/HeuristicLab.Problems.BinPacking3D-3.3.csproj
===================================================================
--- /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/HeuristicLab.Problems.BinPacking3D-3.3.csproj	(revision 14054)
+++ /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/HeuristicLab.Problems.BinPacking3D-3.3.csproj	(revision 14055)
@@ -173,5 +173,4 @@
     <Compile Include="Instances\BPPORLIBDataDescriptor.cs" />
     <Compile Include="Instances\BPPORLIBParser.cs" />
-    <Compile Include="Instances\RealBPPData.cs" />
     <Compile Include="MoveEvaluators\PackingMoveEvaluator3DGV.cs" />
     <Compile Include="MoveEvaluators\PackingMoveEvaluator3DMCV.cs" />
Index: /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Instances/BPPData.cs
===================================================================
--- /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Instances/BPPData.cs	(revision 14054)
+++ /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Instances/BPPData.cs	(revision 14055)
@@ -23,7 +23,5 @@
 
 namespace HeuristicLab.Problems.BinPacking3D {
-  /// <summary>
-  /// Describes instances of the regular three dimensional bin packing problem (3DBPP).
-  /// </summary>
+
   public class BPPData {
     /// <summary>
@@ -39,14 +37,7 @@
     /// The number of items.
     /// </summary>
-    public int Items { get; set; }
-    /// <summary>
-    /// The measures of the bin.
-    /// </summary>
-    public int[] BinMeasures { get; set; }
-    /// <summary>
-    /// The measures of the items.
-    /// </summary>
-    public int[][] ItemMeasures { get; set; }
-
+    public int NumItems { get { return Items == null ? 0 : Items.Length; } }
+    public PackingShape BinShape { get; set; }
+    public PackingItem[] Items { get; set; }
     /// <summary>
     /// Optional! The quality of the best-known solution.
Index: /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Instances/BPPInstanceProvider.cs
===================================================================
--- /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Instances/BPPInstanceProvider.cs	(revision 14054)
+++ /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Instances/BPPInstanceProvider.cs	(revision 14055)
@@ -30,5 +30,5 @@
 using HeuristicLab.Problems.Instances;
 
-namespace HeuristicLab.Problems.BinPacking3D { 
+namespace HeuristicLab.Problems.BinPacking3D {
   public class BPPORLIBInstanceProvider : ProblemInstanceProvider<BPPData>, IProblemInstanceProvider<BPPData> {
 
@@ -42,5 +42,5 @@
 
     public override Uri WebLink {
-      get { return new Uri("http://people.brunel.ac.uk/~mastjjb/jeb/orlib/binpacktwoinfo.html , http://www.diku.dk/~pisinger/new3dbpp/readme.3dbpp"); }
+      get { return new Uri("http://www.diku.dk/~pisinger/new3dbpp/readme.3dbpp"); }
     }
 
@@ -59,7 +59,7 @@
           if (string.IsNullOrWhiteSpace(entry.Name)) continue;
           yield return new BPPORLIBDataDescriptor(
-            name: Path.GetFileNameWithoutExtension(entry.Name), 
-            description: GetDescription(), 
-            instanceIdentifier: entry.FullName, 
+            name: Path.GetFileNameWithoutExtension(entry.Name),
+            description: GetDescription(),
+            instanceIdentifier: entry.FullName,
             solutionIdentifier: null);
         }
@@ -74,7 +74,5 @@
 
         using (var stream = entry.Open()) {
-          var parser = new BPPORLIBParser();
-          parser.Parse(stream);
-          var instance = Load(parser);
+          var instance = BPPORLIBParser.Parse(stream);
           instance.Name = id.Name;
           instance.Description = id.Description;
@@ -89,18 +87,7 @@
     }
     public override BPPData ImportData(string path) {
-      var parser = new BPPORLIBParser();
-      parser.Parse(path);
-      var instance = Load(parser);
+      var instance = BPPORLIBParser.Parse(path);
       instance.Name = Path.GetFileName(path);
       instance.Description = "Loaded from file \"" + path + "\" on " + DateTime.Now;
-      return instance;
-    }
-
-    private BPPData Load(BPPORLIBParser parser) {
-      var instance = new BPPData {
-        Items = parser.Items,
-        BinMeasures = parser.BinMeasures,
-        ItemMeasures = parser.ItemMeasures
-      };
       return instance;
     }
@@ -111,12 +98,5 @@
 
     public override void ExportData(BPPData instance, string path) {
-      var parser = new BPPORLIBParser {
-        Name = instance.Name,
-        Description = instance.Description,
-        Items = instance.Items,
-        BinMeasures = instance.BinMeasures,
-        ItemMeasures = instance.ItemMeasures
-      };
-      parser.Export(path);
+      BPPORLIBParser.Export(instance, path);
     }
 
Index: /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Instances/BPPORLIBParser.cs
===================================================================
--- /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Instances/BPPORLIBParser.cs	(revision 14054)
+++ /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Instances/BPPORLIBParser.cs	(revision 14055)
@@ -25,31 +25,14 @@
 
 namespace HeuristicLab.Problems.BinPacking3D {
-  public class BPPORLIBParser {
-    public string Name { get; set; }
-    public string Description { get; set; }
-    public int Items { get; set; }
-    public int[] BinMeasures { get; set; }
-    public int[][] ItemMeasures { get; set; }
-
-    public BPPORLIBParser() {
-      Reset();
-    }
-
-    public void Reset() {
-      Name = Description = String.Empty;
-      Items = 0;
-      BinMeasures = null;
-      ItemMeasures = null;
-    }
-
-    public void Parse(string file) {
+  public static class BPPORLIBParser {
+    public static BPPData Parse(string file) {
       using (Stream stream = new FileStream(file, FileMode.Open, FileAccess.Read)) {
-        Parse(stream);
+        return Parse(stream);
       }
     }
 
-    public void Export(string file) {
+    public static void Export(BPPData instance, string file) {
       using (Stream stream = new FileStream(file, FileMode.Open, FileAccess.Read)) {
-        Export(stream);
+        Export(instance, stream);
       }
     }
@@ -62,80 +45,59 @@
     /// </remarks>
     /// <param name="stream">The stream to read data from.</param>
-    /// <returns>True if the file was successfully read or false otherwise.</returns>
-    public void Parse(Stream stream) {
-      var reader = new StreamReader(stream);
-      var delim = new char[] { ' ', '\t' };
-      var problemClass = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries);
+    /// <returns>The parsed problem instance</returns>
+    public static BPPData Parse(Stream stream) {
+      using (var reader = new StreamReader(stream)) {
+        var instance = new BPPData();
+        var delim = new char[] { ' ', '\t' };
+        var problemClass = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries);
 
-      var nrOfItems = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries);
-      Items = int.Parse(nrOfItems[0]);
-      //Numbering of instances..
-      reader.ReadLine();
-      var binMeasures = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries);
-      int depth;
-      bool isThreeDimensional = false;
-      if (int.TryParse(binMeasures[2], out depth)) {
-        isThreeDimensional = true;
-        BinMeasures = new int[3];
-        BinMeasures[0] = int.Parse(binMeasures[0]);
-        BinMeasures[1] = int.Parse(binMeasures[1]);
-        BinMeasures[2] = depth;
-      } else {
-        BinMeasures = new int[2];
-        BinMeasures[0] = int.Parse(binMeasures[0]);
-        BinMeasures[1] = int.Parse(binMeasures[1]);
+        var tok = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries);
+        var numItems = int.Parse(tok[0]);
+        //Numbering of instances..
+        reader.ReadLine();
+        tok = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries);
+        instance.BinShape = new PackingShape(int.Parse(tok[0]), int.Parse(tok[1]), int.Parse(tok[2]));
+        instance.Items = new PackingItem[numItems];
+
+        for (int k = 0; k < numItems; k++) {
+          if (reader.EndOfStream) throw new InvalidDataException("Unexpected End of Stream (at line " + k + ").");
+          var valLine = reader.ReadLine();
+          while (String.IsNullOrWhiteSpace(valLine)) valLine = reader.ReadLine();
+          tok = valLine.Split(delim, StringSplitOptions.RemoveEmptyEntries);
+          instance.Items[k] = new PackingItem(int.Parse(tok[0]), int.Parse(tok[1]), int.Parse(tok[2]), instance.BinShape) { Material = 1, Weight = 1.0 }; // these problem instances do not specify weights and materials
+        }
+
+        int problemClassNr = -1;
+        if (int.TryParse(problemClass[0], out problemClassNr)) {
+          instance.Name = "dbpp_class_0" + problemClassNr;
+          if (problemClassNr >= 1 && problemClassNr <= 5)
+            instance.Description = "Proposed by Martello and Vigo.";
+          else if (problemClassNr >= 6 && problemClassNr <= 9)
+            instance.Description = "Proposed by Berkey and Wang.";
+        } else {
+          instance.Name = "Unknown";
+          instance.Description = "<Missing>";
+        }
+
+        return instance;
       }
-      ItemMeasures = new int[Items][];
-
-      for (int k = 0; k < Items; k++) {
-        if (reader.EndOfStream) throw new InvalidDataException("Unexpected End of Stream (at line " + k + ").");
-        var valLine = reader.ReadLine();
-        while (String.IsNullOrWhiteSpace(valLine)) valLine = reader.ReadLine();
-        var vals = valLine.Split(delim, StringSplitOptions.RemoveEmptyEntries);
-        ItemMeasures[k] = new int[isThreeDimensional ? 3 : 2];
-        ItemMeasures[k][0] = int.Parse(vals[0]);
-        ItemMeasures[k][1] = int.Parse(vals[1]);
-        if (isThreeDimensional)
-          ItemMeasures[k][2] = int.Parse(vals[2]);
-      }
-
-      Int32 problemClassNr = -1;
-      if (int.TryParse(problemClass[0], out problemClassNr)) {
-        Name = (isThreeDimensional ? "3" : "2") + "dbpp_class_0" + problemClassNr;
-        if (!isThreeDimensional) {
-          if (problemClassNr >= 1 && problemClassNr <= 5)
-            Description = "Proposed by Berkey and Wang.";
-          else if (problemClassNr >= 6 && problemClassNr <= 10)
-            Description = "Proposed by Martello and Vigo.";
-        } else {
-          if (problemClassNr >= 1 && problemClassNr <= 5)
-            Description = "Proposed by Martello and Vigo.";
-          else if (problemClassNr >= 6 && problemClassNr <= 9)
-            Description = "Proposed by Berkey and Wang.";
-        }
-      } else {
-        Name = "Unknown";
-        Description = "<Missing>";
-      }
-
-
     }
 
-    public void Export(Stream stream) {
-      bool isThreeDimensional = BinMeasures.Length == 3;
-      var nameParts = Name.Split('_');
+    public static void Export(BPPData instance, Stream stream) {
+      var nameParts = instance.Name.Split('_');
       int problemClassNr = int.Parse(nameParts[2]);
 
-      var writer = new StreamWriter(stream);
-      writer.WriteLine(String.Format("{0,-5}               PROBLEM CLASS ({1})", problemClassNr, Description));
-      writer.WriteLine(String.Format("{0,-5} {1,-5} {2,-5}   WBIN,HBIN,DBIN", BinMeasures[0], BinMeasures[1], BinMeasures[2]));
-      for (int i = 0; i < Items; i++) {
-        if (i == 0)
-          writer.WriteLine("{0,-5} {1,-5} {2,-5}   W(I),H(I),D(I),I=1,...,N", ItemMeasures[i][0], ItemMeasures[i][1], ItemMeasures[i][2]);
-        else
-          writer.WriteLine("{0,-5} {1,-5} {2,-5}", ItemMeasures[i][0], ItemMeasures[i][1], ItemMeasures[i][2]);
+      using (var writer = new StreamWriter(stream)) {
+        writer.WriteLine(String.Format("{0,-5}               PROBLEM CLASS ({1})", problemClassNr, instance.Description));
+        writer.WriteLine(String.Format("{0,-5} {1,-5} {2,-5}   WBIN,HBIN", instance.BinShape.Width, instance.BinShape.Height, instance.BinShape.Depth));
+        for (int i = 0; i < instance.NumItems; i++) {
+          if (i == 0)
+            writer.WriteLine("{0,-5} {1,-5} {2,-5}   W(I),H(I)D(I),I=1,...,N", instance.Items[i].Width, instance.Items[i].Height, instance.Items[i].Depth);
+          else
+            writer.WriteLine("{0,-5} {1,-5} {2,-5}", instance.Items[i].Width, instance.Items[i].Height, instance.Items[i].Depth);
 
+        }
+        writer.Flush();
       }
-      writer.Flush();
     }
 
Index: anches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Instances/RealBPPData.cs
===================================================================
--- /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Instances/RealBPPData.cs	(revision 14054)
+++ 	(revision )
@@ -1,39 +1,0 @@
-﻿#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
-
-
-
-namespace HeuristicLab.Problems.BinPacking3D {
-  /// <summary>
-  /// Describes instances of the regular three dimensional bin packing problem (3DBPP).
-  /// </summary>
-  public class RealBPPData : BPPData {
-    /// <summary>
-    /// The weight of the items.
-    /// </summary>
-    public double[] ItemWeights { get; set; }
-    /// <summary>
-    /// The category of packing material for each item.
-    /// </summary>
-    public int[] ItemMaterials { get; set; }
-
-  }
-}
Index: /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Problem.cs
===================================================================
--- /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Problem.cs	(revision 14054)
+++ /branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Problem.cs	(revision 14055)
@@ -37,57 +37,53 @@
   [StorableClass]
   [Creatable(CreatableAttribute.Categories.CombinatorialProblems, Priority = 310)]
-  // TODO don't support generic BPPData but only 3d BPPData
   public class Problem : Problem<PackingPosition, PackingShape, PackingItem>, IProblemInstanceConsumer<BPPData>, IProblemInstanceExporter<BPPData> {
-
-
     #region Default Instance
     private static readonly BPPData DefaultInstance = new BPPData() {
       Name = "3D BPP Default Instance",
       Description = "The default instance for 3D Bin Packing.",
-      BinMeasures = new int[] { 25, 25, 35 },
-      ItemMeasures = new int[][] {
-        new int[] {12,5,10},
-        new int[] {10,18,20},
-        new int[] {9,7,7},
-        new int[] {21,12,4},
-        new int[] {8,8,12},
-        new int[] {3,6,14},
-        new int[] {20,4,9},
-        new int[] {5,9,8},
-        new int[] {7,17,3},
-        new int[] {13,20,15},
-        new int[] {9,11,9},
-        new int[] {10,18,20},
-        new int[] {9,7,7},
-        new int[] {21,12,4},
-        new int[] {8,8,12},
-        new int[] {3,6,14},
-        new int[] {20,4,9},
-        new int[] {5,9,8},
-        new int[] {7,17,3},
-        new int[] {13,20,15},
-        new int[] {9,11,9},
-        new int[] {10,18,20},
-        new int[] {9,7,7},
-        new int[] {21,12,4},
-        new int[] {8,8,12},
-        new int[] {3,6,14},
-        new int[] {20,4,9},
-        new int[] {5,9,8},
-        new int[] {7,17,3},
-        new int[] {13,20,15},
-        new int[] {9,11,9},
-        new int[] {10,18,20},
-        new int[] {9,7,7},
-        new int[] {21,12,4},
-        new int[] {8,8,12},
-        new int[] {3,6,14},
-        new int[] {20,4,9},
-        new int[] {5,9,8},
-        new int[] {7,17,3},
-        new int[] {13,20,15},
-        new int[] {9,11,9}
+      BinShape = new PackingShape(25, 25, 35),
+      Items = new PackingItem[] {
+        new PackingItem(12,5,10, new PackingShape(25,25,35)),
+        new PackingItem(10,18,20, new PackingShape(25,25,35)),
+        new PackingItem(9,7,7, new PackingShape(25,25,35)),
+        new PackingItem(21,12,4, new PackingShape(25,25,35)),
+        new PackingItem(8,8,12, new PackingShape(25,25,35)),
+        new PackingItem(3,6,14, new PackingShape(25,25,35)),
+        new PackingItem(20,4,9, new PackingShape(25,25,35)),
+        new PackingItem(5,9,8, new PackingShape(25,25,35)),
+        new PackingItem(7,17,3, new PackingShape(25,25,35)),
+        new PackingItem(13,20,15, new PackingShape(25,25,35)),
+        new PackingItem(9,11,9, new PackingShape(25,25,35)),
+        new PackingItem(10,18,20, new PackingShape(25,25,35)),
+        new PackingItem(9,7,7, new PackingShape(25,25,35)),
+        new PackingItem(21,12,4, new PackingShape(25,25,35)),
+        new PackingItem(8,8,12, new PackingShape(25,25,35)),
+        new PackingItem(3,6,14, new PackingShape(25,25,35)),
+        new PackingItem(20,4,9, new PackingShape(25,25,35)),
+        new PackingItem(5,9,8, new PackingShape(25,25,35)),
+        new PackingItem(7,17,3, new PackingShape(25,25,35)),
+        new PackingItem(13,20,15, new PackingShape(25,25,35)),
+        new PackingItem(9,11,9, new PackingShape(25,25,35)),
+        new PackingItem(10,18,20, new PackingShape(25,25,35)),
+        new PackingItem(9,7,7, new PackingShape(25,25,35)),
+        new PackingItem(21,12,4, new PackingShape(25,25,35)),
+        new PackingItem(8,8,12, new PackingShape(25,25,35)),
+        new PackingItem(3,6,14, new PackingShape(25,25,35)),
+        new PackingItem(20,4,9, new PackingShape(25,25,35)),
+        new PackingItem(5,9,8, new PackingShape(25,25,35)),
+        new PackingItem(7,17,3, new PackingShape(25,25,35)),
+        new PackingItem(13,20,15, new PackingShape(25,25,35)),
+        new PackingItem(9,11, 9,new PackingShape(25,25,35)),
+        new PackingItem(10,18,20, new PackingShape(25,25,35)),
+        new PackingItem(9,7,7, new PackingShape(25,25,35)),
+        new PackingItem(21,12,4, new PackingShape(25,25,35)),
+        new PackingItem(8,8,12, new PackingShape(25,25,35)),
+        new PackingItem(3,6,14, new PackingShape(25,25,35)),
+        new PackingItem(20,4,9, new PackingShape(25,25,35)),
+        new PackingItem(5,9,8, new PackingShape(25,25,35)),
+        new PackingItem(7,17,3, new PackingShape(25,25,35)),
+        new PackingItem(13,20,15, new PackingShape(25,25,35)),
+        new PackingItem(9,11,9, new PackingShape(25,25,35))
       },
-      Items = 30
     };
     #endregion
@@ -105,25 +101,11 @@
     }
 
+    public void Load(BPPData data) {
 
-
-    public void Load(BPPData data) {
-      var realData = data as RealBPPData;
-      var binData = new PackingShape(data.BinMeasures[0], data.BinMeasures[1], data.BinMeasures[2]);
-
-      var itemData = new ItemList<PackingItem>(data.Items);
-      for (int j = 0; j < data.Items; j++) {
-        var bin = new PackingShape(data.BinMeasures[0], data.BinMeasures[1], data.BinMeasures[2]);
-        var item = new PackingItem(data.ItemMeasures[j][0], data.ItemMeasures[j][1], data.ItemMeasures[j][2], bin);
-        if (realData != null) {
-          item.Weight = realData.ItemWeights[j];
-          item.Material = realData.ItemMaterials[j];
-        }
-        itemData.Add(item);
-      }
 
       BestKnownQuality = data.BestKnownQuality.HasValue ? new DoubleValue(data.BestKnownQuality.Value) : null;
 
-      PackingBinMeasures = binData;
-      PackingItemMeasures = itemData;
+      PackingBinMeasures = data.BinShape;
+      PackingItemMeasures = new ItemList<PackingItem>(data.Items);
 
       ApplyHorizontalOrientation();
@@ -134,19 +116,10 @@
 
     public BPPData Export() {
-      var result = new BPPData {
+      return new BPPData {
         Name = Name,
         Description = Description,
-        Items = PackingItemsParameter.Value.Value,
-        BinMeasures = new int[] { PackingBinMeasures.Width, PackingBinMeasures.Height, PackingBinMeasures.Depth }
+        BinShape = PackingBinMeasures,
+        Items = PackingItemMeasures.ToArray()
       };
-
-      var itemMeasures = new int[result.Items][];
-      int i = 0;
-      foreach (var item in PackingItemMeasures) {
-        itemMeasures[i] = new int[] { item.Width, item.Height, item.Depth };
-        i++;
-      }
-      result.ItemMeasures = itemMeasures;
-      return result;
     }
 
Index: /branches/HeuristicLab.BinPacking/old files/RealBPPData.cs
===================================================================
--- /branches/HeuristicLab.BinPacking/old files/RealBPPData.cs	(revision 14055)
+++ /branches/HeuristicLab.BinPacking/old files/RealBPPData.cs	(revision 14055)
@@ -0,0 +1,38 @@
+﻿#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
+
+
+
+namespace HeuristicLab.Problems.BinPacking2D {
+  /// <summary>
+  /// Describes instances of the regular two dimensional bin packing problem (2DBPP).
+  /// </summary>
+  public class RealBPPData : BPPData {
+    /// <summary>
+    /// The weight of the items.
+    /// </summary>
+    public double[] ItemWeights { get; set; }
+    /// <summary>
+    /// The category of packing material for each item.
+    /// </summary>
+    public int[] ItemMaterials { get; set; }
+  }
+}
