Index: /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching.Views/3.3/RunCollectionModifierExecutableView.cs
===================================================================
--- /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching.Views/3.3/RunCollectionModifierExecutableView.cs	(revision 10127)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching.Views/3.3/RunCollectionModifierExecutableView.cs	(revision 10128)
@@ -113,4 +113,5 @@
         Invoke(new EventHandler(Content_Paused), sender, e);
       else {
+        MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromContent(Content, false);
         nameTextBox.Enabled = infoLabel.Enabled = true;
         ReadOnly = Locked = false;
@@ -123,4 +124,5 @@
         Invoke(new EventHandler(Content_Stopped), sender, e);
       else {
+        MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromContent(Content, false);
         nameTextBox.Enabled = infoLabel.Enabled = true;
         ReadOnly = Locked = false;
@@ -138,6 +140,7 @@
       if (InvokeRequired)
         Invoke(new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred), sender, e);
-      else
+      else {
         ErrorHandling.ShowErrorDialog(this, e.Value);
+      }
     }
     #endregion
Index: /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/RunCollectionModifiers/RunCollectionModifierExecutable.cs
===================================================================
--- /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/RunCollectionModifiers/RunCollectionModifierExecutable.cs	(revision 10127)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/RunCollectionModifiers/RunCollectionModifierExecutable.cs	(revision 10128)
@@ -113,4 +113,14 @@
       return new RunCollectionModifierExecutable(this, cloner);
     }
+
+    //special cloning which ignores the RunCollection and the execution stack
+    public RunCollectionModifierExecutable CloneWithoutRuns() {
+      var clone = new RunCollectionModifierExecutable();
+      clone.executionTime = executionTime;
+      clone.executionState = executionState;
+      clone.log = (ILog)log.Clone(new Cloner());
+      clone.RunCollectionModifiersParameter.Value = (ItemList<IRunCollectionModifier>)RunCollectionModifiers.Clone(new Cloner());
+      return clone;
+    }
     #endregion
 
@@ -198,5 +208,5 @@
           executionStack.Push(next);
           if (ex is OperationCanceledException) throw ex;
-          else throw new Exception("IRunCollectionModifier " + next + "threw an exception.", ex);
+          else throw new Exception("IRunCollectionModifier " + next + " threw an exception.", ex);
         }
         finally {
Index: /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/RunCollectionModifiers/RunCollectionModifierHiveTask.cs
===================================================================
--- /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/RunCollectionModifiers/RunCollectionModifierHiveTask.cs	(revision 10127)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.SolutionCaching/3.3/RunCollectionModifiers/RunCollectionModifierHiveTask.cs	(revision 10128)
@@ -21,9 +21,7 @@
 
 using System;
-using System.Collections.Generic;
 using System.Linq;
 using HeuristicLab.Clients.Hive;
 using HeuristicLab.Common;
-using HeuristicLab.Optimization;
 
 namespace HeuristicLab.Analysis.SolutionCaching {
@@ -50,11 +48,11 @@
 
     public override void IntegrateChild(ItemTask task, Guid childTaskId) {
-      var optimizerTask = (RunCollectionModifierTask)task;
-      syncTasksWithOptimizers = false; // don't sync with optimizers during this method
+      var rcmTask = (RunCollectionModifierTask)task;
+      syncTasksWithOptimizers = false;
 
-      if (this.ItemTask != null && this.ItemTask.Item != null) {
+      if (ItemTask != null && ItemTask.Item != null) {
         itemTaskLock.EnterWriteLock();
         try {
-          this.ItemTask.Item.RunCollection.AddRange(((RunCollectionModifierExecutable)task.Item).RunCollection);
+          ItemTask.Item.RunCollection.AddRange(rcmTask.Item.RunCollection);
         }
         finally {
@@ -63,11 +61,7 @@
       }
 
-      IEnumerable<HiveTask> childs = this.ChildHiveTasks.Where(j => j.Task.Id == childTaskId);
-      //TODO: in very rare cases childs is empty. This shouldn't be the case and should be further investigated.
-      if (childs.Count() > 0) {
-        RunCollectionModifierHiveTask child = childs.First() as RunCollectionModifierHiveTask;
-        if (child != null && !optimizerTask.ComputeInParallel) {
-          child.ItemTask = optimizerTask;
-        }
+      RunCollectionModifierHiveTask child = ChildHiveTasks.Single(j => j.Task.Id == childTaskId) as RunCollectionModifierHiveTask;
+      if (!rcmTask.ComputeInParallel) {
+        child.ItemTask = rcmTask;
       }
       syncTasksWithOptimizers = true;
@@ -81,17 +75,16 @@
             if (childHiveTasks.Any()) {
               var exec = (RunCollectionModifierExecutable)ItemTask.Item;
-              //compute in parallel was deactivated, copy runs back
+              //compute in parallel was deactivated, copy runs back to parent
               foreach (var childHiveTask in childHiveTasks) {
                 exec.RunCollection.AddRange(((RunCollectionModifierExecutable)childHiveTask.ItemTask.Item).RunCollection);
               }
+              childHiveTasks.Clear();
             }
-            childHiveTasks.Clear();
           } else {
             var runs = ItemTask.Item.RunCollection;
             foreach (var run in runs) {
-              var exec = (RunCollectionModifierExecutable)ItemTask.Item.Clone(new Cloner());
-              //TODO: this could be more efficient, create new RCME instead of cloning
-              exec.RunCollection.Clear();
+              var exec = ItemTask.Item.CloneWithoutRuns();
               exec.RunCollection.Add(run);
+              exec.Prepare();
 
               var rcmHiveTask = new RunCollectionModifierHiveTask(exec);
