Index: /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithm.cs
===================================================================
--- /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithm.cs	(revision 10154)
+++ /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithm.cs	(revision 10155)
@@ -109,4 +109,7 @@
       get { return (ValueParameter<MultiAnalyzer>)Parameters["IslandAnalyzer"]; }
     }
+    protected IFixedValueParameter<BoolValue> ReevaluateImmigrantsParameter {
+      get { return (IFixedValueParameter<BoolValue>)Parameters["ReevaluateImmigrants"]; }
+    }
     #endregion
 
@@ -183,4 +186,8 @@
       get { return IslandAnalyzerParameter.Value; }
       set { IslandAnalyzerParameter.Value = value; }
+    }
+    public bool ReevaluateImmigrants {
+      get { return ReevaluateImmigrantsParameter.Value.Value; }
+      set { ReevaluateImmigrantsParameter.Value.Value = value; }
     }
     protected RandomCreator RandomCreator {
@@ -245,4 +252,5 @@
       Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The operator used to analyze the islands.", new MultiAnalyzer()));
       Parameters.Add(new ValueParameter<MultiAnalyzer>("IslandAnalyzer", "The operator used to analyze each island.", new MultiAnalyzer()));
+      Parameters.Add(new FixedValueParameter<BoolValue>("ReevaluateImmigrants", "Flag which indicates if inviduals should be reevaluated before they are immigrated.", new BoolValue(false)) { Hidden = true });
 
       RandomCreator randomCreator = new RandomCreator();
Index: /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs
===================================================================
--- /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs	(revision 10154)
+++ /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs	(revision 10155)
@@ -115,4 +115,8 @@
     public ValueLookupParameter<BoolValue> Migrate {
       get { return (ValueLookupParameter<BoolValue>)Parameters["Migrate"]; }
+    }
+
+    public ValueLookupParameter<BoolValue> ReevaluateImmigrants {
+      get { return (ValueLookupParameter<BoolValue>)Parameters["ReevaluateImmigrants"]; }
     }
     #endregion
@@ -155,4 +159,5 @@
       Parameters.Add(new LookupParameter<IntValue>("IslandEvaluatedSolutions", "The number of times a solution has been evaluated on one island."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("Migrate", "Migrate the island?"));
+      Parameters.Add(new ValueLookupParameter<BoolValue>("ReevaluateImmigrants", "Flag which indicates if inviduals should be reevaluated before they are immigrated."));
       #endregion
 
@@ -193,5 +198,10 @@
       IntCounter migrationsCounter = new IntCounter();
       Placeholder migrator = new Placeholder();
+      ConditionalBranch reevaluateImmigrantsBranch = new ConditionalBranch();
+      Assigner evaluatedSolutionsAssigner2 = new Assigner();
       UniformSubScopesProcessor uniformSubScopesProcessor6 = new UniformSubScopesProcessor();
+      SubScopesProcessor subScopesProcessor3 = new SubScopesProcessor();
+      DataReducer evaluatedSolutionsReducer2 = new DataReducer();
+      UniformSubScopesProcessor uniformSubScopesProcessor7 = new UniformSubScopesProcessor();
       Placeholder immigrationReplacer = new Placeholder();
       Comparator generationsComparator = new Comparator();
@@ -200,5 +210,4 @@
       ConditionalBranch reevaluateElitesBranch = new ConditionalBranch();
 
-
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Migrations", new IntValue(0)));
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("GenerationsSinceLastMigration", new IntValue(0)));
@@ -295,4 +304,17 @@
       migrator.Name = "Migrator (placeholder)";
       migrator.OperatorParameter.ActualName = MigratorParameter.Name;
+
+      reevaluateImmigrantsBranch.ConditionParameter.ActualName = "ReevaluateImmigrants";
+      reevaluateImmigrantsBranch.Name = "Reevaluate Immigrants ?";
+
+      evaluatedSolutionsAssigner2.Name = "Reset Island evaluated solutions";
+      evaluatedSolutionsAssigner2.LeftSideParameter.ActualName = IslandEvaluatedSolutions.Name;
+      evaluatedSolutionsAssigner2.RightSideParameter.Value = new IntValue(0);
+
+      evaluatedSolutionsReducer2.Name = "Increment Evaluated Solutions";
+      evaluatedSolutionsReducer2.ParameterToReduce.ActualName = IslandEvaluatedSolutions.Name;
+      evaluatedSolutionsReducer2.TargetParameter.ActualName = EvaluatedSolutionsParameter.Name;
+      evaluatedSolutionsReducer2.ReductionOperation.Value = new ReductionOperation(ReductionOperations.Sum);
+      evaluatedSolutionsReducer2.TargetOperation.Value = new ReductionOperation(ReductionOperations.Sum);
 
       immigrationReplacer.Name = "Immigration Replacer (placeholder)";
@@ -368,7 +390,16 @@
       emigrantsSelector.Successor = null;
       uniformSubScopesProcessor5.Successor = migrator;
-      migrator.Successor = uniformSubScopesProcessor6;
-      uniformSubScopesProcessor6.Operator = immigrationReplacer;
-      uniformSubScopesProcessor6.Successor = generationsComparator;
+      migrator.Successor = reevaluateImmigrantsBranch;
+      reevaluateImmigrantsBranch.FalseBranch = null;
+      reevaluateImmigrantsBranch.Successor = uniformSubScopesProcessor7;
+      reevaluateImmigrantsBranch.TrueBranch = uniformSubScopesProcessor6;
+      uniformSubScopesProcessor6.Successor = evaluatedSolutionsReducer2;
+      uniformSubScopesProcessor6.Operator = evaluatedSolutionsAssigner2;
+      evaluatedSolutionsReducer2.Successor = null;
+      evaluatedSolutionsAssigner2.Successor = subScopesProcessor3;
+      subScopesProcessor3.Operators.Add(new EmptyOperator());
+      subScopesProcessor3.Operators.Add(uniformSubScopesProcessor3);
+      uniformSubScopesProcessor7.Operator = immigrationReplacer;
+      uniformSubScopesProcessor7.Successor = generationsComparator;
       generationsComparator.Successor = analyzer2;
       analyzer2.Successor = generationsTerminationCondition;
Index: /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithm.cs
===================================================================
--- /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithm.cs	(revision 10154)
+++ /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithm.cs	(revision 10155)
@@ -133,4 +133,7 @@
       get { return (ValueParameter<IntValue>)Parameters["MaximumEvaluatedSolutions"]; }
     }
+    protected IFixedValueParameter<BoolValue> ReevaluateImmigrantsParameter {
+      get { return (IFixedValueParameter<BoolValue>)Parameters["ReevaluateImmigrants"]; }
+    }
     #endregion
 
@@ -235,4 +238,8 @@
       get { return MaximumEvaluatedSolutionsParameter.Value; }
       set { MaximumEvaluatedSolutionsParameter.Value = value; }
+    }
+    public bool ReevaluateImmigrants {
+      get { return ReevaluateImmigrantsParameter.Value.Value; }
+      set { ReevaluateImmigrantsParameter.Value.Value = value; }
     }
     protected RandomCreator RandomCreator {
@@ -315,4 +322,5 @@
       Parameters.Add(new ValueParameter<MultiAnalyzer>("IslandAnalyzer", "The operator used to analyze each island.", new MultiAnalyzer()));
       Parameters.Add(new ValueParameter<IntValue>("MaximumEvaluatedSolutions", "The maximum number of evaluated solutions (approximately).", new IntValue(int.MaxValue)));
+      Parameters.Add(new FixedValueParameter<BoolValue>("ReevaluateImmigrants", "Flag which indicates if inviduals should be reevaluated before they are immigrated.", new BoolValue(false)) { Hidden = true });
 
       RandomCreator randomCreator = new RandomCreator();
Index: /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithmMainLoop.cs
===================================================================
--- /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithmMainLoop.cs	(revision 10154)
+++ /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithmMainLoop.cs	(revision 10155)
@@ -129,4 +129,7 @@
     public LookupParameter<IntValue> EvaluatedSolutionsParameter {
       get { return (LookupParameter<IntValue>)Parameters["EvaluatedSolutions"]; }
+    }
+    public ValueLookupParameter<BoolValue> ReevaluateImmigrants {
+      get { return (ValueLookupParameter<BoolValue>)Parameters["ReevaluateImmigrants"]; }
     }
     #endregion
@@ -174,4 +177,5 @@
       Parameters.Add(new ValueLookupParameter<IOperator>("IslandAnalyzer", "The operator used to analyze each island."));
       Parameters.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "The number of times solutions have been evaluated."));
+      Parameters.Add(new ValueLookupParameter<BoolValue>("ReevaluateImmigrants", "Flag which indicates if inviduals should be reevaluated before they are immigrated."));
       #endregion
 
@@ -204,5 +208,11 @@
       Placeholder emigrantsSelector = new Placeholder();
       Placeholder migrator = new Placeholder();
+      ConditionalBranch reevaluateImmigrantsBranch = new ConditionalBranch();
       UniformSubScopesProcessor uniformSubScopesProcessor3 = new UniformSubScopesProcessor();
+      SubScopesProcessor subScopesProcessor = new SubScopesProcessor();
+      UniformSubScopesProcessor uniformSubScopesProcessor4 = new UniformSubScopesProcessor();
+      Placeholder evaluator = new Placeholder();
+      SubScopesCounter subScopesCounter = new SubScopesCounter();
+      UniformSubScopesProcessor uniformSubScopesProcessor5 = new UniformSubScopesProcessor();
       Placeholder immigrationReplacer = new Placeholder();
       Comparator generationsComparator = new Comparator();
@@ -324,4 +334,13 @@
       migrator.Name = "Migrator (placeholder)";
       migrator.OperatorParameter.ActualName = MigratorParameter.Name;
+
+      reevaluateImmigrantsBranch.ConditionParameter.ActualName = "ReevaluateImmigrants";
+      reevaluateImmigrantsBranch.Name = "Reevaluate Immigrants ?";
+
+      evaluator.Name = "Evaluator (placeholder)";
+      evaluator.OperatorParameter.ActualName = EvaluatorParameter.Name;
+
+      subScopesCounter.Name = "Increment EvaluatedSolutions";
+      subScopesCounter.ValueParameter.ActualName = EvaluatedSolutionsParameter.Name;
 
       immigrationReplacer.Name = "Immigration Replacer (placeholder)";
@@ -398,7 +417,16 @@
       reviveIslandAssigner.Successor = emigrantsSelector;
       emigrantsSelector.Successor = null;
-      migrator.Successor = uniformSubScopesProcessor3;
-      uniformSubScopesProcessor3.Operator = immigrationReplacer;
-      uniformSubScopesProcessor3.Successor = null;
+      migrator.Successor = reevaluateImmigrantsBranch;
+      reevaluateImmigrantsBranch.FalseBranch = null;
+      reevaluateImmigrantsBranch.Successor = uniformSubScopesProcessor5;
+      reevaluateImmigrantsBranch.TrueBranch = uniformSubScopesProcessor3;
+      uniformSubScopesProcessor3.Operator = subScopesProcessor;
+      subScopesProcessor.Operators.Add(new EmptyOperator());
+      subScopesProcessor.Operators.Add(uniformSubScopesProcessor4);
+      uniformSubScopesProcessor4.Operator = evaluator;
+      uniformSubScopesProcessor4.Successor = subScopesCounter;
+      evaluator.Successor = null;
+      uniformSubScopesProcessor5.Operator = immigrationReplacer;
+      uniformSubScopesProcessor5.Successor = null;
       immigrationReplacer.Successor = null;
       generationsComparator.Successor = terminatedIslandsComparator;
