Index: /trunk/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/LeafTypes/LeafBase.cs
===================================================================
--- /trunk/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/LeafTypes/LeafBase.cs	(revision 17138)
+++ /trunk/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/LeafTypes/LeafBase.cs	(revision 17139)
@@ -112,7 +112,9 @@
     public class LeafBuildingState : Item {
       [Storable]
-      public Queue<RegressionNodeModel> nodeQueue = new Queue<RegressionNodeModel>();
+      private RegressionNodeModel[] storableNodeQueue { get { return nodeQueue.ToArray(); } set { nodeQueue = new Queue<RegressionNodeModel>(value); } }
+      public Queue<RegressionNodeModel> nodeQueue;
       [Storable]
-      public Queue<IReadOnlyList<int>> trainingRowsQueue = new Queue<IReadOnlyList<int>>();
+      private IReadOnlyList<int>[] storabletrainingRowsQueue { get { return trainingRowsQueue.ToArray(); } set { trainingRowsQueue = new Queue<IReadOnlyList<int>>(value); } }
+      public Queue<IReadOnlyList<int>> trainingRowsQueue;
 
       //State.Code values denote the current action (for pausing)
@@ -130,5 +132,8 @@
         Code = original.Code;
       }
-      public LeafBuildingState() { }
+      public LeafBuildingState() {
+        nodeQueue = new Queue<RegressionNodeModel>();
+        trainingRowsQueue = new Queue<IReadOnlyList<int>>();
+      }
       public override IDeepCloneable Clone(Cloner cloner) {
         return new LeafBuildingState(this, cloner);
Index: /trunk/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/Pruning/ComplexityPruning.cs
===================================================================
--- /trunk/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/Pruning/ComplexityPruning.cs	(revision 17138)
+++ /trunk/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/Pruning/ComplexityPruning.cs	(revision 17139)
@@ -204,18 +204,21 @@
     public class PruningState : Item {
       [Storable]
-      public IDictionary<RegressionNodeModel, int> modelComplexities = new Dictionary<RegressionNodeModel, int>();
-      [Storable]
-      public IDictionary<RegressionNodeModel, int> nodeComplexities = new Dictionary<RegressionNodeModel, int>();
-      [Storable]
-      public IDictionary<RegressionNodeModel, int> pruningSizes = new Dictionary<RegressionNodeModel, int>();
-      [Storable]
-      public IDictionary<RegressionNodeModel, double> modelErrors = new Dictionary<RegressionNodeModel, double>();
-
-      [Storable]
-      public Queue<RegressionNodeModel> nodeQueue = new Queue<RegressionNodeModel>();
-      [Storable]
-      public Queue<IReadOnlyList<int>> trainingRowsQueue = new Queue<IReadOnlyList<int>>();
-      [Storable]
-      public Queue<IReadOnlyList<int>> pruningRowsQueue = new Queue<IReadOnlyList<int>>();
+      public IDictionary<RegressionNodeModel, int> modelComplexities;
+      [Storable]
+      public IDictionary<RegressionNodeModel, int> nodeComplexities;
+      [Storable]
+      public IDictionary<RegressionNodeModel, int> pruningSizes;
+      [Storable]
+      public IDictionary<RegressionNodeModel, double> modelErrors;
+
+      [Storable]
+      private RegressionNodeModel[] storableNodeQueue { get { return nodeQueue.ToArray(); } set { nodeQueue = new Queue<RegressionNodeModel>(value); } }
+      public Queue<RegressionNodeModel> nodeQueue;
+      [Storable]
+      private IReadOnlyList<int>[] storabletrainingRowsQueue { get { return trainingRowsQueue.ToArray(); } set { trainingRowsQueue = new Queue<IReadOnlyList<int>>(value); } }
+      public Queue<IReadOnlyList<int>> trainingRowsQueue;
+      [Storable]
+      private IReadOnlyList<int>[] storablepruningRowsQueue { get { return pruningRowsQueue.ToArray(); } set { pruningRowsQueue = new Queue<IReadOnlyList<int>>(value); } }
+      public Queue<IReadOnlyList<int>> pruningRowsQueue;
 
       //State.Code values denote the current action (for pausing)
@@ -242,5 +245,13 @@
         Code = original.Code;
       }
-      public PruningState() { }
+      public PruningState() {
+        modelComplexities = new Dictionary<RegressionNodeModel, int>();
+        nodeComplexities = new Dictionary<RegressionNodeModel, int>();
+        pruningSizes = new Dictionary<RegressionNodeModel, int>();
+        modelErrors = new Dictionary<RegressionNodeModel, double>();
+        nodeQueue = new Queue<RegressionNodeModel>();
+        trainingRowsQueue = new Queue<IReadOnlyList<int>>();
+        pruningRowsQueue = new Queue<IReadOnlyList<int>>();
+      }
       public override IDeepCloneable Clone(Cloner cloner) {
         return new PruningState(this, cloner);
Index: /trunk/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/Splitting/SplitterBase.cs
===================================================================
--- /trunk/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/Splitting/SplitterBase.cs	(revision 17138)
+++ /trunk/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/Splitting/SplitterBase.cs	(revision 17139)
@@ -112,8 +112,18 @@
     [StorableType("BC1149FD-370E-4F3A-92F5-6E519736D09A")]
     public class SplittingState : Item {
+      public Queue<RegressionNodeModel> nodeQueue;
       [Storable]
-      public Queue<RegressionNodeModel> nodeQueue = new Queue<RegressionNodeModel>();
+      private RegressionNodeModel[] storableNodeQueue {
+        get { return nodeQueue.ToArray(); }
+        set { nodeQueue = new Queue<RegressionNodeModel>(value); }
+      }
+
+      public Queue<IReadOnlyList<int>> trainingRowsQueue;
       [Storable]
-      public Queue<IReadOnlyList<int>> trainingRowsQueue = new Queue<IReadOnlyList<int>>();
+      private IReadOnlyList<int>[] storableTrainingRowsQueue {
+        get { return trainingRowsQueue.ToArray(); }
+        set { trainingRowsQueue = new Queue<IReadOnlyList<int>>(value); }
+      }
+
 
       //State.Code values denote the current action (for pausing)
@@ -131,5 +141,8 @@
         Code = original.Code;
       }
-      public SplittingState() { }
+      public SplittingState() : base() {
+        nodeQueue = new Queue<RegressionNodeModel>();
+        trainingRowsQueue = new Queue<IReadOnlyList<int>>();
+      }
       public override IDeepCloneable Clone(Cloner cloner) {
         return new SplittingState(this, cloner);
