Index: trunk/sources/HeuristicLab.Problems.VehicleRouting.Views/3.3/VehicleRoutingProblemView.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting.Views/3.3/VehicleRoutingProblemView.cs	(revision 4851)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting.Views/3.3/VehicleRoutingProblemView.cs	(revision 4852)
@@ -109,5 +109,40 @@
         vrpSolutionView.Content = new VRPSolution(Content.Coordinates);
       else {
-        vrpSolutionView.Content = Content.BestKnownSolution;
+        //call evaluator
+        IValueLookupParameter<DoubleMatrix> distMatrix = new ValueLookupParameter<DoubleMatrix>("DistMatrix",
+          Content.DistanceMatrix);
+
+        TourEvaluation eval = VRPEvaluator.Evaluate(
+          Content.BestKnownSolution,
+          Content.Vehicles,
+          Content.DueTime,
+          Content.ServiceTime,
+          Content.ReadyTime,
+          Content.Demand,
+          Content.Capacity,
+          Content.FleetUsageFactorParameter.Value,
+          Content.TimeFactorParameter.Value,
+          Content.DistanceFactorParameter.Value,
+          Content.OverloadPenaltyParameter.Value,
+          Content.TardinessPenaltyParameter.Value,
+          Content.Coordinates,
+          distMatrix,
+          Content.UseDistanceMatrix);
+
+        Content.DistanceMatrix = distMatrix.Value;
+
+        vrpSolutionView.Content = new VRPSolution(Content.Coordinates,
+          Content.BestKnownSolution,
+          new DoubleValue(eval.Quality),
+          new DoubleValue(eval.Distance),
+          new DoubleValue(eval.Overload),
+          new DoubleValue(eval.Tardiness),
+          new DoubleValue(eval.TravelTime),
+          new DoubleValue(eval.VehcilesUtilized),
+          Content.DistanceMatrix,
+          Content.UseDistanceMatrix,
+          Content.ReadyTime,
+          Content.DueTime,
+          Content.ServiceTime);
       }
     }
Index: trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestVRPSolutionAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestVRPSolutionAnalyzer.cs	(revision 4851)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestVRPSolutionAnalyzer.cs	(revision 4852)
@@ -84,6 +84,6 @@
       get { return (LookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
     }
-    public LookupParameter<VRPSolution> BestKnownSolutionParameter {
-      get { return (LookupParameter<VRPSolution>)Parameters["BestKnownSolution"]; }
+    public LookupParameter<IVRPEncoding> BestKnownSolutionParameter {
+      get { return (LookupParameter<IVRPEncoding>)Parameters["BestKnownSolution"]; }
     }
 
@@ -104,5 +104,5 @@
 
       Parameters.Add(new LookupParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this VRP instance."));
-      Parameters.Add(new LookupParameter<VRPSolution>("BestKnownSolution", "The best known solution of this VRP instance."));
+      Parameters.Add(new LookupParameter<IVRPEncoding>("BestKnownSolution", "The best known solution of this VRP instance."));
 
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the VRP solutions which should be analyzed."));
@@ -127,5 +127,5 @@
       }
       if (!Parameters.ContainsKey("BestKnownSolution")) {
-        Parameters.Add(new LookupParameter<VRPSolution>("BestKnownSolution", "The best known solution of this VRP instance."));
+        Parameters.Add(new LookupParameter<IVRPEncoding>("BestKnownSolution", "The best known solution of this VRP instance."));
       }
       #endregion
@@ -185,5 +185,5 @@
           qualities[i].Value < bestKnownQuality.Value) {
         BestKnownQualityParameter.ActualValue = new DoubleValue(qualities[i].Value);
-        BestKnownSolutionParameter.ActualValue = (VRPSolution)solution.Clone();
+        BestKnownSolutionParameter.ActualValue = (IVRPEncoding)best.Clone();
       }
 
Index: trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/VehicleRoutingProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/VehicleRoutingProblem.cs	(revision 4851)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/VehicleRoutingProblem.cs	(revision 4852)
@@ -114,6 +114,6 @@
       get { return BestKnownQualityParameter; }
     }
-    public OptionalValueParameter<VRPSolution> BestKnownSolutionParameter {
-      get { return (OptionalValueParameter<VRPSolution>)Parameters["BestKnownSolution"]; }
+    public OptionalValueParameter<IVRPEncoding> BestKnownSolutionParameter {
+      get { return (OptionalValueParameter<IVRPEncoding>)Parameters["BestKnownSolution"]; }
     }
     #endregion
@@ -160,5 +160,5 @@
       set { BestKnownQualityParameter.Value = value; }
     }
-    public VRPSolution BestKnownSolution {
+    public IVRPEncoding BestKnownSolution {
       get { return BestKnownSolutionParameter.Value; }
       set { BestKnownSolutionParameter.Value = value; }
@@ -219,5 +219,5 @@
       Parameters.Add(new ValueParameter<DoubleArray>("ServiceTime", "The service time of each customer.", new DoubleArray()));
       Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this VRP instance."));
-      Parameters.Add(new OptionalValueParameter<VRPSolution>("BestKnownSolution", "The best known solution of this VRP instance."));
+      Parameters.Add(new OptionalValueParameter<IVRPEncoding>("BestKnownSolution", "The best known solution of this TSP instance."));
       Parameters.Add(new ValueParameter<DoubleValue>("EvalFleetUsageFactor", "The fleet usage factor considered in the evaluation.", new DoubleValue(100)));
       Parameters.Add(new ValueParameter<DoubleValue>("EvalTimeFactor", "The time factor considered in the evaluation.", new DoubleValue(0)));
@@ -440,5 +440,5 @@
       #region Backwards Compatibility
       if (!Parameters.ContainsKey("BestKnownSolution")) {
-        Parameters.Add(new OptionalValueParameter<VRPSolution>("BestKnownSolution", "The best known solution of this TSP instance."));
+        Parameters.Add(new OptionalValueParameter<IVRPEncoding>("BestKnownSolution", "The best known solution of this TSP instance."));
       }
       #endregion
@@ -673,9 +673,9 @@
       if (BestKnownSolution != null) {
         //call evaluator
-        IValueLookupParameter<DoubleMatrix> distMatrix = new ValueLookupParameter<DoubleMatrix>("DistMatrix",
+        IValueParameter<DoubleMatrix> distMatrix = new ValueLookupParameter<DoubleMatrix>("DistMatrix",
           DistanceMatrix);
 
         TourEvaluation eval = VRPEvaluator.Evaluate(
-          BestKnownSolution.Solution,
+          BestKnownSolution,
           Vehicles,
           DueTime,
@@ -695,12 +695,4 @@
         DistanceMatrix = distMatrix.Value;
 
-        BestKnownSolution.DistanceMatrix = DistanceMatrix;
-        BestKnownSolution.Distance = new DoubleValue(eval.Distance);
-        BestKnownSolution.Overload = new DoubleValue(eval.Overload);
-        BestKnownSolution.Quality = new DoubleValue(eval.Quality);
-        BestKnownSolution.Tardiness = new DoubleValue(eval.Tardiness);
-        BestKnownSolution.TravelTime = new DoubleValue(eval.TravelTime);
-        BestKnownSolution.VehicleUtilization = new DoubleValue(eval.VehcilesUtilized);
-
         BestKnownQuality = new DoubleValue(eval.Quality);
       } else {
@@ -725,17 +717,7 @@
 
       if (cities != Coordinates.Rows - 1)
-        ErrorHandling.ShowErrorDialog(new Exception("The optimal solution does not seem to correspond  with the problem data."));
-      else {
-        VRPSolution solution = new VRPSolution();
-        solution.Solution = encoding;
-        solution.Coordinates = Coordinates;
-        solution.DistanceMatrix = DistanceMatrix;
-        solution.ReadyTime = ReadyTime;
-        solution.DueTime = DueTime;
-        solution.ServiceTime = ServiceTime;
-        solution.UseDistanceMatrix = UseDistanceMatrix;
-
-        BestKnownSolutionParameter.Value = solution;
-      }
+        ErrorHandling.ShowErrorDialog(new Exception("Invalid solution"));
+      else
+        BestKnownSolutionParameter.Value = encoding;
     }
 
