Index: /trunk/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs	(revision 15120)
+++ /trunk/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs	(revision 15121)
@@ -119,5 +119,5 @@
       base.SetEnabledStateOfControls();
 
-      this.startButton.Enabled = Content != null && Content.IsControllable && !Content.Task.Command.HasValue && (Content.Task.State == TaskState.Paused || Content.Task.State == TaskState.Failed || Content.Task.State == TaskState.Aborted);
+      this.startButton.Enabled = Content != null && Content.IsControllable && !Content.Task.Command.HasValue && (Content.Task.State == TaskState.Paused);
       this.pauseButton.Enabled = Content != null && Content.IsControllable && !Content.Task.Command.HasValue && Content.Task.State == TaskState.Calculating;
       this.stopButton.Enabled = Content != null && Content.IsControllable && !Content.Task.Command.HasValue && (Content.Task.State == TaskState.Calculating || Content.Task.State == TaskState.Waiting || Content.Task.State == TaskState.Paused);
Index: /trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveTasks/OptimizerHiveTask.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveTasks/OptimizerHiveTask.cs	(revision 15120)
+++ /trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveTasks/OptimizerHiveTask.cs	(revision 15121)
@@ -316,24 +316,20 @@
     public override void AddChildHiveTask(HiveTask hiveTask) {
       base.AddChildHiveTask(hiveTask);
-      var optimizerHiveJob = (OptimizerHiveTask)hiveTask;
+      var optimizerHiveTask = (OptimizerHiveTask)hiveTask;
       syncTasksWithOptimizers = false;
-      if (this.ItemTask != null && optimizerHiveJob.ItemTask != null) {
-        // if task is in state Paused, it has to preserve its ResultCollection, which is cleared when a optimizer is added to an experiment
-        OptimizerTask optimizerJobClone = null;
-        if (optimizerHiveJob.Task.State == TaskState.Paused) {
-          optimizerJobClone = (OptimizerTask)optimizerHiveJob.ItemTask.Clone();
-        }
+      if (this.ItemTask != null && optimizerHiveTask.ItemTask != null) {
+        OptimizerTask optimizerTaskClone = (OptimizerTask)optimizerHiveTask.ItemTask.Clone();
 
         if (this.ItemTask.Item is Optimization.Experiment) {
-          if (!this.ItemTask.OptimizerAsExperiment.Optimizers.Contains(optimizerHiveJob.ItemTask.Item)) {
-            UpdateOptimizerInExperiment(this.ItemTask.OptimizerAsExperiment, optimizerHiveJob.ItemTask);
+          if (!this.ItemTask.OptimizerAsExperiment.Optimizers.Contains(optimizerHiveTask.ItemTask.Item)) {
+            UpdateOptimizerInExperiment(this.ItemTask.OptimizerAsExperiment, optimizerHiveTask.ItemTask);
           }
         } else if (this.ItemTask.Item is Optimization.BatchRun) {
-          UpdateOptimizerInBatchRun(this.ItemTask.OptimizerAsBatchRun, optimizerHiveJob.ItemTask);
-        }
-
-        if (optimizerHiveJob.Task.State == TaskState.Paused) {
-          optimizerHiveJob.ItemTask = optimizerJobClone;
-        }
+          UpdateOptimizerInBatchRun(this.ItemTask.OptimizerAsBatchRun, optimizerHiveTask.ItemTask);
+        }
+
+        optimizerHiveTask.syncTasksWithOptimizers = false;
+        optimizerHiveTask.ItemTask = optimizerTaskClone;
+        optimizerHiveTask.syncTasksWithOptimizers = true;
       }
       syncTasksWithOptimizers = true;
Index: /trunk/sources/HeuristicLab.Services.Hive/3.3/HiveService.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.Hive/3.3/HiveService.cs	(revision 15120)
+++ /trunk/sources/HeuristicLab.Services.Hive/3.3/HiveService.cs	(revision 15121)
@@ -263,5 +263,6 @@
           if (task.State == DA.TaskState.Calculating || task.State == DA.TaskState.Transferring) {
             task.Command = DA.Command.Pause;
-          } else if (task.State != DA.TaskState.Aborted
+          } else if (task.State != DA.TaskState.Paused
+                     && task.State != DA.TaskState.Aborted
                      && task.State != DA.TaskState.Finished
                      && task.State != DA.TaskState.Failed) {
@@ -966,5 +967,5 @@
       var taskStateEntity = taskState.ToEntity();
 
-      if (taskStateEntity == DA.TaskState.Paused && task.Command == null) {
+      if (task.State == DA.TaskState.Calculating && taskStateEntity == DA.TaskState.Paused && task.Command == null) {
         // slave paused and uploaded the task (no user-command) -> set waiting.
         taskStateEntity = DA.TaskState.Waiting;
