Index: /trunk/sources/HeuristicLab.Core.Views/3.3/EngineView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/EngineView.cs	(revision 3260)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/EngineView.cs	(revision 3261)
@@ -60,6 +60,5 @@
     protected override void DeregisterContentEvents() {
       Content.Prepared -= new EventHandler(Content_Prepared);
-      Content.Started -= new EventHandler(Content_Started);
-      Content.Stopped -= new EventHandler(Content_Stopped);
+      Content.RunningChanged -= new EventHandler(Content_RunningChanged);
       Content.ExecutionTimeChanged -= new EventHandler(Content_ExecutionTimeChanged);
       Content.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred);
@@ -74,6 +73,5 @@
       base.RegisterContentEvents();
       Content.Prepared += new EventHandler(Content_Prepared);
-      Content.Started += new EventHandler(Content_Started);
-      Content.Stopped += new EventHandler(Content_Stopped);
+      Content.RunningChanged += new EventHandler(Content_RunningChanged);
       Content.ExecutionTimeChanged += new EventHandler(Content_ExecutionTimeChanged);
       Content.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred);
@@ -102,23 +100,16 @@
         Invoke(new EventHandler(Content_Prepared), sender, e);
       else {
+        executionTimeCounter = 0;
         UpdateExecutionTimeTextBox();
         Log("Engine prepared");
       }
     }
-    protected virtual void Content_Started(object sender, EventArgs e) {
-      executionTimeCounter = 0;
+    protected virtual void Content_RunningChanged(object sender, EventArgs e) {
       if (InvokeRequired)
-        Invoke(new EventHandler(Content_Started), sender, e);
+        Invoke(new EventHandler(Content_RunningChanged), sender, e);
       else {
         UpdateExecutionTimeTextBox();
-        Log("Engine started");
-      }
-    }
-    protected virtual void Content_Stopped(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_Stopped), sender, e);
-      else {
-        UpdateExecutionTimeTextBox();
-        if (Content.Finished) Log("Engine finished");
+        if (Content.Running) Log("Engine started");
+        else if (Content.Finished) Log("Engine finished");
         else Log("Engine stopped");
       }
Index: /trunk/sources/HeuristicLab.Core/3.3/Engine.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/Engine.cs	(revision 3260)
+++ /trunk/sources/HeuristicLab.Core/3.3/Engine.cs	(revision 3261)
@@ -142,6 +142,4 @@
     /// of class <see cref="ThreadPool"/>.</remarks>
     public void Start() {
-      Running = true;
-      Canceled = false;
       ThreadPool.QueueUserWorkItem(new WaitCallback(Run), null);
     }
@@ -150,6 +148,4 @@
     /// of class <see cref="ThreadPool"/>.</remarks>
     public void Step() {
-      Running = true;
-      Canceled = false;
       ThreadPool.QueueUserWorkItem(new WaitCallback(RunStep), null);
     }
@@ -162,4 +158,6 @@
     private void Run(object state) {
       OnStarted();
+      Running = true;
+      Canceled = false;
       DateTime start = DateTime.Now;
       DateTime end;
@@ -171,12 +169,18 @@
       }
       ExecutionTime += DateTime.Now - start;
+      Canceled = false;
+      Running = false;
       OnStopped();
     }
     private void RunStep(object state) {
       OnStarted();
+      Running = true;
+      Canceled = false;
       DateTime start = DateTime.Now;
       if ((!Canceled) && (!Finished))
         ProcessNextOperator();
       ExecutionTime += DateTime.Now - start;
+      Canceled = false;
+      Running = false;
       OnStopped();
     }
@@ -241,6 +245,4 @@
       if (Stopped != null)
         Stopped(this, EventArgs.Empty);
-      Canceled = false;
-      Running = false;
     }
     protected virtual void OnCanceledChanged() { }
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs	(revision 3260)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs	(revision 3261)
@@ -78,6 +78,5 @@
       Content.Prepared -= new EventHandler(Content_Prepared);
       Content.ProblemChanged -= new EventHandler(Content_ProblemChanged);
-      Content.Started -= new EventHandler(Content_Started);
-      Content.Stopped -= new EventHandler(Content_Stopped);
+      Content.RunningChanged -= new EventHandler(Content_RunningChanged);
       base.DeregisterContentEvents();
     }
@@ -88,6 +87,5 @@
       Content.Prepared += new EventHandler(Content_Prepared);
       Content.ProblemChanged += new EventHandler(Content_ProblemChanged);
-      Content.Started += new EventHandler(Content_Started);
-      Content.Stopped += new EventHandler(Content_Stopped);
+      Content.RunningChanged += new EventHandler(Content_RunningChanged);
     }
 
@@ -127,4 +125,5 @@
         Invoke(new EventHandler(Content_Prepared), sender, e);
       else {
+        executionTimeCounter = 0;
         resultsView.Content = Content.Results.AsReadOnly();
         startButton.Enabled = !Content.Finished;
@@ -141,32 +140,16 @@
       }
     }
-    protected virtual void Content_Started(object sender, EventArgs e) {
-      executionTimeCounter = 0;
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_Started), sender, e);
+    protected virtual void Content_RunningChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_RunningChanged), sender, e);
       else {
-        SaveEnabled = false;
-        parameterCollectionView.Enabled = false;
-        newProblemButton.Enabled = openProblemButton.Enabled = saveProblemButton.Enabled = false;
-        problemViewHost.Enabled = false;
-        resultsView.Enabled = false;
-        startButton.Enabled = false;
-        stopButton.Enabled = true;
-        resetButton.Enabled = false;
-        UpdateExecutionTimeTextBox();
-      }
-    }
-    protected virtual void Content_Stopped(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_Stopped), sender, e);
-      else {
-        SaveEnabled = true;
-        parameterCollectionView.Enabled = true;
-        newProblemButton.Enabled = openProblemButton.Enabled = saveProblemButton.Enabled = true;
-        problemViewHost.Enabled = true;
-        resultsView.Enabled = true;
-        startButton.Enabled = !Content.Finished;
-        stopButton.Enabled = false;
-        resetButton.Enabled = true;
+        SaveEnabled = !Content.Running;
+        parameterCollectionView.Enabled = !Content.Running;
+        newProblemButton.Enabled = openProblemButton.Enabled = saveProblemButton.Enabled = !Content.Running;
+        problemViewHost.Enabled = !Content.Running;
+        resultsView.Enabled = !Content.Running;
+        startButton.Enabled = !Content.Running && !Content.Finished;
+        stopButton.Enabled = Content.Running;
+        resetButton.Enabled = !Content.Running;
         UpdateExecutionTimeTextBox();
       }
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.Designer.cs	(revision 3260)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.Designer.cs	(revision 3261)
@@ -171,5 +171,5 @@
       this.startButton.Size = new System.Drawing.Size(24, 24);
       this.startButton.TabIndex = 7;
-      this.toolTip.SetToolTip(this.startButton, "Start/Resume Algorithm");
+      this.toolTip.SetToolTip(this.startButton, "Start/Resume Batch Run");
       this.startButton.UseVisualStyleBackColor = true;
       this.startButton.Click += new System.EventHandler(this.startButton_Click);
@@ -183,5 +183,5 @@
       this.stopButton.Size = new System.Drawing.Size(24, 24);
       this.stopButton.TabIndex = 8;
-      this.toolTip.SetToolTip(this.stopButton, "Pause Algorithm");
+      this.toolTip.SetToolTip(this.stopButton, "Pause Batch Run");
       this.stopButton.UseVisualStyleBackColor = true;
       this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
@@ -195,5 +195,5 @@
       this.resetButton.Size = new System.Drawing.Size(24, 24);
       this.resetButton.TabIndex = 9;
-      this.toolTip.SetToolTip(this.resetButton, "Reset Algorithm");
+      this.toolTip.SetToolTip(this.resetButton, "Reset Batch Run");
       this.resetButton.UseVisualStyleBackColor = true;
       this.resetButton.Click += new System.EventHandler(this.resetButton_Click);
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs	(revision 3260)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs	(revision 3261)
@@ -62,7 +62,6 @@
       Content.Prepared -= new EventHandler(Content_Prepared);
       Content.AlgorithmChanged -= new EventHandler(Content_AlgorithmChanged);
-      Content.Started -= new EventHandler(Content_Started);
-      Content.Stopped -= new EventHandler(Content_Stopped);
       Content.RepetitionsChanged -= new EventHandler(Content_RepetitionsChanged);
+      Content.RunningChanged -= new EventHandler(Content_RunningChanged);
       base.DeregisterContentEvents();
     }
@@ -73,7 +72,6 @@
       Content.Prepared += new EventHandler(Content_Prepared);
       Content.AlgorithmChanged += new EventHandler(Content_AlgorithmChanged);
-      Content.Started += new EventHandler(Content_Started);
-      Content.Stopped += new EventHandler(Content_Stopped);
       Content.RepetitionsChanged += new EventHandler(Content_RepetitionsChanged);
+      Content.RunningChanged += new EventHandler(Content_RunningChanged);
     }
 
@@ -128,27 +126,14 @@
       }
     }
-    private void Content_Started(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_Started), sender, e);
-      else {
-        SaveEnabled = false;
-        repetitionsNumericUpDown.Enabled = false;
-        newAlgorithmButton.Enabled = openAlgorithmButton.Enabled = saveAlgorithmButton.Enabled = false;
-        startButton.Enabled = false;
-        stopButton.Enabled = true;
-        resetButton.Enabled = false;
-        UpdateExecutionTimeTextBox();
-      }
-    }
-    private void Content_Stopped(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_Stopped), sender, e);
-      else {
-        SaveEnabled = true;
-        repetitionsNumericUpDown.Enabled = true;
-        newAlgorithmButton.Enabled = openAlgorithmButton.Enabled = saveAlgorithmButton.Enabled = true;
-        startButton.Enabled = !Content.Finished;
-        stopButton.Enabled = false;
-        resetButton.Enabled = true;
+    private void Content_RunningChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_RunningChanged), sender, e);
+      else {
+        SaveEnabled = !Content.Running;
+        repetitionsNumericUpDown.Enabled = !Content.Running;
+        newAlgorithmButton.Enabled = openAlgorithmButton.Enabled = saveAlgorithmButton.Enabled = !Content.Running;
+        startButton.Enabled = !Content.Running && !Content.Finished;
+        stopButton.Enabled = Content.Running;
+        resetButton.Enabled = !Content.Running;
         UpdateExecutionTimeTextBox();
       }
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.cs	(revision 3260)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.cs	(revision 3261)
@@ -98,22 +98,12 @@
     }
 
-    protected override void Content_Started(object sender, EventArgs e) {
+    protected override void Content_RunningChanged(object sender, EventArgs e) {
       if (InvokeRequired)
-        Invoke(new EventHandler(Content_Started), sender, e);
+        Invoke(new EventHandler(Content_RunningChanged), sender, e);
       else {
-        createUserDefinedAlgorithmButton.Enabled = false;
-        engineComboBox.Enabled = false;
-        engineViewHost.Enabled = false;
-        base.Content_Started(sender, e);
-      }
-    }
-    protected override void Content_Stopped(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_Stopped), sender, e);
-      else {
-        createUserDefinedAlgorithmButton.Enabled = true;
-        engineComboBox.Enabled = true;
-        engineViewHost.Enabled = true;
-        base.Content_Stopped(sender, e);
+        createUserDefinedAlgorithmButton.Enabled = !Content.Running;
+        engineComboBox.Enabled = !Content.Running;
+        engineViewHost.Enabled = !Content.Running;
+        base.Content_RunningChanged(sender, e);
       }
     }
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/UserDefinedAlgorithmView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/UserDefinedAlgorithmView.cs	(revision 3260)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/UserDefinedAlgorithmView.cs	(revision 3261)
@@ -75,22 +75,12 @@
     }
 
-    protected override void Content_Started(object sender, EventArgs e) {
+    protected override void Content_RunningChanged(object sender, EventArgs e) {
       if (InvokeRequired)
-        Invoke(new EventHandler(Content_Started), sender, e);
+        Invoke(new EventHandler(Content_RunningChanged), sender, e);
       else {
-        newOperatorGraphButton.Enabled = openOperatorGraphButton.Enabled = saveOperatorGraphButton.Enabled = false;
-        operatorGraphViewHost.Enabled = false;
-        globalScopeView.Enabled = false;
-        base.Content_Started(sender, e);
-      }
-    }
-    protected override void Content_Stopped(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_Stopped), sender, e);
-      else {
-        newOperatorGraphButton.Enabled = openOperatorGraphButton.Enabled = saveOperatorGraphButton.Enabled = true;
-        operatorGraphViewHost.Enabled = true;
-        globalScopeView.Enabled = true;
-        base.Content_Stopped(sender, e);
+        newOperatorGraphButton.Enabled = openOperatorGraphButton.Enabled = saveOperatorGraphButton.Enabled = !Content.Running;
+        operatorGraphViewHost.Enabled = !Content.Running;
+        globalScopeView.Enabled = !Content.Running;
+        base.Content_RunningChanged(sender, e);
       }
     }
Index: /trunk/sources/HeuristicLab.Optimization/3.3/Algorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/Algorithm.cs	(revision 3260)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/Algorithm.cs	(revision 3261)
@@ -112,7 +112,7 @@
     }
     public void Start() {
+      OnStarted();
       Running = true;
       Canceled = false;
-      OnStarted();
     }
     public void Stop() {
@@ -157,8 +157,8 @@
     public event EventHandler Stopped;
     protected virtual void OnStopped() {
+      Canceled = false;
+      Running = false;
       if (Stopped != null)
         Stopped(this, EventArgs.Empty);
-      Canceled = false;
-      Running = false;
     }
     protected virtual void OnCanceledChanged() { }
Index: /trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs	(revision 3260)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs	(revision 3261)
@@ -142,5 +142,10 @@
     }
     public void Start() {
-      if (Algorithm != null) Algorithm.Start();
+      if (Algorithm != null) {
+        OnStarted();
+        Running = true;
+        canceled = false;
+        Algorithm.Start();
+      }
     }
     public void Stop() {
@@ -186,6 +191,4 @@
       if (Stopped != null)
         Stopped(this, EventArgs.Empty);
-      canceled = false;
-      Running = false;
     }
     public event EventHandler<HeuristicLab.Common.EventArgs<Exception>> ExceptionOccurred;
@@ -195,32 +198,42 @@
     }
 
+    private void RegisterAlgorithmEvents() {
+      algorithm.ExceptionOccurred += new EventHandler<HeuristicLab.Common.EventArgs<Exception>>(Algorithm_ExceptionOccurred);
+      algorithm.Started += new EventHandler(Algorithm_Started);
+      algorithm.Stopped += new EventHandler(Algorithm_Stopped);
+    }
     private void DeregisterAlgorithmEvents() {
-      algorithm.RunningChanged -= new EventHandler(Algorithm_RunningChanged);
       algorithm.ExceptionOccurred -= new EventHandler<HeuristicLab.Common.EventArgs<Exception>>(Algorithm_ExceptionOccurred);
-    }
-
-    private void RegisterAlgorithmEvents() {
-      algorithm.RunningChanged += new EventHandler(Algorithm_RunningChanged);
-      algorithm.ExceptionOccurred += new EventHandler<HeuristicLab.Common.EventArgs<Exception>>(Algorithm_ExceptionOccurred);
-    }
-
-    private void Algorithm_RunningChanged(object sender, EventArgs e) {
-      if (Algorithm.Running) {
-        Running = true;
-        OnStarted();
-      } else {
-        if (!canceled) {
-          ExecutionTime += Algorithm.ExecutionTime;
-          runs.Add(new Run("Run " + Algorithm.ExecutionTime.ToString(), Algorithm));
-          Algorithm.Prepare();
-          if (runs.Count < repetitions) Algorithm.Start();
-          else OnStopped();
-        } else {
-          OnStopped();
-        }
-      }
-    }
+      algorithm.Started -= new EventHandler(Algorithm_Started);
+      algorithm.Stopped -= new EventHandler(Algorithm_Stopped);
+    }
+
     private void Algorithm_ExceptionOccurred(object sender, HeuristicLab.Common.EventArgs<Exception> e) {
       OnExceptionOccurred(e.Value);
+    }
+    private void Algorithm_Started(object sender, EventArgs e) {
+      if (!Running) {
+        OnStarted();
+        Running = true;
+        canceled = false;
+      }
+    }
+    private void Algorithm_Stopped(object sender, EventArgs e) {
+      if (!canceled) {
+        ExecutionTime += Algorithm.ExecutionTime;
+        runs.Add(new Run("Run " + Algorithm.ExecutionTime.ToString(), Algorithm));
+        Algorithm.Prepare();
+
+        if (runs.Count < repetitions)
+          Algorithm.Start();
+        else {
+          Running = false;
+          OnStopped();
+        }
+      } else {
+        canceled = false;
+        Running = false;
+        OnStopped();
+      }
     }
     #endregion
Index: /trunk/sources/HeuristicLab.Optimization/3.3/EngineAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/EngineAlgorithm.cs	(revision 3260)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/EngineAlgorithm.cs	(revision 3261)
@@ -216,10 +216,11 @@
       Engine.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Engine_ExceptionOccurred);
       Engine.ExecutionTimeChanged += new EventHandler(Engine_ExecutionTimeChanged);
-      Engine.RunningChanged += new EventHandler(Engine_RunningChanged);
-    }
+      Engine.Stopped += new EventHandler(Engine_Stopped);
+    }
+
     private void DeregisterEngineEvents() {
       Engine.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Engine_ExceptionOccurred);
       Engine.ExecutionTimeChanged -= new EventHandler(Engine_ExecutionTimeChanged);
-      Engine.RunningChanged -= new EventHandler(Engine_RunningChanged);
+      Engine.Stopped -= new EventHandler(Engine_Stopped);
     }
 
@@ -230,6 +231,6 @@
       OnExecutionTimeChanged();
     }
-    private void Engine_RunningChanged(object sender, EventArgs e) {
-      if (!Engine.Running) OnStopped();
+    private void Engine_Stopped(object sender, EventArgs e) {
+      OnStopped();
     }
   }
