Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting.Views/3.3/VRPImportDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting.Views/3.3/VRPImportDialog.cs	(revision 4850)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting.Views/3.3/VRPImportDialog.cs	(revision 4851)
@@ -57,4 +57,7 @@
         okButton.Enabled = true;
 
+        tourFileTextBox.Text = string.Empty;
+        tourFileName = string.Empty;
+
         format = (VRPFormat)(openVRPFileDialog.FilterIndex);
       }
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting.Views/3.3/VehicleRoutingProblemView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting.Views/3.3/VehicleRoutingProblemView.cs	(revision 4850)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting.Views/3.3/VehicleRoutingProblemView.cs	(revision 4851)
@@ -109,40 +109,5 @@
         vrpSolutionView.Content = new VRPSolution(Content.Coordinates);
       else {
-        //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);
+        vrpSolutionView.Content = Content.BestKnownSolution;
       }
     }
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestVRPSolutionAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestVRPSolutionAnalyzer.cs	(revision 4850)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestVRPSolutionAnalyzer.cs	(revision 4851)
@@ -81,4 +81,10 @@
       get { return (ValueLookupParameter<ResultCollection>)Parameters["Results"]; }
     }
+    public LookupParameter<DoubleValue> BestKnownQualityParameter {
+      get { return (LookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
+    }
+    public LookupParameter<VRPSolution> BestKnownSolutionParameter {
+      get { return (LookupParameter<VRPSolution>)Parameters["BestKnownSolution"]; }
+    }
 
     [StorableConstructor]
@@ -97,4 +103,7 @@
       Parameters.Add(new LookupParameter<DoubleArray>("ServiceTime", "The service time of each customer."));
 
+      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 ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the VRP solutions which should be analyzed."));
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Distance", "The distances of the VRP solutions which should be analyzed."));
@@ -111,4 +120,16 @@
     }
 
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserializationHook() {
+      #region Backwards Compatibility
+      if (!Parameters.ContainsKey("BestKnownQuality")) {
+        Parameters.Add(new LookupParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this VRP instance."));
+      }
+      if (!Parameters.ContainsKey("BestKnownSolution")) {
+        Parameters.Add(new LookupParameter<VRPSolution>("BestKnownSolution", "The best known solution of this VRP instance."));
+      }
+      #endregion
+    }
+
     public override IOperation Apply() {
       DoubleMatrix coordinates = CoordinatesParameter.ActualValue;
@@ -121,4 +142,6 @@
       ItemArray<DoubleValue> travelTimes = TravelTimeParameter.ActualValue;
       ItemArray<DoubleValue> vehiclesUtilizations = VehiclesUtilizedParameter.ActualValue;
+
+      DoubleValue bestKnownQuality = BestKnownQualityParameter.ActualValue;
 
       int i = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
@@ -159,4 +182,10 @@
       }
 
+      if (bestKnownQuality == null ||
+          qualities[i].Value < bestKnownQuality.Value) {
+        BestKnownQualityParameter.ActualValue = new DoubleValue(qualities[i].Value);
+        BestKnownSolutionParameter.ActualValue = (VRPSolution)solution.Clone();
+      }
+
       return base.Apply();
     }
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/VehicleRoutingProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/VehicleRoutingProblem.cs	(revision 4850)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/VehicleRoutingProblem.cs	(revision 4851)
@@ -114,6 +114,6 @@
       get { return BestKnownQualityParameter; }
     }
-    public OptionalValueParameter<IVRPEncoding> BestKnownSolutionParameter {
-      get { return (OptionalValueParameter<IVRPEncoding>)Parameters["BestKnownSolution"]; }
+    public OptionalValueParameter<VRPSolution> BestKnownSolutionParameter {
+      get { return (OptionalValueParameter<VRPSolution>)Parameters["BestKnownSolution"]; }
     }
     #endregion
@@ -160,5 +160,5 @@
       set { BestKnownQualityParameter.Value = value; }
     }
-    public IVRPEncoding BestKnownSolution {
+    public VRPSolution 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<IVRPEncoding>("BestKnownSolution", "The best known solution of this TSP instance."));
+      Parameters.Add(new OptionalValueParameter<VRPSolution>("BestKnownSolution", "The best known solution of this VRP 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<IVRPEncoding>("BestKnownSolution", "The best known solution of this TSP instance."));
+        Parameters.Add(new OptionalValueParameter<VRPSolution>("BestKnownSolution", "The best known solution of this TSP instance."));
       }
       #endregion
@@ -673,9 +673,9 @@
       if (BestKnownSolution != null) {
         //call evaluator
-        IValueParameter<DoubleMatrix> distMatrix = new ValueParameter<DoubleMatrix>("DistMatrix",
+        IValueLookupParameter<DoubleMatrix> distMatrix = new ValueLookupParameter<DoubleMatrix>("DistMatrix",
           DistanceMatrix);
 
         TourEvaluation eval = VRPEvaluator.Evaluate(
-          BestKnownSolution,
+          BestKnownSolution.Solution,
           Vehicles,
           DueTime,
@@ -695,4 +695,12 @@
         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 {
@@ -717,7 +725,17 @@
 
       if (cities != Coordinates.Rows - 1)
-        ErrorHandling.ShowErrorDialog(new Exception("Invalid solution"));
-      else
-        BestKnownSolutionParameter.Value = encoding;
+        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;
+      }
     }
 
