Index: trunk/sources/HeuristicLab.Optimization/3.3/BasicProblems/BasicProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/BasicProblems/BasicProblem.cs	(revision 11994)
+++ trunk/sources/HeuristicLab.Optimization/3.3/BasicProblems/BasicProblem.cs	(revision 11996)
@@ -67,4 +67,5 @@
       Parameters.Add(new ValueParameter<TEncoding>("Encoding", "Describes the configuration of the encoding, what the variables are called, what type they are and their bounds if any."));
       oldEncoding = Encoding;
+      Parameterize();
       RegisterEvents();
     }
@@ -91,4 +92,11 @@
 
     protected virtual void OnEncodingChanged() {
+      Parameterize();
+
+      OnOperatorsChanged();
+      OnReset();
+    }
+
+    private void Parameterize() {
       if (oldEncoding != null) {
         AdaptEncodingOperators(oldEncoding, Encoding);
@@ -107,12 +115,9 @@
         Encoding.SolutionCreator);
       Parameters.Remove(SolutionCreatorParameter);
-      Parameters.Add(solutionCreatorParam);  
-      ((IValueParameter)solutionCreatorParam).ValueChanged += SolutionCreatorParameter_ValueChanged;      
+      Parameters.Add(solutionCreatorParam);
+      ((IValueParameter)solutionCreatorParam).ValueChanged += SolutionCreatorParameter_ValueChanged;
 
       var multiEncoding = Encoding as MultiEncoding;
       if (multiEncoding != null) multiEncoding.EncodingsChanged += MultiEncodingOnEncodingsChanged;
-
-      OnOperatorsChanged();
-      OnReset();
     }
 
Index: trunk/sources/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveBasicProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveBasicProblem.cs	(revision 11994)
+++ trunk/sources/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveBasicProblem.cs	(revision 11996)
@@ -41,5 +41,5 @@
     protected MultiObjectiveBasicProblem()
       : base() {
-      Parameters.Add(new ValueParameter<BoolArray>("Maximization", "Set to false if the problem should be minimized.", new BoolArray()));
+      Parameters.Add(new ValueParameter<BoolArray>("Maximization", "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()));
 
       Operators.Add(Evaluator);
@@ -57,9 +57,4 @@
     public abstract double[] Evaluate(Individual individual, IRandom random);
     public virtual void Analyze(Individual[] individuals, double[][] qualities, ResultCollection results, IRandom random) { }
-
-    protected override void OnEncodingChanged() {
-      base.OnEncodingChanged();
-      Parameters["Maximization"].ActualValue = new BoolArray(Maximization);
-    }
 
     protected override void OnOperatorsChanged() {
Index: trunk/sources/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveBasicProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveBasicProblem.cs	(revision 11994)
+++ trunk/sources/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveBasicProblem.cs	(revision 11996)
@@ -59,5 +59,5 @@
     protected SingleObjectiveBasicProblem()
       : base() {
-      Parameters.Add(new FixedValueParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.", new BoolValue()));
+      Parameters.Add(new FixedValueParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.", (BoolValue)new BoolValue(Maximization).AsReadOnly()) { Hidden = true });
       Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this problem."));
 
@@ -82,11 +82,4 @@
     public virtual IEnumerable<Individual> GetNeighbors(Individual individual, IRandom random) {
       return Enumerable.Empty<Individual>();
-    }
-
-
-    protected override void OnEncodingChanged() {
-      base.OnEncodingChanged();
-      var max = (BoolValue)Parameters["Maximization"].ActualValue;
-      max.Value = Maximization;
     }
 
Index: trunk/sources/HeuristicLab.Problems.Binary/3.3/BinaryProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Binary/3.3/BinaryProblem.cs	(revision 11994)
+++ trunk/sources/HeuristicLab.Problems.Binary/3.3/BinaryProblem.cs	(revision 11996)
@@ -23,4 +23,5 @@
 
 using System;
+using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -67,9 +68,17 @@
     }
 
+    public abstract double Evaluate(BinaryVector vector, IRandom random);
     public sealed override double Evaluate(Individual individual, IRandom random) {
       return Evaluate(individual.BinaryVector(), random);
     }
 
-    public abstract double Evaluate(BinaryVector vector, IRandom random);
+    public override void Analyze(Individual[] individuals, double[] qualities, ResultCollection results, IRandom random) {
+      base.Analyze(individuals, qualities, results, random);
+      var best = individuals.Zip(qualities, (i, q) => new { Individual = i, Quality = q }).OrderByDescending(z => z.Quality).First();
+      if (!results.ContainsKey("Best Solution")) {
+        results.Add(new Result("Best Solution", typeof(BinaryVector)));
+      }
+      results["Best Solution"].Value = best.Individual.BinaryVector();
+    }
 
     protected override void OnEncodingChanged() {
Index: trunk/sources/HeuristicLab.Problems.Binary/3.3/DeceptiveTrapProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Binary/3.3/DeceptiveTrapProblem.cs	(revision 11994)
+++ trunk/sources/HeuristicLab.Problems.Binary/3.3/DeceptiveTrapProblem.cs	(revision 11996)
@@ -66,5 +66,5 @@
       : base() {
       Parameters.Add(new FixedValueParameter<IntValue>(TrapSizeParameterName, "", new IntValue(7)));
-      Length = 49;
+      Encoding.Length = 49;
     }
 
Index: trunk/sources/HeuristicLab.Problems.Binary/3.3/HIFFProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Binary/3.3/HIFFProblem.cs	(revision 11994)
+++ trunk/sources/HeuristicLab.Problems.Binary/3.3/HIFFProblem.cs	(revision 11996)
@@ -48,5 +48,5 @@
     public HIFFProblem()
       : base() {
-      Length = 64;
+        Encoding.Length = 64;
     }
     // In the GECCO paper, Section 4.1
Index: trunk/sources/HeuristicLab.Problems.Binary/3.3/OneMaxProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Binary/3.3/OneMaxProblem.cs	(revision 11994)
+++ trunk/sources/HeuristicLab.Problems.Binary/3.3/OneMaxProblem.cs	(revision 11996)
@@ -39,6 +39,6 @@
     public OneMaxProblem()
       : base() {
-      Encoding = new BinaryVectorEncoding("BinaryVector", 10);
-      BestKnownQuality = Length;
+      Encoding.Length = 10;
+      BestKnownQuality = Encoding.Length;
     }
 
@@ -49,13 +49,4 @@
     public override IDeepCloneable Clone(Cloner cloner) {
       return new OneMaxProblem(this, cloner);
-    }
-
-    public override void Analyze(Individual[] individuals, double[] qualities, ResultCollection results, IRandom random) {
-      base.Analyze(individuals, qualities, results, random);
-      var best = individuals.Zip(qualities, (i, q) => new { Individual = i, Quality = q }).OrderByDescending(z => z.Quality).First();
-      if (!results.ContainsKey("Best Solution")) {
-        results.Add(new Result("Best Solution", typeof(BinaryVector)));
-      }
-      results["Best Solution"].Value = best.Individual.BinaryVector();
     }
 
Index: trunk/sources/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProgrammableProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProgrammableProblem.cs	(revision 11994)
+++ trunk/sources/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProgrammableProblem.cs	(revision 11996)
@@ -24,4 +24,5 @@
 using HeuristicLab.Common.Resources;
 using HeuristicLab.Core;
+using HeuristicLab.Data;
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
@@ -73,4 +74,7 @@
 
     private void OnProblemDefinitionChanged() {
+      if (Parameters.ContainsKey("Maximization")) Parameters.Remove("Maximization");
+      Parameters.Add(new ValueParameter<BoolArray>("Maximization", "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()));
+
       Encoding = ProblemDefinition.Encoding;
       OnOperatorsChanged();
Index: trunk/sources/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs	(revision 11994)
+++ trunk/sources/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs	(revision 11996)
@@ -26,4 +26,5 @@
 using HeuristicLab.Common.Resources;
 using HeuristicLab.Core;
+using HeuristicLab.Data;
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
@@ -76,5 +77,10 @@
 
     private void OnProblemDefinitionChanged() {
+      if (Parameters.ContainsKey("Maximization")) Parameters.Remove("Maximization");
+      Parameters.Add(new FixedValueParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.", (BoolValue)new BoolValue(Maximization).AsReadOnly()) { Hidden = true });
+
       Encoding = ProblemDefinition.Encoding;
+      OnOperatorsChanged();
+      OnReset();
     }
 
