Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/Extensions.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/Extensions.cs	(revision 15189)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/Extensions.cs	(revision 15273)
@@ -8,4 +8,6 @@
 
   using Attributes;
+
+  using HeuristicLab.BenchmarkSuite;
 
   using Stack;
@@ -60,4 +62,25 @@
       }
     }
+
+    public static void InitExample(this IPushInterpreter interpreter, Example example) {
+      interpreter.BooleanStack.Push(example.InputBoolean);
+      interpreter.IntegerStack.Push(example.InputInteger);
+      interpreter.FloatStack.Push(example.InputFloat);
+      interpreter.CharStack.Push(example.InputChar);
+      interpreter.StringStack.Push(example.InputString);
+      interpreter.StringVectorStack.Push(example.InputStringVector);
+      interpreter.IntegerVectorStack.Push(example.InputIntegerVector);
+      interpreter.FloatVectorStack.Push(example.InputFloatVector);
+
+      interpreter.SetInput(
+        integers: example.InputInteger,
+        floats: example.InputFloat,
+        booleans: example.InputBoolean,
+        chars: example.InputChar,
+        strings: example.InputString,
+        integerVectors: example.InputIntegerVector,
+        floatVectors: example.InputFloatVector,
+        stringVectors: example.InputStringVector);
+    }
   }
 }
Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/IPushInterpreter.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/IPushInterpreter.cs	(revision 15189)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/IPushInterpreter.cs	(revision 15273)
@@ -11,5 +11,5 @@
 
   public interface IPushInterpreter {
-    IRandom Random { get; set; }
+    IRandom Random { get; }
     IPushStack<Expression> CodeStack { get; }
     IPushStack<Expression> ExecStack { get; }
@@ -28,6 +28,6 @@
     IReadOnlyDictionary<StackTypes, IPushStack> Stacks { get; }
     IReadOnlyPushConfiguration Configuration { get; }
-    void Clear();
-    void Reset();
+    void ClearStacks();
+    void Reset(IRandom random = null);
 
     void SetInput(
Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PooledPushInterpreter.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PooledPushInterpreter.cs	(revision 15189)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PooledPushInterpreter.cs	(revision 15273)
@@ -15,5 +15,5 @@
     public override void Dispose() {
       base.Dispose();
-      Clear();
+      ClearStacks();
       pool.Free(this);
     }
Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreter.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreter.cs	(revision 15189)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreter.cs	(revision 15273)
@@ -19,6 +19,13 @@
     private Expression currentProgram;
 
+    /// <summary>
+    /// An interpreter for Push
+    /// </summary>
+    /// <param name="config">Determines the runtime behavior of the interpreter</param>
+    /// <param name="random">Note that random may be reseted</param>
+    /// <param name="poolContainer">Used to save resources used by the interpreter</param>
     public PushInterpreter(IReadOnlyPushConfiguration config = null, IRandom random = null, InterpreterPoolContainer poolContainer = null) {
-      Random = random ?? new MersenneTwister();
+      randomOrigin = random ?? new MersenneTwister();
+      Random = (IRandom)randomOrigin.Clone();
       Configuration = config ?? new PushConfiguration();
 
@@ -69,5 +76,6 @@
     public IReadOnlyDictionary<StackTypes, IPushStack> Stacks { get; private set; }
 
-    public IRandom Random { get; set; }
+    private IRandom randomOrigin;
+    public IRandom Random { get; private set; }
 
     public long ExecCounter { get; private set; }
@@ -330,7 +338,13 @@
 
     /// <summary>
-    /// Reset while interpreter
+    /// Reset interpreter which clears and reconfigures stacks and local variables
     /// </summary>
-    public void Reset() {
+    public void Reset(IRandom random = null) {
+      if (random != null)
+        randomOrigin = random;
+
+      // Reset Random
+      Random = (IRandom)randomOrigin.Clone();
+
       ExecCounter = 0;
       IsAborted = false;
@@ -340,5 +354,5 @@
 
       inputExpressions.Clear();
-      Clear();
+      ClearStacks();
       ConfigureStacks();
     }
@@ -357,5 +371,5 @@
     /// Clears Stacks and custom expressions
     /// </summary>
-    public void Clear() {
+    public void ClearStacks() {
       for (var i = 0u; i < supportedStackTypes.Length; i++) {
         var key = supportedStackTypes[i];
Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreterPool.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreterPool.cs	(revision 15189)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreterPool.cs	(revision 15273)
@@ -5,5 +5,4 @@
   using HeuristicLab.Problems.ProgramSynthesis.Push.Data.Pool;
   using HeuristicLab.Problems.ProgramSynthesis.Push.Expressions;
-  using HeuristicLab.Random;
 
   public class PushInterpreterPool {
@@ -33,6 +32,5 @@
     public PooledPushInterpreter Create(IRandom random = null) {
       var interpreter = pool.Allocate();
-      interpreter.Random = random ?? new MersenneTwister();
-      interpreter.Reset();
+      interpreter.Reset(random);
 
       return interpreter;
@@ -40,5 +38,5 @@
 
     public void Free(PooledPushInterpreter interpreter) {
-      interpreter.Random = null;
+      interpreter.ClearStacks();
       pool.Free(interpreter);
     }
