Index: trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithm.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithm.cs	(revision 3653)
+++ trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithm.cs	(revision 3654)
@@ -23,4 +23,5 @@
 using System.Collections.Generic;
 using System.Linq;
+using HeuristicLab.Analysis;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -33,5 +34,4 @@
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Random;
-using HeuristicLab.Selection;
 
 namespace HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm {
@@ -121,4 +121,10 @@
       get { return (ValueLookupParameter<BoolValue>)Parameters["OffspringSelectionBeforeMutation"]; }
     }
+    private ValueParameter<MultiAnalyzer<IMultiPopulationAnalyzer>> AnalyzerParameter {
+      get { return (ValueParameter<MultiAnalyzer<IMultiPopulationAnalyzer>>)Parameters["Analyzer"]; }
+    }
+    private ValueParameter<MultiAnalyzer<IPopulationAnalyzer>> IslandAnalyzerParameter {
+      get { return (ValueParameter<MultiAnalyzer<IPopulationAnalyzer>>)Parameters["IslandAnalyzer"]; }
+    }
     #endregion
 
@@ -211,4 +217,12 @@
       get { return OffspringSelectionBeforeMutationParameter.Value; }
       set { OffspringSelectionBeforeMutationParameter.Value = value; }
+    }
+    public MultiAnalyzer<IMultiPopulationAnalyzer> Analyzer {
+      get { return AnalyzerParameter.Value; }
+      set { AnalyzerParameter.Value = value; }
+    }
+    public MultiAnalyzer<IPopulationAnalyzer> IslandAnalyzer {
+      get { return IslandAnalyzerParameter.Value; }
+      set { IslandAnalyzerParameter.Value = value; }
     }
     private List<ISelector> selectors;
@@ -232,4 +246,6 @@
       get { return (IslandOffspringSelectionGeneticAlgorithmMainLoop)IslandProcessor.Successor; }
     }
+    private PopulationBestAverageWorstQualityAnalyzer islandQualityAnalyzer;
+    //private MultipopulationBestAverageWorstQualityAnalyzer qualityAnalyzer;
     #endregion
 
@@ -260,5 +276,7 @@
       Parameters.Add(new ValueLookupParameter<DoubleValue>("MaximumSelectionPressure", "The maximum selection pressure that terminates the algorithm.", new DoubleValue(100)));
       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.", new BoolValue(false)));
-
+      Parameters.Add(new ValueParameter<MultiAnalyzer<IMultiPopulationAnalyzer>>("Analyzer", "The operator used to analyze the islands.", new MultiAnalyzer<IMultiPopulationAnalyzer>()));
+      Parameters.Add(new ValueParameter<MultiAnalyzer<IPopulationAnalyzer>>("IslandAnalyzer", "The operator used to analyze each island.", new MultiAnalyzer<IPopulationAnalyzer>()));
+      
       RandomCreator randomCreator = new RandomCreator();
       SubScopesCreator populationCreator = new SubScopesCreator();
@@ -331,6 +349,8 @@
       ParameterizeMainLoop();
       ParameterizeSelectors();
+      ParameterizeAnalyzers();
       UpdateCrossovers();
       UpdateMutators();
+      UpdateAnalyzers();
       Problem.Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
       base.OnProblemChanged();
@@ -347,4 +367,5 @@
       ParameterizeMainLoop();
       ParameterizeSelectors();
+      ParameterizeAnalyzers();
       Problem.Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
       base.Problem_EvaluatorChanged(sender, e);
@@ -354,4 +375,5 @@
       UpdateCrossovers();
       UpdateMutators();
+      UpdateAnalyzers();
       base.Problem_OperatorsChanged(sender, e);
     }
@@ -373,4 +395,5 @@
       ParameterizeMainLoop();
       ParameterizeSelectors();
+      ParameterizeAnalyzers();
     }
     private void MigrationRateParameter_ValueChanged(object sender, EventArgs e) {
@@ -401,5 +424,7 @@
     private void Initialize() {
       InitializeSelectors();
+      InitializeAnalyzers();
       UpdateSelectors();
+      UpdateAnalyzers();
       InitializeComparisonFactorModifiers();
       UpdateComparisonFactorModifiers();
@@ -445,4 +470,9 @@
       ParameterizeSelectors();
     }
+    private void InitializeAnalyzers() {
+      islandQualityAnalyzer = new PopulationBestAverageWorstQualityAnalyzer();
+      //qualityAnalyzer = new MultipopulationBestAverageWorstQualityAnalyzer();
+      ParameterizeAnalyzers();
+    }
     private void InitializeComparisonFactorModifiers() {
       comparisonFactorModifiers = new List<IDiscreteDoubleValueModifier>();
@@ -484,4 +514,13 @@
       }
     }
+    private void ParameterizeAnalyzers() {
+      islandQualityAnalyzer.ResultsParameter.ActualName = "Results";
+      //qualityAnalyzer.ResultsParameter.ActualName = "Results";
+      if (Problem != null) {
+        islandQualityAnalyzer.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name;
+        islandQualityAnalyzer.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
+        islandQualityAnalyzer.BestKnownQualityParameter.ActualName = Problem.BestKnownQualityParameter.Name;
+      }
+    }
     private void ParameterizeComparisonFactorModifiers() {
       foreach (IDiscreteDoubleValueModifier modifier in comparisonFactorModifiers) {
@@ -568,4 +607,17 @@
       }
     }
+    private void UpdateAnalyzers() {
+      IslandAnalyzer.Operators.Clear();
+      Analyzer.Operators.Clear();
+      IslandAnalyzer.Operators.Add(islandQualityAnalyzer);
+      //Analyzer.Operators.Add(qualityAnalyzer);
+      if (Problem != null) {
+        foreach (IPopulationAnalyzer analyzer in Problem.Operators.OfType<IPopulationAnalyzer>().OrderBy(x => x.Name)) {
+          IslandAnalyzer.Operators.Add(analyzer);
+        }
+        foreach (IMultiPopulationAnalyzer analyzer in Problem.Operators.OfType<IMultiPopulationAnalyzer>().OrderBy(x => x.Name))
+          Analyzer.Operators.Add(analyzer);
+      }
+    }
     #endregion
   }
Index: trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithmMainLoop.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithmMainLoop.cs	(revision 3653)
+++ trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithmMainLoop.cs	(revision 3654)
@@ -126,4 +126,10 @@
     public ValueLookupParameter<BoolValue> OffspringSelectionBeforeMutationParameter {
       get { return (ValueLookupParameter<BoolValue>)Parameters["OffspringSelectionBeforeMutation"]; }
+    }
+    public ValueLookupParameter<IOperator> AnalyzerParameter {
+      get { return (ValueLookupParameter<IOperator>)Parameters["Analyzer"]; }
+    }
+    public ValueLookupParameter<IOperator> IslandAnalyzerParameter {
+      get { return (ValueLookupParameter<IOperator>)Parameters["IslandAnalyzer"]; }
     }
     #endregion
@@ -162,4 +168,6 @@
       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 ValueLookupParameter<IOperator>("Analyzer", "The operator used to the analyze the islands."));
+      Parameters.Add(new ValueLookupParameter<IOperator>("IslandAnalyzer", "The operator used to analyze each island."));
       #endregion
 
@@ -168,28 +176,15 @@
       UniformSubScopesProcessor uniformSubScopesProcessor0 = new UniformSubScopesProcessor();
       VariableCreator islandVariableCreator = new VariableCreator();
-      BestQualityMemorizer islandBestQualityMemorizer1 = new BestQualityMemorizer();
-      BestAverageWorstQualityCalculator islandBestAverageWorstQualityCalculator1 = new BestAverageWorstQualityCalculator();
-      DataTableValuesCollector islandDataTableValuesCollector1 = new DataTableValuesCollector();
-      DataTableValuesCollector islandDataTableValuesCollector2 = new DataTableValuesCollector();
-      QualityDifferenceCalculator islandQualityDifferenceCalculator1 = new QualityDifferenceCalculator();
-      Placeholder islandVisualizer1 = new Placeholder();
-      ResultsCollector islandResultsCollector = new ResultsCollector();
-      BestQualityMemorizer bestQualityMemorizer1 = new BestQualityMemorizer();
-      BestQualityMemorizer bestQualityMemorizer2 = new BestQualityMemorizer();
-      BestAverageWorstQualityCalculator bestAverageWorstQualityCalculator1 = new BestAverageWorstQualityCalculator();
-      DataTableValuesCollector dataTableValuesCollector1 = new DataTableValuesCollector();
-      DataTableValuesCollector dataTableValuesCollector2 = new DataTableValuesCollector();
-      QualityDifferenceCalculator qualityDifferenceCalculator1 = new QualityDifferenceCalculator();
-      ResultsCollector resultsCollector = new ResultsCollector();
+      Placeholder islandAnalyzer1 = new Placeholder();
+      ResultsCollector islandResultsCollector1 = new ResultsCollector();
+      Placeholder analyzer1 = new Placeholder();
+      ResultsCollector resultsCollector1 = new ResultsCollector();
+      ResultsCollector resultsCollector2 = new ResultsCollector();
       Placeholder comparisonFactorModifier = new Placeholder();
       UniformSubScopesProcessor uniformSubScopesProcessor1 = new UniformSubScopesProcessor();
       ConditionalBranch islandTerminatedBySelectionPressure1 = new ConditionalBranch();
       OffspringSelectionGeneticAlgorithmMainOperator mainOperator = new OffspringSelectionGeneticAlgorithmMainOperator();
-      BestQualityMemorizer islandBestQualityMemorizer2 = new BestQualityMemorizer();
-      BestAverageWorstQualityCalculator islandBestAverageWorstQualityCalculator2 = new BestAverageWorstQualityCalculator();
-      DataTableValuesCollector islandDataTableValuesCollector3 = new DataTableValuesCollector();
-      DataTableValuesCollector islandDataTableValuesCollector4 = new DataTableValuesCollector();
-      QualityDifferenceCalculator islandQualityDifferenceCalculator2 = new QualityDifferenceCalculator();
-      Placeholder islandVisualizer2 = new Placeholder();
+      Placeholder islandAnalyzer2 = new Placeholder();
+      ResultsCollector islandResultsCollector2 = new ResultsCollector();
       IntCounter islandEvaluatedSolutionsCounter = new IntCounter();
       Assigner islandEvaluatedSolutionsAssigner = new Assigner();
@@ -212,10 +207,6 @@
       Comparator generationsComparator = new Comparator();
       Comparator terminatedIslandsComparator = new Comparator();
-      BestQualityMemorizer bestQualityMemorizer3 = new BestQualityMemorizer();
-      BestQualityMemorizer bestQualityMemorizer4 = new BestQualityMemorizer();
-      BestAverageWorstQualityCalculator bestAverageWorstQualityCalculator2 = new BestAverageWorstQualityCalculator();
-      DataTableValuesCollector dataTableValuesCollector3 = new DataTableValuesCollector();
-      DataTableValuesCollector dataTableValuesCollector4 = new DataTableValuesCollector();
-      QualityDifferenceCalculator qualityDifferenceCalculator2 = new QualityDifferenceCalculator();
+      Placeholder analyzer2 = new Placeholder();
+      ResultsCollector resultsCollector3 = new ResultsCollector();
       ConditionalBranch generationsTerminationCondition = new ConditionalBranch();
       ConditionalBranch terminatedIslandsCondition = new ConditionalBranch();
@@ -227,95 +218,29 @@
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("EvaluatedSolutions", new IntValue(0)));
 
-      islandVariableCreator.CollectedValues.Add(new ValueParameter<ResultCollection>("IslandResults", new ResultCollection()));
+      islandVariableCreator.CollectedValues.Add(new ValueParameter<ResultCollection>("Results", 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)));
 
-      islandBestQualityMemorizer1.BestQualityParameter.ActualName = "BestQuality";
-      islandBestQualityMemorizer1.MaximizationParameter.ActualName = MaximizationParameter.Name;
-      islandBestQualityMemorizer1.QualityParameter.ActualName = QualityParameter.Name;
-
-      islandBestAverageWorstQualityCalculator1.AverageQualityParameter.ActualName = "CurrentAverageQuality";
-      islandBestAverageWorstQualityCalculator1.BestQualityParameter.ActualName = "CurrentBestQuality";
-      islandBestAverageWorstQualityCalculator1.MaximizationParameter.ActualName = MaximizationParameter.Name;
-      islandBestAverageWorstQualityCalculator1.QualityParameter.ActualName = QualityParameter.Name;
-      islandBestAverageWorstQualityCalculator1.WorstQualityParameter.ActualName = "CurrentWorstQuality";
-      
-      islandDataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best BestQuality", null, "CurrentBestBestQuality"));
-      islandDataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average BestQuality", null, "CurrentAverageBestQuality"));
-      islandDataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst BestQuality", null, "CurrentWorstBestQuality"));
-      islandDataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
-      islandDataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, BestKnownQualityParameter.Name));
-      islandDataTableValuesCollector1.DataTableParameter.ActualName = "BestQualities";
-
-      islandDataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Selection Pressure", null, "SelectionPressure"));
-      islandDataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Maximum Selection Pressure", null, MaximumSelectionPressureParameter.Name));
-      islandDataTableValuesCollector2.DataTableParameter.ActualName = "SelectionPressures";
-
-      islandQualityDifferenceCalculator1.AbsoluteDifferenceParameter.ActualName = "AbsoluteDifferenceBestKnownToBest";
-      islandQualityDifferenceCalculator1.FirstQualityParameter.ActualName = BestKnownQualityParameter.Name;
-      islandQualityDifferenceCalculator1.RelativeDifferenceParameter.ActualName = "RelativeDifferenceBestKnownToBest";
-      islandQualityDifferenceCalculator1.SecondQualityParameter.ActualName = "BestQuality";
-
-      islandResultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
-      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality", null, "CurrentBestQuality"));
-      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality", null, "CurrentAverageQuality"));
-      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality", null, "CurrentWorstQuality"));
-      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
-      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, BestKnownQualityParameter.Name));
-      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Absolute Difference of Best Known Quality to Best Quality", null, "AbsoluteDifferenceBestKnownToBest"));
-      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Relative Difference of Best Known Quality to Best Quality", null, "RelativeDifferenceBestKnownToBest"));
-      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Curent Comparison Factor", null, "ComparisonFactor"));
-      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Selection Pressure", null, "SelectionPressure"));
-      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Success Ratio", null, "CurrentSuccessRatio"));
-      islandResultsCollector.CollectedValues.Add(new LookupParameter<IItem>("Solution Visualization", null, VisualizationParameter.Name));
-      islandResultsCollector.CollectedValues.Add(new LookupParameter<DataTable>("Qualities"));
-      islandResultsCollector.CollectedValues.Add(new LookupParameter<DataTable>("SelectionPressures"));
-      islandResultsCollector.ResultsParameter.ActualName = "IslandResults";
-
-      bestQualityMemorizer1.BestQualityParameter.ActualName = "BestQuality";
-      bestQualityMemorizer1.MaximizationParameter.ActualName = MaximizationParameter.Name;
-      bestQualityMemorizer1.QualityParameter.ActualName = "BestQuality";
-
-      bestQualityMemorizer2.BestQualityParameter.ActualName = BestKnownQualityParameter.Name;
-      bestQualityMemorizer2.MaximizationParameter.ActualName = MaximizationParameter.Name;
-      bestQualityMemorizer2.QualityParameter.ActualName = "BestQuality";
-
-      bestAverageWorstQualityCalculator1.AverageQualityParameter.ActualName = "CurrentAverageBestQuality";
-      bestAverageWorstQualityCalculator1.BestQualityParameter.ActualName = "CurrentBestBestQuality";
-      bestAverageWorstQualityCalculator1.MaximizationParameter.ActualName = MaximizationParameter.Name;
-      bestAverageWorstQualityCalculator1.QualityParameter.ActualName = "CurrentBestQuality";
-      bestAverageWorstQualityCalculator1.WorstQualityParameter.ActualName = "CurrentWorstBestQuality";
-
-      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best BestQuality", null, "CurrentBestBestQuality"));
-      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average BestQuality", null, "CurrentAverageBestQuality"));
-      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst BestQuality", null, "CurrentWorstBestQuality"));
-      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
-      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, BestKnownQualityParameter.Name));
-      dataTableValuesCollector1.DataTableParameter.ActualName = "BestQualities";
-
-      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Maximum Selection Pressure", null, MaximumSelectionPressureParameter.Name));
-      dataTableValuesCollector2.CollectedValues.Add(new SubScopesLookupParameter<DoubleValue>("Selection Pressure Island", null, "SelectionPressure"));
-      dataTableValuesCollector2.DataTableParameter.ActualName = "SelectionPressures";
-
-      qualityDifferenceCalculator1.AbsoluteDifferenceParameter.ActualName = "AbsoluteDifferenceBestKnownToBest";
-      qualityDifferenceCalculator1.FirstQualityParameter.ActualName = BestKnownQualityParameter.Name;
-      qualityDifferenceCalculator1.RelativeDifferenceParameter.ActualName = "RelativeDifferenceBestKnownToBest";
-      qualityDifferenceCalculator1.SecondQualityParameter.ActualName = "BestQuality";
-
-      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Migrations"));
-      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
-      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("EvaluatedSolutions"));
-      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best BestQuality", null, "CurrentBestBestQuality"));
-      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average BestQuality", null, "CurrentAverageBestQuality"));
-      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst BestQuality", null, "CurrentWorstBestQuality"));
-      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
-      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, BestKnownQualityParameter.Name));
-      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Absolute Difference of Best Known Quality to Best Quality", null, "AbsoluteDifferenceBestKnownToBest"));
-      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Relative Difference of Best Known Quality to Best Quality", null, "RelativeDifferenceBestKnownToBest"));
-      resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>("BestQualities"));
-      resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>("SelectionPressures"));
-      resultsCollector.CollectedValues.Add(new SubScopesLookupParameter<ResultCollection>("IslandResults", "Result set for each island"));
-      resultsCollector.ResultsParameter.ActualName = ResultsParameter.Name;
+      islandAnalyzer1.Name = "Island Analyzer (placeholder)";
+      islandAnalyzer1.OperatorParameter.ActualName = IslandAnalyzerParameter.Name;
+
+      islandResultsCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Selection Pressure", null, "SelectionPressure"));
+      islandResultsCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Success Ratio", null, "CurrentSuccessRatio"));
+      islandResultsCollector1.ResultsParameter.ActualName = "Results";
+
+      analyzer1.Name = "Analyzer (placeholder)";
+      analyzer1.OperatorParameter.ActualName = AnalyzerParameter.Name;
+
+      resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("Migrations"));
+      resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
+      resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
+      resultsCollector1.CollectedValues.Add(new SubScopesLookupParameter<ResultCollection>("IslandResults", "Result set for each island", "Results"));
+      resultsCollector1.ResultsParameter.ActualName = ResultsParameter.Name;
+
+      resultsCollector2.Name = "Reference Island Results";
+      resultsCollector2.CopyValue = new BoolValue(false);
+      resultsCollector2.CollectedValues.Add(new SubScopesLookupParameter<ResultCollection>("IslandResults", "Result set for each island", "Results"));
+      resultsCollector2.ResultsParameter.ActualName = ResultsParameter.Name;
 
       comparisonFactorModifier.Name = "ComparisonFactorModifier (Placeholder)";
@@ -342,29 +267,10 @@
       mainOperator.SuccessRatioParameter.ActualName = SuccessRatioParameter.Name;
 
-      islandBestQualityMemorizer2.BestQualityParameter.ActualName = "BestQuality";
-      islandBestQualityMemorizer2.MaximizationParameter.ActualName = MaximizationParameter.Name;
-      islandBestQualityMemorizer2.QualityParameter.ActualName = QualityParameter.Name;
-
-      islandBestAverageWorstQualityCalculator2.AverageQualityParameter.ActualName = "CurrentAverageQuality";
-      islandBestAverageWorstQualityCalculator2.BestQualityParameter.ActualName = "CurrentBestQuality";
-      islandBestAverageWorstQualityCalculator2.MaximizationParameter.ActualName = MaximizationParameter.Name;
-      islandBestAverageWorstQualityCalculator2.QualityParameter.ActualName = QualityParameter.Name;
-      islandBestAverageWorstQualityCalculator2.WorstQualityParameter.ActualName = "CurrentWorstQuality";
-
-      islandDataTableValuesCollector3.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best BestQuality", null, "CurrentBestBestQuality"));
-      islandDataTableValuesCollector3.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average BestQuality", null, "CurrentAverageBestQuality"));
-      islandDataTableValuesCollector3.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst BestQuality", null, "CurrentWorstBestQuality"));
-      islandDataTableValuesCollector3.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
-      islandDataTableValuesCollector3.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, BestKnownQualityParameter.Name));
-      islandDataTableValuesCollector3.DataTableParameter.ActualName = "BestQualities";
-
-      islandDataTableValuesCollector4.CollectedValues.Add(new LookupParameter<DoubleValue>("Selection Pressure", null, "SelectionPressure"));
-      islandDataTableValuesCollector4.CollectedValues.Add(new LookupParameter<DoubleValue>("Maximum Selection Pressure", null, MaximumSelectionPressureParameter.Name));
-      islandDataTableValuesCollector4.DataTableParameter.ActualName = "SelectionPressures";
-
-      islandQualityDifferenceCalculator2.AbsoluteDifferenceParameter.ActualName = "AbsoluteDifferenceBestKnownToBest";
-      islandQualityDifferenceCalculator2.FirstQualityParameter.ActualName = BestKnownQualityParameter.Name;
-      islandQualityDifferenceCalculator2.RelativeDifferenceParameter.ActualName = "RelativeDifferenceBestKnownToBest";
-      islandQualityDifferenceCalculator2.SecondQualityParameter.ActualName = "BestQuality";
+      islandAnalyzer2.Name = "Island Analyzer (placeholder)";
+      islandAnalyzer2.OperatorParameter.ActualName = IslandAnalyzerParameter.Name;
+
+      islandResultsCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Selection Pressure", null, "SelectionPressure"));
+      islandResultsCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Success Ratio", null, "CurrentSuccessRatio"));
+      islandResultsCollector2.ResultsParameter.ActualName = "Results";
 
       islandEvaluatedSolutionsCounter.Name = "Update EvaluatedSolutions";
@@ -443,34 +349,12 @@
       terminatedIslandsComparator.RightSideParameter.ActualName = NumberOfIslandsParameter.Name;
       terminatedIslandsComparator.ResultParameter.ActualName = "TerminateTerminatedIslands";
-      
-      bestQualityMemorizer3.BestQualityParameter.ActualName = "BestQuality";
-      bestQualityMemorizer3.MaximizationParameter.ActualName = MaximizationParameter.Name;
-      bestQualityMemorizer3.QualityParameter.ActualName = "BestQuality";
-
-      bestQualityMemorizer4.BestQualityParameter.ActualName = BestKnownQualityParameter.Name;
-      bestQualityMemorizer4.MaximizationParameter.ActualName = MaximizationParameter.Name;
-      bestQualityMemorizer4.QualityParameter.ActualName = "BestQuality";
-
-      bestAverageWorstQualityCalculator2.AverageQualityParameter.ActualName = "CurrentAverageBestQuality";
-      bestAverageWorstQualityCalculator2.BestQualityParameter.ActualName = "CurrentBestBestQuality";
-      bestAverageWorstQualityCalculator2.MaximizationParameter.ActualName = MaximizationParameter.Name;
-      bestAverageWorstQualityCalculator2.QualityParameter.ActualName = "CurrentBestQuality";
-      bestAverageWorstQualityCalculator2.WorstQualityParameter.ActualName = "CurrentWorstBestQuality";
-
-      dataTableValuesCollector3.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best BestQuality", null, "CurrentBestBestQuality"));
-      dataTableValuesCollector3.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average BestQuality", null, "CurrentAverageBestQuality"));
-      dataTableValuesCollector3.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst BestQuality", null, "CurrentWorstBestQuality"));
-      dataTableValuesCollector3.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
-      dataTableValuesCollector3.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, BestKnownQualityParameter.Name));
-      dataTableValuesCollector3.DataTableParameter.ActualName = "BestQualities";
-
-      dataTableValuesCollector4.CollectedValues.Add(new LookupParameter<DoubleValue>("Maximum Selection Pressure", null, MaximumSelectionPressureParameter.Name));
-      dataTableValuesCollector4.CollectedValues.Add(new SubScopesLookupParameter<DoubleValue>("Selection Pressure Island", null, "SelectionPressure"));
-      dataTableValuesCollector4.DataTableParameter.ActualName = "SelectionPressures";
-
-      qualityDifferenceCalculator2.AbsoluteDifferenceParameter.ActualName = "AbsoluteDifferenceBestKnownToBest";
-      qualityDifferenceCalculator2.FirstQualityParameter.ActualName = BestKnownQualityParameter.Name;
-      qualityDifferenceCalculator2.RelativeDifferenceParameter.ActualName = "RelativeDifferenceBestKnownToBest";
-      qualityDifferenceCalculator2.SecondQualityParameter.ActualName = "BestQuality";
+
+      analyzer2.Name = "Analyzer (placeholder)";
+      analyzer2.OperatorParameter.ActualName = AnalyzerParameter.Name;
+
+      resultsCollector3.CollectedValues.Add(new LookupParameter<IntValue>("Migrations"));
+      resultsCollector3.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
+      resultsCollector3.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
+      resultsCollector3.ResultsParameter.ActualName = ResultsParameter.Name;
 
       generationsTerminationCondition.Name = "Terminate (MaxGenerations) ?";
@@ -485,20 +369,11 @@
       variableCreator.Successor = uniformSubScopesProcessor0;
       uniformSubScopesProcessor0.Operator = islandVariableCreator;
-      uniformSubScopesProcessor0.Successor = bestQualityMemorizer1;
-      islandVariableCreator.Successor = islandBestQualityMemorizer1;
-      islandBestQualityMemorizer1.Successor = islandBestAverageWorstQualityCalculator1;
-      islandBestAverageWorstQualityCalculator1.Successor = islandDataTableValuesCollector1;
-      islandDataTableValuesCollector1.Successor = islandDataTableValuesCollector2;
-      islandDataTableValuesCollector2.Successor = islandQualityDifferenceCalculator1;
-      islandQualityDifferenceCalculator1.Successor = islandVisualizer1;
-      islandVisualizer1.Successor = islandResultsCollector;
-      islandResultsCollector.Successor = null;
-      bestQualityMemorizer1.Successor = bestQualityMemorizer2;
-      bestQualityMemorizer2.Successor = bestAverageWorstQualityCalculator1;
-      bestAverageWorstQualityCalculator1.Successor = dataTableValuesCollector1;
-      dataTableValuesCollector1.Successor = dataTableValuesCollector2;
-      dataTableValuesCollector2.Successor = qualityDifferenceCalculator1;
-      qualityDifferenceCalculator1.Successor = resultsCollector;
-      resultsCollector.Successor = comparisonFactorModifier;
+      uniformSubScopesProcessor0.Successor = analyzer1;
+      islandVariableCreator.Successor = islandAnalyzer1;
+      islandAnalyzer1.Successor = islandResultsCollector1;
+      islandResultsCollector1.Successor = null;
+      analyzer1.Successor = resultsCollector1;
+      resultsCollector1.Successor = resultsCollector2;
+      resultsCollector2.Successor = comparisonFactorModifier;
       comparisonFactorModifier.Successor = uniformSubScopesProcessor1;
       uniformSubScopesProcessor1.Operator = islandTerminatedBySelectionPressure1;
@@ -507,11 +382,7 @@
       islandTerminatedBySelectionPressure1.FalseBranch = mainOperator;
       islandTerminatedBySelectionPressure1.Successor = null;
-      mainOperator.Successor = islandBestQualityMemorizer2;
-      islandBestQualityMemorizer2.Successor = islandBestAverageWorstQualityCalculator2;
-      islandBestAverageWorstQualityCalculator2.Successor = islandDataTableValuesCollector3;
-      islandDataTableValuesCollector3.Successor = islandDataTableValuesCollector4;
-      islandDataTableValuesCollector4.Successor = islandQualityDifferenceCalculator2;
-      islandQualityDifferenceCalculator2.Successor = islandVisualizer2;
-      islandVisualizer2.Successor = islandEvaluatedSolutionsCounter;
+      mainOperator.Successor = islandAnalyzer2;
+      islandAnalyzer2.Successor = islandResultsCollector2;
+      islandResultsCollector2.Successor = islandEvaluatedSolutionsCounter;
       islandEvaluatedSolutionsCounter.Successor = islandEvaluatedSolutionsAssigner;
       islandEvaluatedSolutionsAssigner.Successor = islandSelectionPressureComparator;
@@ -538,11 +409,7 @@
       immigrationReplacer.Successor = null;
       generationsComparator.Successor = terminatedIslandsComparator;
-      terminatedIslandsComparator.Successor = bestQualityMemorizer3;
-      bestQualityMemorizer3.Successor = bestQualityMemorizer4;
-      bestQualityMemorizer4.Successor = bestAverageWorstQualityCalculator2;
-      bestAverageWorstQualityCalculator2.Successor = dataTableValuesCollector3;
-      dataTableValuesCollector3.Successor = dataTableValuesCollector4;
-      dataTableValuesCollector4.Successor = qualityDifferenceCalculator2;
-      qualityDifferenceCalculator2.Successor = generationsTerminationCondition;
+      terminatedIslandsComparator.Successor = analyzer2;
+      analyzer2.Successor = resultsCollector3;
+      resultsCollector3.Successor = generationsTerminationCondition;
       generationsTerminationCondition.TrueBranch = null;
       generationsTerminationCondition.FalseBranch = terminatedIslandsCondition;
