Index: branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/AlpsGeneticAlgorithm.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/AlpsGeneticAlgorithm.cs	(revision 11584)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/AlpsGeneticAlgorithm.cs	(revision 11585)
@@ -230,4 +230,5 @@
       var layer0Processor = new SubScopesProcessor();
       var localRandomCreator = new LocalRandomCreator();
+      var layerVariableCreator = new VariableCreator();
       var layerSolutionsCreator = new SolutionsCreator();
       var initializeAgeProcessor = new UniformSubScopesProcessor();
@@ -251,5 +252,8 @@
       layer0Processor.Successor = initializeGlobalEvaluatedSolutions;
 
-      localRandomCreator.Successor = layerSolutionsCreator;
+      localRandomCreator.Successor = layerVariableCreator;
+
+      layerVariableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Layer", new IntValue(0)));
+      layerVariableCreator.Successor = layerSolutionsCreator;
 
       layerSolutionsCreator.NumberOfSolutionsParameter.ActualName = PopulationSizeParameter.Name;
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/AlpsGeneticAlgorithmMainLoop.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/AlpsGeneticAlgorithmMainLoop.cs	(revision 11584)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/AlpsGeneticAlgorithmMainLoop.cs	(revision 11585)
@@ -35,4 +35,5 @@
 
   [Item("AlpsGeneticAlgorithmMainLoop", "An ALPS genetic algorithm main loop operator.")]
+  [StorableClass]
   public sealed class AlpsGeneticAlgorithmMainLoop : AlgorithmOperator {
     #region Parameter Properties
@@ -129,5 +130,5 @@
       var generationsIcrementor = new IntCounter() { Name = "Increment Generations" };
       var evaluatedSolutionsReducer = new DataReducer() { Name = "Increment EvaluatedSolutions" };
-      var eldersEmigrator = new CombinedOperator() { Name = "Emigrate Elders" };
+      var eldersEmigrator = new EldersEmigrator() { Name = "Emigrate Elders" };
       var layerUpdator = new CombinedOperator() { Name = "Update Layers" };
       var analyzerPlaceholder = new Placeholder() { Name = "Analyzer (Placeholder)" };
@@ -228,5 +229,5 @@
 
       // Remove unnessesary subtrees
-      //foreach (var @operator in mainLoop.OperatorGraph.Iterate().OfType<SingleSuccessorOperator>().Where(o => o.Successor == selector))
+      //foreach (var @operator in mainLoop.OperatorGraph.Operators.OfType<SingleSuccessorOperator>().Where(o => o.Successor == selector))
       //  @operator.Successor = null;
 
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/EldersEmigrator.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/EldersEmigrator.cs	(revision 11585)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/EldersEmigrator.cs	(revision 11585)
@@ -0,0 +1,87 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Selection;
+
+namespace HeuristicLab.Algorithms.ALPS {
+  [Item("EldersEmigrator", "Moves Individuals which are too old for its current layer up to the next layer.")]
+  [StorableClass]
+  public class EldersEmigrator : AlgorithmOperator {
+
+    [StorableConstructor]
+    private EldersEmigrator(bool deserializing)
+      : base(deserializing) { }
+    private EldersEmigrator(EldersEmigrator original, Cloner cloner)
+      : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EldersEmigrator(this, cloner);
+    }
+    public EldersEmigrator()
+      : base() {
+      var selectorProsessor = new UniformSubScopesProcessor();
+      var eldersSelector = new EldersSelector();
+      var shiftToRightMigrator = new ShiftToRightMigrator();
+      var mergingProsessor = new UniformSubScopesProcessor();
+      var mergingReducer = new MergingReducer();
+      var subScopesCounter = new SubScopesCounter();
+      var countCalculator = new ExpressionCalculator() { Name = "Count = Min(NumSubScopes, PopulationSize)" };
+      var bestSelector = new BestSelector();
+      var rightReducer = new RightReducer();
+
+
+      OperatorGraph.InitialOperator = selectorProsessor;
+
+      selectorProsessor.Operator = eldersSelector;
+      selectorProsessor.Successor = shiftToRightMigrator;
+
+      eldersSelector.Successor = null;
+
+      shiftToRightMigrator.Successor = mergingProsessor;
+
+      mergingProsessor.Operator = mergingReducer;
+      mergingProsessor.Successor = null;
+
+      mergingReducer.Successor = subScopesCounter;
+
+      subScopesCounter.ValueParameter.ActualName = "NumSubScopes";
+      subScopesCounter.AccumulateParameter.Value = new BoolValue(false);
+      subScopesCounter.Successor = countCalculator;
+
+      countCalculator.CollectedValues.Add(new LookupParameter<IntValue>("PopulationSize"));
+      countCalculator.CollectedValues.Add(new LookupParameter<IntValue>("NumSubScopes"));
+      countCalculator.ExpressionParameter.Value = new StringValue("NumSubScopes PopulationSize NumSubScopes < PopulationSize if");
+      countCalculator.ExpressionResultParameter.ActualName = "Count";
+      countCalculator.Successor = bestSelector;
+
+      bestSelector.NumberOfSelectedSubScopesParameter.ActualName = "Count";
+      bestSelector.Successor = rightReducer;
+
+      rightReducer.Successor = null;
+    }
+  }
+}
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/EldersSelector.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/EldersSelector.cs	(revision 11585)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/EldersSelector.cs	(revision 11585)
@@ -0,0 +1,76 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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 System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Selection;
+
+namespace HeuristicLab.Algorithms.ALPS {
+
+  [Item("EldersSelector", "Select all individuals which are to old for their current layer.")]
+  [StorableClass]
+  public class EldersSelector : SingleObjectiveSelector {
+
+    private ILookupParameter<IntArray> AgeLimitsParameter {
+      get { return (ILookupParameter<IntArray>)Parameters["AgeLimits"]; }
+    }
+    private ILookupParameter<IntValue> NumberOfLayersParameter {
+      get { return (ILookupParameter<IntValue>)Parameters["NumberOfLayers"]; }
+    }
+
+    [StorableConstructor]
+    private EldersSelector(bool deserializing)
+      : base(deserializing) { }
+    private EldersSelector(EldersSelector original, Cloner cloner)
+      : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EldersSelector(this, cloner);
+    }
+    public EldersSelector()
+      : base() {
+      Parameters.Add(new LookupParameter<IntArray>("AgeLimits"));
+    }
+
+    protected override IScope[] Select(List<IScope> scopes) {
+      var ageLimits = AgeLimitsParameter.ActualValue;
+      int numberOfLayers = NumberOfLayersParameter.ActualValue.Value;
+
+      int layer = ((IntValue)CurrentScope.Variables["Layer"]).Value;
+
+      if (layer >= numberOfLayers)
+        return new IScope[0];
+
+      int limit = ageLimits[layer];
+      var elders =
+        from scope in scopes
+        let age = ((IntValue)scope.Variables["Age"]).Value
+        where age > limit
+        select scope;
+
+      return elders.ToArray();
+    }
+  }
+}
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj	(revision 11584)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj	(revision 11585)
@@ -81,7 +81,10 @@
     <Compile Include="AlpsGeneticAlgorithm.cs" />
     <Compile Include="AlpsGeneticAlgorithmMainLoop.cs" />
+    <Compile Include="EldersEmigrator.cs" />
+    <Compile Include="EldersSelector.cs" />
     <Compile Include="MatingPoolCreator.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ShiftToRightMigrator.cs" />
   </ItemGroup>
   <ItemGroup>
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/ShiftToRightMigrator.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/ShiftToRightMigrator.cs	(revision 11585)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/ShiftToRightMigrator.cs	(revision 11585)
@@ -0,0 +1,68 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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 System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.ALPS {
+  [Item("ShiftToRightMigrator", "Migrates the selected sub scopes by shifting it to the next(right) subscope.")]
+  [StorableClass]
+  public class ShiftToRightMigrator : SingleSuccessorOperator, IMigrator {
+
+    [StorableConstructor]
+    private ShiftToRightMigrator(bool deserializing)
+      : base(deserializing) { }
+    private ShiftToRightMigrator(ShiftToRightMigrator original, Cloner cloner)
+      : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ShiftToRightMigrator(this, cloner);
+    }
+    public ShiftToRightMigrator()
+      : base() {
+    }
+
+    public override IOperation Apply() {
+      var scope = ExecutionContext.Scope;
+      var emigrantsList = new List<IScope>();
+
+      for (int i = 0; i < scope.SubScopes.Count; i++) {
+        var emigrants = scope.SubScopes[i].SubScopes[1];
+        scope.SubScopes[i].SubScopes.Remove(emigrants);
+        emigrantsList.Add(emigrants);
+      }
+
+      // Shift last emigrant to begin of list
+      emigrantsList.Insert(0, emigrantsList.Last());
+      emigrantsList.RemoveAt(emigrantsList.Count - 1);
+
+      for (int i = 0; i < scope.SubScopes.Count; i++) {
+        scope.SubScopes[i].SubScopes.Add(emigrantsList[i]);
+      }
+
+      return base.Apply();
+    }
+  }
+}
