Index: stable/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/EvenParityProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/EvenParityProblem.cs	(revision 12938)
+++ stable/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/EvenParityProblem.cs	(revision 13280)
@@ -38,7 +38,5 @@
 
     #region parameter names
-
     private const string NumberOfBitsParameterName = "NumberOfBits";
-
     #endregion
 
@@ -47,15 +45,11 @@
       get { return (IFixedValueParameter<IntValue>)Parameters[NumberOfBitsParameterName]; }
     }
-
     #endregion
 
     #region Properties
-
     public int NumberOfBits {
       get { return NumberOfBitsParameter.Value.Value; }
       set { NumberOfBitsParameter.Value.Value = value; }
     }
-
-
     #endregion
 
@@ -63,4 +57,23 @@
       get { return true; }
     }
+
+    #region item cloning and persistence
+    // persistence
+    [StorableConstructor]
+    private EvenParityProblem(bool deserializing) : base(deserializing) { }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterEventHandlers();
+    }
+
+    // cloning 
+    private EvenParityProblem(EvenParityProblem original, Cloner cloner)
+      : base(original, cloner) {
+      RegisterEventHandlers();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EvenParityProblem(this, cloner);
+    }
+    #endregion
 
     public EvenParityProblem()
@@ -84,4 +97,6 @@
 
       Encoding.Grammar = g;
+
+      BestKnownQuality = Math.Pow(2, NumberOfBits); // this is a benchmark problem (the best achievable quality is known for a given number of bits)
     }
 
@@ -108,14 +123,13 @@
     }
 
-
     private static IEnumerable<bool> InterpretRec(ISymbolicExpressionTreeNode node, IEnumerable<int> bs) {
-      Func<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode, Func<bool, bool, bool>, IEnumerable<bool>> eval2 =
+      Func<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode, Func<bool, bool, bool>, IEnumerable<bool>> binaryEval =
         (left, right, f) => InterpretRec(left, bs).Zip(InterpretRec(right, bs), f);
 
       switch (node.Symbol.Name) {
-        case "AND": return eval2(node.GetSubtree(0), node.GetSubtree(1), (x, y) => x & y);
-        case "OR": return eval2(node.GetSubtree(0), node.GetSubtree(1), (x, y) => x | y);
-        case "NAND": return eval2(node.GetSubtree(0), node.GetSubtree(1), (x, y) => !(x & y));
-        case "NOR": return eval2(node.GetSubtree(0), node.GetSubtree(1), (x, y) => !(x | y));
+        case "AND": return binaryEval(node.GetSubtree(0), node.GetSubtree(1), (x, y) => x & y);
+        case "OR": return binaryEval(node.GetSubtree(0), node.GetSubtree(1), (x, y) => x | y);
+        case "NAND": return binaryEval(node.GetSubtree(0), node.GetSubtree(1), (x, y) => !(x & y));
+        case "NOR": return binaryEval(node.GetSubtree(0), node.GetSubtree(1), (x, y) => !(x | y));
         default: {
             byte bitPos;
@@ -131,26 +145,5 @@
     }
 
-    #region item cloning and persistence
-    // persistence
-    [StorableConstructor]
-    private EvenParityProblem(bool deserializing) : base(deserializing) { }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      RegisterEventHandlers();
-    }
-
-    // cloning 
-    private EvenParityProblem(EvenParityProblem original, Cloner cloner)
-      : base(original, cloner) {
-      RegisterEventHandlers();
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new EvenParityProblem(this, cloner);
-    }
-    #endregion
-
     #region events
-
     private void RegisterEventHandlers() {
       NumberOfBitsParameter.Value.ValueChanged += (sender, args) => UpdateGrammar();
Index: stable/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/MultiplexerProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/MultiplexerProblem.cs	(revision 12938)
+++ stable/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/MultiplexerProblem.cs	(revision 13280)
@@ -40,25 +40,18 @@
 
     #region parameter names
-
     private const string NumberOfBitsParameterName = "NumberOfBits";
-
     #endregion
 
     #region Parameter Properties
-
     public IFixedValueParameter<IntValue> NumberOfBitsParameter {
       get { return (IFixedValueParameter<IntValue>)Parameters[NumberOfBitsParameterName]; }
     }
-
     #endregion
 
     #region Properties
-
     public int NumberOfBits {
       get { return NumberOfBitsParameter.Value.Value; }
       set { NumberOfBitsParameter.Value.Value = value; }
     }
-
-
     #endregion
 
@@ -66,4 +59,24 @@
       get { return true; }
     }
+
+    #region item cloning and persistence
+    // persistence
+    [StorableConstructor]
+    private MultiplexerProblem(bool deserializing) : base(deserializing) { }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterEventHandlers();
+    }
+
+    // cloning 
+    private MultiplexerProblem(MultiplexerProblem original, Cloner cloner)
+      : base(original, cloner) {
+      RegisterEventHandlers();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MultiplexerProblem(this, cloner);
+    }
+    #endregion
+
 
     public MultiplexerProblem()
@@ -98,4 +111,6 @@
 
       Encoding.Grammar = g;
+
+      BestKnownQuality = Math.Pow(2, NumberOfBits); // this is a benchmark problem (the best achievable quality is known for a given number of bits)
     }
 
@@ -103,5 +118,5 @@
     public override double Evaluate(ISymbolicExpressionTree tree, IRandom random) {
       if (NumberOfBits <= 0) throw new NotSupportedException("Number of bits must be larger than zero.");
-      if (NumberOfBits > 40) throw new NotSupportedException("Mupltiplexer does not support problems with number of bits > 37.");
+      if (NumberOfBits > 37) throw new NotSupportedException("Multiplexer does not support problems with number of bits > 37.");
       var bs = Enumerable.Range(0, (int)Math.Pow(2, NumberOfBits));
       var addrBits = (int)Math.Log(NumberOfBits, 2); // largest power of two that fits into the number of bits
@@ -132,13 +147,13 @@
 
     private static IEnumerable<bool> InterpretRec(ISymbolicExpressionTreeNode node, IEnumerable<int> bs, byte addrBits) {
-      Func<ISymbolicExpressionTreeNode, Func<bool, bool>, IEnumerable<bool>> eval1 =
+      Func<ISymbolicExpressionTreeNode, Func<bool, bool>, IEnumerable<bool>> unaryEval =
         (child, f) => InterpretRec(child, bs, addrBits).Select(f);
-      Func<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode, Func<bool, bool, bool>, IEnumerable<bool>> eval2 =
+      Func<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode, Func<bool, bool, bool>, IEnumerable<bool>> binaryEval =
         (left, right, f) => InterpretRec(left, bs, addrBits).Zip(InterpretRec(right, bs, addrBits), f);
 
       switch (node.Symbol.Name) {
-        case "AND": return eval2(node.GetSubtree(0), node.GetSubtree(1), (x, y) => x & y);
-        case "OR": return eval2(node.GetSubtree(0), node.GetSubtree(1), (x, y) => x | y);
-        case "NOT": return eval1(node.GetSubtree(0), (x) => !x);
+        case "AND": return binaryEval(node.GetSubtree(0), node.GetSubtree(1), (x, y) => x & y);
+        case "OR": return binaryEval(node.GetSubtree(0), node.GetSubtree(1), (x, y) => x | y);
+        case "NOT": return unaryEval(node.GetSubtree(0), (x) => !x);
         case "IF": return EvalIf(node.GetSubtree(0), node.GetSubtree(1), node.GetSubtree(2), bs, addrBits);
         default: {
@@ -176,26 +191,5 @@
     }
 
-    #region item cloning and persistence
-    // persistence
-    [StorableConstructor]
-    private MultiplexerProblem(bool deserializing) : base(deserializing) { }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      RegisterEventHandlers();
-    }
-
-    // cloning 
-    private MultiplexerProblem(MultiplexerProblem original, Cloner cloner)
-      : base(original, cloner) {
-      RegisterEventHandlers();
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new MultiplexerProblem(this, cloner);
-    }
-    #endregion
-
     #region events
-
     private void RegisterEventHandlers() {
       NumberOfBitsParameter.Value.ValueChanged += (sender, args) => UpdateGrammar();
