Index: branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/ConsecutiveSamplesEvaluator.cs
===================================================================
--- branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/ConsecutiveSamplesEvaluator.cs	(revision 10421)
+++ branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/ConsecutiveSamplesEvaluator.cs	(revision 10579)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -131,24 +132,24 @@
       var generation = generationValue == null ? 0 : generationValue.Value;
 
-      //calculat new rows for evaluation
-      if (dataMigrationInterval != 0 && generation % dataMigrationInterval == 0) {
-        //create fixed rows enumerable
-        var rows = Enumerable.Range(fixedSamples.Start, fixedSamples.Size);
-        //create consecutive rows enumerable
-        if (ConsecutiveSamples > 0) {
-          var islandIndex = IslandIndexParameter.ActualValue.Value;
-          var iteration = islandIndex + (generation / dataMigrationInterval);
-          var consecutiveSamples = (int)(ConsecutiveSamples * samples.Size);
-          var overlap = (int)Overlap * consecutiveSamples;
-          var consecutiveRows = GenerateRows(samples, fixedSamples, consecutiveSamples, overlap, iteration);
-          rows = rows.Concat(consecutiveRows);
-        }
-        //filter out test rows
-        rows = rows.Where(r => r < problemData.TestPartition.Start || r > problemData.TestPartition.End);
+      if (ConsecutiveSamples > 0 && dataMigrationInterval == 0)
+        throw new ArgumentException("The data migration interval must not be 0 if consecutive samples are used.");
 
-        //TODO change to lookup parameter
-        ExecutionContext.Scope.Variables.Remove("Rows");
-        ExecutionContext.Scope.Variables.Add(new HeuristicLab.Core.Variable("Rows", new EnumerableItem<int>(rows)));
+      //create fixed rows enumerable
+      var rows = Enumerable.Range(fixedSamples.Start, fixedSamples.Size);
+      //create consecutive rows enumerable
+      if (ConsecutiveSamples > 0) {
+        var islandIndex = IslandIndexParameter.ActualValue.Value;
+        var iteration = islandIndex + (generation / dataMigrationInterval);
+        var consecutiveSamples = (int)(ConsecutiveSamples * samples.Size);
+        var overlap = (int)Overlap * consecutiveSamples;
+        var consecutiveRows = GenerateRows(samples, fixedSamples, consecutiveSamples, overlap, iteration);
+        rows = rows.Concat(consecutiveRows);
       }
+      //filter out test rows
+      rows = rows.Where(r => r < problemData.TestPartition.Start || r > problemData.TestPartition.End);
+
+      //TODO change to lookup parameter
+      ExecutionContext.Scope.Variables.Remove("Rows");
+      ExecutionContext.Scope.Variables.Add(new HeuristicLab.Core.Variable("Rows", new EnumerableItem<int>(rows)));
 
       var executionContext = new ExecutionContext(ExecutionContext, evaluator, ExecutionContext.Scope);
Index: branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/RandomSamplesEvaluator .cs
===================================================================
--- branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/RandomSamplesEvaluator .cs	(revision 10421)
+++ branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/RandomSamplesEvaluator .cs	(revision 10579)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Linq;
 using HeuristicLab.Common;
@@ -25,5 +26,4 @@
 using HeuristicLab.Data;
 using HeuristicLab.Operators;
-using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -34,6 +34,5 @@
 namespace HeuristicLab.Algorithms.DataAnalysis.Symbolic {
   [StorableClass]
-  public sealed class RandomSamplesEvaluator : SingleSuccessorOperator, IStochasticOperator, ISymbolicDataAnalysisIslandGeneticAlgorithmEvaluator {
-    private const string RandomParameterName = "Random";
+  public sealed class RandomSamplesEvaluator : SingleSuccessorOperator, ISymbolicDataAnalysisIslandGeneticAlgorithmEvaluator {
     private const string ProblemDataParameterName = "ProblemData";
     private const string EvaluatorParameterName = "ProblemEvaluator";
@@ -43,11 +42,9 @@
     private const string DataMigrationIntervalParameterName = "DataMigrationInterval";
     private const string RandomSamplesParameterName = "RandomSamples";
+    private const string IslandIndexParameterName = "IslandIndex";
     private const string IterationsParameterName = "Iterations";
     private const string MaximumIterationsParameterName = "Maximum Iterations";
 
     #region parameter properties
-    public ILookupParameter<IRandom> RandomParameter {
-      get { return (ILookupParameter<IRandom>)Parameters[RandomParameterName]; }
-    }
     public ILookupParameter<IDataAnalysisProblemData> ProblemDataParameter {
       get { return (ILookupParameter<IDataAnalysisProblemData>)Parameters[ProblemDataParameterName]; }
@@ -70,4 +67,7 @@
     public IFixedValueParameter<PercentValue> RandomSamplesParameter {
       get { return (IFixedValueParameter<PercentValue>)Parameters[RandomSamplesParameterName]; }
+    }
+    public ILookupParameter<IntValue> IslandIndexParameter {
+      get { return (ILookupParameter<IntValue>)Parameters[IslandIndexParameterName]; }
     }
     public ILookupParameter<IntValue> IterationsParameter {
@@ -98,5 +98,4 @@
     public RandomSamplesEvaluator()
       : base() {
-      Parameters.Add(new LookupParameter<IRandom>(RandomParameterName, "The random generator to use."));
       Parameters.Add(new LookupParameter<IDataAnalysisProblemData>(ProblemDataParameterName, "The problem data on which the symbolic data analysis solution should be evaluated."));
       Parameters.Add(new LookupParameter<IOperator>(EvaluatorParameterName, "The evaluator provided by the symbolic data analysis  problem."));
@@ -106,4 +105,5 @@
       Parameters.Add(new FixedValueParameter<PercentValue>(RandomSamplesParameterName, "The number of random samples used for fitness calculation in each island.", new PercentValue()));
       Parameters.Add(new ValueLookupParameter<IntValue>(DataMigrationIntervalParameterName, "The number of generations that should pass between data migration phases."));
+      Parameters.Add(new LookupParameter<IntValue>(IslandIndexParameterName, "The index of the current island."));
       Parameters.Add(new LookupParameter<IntValue>(IterationsParameterName, "The number of performed iterations."));
       Parameters.Add(new ValueLookupParameter<IntValue>(MaximumIterationsParameterName, "The maximum number of performed iterations.") { Hidden = true });
@@ -122,24 +122,29 @@
       var generation = generationValue == null ? 0 : generationValue.Value;
 
-      //calculat new rows for evaluation
-      if (dataMigrationInterval != 0 && generation % dataMigrationInterval == 0) {
-        //create fixed rows enumerable
-        var rows = Enumerable.Range(fixedSamples.Start, fixedSamples.Size);
-        //create randomly chosen rows enumerable
-        if (randomSamples > 0) {
-          if (randomSamples > samples.Size - fixedSamples.Size) {
-            var error = string.Format("Could not select {0} random samples, because there are {1} total samples present from which {2} where used in the fixed partition. Please lower the number of random samples in the algorithm configuration.", randomSamples, samples.Size, fixedSamples.Size);
-            throw new OperatorExecutionException(this, error);
-          }
-          var randomRows = Enumerable.Range(samples.Start, samples.Size).Where(r => r < fixedSamples.Start || r >= fixedSamples.End);
-          randomRows = randomRows.SampleRandomWithoutRepetition(RandomParameter.ActualValue, randomSamples, samples.Size - fixedSamples.Size);
 
-          rows = rows.Concat(randomRows);
+      if (randomSamples > 0 && dataMigrationInterval == 0)
+        throw new ArgumentException("The data migration interval must not be 0 if random samples are used.");
+
+      //create fixed rows enumerable
+      var rows = Enumerable.Range(fixedSamples.Start, fixedSamples.Size);
+      //create randomly chosen rows enumerable
+      if (randomSamples > 0) {
+        var islandIndex = IslandIndexParameter.ActualValue.Value;
+        var random = new FastRandom(islandIndex + (generation / dataMigrationInterval));
+
+        if (randomSamples > samples.Size - fixedSamples.Size) {
+          var error = string.Format("Could not select {0} random samples, because there are {1} total samples present from which {2} where used in the fixed partition. Please lower the number of random samples in the algorithm configuration.", randomSamples, samples.Size, fixedSamples.Size);
+          throw new OperatorExecutionException(this, error);
         }
-        //filter out test rows
-        rows = rows.Where(r => r < problemData.TestPartition.Start || r > problemData.TestPartition.End);
-        ExecutionContext.Scope.Variables.Remove("Rows");
-        ExecutionContext.Scope.Variables.Add(new HeuristicLab.Core.Variable("Rows", new EnumerableItem<int>(rows)));
+        var randomRows = Enumerable.Range(samples.Start, samples.Size).Where(r => r < fixedSamples.Start || r >= fixedSamples.End);
+        randomRows = randomRows.SampleRandomWithoutRepetition(random, randomSamples, samples.Size - fixedSamples.Size);
+        rows = rows.Concat(randomRows);
       }
+
+      //filter out test rows        
+      rows = rows.Where(r => r < problemData.TestPartition.Start || r > problemData.TestPartition.End);
+      //TODO change to lookup parameter
+      ExecutionContext.Scope.Variables.Remove("Rows");
+      ExecutionContext.Scope.Variables.Add(new HeuristicLab.Core.Variable("Rows", new EnumerableItem<int>(rows)));
 
       var executionContext = new ExecutionContext(ExecutionContext, evaluator, ExecutionContext.Scope);
