Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views-3.3.csproj
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views-3.3.csproj	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views-3.3.csproj	(revision 7548)
@@ -89,11 +89,4 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="ToolTipComboBox.cs">
-      <SubType>Component</SubType>
-    </Compile>
-    <Compile Include="ToolTipComboBox.Designer.cs">
-      <DependentUpon>ToolTipComboBox.cs</DependentUpon>
-    </Compile>
-    <Compile Include="ToolTipRequiredEventArgs.cs" />
     <Compile Include="ProblemInstanceProviderView.cs">
       <SubType>UserControl</SubType>
@@ -139,7 +132,4 @@
   </ItemGroup>
   <ItemGroup>
-    <EmbeddedResource Include="ToolTipComboBox.resx">
-      <DependentUpon>ToolTipComboBox.cs</DependentUpon>
-    </EmbeddedResource>
     <EmbeddedResource Include="ProblemInstanceProviderView.resx">
       <DependentUpon>ProblemInstanceProviderView.cs</DependentUpon>
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemInstanceProviderView.Designer.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemInstanceProviderView.Designer.cs	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemInstanceProviderView.Designer.cs	(revision 7548)
@@ -45,4 +45,5 @@
     /// </summary>
     private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
       this.loadButton = new System.Windows.Forms.Button();
       this.label2 = new System.Windows.Forms.Label();
@@ -50,4 +51,5 @@
       this.importButton = new System.Windows.Forms.Button();
       this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
       this.SuspendLayout();
       // 
@@ -55,7 +57,7 @@
       // 
       this.loadButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.loadButton.Location = new System.Drawing.Point(451, -1);
+      this.loadButton.Location = new System.Drawing.Point(549, -1);
       this.loadButton.Name = "loadButton";
-      this.loadButton.Size = new System.Drawing.Size(75, 23);
+      this.loadButton.Size = new System.Drawing.Size(26, 23);
       this.loadButton.TabIndex = 6;
       this.loadButton.Text = "Load";
@@ -80,5 +82,5 @@
       this.instancesComboBox.Location = new System.Drawing.Point(54, 0);
       this.instancesComboBox.Name = "instancesComboBox";
-      this.instancesComboBox.Size = new System.Drawing.Size(391, 21);
+      this.instancesComboBox.Size = new System.Drawing.Size(489, 21);
       this.instancesComboBox.TabIndex = 7;
       this.instancesComboBox.DataSourceChanged += new System.EventHandler(this.comboBox_DataSourceChanged);
@@ -87,7 +89,7 @@
       // 
       this.importButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.importButton.Location = new System.Drawing.Point(532, -1);
+      this.importButton.Location = new System.Drawing.Point(581, -1);
       this.importButton.Name = "importButton";
-      this.importButton.Size = new System.Drawing.Size(75, 23);
+      this.importButton.Size = new System.Drawing.Size(26, 23);
       this.importButton.TabIndex = 6;
       this.importButton.Text = "Import";
@@ -122,4 +124,5 @@
     private System.Windows.Forms.Button importButton;
     private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.ToolTip toolTip;
 
   }
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemInstanceProviderView.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemInstanceProviderView.cs	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemInstanceProviderView.cs	(revision 7548)
@@ -21,4 +21,5 @@
 
 using System;
+using System.IO;
 using System.Linq;
 using System.Windows.Forms;
@@ -40,5 +41,10 @@
     public ProblemInstanceProviderView() {
       InitializeComponent();
+      importButton.Text = String.Empty;
       importButton.Image = VSImageLibrary.Open;
+      toolTip.SetToolTip(importButton, "Import a " + GetProblemType() + " instance from file.");
+      loadButton.Text = String.Empty;
+      loadButton.Image = VSImageLibrary.Checkout;
+      toolTip.SetToolTip(loadButton, "Load the selected instance.");
     }
 
@@ -49,5 +55,5 @@
       } else {
         instancesComboBox.DisplayMember = "Name";
-        instancesComboBox.DataSource = Content.GetInstanceDescriptors().ToList();
+        instancesComboBox.DataSource = Content.GetDataDescriptors().ToList();
       }
     }
@@ -60,26 +66,27 @@
 
     private void loadButton_Click(object sender, EventArgs e) {
-      var descriptor = (IInstanceDescriptor)instancesComboBox.SelectedItem;
-      var instance = Content.LoadInstance(descriptor);
-      if (!Content.Consumer.LoadFrom(instance)) {
-        MessageBox.Show("This problem does not support loading the instance " + descriptor.Name + ".", "Cannot load instance");
+      var descriptor = (IDataDescriptor)instancesComboBox.SelectedItem;
+      var instance = Content.LoadData(descriptor);
+      try {
+        Content.Consumer.Load(instance);
+      } catch (Exception ex) {
+        MessageBox.Show(String.Format("This problem does not support loading the instance {0}: {1}", descriptor.Name, Environment.NewLine + ex.Message), "Cannot load instance");
       }
     }
 
     private void importButton_Click(object sender, EventArgs e) {
+      openFileDialog.FileName = GetProblemType() + " instance";
       if (openFileDialog.ShowDialog() == DialogResult.OK) {
         T instance = default(T);
         try {
-          instance = Content.LoadInstance(openFileDialog.FileName);
-        } catch {
-          MessageBox.Show("There was an error parsing the file.", "Error while parsing", MessageBoxButtons.OK, MessageBoxIcon.Error);
+          instance = Content.LoadData(openFileDialog.FileName);
+        } catch (Exception ex) {
+          MessageBox.Show(String.Format("There was an error parsing the file: {0}", Environment.NewLine + ex.Message), "Error while parsing", MessageBoxButtons.OK, MessageBoxIcon.Error);
           return;
         }
         try {
-          if (!Content.Consumer.LoadFrom(instance)) {
-            MessageBox.Show("This problem does not support loading the instance in the file.", "Cannot load instance", MessageBoxButtons.OK, MessageBoxIcon.Error);
-          }
-        } catch {
-          MessageBox.Show("There was an error while importing the file.");
+          Content.Consumer.Load(instance);
+        } catch (Exception ex) {
+          MessageBox.Show(String.Format("This problem does not support loading the instance {0}: {1}", Path.GetFileName(openFileDialog.FileName), Environment.NewLine + ex.Message), "Cannot load instance");
         }
       }
@@ -91,4 +98,11 @@
         comboBox.Items.Clear();
     }
+
+    private string GetProblemType() {
+      string dataTypeName = typeof(T).Name.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries).Last();
+      if (dataTypeName.EndsWith("Data"))
+        return dataTypeName.Substring(0, dataTypeName.Length - "Data".Length);
+      else return dataTypeName;
+    }
   }
 }
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemInstanceProviderView.resx
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemInstanceProviderView.resx	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemInstanceProviderView.resx	(revision 7548)
@@ -121,3 +121,6 @@
     <value>17, 17</value>
   </metadata>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>150, 17</value>
+  </metadata>
 </root>
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemView.Designer.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemView.Designer.cs	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemView.Designer.cs	(revision 7548)
@@ -47,5 +47,6 @@
       this.label1 = new System.Windows.Forms.Label();
       this.problemInstanceProviderViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.problemInstanceProviderComboBox = new HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views.ToolTipComboBox();
+      this.problemInstanceProviderComboBox = new System.Windows.Forms.ComboBox();
+      this.libraryInfoButton = new System.Windows.Forms.Button();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.SuspendLayout();
@@ -93,8 +94,8 @@
       this.problemInstanceProviderViewHost.Content = null;
       this.problemInstanceProviderViewHost.Enabled = false;
-      this.problemInstanceProviderViewHost.Location = new System.Drawing.Point(229, 5);
+      this.problemInstanceProviderViewHost.Location = new System.Drawing.Point(259, 5);
       this.problemInstanceProviderViewHost.Name = "problemInstanceProviderViewHost";
       this.problemInstanceProviderViewHost.ReadOnly = false;
-      this.problemInstanceProviderViewHost.Size = new System.Drawing.Size(421, 21);
+      this.problemInstanceProviderViewHost.Size = new System.Drawing.Size(391, 21);
       this.problemInstanceProviderViewHost.TabIndex = 6;
       this.problemInstanceProviderViewHost.ViewsLabelVisible = false;
@@ -103,16 +104,22 @@
       // problemInstanceProviderComboBox
       // 
-      this.problemInstanceProviderComboBox.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
       this.problemInstanceProviderComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.problemInstanceProviderComboBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
       this.problemInstanceProviderComboBox.FormattingEnabled = true;
       this.problemInstanceProviderComboBox.Location = new System.Drawing.Point(50, 5);
-      this.problemInstanceProviderComboBox.MaxDropDownItems = 16;
       this.problemInstanceProviderComboBox.Name = "problemInstanceProviderComboBox";
-      this.problemInstanceProviderComboBox.Size = new System.Drawing.Size(173, 21);
+      this.problemInstanceProviderComboBox.Size = new System.Drawing.Size(171, 21);
       this.problemInstanceProviderComboBox.TabIndex = 7;
-      this.problemInstanceProviderComboBox.ToolTipRequired += new System.EventHandler<HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views.ToolTipRequiredEventArgs>(this.problemInstanceProviderComboBox_ToolTipRequired);
       this.problemInstanceProviderComboBox.SelectedIndexChanged += new System.EventHandler(this.problemInstanceProviderComboBox_SelectedIndexChanged);
       this.problemInstanceProviderComboBox.DataSourceChanged += new System.EventHandler(this.comboBox_DataSourceChanged);
+      // 
+      // libraryInfoButton
+      // 
+      this.libraryInfoButton.Location = new System.Drawing.Point(227, 4);
+      this.libraryInfoButton.Name = "libraryInfoButton";
+      this.libraryInfoButton.Size = new System.Drawing.Size(26, 23);
+      this.libraryInfoButton.TabIndex = 8;
+      this.libraryInfoButton.Text = "Info";
+      this.libraryInfoButton.UseVisualStyleBackColor = true;
+      this.libraryInfoButton.Click += new System.EventHandler(this.libraryInfoButton_Click);
       // 
       // ProblemView
@@ -123,12 +130,14 @@
       this.Controls.Add(this.problemInstanceProviderComboBox);
       this.Controls.Add(this.label1);
+      this.Controls.Add(this.libraryInfoButton);
       this.Name = "ProblemView";
       this.Size = new System.Drawing.Size(653, 455);
+      this.Controls.SetChildIndex(this.libraryInfoButton, 0);
+      this.Controls.SetChildIndex(this.label1, 0);
+      this.Controls.SetChildIndex(this.problemInstanceProviderComboBox, 0);
+      this.Controls.SetChildIndex(this.problemInstanceProviderViewHost, 0);
       this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.label1, 0);
       this.Controls.SetChildIndex(this.nameTextBox, 0);
       this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.problemInstanceProviderComboBox, 0);
-      this.Controls.SetChildIndex(this.problemInstanceProviderViewHost, 0);
       this.Controls.SetChildIndex(this.parameterCollectionView, 0);
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
@@ -142,5 +151,6 @@
     private System.Windows.Forms.Label label1;
     private MainForm.WindowsForms.ViewHost problemInstanceProviderViewHost;
-    private ToolTipComboBox problemInstanceProviderComboBox;
+    private System.Windows.Forms.ComboBox problemInstanceProviderComboBox;
+    private System.Windows.Forms.Button libraryInfoButton;
 
   }
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemView.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemView.cs	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemView.cs	(revision 7548)
@@ -22,7 +22,9 @@
 using System;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.Linq;
 using System.Reflection;
 using System.Windows.Forms;
+using HeuristicLab.Common.Resources;
 using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
@@ -42,6 +44,12 @@
     }
 
+    private IProblemInstanceProvider SelectedProvider {
+      get { return (problemInstanceProviderComboBox.SelectedIndex >= 0 ? (IProblemInstanceProvider)problemInstanceProviderComboBox.SelectedItem : null); }
+    }
+
     public ProblemView() {
       InitializeComponent();
+      libraryInfoButton.Text = String.Empty;
+      libraryInfoButton.Image = VSImageLibrary.Information;
     }
 
@@ -54,25 +62,27 @@
         problemInstanceProviderComboBox.DataSource = GetProblemInstanceProviders().ToList();
       }
+      SetEnabledStateOfControls();
     }
 
     protected override void SetEnabledStateOfControls() {
       base.SetEnabledStateOfControls();
-      problemInstanceProviderComboBox.Enabled = !ReadOnly && !Locked && Content != null;
+      problemInstanceProviderComboBox.Enabled = !ReadOnly && !Locked && Content != null && problemInstanceProviderComboBox.Items.Count > 0;
+      libraryInfoButton.Enabled = SelectedProvider != null && SelectedProvider.WebLink != null;
     }
 
     private void problemInstanceProviderComboBox_SelectedIndexChanged(object sender, System.EventArgs e) {
       if (problemInstanceProviderComboBox.SelectedIndex >= 0) {
-        var provider = (IProblemInstanceProvider)problemInstanceProviderComboBox.SelectedItem;
-        var genericType = provider.GetType().GetInterfaces().Single(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IProblemInstanceProvider<>)).GetGenericArguments().First();
+        var genericType = SelectedProvider.GetType().GetInterfaces().Single(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IProblemInstanceProvider<>)).GetGenericArguments().First();
         this.GetType().GetMethod("SetConsumable", BindingFlags.NonPublic | BindingFlags.Instance)
-          .MakeGenericMethod(genericType).Invoke(this, new object[] { provider, Content });
-        problemInstanceProviderViewHost.Content = provider;
+          .MakeGenericMethod(genericType).Invoke(this, new object[] { SelectedProvider, Content });
+        problemInstanceProviderViewHost.Content = SelectedProvider;
+        SetTooltip();
       }
+      SetEnabledStateOfControls();
     }
 
-    /// <summary>
-    /// Do not change method name without changing the string reference above
-    /// </summary>
-    private void SetConsumable<T>(IProblemInstanceProvider<T> producer, IConsumable<T> consumer) {
+    // Do not change method without changing the reflection call above
+    [Obsolete]
+    private void SetConsumable<T>(IProblemInstanceProvider<T> producer, IProblemInstanceConsumer<T> consumer) {
       producer.Consumer = consumer;
     }
@@ -84,8 +94,15 @@
     }
 
+    private void libraryInfoButton_Click(object sender, EventArgs e) {
+      if (problemInstanceProviderComboBox.SelectedIndex >= 0) {
+        if (SelectedProvider != null && SelectedProvider.WebLink != null)
+          Process.Start(SelectedProvider.WebLink.ToString());
+      }
+    }
+
     protected virtual IEnumerable<IProblemInstanceProvider> GetProblemInstanceProviders() {
       var consumerTypes = Content.GetType().GetInterfaces()
         .Where(x => x.IsGenericType
-          && x.GetGenericTypeDefinition() == typeof(IConsumable<>));
+          && x.GetGenericTypeDefinition() == typeof(IProblemInstanceConsumer<>));
 
       if (consumerTypes.Any()) {
@@ -101,20 +118,27 @@
     }
 
-    protected virtual string GetProviderToolTip(IProblemInstanceProvider provider) {
-      if (provider.WebLink != null) {
-        return provider.Name
-            + Environment.NewLine
-            + provider.WebLink.ToString()
-            + Environment.NewLine + Environment.NewLine
-            + provider.ReferencePublication;
-      } else {
-        return provider.Name
+    private void SetTooltip() {
+      toolTip.SetToolTip(problemInstanceProviderComboBox, GetProviderToolTip());
+      if (SelectedProvider.WebLink != null)
+        toolTip.SetToolTip(libraryInfoButton, "Browse to " + SelectedProvider.WebLink.ToString());
+      else toolTip.SetToolTip(libraryInfoButton, "Library does not have a web reference.");
+    }
+
+    protected virtual string GetProviderToolTip() {
+      var provider = SelectedProvider;
+      string toolTip = provider.Name;
+
+      if (!String.IsNullOrEmpty(provider.ReferencePublication)) {
+        toolTip = toolTip
             + Environment.NewLine + Environment.NewLine
             + provider.ReferencePublication;
       }
-    }
+      if (provider.WebLink != null) {
+        toolTip = toolTip
+            + Environment.NewLine
+            + provider.WebLink.ToString();
+      }
 
-    private void problemInstanceProviderComboBox_ToolTipRequired(object sender, ToolTipRequiredEventArgs e) {
-      e.ToolTip = GetProviderToolTip((IProblemInstanceProvider)e.Item);
+      return toolTip;
     }
   }
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemView.resx
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemView.resx	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemView.resx	(revision 7548)
@@ -121,4 +121,7 @@
     <value>107, 17</value>
   </metadata>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>107, 17</value>
+  </metadata>
   <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ToolTipComboBox.Designer.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ToolTipComboBox.Designer.cs	(revision 7547)
+++ 	(revision )
@@ -1,62 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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.GeneralizedQuadraticAssignment.Views {
-  partial class ToolTipComboBox {
-    /// <summary>
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary>
-    /// Required method for Designer support - do not modify
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
-      this.SuspendLayout();
-      // 
-      // ToolTipComboBox
-      // 
-      this.MaxDropDownItems = 16;
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.ToolTip toolTip;
-  }
-}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ToolTipComboBox.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ToolTipComboBox.cs	(revision 7547)
+++ 	(revision )
@@ -1,166 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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
-
-using System;
-using System.Drawing;
-using System.Windows.Forms;
-using System.Windows.Forms.VisualStyles;
-
-namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views {
-  public partial class ToolTipComboBox : ComboBox {
-
-    private ComboBoxState comboBoxState = ComboBoxState.Normal;
-
-    public ToolTipComboBox()
-      : base() {
-      SetStyle(ControlStyles.AllPaintingInWmPaint, true);
-      SetStyle(ControlStyles.UserPaint, true);
-      InitializeComponent();
-      DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
-      DropDownStyle = ComboBoxStyle.DropDownList;
-    }
-
-    protected override void OnDrawItem(DrawItemEventArgs e) {
-      base.OnDrawItem(e);
-      var args = new ToolTipRequiredEventArgs(e.Index, e.Index >= 0 ? Items[e.Index] : null);
-      if (e.Index >= 0) OnToolTipRequired(args);
-      if (!e.State.HasFlag(DrawItemState.ComboBoxEdit) && !string.IsNullOrEmpty(args.ToolTip)) {
-        var ttRect = TextRenderer.MeasureText(args.ToolTip, Font);
-        if (RectangleToScreen(e.Bounds).Right + ttRect.Width > Screen.FromControl(this).Bounds.Right)
-          toolTip.Show(args.ToolTip, this, e.Bounds.Left - ttRect.Width, e.Bounds.Bottom);
-        else toolTip.Show(args.ToolTip, this, e.Bounds.Right, e.Bounds.Bottom);
-      } else toolTip.Hide(this);
-      if (!e.State.HasFlag(DrawItemState.ComboBoxEdit))
-        e.DrawBackground();
-      if (e.Index > -1 && Items.Count > 0) {
-        if (!e.State.HasFlag(DrawItemState.ComboBoxEdit) && e.State.HasFlag(DrawItemState.Selected)) {
-          using (var b = new SolidBrush(BackColor)) {
-            e.Graphics.DrawString(GetItemText(Items[e.Index]), Font, b, e.Bounds);
-          }
-        } else if (!e.State.HasFlag(DrawItemState.ComboBoxEdit)) {
-          using (var b = new SolidBrush(ForeColor)) {
-            e.Graphics.DrawString(GetItemText(Items[e.Index]), Font, b, e.Bounds);
-          }
-        } else {
-          using (var b = new SolidBrush(ForeColor)) {
-            var rect = new Rectangle(2, 4, Size.Width - 2, Size.Height - 4);
-            e.Graphics.DrawString(GetItemText(Items[e.Index]), Font, b, rect);
-          }
-        }
-      }
-      e.DrawFocusRectangle();
-    }
-
-    protected override void OnPaint(PaintEventArgs e) {
-      base.OnPaint(e);
-      if (Enabled == false) comboBoxState = ComboBoxState.Disabled;
-      Rectangle clip = new Rectangle(new Point(0, 0), Size);
-      clip.Inflate(0, 1);
-      if (VisualStyleInformation.IsSupportedByOS && VisualStyleInformation.IsEnabledByUser) {
-        PushButtonState pb_State = PushButtonState.Normal;
-        if (comboBoxState == ComboBoxState.Disabled)
-          pb_State = PushButtonState.Disabled;
-        else if (comboBoxState == ComboBoxState.Hot)
-          pb_State = PushButtonState.Hot;
-        else if (comboBoxState == ComboBoxState.Pressed)
-          pb_State = PushButtonState.Pressed;
-
-        ButtonRenderer.DrawButton(e.Graphics, clip, pb_State);
-        var r = new Rectangle(clip.Right - SystemInformation.VerticalScrollBarWidth + 2,
-                                    clip.Top,
-                                    SystemInformation.VerticalScrollBarWidth - 4,
-                                    clip.Height);
-        DrawArrow(e.Graphics, r);
-      } else {
-        ComboBoxRenderer.DrawTextBox(e.Graphics, clip, comboBoxState);
-        var r = new Rectangle(clip.Right - SystemInformation.VerticalScrollBarWidth,
-                                    clip.Top,
-                                    SystemInformation.VerticalScrollBarWidth,
-                                    clip.Height);
-        ComboBoxRenderer.DrawDropDownButton(e.Graphics, r, comboBoxState);
-      }
-      var rect = new Rectangle(2, 4, Size.Width - 2, Size.Height - 4);
-      if (SelectedIndex > -1 && Items.Count > 0) {
-        using (var b = new SolidBrush(ForeColor)) {
-          e.Graphics.DrawString(GetItemText(Items[SelectedIndex]), Font, b, rect);
-        }
-      }
-    }
-
-    private void DrawArrow(Graphics g, Rectangle rect) {
-      Point p1 = new Point(rect.X + 3, rect.Y + rect.Height / 2 - 2);
-      Point p2 = new Point(rect.X + rect.Width - 3, rect.Y + rect.Height / 2 - 2);
-      Point p3 = new Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2 + 2);
-      g.FillPolygon(new SolidBrush(System.Drawing.SystemColors.ControlText), new Point[] { p1, p2, p3 });
-    }
-
-    protected override void OnDropDown(EventArgs e) {
-      base.OnDropDown(e);
-      comboBoxState = ComboBoxState.Pressed;
-      Invalidate();
-    }
-
-    protected override void OnDropDownClosed(EventArgs e) {
-      base.OnDropDownClosed(e);
-      toolTip.Hide(this);
-      comboBoxState = ComboBoxState.Normal;
-      Invalidate();
-    }
-
-    protected override void OnMouseEnter(EventArgs e) {
-      base.OnMouseEnter(e);
-      if (comboBoxState == ComboBoxState.Normal) {
-        comboBoxState = ComboBoxState.Hot;
-        Invalidate();
-      }
-    }
-
-    protected override void OnMouseHover(EventArgs e) {
-      base.OnMouseHover(e);
-      if (comboBoxState == ComboBoxState.Normal) {
-        comboBoxState = ComboBoxState.Hot;
-        Invalidate();
-      }
-    }
-
-    protected override void OnMouseLeave(EventArgs e) {
-      base.OnMouseLeave(e);
-      if (comboBoxState == ComboBoxState.Hot) {
-        comboBoxState = ComboBoxState.Normal;
-        Invalidate();
-      }
-    }
-
-    protected override void OnMouseDown(MouseEventArgs e) {
-      base.OnMouseDown(e);
-      if (e.Button == MouseButtons.Left) {
-        comboBoxState = ComboBoxState.Pressed;
-        Invalidate();
-      }
-    }
-
-    public event EventHandler<ToolTipRequiredEventArgs> ToolTipRequired;
-    protected virtual void OnToolTipRequired(ToolTipRequiredEventArgs args) {
-      var handler = ToolTipRequired;
-      if (handler != null) handler(this, args);
-    }
-  }
-}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ToolTipComboBox.resx
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ToolTipComboBox.resx	(revision 7547)
+++ 	(revision )
@@ -1,126 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </metadata>
-</root>
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ToolTipRequiredEventArgs.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ToolTipRequiredEventArgs.cs	(revision 7547)
+++ 	(revision )
@@ -1,37 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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
-
-using System;
-
-namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views {
-  public class ToolTipRequiredEventArgs : EventArgs {
-    public int Index { get; private set; }
-    public object Item { get; private set; }
-
-    public string ToolTip { get; set; }
-
-    public ToolTipRequiredEventArgs(int index, object item)
-      : base() {
-      this.Index = index;
-      this.Item = item;
-    }
-  }
-}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GeneralizedQuadraticAssignmentProblem.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GeneralizedQuadraticAssignmentProblem.cs	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GeneralizedQuadraticAssignmentProblem.cs	(revision 7548)
@@ -39,9 +39,9 @@
   [StorableClass]
   public sealed class GeneralizedQuadraticAssignmentProblem : SingleObjectiveHeuristicOptimizationProblem<IGQAPEvaluator, IGQAPSolutionCreator>, IStorableContent,
-    IConsumable<QAPInstance>,
-    IConsumable<CTAPInstance>,
-    IConsumable<TSPInstance>,
-    IConsumable<ATSPInstance>,
-    IConsumable<GQAPInstance> {
+    IProblemInstanceConsumer<QAPData>,
+    IProblemInstanceConsumer<CTAPData>,
+    IProblemInstanceConsumer<TSPData>,
+    IProblemInstanceConsumer<ATSPData>,
+    IProblemInstanceConsumer<GQAPData> {
 
     public override Image ItemImage {
@@ -169,5 +169,5 @@
       Parameters.Add(new ValueParameter<DoubleMatrix>("InstallationCosts", InstallationCostsDescription, new DoubleMatrix(), false));
       Parameters.Add(new FixedValueParameter<DoubleValue>("TransportationCosts", TransportationCostsDescription, new DoubleValue(1)));
-      Parameters.Add(new FixedValueParameter<DoubleValue>("OverbookedCapacityPenalty", OverbookedCapacityPenaltyDescription, new DoubleValue(1000)));
+      Parameters.Add(new FixedValueParameter<DoubleValue>("OverbookedCapacityPenalty", OverbookedCapacityPenaltyDescription, new DoubleValue(100000)));
       Parameters.Add(new ValueParameter<DoubleArray>("Demands", DemandsDescription, new DoubleArray(), false));
       Parameters.Add(new ValueParameter<DoubleArray>("Capacities", CapacitiesDescription, new DoubleArray(), false));
@@ -213,161 +213,167 @@
     }
 
-    #region Problem Instance Consumptions
-    public bool LoadFrom(QAPInstance instance) {
-      try {
-        Name = instance.Name;
-        Description = instance.Description;
-
-        Weights = new DoubleMatrix(instance.Weights);
-        Distances = new DoubleMatrix(instance.Distances);
-        InstallationCosts = new DoubleMatrix(Weights.Rows, Distances.Columns); // all zero
-        Capacities = new DoubleArray(Enumerable.Range(0, Distances.Rows).Select(x => 1.0).ToArray());
-        Demands = new DoubleArray(Enumerable.Range(0, Weights.Rows).Select(x => 1.0).ToArray());
-
-        TransportationCosts.Value = 1;
-
-        if (instance.BestKnownAssignment != null) {
-          EvaluateAndLoadAssignment(instance.BestKnownAssignment);
-        } else {
-          BestKnownQuality = null;
-          BestKnownSolution = null;
-          BestKnownSolutions = null;
+    #region Problem Instance Loading
+    public void Load(QAPData data) {
+      Name = data.Name;
+      Description = data.Description;
+
+      var weights = new DoubleMatrix(data.Weights);
+      var distances = new DoubleMatrix(data.Distances);
+      var installationCosts = new DoubleMatrix(weights.Rows, distances.Columns); // all zero
+      var capacities = new DoubleArray(Enumerable.Range(0, distances.Rows).Select(x => 1.0).ToArray());
+      var demands = new DoubleArray(Enumerable.Range(0, weights.Rows).Select(x => 1.0).ToArray());
+
+      Load(demands, capacities, weights, distances, installationCosts, new DoubleValue(1));
+      EvaluateAndLoadAssignment(data.BestKnownAssignment);
+    }
+
+    public void Load(CTAPData data) {
+      Name = data.Name;
+      Description = data.Description;
+
+      var capacities = new DoubleArray(data.MemoryCapacities);
+      var demands = new DoubleArray(data.MemoryRequirements);
+      var weights = new DoubleMatrix(data.CommunicationCosts);
+      var installationCosts = new DoubleMatrix(data.ExecutionCosts.Transpose());
+      var distances = new DoubleMatrix(capacities.Length, capacities.Length);
+      for (int i = 0; i < capacities.Length - 1; i++)
+        for (int j = i + 1; j < capacities.Length; j++) {
+          distances[i, j] = 1;
         }
-      } catch {
-        return false;
-      }
-      return true;
-    }
-
-    public bool LoadFrom(CTAPInstance instance) {
-      try {
-        Name = instance.Name;
-        Description = instance.Description;
-
-        Capacities = new DoubleArray(instance.MemoryCapacities);
-        Demands = new DoubleArray(instance.MemoryRequirements);
-        Weights = new DoubleMatrix(instance.CommunicationCosts);
-        InstallationCosts = new DoubleMatrix(instance.ExecutionCosts.Transpose());
-        Distances = new DoubleMatrix(Capacities.Length, Capacities.Length);
-        for (int i = 0; i < Capacities.Length - 1; i++)
-          for (int j = i + 1; j < Capacities.Length; j++) {
-            Distances[i, j] = 1;
-          }
-
-        TransportationCosts.Value = 1;
-
-        if (instance.BestKnownAssignment != null) {
-          EvaluateAndLoadAssignment(instance.BestKnownAssignment);
-        } else {
-          BestKnownQuality = null;
-          BestKnownSolution = null;
-          BestKnownSolutions = null;
-        }
-      } catch {
-        return false;
-      }
-      return true;
-    }
-
-    public bool LoadFrom(TSPInstance instance) {
-      try {
-        if (instance.Dimension > 1000) return false;
-
-        Name = instance.Name;
-        Description = instance.Description;
-
-        Capacities = new DoubleArray(instance.Dimension);
-        Demands = new DoubleArray(instance.Dimension);
-        for (int i = 0; i < instance.Dimension; i++) {
-          Capacities[i] = 1;
-          Demands[i] = 1;
-        }
-        InstallationCosts = new DoubleMatrix(instance.Dimension, instance.Dimension);
-        Weights = new DoubleMatrix(instance.Dimension, instance.Dimension);
-        for (int i = 0; i < instance.Dimension; i++)
-          Weights[i, (i + 1) % instance.Dimension] = 1;
-        Distances = new DoubleMatrix(instance.GetDistanceMatrix());
-
-        TransportationCosts.Value = 1;
-
-        if (instance.BestKnownTour != null) {
-          EvaluateAndLoadAssignment(instance.BestKnownTour);
-        } else {
-          BestKnownQuality = null;
-          BestKnownSolution = null;
-          BestKnownSolutions = null;
-        }
-      } catch {
-        return false;
-      }
-      return true;
-    }
-
-    public bool LoadFrom(ATSPInstance instance) {
-      try {
-        Name = instance.Name;
-        Description = instance.Description;
-
-        Capacities = new DoubleArray(instance.Dimension);
-        Demands = new DoubleArray(instance.Dimension);
-        for (int i = 0; i < instance.Dimension; i++) {
-          Capacities[i] = 1;
-          Demands[i] = 1;
-        }
-        InstallationCosts = new DoubleMatrix(instance.Dimension, instance.Dimension);
-        Weights = new DoubleMatrix(instance.Dimension, instance.Dimension);
-        for (int i = 0; i < instance.Dimension; i++)
-          Weights[i, (i + 1) % instance.Dimension] = 1;
-        Distances = new DoubleMatrix(instance.Distances);
-
-        TransportationCosts.Value = 1;
-
-        if (instance.BestKnownTour != null) {
-          EvaluateAndLoadAssignment(instance.BestKnownTour);
-        } else {
-          BestKnownQuality = null;
-          BestKnownSolution = null;
-          BestKnownSolutions = null;
-        }
-      } catch {
-        return false;
-      }
-      return true;
-    }
-
-    public bool LoadFrom(GQAPInstance instance) {
-      try {
-        Name = instance.Name;
-        Description = instance.Description;
-
-        Capacities = new DoubleArray(instance.Capacities);
-        Demands = new DoubleArray(instance.Demands);
-        InstallationCosts = new DoubleMatrix(instance.InstallationCosts);
-        Weights = new DoubleMatrix(instance.Weights);
-        Distances = new DoubleMatrix(instance.Distances);
-        TransportationCosts.Value = instance.TransportationCosts;
-
-        if (instance.BestKnownAssignment != null) {
-          EvaluateAndLoadAssignment(instance.BestKnownAssignment);
-        } else if (instance.BestKnownQuality.HasValue) {
-          BestKnownQuality = new DoubleValue(instance.BestKnownQuality.Value);
-          BestKnownSolution = null;
-          BestKnownSolutions = null;
-        } else {
-          BestKnownQuality = null;
-          BestKnownSolution = null;
-          BestKnownSolutions = null;
-        }
-      } catch {
-        return false;
-      }
-      return true;
-    }
-    #endregion
+
+      Load(demands, capacities, weights, distances, installationCosts, new DoubleValue(1));
+      EvaluateAndLoadAssignment(data.BestKnownAssignment);
+    }
+
+    public void Load(TSPData data) {
+      if (data.Dimension > 1000)
+        throw new System.IO.InvalidDataException("Instances with more than 1000 cities are not supported.");
+
+      Name = data.Name;
+      Description = data.Description;
+
+      var capacities = new DoubleArray(data.Dimension);
+      var demands = new DoubleArray(data.Dimension);
+      for (int i = 0; i < data.Dimension; i++) {
+        capacities[i] = 1;
+        demands[i] = 1;
+      }
+      var installationCosts = new DoubleMatrix(data.Dimension, data.Dimension);
+      var weights = new DoubleMatrix(data.Dimension, data.Dimension);
+      for (int i = 0; i < data.Dimension; i++)
+        weights[i, (i + 1) % data.Dimension] = 1;
+      var distances = new DoubleMatrix(data.GetDistanceMatrix());
+
+      Load(demands, capacities, weights, distances, installationCosts, new DoubleValue(1));
+      EvaluateAndLoadAssignment(data.BestKnownTour);
+    }
+
+    public void Load(ATSPData data) {
+      Name = data.Name;
+      Description = data.Description;
+
+      var capacities = new DoubleArray(data.Dimension);
+      var demands = new DoubleArray(data.Dimension);
+      for (int i = 0; i < data.Dimension; i++) {
+        capacities[i] = 1;
+        demands[i] = 1;
+      }
+      var installationCosts = new DoubleMatrix(data.Dimension, data.Dimension);
+      var weights = new DoubleMatrix(data.Dimension, data.Dimension);
+      for (int i = 0; i < data.Dimension; i++)
+        weights[i, (i + 1) % data.Dimension] = 1;
+      var distances = new DoubleMatrix(data.Distances);
+
+      Load(demands, capacities, weights, distances, installationCosts, new DoubleValue(1));
+      EvaluateAndLoadAssignment(data.BestKnownTour);
+    }
+
+    public void Load(GQAPData data) {
+      Name = data.Name;
+      Description = data.Description;
+
+      var capacities = new DoubleArray(data.Capacities);
+      var demands = new DoubleArray(data.Demands);
+      var installationCosts = new DoubleMatrix(data.InstallationCosts);
+      var weights = new DoubleMatrix(data.Weights);
+      var distances = new DoubleMatrix(data.Distances);
+      var transportationCosts = new DoubleValue(data.TransportationCosts);
+
+      Load(demands, capacities, weights, distances, installationCosts, transportationCosts);
+      EvaluateAndLoadAssignment(data.BestKnownAssignment);
+
+      if (data.BestKnownAssignment == null && data.BestKnownQuality.HasValue) {
+        BestKnownQuality = new DoubleValue(data.BestKnownQuality.Value);
+      }
+    }
+
+    public void Load(DoubleArray demands, DoubleArray capacities,
+      DoubleMatrix weights, DoubleMatrix distances, DoubleMatrix installationCosts,
+      DoubleValue transportationCosts, DoubleValue overbookedCapacityPenalty = null) {
+      if (weights == null || weights.Rows == 0)
+        throw new System.IO.InvalidDataException(
+@"The given instance does not contain weights!");
+      if (weights.Rows != weights.Columns)
+        throw new System.IO.InvalidDataException(
+@"The weights matrix of the given instance contains an unequal number of rows
+and columns.");
+      Weights = weights;
+
+      if (distances == null || distances.Rows == 0)
+        throw new System.IO.InvalidDataException(
+@"The given instance does not contain distances!");
+      if (distances.Rows != distances.Columns)
+        throw new System.IO.InvalidDataException(
+@"The distances matrix of the given instance contains an unequal number of rows
+and columns.");
+      Distances = distances;
+
+      if (installationCosts == null || installationCosts.Rows == 0)
+        throw new System.IO.InvalidDataException(
+@"The given instance does not contain installation costs!");
+      if (installationCosts.Rows != weights.Rows
+        || installationCosts.Columns != distances.Columns)
+        throw new System.IO.InvalidDataException(
+@"The installation costs matrix of the given instance contains different number
+of rows than given in the weights matrix and a different number of columns than
+given in the distances matrix.");
+      InstallationCosts = installationCosts;
+
+      if (capacities == null || capacities.Length == 0)
+        throw new System.IO.InvalidDataException(
+@"The given instance does not contain capacities!");
+      if (capacities.Length != distances.Rows)
+        throw new System.IO.InvalidDataException(
+@"The given instance contains a different number of capacities than rows given in
+the distances matrix.");
+      Capacities = capacities;
+
+      if (demands == null || demands.Length == 0)
+        throw new System.IO.InvalidDataException(
+@"The given instance does not contain demands!");
+      if (demands.Length != weights.Rows)
+        throw new System.IO.InvalidDataException(
+@"The given instance contains a different number of demands than rows given in
+the weights matrix.");
+      Demands = demands;
+
+      if (transportationCosts == null)
+        throw new System.IO.InvalidDataException(
+@"The given instance does not contain transportation costs.");
+      TransportationCosts.Value = transportationCosts.Value;
+
+      if (overbookedCapacityPenalty != null)
+        OverbookedCapacityPenalty.Value = overbookedCapacityPenalty.Value;
+
+      BestKnownQuality = null;
+      BestKnownSolution = null;
+      BestKnownSolutions = null;
+    }
 
     private void EvaluateAndLoadAssignment(int[] vector) {
+      if (vector == null || vector.Length == 0) return;
       EvaluateAndLoadAssignment(new IntegerVector(vector));
     }
-    private void EvaluateAndLoadAssignment(IntegerVector assignment) {
+    public void EvaluateAndLoadAssignment(IntegerVector assignment) {
       if (!IsConfigurationValid()) {
         BestKnownQuality = null;
@@ -387,4 +393,5 @@
       BestKnownSolutions.Solutions.Add(new GQAPSolution((IntegerVector)assignment.Clone(), new DoubleValue(quality), new DoubleValue(flowDistanceQuality), new DoubleValue(installationQuality), new DoubleValue(overbookedCapacity)));
     }
+    #endregion
 
     #region Events
@@ -525,5 +532,5 @@
     #endregion
 
-    private bool IsConfigurationValid() {
+    public bool IsConfigurationValid() {
       return Weights != null && Distances != null && Demands != null && Capacities != null && InstallationCosts != null
         && Weights.Rows == Weights.Columns && Weights.Rows == InstallationCosts.Rows
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/CordeauGQAPDataDescriptor.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/CordeauGQAPDataDescriptor.cs	(revision 7548)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/CordeauGQAPDataDescriptor.cs	(revision 7548)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Instances.CordeauGQAP {
+  internal class CordeauGQAPDataDescriptor : IDataDescriptor {
+    public string Name { get; internal set; }
+    public string Description { get; internal set; }
+
+    internal string InstanceIdentifier { get; set; }
+
+    internal CordeauGQAPDataDescriptor(string name, string description, string instanceIdentifier) {
+      this.Name = name;
+      this.Description = description;
+      this.InstanceIdentifier = instanceIdentifier;
+    }
+  }
+}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/CordeauGQAPInstanceDescriptor.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/CordeauGQAPInstanceDescriptor.cs	(revision 7547)
+++ 	(revision )
@@ -1,35 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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.Instances.CordeauGQAP {
-  internal class CordeauGQAPInstanceDescriptor : IInstanceDescriptor {
-    public string Name { get; internal set; }
-    public string Description { get; internal set; }
-
-    internal string InstanceIdentifier { get; set; }
-
-    internal CordeauGQAPInstanceDescriptor(string name, string description, string instanceIdentifier) {
-      this.Name = name;
-      this.Description = description;
-      this.InstanceIdentifier = instanceIdentifier;
-    }
-  }
-}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/CordeauGQAPInstanceProvider.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/CordeauGQAPInstanceProvider.cs	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/CordeauGQAPInstanceProvider.cs	(revision 7548)
@@ -28,5 +28,5 @@
 
 namespace HeuristicLab.Problems.Instances.CordeauGQAP {
-  public class CordeauGQAPInstanceProvider : ProblemInstanceProvider<GQAPInstance> {
+  public class CordeauGQAPInstanceProvider : ProblemInstanceProvider<GQAPData> {
     public override string Name {
       get { return "Cordeau et al. GQAP instances"; }
@@ -49,14 +49,14 @@
     }
 
-    public override IEnumerable<IInstanceDescriptor> GetInstanceDescriptors() {
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
       return Assembly.GetExecutingAssembly()
           .GetManifestResourceNames()
           .Where(x => x.EndsWith(".txt"))
           .OrderBy(x => x)
-          .Select(x => new CordeauGQAPInstanceDescriptor(GetPrettyName(x), GetDescription(), x));
+          .Select(x => new CordeauGQAPDataDescriptor(GetPrettyName(x), GetDescription(), x));
     }
 
-    public override GQAPInstance LoadInstance(IInstanceDescriptor id) {
-      var descriptor = (CordeauGQAPInstanceDescriptor)id;
+    public override GQAPData LoadData(IDataDescriptor id) {
+      var descriptor = (CordeauGQAPDataDescriptor)id;
       using (var stream = Assembly.GetExecutingAssembly()
         .GetManifestResourceStream(descriptor.InstanceIdentifier)) {
@@ -72,5 +72,5 @@
     }
 
-    public override GQAPInstance LoadInstance(string path) {
+    public override GQAPData LoadData(string path) {
       var parser = new CordeauGQAPParser();
       parser.Parse(path);
@@ -83,10 +83,10 @@
     }
 
-    public override void SaveInstance(GQAPInstance instance, string path) {
+    public override void SaveData(GQAPData instance, string path) {
       throw new NotSupportedException();
     }
 
-    private GQAPInstance Load(CordeauGQAPParser parser) {
-      var instance = new GQAPInstance();
+    private GQAPData Load(CordeauGQAPParser parser) {
+      var instance = new GQAPData();
       instance.Equipments = parser.Equipments;
       instance.Locations = parser.Locations;
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj	(revision 7548)
@@ -112,5 +112,5 @@
     <Compile Include="CordeauGQAPParser.cs" />
     <Compile Include="CordeauGQAPInstanceProvider.cs" />
-    <Compile Include="CordeauGQAPInstanceDescriptor.cs" />
+    <Compile Include="CordeauGQAPDataDescriptor.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/ElloumiCTAPDataDescriptor.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/ElloumiCTAPDataDescriptor.cs	(revision 7548)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/ElloumiCTAPDataDescriptor.cs	(revision 7548)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Instances.ElloumiCTAP {
+  internal class ElloumiCTAPDataDescriptor : IDataDescriptor {
+    public string Name { get; internal set; }
+    public string Description { get; internal set; }
+
+    internal string InstanceIdentifier { get; set; }
+    internal string SolutionIdentifier { get; set; }
+
+    internal ElloumiCTAPDataDescriptor(string name, string description, string instanceIdentifier, string solutionIdentifier) {
+      this.Name = name;
+      this.Description = description;
+      this.InstanceIdentifier = instanceIdentifier;
+      this.SolutionIdentifier = solutionIdentifier;
+    }
+  }
+}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/ElloumiCTAPInstanceDescriptor.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/ElloumiCTAPInstanceDescriptor.cs	(revision 7547)
+++ 	(revision )
@@ -1,37 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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.Instances.ElloumiCTAP {
-  internal class ElloumiCTAPInstanceDescriptor : IInstanceDescriptor {
-    public string Name { get; internal set; }
-    public string Description { get; internal set; }
-
-    internal string InstanceIdentifier { get; set; }
-    internal string SolutionIdentifier { get; set; }
-
-    internal ElloumiCTAPInstanceDescriptor(string name, string description, string instanceIdentifier, string solutionIdentifier) {
-      this.Name = name;
-      this.Description = description;
-      this.InstanceIdentifier = instanceIdentifier;
-      this.SolutionIdentifier = solutionIdentifier;
-    }
-  }
-}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/ElloumiCTAPInstanceProvider.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/ElloumiCTAPInstanceProvider.cs	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/ElloumiCTAPInstanceProvider.cs	(revision 7548)
@@ -28,5 +28,5 @@
 
 namespace HeuristicLab.Problems.Instances.ElloumiCTAP {
-  public class ElloumiCTAPInstanceProvider : ProblemInstanceProvider<CTAPInstance> {
+  public class ElloumiCTAPInstanceProvider : ProblemInstanceProvider<CTAPData> {
     public override string Name {
       get { return "Elloumi's CTAP instances"; }
@@ -49,5 +49,5 @@
     }
 
-    public override IEnumerable<IInstanceDescriptor> GetInstanceDescriptors() {
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
       var solutions = Assembly.GetExecutingAssembly()
         .GetManifestResourceNames()
@@ -59,9 +59,9 @@
           .Where(x => x.EndsWith(".dat"))
           .OrderBy(x => x)
-          .Select(x => new ElloumiCTAPInstanceDescriptor(GetPrettyName(x), GetDescription(), x, solutions.ContainsKey(x) ? solutions[x] : String.Empty));
+          .Select(x => new ElloumiCTAPDataDescriptor(GetPrettyName(x), GetDescription(), x, solutions.ContainsKey(x) ? solutions[x] : String.Empty));
     }
 
-    public override CTAPInstance LoadInstance(IInstanceDescriptor id) {
-      var descriptor = (ElloumiCTAPInstanceDescriptor)id;
+    public override CTAPData LoadData(IDataDescriptor id) {
+      var descriptor = (ElloumiCTAPDataDescriptor)id;
       using (var stream = Assembly.GetExecutingAssembly()
         .GetManifestResourceStream(descriptor.InstanceIdentifier)) {
@@ -88,5 +88,5 @@
     }
 
-    public override CTAPInstance LoadInstance(string path) {
+    public override CTAPData LoadData(string path) {
       var parser = new ElloumiCTAPParser();
       parser.Parse(path);
@@ -97,10 +97,10 @@
     }
 
-    public override void SaveInstance(CTAPInstance instance, string path) {
+    public override void SaveData(CTAPData instance, string path) {
       throw new NotSupportedException();
     }
 
-    private CTAPInstance Load(ElloumiCTAPParser parser) {
-      var instance = new CTAPInstance();
+    private CTAPData Load(ElloumiCTAPParser parser) {
+      var instance = new CTAPData();
       instance.Processors = parser.Processors;
       instance.Tasks = parser.Tasks;
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj	(revision 7548)
@@ -133,5 +133,5 @@
     <EmbeddedResource Include="Data\tassc2005De.dat" />
     <None Include="Plugin.cs.frame" />
-    <Compile Include="ElloumiCTAPInstanceDescriptor.cs" />
+    <Compile Include="ElloumiCTAPDataDescriptor.cs" />
     <Compile Include="ElloumiCTAPInstanceProvider.cs" />
     <Compile Include="ElloumiCTAPParser.cs" />
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj	(revision 7548)
@@ -51,5 +51,5 @@
   <ItemGroup>
     <Compile Include="QAPLIBParser.cs" />
-    <Compile Include="QAPLIBInstanceDescriptor.cs" />
+    <Compile Include="QAPLIBDataDescriptor.cs" />
     <Compile Include="QAPLIBSolutionParser.cs" />
     <Compile Include="QAPLIBInstanceProvider.cs" />
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBDataDescriptor.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBDataDescriptor.cs	(revision 7548)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBDataDescriptor.cs	(revision 7548)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Instances.QAPLIB {
+  internal class QAPLIBDataDescriptor : IDataDescriptor {
+    public string Name { get; internal set; }
+    public string Description { get; internal set; }
+
+    internal string InstanceIdentifier { get; set; }
+    internal string SolutionIdentifier { get; set; }
+
+    internal QAPLIBDataDescriptor(string name, string description, string instanceIdentifier, string solutionIdentifier) {
+      this.Name = name;
+      this.Description = description;
+      this.InstanceIdentifier = instanceIdentifier;
+      this.SolutionIdentifier = solutionIdentifier;
+    }
+  }
+}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBInstanceDescriptor.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBInstanceDescriptor.cs	(revision 7547)
+++ 	(revision )
@@ -1,37 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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.Instances.QAPLIB {
-  internal class QAPLIBInstanceDescriptor : IInstanceDescriptor {
-    public string Name { get; internal set; }
-    public string Description { get; internal set; }
-
-    internal string InstanceIdentifier { get; set; }
-    internal string SolutionIdentifier { get; set; }
-
-    internal QAPLIBInstanceDescriptor(string name, string description, string instanceIdentifier, string solutionIdentifier) {
-      this.Name = name;
-      this.Description = description;
-      this.InstanceIdentifier = instanceIdentifier;
-      this.SolutionIdentifier = solutionIdentifier;
-    }
-  }
-}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBInstanceProvider.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBInstanceProvider.cs	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBInstanceProvider.cs	(revision 7548)
@@ -28,5 +28,5 @@
 
 namespace HeuristicLab.Problems.Instances.QAPLIB {
-  public class QAPLIBInstanceProvider : ProblemInstanceProvider<QAPInstance> {
+  public class QAPLIBInstanceProvider : ProblemInstanceProvider<QAPData> {
     public override string Name {
       get { return "QAPLIB"; }
@@ -49,5 +49,5 @@
     }
 
-    public override IEnumerable<IInstanceDescriptor> GetInstanceDescriptors() {
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
       var solutions = Assembly.GetExecutingAssembly()
         .GetManifestResourceNames()
@@ -59,9 +59,9 @@
           .Where(x => x.EndsWith(".dat"))
           .OrderBy(x => x)
-          .Select(x => new QAPLIBInstanceDescriptor(GetPrettyName(x), GetDescription(), x, solutions.ContainsKey(x) ? solutions[x] : String.Empty));
+          .Select(x => new QAPLIBDataDescriptor(GetPrettyName(x), GetDescription(), x, solutions.ContainsKey(x) ? solutions[x] : String.Empty));
     }
 
-    public override QAPInstance LoadInstance(IInstanceDescriptor id) {
-      var descriptor = (QAPLIBInstanceDescriptor)id;
+    public override QAPData LoadData(IDataDescriptor id) {
+      var descriptor = (QAPLIBDataDescriptor)id;
       using (var stream = Assembly.GetExecutingAssembly()
         .GetManifestResourceStream(descriptor.InstanceIdentifier)) {
@@ -87,5 +87,5 @@
     }
 
-    public override QAPInstance LoadInstance(string path) {
+    public override QAPData LoadData(string path) {
       var parser = new QAPLIBParser();
       parser.Parse(path);
@@ -96,10 +96,10 @@
     }
 
-    public override void SaveInstance(QAPInstance instance, string path) {
+    public override void SaveData(QAPData instance, string path) {
       throw new NotSupportedException();
     }
 
-    private QAPInstance Load(QAPLIBParser parser) {
-      var instance = new QAPInstance();
+    private QAPData Load(QAPLIBParser parser) {
+      var instance = new QAPData();
       instance.Dimension = parser.Size;
       instance.Distances = parser.Distances;
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj	(revision 7548)
@@ -47,5 +47,5 @@
     <Compile Include="TSPLIBATSPInstanceProvider.cs" />
     <Compile Include="TSPLIBCVRPInstanceProvider.cs" />
-    <Compile Include="TSPLIBInstanceDescriptor.cs" />
+    <Compile Include="TSPLIBDataDescriptor.cs" />
     <Compile Include="TSPLIBTSPInstanceProvider.cs" />
     <Compile Include="TSPLIBParser.cs" />
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBATSPInstanceProvider.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBATSPInstanceProvider.cs	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBATSPInstanceProvider.cs	(revision 7548)
@@ -28,5 +28,5 @@
 
 namespace HeuristicLab.Problems.Instances.TSPLIB {
-  public class TSPLIBATSPInstanceProvider : ProblemInstanceProvider<ATSPInstance> {
+  public class TSPLIBATSPInstanceProvider : ProblemInstanceProvider<ATSPData> {
 
     public override string Name {
@@ -50,5 +50,5 @@
     }
 
-    public override IEnumerable<IInstanceDescriptor> GetInstanceDescriptors() {
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
       var solutions = Assembly.GetExecutingAssembly()
         .GetManifestResourceNames()
@@ -62,9 +62,9 @@
           .Where(x => x.EndsWith(".atsp"))
           .OrderBy(x => x)
-          .Select(x => new TSPLIBInstanceDescriptor(GetPrettyName(x), GetDescription(), x, solutions.ContainsKey(x) ? solutions[x] : String.Empty));
+          .Select(x => new TSPLIBDataDescriptor(GetPrettyName(x), GetDescription(), x, solutions.ContainsKey(x) ? solutions[x] : String.Empty));
     }
 
-    public override ATSPInstance LoadInstance(IInstanceDescriptor id) {
-      var descriptor = (TSPLIBInstanceDescriptor)id;
+    public override ATSPData LoadData(IDataDescriptor id) {
+      var descriptor = (TSPLIBDataDescriptor)id;
       using (var stream = Assembly.GetExecutingAssembly()
         .GetManifestResourceStream(descriptor.InstanceIdentifier)) {
@@ -83,14 +83,14 @@
     }
 
-    public override ATSPInstance LoadInstance(string path) {
+    public override ATSPData LoadData(string path) {
       return Load(new TSPLIBParser(path));
     }
 
-    public override void SaveInstance(ATSPInstance instance, string path) {
+    public override void SaveData(ATSPData instance, string path) {
       throw new NotSupportedException();
     }
 
-    private ATSPInstance Load(TSPLIBParser parser) {
-      var instance = new ATSPInstance();
+    private ATSPData Load(TSPLIBParser parser) {
+      var instance = new ATSPData();
 
       parser.Parse();
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBCVRPInstanceProvider.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBCVRPInstanceProvider.cs	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBCVRPInstanceProvider.cs	(revision 7548)
@@ -28,5 +28,5 @@
 
 namespace HeuristicLab.Problems.Instances.TSPLIB {
-  public class TSPLIBCVRPInstanceProvider : ProblemInstanceProvider<CVRPInstance> {
+  public class TSPLIBCVRPInstanceProvider : ProblemInstanceProvider<CVRPData> {
 
     public override string Name {
@@ -50,5 +50,5 @@
     }
 
-    public override IEnumerable<IInstanceDescriptor> GetInstanceDescriptors() {
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
       var solutions = Assembly.GetExecutingAssembly()
         .GetManifestResourceNames()
@@ -61,9 +61,9 @@
           .Where(x => Regex.Match(x, @".*\.Data\.CVRP\..*").Success)
           .OrderBy(x => x)
-          .Select(x => new TSPLIBInstanceDescriptor(GetPrettyName(x), GetDescription(), x, solutions.ContainsKey(x) ? solutions[x] : String.Empty));
+          .Select(x => new TSPLIBDataDescriptor(GetPrettyName(x), GetDescription(), x, solutions.ContainsKey(x) ? solutions[x] : String.Empty));
     }
 
-    public override CVRPInstance LoadInstance(IInstanceDescriptor id) {
-      var descriptor = (TSPLIBInstanceDescriptor)id;
+    public override CVRPData LoadData(IDataDescriptor id) {
+      var descriptor = (TSPLIBDataDescriptor)id;
       using (var stream = Assembly.GetExecutingAssembly()
         .GetManifestResourceStream(descriptor.InstanceIdentifier)) {
@@ -82,15 +82,15 @@
     }
 
-    public override CVRPInstance LoadInstance(string path) {
+    public override CVRPData LoadData(string path) {
       return Load(new TSPLIBParser(path));
     }
 
-    public override void SaveInstance(CVRPInstance instance, string path) {
+    public override void SaveData(CVRPData instance, string path) {
       throw new NotSupportedException();
     }
 
-    private CVRPInstance Load(TSPLIBParser parser) {
+    private CVRPData Load(TSPLIBParser parser) {
       parser.Parse();
-      var instance = new CVRPInstance();
+      var instance = new CVRPData();
       instance.Dimension = parser.Dimension;
       instance.Coordinates = parser.Vertices != null ? parser.Vertices : parser.DisplayVertices;
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBDataDescriptor.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBDataDescriptor.cs	(revision 7548)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBDataDescriptor.cs	(revision 7548)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Instances.TSPLIB {
+  internal class TSPLIBDataDescriptor : IDataDescriptor {
+    public string Name { get; internal set; }
+    public string Description { get; internal set; }
+
+    internal string InstanceIdentifier { get; set; }
+    internal string SolutionIdentifier { get; set; }
+
+    internal TSPLIBDataDescriptor(string name, string description, string instanceIdentifier, string solutionIdentifier) {
+      this.Name = name;
+      this.Description = description;
+      this.InstanceIdentifier = instanceIdentifier;
+      this.SolutionIdentifier = solutionIdentifier;
+    }
+  }
+}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBInstanceDescriptor.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBInstanceDescriptor.cs	(revision 7547)
+++ 	(revision )
@@ -1,37 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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.Instances.TSPLIB {
-  internal class TSPLIBInstanceDescriptor : IInstanceDescriptor {
-    public string Name { get; internal set; }
-    public string Description { get; internal set; }
-
-    internal string InstanceIdentifier { get; set; }
-    internal string SolutionIdentifier { get; set; }
-
-    internal TSPLIBInstanceDescriptor(string name, string description, string instanceIdentifier, string solutionIdentifier) {
-      this.Name = name;
-      this.Description = description;
-      this.InstanceIdentifier = instanceIdentifier;
-      this.SolutionIdentifier = solutionIdentifier;
-    }
-  }
-}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBTSPInstanceProvider.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBTSPInstanceProvider.cs	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBTSPInstanceProvider.cs	(revision 7548)
@@ -28,5 +28,5 @@
 
 namespace HeuristicLab.Problems.Instances.TSPLIB {
-  public class TSPLIBTSPInstanceProvider : ProblemInstanceProvider<TSPInstance> {
+  public class TSPLIBTSPInstanceProvider : ProblemInstanceProvider<TSPData> {
 
     public override string Name {
@@ -50,5 +50,5 @@
     }
 
-    public override IEnumerable<IInstanceDescriptor> GetInstanceDescriptors() {
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
       var solutions = Assembly.GetExecutingAssembly()
         .GetManifestResourceNames()
@@ -62,9 +62,9 @@
         .Where(x => x.EndsWith(".tsp"))
         .OrderBy(x => x)
-        .Select(x => new TSPLIBInstanceDescriptor(GetPrettyName(x), GetDescription(), x, solutions.ContainsKey(x) ? solutions[x] : String.Empty));
+        .Select(x => new TSPLIBDataDescriptor(GetPrettyName(x), GetDescription(), x, solutions.ContainsKey(x) ? solutions[x] : String.Empty));
     }
 
-    public override TSPInstance LoadInstance(IInstanceDescriptor id) {
-      var descriptor = (TSPLIBInstanceDescriptor)id;
+    public override TSPData LoadData(IDataDescriptor id) {
+      var descriptor = (TSPLIBDataDescriptor)id;
       using (var stream = Assembly.GetExecutingAssembly()
         .GetManifestResourceStream(descriptor.InstanceIdentifier)) {
@@ -84,16 +84,16 @@
     }
 
-    public override TSPInstance LoadInstance(string path) {
+    public override TSPData LoadData(string path) {
       return Load(new TSPLIBParser(path));
     }
 
-    public override void SaveInstance(TSPInstance instance, string path) {
+    public override void SaveData(TSPData instance, string path) {
       throw new NotSupportedException();
     }
 
-    private TSPInstance Load(TSPLIBParser parser) {
+    private TSPData Load(TSPLIBParser parser) {
       parser.Parse();
       if (parser.FixedEdges != null) throw new InvalidDataException("TSP instance " + parser.Name + " contains fixed edges which are not supported by HeuristicLab.");
-      var instance = new TSPInstance();
+      var instance = new TSPData();
       instance.Dimension = parser.Dimension;
       instance.Coordinates = parser.Vertices != null ? parser.Vertices : parser.DisplayVertices;
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj	(revision 7548)
@@ -54,12 +54,12 @@
     <None Include="Plugin.cs.frame" />
     <Compile Include="IExportable.cs" />
-    <Compile Include="Instances\ATSPInstance.cs" />
-    <Compile Include="Instances\CTAPInstance.cs" />
-    <Compile Include="IInstanceDescriptor.cs" />
-    <Compile Include="Instances\CVRPInstance.cs" />
-    <Compile Include="Instances\GQAPInstance.cs" />
-    <Compile Include="Instances\QAPInstance.cs" />
-    <Compile Include="Instances\TSPInstance.cs" />
-    <Compile Include="IConsumable.cs" />
+    <Compile Include="Types\ATSPData.cs" />
+    <Compile Include="Types\CTAPData.cs" />
+    <Compile Include="IDataDescriptor.cs" />
+    <Compile Include="Types\CVRPData.cs" />
+    <Compile Include="Types\GQAPData.cs" />
+    <Compile Include="Types\QAPData.cs" />
+    <Compile Include="Types\TSPData.cs" />
+    <Compile Include="IProblemInstanceConsumer.cs" />
     <Compile Include="IProblemInstanceProvider.cs" />
     <Compile Include="Plugin.cs" />
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/IConsumable.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/IConsumable.cs	(revision 7547)
+++ 	(revision )
@@ -1,26 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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.Instances {
-  public interface IConsumable<TInstance> {
-    bool LoadFrom(TInstance instance);
-  }
-}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/IDataDescriptor.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/IDataDescriptor.cs	(revision 7548)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/IDataDescriptor.cs	(revision 7548)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Instances {
+  public interface IDataDescriptor {
+    string Name { get; }
+    string Description { get; }
+  }
+}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/IInstanceDescriptor.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/IInstanceDescriptor.cs	(revision 7547)
+++ 	(revision )
@@ -1,27 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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.Instances {
-  public interface IInstanceDescriptor {
-    string Name { get; }
-    string Description { get; }
-  }
-}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/IProblemInstanceConsumer.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/IProblemInstanceConsumer.cs	(revision 7548)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/IProblemInstanceConsumer.cs	(revision 7548)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Instances {
+  public interface IProblemInstanceConsumer<TData> {
+    /// <summary>
+    /// Loads the given instance data.
+    /// </summary>
+    /// <exception cref="InvalidDataException">Thrown when the instance cannot be loaded.</exception>
+    /// <param name="data">The data of the instance.</param>
+    void Load(TData data);
+  }
+}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/IProblemInstanceProvider.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/IProblemInstanceProvider.cs	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/IProblemInstanceProvider.cs	(revision 7548)
@@ -32,12 +32,12 @@
   }
 
-  public interface IProblemInstanceProvider<TInstance> : IProblemInstanceProvider {
-    IConsumable<TInstance> Consumer { get; set; }
+  public interface IProblemInstanceProvider<TData> : IProblemInstanceProvider {
+    IProblemInstanceConsumer<TData> Consumer { get; set; }
 
-    IEnumerable<IInstanceDescriptor> GetInstanceDescriptors();
-    TInstance LoadInstance(IInstanceDescriptor descriptor);
-    TInstance LoadInstance(string path);
-
-    void SaveInstance(TInstance instance, string path);
+    IEnumerable<IDataDescriptor> GetDataDescriptors();
+    TData LoadData(IDataDescriptor descriptor);
+    TData LoadData(string path);
+    
+    void SaveData(TData instance, string path);
   }
 }
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/ProblemInstanceProvider.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/ProblemInstanceProvider.cs	(revision 7547)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/ProblemInstanceProvider.cs	(revision 7548)
@@ -24,6 +24,6 @@
 
 namespace HeuristicLab.Problems.Instances {
-  public abstract class ProblemInstanceProvider<TInstance> : IProblemInstanceProvider<TInstance> {
-    public virtual IConsumable<TInstance> Consumer { get; set; }
+  public abstract class ProblemInstanceProvider<TData> : IProblemInstanceProvider<TData> {
+    public virtual IProblemInstanceConsumer<TData> Consumer { get; set; }
 
     public abstract string Name { get; }
@@ -32,10 +32,10 @@
     public abstract string ReferencePublication { get; }
 
-    public abstract IEnumerable<IInstanceDescriptor> GetInstanceDescriptors();
+    public abstract IEnumerable<IDataDescriptor> GetDataDescriptors();
 
-    public abstract TInstance LoadInstance(IInstanceDescriptor descriptor);
-    public abstract TInstance LoadInstance(string path);
+    public abstract TData LoadData(IDataDescriptor descriptor);
+    public abstract TData LoadData(string path);
 
-    public abstract void SaveInstance(TInstance instance, string path);
+    public abstract void SaveData(TData instance, string path);
   }
 }
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/ATSPData.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/ATSPData.cs	(revision 7548)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/ATSPData.cs	(revision 7548)
@@ -0,0 +1,63 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Instances {
+  /// <summary>
+  /// Describe instances of the Asymmetric Traveling Salesman Problem (ATSP).
+  /// </summary>
+  public class ATSPData {
+    /// <summary>
+    /// The name of the instance
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// Optional! The description of the instance
+    /// </summary>
+    public string Description { get; set; }
+
+    /// <summary>
+    /// The number of cities.
+    /// </summary>
+    public int Dimension { get; set; }
+    /// <summary>
+    /// The distances are given in form of a distance matrix.
+    /// </summary>
+    public double[,] Distances { get; set; }
+    /// <summary>
+    /// Optional! A a matrix of dimension [N, 2] where each row is one of the cities
+    /// and the colmns represent x and y coordinates respectively.
+    /// </summary>
+    /// <remarks>
+    /// The coordinates are for display purposes only.
+    /// </remarks>
+    public double[,] Coordinates { get; set; }
+
+    /// <summary>
+    /// Optional! The best-known tour in path-encoding.
+    /// </summary>
+    public int[] BestKnownTour { get; set; }
+    /// <summary>
+    /// Optional! The quality of the best-known tour.
+    /// </summary>
+    public double? BestKnownQuality { get; set; }
+  }
+}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/CTAPData.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/CTAPData.cs	(revision 7548)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/CTAPData.cs	(revision 7548)
@@ -0,0 +1,70 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Instances {
+  /// <summary>
+  /// Describes instances of the Capacitated Task Assignment Problem (CTAP).
+  /// </summary>
+  public class CTAPData {
+    /// <summary>
+    /// The name of the instance
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// Optional! The description of the instance
+    /// </summary>
+    public string Description { get; set; }
+
+    /// <summary>
+    /// The number M of processors
+    /// </summary>
+    public int Processors { get; set; }
+    /// <summary>
+    /// The number N of tasks
+    /// </summary>
+    public int Tasks { get; set; }
+    /// <summary>
+    /// An MxN Matrix with M = |Processors| and N = |Tasks|
+    /// </summary>
+    public double[,] ExecutionCosts { get; set; }
+    /// <summary>
+    /// An NxN Matrix with N = |Tasks|
+    /// </summary>
+    public double[,] CommunicationCosts { get; set; }
+    /// <summary>
+    /// An array of length N with N = |Tasks|
+    /// </summary>
+    public double[] MemoryRequirements { get; set; }
+    /// <summary>
+    /// An array of length M with M = |Processors|
+    /// </summary>
+    public double[] MemoryCapacities { get; set; }
+
+    /// <summary>
+    /// Optional! An array of length N with N = |Tasks|
+    /// </summary>
+    public int[] BestKnownAssignment { get; set; }
+    /// <summary>
+    /// Optional! The quality value of the <see cref="BestKnownAssignment"/>
+    /// </summary>
+    public double? BestKnownQuality { get; set; }
+  }
+}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/CVRPData.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/CVRPData.cs	(revision 7548)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/CVRPData.cs	(revision 7548)
@@ -0,0 +1,93 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Instances {
+  public enum CVRPDistanceMeasure { Direct, Euclidean, RoundedEuclidean, UpperEuclidean, Geo, Manhattan, Maximum, Att };
+
+  /// <summary>
+  /// Describes instances of the Capacitated Vehicle Routing Problem (CVRP).
+  /// </summary>
+  public class CVRPData {
+    /// <summary>
+    /// The name of the instance
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// Optional! The description of the instance
+    /// </summary>
+    public string Description { get; set; }
+
+    /// <summary>
+    /// The number of customers and the depot
+    /// </summary>
+    public int Dimension { get; set; }
+    /// <summary>
+    /// The distance measure that is used to calculate the distance between
+    ///the coordinates if no <see cref="Distances"/> is given.
+    /// </summary>
+    public CVRPDistanceMeasure DistanceMeasure { get; set; }
+    /// <summary>
+    /// Optional! The maximum number of vehicles that can be used.
+    /// </summary>
+    /// <remarks>
+    /// If no number is given, but a maximum is required, it can be assumed that
+    /// the maximum number of vehicles is equal to the number of customers as
+    /// there cannot be more than one vehicle per customer.
+    /// </remarks>
+    public double? MaximumVehicles { get; set; }
+    /// <summary>
+    /// The capacity of the vehicles, which is the same for all (homogeneous fleet).
+    /// </summary>
+    public double Capacity { get; set; }
+    /// <summary>
+    /// Optional! The distances are given in form of a distance matrix.
+    /// </summary>
+    /// <remarks>
+    /// Either Distances or the <see cref="Coordinates"/> need to be specified along
+    /// with a distance measure.
+    /// </remarks>
+    public double[,] Distances { get; set; }
+    /// <summary>
+    /// Optional! A a matrix of dimension [N, 2] where each row is either the customer
+    /// or the depot and the columns represent x and y coordinates respectively.
+    /// </summary>
+    /// <remarks>
+    /// Either <see cref="Distances"/> or the Coordinates need to be specified along
+    /// with a distance measure.
+    /// </remarks>
+    public double[,] Coordinates { get; set; }
+    /// <summary>
+    /// The demand vector that specifies how many goods need to be delivered.
+    /// The vector has to include the depot, but with a demand of 0.
+    /// </summary>
+    public double[] Demands { get; set; }
+
+    /// <summary>
+    /// Optional! The best-known solution as a list of tours in path-encoding.
+    /// </summary>
+    public int[][] BestKnownTour { get; set; }
+    /// <summary>
+    /// Optional! The quality of the best-known solution.
+    /// </summary>
+    public double? BestKnownQuality { get; set; }
+  }
+}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/GQAPData.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/GQAPData.cs	(revision 7548)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/GQAPData.cs	(revision 7548)
@@ -0,0 +1,78 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Instances {
+  /// <summary>
+  /// Describes an instance of the Generalized Quadratic Assignment Problem (GQAP).
+  /// </summary>
+  public class GQAPData {
+    /// <summary>
+    /// The name of the instance.
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// A description of the instance.
+    /// </summary>
+    public string Description { get; set; }
+
+    /// <summary>
+    /// |E| = The number of equipments are to be assigned in this instance.
+    /// </summary>
+    public int Equipments { get; set; }
+    /// <summary>
+    /// |L| = The number of locations that are available for the equipments.
+    /// </summary>
+    public int Locations { get; set; }
+    /// <summary>
+    /// Vector of length |E| that describes the space demand for the equipments.
+    /// </summary>
+    public double[] Demands { get; set; }
+    /// <summary>
+    /// Vector of length |L| that describes the space capacity for the locations.
+    /// </summary>
+    public double[] Capacities { get; set; }
+    /// <summary>
+    /// |E|x|E| matrix with the weights (flows) between the equipments. These describe the strength of the respective bonding.
+    /// </summary>
+    public double[,] Weights { get; set; }
+    /// <summary>
+    /// |L|x|L| matrix with the distances between the locations.
+    /// </summary>
+    public double[,] Distances { get; set; }
+    /// <summary>
+    /// |E|x|L| matrix that describes the costs of installing equipment x at location y.
+    /// </summary>
+    public double[,] InstallationCosts { get; set; }
+    /// <summary>
+    /// A factor that scales the weights.
+    /// </summary>
+    public double TransportationCosts { get; set; }
+
+    /// <summary>
+    /// Optional! The best-known assignment is a vector of length |E| with numbers ranging from 0 to |L| - 1
+    /// </summary>
+    public int[] BestKnownAssignment { get; set; }
+    /// <summary>
+    /// Optional! The quality of the best-known assignment.
+    /// </summary>
+    public double? BestKnownQuality { get; set; }
+  }
+}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/QAPData.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/QAPData.cs	(revision 7548)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/QAPData.cs	(revision 7548)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Instances {
+  /// <summary>
+  /// Describes instances of the Quadratic Assignment Problem (QAP).
+  /// </summary>
+  public class QAPData {
+    /// <summary>
+    /// The name of the instance
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// Optional! The description of the instance
+    /// </summary>
+    public string Description { get; set; }
+
+    /// <summary>
+    /// The number of facilities (and also the number of locations)
+    /// </summary>
+    public int Dimension { get; set; }
+    /// <summary>
+    /// An NxN Matrix with N = |Faciliies|
+    /// </summary>
+    public double[,] Distances { get; set; }
+    /// <summary>
+    /// An NxN Matrix with N = |Faciliies|
+    /// </summary>
+    public double[,] Weights { get; set; }
+
+    /// <summary>
+    /// Optional! An array of length N with N = |Facilities|
+    /// </summary>
+    public int[] BestKnownAssignment { get; set; }
+    /// <summary>
+    /// Optional! The quality value of the <see cref="BestKnownAssignment"/>
+    /// </summary>
+    public double? BestKnownQuality { get; set; }
+  }
+}
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/TSPData.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/TSPData.cs	(revision 7548)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances/3.3/Types/TSPData.cs	(revision 7548)
@@ -0,0 +1,158 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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
+
+using System;
+
+namespace HeuristicLab.Problems.Instances {
+  public enum TSPDistanceMeasure { Direct, Euclidean, RoundedEuclidean, UpperEuclidean, Geo, Manhattan, Maximum, Att };
+
+  /// <summary>
+  /// Describes instances of the Traveling Salesman Problem (TSP).
+  /// </summary>
+  public class TSPData {
+    /// <summary>
+    /// The name of the instance
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// Optional! The description of the instance
+    /// </summary>
+    public string Description { get; set; }
+
+    /// <summary>
+    /// The number of cities.
+    /// </summary>
+    public int Dimension { get; set; }
+    /// <summary>
+    /// Specifies the distance measure that is to be used.
+    /// </summary>
+    public TSPDistanceMeasure DistanceMeasure { get; set; }
+    /// <summary>
+    /// Optional! The distances are given in form of a distance matrix.
+    /// </summary>
+    /// <remarks>
+    /// Either this property or <see cref="Coordinates"/> needs to be specified.
+    /// </remarks>
+    public double[,] Distances { get; set; }
+    /// <summary>
+    /// Optional! A a matrix of dimension [N, 2] matrix where each row is one of the cities
+    /// and the colmns represent x and y coordinates respectively.
+    /// </summary>
+    /// <remarks>
+    /// Either this property or <see cref="Distances"/> needs to be specified.
+    /// 
+    /// If no distance matrix is given, the distances have to be calculated by the
+    /// specified distance measure. If a distance matrix is given in addtion to the
+    /// coordinates, the distance matrix takes precedence and the coordinates are
+    /// for display only.
+    /// </remarks>
+    public double[,] Coordinates { get; set; }
+
+    /// <summary>
+    /// Optional! The best-known tour in path-encoding.
+    /// </summary>
+    public int[] BestKnownTour { get; set; }
+    /// <summary>
+    /// Optional! The quality of the best-known tour.
+    /// </summary>
+    public double? BestKnownQuality { get; set; }
+
+    /// <summary>
+    /// If only the coordinates are given, can calculate the distance matrix.
+    /// </summary>
+    /// <returns>A full distance matrix between all cities.</returns>
+    public double[,] GetDistanceMatrix() {
+      if (Distances != null) return Distances;
+      Distances = new double[Dimension, Dimension];
+      for (int i = 0; i < Dimension - 1; i++)
+        for (int j = i + 1; j < Dimension; j++) {
+          Distances[i, j] = GetDistance(i, j);
+          Distances[j, i] = Distances[i, j];
+        }
+      return Distances;
+    }
+
+    #region Private Helpers
+    private double GetDistance(int i, int j) {
+      switch (DistanceMeasure) {
+        case TSPDistanceMeasure.Att:
+          return AttDistance(Coordinates[i, 0], Coordinates[i, 1], Coordinates[j, 0], Coordinates[j, 1]);
+        case TSPDistanceMeasure.Direct:
+          return Distances[i, j];
+        case TSPDistanceMeasure.Euclidean:
+          return EuclideanDistance(Coordinates[i, 0], Coordinates[i, 1], Coordinates[j, 0], Coordinates[j, 1]);
+        case TSPDistanceMeasure.Geo:
+          return GeoDistance(Coordinates[i, 0], Coordinates[i, 1], Coordinates[j, 0], Coordinates[j, 1]);
+        case TSPDistanceMeasure.Manhattan:
+          return ManhattanDistance(Coordinates[i, 0], Coordinates[i, 1], Coordinates[j, 0], Coordinates[j, 1]);
+        case TSPDistanceMeasure.Maximum:
+          return MaximumDistance(Coordinates[i, 0], Coordinates[i, 1], Coordinates[j, 0], Coordinates[j, 1]);
+        case TSPDistanceMeasure.RoundedEuclidean:
+          return Math.Round(EuclideanDistance(Coordinates[i, 0], Coordinates[i, 1], Coordinates[j, 0], Coordinates[j, 1]));
+        case TSPDistanceMeasure.UpperEuclidean:
+          return Math.Ceiling(EuclideanDistance(Coordinates[i, 0], Coordinates[i, 1], Coordinates[j, 0], Coordinates[j, 1]));
+        default:
+          throw new InvalidOperationException("Distance measure is not known.");
+      }
+    }
+
+    private double AttDistance(double x1, double y1, double x2, double y2) {
+      return Math.Ceiling(Math.Sqrt(((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)) / 10.0));
+    }
+
+    private double EuclideanDistance(double x1, double y1, double x2, double y2) {
+      return Math.Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
+    }
+
+    private const double PI = 3.141592;
+    private const double RADIUS = 6378.388;
+    private double GeoDistance(double x1, double y1, double x2, double y2) {
+      double latitude1, longitude1, latitude2, longitude2;
+      double q1, q2, q3;
+      double length;
+
+      latitude1 = ConvertToRadian(x1);
+      longitude1 = ConvertToRadian(y1);
+      latitude2 = ConvertToRadian(x2);
+      longitude2 = ConvertToRadian(y2);
+
+      q1 = Math.Cos(longitude1 - longitude2);
+      q2 = Math.Cos(latitude1 - latitude2);
+      q3 = Math.Cos(latitude1 + latitude2);
+
+      length = (int)(RADIUS * Math.Acos(0.5 * ((1.0 + q1) * q2 - (1.0 - q1) * q3)) + 1.0);
+      return (length);
+    }
+
+    private double ConvertToRadian(double x) {
+      return PI * (Math.Truncate(x) + 5.0 * (x - Math.Truncate(x)) / 3.0) / 180.0;
+    }
+
+    private double ManhattanDistance(double x1, double y1, double x2, double y2) {
+      return Math.Round(Math.Abs(x1 - x2) + Math.Abs(y1 - y2), MidpointRounding.AwayFromZero);
+    }
+
+    private double MaximumDistance(double x1, double y1, double x2, double y2) {
+      return Math.Max(Math.Round(Math.Abs(x1 - x2), MidpointRounding.AwayFromZero), Math.Round(Math.Abs(y1 - y2), MidpointRounding.AwayFromZero));
+    }
+    #endregion
+  }
+}
Index: branches/GeneralizedQAP/UnitTests/CordeauCrossoverTest.cs
===================================================================
--- branches/GeneralizedQAP/UnitTests/CordeauCrossoverTest.cs	(revision 7547)
+++ branches/GeneralizedQAP/UnitTests/CordeauCrossoverTest.cs	(revision 7548)
@@ -34,7 +34,7 @@
     public void CordeauCrossoverFunctionalityTest() {
       var provider = new CordeauGQAPInstanceProvider();
-      var instance = provider.LoadInstance(provider.GetInstanceDescriptors().First());
+      var instance = provider.LoadData(provider.GetDataDescriptors().First());
       var gqap = new GeneralizedQuadraticAssignmentProblem();
-      gqap.LoadFrom(instance);
+      gqap.Load(instance);
 
       var random = new MersenneTwister();
Index: branches/GeneralizedQAP/UnitTests/CordeauGQAPInstanceProviderTest.cs
===================================================================
--- branches/GeneralizedQAP/UnitTests/CordeauGQAPInstanceProviderTest.cs	(revision 7547)
+++ branches/GeneralizedQAP/UnitTests/CordeauGQAPInstanceProviderTest.cs	(revision 7548)
@@ -34,7 +34,7 @@
       StringBuilder erroneousInstances = new StringBuilder();
       int count = 0;
-      foreach (var id in target.GetInstanceDescriptors()) {
+      foreach (var id in target.GetDataDescriptors()) {
         try {
-          target.LoadInstance(id);
+          target.LoadData(id);
         } catch (Exception ex) {
           erroneousInstances.AppendLine(id.Name + ": " + ex.Message);
Index: branches/GeneralizedQAP/UnitTests/ElloumiCTAPInstanceProviderTest.cs
===================================================================
--- branches/GeneralizedQAP/UnitTests/ElloumiCTAPInstanceProviderTest.cs	(revision 7547)
+++ branches/GeneralizedQAP/UnitTests/ElloumiCTAPInstanceProviderTest.cs	(revision 7548)
@@ -34,7 +34,7 @@
       StringBuilder erroneousInstances = new StringBuilder();
       int count = 0;
-      foreach (var id in target.GetInstanceDescriptors()) {
+      foreach (var id in target.GetDataDescriptors()) {
         try {
-          target.LoadInstance(id);
+          target.LoadData(id);
         } catch (Exception ex) {
           erroneousInstances.AppendLine(id.Name + ": " + ex.Message);
Index: branches/GeneralizedQAP/UnitTests/QAPLIBInstanceProviderTest.cs
===================================================================
--- branches/GeneralizedQAP/UnitTests/QAPLIBInstanceProviderTest.cs	(revision 7547)
+++ branches/GeneralizedQAP/UnitTests/QAPLIBInstanceProviderTest.cs	(revision 7548)
@@ -35,7 +35,7 @@
       StringBuilder erroneousInstances = new StringBuilder();
       int count = 0;
-      foreach (var id in target.GetInstanceDescriptors()) {
+      foreach (var id in target.GetDataDescriptors()) {
         try {
-          target.LoadInstance(id);
+          target.LoadData(id);
         } catch (Exception ex) {
           erroneousInstances.AppendLine(id.Name + ": " + ex.Message);
@@ -54,6 +54,6 @@
       List<string> nonZeroDiagonalInstances = new List<string>();
       var target = new QAPLIBInstanceProvider();
-      foreach (var id in target.GetInstanceDescriptors()) {
-        var instance = target.LoadInstance(id);
+      foreach (var id in target.GetDataDescriptors()) {
+        var instance = target.LoadData(id);
         for (int i = 0; i < instance.Dimension; i++)
           if (instance.Distances[i, i] != 0 || instance.Weights[i, i] != 0) {
Index: branches/GeneralizedQAP/UnitTests/TSPLIBInstanceProviderTest.cs
===================================================================
--- branches/GeneralizedQAP/UnitTests/TSPLIBInstanceProviderTest.cs	(revision 7547)
+++ branches/GeneralizedQAP/UnitTests/TSPLIBInstanceProviderTest.cs	(revision 7548)
@@ -34,7 +34,7 @@
       StringBuilder erroneousInstances = new StringBuilder();
       int count = 0;
-      foreach (var id in target.GetInstanceDescriptors()) {
+      foreach (var id in target.GetDataDescriptors()) {
         try {
-          target.LoadInstance(id);
+          target.LoadData(id);
         } catch (Exception ex) {
           erroneousInstances.AppendLine(id.Name + ": " + ex.Message);
@@ -51,7 +51,7 @@
       StringBuilder erroneousInstances = new StringBuilder();
       int count = 0;
-      foreach (var id in target.GetInstanceDescriptors()) {
+      foreach (var id in target.GetDataDescriptors()) {
         try {
-          target.LoadInstance(id);
+          target.LoadData(id);
         } catch (Exception ex) {
           erroneousInstances.AppendLine(id.Name + ": " + ex.Message);
@@ -68,7 +68,7 @@
       StringBuilder erroneousInstances = new StringBuilder();
       int count = 0;
-      foreach (var id in target.GetInstanceDescriptors()) {
+      foreach (var id in target.GetDataDescriptors()) {
         try {
-          target.LoadInstance(id);
+          target.LoadData(id);
         } catch (Exception ex) {
           erroneousInstances.AppendLine(id.Name + ": " + ex.Message);
