Index: trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithmMainLoop.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithmMainLoop.cs	(revision 5206)
+++ trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithmMainLoop.cs	(revision 5208)
@@ -104,5 +104,5 @@
       Parameters.Add(new ValueLookupParameter<PercentValue>("MutationProbability", "The probability that the mutation operator is applied on a solution."));
       Parameters.Add(new ValueLookupParameter<IOperator>("Mutator", "The operator used to mutate solutions."));
-      Parameters.Add(new ValueLookupParameter<IOperator>("Evaluator", "The operator used to evaluate solutions."));
+      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<IntValue>("MaximumGenerations", "The maximum number of generations which should be processed."));
@@ -119,10 +119,11 @@
       SubScopesProcessor subScopesProcessor1 = new SubScopesProcessor();
       ChildrenCreator childrenCreator = new ChildrenCreator();
-      UniformSubScopesProcessor uniformSubScopesProcessor = new UniformSubScopesProcessor();
+      UniformSubScopesProcessor uniformSubScopesProcessor1 = new UniformSubScopesProcessor();
       Placeholder crossover = new Placeholder();
       StochasticBranch stochasticBranch = new StochasticBranch();
       Placeholder mutator = new Placeholder();
+      SubScopesRemover subScopesRemover = new SubScopesRemover();
+      UniformSubScopesProcessor uniformSubScopesProcessor2 = new UniformSubScopesProcessor();
       Placeholder evaluator = new Placeholder();
-      SubScopesRemover subScopesRemover = new SubScopesRemover();
       SubScopesProcessor subScopesProcessor2 = new SubScopesProcessor();
       BestSelector bestSelector = new BestSelector();
@@ -157,8 +158,10 @@
       mutator.OperatorParameter.ActualName = "Mutator";
 
+      subScopesRemover.RemoveAllSubScopes = true;
+
+      uniformSubScopesProcessor2.Parallel.Value = true;
+
       evaluator.Name = "Evaluator";
       evaluator.OperatorParameter.ActualName = "Evaluator";
-
-      subScopesRemover.RemoveAllSubScopes = true;
 
       bestSelector.CopySelected = new BoolValue(false);
@@ -193,14 +196,16 @@
       subScopesProcessor1.Operators.Add(childrenCreator);
       subScopesProcessor1.Successor = subScopesProcessor2;
-      childrenCreator.Successor = uniformSubScopesProcessor;
-      uniformSubScopesProcessor.Operator = crossover;
-      uniformSubScopesProcessor.Successor = null;
+      childrenCreator.Successor = uniformSubScopesProcessor1;
+      uniformSubScopesProcessor1.Operator = crossover;
+      uniformSubScopesProcessor1.Successor = uniformSubScopesProcessor2;
       crossover.Successor = stochasticBranch;
       stochasticBranch.FirstBranch = mutator;
       stochasticBranch.SecondBranch = null;
-      stochasticBranch.Successor = evaluator;
+      stochasticBranch.Successor = subScopesRemover;
       mutator.Successor = null;
-      evaluator.Successor = subScopesRemover;
       subScopesRemover.Successor = null;
+      uniformSubScopesProcessor2.Operator = evaluator;
+      uniformSubScopesProcessor2.Successor = null;
+      evaluator.Successor = null;
       subScopesProcessor2.Operators.Add(bestSelector);
       subScopesProcessor2.Operators.Add(new EmptyOperator());
Index: trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs	(revision 5206)
+++ trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs	(revision 5208)
@@ -130,5 +130,5 @@
       Parameters.Add(new ValueLookupParameter<PercentValue>("MutationProbability", "The probability that the mutation operator is applied on a solution."));
       Parameters.Add(new ValueLookupParameter<IOperator>("Mutator", "The operator used to mutate solutions."));
-      Parameters.Add(new ValueLookupParameter<IOperator>("Evaluator", "The operator used to evaluate solutions."));
+      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<ResultCollection>("Results", "The results collection to store the results."));
@@ -153,6 +153,7 @@
       StochasticBranch stochasticBranch = new StochasticBranch();
       Placeholder mutator = new Placeholder();
+      SubScopesRemover subScopesRemover = new SubScopesRemover();
+      UniformSubScopesProcessor uniformSubScopesProcessor3 = new UniformSubScopesProcessor();
       Placeholder evaluator = new Placeholder();
-      SubScopesRemover subScopesRemover = new SubScopesRemover();
       SubScopesProcessor subScopesProcessor2 = new SubScopesProcessor();
       BestSelector bestSelector = new BestSelector();
@@ -166,8 +167,8 @@
       Assigner resetGenerationsSinceLastMigrationAssigner = new Assigner();
       IntCounter migrationsCounter = new IntCounter();
-      UniformSubScopesProcessor uniformSubScopesProcessor3 = new UniformSubScopesProcessor();
+      UniformSubScopesProcessor uniformSubScopesProcessor4 = new UniformSubScopesProcessor();
       Placeholder emigrantsSelector = new Placeholder();
       Placeholder migrator = new Placeholder();
-      UniformSubScopesProcessor uniformSubScopesProcessor4 = new UniformSubScopesProcessor();
+      UniformSubScopesProcessor uniformSubScopesProcessor5 = new UniformSubScopesProcessor();
       Placeholder immigrationReplacer = new Placeholder();
       Comparator generationsComparator = new Comparator();
@@ -211,8 +212,10 @@
       mutator.OperatorParameter.ActualName = MutatorParameter.Name;
 
+      subScopesRemover.RemoveAllSubScopes = true;
+
+      uniformSubScopesProcessor3.Parallel.Value = true;
+
       evaluator.Name = "Evaluator (placeholder)";
       evaluator.OperatorParameter.ActualName = EvaluatorParameter.Name;
-
-      subScopesRemover.RemoveAllSubScopes = true;
 
       bestSelector.CopySelected = new BoolValue(false);
@@ -293,12 +296,14 @@
       childrenCreator.Successor = uniformSubScopesProcessor2;
       uniformSubScopesProcessor2.Operator = crossover;
-      uniformSubScopesProcessor2.Successor = null;
+      uniformSubScopesProcessor2.Successor = uniformSubScopesProcessor3;
       crossover.Successor = stochasticBranch;
       stochasticBranch.FirstBranch = mutator;
       stochasticBranch.SecondBranch = null;
-      stochasticBranch.Successor = evaluator;
+      stochasticBranch.Successor = subScopesRemover;
       mutator.Successor = null;
-      evaluator.Successor = subScopesRemover;
       subScopesRemover.Successor = null;
+      uniformSubScopesProcessor3.Operator = evaluator;
+      uniformSubScopesProcessor3.Successor = null;
+      evaluator.Successor = null;
       subScopesProcessor2.Operators.Add(bestSelector);
       subScopesProcessor2.Operators.Add(new EmptyOperator());
@@ -315,10 +320,10 @@
       migrationBranch.Successor = generationsComparator;
       resetGenerationsSinceLastMigrationAssigner.Successor = migrationsCounter;
-      migrationsCounter.Successor = uniformSubScopesProcessor3;
-      uniformSubScopesProcessor3.Operator = emigrantsSelector;
-      uniformSubScopesProcessor3.Successor = migrator;
-      migrator.Successor = uniformSubScopesProcessor4;
-      uniformSubScopesProcessor4.Operator = immigrationReplacer;
-      uniformSubScopesProcessor4.Successor = null;
+      migrationsCounter.Successor = uniformSubScopesProcessor4;
+      uniformSubScopesProcessor4.Operator = emigrantsSelector;
+      uniformSubScopesProcessor4.Successor = migrator;
+      migrator.Successor = uniformSubScopesProcessor5;
+      uniformSubScopesProcessor5.Operator = immigrationReplacer;
+      uniformSubScopesProcessor5.Successor = null;
       generationsComparator.Successor = analyzer2;
       analyzer2.Successor = resultsCollector3;
