Index: /trunk/sources/HeuristicLab.Algorithms.EvolutionStrategy/3.3/EvolutionStrategyMainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.EvolutionStrategy/3.3/EvolutionStrategyMainLoop.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.EvolutionStrategy/3.3/EvolutionStrategyMainLoop.cs	(revision 5356)
@@ -78,4 +78,7 @@
     public ValueLookupParameter<IOperator> AnalyzerParameter {
       get { return (ValueLookupParameter<IOperator>)Parameters["Analyzer"]; }
+    }
+    public LookupParameter<IntValue> EvaluatedSolutionsParameter {
+      get { return (LookupParameter<IntValue>)Parameters["EvaluatedSolutions"]; }
     }
     private ScopeParameter CurrentScopeParameter {
@@ -123,4 +126,5 @@
       Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The variable collection where results should be stored."));
       Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze each generation."));
+      Parameters.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "The number of times solutions have been evaluated."));
       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope which represents a population of solutions on which the EvolutionStrategy should be applied."));
       Parameters.Add(new ValueLookupParameter<IOperator>("StrategyParameterManipulator", "The operator to mutate the endogeneous strategy parameters."));
@@ -148,4 +152,5 @@
       UniformSubScopesProcessor uniformSubScopesProcessor3 = new UniformSubScopesProcessor();
       Placeholder evaluator = new Placeholder();
+      SubScopesCounter subScopesCounter = new SubScopesCounter();
       ConditionalBranch plusOrCommaReplacementBranch = new ConditionalBranch();
       MergingReducer plusReplacement = new MergingReducer();
@@ -155,5 +160,4 @@
       IntCounter intCounter = new IntCounter();
       Comparator comparator = new Comparator();
-      ResultsCollector resultsCollector2 = new ResultsCollector();
       Placeholder analyzer2 = new Placeholder();
       ConditionalBranch conditionalBranch = new ConditionalBranch();
@@ -208,4 +212,7 @@
       evaluator.OperatorParameter.ActualName = EvaluatorParameter.Name;
 
+      subScopesCounter.Name = "Increment EvaluatedSolutions";
+      subScopesCounter.ValueParameter.ActualName = EvaluatedSolutionsParameter.Name;
+
       plusOrCommaReplacementBranch.ConditionParameter.ActualName = PlusSelectionParameter.Name;
 
@@ -222,7 +229,4 @@
       comparator.ResultParameter.ActualName = "Terminate";
       comparator.RightSideParameter.ActualName = MaximumGenerationsParameter.Name;
-
-      resultsCollector2.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
-      resultsCollector2.ResultsParameter.ActualName = "Results";
 
       analyzer2.Name = "Analyzer (placeholder)";
@@ -258,6 +262,7 @@
       mutator2.Successor = null;
       uniformSubScopesProcessor3.Operator = evaluator;
-      uniformSubScopesProcessor3.Successor = null;
+      uniformSubScopesProcessor3.Successor = subScopesCounter;
       evaluator.Successor = null;
+      subScopesCounter.Successor = null;
       plusOrCommaReplacementBranch.TrueBranch = plusReplacement;
       plusOrCommaReplacementBranch.FalseBranch = commaReplacement;
@@ -266,6 +271,5 @@
       rightReducer.Successor = intCounter;
       intCounter.Successor = comparator;
-      comparator.Successor = resultsCollector2;
-      resultsCollector2.Successor = analyzer2;
+      comparator.Successor = analyzer2;
       analyzer2.Successor = conditionalBranch;
       conditionalBranch.FalseBranch = selector;
Index: /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithm.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithm.cs	(revision 5356)
@@ -135,5 +135,11 @@
     }
     private GeneticAlgorithmMainLoop GeneticAlgorithmMainLoop {
-      get { return (GeneticAlgorithmMainLoop)((SubScopesCounter)SolutionsCreator.Successor).Successor; }
+      get {
+        return (GeneticAlgorithmMainLoop)(
+          (ResultsCollector)(
+            (SubScopesCounter)SolutionsCreator.Successor
+          ).Successor
+        ).Successor;
+      }
     }
     [Storable]
@@ -157,5 +163,6 @@
       SolutionsCreator solutionsCreator = new SolutionsCreator();
       SubScopesCounter subScopesCounter = new SubScopesCounter();
-      GeneticAlgorithmMainLoop geneticAlgorithmMainLoop = new GeneticAlgorithmMainLoop();
+      ResultsCollector resultsCollector = new ResultsCollector();
+      GeneticAlgorithmMainLoop mainLoop = new GeneticAlgorithmMainLoop();
       OperatorGraph.InitialOperator = randomCreator;
 
@@ -172,17 +179,21 @@
       subScopesCounter.Name = "Initialize EvaluatedSolutions";
       subScopesCounter.ValueParameter.ActualName = "EvaluatedSolutions";
-      subScopesCounter.Successor = geneticAlgorithmMainLoop;
-
-      geneticAlgorithmMainLoop.SelectorParameter.ActualName = SelectorParameter.Name;
-      geneticAlgorithmMainLoop.CrossoverParameter.ActualName = CrossoverParameter.Name;
-      geneticAlgorithmMainLoop.ElitesParameter.ActualName = ElitesParameter.Name;
-      geneticAlgorithmMainLoop.MaximumGenerationsParameter.ActualName = MaximumGenerationsParameter.Name;
-      geneticAlgorithmMainLoop.MutatorParameter.ActualName = MutatorParameter.Name;
-      geneticAlgorithmMainLoop.MutationProbabilityParameter.ActualName = MutationProbabilityParameter.Name;
-      geneticAlgorithmMainLoop.RandomParameter.ActualName = RandomCreator.RandomParameter.ActualName;
-      geneticAlgorithmMainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name;
-      geneticAlgorithmMainLoop.EvaluatedSolutionsParameter.ActualName = "EvaluatedSolutions";
-      geneticAlgorithmMainLoop.PopulationSizeParameter.ActualName = PopulationSizeParameter.Name;
-      geneticAlgorithmMainLoop.ResultsParameter.ActualName = "Results";
+      subScopesCounter.Successor = resultsCollector;
+
+      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
+      resultsCollector.ResultsParameter.ActualName = "Results";
+      resultsCollector.Successor = mainLoop;
+
+      mainLoop.SelectorParameter.ActualName = SelectorParameter.Name;
+      mainLoop.CrossoverParameter.ActualName = CrossoverParameter.Name;
+      mainLoop.ElitesParameter.ActualName = ElitesParameter.Name;
+      mainLoop.MaximumGenerationsParameter.ActualName = MaximumGenerationsParameter.Name;
+      mainLoop.MutatorParameter.ActualName = MutatorParameter.Name;
+      mainLoop.MutationProbabilityParameter.ActualName = MutationProbabilityParameter.Name;
+      mainLoop.RandomParameter.ActualName = RandomCreator.RandomParameter.ActualName;
+      mainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name;
+      mainLoop.EvaluatedSolutionsParameter.ActualName = "EvaluatedSolutions";
+      mainLoop.PopulationSizeParameter.ActualName = PopulationSizeParameter.Name;
+      mainLoop.ResultsParameter.ActualName = "Results";
 
       foreach (ISelector selector in ApplicationManager.Manager.GetInstances<ISelector>().Where(x => !(x is IMultiObjectiveSelector)).OrderBy(x => x.Name))
Index: /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithmMainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithmMainLoop.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithmMainLoop.cs	(revision 5356)
@@ -141,5 +141,4 @@
       IntCounter intCounter = new IntCounter();
       Comparator comparator = new Comparator();
-      ResultsCollector resultsCollector2 = new ResultsCollector();
       Placeholder analyzer2 = new Placeholder();
       ConditionalBranch conditionalBranch = new ConditionalBranch();
@@ -148,5 +147,4 @@
 
       resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
-      resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>(EvaluatedSolutionsParameter.Name));
       resultsCollector1.ResultsParameter.ActualName = "Results";
 
@@ -190,8 +188,4 @@
       comparator.ResultParameter.ActualName = "Terminate";
       comparator.RightSideParameter.ActualName = "MaximumGenerations";
-
-      resultsCollector2.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
-      resultsCollector2.CollectedValues.Add(new LookupParameter<IntValue>(EvaluatedSolutionsParameter.Name));
-      resultsCollector2.ResultsParameter.ActualName = "Results";
 
       analyzer2.Name = "Analyzer";
@@ -230,6 +224,5 @@
       mergingReducer.Successor = intCounter;
       intCounter.Successor = comparator;
-      comparator.Successor = resultsCollector2;
-      resultsCollector2.Successor = analyzer2;
+      comparator.Successor = analyzer2;
       analyzer2.Successor = conditionalBranch;
       conditionalBranch.FalseBranch = selector;
Index: /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithm.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithm.cs	(revision 5356)
@@ -187,5 +187,13 @@
     }
     private IslandGeneticAlgorithmMainLoop MainLoop {
-      get { return (IslandGeneticAlgorithmMainLoop)((UniformSubScopesProcessor)((VariableCreator)IslandProcessor.Successor).Successor).Successor; }
+      get {
+        return (IslandGeneticAlgorithmMainLoop)(
+          (ResultsCollector)(
+            (UniformSubScopesProcessor)(
+              (VariableCreator)IslandProcessor.Successor
+            ).Successor
+          ).Successor
+        ).Successor;
+      }
     }
     [Storable]
@@ -238,4 +246,5 @@
       UniformSubScopesProcessor ussp2 = new UniformSubScopesProcessor();
       SubScopesCounter subScopesCounter = new SubScopesCounter();
+      ResultsCollector resultsCollector = new ResultsCollector();
       IslandGeneticAlgorithmMainLoop mainLoop = new IslandGeneticAlgorithmMainLoop();
       OperatorGraph.InitialOperator = randomCreator;
@@ -262,9 +271,13 @@
 
       ussp2.Operator = subScopesCounter;
-      ussp2.Successor = mainLoop;
+      ussp2.Successor = resultsCollector;
 
       subScopesCounter.Name = "Count EvaluatedSolutions";
       subScopesCounter.ValueParameter.ActualName = "EvaluatedSolutions";
       subScopesCounter.Successor = null;
+
+      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
+      resultsCollector.ResultsParameter.ActualName = "Results";
+      resultsCollector.Successor = mainLoop;
 
       mainLoop.EmigrantsSelectorParameter.ActualName = EmigrantsSelectorParameter.Name;
Index: /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs	(revision 5356)
@@ -159,4 +159,5 @@
       UniformSubScopesProcessor uniformSubScopesProcessor3 = new UniformSubScopesProcessor();
       Placeholder evaluator = new Placeholder();
+      SubScopesCounter subScopesCounter = new SubScopesCounter();
       SubScopesProcessor subScopesProcessor2 = new SubScopesProcessor();
       BestSelector bestSelector = new BestSelector();
@@ -165,5 +166,4 @@
       IntCounter generationsCounter = new IntCounter();
       UniformSubScopesProcessor uniformSubScopesProcessor4 = new UniformSubScopesProcessor();
-      SubScopesCounter subScopesCounter = new SubScopesCounter();
       Placeholder islandAnalyzer2 = new Placeholder();
       IntCounter generationsSinceLastMigrationCounter = new IntCounter();
@@ -179,5 +179,4 @@
       Comparator generationsComparator = new Comparator();
       Placeholder analyzer2 = new Placeholder();
-      ResultsCollector resultsCollector2 = new ResultsCollector();
       ConditionalBranch generationsTerminationCondition = new ConditionalBranch();
 
@@ -197,5 +196,4 @@
       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;
 
@@ -220,4 +218,7 @@
       evaluator.Name = "Evaluator (placeholder)";
       evaluator.OperatorParameter.ActualName = EvaluatorParameter.Name;
+
+      subScopesCounter.Name = "Increment EvaluatedSolutions";
+      subScopesCounter.ValueParameter.ActualName = EvaluatedSolutionsParameter.Name;
 
       bestSelector.CopySelected = new BoolValue(false);
@@ -225,7 +226,4 @@
       bestSelector.NumberOfSelectedSubScopesParameter.ActualName = ElitesParameter.Name;
       bestSelector.QualityParameter.ActualName = QualityParameter.Name;
-
-      subScopesCounter.Name = "Increment EvaluatedSolutions";
-      subScopesCounter.ValueParameter.ActualName = EvaluatedSolutionsParameter.Name;
 
       islandAnalyzer2.Name = "Island Analyzer (placeholder)";
@@ -274,9 +272,4 @@
       analyzer2.Name = "Analyzer (placeholder)";
       analyzer2.OperatorParameter.ActualName = AnalyzerParameter.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?";
@@ -335,6 +328,5 @@
       uniformSubScopesProcessor6.Successor = null;
       generationsComparator.Successor = analyzer2;
-      analyzer2.Successor = resultsCollector2;
-      resultsCollector2.Successor = generationsTerminationCondition;
+      analyzer2.Successor = generationsTerminationCondition;
       generationsTerminationCondition.TrueBranch = null;
       generationsTerminationCondition.FalseBranch = uniformSubScopesProcessor1;
Index: /trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearch.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearch.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearch.cs	(revision 5356)
@@ -27,4 +27,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Data;
+using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
 using HeuristicLab.Optimization.Operators;
@@ -117,5 +118,11 @@
     }
     private LocalSearchMainLoop MainLoop {
-      get { return (LocalSearchMainLoop)SolutionsCreator.Successor; }
+      get {
+        return (LocalSearchMainLoop)(
+          (ResultsCollector)(
+            (VariableCreator)SolutionsCreator.Successor
+          ).Successor
+        ).Successor;
+      }
     }
     [Storable]
@@ -150,5 +157,7 @@
       RandomCreator randomCreator = new RandomCreator();
       SolutionsCreator solutionsCreator = new SolutionsCreator();
-      LocalSearchMainLoop lsMainLoop = new LocalSearchMainLoop();
+      VariableCreator variableCreator = new VariableCreator();
+      ResultsCollector resultsCollector = new ResultsCollector();
+      LocalSearchMainLoop mainLoop = new LocalSearchMainLoop();
       OperatorGraph.InitialOperator = randomCreator;
 
@@ -161,13 +170,22 @@
 
       solutionsCreator.NumberOfSolutions = new IntValue(1);
-      solutionsCreator.Successor = lsMainLoop;
-
-      lsMainLoop.MoveGeneratorParameter.ActualName = MoveGeneratorParameter.Name;
-      lsMainLoop.MoveMakerParameter.ActualName = MoveMakerParameter.Name;
-      lsMainLoop.MoveEvaluatorParameter.ActualName = MoveEvaluatorParameter.Name;
-      lsMainLoop.MaximumIterationsParameter.ActualName = MaximumIterationsParameter.Name;
-      lsMainLoop.RandomParameter.ActualName = RandomCreator.RandomParameter.ActualName;
-      lsMainLoop.ResultsParameter.ActualName = "Results";
-      lsMainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name;
+      solutionsCreator.Successor = variableCreator;
+
+      variableCreator.Name = "Initialize EvaluatedMoves";
+      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("EvaluatedMoves", new IntValue()));
+      variableCreator.Successor = resultsCollector;
+
+      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Moves", null, "EvaluatedMoves"));
+      resultsCollector.ResultsParameter.ActualName = "Results";
+      resultsCollector.Successor = mainLoop;
+
+      mainLoop.MoveGeneratorParameter.ActualName = MoveGeneratorParameter.Name;
+      mainLoop.MoveMakerParameter.ActualName = MoveMakerParameter.Name;
+      mainLoop.MoveEvaluatorParameter.ActualName = MoveEvaluatorParameter.Name;
+      mainLoop.MaximumIterationsParameter.ActualName = MaximumIterationsParameter.Name;
+      mainLoop.RandomParameter.ActualName = RandomCreator.RandomParameter.ActualName;
+      mainLoop.ResultsParameter.ActualName = "Results";
+      mainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name;
+      mainLoop.EvaluatedMovesParameter.ActualName = "EvaluatedMoves";
 
       moveQualityAnalyzer = new BestAverageWorstQualityAnalyzer();
Index: /trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchMainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchMainLoop.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchMainLoop.cs	(revision 5356)
@@ -70,10 +70,6 @@
       get { return (ValueLookupParameter<IOperator>)Parameters["Analyzer"]; }
     }
-
-    private ScopeParameter CurrentScopeParameter {
-      get { return (ScopeParameter)Parameters["CurrentScope"]; }
-    }
-    public IScope CurrentScope {
-      get { return CurrentScopeParameter.ActualValue; }
+    public LookupParameter<IntValue> EvaluatedMovesParameter {
+      get { return (LookupParameter<IntValue>)Parameters["EvaluatedMoves"]; }
     }
     #endregion
@@ -107,5 +103,5 @@
 
       Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze the solution and moves."));
-      Parameters.Add(new ScopeParameter("CurrentScope", "The current scope which represents a population of solutions on which the TS should be applied."));
+      Parameters.Add(new LookupParameter<IntValue>("EvaluatedMoves", "The number of evaluated moves."));
       #endregion
 
@@ -137,5 +133,4 @@
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Iterations", new IntValue(0))); // Class LocalSearch expects this to be called Iterations
       variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("BestQuality", new DoubleValue(0)));
-      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("EvaluatedMoves", new IntValue(0)));
 
       bestQualityInitializer.Name = "Initialize BestQuality";
@@ -149,5 +144,4 @@
       resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("Iterations"));
       resultsCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
-      resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Moves", null, "EvaluatedMoves"));
       resultsCollector1.ResultsParameter.ActualName = ResultsParameter.Name;
 
@@ -161,5 +155,5 @@
 
       subScopesCounter.Name = "Increment EvaluatedMoves";
-      subScopesCounter.ValueParameter.ActualName = "EvaluatedMoves";
+      subScopesCounter.ValueParameter.ActualName = EvaluatedMovesParameter.Name;
 
       bestSelector.CopySelected = new BoolValue(false);
Index: /trunk/sources/HeuristicLab.Algorithms.NSGA2/3.3/NSGA2.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.NSGA2/3.3/NSGA2.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.NSGA2/3.3/NSGA2.cs	(revision 5356)
@@ -26,4 +26,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Data;
+using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
 using HeuristicLab.Optimization.Operators;
@@ -139,8 +140,12 @@
     }
     private RankAndCrowdingSorter RankAndCrowdingSorter {
-      get { return (RankAndCrowdingSorter)SolutionsCreator.Successor; }
+      get { return (RankAndCrowdingSorter)((SubScopesCounter)SolutionsCreator.Successor).Successor; }
     }
     private NSGA2MainLoop MainLoop {
-      get { return (NSGA2MainLoop)RankAndCrowdingSorter.Successor; }
+      get {
+        return (NSGA2MainLoop)(
+          (ResultsCollector)RankAndCrowdingSorter.Successor
+        ).Successor;
+      }
     }
     #endregion
@@ -151,5 +156,6 @@
     [StorableConstructor]
     protected NSGA2(bool deserializing) : base(deserializing) { }
-    protected NSGA2(NSGA2 original, Cloner cloner) : base (original, cloner) {
+    protected NSGA2(NSGA2 original, Cloner cloner)
+      : base(original, cloner) {
       paretoFrontAnalyzer = (RankBasedParetoFrontAnalyzer)cloner.Clone(original.paretoFrontAnalyzer);
       AttachEventHandlers();
@@ -170,7 +176,9 @@
       RandomCreator randomCreator = new RandomCreator();
       SolutionsCreator solutionsCreator = new SolutionsCreator();
+      SubScopesCounter subScopesCounter = new SubScopesCounter();
       RankAndCrowdingSorter rankAndCrowdingSorter = new RankAndCrowdingSorter();
+      ResultsCollector resultsCollector = new ResultsCollector();
       NSGA2MainLoop mainLoop = new NSGA2MainLoop();
-      
+
       OperatorGraph.InitialOperator = randomCreator;
 
@@ -183,9 +191,17 @@
 
       solutionsCreator.NumberOfSolutionsParameter.ActualName = PopulationSizeParameter.Name;
-      solutionsCreator.Successor = rankAndCrowdingSorter;
+      solutionsCreator.Successor = subScopesCounter;
+
+      subScopesCounter.Name = "Initialize EvaluatedSolutions";
+      subScopesCounter.ValueParameter.ActualName = "EvaluatedSolutions";
+      subScopesCounter.Successor = rankAndCrowdingSorter;
 
       rankAndCrowdingSorter.CrowdingDistanceParameter.ActualName = "CrowdingDistance";
       rankAndCrowdingSorter.RankParameter.ActualName = "Rank";
-      rankAndCrowdingSorter.Successor = mainLoop;
+      rankAndCrowdingSorter.Successor = resultsCollector;
+
+      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
+      resultsCollector.ResultsParameter.ActualName = "Results";
+      resultsCollector.Successor = mainLoop;
 
       mainLoop.PopulationSizeParameter.ActualName = PopulationSizeParameter.Name;
@@ -199,4 +215,5 @@
       mainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name;
       mainLoop.ResultsParameter.ActualName = "Results";
+      mainLoop.EvaluatedSolutionsParameter.ActualName = "EvaluatedSolutions";
 
       foreach (ISelector selector in ApplicationManager.Manager.GetInstances<ISelector>().Where(x => !(x is ISingleObjectiveSelector)).OrderBy(x => x.Name))
@@ -218,5 +235,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      return new NSGA2(this, cloner);      
+      return new NSGA2(this, cloner);
     }
 
Index: /trunk/sources/HeuristicLab.Algorithms.NSGA2/3.3/NSGA2MainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.NSGA2/3.3/NSGA2MainLoop.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.NSGA2/3.3/NSGA2MainLoop.cs	(revision 5356)
@@ -75,4 +75,7 @@
     public ValueLookupParameter<IOperator> AnalyzerParameter {
       get { return (ValueLookupParameter<IOperator>)Parameters["Analyzer"]; }
+    }
+    public LookupParameter<IntValue> EvaluatedSolutionsParameter {
+      get { return (LookupParameter<IntValue>)Parameters["EvaluatedSolutions"]; }
     }
     #endregion
@@ -101,4 +104,5 @@
       Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The variable collection where results should be stored."));
       Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze each generation."));
+      Parameters.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "The number of times solutions have been evaluated."));
       #endregion
 
@@ -119,4 +123,5 @@
       UniformSubScopesProcessor uniformSubScopesProcessor2 = new UniformSubScopesProcessor();
       Placeholder evaluator = new Placeholder();
+      SubScopesCounter subScopesCounter = new SubScopesCounter();
       MergingReducer mergingReducer = new MergingReducer();
       RankAndCrowdingSorter rankAndCrowdingSorter = new RankAndCrowdingSorter();
@@ -125,5 +130,4 @@
       IntCounter intCounter = new IntCounter();
       Comparator comparator = new Comparator();
-      ResultsCollector resultsCollector2 = new ResultsCollector();
       Placeholder analyzer2 = new Placeholder();
       ConditionalBranch conditionalBranch = new ConditionalBranch();
@@ -163,4 +167,7 @@
       evaluator.Name = "Evaluator";
       evaluator.OperatorParameter.ActualName = EvaluatorParameter.Name;
+
+      subScopesCounter.Name = "Increment EvaluatedSolutions";
+      subScopesCounter.ValueParameter.ActualName = EvaluatedSolutionsParameter.Name;
 
       rankAndCrowdingSorter.CrowdingDistanceParameter.ActualName = "CrowdingDistance";
@@ -177,7 +184,4 @@
       comparator.ResultParameter.ActualName = "Terminate";
       comparator.RightSideParameter.ActualName = MaximumGenerationsParameter.Name;
-
-      resultsCollector2.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
-      resultsCollector2.ResultsParameter.ActualName = ResultsParameter.Name;
 
       analyzer2.Name = "Analyzer";
@@ -210,6 +214,7 @@
       subScopesRemover.Successor = null;
       uniformSubScopesProcessor2.Operator = evaluator;
-      uniformSubScopesProcessor2.Successor = null;
+      uniformSubScopesProcessor2.Successor = subScopesCounter;
       evaluator.Successor = null;
+      subScopesCounter.Successor = null;
       mergingReducer.Successor = rankAndCrowdingSorter;
       rankAndCrowdingSorter.Successor = leftSelector;
@@ -217,6 +222,5 @@
       rightReducer.Successor = intCounter;
       intCounter.Successor = comparator;
-      comparator.Successor = resultsCollector2;
-      resultsCollector2.Successor = analyzer2;
+      comparator.Successor = analyzer2;
       analyzer2.Successor = conditionalBranch;
       conditionalBranch.FalseBranch = selector;
Index: /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithm.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithm.cs	(revision 5356)
@@ -239,5 +239,13 @@
     }
     private IslandOffspringSelectionGeneticAlgorithmMainLoop MainLoop {
-      get { return (IslandOffspringSelectionGeneticAlgorithmMainLoop)IslandProcessor.Successor; }
+      get {
+        return (IslandOffspringSelectionGeneticAlgorithmMainLoop)(
+          (ResultsCollector)(
+            (UniformSubScopesProcessor)(
+              (VariableCreator)IslandProcessor.Successor
+            ).Successor
+          ).Successor
+        ).Successor;
+      }
     }
     [Storable]
@@ -300,4 +308,8 @@
       UniformSubScopesProcessor ussp1 = new UniformSubScopesProcessor();
       SolutionsCreator solutionsCreator = new SolutionsCreator();
+      VariableCreator variableCreator = new VariableCreator();
+      UniformSubScopesProcessor ussp2 = new UniformSubScopesProcessor();
+      SubScopesCounter subScopesCounter = new SubScopesCounter();
+      ResultsCollector resultsCollector = new ResultsCollector();
       IslandOffspringSelectionGeneticAlgorithmMainLoop mainLoop = new IslandOffspringSelectionGeneticAlgorithmMainLoop();
       OperatorGraph.InitialOperator = randomCreator;
@@ -314,8 +326,22 @@
 
       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 = resultsCollector;
+
+      subScopesCounter.Name = "Increment EvaluatedSolutions";
+      subScopesCounter.ValueParameter.ActualName = "EvaluatedSolutions";
+
+      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", "", "EvaluatedSolutions"));
+      resultsCollector.ResultsParameter.ActualName = "Results";
+      resultsCollector.Successor = mainLoop;
 
       mainLoop.EmigrantsSelectorParameter.ActualName = EmigrantsSelectorParameter.Name;
@@ -339,4 +365,5 @@
       mainLoop.MaximumSelectionPressureParameter.ActualName = MaximumSelectionPressureParameter.Name;
       mainLoop.OffspringSelectionBeforeMutationParameter.ActualName = OffspringSelectionBeforeMutationParameter.Name;
+      mainLoop.EvaluatedSolutionsParameter.ActualName = "EvaluatedSolutions";
       mainLoop.Successor = null;
 
Index: /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithmMainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithmMainLoop.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithmMainLoop.cs	(revision 5356)
@@ -123,4 +123,7 @@
     public ValueLookupParameter<IOperator> IslandAnalyzerParameter {
       get { return (ValueLookupParameter<IOperator>)Parameters["IslandAnalyzer"]; }
+    }
+    public LookupParameter<IntValue> EvaluatedSolutionsParameter {
+      get { return (LookupParameter<IntValue>)Parameters["EvaluatedSolutions"]; }
     }
     #endregion
@@ -166,4 +169,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 solutions have been evaluated."));
       #endregion
 
@@ -177,5 +181,4 @@
       Placeholder analyzer1 = new Placeholder();
       ResultsCollector resultsCollector1 = new ResultsCollector();
-      ResultsCollector resultsCollector2 = new ResultsCollector();
       UniformSubScopesProcessor uniformSubScopesProcessor1 = new UniformSubScopesProcessor();
       ConditionalBranch islandTerminatedBySelectionPressure1 = new ConditionalBranch();
@@ -183,6 +186,4 @@
       Placeholder islandAnalyzer2 = new Placeholder();
       ResultsCollector islandResultsCollector2 = new ResultsCollector();
-      IntCounter islandEvaluatedSolutionsCounter = new IntCounter();
-      Assigner islandEvaluatedSolutionsAssigner = new Assigner();
       Comparator islandSelectionPressureComparator = new Comparator();
       ConditionalBranch islandTerminatedBySelectionPressure2 = new ConditionalBranch();
@@ -206,5 +207,4 @@
       Placeholder comparisonFactorModifier = new Placeholder();
       Placeholder analyzer2 = new Placeholder();
-      ResultsCollector resultsCollector3 = new ResultsCollector();
       ConditionalBranch generationsTerminationCondition = new ConditionalBranch();
       ConditionalBranch terminatedIslandsCondition = new ConditionalBranch();
@@ -215,8 +215,6 @@
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("GenerationsSinceLastMigration", new IntValue(0)));
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("TerminatedIslands", new IntValue(0)));
-      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("EvaluatedSolutions", new IntValue(0)));
 
       islandVariableCreator.CollectedValues.Add(new ValueParameter<ResultCollection>(ResultsParameter.Name, new ResultCollection()));
-      islandVariableCreator.CollectedValues.Add(new ValueParameter<IntValue>("IslandEvaluatedSolutions", new IntValue(0)));
       islandVariableCreator.CollectedValues.Add(new ValueParameter<BoolValue>("TerminateSelectionPressure", new BoolValue(false)));
       islandVariableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("SelectionPressure", new DoubleValue(0)));
@@ -243,8 +241,4 @@
       resultsCollector1.ResultsParameter.ActualName = ResultsParameter.Name;
 
-      resultsCollector2.CopyValue = new BoolValue(true);
-      resultsCollector2.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
-      resultsCollector2.ResultsParameter.ActualName = ResultsParameter.Name;
-
       islandTerminatedBySelectionPressure1.Name = "Island Terminated ?";
       islandTerminatedBySelectionPressure1.ConditionParameter.ActualName = "TerminateSelectionPressure";
@@ -254,5 +248,5 @@
       mainOperator.CurrentSuccessRatioParameter.ActualName = "CurrentSuccessRatio";
       mainOperator.ElitesParameter.ActualName = ElitesParameter.Name;
-      mainOperator.EvaluatedSolutionsParameter.ActualName = "IslandEvaluatedSolutions";
+      mainOperator.EvaluatedSolutionsParameter.ActualName = EvaluatedSolutionsParameter.Name;
       mainOperator.EvaluatorParameter.ActualName = EvaluatorParameter.Name;
       mainOperator.MaximizationParameter.ActualName = MaximizationParameter.Name;
@@ -274,13 +268,4 @@
       islandResultsCollector2.ResultsParameter.ActualName = "Results";
 
-      islandEvaluatedSolutionsCounter.Name = "Update EvaluatedSolutions";
-      islandEvaluatedSolutionsCounter.ValueParameter.ActualName = "EvaluatedSolutions";
-      islandEvaluatedSolutionsCounter.Increment = null;
-      islandEvaluatedSolutionsCounter.IncrementParameter.ActualName = "IslandEvaluatedSolutions";
-
-      islandEvaluatedSolutionsAssigner.Name = "Reset EvaluatedSolutions";
-      islandEvaluatedSolutionsAssigner.LeftSideParameter.ActualName = "IslandEvaluatedSolutions";
-      islandEvaluatedSolutionsAssigner.RightSideParameter.Value = new IntValue(0);
-
       islandSelectionPressureComparator.Name = "SelectionPressure >= MaximumSelectionPressure ?";
       islandSelectionPressureComparator.LeftSideParameter.ActualName = "SelectionPressure";
@@ -352,5 +337,5 @@
       maxEvaluatedSolutionsComparator.Name = "EvaluatedSolutions >= MaximumEvaluatedSolutions ?";
       maxEvaluatedSolutionsComparator.Comparison = new Comparison(ComparisonType.GreaterOrEqual);
-      maxEvaluatedSolutionsComparator.LeftSideParameter.ActualName = "EvaluatedSolutions";
+      maxEvaluatedSolutionsComparator.LeftSideParameter.ActualName = EvaluatedSolutionsParameter.Name;
       maxEvaluatedSolutionsComparator.ResultParameter.ActualName = "TerminateEvaluatedSolutions";
       maxEvaluatedSolutionsComparator.RightSideParameter.ActualName = "MaximumEvaluatedSolutions";
@@ -361,8 +346,4 @@
       analyzer2.Name = "Analyzer (placeholder)";
       analyzer2.OperatorParameter.ActualName = AnalyzerParameter.Name;
-
-      resultsCollector3.CopyValue = new BoolValue(true);
-      resultsCollector3.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
-      resultsCollector3.ResultsParameter.ActualName = ResultsParameter.Name;
 
       generationsTerminationCondition.Name = "Terminate (MaxGenerations) ?";
@@ -386,6 +367,5 @@
       comparisonFactorInitializer.Successor = analyzer1;
       analyzer1.Successor = resultsCollector1;
-      resultsCollector1.Successor = resultsCollector2;
-      resultsCollector2.Successor = uniformSubScopesProcessor1;
+      resultsCollector1.Successor = uniformSubScopesProcessor1;
       uniformSubScopesProcessor1.Operator = islandTerminatedBySelectionPressure1;
       uniformSubScopesProcessor1.Successor = generationsCounter;
@@ -395,7 +375,5 @@
       mainOperator.Successor = islandAnalyzer2;
       islandAnalyzer2.Successor = islandResultsCollector2;
-      islandResultsCollector2.Successor = islandEvaluatedSolutionsCounter;
-      islandEvaluatedSolutionsCounter.Successor = islandEvaluatedSolutionsAssigner;
-      islandEvaluatedSolutionsAssigner.Successor = islandSelectionPressureComparator;
+      islandResultsCollector2.Successor = islandSelectionPressureComparator;
       islandSelectionPressureComparator.Successor = islandTerminatedBySelectionPressure2;
       islandTerminatedBySelectionPressure2.TrueBranch = terminatedIslandsCounter;
@@ -423,6 +401,5 @@
       maxEvaluatedSolutionsComparator.Successor = comparisonFactorModifier;
       comparisonFactorModifier.Successor = analyzer2;
-      analyzer2.Successor = resultsCollector3;
-      resultsCollector3.Successor = generationsTerminationCondition;
+      analyzer2.Successor = generationsTerminationCondition;
       generationsTerminationCondition.TrueBranch = null;
       generationsTerminationCondition.FalseBranch = terminatedIslandsCondition;
Index: /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithm.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithm.cs	(revision 5356)
@@ -26,4 +26,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Data;
+using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
 using HeuristicLab.Optimization.Operators;
@@ -190,5 +191,11 @@
     }
     private OffspringSelectionGeneticAlgorithmMainLoop MainLoop {
-      get { return (OffspringSelectionGeneticAlgorithmMainLoop)SolutionsCreator.Successor; }
+      get {
+        return (OffspringSelectionGeneticAlgorithmMainLoop)(
+          (ResultsCollector)(
+            (SubScopesCounter)SolutionsCreator.Successor
+          ).Successor
+        ).Successor;
+      }
     }
     [Storable]
@@ -236,4 +243,6 @@
       RandomCreator randomCreator = new RandomCreator();
       SolutionsCreator solutionsCreator = new SolutionsCreator();
+      SubScopesCounter subScopesCounter = new SubScopesCounter();
+      ResultsCollector resultsCollector = new ResultsCollector();
       OffspringSelectionGeneticAlgorithmMainLoop mainLoop = new OffspringSelectionGeneticAlgorithmMainLoop();
       OperatorGraph.InitialOperator = randomCreator;
@@ -247,5 +256,13 @@
 
       solutionsCreator.NumberOfSolutionsParameter.ActualName = PopulationSizeParameter.Name;
-      solutionsCreator.Successor = mainLoop;
+      solutionsCreator.Successor = subScopesCounter;
+
+      subScopesCounter.Name = "Initialize EvaluatedSolutions";
+      subScopesCounter.ValueParameter.ActualName = "EvaluatedSolutions";
+      subScopesCounter.Successor = resultsCollector;
+
+      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", "", "EvaluatedSolutions"));
+      resultsCollector.ResultsParameter.ActualName = "Results";
+      resultsCollector.Successor = mainLoop;
 
       mainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name;
@@ -255,4 +272,5 @@
       mainLoop.CrossoverParameter.ActualName = CrossoverParameter.Name;
       mainLoop.ElitesParameter.ActualName = ElitesParameter.Name;
+      mainLoop.EvaluatedSolutionsParameter.ActualName = "EvaluatedSolutions";
       mainLoop.MaximumGenerationsParameter.ActualName = MaximumGenerationsParameter.Name;
       mainLoop.MaximumSelectionPressureParameter.ActualName = MaximumSelectionPressureParameter.Name;
Index: /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithmMainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithmMainLoop.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithmMainLoop.cs	(revision 5356)
@@ -89,4 +89,7 @@
     public ValueLookupParameter<BoolValue> OffspringSelectionBeforeMutationParameter {
       get { return (ValueLookupParameter<BoolValue>)Parameters["OffspringSelectionBeforeMutation"]; }
+    }
+    public LookupParameter<IntValue> EvaluatedSolutionsParameter {
+      get { return (LookupParameter<IntValue>)Parameters["EvaluatedSolutions"]; }
     }
     #endregion
@@ -126,4 +129,5 @@
       Parameters.Add(new ValueLookupParameter<DoubleValue>("MaximumSelectionPressure", "The maximum selection pressure that terminates the algorithm."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("OffspringSelectionBeforeMutation", "True if the offspring selection step should be applied before mutation, false if it should be applied after mutation."));
+      Parameters.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "The number of times solutions have been evaluated."));
       #endregion
 
@@ -133,5 +137,4 @@
       Placeholder analyzer1 = new Placeholder();
       ResultsCollector resultsCollector1 = new ResultsCollector();
-      ResultsCollector resultsCollector2 = new ResultsCollector();
       OffspringSelectionGeneticAlgorithmMainOperator mainOperator = new OffspringSelectionGeneticAlgorithmMainOperator();
       IntCounter generationsCounter = new IntCounter();
@@ -141,5 +144,4 @@
       Placeholder comparisonFactorModifier = new Placeholder();
       Placeholder analyzer2 = new Placeholder();
-      ResultsCollector resultsCollector3 = new ResultsCollector();
       ConditionalBranch conditionalBranch1 = new ConditionalBranch();
       ConditionalBranch conditionalBranch2 = new ConditionalBranch();
@@ -147,5 +149,4 @@
 
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Generations", new IntValue(0))); // Class OffspringSelectionGeneticAlgorithm expects this to be called Generations
-      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("EvaluatedSolutions", new IntValue(0)));
       variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("SelectionPressure", new DoubleValue(0)));
       variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("CurrentSuccessRatio", new DoubleValue(0)));
@@ -165,13 +166,9 @@
       resultsCollector1.ResultsParameter.ActualName = ResultsParameter.Name;
 
-      resultsCollector2.CopyValue = new BoolValue(true);
-      resultsCollector2.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
-      resultsCollector2.ResultsParameter.ActualName = ResultsParameter.Name;
-
       mainOperator.ComparisonFactorParameter.ActualName = ComparisonFactorParameter.Name;
       mainOperator.CrossoverParameter.ActualName = CrossoverParameter.Name;
       mainOperator.CurrentSuccessRatioParameter.ActualName = "CurrentSuccessRatio";
       mainOperator.ElitesParameter.ActualName = ElitesParameter.Name;
-      mainOperator.EvaluatedSolutionsParameter.ActualName = "EvaluatedSolutions";
+      mainOperator.EvaluatedSolutionsParameter.ActualName = EvaluatedSolutionsParameter.Name;
       mainOperator.EvaluatorParameter.ActualName = EvaluatorParameter.Name;
       mainOperator.MaximizationParameter.ActualName = MaximizationParameter.Name;
@@ -200,5 +197,5 @@
 
       maxEvaluatedSolutionsComparator.Comparison = new Comparison(ComparisonType.GreaterOrEqual);
-      maxEvaluatedSolutionsComparator.LeftSideParameter.ActualName = "EvaluatedSolutions";
+      maxEvaluatedSolutionsComparator.LeftSideParameter.ActualName = EvaluatedSolutionsParameter.Name;
       maxEvaluatedSolutionsComparator.ResultParameter.ActualName = "TerminateEvaluatedSolutions";
       maxEvaluatedSolutionsComparator.RightSideParameter.ActualName = "MaximumEvaluatedSolutions";
@@ -209,8 +206,4 @@
       analyzer2.Name = "Analyzer (placeholder)";
       analyzer2.OperatorParameter.ActualName = AnalyzerParameter.Name;
-
-      resultsCollector3.CopyValue = new BoolValue(true);
-      resultsCollector3.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
-      resultsCollector3.ResultsParameter.ActualName = ResultsParameter.Name;
 
       conditionalBranch1.Name = "MaximumSelectionPressure reached?";
@@ -229,6 +222,5 @@
       comparisonFactorInitializer.Successor = analyzer1;
       analyzer1.Successor = resultsCollector1;
-      resultsCollector1.Successor = resultsCollector2;
-      resultsCollector2.Successor = mainOperator;
+      resultsCollector1.Successor = mainOperator;
       mainOperator.Successor = generationsCounter;
       generationsCounter.Successor = maxGenerationsComparator;
@@ -237,6 +229,5 @@
       maxEvaluatedSolutionsComparator.Successor = comparisonFactorModifier;
       comparisonFactorModifier.Successor = analyzer2;
-      analyzer2.Successor = resultsCollector3;
-      resultsCollector3.Successor = conditionalBranch1;
+      analyzer2.Successor = conditionalBranch1;
       conditionalBranch1.FalseBranch = conditionalBranch2;
       conditionalBranch1.TrueBranch = null;
Index: /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithmMainOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithmMainOperator.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithmMainOperator.cs	(revision 5356)
@@ -129,5 +129,5 @@
       UniformSubScopesProcessor uniformSubScopesProcessor2 = new UniformSubScopesProcessor();
       Placeholder evaluator1 = new Placeholder();
-      IntCounter evaluationCounter1 = new IntCounter();
+      SubScopesCounter subScopesCounter1 = new SubScopesCounter();
       WeightedParentsQualityComparator qualityComparer1 = new WeightedParentsQualityComparator();
       SubScopesRemover subScopesRemover1 = new SubScopesRemover();
@@ -141,5 +141,5 @@
       UniformSubScopesProcessor uniformSubScopesProcessor4 = new UniformSubScopesProcessor();
       Placeholder evaluator2 = new Placeholder();
-      IntCounter evaluationCounter2 = new IntCounter();
+      SubScopesCounter subScopesCounter2 = new SubScopesCounter();
       MergingReducer mergingReducer1 = new MergingReducer();
       UniformSubScopesProcessor uniformSubScopesProcessor5 = new UniformSubScopesProcessor();
@@ -149,5 +149,5 @@
       UniformSubScopesProcessor uniformSubScopesProcessor6 = new UniformSubScopesProcessor();
       Placeholder evaluator3 = new Placeholder();
-      IntCounter evaluationCounter3 = new IntCounter();
+      SubScopesCounter subScopesCounter3 = new SubScopesCounter();
       WeightedParentsQualityComparator qualityComparer2 = new WeightedParentsQualityComparator();
       SubScopesRemover subScopesRemover2 = new SubScopesRemover();
@@ -176,7 +176,6 @@
       evaluator1.OperatorParameter.ActualName = EvaluatorParameter.Name;
 
-      evaluationCounter1.Name = "EvaluatedSolutions++";
-      evaluationCounter1.Increment = new IntValue(1);
-      evaluationCounter1.ValueParameter.ActualName = EvaluatedSolutionsParameter.Name;
+      subScopesCounter1.Name = "Increment EvaluatedSolutions";
+      subScopesCounter1.ValueParameter.ActualName = EvaluatedSolutionsParameter.Name;
 
       qualityComparer1.ComparisonFactorParameter.ActualName = ComparisonFactorParameter.Name;
@@ -209,7 +208,6 @@
       evaluator2.OperatorParameter.ActualName = EvaluatorParameter.Name;
 
-      evaluationCounter2.Name = "EvaluatedSolutions++";
-      evaluationCounter2.Increment = new IntValue(1);
-      evaluationCounter2.ValueParameter.ActualName = EvaluatedSolutionsParameter.Name;
+      subScopesCounter2.Name = "Increment EvaluatedSolutions";
+      subScopesCounter2.ValueParameter.ActualName = EvaluatedSolutionsParameter.Name;
 
       crossover2.Name = "Crossover (placeholder)";
@@ -227,7 +225,6 @@
       evaluator3.OperatorParameter.ActualName = EvaluatorParameter.Name;
 
-      evaluationCounter3.Name = "EvaluatedSolutions++";
-      evaluationCounter3.Increment = new IntValue(1);
-      evaluationCounter3.ValueParameter.ActualName = EvaluatedSolutionsParameter.Name;
+      subScopesCounter3.Name = "Increment EvaluatedSolutions";
+      subScopesCounter3.ValueParameter.ActualName = EvaluatedSolutionsParameter.Name;
 
       qualityComparer2.ComparisonFactorParameter.ActualName = ComparisonFactorParameter.Name;
@@ -272,9 +269,9 @@
       crossover1.Successor = null;
       uniformSubScopesProcessor2.Operator = evaluator1;
-      uniformSubScopesProcessor2.Successor = uniformSubScopesProcessor3;
-      evaluator1.Successor = evaluationCounter1;
-      evaluationCounter1.Successor = qualityComparer1;
+      uniformSubScopesProcessor2.Successor = subScopesCounter1;
+      evaluator1.Successor = qualityComparer1;
       qualityComparer1.Successor = subScopesRemover1;
       subScopesRemover1.Successor = null;
+      subScopesCounter1.Successor = uniformSubScopesProcessor3;
       uniformSubScopesProcessor3.Operator = mutationBranch1;
       uniformSubScopesProcessor3.Successor = conditionalSelector;
@@ -290,7 +287,7 @@
       subScopesProcessor2.Successor = mergingReducer1;
       uniformSubScopesProcessor4.Operator = evaluator2;
-      uniformSubScopesProcessor4.Successor = null;
-      evaluator2.Successor = evaluationCounter2;
-      evaluationCounter2.Successor = null;
+      uniformSubScopesProcessor4.Successor = subScopesCounter2;
+      evaluator2.Successor = null;
+      subScopesCounter2.Successor = null;
       mergingReducer1.Successor = null;
       uniformSubScopesProcessor5.Operator = crossover2;
@@ -302,9 +299,9 @@
       mutator2.Successor = null;
       uniformSubScopesProcessor6.Operator = evaluator3;
-      uniformSubScopesProcessor6.Successor = null;
-      evaluator3.Successor = evaluationCounter3;
-      evaluationCounter3.Successor = qualityComparer2;
+      uniformSubScopesProcessor6.Successor = subScopesCounter3;
+      evaluator3.Successor = qualityComparer2;
       qualityComparer2.Successor = subScopesRemover2;
       subScopesRemover2.Successor = null;
+      subScopesCounter3.Successor = null;
       offspringSelector.OffspringCreator = selector;
       offspringSelector.Successor = subScopesProcessor3;
Index: /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/SASEGASA.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/SASEGASA.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/SASEGASA.cs	(revision 5356)
@@ -215,5 +215,13 @@
     }
     private SASEGASAMainLoop MainLoop {
-      get { return (SASEGASAMainLoop)VillageProcessor.Successor; }
+      get {
+        return (SASEGASAMainLoop)(
+          (ResultsCollector)(
+            (UniformSubScopesProcessor)(
+              (VariableCreator)VillageProcessor.Successor
+            ).Successor
+          ).Successor
+        ).Successor;
+      }
     }
     [Storable]
@@ -272,4 +280,8 @@
       UniformSubScopesProcessor ussp1 = new UniformSubScopesProcessor();
       SolutionsCreator solutionsCreator = new SolutionsCreator();
+      VariableCreator variableCreator = new VariableCreator();
+      UniformSubScopesProcessor ussp2 = new UniformSubScopesProcessor();
+      SubScopesCounter subScopesCounter = new SubScopesCounter();
+      ResultsCollector resultsCollector = new ResultsCollector();
       SASEGASAMainLoop mainLoop = new SASEGASAMainLoop();
       OperatorGraph.InitialOperator = randomCreator;
@@ -286,8 +298,22 @@
 
       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 = resultsCollector;
+
+      subScopesCounter.Name = "Increment EvaluatedSolutions";
+      subScopesCounter.ValueParameter.ActualName = "EvaluatedSolutions";
+
+      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", "", "EvaluatedSolutions"));
+      resultsCollector.ResultsParameter.ActualName = "Results";
+      resultsCollector.Successor = mainLoop;
 
       mainLoop.NumberOfVillagesParameter.ActualName = NumberOfVillagesParameter.Name;
@@ -306,4 +332,5 @@
       mainLoop.MaximumGenerationsParameter.ActualName = MaximumGenerationsParameter.Name;
       mainLoop.OffspringSelectionBeforeMutationParameter.ActualName = OffspringSelectionBeforeMutationParameter.Name;
+      mainLoop.EvaluatedSolutionsParameter.ActualName = "EvaluatedSolutions";
       mainLoop.Successor = null;
 
Index: /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/SASEGASAMainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/SASEGASAMainLoop.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/SASEGASAMainLoop.cs	(revision 5356)
@@ -105,4 +105,7 @@
     public ValueLookupParameter<BoolValue> OffspringSelectionBeforeMutationParameter {
       get { return (ValueLookupParameter<BoolValue>)Parameters["OffspringSelectionBeforeMutation"]; }
+    }
+    public LookupParameter<IntValue> EvaluatedSolutionsParameter {
+      get { return (LookupParameter<IntValue>)Parameters["EvaluatedSolutions"]; }
     }
     #endregion
@@ -142,4 +145,5 @@
       Parameters.Add(new ValueLookupParameter<IntValue>("MaximumGenerations", "The maximum genreation that terminates the algorithm."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("OffspringSelectionBeforeMutation", "True if the offspring selection step should be applied before mutation, false if it should be applied after mutation."));
+      Parameters.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "The number of times solutions have been evaluated."));
       #endregion
 
@@ -155,5 +159,4 @@
       Placeholder analyzer1 = new Placeholder();
       ResultsCollector resultsCollector1 = new ResultsCollector();
-      ResultsCollector resultsCollector2 = new ResultsCollector();
       UniformSubScopesProcessor uniformSubScopesProcessor1 = new UniformSubScopesProcessor();
       ConditionalBranch villageTerminatedBySelectionPressure1 = new ConditionalBranch();
@@ -161,6 +164,4 @@
       Placeholder villageAnalyzer2 = new Placeholder();
       ResultsCollector villageResultsCollector2 = new ResultsCollector();
-      IntCounter evaluatedSolutionsCounter = new IntCounter();
-      Assigner villageEvaluatedSolutionsAssigner = new Assigner();
       Comparator villageSelectionPressureComparator = new Comparator();
       ConditionalBranch villageTerminatedBySelectionPressure2 = new ConditionalBranch();
@@ -187,5 +188,4 @@
       Comparator maximumEvaluatedSolutionsComparator = new Comparator();
       Placeholder analyzer2 = new Placeholder();
-      ResultsCollector resultsCollector3 = new ResultsCollector();
       ConditionalBranch terminationCondition = new ConditionalBranch();
       ConditionalBranch maximumGenerationsTerminationCondition = new ConditionalBranch();
@@ -195,5 +195,4 @@
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Generations", new IntValue(0))); // Class SASEGASA expects this to be called Generations
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("GenerationsSinceLastReunification", new IntValue(0)));
-      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("EvaluatedSolutions", new IntValue(0)));
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("TerminatedVillages", new IntValue(0)));
 
@@ -208,5 +207,4 @@
 
       villageVariableCreator.CollectedValues.Add(new ValueParameter<ResultCollection>("Results", new ResultCollection()));
-      villageVariableCreator.CollectedValues.Add(new ValueParameter<IntValue>("VillageEvaluatedSolutions", new IntValue(0)));
       villageVariableCreator.CollectedValues.Add(new ValueParameter<BoolValue>("TerminateSelectionPressure", new BoolValue(false)));
       villageVariableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("SelectionPressure", new DoubleValue(0)));
@@ -231,8 +229,4 @@
       resultsCollector1.ResultsParameter.ActualName = ResultsParameter.Name;
 
-      resultsCollector2.CopyValue = new BoolValue(true);
-      resultsCollector2.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
-      resultsCollector2.ResultsParameter.ActualName = ResultsParameter.Name;
-
       villageTerminatedBySelectionPressure1.Name = "Village Terminated ?";
       villageTerminatedBySelectionPressure1.ConditionParameter.ActualName = "TerminateSelectionPressure";
@@ -242,5 +236,5 @@
       mainOperator.CurrentSuccessRatioParameter.ActualName = "CurrentSuccessRatio";
       mainOperator.ElitesParameter.ActualName = ElitesParameter.Name;
-      mainOperator.EvaluatedSolutionsParameter.ActualName = "VillageEvaluatedSolutions";
+      mainOperator.EvaluatedSolutionsParameter.ActualName = EvaluatedSolutionsParameter.Name;
       mainOperator.EvaluatorParameter.ActualName = EvaluatorParameter.Name;
       mainOperator.MaximizationParameter.ActualName = MaximizationParameter.Name;
@@ -262,13 +256,4 @@
       villageResultsCollector2.ResultsParameter.ActualName = "Results";
 
-      evaluatedSolutionsCounter.Name = "Update EvaluatedSolutions";
-      evaluatedSolutionsCounter.ValueParameter.ActualName = "EvaluatedSolutions";
-      evaluatedSolutionsCounter.Increment = null;
-      evaluatedSolutionsCounter.IncrementParameter.ActualName = "VillageEvaluatedSolutions";
-
-      villageEvaluatedSolutionsAssigner.Name = "Reset EvaluatedSolutions";
-      villageEvaluatedSolutionsAssigner.LeftSideParameter.ActualName = "VillageEvaluatedSolutions";
-      villageEvaluatedSolutionsAssigner.RightSideParameter.Value = new IntValue(0);
-
       villageSelectionPressureComparator.Name = "SelectionPressure >= MaximumSelectionPressure ?";
       villageSelectionPressureComparator.LeftSideParameter.ActualName = "SelectionPressure";
@@ -360,5 +345,5 @@
       maximumEvaluatedSolutionsComparator.Name = "EvaluatedSolutions >= MaximumEvaluatedSolutions";
       maximumEvaluatedSolutionsComparator.Comparison = new Comparison(ComparisonType.GreaterOrEqual);
-      maximumEvaluatedSolutionsComparator.LeftSideParameter.ActualName = "EvaluatedSolutions";
+      maximumEvaluatedSolutionsComparator.LeftSideParameter.ActualName = EvaluatedSolutionsParameter.Name;
       maximumEvaluatedSolutionsComparator.ResultParameter.ActualName = "TerminateEvaluatedSolutions";
       maximumEvaluatedSolutionsComparator.RightSideParameter.ActualName = "MaximumEvaluatedSolutions";
@@ -366,8 +351,4 @@
       analyzer2.Name = "Analyzer (placeholder)";
       analyzer2.OperatorParameter.ActualName = AnalyzerParameter.Name;
-
-      resultsCollector3.CopyValue = new BoolValue(true);
-      resultsCollector3.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
-      resultsCollector3.ResultsParameter.ActualName = ResultsParameter.Name;
 
       terminationCondition.ConditionParameter.ActualName = "TerminateSASEGASA";
@@ -387,6 +368,5 @@
       villageAnalyzer1.Successor = villageResultsCollector1;
       analyzer1.Successor = resultsCollector1;
-      resultsCollector1.Successor = resultsCollector2;
-      resultsCollector2.Successor = uniformSubScopesProcessor1;
+      resultsCollector1.Successor = uniformSubScopesProcessor1;
       uniformSubScopesProcessor1.Operator = villageTerminatedBySelectionPressure1;
       uniformSubScopesProcessor1.Successor = generationsCounter;
@@ -396,7 +376,5 @@
       mainOperator.Successor = villageAnalyzer2;
       villageAnalyzer2.Successor = villageResultsCollector2;
-      villageResultsCollector2.Successor = evaluatedSolutionsCounter;
-      evaluatedSolutionsCounter.Successor = villageEvaluatedSolutionsAssigner;
-      villageEvaluatedSolutionsAssigner.Successor = villageSelectionPressureComparator;
+      villageResultsCollector2.Successor = villageSelectionPressureComparator;
       villageSelectionPressureComparator.Successor = villageTerminatedBySelectionPressure2;
       villageTerminatedBySelectionPressure2.TrueBranch = terminatedVillagesCounter;
@@ -433,6 +411,5 @@
       maximumGenerationsComparator.Successor = maximumEvaluatedSolutionsComparator;
       maximumEvaluatedSolutionsComparator.Successor = analyzer2;
-      analyzer2.Successor = resultsCollector3;
-      resultsCollector3.Successor = terminationCondition;
+      analyzer2.Successor = terminationCondition;
       terminationCondition.TrueBranch = null;
       terminationCondition.FalseBranch = maximumGenerationsTerminationCondition;
Index: /trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealing.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealing.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealing.cs	(revision 5356)
@@ -27,4 +27,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Data;
+using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
 using HeuristicLab.Optimization.Operators;
@@ -135,5 +136,11 @@
     }
     private SimulatedAnnealingMainLoop MainLoop {
-      get { return (SimulatedAnnealingMainLoop)SolutionsCreator.Successor; }
+      get {
+        return (SimulatedAnnealingMainLoop)(
+          (ResultsCollector)(
+            (VariableCreator)SolutionsCreator.Successor
+          ).Successor
+        ).Successor;
+      }
     }
     [Storable]
@@ -171,4 +178,6 @@
       RandomCreator randomCreator = new RandomCreator();
       SolutionsCreator solutionsCreator = new SolutionsCreator();
+      VariableCreator variableCreator = new VariableCreator();
+      ResultsCollector resultsCollector = new ResultsCollector();
       SimulatedAnnealingMainLoop mainLoop = new SimulatedAnnealingMainLoop();
       OperatorGraph.InitialOperator = randomCreator;
@@ -182,5 +191,13 @@
 
       solutionsCreator.NumberOfSolutions = new IntValue(1);
-      solutionsCreator.Successor = mainLoop;
+      solutionsCreator.Successor = variableCreator;
+
+      variableCreator.Name = "Initialize EvaluatedMoves";
+      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("EvaluatedMoves", new IntValue()));
+      variableCreator.Successor = resultsCollector;
+
+      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Moves", null, "EvaluatedMoves"));
+      resultsCollector.ResultsParameter.ActualName = "Results";
+      resultsCollector.Successor = mainLoop;
 
       mainLoop.MoveGeneratorParameter.ActualName = MoveGeneratorParameter.Name;
@@ -194,4 +211,5 @@
       mainLoop.ResultsParameter.ActualName = "Results";
       mainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name;
+      mainLoop.EvaluatedMovesParameter.ActualName = "EvaluatedMoves";
 
       foreach (IDiscreteDoubleValueModifier op in ApplicationManager.Manager.GetInstances<IDiscreteDoubleValueModifier>().OrderBy(x => x.Name))
Index: /trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealingMainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealingMainLoop.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealingMainLoop.cs	(revision 5356)
@@ -80,4 +80,7 @@
     public ValueLookupParameter<VariableCollection> ResultsParameter {
       get { return (ValueLookupParameter<VariableCollection>)Parameters["Results"]; }
+    }
+    public LookupParameter<IntValue> EvaluatedMovesParameter {
+      get { return (LookupParameter<IntValue>)Parameters["EvaluatedMoves"]; }
     }
     #endregion
@@ -115,4 +118,5 @@
       Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze each generation."));
       Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The variable collection where results should be stored."));
+      Parameters.Add(new LookupParameter<IntValue>("EvaluatedMoves", "The number of evaluated moves."));
       #endregion
 
@@ -129,4 +133,5 @@
       UniformSubScopesProcessor moveEvaluationProcessor = new UniformSubScopesProcessor();
       Placeholder moveEvaluator = new Placeholder();
+      SubScopesCounter subScopesCounter = new SubScopesCounter();
       ProbabilisticQualityComparator qualityComparator = new ProbabilisticQualityComparator();
       ConditionalBranch improvesQualityBranch = new ConditionalBranch();
@@ -135,5 +140,4 @@
       IntCounter iterationsCounter = new IntCounter();
       Comparator iterationsComparator = new Comparator();
-      ResultsCollector resultsCollector2 = new ResultsCollector();
       SubScopesProcessor subScopesProcessor1 = new SubScopesProcessor();
       Placeholder analyzer2 = new Placeholder();
@@ -158,4 +162,7 @@
       moveEvaluator.Name = "Move evaluator (placeholder)";
       moveEvaluator.OperatorParameter.ActualName = MoveEvaluatorParameter.Name;
+
+      subScopesCounter.Name = "Increment EvaluatedMoves";
+      subScopesCounter.ValueParameter.ActualName = EvaluatedMovesParameter.Name;
 
       qualityComparator.LeftSideParameter.ActualName = MoveQualityParameter.Name;
@@ -180,8 +187,4 @@
       iterationsComparator.ResultParameter.ActualName = "Terminate";
       iterationsComparator.Comparison.Value = ComparisonType.GreaterOrEqual;
-
-      resultsCollector2.CollectedValues.Add(new LookupParameter<IntValue>("Iterations"));
-      resultsCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Temperature"));
-      resultsCollector2.ResultsParameter.ActualName = ResultsParameter.Name;
 
       analyzer2.Name = "Analyzer (placeholder)";
@@ -198,7 +201,8 @@
       subScopesProcessor0.Operators.Add(analyzer1);
       subScopesProcessor0.Successor = sssp;
+      analyzer1.Successor = null;
       sssp.Operators.Add(resultsCollector);
+      sssp.Successor = annealingOperator;
       resultsCollector.Successor = null;
-      sssp.Successor = annealingOperator;
       annealingOperator.Successor = mainProcessor;
       mainProcessor.Operator = moveGenerator;
@@ -206,11 +210,15 @@
       moveGenerator.Successor = moveEvaluationProcessor;
       moveEvaluationProcessor.Operator = moveEvaluator;
-      moveEvaluationProcessor.Successor = subScopesRemover;
+      moveEvaluationProcessor.Successor = subScopesCounter;
       moveEvaluator.Successor = qualityComparator;
       qualityComparator.Successor = improvesQualityBranch;
       improvesQualityBranch.TrueBranch = moveMaker;
+      improvesQualityBranch.FalseBranch = null;
+      improvesQualityBranch.Successor = null;
+      moveMaker.Successor = null;
+      subScopesCounter.Successor = subScopesRemover;
+      subScopesRemover.Successor = null;
       iterationsCounter.Successor = iterationsComparator;
-      iterationsComparator.Successor = resultsCollector2;
-      resultsCollector2.Successor = subScopesProcessor1;
+      iterationsComparator.Successor = subScopesProcessor1;
       subScopesProcessor1.Operators.Add(analyzer2);
       subScopesProcessor1.Successor = iterationsTermination;
Index: /trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearch.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearch.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearch.cs	(revision 5356)
@@ -27,4 +27,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Data;
+using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
 using HeuristicLab.Optimization.Operators;
@@ -134,5 +135,11 @@
     }
     private TabuSearchMainLoop MainLoop {
-      get { return (TabuSearchMainLoop)SolutionsCreator.Successor; }
+      get {
+        return (TabuSearchMainLoop)(
+          (ResultsCollector)(
+            (VariableCreator)SolutionsCreator.Successor
+          ).Successor
+        ).Successor;
+      }
     }
     [Storable]
@@ -158,5 +165,7 @@
       RandomCreator randomCreator = new RandomCreator();
       SolutionsCreator solutionsCreator = new SolutionsCreator();
-      TabuSearchMainLoop tsMainLoop = new TabuSearchMainLoop();
+      VariableCreator variableCreator = new VariableCreator();
+      ResultsCollector resultsCollector = new ResultsCollector();
+      TabuSearchMainLoop mainLoop = new TabuSearchMainLoop();
       OperatorGraph.InitialOperator = randomCreator;
 
@@ -169,15 +178,24 @@
 
       solutionsCreator.NumberOfSolutions = new IntValue(1);
-      solutionsCreator.Successor = tsMainLoop;
-
-      tsMainLoop.MoveGeneratorParameter.ActualName = MoveGeneratorParameter.Name;
-      tsMainLoop.MoveMakerParameter.ActualName = MoveMakerParameter.Name;
-      tsMainLoop.MoveEvaluatorParameter.ActualName = MoveEvaluatorParameter.Name;
-      tsMainLoop.TabuCheckerParameter.ActualName = TabuCheckerParameter.Name;
-      tsMainLoop.TabuMakerParameter.ActualName = TabuMakerParameter.Name;
-      tsMainLoop.MaximumIterationsParameter.ActualName = MaximumIterationsParameter.Name;
-      tsMainLoop.RandomParameter.ActualName = RandomCreator.RandomParameter.ActualName;
-      tsMainLoop.ResultsParameter.ActualName = "Results";
-      tsMainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name;
+      solutionsCreator.Successor = variableCreator;
+
+      variableCreator.Name = "Initialize EvaluatedMoves";
+      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("EvaluatedMoves", new IntValue()));
+      variableCreator.Successor = resultsCollector;
+
+      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Moves", null, "EvaluatedMoves"));
+      resultsCollector.ResultsParameter.ActualName = "Results";
+      resultsCollector.Successor = mainLoop;
+
+      mainLoop.MoveGeneratorParameter.ActualName = MoveGeneratorParameter.Name;
+      mainLoop.MoveMakerParameter.ActualName = MoveMakerParameter.Name;
+      mainLoop.MoveEvaluatorParameter.ActualName = MoveEvaluatorParameter.Name;
+      mainLoop.TabuCheckerParameter.ActualName = TabuCheckerParameter.Name;
+      mainLoop.TabuMakerParameter.ActualName = TabuMakerParameter.Name;
+      mainLoop.MaximumIterationsParameter.ActualName = MaximumIterationsParameter.Name;
+      mainLoop.RandomParameter.ActualName = RandomCreator.RandomParameter.ActualName;
+      mainLoop.ResultsParameter.ActualName = "Results";
+      mainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name;
+      mainLoop.EvaluatedMovesParameter.ActualName = "EvaluatedMoves";
 
       moveQualityAnalyzer = new BestAverageWorstQualityAnalyzer();
Index: /trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearchMainLoop.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearchMainLoop.cs	(revision 5355)
+++ /trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearchMainLoop.cs	(revision 5356)
@@ -83,4 +83,7 @@
       get { return (ValueLookupParameter<VariableCollection>)Parameters["Results"]; }
     }
+    public LookupParameter<IntValue> EvaluatedMovesParameter {
+      get { return (LookupParameter<IntValue>)Parameters["EvaluatedMoves"]; }
+    }
     #endregion
 
@@ -131,4 +134,5 @@
       Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze the solution and moves."));
       Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The variable collection where results should be stored."));
+      Parameters.Add(new LookupParameter<IntValue>("EvaluatedMoves", "The number of evaluated moves."));
       #endregion
 
@@ -162,5 +166,4 @@
 
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Iterations", new IntValue(0))); // Class TabuSearch expects this to be called Iterations
-      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("EvaluatedMoves", new IntValue(0)));
       variableCreator.CollectedValues.Add(new ValueParameter<BoolValue>("EmptyNeighborhood", new BoolValue(false)));
       variableCreator.CollectedValues.Add(new ValueParameter<ItemList<IItem>>("TabuList", new ItemList<IItem>()));
@@ -178,5 +181,4 @@
       resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("Iterations"));
       resultsCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
-      resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Moves", null, "EvaluatedMoves"));
       resultsCollector1.ResultsParameter.ActualName = ResultsParameter.Name;
 
@@ -193,5 +195,5 @@
 
       subScopesCounter.Name = "Increment EvaluatedMoves";
-      subScopesCounter.ValueParameter.ActualName = "EvaluatedMoves";
+      subScopesCounter.ValueParameter.ActualName = EvaluatedMovesParameter.Name;
 
       moveQualitySorter.DescendingParameter.ActualName = MaximizationParameter.Name;
