Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPProblemInstance.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPProblemInstance.cs	(revision 8005)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Interfaces/IVRPProblemInstance.cs	(revision 8006)
@@ -31,5 +31,5 @@
 namespace HeuristicLab.Problems.VehicleRouting.Interfaces {
   public interface IVRPProblemInstance: IItem {
-    IVRPEvaluator SolutionEvaluator { get; }
+    IVRPEvaluator SolutionEvaluator { get; set; }
     IVRPEvaluator MoveEvaluator { get; }
     IEnumerable<IOperator> Operators { get; }
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPProblemInstance.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPProblemInstance.cs	(revision 8005)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPProblemInstance.cs	(revision 8006)
@@ -174,4 +174,10 @@
         return evaluator;
       }
+
+      set {
+        moveEvaluator = null;
+        evaluator = value;
+        EvalBestKnownSolution();
+      }
     }
 
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs	(revision 8005)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs	(revision 8006)
@@ -41,5 +41,5 @@
   [Creatable("Problems")]
   [StorableClass]
-  public sealed class VehicleRoutingProblem : ParameterizedNamedItem, ISingleObjectiveHeuristicOptimizationProblem, IStorableContent, IProblemInstanceConsumer<IVRPData> {
+  public sealed class VehicleRoutingProblem : Problem, ISingleObjectiveHeuristicOptimizationProblem, IStorableContent, IProblemInstanceConsumer<IVRPData> {
     public string Filename { get; set; }
 
@@ -107,11 +107,4 @@
     public ISolutionCreator SolutionCreator {
       get { return SolutionCreatorParameter.Value; }
-    }
-
-    [Storable]
-    private List<IItem> operators;
-
-    public IEnumerable<IItem> Operators {
-      get { return operators; }
     }
     #endregion
@@ -131,6 +124,4 @@
       EvaluatorParameter.Hidden = true;
 
-      operators = new List<IItem>();
-
       InitializeRandomVRPInstance();
       InitializeOperators();
@@ -147,5 +138,4 @@
     private VehicleRoutingProblem(VehicleRoutingProblem original, Cloner cloner)
       : base(original, cloner) {
-      this.operators = original.operators.Select(x => (IItem)cloner.Clone(x)).ToList();
       this.AttachEventHandlers();
     }
@@ -162,14 +152,4 @@
       if (handler != null) handler(this, EventArgs.Empty);
     }
-    public event EventHandler OperatorsChanged;
-    private void OnOperatorsChanged() {
-      EventHandler handler = OperatorsChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    public event EventHandler Reset;
-    private void OnReset() {
-      EventHandler handler = Reset;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
     #endregion
 
@@ -181,7 +161,14 @@
     }
 
+    [Storable(Name = "operators", AllowOneWay = true)]
+    private List<IOperator> StorableOperators {
+      set { Operators.AddRange(value); }
+    }
+
     private void AttachEventHandlers() {
       ProblemInstanceParameter.ValueChanged += new EventHandler(ProblemInstanceParameter_ValueChanged);
       BestKnownSolutionParameter.ValueChanged += new EventHandler(BestKnownSolutionParameter_ValueChanged);
+      EvaluatorParameter.ValueChanged += new EventHandler(EvaluatorParameter_ValueChanged);
+      SolutionCreatorParameter.ValueChanged += new EventHandler(SolutionCreatorParameter_ValueChanged);
     }
 
@@ -193,5 +180,5 @@
         EvaluatorParameter.Value = ProblemInstance.SolutionEvaluator;
         IVRPCreator defaultCreator = null;
-        foreach (IVRPCreator creator in operators.Where(o => o is IVRPCreator)) {
+        foreach (IVRPCreator creator in Operators.Where(o => o is IVRPCreator)) {
           solutionCreatorParameter.ValidValues.Add(creator);
           if (creator is Encodings.Alba.RandomCreator)
@@ -220,4 +207,5 @@
 
     void ProblemInstance_EvaluationChanged(object sender, EventArgs e) {
+      EvaluatorParameter.Value = ProblemInstance.SolutionEvaluator;
       EvalBestKnownSolution();
     }
@@ -245,17 +233,17 @@
 
     private void SolutionCreatorParameter_ValueChanged(object sender, EventArgs e) {
-      ParameterizeSolutionCreator();
-
       OnSolutionCreatorChanged();
     }
     private void EvaluatorParameter_ValueChanged(object sender, EventArgs e) {
+      if (ProblemInstance != null)
+        ProblemInstance.SolutionEvaluator = EvaluatorParameter.Value;
       OnEvaluatorChanged();
     }
 
     private void InitializeOperators() {
-      operators = new List<IItem>();
+      Operators.Clear();
 
       if (ProblemInstance != null) {
-        operators.AddRange(
+        Operators.AddRange(
         ProblemInstance.Operators.Concat(
           ApplicationManager.Manager.GetInstances<IGeneralVRPOperator>().Cast<IOperator>()).OrderBy(op => op.Name));
@@ -263,10 +251,4 @@
 
       ParameterizeOperators();
-    }
-
-    private void ParameterizeSolutionCreator() {
-      if (SolutionCreator is IMultiVRPOperator) {
-        (SolutionCreator as IMultiVRPOperator).SetOperators(Operators.OfType<IOperator>());
-      }
     }
 
