Index: trunk/sources/HeuristicLab.Analysis/3.3/MultiAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Analysis/3.3/MultiAnalyzer.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Analysis/3.3/MultiAnalyzer.cs	(revision 10295)
@@ -69,5 +69,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       IntValue interval = UpdateIntervalParameter.ActualValue;
       if (interval == null) interval = new IntValue(1);
@@ -84,8 +84,8 @@
         foreach (IndexedItem<IAnalyzer> item in Operators.CheckedItems)
           next.Add(ExecutionContext.CreateOperation(item.Value));
-        next.Add(base.Apply());
+        next.Add(base.InstrumentedApply());
         return next;
       } else {
-        return base.Apply();
+        return base.InstrumentedApply();
       }
     }
Index: trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/MultiBinaryVectorCrossover.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/MultiBinaryVectorCrossover.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/MultiBinaryVectorCrossover.cs	(revision 10295)
@@ -90,7 +90,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one binary vector crossover to choose from.");
-      return base.Apply();
+      return base.InstrumentedApply();
     }
   }
Index: trunk/sources/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/MultiIntegerVectorCrossover.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/MultiIntegerVectorCrossover.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/MultiIntegerVectorCrossover.cs	(revision 10295)
@@ -99,7 +99,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one integer vector crossover to choose from.");
-      return base.Apply();
+      return base.InstrumentedApply();
     }
   }
Index: trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/Crossovers/MultiPermutationCrossover.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/Crossovers/MultiPermutationCrossover.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/Crossovers/MultiPermutationCrossover.cs	(revision 10295)
@@ -90,7 +90,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one permutation crossover to choose from.");
-      return base.Apply();
+      return base.InstrumentedApply();
     }
   }
Index: trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/Manipulators/MultiPermutationManipulator.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/Manipulators/MultiPermutationManipulator.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/Manipulators/MultiPermutationManipulator.cs	(revision 10295)
@@ -82,7 +82,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one permutation manipulator to choose from.");
-      return base.Apply();
+      return base.InstrumentedApply();
     }
   }
Index: trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/MultiRealVectorCrossover.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/MultiRealVectorCrossover.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/MultiRealVectorCrossover.cs	(revision 10295)
@@ -97,7 +97,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one real vector crossover to choose from.");
-      return base.Apply();
+      return base.InstrumentedApply();
     }
   }
Index: trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MultiRealVectorManipulator.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MultiRealVectorManipulator.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MultiRealVectorManipulator.cs	(revision 10295)
@@ -88,7 +88,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one real vector manipulator to choose from.");
-      return base.Apply();
+      return base.InstrumentedApply();
     }
   }
Index: trunk/sources/HeuristicLab.Operators/3.3/MultiOperator.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators/3.3/MultiOperator.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Operators/3.3/MultiOperator.cs	(revision 10295)
@@ -34,5 +34,5 @@
   [Item("MultiOperator", "A base class for operators which apply arbitrary many other operators of a specific type.")]
   [StorableClass]
-  public abstract class MultiOperator<T> : SingleSuccessorOperator, IMultiOperator<T> where T : class, IOperator {
+  public abstract class MultiOperator<T> : InstrumentedOperator, IMultiOperator<T> where T : class, IOperator {
     private List<IValueParameter<T>> operatorParameters;
     protected IEnumerable<IValueParameter<T>> OperatorParameters { get { return operatorParameters; } }
Index: trunk/sources/HeuristicLab.Operators/3.3/StochasticMultiBranch.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators/3.3/StochasticMultiBranch.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Operators/3.3/StochasticMultiBranch.cs	(revision 10295)
@@ -132,5 +132,5 @@
     /// or all selected operators have zero probabitlity.</exception>
     /// <returns>A new operation with the operator that was selected followed by the current operator's successor.</returns>
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       IRandom random = RandomParameter.ActualValue;
       DoubleArray probabilities = ProbabilitiesParameter.ActualValue;
@@ -156,5 +156,5 @@
         }
       }
-      OperationCollection next = new OperationCollection(base.Apply());
+      OperationCollection next = new OperationCollection(base.InstrumentedApply());
       if (successor != null) {
         if (TraceSelectedOperatorParameter.Value.Value)
Index: trunk/sources/HeuristicLab.Operators/3.3/SubScopesProcessor.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators/3.3/SubScopesProcessor.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Operators/3.3/SubScopesProcessor.cs	(revision 10295)
@@ -67,7 +67,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       List<IScope> scopes = GetScopesOnLevel(ExecutionContext.Scope, Depth.Value).ToList();
-      OperationCollection next = new OperationCollection(base.Apply());
+      OperationCollection next = new OperationCollection(base.InstrumentedApply());
       if (scopes.Count != Operators.Count)
         throw new ArgumentException("The number of operators doesn't match the number of sub-scopes at depth " + Depth.Value);
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/ShakingOperator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/ShakingOperator.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/ShakingOperator.cs	(revision 10295)
@@ -56,5 +56,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       if (NeighborhoodCountParameter.ActualValue == null)
         NeighborhoodCountParameter.ActualValue = new IntValue(Operators.CheckedItems.Count());
@@ -64,5 +64,5 @@
       var shaker = base.Operators.CheckedItems.SingleOrDefault(x => x.Index == index);
 
-      OperationCollection next = new OperationCollection(base.Apply());
+      OperationCollection next = new OperationCollection(base.InstrumentedApply());
       if (shaker.Value != null)
         next.Insert(0, ExecutionContext.CreateChildOperation(shaker.Value));
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedOperator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedOperator.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedOperator.cs	(revision 10295)
@@ -35,10 +35,10 @@
     public UserDefinedOperator() : base() { }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       OperationCollection result = new OperationCollection();
       foreach (IOperator op in Operators.CheckedItems.OrderBy(x => x.Index).Select(x => x.Value)) {
         result.Add(ExecutionContext.CreateOperation(op));
       }
-      result.Add(base.Apply());
+      result.Add(base.InstrumentedApply());
       return result;
     }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/MultiSymbolicDataAnalysisExpressionCreator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/MultiSymbolicDataAnalysisExpressionCreator.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/MultiSymbolicDataAnalysisExpressionCreator.cs	(revision 10295)
@@ -95,5 +95,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       if (ClonedSymbolicExpressionTreeGrammarParameter.ActualValue == null) {
         SymbolicExpressionTreeGrammarParameter.ActualValue.ReadOnly = true;
@@ -104,5 +104,5 @@
         globalScope.Variables.Add(new Core.Variable(ClonedSymbolicExpressionTreeGrammarParameterName, (ISymbolicExpressionGrammar)SymbolicExpressionTreeGrammarParameter.ActualValue.Clone()));
       }
-      return base.Apply();
+      return base.InstrumentedApply();
     }
 
Index: trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/MultiVRPSolutionCreator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/MultiVRPSolutionCreator.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Creators/MultiVRPSolutionCreator.cs	(revision 10295)
@@ -97,7 +97,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one VRP creator to choose from.");
-      return base.Apply();
+      return base.InstrumentedApply();
     }
   }
Index: trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Crossovers/BiasedMultiVRPSolutionCrossover.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Crossovers/BiasedMultiVRPSolutionCrossover.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Crossovers/BiasedMultiVRPSolutionCrossover.cs	(revision 10295)
@@ -21,15 +21,13 @@
 
 using System;
-using System.Collections.Generic;
 using System.Linq;
-using System.Text;
+using HeuristicLab.Analysis;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common;
-using HeuristicLab.Analysis;
-using HeuristicLab.Parameters;
-using HeuristicLab.Optimization;
-using HeuristicLab.Data;
-using HeuristicLab.Collections;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
@@ -81,5 +79,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       IOperator successor = null;
 
@@ -133,41 +131,5 @@
       }
 
-      ////////////////
-      IRandom random = RandomParameter.ActualValue;
-      DoubleArray probabilities = ActualProbabilitiesParameter.ActualValue;
-      if (probabilities.Length != Operators.Count) {
-        throw new InvalidOperationException(Name + ": The list of probabilities has to match the number of operators");
-      }
-      var checkedOperators = Operators.CheckedItems;
-      if (checkedOperators.Count() > 0) {
-        // select a random operator from the checked operators
-        double sum = (from indexedItem in checkedOperators select probabilities[indexedItem.Index]).Sum();
-        if (sum == 0) throw new InvalidOperationException(Name + ": All selected operators have zero probability.");
-        double r = random.NextDouble() * sum;
-        sum = 0;
-        foreach (var indexedItem in checkedOperators) {
-          sum += probabilities[indexedItem.Index];
-          if (sum > r) {
-            successor = indexedItem.Value;
-            break;
-          }
-        }
-      }
-
-      IOperation successorOp = null;
-      if (Successor != null)
-        successorOp = ExecutionContext.CreateOperation(Successor);
-      OperationCollection next = new OperationCollection(successorOp);
-      if (successor != null) {
-        SelectedOperatorParameter.ActualValue = new StringValue(successor.Name);
-
-        if (CreateChildOperation)
-          next.Insert(0, ExecutionContext.CreateChildOperation(successor));
-        else next.Insert(0, ExecutionContext.CreateOperation(successor));
-      } else {
-        SelectedOperatorParameter.ActualValue = new StringValue("");
-      }
-
-      return next;
+      return base.InstrumentedApply();
     }
   }
Index: trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Crossovers/MultiVRPSolutionCrossover.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Crossovers/MultiVRPSolutionCrossover.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Crossovers/MultiVRPSolutionCrossover.cs	(revision 10295)
@@ -106,7 +106,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one permutation crossover to choose from.");
-      return base.Apply();
+      return base.InstrumentedApply();
     }
   }
Index: trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Manipulators/BiasedMultiVRPSolutionManipulator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Manipulators/BiasedMultiVRPSolutionManipulator.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Manipulators/BiasedMultiVRPSolutionManipulator.cs	(revision 10295)
@@ -21,15 +21,13 @@
 
 using System;
-using System.Collections.Generic;
 using System.Linq;
-using System.Text;
+using HeuristicLab.Analysis;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common;
-using HeuristicLab.Analysis;
-using HeuristicLab.Parameters;
-using HeuristicLab.Optimization;
-using HeuristicLab.Data;
-using HeuristicLab.Collections;
 
 namespace HeuristicLab.Problems.VehicleRouting.Encodings.General {
@@ -40,5 +38,5 @@
       get { return (ValueLookupParameter<DoubleArray>)Parameters["ActualProbabilities"]; }
     }
-    
+
     public ValueLookupParameter<StringValue> SuccessProgressAnalyisis {
       get { return (ValueLookupParameter<StringValue>)Parameters["SuccessProgressAnalysis"]; }
@@ -63,5 +61,5 @@
       : base() {
       Parameters.Add(new ValueLookupParameter<DoubleArray>("ActualProbabilities", "The array of relative probabilities for each operator."));
-      Parameters.Add(new ValueLookupParameter<StringValue>("SuccessProgressAnalysis", "The success progress analyisis to be considered", 
+      Parameters.Add(new ValueLookupParameter<StringValue>("SuccessProgressAnalysis", "The success progress analyisis to be considered",
         new StringValue("ExecutedMutationOperator")));
 
@@ -81,5 +79,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       IOperator successor = null;
 
@@ -133,41 +131,5 @@
       }
 
-      ////////////////
-      IRandom random = RandomParameter.ActualValue;
-      DoubleArray probabilities = ActualProbabilitiesParameter.ActualValue;
-      if (probabilities.Length != Operators.Count) {
-        throw new InvalidOperationException(Name + ": The list of probabilities has to match the number of operators");
-      }
-      var checkedOperators = Operators.CheckedItems;
-      if (checkedOperators.Count() > 0) {
-        // select a random operator from the checked operators
-        double sum = (from indexedItem in checkedOperators select probabilities[indexedItem.Index]).Sum();
-        if (sum == 0) throw new InvalidOperationException(Name + ": All selected operators have zero probability.");
-        double r = random.NextDouble() * sum;
-        sum = 0;
-        foreach (var indexedItem in checkedOperators) {
-          sum += probabilities[indexedItem.Index];
-          if (sum > r) {
-            successor = indexedItem.Value;
-            break;
-          }
-        }
-      }
-
-      IOperation successorOp = null;
-      if (Successor != null)
-        successorOp = ExecutionContext.CreateOperation(Successor);
-      OperationCollection next = new OperationCollection(successorOp);
-      if (successor != null) {
-        SelectedOperatorParameter.ActualValue = new StringValue(successor.Name);
-
-        if (CreateChildOperation)
-          next.Insert(0, ExecutionContext.CreateChildOperation(successor));
-        else next.Insert(0, ExecutionContext.CreateOperation(successor));
-      } else {
-        SelectedOperatorParameter.ActualValue = new StringValue("");
-      }
-
-      return next;
+      return base.InstrumentedApply();
     }
   }
Index: trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Manipulators/MultiVRPSolutionManipulator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Manipulators/MultiVRPSolutionManipulator.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Manipulators/MultiVRPSolutionManipulator.cs	(revision 10295)
@@ -97,7 +97,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one permutation manipulator to choose from.");
-      return base.Apply();
+      return base.InstrumentedApply();
     }
   }
Index: trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveGenerator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveGenerator.cs	(revision 10292)
+++ trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveGenerator.cs	(revision 10295)
@@ -153,7 +153,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation InstrumentedApply() {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one VRP move generator choose from.");
-      OperationCollection next = new OperationCollection(base.Apply());
+      OperationCollection next = new OperationCollection(base.InstrumentedApply());
 
       for (int i = 0; i < SelectedOperatorsParameter.ActualValue.Value; i++) {
