Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreter.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreter.cs	(revision 14952)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreter.cs	(revision 15017)
@@ -5,18 +5,12 @@
   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;
   using Stack;
 
-#if DEBUG
-  using System.Diagnostics;
-  using System.Linq;
-#endif
 
   public class PushInterpreter : IInternalPushInterpreter, IDisposable {
@@ -24,6 +18,5 @@
 
     public PushInterpreter(IReadOnlyPushConfiguration config = null, IRandom random = null, InterpreterPoolContainer poolContainer = null) {
-      Random = random ?? new FastRandom();
-
+      Random = random ?? new MersenneTwister();
       Configuration = config ?? new PushConfiguration();
 
@@ -59,17 +52,17 @@
       };
 
-      IntegerVectorStack = new PushStack<List<long>> {
+      IntegerVectorStack = new PushStack<IReadOnlyList<long>> {
         IsEnabled = Configuration.EnabledStacks[StackTypes.IntegerVector]
       };
 
-      FloatVectorStack = new PushStack<List<double>> {
+      FloatVectorStack = new PushStack<IReadOnlyList<double>> {
         IsEnabled = Configuration.EnabledStacks[StackTypes.FloatVector]
       };
 
-      BooleanVectorStack = new PushStack<List<bool>> {
+      BooleanVectorStack = new PushStack<IReadOnlyList<bool>> {
         IsEnabled = Configuration.EnabledStacks[StackTypes.BooleanVector]
       };
 
-      StringVectorStack = new PushStack<List<string>> {
+      StringVectorStack = new PushStack<IReadOnlyList<string>> {
         IsEnabled = Configuration.EnabledStacks[StackTypes.StringVector]
       };
@@ -88,9 +81,9 @@
         { StackTypes.String, StringStack },
         { StackTypes.Name, NameStack },
+        { StackTypes.Print, PrintStack },
         { StackTypes.IntegerVector, IntegerVectorStack },
         { StackTypes.FloatVector, FloatVectorStack },
         { StackTypes.BooleanVector, BooleanVectorStack },
         { StackTypes.StringVector, StringVectorStack },
-        { StackTypes.Print, PrintStack },
       };
 
@@ -160,11 +153,11 @@
     public IPushStack<string> StringStack { get; private set; }
     [PushStack(StackTypes.IntegerVector)]
-    public IPushStack<List<long>> IntegerVectorStack { get; private set; }
+    public IPushStack<IReadOnlyList<long>> IntegerVectorStack { get; private set; }
     [PushStack(StackTypes.FloatVector)]
-    public IPushStack<List<double>> FloatVectorStack { get; private set; }
+    public IPushStack<IReadOnlyList<double>> FloatVectorStack { get; private set; }
     [PushStack(StackTypes.BooleanVector)]
-    public IPushStack<List<bool>> BooleanVectorStack { get; private set; }
+    public IPushStack<IReadOnlyList<bool>> BooleanVectorStack { get; private set; }
     [PushStack(StackTypes.StringVector)]
-    public IPushStack<List<string>> StringVectorStack { get; private set; }
+    public IPushStack<IReadOnlyList<string>> StringVectorStack { get; private set; }
     [PushStack(StackTypes.Print)]
     public IPushStack<string> PrintStack { get; private set; }
@@ -186,4 +179,8 @@
       var program = PushParser.Parse(code);
       Run(program, stepwise);
+    }
+
+    public void Run(bool stepwise) {
+      Run(PushProgram.Empty, stepwise);
     }
 
@@ -322,27 +319,4 @@
     }
 
-#if DEBUG
-    private Expression last;
-    private bool DoStep() {
-      double[] bk;
-      if (!FloatStack.IsEmpty) {
-        bk = FloatStack.Peek(Math.Min(FloatStack.Count, 3));
-      }
-
-      var expression = ExecStack.Pop();
-      var succ = expression.TryEval(this);
-
-      if ((ExecStack.Count > 0 && ExecStack.Top == null) ||
-          (CodeStack.Count > 0 && CodeStack.Top == null) ||
-          FloatStack.Any(x => double.IsNaN(x) || double.IsInfinity(x)) ||
-          StringStack.Count > 0 && StringStack.Any(x => x == null)) {
-        Debugger.Break();
-      }
-
-      ExecCounter++;
-      last = expression;
-      return succ;
-    }
-#else
     [MethodImpl(MethodImplOptions.AggressiveInlining)]
     private bool DoStep() {
@@ -350,5 +324,4 @@
       return ExecStack.Pop().TryEval(this);
     }
-#endif
 
     [MethodImpl(MethodImplOptions.AggressiveInlining)]
