Index: trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Evaluators/TSPDistanceMatrixEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Evaluators/TSPDistanceMatrixEvaluator.cs	(revision 8208)
+++ trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Evaluators/TSPDistanceMatrixEvaluator.cs	(revision 8221)
@@ -59,6 +59,6 @@
       if (distances == null || distances.Rows == 0 || distances.Columns == 0
         || distances.Rows != distances.Columns)
-        throw new InvalidOperationException("The distance matrix is empty or not square");
-      if (tour == null) throw new ArgumentNullException("tour", "No tour is given.");
+        throw new InvalidOperationException("TSPDistanceMatrixEvaluator: The distance matrix is empty or not square");
+      if (tour == null) throw new ArgumentNullException("tour", "TSPDistanceMatrixEvaluator: No tour is given.");
       Permutation p = tour;
       double length = 0;
Index: trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs	(revision 8208)
+++ trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs	(revision 8221)
@@ -112,9 +112,10 @@
       Parameters.Add(new OptionalValueParameter<DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the cities."));
       Parameters.Add(new OptionalValueParameter<DistanceMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities."));
-      Parameters.Add(new ValueParameter<BoolValue>("UseDistanceMatrix", "True if a distance matrix should be calculated and used for evaluation, otherwise false.", new BoolValue(true)));
+      Parameters.Add(new ValueParameter<BoolValue>("UseDistanceMatrix", "True if the coordinates based evaluators should calculate the distance matrix from the coordinates and use it for evaluation similar to the distance matrix evaluator, otherwise false.", new BoolValue(true)));
       Parameters.Add(new OptionalValueParameter<Permutation>("BestKnownSolution", "The best known solution of this TSP instance."));
 
       Maximization.Value = false;
       MaximizationParameter.Hidden = true;
+      UseDistanceMatrixParameter.Hidden = true;
       DistanceMatrixParameter.ReactOnValueToStringChangedAndValueItemImageChanged = false;
 
@@ -151,5 +152,6 @@
       UpdateMoveEvaluators();
       ParameterizeAnalyzers();
-      ClearDistanceMatrix();
+      if (Evaluator is ITSPCoordinatesPathEvaluator && Coordinates != null)
+        ClearDistanceMatrix();
     }
     private void CoordinatesParameter_ValueChanged(object sender, EventArgs e) {
@@ -158,13 +160,19 @@
         Coordinates.Reset += new EventHandler(Coordinates_Reset);
       }
-      ParameterizeSolutionCreator();
-      ClearDistanceMatrix();
+      if (Evaluator is ITSPCoordinatesPathEvaluator) {
+        ParameterizeSolutionCreator();
+        ClearDistanceMatrix();
+      }
     }
     private void Coordinates_ItemChanged(object sender, EventArgs<int, int> e) {
-      ClearDistanceMatrix();
+      if (Evaluator is ITSPCoordinatesPathEvaluator) {
+        ClearDistanceMatrix();
+      }
     }
     private void Coordinates_Reset(object sender, EventArgs e) {
-      ParameterizeSolutionCreator();
-      ClearDistanceMatrix();
+      if (Evaluator is ITSPCoordinatesPathEvaluator) {
+        ParameterizeSolutionCreator();
+        ClearDistanceMatrix();
+      }
     }
     private void SolutionCreator_PermutationParameter_ActualNameChanged(object sender, EventArgs e) {
@@ -346,6 +354,5 @@
 
     private void ClearDistanceMatrix() {
-      if (!(Evaluator is ITSPDistanceMatrixEvaluator))
-        DistanceMatrixParameter.Value = null;
+      DistanceMatrixParameter.Value = null;
     }
     #endregion
@@ -365,7 +372,8 @@
       Description = data.Description;
 
+      bool clearCoordinates = false, clearDistanceMatrix = false;
       if (data.Coordinates != null && data.Coordinates.GetLength(0) > 0)
         Coordinates = new DoubleMatrix(data.Coordinates);
-      else Coordinates = null;
+      else clearCoordinates = true;
 
       TSPEvaluator evaluator;
@@ -382,5 +390,5 @@
         DistanceMatrix = new DistanceMatrix(data.Distances);
       } else {
-        DistanceMatrix = null;
+        clearDistanceMatrix = true;
         UseDistanceMatrix = new BoolValue(data.Dimension <= DistanceMatrixSizeLimit);
         switch (data.DistanceMeasure) {
@@ -401,4 +409,8 @@
       Evaluator = evaluator;
 
+      // reset them after assigning the evaluator
+      if (clearCoordinates) Coordinates = null;
+      if (clearDistanceMatrix) DistanceMatrix = null;
+
       BestKnownSolution = null;
       BestKnownQuality = null;
