Index: /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 7781)
+++ /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 7782)
@@ -69,4 +69,5 @@
       Content.IsAllowedPrivilegedChanged += new EventHandler(Content_IsAllowedPrivilegedChanged);
       Content.Loaded += new EventHandler(Content_Loaded);
+      Content.TaskReceived += new EventHandler(Content_TaskReceived);
     }
 
@@ -83,4 +84,5 @@
       Content.ExecutionTimeChanged -= new EventHandler(Content_ExecutionTimeChanged);
       Content.Loaded -= new EventHandler(Content_Loaded);
+      Content.TaskReceived -= new EventHandler(Content_TaskReceived);
       base.DeregisterContentEvents();
     }
@@ -167,11 +169,12 @@
 
     #region Content Events
+    void Content_TaskReceived(object sender, EventArgs e) {
+      runCollectionViewHost.Content = GetAllRunsFromJob(Content);
+    }
+
     private void HiveTasks_ItemsAdded(object sender, CollectionItemsChangedEventArgs<HiveTask> e) {
       if (InvokeRequired)
         Invoke(new CollectionItemsChangedEventHandler<HiveTask>(HiveTasks_ItemsAdded), sender, e);
       else {
-        foreach (HiveTask t in e.Items) {
-          t.TaskStateChanged += new EventHandler(HiveTask_TaskStateChanged);
-        }
         SetEnabledStateOfControls();
       }
@@ -182,7 +185,4 @@
         Invoke(new CollectionItemsChangedEventHandler<HiveTask>(HiveTasks_ItemsRemoved), sender, e);
       else {
-        foreach (HiveTask t in e.Items) {
-          t.TaskStateChanged -= new EventHandler(HiveTask_TaskStateChanged);
-        }
         SetEnabledStateOfControls();
       }
@@ -193,13 +193,6 @@
         Invoke(new CollectionItemsChangedEventHandler<HiveTask>(HiveTasks_CollectionReset), sender, e);
       else {
-        foreach (HiveTask t in e.Items) {
-          t.TaskStateChanged -= new EventHandler(HiveTask_TaskStateChanged);
-        }
-        SetEnabledStateOfControls();
-      }
-    }
-
-    void HiveTask_TaskStateChanged(object sender, EventArgs e) {
-      runCollectionViewHost.Content = GetAllRunsFromJob(Content);
+        SetEnabledStateOfControls();
+      }
     }
 
Index: /trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveTasks/OptimizerHiveTask.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveTasks/OptimizerHiveTask.cs	(revision 7781)
+++ /trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveTasks/OptimizerHiveTask.cs	(revision 7782)
@@ -31,4 +31,6 @@
 namespace HeuristicLab.Clients.Hive {
   public class OptimizerHiveTask : HiveTask<OptimizerTask> {
+
+    Object batchRunLocker = new Object();
 
     #region Constructors and Cloning
@@ -224,8 +226,10 @@
         batchRun.Optimizer = (IOptimizer)optimizerTask.Item; // only set the first optimizer as Optimizer. if every time the Optimizer would be set, the runs would be cleared each time
       }
-      foreach (IRun run in optimizerTask.Item.Runs) {
-        if (!batchRun.Runs.Contains(run)) {
-          run.Name = GetNewRunName(run, batchRun.Runs);
-          batchRun.Runs.Add(run);
+      lock (batchRunLocker) {
+        foreach (IRun run in optimizerTask.Item.Runs) {
+          if (!batchRun.Runs.Contains(run)) {
+            run.Name = GetNewRunName(run, batchRun.Runs);
+            batchRun.Runs.Add(run);
+          }
         }
       }
Index: /trunk/sources/HeuristicLab.Clients.Hive/3.3/RefreshableJob.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive/3.3/RefreshableJob.cs	(revision 7781)
+++ /trunk/sources/HeuristicLab.Clients.Hive/3.3/RefreshableJob.cs	(revision 7782)
@@ -316,4 +316,5 @@
       UpdateStatistics();
       OnStateLogListChanged();
+      OnTaskReceived();
     }
 
@@ -469,4 +470,9 @@
       if (handler != null) handler(this, EventArgs.Empty);
     }
+    public event EventHandler TaskReceived;
+    protected virtual void OnTaskReceived() {
+      var handler = TaskReceived;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
     #endregion
 
