Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Data/Pool/IPooledObject.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Data/Pool/IPooledObject.cs	(revision 15189)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Data/Pool/IPooledObject.cs	(revision 15334)
@@ -1,5 +1,4 @@
 ﻿namespace HeuristicLab.Problems.ProgramSynthesis.Push.Data.Pool {
   public interface IPooledObject {
-    void Init();
     void Reset();
   }
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 15189)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Data/Pool/ManagedPoolProvider.cs	(revision 15334)
@@ -7,4 +7,6 @@
   using System.Reflection;
   using System.Runtime.Serialization.Formatters.Binary;
+
+  using Microsoft.IO;
 
   public interface IManagedPool<T> : IDisposable where T : class, IPooledObject {
@@ -17,6 +19,7 @@
     private readonly ObjectPool<IManagedPool<T>> managedPools;
     private readonly BinaryFormatter binaryFormatter = new BinaryFormatter();
+    private readonly RecyclableMemoryStreamManager recyclableMemoryStreamManager = new RecyclableMemoryStreamManager();
     private byte[] dummyPartition;
-    private static volatile object dummyCreationLockObject = new object();
+    private volatile object dummyCreationLockObject = new object();
 
     private static readonly FieldInfo InternalListArrayProperty = typeof(List<T[]>).GetField(
@@ -56,4 +59,5 @@
 
     private T[] CloneDummyPartition() {
+      // init dummy partition
       if (dummyPartition == null) {
         lock (dummyCreationLockObject) {
@@ -65,7 +69,7 @@
             }
 
-            using (var memoryStream = new MemoryStream()) {
-              binaryFormatter.Serialize(memoryStream, temp);
-              dummyPartition = memoryStream.ToArray();
+            using (var ms = recyclableMemoryStreamManager.GetStream("dummyPartition")) {
+              binaryFormatter.Serialize(ms, temp);
+              dummyPartition = ms.ToArray();
             }
           }
@@ -73,12 +77,7 @@
       }
 
-      using (var memoryStream = new MemoryStream(dummyPartition)) {
-        memoryStream.Seek(0, SeekOrigin.Begin);
-
-        var result = (T[])binaryFormatter.Deserialize(memoryStream);
-
-        for (var i = 0; i < result.Length; i++)
-          result[i].Init();
-
+      using (var ms = recyclableMemoryStreamManager.GetStream("dummyPartition", dummyPartition, 0, dummyPartition.Length)) {
+        ms.Seek(0, SeekOrigin.Begin);
+        var result = (T[])binaryFormatter.Deserialize(ms);
         return result;
       }
Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Data/Pool/PooledList.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Data/Pool/PooledList.cs	(revision 15189)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Data/Pool/PooledList.cs	(revision 15334)
@@ -6,9 +6,4 @@
   [Serializable]
   public class PooledList<T> : List<T>, IPooledObject {
-    public Guid Id { get; private set; }
-
-    void IPooledObject.Init() {
-      Id = Guid.NewGuid();
-    }
 
     void IPooledObject.Reset() {
Index: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Data/Pool/PooledObject.cs
===================================================================
--- branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Data/Pool/PooledObject.cs	(revision 15189)
+++ branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Data/Pool/PooledObject.cs	(revision 15334)
@@ -20,6 +20,4 @@
     }
 
-    void IPooledObject.Init() { }
-
     public void Reset() {
       resetor(item);
