diff --git a/src/libs/utils/savedaction.cpp b/src/libs/utils/savedaction.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0f561ba328925c7740444a2bce89e85bd82a934c
--- /dev/null
+++ b/src/libs/utils/savedaction.cpp
@@ -0,0 +1,296 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact:  Qt Software Information (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+**
+**************************************************************************/
+
+#include <utils/savedaction.h>
+
+#include <utils/qtcassert.h>
+#include <utils/pathchooser.h>
+
+#include <QtCore/QDebug>
+#include <QtCore/QSettings>
+
+#include <QtGui/QAction>
+#include <QtGui/QActionGroup>
+#include <QtGui/QAbstractButton>
+#include <QtGui/QRadioButton>
+#include <QtGui/QCheckBox>
+#include <QtGui/QLineEdit>
+
+
+using namespace Core::Utils;
+
+
+//////////////////////////////////////////////////////////////////////////
+//
+// SavedAction
+//
+//////////////////////////////////////////////////////////////////////////
+
+SavedAction::SavedAction(QObject *parent)
+  : QAction(parent)
+{
+    m_widget = 0;
+    connect(this, SIGNAL(triggered(bool)), this, SLOT(actionTriggered(bool)));
+}
+
+QVariant SavedAction::value() const
+{
+    return m_value;
+}
+
+void SavedAction::setValue(const QVariant &value, bool doemit)
+{
+    if (value == m_value)
+        return;
+    m_value = value;
+    if (this->isCheckable())
+        this->setChecked(m_value.toBool());
+    if (doemit)
+        emit valueChanged(m_value);
+}
+
+QVariant SavedAction::defaultValue() const
+{
+    return m_defaultValue;
+}
+
+void SavedAction::setDefaultValue(const QVariant &value)
+{
+    m_defaultValue = value;
+}
+
+QString SavedAction::settingsKey() const
+{
+    return m_settingsKey;
+}
+
+void SavedAction::setSettingsKey(const QString &key)
+{
+    m_settingsKey = key;
+}
+
+void SavedAction::setSettingsKey(const QString &group, const QString &key)
+{
+    m_settingsKey = key;
+    m_settingsGroup = group;
+}
+
+QString SavedAction::settingsGroup() const
+{
+    return m_settingsGroup;
+}
+
+void SavedAction::setSettingsGroup(const QString &group)
+{
+    m_settingsGroup = group;
+}
+
+QString SavedAction::textPattern() const
+{
+    return m_textPattern;
+}
+
+void SavedAction::setTextPattern(const QString &value)
+{
+    m_textPattern = value;
+}
+
+QString SavedAction::toString() const
+{
+    return "value: " + m_value.toString()
+        + "  defaultvalue: " + m_defaultValue.toString()
+        + "  settingskey: " + m_settingsGroup + '/' + m_settingsKey;
+}
+
+QAction *SavedAction::updatedAction(const QString &text0)
+{
+    QString text = text0;
+    bool enabled = true;
+    if (!m_textPattern.isEmpty()) {
+        if (text.isEmpty()) {
+            text = m_textPattern;
+            text.remove("\"%1\"");
+            text.remove("%1");
+            enabled = false;
+        } else {
+            text = m_textPattern.arg(text0);
+        }
+    }
+    this->setEnabled(enabled);
+    this->setData(text0);
+    this->setText(text);
+    return this;
+}
+
+void SavedAction::readSettings(QSettings *settings)
+{
+    if (m_settingsGroup.isEmpty() || m_settingsKey.isEmpty())
+        return;
+    settings->beginGroup(m_settingsGroup);
+    setValue(settings->value(m_settingsKey, m_defaultValue), false);
+    //qDebug() << "READING: " << m_settingsKey << " -> " << m_value;
+    settings->endGroup();
+}
+
+void SavedAction::writeSettings(QSettings *settings)
+{
+    if (m_settingsGroup.isEmpty() || m_settingsKey.isEmpty())
+        return;
+    settings->beginGroup(m_settingsGroup);
+    settings->setValue(m_settingsKey, m_value);
+    //qDebug() << "WRITING: " << m_settingsKey << " -> " << toString();
+    settings->endGroup();
+}
+   
+void SavedAction::connectWidget(QWidget *widget, ApplyMode applyMode)
+{
+    QTC_ASSERT(!m_widget,
+        qDebug() << "ALREADY CONNECTED: " << widget << m_widget << toString(); return);
+    m_widget = widget;
+    m_applyMode = applyMode;
+    
+    if (QAbstractButton *button = qobject_cast<QAbstractButton *>(widget)) {
+        if (button->isCheckable()) {
+            button->setChecked(m_value.toBool());
+            connect(button, SIGNAL(clicked(bool)),
+                this, SLOT(checkableButtonClicked(bool)));
+        } else {
+            connect(button, SIGNAL(clicked()),
+                this, SLOT(uncheckableButtonClicked()));
+        }
+    } else if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget)) {
+        lineEdit->setText(m_value.toString());
+        //qDebug() << "SETTING TEXT" << lineEdit->text(); 
+        connect(lineEdit, SIGNAL(editingFinished()),
+            this, SLOT(lineEditEditingFinished()));
+    } else if (PathChooser *pathChooser = qobject_cast<PathChooser *>(widget)) {
+        pathChooser->setPath(m_value.toString());
+        connect(pathChooser, SIGNAL(editingFinished()),
+            this, SLOT(pathChooserEditingFinished()));
+        connect(pathChooser, SIGNAL(browsingFinished()),
+            this, SLOT(pathChooserEditingFinished()));
+    } else {
+        qDebug() << "Cannot connect widget " << widget << toString();
+    }
+}
+
+void SavedAction::disconnectWidget()
+{
+    QTC_ASSERT(m_widget,
+        qDebug() << "Widget already disconnected: " << m_widget << toString(); return);
+    m_widget = 0;
+}
+void SavedAction::apply(QSettings *s)
+{
+    if (QAbstractButton *button = qobject_cast<QAbstractButton *>(m_widget))
+        setValue(button->isChecked());
+    else if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(m_widget))
+        setValue(lineEdit->text());
+    else if (PathChooser *pathChooser = qobject_cast<PathChooser *>(m_widget))
+        setValue(pathChooser->path());
+    if (s)
+       writeSettings(s);
+}
+
+void SavedAction::uncheckableButtonClicked()
+{
+    QAbstractButton *button = qobject_cast<QAbstractButton *>(sender());
+    QTC_ASSERT(button, return);
+    //qDebug() << "UNCHECKABLE BUTTON: " << sender();
+    QAction::trigger();
+}
+
+void SavedAction::checkableButtonClicked(bool)
+{
+    QAbstractButton *button = qobject_cast<QAbstractButton *>(sender());
+    QTC_ASSERT(button, return);
+    //qDebug() << "CHECKABLE BUTTON: " << sender();
+    if (m_applyMode == ImmediateApply)
+        setValue(button->isChecked());
+}
+
+void SavedAction::lineEditEditingFinished()
+{
+    QLineEdit *lineEdit = qobject_cast<QLineEdit *>(sender());
+    QTC_ASSERT(lineEdit, return);
+    if (m_applyMode == ImmediateApply)
+        setValue(lineEdit->text());
+}
+
+void SavedAction::pathChooserEditingFinished()
+{
+    PathChooser *pathChooser = qobject_cast<PathChooser *>(sender());
+    QTC_ASSERT(pathChooser, return);
+    if (m_applyMode == ImmediateApply)
+        setValue(pathChooser->path());
+}
+
+void SavedAction::actionTriggered(bool)
+{
+    if (isCheckable())
+        setValue(isChecked());
+    if (actionGroup() && actionGroup()->isExclusive()) {
+        // FIXME: should be taken care of more directly
+        foreach (QAction *act, actionGroup()->actions())
+            if (SavedAction *dact = qobject_cast<SavedAction *>(act))
+                dact->setValue(bool(act == this));
+    }
+}
+
+void SavedAction::trigger(const QVariant &data)
+{
+    setData(data);
+    QAction::trigger();
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+//
+// SavedActionSet
+//
+//////////////////////////////////////////////////////////////////////////
+
+void SavedActionSet::insert(SavedAction *action, QWidget *widget)
+{
+    m_list.append(action);
+    action->connectWidget(widget);
+}
+
+void SavedActionSet::apply(QSettings *settings)
+{
+    foreach (SavedAction *action, m_list)
+        action->apply(settings);
+}
+
+void SavedActionSet::finish()
+{
+    foreach (SavedAction *action, m_list)
+        action->disconnectWidget();
+}
+
diff --git a/src/libs/utils/savedaction.h b/src/libs/utils/savedaction.h
new file mode 100644
index 0000000000000000000000000000000000000000..ab92a4ad80e625d94c616d72e758e81ef0dc1b30
--- /dev/null
+++ b/src/libs/utils/savedaction.h
@@ -0,0 +1,125 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact:  Qt Software Information (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+**
+**************************************************************************/
+
+#ifndef SAVED_ACTION_H
+#define SAVED_ACTION_H
+
+#include "utils_global.h"
+
+#include <QtCore/QString>
+#include <QtCore/QVariant>
+#include <QtCore/QList>
+
+#include <QtGui/QAction>
+
+QT_BEGIN_NAMESPACE
+class QSettings;
+QT_END_NAMESPACE
+
+
+namespace Core {
+namespace Utils {
+
+enum ApplyMode { ImmediateApply, DeferedApply };
+
+class QWORKBENCH_UTILS_EXPORT SavedAction : public QAction
+{
+    Q_OBJECT
+
+public:
+    SavedAction(QObject *parent = 0);
+
+    virtual QVariant value() const;
+    Q_SLOT virtual void setValue(const QVariant &value, bool doemit = true);
+
+    virtual QVariant defaultValue() const;
+    Q_SLOT virtual void setDefaultValue(const QVariant &value);
+
+    virtual QAction *updatedAction(const QString &newText);
+    Q_SLOT virtual void trigger(const QVariant &data);
+
+    // used for persistency
+    virtual QString settingsKey() const;
+    Q_SLOT virtual void setSettingsKey(const QString &key);
+    Q_SLOT virtual void setSettingsKey(const QString &group, const QString &key);
+
+    virtual QString settingsGroup() const;
+    Q_SLOT virtual void setSettingsGroup(const QString &group);
+
+    virtual void readSettings(QSettings *settings);
+    Q_SLOT virtual void writeSettings(QSettings *settings);
+    
+    virtual void connectWidget(QWidget *widget, ApplyMode applyMode = DeferedApply);
+    virtual void disconnectWidget();
+    Q_SLOT virtual void apply(QSettings *settings);
+
+    virtual QString textPattern() const;
+    Q_SLOT virtual void setTextPattern(const QString &value);
+
+    QString toString() const;
+
+signals:
+    void valueChanged(const QVariant &newValue);
+
+private:
+    Q_SLOT void uncheckableButtonClicked();
+    Q_SLOT void checkableButtonClicked(bool);
+    Q_SLOT void lineEditEditingFinished();
+    Q_SLOT void pathChooserEditingFinished();
+    Q_SLOT void actionTriggered(bool);
+
+    QVariant m_value;
+    QVariant m_defaultValue;
+    QString m_settingsKey;
+    QString m_settingsGroup;
+    QString m_textPattern;
+    QString m_textData;
+    QWidget *m_widget;
+    ApplyMode m_applyMode;
+};
+
+class QWORKBENCH_UTILS_EXPORT SavedActionSet
+{
+public:
+    SavedActionSet() {}
+    ~SavedActionSet() {}
+
+    void insert(SavedAction *action, QWidget *widget);
+    void apply(QSettings *settings);
+    void finish();
+    void clear() { m_list.clear(); }
+
+private:
+    QList<SavedAction *> m_list;
+};
+
+} // namespace Utils
+} // namespace Core
+
+#endif // SAVED_ACTION_H
diff --git a/src/libs/utils/utils.pro b/src/libs/utils/utils.pro
index 9d9e6c76a1d3c1f346e2346a1dc2f45fc901108f..ebce693dc4beaa20645524f575059ba4b97a6793 100644
--- a/src/libs/utils/utils.pro
+++ b/src/libs/utils/utils.pro
@@ -23,6 +23,7 @@ SOURCES += \
     linecolumnlabel.cpp \
     fancylineedit.cpp \
     qtcolorbutton.cpp \
+    savedaction.cpp \
     submiteditorwidget.cpp \
     synchronousprocess.cpp \
     submitfieldwidget.cpp
@@ -55,6 +56,7 @@ HEADERS += \
     linecolumnlabel.h \
     fancylineedit.h \
     qtcolorbutton.h \
+    savedaction.h \
     submiteditorwidget.h \
     abstractprocess.h \
     consoleprocess.h \
diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp
index f5ae15bef109d883c0b86aa3558ad4dcf6ed8bff..c054f19ea060065dc5db496c3d277d1ea29dcfb0 100644
--- a/src/plugins/debugger/debuggeractions.cpp
+++ b/src/plugins/debugger/debuggeractions.cpp
@@ -42,259 +42,10 @@
 #include <QtGui/QCheckBox>
 #include <QtGui/QLineEdit>
 
-
-using namespace Debugger::Internal;
 using namespace Core::Utils;
 
-
-//////////////////////////////////////////////////////////////////////////
-//
-// SavedAction
-//
-//////////////////////////////////////////////////////////////////////////
-
-SavedAction::SavedAction(QObject *parent)
-  : QAction(parent)
-{
-    m_widget = 0;
-    connect(this, SIGNAL(triggered(bool)), this, SLOT(actionTriggered(bool)));
-}
-
-QVariant SavedAction::value() const
-{
-    return m_value;
-}
-
-void SavedAction::setValue(const QVariant &value, bool doemit)
-{
-    if (value == m_value)
-        return;
-    m_value = value;
-    if (this->isCheckable())
-        this->setChecked(m_value.toBool());
-    if (doemit)
-        emit valueChanged(m_value);
-}
-
-QVariant SavedAction::defaultValue() const
-{
-    return m_defaultValue;
-}
-
-void SavedAction::setDefaultValue(const QVariant &value)
-{
-    m_defaultValue = value;
-}
-
-QString SavedAction::settingsKey() const
-{
-    return m_settingsKey;
-}
-
-void SavedAction::setSettingsKey(const QString &key)
-{
-    m_settingsKey = key;
-}
-
-void SavedAction::setSettingsKey(const QString &group, const QString &key)
-{
-    m_settingsKey = key;
-    m_settingsGroup = group;
-}
-
-QString SavedAction::settingsGroup() const
-{
-    return m_settingsGroup;
-}
-
-void SavedAction::setSettingsGroup(const QString &group)
-{
-    m_settingsGroup = group;
-}
-
-QString SavedAction::textPattern() const
-{
-    return m_textPattern;
-}
-
-void SavedAction::setTextPattern(const QString &value)
-{
-    m_textPattern = value;
-}
-
-QString SavedAction::toString() const
-{
-    return "value: " + m_value.toString()
-        + "  defaultvalue: " + m_defaultValue.toString()
-        + "  settingskey: " + m_settingsGroup + '/' + m_settingsKey;
-}
-
-QAction *SavedAction::updatedAction(const QString &text0)
-{
-    QString text = text0;
-    bool enabled = true;
-    if (!m_textPattern.isEmpty()) {
-        if (text.isEmpty()) {
-            text = m_textPattern;
-            text.remove("\"%1\"");
-            text.remove("%1");
-            enabled = false;
-        } else {
-            text = m_textPattern.arg(text0);
-        }
-    }
-    this->setEnabled(enabled);
-    this->setData(text0);
-    this->setText(text);
-    return this;
-}
-
-void SavedAction::readSettings(QSettings *settings)
-{
-    if (m_settingsGroup.isEmpty() || m_settingsKey.isEmpty())
-        return;
-    settings->beginGroup(m_settingsGroup);
-    setValue(settings->value(m_settingsKey, m_defaultValue), false);
-    //qDebug() << "READING: " << m_settingsKey << " -> " << m_value;
-    settings->endGroup();
-}
-
-void SavedAction::writeSettings(QSettings *settings)
-{
-    if (m_settingsGroup.isEmpty() || m_settingsKey.isEmpty())
-        return;
-    settings->beginGroup(m_settingsGroup);
-    settings->setValue(m_settingsKey, m_value);
-    //qDebug() << "WRITING: " << m_settingsKey << " -> " << toString();
-    settings->endGroup();
-}
-   
-void SavedAction::connectWidget(QWidget *widget, ApplyMode applyMode)
-{
-    QTC_ASSERT(!m_widget,
-        qDebug() << "ALREADY CONNECTED: " << widget << m_widget << toString(); return);
-    m_widget = widget;
-    m_applyMode = applyMode;
-    
-    if (QAbstractButton *button = qobject_cast<QAbstractButton *>(widget)) {
-        if (button->isCheckable()) {
-            button->setChecked(m_value.toBool());
-            connect(button, SIGNAL(clicked(bool)),
-                this, SLOT(checkableButtonClicked(bool)));
-        } else {
-            connect(button, SIGNAL(clicked()),
-                this, SLOT(uncheckableButtonClicked()));
-        }
-    } else if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget)) {
-        lineEdit->setText(m_value.toString());
-        //qDebug() << "SETTING TEXT" << lineEdit->text(); 
-        connect(lineEdit, SIGNAL(editingFinished()),
-            this, SLOT(lineEditEditingFinished()));
-    } else if (PathChooser *pathChooser = qobject_cast<PathChooser *>(widget)) {
-        pathChooser->setPath(m_value.toString());
-        connect(pathChooser, SIGNAL(editingFinished()),
-            this, SLOT(pathChooserEditingFinished()));
-        connect(pathChooser, SIGNAL(browsingFinished()),
-            this, SLOT(pathChooserEditingFinished()));
-    } else {
-        qDebug() << "Cannot connect widget " << widget << toString();
-    }
-}
-
-void SavedAction::disconnectWidget()
-{
-    QTC_ASSERT(m_widget,
-        qDebug() << "Widget already disconnected: " << m_widget << toString(); return);
-    m_widget = 0;
-}
-void SavedAction::apply(QSettings *s)
-{
-    if (QAbstractButton *button = qobject_cast<QAbstractButton *>(m_widget))
-        setValue(button->isChecked());
-    else if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(m_widget))
-        setValue(lineEdit->text());
-    else if (PathChooser *pathChooser = qobject_cast<PathChooser *>(m_widget))
-        setValue(pathChooser->path());
-    if (s)
-       writeSettings(s);
-}
-
-void SavedAction::uncheckableButtonClicked()
-{
-    QAbstractButton *button = qobject_cast<QAbstractButton *>(sender());
-    QTC_ASSERT(button, return);
-    //qDebug() << "UNCHECKABLE BUTTON: " << sender();
-    QAction::trigger();
-}
-
-void SavedAction::checkableButtonClicked(bool)
-{
-    QAbstractButton *button = qobject_cast<QAbstractButton *>(sender());
-    QTC_ASSERT(button, return);
-    //qDebug() << "CHECKABLE BUTTON: " << sender();
-    if (m_applyMode == ImmediateApply)
-        setValue(button->isChecked());
-}
-
-void SavedAction::lineEditEditingFinished()
-{
-    QLineEdit *lineEdit = qobject_cast<QLineEdit *>(sender());
-    QTC_ASSERT(lineEdit, return);
-    if (m_applyMode == ImmediateApply)
-        setValue(lineEdit->text());
-}
-
-void SavedAction::pathChooserEditingFinished()
-{
-    PathChooser *pathChooser = qobject_cast<PathChooser *>(sender());
-    QTC_ASSERT(pathChooser, return);
-    if (m_applyMode == ImmediateApply)
-        setValue(pathChooser->path());
-}
-
-void SavedAction::actionTriggered(bool)
-{
-    if (isCheckable())
-        setValue(isChecked());
-    if (actionGroup() && actionGroup()->isExclusive()) {
-        // FIXME: should be taken care of more directly
-        foreach (QAction *act, actionGroup()->actions())
-            if (SavedAction *dact = qobject_cast<SavedAction *>(act))
-                dact->setValue(bool(act == this));
-    }
-}
-
-void SavedAction::trigger(const QVariant &data)
-{
-    setData(data);
-    QAction::trigger();
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-//
-// SavedActionSet
-//
-//////////////////////////////////////////////////////////////////////////
-
-void SavedActionSet::insert(SavedAction *action, QWidget *widget)
-{
-    m_list.append(action);
-    action->connectWidget(widget);
-}
-
-void SavedActionSet::apply(QSettings *settings)
-{
-    foreach (SavedAction *action, m_list)
-        action->apply(settings);
-}
-
-void SavedActionSet::finish()
-{
-    foreach (SavedAction *action, m_list)
-        action->disconnectWidget();
-}
-
+namespace Debugger {
+namespace Internal {
 
 //////////////////////////////////////////////////////////////////////////
 //
@@ -302,9 +53,6 @@ void SavedActionSet::finish()
 //
 //////////////////////////////////////////////////////////////////////////
 
-namespace Debugger {
-namespace Internal {
-
 DebuggerSettings::DebuggerSettings(QObject *parent)
     : QObject(parent)
 {}
diff --git a/src/plugins/debugger/debuggeractions.h b/src/plugins/debugger/debuggeractions.h
index e738ac9eedba7e6f8f6bbdfa3e4d7d8ff3d0b85a..d49b7993b9d7f77e60835b5d4c9fc57a50c7e1e6 100644
--- a/src/plugins/debugger/debuggeractions.h
+++ b/src/plugins/debugger/debuggeractions.h
@@ -31,96 +31,8 @@
 #define DEBUGGER_ACTIONS_H
 
 #include <QtCore/QHash>
-#include <QtCore/QString>
-#include <QtCore/QVariant>
-#include <QtCore/QList>
-
-#include <QtGui/QAction>
-
-QT_BEGIN_NAMESPACE
-class QSettings;
-QT_END_NAMESPACE
-
-
-namespace Core {
-namespace Utils {
-
-enum ApplyMode { ImmediateApply, DeferedApply };
-
-class SavedAction : public QAction
-{
-    Q_OBJECT
-
-public:
-    SavedAction(QObject *parent = 0);
-
-    virtual QVariant value() const;
-    Q_SLOT virtual void setValue(const QVariant &value, bool doemit = true);
-
-    virtual QVariant defaultValue() const;
-    Q_SLOT virtual void setDefaultValue(const QVariant &value);
-
-    virtual QAction *updatedAction(const QString &newText);
-    Q_SLOT virtual void trigger(const QVariant &data);
-
-    // used for persistency
-    virtual QString settingsKey() const;
-    Q_SLOT virtual void setSettingsKey(const QString &key);
-    Q_SLOT virtual void setSettingsKey(const QString &group, const QString &key);
-
-    virtual QString settingsGroup() const;
-    Q_SLOT virtual void setSettingsGroup(const QString &group);
-
-    virtual void readSettings(QSettings *settings);
-    Q_SLOT virtual void writeSettings(QSettings *settings);
-    
-    virtual void connectWidget(QWidget *widget, ApplyMode applyMode = DeferedApply);
-    virtual void disconnectWidget();
-    Q_SLOT virtual void apply(QSettings *settings);
-
-    virtual QString textPattern() const;
-    Q_SLOT virtual void setTextPattern(const QString &value);
-
-    QString toString() const;
-
-signals:
-    void valueChanged(const QVariant &newValue);
-
-private:
-    Q_SLOT void uncheckableButtonClicked();
-    Q_SLOT void checkableButtonClicked(bool);
-    Q_SLOT void lineEditEditingFinished();
-    Q_SLOT void pathChooserEditingFinished();
-    Q_SLOT void actionTriggered(bool);
-
-    QVariant m_value;
-    QVariant m_defaultValue;
-    QString m_settingsKey;
-    QString m_settingsGroup;
-    QString m_textPattern;
-    QString m_textData;
-    QWidget *m_widget;
-    ApplyMode m_applyMode;
-};
-
-class SavedActionSet
-{
-public:
-    SavedActionSet() {}
-    ~SavedActionSet() {}
-
-    void insert(SavedAction *action, QWidget *widget);
-    void apply(QSettings *settings);
-    void finish();
-    void clear() { m_list.clear(); }
-
-private:
-    QList<SavedAction *> m_list;
-};
-
-} // namespace Utils
-} // namespace Core
 
+#include <utils/savedaction.h>
 
 namespace Debugger {
 namespace Internal {