Index: branches/HivePerformance/sources/HeuristicLab.Algorithms.RAPGA/3.3/RAPGA.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Algorithms.RAPGA/3.3/RAPGA.cs	(revision 9539)
+++ branches/HivePerformance/sources/HeuristicLab.Algorithms.RAPGA/3.3/RAPGA.cs	(revision 9616)
@@ -94,4 +94,7 @@
       get { return (ValueParameter<IntValue>)Parameters["Elites"]; }
     }
+    private IFixedValueParameter<BoolValue> ReevaluateElitesParameter {
+      get { return (IFixedValueParameter<BoolValue>)Parameters["ReevaluateElites"]; }
+    }
     private ValueParameter<MultiAnalyzer> AnalyzerParameter {
       get { return (ValueParameter<MultiAnalyzer>)Parameters["Analyzer"]; }
@@ -157,4 +160,8 @@
       get { return ElitesParameter.Value; }
       set { ElitesParameter.Value = value; }
+    }
+    public bool ReevaluteElites {
+      get { return ReevaluateElitesParameter.Value.Value; }
+      set { ReevaluateElitesParameter.Value.Value = value; }
     }
     public MultiAnalyzer Analyzer {
@@ -192,5 +199,13 @@
     private RAPGA(bool deserializing) : base(deserializing) { }
     [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() { Initialize(); }
+    private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code, remove with 3.4
+      if (!Parameters.ContainsKey("ReevaluateElites")) {
+        Parameters.Add(new FixedValueParameter<BoolValue>("ReevaluateElites", "Flag to determine if elite individuals should be reevaluated (i.e., if stochastic fitness functions are used.)", (BoolValue)new BoolValue(false).AsReadOnly()) { Hidden = true });
+      }
+      #endregion
+      Initialize();
+    }
     private RAPGA(RAPGA original, Cloner cloner)
       : base(original, cloner) {
@@ -216,4 +231,5 @@
       Parameters.Add(new OptionalConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
       Parameters.Add(new ValueParameter<IntValue>("Elites", "The numer of elite solutions which are kept in each generation.", new IntValue(1)));
+      Parameters.Add(new FixedValueParameter<BoolValue>("ReevaluateElites", "Flag to determine if elite individuals should be reevaluated (i.e., if stochastic fitness functions are used.)", new BoolValue(false)) { Hidden = true });
       Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The operator used to analyze each generation.", new MultiAnalyzer()));
       Parameters.Add(new ValueParameter<IntValue>("MaximumGenerations", "The maximum number of generations which should be processed.", new IntValue(1000)));
@@ -248,4 +264,5 @@
       mainLoop.CrossoverParameter.ActualName = CrossoverParameter.Name;
       mainLoop.ElitesParameter.ActualName = ElitesParameter.Name;
+      mainLoop.ReevaluateElitesParameter.ActualName = ReevaluateElitesParameter.Name;
       mainLoop.MaximumGenerationsParameter.ActualName = MaximumGenerationsParameter.Name;
       mainLoop.MutatorParameter.ActualName = MutatorParameter.Name;
Index: branches/HivePerformance/sources/HeuristicLab.Algorithms.RAPGA/3.3/RAPGAMainLoop.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Algorithms.RAPGA/3.3/RAPGAMainLoop.cs	(revision 9539)
+++ branches/HivePerformance/sources/HeuristicLab.Algorithms.RAPGA/3.3/RAPGAMainLoop.cs	(revision 9616)
@@ -65,4 +65,7 @@
       get { return (ValueLookupParameter<IntValue>)Parameters["Elites"]; }
     }
+    public IValueLookupParameter<BoolValue> ReevaluateElitesParameter {
+      get { return (IValueLookupParameter<BoolValue>)Parameters["ReevaluateElites"]; }
+    }
     public ValueLookupParameter<IntValue> MaximumGenerationsParameter {
       get { return (ValueLookupParameter<IntValue>)Parameters["MaximumGenerations"]; }
@@ -116,4 +119,14 @@
     public override IDeepCloneable Clone(Cloner cloner) {
       return new RAPGAMainLoop(this, cloner);
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code, remove with 3.4
+      if (!Parameters.ContainsKey("ReevaluateElites")) {
+        Parameters.Add(new ValueLookupParameter<BoolValue>("ReevaluateElites", "Flag to determine if elite individuals should be reevaluated (i.e., if stochastic fitness functions are used.)"));
+      }
+      #endregion
     }
 
@@ -129,4 +142,5 @@
       Parameters.Add(new ValueLookupParameter<IOperator>("Evaluator", "The operator used to evaluate solutions. This operator is executed in parallel, if an engine is used which supports parallelization."));
       Parameters.Add(new ValueLookupParameter<IntValue>("Elites", "The numer of elite solutions which are kept in each generation."));
+      Parameters.Add(new ValueLookupParameter<BoolValue>("ReevaluateElites", "Flag to determine if elite individuals should be reevaluated (i.e., if stochastic fitness functions are used.)"));
       Parameters.Add(new ValueLookupParameter<IntValue>("MaximumGenerations", "The maximum number of generations which should be processed."));
       Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The variable collection where results should be stored."));
@@ -190,4 +204,8 @@
       Assigner assigner4 = new Assigner();
       Assigner assigner5 = new Assigner();
+      ConditionalBranch reevaluateElitesBranch = new ConditionalBranch();
+      UniformSubScopesProcessor uniformSubScopesProcessor2 = new UniformSubScopesProcessor();
+      Placeholder evaluator2 = new Placeholder();
+      SubScopesCounter subScopesCounter4 = new SubScopesCounter();
 
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Generations", new IntValue(0))); // Class RAPGA expects this to be called Generations
@@ -338,4 +356,15 @@
       assigner5.LeftSideParameter.ActualName = "OffspringList";
       assigner5.RightSideParameter.Value = new ScopeList();
+
+      reevaluateElitesBranch.ConditionParameter.ActualName = "ReevaluateElites";
+      reevaluateElitesBranch.Name = "Reevaluate elites ?";
+
+      uniformSubScopesProcessor2.Parallel.Value = true;
+
+      evaluator2.Name = "Evaluator (placeholder)";
+      evaluator2.OperatorParameter.ActualName = EvaluatorParameter.Name;
+
+      subScopesCounter4.Name = "Increment EvaluatedSolutions";
+      subScopesCounter4.ValueParameter.ActualName = EvaluatedSolutionsParameter.Name;
       #endregion
 
@@ -378,5 +407,12 @@
       subScopesProcessor2.Successor = mergingReducer;
       bestSelector.Successor = rightReducer2;
-      rightReducer2.Successor = null;
+      rightReducer2.Successor = reevaluateElitesBranch;
+      reevaluateElitesBranch.TrueBranch = uniformSubScopesProcessor2;
+      uniformSubScopesProcessor2.Operator = evaluator2;
+      uniformSubScopesProcessor2.Successor = subScopesCounter4;
+      evaluator2.Successor = null;
+      subScopesCounter4.Successor = null;
+      reevaluateElitesBranch.FalseBranch = null;
+      reevaluateElitesBranch.Successor = null;
       scopeCleaner.Successor = scopeRestorer;
       mergingReducer.Successor = intCounter3;
