diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h
index 839dc62d7d04f5fc265b07de2ac4da3925ed6843..81ea35ee27127a061ba76240401324b9a1429a69 100644
--- a/src/plugins/debugger/debuggerconstants.h
+++ b/src/plugins/debugger/debuggerconstants.h
@@ -213,6 +213,7 @@ enum ModelRoles
     LocalsPointerValueRole, // Pointer value (address) as quint64
     LocalsIsWatchpointAtAddressRole,
     LocalsIsWatchpointAtPointerValueRole,
+    RequestWatchPointRole,
     RequestToggleWatchRole,
     RequestClearCppCodeModelSnapshotRole,
     RequestAssignValueRole,
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 9d34e168b0e3828dabe9e6e791d9bb8c670d243f..aea99d51b66af45401207079e189e1c183d791bf 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -45,6 +45,9 @@
 #include "threadshandler.h"
 #include "watchhandler.h"
 
+#include <coreplugin/icore.h>
+#include <coreplugin/editormanager/editormanager.h>
+
 #include <projectexplorer/debugginghelper.h>
 #include <projectexplorer/environment.h>
 #include <projectexplorer/project.h>
@@ -55,11 +58,11 @@
 
 #include <qt4projectmanager/qt4projectmanagerconstants.h>
 
+#include <texteditor/itexteditor.h>
+
 #include <utils/savedaction.h>
 #include <utils/qtcassert.h>
 
-#include <coreplugin/icore.h>
-
 #include <QtCore/QDebug>
 #include <QtCore/QDir>
 #include <QtCore/QFileInfo>
@@ -69,14 +72,19 @@
 #include <QtGui/QStandardItemModel>
 #include <QtGui/QAction>
 #include <QtGui/QMessageBox>
+#include <QtGui/QPlainTextEdit>
 #include <QtGui/QPushButton>
+#include <QtGui/QTextBlock>
+#include <QtGui/QTextCursor>
 #include <QtGui/QTextDocument>
 #include <QtGui/QTreeWidget>
 
 
-using namespace ProjectExplorer;
+using namespace Core;
 using namespace Debugger;
 using namespace Debugger::Internal;
+using namespace ProjectExplorer;
+using namespace TextEditor;
 
 
 ///////////////////////////////////////////////////////////////////////
@@ -239,12 +247,10 @@ public:
 DebuggerEngine::DebuggerEngine(const DebuggerStartParameters &startParameters)
   : d(new DebuggerEnginePrivate(this, startParameters))
 {
-    //loadSessionData();
 }
 
 DebuggerEngine::~DebuggerEngine()
 {
-    //saveSessionData();
 }
 
 void DebuggerEngine::showStatusMessage(const QString &msg, int timeout) const
@@ -298,13 +304,11 @@ void DebuggerEngine::handleCommand(int role, const QVariant &value)
             break;
 
         case RequestExecRunToLineRole:
-            //executeRunToLine();
-            QTC_ASSERT(false, /* FIXME ABC */);
+            executeRunToLine();
             break;
 
         case RequestExecRunToFunctionRole:
-            //executeRunToFunction();
-            QTC_ASSERT(false, /* FIXME ABC */);
+            executeRunToFunction();
             break;
 
         case RequestExecReturnFromFunctionRole:
@@ -312,8 +316,7 @@ void DebuggerEngine::handleCommand(int role, const QVariant &value)
             break;
 
         case RequestExecJumpToLineRole:
-            //executeJumpToLine();
-            QTC_ASSERT(false, /* FIXME ABC */);
+            executeJumpToLine();
             break;
 
         case RequestExecWatchRole:
@@ -344,6 +347,12 @@ void DebuggerEngine::handleCommand(int role, const QVariant &value)
         case RequestExecuteCommandRole:
             executeDebuggerCommand(value.toString());
             break;
+
+        case RequestWatchPointRole:
+            //if (QAction *action = qobject_cast<QAction *>(sender()))
+            //    watchPoint(action->data().toPoint());
+            QTC_ASSERT(false, /* FIXME ABC */);
+            break;
     }
 }
 
@@ -523,7 +532,6 @@ void DebuggerEngine::startDebugger(DebuggerRunControl *runControl)
     theDebuggerAction(OperateByInstruction)
         ->setEnabled(engineCapabilities & DisassemblerCapability);
 
-    //loadSessionData();
     startDebugger();
 }
 
@@ -611,29 +619,30 @@ void DebuggerEngine::executeReturnX()
     executeReturn();
 }
 
-void DebuggerEngine::executeWatchPointX()
+static TextEditor::ITextEditor *currentTextEditor()
 {
-    if (QAction *action = qobject_cast<QAction *>(sender()))
-        watchPoint(action->data().toPoint());
+    EditorManager *editorManager = EditorManager::instance();
+    if (!editorManager)
+        return 0;
+    Core::IEditor *editor = editorManager->currentEditor();
+    return qobject_cast<ITextEditor*>(editor);
 }
 
-/*
-void DebuggerManager::executeRunToLine()
+void DebuggerEngine::executeRunToLine()
 {
-    ITextEditor *textEditor = d->m_plugin->currentTextEditor();
+    ITextEditor *textEditor = currentTextEditor();
     QTC_ASSERT(textEditor, return);
     QString fileName = textEditor->file()->fileName();
+    if (fileName.isEmpty())
+        return;
     int lineNumber = textEditor->currentLine();
-    if (d->m_engine && !fileName.isEmpty()) {
-        STATE_DEBUG(fileName << lineNumber);
-        resetLocation();
-        d->m_engine->executeRunToLine(fileName, lineNumber);
-    }
+    resetLocation();
+    executeRunToLine(fileName, lineNumber);
 }
 
-void DebuggerManager::executeRunToFunction()
+void DebuggerEngine::executeRunToFunction()
 {
-    ITextEditor *textEditor = d->m_plugin->currentTextEditor();
+    ITextEditor *textEditor = currentTextEditor();
     QTC_ASSERT(textEditor, return);
     QString fileName = textEditor->file()->fileName();
     QPlainTextEdit *ed = qobject_cast<QPlainTextEdit*>(textEditor->widget());
@@ -657,26 +666,23 @@ void DebuggerManager::executeRunToFunction()
             }
         }
     }
-    STATE_DEBUG(functionName);
 
-    if (d->m_engine && !functionName.isEmpty()) {
-        resetLocation();
-        d->m_engine->executeRunToFunction(functionName);
-    }
+    if (functionName.isEmpty())
+        return;
+    resetLocation();
+    executeRunToFunction(functionName);
 }
 
-void DebuggerManager::executeJumpToLine()
+void DebuggerEngine::executeJumpToLine()
 {
-    ITextEditor *textEditor = d->m_plugin->currentTextEditor();
+    ITextEditor *textEditor = currentTextEditor();
     QTC_ASSERT(textEditor, return);
     QString fileName = textEditor->file()->fileName();
     int lineNumber = textEditor->currentLine();
-    if (d->m_engine && !fileName.isEmpty()) {
-        STATE_DEBUG(fileName << lineNumber);
-        d->m_engine->executeJumpToLine(fileName, lineNumber);
-    }
+    if (fileName.isEmpty())
+        return;
+    executeJumpToLine(fileName, lineNumber);
 }
-*/
 
 // Called from RunControl.
 void DebuggerEngine::handleFinished()
@@ -907,7 +913,6 @@ void DebuggerEngine::startSuccessful()
 
 void DebuggerEngine::notifyInferiorPid(qint64 pid)
 {
-    //STATE_DEBUG(d->m_inferiorPid << pid);
     if (d->m_inferiorPid == pid)
         return;
     d->m_inferiorPid = pid;
diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h
index c10afff8be84bdffccde7b7b8001f3eedd9b8e95..6a764b6888752bcdeca0949033e9794cf0865595 100644
--- a/src/plugins/debugger/debuggerengine.h
+++ b/src/plugins/debugger/debuggerengine.h
@@ -229,7 +229,6 @@ public:
     void executeStepOutX();
     void executeStepNextX();
     void executeReturnX();
-    void executeWatchPointX();
 
     DebuggerState state() const;
 
@@ -259,6 +258,11 @@ public slots:
 protected:
     void setState(DebuggerState state, bool forced = false);
 
+private:
+    void executeRunToLine();
+    void executeRunToFunction();
+    void executeJumpToLine();
+
     DebuggerEnginePrivate *d;
 };
 
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 903869c6122e4eea9072e7327d61a60284d05d3a..182ada8c6ab5f655d187af61019db80b54f947dc 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -293,6 +293,8 @@ static QToolButton *toolButton(QAction *action)
 namespace Debugger {
 namespace Internal {
 
+static const char *Role = "ROLE";
+
 // FIXME: Outdated?
 // The createCdbEngine function takes a list of options pages it can add to.
 // This allows for having a "enabled" toggle on the page independently
@@ -851,7 +853,6 @@ public slots:
     void sessionLoaded();
     void aboutToUnloadSession();
     void aboutToSaveSession();
-    void watchPoint() { QTC_ASSERT(false, /**/); } // FIXME
 
     void executeDebuggerCommand();
 
@@ -1044,59 +1045,59 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments, QString *er
     QIcon continueIcon = QIcon(":/debugger/images/debugger_continue_small.png");
     continueIcon.addFile(":/debugger/images/debugger_continue.png");
     m_actions.continueAction->setIcon(continueIcon);
-    m_actions.continueAction->setData(RequestExecContinueRole);
+    m_actions.continueAction->setProperty(Role, RequestExecContinueRole);
 
     m_actions.stopAction = new QAction(tr("Interrupt"), this);
     m_actions.stopAction->setIcon(m_interruptIcon);
-    m_actions.stopAction->setData(RequestExecInterruptRole);
+    m_actions.stopAction->setProperty(Role, RequestExecInterruptRole);
 
     m_actions.resetAction = new QAction(tr("Abort Debugging"), this);
-    m_actions.resetAction->setData(RequestExecResetRole);
+    m_actions.resetAction->setProperty(Role, RequestExecResetRole);
     m_actions.resetAction->setToolTip(tr("Aborts debugging and "
         "resets the debugger to the initial state."));
 
     m_actions.nextAction = new QAction(tr("Step Over"), this);
-    m_actions.nextAction->setData(RequestExecNextRole);
+    m_actions.nextAction->setProperty(Role, RequestExecNextRole);
     m_actions.nextAction->setIcon(
         QIcon(":/debugger/images/debugger_stepover_small.png"));
 
     m_actions.stepAction = new QAction(tr("Step Into"), this);
-    m_actions.stepAction->setData(RequestExecStepRole);
+    m_actions.stepAction->setProperty(Role, RequestExecStepRole);
     m_actions.stepAction->setIcon(
         QIcon(":/debugger/images/debugger_stepinto_small.png"));
 
     m_actions.stepOutAction = new QAction(tr("Step Out"), this);
-    m_actions.stepOutAction->setData(RequestExecStepOutRole);
+    m_actions.stepOutAction->setProperty(Role, RequestExecStepOutRole);
     m_actions.stepOutAction->setIcon(
         QIcon(":/debugger/images/debugger_stepout_small.png"));
 
     m_actions.runToLineAction1 = new QAction(tr("Run to Line"), this);
-    m_actions.runToLineAction1->setData(RequestExecRunToLineRole);
+    m_actions.runToLineAction1->setProperty(Role, RequestExecRunToLineRole);
     m_actions.runToLineAction2 = new QAction(tr("Run to Line"), this);
-    m_actions.runToLineAction2->setData(RequestExecRunToLineRole);
+    m_actions.runToLineAction2->setProperty(Role, RequestExecRunToLineRole);
 
     m_actions.runToFunctionAction =
         new QAction(tr("Run to Outermost Function"), this);
-    m_actions.runToFunctionAction->setData(RequestExecRunToFunctionRole);
+    m_actions.runToFunctionAction->setProperty(Role, RequestExecRunToFunctionRole);
 
     m_actions.returnFromFunctionAction =
         new QAction(tr("Immediately Return From Inner Function"), this);
-    m_actions.returnFromFunctionAction->setData(RequestExecReturnFromFunctionRole);
+    m_actions.returnFromFunctionAction->setProperty(Role, RequestExecReturnFromFunctionRole);
 
     m_actions.jumpToLineAction1 = new QAction(tr("Jump to Line"), this);
-    m_actions.jumpToLineAction1->setData(RequestExecJumpToLineRole);
+    m_actions.jumpToLineAction1->setProperty(Role, RequestExecJumpToLineRole);
     m_actions.jumpToLineAction2 = new QAction(tr("Jump to Line"), this);
-    m_actions.jumpToLineAction1->setData(RequestExecJumpToLineRole);
+    m_actions.jumpToLineAction1->setProperty(Role, RequestExecJumpToLineRole);
 
     m_actions.breakAction = new QAction(tr("Toggle Breakpoint"), this);
 
     m_actions.watchAction1 = new QAction(tr("Add to Watch Window"), this);
-    m_actions.watchAction1->setData(RequestExecWatchRole);
+    m_actions.watchAction1->setProperty(Role, RequestExecWatchRole);
     m_actions.watchAction2 = new QAction(tr("Add to Watch Window"), this);
-    m_actions.watchAction2->setData(RequestExecWatchRole);
+    m_actions.watchAction2->setProperty(Role, RequestExecWatchRole);
 
     m_actions.snapshotAction = new QAction(tr("Snapshot"), this);
-    m_actions.snapshotAction->setData(RequestExecSnapshotRole);
+    m_actions.snapshotAction->setProperty(Role, RequestExecSnapshotRole);
     m_actions.snapshotAction->setIcon(
         QIcon(":/debugger/images/debugger_snapshot_small.png"));
 
@@ -1110,14 +1111,15 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments, QString *er
 
     m_actions.frameDownAction =
         new QAction(tr("Move to Called Frame"), this);
-    m_actions.frameDownAction->setData(RequestExecFrameDownRole);
+    m_actions.frameDownAction->setProperty(Role, RequestExecFrameDownRole);
     m_actions.frameUpAction =
         new QAction(tr("Move to Calling Frame"), this);
-    m_actions.frameUpAction->setData(RequestExecFrameUpRole);
+    m_actions.frameUpAction->setProperty(Role, RequestExecFrameUpRole);
 
     m_actions.reverseDirectionAction->setCheckable(false);
     theDebuggerAction(OperateByInstruction)->
-        setData(RequestOperatedByInstructionTriggeredRole);
+        setProperty(Role, RequestOperatedByInstructionTriggeredRole);
+    theDebuggerAction(WatchPoint)->setProperty(Role, RequestWatchPointRole);
 
     connect(m_actions.continueAction, SIGNAL(triggered()), SLOT(onAction()));
     connect(m_actions.nextAction, SIGNAL(triggered()), SLOT(onAction()));
@@ -1138,7 +1140,7 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments, QString *er
     connect(m_actions.resetAction, SIGNAL(triggered()), SLOT(onAction()));
     connect(&m_statusTimer, SIGNAL(timeout()), SLOT(clearStatusMessage()));
 
-    connect(theDebuggerAction(WatchPoint), SIGNAL(triggered()), SLOT(watchPoint()));
+    connect(theDebuggerAction(WatchPoint), SIGNAL(triggered()), SLOT(onAction()));
     connect(theDebuggerAction(ExecuteCommand), SIGNAL(triggered()),
         SLOT(executeDebuggerCommand()));
 
@@ -1251,7 +1253,7 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments, QString *er
 
     m_detachAction = new QAction(this);
     m_detachAction->setText(tr("Detach Debugger"));
-    m_detachAction->setData(RequestExecDetachRole);
+    m_detachAction->setProperty(Role, RequestExecDetachRole);
     connect(m_detachAction, SIGNAL(triggered()), SLOT(onAction()));
 
     Core::Command *cmd = 0;
@@ -1544,7 +1546,7 @@ void DebuggerPluginPrivate::onAction()
 {
     QAction *act = qobject_cast<QAction *>(sender());
     QTC_ASSERT(act, return);
-    const int role = act->data().toInt();
+    const int role = act->property(Role).toInt();
     notifyCurrentEngine(role);
 }