Index: /branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Interfaces/IValueParameter.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Interfaces/IValueParameter.cs	(revision 17316)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Interfaces/IValueParameter.cs	(revision 17317)
@@ -37,4 +37,10 @@
   public interface IValueParameter<T> : IValueParameter where T : class, IItem {
     new T Value { get; set; }
+
+    /// <summary>
+    /// Sets property <see cref="Value"/> regardless of ReadOnly state
+    /// </summary>
+    /// <param name="value">The value to set.</param>
+    void ForceValue(T value);
   }
 }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblem.cs	(revision 17316)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblem.cs	(revision 17317)
@@ -20,9 +20,12 @@
 #endregion
 
+using System;
 using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
   [StorableType("251d79f1-a065-47f9-85a3-2e8dbdbf685e")]
-  public interface IMultiObjectiveProblem : IProblem, IMultiObjectiveHeuristicOptimizationProblem { }
+  public interface IMultiObjectiveProblem : IProblem, IMultiObjectiveHeuristicOptimizationProblem {
+    event EventHandler MaximizationChanged;
+  }
 
   [StorableType("806fb361-1469-4903-9f54-f8678b0717b9")]
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblem.cs	(revision 17316)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblem.cs	(revision 17317)
@@ -20,10 +20,12 @@
 #endregion
 
-
+using System;
 using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
   [StorableType("24830fd5-7d97-41a5-9d7e-d84f1b7ab259")]
-  public interface ISingleObjectiveProblem : ISingleObjectiveHeuristicOptimizationProblem { }
+  public interface ISingleObjectiveProblem : ISingleObjectiveHeuristicOptimizationProblem {
+    event EventHandler MaximizationChanged;
+  }
 
   [StorableType("9cc9422f-0bb5-41e8-9d9e-6e0b66a66449")]
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveProblem.cs	(revision 17316)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveProblem.cs	(revision 17317)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -37,5 +38,4 @@
     where TEncodedSolution : class, IEncodedSolution {
     #region Parameternames
-    public const string MaximizationParameterName = "Maximization";
     public const string BestKnownFrontParameterName = "BestKnownFront";
     public const string ReferencePointParameterName = "ReferencePoint";
@@ -43,7 +43,5 @@
 
     #region Parameterproperties
-    public IValueParameter<BoolArray> MaximizationParameter {
-      get { return (IValueParameter<BoolArray>)Parameters[MaximizationParameterName]; }
-    }
+    [Storable] public IValueParameter<BoolArray> MaximizationParameter { get; }
     public IValueParameter<DoubleMatrix> BestKnownFrontParameter {
       get { return (IValueParameter<DoubleMatrix>)Parameters[BestKnownFrontParameterName]; }
@@ -60,9 +58,11 @@
     protected MultiObjectiveProblem(MultiObjectiveProblem<TEncoding, TEncodedSolution> original, Cloner cloner)
       : base(original, cloner) {
+      MaximizationParameter = cloner.Clone(original.MaximizationParameter);
       ParameterizeOperators();
     }
 
     protected MultiObjectiveProblem() : base() {
-      Parameters.Add(new ValueParameter<BoolArray>(MaximizationParameterName, "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()));
+      MaximizationParameter = new ValueParameter<BoolArray>("Maximization", "The dimensions correspond to the different objectives: False if the objective should be minimized, true if it should be maximized..", new BoolArray(new bool[] { }, @readonly: true));
+      Parameters.Add(MaximizationParameter);
       Parameters.Add(new OptionalValueParameter<DoubleMatrix>(BestKnownFrontParameterName, "A double matrix representing the best known qualites for this problem (aka points on the Pareto front). Points are to be given in a row-wise fashion."));
       Parameters.Add(new OptionalValueParameter<DoubleArray>(ReferencePointParameterName, "The refrence point for hypervolume calculations on this problem"));
@@ -73,5 +73,6 @@
 
     protected MultiObjectiveProblem(TEncoding encoding) : base(encoding) {
-      Parameters.Add(new ValueParameter<BoolArray>(MaximizationParameterName, "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()));
+      MaximizationParameter = new ValueParameter<BoolArray>("Maximization", "The dimensions correspond to the different objectives: False if the objective should be minimized, true if it should be maximized..", new BoolArray(new bool[] { }, @readonly: true));
+      Parameters.Add(MaximizationParameter);
       Parameters.Add(new OptionalValueParameter<DoubleMatrix>(BestKnownFrontParameterName, "A double matrix representing the best known qualites for this problem (aka points on the Pareto front). Points are to be given in a row-wise fashion."));
       Parameters.Add(new OptionalValueParameter<DoubleArray>(ReferencePointParameterName, "The refrence point for hypervolume calculations on this problem"));
@@ -89,5 +90,12 @@
       get { return Maximization.Length; }
     }
-    public abstract bool[] Maximization { get; }
+    public bool[] Maximization {
+      get { return MaximizationParameter.Value.CloneAsArray(); }
+      protected set {
+        if (MaximizationParameter.Value.SequenceEqual(value)) return;
+        MaximizationParameter.ForceValue(new BoolArray(value, @readonly: true));
+        OnMaximizationChanged();
+      }
+    }
 
     public virtual IReadOnlyList<double[]> BestKnownFront {
@@ -168,5 +176,5 @@
     #region IMultiObjectiveHeuristicOptimizationProblem Members
     IParameter IMultiObjectiveHeuristicOptimizationProblem.MaximizationParameter {
-      get { return Parameters[MaximizationParameterName]; }
+      get { return MaximizationParameter; }
     }
     IMultiObjectiveEvaluator IMultiObjectiveHeuristicOptimizationProblem.Evaluator {
@@ -174,4 +182,9 @@
     }
     #endregion
+
+    public event EventHandler MaximizationChanged;
+    protected void OnMaximizationChanged() {
+      MaximizationChanged?.Invoke(this, EventArgs.Empty);
+    }
   }
 }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs	(revision 17316)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs	(revision 17317)
@@ -59,8 +59,7 @@
       get { return MaximizationParameter.Value.Value; }
       protected set {
-        if (MaximizationParameter.Value.Value == value) return;
-        MaximizationParameter.ReadOnly = false;
-        MaximizationParameter.Value = new BoolValue(value).AsReadOnly();
-        MaximizationParameter.ReadOnly = true;
+        if (Maximization == value) return;
+        MaximizationParameter.ForceValue(new BoolValue(value, @readonly: true));
+        OnMaximizationChanged();
       }
     }
@@ -185,4 +184,9 @@
     }
     #endregion
+
+    public event EventHandler MaximizationChanged;
+    protected void OnMaximizationChanged() {
+      MaximizationChanged?.Invoke(this, EventArgs.Empty);
+    }
   }
 }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Problems/MultiObjectiveHeuristicOptimizationProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Problems/MultiObjectiveHeuristicOptimizationProblem.cs	(revision 17316)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Problems/MultiObjectiveHeuristicOptimizationProblem.cs	(revision 17317)
@@ -20,9 +20,10 @@
 #endregion
 
+using System;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
@@ -36,8 +37,13 @@
     [StorableConstructor]
     protected MultiObjectiveHeuristicOptimizationProblem(StorableConstructorFlag _) : base(_) { }
-    protected MultiObjectiveHeuristicOptimizationProblem(MultiObjectiveHeuristicOptimizationProblem<T, U> original, Cloner cloner) : base(original, cloner) { }
+    protected MultiObjectiveHeuristicOptimizationProblem(MultiObjectiveHeuristicOptimizationProblem<T, U> original, Cloner cloner)
+      : base(original, cloner) {
+      RegisterEventHandlers();
+    }
     protected MultiObjectiveHeuristicOptimizationProblem()
       : base() {
       Parameters.Add(new ValueParameter<BoolArray>(MaximizationParameterName, "Determines for each objective whether it should be maximized or minimized."));
+
+      RegisterEventHandlers();
     }
 
@@ -45,4 +51,14 @@
       : base(evaluator, solutionCreator) {
       Parameters.Add(new ValueParameter<BoolArray>(MaximizationParameterName, "Determines for each objective whether it should be maximized or minimized."));
+
+      RegisterEventHandlers();
+    }
+
+    private void RegisterEventHandlers() {
+      MaximizationParameter.ValueChanged += MaximizationParameterOnValueChanged;
+    }
+
+    private void MaximizationParameterOnValueChanged(object sender, EventArgs e) {
+      OnMaximizationChanged();
     }
 
@@ -61,4 +77,9 @@
       get { return Evaluator; }
     }
+
+    public event EventHandler MaximizationChanged;
+    protected void OnMaximizationChanged() {
+      MaximizationChanged?.Invoke(this, EventArgs.Empty);
+    }
   }
 }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Problems/SingleObjectiveHeuristicOptimizationProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Problems/SingleObjectiveHeuristicOptimizationProblem.cs	(revision 17316)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Problems/SingleObjectiveHeuristicOptimizationProblem.cs	(revision 17317)
@@ -20,9 +20,10 @@
 #endregion
 
+using System;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
@@ -37,9 +38,14 @@
     [StorableConstructor]
     protected SingleObjectiveHeuristicOptimizationProblem(StorableConstructorFlag _) : base(_) { }
-    protected SingleObjectiveHeuristicOptimizationProblem(SingleObjectiveHeuristicOptimizationProblem<T, U> original, Cloner cloner) : base(original, cloner) { }
+    protected SingleObjectiveHeuristicOptimizationProblem(SingleObjectiveHeuristicOptimizationProblem<T, U> original, Cloner cloner)
+      : base(original, cloner) {
+      RegisterEventHandlers();
+    }
     protected SingleObjectiveHeuristicOptimizationProblem()
       : base() {
       Parameters.Add(new ValueParameter<BoolValue>(MaximizationParameterName, "Set to false if the problem should be minimized.", new BoolValue()));
       Parameters.Add(new OptionalValueParameter<DoubleValue>(BestKnownQualityParameterName, "The quality of the best known solution of this problem."));
+
+      RegisterEventHandlers();
     }
 
@@ -48,4 +54,14 @@
       Parameters.Add(new ValueParameter<BoolValue>(MaximizationParameterName, "Set to false if the problem should be minimized.", new BoolValue()));
       Parameters.Add(new OptionalValueParameter<DoubleValue>(BestKnownQualityParameterName, "The quality of the best known solution of this problem."));
+
+      RegisterEventHandlers();
+    }
+
+    private void RegisterEventHandlers() {
+      MaximizationParameter.ValueChanged += MaximizationParameterOnValueChanged;
+    }
+
+    private void MaximizationParameterOnValueChanged(object sender, EventArgs e) {
+      OnMaximizationChanged();
     }
 
@@ -59,4 +75,5 @@
       }
       #endregion
+      RegisterEventHandlers();
     }
     public ValueParameter<BoolValue> MaximizationParameter {
@@ -68,5 +85,8 @@
     public BoolValue Maximization {
       get { return MaximizationParameter.Value; }
-      set { MaximizationParameter.Value = value; }
+      set {
+        if (Maximization == value) return;
+        MaximizationParameter.Value = value;
+      }
     }
 
@@ -85,4 +105,9 @@
       get { return Evaluator; }
     }
+
+    public event EventHandler MaximizationChanged;
+    protected void OnMaximizationChanged() {
+      MaximizationChanged?.Invoke(this, EventArgs.Empty);
+    }
   }
 }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/FixedValueParameter.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/FixedValueParameter.cs	(revision 17316)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/FixedValueParameter.cs	(revision 17317)
@@ -32,11 +32,9 @@
   [StorableType("7787B99D-5F32-4639-B47A-76CB4D204392")]
   public class FixedValueParameter<T> : ValueParameter<T>, IFixedValueParameter<T> where T : class, IItem, new() {
+    IItem IFixedValueParameter.Value { get { return Value; } }
 
-    public override T Value {
-      get { return base.Value; }
-      set { throw new NotSupportedException("FixedValueParameters do not support setting their value."); }
+    public override void ForceValue(T value) {
+      throw new NotSupportedException("FixedValueParameters do not support setting their value.");
     }
-
-    IItem IFixedValueParameter.Value { get { return Value; } }
 
     [StorableConstructor]
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/OptionalConstrainedValueParameter.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/OptionalConstrainedValueParameter.cs	(revision 17316)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/OptionalConstrainedValueParameter.cs	(revision 17317)
@@ -53,11 +53,17 @@
       set {
         if (ReadOnly) throw new InvalidOperationException("Cannot set the value of a readonly parameter.");
-        if (value != this.value) {
-          if ((value != null) && !validValues.Contains(value)) throw new ArgumentException("Invalid value.");
-          DeregisterValueEvents();
-          this.value = value;
-          RegisterValueEvents();
-          OnValueChanged();
-        }
+        DoSetValue(value);
+      }
+    }
+    public virtual void ForceValue(T value) {
+      DoSetValue(value);
+    }
+    private void DoSetValue(T value) {
+      if (value != this.value) {
+        if ((value != null) && !validValues.Contains(value)) throw new ArgumentException("Invalid value.");
+        DeregisterValueEvents();
+        this.value = value;
+        RegisterValueEvents();
+        OnValueChanged();
       }
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs	(revision 17316)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs	(revision 17317)
@@ -46,10 +46,16 @@
       set {
         if (ReadOnly) throw new InvalidOperationException("Cannot set the value of a readonly parameter.");
-        if (value != this.value) {
-          DeregisterValueEvents();
-          this.value = value;
-          RegisterValueEvents();
-          OnValueChanged();
-        }
+        DoSetValue(value);
+      }
+    }
+    public virtual void ForceValue(T value) {
+      DoSetValue(value);
+    }
+    private void DoSetValue(T value) {
+      if (value != this.value) {
+        DeregisterValueEvents();
+        this.value = value;
+        RegisterValueEvents();
+        OnValueChanged();
       }
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ValueLookupParameter.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ValueLookupParameter.cs	(revision 17316)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ValueLookupParameter.cs	(revision 17317)
@@ -46,12 +46,19 @@
       set {
         if (ReadOnly) throw new InvalidOperationException("Cannot set the value of a readonly parameter.");
-        if (value != this.value) {
-          DeregisterValueEvents();
-          this.value = value;
-          RegisterValueEvents();
-          OnValueChanged();
-        }
-      }
-    }
+        DoSetValue(value);
+      }
+    }
+    public virtual void ForceValue(T value) {
+      DoSetValue(value);
+    }
+    private void DoSetValue(T value) {
+      if (value != this.value) {
+        DeregisterValueEvents();
+        this.value = value;
+        RegisterValueEvents();
+        OnValueChanged();
+      }
+    }
+
     IItem IValueParameter.Value {
       get { return Value; }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisMultiObjectiveProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisMultiObjectiveProblem.cs	(revision 17316)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisMultiObjectiveProblem.cs	(revision 17317)
@@ -20,5 +20,7 @@
 #endregion
 
+using System;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -26,5 +28,4 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
@@ -77,16 +78,21 @@
 
     private void RegisterEventHandler() {
-      Evaluator.QualitiesParameter.ActualNameChanged += new System.EventHandler(QualitiesParameter_ActualNameChanged);
+      Evaluator.QualitiesParameter.ActualNameChanged += new EventHandler(QualitiesParameter_ActualNameChanged);
+      MaximizationParameter.ValueChanged += MaximizationParameter_ValueChanged;
     }
 
     protected override void OnEvaluatorChanged() {
       base.OnEvaluatorChanged();
-      Evaluator.QualitiesParameter.ActualNameChanged += new System.EventHandler(QualitiesParameter_ActualNameChanged);
+      Evaluator.QualitiesParameter.ActualNameChanged += new EventHandler(QualitiesParameter_ActualNameChanged);
       Maximization = new BoolArray(Evaluator.Maximization.ToArray());
       ParameterizeOperators();
     }
 
-    private void QualitiesParameter_ActualNameChanged(object sender, System.EventArgs e) {
+    private void QualitiesParameter_ActualNameChanged(object sender, EventArgs e) {
       ParameterizeOperators();
+    }
+
+    private void MaximizationParameter_ValueChanged(object sender, EventArgs e) {
+      OnMaximizationChanged();
     }
 
@@ -98,4 +104,9 @@
       }
     }
+
+    public event EventHandler MaximizationChanged;
+    protected void OnMaximizationChanged() {
+      MaximizationChanged?.Invoke(this, EventArgs.Empty);
+    }
   }
 }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisSingleObjectiveProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisSingleObjectiveProblem.cs	(revision 17316)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisSingleObjectiveProblem.cs	(revision 17317)
@@ -22,4 +22,5 @@
 using System;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -27,5 +28,4 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
@@ -95,4 +95,5 @@
     private void RegisterEventHandler() {
       Evaluator.QualityParameter.ActualNameChanged += new EventHandler(QualityParameter_ActualNameChanged);
+      MaximizationParameter.ValueChanged += MaximizationParameter_ValueChanged;
     }
 
@@ -108,4 +109,8 @@
     }
 
+    private void MaximizationParameter_ValueChanged(object sender, EventArgs e) {
+      OnMaximizationChanged();
+    }
+
     protected override void ParameterizeOperators() {
       base.ParameterizeOperators();
@@ -116,4 +121,9 @@
       }
     }
+
+    public event EventHandler MaximizationChanged;
+    protected void OnMaximizationChanged() {
+      MaximizationChanged?.Invoke(this, EventArgs.Empty);
+    }
   }
 }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/MultiObjectiveExternalEvaluationProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/MultiObjectiveExternalEvaluationProblem.cs	(revision 17316)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/MultiObjectiveExternalEvaluationProblem.cs	(revision 17317)
@@ -90,6 +90,6 @@
     public MultiObjectiveExternalEvaluationProblem(TEncoding encoding)
       : base(encoding) {
-      Parameters.Remove("Maximization"); // readonly in base class
-      Parameters.Add(new FixedValueParameter<BoolArray>("Maximization", "Set to false if the problem should be minimized.", new BoolArray()));
+      MaximizationParameter.ReadOnly = false;
+      MaximizationParameter.Value = new BoolArray();
       Parameters.Add(new OptionalValueParameter<EvaluationCache>("Cache", "Cache of previously evaluated solutions."));
       Parameters.Add(new ValueParameter<CheckedItemCollection<IEvaluationServiceClient>>("Clients", "The clients that are used to communicate with the external application.", new CheckedItemCollection<IEvaluationServiceClient>() { new EvaluationServiceClient() }));
@@ -99,10 +99,4 @@
 
     #region Multi Objective Problem Overrides
-    public override bool[] Maximization {
-      get {
-        return Parameters.ContainsKey("Maximization") ? ((IValueParameter<BoolArray>)Parameters["Maximization"]).Value.ToArray() : new bool[0];
-      }
-    }
-
     public virtual void SetMaximization(bool[] maximization) {
       ((IStringConvertibleArray)MaximizationParameter.Value).Length = maximization.Length;
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProgrammableProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProgrammableProblem.cs	(revision 17316)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProgrammableProblem.cs	(revision 17317)
@@ -26,5 +26,4 @@
 using HeuristicLab.Common.Resources;
 using HeuristicLab.Core;
-using HeuristicLab.Data;
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
@@ -94,6 +93,5 @@
 
     private void OnProblemDefinitionChanged() {
-      Parameters.Remove("Maximization");
-      Parameters.Add(new ValueParameter<BoolArray>("Maximization", "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()) {Hidden = true});
+      Maximization = ProblemDefinition.Maximization;
       Encoding = (TEncoding)ProblemScript.Encoding.Clone();
 
@@ -107,8 +105,4 @@
     private void OnProblemScriptNameChanged() {
       Name = ProblemScript.Name;
-    }
-
-    public override bool[] Maximization {
-      get { return Parameters.ContainsKey("ProblemScript") ? ProblemDefinition.Maximization : new[] {false}; }
     }
 
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/MultiObjectiveTestFunctionProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/MultiObjectiveTestFunctionProblem.cs	(revision 17316)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/MultiObjectiveTestFunctionProblem.cs	(revision 17317)
@@ -20,5 +20,4 @@
 #endregion
 using System;
-using System.Linq;
 using HEAL.Attic;
 using HeuristicLab.Analysis;
@@ -52,12 +51,4 @@
 
     #region Properties
-    public override bool[] Maximization {
-      get {
-        //necessary because of virtual member call in base ctor
-        if (!Parameters.ContainsKey("TestFunction")) return new bool[0];
-        return TestFunction.Maximization(Objectives).ToArray();
-      }
-    }
-
     public int ProblemSize {
       get { return ProblemSizeParameter.Value.Value; }
@@ -141,6 +132,5 @@
     #region Events
     private void UpdateParameterValues() {
-      Parameters.Remove(MaximizationParameterName);
-      Parameters.Add(new FixedValueParameter<BoolArray>(MaximizationParameterName, "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(TestFunction.Maximization(Objectives)).AsReadOnly()));
+      Maximization = TestFunction.Maximization(Objectives);
 
       Parameters.Remove(BestKnownFrontParameterName);
