Index: /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/HeuristicLab.Problems.Instances.PermutationProblems-3.3.csproj
===================================================================
--- /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/HeuristicLab.Problems.Instances.PermutationProblems-3.3.csproj	(revision 16012)
+++ /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/HeuristicLab.Problems.Instances.PermutationProblems-3.3.csproj	(revision 16013)
@@ -56,4 +56,5 @@
   <ItemGroup>
     <Compile Include="LOP\LOPDataDescriptor.cs" />
+    <Compile Include="LOP\LOPInstanceProvider.cs" />
     <Compile Include="LOP\LOPXLOLIBInstanceProvider.cs" />
     <Compile Include="LOP\LOPSPECInstanceProvider.cs" />
Index: /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPIOInstanceProvider.cs
===================================================================
--- /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPIOInstanceProvider.cs	(revision 16012)
+++ /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPIOInstanceProvider.cs	(revision 16013)
@@ -21,13 +21,7 @@
 
 using System;
-using System.Collections.Generic;
-using System.IO;
-using System.IO.Compression;
-using System.Linq;
-using System.Reflection;
-using System.Text.RegularExpressions;
 
 namespace HeuristicLab.Problems.Instances.PermutationProblems.LinearOrdering {
-  public class LOPIOInstanceProvider : ProblemInstanceProvider<LOPData> {
+  public class LOPIOInstanceProvider : LOPInstanceProvider {
 
     public override string Name
@@ -45,71 +39,4 @@
       get { return new Uri("http://www.optsicom.es/lolib/lop/IO.zip"); }
     }
-
-    public override string ReferencePublication
-    {
-      get { return "Martí, R., & Reinelt, G. (2011). The Linear Ordering Problem. Applied Mathematical Sciences. Springer Berlin Heidelberg. https://doi.org/10.1007/978-3-642-16729-4"; }
-    }
-
-    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
-      var instanceArchiveName = GetResourceName("IO.zip");
-      if (String.IsNullOrEmpty(instanceArchiveName)) yield break;
-
-      using (var instanceStream = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
-        foreach (var entry in instanceStream.Entries.Select(x => x.Name).OrderBy(x => x)) {
-          yield return new LOPDataDescriptor(Path.GetFileNameWithoutExtension(entry), GetDescription(), entry, null);
-        }
-      }
-    }
-
-    public override LOPData LoadData(IDataDescriptor id) {
-      var descriptor = (LOPDataDescriptor)id;
-      var instanceArchiveName = GetResourceName("IO.zip");
-      using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
-        var entry = instancesZipFile.GetEntry(descriptor.InstanceIdentifier);
-
-        using (var stream = entry.Open()) {
-          var parser = new LOPParser();
-          parser.Parse(stream);
-          return Load(parser);
-        }
-      }
-    }
-
-    public override bool CanImportData
-    {
-      get { return true; }
-    }
-
-    public override LOPData ImportData(string path) {
-      var parser = new LOPParser();
-      parser.Parse(path);
-      return Load(parser);
-    }
-
-    private LOPData Load(LOPParser parser) {
-      var instance = new LOPData {
-        Name = parser.Name,
-        Description = parser.Description,
-        Dimension = parser.Dimension,
-        Matrix = parser.Matrix,
-        BestKnownPermutation = parser.BestKnownPermutation,
-        BestKnownQuality = parser.BestKnownQuality
-      };
-      return instance;
-    }
-
-    public override bool CanExportData
-    {
-      get { return false; }
-    }
-
-    private string GetDescription() {
-      return "Embedded instance of plugin version " + Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).Cast<AssemblyFileVersionAttribute>().First().Version + ".";
-    }
-
-    protected virtual string GetResourceName(string fileName) {
-      return Assembly.GetExecutingAssembly().GetManifestResourceNames()
-        .SingleOrDefault(x => Regex.Match(x, @".*\.Data\." + fileName).Success);
-    }
   }
 }
Index: /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPInstanceProvider.cs
===================================================================
--- /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPInstanceProvider.cs	(revision 16013)
+++ /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPInstanceProvider.cs	(revision 16013)
@@ -0,0 +1,78 @@
+﻿using System;
+using System.Collections.Generic;
+using System.IO;
+using System.IO.Compression;
+using System.Linq;
+using System.Reflection;
+using System.Text.RegularExpressions;
+
+namespace HeuristicLab.Problems.Instances.PermutationProblems.LinearOrdering {
+  public abstract class LOPInstanceProvider : ProblemInstanceProvider<LOPData> {
+    public override string ReferencePublication
+    {
+      get { return "Martí, R., & Reinelt, G. (2011). The Linear Ordering Problem. Applied Mathematical Sciences. Springer Berlin Heidelberg. https://doi.org/10.1007/978-3-642-16729-4"; }
+    }
+
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
+      var instanceArchiveName = GetResourceName(Name + ".zip");
+      if (String.IsNullOrEmpty(instanceArchiveName)) yield break;
+
+      using (var instanceStream = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
+        foreach (var entry in instanceStream.Entries.Select(x => x.Name).OrderBy(x => x)) {
+          yield return new LOPDataDescriptor(Path.GetFileNameWithoutExtension(entry), GetDescription(), entry, null);
+        }
+      }
+    }
+
+    public override LOPData LoadData(IDataDescriptor id) {
+      var descriptor = (LOPDataDescriptor)id;
+      var instanceArchiveName = GetResourceName(Name + ".zip");
+      using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
+        var entry = instancesZipFile.GetEntry(descriptor.InstanceIdentifier);
+
+        using (var stream = entry.Open()) {
+          var parser = new LOPParser();
+          parser.Parse(stream);
+          return Load(parser);
+        }
+      }
+    }
+
+    public override bool CanImportData
+    {
+      get { return true; }
+    }
+
+    public override LOPData ImportData(string path) {
+      var parser = new LOPParser();
+      parser.Parse(path);
+      return Load(parser);
+    }
+
+    private LOPData Load(LOPParser parser) {
+      var instance = new LOPData {
+        Name = parser.Name,
+        Description = parser.Description,
+        Dimension = parser.Dimension,
+        Matrix = parser.Matrix,
+        BestKnownPermutation = parser.BestKnownPermutation,
+        BestKnownQuality = parser.BestKnownQuality
+      };
+      return instance;
+    }
+
+    public override bool CanExportData
+    {
+      get { return false; }
+    }
+
+    private string GetDescription() {
+      return "Embedded instance of plugin version " + Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).Cast<AssemblyFileVersionAttribute>().First().Version + ".";
+    }
+
+    protected virtual string GetResourceName(string fileName) {
+      return Assembly.GetExecutingAssembly().GetManifestResourceNames()
+        .SingleOrDefault(x => Regex.Match(x, @".*\.Data\." + fileName).Success);
+    }
+  }
+}
Index: /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPMBInstanceProvider.cs
===================================================================
--- /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPMBInstanceProvider.cs	(revision 16012)
+++ /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPMBInstanceProvider.cs	(revision 16013)
@@ -21,13 +21,7 @@
 
 using System;
-using System.Collections.Generic;
-using System.IO;
-using System.IO.Compression;
-using System.Linq;
-using System.Reflection;
-using System.Text.RegularExpressions;
 
 namespace HeuristicLab.Problems.Instances.PermutationProblems.LinearOrdering {
-  public class LOPMBInstanceProvider : ProblemInstanceProvider<LOPData> {
+  public class LOPMBInstanceProvider : LOPInstanceProvider {
 
     public override string Name
@@ -45,70 +39,4 @@
       get { return new Uri("http://www.optsicom.es/lolib/lop/MB.zip"); }
     }
-
-    public override string ReferencePublication
-    {
-      get { return "Martí, R., & Reinelt, G. (2011). The Linear Ordering Problem. Applied Mathematical Sciences. Springer Berlin Heidelberg. https://doi.org/10.1007/978-3-642-16729-4"; }
-    }
-
-    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
-      var instanceArchiveName = GetResourceName("MB.zip");
-      if (String.IsNullOrEmpty(instanceArchiveName)) yield break;
-
-      using (var instanceStream = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
-        foreach (var entry in instanceStream.Entries.Select(x => x.Name).OrderBy(x => x)) {
-          yield return new LOPDataDescriptor(Path.GetFileNameWithoutExtension(entry), GetDescription(), entry, null);
-        }
-      }
-    }
-
-    public override LOPData LoadData(IDataDescriptor id) {
-      var descriptor = (LOPDataDescriptor)id;
-      var instanceArchiveName = GetResourceName("MB.zip");
-      using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
-        var entry = instancesZipFile.GetEntry(descriptor.InstanceIdentifier);
-
-        using (var stream = entry.Open()) {
-          var parser = new LOPParser();
-          parser.Parse(stream);
-          return Load(parser);
-        }
-      }
-    }
-
-    public override bool CanImportData
-    {
-      get { return true; }
-    }
-    public override LOPData ImportData(string path) {
-      var parser = new LOPParser();
-      parser.Parse(path);
-      return Load(parser);
-    }
-
-    private LOPData Load(LOPParser parser) {
-      var instance = new LOPData {
-        Name = parser.Name,
-        Description = parser.Description,
-        Dimension = parser.Dimension,
-        Matrix = parser.Matrix,
-        BestKnownPermutation = parser.BestKnownPermutation,
-        BestKnownQuality = parser.BestKnownQuality
-      };
-      return instance;
-    }
-
-    public override bool CanExportData
-    {
-      get { return false; }
-    }
-
-    private string GetDescription() {
-      return "Embedded instance of plugin version " + Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).Cast<AssemblyFileVersionAttribute>().First().Version + ".";
-    }
-
-    protected virtual string GetResourceName(string fileName) {
-      return Assembly.GetExecutingAssembly().GetManifestResourceNames()
-        .SingleOrDefault(x => Regex.Match(x, @".*\.Data\." + fileName).Success);
-    }
   }
 }
Index: /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPRANDA1InstanceProvider.cs
===================================================================
--- /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPRANDA1InstanceProvider.cs	(revision 16012)
+++ /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPRANDA1InstanceProvider.cs	(revision 16013)
@@ -21,13 +21,7 @@
 
 using System;
-using System.Collections.Generic;
-using System.IO;
-using System.IO.Compression;
-using System.Linq;
-using System.Reflection;
-using System.Text.RegularExpressions;
 
 namespace HeuristicLab.Problems.Instances.PermutationProblems.LinearOrdering {
-  public class LOPRANDA1InstanceProvider : ProblemInstanceProvider<LOPData> {
+  public class LOPRANDA1InstanceProvider : LOPInstanceProvider {
 
     public override string Name
@@ -45,70 +39,4 @@
       get { return new Uri("http://www.optsicom.es/lolib/lop/RandA1.zip"); }
     }
-
-    public override string ReferencePublication
-    {
-      get { return "Martí, R., & Reinelt, G. (2011). The Linear Ordering Problem. Applied Mathematical Sciences. Springer Berlin Heidelberg. https://doi.org/10.1007/978-3-642-16729-4"; }
-    }
-
-    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
-      var instanceArchiveName = GetResourceName("RANDA1.zip");
-      if (String.IsNullOrEmpty(instanceArchiveName)) yield break;
-
-      using (var instanceStream = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
-        foreach (var entry in instanceStream.Entries.Select(x => x.Name).OrderBy(x => x)) {
-          yield return new LOPDataDescriptor(Path.GetFileNameWithoutExtension(entry), GetDescription(), entry, null);
-        }
-      }
-    }
-
-    public override LOPData LoadData(IDataDescriptor id) {
-      var descriptor = (LOPDataDescriptor)id;
-      var instanceArchiveName = GetResourceName("RANDA1.zip");
-      using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
-        var entry = instancesZipFile.GetEntry(descriptor.InstanceIdentifier);
-
-        using (var stream = entry.Open()) {
-          var parser = new LOPParser();
-          parser.Parse(stream);
-          return Load(parser);
-        }
-      }
-    }
-
-    public override bool CanImportData
-    {
-      get { return true; }
-    }
-    public override LOPData ImportData(string path) {
-      var parser = new LOPParser();
-      parser.Parse(path);
-      return Load(parser);
-    }
-
-    private LOPData Load(LOPParser parser) {
-      var instance = new LOPData {
-        Name = parser.Name,
-        Description = parser.Description,
-        Dimension = parser.Dimension,
-        Matrix = parser.Matrix,
-        BestKnownPermutation = parser.BestKnownPermutation,
-        BestKnownQuality = parser.BestKnownQuality
-      };
-      return instance;
-    }
-
-    public override bool CanExportData
-    {
-      get { return false; }
-    }
-
-    private string GetDescription() {
-      return "Embedded instance of plugin version " + Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).Cast<AssemblyFileVersionAttribute>().First().Version + ".";
-    }
-
-    protected virtual string GetResourceName(string fileName) {
-      return Assembly.GetExecutingAssembly().GetManifestResourceNames()
-        .SingleOrDefault(x => Regex.Match(x, @".*\.Data\." + fileName).Success);
-    }
   }
 }
Index: /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPRANDA2InstanceProvider.cs
===================================================================
--- /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPRANDA2InstanceProvider.cs	(revision 16012)
+++ /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPRANDA2InstanceProvider.cs	(revision 16013)
@@ -21,13 +21,7 @@
 
 using System;
-using System.Collections.Generic;
-using System.IO;
-using System.IO.Compression;
-using System.Linq;
-using System.Reflection;
-using System.Text.RegularExpressions;
 
 namespace HeuristicLab.Problems.Instances.PermutationProblems.LinearOrdering {
-  public class LOPRANDA2InstanceProvider : ProblemInstanceProvider<LOPData> {
+  public class LOPRANDA2InstanceProvider : LOPInstanceProvider {
 
     public override string Name
@@ -45,70 +39,4 @@
       get { return new Uri("http://www.optsicom.es/lolib/lop/RandA2.zip"); }
     }
-
-    public override string ReferencePublication
-    {
-      get { return "Martí, R., & Reinelt, G. (2011). The Linear Ordering Problem. Applied Mathematical Sciences. Springer Berlin Heidelberg. https://doi.org/10.1007/978-3-642-16729-4"; }
-    }
-
-    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
-      var instanceArchiveName = GetResourceName("RANDA2.zip");
-      if (String.IsNullOrEmpty(instanceArchiveName)) yield break;
-
-      using (var instanceStream = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
-        foreach (var entry in instanceStream.Entries.Select(x => x.Name).OrderBy(x => x)) {
-          yield return new LOPDataDescriptor(Path.GetFileNameWithoutExtension(entry), GetDescription(), entry, null);
-        }
-      }
-    }
-
-    public override LOPData LoadData(IDataDescriptor id) {
-      var descriptor = (LOPDataDescriptor)id;
-      var instanceArchiveName = GetResourceName("RANDA2.zip");
-      using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
-        var entry = instancesZipFile.GetEntry(descriptor.InstanceIdentifier);
-
-        using (var stream = entry.Open()) {
-          var parser = new LOPParser();
-          parser.Parse(stream);
-          return Load(parser);
-        }
-      }
-    }
-
-    public override bool CanImportData
-    {
-      get { return true; }
-    }
-    public override LOPData ImportData(string path) {
-      var parser = new LOPParser();
-      parser.Parse(path);
-      return Load(parser);
-    }
-
-    private LOPData Load(LOPParser parser) {
-      var instance = new LOPData {
-        Name = parser.Name,
-        Description = parser.Description,
-        Dimension = parser.Dimension,
-        Matrix = parser.Matrix,
-        BestKnownPermutation = parser.BestKnownPermutation,
-        BestKnownQuality = parser.BestKnownQuality
-      };
-      return instance;
-    }
-
-    public override bool CanExportData
-    {
-      get { return false; }
-    }
-
-    private string GetDescription() {
-      return "Embedded instance of plugin version " + Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).Cast<AssemblyFileVersionAttribute>().First().Version + ".";
-    }
-
-    protected virtual string GetResourceName(string fileName) {
-      return Assembly.GetExecutingAssembly().GetManifestResourceNames()
-        .SingleOrDefault(x => Regex.Match(x, @".*\.Data\." + fileName).Success);
-    }
   }
 }
Index: /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPRANDBInstanceProvider.cs
===================================================================
--- /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPRANDBInstanceProvider.cs	(revision 16012)
+++ /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPRANDBInstanceProvider.cs	(revision 16013)
@@ -21,13 +21,7 @@
 
 using System;
-using System.Collections.Generic;
-using System.IO;
-using System.IO.Compression;
-using System.Linq;
-using System.Reflection;
-using System.Text.RegularExpressions;
 
 namespace HeuristicLab.Problems.Instances.PermutationProblems.LinearOrdering {
-  public class LOPRANDBInstanceProvider : ProblemInstanceProvider<LOPData> {
+  public class LOPRANDBInstanceProvider : LOPInstanceProvider {
 
     public override string Name
@@ -45,70 +39,4 @@
       get { return new Uri("http://www.optsicom.es/lolib/lop/RandB.zip"); }
     }
-
-    public override string ReferencePublication
-    {
-      get { return "Martí, R., & Reinelt, G. (2011). The Linear Ordering Problem. Applied Mathematical Sciences. Springer Berlin Heidelberg. https://doi.org/10.1007/978-3-642-16729-4"; }
-    }
-
-    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
-      var instanceArchiveName = GetResourceName("RANDB.zip");
-      if (String.IsNullOrEmpty(instanceArchiveName)) yield break;
-
-      using (var instanceStream = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
-        foreach (var entry in instanceStream.Entries.Select(x => x.Name).OrderBy(x => x)) {
-          yield return new LOPDataDescriptor(Path.GetFileNameWithoutExtension(entry), GetDescription(), entry, null);
-        }
-      }
-    }
-
-    public override LOPData LoadData(IDataDescriptor id) {
-      var descriptor = (LOPDataDescriptor)id;
-      var instanceArchiveName = GetResourceName("RANDB.zip");
-      using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
-        var entry = instancesZipFile.GetEntry(descriptor.InstanceIdentifier);
-
-        using (var stream = entry.Open()) {
-          var parser = new LOPParser();
-          parser.Parse(stream);
-          return Load(parser);
-        }
-      }
-    }
-
-    public override bool CanImportData
-    {
-      get { return true; }
-    }
-    public override LOPData ImportData(string path) {
-      var parser = new LOPParser();
-      parser.Parse(path);
-      return Load(parser);
-    }
-
-    private LOPData Load(LOPParser parser) {
-      var instance = new LOPData {
-        Name = parser.Name,
-        Description = parser.Description,
-        Dimension = parser.Dimension,
-        Matrix = parser.Matrix,
-        BestKnownPermutation = parser.BestKnownPermutation,
-        BestKnownQuality = parser.BestKnownQuality
-      };
-      return instance;
-    }
-
-    public override bool CanExportData
-    {
-      get { return false; }
-    }
-
-    private string GetDescription() {
-      return "Embedded instance of plugin version " + Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).Cast<AssemblyFileVersionAttribute>().First().Version + ".";
-    }
-
-    protected virtual string GetResourceName(string fileName) {
-      return Assembly.GetExecutingAssembly().GetManifestResourceNames()
-        .SingleOrDefault(x => Regex.Match(x, @".*\.Data\." + fileName).Success);
-    }
   }
 }
Index: /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPSGBInstanceProvider.cs
===================================================================
--- /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPSGBInstanceProvider.cs	(revision 16012)
+++ /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPSGBInstanceProvider.cs	(revision 16013)
@@ -21,13 +21,7 @@
 
 using System;
-using System.Collections.Generic;
-using System.IO;
-using System.IO.Compression;
-using System.Linq;
-using System.Reflection;
-using System.Text.RegularExpressions;
 
 namespace HeuristicLab.Problems.Instances.PermutationProblems.LinearOrdering {
-  public class LOPSGBInstanceProvider : ProblemInstanceProvider<LOPData> {
+  public class LOPSGBInstanceProvider : LOPInstanceProvider {
 
     public override string Name
@@ -45,70 +39,4 @@
       get { return new Uri("http://www.optsicom.es/lolib/lop/SGB.zip"); }
     }
-
-    public override string ReferencePublication
-    {
-      get { return "Martí, R., & Reinelt, G. (2011). The Linear Ordering Problem. Applied Mathematical Sciences. Springer Berlin Heidelberg. https://doi.org/10.1007/978-3-642-16729-4"; }
-    }
-
-    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
-      var instanceArchiveName = GetResourceName("SGB.zip");
-      if (String.IsNullOrEmpty(instanceArchiveName)) yield break;
-
-      using (var instanceStream = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
-        foreach (var entry in instanceStream.Entries.Select(x => x.Name).OrderBy(x => x)) {
-          yield return new LOPDataDescriptor(Path.GetFileNameWithoutExtension(entry), GetDescription(), entry, null);
-        }
-      }
-    }
-
-    public override LOPData LoadData(IDataDescriptor id) {
-      var descriptor = (LOPDataDescriptor)id;
-      var instanceArchiveName = GetResourceName("SGB.zip");
-      using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
-        var entry = instancesZipFile.GetEntry(descriptor.InstanceIdentifier);
-
-        using (var stream = entry.Open()) {
-          var parser = new LOPParser();
-          parser.Parse(stream);
-          return Load(parser);
-        }
-      }
-    }
-
-    public override bool CanImportData
-    {
-      get { return true; }
-    }
-    public override LOPData ImportData(string path) {
-      var parser = new LOPParser();
-      parser.Parse(path);
-      return Load(parser);
-    }
-
-    private LOPData Load(LOPParser parser) {
-      var instance = new LOPData {
-        Name = parser.Name,
-        Description = parser.Description,
-        Dimension = parser.Dimension,
-        Matrix = parser.Matrix,
-        BestKnownPermutation = parser.BestKnownPermutation,
-        BestKnownQuality = parser.BestKnownQuality
-      };
-      return instance;
-    }
-
-    public override bool CanExportData
-    {
-      get { return false; }
-    }
-
-    private string GetDescription() {
-      return "Embedded instance of plugin version " + Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).Cast<AssemblyFileVersionAttribute>().First().Version + ".";
-    }
-
-    protected virtual string GetResourceName(string fileName) {
-      return Assembly.GetExecutingAssembly().GetManifestResourceNames()
-        .SingleOrDefault(x => Regex.Match(x, @".*\.Data\." + fileName).Success);
-    }
   }
 }
Index: /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPSPECInstanceProvider.cs
===================================================================
--- /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPSPECInstanceProvider.cs	(revision 16012)
+++ /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPSPECInstanceProvider.cs	(revision 16013)
@@ -21,13 +21,7 @@
 
 using System;
-using System.Collections.Generic;
-using System.IO;
-using System.IO.Compression;
-using System.Linq;
-using System.Reflection;
-using System.Text.RegularExpressions;
 
 namespace HeuristicLab.Problems.Instances.PermutationProblems.LinearOrdering {
-  public class LOPSPECInstanceProvider : ProblemInstanceProvider<LOPData> {
+  public class LOPSPECInstanceProvider : LOPInstanceProvider {
 
     public override string Name
@@ -45,70 +39,4 @@
       get { return new Uri("http://www.optsicom.es/lolib/lop/Spec.zip"); }
     }
-
-    public override string ReferencePublication
-    {
-      get { return "Martí, R., & Reinelt, G. (2011). The Linear Ordering Problem. Applied Mathematical Sciences. Springer Berlin Heidelberg. https://doi.org/10.1007/978-3-642-16729-4"; }
-    }
-
-    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
-      var instanceArchiveName = GetResourceName("SPEC.zip");
-      if (String.IsNullOrEmpty(instanceArchiveName)) yield break;
-
-      using (var instanceStream = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
-        foreach (var entry in instanceStream.Entries.Select(x => x.Name).OrderBy(x => x)) {
-          yield return new LOPDataDescriptor(Path.GetFileNameWithoutExtension(entry), GetDescription(), entry, null);
-        }
-      }
-    }
-
-    public override LOPData LoadData(IDataDescriptor id) {
-      var descriptor = (LOPDataDescriptor)id;
-      var instanceArchiveName = GetResourceName("SPEC.zip");
-      using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
-        var entry = instancesZipFile.GetEntry(descriptor.InstanceIdentifier);
-
-        using (var stream = entry.Open()) {
-          var parser = new LOPParser();
-          parser.Parse(stream);
-          return Load(parser);
-        }
-      }
-    }
-
-    public override bool CanImportData
-    {
-      get { return true; }
-    }
-    public override LOPData ImportData(string path) {
-      var parser = new LOPParser();
-      parser.Parse(path);
-      return Load(parser);
-    }
-
-    private LOPData Load(LOPParser parser) {
-      var instance = new LOPData {
-        Name = parser.Name,
-        Description = parser.Description,
-        Dimension = parser.Dimension,
-        Matrix = parser.Matrix,
-        BestKnownPermutation = parser.BestKnownPermutation,
-        BestKnownQuality = parser.BestKnownQuality
-      };
-      return instance;
-    }
-
-    public override bool CanExportData
-    {
-      get { return false; }
-    }
-
-    private string GetDescription() {
-      return "Embedded instance of plugin version " + Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).Cast<AssemblyFileVersionAttribute>().First().Version + ".";
-    }
-
-    protected virtual string GetResourceName(string fileName) {
-      return Assembly.GetExecutingAssembly().GetManifestResourceNames()
-        .SingleOrDefault(x => Regex.Match(x, @".*\.Data\." + fileName).Success);
-    }
   }
 }
Index: /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPXLOLIBInstanceProvider.cs
===================================================================
--- /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPXLOLIBInstanceProvider.cs	(revision 16012)
+++ /branches/2864_PermutationProblems/HeuristicLab.Problems.Instances.PermutationProblems/3.3/LOP/LOPXLOLIBInstanceProvider.cs	(revision 16013)
@@ -21,13 +21,7 @@
 
 using System;
-using System.Collections.Generic;
-using System.IO;
-using System.IO.Compression;
-using System.Linq;
-using System.Reflection;
-using System.Text.RegularExpressions;
 
 namespace HeuristicLab.Problems.Instances.PermutationProblems.LinearOrdering {
-  public class LOPXLOLIBInstanceProvider : ProblemInstanceProvider<LOPData> {
+  public class LOPXLOLIBInstanceProvider : LOPInstanceProvider {
 
     public override string Name
@@ -45,70 +39,4 @@
       get { return new Uri("http://www.optsicom.es/lolib/lop/xLOLIB.zip"); }
     }
-
-    public override string ReferencePublication
-    {
-      get { return "Martí, R., & Reinelt, G. (2011). The Linear Ordering Problem. Applied Mathematical Sciences. Springer Berlin Heidelberg. https://doi.org/10.1007/978-3-642-16729-4"; }
-    }
-
-    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
-      var instanceArchiveName = GetResourceName("XLOLIB.zip");
-      if (String.IsNullOrEmpty(instanceArchiveName)) yield break;
-
-      using (var instanceStream = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
-        foreach (var entry in instanceStream.Entries.Select(x => x.Name).OrderBy(x => x)) {
-          yield return new LOPDataDescriptor(Path.GetFileNameWithoutExtension(entry), GetDescription(), entry, null);
-        }
-      }
-    }
-
-    public override LOPData LoadData(IDataDescriptor id) {
-      var descriptor = (LOPDataDescriptor)id;
-      var instanceArchiveName = GetResourceName("XLOLIB.zip");
-      using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
-        var entry = instancesZipFile.GetEntry(descriptor.InstanceIdentifier);
-
-        using (var stream = entry.Open()) {
-          var parser = new LOPParser();
-          parser.Parse(stream);
-          return Load(parser);
-        }
-      }
-    }
-
-    public override bool CanImportData
-    {
-      get { return true; }
-    }
-    public override LOPData ImportData(string path) {
-      var parser = new LOPParser();
-      parser.Parse(path);
-      return Load(parser);
-    }
-
-    private LOPData Load(LOPParser parser) {
-      var instance = new LOPData {
-        Name = parser.Name,
-        Description = parser.Description,
-        Dimension = parser.Dimension,
-        Matrix = parser.Matrix,
-        BestKnownPermutation = parser.BestKnownPermutation,
-        BestKnownQuality = parser.BestKnownQuality
-      };
-      return instance;
-    }
-
-    public override bool CanExportData
-    {
-      get { return false; }
-    }
-
-    private string GetDescription() {
-      return "Embedded instance of plugin version " + Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).Cast<AssemblyFileVersionAttribute>().First().Version + ".";
-    }
-
-    protected virtual string GetResourceName(string fileName) {
-      return Assembly.GetExecutingAssembly().GetManifestResourceNames()
-        .SingleOrDefault(x => Regex.Match(x, @".*\.Data\." + fileName).Success);
-    }
   }
 }
