Index: /branches/HeuristicLab.DebugEngine/DebugEngine.cs
===================================================================
--- /branches/HeuristicLab.DebugEngine/DebugEngine.cs	(revision 4946)
+++ /branches/HeuristicLab.DebugEngine/DebugEngine.cs	(revision 4947)
@@ -48,5 +48,5 @@
       Log = cloner.Clone(original.Log);
       ExecutionStack = cloner.Clone(original.ExecutionStack);
-      OperatorTrace = cloner.Clone(OperatorTrace);
+      OperatorTrace = cloner.Clone(original.OperatorTrace);
       operatorParents = original.operatorParents.ToDictionary(kvp => cloner.Clone(kvp.Key), kvp => cloner.Clone(kvp.Value));
       pausePending = original.pausePending;
@@ -94,7 +94,4 @@
 
     [Storable]
-    private bool ignoreNextBreakpoint;
-
-    [Storable]
     private IOperation currentOperation;
     public virtual IOperation CurrentOperation {
@@ -122,4 +119,12 @@
     private Dictionary<IAtomicOperation, IAtomicOperation> operatorParents;
 
+    public virtual bool CanContinue {
+      get { return CurrentOperation != null || ExecutionStack.Count > 0; }
+    }
+
+    public virtual bool IsAtBreakpoint {
+      get { return CurrentAtomicOperation != null && CurrentAtomicOperation.Operator != null && CurrentAtomicOperation.Operator.Breakpoint; }
+    }
+
     #endregion
 
@@ -140,5 +145,4 @@
       base.Prepare();
       ExecutionStack.Clear();
-      ignoreNextBreakpoint = false;
       CurrentOperation = null;
       OperatorTrace.Clear();
@@ -151,5 +155,4 @@
       if (initialOperation != null)
         ExecutionStack.Add(initialOperation);
-      ignoreNextBreakpoint = false;
       CurrentOperation = null;
       OperatorTrace.Clear();
@@ -165,5 +168,4 @@
       OnStarted();
       lastUpdateTime = DateTime.Now;
-      ignoreNextBreakpoint = true;
       timer.Start();
       ProcessNextOperation();
@@ -172,5 +174,4 @@
       timer.Stop();
       ExecutionTime += DateTime.Now - lastUpdateTime;
-      ignoreNextBreakpoint = false;
       OnPaused();
     }
@@ -202,5 +203,4 @@
       stopPending = true;
       if (currentOperator != null) currentOperator.Abort();
-      ignoreNextBreakpoint = false;
       if (ExecutionState == ExecutionState.Paused) OnStopped();
     }
@@ -222,12 +222,17 @@
       lastUpdateTime = DateTime.Now;
       timer.Start();
-      while (!pausePending && !stopPending && CanContinue) {
+      if (!pausePending && !stopPending && CanContinue)
         ProcessNextOperation();
-      }
+      while (!pausePending && !stopPending && CanContinue && !IsAtBreakpoint)
+        ProcessNextOperation();
       timer.Stop();
       ExecutionTime += DateTime.Now - lastUpdateTime;
 
-      if (pausePending) OnPaused();
-      else OnStopped();
+      if (IsAtBreakpoint)
+        Log.LogMessage(string.Format("Breaking before: {0}", CurrentAtomicOperation.Operator.Name));
+      if (pausePending || IsAtBreakpoint)
+        OnPaused();
+      else
+        OnStopped();
     }
 
@@ -241,7 +246,5 @@
     #region Methods
 
-    public virtual bool CanContinue {
-      get { return CurrentOperation != null || ExecutionStack.Count > 0; }
-    }
+
 
     /// <summary>
@@ -274,6 +277,5 @@
         }
         GenerateOperationTrace();
-      }
-      catch (Exception x) {
+      } catch (Exception x) {
         OnExceptionOccurred(x);
       }
@@ -298,14 +300,4 @@
     protected virtual void PerformAtomicOperation(IAtomicOperation operation) {
       if (operation != null) {
-        if (operation.Operator.Breakpoint) {
-          if (ignoreNextBreakpoint) {
-            ignoreNextBreakpoint = false;
-          } else {
-            ignoreNextBreakpoint = true;
-            Log.LogMessage(string.Format("Breaking before: {0}", Name(operation)));
-            Pause();
-            return;
-          }
-        }
         try {
           currentOperator = operation.Operator;
@@ -317,6 +309,5 @@
           currentOperator = null;
           CurrentOperation = null;
-        }
-        catch (Exception ex) {
+        } catch (Exception ex) {
           OnExceptionOccurred(new OperatorExecutionException(operation.Operator, ex));
           Pause();
Index: /branches/HeuristicLab.DebugEngine/DebugEngineView.cs
===================================================================
--- /branches/HeuristicLab.DebugEngine/DebugEngineView.cs	(revision 4946)
+++ /branches/HeuristicLab.DebugEngine/DebugEngineView.cs	(revision 4947)
@@ -95,6 +95,6 @@
         refreshButton.Enabled = false;
       } else {
-        stepButton.Enabled = Content.CanContinue;
-        refreshButton.Enabled = Content.CurrentAtomicOperation != null;
+        stepButton.Enabled = Content.CanContinue && Content.ExecutionState != ExecutionState.Started;
+        refreshButton.Enabled = Content.CurrentAtomicOperation != null && Content.ExecutionState != ExecutionState.Started;
       }
     }
