Index: trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithm.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithm.cs	(revision 5346)
+++ trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithm.cs	(revision 5351)
@@ -187,5 +187,5 @@
     }
     private IslandGeneticAlgorithmMainLoop MainLoop {
-      get { return (IslandGeneticAlgorithmMainLoop)IslandProcessor.Successor; }
+      get { return (IslandGeneticAlgorithmMainLoop)((UniformSubScopesProcessor)((VariableCreator)IslandProcessor.Successor).Successor).Successor; }
     }
     [Storable]
@@ -235,4 +235,7 @@
       UniformSubScopesProcessor ussp1 = new UniformSubScopesProcessor();
       SolutionsCreator solutionsCreator = new SolutionsCreator();
+      VariableCreator variableCreator = new VariableCreator();
+      UniformSubScopesProcessor ussp2 = new UniformSubScopesProcessor();
+      SubScopesCounter subScopesCounter = new SubScopesCounter();
       IslandGeneticAlgorithmMainLoop mainLoop = new IslandGeneticAlgorithmMainLoop();
       OperatorGraph.InitialOperator = randomCreator;
@@ -249,8 +252,19 @@
 
       ussp1.Operator = solutionsCreator;
-      ussp1.Successor = mainLoop;
+      ussp1.Successor = variableCreator;
 
       solutionsCreator.NumberOfSolutionsParameter.ActualName = PopulationSizeParameter.Name;
       solutionsCreator.Successor = null;
+
+      variableCreator.Name = "Initialize EvaluatedSolutions";
+      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("EvaluatedSolutions", new IntValue()));
+      variableCreator.Successor = ussp2;
+
+      ussp2.Operator = subScopesCounter;
+      ussp2.Successor = mainLoop;
+
+      subScopesCounter.Name = "Count EvaluatedSolutions";
+      subScopesCounter.ValueParameter.ActualName = "EvaluatedSolutions";
+      subScopesCounter.Successor = null;
 
       mainLoop.EmigrantsSelectorParameter.ActualName = EmigrantsSelectorParameter.Name;
@@ -270,4 +284,5 @@
       mainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name;
       mainLoop.IslandAnalyzerParameter.ActualName = IslandAnalyzerParameter.Name;
+      mainLoop.EvaluatedSolutionsParameter.ActualName = "EvaluatedSolutions";
       mainLoop.Successor = null;
 
Index: trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs	(revision 5346)
+++ trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs	(revision 5351)
@@ -100,4 +100,7 @@
     public ValueLookupParameter<IOperator> IslandAnalyzerParameter {
       get { return (ValueLookupParameter<IOperator>)Parameters["IslandAnalyzer"]; }
+    }
+    public LookupParameter<IntValue> EvaluatedSolutionsParameter {
+      get { return (LookupParameter<IntValue>)Parameters["EvaluatedSolutions"]; }
     }
     #endregion
@@ -135,4 +138,5 @@
       Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to the analyze the islands."));
       Parameters.Add(new ValueLookupParameter<IOperator>("IslandAnalyzer", "The operator used to analyze each island."));
+      Parameters.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "The number of times a solution has been evaluated."));
       #endregion
 
@@ -144,5 +148,4 @@
       Placeholder analyzer1 = new Placeholder();
       ResultsCollector resultsCollector1 = new ResultsCollector();
-      ResultsCollector resultsCollector2 = new ResultsCollector();
       UniformSubScopesProcessor uniformSubScopesProcessor1 = new UniformSubScopesProcessor();
       Placeholder selector = new Placeholder();
@@ -160,6 +163,8 @@
       RightReducer rightReducer = new RightReducer();
       MergingReducer mergingReducer = new MergingReducer();
+      IntCounter generationsCounter = new IntCounter();
+      UniformSubScopesProcessor uniformSubScopesProcessor4 = new UniformSubScopesProcessor();
+      SubScopesCounter subScopesCounter = new SubScopesCounter();
       Placeholder islandAnalyzer2 = new Placeholder();
-      IntCounter generationsCounter = new IntCounter();
       IntCounter generationsSinceLastMigrationCounter = new IntCounter();
       Comparator migrationComparator = new Comparator();
@@ -167,12 +172,12 @@
       Assigner resetGenerationsSinceLastMigrationAssigner = new Assigner();
       IntCounter migrationsCounter = new IntCounter();
-      UniformSubScopesProcessor uniformSubScopesProcessor4 = new UniformSubScopesProcessor();
+      UniformSubScopesProcessor uniformSubScopesProcessor5 = new UniformSubScopesProcessor();
       Placeholder emigrantsSelector = new Placeholder();
       Placeholder migrator = new Placeholder();
-      UniformSubScopesProcessor uniformSubScopesProcessor5 = new UniformSubScopesProcessor();
+      UniformSubScopesProcessor uniformSubScopesProcessor6 = new UniformSubScopesProcessor();
       Placeholder immigrationReplacer = new Placeholder();
       Comparator generationsComparator = new Comparator();
       Placeholder analyzer2 = new Placeholder();
-      ResultsCollector resultsCollector3 = new ResultsCollector();
+      ResultsCollector resultsCollector2 = new ResultsCollector();
       ConditionalBranch generationsTerminationCondition = new ConditionalBranch();
 
@@ -191,10 +196,7 @@
       resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("Migrations"));
       resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
+      resultsCollector1.CollectedValues.Add(new ScopeTreeLookupParameter<ResultCollection>("IslandResults", "Result set for each island", "Results"));
+      resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("EvaluatedSolutions"));
       resultsCollector1.ResultsParameter.ActualName = ResultsParameter.Name;
-
-      resultsCollector2.Name = "Reference Island Results";
-      resultsCollector2.CopyValue = new BoolValue(false);
-      resultsCollector2.CollectedValues.Add(new ScopeTreeLookupParameter<ResultCollection>("IslandResults", "Result set for each island", "Results"));
-      resultsCollector2.ResultsParameter.ActualName = ResultsParameter.Name;
 
       selector.Name = "Selector (placeholder)";
@@ -223,4 +225,7 @@
       bestSelector.NumberOfSelectedSubScopesParameter.ActualName = ElitesParameter.Name;
       bestSelector.QualityParameter.ActualName = QualityParameter.Name;
+
+      subScopesCounter.Name = "Increment EvaluatedSolutions";
+      subScopesCounter.ValueParameter.ActualName = EvaluatedSolutionsParameter.Name;
 
       islandAnalyzer2.Name = "Island Analyzer (placeholder)";
@@ -270,7 +275,8 @@
       analyzer2.OperatorParameter.ActualName = AnalyzerParameter.Name;
 
-      resultsCollector3.CollectedValues.Add(new LookupParameter<IntValue>("Migrations"));
-      resultsCollector3.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
-      resultsCollector3.ResultsParameter.ActualName = ResultsParameter.Name;
+      resultsCollector2.CollectedValues.Add(new LookupParameter<IntValue>("Migrations"));
+      resultsCollector2.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
+      resultsCollector2.CollectedValues.Add(new LookupParameter<IntValue>("EvaluatedSolutions"));
+      resultsCollector2.ResultsParameter.ActualName = ResultsParameter.Name;
 
       generationsTerminationCondition.Name = "Terminate?";
@@ -286,6 +292,5 @@
       islandAnalyzer1.Successor = null;
       analyzer1.Successor = resultsCollector1;
-      resultsCollector1.Successor = resultsCollector2;
-      resultsCollector2.Successor = uniformSubScopesProcessor1;
+      resultsCollector1.Successor = uniformSubScopesProcessor1;
       uniformSubScopesProcessor1.Operator = selector;
       uniformSubScopesProcessor1.Successor = generationsCounter;
@@ -304,6 +309,7 @@
       subScopesRemover.Successor = null;
       uniformSubScopesProcessor3.Operator = evaluator;
-      uniformSubScopesProcessor3.Successor = null;
+      uniformSubScopesProcessor3.Successor = subScopesCounter;
       evaluator.Successor = null;
+      subScopesCounter.Successor = null;
       subScopesProcessor2.Operators.Add(bestSelector);
       subScopesProcessor2.Operators.Add(new EmptyOperator());
@@ -311,7 +317,9 @@
       bestSelector.Successor = rightReducer;
       rightReducer.Successor = null;
-      mergingReducer.Successor = islandAnalyzer2;
+      mergingReducer.Successor = null;
+      generationsCounter.Successor = uniformSubScopesProcessor4;
+      uniformSubScopesProcessor4.Operator = islandAnalyzer2;
+      uniformSubScopesProcessor4.Successor = generationsSinceLastMigrationCounter;
       islandAnalyzer2.Successor = null;
-      generationsCounter.Successor = generationsSinceLastMigrationCounter;
       generationsSinceLastMigrationCounter.Successor = migrationComparator;
       migrationComparator.Successor = migrationBranch;
@@ -320,13 +328,13 @@
       migrationBranch.Successor = generationsComparator;
       resetGenerationsSinceLastMigrationAssigner.Successor = migrationsCounter;
-      migrationsCounter.Successor = uniformSubScopesProcessor4;
-      uniformSubScopesProcessor4.Operator = emigrantsSelector;
-      uniformSubScopesProcessor4.Successor = migrator;
-      migrator.Successor = uniformSubScopesProcessor5;
-      uniformSubScopesProcessor5.Operator = immigrationReplacer;
-      uniformSubScopesProcessor5.Successor = null;
+      migrationsCounter.Successor = uniformSubScopesProcessor5;
+      uniformSubScopesProcessor5.Operator = emigrantsSelector;
+      uniformSubScopesProcessor5.Successor = migrator;
+      migrator.Successor = uniformSubScopesProcessor6;
+      uniformSubScopesProcessor6.Operator = immigrationReplacer;
+      uniformSubScopesProcessor6.Successor = null;
       generationsComparator.Successor = analyzer2;
-      analyzer2.Successor = resultsCollector3;
-      resultsCollector3.Successor = generationsTerminationCondition;
+      analyzer2.Successor = resultsCollector2;
+      resultsCollector2.Successor = generationsTerminationCondition;
       generationsTerminationCondition.TrueBranch = null;
       generationsTerminationCondition.FalseBranch = uniformSubScopesProcessor1;
