Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj	(revision 13459)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj	(revision 13460)
@@ -154,4 +154,6 @@
     <Reference Include="System.Core" />
     <Reference Include="System.Drawing" />
+    <Reference Include="System.IO.Compression" />
+    <Reference Include="System.IO.Compression.FileSystem" />
     <Reference Include="System.Windows.Forms" />
   </ItemGroup>
@@ -272,4 +274,5 @@
     <Compile Include="Evaluators\Abstract\PackingPlanEvaluator.cs" />
     <Compile Include="Instances\BPPData.cs" />
+    <Compile Include="Instances\BPPInstanceProvider.cs" />
     <Compile Include="Instances\BPPORLIBParser.cs" />
     <Compile Include="Instances\BPPORLIBDataDescriptor.cs" />
@@ -341,5 +344,5 @@
   <ItemGroup>
     <None Include="HeuristicLab.snk" />
-    <None Include="Instances\Data\BPPORLIB.rar" />
+    <EmbeddedResource Include="Instances\Data\BPPORLIB.zip" />
     <None Include="Properties\AssemblyInfo.cs.frame" />
     <None Include="Plugin.cs.frame" />
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Instances/BPPInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Instances/BPPInstanceProvider.cs	(revision 13459)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Instances/BPPInstanceProvider.cs	(revision 13460)
@@ -24,10 +24,12 @@
 using System.Collections.Generic;
 using System.IO;
+using System.IO.Compression;
 using System.Linq;
 using System.Reflection;
 using System.Text.RegularExpressions;
+using System.Windows.Forms;
 
 namespace HeuristicLab.Problems.Instances.BinPacking {
-  public class BPPORLIBInstanceProvider : ProblemInstanceProvider<BPPData> {
+  public class BPPORLIBInstanceProvider : ProblemInstanceProvider<BPPData>, IProblemInstanceProvider<BPPData> {
 
     public override string Name {
@@ -51,7 +53,14 @@
       if (String.IsNullOrEmpty(instanceArchiveName)) yield break;
 
-      using (var instanceStream = new ZipInputStream(GetType().Assembly.GetManifestResourceStream(instanceArchiveName))) {
-        foreach (var entry in GetZipContents(instanceStream).OrderBy(x => x)) {
-          yield return new BPPORLIBDataDescriptor(Path.GetFileNameWithoutExtension(entry), GetDescription(), entry, null);
+
+      using (var file = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName))) {
+
+        foreach (var entry in file.Entries.OrderBy(x => x.Name)) {
+          if (string.IsNullOrWhiteSpace(entry.Name)) continue;
+          yield return new BPPORLIBDataDescriptor(
+            name: Path.GetFileNameWithoutExtension(entry.Name), 
+            description: GetDescription(), 
+            instanceIdentifier: entry.FullName, 
+            solutionIdentifier: null);
         }
       }
@@ -60,9 +69,9 @@
     public override BPPData LoadData(IDataDescriptor id) {
       var descriptor = (BPPORLIBDataDescriptor)id;
-      var instanceArchiveName = GetResourceName("JSSPORLIB.zip");
-      using (var instancesZipFile = new ZipFile(GetType().Assembly.GetManifestResourceStream(instanceArchiveName))) {
+      var instanceArchiveName = GetResourceName("BPPORLIB.zip");
+      using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName))) {
         var entry = instancesZipFile.GetEntry(descriptor.InstanceIdentifier);
 
-        using (var stream = instancesZipFile.GetInputStream(entry)) {
+        using (var stream = entry.Open()) {
           var parser = new BPPORLIBParser();
           parser.Parse(stream);
@@ -84,5 +93,5 @@
       var instance = Load(parser);
       instance.Name = Path.GetFileName(path);
-      instance.Description = "Loaded from file \"" + path + "\" on " + DateTime.Now.ToString();
+      instance.Description = "Loaded from file \"" + path + "\" on " + DateTime.Now;
       return instance;
     }
@@ -120,11 +129,4 @@
         .SingleOrDefault(x => Regex.Match(x, @".*\.Data\." + fileName).Success);
     }
-
-    protected IEnumerable<string> GetZipContents(ZipInputStream zipFile) {
-      ZipEntry entry;
-      while ((entry = zipFile.GetNextEntry()) != null) {
-        yield return entry.Name;
-      }
-    }
   }
 }
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Instances/BPPORLIBParser.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Instances/BPPORLIBParser.cs	(revision 13459)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Instances/BPPORLIBParser.cs	(revision 13460)
@@ -64,6 +64,6 @@
     /// <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 reader = new StreamReader(stream);
+      var delim = new char[] { ' ', '\t' };
       var problemClass = reader.ReadLine().Split(delim, StringSplitOptions.RemoveEmptyEntries);
 
@@ -118,5 +118,5 @@
         Description = "<Missing>";
       }
-      
+
 
     }
@@ -135,4 +135,5 @@
         else
           writer.WriteLine("{0,-5} {1,-5} {2,-5}", ItemMeasures[i][0], ItemMeasures[i][1], ItemMeasures[i][2]);
+
       }
       writer.Flush();
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Problem/CuboidIdenticalBinPackingProblem.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Problem/CuboidIdenticalBinPackingProblem.cs	(revision 13459)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Problem/CuboidIdenticalBinPackingProblem.cs	(revision 13460)
@@ -36,7 +36,7 @@
 
 namespace HeuristicLab.Problems.BinPacking.Problem {
-  [Item("CuboidIdenticalBinPackingProblem", "Represents a three-dimensional bin-packing problem using only bins with identical measures and bins/items with cuboidic shapes.")]
+  [Item("Bin Packing Problem (3D, identical cuboids) (BPP)", "Represents a three-dimensional bin-packing problem using only bins with identical measures and bins/items with cuboidic shapes.")]
   [StorableClass]
-  [Creatable("Problems")]
+  [Creatable(CreatableAttribute.Categories.CombinatorialProblems, Priority = 310)]
   public class CuboidIdenticalBinPackingProblem : RegularIdenticalBinPackingProblem<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> {
 
@@ -109,19 +109,16 @@
     #region Helpers
     protected override void InitializeDecoder() {
-      Operators.RemoveAll(op => typeof(I2DOperator).IsAssignableFrom(op.GetType()));
+      Operators.RemoveAll(op => op is I2DOperator);
 
       PackingSolutionDecoderParameter.ValidValues.Clear();
       if (SolutionCreator is PackingSequenceRandomCreator) {   
         PackingSolutionDecoderParameter.ValidValues.UnionWith(ApplicationManager.Manager.GetInstances<I3DPSDecoder>());
-        //PackingSolutionDecoder = new ExtremePointPackingSequenceDecoder3D();
       } else if (SolutionCreator is GroupingVectorRandomCreator) {      
         PackingSolutionDecoderParameter.ValidValues.UnionWith(ApplicationManager.Manager.GetInstances<I3DGVDecoder>());
-        //PackingSolutionDecoder = new ExtremePointGroupingVectorDecoder3D();
       } else if (SolutionCreator is MultiComponentVectorRandomCreator) {    
         PackingSolutionDecoderParameter.ValidValues.UnionWith(ApplicationManager.Manager.GetInstances<I3DMCVDecoder>());
-        //PackingSolutionDecoder = ApplicationManager.Manager.GetInstances<ExtremePointMultiComponentVectorDecoder3D>().First();
       } else {
         string error = "The given problem does not support the selected solution-creator.";
-        PluginInfrastructure.ErrorHandling.ShowErrorDialog(error, null);
+        ErrorHandling.ShowErrorDialog(error, null);
       }
     }
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Problem/ISOContainerBinPackingProblem.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Problem/ISOContainerBinPackingProblem.cs	(revision 13459)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Problem/ISOContainerBinPackingProblem.cs	(revision 13460)
@@ -29,7 +29,7 @@
 
 namespace HeuristicLab.Problems.BinPacking.Problem {
-  [Item("ISOContainerBinPackingProblem", "Represents a three-dimensional bin-packing problem using two different bin sizes.")]
+  [Item("Bin Packing Problem (3D, ISO containers) (BPP)", "Represents a three-dimensional bin-packing problem using two different bin sizes.")]
   [StorableClass]
-  [Creatable("Problems")]
+  [Creatable(CreatableAttribute.Categories.CombinatorialProblems, Priority = 320)]
   public class ISOContainerBinPackingProblem : CuboidIdenticalBinPackingProblem {
 
@@ -170,5 +170,5 @@
     #region Helpers
     protected override void InitializeDecoder() {
-      Operators.RemoveAll(op => typeof(I2DOperator).IsAssignableFrom(op.GetType()));
+      Operators.RemoveAll(op => op is I2DOperator);
 
       PackingSolutionDecoderParameter.ValidValues.Clear();
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Problem/RectangularIdenticalBinPackingProblem.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Problem/RectangularIdenticalBinPackingProblem.cs	(revision 13459)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Problem/RectangularIdenticalBinPackingProblem.cs	(revision 13460)
@@ -36,7 +36,7 @@
 
 namespace HeuristicLab.Problems.BinPacking.Problem {
-  [Item("RectangularIdenticalBinPackingProblem", "Represents a two-dimensional bin-packing problem using only bins with identical measures and bins/items with rectangular shapes.")]
+  [Item("Bin Packing Problem (2D, identical rectangles) (BPP)", "Represents a two-dimensional bin-packing problem using only bins with identical measures and bins/items with rectangular shapes.")]
   [StorableClass]
-  [Creatable("Problems")]
+  [Creatable(CreatableAttribute.Categories.CombinatorialProblems, Priority = 300)]
   public class RectangularIdenticalBinPackingProblem : RegularIdenticalBinPackingProblem<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem> {
 
@@ -104,19 +104,16 @@
     #region Helpers
     protected override void InitializeDecoder() {
-      Operators.RemoveAll(op => typeof(I3DOperator).IsAssignableFrom(op.GetType()));
+      Operators.RemoveAll(op => op is I3DOperator);
 
       PackingSolutionDecoderParameter.ValidValues.Clear();
       if (SolutionCreator is PackingSequenceRandomCreator) {        
         PackingSolutionDecoderParameter.ValidValues.UnionWith(ApplicationManager.Manager.GetInstances<I2DPSDecoder>());
-        //PackingSolutionDecoder = new ExtremePointPackingSequenceDecoder2D();
       } else if (SolutionCreator is GroupingVectorRandomCreator) {  
         PackingSolutionDecoderParameter.ValidValues.UnionWith(ApplicationManager.Manager.GetInstances<I2DGVDecoder>());
-        //PackingSolutionDecoder = new ExtremePointGroupingVectorDecoder2D();
       } else if (SolutionCreator is MultiComponentVectorRandomCreator) {  
         PackingSolutionDecoderParameter.ValidValues.UnionWith(ApplicationManager.Manager.GetInstances<I2DMCVDecoder>());
-        //PackingSolutionDecoder = new ExtremePointMultiComponentVectorDecoder2D();
       } else {
         string error = "The given problem does not support the selected solution-creator.";
-        PluginInfrastructure.ErrorHandling.ShowErrorDialog(error, null);
+        ErrorHandling.ShowErrorDialog(error, null);
       }
     }
Index: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Problem/RegularIdenticalBinPackingProblem.cs
===================================================================
--- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Problem/RegularIdenticalBinPackingProblem.cs	(revision 13459)
+++ branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Problem/RegularIdenticalBinPackingProblem.cs	(revision 13460)
@@ -246,7 +246,6 @@
 
       BestKnownQuality = data.BestKnownQuality.HasValue ? new DoubleValue(data.BestKnownQuality.Value) : null;
-                                                                    
+
       PackingBinMeasures = binData;    
-      //PackingItemsParameter.Value.Value = data.Items;
       PackingItemMeasures = itemData;
 
@@ -255,5 +254,5 @@
       PackingItemsParameter.Value.Value = PackingItemMeasures.Count;
       LowerBoundParameter.Value.Value = CalculateLowerBound();
-    }           
+    }
 
     public BPPData Export() {
