Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/GQAPAssignmentView.Designer.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/GQAPAssignmentView.Designer.cs	(revision 7468)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/GQAPAssignmentView.Designer.cs	(revision 7470)
@@ -56,17 +56,21 @@
       this.label3 = new System.Windows.Forms.Label();
       this.flowDistanceQualityLabel = new System.Windows.Forms.Label();
+      this.assignmentSplitContainer = new System.Windows.Forms.SplitContainer();
+      this.assignmentView = new HeuristicLab.Data.Views.StringConvertibleArrayView();
       this.assignmentGroupBox.SuspendLayout();
       this.characteristicsGroupBox.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.assignmentSplitContainer)).BeginInit();
+      this.assignmentSplitContainer.Panel1.SuspendLayout();
+      this.assignmentSplitContainer.Panel2.SuspendLayout();
+      this.assignmentSplitContainer.SuspendLayout();
       this.SuspendLayout();
       // 
       // assignmentTreeView
       // 
-      this.assignmentTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.assignmentTreeView.Location = new System.Drawing.Point(6, 19);
+      this.assignmentTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.assignmentTreeView.Location = new System.Drawing.Point(0, 0);
       this.assignmentTreeView.Margin = new System.Windows.Forms.Padding(3, 6, 3, 3);
       this.assignmentTreeView.Name = "assignmentTreeView";
-      this.assignmentTreeView.Size = new System.Drawing.Size(228, 331);
+      this.assignmentTreeView.Size = new System.Drawing.Size(78, 337);
       this.assignmentTreeView.TabIndex = 3;
       this.assignmentTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.assignmentTreeView_AfterSelect);
@@ -95,8 +99,8 @@
       // assignmentGroupBox
       // 
-      this.assignmentGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.assignmentGroupBox.Controls.Add(this.assignmentTreeView);
+      this.assignmentGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.assignmentGroupBox.Controls.Add(this.assignmentSplitContainer);
       this.assignmentGroupBox.Location = new System.Drawing.Point(217, 3);
       this.assignmentGroupBox.Name = "assignmentGroupBox";
@@ -108,6 +112,6 @@
       // characteristicsGroupBox
       // 
-      this.characteristicsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)));
+      this.characteristicsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left)));
       this.characteristicsGroupBox.Controls.Add(this.label7);
       this.characteristicsGroupBox.Controls.Add(this.overbookedCapacityLabel);
@@ -185,4 +189,32 @@
       this.flowDistanceQualityLabel.Text = "-";
       // 
+      // assignmentSplitContainer
+      // 
+      this.assignmentSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.assignmentSplitContainer.Location = new System.Drawing.Point(3, 16);
+      this.assignmentSplitContainer.Name = "assignmentSplitContainer";
+      // 
+      // assignmentSplitContainer.Panel1
+      // 
+      this.assignmentSplitContainer.Panel1.Controls.Add(this.assignmentTreeView);
+      // 
+      // assignmentSplitContainer.Panel2
+      // 
+      this.assignmentSplitContainer.Panel2.Controls.Add(this.assignmentView);
+      this.assignmentSplitContainer.Size = new System.Drawing.Size(234, 337);
+      this.assignmentSplitContainer.SplitterDistance = 78;
+      this.assignmentSplitContainer.TabIndex = 4;
+      // 
+      // assignmentView
+      // 
+      this.assignmentView.Caption = "StringConvertibleArray View";
+      this.assignmentView.Content = null;
+      this.assignmentView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.assignmentView.Location = new System.Drawing.Point(0, 0);
+      this.assignmentView.Name = "assignmentView";
+      this.assignmentView.ReadOnly = false;
+      this.assignmentView.Size = new System.Drawing.Size(152, 337);
+      this.assignmentView.TabIndex = 0;
+      // 
       // GQAPAssignmentView
       // 
@@ -196,4 +228,8 @@
       this.characteristicsGroupBox.ResumeLayout(false);
       this.characteristicsGroupBox.PerformLayout();
+      this.assignmentSplitContainer.Panel1.ResumeLayout(false);
+      this.assignmentSplitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.assignmentSplitContainer)).EndInit();
+      this.assignmentSplitContainer.ResumeLayout(false);
       this.ResumeLayout(false);
 
@@ -213,4 +249,6 @@
     private System.Windows.Forms.Label label5;
     private System.Windows.Forms.Label installationQualityLabel;
+    private System.Windows.Forms.SplitContainer assignmentSplitContainer;
+    private Data.Views.StringConvertibleArrayView assignmentView;
   }
 }
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/GQAPAssignmentView.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/GQAPAssignmentView.cs	(revision 7468)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/GQAPAssignmentView.cs	(revision 7470)
@@ -49,5 +49,4 @@
     protected override void DeregisterContentEvents() {
       Content.PropertyChanged -= new PropertyChangedEventHandler(Content_PropertyChanged);
-      Content.Solution.PropertyChanged -= new PropertyChangedEventHandler(ContentSolution_PropertyChanged);
       base.DeregisterContentEvents();
     }
@@ -55,5 +54,4 @@
       base.RegisterContentEvents();
       Content.PropertyChanged += new PropertyChangedEventHandler(Content_PropertyChanged);
-      Content.Solution.PropertyChanged += new PropertyChangedEventHandler(ContentSolution_PropertyChanged);
     }
     #endregion
@@ -75,11 +73,4 @@
     private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) {
       switch (e.PropertyName) {
-        case "EquipmentNames": UpdateAssignment(); break;
-        case "LocationNames": UpdateAssignment(); break;
-        default: break;
-      }
-    }
-    private void ContentSolution_PropertyChanged(object sender, PropertyChangedEventArgs e) {
-      switch (e.PropertyName) {
         case "Quality": UpdateQuality(); break;
         case "FlowDistanceQuality": UpdateFlowDistanceQuality(); break;
@@ -87,6 +78,12 @@
         case "OverbookedCapacity": UpdateOverbookedCapacity(); break;
         case "Assignment": UpdateAssignment(); break;
+        case "EquipmentNames": UpdateAssignment(); break;
+        case "LocationNames": UpdateAssignment(); break;
         default: break;
       }
+    }
+
+    private void Content_Assignment_ToStringChanged(object sender, EventArgs e) {
+      UpdateAssignment();
     }
     #endregion
@@ -129,5 +126,5 @@
           qualityLabel.Text = "-";
         } else {
-          qualityLabel.Text = Content.Solution.Quality.ToString();
+          qualityLabel.Text = Content.Quality.ToString();
         }
       }
@@ -137,8 +134,8 @@
       if (InvokeRequired) Invoke((Action)UpdateFlowDistanceQuality);
       else {
-        if (Content == null || Content.Solution.FlowDistanceQuality == null) {
+        if (Content == null || Content.FlowDistanceQuality == null) {
           flowDistanceQualityLabel.Text = "-";
         } else {
-          flowDistanceQualityLabel.Text = Content.Solution.FlowDistanceQuality.ToString();
+          flowDistanceQualityLabel.Text = Content.FlowDistanceQuality.ToString();
         }
       }
@@ -148,8 +145,8 @@
       if (InvokeRequired) Invoke((Action)UpdateInstallationQuality);
       else {
-        if (Content == null || Content.Solution.InstallationQuality == null) {
+        if (Content == null || Content.InstallationQuality == null) {
           installationQualityLabel.Text = "-";
         } else {
-          installationQualityLabel.Text = Content.Solution.InstallationQuality.ToString();
+          installationQualityLabel.Text = Content.InstallationQuality.ToString();
         }
       }
@@ -159,8 +156,8 @@
       if (InvokeRequired) Invoke((Action)UpdateOverbookedCapacity);
       else {
-        if (Content == null || Content.Solution.OverbookedCapacity == null) {
+        if (Content == null || Content.OverbookedCapacity == null) {
           overbookedCapacityLabel.Text = "-";
         } else {
-          overbookedCapacityLabel.Text = Content.Solution.OverbookedCapacity.ToString();
+          overbookedCapacityLabel.Text = Content.OverbookedCapacity.ToString();
         }
       }
@@ -172,5 +169,5 @@
         assignmentTreeView.Nodes.Clear();
         if (Content != null) {
-          IntegerVector assignment = Content.Solution.Assignment;
+          IntegerVector assignment = Content.Assignment;
           Dictionary<int, TreeNode> locationNodes = new Dictionary<int, TreeNode>();
           for (int i = 0; i < assignment.Length; i++) {
@@ -202,5 +199,5 @@
       var installationCosts = new Dictionary<EquipmentNode, double>();
       foreach (var node in GetAllSubNodes(assignmentTreeView.Nodes).OfType<EquipmentNode>()) {
-        int location = Content.Solution.Assignment[node.Equipment];
+        int location = Content.Assignment[node.Equipment];
         installationCosts[node] = Content.InstallationCosts[node.Equipment, location];
       }
@@ -249,5 +246,5 @@
 
     private void ColorByWeight(LocationNode selectedNode) {
-      var equipments = new HashSet<int>(Content.Solution.Assignment.Select((v, i) => new { Index = i, Value = v })
+      var equipments = new HashSet<int>(Content.Assignment.Select((v, i) => new { Index = i, Value = v })
         .Where(x => x.Value == selectedNode.Location).Select(x => x.Index));
       var rowSums = new Dictionary<int, double>(equipments.Count);
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 7468)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views-3.3.csproj	(revision 7470)
@@ -54,4 +54,5 @@
       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
     </Reference>
+    <Reference Include="HeuristicLab.Data.Views-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
     <Reference Include="HeuristicLab.Encodings.IntegerVectorEncoding-3.3">
       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.IntegerVectorEncoding-3.3.dll</HintPath>
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemInstanceProviderView.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemInstanceProviderView.cs	(revision 7468)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/ProblemInstanceProviderView.cs	(revision 7470)
@@ -60,5 +60,5 @@
       var instance = (IInstanceDescriptor)instancesComboBox.SelectedItem;
       if (!Content.FeedConsumer(instance)) {
-        MessageBox.Show("Loading the problem instance " + instance.Name + " failed.");
+        MessageBox.Show("This problem does not support the instance " + instance.Name + ".", "Cannot load instance");
       }
     }
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Analyzers/BestGQAPSolutionAnalyzer.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Analyzers/BestGQAPSolutionAnalyzer.cs	(revision 7468)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Analyzers/BestGQAPSolutionAnalyzer.cs	(revision 7470)
@@ -41,6 +41,5 @@
     IDemandsAwareGQAPOperator, ICapacitiesAwareGQAPOperator, ITransportationCostsAwareGQAPOperator,
     IOverbookedCapacityPenaltyAwareGQAPOperator, IEquipmentNamesAwareGQAPOperator, ILocationNamesAwareGQAPOperator,
-    IBestKnownQualityAwareGQAPOperator, IBestKnownSolutionAwareGQAPOperator, IBestKnownSolutionsAwareGQAPOperator,
-    IAnalyzer {
+    IBestKnownQualityAwareGQAPOperator, IBestKnownSolutionAwareGQAPOperator, IAnalyzer {
 
     public bool EnabledByDefault {
@@ -97,9 +96,6 @@
       get { return (ILookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
     }
-    public ILookupParameter<GQAPSolution> BestKnownSolutionParameter {
-      get { return (ILookupParameter<GQAPSolution>)Parameters["BestKnownSolution"]; }
-    }
-    public ILookupParameter<GQAPAssignmentArchive> BestKnownSolutionsParameter {
-      get { return (ILookupParameter<GQAPAssignmentArchive>)Parameters["BestKnownSolutions"]; }
+    public ILookupParameter<GQAPAssignment> BestKnownSolutionParameter {
+      get { return (ILookupParameter<GQAPAssignment>)Parameters["BestKnownSolution"]; }
     }
     public ILookupParameter<GQAPAssignment> BestSolutionParameter {
@@ -135,6 +131,5 @@
       Parameters.Add(new LookupParameter<StringArray>("LocationNames", GeneralizedQuadraticAssignmentProblem.LocationNamesDescription));
       Parameters.Add(new LookupParameter<DoubleValue>("BestKnownQuality", GeneralizedQuadraticAssignmentProblem.BestKnownQualityDescription));
-      Parameters.Add(new LookupParameter<GQAPSolution>("BestKnownSolution", GeneralizedQuadraticAssignmentProblem.BestKnownSolutionDescription));
-      Parameters.Add(new LookupParameter<GQAPAssignmentArchive>("BestKnownSolutions", GeneralizedQuadraticAssignmentProblem.BestKnownSolutionsDescription));
+      Parameters.Add(new LookupParameter<GQAPAssignment>("BestKnownSolution", GeneralizedQuadraticAssignmentProblem.BestKnownSolutionDescription));
       Parameters.Add(new LookupParameter<GQAPAssignment>("BestSolution", "The best GQAP solution found so far."));
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the best GQAP solution should be stored."));
@@ -159,5 +154,4 @@
       var maximization = MaximizationParameter.ActualValue.Value;
       var bestKnownQuality = BestKnownQualityParameter.ActualValue;
-      var bestKnownSolutions = BestKnownSolutionsParameter.ActualValue;
 
       int bestIndex;
@@ -168,18 +162,19 @@
       if (bestKnownQuality == null || HasSolutionImproved(bestKnownQuality.Value, qualities[bestIndex].Value, maximization)) {
         BestKnownQualityParameter.ActualValue = new DoubleValue(qualities[bestIndex].Value);
-        BestKnownSolutionParameter.ActualValue = new GQAPSolution((IntegerVector)assignments[bestIndex].Clone(), qualities[bestIndex], flowDistanceQualities[bestIndex], installationQualities[bestIndex], overbookedCapacities[bestIndex]);
+        BestKnownSolutionParameter.ActualValue = new GQAPAssignment((IntegerVector)assignments[bestIndex].Clone(), (DoubleValue)qualities[bestIndex].Clone(), flowDistanceQualities[bestIndex], installationQualities[bestIndex], overbookedCapacities[bestIndex], equipmentNames, locationNames, distances, weights, installationCosts, demands, capacities, transportationCosts, overbookedCapacityPenalty);
       }
 
-      GQAPAssignment assignment = BestSolutionParameter.ActualValue;
+      var assignment = BestSolutionParameter.ActualValue;
       if (assignment == null) {
         assignment = new GQAPAssignment((IntegerVector)assignments[bestIndex].Clone(), (DoubleValue)qualities[bestIndex].Clone(), flowDistanceQualities[bestIndex], installationQualities[bestIndex], overbookedCapacities[bestIndex], equipmentNames, locationNames, distances, weights, installationCosts, demands, capacities, transportationCosts, overbookedCapacityPenalty);
         assignment.Distances = distances;
         BestSolutionParameter.ActualValue = assignment;
-        results.Add(new Result("Best GQAP Solution", assignment));
       } else {
-        if (HasSolutionImproved(assignment.Solution.Quality.Value, qualities[bestIndex].Value, maximization)) {
-          assignment.Solution = new GQAPSolution((IntegerVector)assignments[bestIndex].Clone(),
-            (DoubleValue)qualities[bestIndex].Clone(), (DoubleValue)flowDistanceQualities[bestIndex].Clone(),
-            (DoubleValue)installationQualities[bestIndex].Clone(), (DoubleValue)overbookedCapacities[bestIndex].Clone());
+        if (HasSolutionImproved(assignment.Quality.Value, qualities[bestIndex].Value, maximization)) {
+          assignment.Assignment = (IntegerVector)assignments[bestIndex].Clone();
+          assignment.Quality = (DoubleValue)qualities[bestIndex].Clone();
+          assignment.FlowDistanceQuality = (DoubleValue)flowDistanceQualities[bestIndex].Clone();
+          assignment.InstallationQuality = (DoubleValue)installationQualities[bestIndex].Clone();
+          assignment.OverbookedCapacity = (DoubleValue)overbookedCapacities[bestIndex].Clone();
           assignment.EquipmentNames = equipmentNames;
           assignment.LocationNames = locationNames;
@@ -193,15 +188,6 @@
         }
       }
-
-      GQAPAssignmentArchive archive = BestKnownSolutionsParameter.ActualValue;
-      if (archive == null) {
-        archive = new GQAPAssignmentArchive(equipmentNames, locationNames, distances, weights, installationCosts, demands, capacities, transportationCosts, overbookedCapacityPenalty);
-        BestKnownSolutionsParameter.ActualValue = archive;
-      } else {
-        var solutions = Enumerable.Range(0, assignments.Length)
-        .Select(i => new GQAPSolution(assignments[i], qualities[i], flowDistanceQualities[i], installationQualities[i], overbookedCapacities[i]))
-        .Concat(archive.Solutions);
-        archive.Solutions = GQAPSolutionArchiveUpdater.GetFeasibleParetoFront(solutions);
-      }
+      if (!results.ContainsKey("Best GQAP Assignment"))
+        results.Add(new Result("Best GQAP Assignment", assignment));
 
       return base.Apply();
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Analyzers/GQAPSolutionArchiveAnalyzer.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Analyzers/GQAPSolutionArchiveAnalyzer.cs	(revision 7468)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Analyzers/GQAPSolutionArchiveAnalyzer.cs	(revision 7470)
@@ -40,8 +40,8 @@
     IDemandsAwareGQAPOperator, ICapacitiesAwareGQAPOperator, ITransportationCostsAwareGQAPOperator,
     IOverbookedCapacityPenaltyAwareGQAPOperator, IEquipmentNamesAwareGQAPOperator, ILocationNamesAwareGQAPOperator,
-    IAnalyzer {
+    IBestKnownSolutionsAwareGQAPOperator, IAnalyzer {
 
     public bool EnabledByDefault {
-      get { return false; }
+      get { return true; }
     }
 
@@ -94,4 +94,7 @@
       get { return (IValueLookupParameter<ResultCollection>)Parameters["Results"]; }
     }
+    public ILookupParameter<GQAPAssignmentArchive> BestKnownSolutionsParameter {
+      get { return (ILookupParameter<GQAPAssignmentArchive>)Parameters["BestKnownSolutions"]; }
+    }
 
     [StorableConstructor]
@@ -119,4 +122,5 @@
       Parameters.Add(new LookupParameter<StringArray>("LocationNames", GeneralizedQuadraticAssignmentProblem.LocationNamesDescription));
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the best GQAP solution should be stored."));
+      Parameters.Add(new LookupParameter<GQAPAssignmentArchive>("BestKnownSolutions", GeneralizedQuadraticAssignmentProblem.BestKnownSolutionsDescription));
     }
 
@@ -160,4 +164,15 @@
       archive.Solutions = GQAPSolutionArchiveUpdater.GetFeasibleParetoFront(solutions);
 
+      GQAPAssignmentArchive bestKnownArchive = BestKnownSolutionsParameter.ActualValue;
+      if (bestKnownArchive == null) {
+        bestKnownArchive = new GQAPAssignmentArchive();
+        BestKnownSolutionsParameter.ActualValue = bestKnownArchive;
+      } else {
+        var archiveSolutions = Enumerable.Range(0, assignments.Length)
+        .Select(i => new GQAPSolution(assignments[i], qualities[i], flowDistanceQualities[i], installationQualities[i], overbookedCapacities[i]))
+        .Concat(archive.Solutions);
+        bestKnownArchive.Solutions = GQAPSolutionArchiveUpdater.GetFeasibleParetoFront(archiveSolutions);
+      }
+
       return base.Apply();
     }
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GQAPAssignment.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GQAPAssignment.cs	(revision 7468)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GQAPAssignment.cs	(revision 7470)
@@ -33,11 +33,55 @@
 
     [Storable]
-    private GQAPSolution solution;
-    public GQAPSolution Solution {
-      get { return solution; }
-      set {
-        bool changed = (solution != value);
-        solution = value;
-        if (changed) OnPropertyChanged("Solution");
+    private IntegerVector assignment;
+    public IntegerVector Assignment {
+      get { return assignment; }
+      set {
+        bool changed = (assignment != value);
+        assignment = value;
+        if (changed) OnPropertyChanged("Assignment");
+      }
+    }
+
+    [Storable]
+    private DoubleValue quality;
+    public DoubleValue Quality {
+      get { return quality; }
+      set {
+        bool changed = (quality != value);
+        quality = value;
+        if (changed) OnPropertyChanged("Quality");
+      }
+    }
+
+    [Storable]
+    private DoubleValue flowDistanceQuality;
+    public DoubleValue FlowDistanceQuality {
+      get { return flowDistanceQuality; }
+      set {
+        bool changed = (flowDistanceQuality != value);
+        flowDistanceQuality = value;
+        if (changed) OnPropertyChanged("FlowDistanceQuality");
+      }
+    }
+
+    [Storable]
+    private DoubleValue installationQuality;
+    public DoubleValue InstallationQuality {
+      get { return installationQuality; }
+      set {
+        bool changed = (installationQuality != value);
+        installationQuality = value;
+        if (changed) OnPropertyChanged("InstallationQuality");
+      }
+    }
+
+    [Storable]
+    private DoubleValue overbookedCapacity;
+    public DoubleValue OverbookedCapacity {
+      get { return overbookedCapacity; }
+      set {
+        bool changed = (overbookedCapacity != value);
+        overbookedCapacity = value;
+        if (changed) OnPropertyChanged("OverbookedCapacity");
       }
     }
@@ -146,4 +190,9 @@
     private GQAPAssignment(GQAPAssignment original, Cloner cloner)
       : base(original, cloner) {
+      assignment = cloner.Clone(original.assignment);
+      quality = cloner.Clone(original.quality);
+      flowDistanceQuality = cloner.Clone(original.flowDistanceQuality);
+      installationQuality = cloner.Clone(original.installationQuality);
+      overbookedCapacity = cloner.Clone(original.overbookedCapacity);
       equipmentNames = cloner.Clone(original.equipmentNames);
       locationNames = cloner.Clone(original.locationNames);
@@ -156,10 +205,11 @@
       overbookedCapacityPenalty = cloner.Clone(original.overbookedCapacityPenalty);
     }
-    public GQAPAssignment(IntegerVector assignment, DoubleValue quality, DoubleValue flowDistanceQuality, DoubleValue installationQuality, DoubleValue overbookedCapacity)
+    public GQAPAssignment(IntegerVector assignment, DoubleValue quality, DoubleValue flowDistanceQuality, DoubleValue installationQuality, DoubleValue overbookedCapacity, StringArray equipmentNames, StringArray locationNames, DoubleMatrix distances, DoubleMatrix weights, DoubleMatrix installationCosts, DoubleArray demands, DoubleArray capacities, DoubleValue transportationCosts, DoubleValue overbookedCapacityPenalty)
       : base() {
-      this.solution = new GQAPSolution(assignment, quality, flowDistanceQuality, installationQuality, overbookedCapacity);
-    }
-    public GQAPAssignment(IntegerVector assignment, DoubleValue quality, DoubleValue flowDistanceQuality, DoubleValue installationQuality, DoubleValue overbookedCapacity, StringArray equipmentNames, StringArray locationNames, DoubleMatrix distances, DoubleMatrix weights, DoubleMatrix installationCosts, DoubleArray demands, DoubleArray capacities, DoubleValue transportationCosts, DoubleValue overbookedCapacityPenalty)
-      : this(assignment, quality, flowDistanceQuality, installationQuality, overbookedCapacity) {
+      this.assignment = assignment;
+      this.quality = quality;
+      this.flowDistanceQuality = flowDistanceQuality;
+      this.installationQuality = installationQuality;
+      this.overbookedCapacity = overbookedCapacity;
       this.equipmentNames = equipmentNames;
       this.locationNames = locationNames;
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GeneralizedQuadraticAssignmentProblem.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GeneralizedQuadraticAssignmentProblem.cs	(revision 7468)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GeneralizedQuadraticAssignmentProblem.cs	(revision 7470)
@@ -84,6 +84,6 @@
       get { return (FixedValueParameter<DoubleValue>)Parameters["OverbookedCapacityPenalty"]; }
     }
-    public OptionalValueParameter<GQAPSolution> BestKnownSolutionParameter {
-      get { return (OptionalValueParameter<GQAPSolution>)Parameters["BestKnownSolution"]; }
+    public OptionalValueParameter<GQAPAssignment> BestKnownSolutionParameter {
+      get { return (OptionalValueParameter<GQAPAssignment>)Parameters["BestKnownSolution"]; }
     }
     public OptionalValueParameter<GQAPAssignmentArchive> BestKnownSolutionsParameter {
@@ -135,5 +135,5 @@
       set { LocationNamesParameter.Value = value; }
     }
-    public GQAPSolution BestKnownSolution {
+    public GQAPAssignment BestKnownSolution {
       get { return BestKnownSolutionParameter.Value; }
       set { BestKnownSolutionParameter.Value = value; }
@@ -266,5 +266,5 @@
       try {
         if (instance.Dimension > 1000) return false;
-        
+
         Name = instance.Name;
         Description = instance.Description;
@@ -335,8 +335,11 @@
         out flowDistanceQuality, out installationQuality, out overbookedCapacity);
       double quality = GQAPEvaluator.GetCombinedQuality(flowDistanceQuality, installationQuality, overbookedCapacity, TransportationCosts.Value, OverbookedCapacityPenalty.Value);
-      BestKnownSolution = new GQAPSolution(assignment, new DoubleValue(quality), new DoubleValue(flowDistanceQuality), new DoubleValue(installationQuality), new DoubleValue(overbookedCapacity));
+      BestKnownSolution = new GQAPAssignment(assignment, new DoubleValue(quality),
+        new DoubleValue(flowDistanceQuality), new DoubleValue(installationQuality),
+        new DoubleValue(overbookedCapacity), EquipmentNames, LocationNames, Distances, Weights, InstallationCosts,
+        Demands, Capacities, TransportationCosts, OverbookedCapacityPenalty);
       BestKnownQuality = new DoubleValue(quality);
       BestKnownSolutions = new GQAPAssignmentArchive(EquipmentNames, LocationNames, Distances, Weights, InstallationCosts, Demands, Capacities, TransportationCosts, OverbookedCapacityPenalty);
-      BestKnownSolutions.Solutions.Add((GQAPSolution)BestKnownSolution.Clone());
+      BestKnownSolutions.Solutions.Add(BestKnownSolution);
     }
 
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Interfaces/IBestKnownSolutionAwareGQAPOperator.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Interfaces/IBestKnownSolutionAwareGQAPOperator.cs	(revision 7468)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Interfaces/IBestKnownSolutionAwareGQAPOperator.cs	(revision 7470)
@@ -24,5 +24,5 @@
 namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment {
   public interface IBestKnownSolutionAwareGQAPOperator : IGQAPOperator {
-    ILookupParameter<GQAPSolution> BestKnownSolutionParameter { get; }
+    ILookupParameter<GQAPAssignment> BestKnownSolutionParameter { get; }
   }
 }
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/Data/TSP/linhp318.tsp
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/Data/TSP/linhp318.tsp	(revision 7468)
+++ 	(revision )
@@ -1,328 +1,0 @@
-NAME: lin318
-TYPE: TSP
-COMMENT: Original 318-city problem (Lin/Kernighan)
-DIMENSION: 318
-EDGE_WEIGHT_TYPE: EUC_2D
-FIXED_EDGES_SECTION
-1 214
--1
-NODE_COORD_SECTION
-1 63 71
-2 94 71
-3 142 370
-4 173 1276
-5 205 1213
-6 213 69
-7 244 69
-8 276 630
-9 283 732
-10 362 69
-11 394 69
-12 449 370
-13 480 1276
-14 512 1213
-15 528 157
-16 583 630
-17 591 732
-18 638 654
-19 638 496
-20 638 314
-21 638 142
-22 669 142
-23 677 315
-24 677 496
-25 677 654
-26 709 654
-27 709 496
-28 709 315
-29 701 142
-30 764 220
-31 811 189
-32 843 173
-33 858 370
-34 890 1276
-35 921 1213
-36 992 630
-37 1000 732
-38 1197 1276
-39 1228 1213
-40 1276 205
-41 1299 630
-42 1307 732
-43 1362 654
-44 1362 496
-45 1362 291
-46 1425 654
-47 1425 496
-48 1425 291
-49 1417 173
-50 1488 291
-51 1488 496
-52 1488 654
-53 1551 654
-54 1551 496
-55 1551 291
-56 1614 291
-57 1614 496
-58 1614 654
-59 1732 189
-60 1811 1276
-61 1843 1213
-62 1913 630
-63 1921 732
-64 2087 370
-65 2118 1276
-66 2150 1213
-67 2189 205
-68 2220 189
-69 2220 630
-70 2228 732
-71 2244 142
-72 2276 315
-73 2276 496
-74 2276 654
-75 2315 654
-76 2315 496
-77 2315 315
-78 2331 142
-79 2346 315
-80 2346 496
-81 2346 654
-82 2362 142
-83 2402 157
-84 2402 220
-85 2480 142
-86 2496 370
-87 2528 1276
-88 2559 1213
-89 2630 630
-90 2638 732
-91 2756 69
-92 2787 69
-93 2803 370
-94 2835 1276
-95 2866 1213
-96 2906 69
-97 2937 69
-98 2937 630
-99 2945 732
-100 3016 1276
-101 3055 69
-102 3087 69
-103 606 220
-104 1165 370
-105 1780 370
-106 63 1402
-107 94 1402
-108 142 1701
-109 173 2607
-110 205 2544
-111 213 1400
-112 244 1400
-113 276 1961
-114 283 2063
-115 362 1400
-116 394 1400
-117 449 1701
-118 480 2607
-119 512 2544
-120 528 1488
-121 583 1961
-122 591 2063
-123 638 1985
-124 638 1827
-125 638 1645
-126 638 1473
-127 669 1473
-128 677 1646
-129 677 1827
-130 677 1985
-131 709 1985
-132 709 1827
-133 709 1646
-134 701 1473
-135 764 1551
-136 811 1520
-137 843 1504
-138 858 1701
-139 890 2607
-140 921 2544
-141 992 1961
-142 1000 2063
-143 1197 2607
-144 1228 2544
-145 1276 1536
-146 1299 1961
-147 1307 2063
-148 1362 1985
-149 1362 1827
-150 1362 1622
-151 1425 1985
-152 1425 1827
-153 1425 1622
-154 1417 1504
-155 1488 1622
-156 1488 1827
-157 1488 1985
-158 1551 1985
-159 1551 1827
-160 1551 1622
-161 1614 1622
-162 1614 1827
-163 1614 1985
-164 1732 1520
-165 1811 2607
-166 1843 2544
-167 1913 1961
-168 1921 2063
-169 2087 1701
-170 2118 2607
-171 2150 2544
-172 2189 1536
-173 2220 1520
-174 2220 1961
-175 2228 2063
-176 2244 1473
-177 2276 1646
-178 2276 1827
-179 2276 1985
-180 2315 1985
-181 2315 1827
-182 2315 1646
-183 2331 1473
-184 2346 1646
-185 2346 1827
-186 2346 1985
-187 2362 1473
-188 2402 1488
-189 2402 1551
-190 2480 1473
-191 2496 1701
-192 2528 2607
-193 2559 2544
-194 2630 1961
-195 2638 2063
-196 2756 1400
-197 2787 1400
-198 2803 1701
-199 2835 2607
-200 2866 2544
-201 2906 1400
-202 2937 1400
-203 2937 1961
-204 2945 2063
-205 3016 2607
-206 3055 1400
-207 3087 1400
-208 606 1551
-209 1165 1701
-210 1780 1701
-211 63 2733
-212 94 2733
-213 142 3032
-214 173 3938
-215 205 3875
-216 213 2731
-217 244 2731
-218 276 3292
-219 283 3394
-220 362 2731
-221 394 2731
-222 449 3032
-223 480 3938
-224 512 3875
-225 528 2819
-226 583 3292
-227 591 3394
-228 638 3316
-229 638 3158
-230 638 2976
-231 638 2804
-232 669 2804
-233 677 2977
-234 677 3158
-235 677 3316
-236 709 3316
-237 709 3158
-238 709 2977
-239 701 2804
-240 764 2882
-241 811 2851
-242 843 2835
-243 858 3032
-244 890 3938
-245 921 3875
-246 992 3292
-247 1000 3394
-248 1197 3938
-249 1228 3875
-250 1276 2867
-251 1299 3292
-252 1307 3394
-253 1362 3316
-254 1362 3158
-255 1362 2953
-256 1425 3316
-257 1425 3158
-258 1425 2953
-259 1417 2835
-260 1488 2953
-261 1488 3158
-262 1488 3316
-263 1551 3316
-264 1551 3158
-265 1551 2953
-266 1614 2953
-267 1614 3158
-268 1614 3316
-269 1732 2851
-270 1811 3938
-271 1843 3875
-272 1913 3292
-273 1921 3394
-274 2087 3032
-275 2118 3938
-276 2150 3875
-277 2189 2867
-278 2220 2851
-279 2220 3292
-280 2228 3394
-281 2244 2804
-282 2276 2977
-283 2276 3158
-284 2276 3316
-285 2315 3316
-286 2315 3158
-287 2315 2977
-288 2331 2804
-289 2346 2977
-290 2346 3158
-291 2346 3316
-292 2362 2804
-293 2402 2819
-294 2402 2882
-295 2480 2804
-296 2496 3032
-297 2528 3938
-298 2559 3875
-299 2630 3292
-300 2638 3394
-301 2756 2731
-302 2787 2731
-303 2803 3032
-304 2835 3938
-305 2866 3875
-306 2906 2731
-307 2937 2731
-308 2937 3292
-309 2945 3394
-310 3016 3938
-311 3055 2731
-312 3087 2731
-313 606 2882
-314 1165 3032
-315 1780 3032
-316 1417 -79
-317 1496 -79
-318 1693 4055
-EOF
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 7468)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj	(revision 7470)
@@ -132,5 +132,4 @@
     <EmbeddedResource Include="Data\TSP\lin105.tsp" />
     <EmbeddedResource Include="Data\TSP\lin318.tsp" />
-    <EmbeddedResource Include="Data\TSP\linhp318.tsp" />
     <EmbeddedResource Include="Data\TSP\nrw1379.tsp" />
     <EmbeddedResource Include="Data\TSP\p654.tsp" />
@@ -234,5 +233,5 @@
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
   </ItemGroup>
   <ItemGroup>
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/Properties/AssemblyInfo.cs.frame	(revision 7470)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/Properties/AssemblyInfo.cs.frame	(revision 7470)
@@ -0,0 +1,57 @@
+﻿#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Problems.Instances.TSPLIB")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2012 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("7c14407e-6980-465b-ba3a-4a916d48989b")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.6.$WCREV$")]
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/Properties/AssemblyInfo.frame	(revision 7468)
+++ 	(revision )
@@ -1,57 +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.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following 
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("HeuristicLab.Problems.Instances.TSPLIB")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("HEAL")]
-[assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2012 HEAL")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible 
-// to COM components.  If you need to access a type in this assembly from 
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("7c14407e-6980-465b-ba3a-4a916d48989b")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version 
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers 
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBParser.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBParser.cs	(revision 7468)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBParser.cs	(revision 7470)
@@ -439,5 +439,5 @@
           break;
         default:
-          throw new InvalidDataException("Input files does not specify a valid node coord type.");
+          throw new InvalidDataException("Input files does not specify a valid display data type.");
       }
 
@@ -525,6 +525,6 @@
         || edgeWeightFormat == TSPLIBEdgeWeightFormats.UPPER_ROW;
 
-      int dim1 = !triangular && !upperTriangular ? (diagonal ? 0 : 1) : 0;
-      int dim2 = !triangular && upperTriangular ? (diagonal ? 0 : 1) : 0;
+      int dim1 = triangular && !upperTriangular ? (diagonal ? 0 : 1) : 0;
+      int dim2 = triangular && upperTriangular ? (diagonal ? 0 : 1) : 0;
       bool finished = false;
       while (!finished) {
Index: branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBTSPInstanceProvider.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBTSPInstanceProvider.cs	(revision 7468)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.Instances.TSPLIB/3.3/TSPLIBTSPInstanceProvider.cs	(revision 7470)
@@ -29,5 +29,5 @@
 namespace HeuristicLab.Problems.Instances.TSPLIB {
   public class TSPLIBTSPInstanceProvider : ProblemInstanceProvider<ITSPInstance> {
-    
+
     public override string Name {
       get { return "TSPLIB (symmetric TSP)"; }
@@ -64,4 +64,6 @@
         var parser = new TSPLIBParser(stream);
         parser.Parse();
+        if (parser.FixedEdges != null) throw new InvalidDataException("TSP instance " + parser.Name + " contains fixed edges which are not supported by HeuristicLab.");
+
         instance.Dimension = parser.Dimension;
         instance.Coordinates = parser.Vertices != null ? parser.Vertices : parser.DisplayVertices;
Index: branches/GeneralizedQAP/UnitTests/ElloumiCTAPInstanceProviderTest.cs
===================================================================
--- branches/GeneralizedQAP/UnitTests/ElloumiCTAPInstanceProviderTest.cs	(revision 7470)
+++ branches/GeneralizedQAP/UnitTests/ElloumiCTAPInstanceProviderTest.cs	(revision 7470)
@@ -0,0 +1,27 @@
+﻿using System;
+using System.Text;
+using HeuristicLab.Problems.Instances.ElloumiCTAP;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace UnitTests {
+  [TestClass()]
+  public class ElloumiCTAPInstanceProviderTest {
+
+    [TestMethod()]
+    public void GetElloumiCTAPInstanceTest() {
+      var target = new ElloumiCTAPInstanceProvider();
+      StringBuilder erroneousInstances = new StringBuilder();
+      int count = 0;
+      foreach (var id in target.GetInstanceDescriptors()) {
+        try {
+          target.GetInstance(id);
+        } catch (Exception ex) {
+          erroneousInstances.AppendLine(id.Name + ": " + ex.Message);
+        }
+        count++;
+      }
+      Assert.IsTrue(count > 0, "No problem instances were found.");
+      Assert.IsTrue(erroneousInstances.Length == 0, "Some instances could not be parsed: " + Environment.NewLine + erroneousInstances.ToString());
+    }
+  }
+}
Index: branches/GeneralizedQAP/UnitTests/QAPLIBInstanceProviderTest.cs
===================================================================
--- branches/GeneralizedQAP/UnitTests/QAPLIBInstanceProviderTest.cs	(revision 7470)
+++ branches/GeneralizedQAP/UnitTests/QAPLIBInstanceProviderTest.cs	(revision 7470)
@@ -0,0 +1,27 @@
+﻿using System;
+using System.Text;
+using HeuristicLab.Problems.Instances.QAPLIB;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace UnitTests {
+  [TestClass()]
+  public class QAPLIBInstanceProviderTest {
+
+    [TestMethod()]
+    public void GetQAPLIBInstanceTest() {
+      var target = new QAPLIBInstanceProvider();
+      StringBuilder erroneousInstances = new StringBuilder();
+      int count = 0;
+      foreach (var id in target.GetInstanceDescriptors()) {
+        try {
+          target.GetInstance(id);
+        } catch (Exception ex) {
+          erroneousInstances.AppendLine(id.Name + ": " + ex.Message);
+        }
+        count++;
+      }
+      Assert.IsTrue(count > 0, "No problem instances were found.");
+      Assert.IsTrue(erroneousInstances.Length == 0, "Some instances could not be parsed: " + Environment.NewLine + erroneousInstances.ToString());
+    }
+  }
+}
Index: branches/GeneralizedQAP/UnitTests/TSPLIBInstanceProviderTest.cs
===================================================================
--- branches/GeneralizedQAP/UnitTests/TSPLIBInstanceProviderTest.cs	(revision 7468)
+++ branches/GeneralizedQAP/UnitTests/TSPLIBInstanceProviderTest.cs	(revision 7470)
@@ -4,20 +4,45 @@
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 
-namespace UnitTests
-{
-    
-    
-    /// <summary>
-    ///This is a test class for TSPLIBInstanceProviderTest and is intended
-    ///to contain all TSPLIBInstanceProviderTest Unit Tests
-    ///</summary>
+namespace UnitTests {
   [TestClass()]
   public class TSPLIBInstanceProviderTest {
-    /// <summary>
-    ///A test for GetInstance
-    ///</summary>
+
     [TestMethod()]
     public void GetTSPLIBTSPInstanceTest() {
-      TSPLIBTSPInstanceProvider target = new TSPLIBTSPInstanceProvider();
+      var target = new TSPLIBTSPInstanceProvider();
+      StringBuilder erroneousInstances = new StringBuilder();
+      int count = 0;
+      foreach (var id in target.GetInstanceDescriptors()) {
+        try {
+          target.GetInstance(id);
+        } catch (Exception ex) {
+          erroneousInstances.AppendLine(id.Name + ": " + ex.Message);
+        }
+        count++;
+      }
+      Assert.IsTrue(count > 0, "No problem instances were found.");
+      Assert.IsTrue(erroneousInstances.Length == 0, "Some instances could not be parsed: " + Environment.NewLine + erroneousInstances.ToString());
+    }
+
+    [TestMethod()]
+    public void GetTSPLIBATSPInstanceTest() {
+      var target = new TSPLIBATSPInstanceProvider();
+      StringBuilder erroneousInstances = new StringBuilder();
+      int count = 0;
+      foreach (var id in target.GetInstanceDescriptors()) {
+        try {
+          target.GetInstance(id);
+        } catch (Exception ex) {
+          erroneousInstances.AppendLine(id.Name + ": " + ex.Message);
+        }
+        count++;
+      }
+      Assert.IsTrue(count > 0, "No problem instances were found.");
+      Assert.IsTrue(erroneousInstances.Length == 0, "Some instances could not be parsed: " + Environment.NewLine + erroneousInstances.ToString());
+    }
+
+    [TestMethod()]
+    public void GetTSPLIBCVRPInstanceTest() {
+      var target = new TSPLIBCVRPInstanceProvider();
       StringBuilder erroneousInstances = new StringBuilder();
       int count = 0;
Index: branches/GeneralizedQAP/UnitTests/UnitTests.csproj
===================================================================
--- branches/GeneralizedQAP/UnitTests/UnitTests.csproj	(revision 7468)
+++ branches/GeneralizedQAP/UnitTests/UnitTests.csproj	(revision 7470)
@@ -97,4 +97,6 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="ElloumiCTAPInstanceProviderTest.cs" />
+    <Compile Include="QAPLIBInstanceProviderTest.cs" />
     <Compile Include="GQAPNMoveEvaluatorTest.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
@@ -109,4 +111,12 @@
       <Project>{C739E6D2-5680-4804-A810-8017DA0C238F}</Project>
       <Name>HeuristicLab.Problems.GeneralizedQuadraticAssignment-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Problems.Instances.ElloumiCTAP\3.3\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj">
+      <Project>{CCF61DA0-B226-4C0F-8052-29ACC6BDE6EE}</Project>
+      <Name>HeuristicLab.Problems.Instances.ElloumiCTAP-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Problems.Instances.QAPLIB\3.3\HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj">
+      <Project>{73F29D43-5714-4069-8FAB-0D18FEB5F175}</Project>
+      <Name>HeuristicLab.Problems.Instances.QAPLIB-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Problems.Instances.TSPLIB\3.3\HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj">
