Index: trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearchMainLoop.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearchMainLoop.cs	(revision 3520)
+++ trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearchMainLoop.cs	(revision 3521)
@@ -125,5 +125,5 @@
       Placeholder visualizer1 = new Placeholder();
       ResultsCollector resultsCollector = new ResultsCollector();
-      UniformSubScopesProcessor mainProcessor = new UniformSubScopesProcessor();
+      SubScopesProcessor solutionProcessor = new SubScopesProcessor();
       Placeholder moveGenerator = new Placeholder();
       UniformSubScopesProcessor moveEvaluationProcessor = new UniformSubScopesProcessor();
@@ -135,12 +135,9 @@
       ConditionalBranch emptyNeighborhoodBranch1 = new ConditionalBranch();
       RightReducer rightReducer = new RightReducer();
-      UniformSubScopesProcessor moveMakingProcessor = new UniformSubScopesProcessor();
+      SubScopesProcessor moveMakingProcessor = new SubScopesProcessor();
       Placeholder tabuMaker = new Placeholder();
       Placeholder moveMaker = new Placeholder();
-      DataTableValuesCollector valuesCollector = new DataTableValuesCollector();
-      SubScopesRemover subScopesRemover1 = new SubScopesRemover();
+      SubScopesRemover subScopesRemover = new SubScopesRemover();
       ConditionalBranch emptyNeighborhoodBranch2 = new ConditionalBranch();
-      UniformSubScopesProcessor removeMoves = new UniformSubScopesProcessor();
-      SubScopesRemover subScopesRemover2 = new SubScopesRemover();
       IntCounter iterationsCounter = new IntCounter();
       Comparator iterationsComparator = new Comparator();
@@ -149,4 +146,5 @@
       QualityDifferenceCalculator qualityDifferenceCalculator2 = new QualityDifferenceCalculator();
       Placeholder visualizer2 = new Placeholder();
+      DataTableValuesCollector valuesCollector = new DataTableValuesCollector();
       ConditionalBranch iterationsTermination = new ConditionalBranch();
 
@@ -155,6 +153,6 @@
       variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("Average Move Quality", new DoubleValue(0)));
       variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("Worst Move Quality", new DoubleValue(0)));
-      variableCreator.CollectedValues.Add(new ValueParameter<DataTable>("MoveQualities", new DataTable("MoveQualities")));
       variableCreator.CollectedValues.Add(new ValueParameter<BoolValue>("EmptyNeighborhood", new BoolValue(false)));
+      variableCreator.CollectedValues.Add(new ValueParameter<DataTable>("MoveQualities", new DataTable("Move Qualities", "Progress of the tabu search showing the best, average, and worst move found in each iteration.")));
 
       bestQualityMemorizer1.BestQualityParameter.ActualName = "BestQuality";
@@ -173,5 +171,5 @@
       visualizer1.Name = "Visualizer (placeholder)";
       visualizer1.OperatorParameter.ActualName = VisualizerParameter.Name;
-
+      
       resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Iterations"));
       resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
@@ -186,6 +184,4 @@
       resultsCollector.ResultsParameter.ActualName = "Results";
 
-      mainProcessor.Name = "Solution processor (UniformSubScopesProcessor)";
-
       moveGenerator.Name = "MoveGenerator (placeholder)";
       moveGenerator.OperatorParameter.ActualName = MoveGeneratorParameter.Name;
@@ -206,9 +202,12 @@
       bestAverageWorstMoveQualityCalculator.WorstQualityParameter.ActualName = "Worst Move Quality";
 
-      valuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Move Quality"));
-      valuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Average Move Quality"));
-      valuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Worst Move Quality"));
-      valuesCollector.DataTableParameter.ActualName = "MoveQualities";
-
+      tabuSelector.AspirationParameter.Value = new BoolValue(true);
+      tabuSelector.BestQualityParameter.ActualName = "BestQuality";
+      tabuSelector.CopySelected = new BoolValue(false);
+      tabuSelector.EmptyNeighborhoodParameter.ActualName = "EmptyNeighborhood";
+      tabuSelector.MaximizationParameter.ActualName = MaximizationParameter.Name;
+      tabuSelector.MoveQualityParameter.ActualName = MoveQualityParameter.Name;
+      tabuSelector.MoveTabuParameter.ActualName = MoveTabuParameter.Name;
+      
       moveMakingProcessor.Name = "MoveMaking processor (UniformSubScopesProcessor)";
 
@@ -222,10 +221,5 @@
       moveMaker.OperatorParameter.ActualName = MoveMakerParameter.Name;
 
-      subScopesRemover1.RemoveAllSubScopes = true;
-
-      emptyNeighborhoodBranch2.Name = "Neighborhood empty?";
-      emptyNeighborhoodBranch2.ConditionParameter.ActualName = "EmptyNeighborhood";
-
-      subScopesRemover2.RemoveAllSubScopes = true;
+      subScopesRemover.RemoveAllSubScopes = true;
 
       iterationsCounter.Name = "Iterations Counter";
@@ -254,4 +248,14 @@
       visualizer2.Name = "Visualizer (placeholder)";
       visualizer2.OperatorParameter.ActualName = VisualizerParameter.Name;
+      
+      valuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Move Quality"));
+      valuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Average Move Quality"));
+      valuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Worst Move Quality"));
+      valuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
+      valuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, BestKnownQualityParameter.Name));
+      valuesCollector.DataTableParameter.ActualName = "MoveQualities";
+
+      emptyNeighborhoodBranch2.Name = "Neighborhood empty?";
+      emptyNeighborhoodBranch2.ConditionParameter.ActualName = "EmptyNeighborhood";
 
       iterationsTermination.Name = "Iterations Termination Condition";
@@ -267,7 +271,7 @@
       qualityDifferenceCalculator1.Successor = visualizer1;
       visualizer1.Successor = resultsCollector;
-      resultsCollector.Successor = mainProcessor;
-      mainProcessor.Operator = moveGenerator;
-      mainProcessor.Successor = emptyNeighborhoodBranch2;
+      resultsCollector.Successor = solutionProcessor;
+      solutionProcessor.Operators.Add(moveGenerator);
+      solutionProcessor.Successor = iterationsCounter;
       moveGenerator.Successor = moveEvaluationProcessor;
       moveEvaluationProcessor.Operator = moveEvaluator;
@@ -276,22 +280,15 @@
       tabuChecker.Successor = null;
       moveQualitySorter.Successor = bestAverageWorstMoveQualityCalculator;
-      bestAverageWorstMoveQualityCalculator.Successor = valuesCollector;
-      valuesCollector.Successor = tabuSelector;
+      bestAverageWorstMoveQualityCalculator.Successor = tabuSelector;
       tabuSelector.Successor = emptyNeighborhoodBranch1;
       emptyNeighborhoodBranch1.FalseBranch = rightReducer;
       emptyNeighborhoodBranch1.TrueBranch = null;
-      emptyNeighborhoodBranch1.Successor = null;
+      emptyNeighborhoodBranch1.Successor = subScopesRemover;
       rightReducer.Successor = moveMakingProcessor;
-      moveMakingProcessor.Operator = tabuMaker;
-      moveMakingProcessor.Successor = subScopesRemover1;
+      moveMakingProcessor.Operators.Add(tabuMaker);
+      moveMakingProcessor.Successor = null;
       tabuMaker.Successor = moveMaker;
       moveMaker.Successor = null;
-      subScopesRemover1.Successor = null;
-      emptyNeighborhoodBranch2.FalseBranch = iterationsCounter;
-      emptyNeighborhoodBranch2.TrueBranch = removeMoves;
-      emptyNeighborhoodBranch2.Successor = null;
-      removeMoves.Operator = subScopesRemover2;
-      removeMoves.Successor = null;
-      subScopesRemover2.Successor = null;
+      subScopesRemover.Successor = null;
       iterationsCounter.Successor = iterationsComparator;
       iterationsComparator.Successor = bestQualityMemorizer3;
@@ -299,7 +296,11 @@
       bestQualityMemorizer4.Successor = qualityDifferenceCalculator2;
       qualityDifferenceCalculator2.Successor = visualizer2;
-      visualizer2.Successor = iterationsTermination;
+      visualizer2.Successor = valuesCollector;
+      valuesCollector.Successor = emptyNeighborhoodBranch2;
+      emptyNeighborhoodBranch2.TrueBranch = null;
+      emptyNeighborhoodBranch2.FalseBranch = iterationsTermination;
+      emptyNeighborhoodBranch2.Successor = null;
       iterationsTermination.TrueBranch = null;
-      iterationsTermination.FalseBranch = mainProcessor;
+      iterationsTermination.FalseBranch = solutionProcessor;
       #endregion
     }
Index: trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSelector.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSelector.cs	(revision 3520)
+++ trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSelector.cs	(revision 3521)
@@ -94,5 +94,5 @@
       Parameters.Add(new SubScopesLookupParameter<BoolValue>("MoveTabu", "The tabu status of the move."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("CopySelected", "True if the selected move should be copied.", new BoolValue(false)));
-      Parameters.Add(new LookupParameter<BoolValue>("EmptyNeighborhood", "Will be set to true if the neighborhood didn't contain any non-tabu moves. It is not set to false."));
+      Parameters.Add(new LookupParameter<BoolValue>("EmptyNeighborhood", "Will be set to true if the neighborhood didn't contain any non-tabu moves, otherwise it is set to false."));
     }
 
@@ -128,5 +128,5 @@
         EmptyNeighborhoodParameter.ActualValue = new BoolValue(true);
         selected[0] = new Scope("All moves are tabu.");
-      }
+      } else EmptyNeighborhoodParameter.ActualValue = new BoolValue(false);
 
       // remove from last to first so that the stored indices remain the same
