Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.TravelingSalesman/3.3/TSPData.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.TravelingSalesman/3.3/TSPData.cs	(revision 17254)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.TravelingSalesman/3.3/TSPData.cs	(revision 17335)
@@ -40,13 +40,13 @@
   [Item("Matrix-based TSP Data", "TSP that is representd by a distance matrix.")]
   [StorableType("4df58a35-679d-4414-b815-9450ae100823")]
-  public class MatrixTSPData : NamedItem, ITSPData {
-    [Storable] public DoubleMatrix Matrix { get; protected set; }
-    [Storable] public DoubleMatrix DisplayCoordinates { get; protected set; }
+  public sealed class MatrixTSPData : NamedItem, ITSPData {
+    [Storable] public DoubleMatrix Matrix { get; private set; }
+    [Storable] public DoubleMatrix DisplayCoordinates { get; private set; }
 
     public int Cities => Matrix.Rows;
 
     [StorableConstructor]
-    protected  MatrixTSPData(StorableConstructorFlag _) : base(_) { }
-    protected MatrixTSPData(MatrixTSPData original, Cloner cloner) : base(original, cloner) {
+    private  MatrixTSPData(StorableConstructorFlag _) : base(_) { }
+    private MatrixTSPData(MatrixTSPData original, Cloner cloner) : base(original, cloner) {
       Matrix = original.Matrix;
       DisplayCoordinates = original.DisplayCoordinates;
@@ -76,6 +76,6 @@
     }
 
-    public virtual ITSPSolution GetSolution(Permutation tour, double tourLength) {
-      return new TSPSolution(DisplayCoordinates, tour, new DoubleValue(tourLength));
+    public ITSPSolution GetSolution(Permutation tour, double tourLength) {
+      return new TSPSolution(this, tour, new DoubleValue(tourLength));
     }
 
@@ -135,5 +135,5 @@
 
     public virtual ITSPSolution GetSolution(Permutation tour, double tourLength) {
-      return new TSPSolution(Coordinates, tour, new DoubleValue(tourLength));
+      return new TSPSolution(this, tour, new DoubleValue(tourLength));
     }
 
@@ -143,13 +143,13 @@
   [Item("Euclidean TSP Data", "TSP that is represented by coordinates in an Euclidean plane.")]
   [StorableType("4bf58348-cd98-46c5-a4c0-55f486ca88b4")]
-  public class EuclideanTSPData : CoordinatesTSPData {
+  public sealed class EuclideanTSPData : CoordinatesTSPData {
     public enum DistanceRounding { None, Midpoint, Ceiling }
 
     [Storable]
-    public DistanceRounding Rounding { get; protected set; }
-
-    [StorableConstructor]
-    protected EuclideanTSPData(StorableConstructorFlag _) : base(_) { }
-    protected EuclideanTSPData(EuclideanTSPData original, Cloner cloner) : base(original, cloner) {
+    public DistanceRounding Rounding { get; private set; }
+
+    [StorableConstructor]
+    private EuclideanTSPData(StorableConstructorFlag _) : base(_) { }
+    private EuclideanTSPData(EuclideanTSPData original, Cloner cloner) : base(original, cloner) {
       Rounding = original.Rounding;
     }
@@ -199,8 +199,8 @@
   [Item("Geo TSP Data", "TSP that is represented by geo coordinates.")]
   [StorableType("dc859a89-e6c2-4af3-a3b6-9aa3041b14a9")]
-  public class GeoTSPData : CoordinatesTSPData {
-    [StorableConstructor]
-    protected GeoTSPData(StorableConstructorFlag _) : base(_) { }
-    protected GeoTSPData(GeoTSPData original, Cloner cloner) : base(original, cloner) { }
+  public sealed class GeoTSPData : CoordinatesTSPData {
+    [StorableConstructor]
+    private GeoTSPData(StorableConstructorFlag _) : base(_) { }
+    private GeoTSPData(GeoTSPData original, Cloner cloner) : base(original, cloner) { }
     public GeoTSPData() : base() { }
     public GeoTSPData(string name, double[,] coordinates) : base(name, coordinates) { }
@@ -228,8 +228,8 @@
   [Item("ATT TSP Data", "TSP that is represented by ATT coordinates.")]
   [StorableType("d7a0add3-6ec1-42e0-b1d7-b6454694d485")]
-  public class AttTSPData : CoordinatesTSPData {
-    [StorableConstructor]
-    protected AttTSPData(StorableConstructorFlag _) : base(_) { }
-    protected AttTSPData(AttTSPData original, Cloner cloner) : base(original, cloner) { }
+  public sealed class AttTSPData : CoordinatesTSPData {
+    [StorableConstructor]
+    private AttTSPData(StorableConstructorFlag _) : base(_) { }
+    private AttTSPData(AttTSPData original, Cloner cloner) : base(original, cloner) { }
     public AttTSPData() : base() { }
     public AttTSPData(string name, double[,] coordinates) : base(name, coordinates) { }
@@ -257,8 +257,8 @@
   [Item("Manhattan TSP Data", "TSP that is represented by Manhattan coordinates.")]
   [StorableType("5f1ef9e2-cbd1-400e-8f87-6855f091fc9e")]
-  public class ManhattanTSPData : CoordinatesTSPData {
-    [StorableConstructor]
-    protected ManhattanTSPData(StorableConstructorFlag _) : base(_) { }
-    protected ManhattanTSPData(ManhattanTSPData original, Cloner cloner) : base(original, cloner) { }
+  public sealed class ManhattanTSPData : CoordinatesTSPData {
+    [StorableConstructor]
+    private ManhattanTSPData(StorableConstructorFlag _) : base(_) { }
+    private ManhattanTSPData(ManhattanTSPData original, Cloner cloner) : base(original, cloner) { }
     public ManhattanTSPData() : base() { }
     public ManhattanTSPData(string name, double[,] coordinates) : base(name, coordinates) { }
@@ -286,8 +286,8 @@
   [Item("Manhattan TSP Data", "TSP that is represented by the maximum absolute distance in either x or y coordinates.")]
   [StorableType("c6294a6c-fe62-4906-9765-4bc306d3e4a8")]
-  public class MaximumTSPData : CoordinatesTSPData {
-    [StorableConstructor]
-    protected MaximumTSPData(StorableConstructorFlag _) : base(_) { }
-    protected MaximumTSPData(MaximumTSPData original, Cloner cloner) : base(original, cloner) { }
+  public sealed class MaximumTSPData : CoordinatesTSPData {
+    [StorableConstructor]
+    private MaximumTSPData(StorableConstructorFlag _) : base(_) { }
+    private MaximumTSPData(MaximumTSPData original, Cloner cloner) : base(original, cloner) { }
     public MaximumTSPData() : base() { }
     public MaximumTSPData(string name, double[,] coordinates) : base(name, coordinates) { }
