Index: branches/VOSGA/HeuristicLab.Algorithms.VOffspringSelectionGeneticAlgorithm/HeuristicLab.Algorithms.VOffspringSelectionGeneticAlgorithm-3.3.csproj
===================================================================
--- branches/VOSGA/HeuristicLab.Algorithms.VOffspringSelectionGeneticAlgorithm/HeuristicLab.Algorithms.VOffspringSelectionGeneticAlgorithm-3.3.csproj	(revision 11510)
+++ branches/VOSGA/HeuristicLab.Algorithms.VOffspringSelectionGeneticAlgorithm/HeuristicLab.Algorithms.VOffspringSelectionGeneticAlgorithm-3.3.csproj	(revision 11511)
@@ -161,4 +161,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="OffspringCollector.cs" />
     <Compile Include="OffspringSelectors\IOffspringSelector.cs" />
     <Compile Include="OffspringSelectors\StandardOffspringSelector.cs" />
Index: branches/VOSGA/HeuristicLab.Algorithms.VOffspringSelectionGeneticAlgorithm/OffspringCollector.cs
===================================================================
--- branches/VOSGA/HeuristicLab.Algorithms.VOffspringSelectionGeneticAlgorithm/OffspringCollector.cs	(revision 11511)
+++ branches/VOSGA/HeuristicLab.Algorithms.VOffspringSelectionGeneticAlgorithm/OffspringCollector.cs	(revision 11511)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.VOffspringSelectionGeneticAlgorithm {
+  [Item("OffspringCollector", "An operator that can be used as a pre-processing operator for Offspring Selectors to collect solutions.")]
+  [StorableClass]
+  public class OffspringCollector : SingleSuccessorOperator {
+    public LookupParameter<ItemList<IScope>> GeneratedOffspringParameter {
+      get { return (LookupParameter<ItemList<IScope>>)Parameters["GeneratedOffspring"]; }
+    }
+
+    [StorableConstructor]
+    private OffspringCollector(bool deserializing) : base(deserializing) { }
+    private OffspringCollector(OffspringCollector original, Cloner cloner) : base(original, cloner) { }
+    public OffspringCollector()
+      : base() {
+      Parameters.Add(new LookupParameter<ItemList<IScope>>("GeneratedOffspring", "Temporary store of the offspring population."));
+    }
+
+    public override IOperation Apply() {
+      IScope scope = ExecutionContext.Scope;
+      IScope offspring = scope.SubScopes[1];
+
+      GeneratedOffspringParameter.ActualValue.AddRange(offspring.SubScopes);
+      return base.Apply();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new OffspringCollector(this, cloner);
+    }
+  }
+}
Index: branches/VOSGA/HeuristicLab.Algorithms.VOffspringSelectionGeneticAlgorithm/OffspringSelectors/StandardOffspringSelector.cs
===================================================================
--- branches/VOSGA/HeuristicLab.Algorithms.VOffspringSelectionGeneticAlgorithm/OffspringSelectors/StandardOffspringSelector.cs	(revision 11510)
+++ branches/VOSGA/HeuristicLab.Algorithms.VOffspringSelectionGeneticAlgorithm/OffspringSelectors/StandardOffspringSelector.cs	(revision 11511)
@@ -31,5 +31,5 @@
   [Item("StandardOffspringSelector", "Selects among the offspring population those that are designated successful and discards the unsuccessful offspring, except for some lucky losers. It expects the parent scopes to be below the first sub-scope, and offspring scopes to be below the second sub-scope separated again in two sub-scopes, the first with the failed offspring and the second with successful offspring.")]
   [StorableClass]
-  public class StandardOffspringSelector : SingleSuccessorOperator, IOffspringSelector {
+  public class StandardOffspringSelector : InstrumentedOperator, IOffspringSelector {
     public ValueLookupParameter<DoubleValue> MaximumSelectionPressureParameter {
       get { return (ValueLookupParameter<DoubleValue>)Parameters["MaximumSelectionPressure"]; }
@@ -91,5 +91,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       double maxSelPress = MaximumSelectionPressureParameter.ActualValue.Value;
       double successRatio = SuccessRatioParameter.ActualValue.Value;
@@ -192,5 +192,5 @@
         EnoughChildrenGeneratedParameter.ActualValue.Value = true;
       }
-      return base.Apply();
+      return base.InstrumentedApply();
     }
   }
Index: branches/VOSGA/HeuristicLab.Algorithms.VOffspringSelectionGeneticAlgorithm/ProbabilitiesGenerator.cs
===================================================================
--- branches/VOSGA/HeuristicLab.Algorithms.VOffspringSelectionGeneticAlgorithm/ProbabilitiesGenerator.cs	(revision 11510)
+++ branches/VOSGA/HeuristicLab.Algorithms.VOffspringSelectionGeneticAlgorithm/ProbabilitiesGenerator.cs	(revision 11511)
@@ -34,20 +34,16 @@
   [Item("ProbabilitiesGenerator", "An operator the generates the probability vector for Multi Crossovers/Mutators")]
   [StorableClass]
-  public class ProbabilitiesGenerator : SingleSuccessorOperator {
+  public class ProbabilitiesGenerator : SingleSuccessorOperator, IAnalyzer {
+    public bool EnabledByDefault {
+      get { return false; }
+    }
     public ValueParameter<StringValue> SuccessfulOffspringFlagParameter {
       get { return (ValueParameter<StringValue>)Parameters["SuccessfulOffspringFlag"]; }
     }
-
     public ValueParameter<StringValue> OperatorNameVariableParameter {
       get { return (ValueParameter<StringValue>)Parameters["OperatorNameVariable"]; }
     }
-    public LookupParameter<ResultCollection> SuccessfulOffspringAnalysisParameter {
-      get { return (LookupParameter<ResultCollection>)Parameters["SuccessfulOffspringAnalysis"]; }
-    }
     public LookupParameter<IOperator> CrossoverParameter {
       get { return (LookupParameter<IOperator>)Parameters["Crossover"]; }
-    }
-    public ILookupParameter<IntValue> GenerationsParameter {
-      get { return (LookupParameter<IntValue>)Parameters["Generations"]; }
     }
     public LookupParameter<DoubleArray> ProbablilitiesParameter {
@@ -57,4 +53,7 @@
     public ValueParameter<DoubleValue> MinimumOperatorUsageParameter {
       get { return (ValueParameter<DoubleValue>)Parameters["MinimumOperatorUsage"]; }
+    }
+    public LookupParameter<ItemList<IScope>> GeneratedOffspringParameter {
+      get { return (LookupParameter<ItemList<IScope>>)Parameters["GeneratedOffspring"]; }
     }
 
@@ -69,14 +68,16 @@
       Parameters.Add(new ValueParameter<StringValue>("SuccessfulOffspringFlag", "The name of the flag which indicates if the individual was successful.", new StringValue("SuccessfulOffspring")));
       Parameters.Add(new ValueParameter<StringValue>("OperatorNameVariable", "The properties of the successful offspring that should be collected.", new StringValue("SelectedCrossoverOperator")));
-      Parameters.Add(new LookupParameter<IntValue>("Generations", "The current number of generations."));
-      Parameters.Add(new LookupParameter<ResultCollection>("SuccessfulOffspringAnalysis", "The successful offspring analysis which is created."));
       Parameters.Add(new LookupParameter<DoubleArray>("Probabilities"));
       Parameters.Add(new LookupParameter<IOperator>("Crossover"));
       Parameters.Add(new ValueParameter<DoubleValue>("MinimumOperatorUsage", "Minimum percentage of operator usage. ", new DoubleValue(0.05)));
+      Parameters.Add(new LookupParameter<ItemList<IScope>>("GeneratedOffspring", "Temporary store of the offspring population."));
     }
 
     public override IOperation Apply() {
-      IScope scope = ExecutionContext.Scope;
-      IScope offspring = scope.SubScopes[1];
+      if (GeneratedOffspringParameter.ActualValue == null) {
+        GeneratedOffspringParameter.ActualValue = new ItemList<IScope>();
+      }
+
+      var offspring = GeneratedOffspringParameter.ActualValue;
       string operatorName = OperatorNameVariableParameter.Value.Value;
       string succssFlag = SuccessfulOffspringFlagParameter.Value.Value;
@@ -88,13 +89,13 @@
         x.GetGenericTypeDefinition() == typeof(ICheckedMultiOperator<>))) {
 
-        for (int i = 0; i < offspring.SubScopes.Count; i++) {
+        for (int i = 0; i < offspring.Count; i++) {
           // fetch values from scopes
           IVariable tmpVar;
-          if (!offspring.SubScopes[i].Variables.TryGetValue(succssFlag, out tmpVar))
+          if (!offspring[i].Variables.TryGetValue(succssFlag, out tmpVar))
             throw new InvalidOperationException(Name + ": Could not determine if an offspring was successful or not.");
           BoolValue success = (tmpVar.Value as BoolValue);
           if (success == null) throw new InvalidOperationException(Name + ": The variable that indicates whether an offspring is successful or not must contain a BoolValue.");
 
-          if (!offspring.SubScopes[i].Variables.TryGetValue(operatorName, out tmpVar))
+          if (!offspring[i].Variables.TryGetValue(operatorName, out tmpVar))
             throw new InvalidOperationException(Name + ": Could not determine operator an offspring was created with.");
           StringValue op = (tmpVar.Value as StringValue);
@@ -126,4 +127,13 @@
         }
 
+        //initialize probabilities vector
+        if (ProbablilitiesParameter.ActualValue == null) {
+          ProbablilitiesParameter.ActualValue = new DoubleArray(crossoverCount);
+          for (int i = 0; i < crossoverCount; i++) {
+            ProbablilitiesParameter.ActualValue[i] = 1.0;
+          }
+          return base.Apply();
+        }
+
         //fill probabilities vector
         for (int i = 0; i < crossoverCount; i++) {
@@ -152,4 +162,6 @@
           }
         }
+
+        GeneratedOffspringParameter.ActualValue.Clear();
       }
 
