Index: branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/DeceptiveStepTrapProblem.cs
===================================================================
--- branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/DeceptiveStepTrapProblem.cs	(revision 11669)
+++ branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/DeceptiveStepTrapProblem.cs	(revision 11669)
@@ -0,0 +1,73 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.ParameterlessPopulationPyramid {
+  [Item("Deceptive Step Trap Problem", "Genome encodes completely separable blocks, where each block deceptive with fitness plateaus.")]
+  [StorableClass]
+  [Creatable("Parameterless Population Pyramid")]
+  public class DeceptiveStepTrapProblem : DeceptiveTrapProblem {
+    [StorableConstructor]
+    protected DeceptiveStepTrapProblem(bool deserializing) : base(deserializing) { }
+    protected DeceptiveStepTrapProblem(DeceptiveStepTrapProblem original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new DeceptiveStepTrapProblem(this, cloner);
+    }
+
+    private const string StepSizeParameterName = "Step Size";
+
+    public IFixedValueParameter<IntValue> StepSizeParameter {
+      get { return (IFixedValueParameter<IntValue>)Parameters[StepSizeParameterName]; }
+    }
+
+    public int StepSize {
+      get { return StepSizeParameter.Value.Value; }
+      set { StepSizeParameter.Value.Value = value; }
+    }
+
+    public DeceptiveStepTrapProblem()
+      : base() {
+      Parameters.Add(new FixedValueParameter<IntValue>(StepSizeParameterName, "", new IntValue(2)));
+    }
+
+    private int Offset {
+      get { return (TrapSize - StepSize) % StepSize; }
+    }
+
+    protected override int TrapMaximum {
+      get { return (Offset + TrapSize) / StepSize; }
+    }
+
+    protected override int Score(bool[] individual, int trapIndex) {
+      int partial = base.Score(individual, trapIndex);
+      // introduce plateaus using integer division
+      return (Offset + partial) / StepSize;
+    }
+  }
+}
Index: branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/DeceptiveTrapProblem.cs
===================================================================
--- branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/DeceptiveTrapProblem.cs	(revision 11666)
+++ branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/DeceptiveTrapProblem.cs	(revision 11669)
@@ -22,7 +22,4 @@
 using System;
 using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -59,7 +56,26 @@
       set { TrapSizeParameter.Value.Value = value; }
     }
+
+    protected virtual int TrapMaximum {
+      get { return TrapSize;  }
+    }
+
     public DeceptiveTrapProblem()
       : base() {
-      Parameters.Add(new FixedValueParameter<IntValue>(TrapSizeParameterName, "", new IntValue(5)));
+      Parameters.Add(new FixedValueParameter<IntValue>(TrapSizeParameterName, "", new IntValue(7)));
+      Length = 49;
+    }
+
+    protected virtual int Score(bool[] individual, int trapIndex) {
+      int result = 0;
+      for (int index = trapIndex; index < trapIndex + TrapSize; index++) {
+        if (individual[index]) result++;
+      }
+
+      // Make it deceptive
+      if (result < TrapSize) {
+        result = TrapSize - result - 1;
+      }
+      return result;
     }
 
@@ -68,16 +84,7 @@
       int total = 0;
       for (int i = 0; i < individual.Length; i += TrapSize) {
-        int partial = 0;
-        for (int index = i; index < i + TrapSize; index++) {
-          if (individual[index]) partial++;
-        }
-
-        // Make it deceptive
-        if (partial < TrapSize) {
-          partial = TrapSize - partial - 1;
-        }
-        total += partial;
+        total += Score(individual, i);
       }
-      return total;
+      return (double)(total * TrapSize) / (TrapMaximum * individual.Length);
     }
   }
Index: branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/EvaluationTracker.cs
===================================================================
--- branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/EvaluationTracker.cs	(revision 11666)
+++ branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/EvaluationTracker.cs	(revision 11669)
@@ -22,31 +22,32 @@
 using System;
 using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 
 namespace HeuristicLab.Algorithms.ParameterlessPopulationPyramid {
   public class EvaluationTracker : IBinaryVectorProblem {
     private readonly IBinaryVectorProblem problem;
+
     private int maxEvaluations;
 
-    private double bestQuality = double.NaN;
+    #region Properties
     public double BestQuality {
-      get { return bestQuality; }
+      get;
+      private set;
     }
 
-    private int evaluations = 0;
     public int Evaluations {
-      get { return evaluations; }
+      get;
+      private set;
     }
 
-    private int bestFoundOnEvaluation = 0;
     public int BestFoundOnEvaluation {
-      get { return bestFoundOnEvaluation; }
+      get;
+      private set;
     }
 
     public bool[] BestSolution {
-      get; private set;
+      get;
+      private set;
     }
+    #endregion
 
     public EvaluationTracker(IBinaryVectorProblem problem, int maxEvaluations) {
@@ -54,19 +55,22 @@
       this.maxEvaluations = maxEvaluations;
       BestSolution = new bool[0];
+      BestQuality = double.NaN;
+      Evaluations = 0;
+      BestFoundOnEvaluation = 0;
     }
 
     public double Evaluate(bool[] individual) {
-      if (evaluations >= maxEvaluations) throw new OperationCanceledException("Maximum Evaluation Limit Reached");
-      evaluations++;
+      if (Evaluations >= maxEvaluations) throw new OperationCanceledException("Maximum Evaluation Limit Reached");
+      Evaluations++;
       double fitness = problem.Evaluate(individual);
-      if (double.IsNaN(bestQuality) || problem.IsBetter(fitness, bestQuality)) {
-        bestQuality = fitness;
+      if (double.IsNaN(BestQuality) || problem.IsBetter(fitness, BestQuality)) {
+        BestQuality = fitness;
         BestSolution = (bool[])individual.Clone();
-        bestFoundOnEvaluation = evaluations;
+        BestFoundOnEvaluation = Evaluations;
       }
       return fitness;
     }
 
-
+    #region ForwardedInteraface
     public int Length {
       get { return problem.Length; }
@@ -77,5 +81,6 @@
     public bool IsBetter(double quality, double bestQuality) {
       return problem.IsBetter(quality, bestQuality);
-    }    
+    }
+    #endregion
   }
 }
Index: branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/HIFFProblem.cs
===================================================================
--- branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/HIFFProblem.cs	(revision 11666)
+++ branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/HIFFProblem.cs	(revision 11669)
@@ -22,7 +22,4 @@
 using System;
 using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -48,5 +45,5 @@
 
     public HIFFProblem() : base() {
-      Length = 32;
+      Length = 64;
     }
 
Index: branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/IBinaryVectorProblem.cs
===================================================================
--- branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/IBinaryVectorProblem.cs	(revision 11666)
+++ branches/Parameter-less Population Pyramid/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Problems/IBinaryVectorProblem.cs	(revision 11669)
@@ -20,10 +20,4 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
 namespace HeuristicLab.Algorithms.ParameterlessPopulationPyramid {
   public interface IBinaryVectorProblem {
