Index: trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchMainLoop.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchMainLoop.cs	(revision 3750)
+++ trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchMainLoop.cs	(revision 3809)
@@ -68,7 +68,4 @@
       get { return (ValueLookupParameter<IOperator>)Parameters["MoveMaker"]; }
     }
-    public ValueLookupParameter<IOperator> MoveAnalyzerParameter {
-      get { return (ValueLookupParameter<IOperator>)Parameters["MoveAnalyzer"]; }
-    }
     public ValueLookupParameter<IOperator> AnalyzerParameter {
       get { return (ValueLookupParameter<IOperator>)Parameters["Analyzer"]; }
@@ -104,6 +101,5 @@
       Parameters.Add(new ValueLookupParameter<IOperator>("MoveEvaluator", "The operator that evaluates a move."));
 
-      Parameters.Add(new ValueLookupParameter<IOperator>("MoveAnalyzer", "The operator used to analyze the moves."));
-      Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze the solution."));
+      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."));
       #endregion
@@ -123,15 +119,15 @@
       Placeholder moveAnalyzer = new Placeholder();
       BestSelector bestSelector = new BestSelector();
-      RightReducer rightReducer = new RightReducer();
       SubScopesProcessor moveMakingProcessor = new SubScopesProcessor();
+      UniformSubScopesProcessor selectedMoveMakingProcessor = new UniformSubScopesProcessor();
       QualityComparator qualityComparator = new QualityComparator();
       ConditionalBranch improvesQualityBranch = new ConditionalBranch();
       Placeholder moveMaker = new Placeholder();
       Assigner bestQualityUpdater = new Assigner();
+      MergingReducer mergingReducer = new MergingReducer();
+      Placeholder analyzer2 = new Placeholder();
       SubScopesRemover subScopesRemover = new SubScopesRemover();
       IntCounter iterationsCounter = new IntCounter();
       Comparator iterationsComparator = new Comparator();
-      SubScopesProcessor subScopesProcessor1 = new SubScopesProcessor();
-      Placeholder analyzer2 = new Placeholder();
       ResultsCollector resultsCollector3 = new ResultsCollector();
       ConditionalBranch iterationsTermination = new ConditionalBranch();
@@ -167,7 +163,4 @@
       evaluatedMovesCounter.Increment = new IntValue(1);
 
-      moveAnalyzer.Name = "MoveAnalyzer (placeholder)";
-      moveAnalyzer.OperatorParameter.ActualName = MoveAnalyzerParameter.Name;
-
       bestSelector.CopySelected = new BoolValue(false);
       bestSelector.MaximizationParameter.ActualName = MaximizationParameter.Name;
@@ -187,4 +180,7 @@
       bestQualityUpdater.LeftSideParameter.ActualName = "BestQuality";
       bestQualityUpdater.RightSideParameter.ActualName = QualityParameter.Name;
+
+      analyzer2.Name = "Analyzer (placeholder)";
+      analyzer2.OperatorParameter.ActualName = AnalyzerParameter.Name;
 
       subScopesRemover.RemoveAllSubScopes = true;
@@ -199,7 +195,4 @@
       iterationsComparator.RightSideParameter.ActualName = MaximumIterationsParameter.Name;
       iterationsComparator.ResultParameter.ActualName = "Terminate";
-
-      analyzer2.Name = "Analyzer (placeholder)";
-      analyzer2.OperatorParameter.ActualName = AnalyzerParameter.Name;
 
       resultsCollector3.CopyValue = new BoolValue(true);
@@ -228,9 +221,9 @@
       evaluatedMovesCounter.Successor = null;
       moveAnalyzer.Successor = bestSelector;
-      bestSelector.Successor = rightReducer;
-      rightReducer.Successor = moveMakingProcessor;
-      moveMakingProcessor.Operators.Add(qualityComparator);
-      moveMakingProcessor.Successor = subScopesRemover;
-      subScopesRemover.Successor = null;
+      bestSelector.Successor = moveMakingProcessor;
+      moveMakingProcessor.Operators.Add(new EmptyOperator());
+      moveMakingProcessor.Operators.Add(selectedMoveMakingProcessor);
+      moveMakingProcessor.Successor = mergingReducer;
+      selectedMoveMakingProcessor.Operator = qualityComparator;
       qualityComparator.Successor = improvesQualityBranch;
       improvesQualityBranch.TrueBranch = moveMaker;
@@ -239,9 +232,9 @@
       moveMaker.Successor = bestQualityUpdater;
       bestQualityUpdater.Successor = null;
+      mergingReducer.Successor = analyzer2;
+      analyzer2.Successor = subScopesRemover;
+      subScopesRemover.Successor = null;
       iterationsCounter.Successor = iterationsComparator;
-      iterationsComparator.Successor = subScopesProcessor1;
-      subScopesProcessor1.Operators.Add(analyzer2);
-      subScopesProcessor1.Successor = resultsCollector3;
-      analyzer2.Successor = null;
+      iterationsComparator.Successor = resultsCollector3;
       resultsCollector3.Successor = iterationsTermination;
       iterationsTermination.TrueBranch = null;
