Index: /trunk/sources/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveBasicProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveBasicProblem.cs	(revision 11989)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveBasicProblem.cs	(revision 11990)
@@ -33,4 +33,20 @@
     ISingleObjectiveProblemDefinition, ISingleObjectiveHeuristicOptimizationProblem
   where TEncoding : class, IEncoding {
+
+    protected IValueParameter<DoubleValue> BestKnownQualityParameter {
+      get { return (IValueParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
+    }
+
+    public double BestKnownQuality {
+      get {
+        if (BestKnownQualityParameter.Value == null) return double.NaN;
+        return BestKnownQualityParameter.Value.Value;
+      }
+      set {
+        if (BestKnownQualityParameter.Value == null) BestKnownQualityParameter.Value = new DoubleValue(value);
+        else BestKnownQualityParameter.Value.Value = value;
+      }
+    }
+
     [StorableConstructor]
     protected SingleObjectiveBasicProblem(bool deserializing) : base(deserializing) { }
Index: /trunk/sources/HeuristicLab.Problems.Binary/3.3/BinaryProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Binary/3.3/BinaryProblem.cs	(revision 11989)
+++ /trunk/sources/HeuristicLab.Problems.Binary/3.3/BinaryProblem.cs	(revision 11990)
@@ -22,4 +22,5 @@
 #endregion
 
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -33,5 +34,4 @@
   [StorableClass]
   public abstract class BinaryProblem : SingleObjectiveBasicProblem<BinaryVectorEncoding> {
-
     public virtual int Length {
       get { return Encoding.Length; }
@@ -39,8 +39,27 @@
     }
 
+    private IFixedValueParameter<IntValue> LengthParameter {
+      get { return (IFixedValueParameter<IntValue>)Parameters["Length"]; }
+    }
+
     [StorableConstructor]
     protected BinaryProblem(bool deserializing) : base(deserializing) { }
-    protected BinaryProblem(BinaryProblem original, Cloner cloner) : base(original, cloner) { }
-    protected BinaryProblem() : base() { }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterEventHandlers();
+    }
+
+    protected BinaryProblem(BinaryProblem original, Cloner cloner)
+      : base(original, cloner) {
+      RegisterEventHandlers();
+    }
+
+    protected BinaryProblem()
+      : base() {
+      var lengthParameter = new FixedValueParameter<IntValue>("Length", "The length of the BinaryVector.", new IntValue(10));
+      Parameters.Add(lengthParameter);
+      Encoding.LengthParameter = lengthParameter;
+      RegisterEventHandlers();
+    }
 
     public virtual bool IsBetter(double quality, double bestQuality) {
@@ -53,4 +72,16 @@
 
     public abstract double Evaluate(BinaryVector vector, IRandom random);
+
+    protected override void OnEncodingChanged() {
+      base.OnEncodingChanged();
+      Encoding.LengthParameter = LengthParameter;
+    }
+
+
+    private void RegisterEventHandlers() {
+      LengthParameter.Value.ValueChanged += LengthParameter_ValueChanged;
+    }
+
+    protected virtual void LengthParameter_ValueChanged(object sender, EventArgs e) { }
   }
 }
Index: /trunk/sources/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj	(revision 11989)
+++ /trunk/sources/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj	(revision 11990)
@@ -86,4 +86,5 @@
     <Compile Include="DeceptiveTrapProblem.cs" />
     <Compile Include="HIFFProblem.cs" />
+    <Compile Include="OneMaxProblem.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
Index: /trunk/sources/HeuristicLab.Problems.Binary/3.3/OneMaxProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Binary/3.3/OneMaxProblem.cs	(revision 11990)
+++ /trunk/sources/HeuristicLab.Problems.Binary/3.3/OneMaxProblem.cs	(revision 11990)
@@ -0,0 +1,71 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.BinaryVectorEncoding;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.Binary {
+  [Item("One Max Problem", "Represents a problem whose objective is to maximize the number of true values.")]
+  [Creatable("Problems")]
+  [StorableClass]
+  public class OneMaxProblem : BinaryProblem {
+    public override bool Maximization {
+      get { return true; }
+    }
+
+    public OneMaxProblem()
+      : base() {
+      Encoding = new BinaryVectorEncoding("BinaryVector", 10);
+      BestKnownQuality = Length;
+    }
+
+    [StorableConstructor]
+    protected OneMaxProblem(bool deserializing) : base(deserializing) { }
+
+    protected OneMaxProblem(OneMaxProblem original, Cloner cloner) : base(original, cloner) { }
+    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();
+    }
+
+    public override double Evaluate(BinaryVector vector, IRandom random) {
+      return vector.Count(b => b);
+    }
+
+    protected override void LengthParameter_ValueChanged(object sender, EventArgs e) {
+      base.LengthParameter_ValueChanged(sender, e);
+      BestKnownQuality = Length;
+    }
+  }
+}
