Index: /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandGAEvaluator.cs
===================================================================
--- /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandGAEvaluator.cs	(revision 10155)
+++ /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandGAEvaluator.cs	(revision 10156)
@@ -34,6 +34,5 @@
 namespace HeuristicLab.Algorithms.DataAnalysis.Symbolic {
   [StorableClass]
-  public sealed class SymbolicDataAnalysisIslandGAEvaluator<T> : SingleSuccessorOperator, IStochasticOperator, ISymbolicDataAnalysisIslandGAEvaluator
-    where T : class,IDataAnalysisProblemData {
+  public sealed class SymbolicDataAnalysisIslandGAEvaluator : SingleSuccessorOperator, IStochasticOperator, ISymbolicDataAnalysisIslandGAEvaluator {
     private const string RandomParameterName = "Random";
     private const string ProblemDataParameterName = "ProblemData";
@@ -48,9 +47,9 @@
       get { return (ILookupParameter<IRandom>)Parameters[RandomParameterName]; }
     }
-    public ILookupParameter<T> ProblemDataParameter {
-      get { return (ILookupParameter<T>)Parameters[ProblemDataParameterName]; }
+    public ILookupParameter<IDataAnalysisProblemData> ProblemDataParameter {
+      get { return (ILookupParameter<IDataAnalysisProblemData>)Parameters[ProblemDataParameterName]; }
     }
-    public ILookupParameter<ISymbolicDataAnalysisSingleObjectiveEvaluator<T>> EvaluatorParameter {
-      get { return (ILookupParameter<ISymbolicDataAnalysisSingleObjectiveEvaluator<T>>)Parameters[EvaluatorParameterName]; }
+    public ILookupParameter<IOperator> EvaluatorParameter {
+      get { return (ILookupParameter<IOperator>)Parameters[EvaluatorParameterName]; }
     }
     public ILookupParameter<DoubleValue> QualityParameter {
@@ -68,12 +67,11 @@
     #endregion
 
-
     [StorableConstructor]
     private SymbolicDataAnalysisIslandGAEvaluator(bool deserializing) : base(deserializing) { }
-    private SymbolicDataAnalysisIslandGAEvaluator(SymbolicDataAnalysisIslandGAEvaluator<T> original, Cloner cloner)
+    private SymbolicDataAnalysisIslandGAEvaluator(SymbolicDataAnalysisIslandGAEvaluator original, Cloner cloner)
       : base(original, cloner) {
     }
     public override IDeepCloneable Clone(Cloner cloner) {
-      return new SymbolicDataAnalysisIslandGAEvaluator<T>(this, cloner);
+      return new SymbolicDataAnalysisIslandGAEvaluator(this, cloner);
     }
 
@@ -81,6 +79,6 @@
       : base() {
       Parameters.Add(new LookupParameter<IRandom>(RandomParameterName, "The random generator to use."));
-      Parameters.Add(new LookupParameter<T>(ProblemDataParameterName, "The problem data on which the symbolic data analysis solution should be evaluated."));
-      Parameters.Add(new LookupParameter<ISymbolicDataAnalysisSingleObjectiveEvaluator<T>>(EvaluatorParameterName, "The evaluator provided by the symbolic data analysis  problem."));
+      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."));
       Parameters.Add(new LookupParameter<DoubleValue>(QualityParameterName, "The quality which is calculated by the encapsulated evaluator."));
       Parameters.Add(new ValueLookupParameter<IntRange>(FitnessCalculationPartitionParameterName, "The data partition used to calculate the fitness"));
Index: /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandGeneticAlgorithm.cs
===================================================================
--- /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandGeneticAlgorithm.cs	(revision 10155)
+++ /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandGeneticAlgorithm.cs	(revision 10156)
@@ -30,5 +30,4 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.DataAnalysis;
 using HeuristicLab.Problems.DataAnalysis.Symbolic;
 using HeuristicLab.Random;
@@ -128,7 +127,11 @@
       NumberOfIslandsParameter.ValueChanged += NumberOfIslandsParameter_ValueChanged;
       NumberOfIslandsParameter.Value.ValueChanged += (o, ev) => RecalculateFixedSamplesPartitions();
-      FixedSamplesParameter.Value.ValueChanged += (o, e) => RecalculateFixedSamplesPartitions();
+      FixedSamplesParameter.Value.ValueChanged += (o, e) => {
+        RecalculateFixedSamplesPartitions();
+        ReevaluateImmigrants = FixedSamples >= Problem.FitnessCalculationPartition.Size;
+      };
       RandomSamplesParameter.Value.ValueChanged += (o, e) => { ReevaluteElites = RandomSamples != 0; };
       Analyzer.Operators.PropertyChanged += (o, e) => ParameterizeAnalyzers();
+      EvaluatorParameter.ValueChanged += (o, e) => ParameterizeEvaluator();
     }
 
@@ -155,4 +158,12 @@
     }
 
+    private void ParameterizeEvaluator() {
+      var evaluator = EvaluatorParameter.Value;
+      var islandGAEvaluator = evaluator as SymbolicDataAnalysisIslandGAEvaluator;
+      if (islandGAEvaluator != null) {
+        islandGAEvaluator.RandomSamplesParameter.ActualName = RandomSamplesParameterName;
+      }
+    }
+
     private void NumberOfIslandsParameter_ValueChanged(object sender, EventArgs e) {
       NumberOfIslands.ValueChanged += (o, ev) => RecalculateFixedSamplesPartitions();
@@ -162,6 +173,4 @@
     protected override void Problem_Reset(object sender, EventArgs e) {
       FixedSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;
-      RandomSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;
-      RecalculateFixedSamplesPartitions();
       base.Problem_Reset(sender, e);
     }
@@ -170,19 +179,11 @@
       Problem.FitnessCalculationPartition.ValueChanged += Problem_Reset;
       FixedSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;
-      RandomSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;
-
-      if (Problem is IRegressionProblem) {
-        var evaluator = new SymbolicDataAnalysisIslandGAEvaluator<IRegressionProblemData>();
-        evaluator.RandomSamplesParameter.ActualName = RandomSamplesParameterName;
-        EvaluatorParameter.Value = evaluator;
-      } else if (Problem is IClassificationProblem) {
-        var evaluator = new SymbolicDataAnalysisIslandGAEvaluator<IClassificationProblemData>();
-        evaluator.RandomSamplesParameter.ActualName = RandomSamplesParameterName;
-        EvaluatorParameter.Value = evaluator;
-      } else
+
+      if (Problem != null && EvaluatorParameter.Value == null) {
+        EvaluatorParameter.Value = new SymbolicDataAnalysisIslandGAEvaluator();
+      } else if (Problem == null)
         EvaluatorParameter.Value = null;
 
-      ParameterizeStochasticOperatorForIsland(EvaluatorParameter.Value);
-
+      ParameterizeStochasticOperator(EvaluatorParameter.Value);
       RecalculateFixedSamplesPartitions();
       base.OnProblemChanged();
Index: /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandOffspringSelectionGeneticAlgorithm.cs
===================================================================
--- /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandOffspringSelectionGeneticAlgorithm.cs	(revision 10155)
+++ /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandOffspringSelectionGeneticAlgorithm.cs	(revision 10156)
@@ -31,5 +31,4 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.DataAnalysis;
 using HeuristicLab.Problems.DataAnalysis.Symbolic;
 
@@ -128,7 +127,11 @@
       NumberOfIslandsParameter.ValueChanged += NumberOfIslandsParameter_ValueChanged;
       NumberOfIslandsParameter.Value.ValueChanged += (o, ev) => RecalculateFixedSamplesPartitions();
-      FixedSamplesParameter.Value.ValueChanged += (o, e) => RecalculateFixedSamplesPartitions();
+      FixedSamplesParameter.Value.ValueChanged += (o, e) => {
+        RecalculateFixedSamplesPartitions();
+        ReevaluateImmigrants = FixedSamples >= Problem.FitnessCalculationPartition.Size;
+      };
       RandomSamplesParameter.Value.ValueChanged += (o, e) => { ReevaluteElites = RandomSamples != 0; };
       Analyzer.Operators.PropertyChanged += (o, e) => ParameterizeAnalyzers();
+      EvaluatorParameter.ValueChanged += (o, e) => ParameterizeEvaluator();
     }
 
@@ -155,4 +158,12 @@
     }
 
+    private void ParameterizeEvaluator() {
+      var evaluator = EvaluatorParameter.Value;
+      var islandGAEvaluator = evaluator as SymbolicDataAnalysisIslandGAEvaluator;
+      if (islandGAEvaluator != null) {
+        islandGAEvaluator.RandomSamplesParameter.ActualName = RandomSamplesParameterName;
+      }
+    }
+
     private void NumberOfIslandsParameter_ValueChanged(object sender, EventArgs e) {
       NumberOfIslands.ValueChanged += (o, ev) => RecalculateFixedSamplesPartitions();
@@ -162,6 +173,4 @@
     protected override void Problem_Reset(object sender, EventArgs e) {
       FixedSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;
-      RandomSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;
-      RecalculateFixedSamplesPartitions();
       base.Problem_Reset(sender, e);
     }
@@ -170,15 +179,8 @@
       Problem.FitnessCalculationPartition.ValueChanged += Problem_Reset;
       FixedSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;
-      RandomSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;
-
-      if (Problem is IRegressionProblem) {
-        var evaluator = new SymbolicDataAnalysisIslandGAEvaluator<IRegressionProblemData>();
-        evaluator.RandomSamplesParameter.ActualName = RandomSamplesParameterName;
-        EvaluatorParameter.Value = evaluator;
-      } else if (Problem is IClassificationProblem) {
-        var evaluator = new SymbolicDataAnalysisIslandGAEvaluator<IClassificationProblemData>();
-        evaluator.RandomSamplesParameter.ActualName = RandomSamplesParameterName;
-        EvaluatorParameter.Value = evaluator;
-      } else
+
+      if (Problem != null && EvaluatorParameter.Value == null) {
+        EvaluatorParameter.Value = new SymbolicDataAnalysisIslandGAEvaluator();
+      } else if (Problem == null)
         EvaluatorParameter.Value = null;
 
