Index: stable/HeuristicLab.MainForm/3.3/Interfaces/IProgress.cs
===================================================================
--- stable/HeuristicLab.MainForm/3.3/Interfaces/IProgress.cs	(revision 9503)
+++ stable/HeuristicLab.MainForm/3.3/Interfaces/IProgress.cs	(revision 9933)
@@ -28,14 +28,14 @@
   public interface IProgress : IContent {
     /// <summary>
-    /// Gets the currently associated status text with the progress.
+    /// Gets or sets the currently associated status text with the progress.
     /// </summary>
-    string Status { get; }
+    string Status { get; set; }
     /// <summary>
-    /// Gets the currently associated progress value in the range (0;1].
+    /// Gets or sets the currently associated progress value in the range (0;1].
     ///  Values outside this range are permitted and need to be handled in some feasible manner.
     /// </summary>
-    double ProgressValue { get; }
+    double ProgressValue { get; set; }
     /// <summary>
-    /// Gets the current state of the progress. Every progress starts in state
+    /// Gets or sets the current state of the progress. Every progress starts in state
     /// Started and then becomes either Canceled or Finished.
     /// If it is reused it may be Started again.
@@ -54,6 +54,16 @@
     /// </summary>
     /// <exception cref="NotSupportedException">Thrown when cancellation is not supported.</exception>
-    /// <param name="timeoutMs">The operation is given a certain timeout to cancel. If the operation doesn't cancel in this time it will be forcibly closed.</param>
-    void Cancel(int timeoutMs);
+    void Cancel();
+    /// <summary>
+    /// Sets the ProgressValue to 1 and the ProgressState to Finished.
+    /// </summary>
+    void Finish();
+
+    /// <summary>
+    /// Starts or restarts a Progress. 
+    /// </summary>
+    void Start();
+
+    void Start(string status);
 
     /// <summary>
@@ -74,7 +84,7 @@
     event EventHandler CanBeCanceledChanged;
     /// <summary>
-    /// A cancelation is requested with a certain timeout (in ms) in which it should occur gracefully. If the timeout is surpassed, it should be forcibly canceled.
+    /// A cancelation is requested.
     /// </summary>
-    event EventHandler<EventArgs<int>> CancelRequested;
+    event EventHandler CancelRequested;
   }
 }
Index: stable/HeuristicLab.MainForm/3.3/Progress.cs
===================================================================
--- stable/HeuristicLab.MainForm/3.3/Progress.cs	(revision 9503)
+++ stable/HeuristicLab.MainForm/3.3/Progress.cs	(revision 9933)
@@ -21,5 +21,4 @@
 
 using System;
-using HeuristicLab.Common;
 
 namespace HeuristicLab.MainForm {
@@ -50,5 +49,5 @@
     public ProgressState ProgressState {
       get { return progressState; }
-      set {
+      private set {
         if (progressState != value) {
           progressState = value;
@@ -70,5 +69,6 @@
 
     public Progress() {
-      progressState = ProgressState.Started;
+      progressState = ProgressState.Finished;
+      canBeCanceled = false;
     }
     public Progress(string status)
@@ -76,20 +76,28 @@
       this.status = status;
     }
-    public Progress(string status, double progressValue)
-      : this(status) {
-      this.progressValue = progressValue;
+    public Progress(string status, ProgressState state)
+      : this() {
+      this.status = status;
+      this.progressState = state;
     }
 
-    public void Cancel(int timeoutMs) {
+    public void Cancel() {
       if (canBeCanceled)
-        OnCancelRequested(timeoutMs);
+        OnCancelRequested();
     }
 
-    /// <summary>
-    /// Sets the ProgressValue to 1 and the ProgressState to Finished.
-    /// </summary>
     public void Finish() {
       if (ProgressValue != 1.0) ProgressValue = 1.0;
       ProgressState = ProgressState.Finished;
+    }
+
+    public void Start() {
+      ProgressValue = 0.0;
+      ProgressState = ProgressState.Started;
+    }
+
+    public void Start(string status) {
+      Start();
+      Status = status;
     }
 
@@ -98,7 +106,5 @@
     private void OnStatusChanged() {
       var handler = StatusChanged;
-      try {
-        if (handler != null) handler(this, EventArgs.Empty);
-      } catch { }
+      if (handler != null) handler(this, EventArgs.Empty);
     }
 
@@ -106,7 +112,5 @@
     private void OnProgressChanged() {
       var handler = ProgressValueChanged;
-      try {
-        if (handler != null) handler(this, EventArgs.Empty);
-      } catch { }
+      if (handler != null) handler(this, EventArgs.Empty);
     }
 
@@ -114,7 +118,5 @@
     private void OnProgressStateChanged() {
       var handler = ProgressStateChanged;
-      try {
-        if (handler != null) handler(this, EventArgs.Empty);
-      } catch { }
+      if (handler != null) handler(this, EventArgs.Empty);
     }
 
@@ -122,16 +124,12 @@
     private void OnCanBeCanceledChanged() {
       var handler = CanBeCanceledChanged;
-      try {
-        if (handler != null) handler(this, EventArgs.Empty);
-      } catch { }
+      if (handler != null) handler(this, EventArgs.Empty);
     }
 
-    public event EventHandler<EventArgs<int>> CancelRequested;
-    private void OnCancelRequested(int timeoutMs) {
+    public event EventHandler CancelRequested;
+    private void OnCancelRequested() {
       var handler = CancelRequested;
-      try {
-        if (handler == null) throw new NotSupportedException("Cancel request was ignored.");
-        else handler(this, new EventArgs<int>(timeoutMs));
-      } catch { }
+      if (handler != null) throw new NotSupportedException("Cancel request was ignored.");
+      else handler(this, EventArgs.Empty);
     }
     #endregion
