Index: branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithm.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithm.cs	(revision 12192)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithm.cs	(revision 12220)
@@ -134,8 +134,8 @@
 
       var randomCreator = new RandomCreator();
-      var workingScopeCreator = new NamedSubScopesCreator() { Name = "Create WorkingScope and Layers-Scope" };
+      var workingScopeCreator = new NamedSubScopesCreator() { Name = "Create Working- and Layers-Scope" };
       var layersProcessor = new NamedSubScopeProcessor() { Name = "Process Layers-Scope" };
-      var layerCreator = new SubScopesCreator() { Name = "Create Layer" };
-      var layerProcessor = new /*Layer*/UniformSubScopesProcessor();
+      var layerCreator = new SubScopesCreator() { Name = "Create Layers" };
+      var layerProcessor = new UniformSubScopesProcessor();
       var layerVariableCreator = new VariableCreator() { Name = "Initialize Layer" };
       var layerNumberCreator = new ScopeIndexAssigner() { Name = "Create Layer Number" };
@@ -155,8 +155,8 @@
       randomCreator.Successor = workingScopeCreator;
 
-      workingScopeCreator.NamesParameter.Value = new StringArray(new[] { "WorkingScope", "Layers" });
+      workingScopeCreator.NamesParameter.Value = new StringArray(new[] { "WorkingScope", "LayersScope", "ElitesScope" });
       workingScopeCreator.Successor = layersProcessor;
 
-      layersProcessor.TargetScopeParameter.ActualName = "Layers";
+      layersProcessor.TargetScopeParameter.ActualName = "LayersScope";
       layersProcessor.Operator = layerCreator;
       layersProcessor.Successor = initializeEvaluatedSolutions;
@@ -198,4 +198,5 @@
 
       resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "ResultEvaluatedSolutions"));
+      resultsCollector.CollectedValues.Add(new ScopeTreeLookupParameter<ResultCollection>("LayerResults", "Result set for each layer", "LayerResults", 2));
       resultsCollector.Successor = mainLoop;
 
@@ -204,5 +205,5 @@
       var tournamentSelector = SelectorParameter.ValidValues.OfType<TournamentSelector>().FirstOrDefault();
       if (tournamentSelector != null) {
-        tournamentSelector.GroupSizeParameter.Value = new IntValue(5);
+        tournamentSelector.GroupSizeParameter.Value = new IntValue(4);
         SelectorParameter.Value = tournamentSelector;
       }
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithmMainLoop.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithmMainLoop.cs	(revision 12192)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithmMainLoop.cs	(revision 12220)
@@ -86,4 +86,5 @@
       var initializeAge = new Assigner() { Name = "Initialize Age" };
       var removeEmptySubscope = new SubScopesRemover() { Name = "Remove empty subscope (from solutioncreator)" };
+      var layerSorter = new SubScopesSorter() { Name = "Sort Layer" };
       var selectRandomTargetIndex = new RandomIntAssigner();
       var matingPoolCreator = new SteadyStateMatingPoolCreator() { Name = "Create MatingPool" };
@@ -126,5 +127,5 @@
       resultsColletor.Successor = layersProcessor;
 
-      layersProcessor.TargetScopeParameter.ActualName = "Layers";
+      layersProcessor.TargetScopeParameter.ActualName = "LayersScope";
       layersProcessor.Operator = initializeBatchIteration;
 
@@ -144,10 +145,10 @@
       isLayerZeroBranch.ConditionParameter.ActualName = "IsLayerZero";
       isLayerZeroBranch.TrueBranch = isDoInitBranch;
-      isLayerZeroBranch.FalseBranch = selectRandomTargetIndex;
+      isLayerZeroBranch.FalseBranch = layerSorter;
       isLayerZeroBranch.Successor = tryMoveUp;
 
       isDoInitBranch.ConditionParameter.ActualName = "DoInit";
       isDoInitBranch.TrueBranch = setTargetIndedxToNextInit;
-      isDoInitBranch.FalseBranch = selectRandomTargetIndex;
+      isDoInitBranch.FalseBranch = layerSorter;
 
       setTargetIndedxToNextInit.LeftSideParameter.ActualName = "TargetIndex";
@@ -177,6 +178,11 @@
       initializeAge.RightSideParameter.ActualName = "EvaluatedSolutions";
 
+      layerSorter.ValueParameter.ActualName = "Quality";
+      layerSorter.DescendingParameter.ActualName = "Maximization";
+      layerSorter.Successor = selectRandomTargetIndex;
+
       selectRandomTargetIndex.LeftSideParameter.ActualName = "TargetIndex";
-      selectRandomTargetIndex.MinimumParameter.Value = new IntValue(0);
+      selectRandomTargetIndex.MinimumParameter.ActualName = "Elites";
+      selectRandomTargetIndex.MinimumParameter.Value = null;
       selectRandomTargetIndex.MaximumParameter.ActualName = "LayerSize";
       selectRandomTargetIndex.MaximumParameter.Value = null;
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsMover.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsMover.cs	(revision 12192)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsMover.cs	(revision 12220)
@@ -50,6 +50,6 @@
       get { return (ILookupParameter<IScope>)Parameters["WorkingScope"]; }
     }
-    private ILookupParameter<IScope> LayersParameter {
-      get { return (ILookupParameter<IScope>)Parameters["Layers"]; }
+    private ILookupParameter<IScope> LayersScopeParameter {
+      get { return (ILookupParameter<IScope>)Parameters["LayersScope"]; }
     }
     public ILookupParameter<IRandom> RandomParameter {
@@ -92,5 +92,5 @@
       Parameters.Add(new LookupParameter<IntValue>("NumberOfLayers"));
       Parameters.Add(new LookupParameter<IScope>("WorkingScope"));
-      Parameters.Add(new LookupParameter<IScope>("Layers"));
+      Parameters.Add(new LookupParameter<IScope>("LayersScope"));
       Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator to use."));
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality"));
@@ -123,5 +123,5 @@
       maximization = MaximizationParameter.ActualValue.Value;
 
-      layers = LayersParameter.ActualValue;
+      layers = LayersScopeParameter.ActualValue;
       var newIndividual = (IScope)WorkingScopeParameter.ActualValue.Clone();
       newIndividual.Name = j.ToString();
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/SteadyStateMatingPoolCreator.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/SteadyStateMatingPoolCreator.cs	(revision 12192)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/SteadyStateMatingPoolCreator.cs	(revision 12220)
@@ -35,6 +35,6 @@
       get { return (ILookupParameter<IScope>)Parameters["WorkingScope"]; }
     }
-    private ILookupParameter<IScope> LayersParameter {
-      get { return (ILookupParameter<IScope>)Parameters["Layers"]; }
+    private ILookupParameter<IScope> LayersScopeParameter {
+      get { return (ILookupParameter<IScope>)Parameters["LayersScope"]; }
     }
     private ILookupParameter<IntValue> LayerParameter {
@@ -65,5 +65,5 @@
       : base() {
       Parameters.Add(new LookupParameter<IScope>("WorkingScope"));
-      Parameters.Add(new LookupParameter<IScope>("Layers"));
+      Parameters.Add(new LookupParameter<IScope>("LayersScope"));
       Parameters.Add(new LookupParameter<IntValue>("Layer"));
       Parameters.Add(new LookupParameter<IntArray>("AgeLimits"));
@@ -77,5 +77,5 @@
       int layerNumber = LayerParameter.ActualValue.Value;
       var workingScope = WorkingScopeParameter.ActualValue;
-      var layers = LayersParameter.ActualValue;
+      var layers = LayersScopeParameter.ActualValue;
       var ageLimits = AgeLimitsParameter.ActualValue;
       int numberOfLayers = NumberOfLayersParameter.ActualValue.Value;
