Index: branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithm.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithm.cs	(revision 12157)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithm.cs	(revision 12159)
@@ -135,4 +135,5 @@
       var layerProcessor = new /*Layer*/UniformSubScopesProcessor();
       var layerVariableCreator = new VariableCreator() { Name = "Initialize Layer" };
+      var layerNumberCreator = new ScopeIndexAssigner() { Name = "Create Layer Number" };
       var layerSolutionsCreator = new SolutionsCreator();
       var initializeAgeProcessor = new UniformSubScopesProcessor();
@@ -154,4 +155,5 @@
       layersProcessor.TargetScopeParameter.ActualName = "Layers";
       layersProcessor.Operator = layerCreator;
+      layersProcessor.Successor = initializeEvaluatedSolutions;
 
       layerCreator.NumberOfSubScopesParameter.ActualName = "NumberOfLayers";
@@ -160,8 +162,11 @@
 
       layerProcessor.Operator = layerVariableCreator;
-      layerProcessor.Successor = initializeEvaluatedSolutions;
 
       layerVariableCreator.CollectedValues.Add(new ValueParameter<ResultCollection>("LayerResults"));
-      layerVariableCreator.Successor = layerSolutionsCreator;
+      layerVariableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Layer"));
+      layerVariableCreator.Successor = layerNumberCreator;
+
+      layerNumberCreator.ValueParameter.ActualName = "Layer";
+      layerNumberCreator.Successor = layerSolutionsCreator;
 
       layerSolutionsCreator.NumberOfSolutionsParameter.ActualName = LayerSizeParameter.Name;
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithmMainLoop.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithmMainLoop.cs	(revision 12157)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithmMainLoop.cs	(revision 12159)
@@ -71,6 +71,6 @@
 
       var variableCreator = new VariableCreator() { Name = "Initialize" };
+      var layersProcessor = new NamedSubScopeProcessor() { Name = "Process Layers" };
       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?" };
@@ -85,7 +85,6 @@
       var initializeAge = new Assigner() { Name = "Initialize Age" };
       var selectRandomTargetIndex = new RandomIntAssigner();
-      var copyLayer = new BestSelector();
-      var copyLayerProcessor = new SubScopesProcessor();
       var matingPoolCreator = new SteadyStateMatingPoolCreator() { Name = "Create MatingPool" };
+      var matingPoolProcessor = new NamedSubScopeProcessor() { Name = "Process MatingPool" };
       var matingPoolSize = new SubScopesCounter() { Name = "MatingPoolSize" };
       var matingPoolSizeMin2 = new Comparator() { Name = "ValidParents = MatingPoolSize >= 2" };
@@ -116,12 +115,12 @@
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("MatingPoolSize", new IntValue(0)));
       variableCreator.CollectedValues.Add(new ValueParameter<BoolValue>("ValidParents", new BoolValue(false)));
-      variableCreator.Successor = randomScopeProcessor;
-
-      randomScopeProcessor.Operator = layerPopulationSizeCounter;
+      variableCreator.CollectedValues.Add(new ValueParameter<BoolValue>("IsLayerZero", new BoolValue(false)));
+      variableCreator.Successor = layersProcessor;
+
+      layersProcessor.Operator = randomScopeProcessor;
+      layersProcessor.TargetScopeParameter.ActualName = "Layers";
+
+      randomScopeProcessor.Operator = isLayerZeroComperator;
       randomScopeProcessor.Successor = incrIterations;
-
-      layerPopulationSizeCounter.ValueParameter.ActualName = "LayerPopulationSize";
-      layerPopulationSizeCounter.AccumulateParameter.Value =  new BoolValue(false);
-      layerPopulationSizeCounter.Successor = isLayerZeroComperator;
 
       isLayerZeroComperator.LeftSideParameter.ActualName = "Layer";
@@ -171,16 +170,12 @@
       selectRandomTargetIndex.LeftSideParameter.ActualName = "TargetIndex";
       selectRandomTargetIndex.MinimumParameter.Value = new IntValue(0);
-      selectRandomTargetIndex.MaximumParameter.ActualName = "LayerPopulationSize";
+      selectRandomTargetIndex.MaximumParameter.ActualName = "LayerSize";
       selectRandomTargetIndex.MaximumParameter.Value = null;
-      selectRandomTargetIndex.Successor = copyLayer;
-
-      copyLayer.NumberOfSelectedSubScopesParameter.ActualName = "LayerPopulationSize";
-      copyLayer.CopySelected = new BoolValue(true);
-      copyLayer.Successor = copyLayerProcessor;
-
-      copyLayerProcessor.Operators.Add(new EmptyOperator());
-      copyLayerProcessor.Operators.Add(matingPoolCreator);
-
-      matingPoolCreator.Successor = matingPoolSize;
+      selectRandomTargetIndex.Successor = matingPoolCreator;
+
+      matingPoolCreator.Successor = matingPoolProcessor;
+
+      matingPoolProcessor.Operator = matingPoolSize;
+      matingPoolProcessor.TargetScopeParameter.ActualName = "WorkingScope";
 
       matingPoolSize.ValueParameter.ActualName = "MatingPoolSize";
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/HeuristicLab.Algorithms.ALPS.SteadyState-3.3.csproj
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/HeuristicLab.Algorithms.ALPS.SteadyState-3.3.csproj	(revision 12157)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/HeuristicLab.Algorithms.ALPS.SteadyState-3.3.csproj	(revision 12159)
@@ -144,4 +144,5 @@
     <Compile Include="RandomIntAssigner.cs" />
     <Compile Include="RandomLayerProcessor.cs" />
+    <Compile Include="ScopeIndexAssigner.cs" />
     <Compile Include="SteadyStateMatingPoolCreator.cs" />
   </ItemGroup>
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/NamedSubScopeProcessor.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/NamedSubScopeProcessor.cs	(revision 12157)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/NamedSubScopeProcessor.cs	(revision 12159)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -22,5 +22,4 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Data;
 using HeuristicLab.Operators;
 using HeuristicLab.Parameters;
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/ScopeIndexAssigner.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/ScopeIndexAssigner.cs	(revision 12159)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/ScopeIndexAssigner.cs	(revision 12159)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.ALPS.SteadyState {
+  [Item("ScopeIndexAssigner", "Description missing")]
+  [StorableClass]
+  public class ScopeIndexAssigner : SingleSuccessorOperator {
+    #region Parameter Properties
+    public ILookupParameter<IntValue> ValueParameter {
+      get { return (ILookupParameter<IntValue>)Parameters["Value"]; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    protected ScopeIndexAssigner(bool deserializing) : base(deserializing) { }
+    public ScopeIndexAssigner()
+      : base() {
+      Parameters.Add(new LookupParameter<IntValue>("Value"));
+    }
+    protected ScopeIndexAssigner(ScopeIndexAssigner original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ScopeIndexAssigner(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      var scope = ExecutionContext.Scope;
+      int index = scope.Parent.SubScopes.IndexOf(scope);
+      if (index == -1)
+        throw new InvalidOperationException("Current Scope is not included in parents sub-scopes.");
+      ValueParameter.ActualValue = new IntValue(index);
+      return base.Apply();
+    }
+  }
+}
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/SteadyStateMatingPoolCreator.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/SteadyStateMatingPoolCreator.cs	(revision 12157)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/SteadyStateMatingPoolCreator.cs	(revision 12159)
@@ -32,4 +32,10 @@
   [StorableClass]
   public class SteadyStateMatingPoolCreator : SingleSuccessorOperator {
+    private ILookupParameter<IScope> WorkingScopeParameter {
+      get { return (ILookupParameter<IScope>)Parameters["WorkingScope"]; }
+    }
+    private ILookupParameter<IntValue> LayerParameter {
+      get { return (ILookupParameter<IntValue>)Parameters["Layer"]; }
+    }
 
     [StorableConstructor]
@@ -43,17 +49,23 @@
     public SteadyStateMatingPoolCreator()
       : base() {
+      Parameters.Add(new LookupParameter<IScope>("WorkingScope"));
+      Parameters.Add(new LookupParameter<IntValue>("Layer"));
     }
 
     public override IOperation Apply() {
-      var matingPool = ExecutionContext.Scope;
-      var currentLayer = matingPool.Parent;
-      int layerNumber = ((IntValue)currentLayer.Variables["Layer"].Value).Value;
+      int layerNumber = LayerParameter.ActualValue.Value;
+      var workingScope = WorkingScopeParameter.ActualValue;
+
+      var currentLayer = ExecutionContext.Scope;
+      foreach (var individual in currentLayer.SubScopes) {
+        workingScope.SubScopes.Add((IScope)individual.Clone());
+      }
 
       if (layerNumber > 0) {
-        var prevLayer = currentLayer.Parent.SubScopes[layerNumber - 1];
-        var prevLayerIndividuals = prevLayer.SubScopes;
+        var layers = currentLayer.Parent;
+        var prevLayer = layers.SubScopes[layerNumber - 1];
 
-        foreach (var individual in prevLayerIndividuals) {
-          matingPool.SubScopes.Add((IScope)individual.Clone());
+        foreach (var individual in prevLayer.SubScopes) {
+          workingScope.SubScopes.Add((IScope)individual.Clone());
         }
       }
