Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Problem/PushProblem.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Problem/PushProblem.cs	(revision 14733)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Problem/PushProblem.cs	(revision 14744)
@@ -4,5 +4,4 @@
   using System.Collections.Generic;
   using System.Linq;
-  using BenchmarkSuite.Problems;
   using Common;
   using Configuration;
@@ -10,4 +9,6 @@
   using Encodings.IntegerVectorEncoding;
   using Expressions;
+
+  using HeuristicLab.BenchmarkSuite;
   using HeuristicLab.Data;
   using Instances;
@@ -21,5 +22,5 @@
   [Creatable(CreatableAttribute.Categories.GeneticProgrammingProblems, Priority = 180)]
   [Item("Push Problem", "")]
-  public class PushProblem : SingleObjectiveBasicProblem<IntegerVectorEncoding>, IProblemInstanceConsumer<Data> {
+  public class PushProblem : SingleObjectiveBasicProblem<IntegerVectorEncoding>, IProblemInstanceConsumer<IBenchmarkSuiteDataDescriptor> {
     [Storable]
     private readonly PushConfiguration config;
@@ -49,5 +50,4 @@
       this.InitEvents();
     }
-
 
     [StorableHook(HookType.AfterDeserialization)]
@@ -102,8 +102,8 @@
       var bounds = new IntMatrix(1, 3, new[] { "Training Start", "Training End | Test Start", "Test End" });
       bounds.ItemChanged += (s, e) => {
-        if (Data == null)
+        if (this.DataDescriptor == null)
           return;
 
-        var max = Data.OriginalTestCount + Data.OriginalTrainingCount - 1;
+        var max = this.DataDescriptor.OriginalTestCount + this.DataDescriptor.OriginalTrainingCount - 1;
         bounds[0, 0] = Math.Min(Math.Max(bounds[0, 0], 0), max);
         bounds[0, 2] = Math.Max(Math.Min(bounds[0, 2], max), 0);
@@ -174,5 +174,5 @@
         new IntValue(config.MaxPointsInRandomExpression)) { Hidden = true });
 
-      Parameters.Add(new ValueParameter<Data>(DataParameterName, DataParameterDescription));
+      Parameters.Add(new ValueParameter<IBenchmarkSuiteDataDescriptor>(DataParameterName, DataParameterDescription));
 
       Encoding.Bounds[0, 0] = 0;
@@ -204,10 +204,10 @@
     }
 
-    public IValueParameter<Data> DataParameter
-    {
-      get { return (IValueParameter<Data>)Parameters[DataParameterName]; }
-    }
-
-    public Data Data
+    public IValueParameter<IBenchmarkSuiteDataDescriptor> DataParameter
+    {
+      get { return (IValueParameter<IBenchmarkSuiteDataDescriptor>)Parameters[DataParameterName]; }
+    }
+
+    public IBenchmarkSuiteDataDescriptor DataDescriptor
     {
       get { return DataParameter.Value; }
@@ -394,6 +394,5 @@
       var bestIdx = Array.IndexOf(qualities, bestQuality);
       var bestIndividual = individuals[bestIdx];
-      var program = bestIndividual.PushProgram(config.EnabledExpressions);
-      var solution = new PushSolution(program, bestQuality, Data, random, pool);
+      var solution = new PushSolution(bestIndividual.IntegerVector(), bestQuality, DataDescriptor, random, config);
 
       if (!results.ContainsKey(bestSolutionResultName)) {
@@ -405,5 +404,6 @@
 
     public override double Evaluate(Individual individual, IRandom random) {
-      var program = individual.PushProgram(config.EnabledExpressions);
+
+      var program = individual.PushProgram(config.EnabledExpressions as IReadOnlyList<string>);
       var expandExpression = new ExecExpandExpression(program);
       var results = new List<double>();
@@ -411,5 +411,5 @@
       using (var interpreter = pool.GetInstance(random)) {
         for (var i = DataBounds[0, 0]; i < DataBounds[0, 1]; i++) {
-          var example = Data.Examples[i];
+          var example = this.DataDescriptor.Examples[i];
 
           interpreter.BooleanStack.Push(example.InputBoolean);
@@ -419,7 +419,7 @@
           interpreter.Run(expandExpression);
 
-          var diff = GetDiff(example.OutputInt, interpreter.IntegerStack, Data.WorstResult, LongDiffer) +
-                     GetDiff(example.OutputFloat, interpreter.FloatStack, Data.WorstResult, DoubleDiffer) +
-                     GetDiff(example.OutputBoolean, interpreter.BooleanStack, Data.WorstResult, BooleanDiffer);
+          var diff = GetDiff(example.OutputInt, interpreter.IntegerStack, this.DataDescriptor.WorstResult, LongDiffer) +
+                     GetDiff(example.OutputFloat, interpreter.FloatStack, this.DataDescriptor.WorstResult, DoubleDiffer) +
+                     GetDiff(example.OutputBoolean, interpreter.BooleanStack, this.DataDescriptor.WorstResult, BooleanDiffer);
 
           results.Add(diff);
@@ -466,11 +466,11 @@
     }
 
-    public void Load(Data data) {
-      Data = data;
-      BestKnownQuality = data.BestResult;
+    public void Load(IBenchmarkSuiteDataDescriptor descriptor) {
+      this.DataDescriptor = descriptor;
+      BestKnownQuality = descriptor.BestResult;
 
       DataBounds[0, 0] = 0;
-      DataBounds[0, 2] = Data.OriginalTrainingCount + Data.OriginalTestCount;
-      DataBounds[0, 1] = Data.OriginalTrainingCount;
+      DataBounds[0, 2] = this.DataDescriptor.OriginalTrainingCount + this.DataDescriptor.OriginalTestCount;
+      DataBounds[0, 1] = this.DataDescriptor.OriginalTrainingCount;
     }
   }
