Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Analyzers/GQAPSolutionArchiveUpdater.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Analyzers/GQAPSolutionArchiveUpdater.cs	(revision 7445)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Analyzers/GQAPSolutionArchiveUpdater.cs	(revision 7448)
@@ -31,10 +31,10 @@
       for (int i = 0; i < front.Count - 1; i++) {
         for (int j = i + 1; j < front.Count; j++) {
-          if (front[i].FlowDistanceQuality.Value < front[j].FlowDistanceQuality.Value
-            && front[i].InstallationQuality.Value < front[j].InstallationQuality.Value) {
+          if (front[i].FlowDistanceQuality.Value <= front[j].FlowDistanceQuality.Value
+            && front[i].InstallationQuality.Value <= front[j].InstallationQuality.Value) {
             front.RemoveAt(j);
             j--;
-          } else if (front[i].FlowDistanceQuality.Value > front[j].FlowDistanceQuality.Value
-            && front[i].InstallationQuality.Value > front[j].InstallationQuality.Value) {
+          } else if (front[i].FlowDistanceQuality.Value >= front[j].FlowDistanceQuality.Value
+            && front[i].InstallationQuality.Value >= front[j].InstallationQuality.Value) {
             front.RemoveAt(i);
             j = i;
Index: branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GeneralizedQuadraticAssignmentProblem.cs
===================================================================
--- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GeneralizedQuadraticAssignmentProblem.cs	(revision 7445)
+++ branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GeneralizedQuadraticAssignmentProblem.cs	(revision 7448)
@@ -31,4 +31,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common;
 using HeuristicLab.Problems.Instances;
 
@@ -37,5 +38,5 @@
   [Creatable("Problems")]
   [StorableClass]
-  public sealed class GeneralizedQuadraticAssignmentProblem : SingleObjectiveHeuristicOptimizationProblem<IGQAPEvaluator, IGQAPSolutionCreator>, IStorableContent {
+  public sealed class GeneralizedQuadraticAssignmentProblem : SingleObjectiveHeuristicOptimizationProblem<IGQAPEvaluator, IGQAPSolutionCreator>, IStorableContent, IProblemInstanceConsumer<IQAPInstance>, IProblemInstanceConsumer<ICTAPInstance> {
 
     public override Image ItemImage {
@@ -138,4 +139,8 @@
       set { BestKnownSolutionParameter.Value = value; }
     }
+    public GQAPAssignmentArchive BestKnownSolutions {
+      get { return BestKnownSolutionsParameter.Value; }
+      set { BestKnownSolutionsParameter.Value = value; }
+    }
     #endregion
 
@@ -202,4 +207,7 @@
 
     public void LoadFrom(IQAPInstance instance) {
+      Name = instance.Name;
+      Description = instance.Description;
+
       Weights = new DoubleMatrix(instance.Weights);
       Distances = new DoubleMatrix(instance.Distances);
@@ -212,12 +220,19 @@
       if (instance.BestKnownAssignment != null) {
         EvaluateAndLoadAssignment(instance.BestKnownAssignment);
+      } else {
+        BestKnownQuality = null;
+        BestKnownSolution = null;
+        BestKnownSolutions = null;
       }
     }
 
     public void LoadFrom(ICTAPInstance instance) {
+      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);
+      InstallationCosts = new DoubleMatrix(instance.ExecutionCosts.Transpose());
       Distances = new DoubleMatrix(Capacities.Length, Capacities.Length); // all one, except diagonal
       for (int i = 0; i < Capacities.Length - 1; i++)
@@ -231,4 +246,8 @@
       if (instance.BestKnownAssignment != null) {
         EvaluateAndLoadAssignment(instance.BestKnownAssignment);
+      } else {
+        BestKnownQuality = null;
+        BestKnownSolution = null;
+        BestKnownSolutions = null;
       }
     }
@@ -242,4 +261,6 @@
       BestKnownSolution = new GQAPSolution(assignment, new DoubleValue(quality), new DoubleValue(flowDistanceQuality), new DoubleValue(installationQuality), new DoubleValue(overbookedCapacity));
       BestKnownQuality = new DoubleValue(quality);
+      BestKnownSolutions = new GQAPAssignmentArchive(EquipmentNames, LocationNames, Distances, Weights, InstallationCosts, Demands, Capacities, TransportationCosts, OverbookedCapacityPenalty);
+      BestKnownSolutions.Solutions.Add((GQAPSolution)BestKnownSolution.Clone());
     }
 
