Index: trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/DefaultStructureIdentificationOperators.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/DefaultStructureIdentificationOperators.cs	(revision 2361)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/DefaultStructureIdentificationOperators.cs	(revision 2362)
@@ -71,4 +71,10 @@
       solutionStorer.GetVariableInfo("BestSolution").ActualName = "BestValidationSolution";
       solutionStorer.GetVariableInfo("Quality").ActualName = "ValidationQuality";
+
+      OperatorExtractor bestSolutionProcessor = new OperatorExtractor();
+      bestSolutionProcessor.Name = "BestSolutionProcessor (extr.)";
+      bestSolutionProcessor.GetVariableInfo("Operator").ActualName = "BestSolutionProcessor";
+
+      solutionStorer.AddSubOperator(bestSolutionProcessor);
 
       BestAverageWorstQualityCalculator validationQualityCalculator = new BestAverageWorstQualityCalculator();
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffspringSelectionGPRegression.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffspringSelectionGPRegression.cs	(revision 2361)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffspringSelectionGPRegression.cs	(revision 2362)
@@ -31,4 +31,5 @@
 using HeuristicLab.Modeling;
 using HeuristicLab.DataAnalysis;
+using HeuristicLab.Operators.Programmable;
 
 namespace HeuristicLab.GP.StructureIdentification {
@@ -94,5 +95,34 @@
 
     protected override IOperator CreateGenerationStepHook() {
-      return DefaultStructureIdentificationOperators.CreateGenerationStepHook();
+      IOperator hook = DefaultStructureIdentificationOperators.CreateGenerationStepHook();
+      hook.AddSubOperator(CreateBestSolutionProcessor());
+      return hook;
+    }
+
+    private IOperator CreateBestSolutionProcessor() {
+      CombinedOperator op = new CombinedOperator();
+      op.Name = "BestSolutionProcessor";
+      SequentialProcessor seq = new SequentialProcessor();
+
+      ProgrammableOperator variableStorer = new ProgrammableOperator();
+      variableStorer.RemoveVariableInfo("Result");
+      variableStorer.AddVariableInfo(new VariableInfo("Input", "Value to copy", typeof(ObjectData), VariableKind.In));
+      variableStorer.AddVariableInfo(new VariableInfo("Output", "Value to write", typeof(ObjectData), VariableKind.Out));
+      variableStorer.Code = "scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(\"Output\"), (ObjectData)Input.Clone()));";
+
+      IOperator evaluatedSolutionsStorer = (IOperator)variableStorer.Clone();
+      evaluatedSolutionsStorer.GetVariableInfo("Input").ActualName = "EvaluatedSolutions";
+      evaluatedSolutionsStorer.GetVariableInfo("Output").ActualName = "EvaluatedSolutions";
+
+      IOperator selectionPressureStorer = (IOperator)variableStorer.Clone();
+      selectionPressureStorer.GetVariableInfo("Input").ActualName = "SelectionPressure";
+      selectionPressureStorer.GetVariableInfo("Output").ActualName = "SelectionPressure";
+
+      seq.AddSubOperator(evaluatedSolutionsStorer);
+      seq.AddSubOperator(selectionPressureStorer);
+
+      op.OperatorGraph.AddOperator(seq);
+      op.OperatorGraph.InitialOperator = seq;
+      return op;
     }
 
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGPRegression.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGPRegression.cs	(revision 2361)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGPRegression.cs	(revision 2362)
@@ -30,4 +30,5 @@
 using System;
 using HeuristicLab.DataAnalysis;
+using HeuristicLab.Operators.Programmable;
 
 namespace HeuristicLab.GP.StructureIdentification {
@@ -149,4 +150,25 @@
     }
 
+    private IOperator CreateBestSolutionProcessor() {
+      CombinedOperator op = new CombinedOperator();
+      op.Name = "BestSolutionProcessor";
+      SequentialProcessor seq = new SequentialProcessor();
+
+      ProgrammableOperator evaluatedSolutionsStorer = new ProgrammableOperator();
+      evaluatedSolutionsStorer.RemoveVariableInfo("Result");
+      evaluatedSolutionsStorer.AddVariableInfo(new VariableInfo("Input", "Value to copy", typeof(IntData), VariableKind.In));
+      evaluatedSolutionsStorer.AddVariableInfo(new VariableInfo("Output", "Value to write", typeof(IntData), VariableKind.New));
+      evaluatedSolutionsStorer.GetVariableInfo("Input").ActualName = "EvaluatedSolutions";
+      evaluatedSolutionsStorer.GetVariableInfo("Output").ActualName = "EvaluatedSolutions";
+      evaluatedSolutionsStorer.Code = "Output.Data = Input.Data;";
+
+      seq.AddSubOperator(evaluatedSolutionsStorer);
+
+      op.OperatorGraph.AddOperator(seq);
+      op.OperatorGraph.InitialOperator = seq;
+      return op;
+    }
+
+
     protected virtual IOperator CreateModelAnalyzerOperator() {
       return DefaultRegressionOperators.CreatePostProcessingOperator();
