Index: /branches/VNS/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearch.cs
===================================================================
--- /branches/VNS/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearch.cs	(revision 5750)
+++ /branches/VNS/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearch.cs	(revision 5751)
@@ -168,4 +168,6 @@
       variableCreator.Name = "Initialize EvaluatedMoves";
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("EvaluatedMoves", new IntValue()));
+      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Iterations", new IntValue(0)));
+      variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("BestQuality", new DoubleValue(0)));
       variableCreator.Successor = resultsCollector;
 
@@ -182,4 +184,6 @@
       mainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name;
       mainLoop.EvaluatedMovesParameter.ActualName = "EvaluatedMoves";
+      mainLoop.IterationsParameter.ActualName = "Iterations";
+      mainLoop.BestQualityParameter.ActualName = "BestQuality";
 
       moveQualityAnalyzer = new BestAverageWorstQualityAnalyzer();
Index: /branches/VNS/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchImprovementOperator.cs
===================================================================
--- /branches/VNS/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchImprovementOperator.cs	(revision 5750)
+++ /branches/VNS/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchImprovementOperator.cs	(revision 5751)
@@ -104,8 +104,7 @@
     public LocalSearchImprovementOperator()
       : base() {
-        loop = new LocalSearchMainLoop("LocalIterations", "BestLocalQuality");
-
-        ResultsCollector rc = ((loop.OperatorGraph.InitialOperator as SingleSuccessorOperator).Successor 
-          as SingleSuccessorOperator).Successor as ResultsCollector;
+        loop = new LocalSearchMainLoop();
+        
+        ResultsCollector rc = (loop.OperatorGraph.InitialOperator as SingleSuccessorOperator).Successor as ResultsCollector;
         rc.CollectedValues.Remove("BestLocalQuality");
 
@@ -286,7 +285,13 @@
       }
 
+      VariableCreator variableCreator = new VariableCreator();
+      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("LocalIterations", new IntValue(0)));
+      variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("BestLocalQuality", new DoubleValue(0)));
+
+      variableCreator.Successor = loop;
+
       loop.EvaluatedMovesParameter.ActualName = EvaluatedSolutionsParameter.ActualName;
 
-      processor.Operators.Add(loop);
+      processor.Operators.Add(variableCreator);
       processor.Successor = remover;
 
Index: /branches/VNS/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchMainLoop.cs
===================================================================
--- /branches/VNS/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchMainLoop.cs	(revision 5750)
+++ /branches/VNS/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchMainLoop.cs	(revision 5751)
@@ -46,4 +46,7 @@
       get { return (LookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
+    public LookupParameter<DoubleValue> BestQualityParameter {
+      get { return (LookupParameter<DoubleValue>)Parameters["BestLocalQuality"]; }
+    }
     public ValueLookupParameter<DoubleValue> BestKnownQualityParameter {
       get { return (ValueLookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
@@ -52,4 +55,7 @@
       get { return (LookupParameter<DoubleValue>)Parameters["MoveQuality"]; }
     }
+    public LookupParameter<IntValue> IterationsParameter {
+      get { return (LookupParameter<IntValue>)Parameters["LocalIterations"]; }
+    }
     public ValueLookupParameter<IntValue> MaximumIterationsParameter {
       get { return (ValueLookupParameter<IntValue>)Parameters["MaximumIterations"]; }
@@ -77,11 +83,7 @@
     [StorableConstructor]
     private LocalSearchMainLoop(bool deserializing) : base(deserializing) { }
-    public LocalSearchMainLoop(string iterationsName, string bestQualityName)
-      : base() {
-        Initialize(iterationsName, bestQualityName);
-    }
     public LocalSearchMainLoop()
       : base() {
-      Initialize("Iterations", "BestQuality");
+        Initialize();
     }
     private LocalSearchMainLoop(LocalSearchMainLoop original, Cloner cloner)
@@ -92,12 +94,13 @@
     }
 
-    private void Initialize(string iterationsName, string bestQualityName) {
+    private void Initialize() {
       #region Create parameters
       Parameters.Add(new ValueLookupParameter<IRandom>("Random", "A pseudo random number generator."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
       Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
-      Parameters.Add(new LookupParameter<DoubleValue>("BestQuality", "The value which represents the best quality fjo."));
+      Parameters.Add(new LookupParameter<DoubleValue>("BestLocalQuality", "The value which represents the best quality found so far."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality", "The best known quality value found so far."));
       Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The value which represents the quality of a move."));
+      Parameters.Add(new LookupParameter<IntValue>("LocalIterations", "The number of generations."));
       Parameters.Add(new ValueLookupParameter<IntValue>("MaximumIterations", "The maximum number of generations which should be processed."));
       Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The variable collection where results should be stored."));
@@ -112,5 +115,4 @@
 
       #region Create operators
-      VariableCreator variableCreator = new VariableCreator();
       SubScopesProcessor subScopesProcessor0 = new SubScopesProcessor();
       Assigner bestQualityInitializer = new Assigner();
@@ -137,9 +139,6 @@
       ConditionalBranch iterationsTermination = new ConditionalBranch();
 
-      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>(iterationsName, new IntValue(0))); // Class LocalSearch expects this to be called Iterations
-      variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>(bestQualityName, new DoubleValue(0)));
-
       bestQualityInitializer.Name = "Initialize BestQuality";
-      bestQualityInitializer.LeftSideParameter.ActualName = bestQualityName;
+      bestQualityInitializer.LeftSideParameter.ActualName = BestQualityParameter.Name;
       bestQualityInitializer.RightSideParameter.ActualName = QualityParameter.Name;
 
@@ -148,6 +147,6 @@
 
       resultsCollector1.CopyValue = new BoolValue(false);
-      resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>(iterationsName));
-      resultsCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>(bestQualityName, null, bestQualityName));
+      resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>(IterationsParameter.Name));
+      resultsCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>(BestQualityParameter.Name, null, BestQualityParameter.Name));
       resultsCollector1.ResultsParameter.ActualName = ResultsParameter.Name;
 
@@ -178,9 +177,9 @@
 
       bestQualityUpdater.Name = "Update BestQuality";
-      bestQualityUpdater.LeftSideParameter.ActualName = bestQualityName;
+      bestQualityUpdater.LeftSideParameter.ActualName = BestQualityParameter.Name;
       bestQualityUpdater.RightSideParameter.ActualName = QualityParameter.Name;
 
       resultsCollector2.CopyValue = new BoolValue(false);
-      resultsCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>(bestQualityName, null, bestQualityName));
+      resultsCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>(BestQualityParameter.Name, null, BestQualityParameter.Name));
       resultsCollector2.ResultsParameter.ActualName = ResultsParameter.Name;
 
@@ -192,9 +191,9 @@
       iterationsCounter.Name = "Iterations Counter";
       iterationsCounter.Increment = new IntValue(1);
-      iterationsCounter.ValueParameter.ActualName = iterationsName;
+      iterationsCounter.ValueParameter.ActualName = IterationsParameter.Name;
 
       iterationsComparator.Name = "Iterations >= MaximumIterations";
       iterationsComparator.Comparison = new Comparison(ComparisonType.GreaterOrEqual);
-      iterationsComparator.LeftSideParameter.ActualName = iterationsName;
+      iterationsComparator.LeftSideParameter.ActualName = IterationsParameter.Name;
       iterationsComparator.RightSideParameter.ActualName = MaximumIterationsParameter.Name;
       iterationsComparator.ResultParameter.ActualName = "Terminate";
@@ -205,6 +204,5 @@
 
       #region Create operator graph
-      OperatorGraph.InitialOperator = variableCreator;
-      variableCreator.Successor = subScopesProcessor0;
+      OperatorGraph.InitialOperator = subScopesProcessor0;
       subScopesProcessor0.Operators.Add(bestQualityInitializer);
       subScopesProcessor0.Successor = resultsCollector1;
