diff --git a/src/libs/utils/parameteraction.cpp b/src/libs/utils/parameteraction.cpp
index 4839d2f19ca270523787d078160b5baad23f8613..8a6863b596d5d614df4dbf1885f413e5af404a8e 100644
--- a/src/libs/utils/parameteraction.cpp
+++ b/src/libs/utils/parameteraction.cpp
@@ -84,4 +84,4 @@ void ParameterAction::setParameter(const QString &p)
         setEnabled(enabled);
 }
 
-}
+} // namespace Utils
diff --git a/src/libs/utils/parameteraction.h b/src/libs/utils/parameteraction.h
index 71fc36f0b6cc8d9657805489623164477992709e..c80b7bed2da62e1bccb52846659adc37c8fc32b1 100644
--- a/src/libs/utils/parameteraction.h
+++ b/src/libs/utils/parameteraction.h
@@ -58,7 +58,7 @@ public:
     explicit ParameterAction(const QString &emptyText,
                              const QString &parameterText,
                              EnablingMode em = AlwaysEnabled,
-                             QObject* parent = 0);
+                             QObject *parent = 0);
 
     QString emptyText() const;
     void setEmptyText(const QString &);
@@ -78,6 +78,6 @@ private:
     EnablingMode m_enablingMode;
 };
 
-}
+} // namespace Utils
 
 #endif // PARAMETERACTION_H
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp
index 4ba6a66dee293767f2f11456d0c81aa01cdfdecc..b138e8c0dea24dda13e5936da1cb2b06887ae553 100644
--- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp
@@ -258,6 +258,11 @@ QString CMakeSettingsPage::displayCategory() const
     return tr("CMake");
 }
 
+QIcon CMakeSettingsPage::categoryIcon() const
+{
+    return QIcon(); // TODO: Add CMake icon or move this into Projects category
+}
+
 QWidget *CMakeSettingsPage::createPage(QWidget *parent)
 {
     QWidget *outerWidget = new QWidget(parent);
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.h b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.h
index 69cc4b5cbf82589a9d4c9accc199c6a1e576a719..92f2ab01763b75c156750e6422b11d240247eb0a 100644
--- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.h
+++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.h
@@ -91,6 +91,7 @@ public:
     virtual QString displayName() const;
     virtual QString category() const;
     virtual QString displayCategory() const;
+    virtual QIcon categoryIcon() const;
 
     virtual QWidget *createPage(QWidget *parent);
     virtual void apply();
diff --git a/src/plugins/coreplugin/actionmanager/commandmappings.h b/src/plugins/coreplugin/actionmanager/commandmappings.h
index a040c2f9afdb017d3dd680f8c2e9e8c18888cee0..929618e9c59cb9953aeb1022fdd924a4d9fd6688 100644
--- a/src/plugins/coreplugin/actionmanager/commandmappings.h
+++ b/src/plugins/coreplugin/actionmanager/commandmappings.h
@@ -60,12 +60,6 @@ public:
     CommandMappings(QObject *parent = 0);
     ~CommandMappings();
 
-    // IOptionsPage
-    virtual QString id() const = 0;
-    virtual QString displayName() const = 0;
-    virtual QString category() const = 0;
-    virtual QString displayCategory() const = 0;
-
 protected slots:
     void commandChanged(QTreeWidgetItem *current);
     void filterChanged(const QString &f);
diff --git a/src/plugins/coreplugin/core.qrc b/src/plugins/coreplugin/core.qrc
index 009ec866870e31254d8fd860c8b01f6fc423557e..cb606618ee0ce23f6992dd41134fca2deac53696 100644
--- a/src/plugins/coreplugin/core.qrc
+++ b/src/plugins/coreplugin/core.qrc
@@ -43,6 +43,14 @@
         <file>images/unlocked.png</file>
         <file>images/extension.png</file>
         <file>images/darkclosebutton.png</file>
+        <file>images/category_debug.png</file>
+        <file>images/category_core.png</file>
+        <file>images/category_texteditor.png</file>
+        <file>images/category_help.png</file>
+        <file>images/category_project.png</file>
+        <file>images/category_design.png</file>
+        <file>images/category_qt.png</file>
+
         <file>editormanager/BinFiles.mimetypes.xml</file>
         <file>images/progressbar.png</file>
     </qresource>
diff --git a/src/plugins/coreplugin/coreconstants.h b/src/plugins/coreplugin/coreconstants.h
index 014b9e63954d24d30a068b1d9a5d7a2846ad8483..765c899c2b14d24f3ddfb5c63535c42fd25698f2 100644
--- a/src/plugins/coreplugin/coreconstants.h
+++ b/src/plugins/coreplugin/coreconstants.h
@@ -227,6 +227,7 @@ const char * const WIZARD_CATEGORY_QT = "R.Qt";
 const char * const WIZARD_TR_CATEGORY_QT = QT_TRANSLATE_NOOP("Core", "Qt");
 
 const char * const SETTINGS_CATEGORY_CORE = "A.Core";
+const char * const SETTINGS_CATEGORY_CORE_ICON = ":/core/images/category_core.png";
 const char * const SETTINGS_TR_CATEGORY_CORE = QT_TRANSLATE_NOOP("Core", "Environment");
 const char * const SETTINGS_ID_ENVIRONMENT = "A.General";
 
diff --git a/src/plugins/coreplugin/dialogs/ioptionspage.h b/src/plugins/coreplugin/dialogs/ioptionspage.h
index e2e69b5bedd5d12aa4e9489b733832ae3ad6a38c..7818921e7e1fa0904471a44e284975c8990ca10e 100644
--- a/src/plugins/coreplugin/dialogs/ioptionspage.h
+++ b/src/plugins/coreplugin/dialogs/ioptionspage.h
@@ -32,6 +32,7 @@
 
 #include <coreplugin/core_global.h>
 
+#include <QtGui/QIcon>
 #include <QtCore/QObject>
 
 QT_BEGIN_NAMESPACE
@@ -51,6 +52,7 @@ public:
     virtual QString displayName() const = 0;
     virtual QString category() const = 0;
     virtual QString displayCategory() const = 0;
+    virtual QIcon categoryIcon() const = 0;
     virtual bool matches(const QString & /* searchKeyWord*/) const { return false; }
 
     virtual QWidget *createPage(QWidget *parent) = 0;
diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.cpp b/src/plugins/coreplugin/dialogs/settingsdialog.cpp
index 6fd7e70811848ed3ae131389d792f69510d09a2c..7d0f8c4656fd5c58f9c24cb01f67d8681c6a4d4c 100644
--- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp
+++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp
@@ -43,6 +43,7 @@
 #include <QtGui/QPushButton>
 #include <QtGui/QToolButton>
 #include <QtGui/QToolBar>
+#include <QtGui/QScrollBar>
 #include <QtGui/QSpacerItem>
 #include <QtGui/QStyle>
 #include <QtGui/QStackedLayout>
@@ -52,9 +53,11 @@
 #include <QtGui/QDialogButtonBox>
 #include <QtGui/QListView>
 #include <QtGui/QApplication>
+#include <QtGui/QGroupBox>
 
 static const char categoryKeyC[] = "General/LastPreferenceCategory";
 static const char pageKeyC[] = "General/LastPreferencePage";
+const int categoryIconSize = 32;
 
 namespace Core {
 namespace Internal {
@@ -64,6 +67,7 @@ namespace Internal {
 struct Category {
     QString id;
     QString displayName;
+    QIcon icon;
     QList<IOptionsPage*> pages;
     int index;
     QTabWidget *tabWidget;
@@ -85,11 +89,15 @@ private:
     Category *findCategoryById(const QString &id);
 
     QList<Category*> m_categories;
+    QIcon m_emptyIcon;
 };
 
 CategoryModel::CategoryModel(QObject *parent)
     : QAbstractListModel(parent)
 {
+    QPixmap empty(categoryIconSize, categoryIconSize);
+    empty.fill(Qt::transparent);
+    m_emptyIcon = QIcon(empty);
 }
 
 CategoryModel::~CategoryModel()
@@ -107,6 +115,12 @@ QVariant CategoryModel::data(const QModelIndex &index, int role) const
     switch (role) {
     case Qt::DisplayRole:
         return m_categories.at(index.row())->displayName;
+    case Qt::DecorationRole: {
+            QIcon icon = m_categories.at(index.row())->icon;
+            if (icon.isNull())
+                icon = m_emptyIcon;
+            return icon;
+        }
     }
 
     return QVariant();
@@ -126,6 +140,7 @@ void CategoryModel::setPages(const QList<IOptionsPage*> &pages)
             category = new Category;
             category->id = categoryId;
             category->displayName = page->displayCategory();
+            category->icon = page->categoryIcon();
             category->pages.append(page);
             m_categories.append(category);
         } else {
@@ -198,7 +213,10 @@ public:
 
     virtual QSize sizeHint() const
     {
-        return QSize(sizeHintForColumn(0) + frameWidth() * 2, 100);
+        int width = sizeHintForColumn(0) + frameWidth() * 2 + 5;
+        if (verticalScrollBar()->isVisible())
+            width += verticalScrollBar()->width();
+        return QSize(width, 100);
     }
 };
 
@@ -262,9 +280,14 @@ SettingsDialog::SettingsDialog(QWidget *parent, const QString &categoryId,
         QTabWidget *tabWidget = new QTabWidget;
         for (int j = 0; j < category->pages.size(); ++j) {
             IOptionsPage *page = category->pages.at(j);
-            tabWidget->addTab(page->createPage(0), page->displayName());
+            QWidget *widget = page->createPage(0);
+            tabWidget->addTab(widget, page->displayName());
             if (initialCategoryIndex == i && page->id() == initialPage)
                 initialPageIndex = j;
+
+            // A hack to remove the borders from all group boxes
+            foreach (QGroupBox *groupBox, qFindChildren<QGroupBox*>(widget))
+                groupBox->setFlat(true);
         }
 
         connect(tabWidget, SIGNAL(currentChanged(int)),
@@ -276,8 +299,10 @@ SettingsDialog::SettingsDialog(QWidget *parent, const QString &categoryId,
 
     m_proxyModel->setSourceModel(m_model);
     m_proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
+    m_categoryList->setIconSize(QSize(categoryIconSize, categoryIconSize));
     m_categoryList->setModel(m_proxyModel);
     m_categoryList->setSelectionMode(QAbstractItemView::SingleSelection);
+    m_categoryList->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
 
     connect(m_categoryList->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
             this, SLOT(currentChanged(QModelIndex)));
diff --git a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp
index b756dd9d51b39172e06672c822b5f5eea4b4e7d9..51ccb8aca452fbe7095bb07f6de85e76a923488a 100644
--- a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp
+++ b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp
@@ -87,6 +87,11 @@ QString ShortcutSettings::displayCategory() const
     return QCoreApplication::translate("Core", Core::Constants::SETTINGS_TR_CATEGORY_CORE);
 }
 
+QIcon ShortcutSettings::categoryIcon() const
+{
+    return QIcon(QLatin1String(Core::Constants::SETTINGS_CATEGORY_CORE_ICON));
+}
+
 QWidget *ShortcutSettings::createPage(QWidget *parent)
 {
     m_keyNum = m_key[0] = m_key[1] = m_key[2] = m_key[3] = 0;
diff --git a/src/plugins/coreplugin/dialogs/shortcutsettings.h b/src/plugins/coreplugin/dialogs/shortcutsettings.h
index 32343f10cb0fa40ff672a0d5be39467e1ef87a93..ab0933c1e468d4d6b3c86bae4b76decdef4c0ed5 100644
--- a/src/plugins/coreplugin/dialogs/shortcutsettings.h
+++ b/src/plugins/coreplugin/dialogs/shortcutsettings.h
@@ -68,6 +68,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/coreplugin/generalsettings.cpp b/src/plugins/coreplugin/generalsettings.cpp
index da2c7d59c70dba1675d0e91dcef57631d92d666d..cd2a4f922ff2b00b1030637666150aa2f5da27be 100644
--- a/src/plugins/coreplugin/generalsettings.cpp
+++ b/src/plugins/coreplugin/generalsettings.cpp
@@ -77,6 +77,11 @@ QString GeneralSettings::displayCategory() const
     return QCoreApplication::translate("Core", Core::Constants::SETTINGS_TR_CATEGORY_CORE);
 }
 
+QIcon GeneralSettings::categoryIcon() const
+{
+    return QIcon(QLatin1String(Core::Constants::SETTINGS_CATEGORY_CORE_ICON));
+}
+
 static bool hasQmFilesForLocale(const QString &locale, const QString &creatorTrPath)
 {
     static const QString qtTrPath = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
diff --git a/src/plugins/coreplugin/generalsettings.h b/src/plugins/coreplugin/generalsettings.h
index ef85249ee384a6b8097c36a0319eb458002691a8..62b478ec8237dfb755293cf9c042325855767ace 100644
--- a/src/plugins/coreplugin/generalsettings.h
+++ b/src/plugins/coreplugin/generalsettings.h
@@ -55,6 +55,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
     QWidget* createPage(QWidget *parent);
     void apply();
     void finish();
diff --git a/src/plugins/coreplugin/images/category_core.png b/src/plugins/coreplugin/images/category_core.png
new file mode 100644
index 0000000000000000000000000000000000000000..89745b3bc7e002866658a9d2951e2c39ba4d59d4
Binary files /dev/null and b/src/plugins/coreplugin/images/category_core.png differ
diff --git a/src/plugins/coreplugin/images/category_debug.png b/src/plugins/coreplugin/images/category_debug.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8c040c744c326d42409e7bf8c59740cff483a1a
Binary files /dev/null and b/src/plugins/coreplugin/images/category_debug.png differ
diff --git a/src/plugins/coreplugin/images/category_design.png b/src/plugins/coreplugin/images/category_design.png
new file mode 100644
index 0000000000000000000000000000000000000000..fb9203565eab34a400d169057798db18582ae28e
Binary files /dev/null and b/src/plugins/coreplugin/images/category_design.png differ
diff --git a/src/plugins/coreplugin/images/category_help.png b/src/plugins/coreplugin/images/category_help.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce2497f9ad62f5de989a74161ffbad9fa2ea747b
Binary files /dev/null and b/src/plugins/coreplugin/images/category_help.png differ
diff --git a/src/plugins/coreplugin/images/category_project.png b/src/plugins/coreplugin/images/category_project.png
new file mode 100644
index 0000000000000000000000000000000000000000..18d157e971f0864175274cfcdca540f9a5424e1b
Binary files /dev/null and b/src/plugins/coreplugin/images/category_project.png differ
diff --git a/src/plugins/coreplugin/images/category_qt.png b/src/plugins/coreplugin/images/category_qt.png
new file mode 100644
index 0000000000000000000000000000000000000000..3731d351d4d81761481bb5142f53bc38b3e0b438
Binary files /dev/null and b/src/plugins/coreplugin/images/category_qt.png differ
diff --git a/src/plugins/coreplugin/images/category_texteditor.png b/src/plugins/coreplugin/images/category_texteditor.png
new file mode 100644
index 0000000000000000000000000000000000000000..c4798e04148c1bb1c46fe9958cfc28dd423587cf
Binary files /dev/null and b/src/plugins/coreplugin/images/category_texteditor.png differ
diff --git a/src/plugins/cpaster/codepasterprotocol.cpp b/src/plugins/cpaster/codepasterprotocol.cpp
index bb154020a3df20f538b5c016957d6935e69c3d2e..9c82a2adf06a4546df552f6fd6b8b3482c8ea4e3 100644
--- a/src/plugins/cpaster/codepasterprotocol.cpp
+++ b/src/plugins/cpaster/codepasterprotocol.cpp
@@ -113,9 +113,9 @@ void CodePasterProtocol::list()
 }
 
 void CodePasterProtocol::paste(const QString &text,
-                       const QString &username,
-                       const QString &comment,
-                       const QString &description)
+                               const QString &username,
+                               const QString &comment,
+                               const QString &description)
 {
     QString hostName = m_page->hostName();
     if (!isValidHostName(hostName))
@@ -139,7 +139,7 @@ bool CodePasterProtocol::hasSettings() const
     return true;
 }
 
-Core::IOptionsPage* CodePasterProtocol::settingsPage()
+Core::IOptionsPage *CodePasterProtocol::settingsPage()
 {
     return m_page;
 }
diff --git a/src/plugins/cpaster/codepastersettings.cpp b/src/plugins/cpaster/codepastersettings.cpp
index b5d310ed31f3a07e41ef2744461425d58c9e1a4d..f88fecdf506cb12a04acc00b226282dd33fee83e 100644
--- a/src/plugins/cpaster/codepastersettings.cpp
+++ b/src/plugins/cpaster/codepastersettings.cpp
@@ -75,6 +75,11 @@ QString CodePasterSettingsPage::displayCategory() const
     return QCoreApplication::translate("CodePaster", Constants::CPASTER_SETTINGS_TR_CATEGORY);
 }
 
+QIcon CodePasterSettingsPage::categoryIcon() const
+{
+    return QIcon(); // TODO: Add icon for code paster category
+}
+
 QWidget *CodePasterSettingsPage::createPage(QWidget *parent)
 {
     QGroupBox *groupBox = new QGroupBox();
diff --git a/src/plugins/cpaster/codepastersettings.h b/src/plugins/cpaster/codepastersettings.h
index 42c2bdb5a907b64a1e6441f8875d93566bcef5c8..82243a155d18314686526c3a567c897e6620aa72 100644
--- a/src/plugins/cpaster/codepastersettings.h
+++ b/src/plugins/cpaster/codepastersettings.h
@@ -49,6 +49,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/cpaster/pastebindotcomprotocol.cpp b/src/plugins/cpaster/pastebindotcomprotocol.cpp
index eb151c23239c421aaa53c16d765fff01b85fd917..bead94988cd5471e2ddbcd5e500e5f02157048fd 100644
--- a/src/plugins/cpaster/pastebindotcomprotocol.cpp
+++ b/src/plugins/cpaster/pastebindotcomprotocol.cpp
@@ -149,7 +149,7 @@ void PasteBinDotComProtocol::fetchFinished()
     emit fetchDone(title, content, error);
 }
 
-Core::IOptionsPage* PasteBinDotComProtocol::settingsPage()
+Core::IOptionsPage *PasteBinDotComProtocol::settingsPage()
 {
     return settings;
 }
diff --git a/src/plugins/cpaster/pastebindotcomprotocol.h b/src/plugins/cpaster/pastebindotcomprotocol.h
index f7ddc25b71442fd8a7e6203f05ab0b94100e9821..433c9fc1e2ff3ba3f84812821e72353f6eb53629 100644
--- a/src/plugins/cpaster/pastebindotcomprotocol.h
+++ b/src/plugins/cpaster/pastebindotcomprotocol.h
@@ -48,7 +48,7 @@ public:
 
     virtual unsigned capabilities() const { return 0; }
     bool hasSettings() const { return true; }
-    Core::IOptionsPage* settingsPage();
+    Core::IOptionsPage *settingsPage();
 
     bool canList() const { return false; }
 
diff --git a/src/plugins/cpaster/pastebindotcomsettings.cpp b/src/plugins/cpaster/pastebindotcomsettings.cpp
index 68adfd9f970f766e68c74cdd0a11907fac91968d..7ec1607f2d693f0b96c75438bb213985613958e0 100644
--- a/src/plugins/cpaster/pastebindotcomsettings.cpp
+++ b/src/plugins/cpaster/pastebindotcomsettings.cpp
@@ -66,6 +66,11 @@ QString PasteBinDotComSettings::displayCategory() const
     return QCoreApplication::translate("CodePaster", CodePaster::Constants::CPASTER_SETTINGS_TR_CATEGORY);
 }
 
+QIcon PasteBinDotComSettings::categoryIcon() const
+{
+    return QIcon(); // TODO: Icon for CodePaster
+}
+
 QWidget *PasteBinDotComSettings::createPage(QWidget *parent)
 {
     Ui_PasteBinComSettingsWidget ui;
diff --git a/src/plugins/cpaster/pastebindotcomsettings.h b/src/plugins/cpaster/pastebindotcomsettings.h
index ec1fe9bdeb120fd309e890b5e75ebe1de33f5156..b8cf5da27146c0b8107f3b104111ff37b7efe7db 100644
--- a/src/plugins/cpaster/pastebindotcomsettings.h
+++ b/src/plugins/cpaster/pastebindotcomsettings.h
@@ -52,6 +52,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/cpaster/protocol.cpp b/src/plugins/cpaster/protocol.cpp
index ffec7caa73ed5bb8f60250ab66f25d3fdd5a1001..93c16dfb3114efac1b9188410e1d055d88faedee 100644
--- a/src/plugins/cpaster/protocol.cpp
+++ b/src/plugins/cpaster/protocol.cpp
@@ -54,7 +54,7 @@ bool Protocol::hasSettings() const
     return false;
 }
 
-Core::IOptionsPage* Protocol::settingsPage()
+Core::IOptionsPage *Protocol::settingsPage()
 {
     return 0;
 }
diff --git a/src/plugins/cpaster/protocol.h b/src/plugins/cpaster/protocol.h
index da8a05153da576e0e1be316ba00e65e1f00b3088..eed43167a341d328bf606daf5a3d6ef04bb4ebf1 100644
--- a/src/plugins/cpaster/protocol.h
+++ b/src/plugins/cpaster/protocol.h
@@ -57,7 +57,7 @@ public:
 
     virtual unsigned capabilities() const = 0;
     virtual bool hasSettings() const;
-    virtual Core::IOptionsPage* settingsPage();
+    virtual Core::IOptionsPage *settingsPage();
 
     virtual void fetch(const QString &id) = 0;
     virtual void list();
diff --git a/src/plugins/cpaster/settingspage.cpp b/src/plugins/cpaster/settingspage.cpp
index 708e4662c18b5ccf1515709ede89fb10f3a27479..2d16327da61ddb33ad12c3d8d1651e2d0b408ab8 100644
--- a/src/plugins/cpaster/settingspage.cpp
+++ b/src/plugins/cpaster/settingspage.cpp
@@ -104,6 +104,11 @@ QString SettingsPage::displayCategory() const
     return QCoreApplication::translate("CodePaster", Constants::CPASTER_SETTINGS_TR_CATEGORY);
 }
 
+QIcon SettingsPage::categoryIcon() const
+{
+    return QIcon(); // TODO: Icon for CodePaster
+}
+
 QWidget *SettingsPage::createPage(QWidget *parent)
 {
     m_widget = new SettingsWidget(m_protocols, parent);
diff --git a/src/plugins/cpaster/settingspage.h b/src/plugins/cpaster/settingspage.h
index 063c372afac66444169ef739728b201d5bc002c8..10145ed6bff0cbe4af914d9c5d044c914818d154 100644
--- a/src/plugins/cpaster/settingspage.h
+++ b/src/plugins/cpaster/settingspage.h
@@ -68,6 +68,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/cpptools/completionsettingspage.cpp b/src/plugins/cpptools/completionsettingspage.cpp
index f513ac93e2834a96c7b218bcb77944da45765e2d..79729b7215b2682f74f241ab965c2e871ec24caa 100644
--- a/src/plugins/cpptools/completionsettingspage.cpp
+++ b/src/plugins/cpptools/completionsettingspage.cpp
@@ -70,6 +70,11 @@ QString CompletionSettingsPage::displayCategory() const
     return QCoreApplication::translate("Text Editor", TextEditor::Constants::TEXT_EDITOR_SETTINGS_TR_CATEGORY);
 }
 
+QIcon CompletionSettingsPage::categoryIcon() const
+{
+    return QIcon(QLatin1String(TextEditor::Constants::TEXT_EDITOR_SETTINGS_CATEGORY_ICON));
+}
+
 QWidget *CompletionSettingsPage::createPage(QWidget *parent)
 {
     QWidget *w = new QWidget(parent);
diff --git a/src/plugins/cpptools/completionsettingspage.h b/src/plugins/cpptools/completionsettingspage.h
index a3e16da06450e201649cdc9ad77b6cdc3e6e551e..ab41757fe5e4c414ce623dc380d9a37fbbf94729 100644
--- a/src/plugins/cpptools/completionsettingspage.h
+++ b/src/plugins/cpptools/completionsettingspage.h
@@ -53,6 +53,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/cpptools/cppfilesettingspage.cpp b/src/plugins/cpptools/cppfilesettingspage.cpp
index ae4297cbaebe9d0444ccd459baa9eb7a25a5434a..34de7008856a148bd3d3d7d5bf64fb9bcc8dea09 100644
--- a/src/plugins/cpptools/cppfilesettingspage.cpp
+++ b/src/plugins/cpptools/cppfilesettingspage.cpp
@@ -319,6 +319,11 @@ QString CppFileSettingsPage::displayCategory() const
     return QCoreApplication::translate("CppTools", Constants::CPP_SETTINGS_TR_CATEGORY);
 }
 
+QIcon CppFileSettingsPage::categoryIcon() const
+{
+    return QIcon(); // TODO: Icon for C++ or move into category
+}
+
 QWidget *CppFileSettingsPage::createPage(QWidget *parent)
 {
 
diff --git a/src/plugins/cpptools/cppfilesettingspage.h b/src/plugins/cpptools/cppfilesettingspage.h
index 58508cb336c8e8db597d89fdcd573fef8a3281f8..236cd3abdb60fa9ad16177c1de2c58eabf721494 100644
--- a/src/plugins/cpptools/cppfilesettingspage.h
+++ b/src/plugins/cpptools/cppfilesettingspage.h
@@ -101,6 +101,7 @@ public:
     virtual QString displayName() const;
     virtual QString category() const;
     virtual QString displayCategory() const;
+    virtual QIcon categoryIcon() const;
 
     virtual QWidget *createPage(QWidget *parent);
     virtual void apply();
diff --git a/src/plugins/cvs/settingspage.cpp b/src/plugins/cvs/settingspage.cpp
index 7f9fb6a74ec0c8c42418683b6e98f21b41571882..2a137e93b28ce2963efa626e87b78a9f03ada268 100644
--- a/src/plugins/cvs/settingspage.cpp
+++ b/src/plugins/cvs/settingspage.cpp
@@ -108,6 +108,11 @@ QString SettingsPage::displayCategory() const
     return QCoreApplication::translate("VCSBase", VCSBase::Constants::VCS_SETTINGS_TR_CATEGORY);
 }
 
+QIcon SettingsPage::categoryIcon() const
+{
+    return QIcon(); // TODO: Icon for Version Control
+}
+
 QWidget *SettingsPage::createPage(QWidget *parent)
 {
     m_widget = new SettingsPageWidget(parent);
diff --git a/src/plugins/cvs/settingspage.h b/src/plugins/cvs/settingspage.h
index 9b230835059b6656a878d731b466d65979fb7c55..fab22d1c86628a2787b46f81fbd92af324522960 100644
--- a/src/plugins/cvs/settingspage.h
+++ b/src/plugins/cvs/settingspage.h
@@ -73,6 +73,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h
index db6bb35c7b8b51dbbd8475a9dcce7478a519db2f..3482de3dc059543a7925b6828fc4e8bde7a82a74 100644
--- a/src/plugins/debugger/debuggerconstants.h
+++ b/src/plugins/debugger/debuggerconstants.h
@@ -60,6 +60,8 @@ const char * const DEBUGGER_COMMON_SETTINGS_NAME =
 const char * const DEBUGGER_SETTINGS_CATEGORY = "O.Debugger";
 const char * const DEBUGGER_SETTINGS_TR_CATEGORY =
     QT_TRANSLATE_NOOP("Debugger", "Debugger");
+const char * const DEBUGGER_COMMON_SETTINGS_CATEGORY_ICON =
+    ":/core/images/category_debug.png";
 
 namespace Internal {
     enum { debug = 0 };
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 05ff7a6e14aae028a08389ea5b4c5cbee1306942..3c1ffdfbb3a2431c38d1eeefce0de62177b93aba 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -341,6 +341,8 @@ public:
         { return _(DEBUGGER_SETTINGS_CATEGORY);  }
     QString displayCategory() const
         { return QCoreApplication::translate("Debugger", DEBUGGER_SETTINGS_TR_CATEGORY); }
+    QIcon categoryIcon() const
+        { return QIcon(QLatin1String(DEBUGGER_COMMON_SETTINGS_CATEGORY_ICON)); }
 
     QWidget *createPage(QWidget *parent);
     void apply() { m_group.apply(settings()); }
@@ -455,6 +457,7 @@ public:
     QString displayName() const { return tr("Debugging Helper"); }
     QString category() const { return _(DEBUGGER_SETTINGS_CATEGORY); }
     QString displayCategory() const { return QCoreApplication::translate("Debugger", DEBUGGER_SETTINGS_TR_CATEGORY); }
+    QIcon categoryIcon() const { return QIcon(QLatin1String(DEBUGGER_COMMON_SETTINGS_CATEGORY_ICON)); }
 
     QWidget *createPage(QWidget *parent);
     void apply() { m_group.apply(settings()); }
diff --git a/src/plugins/debugger/gdb/gdboptionspage.cpp b/src/plugins/debugger/gdb/gdboptionspage.cpp
index e509d176cc9968647edc5e13db9d478b1edd1c80..d32936f4390302f9e9ee2d3d07239e3dfff91fc4 100644
--- a/src/plugins/debugger/gdb/gdboptionspage.cpp
+++ b/src/plugins/debugger/gdb/gdboptionspage.cpp
@@ -62,6 +62,11 @@ QString GdbOptionsPage::displayCategory() const
     return QCoreApplication::translate("Debugger", Debugger::Constants::DEBUGGER_SETTINGS_TR_CATEGORY);
 }
 
+QIcon GdbOptionsPage::categoryIcon() const
+{
+    return QIcon(QLatin1String(Debugger::Constants::DEBUGGER_COMMON_SETTINGS_CATEGORY_ICON));
+}
+
 QWidget *GdbOptionsPage::createPage(QWidget *parent)
 {
     QWidget *w = new QWidget(parent);
diff --git a/src/plugins/debugger/gdb/gdboptionspage.h b/src/plugins/debugger/gdb/gdboptionspage.h
index 7b4b19fa9b217d819c5dc9b13b9895792742b6de..7fbf855fe370bd95e16e3b4720462ae67638fb4d 100644
--- a/src/plugins/debugger/gdb/gdboptionspage.h
+++ b/src/plugins/debugger/gdb/gdboptionspage.h
@@ -48,6 +48,7 @@ public:
     virtual QString displayName() const;
     virtual QString category() const;
     virtual QString displayCategory() const;
+    virtual QIcon categoryIcon() const;
 
     virtual QWidget *createPage(QWidget *parent);
     virtual void apply();
diff --git a/src/plugins/debugger/gdb/trkoptionspage.cpp b/src/plugins/debugger/gdb/trkoptionspage.cpp
index f78b90c5e1970d05f987162b6a9de05173ebe8b5..fd4c33c6d865b883cfeb468e7b48f1779ee174ae 100644
--- a/src/plugins/debugger/gdb/trkoptionspage.cpp
+++ b/src/plugins/debugger/gdb/trkoptionspage.cpp
@@ -69,6 +69,11 @@ QString TrkOptionsPage::displayCategory() const
     return QCoreApplication::translate("Debugger", Debugger::Constants::DEBUGGER_SETTINGS_TR_CATEGORY);
 }
 
+QIcon TrkOptionsPage::categoryIcon() const
+{
+    return QIcon(QLatin1String(Debugger::Constants::DEBUGGER_COMMON_SETTINGS_CATEGORY_ICON));
+}
+
 QWidget *TrkOptionsPage::createPage(QWidget *parent)
 {
     if (!m_widget)
diff --git a/src/plugins/debugger/gdb/trkoptionspage.h b/src/plugins/debugger/gdb/trkoptionspage.h
index d06fef2954e9456db1e8fb69e74edf06f8d1affd..8647c34a5478917ac22a4139c5b3b292003af108 100644
--- a/src/plugins/debugger/gdb/trkoptionspage.h
+++ b/src/plugins/debugger/gdb/trkoptionspage.h
@@ -56,6 +56,7 @@ public:
     virtual QString displayName() const;
     virtual QString category() const;
     virtual QString displayCategory() const;
+    virtual QIcon categoryIcon() const;
 
     virtual QWidget *createPage(QWidget *parent);
     virtual void apply();
diff --git a/src/plugins/designer/cpp/cppsettingspage.cpp b/src/plugins/designer/cpp/cppsettingspage.cpp
index 3b059f3c3627affcf92521159aecd682e44817ca..5c3706ba5d2a7e9985b444fa49a7c8ddbd3b6054 100644
--- a/src/plugins/designer/cpp/cppsettingspage.cpp
+++ b/src/plugins/designer/cpp/cppsettingspage.cpp
@@ -123,6 +123,11 @@ QString CppSettingsPage::displayCategory() const
     return QCoreApplication::translate("Designer", Designer::Constants::SETTINGS_TR_CATEGORY);
 }
 
+QIcon CppSettingsPage::categoryIcon() const
+{
+    return QIcon(QLatin1String(Designer::Constants::SETTINGS_CATEGORY_ICON));
+}
+
 QWidget *CppSettingsPage::createPage(QWidget *parent)
 {
     m_widget = new CppSettingsPageWidget(parent);
diff --git a/src/plugins/designer/cpp/cppsettingspage.h b/src/plugins/designer/cpp/cppsettingspage.h
index d6b71f60b8b5fa5e91434b56590e6d00ddad0488..ecb6d977d7dfb469e3d4d5341fa7c2dbb63f6518 100644
--- a/src/plugins/designer/cpp/cppsettingspage.h
+++ b/src/plugins/designer/cpp/cppsettingspage.h
@@ -67,6 +67,7 @@ public:
     virtual QString displayName() const;
     virtual QString category() const;
     virtual QString displayCategory() const;
+    virtual QIcon categoryIcon() const;
 
     virtual QWidget *createPage(QWidget *parent);
     virtual void apply();
diff --git a/src/plugins/designer/designerconstants.h b/src/plugins/designer/designerconstants.h
index 8348ed83e92df0a59142e45a6aa8e69edc45aaa8..7c2166eca8faf2b8ce117a6f9f7706fed5282b97 100644
--- a/src/plugins/designer/designerconstants.h
+++ b/src/plugins/designer/designerconstants.h
@@ -42,6 +42,7 @@ const char * const DESIGNER_XML_EDITOR_ID ="DesignerXmlEditor";
 const char * const C_DESIGNER_XML_DISPLAY_NAME  = QT_TRANSLATE_NOOP("Designer", "Xml Editor");
 
 const char * const SETTINGS_CATEGORY = "P.Designer";
+const char * const SETTINGS_CATEGORY_ICON = ":/core/images/category_design.png";
 const char * const SETTINGS_TR_CATEGORY = QT_TRANSLATE_NOOP("Designer", "Designer");
 const char * const SETTINGS_CPP_SETTINGS_ID = "Class Generation";
 const char * const SETTINGS_CPP_SETTINGS_NAME = QT_TRANSLATE_NOOP("Designer", "Class Generation");
diff --git a/src/plugins/designer/settingspage.cpp b/src/plugins/designer/settingspage.cpp
index 1127321bfea0abb02e1f98963d2c34c90aef7d8c..f316a6e78cb0b82d4359646f15b4d1823d5c5a0e 100644
--- a/src/plugins/designer/settingspage.cpp
+++ b/src/plugins/designer/settingspage.cpp
@@ -65,6 +65,11 @@ QString SettingsPage::displayCategory() const
     return QCoreApplication::translate("Designer", Designer::Constants::SETTINGS_TR_CATEGORY);
 }
 
+QIcon SettingsPage::categoryIcon() const
+{
+    return QIcon(QLatin1String(Designer::Constants::SETTINGS_CATEGORY_ICON));
+}
+
 QWidget *SettingsPage::createPage(QWidget *parent)
 {
     return m_designerPage->createPage(parent);
diff --git a/src/plugins/designer/settingspage.h b/src/plugins/designer/settingspage.h
index 71570e211dd34e65a5a06cc62ebe8f9ecc7febf2..0732e386fac46d3ade416b1063eb8ca283084417 100644
--- a/src/plugins/designer/settingspage.h
+++ b/src/plugins/designer/settingspage.h
@@ -53,6 +53,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     virtual QWidget *createPage(QWidget *parent);
     virtual void apply();
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index 2958b7bac81e4cc43be7e55c79f9edb093862dca..01a4afc779f545b2f1061e1669ae459036087aff 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -131,6 +131,7 @@ public:
     QString displayName() const { return tr("General"); }
     QString category() const { return QLatin1String(Constants::SETTINGS_CATEGORY); }
     QString displayCategory() const { return tr("FakeVim"); }
+    QIcon categoryIcon() const { return QIcon(); } // TODO: Add an icon or move into another category
 
     QWidget *createPage(QWidget *parent);
     void apply() { m_group.apply(ICore::instance()->settings()); }
@@ -289,6 +290,7 @@ public:
     QString displayName() const { return tr("Ex Command Mapping"); }
     QString category() const { return QLatin1String(Constants::SETTINGS_CATEGORY); }
     QString displayCategory() const { return tr("FakeVim"); }
+    QIcon categoryIcon() const { return QIcon(); } // TODO: Icon for FakeVim
 
     QWidget *createPage(QWidget *parent);
     void initialize();
diff --git a/src/plugins/git/settingspage.cpp b/src/plugins/git/settingspage.cpp
index 11edb065ce37feb3987e2bb180c7ce24dd8bb7cb..4c50a1581ab5bedf212b49337bb3af3401006b08 100644
--- a/src/plugins/git/settingspage.cpp
+++ b/src/plugins/git/settingspage.cpp
@@ -122,6 +122,11 @@ QString SettingsPage::displayCategory() const
     return QCoreApplication::translate("VCSBase", VCSBase::Constants::VCS_SETTINGS_TR_CATEGORY);
 }
 
+QIcon SettingsPage::categoryIcon() const
+{
+    return QIcon(); // TODO: Icon for Version Control
+}
+
 QWidget *SettingsPage::createPage(QWidget *parent)
 {
     m_widget = new SettingsPageWidget(parent);
diff --git a/src/plugins/git/settingspage.h b/src/plugins/git/settingspage.h
index 203c4ce483c88292e12b9becd3303b0c0355eb89..7d10c032932fd48f64ef00a3648d394268407ce6 100644
--- a/src/plugins/git/settingspage.h
+++ b/src/plugins/git/settingspage.h
@@ -74,6 +74,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/help/docsettingspage.cpp b/src/plugins/help/docsettingspage.cpp
index 5f1938bc802ca29657f423cc7a068ca4422cc166..4933f53dd4e177256741b0572f4f9bb2f60edf5a 100644
--- a/src/plugins/help/docsettingspage.cpp
+++ b/src/plugins/help/docsettingspage.cpp
@@ -65,6 +65,11 @@ QString DocSettingsPage::displayCategory() const
     return QCoreApplication::translate("Help", Help::Constants::HELP_TR_CATEGORY);
 }
 
+QIcon DocSettingsPage::categoryIcon() const
+{
+    return QIcon(QLatin1String(Help::Constants::HELP_CATEGORY_ICON));
+}
+
 QWidget *DocSettingsPage::createPage(QWidget *parent)
 {
     QWidget *widget = new QWidget(parent);
diff --git a/src/plugins/help/docsettingspage.h b/src/plugins/help/docsettingspage.h
index 80c1bc67a79c426a956645b03c52c34b0cff9c86..66de3ac8ae3d6f1bda09ff897a0f1f6798552899 100644
--- a/src/plugins/help/docsettingspage.h
+++ b/src/plugins/help/docsettingspage.h
@@ -48,6 +48,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/help/filtersettingspage.cpp b/src/plugins/help/filtersettingspage.cpp
index e73e882fe3db66facff49ea403066b6cc0775ea9..8577b42960e8a2bedaeaa7bc36de55f960c3425d 100644
--- a/src/plugins/help/filtersettingspage.cpp
+++ b/src/plugins/help/filtersettingspage.cpp
@@ -66,6 +66,11 @@ QString FilterSettingsPage::displayCategory() const
     return QCoreApplication::translate("Help", Help::Constants::HELP_TR_CATEGORY);
 }
 
+QIcon FilterSettingsPage::categoryIcon() const
+{
+    return QIcon(QLatin1String(Help::Constants::HELP_CATEGORY_ICON));
+}
+
 QWidget *FilterSettingsPage::createPage(QWidget *parent)
 {
     QWidget *widget = new QWidget(parent);
diff --git a/src/plugins/help/filtersettingspage.h b/src/plugins/help/filtersettingspage.h
index 74398e51c53b4091aa5c53c23faae3ad5a07f6a0..b8f74d5359d97860b71a2c9dd7a276c2c557a2aa 100644
--- a/src/plugins/help/filtersettingspage.h
+++ b/src/plugins/help/filtersettingspage.h
@@ -48,6 +48,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/help/generalsettingspage.cpp b/src/plugins/help/generalsettingspage.cpp
index bb62461df05ebf65ceb5ea3cfc13586f5ae5c710..0df4288670ec36c205d147083826a2e200e0f843 100644
--- a/src/plugins/help/generalsettingspage.cpp
+++ b/src/plugins/help/generalsettingspage.cpp
@@ -83,6 +83,11 @@ QString GeneralSettingsPage::displayCategory() const
     return QCoreApplication::translate("Help", Help::Constants::HELP_TR_CATEGORY);
 }
 
+QIcon GeneralSettingsPage::categoryIcon() const
+{
+    return QIcon(QLatin1String(Help::Constants::HELP_CATEGORY_ICON));
+}
+
 QWidget *GeneralSettingsPage::createPage(QWidget *parent)
 {
     QWidget *widget = new QWidget(parent);
diff --git a/src/plugins/help/generalsettingspage.h b/src/plugins/help/generalsettingspage.h
index f37ab2de26fa0cc907e84bddd639d8f579785b75..dbfc97e39b3d077ebbbfb6b7b53daf5f75402fb8 100644
--- a/src/plugins/help/generalsettingspage.h
+++ b/src/plugins/help/generalsettingspage.h
@@ -46,9 +46,10 @@ public:
     GeneralSettingsPage();
 
     QString id() const;
-    virtual QString displayName() const;
+    QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/help/helpconstants.h b/src/plugins/help/helpconstants.h
index 36195359dbc1714684b2d9f4a322ee77e191ffdc..e9910e830f90b3883b43f146d9dc7c86b03b3197 100644
--- a/src/plugins/help/helpconstants.h
+++ b/src/plugins/help/helpconstants.h
@@ -38,6 +38,7 @@ namespace Help {
 const int          P_MODE_HELP    = 70;
 const char * const ID_MODE_HELP   = "Help";
 const char * const HELP_CATEGORY = "H.Help";
+const char * const HELP_CATEGORY_ICON = ":/core/images/category_help.png";
 const char * const HELP_TR_CATEGORY = QT_TRANSLATE_NOOP("Help", "Help");
 
 const char * const C_MODE_HELP    = "Help Mode";
diff --git a/src/plugins/locator/settingspage.cpp b/src/plugins/locator/settingspage.cpp
index f0c7b0e214a726346cd58a36a5ae94d3942dadf0..0dcfdb5cf9c3d99a44922b30e64f6764dae0bb6d 100644
--- a/src/plugins/locator/settingspage.cpp
+++ b/src/plugins/locator/settingspage.cpp
@@ -69,6 +69,11 @@ QString SettingsPage::displayCategory() const
     return QCoreApplication::translate("Locator", Locator::Constants::LOCATOR_TR_CATEGORY);
 }
 
+QIcon SettingsPage::categoryIcon() const
+{
+    return QIcon(); // TODO: Icon for Locator
+}
+
 QWidget *SettingsPage::createPage(QWidget *parent)
 {
 
diff --git a/src/plugins/locator/settingspage.h b/src/plugins/locator/settingspage.h
index 26d44e8b519625ad1f5d9443560ce4071866591b..e89b044edb7f610ae45b37317cec79e05ddba212 100644
--- a/src/plugins/locator/settingspage.h
+++ b/src/plugins/locator/settingspage.h
@@ -59,6 +59,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/mercurial/optionspage.cpp b/src/plugins/mercurial/optionspage.cpp
index 118c7bb60f946f6c1e4fefea8b3c95e080855716..8702830a900e377ba535f469b1bba166c931b09f 100644
--- a/src/plugins/mercurial/optionspage.cpp
+++ b/src/plugins/mercurial/optionspage.cpp
@@ -107,6 +107,11 @@ QString OptionsPage::displayCategory() const
     return QCoreApplication::translate("VCSBase", VCSBase::Constants::VCS_SETTINGS_TR_CATEGORY);
 }
 
+QIcon OptionsPage::categoryIcon() const
+{
+    return QIcon(); // TODO: Icon for Version Control
+}
+
 QWidget *OptionsPage::createPage(QWidget *parent)
 {
     if (!optionsPageWidget)
diff --git a/src/plugins/mercurial/optionspage.h b/src/plugins/mercurial/optionspage.h
index 8f0fcd3b86d0b822901161c5d5ed9be8cc4ef29d..821fa13703ceb6b962a3802481e7561544b51476 100644
--- a/src/plugins/mercurial/optionspage.h
+++ b/src/plugins/mercurial/optionspage.h
@@ -67,6 +67,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/perforce/settingspage.cpp b/src/plugins/perforce/settingspage.cpp
index 7eea709afa369dc3e4eb49325a72c9d5a7c2a829..bb3d6dfdab8eef8a93e52d564590663fcc4281d4 100644
--- a/src/plugins/perforce/settingspage.cpp
+++ b/src/plugins/perforce/settingspage.cpp
@@ -146,6 +146,11 @@ QString SettingsPage::displayCategory() const
     return QCoreApplication::translate("VCSBase", VCSBase::Constants::VCS_SETTINGS_TR_CATEGORY);
 }
 
+QIcon SettingsPage::categoryIcon() const
+{
+    return QIcon(); // TODO: Icon for Version Control
+}
+
 QWidget *SettingsPage::createPage(QWidget *parent)
 {
     m_widget = new SettingsPageWidget(parent);
diff --git a/src/plugins/perforce/settingspage.h b/src/plugins/perforce/settingspage.h
index f49c933ec60b7e99aa974289f173b463f05d6690..6d10556c68e11064106aa0e3ceb03b841b7e8568 100644
--- a/src/plugins/perforce/settingspage.h
+++ b/src/plugins/perforce/settingspage.h
@@ -77,6 +77,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/projectexplorer/projectexplorerconstants.h b/src/plugins/projectexplorer/projectexplorerconstants.h
index 1dd417d714540a10e0e32378be2f549ed9735e68..fa57502a13adf2111f09c27c1bf7f6cdf7d089de 100644
--- a/src/plugins/projectexplorer/projectexplorerconstants.h
+++ b/src/plugins/projectexplorer/projectexplorerconstants.h
@@ -187,6 +187,7 @@ const char * const RESOURCE_MIMETYPE = "application/vnd.nokia.xml.qt.resource";
 
 // settings page
 const char * const PROJECTEXPLORER_SETTINGS_CATEGORY  = "K.ProjectExplorer";
+const char * const PROJECTEXPLORER_SETTINGS_CATEGORY_ICON  = ":/core/images/category_project.png";
 const char * const PROJECTEXPLORER_SETTINGS_ID = "ProjectExplorer.ProjectExplorer";
 
 // task categories
diff --git a/src/plugins/projectexplorer/projectexplorersettingspage.cpp b/src/plugins/projectexplorer/projectexplorersettingspage.cpp
index d7fc674585ab7ad37041d863f2bde9fb321ac51f..32000e80642325f2eb44b3c9b2f7592c4652b27b 100644
--- a/src/plugins/projectexplorer/projectexplorersettingspage.cpp
+++ b/src/plugins/projectexplorer/projectexplorersettingspage.cpp
@@ -137,6 +137,11 @@ QString ProjectExplorerSettingsPage::displayCategory() const
     return tr("Projects");
 }
 
+QIcon ProjectExplorerSettingsPage::categoryIcon() const
+{
+    return QIcon(Constants::PROJECTEXPLORER_SETTINGS_CATEGORY_ICON);
+}
+
 QWidget *ProjectExplorerSettingsPage::createPage(QWidget *parent)
 {
     m_widget = new ProjectExplorerSettingsWidget(parent);
@@ -169,6 +174,6 @@ bool ProjectExplorerSettingsPage::matches(const QString &s) const
     return m_searchKeywords.contains(s, Qt::CaseInsensitive);
 }
 
-}
-}
+} // namespace Internal
+} // namespace ProjectExplorer
 
diff --git a/src/plugins/projectexplorer/projectexplorersettingspage.h b/src/plugins/projectexplorer/projectexplorersettingspage.h
index 417873c4596367820c396ce856c506e02e2053c5..7026a8f8cebe6972294ec1e3e3173b85d9756342 100644
--- a/src/plugins/projectexplorer/projectexplorersettingspage.h
+++ b/src/plugins/projectexplorer/projectexplorersettingspage.h
@@ -75,6 +75,7 @@ public:
     virtual QString displayName() const;
     virtual QString category() const;
     virtual QString displayCategory() const;
+    virtual QIcon categoryIcon() const;
 
     virtual QWidget *createPage(QWidget *parent);
     virtual void apply();
diff --git a/src/plugins/qmldesigner/settingspage.cpp b/src/plugins/qmldesigner/settingspage.cpp
index b10dbf8858101467c4ea5a576a187ff66784e4b7..3ee1744fece2333d03d68416fafdfd3be93bdcae 100644
--- a/src/plugins/qmldesigner/settingspage.cpp
+++ b/src/plugins/qmldesigner/settingspage.cpp
@@ -102,6 +102,11 @@ QString SettingsPage::displayCategory() const
     return QCoreApplication::translate("QML", "QML");
 }
 
+QIcon SettingsPage::categoryIcon() const
+{
+    return QIcon(); // TODO: Icon for QML or move into other category (Designer?)
+}
+
 QWidget *SettingsPage::createPage(QWidget *parent)
 {
     m_widget = new SettingsPageWidget(parent);
diff --git a/src/plugins/qmldesigner/settingspage.h b/src/plugins/qmldesigner/settingspage.h
index 369d8f03d394e121f630f96e6073ec67db64ebcb..66fa5da9d5976a7d9d82090bc58a66a480e4e351 100644
--- a/src/plugins/qmldesigner/settingspage.h
+++ b/src/plugins/qmldesigner/settingspage.h
@@ -74,6 +74,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosettingspage.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemosettingspage.cpp
index 253ae22ab28d161a7810862e7941d24c7c083dfe..404e8c86ed341a48ce0e1b681c98d48571ceb9ee 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemosettingspage.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemosettingspage.cpp
@@ -80,6 +80,11 @@ QString MaemoSettingsPage::displayCategory() const
         Constants::QT_SETTINGS_CATEGORY);
 }
 
+QIcon MaemoSettingsPage::categoryIcon() const
+{
+    return QIcon(QLatin1String(Constants::QT_SETTINGS_CATEGORY_ICON));
+}
+
 QWidget *MaemoSettingsPage::createPage(QWidget *parent)
 {
     m_widget = new MaemoSettingsWidget(parent);
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosettingspage.h b/src/plugins/qt4projectmanager/qt-maemo/maemosettingspage.h
index d834a8049be7739d982bd43f6a5724cd28adc7d5..e325134d3cb6e05d4553e89c6a9f13a6a7da09e8 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemosettingspage.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemosettingspage.h
@@ -60,6 +60,7 @@ public:
     virtual QString displayName() const;
     virtual QString category() const;
     virtual QString displayCategory() const;
+    virtual QIcon categoryIcon() const;
     virtual QWidget *createPage(QWidget *parent);
     virtual void apply();
     virtual void finish();
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicespreferencepane.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicespreferencepane.cpp
index b04bedcebe2d45a123638345cd3d627e8b558707..db5b54c1d5028cfc36819427896c361a022616f1 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicespreferencepane.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicespreferencepane.cpp
@@ -129,6 +129,11 @@ QString S60DevicesPreferencePane::displayCategory() const
     return QCoreApplication::translate("Qt4ProjectManager", Constants::QT_SETTINGS_CATEGORY);
 }
 
+QIcon S60DevicesPreferencePane::categoryIcon() const
+{
+    return QIcon(Constants::QT_SETTINGS_CATEGORY_ICON);
+}
+
 QWidget *S60DevicesPreferencePane::createPage(QWidget *parent)
 {
     if (m_widget)
@@ -144,5 +149,3 @@ void S60DevicesPreferencePane::apply()
 void S60DevicesPreferencePane::finish()
 {
 }
-
-
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicespreferencepane.h b/src/plugins/qt4projectmanager/qt-s60/s60devicespreferencepane.h
index b1bb9496c7bc692f64d146836ada18835cecfeef..312c1efb9065a86ad50828b451c8f955447a006b 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicespreferencepane.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicespreferencepane.h
@@ -62,7 +62,8 @@ private:
     S60Devices *m_devices;
 };
 
-class S60DevicesPreferencePane : public Core::IOptionsPage {
+class S60DevicesPreferencePane : public Core::IOptionsPage
+{
     Q_OBJECT
 public:
     S60DevicesPreferencePane(S60Devices *devices, QObject *parent = 0);
@@ -72,6 +73,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h b/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h
index ef8cc3a06723dfd7e60e10c373ba93e0f32d56bd..5e84afd49e85a4ab8be5308c50b3a552a84fc29b 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h
@@ -76,6 +76,7 @@ const char * const DEPLOYHELPERRUNSTEP = "trolltech.qt4projectmanager.deployhelp
 
 //Qt4 settings pages
 const char * const QT_SETTINGS_CATEGORY       = "L.Qt4";
+const char * const QT_SETTINGS_CATEGORY_ICON  = ":/core/images/category_qt.png";
 const char * const QT_SETTINGS_TR_CATEGORY    = QT_TRANSLATE_NOOP("Qt4ProjectManager", "Qt4");
 const char * const QTVERSION_SETTINGS_PAGE_ID = "Qt Versions";
 const char * const QTVERSION_SETTINGS_PAGE_NAME = QT_TRANSLATE_NOOP("Qt4ProjectManager", "Qt Versions");
diff --git a/src/plugins/qt4projectmanager/qtoptionspage.cpp b/src/plugins/qt4projectmanager/qtoptionspage.cpp
index b620910c5f23cabf1afa0396ecfb80d4de7f6dce..9d316c639e91792c11fc06b625ac1676726a2431 100644
--- a/src/plugins/qt4projectmanager/qtoptionspage.cpp
+++ b/src/plugins/qt4projectmanager/qtoptionspage.cpp
@@ -106,6 +106,11 @@ QString QtOptionsPage::displayCategory() const
     return QCoreApplication::translate("Qt4ProjectManager", Constants::QT_SETTINGS_TR_CATEGORY);
 }
 
+QIcon QtOptionsPage::categoryIcon() const
+{
+    return QIcon(QLatin1String(Constants::QT_SETTINGS_CATEGORY_ICON));
+}
+
 QWidget *QtOptionsPage::createPage(QWidget *parent)
 {
     QtVersionManager *vm = QtVersionManager::instance();
diff --git a/src/plugins/qt4projectmanager/qtoptionspage.h b/src/plugins/qt4projectmanager/qtoptionspage.h
index 3965e7b42476378e06350e0fc7a1a8281f7ced97..517d0a28524476cdc07bcde903a08613a104f2f4 100644
--- a/src/plugins/qt4projectmanager/qtoptionspage.h
+++ b/src/plugins/qt4projectmanager/qtoptionspage.h
@@ -135,6 +135,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
     QWidget *createPage(QWidget *parent);
     void apply();
     void finish() { }
diff --git a/src/plugins/subversion/settingspage.cpp b/src/plugins/subversion/settingspage.cpp
index 98f45069b6981e38c3c439d05e87b8884cbb0016..36145ccb5a7bdaf7c10c218d2d4732ee62a90486 100644
--- a/src/plugins/subversion/settingspage.cpp
+++ b/src/plugins/subversion/settingspage.cpp
@@ -116,6 +116,11 @@ QString SettingsPage::displayCategory() const
     return QCoreApplication::translate("VCSBase", VCSBase::Constants::VCS_SETTINGS_TR_CATEGORY);
 }
 
+QIcon SettingsPage::categoryIcon() const
+{
+    return QIcon(); // TODO: Icon for Version Control
+}
+
 QWidget *SettingsPage::createPage(QWidget *parent)
 {
     m_widget = new SettingsPageWidget(parent);
diff --git a/src/plugins/subversion/settingspage.h b/src/plugins/subversion/settingspage.h
index 72aaa8e8287bc36c1b60813dcf3540863c74f986..cdbf809536d1e541d78699bb152104a3a8fc933a 100644
--- a/src/plugins/subversion/settingspage.h
+++ b/src/plugins/subversion/settingspage.h
@@ -73,6 +73,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/texteditor/behaviorsettingspage.cpp b/src/plugins/texteditor/behaviorsettingspage.cpp
index 711135510575c8e1022c925f88223317f4f0fb12..f49abc713d23a073c5f5e1293f5d0164e3b46d80 100644
--- a/src/plugins/texteditor/behaviorsettingspage.cpp
+++ b/src/plugins/texteditor/behaviorsettingspage.cpp
@@ -98,6 +98,11 @@ QString BehaviorSettingsPage::displayCategory() const
     return m_d->m_parameters.displayCategory;
 }
 
+QIcon BehaviorSettingsPage::categoryIcon() const
+{
+    return m_d->m_parameters.categoryIcon;
+}
+
 QWidget *BehaviorSettingsPage::createPage(QWidget *parent)
 {
     QWidget *w = new QWidget(parent);
diff --git a/src/plugins/texteditor/behaviorsettingspage.h b/src/plugins/texteditor/behaviorsettingspage.h
index 53a46a2ef435f97602d19f05aadbb5fe8f9578ff..71c9c6a5ec635a22c30ebd80e621a451c45e2ed0 100644
--- a/src/plugins/texteditor/behaviorsettingspage.h
+++ b/src/plugins/texteditor/behaviorsettingspage.h
@@ -48,6 +48,7 @@ struct BehaviorSettingsPageParameters
     QString displayName;
     QString category;
     QString displayCategory;
+    QIcon categoryIcon;
     QString settingsPrefix;
 };
 
@@ -64,6 +65,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/texteditor/displaysettingspage.cpp b/src/plugins/texteditor/displaysettingspage.cpp
index 6d002a857b4bfe1e22597faf3ea61423885de8fe..86551c337d30920a0a3850b566677354c7ef8a85 100644
--- a/src/plugins/texteditor/displaysettingspage.cpp
+++ b/src/plugins/texteditor/displaysettingspage.cpp
@@ -89,6 +89,11 @@ QString DisplaySettingsPage::displayCategory() const
     return m_d->m_parameters.displayCategory;
 }
 
+QIcon DisplaySettingsPage::categoryIcon() const
+{
+    return m_d->m_parameters.categoryIcon;
+}
+
 QWidget *DisplaySettingsPage::createPage(QWidget *parent)
 {
     QWidget *w = new QWidget(parent);
diff --git a/src/plugins/texteditor/displaysettingspage.h b/src/plugins/texteditor/displaysettingspage.h
index b1099ea79f76750aa23612da6334cb610dca6e4d..dce289ad10b9cb0026b515b1e71b304fa5aa9d02 100644
--- a/src/plugins/texteditor/displaysettingspage.h
+++ b/src/plugins/texteditor/displaysettingspage.h
@@ -46,6 +46,7 @@ struct DisplaySettingsPageParameters
     QString displayName;
     QString category;
     QString displayCategory;
+    QIcon categoryIcon;
     QString settingsPrefix;
 };
 
@@ -62,6 +63,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/texteditor/fontsettingspage.cpp b/src/plugins/texteditor/fontsettingspage.cpp
index d046592632fbc721f96947788640e8d4bf461739..63dd9292cc878a9e8e3a533cb50ef888baab2c90 100644
--- a/src/plugins/texteditor/fontsettingspage.cpp
+++ b/src/plugins/texteditor/fontsettingspage.cpp
@@ -346,6 +346,11 @@ QString FontSettingsPage::displayCategory() const
     return d_ptr->m_displayCategory;
 }
 
+QIcon FontSettingsPage::categoryIcon() const
+{
+    return QIcon(QLatin1String(Constants::TEXT_EDITOR_SETTINGS_CATEGORY_ICON));
+}
+
 QWidget *FontSettingsPage::createPage(QWidget *parent)
 {
     QWidget *w = new QWidget(parent);
diff --git a/src/plugins/texteditor/fontsettingspage.h b/src/plugins/texteditor/fontsettingspage.h
index 0735e774443fa9d2c0c0c0b996939f6991fb975c..9f84a0c9ecfbc9ae979ba45808dc68413d48b431 100644
--- a/src/plugins/texteditor/fontsettingspage.h
+++ b/src/plugins/texteditor/fontsettingspage.h
@@ -94,6 +94,7 @@ public:
     QString displayName() const;
     QString category() const;
     QString displayCategory() const;
+    QIcon categoryIcon() const;
 
     QWidget *createPage(QWidget *parent);
     void apply();
diff --git a/src/plugins/texteditor/texteditorconstants.h b/src/plugins/texteditor/texteditorconstants.h
index e101842fd56eea80308b40fe426e6fec4f1252fc..7fc41a9f888c53c233508d1b525242c649e86932 100644
--- a/src/plugins/texteditor/texteditorconstants.h
+++ b/src/plugins/texteditor/texteditorconstants.h
@@ -107,6 +107,7 @@ const char * const C_DIFF_FILE           = "DiffFile";
 const char * const C_DIFF_LOCATION       = "DiffLocation";
 
 const char * const TEXT_EDITOR_SETTINGS_CATEGORY = "C.TextEditor";
+const char * const TEXT_EDITOR_SETTINGS_CATEGORY_ICON = ":/core/images/category_texteditor.png";
 const char * const TEXT_EDITOR_SETTINGS_TR_CATEGORY = QT_TRANSLATE_NOOP("TextEditor", "Text Editor");
 
 } // namespace Constants
diff --git a/src/plugins/texteditor/texteditorsettings.cpp b/src/plugins/texteditor/texteditorsettings.cpp
index 44316736daf707cbc0eb9c5c74a423378093a452..3ca0410e33aeeb2a0383257c0345f07b5919e6e2 100644
--- a/src/plugins/texteditor/texteditorsettings.cpp
+++ b/src/plugins/texteditor/texteditorsettings.cpp
@@ -104,6 +104,7 @@ TextEditorSettings::TextEditorSettings(QObject *parent)
 
     const QString category = QLatin1String(Constants::TEXT_EDITOR_SETTINGS_CATEGORY);
     const QString displayCategory = QCoreApplication::translate("TextEditor", Constants::TEXT_EDITOR_SETTINGS_TR_CATEGORY);
+    const QIcon categoryIcon = QIcon(QLatin1String(Constants::TEXT_EDITOR_SETTINGS_CATEGORY_ICON));
 
     m_fontSettingsPage = new FontSettingsPage(formatDescriptions,
                                               QLatin1String("A.FontSettings"),
@@ -116,6 +117,7 @@ TextEditorSettings::TextEditorSettings(QObject *parent)
     behaviorSettingsPageParameters.displayName = tr("Behavior");
     behaviorSettingsPageParameters.category = category;
     behaviorSettingsPageParameters.displayCategory = displayCategory;
+    behaviorSettingsPageParameters.categoryIcon = categoryIcon;
     behaviorSettingsPageParameters.settingsPrefix = QLatin1String("text");
     m_behaviorSettingsPage = new BehaviorSettingsPage(behaviorSettingsPageParameters, this);
     pm->addObject(m_behaviorSettingsPage);
@@ -123,8 +125,9 @@ TextEditorSettings::TextEditorSettings(QObject *parent)
     TextEditor::DisplaySettingsPageParameters displaySettingsPageParameters;
     displaySettingsPageParameters.id = QLatin1String("D.DisplaySettings"),
     displaySettingsPageParameters.displayName = tr("Display");
-    displaySettingsPageParameters.category = category;;
+    displaySettingsPageParameters.category = category;
     displaySettingsPageParameters.displayCategory = displayCategory;
+    displaySettingsPageParameters.categoryIcon = categoryIcon;
     displaySettingsPageParameters.settingsPrefix = QLatin1String("text");
     m_displaySettingsPage = new DisplaySettingsPage(displaySettingsPageParameters, this);
     pm->addObject(m_displaySettingsPage);
diff --git a/src/plugins/vcsbase/vcsbasesettingspage.cpp b/src/plugins/vcsbase/vcsbasesettingspage.cpp
index 1c038926ccca2c0673caeb1fe8e7acf98eca57cd..5b52fbe20e3052e50c590a9505d80aac571192ae 100644
--- a/src/plugins/vcsbase/vcsbasesettingspage.cpp
+++ b/src/plugins/vcsbase/vcsbasesettingspage.cpp
@@ -127,6 +127,11 @@ QString VCSBaseSettingsPage::displayCategory() const
     return QCoreApplication::translate("VCSBase", Constants::VCS_SETTINGS_TR_CATEGORY);
 }
 
+QIcon VCSBaseSettingsPage::categoryIcon() const
+{
+    return QIcon(); // TODO: Icon for Version Control
+}
+
 QWidget *VCSBaseSettingsPage::createPage(QWidget *parent)
 {
     m_widget = new VCSBaseSettingsWidget(parent);
diff --git a/src/plugins/vcsbase/vcsbasesettingspage.h b/src/plugins/vcsbase/vcsbasesettingspage.h
index af47f60d1fc0798d1de7f79db84f39af0fde5be3..5828b5bf8847be14eb6afa1aedafb5477d77ae73 100644
--- a/src/plugins/vcsbase/vcsbasesettingspage.h
+++ b/src/plugins/vcsbase/vcsbasesettingspage.h
@@ -70,6 +70,7 @@ public:
     virtual QString displayName() const;
     virtual QString category() const;
     virtual QString displayCategory() const;
+    virtual QIcon categoryIcon() const;
 
     virtual QWidget *createPage(QWidget *parent);
     virtual void apply();