Index: branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/HeuristicLab.Problems.ProgramSynthesis.csproj
===================================================================
--- branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/HeuristicLab.Problems.ProgramSynthesis.csproj	(revision 14602)
+++ branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/HeuristicLab.Problems.ProgramSynthesis.csproj	(revision 14602)
@@ -0,0 +1,119 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{5C93448C-47E3-4C3F-B1D0-EE62A48C3204}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.ProgramSynthesis</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.ProgramSynthesis</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <LangVersion>5</LangVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Encodings.IntegerVectorEncoding-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.IntegerVectorEncoding-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4, Version=3.4.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Parameters-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.Instances-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Instances-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Push\PushProblem.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Algorithms.PushGP\HeuristicLab.Algorithms.PushGP.csproj">
+      <Project>{368d1303-470c-4f31-91f2-0fad379daa45}</Project>
+      <Name>HeuristicLab.Algorithms.PushGP</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.BenchmarkSuite\HeuristicLab.BenchmarkSuite.csproj">
+      <Project>{22B5C087-CFC7-4D40-86C6-32FCF2CA921E}</Project>
+      <Name>HeuristicLab.BenchmarkSuite</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/HeuristicLab.Problems.ProgramSynthesis.csproj.user
===================================================================
--- branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/HeuristicLab.Problems.ProgramSynthesis.csproj.user	(revision 14602)
+++ branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/HeuristicLab.Problems.ProgramSynthesis.csproj.user	(revision 14602)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ProjectFiles</ProjectView>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
+    <StartAction>Program</StartAction>
+    <StartProgram>T:\BTSync\projects\svn\hl\trunk\sources\bin\HeuristicLab 3.3.exe</StartProgram>
+  </PropertyGroup>
+</Project>
Index: branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/HeuristicLab.Problems.PushGP.csproj
===================================================================
--- branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/HeuristicLab.Problems.PushGP.csproj	(revision 14513)
+++ 	(revision )
@@ -1,97 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{5C93448C-47E3-4C3F-B1D0-EE62A48C3204}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>HeuristicLab.Problems.PushGP</RootNamespace>
-    <AssemblyName>HeuristicLab.Problems.PushGP</AssemblyName>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <TargetFrameworkProfile />
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <LangVersion>5</LangVersion>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Encodings.IntegerVectorEncoding-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.IntegerVectorEncoding-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4, Version=3.4.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="System" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Net.Http" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Plugin.cs" />
-    <Compile Include="ProgramSynthesis\PushProblem.cs" />
-    <Compile Include="ProgramSynthesis\PushEvalutator.cs" />
-    <Compile Include="ProgramSynthesis\PushProgram.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\HeuristicLab.Algorithms.PushGP\HeuristicLab.Algorithms.PushGP.csproj">
-      <Project>{368d1303-470c-4f31-91f2-0fad379daa45}</Project>
-      <Name>HeuristicLab.Algorithms.PushGP</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup />
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PostBuildEvent>"T:\BTSync\projects\svn\hl\trunk\sources\bin\HeuristicLab 3.3.exe"</PostBuildEvent>
-  </PropertyGroup>
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>
Index: branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/HeuristicLab.Problems.PushGP.csproj.user
===================================================================
--- branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/HeuristicLab.Problems.PushGP.csproj.user	(revision 14513)
+++ 	(revision )
@@ -1,6 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <ProjectView>ShowAllFiles</ProjectView>
-  </PropertyGroup>
-</Project>
Index: branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/Plugin.cs
===================================================================
--- branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/Plugin.cs	(revision 14513)
+++ branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/Plugin.cs	(revision 14602)
@@ -26,8 +26,15 @@
   using HeuristicLab.PluginInfrastructure;
 
-  [Plugin("HeuristicLab.Problems.ProgramSynthesis.PushGP", "1.0")]
-  [PluginFile("HeuristicLab.Problems.ProgramSynthesis.PushGP.dll", PluginFileType.Assembly)]
+  [Plugin("HeuristicLab.Problems.ProgramSynthesis", "1.0")]
+  [PluginFile("HeuristicLab.Problems.ProgramSynthesis.dll", PluginFileType.Assembly)]
   [PluginFile("HeuristicLab.Algorithms.PushGP.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Problems.ProgramSynthesis.BenchmarkSuite", "1.0")]
   [PluginDependency("HeuristicLab.Random", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.IntegerVectorEncoding", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
   public class PushGpPlugin : PluginBase {
 
Index: branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/PushEvalutator.cs
===================================================================
--- branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/PushEvalutator.cs	(revision 14602)
+++ branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/PushEvalutator.cs	(revision 14602)
@@ -0,0 +1,12 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.PushGP.ProgramSynthesis {
+
+  public class PushEvalutator {
+  }
+}
Index: branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/PushProblem.cs
===================================================================
--- branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/PushProblem.cs	(revision 14602)
+++ branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/PushProblem.cs	(revision 14602)
@@ -0,0 +1,144 @@
+﻿using System;
+
+namespace HeuristicLab.Problems.PushGP.ProgramSynthesis {
+  using System.Collections.Generic;
+  using System.Linq;
+
+  using HeuristicLab.Algorithms.PushGP.Expressions;
+  using HeuristicLab.Algorithms.PushGP.Interpreter;
+  using HeuristicLab.BenchmarkSuite.ProblemData;
+  using HeuristicLab.Common;
+  using HeuristicLab.Core;
+  using HeuristicLab.Data;
+  using HeuristicLab.Encodings.IntegerVectorEncoding;
+  using HeuristicLab.Optimization;
+  using HeuristicLab.Parameters;
+  //using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+  using HeuristicLab.Problems.Instances;
+
+  //[StorableClass]
+  [Creatable(CreatableAttribute.Categories.GeneticProgrammingProblems, Priority = 180)]
+  [Item("Push GP Problem", "")]
+  public class PushProblem : SingleObjectiveBasicProblem<IntegerVectorEncoding>, IProblemInstanceConsumer<IPushData> {
+
+    private readonly PushGpInterpreterPool pool = new PushGpInterpreterPool();
+    private IPushData pushData;
+
+    public PushProblem() {
+      this.InitParameters();
+
+      this.Encoding.Bounds[0, 0] = 0;
+      this.Encoding.Bounds[0, 1] = ExpressionTable.Count - 1;
+      this.Encoding.Length = this.pool.Configuration.MaxPointsInProgram;
+    }
+
+    #region Parameters
+
+    private const string EvalPushLimitParameterName = "EvalPushLimit";
+    private const string MaxProgramLengthParameterName = "MaxProgramLength";
+    private const string TopLevelPushCodeParameterName = "TopLevelPushCode";
+    private const string TopLevelPopCodeParameterName = "TopLevelPopCode";
+
+    private void InitParameters() {
+      this.Parameters.Add(new FixedValueParameter<IntValue>(EvalPushLimitParameterName, new IntValue(this.pool.Configuration.EvalPushLimit)));
+      this.Parameters.Add(new FixedValueParameter<IntValue>(MaxProgramLengthParameterName, new IntValue(this.pool.Configuration.MaxPointsInProgram)));
+      this.Parameters.Add(new FixedValueParameter<BoolValue>(TopLevelPushCodeParameterName, new BoolValue(this.pool.Configuration.TopLevelPushCode)) { Hidden = true });
+      this.Parameters.Add(new FixedValueParameter<BoolValue>(TopLevelPopCodeParameterName, new BoolValue(this.pool.Configuration.TopLevelPopCode)) { Hidden = true });
+    }
+
+    public IValueParameter<IntValue> EvalPushLimitParameter { get { return this.Parameters[EvalPushLimitParameterName] as ValueParameter<IntValue>; } }
+    public int EvalPushLimit
+    {
+      get { return this.pool.Configuration.EvalPushLimit; }
+      set
+      {
+        this.EvalPushLimitParameter.Value.Value = value;
+        this.pool.Configuration.EvalPushLimit = value;
+      }
+    }
+
+    public IValueParameter<IntValue> MaxProgramLengthParameter { get { return this.Parameters[MaxProgramLengthParameterName] as ValueParameter<IntValue>; } }
+
+    public int MaxProgramLength
+    {
+      get { return this.pool.Configuration.MaxPointsInProgram; }
+      set
+      {
+        this.MaxProgramLengthParameter.Value.Value = value;
+        this.Encoding.LengthParameter.Value.Value = value;
+        this.pool.Configuration.MaxPointsInProgram = value;
+      }
+    }
+
+    public IValueParameter<BoolValue> TopLevelPushParameter { get { return this.Parameters[TopLevelPushCodeParameterName] as ValueParameter<BoolValue>; } }
+
+    public bool TopLevelPushCode
+    {
+      get { return this.pool.Configuration.TopLevelPushCode; }
+      set
+      {
+        this.TopLevelPushParameter.Value.Value = value;
+        this.pool.Configuration.TopLevelPushCode = value;
+      }
+    }
+
+    public IValueParameter<BoolValue> TopLevelPopParameter { get { return this.Parameters[TopLevelPopCodeParameterName] as ValueParameter<BoolValue>; } }
+
+    public bool TopLevelPopCode
+    {
+      get { return this.pool.Configuration.TopLevelPopCode; }
+      set
+      {
+        this.TopLevelPushParameter.Value.Value = value;
+        this.pool.Configuration.TopLevelPopCode = value;
+      }
+    }
+
+    #endregion
+
+    // persistence
+    //[StorableConstructor]
+    public PushProblem(bool deserializing) : base(deserializing) { }
+
+    // cloning
+    public PushProblem(PushProblem original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public override bool Maximization { get { return false; } }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      throw new NotImplementedException();
+    }
+
+    public override double Evaluate(Individual individual, IRandom random) {
+      var vector = individual.IntegerVector();
+      var program = MapToProgram(vector);
+      var results = new List<long>();
+
+      using (var interpreter = pool.GetInstance()) {
+        for (var i = 0; i < this.pushData.TrainingCount; i++) {
+          this.pushData.ApplyTrainingInput(interpreter, i);
+          interpreter.Run(program);
+
+          var diff = (long)this.pushData.CompareTrainingOutput(interpreter, i);
+          results.Add(diff);
+
+          interpreter.Clear();
+        }
+      }
+
+      return results.Count == 0 ? 0d : results.Average();
+    }
+
+    private static ExecExpandExpression MapToProgram(IntegerVector vector) {
+      var expressions = vector.Select(ExpressionTable.GetExpression);
+
+      return new ExecExpandExpression(expressions);
+    }
+
+    public void Load(IPushData data) {
+      this.pushData = data;
+    }
+  }
+}
Index: branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/PushProgram.cs
===================================================================
--- branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/PushProgram.cs	(revision 14602)
+++ branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/PushProgram.cs	(revision 14602)
@@ -0,0 +1,58 @@
+﻿using System;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Problems.PushGP.ProgramSynthesis {
+  using System.Drawing;
+
+  using HeuristicLab.Algorithms.PushGP.Expressions;
+  using HeuristicLab.Common;
+  using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+
+  public class PushProgram : ExecExpandExpression, ISymbolicExpressionTree {
+    public PushProgram(Expression[] state)
+      : base(state) {
+    }
+
+    public PushProgram(ExecExpandExpression origin)
+      : base(origin) {
+    }
+
+    public object Clone() {
+      throw new NotImplementedException();
+    }
+
+    public IDeepCloneable Clone(Cloner cloner) {
+      throw new NotImplementedException();
+    }
+
+    public string ItemName { get; private set; }
+
+    public string ItemDescription { get; private set; }
+
+    public Version ItemVersion { get; private set; }
+
+    public Image ItemImage { get; private set; }
+
+    public event EventHandler ItemImageChanged;
+
+    public event EventHandler ToStringChanged;
+
+    public IEnumerable<ISymbolicExpressionTreeNode> IterateNodesBreadth() {
+      throw new NotImplementedException();
+    }
+
+    public IEnumerable<ISymbolicExpressionTreeNode> IterateNodesPrefix() {
+      throw new NotImplementedException();
+    }
+
+    public IEnumerable<ISymbolicExpressionTreeNode> IterateNodesPostfix() {
+      throw new NotImplementedException();
+    }
+
+    public ISymbolicExpressionTreeNode Root { get; set; }
+
+    public int Length { get { return this.State.Length; } }
+
+    public new int Depth { get { return base.Depth; } }
+  }
+}
