Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/Extensions.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/Extensions.cs	(revision 14913)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/Extensions.cs	(revision 14914)
@@ -24,10 +24,4 @@
     }
 
-    public static IPushStackBase GetStackBaseByType(this IPushInterpreter interpreter, StackTypes stackType) {
-      return StackProperties.ContainsKey(stackType)
-        ? (IPushStackBase)StackProperties[stackType].GetValue(interpreter)
-        : null;
-    }
-
     public static Type GetStackEntryType(this StackTypes stackType) {
       return StackProperties.ContainsKey(stackType)
@@ -41,5 +35,5 @@
       foreach (StackTypes type in Enum.GetValues(stackTypesType)) {
         var stackName = Enum.GetName(stackTypesType, type);
-        var stack = GetStackBaseByType(interpreter, type);
+        var stack = interpreter.Stacks[type];
 
         if (stack.IsEmpty || !stack.IsEnabled) return;
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/IPushInterpreter.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/IPushInterpreter.cs	(revision 14913)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/IPushInterpreter.cs	(revision 14914)
@@ -26,4 +26,5 @@
     IPushStack<string> PrintStack { get; }
     IDictionary<string, Expression> CustomExpressions { get; }
+    IReadOnlyDictionary<StackTypes, IPushStack> Stacks { get; }
     IReadOnlyPushConfiguration Configuration { get; }
     void Clear();
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreter.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreter.cs	(revision 14913)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreter.cs	(revision 14914)
@@ -5,8 +5,10 @@
   using System.Threading;
   using System.Threading.Tasks;
-  using Attributes;
   using Configuration;
   using Core;
   using Expressions;
+
+  using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
+
   using Parser;
   using Random;
@@ -26,5 +28,5 @@
       Configuration = config ?? new PushConfiguration();
 
-      // setting the capacity of the stacks to max points ensures that there will be enough memory at runtime
+      // setting the capacity of the Stacks to max points ensures that there will be enough memory at runtime
       ExecStack = new PushStack<Expression>(Configuration.MaxPointsInProgram);
 
@@ -77,4 +79,20 @@
       };
 
+      Stacks = new Dictionary<StackTypes, IPushStack> {
+        { StackTypes.Exec, ExecStack },
+        { StackTypes.Code, CodeStack },
+        { StackTypes.Integer, IntegerStack },
+        { StackTypes.Float, FloatStack },
+        { StackTypes.Boolean, BooleanStack },
+        { StackTypes.Char, CharStack },
+        { StackTypes.String, StringStack },
+        { StackTypes.Name, NameStack },
+        { StackTypes.IntegerVector, IntegerVectorStack },
+        { StackTypes.FloatVector, FloatVectorStack },
+        { StackTypes.BooleanVector, BooleanVectorStack },
+        { StackTypes.StringVector, StringVectorStack },
+        { StackTypes.Print, PrintStack },
+      };
+
       CustomExpressions = new Dictionary<string, Expression>();
       PoolContainer = poolContainer ?? new InterpreterPoolContainer();
@@ -84,4 +102,6 @@
       : this(config, new FastRandom(seed)) {
     }
+
+    public IReadOnlyDictionary<StackTypes, IPushStack> Stacks { get; private set; }
 
     public IRandom Random { get; set; }
@@ -123,41 +143,28 @@
 
     public IReadOnlyPushConfiguration Configuration { get; protected set; }
-
     [PushStack(StackTypes.Code)]
     public IPushStack<Expression> CodeStack { get; private set; }
-
     [PushStack(StackTypes.Exec)]
     public IPushStack<Expression> ExecStack { get; private set; }
-
     [PushStack(StackTypes.Name)]
     public IPushStack<string> NameStack { get; private set; }
-
     [PushStack(StackTypes.Boolean)]
     public IPushStack<bool> BooleanStack { get; private set; }
-
     [PushStack(StackTypes.Integer)]
     public IPushStack<long> IntegerStack { get; private set; }
-
     [PushStack(StackTypes.Float)]
     public IPushStack<double> FloatStack { get; private set; }
-
     [PushStack(StackTypes.Char)]
     public IPushStack<char> CharStack { get; private set; }
-
     [PushStack(StackTypes.String)]
     public IPushStack<string> StringStack { get; private set; }
-
     [PushStack(StackTypes.IntegerVector)]
     public IPushStack<List<long>> IntegerVectorStack { get; private set; }
-
     [PushStack(StackTypes.FloatVector)]
     public IPushStack<List<double>> FloatVectorStack { get; private set; }
-
     [PushStack(StackTypes.BooleanVector)]
     public IPushStack<List<bool>> BooleanVectorStack { get; private set; }
-
     [PushStack(StackTypes.StringVector)]
     public IPushStack<List<string>> StringVectorStack { get; private set; }
-
     [PushStack(StackTypes.Print)]
     public IPushStack<string> PrintStack { get; private set; }
@@ -275,13 +282,9 @@
 
     /// <summary>
-    /// Clears stacks and custom expressions
+    /// Clears Stacks and custom expressions
     /// </summary>
     public void Clear() {
-      ExecStack.Clear();
-      CodeStack.Clear();
-      NameStack.Clear();
-      BooleanStack.Clear();
-      IntegerStack.Clear();
-      FloatStack.Clear();
+      foreach (var stack in Stacks)
+        stack.Value.Clear();
 
       CustomExpressions.Clear();
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Stack/IPushStack.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Stack/IPushStack.cs	(revision 14913)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Stack/IPushStack.cs	(revision 14914)
@@ -3,5 +3,5 @@
   using System.Collections.Generic;
 
-  public interface IPushStack<T> : ICollection<T>, IPushStackBase {
+  public interface IPushStack<T> : ICollection<T>, IPushStack {
     T Top { get; }
     T TopOrDefault { get; }
@@ -9,11 +9,13 @@
     T BottomOrDefault { get; }
     T this[int key] { get; set; }
+    new int Count { get; }
     void Push(T item);
     void Push(T item1, T item2);
     void Push(T item1, T item2, T item3);
     void Push(T item1, T item2, T item3, T item4);
-    void Push(IReadOnlyList<T> items, int startIndex = 0);
+    void Push(IReadOnlyList<T> items, int startIndex);
     void Push(IReadOnlyList<T> items);
     void Push(IEnumerable<T> items);
+    new void Clear();
     T Peek();
     T[] Peek(int count);
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Stack/IPushStackBase.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Stack/IPushStackBase.cs	(revision 14913)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Stack/IPushStackBase.cs	(revision 14914)
@@ -1,20 +1,20 @@
 ﻿namespace HeuristicLab.Problems.ProgramSynthesis.Push.Stack {
   using System.Collections;
+  using System.Collections.Generic;
 
-  public interface IPushStackBase : IEnumerable {
+  public interface IPushStack : IEnumerable {
     bool IsEmpty { get; }
+    bool IsEnabled { get; }
+    int Count { get; }
 
-    bool IsEnabled { get; }
-
+    void Clear();
     void Swap(int count);
-
     void Yank(int index);
     void RemoveTop();
-
     void Remove(int count);
-
     void RemoveAt(int index);
-
     void RemoveAt(int index, int count);
+    IEnumerable<string> AsStrings();
+    IEnumerable<object> AsObjects();
   }
 }
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Stack/PushStack.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Stack/PushStack.cs	(revision 14913)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Stack/PushStack.cs	(revision 14914)
@@ -6,9 +6,9 @@
 
   /// <summary>
-  ///     While Push's stacks are generally treated as genuine stacks---that is, inclassions take their arguments from the
+  ///     While Push's Stacks are generally treated as genuine Stacks---that is, inclassions take their arguments from the
   ///     tops of
-  ///     the stacks and push their results onto the tops of the stacks---a few inclassions (like YANK and SHOVE) do allow
+  ///     the Stacks and push their results onto the tops of the Stacks---a few inclassions (like YANK and SHOVE) do allow
   ///     direct access
-  ///     to "deep" stack elements by means of integer indices. To this extent the stacks can be used as general, random
+  ///     to "deep" stack elements by means of integer indices. To this extent the Stacks can be used as general, random
   ///     access memory
   ///     classures. This is one of the features that ensures the Turing-completeness of Push (another being the arbitrary
@@ -279,4 +279,12 @@
       return string.Join(Delimiter, data.Reverse());
     }
+
+    IEnumerable<string> IPushStack.AsStrings() {
+      return data.Select(x => x.ToString());
+    }
+
+    IEnumerable<object> IPushStack.AsObjects() {
+      return data.OfType<object>();
+    }
   }
 }
Index: /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Views/PushDebuggerView.cs
===================================================================
--- /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Views/PushDebuggerView.cs	(revision 14913)
+++ /branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Views/PushDebuggerView.cs	(revision 14914)
@@ -228,4 +228,5 @@
       };
 
+      // align numbers right
       var stackEntryType = type.GetStackEntryType();
       if (stackEntryType == typeof(double) ||
@@ -270,8 +271,8 @@
 
       foreach (var pair in debugControlDict) {
-        var stack = interpreter.GetStackEntriesByType<object>(pair.Key);
+        var stack = interpreter.Stacks[pair.Key];
         var name = Enum.GetName(typeof(StackTypes), pair.Key);
 
-        pair.Value.Items.AddRange(stack.Reverse().ToArray());
+        pair.Value.Items.AddRange(stack.AsObjects().Reverse().ToArray());
         ((GroupBox)pair.Value.Parent).Text = string.Format(GroupBoxTextStringFormat, name, pair.Value.Items.Count);
       }
