Index: branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithmMainLoop.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithmMainLoop.cs	(revision 12149)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithmMainLoop.cs	(revision 12150)
@@ -72,4 +72,5 @@
       var variableCreator = new VariableCreator() { Name = "Initialize" };
       var randomScopeProcessor = new RandomLayerProcessor() { Name = "Select a layer" };
+      var layerPopulationSizeCounter = new SubScopesCounter() { Name = "Count LayerPopulationSize" };
       var isLayerZeroComperator = new Comparator() { Name = "IsLayerZero = Layer == 0" };
       var isLayerZeroBranch = new ConditionalBranch() { Name = "IsLayerZero?" };
@@ -97,4 +98,5 @@
       var tryMoveUp = new AlpsSsMover() { Name = "Try Move Up" };
       var removeWorkingScope = new LeftReducer() { Name = "Remove Working Scope" };
+      var incrementEvaluations = new IntCounter() { Name = "incr. EvaluatedSolutions" };
       var incrIterations = new IntCounter() { Name = "Incr. Iterations" };
       var layerAnalyzerProcessor = new UniformSubScopesProcessor();
@@ -116,5 +118,10 @@
       variableCreator.Successor = randomScopeProcessor;
 
-      randomScopeProcessor.Operator = isLayerZeroComperator;
+      randomScopeProcessor.Operator = layerPopulationSizeCounter;
+      randomScopeProcessor.Successor = incrIterations;
+
+      layerPopulationSizeCounter.ValueParameter.ActualName = "LayerPopulationSize";
+      layerPopulationSizeCounter.AccumulateParameter.Value =  new BoolValue(false);
+      layerPopulationSizeCounter.Successor = isLayerZeroComperator;
 
       isLayerZeroComperator.LeftSideParameter.ActualName = "Layer";
@@ -164,5 +171,5 @@
       selectRandomTargetIndex.LeftSideParameter.ActualName = "TargetIndex";
       selectRandomTargetIndex.MinimumParameter.Value = new IntValue(0);
-      selectRandomTargetIndex.MaximumParameter.ActualName = "PopulationSize";
+      selectRandomTargetIndex.MaximumParameter.ActualName = "LayerPopulationSize";
       selectRandomTargetIndex.MaximumParameter.Value = null;
       selectRandomTargetIndex.Successor = copyLayer;
@@ -178,4 +185,5 @@
 
       matingPoolSize.ValueParameter.ActualName = "MatingPoolSize";
+      matingPoolSize.AccumulateParameter.Value = new BoolValue(false);
       matingPoolSize.Successor = matingPoolSizeMin2;
 
@@ -206,5 +214,8 @@
       tryMoveUp.Successor = removeWorkingScope;
 
-      removeWorkingScope.Successor = incrIterations;
+      removeWorkingScope.Successor = incrementEvaluations;
+
+      incrementEvaluations.Increment = new IntValue(1);
+      incrementEvaluations.ValueParameter.ActualName = "EvaluatedSolutions";
 
       incrIterations.ValueParameter.ActualName = "Iterations";
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithmMainOperator.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithmMainOperator.cs	(revision 12149)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithmMainOperator.cs	(revision 12150)
@@ -50,5 +50,5 @@
       var subScopesRemover = new SubScopesRemover();
       var evaluator = new Placeholder() { Name = "Evaluator (Placeholder)" };
-      var incrementEvaluations = new IntCounter() { Name = "incr. EvaluatedSolutions" };
+     
 
       OperatorGraph.InitialOperator = selector;
@@ -80,8 +80,4 @@
 
       evaluator.OperatorParameter.ActualName = "Evaluator";
-      evaluator.Successor = incrementEvaluations;
-
-      incrementEvaluations.Increment = new IntValue(1);
-      incrementEvaluations.ValueParameter.ActualName = "EvaluatedSolutions";
     }
   }
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsMover.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsMover.cs	(revision 12149)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsMover.cs	(revision 12150)
@@ -77,5 +77,5 @@
 
       if (i < n) {
-        TryMoveUp(gs, newIndividual, i, j, n, m, random);
+        TryMoveUp(gs, newIndividual, layer, i, j, n, m, random);
         layer.SubScopes[j] = newIndividual;
         newIndividual.Name = j.ToString();
@@ -85,9 +85,10 @@
     }
 
-    private void TryMoveUp(IScope gs, IScope individual, int i, int j, int n, int m, IRandom random) {
+    private void TryMoveUp(IScope gs, IScope individual, IScope layer, int i, int j, int n, int m, IRandom random) {
       if (i < n) {
         if (gs.SubScopes.Count <= i + 1) {
           var newLayer = new Scope((i + 1).ToString());
           newLayer.Variables.Add(new Variable("Layer", new IntValue(i + 1)));
+          newLayer.Variables.Add(new Variable("LayerPopulationSize", new IntValue(1)));
           gs.SubScopes.Add(newLayer);
         }
@@ -96,9 +97,12 @@
         var replaceIndex = FindReplaceable(higherLayer, individual, random, m);
         if (replaceIndex.HasValue) {
-          TryMoveUp(gs, higherLayer.SubScopes[j], i + 1, replaceIndex.Value, n, m, random); // TODO higherlayer[j] does not exist
-          if (replaceIndex.Value >= higherLayer.SubScopes.Count)
-            higherLayer.SubScopes.Add(individual);
-          else
-            higherLayer.SubScopes[replaceIndex.Value] = individual;
+          var replacedIndividual = layer.SubScopes[j];
+          if (replaceIndex.Value >= higherLayer.SubScopes.Count) {
+            higherLayer.SubScopes.Add(replacedIndividual);
+          } else {
+            TryMoveUp(gs, higherLayer.SubScopes[j], higherLayer, i + 1, replaceIndex.Value, n, m, random);
+            // TODO higherlayer[j] does not exist
+            higherLayer.SubScopes[replaceIndex.Value] = replacedIndividual;
+          }
         }
       }
