Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Configuration/PushConfiguration.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Configuration/PushConfiguration.cs	(revision 14746)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Configuration/PushConfiguration.cs	(revision 14747)
@@ -58,5 +58,5 @@
       this.isNameStackEnabled = origin.IsNameStackEnabled;
       this.isCodeStackEnabled = origin.IsCodeStackEnabled;
-      this.isExecStackEnabled = origin.IsExecStackEnable;
+      this.isExecStackEnabled = origin.IsExecStackEnabled;
     }
 
@@ -155,5 +155,5 @@
     private bool isExecStackEnabled = true;
 
-    public bool IsExecStackEnable
+    public bool IsExecStackEnabled
     {
       get
@@ -347,4 +347,7 @@
           IsCodeStackEnabled = value;
           break;
+        case StackType.Exec:
+          this.IsExecStackEnabled = value;
+          break;
         default: throw new InvalidOperationException("Stacktype unkown");
       }
Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Data/Pool/ManagedPoolProvider.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Data/Pool/ManagedPoolProvider.cs	(revision 14746)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Data/Pool/ManagedPoolProvider.cs	(revision 14747)
@@ -21,12 +21,9 @@
     public const int DefaultMaxInstanceCount = 65536;
 
-    public ManagedPoolProvider(int partitionSize, int maxPartitionCount = -1) {
+    public ManagedPoolProvider(int partitionSize, int? maxPartitionCount = null) {
       PartitionSize = partitionSize;
+      MaxParitionCount = maxPartitionCount ?? DefaultMaxInstanceCount / PartitionSize;
 
-      if (maxPartitionCount <= 0) {
-        MaxParitionCount = DefaultMaxInstanceCount / PartitionSize;
-      }
-
-      managedPools = new ObjectPool<IManagedPool<T>>(() => new ManagedPool2<T>(this));
+      managedPools = new ObjectPool<IManagedPool<T>>(() => new ManagedPool<T>(this));
     }
 
@@ -65,5 +62,5 @@
     }
 
-    private class ManagedPool2<T> : IManagedPool<T> where T : class {
+    private class ManagedPool<T> : IManagedPool<T> where T : class {
       private readonly ManagedPoolProvider<T> provider;
       private readonly IList<T[]> partitions = new List<T[]>();
@@ -71,5 +68,5 @@
       private int entryIndex;
 
-      public ManagedPool2(ManagedPoolProvider<T> provider) {
+      public ManagedPool(ManagedPoolProvider<T> provider) {
         this.provider = provider;
         entryIndex = provider.PartitionSize;
Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PooledPushInterpreter.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PooledPushInterpreter.cs	(revision 14746)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PooledPushInterpreter.cs	(revision 14747)
@@ -4,4 +4,6 @@
   using HeuristicLab.Core;
   using HeuristicLab.Problems.ProgramSynthesis.Push.Configuration;
+  using HeuristicLab.Problems.ProgramSynthesis.Push.Data.Pool;
+  using HeuristicLab.Problems.ProgramSynthesis.Push.Expressions;
 
   public class PooledPushInterpreter : PushInterpreter, IDisposable {
@@ -9,6 +11,6 @@
     private readonly PushInterpreterPool pool;
 
-    public PooledPushInterpreter(PushInterpreterPool pool, PushConfiguration config, IRandom random = null)
-      : base(config, random) {
+    public PooledPushInterpreter(PushInterpreterPool pool, PushConfiguration config, ManagedPoolProvider<PushProgram> pushProgramPoolProvider, IRandom random = null)
+      : base(config, random, pushProgramPoolProvider) {
       this.pool = pool;
     }
Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreter.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreter.cs	(revision 14746)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreter.cs	(revision 14747)
@@ -19,5 +19,5 @@
     private Task currentTask;
 
-    public PushInterpreter(IReadonlyPushConfiguration config = null, IRandom random = null) {
+    public PushInterpreter(IReadonlyPushConfiguration config = null, IRandom random = null, ManagedPoolProvider<PushProgram> pushProgramPoolProvider = null) {
       Random = random ?? new FastRandom();
 
@@ -45,4 +45,11 @@
 
       CustomExpressions = new Dictionary<string, Expression>();
+
+      PushProgramPoolProvider = pushProgramPoolProvider ?? new ManagedPoolProvider<PushProgram>(1024);
+
+      if (pushProgramPoolProvider == null)
+      {
+        PushProgramPoolProvider.InitDummyPartition(() => new PushProgram());
+      }
     }
 
@@ -86,5 +93,6 @@
     }
 
-    public IManagedPool<PushProgram> PushProgramPool { get; set; }
+    private readonly ManagedPoolProvider<PushProgram> PushProgramPoolProvider;
+    public IManagedPool<PushProgram> PushProgramPool { get; private set; }
 
     public IReadonlyPushConfiguration Configuration { get; protected set; }
@@ -127,17 +135,19 @@
 
     public void Run(Expression program, bool stepwise = false) {
-      IsPaused = stepwise;
-
-      /* Push top expression so the loop is able to enter
-       * If the top expression is a single statement then the loop has nothing to do
-       * Otherwise the expand expression will be evaluated and pushes code onto the EXEC stack */
-      ExecStack.Push(program);
-
-      if (Configuration.TopLevelPushCode) CodeStack.Insert(0, program);
-
-      // run top expression
-      DoStep();
-
-      Interpret();
+      using (PushProgramPool = PushProgramPoolProvider.CreatePool()) {
+        IsPaused = stepwise;
+
+        /* Push top expression so the loop is able to enter
+         * If the top expression is a single statement then the loop has nothing to do
+         * Otherwise the expand expression will be evaluated and pushes code onto the EXEC stack */
+        ExecStack.Push(program);
+
+        if (Configuration.TopLevelPushCode) CodeStack.Insert(0, program);
+
+        // run top expression
+        DoStep();
+
+        Interpret();
+      }
     }
 
@@ -146,4 +156,6 @@
 
       IsAborted = true;
+
+      if (PushProgramPool != null) PushProgramPool.Dispose();
 
       if (currentTask != null) await currentTask;
Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreterPool.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreterPool.cs	(revision 14746)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreterPool.cs	(revision 14747)
@@ -1,21 +1,25 @@
 ﻿namespace HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter {
   using System;
-
-  using HeuristicLab.Problems.ProgramSynthesis.Push.Data.Pool;
   using HeuristicLab.Core;
   using HeuristicLab.Problems.ProgramSynthesis.Push.Configuration;
+  using HeuristicLab.Problems.ProgramSynthesis.Push.Data.Pool;
+  using HeuristicLab.Problems.ProgramSynthesis.Push.Expressions;
   using HeuristicLab.Random;
 
   public class PushInterpreterPool {
     private readonly ObjectPool<PooledPushInterpreter> pool;
+    private ManagedPoolProvider<PushProgram> pushProgramPoolProvider;
 
     public PushInterpreterPool(PushConfiguration config = null)
-      : this(Environment.ProcessorCount * 2, config) {
+      : this(Environment.ProcessorCount * 2, 1024, null, config) {
     }
 
-    public PushInterpreterPool(int size, PushConfiguration config = null) {
-      this.PushGpConfiguration = config ?? new PushConfiguration();
+    public PushInterpreterPool(int size, int pushProgramPoolPartitionSize, int? maxPartitionCount = null, PushConfiguration config = null) {
+      PushGpConfiguration = config ?? new PushConfiguration();
 
-      this.pool = new ObjectPool<PooledPushInterpreter>(() => new PooledPushInterpreter(this, this.PushGpConfiguration), size);
+      pushProgramPoolProvider = new ManagedPoolProvider<PushProgram>(pushProgramPoolPartitionSize, maxPartitionCount);
+      pushProgramPoolProvider.InitDummyPartition(() => new PushProgram());
+
+      pool = new ObjectPool<PooledPushInterpreter>(() => new PooledPushInterpreter(this, PushGpConfiguration, pushProgramPoolProvider), size);
     }
 
Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Problem/PushProblem.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Problem/PushProblem.cs	(revision 14746)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Problem/PushProblem.cs	(revision 14747)
@@ -8,9 +8,7 @@
   using Core;
   using Encodings.IntegerVectorEncoding;
-  using Expressions;
 
   using HeuristicLab.BenchmarkSuite;
   using HeuristicLab.Data;
-  using HeuristicLab.Problems.ProgramSynthesis.Push.Data.Pool;
 
   using Instances;
@@ -28,12 +26,8 @@
     private readonly PushConfiguration config;
     private PushInterpreterPool pool;
-    private ManagedPoolProvider<PushProgram> pushProgramPoolProvider;
 
     public PushProblem() {
       config = new PushConfiguration();
-      pool = new PushInterpreterPool(config);
-
-      pushProgramPoolProvider = new ManagedPoolProvider<PushProgram>(1024);
-      pushProgramPoolProvider.InitDummyPartition(() => new PushProgram());
+      pool = new PushInterpreterPool(10000, 1024, 65536, config);
 
       InitEvents();
@@ -50,5 +44,5 @@
       : base(original, cloner) {
       config = cloner.Clone(original.config);
-      pool = new PushInterpreterPool(config);
+      pool = new PushInterpreterPool(65536, 1024, 65536, config);
 
       Instructions = config;
@@ -62,7 +56,4 @@
       pool = new PushInterpreterPool(config);
       Instructions = config;
-
-      pushProgramPoolProvider = new ManagedPoolProvider<PushProgram>(1024);
-      pushProgramPoolProvider.InitDummyPartition(() => new PushProgram());
 
       InitEvents();
@@ -426,7 +417,5 @@
           interpreter.FloatStack.Push(example.InputFloat);
 
-          using (interpreter.PushProgramPool = pushProgramPoolProvider.CreatePool()) {
-            interpreter.Run(program);
-          }
+          interpreter.Run(program);
 
           result += GetDiff(example.OutputInt, interpreter.IntegerStack, DataDescriptor.WorstResult, LongDiffer)
Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Views/ExpressionSelectionView.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Views/ExpressionSelectionView.cs	(revision 14746)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Views/ExpressionSelectionView.cs	(revision 14747)
@@ -57,7 +57,7 @@
       } else {
         if (e.Node.Checked) {
-          Content.EnableExpression(e.Node.Name);
+          Content.EnableExpression(e.Node.Text);
         } else {
-          Content.DisableExpression(e.Node.Name);
+          Content.DisableExpression(e.Node.Text);
         }
       }
