Index: branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/HeuristicLab.GP.StructureIdentification.csproj
===================================================================
--- branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/HeuristicLab.GP.StructureIdentification.csproj	(revision 1156)
+++ branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/HeuristicLab.GP.StructureIdentification.csproj	(revision 1201)
@@ -72,4 +72,11 @@
     <Compile Include="Constant.cs" />
     <Compile Include="FunctionLibraryInjector.cs" />
+    <Compile Include="OffspringSelectionGP.cs" />
+    <Compile Include="OffSpringSelectionGpEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OffSpringSelectionGpEditor.Designer.cs">
+      <DependentUpon>OffSpringSelectionGpEditor.cs</DependentUpon>
+    </Compile>
     <Compile Include="StandardGpEditor.cs">
       <SubType>UserControl</SubType>
@@ -161,4 +168,8 @@
       <Name>HeuristicLab.Random</Name>
     </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Selection.OffspringSelection\HeuristicLab.Selection.OffspringSelection.csproj">
+      <Project>{205898D3-2717-4686-AF17-52409B7EC0C6}</Project>
+      <Name>HeuristicLab.Selection.OffspringSelection</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Selection\HeuristicLab.Selection.csproj">
       <Project>{F7CF0571-25CB-43D5-8443-0843A1E2861A}</Project>
@@ -171,4 +182,7 @@
   </ItemGroup>
   <ItemGroup>
+    <EmbeddedResource Include="OffSpringSelectionGpEditor.resx">
+      <DependentUpon>OffSpringSelectionGpEditor.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="StandardGpEditor.resx">
       <DependentUpon>StandardGpEditor.cs</DependentUpon>
Index: branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.Designer.cs
===================================================================
--- branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.Designer.cs	(revision 1156)
+++ branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.Designer.cs	(revision 1201)
@@ -70,4 +70,6 @@
       this.resetButton = new System.Windows.Forms.Button();
       this.cloneEngineButton = new System.Windows.Forms.Button();
+      this.selectionPressureTextBox = new System.Windows.Forms.TextBox();
+      this.selectionPressureLabel = new System.Windows.Forms.Label();
       this.tabControl.SuspendLayout();
       this.parametersTabPage.SuspendLayout();
@@ -101,4 +103,6 @@
       // parametersTabPage
       // 
+      this.parametersTabPage.Controls.Add(this.selectionPressureTextBox);
+      this.parametersTabPage.Controls.Add(this.selectionPressureLabel);
       this.parametersTabPage.Controls.Add(this.viewProblemInitializationButton);
       this.parametersTabPage.Controls.Add(this.setProblemInitializationButton);
@@ -128,5 +132,5 @@
       // 
       this.viewProblemInitializationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.viewProblemInitializationButton.Location = new System.Drawing.Point(410, 208);
+      this.viewProblemInitializationButton.Location = new System.Drawing.Point(410, 241);
       this.viewProblemInitializationButton.Name = "viewProblemInitializationButton";
       this.viewProblemInitializationButton.Size = new System.Drawing.Size(53, 20);
@@ -139,5 +143,5 @@
       // 
       this.setProblemInitializationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.setProblemInitializationButton.Location = new System.Drawing.Point(469, 208);
+      this.setProblemInitializationButton.Location = new System.Drawing.Point(469, 241);
       this.setProblemInitializationButton.Name = "setProblemInitializationButton";
       this.setProblemInitializationButton.Size = new System.Drawing.Size(43, 20);
@@ -150,5 +154,5 @@
       // 
       this.problemInitializationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.problemInitializationTextBox.Location = new System.Drawing.Point(218, 208);
+      this.problemInitializationTextBox.Location = new System.Drawing.Point(218, 241);
       this.problemInitializationTextBox.Name = "problemInitializationTextBox";
       this.problemInitializationTextBox.ReadOnly = true;
@@ -169,5 +173,5 @@
       // 
       this.elitesTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.elitesTextBox.Location = new System.Drawing.Point(218, 156);
+      this.elitesTextBox.Location = new System.Drawing.Point(218, 182);
       this.elitesTextBox.Name = "elitesTextBox";
       this.elitesTextBox.Size = new System.Drawing.Size(186, 20);
@@ -178,5 +182,5 @@
       this.problemInitializationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.problemInitializationLabel.AutoSize = true;
-      this.problemInitializationLabel.Location = new System.Drawing.Point(65, 211);
+      this.problemInitializationLabel.Location = new System.Drawing.Point(65, 244);
       this.problemInitializationLabel.Name = "problemInitializationLabel";
       this.problemInitializationLabel.Size = new System.Drawing.Size(105, 13);
@@ -188,5 +192,5 @@
       this.elitesLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.elitesLabel.AutoSize = true;
-      this.elitesLabel.Location = new System.Drawing.Point(65, 159);
+      this.elitesLabel.Location = new System.Drawing.Point(66, 185);
       this.elitesLabel.Name = "elitesLabel";
       this.elitesLabel.Size = new System.Drawing.Size(35, 13);
@@ -197,5 +201,5 @@
       // 
       this.mutationRateTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.mutationRateTextBox.Location = new System.Drawing.Point(218, 130);
+      this.mutationRateTextBox.Location = new System.Drawing.Point(218, 156);
       this.mutationRateTextBox.Name = "mutationRateTextBox";
       this.mutationRateTextBox.Size = new System.Drawing.Size(186, 20);
@@ -206,5 +210,5 @@
       this.mutationRateLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.mutationRateLabel.AutoSize = true;
-      this.mutationRateLabel.Location = new System.Drawing.Point(65, 133);
+      this.mutationRateLabel.Location = new System.Drawing.Point(66, 159);
       this.mutationRateLabel.Name = "mutationRateLabel";
       this.mutationRateLabel.Size = new System.Drawing.Size(77, 13);
@@ -331,5 +335,23 @@
       this.cloneEngineButton.Click += new System.EventHandler(this.cloneEngineButton_Click);
       // 
-      // StandardGpEditor
+      // selectionPressureTextBox
+      // 
+      this.selectionPressureTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.selectionPressureTextBox.Location = new System.Drawing.Point(218, 130);
+      this.selectionPressureTextBox.Name = "selectionPressureTextBox";
+      this.selectionPressureTextBox.Size = new System.Drawing.Size(186, 20);
+      this.selectionPressureTextBox.TabIndex = 17;
+      // 
+      // selectionPressureLabel
+      // 
+      this.selectionPressureLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.selectionPressureLabel.AutoSize = true;
+      this.selectionPressureLabel.Location = new System.Drawing.Point(65, 133);
+      this.selectionPressureLabel.Name = "selectionPressureLabel";
+      this.selectionPressureLabel.Size = new System.Drawing.Size(145, 13);
+      this.selectionPressureLabel.TabIndex = 16;
+      this.selectionPressureLabel.Text = "Maximum &Selection Pressure:";
+      // 
+      // OffspringSelectionGpEditor
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -340,5 +362,5 @@
       this.Controls.Add(this.abortButton);
       this.Controls.Add(this.executeButton);
-      this.Name = "StandardGpEditor";
+      this.Name = "OffspringSelectionGpEditor";
       this.Size = new System.Drawing.Size(526, 419);
       this.tabControl.ResumeLayout(false);
@@ -376,4 +398,6 @@
     private HeuristicLab.Core.ScopeView scopeView;
     private System.Windows.Forms.Button viewProblemInitializationButton;
+    private System.Windows.Forms.TextBox selectionPressureTextBox;
+    private System.Windows.Forms.Label selectionPressureLabel;
   }
 }
Index: branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.cs
===================================================================
--- branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.cs	(revision 1156)
+++ branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/OffSpringSelectionGpEditor.cs	(revision 1201)
@@ -34,6 +34,6 @@
     private ChooseOperatorDialog chooseOperatorDialog;
 
-    public OffspringSelectionGpEditor OffspringSelectionGpEditor {
-      get { return (OffspringSelectionGpEditor)Item; }
+    public OffspringSelectionGP OffspringSelectionGP {
+      get { return (OffspringSelectionGP)Item; }
       set { base.Item = value; }
     }
@@ -42,12 +42,12 @@
       InitializeComponent();
     }
-    public OffspringSelectionGpEditor(OffspringSelectionGpEditor osgp)
+    public OffspringSelectionGpEditor(OffspringSelectionGP osgp)
       : this() {
-      OffspringSelectionGpEditor = osgp;
+      OffspringSelectionGP = osgp;
     }
 
     protected override void RemoveItemEvents() {
-      OffspringSelectionGpEditor.Engine.ExceptionOccurred -= new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
-      OffspringSelectionGpEditor.Engine.Finished -= new EventHandler(Engine_Finished);
+      OffspringSelectionGP.Engine.ExceptionOccurred -= new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
+      OffspringSelectionGP.Engine.Finished -= new EventHandler(Engine_Finished);
       scopeView.Scope = null;
       base.RemoveItemEvents();
@@ -55,32 +55,33 @@
     protected override void AddItemEvents() {
       base.AddItemEvents();
-      OffspringSelectionGpEditor.Engine.ExceptionOccurred += new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
-      OffspringSelectionGpEditor.Engine.Finished += new EventHandler(Engine_Finished);
+      OffspringSelectionGP.Engine.ExceptionOccurred += new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
+      OffspringSelectionGP.Engine.Finished += new EventHandler(Engine_Finished);
       SetDataBinding();
-      scopeView.Scope = OffspringSelectionGpEditor.Engine.GlobalScope;
+      scopeView.Scope = OffspringSelectionGP.Engine.GlobalScope;
     }
 
     protected override void UpdateControls() {
       base.UpdateControls();
-      if (OffspringSelectionGpEditor == null) {
+      if (OffspringSelectionGP == null) {
         tabControl.Enabled = false;
       } else {
         tabControl.Enabled = true;
-        problemInitializationTextBox.Text = OffspringSelectionGpEditor.ProblemInjector.GetType().Name;
+        problemInitializationTextBox.Text = OffspringSelectionGP.ProblemInjector.GetType().Name;
       }
     }
 
     private void SetDataBinding() {
-      setRandomSeedRandomlyCheckBox.DataBindings.Add("Checked", OffspringSelectionGpEditor, "SetSeedRandomly");
-      randomSeedTextBox.DataBindings.Add("Text", OffspringSelectionGpEditor, "Seed");
-      populationSizeTextBox.DataBindings.Add("Text", OffspringSelectionGpEditor, "PopulationSize");
-      maximumGenerationsTextBox.DataBindings.Add("Text", OffspringSelectionGpEditor, "MaxGenerations");
-      mutationRateTextBox.DataBindings.Add("Text", OffspringSelectionGpEditor, "MutationRate");
-      elitesTextBox.DataBindings.Add("Text", OffspringSelectionGpEditor, "Elites");
+      setRandomSeedRandomlyCheckBox.DataBindings.Add("Checked", OffspringSelectionGP, "SetSeedRandomly");
+      randomSeedTextBox.DataBindings.Add("Text", OffspringSelectionGP, "Seed");
+      populationSizeTextBox.DataBindings.Add("Text", OffspringSelectionGP, "PopulationSize");
+      maximumGenerationsTextBox.DataBindings.Add("Text", OffspringSelectionGP, "MaxGenerations");
+      selectionPressureTextBox.DataBindings.Add("Text", OffspringSelectionGP, "SelectionPressureLimit");
+      mutationRateTextBox.DataBindings.Add("Text", OffspringSelectionGP, "MutationRate");
+      elitesTextBox.DataBindings.Add("Text", OffspringSelectionGP, "Elites");
     }
 
     #region Button Events
     private void viewProblemInjectorButton_Click(object sender, EventArgs e) {
-      IView view = OffspringSelectionGpEditor.ProblemInjector.CreateView();
+      IView view = OffspringSelectionGP.ProblemInjector.CreateView();
       if(view != null)
         PluginManager.ControlManager.ShowControl(view);
@@ -90,6 +91,6 @@
       if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
       if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
-        OffspringSelectionGpEditor.ProblemInjector = chooseOperatorDialog.Operator;
-        problemInitializationTextBox.Text = OffspringSelectionGpEditor.ProblemInjector.GetType().Name;
+        OffspringSelectionGP.ProblemInjector = chooseOperatorDialog.Operator;
+        problemInitializationTextBox.Text = OffspringSelectionGP.ProblemInjector.GetType().Name;
       }
     }
@@ -97,14 +98,14 @@
       executeButton.Enabled = false;
       abortButton.Enabled = true;
-      OffspringSelectionGpEditor.Engine.Execute();
+      OffspringSelectionGP.Engine.Execute();
     }
     private void abortButton_Click(object sender, EventArgs e) {
-      StandardGP.Engine.Abort();
+      OffspringSelectionGP.Engine.Abort();
     }
     private void resetButton_Click(object sender, EventArgs e) {
-      StandardGP.Engine.Reset();
+      OffspringSelectionGP.Engine.Reset();
     }
     private void cloneEngineButton_Click(object sender, EventArgs e) {
-      IEngine clone = (IEngine)StandardGP.Engine.Clone();
+      IEngine clone = (IEngine)OffspringSelectionGP.Engine.Clone();
       IEditor editor = ((IEditable)clone).CreateEditor();
       PluginManager.ControlManager.ShowControl(editor);
@@ -130,6 +131,4 @@
     }
     #endregion
-
-
   }
 }
Index: branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/OffspringSelectionGP.cs
===================================================================
--- branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/OffspringSelectionGP.cs	(revision 1156)
+++ branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/OffspringSelectionGP.cs	(revision 1201)
@@ -34,4 +34,5 @@
 using HeuristicLab.Data;
 using HeuristicLab.Operators.Programmable;
+using HeuristicLab.Selection.OffspringSelection;
 
 namespace HeuristicLab.GP.StructureIdentification {
@@ -86,5 +87,5 @@
     }
 
-    private IntData maxTreeSize;
+    private IntData maxTreeSize = new IntData();
     public int MaxTreeSize {
       get { return maxTreeSize.Data; }
@@ -92,5 +93,5 @@
     }
 
-    private IntData maxTreeHeight;
+    private IntData maxTreeHeight = new IntData();
     public int MaxTreeHeight {
       get { return maxTreeHeight.Data; }
@@ -98,8 +99,20 @@
     }
 
-    private DoubleData maxSelectionPressure;
-    public double MaxSelectionPressure {
-      get { return maxSelectionPressure.Data; }
-      set { maxSelectionPressure.Data = value; }
+    private DoubleData selectionPressureLimit = new DoubleData();
+    public double SelectionPressureLimit {
+      get { return selectionPressureLimit.Data; }
+      set { selectionPressureLimit.Data = value; }
+    }
+
+    private DoubleData comparisonFactor = new DoubleData();
+    public double ComparisonFactor {
+      get { return comparisonFactor.Data; }
+      set { comparisonFactor.Data = value; }
+    }
+
+    private DoubleData successRatioLimit = new DoubleData();
+    public double SuccessRatioLimit {
+      get { return successRatioLimit.Data; }
+      set { successRatioLimit.Data = value; }
     }
 
@@ -120,5 +133,6 @@
       MutationRate = 0.15;
       Elites = 1;
-      MaxSelectionPressure = 300;
+      SelectionPressureLimit = 300;
+      ComparisonFactor = 1.0;
       MaxTreeHeight = 10;
       MaxTreeSize = 100;
@@ -131,5 +145,5 @@
     private CombinedOperator CreateAlgorithm() {
       CombinedOperator algo = new CombinedOperator();
-      algo.Name = "StandardGP";
+      algo.Name = "OffspringSelectionGP";
       SequentialProcessor seq = new SequentialProcessor();
       EmptyOperator problemInjectorPlaceholder = new EmptyOperator();
@@ -139,5 +153,5 @@
       randomInjector.Name = "Random Injector";
       VariableInjector globalInjector = CreateGlobalInjector();
-      CombinedOperator initialization = CreateInialization();
+      CombinedOperator initialization = CreateInitialization();
       initialization.Name = "Initialization";
       FunctionLibraryInjector funLibInjector = new FunctionLibraryInjector();
@@ -160,10 +174,6 @@
       CombinedOperator manipulator = CreateManipulator();
       manipulator.Name = "Manipulator";
-      TournamentSelector selector = new TournamentSelector();
+      CombinedOperator selector = CreateSelector();
       selector.Name = "Selector";
-      selector.GetVariableInfo("Selected").ActualName = "Parents";
-      selector.GetVariableInfo("GroupSize").Local = false;
-      selector.RemoveVariable("GroupSize");
-      selector.GetVariableInfo("GroupSize").ActualName = "TournamentSize";
       LeftReducer cleanUp = new LeftReducer();
 
@@ -192,16 +202,19 @@
       VariableInjector injector = new VariableInjector();
       injector.Name = "Global Injector";
+      injector.AddVariable(new HeuristicLab.Core.Variable("ComparisonFactor", comparisonFactor));
+      injector.AddVariable(new HeuristicLab.Core.Variable("Elites", elites));
+      injector.AddVariable(new HeuristicLab.Core.Variable("EvaluatedSolutions", new IntData(0)));
       injector.AddVariable(new HeuristicLab.Core.Variable("Generations", new IntData(0)));
+      injector.AddVariable(new HeuristicLab.Core.Variable("Maximization", new BoolData(false)));
       injector.AddVariable(new HeuristicLab.Core.Variable("MaxGenerations", maxGenerations));
-      injector.AddVariable(new HeuristicLab.Core.Variable("MutationRate", mutationRate));
-      injector.AddVariable(new HeuristicLab.Core.Variable("PopulationSize", populationSize));
-      injector.AddVariable(new HeuristicLab.Core.Variable("Parents", parents));
-      injector.AddVariable(new HeuristicLab.Core.Variable("Elites", elites));
-      injector.AddVariable(new HeuristicLab.Core.Variable("Maximization", new BoolData(false)));
       injector.AddVariable(new HeuristicLab.Core.Variable("MaxTreeHeight", maxTreeHeight));
       injector.AddVariable(new HeuristicLab.Core.Variable("MaxTreeSize", maxTreeSize));
-      injector.AddVariable(new HeuristicLab.Core.Variable("EvaluatedSolutions", new IntData(0)));
+      injector.AddVariable(new HeuristicLab.Core.Variable("MutationRate", mutationRate));
+      injector.AddVariable(new HeuristicLab.Core.Variable("Parents", parents));
+      injector.AddVariable(new HeuristicLab.Core.Variable("PopulationSize", populationSize));
+      injector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData(punishmentFactor)));
+      injector.AddVariable(new HeuristicLab.Core.Variable("SelectionPressureLimit", selectionPressureLimit));
+      injector.AddVariable(new HeuristicLab.Core.Variable("SuccessRatioLimit", successRatioLimit));
       injector.AddVariable(new HeuristicLab.Core.Variable("TotalEvaluatedNodes", new DoubleData(0)));
-      injector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData(punishmentFactor)));
       injector.AddVariable(new HeuristicLab.Core.Variable("UseEstimatedTargetValue", new BoolData(useEstimatedTargetValue)));
       return injector;
@@ -249,5 +262,5 @@
     }
 
-    private CombinedOperator CreateInialization() {
+    private CombinedOperator CreateInitialization() {
       CombinedOperator init = new CombinedOperator();
       SequentialProcessor seq = new SequentialProcessor();
@@ -268,7 +281,10 @@
       Counter evalCounter = new Counter();
       evalCounter.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
-
+      Sorter sorter = new Sorter();
+      sorter.GetVariableInfo("Descending").ActualName = "Maximization";
+      sorter.GetVariableInfo("Value").ActualName = "Quality";
       seq.AddSubOperator(subScopesCreater);
       seq.AddSubOperator(subScopesProc);
+      seq.AddSubOperator(sorter);
       subScopesProc.AddSubOperator(individualSeq);
       individualSeq.AddSubOperator(treeCreater);
@@ -282,7 +298,45 @@
     }
 
+    private CombinedOperator CreateSelector() {
+      CombinedOperator selector = new CombinedOperator();
+      SequentialProcessor seq = new SequentialProcessor();
+      seq.Name = "Selector";
+      EmptyOperator emptyOp = new EmptyOperator();
+      ProportionalSelector femaleSelector = new ProportionalSelector();
+      femaleSelector.GetVariableInfo("Selected").ActualName = "Parents";
+      femaleSelector.GetVariableValue<BoolData>("CopySelected", null, false).Data = true;
+
+      RandomSelector maleSelector = new RandomSelector();
+      maleSelector.GetVariableInfo("Selected").ActualName = "Parents";
+      maleSelector.GetVariableValue<BoolData>("CopySelected", null, false).Data = true;
+      SequentialSubScopesProcessor seqSubScopesProc = new SequentialSubScopesProcessor();
+      RightChildReducer rightChildReducer = new RightChildReducer();
+      SubScopesMixer mixer = new SubScopesMixer();
+
+      seqSubScopesProc.AddSubOperator(femaleSelector);
+      seqSubScopesProc.AddSubOperator(emptyOp);
+
+      seq.AddSubOperator(maleSelector);
+      seq.AddSubOperator(seqSubScopesProc);
+      seq.AddSubOperator(rightChildReducer);
+      seq.AddSubOperator(mixer);
+
+      selector.OperatorGraph.AddOperator(seq);
+      selector.OperatorGraph.InitialOperator = seq;
+      return selector;
+    }
+
     private CombinedOperator CreateMainLoop() {
       CombinedOperator main = new CombinedOperator();
       SequentialProcessor seq = new SequentialProcessor();
+      SequentialProcessor offspringSelectionSeq = new SequentialProcessor();
+      SequentialSubScopesProcessor subScopesProc = new SequentialSubScopesProcessor();
+      EmptyOperator emptyOp = new EmptyOperator();
+      OffspringSelector offspringSelector = new OffspringSelector();
+
+      OperatorExtractor selector = new OperatorExtractor();
+      selector.Name = "Selector (extr.)";
+      selector.GetVariableInfo("Operator").ActualName = "Selector";
+
       CombinedOperator childCreater = CreateChildCreater();
       childCreater.Name = "Create children";
@@ -314,12 +368,27 @@
       Counter counter = new Counter();
       counter.GetVariableInfo("Value").ActualName = "Generations";
-      LessThanComparator comparator = new LessThanComparator();
-      comparator.GetVariableInfo("LeftSide").ActualName = "Generations";
-      comparator.GetVariableInfo("RightSide").ActualName = "MaxGenerations";
-      comparator.GetVariableInfo("Result").ActualName = "GenerationsCondition";
-      ConditionalBranch cond = new ConditionalBranch();
-      cond.GetVariableInfo("Condition").ActualName = "GenerationsCondition";
-
-      seq.AddSubOperator(childCreater);
+      LessThanComparator selPresComparator = new LessThanComparator();
+      selPresComparator.GetVariableInfo("LeftSide").ActualName = "SelectionPressure";
+      selPresComparator.GetVariableInfo("RightSide").ActualName = "SelectionPressureLimit";
+      selPresComparator.GetVariableInfo("Result").ActualName = "SelectionPressureCondition";
+      LessThanComparator generationsComparator = new LessThanComparator();
+      generationsComparator.GetVariableInfo("LeftSide").ActualName = "Generations";
+      generationsComparator.GetVariableInfo("RightSide").ActualName = "MaxGenerations";
+      generationsComparator.GetVariableInfo("Result").ActualName = "GenerationsCondition";
+      ConditionalBranch selPresCondition = new ConditionalBranch();
+      selPresCondition.GetVariableInfo("Condition").ActualName = "SelectionPressureCondition";
+      ConditionalBranch generationsCondition = new ConditionalBranch();
+      generationsCondition.GetVariableInfo("Condition").ActualName = "GenerationsCondition";
+
+      subScopesProc.AddSubOperator(emptyOp);
+      subScopesProc.AddSubOperator(childCreater);
+
+      offspringSelector.AddSubOperator(offspringSelectionSeq);
+
+      offspringSelectionSeq.AddSubOperator(selector);
+      offspringSelectionSeq.AddSubOperator(subScopesProc);
+      offspringSelectionSeq.AddSubOperator(offspringSelector);
+
+      seq.AddSubOperator(offspringSelectionSeq);
       seq.AddSubOperator(replacement);
       seq.AddSubOperator(solutionStorer);
@@ -331,7 +400,9 @@
       seq.AddSubOperator(validationQualityLogger);
       seq.AddSubOperator(counter);
-      seq.AddSubOperator(comparator);
-      seq.AddSubOperator(cond);
-      cond.AddSubOperator(seq);
+      seq.AddSubOperator(selPresComparator);
+      seq.AddSubOperator(generationsComparator);
+      seq.AddSubOperator(selPresCondition);
+      selPresCondition.AddSubOperator(generationsCondition);
+      generationsCondition.AddSubOperator(seq);
 
       main.OperatorGraph.AddOperator(seq);
@@ -346,5 +417,5 @@
       SequentialProcessor bestSolutionProcessor = new SequentialProcessor();
       MeanAbsolutePercentageErrorEvaluator trainingMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
-      trainingMapeEvaluator.Name = "ValidationMapeEvaluator";
+      trainingMapeEvaluator.Name = "TrainingMapeEvaluator";
       trainingMapeEvaluator.GetVariableInfo("MAPE").ActualName = "TrainingMAPE";
       trainingMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
@@ -358,7 +429,10 @@
       progOperator.RemoveVariableInfo("Result");
       progOperator.AddVariableInfo(new HeuristicLab.Core.VariableInfo("EvaluatedSolutions", "", typeof(IntData), VariableKind.In));
+      progOperator.AddVariableInfo(new HeuristicLab.Core.VariableInfo("SelectionPressure", "", typeof(DoubleData), VariableKind.In));
       progOperator.Code = @"
 int evalSolutions = EvaluatedSolutions.Data;
+double selectionPressure = SelectionPressure.Data;
 scope.AddVariable(new Variable(""EvaluatedSolutions"", new IntData(evalSolutions)));
+scope.AddVariable(new Variable(""SelectionPressure"", new DoubleData(selectionPressure)));
 ";
       solutionStorer.AddSubOperator(bestSolutionProcessor);
@@ -405,9 +479,5 @@
       CombinedOperator childCreater = new CombinedOperator();
       SequentialProcessor seq = new SequentialProcessor();
-      OperatorExtractor selector = new OperatorExtractor();
-      selector.Name = "Selector (extr.)";
-      selector.GetVariableInfo("Operator").ActualName = "Selector";
-      SequentialSubScopesProcessor seqScopesProc = new SequentialSubScopesProcessor();
-      EmptyOperator emptyOpt = new EmptyOperator();
+      OffspringAnalyzer analyzer = new OffspringAnalyzer();
       SequentialProcessor selectedProc = new SequentialProcessor();
       OperatorExtractor crossover = new OperatorExtractor();
@@ -434,10 +504,6 @@
       sorter.GetVariableInfo("Descending").ActualName = "Maximization";
       sorter.GetVariableInfo("Value").ActualName = "Quality";
-
-
-      seq.AddSubOperator(selector);
-      seq.AddSubOperator(seqScopesProc);
-      seqScopesProc.AddSubOperator(emptyOpt);
-      seqScopesProc.AddSubOperator(selectedProc);
+      seq.AddSubOperator(analyzer);
+      analyzer.AddSubOperator(selectedProc);
       selectedProc.AddSubOperator(crossover);
       selectedProc.AddSubOperator(individualProc);
@@ -448,5 +514,5 @@
       individualSeqProc.AddSubOperator(validationEvaluator);
       individualSeqProc.AddSubOperator(evalCounter);
-      selectedProc.AddSubOperator(sorter);
+      seq.AddSubOperator(sorter);
 
       childCreater.OperatorGraph.AddOperator(seq);
@@ -456,5 +522,5 @@
 
     public IEditor CreateEditor() {
-      return new OffSpringSelectionGpEditor(this);
+      return new OffspringSelectionGpEditor(this);
     }
 
Index: branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/StandardGP.cs
===================================================================
--- branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/StandardGP.cs	(revision 1156)
+++ branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/StandardGP.cs	(revision 1201)
@@ -136,5 +136,5 @@
       randomInjector.Name = "Random Injector";
       VariableInjector globalInjector = CreateGlobalInjector();
-      CombinedOperator initialization = CreateInialization();
+      CombinedOperator initialization = CreateInitialization();
       initialization.Name = "Initialization";
       FunctionLibraryInjector funLibInjector = new FunctionLibraryInjector();
@@ -247,5 +247,5 @@
     }
 
-    private CombinedOperator CreateInialization() {
+    private CombinedOperator CreateInitialization() {
       CombinedOperator init = new CombinedOperator();
       SequentialProcessor seq = new SequentialProcessor();
@@ -266,7 +266,12 @@
       Counter evalCounter = new Counter();
       evalCounter.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
+      Sorter sorter = new Sorter();
+      sorter.GetVariableInfo("Descending").ActualName = "Maximization";
+      sorter.GetVariableInfo("Value").ActualName = "Quality";
 
       seq.AddSubOperator(subScopesCreater);
       seq.AddSubOperator(subScopesProc);
+      seq.AddSubOperator(sorter);
+
       subScopesProc.AddSubOperator(individualSeq);
       individualSeq.AddSubOperator(treeCreater);
@@ -344,5 +349,5 @@
       SequentialProcessor bestSolutionProcessor = new SequentialProcessor();
       MeanAbsolutePercentageErrorEvaluator trainingMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
-      trainingMapeEvaluator.Name = "ValidationMapeEvaluator";
+      trainingMapeEvaluator.Name = "TrainingMapeEvaluator";
       trainingMapeEvaluator.GetVariableInfo("MAPE").ActualName = "TrainingMAPE";
       trainingMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
