diff --git a/src/plugins/debugger/breakwindow.cpp b/src/plugins/debugger/breakwindow.cpp
index 69cb492bf96354f8a6e3e00507d95e549c7a489e..92fe3c7cb1595b3f93decd8386021f70b74dbb0f 100644
--- a/src/plugins/debugger/breakwindow.cpp
+++ b/src/plugins/debugger/breakwindow.cpp
@@ -101,7 +101,7 @@ void BreakWindow::contextMenuEvent(QContextMenuEvent *ev)
     menu.addAction(act1);
     menu.addAction(act2);
     menu.addAction(act4);
-    menu.addAction(theDebuggerAction(SettingsDialog)->action());
+    menu.addAction(theDebuggerAction(SettingsDialog));
 
     QAction *act = menu.exec(ev->globalPos());
 
diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp
index 3c81dbdab8c055e357b9862dbf963372e424b2ac..47a72dc0a9b32a07b51eff19ca7e5d6bdc5924dc 100644
--- a/src/plugins/debugger/debuggeractions.cpp
+++ b/src/plugins/debugger/debuggeractions.cpp
@@ -49,10 +49,9 @@ namespace Internal {
 //////////////////////////////////////////////////////////////////////////
 
 DebuggerAction::DebuggerAction(QObject *parent)
-  : QObject(parent)
+  : QAction(parent)
 {
-    m_action = new QAction(this);
-    connect(m_action, SIGNAL(triggered(bool)), this, SLOT(actionTriggered(bool)));
+    connect(this, SIGNAL(triggered(bool)), this, SLOT(actionTriggered(bool)));
 }
 
 QVariant DebuggerAction::value() const
@@ -64,8 +63,8 @@ void DebuggerAction::setValue(const QVariant &value, bool doemit)
 {
     if (value != m_value) {
         m_value = value;
-        if (m_action->isCheckable())
-            m_action->setChecked(m_value.toBool());
+        if (this->isCheckable())
+            this->setChecked(m_value.toBool());
         if (doemit) {
             emit valueChanged(m_value);
             emit boolValueChanged(m_value.toBool());
@@ -110,16 +109,6 @@ void DebuggerAction::setSettingsGroup(const QString &group)
     m_settingsGroup = group;
 }
 
-QString DebuggerAction::text() const
-{
-    return m_action->text();
-}
-
-void DebuggerAction::setText(const QString &value)
-{
-    m_action->setText(value);
-}
-
 QString DebuggerAction::textPattern() const
 {
     return m_textPattern;
@@ -144,10 +133,10 @@ QAction *DebuggerAction::updatedAction(const QString &text0)
             text = m_textPattern.arg(text0);
         }
     }
-    m_action->setEnabled(enabled);
-    m_action->setData(text0);
-    m_action->setText(text);
-    return m_action;
+    this->setEnabled(enabled);
+    this->setData(text0);
+    this->setText(text);
+    return this;
 }
 
 void DebuggerAction::readSettings(QSettings *settings)
@@ -170,11 +159,6 @@ void DebuggerAction::writeSettings(QSettings *settings)
     settings->endGroup();
 }
    
-QAction *DebuggerAction::action()
-{
-    return m_action;
-}
- 
 void DebuggerAction::connectWidget(QWidget *widget, ApplyMode applyMode)
 {
     using namespace Core::Utils;
@@ -218,7 +202,7 @@ void DebuggerAction::uncheckableButtonClicked()
     QAbstractButton *button = qobject_cast<QAbstractButton *>(sender());
     QTC_ASSERT(button, return);
     //qDebug() << "UNCHECKABLE BUTTON: " << sender();
-    m_action->trigger();
+    QAction::trigger();
 }
 
 void DebuggerAction::checkableButtonClicked(bool)
@@ -255,19 +239,16 @@ void DebuggerAction::pathChooserEditingFinished()
         setValue(pathChooser->path());
 }
 
-void DebuggerAction::actionTriggered(bool on)
+void DebuggerAction::actionTriggered(bool)
 {
-    Q_UNUSED(on);
-    if (QAction *action = qobject_cast<QAction *>(sender())) {
-        if (action->isCheckable())
-            setValue(action->isChecked());
-    }
+    if (this->isCheckable())
+        setValue(this->isChecked());
 }
 
-void DebuggerAction::trigger(const QVariant &data) const
+void DebuggerAction::trigger(const QVariant &data)
 {
-    m_action->setData(data);
-    m_action->trigger();
+    setData(data);
+    QAction::trigger();
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -345,7 +326,7 @@ DebuggerSettings *theDebuggerSettings()
     item = new DebuggerAction(instance);
     instance->insertItem(AlwaysAdjustColumnWidths, item);
     item->setText(QObject::tr("Always adjust column widths to contents"));
-    item->action()->setCheckable(true);
+    item->setCheckable(true);
 
     item = new DebuggerAction(instance);
     instance->insertItem(WatchExpression, item);
@@ -372,7 +353,7 @@ DebuggerSettings *theDebuggerSettings()
     item = new DebuggerAction(instance);
     instance->insertItem(DebugDumpers, item);
     item->setText(QObject::tr("Debug custom dumpers"));
-    item->action()->setCheckable(true);
+    item->setCheckable(true);
 
     item = new DebuggerAction(instance);
     instance->insertItem(RecheckDumpers, item);
@@ -389,22 +370,22 @@ DebuggerSettings *theDebuggerSettings()
     item = new DebuggerAction(instance);
     instance->insertItem(AutoQuit, item);
     item->setText(QObject::tr("Automatically quit debugger"));
-    item->action()->setCheckable(true);
+    item->setCheckable(true);
 
     item = new DebuggerAction(instance);
     instance->insertItem(SkipKnownFrames, item);
     item->setText(QObject::tr("Skip known frames"));
-    item->action()->setCheckable(true);
+    item->setCheckable(true);
 
     item = new DebuggerAction(instance);
     instance->insertItem(UseToolTips, item);
     item->setText(QObject::tr("Use tooltips when debugging"));
-    item->action()->setCheckable(true);
+    item->setCheckable(true);
 
     item = new DebuggerAction(instance);
     instance->insertItem(ListSourceFiles, item);
     item->setText(QObject::tr("List source files"));
-    item->action()->setCheckable(true);
+    item->setCheckable(true);
 
 
     //
@@ -438,7 +419,7 @@ DebuggerSettings *theDebuggerSettings()
     instance->insertItem(UseDumpers, item);
     item->setSettingsKey("DebugMode", "UseCustomDumpers");
     item->setText(QObject::tr("Use custom dumpers"));
-    item->action()->setCheckable(true);
+    item->setCheckable(true);
 
 
     item = new DebuggerAction(instance);
diff --git a/src/plugins/debugger/debuggeractions.h b/src/plugins/debugger/debuggeractions.h
index 0075b1508ede28a285c6b3a237e63412f3e84ca5..2a64e45c2ae5222ba025e3c5eae28b625c73165a 100644
--- a/src/plugins/debugger/debuggeractions.h
+++ b/src/plugins/debugger/debuggeractions.h
@@ -35,8 +35,9 @@
 #include <QtCore/QVariant>
 #include <QtCore/QList>
 
+#include <QtGui/QAction>
+
 QT_BEGIN_NAMESPACE
-class QAction;
 class QSettings;
 QT_END_NAMESPACE
 
@@ -46,7 +47,7 @@ namespace Internal {
 
 enum ApplyMode { ImmediateApply, DeferedApply };
 
-class DebuggerAction : public QObject
+class DebuggerAction : public QAction
 {
     Q_OBJECT
 
@@ -59,9 +60,8 @@ public:
     virtual QVariant defaultValue() const;
     Q_SLOT virtual void setDefaultValue(const QVariant &value);
 
-    virtual QAction *action();
     virtual QAction *updatedAction(const QString &newText);
-    Q_SLOT virtual void trigger(const QVariant &data) const;
+    Q_SLOT virtual void trigger(const QVariant &data);
 
     // used for persistency
     virtual QString settingsKey() const;
@@ -77,9 +77,6 @@ public:
     virtual void connectWidget(QWidget *widget, ApplyMode applyMode = DeferedApply);
     Q_SLOT virtual void apply(QSettings *settings);
 
-    virtual QString text() const;
-    Q_SLOT virtual void setText(const QString &value);
-
     virtual QString textPattern() const;
     Q_SLOT virtual void setTextPattern(const QString &value);
 
@@ -102,7 +99,6 @@ private:
     QString m_settingsGroup;
     QString m_textPattern;
     QString m_textData;
-    QAction *m_action;
     QHash<QObject *, ApplyMode> m_applyModes;
 };
 
diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index 3228308727a1245d35df1985c295f67ad0bca033..5b7bb4be8ed236a70bcd5f1b980b9e37d6fb30eb 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -267,7 +267,7 @@ void DebuggerManager::init()
         this, SIGNAL(sessionValueRequested(QString,QVariant*)));
     connect(m_watchHandler, SIGNAL(setSessionValueRequested(QString,QVariant)),
         this, SIGNAL(setSessionValueRequested(QString,QVariant)));
-    connect(theDebuggerAction(AssignValue)->action(), SIGNAL(triggered()),
+    connect(theDebuggerAction(AssignValue), SIGNAL(triggered()),
         this, SLOT(assignValueInDebugger()));
 
     // Tooltip
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 5d3ecdcd914362ad959ec1e801402dbb3d8363d9..13de5d0c8e762f6dbd5c121c85ce85fc45b288f5 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -715,7 +715,7 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess
     connect(m_manager, SIGNAL(debugModeRequested()),
         this, SLOT(activateDebugMode()));
 
-    connect(theDebuggerAction(SettingsDialog)->action(), SIGNAL(triggered()),
+    connect(theDebuggerAction(SettingsDialog), SIGNAL(triggered()),
         this, SLOT(showSettingsDialog()));
 
     return true;
diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp
index 5de54f53613bbdb2f9d8b54e3079f07fc6f7a89f..8b5ed5ea018d2c05d3a4bff9f7d9fd602e560667 100644
--- a/src/plugins/debugger/gdbengine.cpp
+++ b/src/plugins/debugger/gdbengine.cpp
@@ -289,7 +289,7 @@ void GdbEngine::initializeConnections()
         this, SLOT(setUseDumpers(bool)));
     connect(theDebuggerAction(DebugDumpers), SIGNAL(boolValueChanged(bool)),
         this, SLOT(setDebugDumpers(bool)));
-    connect(theDebuggerAction(RecheckDumpers)->action(), SIGNAL(triggered()),
+    connect(theDebuggerAction(RecheckDumpers), SIGNAL(triggered()),
         this, SLOT(recheckCustomDumperAvailability()));
 }
 
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index 84d8a33f189be951cd8729582a203a91d5749e2c..9dcec117d3b488596011ecd21a5cd7c70238e9fe 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -368,10 +368,10 @@ WatchHandler::WatchHandler()
     m_incompleteSet.clear();
     m_displaySet = m_completeSet;
 
-    connect(theDebuggerAction(WatchExpression)->action(),
+    connect(theDebuggerAction(WatchExpression),
         SIGNAL(triggered()), this, SLOT(watchExpression()));
 
-    connect(theDebuggerAction(RemoveWatchExpression)->action(),
+    connect(theDebuggerAction(RemoveWatchExpression),
         SIGNAL(triggered()), this, SLOT(removeWatchExpression()));
 }
 
diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp
index b752e2d5ff71d7430221b94acbcac2e68d6aba57..ceef4bc1f8ab271e47961200203de0c34786e748 100644
--- a/src/plugins/debugger/watchwindow.cpp
+++ b/src/plugins/debugger/watchwindow.cpp
@@ -185,10 +185,10 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev)
     //menu.addAction(act3);
 
     menu.addSeparator();
-    menu.addAction(theDebuggerAction(RecheckDumpers)->action());
-    menu.addAction(theDebuggerAction(UseDumpers)->action());
+    menu.addAction(theDebuggerAction(RecheckDumpers));
+    menu.addAction(theDebuggerAction(UseDumpers));
     menu.addSeparator();
-    menu.addAction(theDebuggerAction(SettingsDialog)->action());
+    menu.addAction(theDebuggerAction(SettingsDialog));
 
     QAction *act = menu.exec(ev->globalPos());