Index: trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.Designer.cs	(revision 14899)
+++ trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.Designer.cs	(revision 14901)
@@ -60,5 +60,4 @@
       this.startButton = new System.Windows.Forms.Button();
       this.stopButton = new System.Windows.Forms.Button();
-      this.resetButton = new System.Windows.Forms.Button();
       this.executionTimeLabel = new System.Windows.Forms.Label();
       this.executionTimeTextBox = new System.Windows.Forms.TextBox();
@@ -271,17 +270,4 @@
       this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
       // 
-      // resetButton
-      // 
-      this.resetButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.resetButton.Enabled = false;
-      this.resetButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Restart;
-      this.resetButton.Location = new System.Drawing.Point(90, 536);
-      this.resetButton.Name = "resetButton";
-      this.resetButton.Size = new System.Drawing.Size(24, 24);
-      this.resetButton.TabIndex = 8;
-      this.toolTip.SetToolTip(this.resetButton, "Reset Experiment");
-      this.resetButton.UseVisualStyleBackColor = true;
-      this.resetButton.Click += new System.EventHandler(this.resetButton_Click);
-      // 
       // executionTimeLabel
       // 
@@ -486,5 +472,4 @@
       this.Controls.Add(this.resourceIdsLabel);
       this.Controls.Add(this.stopButton);
-      this.Controls.Add(this.resetButton);
       this.Name = "RefreshableHiveJobView";
       this.Size = new System.Drawing.Size(717, 560);
@@ -505,5 +490,4 @@
     private System.Windows.Forms.Button startButton;
     private System.Windows.Forms.Button stopButton;
-    private System.Windows.Forms.Button resetButton;
     private System.Windows.Forms.Label executionTimeLabel;
     private System.Windows.Forms.TextBox executionTimeTextBox;
Index: trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 14899)
+++ trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 14901)
@@ -167,5 +167,4 @@
       pauseButton.Enabled = !Locked;
       stopButton.Enabled = !Locked;
-      resetButton.Enabled = !Locked;
     }
 
@@ -188,5 +187,5 @@
           this.jobsTreeView.ReadOnly = !Content.IsControllable || Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded || Content.IsProgressing;
 
-          this.refreshAutomaticallyCheckBox.Enabled = Content.IsControllable && alreadyUploaded && jobsLoaded && Content.ExecutionState == ExecutionState.Started && !Content.IsProgressing;
+          this.refreshAutomaticallyCheckBox.Enabled = Content.IsControllable && alreadyUploaded && jobsLoaded && (Content.ExecutionState == ExecutionState.Started || Content.ExecutionState == ExecutionState.Paused) && !Content.IsProgressing;
           this.refreshButton.Enabled = Content.IsDownloadable && alreadyUploaded && !Content.IsProgressing;
 
@@ -380,5 +379,4 @@
       }, TaskContinuationOptions.OnlyOnFaulted);
     }
-    private void resetButton_Click(object sender, EventArgs e) { }
 
     private void PauseJobAsync(object job) {
@@ -438,10 +436,9 @@
     private void SetEnabledStateOfExecutableButtons() {
       if (Content == null) {
-        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.Enabled = false;
+        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = false;
       } else {
         startButton.Enabled = Content.IsControllable && Content.HiveTasks != null && Content.HiveTasks.Count > 0 && (Content.ExecutionState == ExecutionState.Prepared || Content.ExecutionState == ExecutionState.Paused) && !Content.IsProgressing;
         pauseButton.Enabled = Content.IsControllable && Content.ExecutionState == ExecutionState.Started && !Content.IsProgressing;
-        stopButton.Enabled = Content.IsControllable && Content.ExecutionState == ExecutionState.Started && !Content.IsProgressing;
-        resetButton.Enabled = false;
+        stopButton.Enabled = Content.IsControllable && (Content.ExecutionState == ExecutionState.Started || Content.ExecutionState == ExecutionState.Paused) && !Content.IsProgressing;
       }
     }
Index: trunk/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs	(revision 14899)
+++ trunk/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs	(revision 14901)
@@ -73,5 +73,5 @@
 
     #region Child Control Events
-    private void restartButton_Click(object sender, EventArgs e) {
+    private void startButton_Click(object sender, EventArgs e) {
       var task = System.Threading.Tasks.Task.Factory.StartNew(ResumeTaskAsync);
       task.ContinueWith((t) => {
@@ -119,5 +119,5 @@
       base.SetEnabledStateOfControls();
 
-      this.restartButton.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 || Content.Task.State == TaskState.Failed || Content.Task.State == TaskState.Aborted);
       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.Views/3.3/HiveTasks/OptimizerHiveTaskView.designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.designer.cs	(revision 14899)
+++ trunk/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.designer.cs	(revision 14901)
@@ -45,5 +45,5 @@
     /// </summary>
     private void InitializeComponent() {
-      this.restartButton = new System.Windows.Forms.Button();
+      this.startButton = new System.Windows.Forms.Button();
       this.pauseButton = new System.Windows.Forms.Button();
       this.stopButton = new System.Windows.Forms.Button();
@@ -60,5 +60,5 @@
       // detailsTabPage
       // 
-      this.detailsTabPage.Controls.Add(this.restartButton);
+      this.detailsTabPage.Controls.Add(this.startButton);
       this.detailsTabPage.Controls.Add(this.pauseButton);
       this.detailsTabPage.Controls.Add(this.stopButton);
@@ -66,5 +66,5 @@
       this.detailsTabPage.Controls.SetChildIndex(this.stopButton, 0);
       this.detailsTabPage.Controls.SetChildIndex(this.pauseButton, 0);
-      this.detailsTabPage.Controls.SetChildIndex(this.restartButton, 0);
+      this.detailsTabPage.Controls.SetChildIndex(this.startButton, 0);
       // 
       // tabControl
@@ -79,14 +79,14 @@
       this.modifyItemButton.Text = "Show/Modify Optimizer";
       // 
-      // restartButton
+      // startButton
       // 
-      this.restartButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.restartButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Restart;
-      this.restartButton.Location = new System.Drawing.Point(3, 348);
-      this.restartButton.Name = "restartButton";
-      this.restartButton.Size = new System.Drawing.Size(24, 24);
-      this.restartButton.TabIndex = 34;
-      this.restartButton.UseVisualStyleBackColor = true;
-      this.restartButton.Click += new System.EventHandler(this.restartButton_Click);
+      this.startButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.startButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Play;
+      this.startButton.Location = new System.Drawing.Point(3, 348);
+      this.startButton.Name = "startButton";
+      this.startButton.Size = new System.Drawing.Size(24, 24);
+      this.startButton.TabIndex = 34;
+      this.startButton.UseVisualStyleBackColor = true;
+      this.startButton.Click += new System.EventHandler(this.startButton_Click);
       // 
       // pauseButton
@@ -139,5 +139,4 @@
       // OptimizerHiveTaskView
       // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
       this.Name = "OptimizerHiveTaskView";
@@ -156,5 +155,5 @@
     #endregion
 
-    private System.Windows.Forms.Button restartButton;
+    private System.Windows.Forms.Button startButton;
     private System.Windows.Forms.Button pauseButton;
     private System.Windows.Forms.Button stopButton;
Index: trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveClient.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 14899)
+++ trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 14901)
@@ -441,5 +441,7 @@
         if (refreshableJob.IsFinished()) {
           refreshableJob.ExecutionState = Core.ExecutionState.Stopped;
-        } else {
+        } else if (refreshableJob.IsPaused()) {
+          refreshableJob.ExecutionState = Core.ExecutionState.Paused;
+        } else { 
           refreshableJob.ExecutionState = Core.ExecutionState.Started;
         }
Index: trunk/sources/HeuristicLab.Clients.Hive/3.3/RefreshableJob.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.Hive/3.3/RefreshableJob.cs	(revision 14899)
+++ trunk/sources/HeuristicLab.Clients.Hive/3.3/RefreshableJob.cs	(revision 14901)
@@ -304,7 +304,12 @@
         }
         GC.Collect(); // force GC, because .NET is too lazy here (deserialization takes a lot of memory)
-        if (AllJobsFinished()) {
-          this.ExecutionState = Core.ExecutionState.Stopped;
+        if (IsFinished()) {
+          ExecutionState = ExecutionState.Stopped;
           StopResultPolling();
+        } else if (IsPaused()) {
+          ExecutionState = ExecutionState.Paused;
+          StopResultPolling();
+        } else {
+          ExecutionState = ExecutionState.Started;
         }
         UpdateTotalExecutionTime();
@@ -330,11 +335,4 @@
       job.FinishedCount = jobs.Count(j => j.Task.State == TaskState.Finished);
       OnJobStatisticsChanged();
-    }
-
-    public bool AllJobsFinished() {
-      return this.GetAllHiveTasks().All(j => (j.Task.State == TaskState.Finished
-                                                   || j.Task.State == TaskState.Aborted
-                                                   || j.Task.State == TaskState.Failed)
-                                                   && !j.IsDownloading);
     }
 
@@ -513,4 +511,8 @@
           this.RefreshAutomatically = false;
           StopResultPolling();
+        } else if (IsPaused()) {
+          this.executionState = Core.ExecutionState.Paused;
+          this.RefreshAutomatically = false;
+          StopResultPolling();
         } else {
           this.RefreshAutomatically = true;
@@ -527,5 +529,5 @@
       this.OnStateLogListChanged();
 
-      if (this.ExecutionState != ExecutionState.Stopped) {
+      if (this.ExecutionState != ExecutionState.Stopped && this.ExecutionState != ExecutionState.Paused) {
         this.RefreshAutomatically = true;
       }
@@ -584,6 +586,16 @@
 
     public bool IsFinished() {
-      return HiveTasks != null
-        && HiveTasks.All(x => x.Task.DateFinished.HasValue && x.Task.DateCreated.HasValue);
+      var tasks = GetAllHiveTasks();
+      return tasks.All(x => x.Task.State == TaskState.Finished
+                            || x.Task.State == TaskState.Aborted
+                            || x.Task.State == TaskState.Failed);
+    }
+
+    public bool IsPaused() {
+      var tasks = GetAllHiveTasks().Where(x => !x.Task.IsParentTask);
+      return tasks.All(x => x.Task.State != TaskState.Waiting
+                            && x.Task.State != TaskState.Transferring
+                            && x.Task.State != TaskState.Calculating)
+             && tasks.Any(x => x.Task.State == TaskState.Paused);
     }
 
Index: trunk/sources/HeuristicLab.Services.Hive/3.3/HiveService.cs
===================================================================
--- trunk/sources/HeuristicLab.Services.Hive/3.3/HiveService.cs	(revision 14899)
+++ trunk/sources/HeuristicLab.Services.Hive/3.3/HiveService.cs	(revision 14901)
@@ -263,6 +263,9 @@
           if (task.State == DA.TaskState.Calculating || task.State == DA.TaskState.Transferring) {
             task.Command = DA.Command.Pause;
-          }
-          UpdateTaskState(pm, task, DT.TaskState.Paused, null, null, string.Empty);
+          } else if (task.State != DA.TaskState.Aborted
+                     && task.State != DA.TaskState.Finished
+                     && task.State != DA.TaskState.Failed) {
+            UpdateTaskState(pm, task, DT.TaskState.Paused, null, null, string.Empty);
+          }
           pm.SubmitChanges();
         });
@@ -962,12 +965,10 @@
       var stateLogDao = pm.StateLogDao;
       var taskStateEntity = taskState.ToEntity();
-      if (task.Command == DA.Command.Pause && task.State == DA.TaskState.Paused
-          || task.Command == DA.Command.Abort && task.State == DA.TaskState.Aborted
-          || task.Command == DA.Command.Stop && task.State == DA.TaskState.Aborted) {
-        task.Command = null;
-      } else if (taskStateEntity == DA.TaskState.Paused && task.Command == null) {
+
+      if (taskStateEntity == DA.TaskState.Paused && task.Command == null) {
         // slave paused and uploaded the task (no user-command) -> set waiting.
         taskStateEntity = DA.TaskState.Waiting;
       }
+
       stateLogDao.Save(new DA.StateLog {
         State = taskStateEntity,
@@ -978,5 +979,12 @@
         Exception = exception
       });
+
       task.State = taskStateEntity;
+
+      if (task.Command == DA.Command.Pause && task.State == DA.TaskState.Paused
+          || task.Command == DA.Command.Abort && task.State == DA.TaskState.Aborted
+          || task.Command == DA.Command.Stop && task.State == DA.TaskState.Aborted) {
+        task.Command = null;
+      }
     }
 
