Index: branches/QAP/HeuristicLab.Analysis/3.3/HeuristicLabAnalysisPlugin.cs.frame
===================================================================
--- branches/QAP/HeuristicLab.Analysis/3.3/HeuristicLabAnalysisPlugin.cs.frame	(revision 5930)
+++ branches/QAP/HeuristicLab.Analysis/3.3/HeuristicLabAnalysisPlugin.cs.frame	(revision 5931)
@@ -28,4 +28,5 @@
   [Plugin("HeuristicLab.Analysis", "3.3.3.$WCREV$")]
   [PluginFile("HeuristicLab.Analysis-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.ALGLIB", "3.1")]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
   [PluginDependency("HeuristicLab.Common", "3.3")]
Index: branches/QAP/HeuristicLab.Analysis/3.3/MultidimensionalScaling/MultidimensionalScaling.cs
===================================================================
--- branches/QAP/HeuristicLab.Analysis/3.3/MultidimensionalScaling/MultidimensionalScaling.cs	(revision 5930)
+++ branches/QAP/HeuristicLab.Analysis/3.3/MultidimensionalScaling/MultidimensionalScaling.cs	(revision 5931)
@@ -29,10 +29,10 @@
     /// Performs the Kruskal-Shepard algorithm and applies a gradient descent method
     /// to fit the coordinates such that the difference between the fit distances
-    /// and the actual distances becomes minimal.
+    /// and the dissimilarities becomes minimal.
     /// </summary>
     /// <remarks>
     /// It will initialize the coordinates in a deterministic fashion such that all initial points are equally spaced on a circle.
     /// </remarks>
-    /// <param name="dissimilarities">A symmetric NxN matrix that specifies the distances between each element i and j. Diagonal elements are ignored.</param>
+    /// <param name="dissimilarities">A symmetric NxN matrix that specifies the dissimilarities between each element i and j. Diagonal elements are ignored.</param>
     /// 
     /// <returns>A Nx2 matrix where the first column represents the x- and the second column the y coordinates.</returns>
@@ -43,5 +43,5 @@
       int dimension = dissimilarities.Rows;
       if (dimension == 1) return new DoubleMatrix(new double[,] { { 0, 0 } });
-      else if (dimension == 2) return new DoubleMatrix(new double[,] { { 0, dissimilarities[0, 1] } });
+      else if (dimension == 2) return new DoubleMatrix(new double[,] { { 0, 0 }, { 0, dissimilarities[0, 1] } });
 
       DoubleMatrix coordinates = new DoubleMatrix(dimension, 2);
@@ -58,14 +58,15 @@
     /// Performs the Kruskal-Shepard algorithm and applies a gradient descent method
     /// to fit the coordinates such that the difference between the fit distances
-    /// and the actual distances is minimal.
+    /// and the dissimilarities is minimal.
     /// </summary>
     /// <remarks>
     /// It will use a pre-initialized x,y-coordinates matrix as a starting point of the gradient descent.
     /// </remarks>
-    /// <param name="dissimilarities">A symmetric NxN matrix that specifies the distances between each element i and j. Diagonal elements are ignored.</param>
-    /// 
+    /// <param name="dissimilarities">A symmetric NxN matrix that specifies the dissimilarities between each element i and j. Diagonal elements are ignored.</param>
     /// <param name="coordinates">The Nx2 matrix of initial coordinates.</param>
+    /// <param name="maximumIterations">The number of iterations for which the algorithm should run.
+    /// In every iteration it tries to find the best location for every item.</param>
     /// <returns>A Nx2 matrix where the first column represents the x- and the second column the y coordinates.</returns>
-    public static DoubleMatrix KruskalShepard(DoubleMatrix dissimilarities, DoubleMatrix coordinates) {
+    public static DoubleMatrix KruskalShepard(DoubleMatrix dissimilarities, DoubleMatrix coordinates, int maximumIterations = 100) {
       int dimension = dissimilarities.Rows;
       if (dimension != dissimilarities.Columns || coordinates.Rows != dimension) throw new ArgumentException("The number of coordinates and the number of rows and columns in the dissimilarities matrix do not match.");
@@ -78,5 +79,6 @@
       alglib.mincgreport rep;
 
-      for (int iterations = 0; iterations < 10; iterations++) {
+      for (int iterations = 0; iterations < maximumIterations; iterations++) {
+        bool changed = false;
         for (int i = 0; i < dimension; i++) {
           double[] c = new double[] { coordinates[i, 0], coordinates[i, 1] };
@@ -93,8 +95,10 @@
           } catch (alglib.alglibexception) { }
           if (!double.IsNaN(c[0]) && !double.IsNaN(c[1])) {
+            changed = changed || (coordinates[i, 0] != c[0]) || (coordinates[i, 1] != c[1]);
             coordinates[i, 0] = c[0];
             coordinates[i, 1] = c[1];
           }
         }
+        if (!changed) break;
       }
       return coordinates;
@@ -106,5 +110,5 @@
       Info info = (obj as Info);
       for (int i = 0; i < info.Coordinates.Rows; i++) {
-        double c = info.Distances[info.Row, i];
+        double c = info.Dissimilarities[info.Row, i];
         if (i != info.Row) {
           double a = info.Coordinates[i, 0];
@@ -143,5 +147,5 @@
       for (int i = 0; i < dimension - 1; i++) {
         for (int j = i + 1; j < dimension; j++) {
-          if (dissimilarities[i, j] != dissimilarities[j, i]) throw new ArgumentException("Distances is not a symmetric matrix.", "distances");
+          if (dissimilarities[i, j] != dissimilarities[j, i]) throw new ArgumentException("Dissimilarities is not a symmetric matrix.", "dissimilarities");
           if (dissimilarities[i, j] != 0) {
             stress += Stress(coordinates[i, 0], coordinates[i, 1], dissimilarities[i, j], coordinates[j, 0], coordinates[j, 1]);
@@ -155,10 +159,10 @@
     private class Info {
       public DoubleMatrix Coordinates { get; set; }
-      public DoubleMatrix Distances { get; set; }
+      public DoubleMatrix Dissimilarities { get; set; }
       public int Row { get; set; }
 
       public Info(DoubleMatrix c, DoubleMatrix d, int r) {
         Coordinates = c;
-        Distances = d;
+        Dissimilarities = d;
         Row = r;
       }
Index: branches/QAP/HeuristicLab.Analysis/3.3/Tests/HeuristicLab.Analysis.Tests-3.3.csproj
===================================================================
--- branches/QAP/HeuristicLab.Analysis/3.3/Tests/HeuristicLab.Analysis.Tests-3.3.csproj	(revision 5930)
+++ branches/QAP/HeuristicLab.Analysis/3.3/Tests/HeuristicLab.Analysis.Tests-3.3.csproj	(revision 5931)
@@ -32,4 +32,69 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\HeuristicLab.Analysis.Tests.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\HeuristicLab.Analysis.Tests.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\HeuristicLab.Analysis.Tests.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\HeuristicLab.Analysis.Tests.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
   </PropertyGroup>
   <ItemGroup>
Index: branches/QAP/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/Swap2/ExhaustiveSwap2MoveGenerator.cs
===================================================================
--- branches/QAP/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/Swap2/ExhaustiveSwap2MoveGenerator.cs	(revision 5930)
+++ branches/QAP/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/Swap2/ExhaustiveSwap2MoveGenerator.cs	(revision 5931)
@@ -43,27 +43,11 @@
       if (length == 1) throw new ArgumentException("ExhaustiveSwap2MoveGenerator: There cannot be an Swap move given a permutation of length 1.", "permutation");
       int totalMoves = (length) * (length - 1) / 2;
-      Swap2Move[] moves = null;
+      Swap2Move[] moves = new Swap2Move[totalMoves];
       int count = 0;
 
-      if (permutation.PermutationType == PermutationTypes.RelativeUndirected) {
-        if (totalMoves - 3 > 0) {
-          moves = new Swap2Move[totalMoves - 3];
-          for (int i = 0; i < length - 1; i++) {
-            for (int j = i + 1; j < length; j++) {
-              if (j - i >= length - 2) continue;
-              moves[count++] = new Swap2Move(i, j);
-            }
-          }
-        } else { // when length is 3 or less, there's actually no difference, but for the sake of not crashing the algorithm create a dummy move
-          moves = new Swap2Move[1];
-          moves[0] = new Swap2Move(0, 1);
+      for (int i = 0; i < length - 1; i++)
+        for (int j = i + 1; j < length; j++) {
+          moves[count++] = new Swap2Move(i, j);
         }
-      } else {
-        moves = new Swap2Move[totalMoves];
-        for (int i = 0; i < length - 1; i++)
-          for (int j = i + 1; j < length; j++) {
-            moves[count++] = new Swap2Move(i, j);
-          }
-      }
       return moves;
     }
Index: branches/QAP/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/Swap2/StochasticSwap2SingleMoveGenerator.cs
===================================================================
--- branches/QAP/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/Swap2/StochasticSwap2SingleMoveGenerator.cs	(revision 5930)
+++ branches/QAP/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/Swap2/StochasticSwap2SingleMoveGenerator.cs	(revision 5931)
@@ -49,7 +49,9 @@
     public static Swap2Move Apply(Permutation permutation, IRandom random) {
       int length = permutation.Length;
-      if (length == 1) throw new ArgumentException("StochasticSwap2SingleMoveGenerator: There cannot be an Swap move given a permutation of length 1.", "permutation");
-      int index1 = random.Next(length - 1);
-      int index2 = random.Next(index1 + 1, length);
+      if (length < 2) throw new ArgumentException("StochasticSwap2SingleMoveGenerator: There cannot be a swap-2 move given a permutation of length less than 2.", "permutation");
+      int index1 = random.Next(length), index2 = 0;
+      do {
+        index2 = random.Next(length);
+      } while (index1 == index2);
       return new Swap2Move(index1, index2);
     }
Index: branches/QAP/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/QuadraticAssignmentProblemView.Designer.cs
===================================================================
--- branches/QAP/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/QuadraticAssignmentProblemView.Designer.cs	(revision 5930)
+++ branches/QAP/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/QuadraticAssignmentProblemView.Designer.cs	(revision 5931)
@@ -68,10 +68,14 @@
       this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
       this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      this.nameTextBox.Location = new System.Drawing.Point(86, 29);
-      this.nameTextBox.Size = new System.Drawing.Size(561, 20);
+      this.nameTextBox.Location = new System.Drawing.Point(105, 29);
+      this.nameTextBox.Size = new System.Drawing.Size(517, 20);
       // 
       // nameLabel
       // 
       this.nameLabel.Location = new System.Drawing.Point(3, 32);
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Location = new System.Drawing.Point(628, 32);
       // 
       // importInstanceButton
@@ -160,5 +164,5 @@
       this.visualizationTabPage.Name = "visualizationTabPage";
       this.visualizationTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.visualizationTabPage.Size = new System.Drawing.Size(639, 385);
+      this.visualizationTabPage.Size = new System.Drawing.Size(639, 411);
       this.visualizationTabPage.TabIndex = 1;
       this.visualizationTabPage.Text = "Visualization";
@@ -172,5 +176,5 @@
       this.qapView.Location = new System.Drawing.Point(3, 3);
       this.qapView.Name = "qapView";
-      this.qapView.Size = new System.Drawing.Size(633, 379);
+      this.qapView.Size = new System.Drawing.Size(633, 405);
       this.qapView.TabIndex = 0;
       this.qapView.Weights = null;
Index: branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Analyzers/BestQAPSolutionAnalyzer.cs
===================================================================
--- branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Analyzers/BestQAPSolutionAnalyzer.cs	(revision 5930)
+++ branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Analyzers/BestQAPSolutionAnalyzer.cs	(revision 5931)
@@ -40,7 +40,4 @@
       get { return (LookupParameter<BoolValue>)Parameters["Maximization"]; }
     }
-    public LookupParameter<DoubleMatrix> CoordinatesParameter {
-      get { return (LookupParameter<DoubleMatrix>)Parameters["Coordinates"]; }
-    }
     public LookupParameter<DoubleMatrix> DistancesParameter {
       get { return (LookupParameter<DoubleMatrix>)Parameters["Distances"]; }
@@ -77,5 +74,4 @@
       : base() {
       Parameters.Add(new LookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem."));
-      Parameters.Add(new LookupParameter<DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the locations."));
       Parameters.Add(new LookupParameter<DoubleMatrix>("Distances", "The distances between the locations."));
       Parameters.Add(new LookupParameter<DoubleMatrix>("Weights", "The weights between the facilities."));
Index: branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs
===================================================================
--- branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs	(revision 5930)
+++ branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs	(revision 5931)
@@ -50,7 +50,4 @@
       get { return (IValueParameter<Permutation>)Parameters["BestKnownSolution"]; }
     }
-    public IValueParameter<DoubleMatrix> CoordinatesParameter {
-      get { return (IValueParameter<DoubleMatrix>)Parameters["Coordinates"]; }
-    }
     public IValueParameter<DoubleMatrix> WeightsParameter {
       get { return (IValueParameter<DoubleMatrix>)Parameters["Weights"]; }
@@ -65,8 +62,4 @@
       get { return BestKnownSolutionParameter.Value; }
       set { BestKnownSolutionParameter.Value = value; }
-    }
-    public DoubleMatrix Coordinates {
-      get { return CoordinatesParameter.Value; }
-      set { CoordinatesParameter.Value = value; }
     }
     public DoubleMatrix Weights {
@@ -102,19 +95,10 @@
     }
     public QuadraticAssignmentProblem()
-      : base() {
+      : base(new QAPEvaluator(), new RandomPermutationCreator()) {
       Parameters.Add(new OptionalValueParameter<Permutation>("BestKnownSolution", "The best known solution which is updated whenever a new better solution is found or may be the optimal solution if it is known beforehand.", null));
-      Parameters.Add(new OptionalValueParameter<DoubleMatrix>("Coordinates", "The coordinates of the locations. If this is changed the distance matrix is calculated automatically using the euclidean distance."));
       Parameters.Add(new ValueParameter<DoubleMatrix>("Weights", "The strength of the connection between the facilities.", new DoubleMatrix(5, 5)));
       Parameters.Add(new ValueParameter<DoubleMatrix>("Distances", "The distance matrix which can either be specified directly without the coordinates, or can be calculated automatically from the coordinates.", new DoubleMatrix(5, 5)));
 
       Maximization = new BoolValue(false);
-
-      Coordinates = new DoubleMatrix(new double[,] {
-        { 294.000,   3.000 },
-        { 585.246, 214.603 },
-        { 474.000, 556.983 },
-        { 114.000, 556.983 },
-        {   2.754, 214.603 }
-      });
 
       Weights = new DoubleMatrix(new double[,] {
@@ -134,11 +118,7 @@
       });
 
-      RandomPermutationCreator solutionCreator = new RandomPermutationCreator();
-      solutionCreator.LengthParameter.Value = new IntValue(5);
-      solutionCreator.PermutationParameter.ActualName = "Assignment";
-      QAPEvaluator evaluator = new QAPEvaluator();
-
-      SolutionCreatorParameter.Value = solutionCreator;
-      EvaluatorParameter.Value = evaluator;
+      SolutionCreator.PermutationParameter.ActualName = "Assignment";
+      ParameterizeSolutionCreator();
+      ParameterizeEvaluator();
 
       InitializeOperators();
@@ -231,17 +211,4 @@
         AdjustWeightsMatrix();
       }
-    }
-    private void CoordinatesParameter_ValueChanged(object sender, EventArgs e) {
-      if (Coordinates != null) {
-        Coordinates.Reset += new EventHandler(Coordinates_Reset);
-        Coordinates.ItemChanged += new EventHandler<EventArgs<int, int>>(Coordinates_ItemChanged);
-        UpdateDistancesFromCoordinates();
-      }
-    }
-    private void Coordinates_ItemChanged(object sender, EventArgs<int, int> e) {
-      UpdateDistancesFromCoordinates();
-    }
-    private void Coordinates_Reset(object sender, EventArgs e) {
-      UpdateDistancesFromCoordinates();
     }
     #endregion
@@ -262,7 +229,4 @@
       Distances.RowsChanged += new EventHandler(Distances_RowsChanged);
       Distances.ColumnsChanged += new EventHandler(Distances_ColumnsChanged);
-      CoordinatesParameter.ValueChanged += new EventHandler(CoordinatesParameter_ValueChanged);
-      Coordinates.Reset += new EventHandler(Coordinates_Reset);
-      Coordinates.ItemChanged += new EventHandler<EventArgs<int, int>>(Coordinates_ItemChanged);
     }
 
@@ -289,5 +253,4 @@
       if (BestQAPSolutionAnalyzer != null) {
         BestQAPSolutionAnalyzer.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
-        BestQAPSolutionAnalyzer.CoordinatesParameter.ActualName = CoordinatesParameter.Name;
         BestQAPSolutionAnalyzer.DistancesParameter.ActualName = DistancesParameter.Name;
         BestQAPSolutionAnalyzer.WeightsParameter.ActualName = WeightsParameter.Name;
@@ -335,19 +298,4 @@
       }
     }
-
-    private void UpdateDistancesFromCoordinates() {
-      if (Coordinates != null && Coordinates.Columns == 2 && Coordinates.Rows > 1) {
-        DoubleMatrix distance = new DoubleMatrix(Coordinates.Rows, Coordinates.Rows);
-        for (int i = 0; i < Coordinates.Rows - 1; i++) {
-          for (int j = i + 1; j < Coordinates.Rows; j++) {
-            double dx = Coordinates[i, 0] - Coordinates[j, 0];
-            double dy = Coordinates[i, 1] - Coordinates[j, 1];
-            distance[i, j] = Math.Sqrt(dx * dx + dy * dy);
-            distance[j, i] = Distances[i, j];
-          }
-        }
-        Distances = distance;
-      }
-    }
     #endregion
 
@@ -356,5 +304,4 @@
       parser.Parse(filename);
       if (parser.Error != null) throw parser.Error;
-      Coordinates = new DoubleMatrix();
       Distances = new DoubleMatrix(parser.Distances);
       Weights = new DoubleMatrix(parser.Weights);
@@ -372,5 +319,4 @@
         parser.Parse(stream);
         if (parser.Error != null) throw parser.Error;
-        Coordinates = new DoubleMatrix();
         Distances = new DoubleMatrix(parser.Distances);
         Weights = new DoubleMatrix(parser.Weights);
Index: branches/QAP/QAP.sln
===================================================================
--- branches/QAP/QAP.sln	(revision 5930)
+++ branches/QAP/QAP.sln	(revision 5931)
@@ -138,10 +138,14 @@
 		{34C967E5-EEB1-4502-8035-122EDDEF44CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{34C967E5-EEB1-4502-8035-122EDDEF44CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{34C967E5-EEB1-4502-8035-122EDDEF44CB}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{34C967E5-EEB1-4502-8035-122EDDEF44CB}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{34C967E5-EEB1-4502-8035-122EDDEF44CB}.Debug|x64.ActiveCfg = Debug|x64
+		{34C967E5-EEB1-4502-8035-122EDDEF44CB}.Debug|x64.Build.0 = Debug|x64
+		{34C967E5-EEB1-4502-8035-122EDDEF44CB}.Debug|x86.ActiveCfg = Debug|x86
+		{34C967E5-EEB1-4502-8035-122EDDEF44CB}.Debug|x86.Build.0 = Debug|x86
 		{34C967E5-EEB1-4502-8035-122EDDEF44CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{34C967E5-EEB1-4502-8035-122EDDEF44CB}.Release|Any CPU.Build.0 = Release|Any CPU
-		{34C967E5-EEB1-4502-8035-122EDDEF44CB}.Release|x64.ActiveCfg = Release|Any CPU
-		{34C967E5-EEB1-4502-8035-122EDDEF44CB}.Release|x86.ActiveCfg = Release|Any CPU
+		{34C967E5-EEB1-4502-8035-122EDDEF44CB}.Release|x64.ActiveCfg = Release|x64
+		{34C967E5-EEB1-4502-8035-122EDDEF44CB}.Release|x64.Build.0 = Release|x64
+		{34C967E5-EEB1-4502-8035-122EDDEF44CB}.Release|x86.ActiveCfg = Release|x86
+		{34C967E5-EEB1-4502-8035-122EDDEF44CB}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
