diff --git a/src/gui/image/image.pri b/src/gui/image/image.pri
index 737b7fcbd468bce65b5d6b2f0e0e197c34fbbf18..6b306ddaad4f6abc1244d4facf233a8b691e123c 100644
--- a/src/gui/image/image.pri
+++ b/src/gui/image/image.pri
@@ -23,6 +23,11 @@ HEADERS += \
         image/qpixmapcache_p.h \
         image/qplatformpixmap.h \
         image/qimagepixmapcleanuphooks_p.h \
+        image/qicon.h \
+        image/qicon_p.h \
+        image/qiconloader_p.h \
+        image/qiconengine.h \
+        image/qiconengineplugin.h \
 
 SOURCES += \
         image/qbitmap.cpp \
@@ -40,7 +45,12 @@ SOURCES += \
         image/qpixmap_raster.cpp \
         image/qpixmap_blitter.cpp \
         image/qnativeimage.cpp \
-        image/qimagepixmapcleanuphooks.cpp
+        image/qimagepixmapcleanuphooks.cpp \
+        image/qicon.cpp \
+        image/qiconloader.cpp \
+        image/qiconengine.cpp \
+        image/qiconengineplugin.cpp \
+
 
 win32: SOURCES += image/qpixmap_win.cpp
 
diff --git a/src/widgets/kernel/qicon.cpp b/src/gui/image/qicon.cpp
similarity index 95%
rename from src/widgets/kernel/qicon.cpp
rename to src/gui/image/qicon.cpp
index 448b6a8cfd208befbf656c4564c488499ec17e41..c2139c333695cd3ff171843d7518b4524804f207 100644
--- a/src/widgets/kernel/qicon.cpp
+++ b/src/gui/image/qicon.cpp
@@ -45,15 +45,13 @@
 #include "qiconengineplugin.h"
 #include "private/qfactoryloader_p.h"
 #include "private/qiconloader_p.h"
-#include "qstyleoption.h"
 #include "qpainter.h"
 #include "qfileinfo.h"
-#include "qstyle.h"
 #include "qpixmapcache.h"
 #include "qvariant.h"
 #include "qcache.h"
 #include "qdebug.h"
-#include "qapplication.h"
+#include "qpalette.h"
 
 #ifdef Q_WS_MAC
 #include <private/qt_mac_p.h>
@@ -61,6 +59,7 @@
 #endif
 
 #include "private/qhexstring_p.h"
+#include "private/qguiapplication_p.h"
 
 #ifndef QT_NO_ICON
 QT_BEGIN_NAMESPACE
@@ -265,11 +264,10 @@ QPixmap QPixmapIconEngine::pixmap(const QSize &size, QIcon::Mode mode, QIcon::St
     if (!actualSize.isNull() && (actualSize.width() > size.width() || actualSize.height() > size.height()))
         actualSize.scale(size, Qt::KeepAspectRatio);
 
-    // #### Qt5 no idea what this really does, but we need to remove the QApp and style references
     QString key = QLatin1String("qt_")
                   % HexString<quint64>(pm.cacheKey())
                   % HexString<uint>(pe->mode)
-                  % HexString<quint64>(QApplication::palette().cacheKey())
+                  % HexString<quint64>(QGuiApplication::palette().cacheKey())
                   % HexString<uint>(actualSize.width())
                   % HexString<uint>(actualSize.height());
 
@@ -277,9 +275,9 @@ QPixmap QPixmapIconEngine::pixmap(const QSize &size, QIcon::Mode mode, QIcon::St
         if (QPixmapCache::find(key % HexString<uint>(mode), pm))
             return pm; // horray
         if (QPixmapCache::find(key % HexString<uint>(QIcon::Normal), pm)) {
-            QStyleOption opt(0);
-            opt.palette = QApplication::palette();
-            QPixmap active = QApplication::style()->generatedIconPixmap(QIcon::Active, pm, &opt);
+            QPixmap active = pm;
+            if (QGuiApplication *guiApp = qobject_cast<QGuiApplication *>(qApp))
+                active = static_cast<QGuiApplicationPrivate*>(QObjectPrivate::get(guiApp))->applyQIconStyleHelper(QIcon::Active, pm);
             if (pm.cacheKey() == active.cacheKey())
                 return pm;
         }
@@ -289,9 +287,9 @@ QPixmap QPixmapIconEngine::pixmap(const QSize &size, QIcon::Mode mode, QIcon::St
         if (pm.size() != actualSize)
             pm = pm.scaled(actualSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
         if (pe->mode != mode && mode != QIcon::Normal) {
-            QStyleOption opt(0);
-            opt.palette = QApplication::palette();
-            QPixmap generated = QApplication::style()->generatedIconPixmap(mode, pm, &opt);
+            QPixmap generated = pm;
+            if (QGuiApplication *guiApp = qobject_cast<QGuiApplication *>(qApp))
+                generated = static_cast<QGuiApplicationPrivate*>(QObjectPrivate::get(guiApp))->applyQIconStyleHelper(mode, pm);
             if (!generated.isNull())
                 pm = generated;
         }
@@ -457,7 +455,7 @@ Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
 
   \ingroup painting
   \ingroup shared
-  \inmodule QtWidgets
+  \inmodule QtGui
 
   A QIcon can generate smaller, larger, active, and disabled pixmaps
   from the set of pixmaps it is given. Such pixmaps are used by Qt
@@ -710,7 +708,24 @@ void QIcon::paint(QPainter *painter, const QRect &rect, Qt::Alignment alignment,
 {
     if (!d || !painter)
         return;
-    QRect alignedRect = QStyle::alignedRect(painter->layoutDirection(), alignment, d->engine->actualSize(rect.size(), mode, state), rect);
+
+    // Copy of QStyle::alignedRect
+    const QSize size = d->engine->actualSize(rect.size(), mode, state);
+    alignment = QGuiApplicationPrivate::visualAlignment(painter->layoutDirection(), alignment);
+    int x = rect.x();
+    int y = rect.y();
+    int w = size.width();
+    int h = size.height();
+    if ((alignment & Qt::AlignVCenter) == Qt::AlignVCenter)
+        y += rect.size().height()/2 - h/2;
+    else if ((alignment & Qt::AlignBottom) == Qt::AlignBottom)
+        y += rect.size().height() - h;
+    if ((alignment & Qt::AlignRight) == Qt::AlignRight)
+        x += rect.size().width() - w;
+    else if ((alignment & Qt::AlignHCenter) == Qt::AlignHCenter)
+        x += rect.size().width()/2 - w/2;
+    QRect alignedRect(x, y, w, h);
+
     d->engine->paint(painter, alignedRect, mode, state);
 }
 
diff --git a/src/widgets/kernel/qicon.h b/src/gui/image/qicon.h
similarity index 92%
rename from src/widgets/kernel/qicon.h
rename to src/gui/image/qicon.h
index c6e07ba3e256938f330f6338931d6c0af52e6610..264b672c8c05aeeb96417060b50238468b61c9ac 100644
--- a/src/widgets/kernel/qicon.h
+++ b/src/gui/image/qicon.h
@@ -55,7 +55,7 @@ QT_BEGIN_NAMESPACE
 class QIconPrivate;
 class QIconEngine;
 
-class Q_WIDGETS_EXPORT QIcon
+class Q_GUI_EXPORT QIcon
 {
 public:
     enum Mode { Normal, Disabled, Active, Selected };
@@ -118,8 +118,8 @@ public:
 private:
     QIconPrivate *d;
 #if !defined(QT_NO_DATASTREAM)
-    friend Q_WIDGETS_EXPORT QDataStream &operator<<(QDataStream &, const QIcon &);
-    friend Q_WIDGETS_EXPORT QDataStream &operator>>(QDataStream &, QIcon &);
+    friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QIcon &);
+    friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QIcon &);
 #endif
 
 public:
@@ -131,12 +131,12 @@ Q_DECLARE_SHARED(QIcon)
 Q_DECLARE_TYPEINFO(QIcon, Q_MOVABLE_TYPE);
 
 #if !defined(QT_NO_DATASTREAM)
-Q_WIDGETS_EXPORT QDataStream &operator<<(QDataStream &, const QIcon &);
-Q_WIDGETS_EXPORT QDataStream &operator>>(QDataStream &, QIcon &);
+Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QIcon &);
+Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QIcon &);
 #endif
 
 #ifndef QT_NO_DEBUG_STREAM
-Q_WIDGETS_EXPORT QDebug operator<<(QDebug dbg, const QIcon &);
+Q_GUI_EXPORT QDebug operator<<(QDebug dbg, const QIcon &);
 #endif
 
 QT_END_NAMESPACE
diff --git a/src/widgets/kernel/qicon_p.h b/src/gui/image/qicon_p.h
similarity index 98%
rename from src/widgets/kernel/qicon_p.h
rename to src/gui/image/qicon_p.h
index 37c4b7cb1f44506a7466d3eb94ff73c704a483a5..b8b1f001fe843d32d8f5f908c071ed29d81b10bf 100644
--- a/src/widgets/kernel/qicon_p.h
+++ b/src/gui/image/qicon_p.h
@@ -57,8 +57,8 @@
 #include <QtCore/qsize.h>
 #include <QtCore/qlist.h>
 #include <QtGui/qpixmap.h>
-#include <QtWidgets/qicon.h>
-#include <QtWidgets/qiconengine.h>
+#include <QtGui/qicon.h>
+#include <QtGui/qiconengine.h>
 
 #ifndef QT_NO_ICON
 QT_BEGIN_NAMESPACE
diff --git a/src/widgets/kernel/qiconengine.cpp b/src/gui/image/qiconengine.cpp
similarity index 99%
rename from src/widgets/kernel/qiconengine.cpp
rename to src/gui/image/qiconengine.cpp
index 0a2d92ed69901bf1729920a77f447c22df4ae835..2b7fdb9bdc7b46b96b3d1fcd5a244a1ef1fd7dd2 100644
--- a/src/widgets/kernel/qiconengine.cpp
+++ b/src/gui/image/qiconengine.cpp
@@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE
   \brief The QIconEngine class provides an abstract base class for QIcon renderers.
 
   \ingroup painting
-  \inmodule QtWidgets
+  \inmodule QtGui
 
   An icon engine provides the rendering functions for a QIcon. Each icon has a
   corresponding icon engine that is responsible for drawing the icon with a
@@ -158,7 +158,7 @@ void QIconEngine::addFile(const QString &/*fileName*/, const QSize &/*size*/, QI
     \class QIconEngine::AvailableSizesArgument
     \since 4.5
 
-    \inmodule QtWidgets
+    \inmodule QtGui
 
     This struct represents arguments to virtual_hook() function when
     \a id parameter is QIconEngine::AvailableSizesHook.
diff --git a/src/widgets/kernel/qiconengine.h b/src/gui/image/qiconengine.h
similarity index 97%
rename from src/widgets/kernel/qiconengine.h
rename to src/gui/image/qiconengine.h
index acadef97c336e87456c0a61cf6e5986f7a27e191..e47f86713a18b1f84973ea957987ea425131f893 100644
--- a/src/widgets/kernel/qiconengine.h
+++ b/src/gui/image/qiconengine.h
@@ -44,14 +44,14 @@
 
 #include <QtCore/qglobal.h>
 #include <QtCore/qlist.h>
-#include <QtWidgets/qicon.h>
+#include <QtGui/qicon.h>
 
 QT_BEGIN_HEADER
 
 QT_BEGIN_NAMESPACE
 
 
-class Q_WIDGETS_EXPORT QIconEngine
+class Q_GUI_EXPORT QIconEngine
 {
 public:
     virtual ~QIconEngine();
diff --git a/src/widgets/kernel/qiconengineplugin.cpp b/src/gui/image/qiconengineplugin.cpp
similarity index 99%
rename from src/widgets/kernel/qiconengineplugin.cpp
rename to src/gui/image/qiconengineplugin.cpp
index 26c9e7890a477c4947a1b10e91f973a17fcd104d..29953a468e8c76c186ab82e5081f3d5adea0a1f5 100644
--- a/src/widgets/kernel/qiconengineplugin.cpp
+++ b/src/gui/image/qiconengineplugin.cpp
@@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE
     \brief The QIconEnginePlugin class provides an abstract base for custom QIconEngine plugins.
 
     \ingroup plugins
-    \inmodule QtWidgets
+    \inmodule QtGui
 
     \b {Use QIconEnginePluginV2 instead.}
 
diff --git a/src/widgets/kernel/qiconengineplugin.h b/src/gui/image/qiconengineplugin.h
similarity index 93%
rename from src/widgets/kernel/qiconengineplugin.h
rename to src/gui/image/qiconengineplugin.h
index a30c5475ba6fcfbd78cddb8a615f1e76c3dca949..93334006094b231b21d579e85076b47c00b5ad18 100644
--- a/src/widgets/kernel/qiconengineplugin.h
+++ b/src/gui/image/qiconengineplugin.h
@@ -52,7 +52,7 @@ QT_BEGIN_NAMESPACE
 
 class QIconEngine;
 
-struct Q_WIDGETS_EXPORT QIconEngineFactoryInterface : public QFactoryInterface
+struct Q_GUI_EXPORT QIconEngineFactoryInterface : public QFactoryInterface
 {
     virtual QIconEngine *create(const QString &filename = QString()) = 0;
 };
@@ -61,7 +61,7 @@ struct Q_WIDGETS_EXPORT QIconEngineFactoryInterface : public QFactoryInterface
     "org.qt-project.Qt.QIconEngineFactoryInterface"
 Q_DECLARE_INTERFACE(QIconEngineFactoryInterface, QIconEngineFactoryInterface_iid)
 
-class Q_WIDGETS_EXPORT QIconEnginePlugin : public QObject, public QIconEngineFactoryInterface
+class Q_GUI_EXPORT QIconEnginePlugin : public QObject, public QIconEngineFactoryInterface
 {
     Q_OBJECT
     Q_INTERFACES(QIconEngineFactoryInterface:QFactoryInterface)
diff --git a/src/widgets/kernel/qiconloader.cpp b/src/gui/image/qiconloader.cpp
similarity index 97%
rename from src/widgets/kernel/qiconloader.cpp
rename to src/gui/image/qiconloader.cpp
index acbf7c1d074a6447b8775bb3ea4cebe1fea7b0df..71b286b2ff6d7e2ee1776169d436e4531c25805b 100644
--- a/src/widgets/kernel/qiconloader.cpp
+++ b/src/gui/image/qiconloader.cpp
@@ -43,14 +43,12 @@
 
 #include <private/qguiapplication_p.h>
 #include <private/qicon_p.h>
-#include <private/qguiapplication_p.h>
 
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QIconEnginePlugin>
+#include <QtGui/QIconEnginePlugin>
 #include <QtGui/QPixmapCache>
 #include <qpa/qplatformtheme.h>
-#include <QtWidgets/QIconEngine>
-#include <QtWidgets/QStyleOption>
+#include <QtGui/QIconEngine>
+#include <QtGui/QPalette>
 #include <QtCore/QList>
 #include <QtCore/QHash>
 #include <QtCore/QDir>
@@ -510,16 +508,16 @@ QPixmap PixmapEntry::pixmap(const QSize &size, QIcon::Mode mode, QIcon::State st
     QString key = QLatin1String("$qt_theme_")
                   % HexString<qint64>(basePixmap.cacheKey())
                   % HexString<int>(mode)
-                  % HexString<qint64>(qApp->palette().cacheKey())
+                  % HexString<qint64>(QGuiApplication::palette().cacheKey())
                   % HexString<int>(actualSize);
 
     QPixmap cachedPixmap;
     if (QPixmapCache::find(key, &cachedPixmap)) {
         return cachedPixmap;
     } else {
-        QStyleOption opt(0);
-        opt.palette = qApp->palette();
-        cachedPixmap = qApp->style()->generatedIconPixmap(mode, basePixmap, &opt);
+        cachedPixmap = basePixmap;
+        if (QGuiApplication *guiApp = qobject_cast<QGuiApplication *>(qApp))
+            cachedPixmap = static_cast<QGuiApplicationPrivate*>(QObjectPrivate::get(guiApp))->applyQIconStyleHelper(mode, basePixmap);
         QPixmapCache::insert(key, cachedPixmap);
     }
     return cachedPixmap;
diff --git a/src/widgets/kernel/qiconloader_p.h b/src/gui/image/qiconloader_p.h
similarity index 98%
rename from src/widgets/kernel/qiconloader_p.h
rename to src/gui/image/qiconloader_p.h
index 1b9043675bbb5870888f317fb4a0de9e439eb3ca..bd990d0d53b08ed5a68fd7c63ed9d2979371b421 100644
--- a/src/widgets/kernel/qiconloader_p.h
+++ b/src/gui/image/qiconloader_p.h
@@ -54,8 +54,8 @@
 // We mean it.
 //
 
-#include <QtWidgets/QIcon>
-#include <QtWidgets/QIconEngine>
+#include <QtGui/QIcon>
+#include <QtGui/QIconEngine>
 #include <QtGui/QPixmapCache>
 #include <private/qicon_p.h>
 #include <private/qfactoryloader_p.h>
@@ -153,7 +153,7 @@ private:
     bool m_valid;
 };
 
-class QIconLoader : public QObject
+class Q_GUI_EXPORT QIconLoader : public QObject
 {
 public:
     QIconLoader();
diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h
index ff1a88051c8303c5a3726862baf47e16c3d31aee..bab3ecc997c842301bcf8c4117c104c44d0a9c67 100644
--- a/src/gui/kernel/qguiapplication_p.h
+++ b/src/gui/kernel/qguiapplication_p.h
@@ -52,6 +52,7 @@
 #include <QWindowSystemInterface>
 #include "private/qwindowsysteminterface_qpa_p.h"
 #include "private/qshortcutmap_p.h"
+#include <qicon.h>
 
 QT_BEGIN_HEADER
 
@@ -213,6 +214,9 @@ public:
 
     const QDrawHelperGammaTables *gammaTables();
 
+    // hook reimplemented in QApplication to apply the QStyle function on the QIcon
+    virtual QPixmap applyQIconStyleHelper(QIcon::Mode, const QPixmap &basePixmap) const { return basePixmap; }
+
 protected:
     virtual void notifyThemeChanged();
 
diff --git a/src/testlib/qtest_gui.h b/src/testlib/qtest_gui.h
index 24abd00e0fc6910250f2b8ac4c95b55171e95640..684b876fcda8ea314916ffdb991e9bd7d71893e6 100644
--- a/src/testlib/qtest_gui.h
+++ b/src/testlib/qtest_gui.h
@@ -61,7 +61,7 @@
 #include <QtGui/qimage.h>
 
 #ifdef QT_WIDGETS_LIB
-#include <QtWidgets/qicon.h>
+#include <QtGui/qicon.h>
 #endif
 
 #if 0
diff --git a/src/widgets/dialogs/qfilesystemmodel.h b/src/widgets/dialogs/qfilesystemmodel.h
index 875044e78573da16172809dd14e09ec883eba2e1..8e1d8b973b7521fe2346c4d446f693f960297f79 100644
--- a/src/widgets/dialogs/qfilesystemmodel.h
+++ b/src/widgets/dialogs/qfilesystemmodel.h
@@ -45,7 +45,7 @@
 #include <QtCore/qabstractitemmodel.h>
 #include <QtCore/qpair.h>
 #include <QtCore/qdir.h>
-#include <QtWidgets/qicon.h>
+#include <QtGui/qicon.h>
 #include <QtCore/qdiriterator.h>
 
 QT_BEGIN_HEADER
diff --git a/src/widgets/dialogs/qmessagebox.cpp b/src/widgets/dialogs/qmessagebox.cpp
index cb32de4bca308260f08a2c1b967bd828428decb6..2b1d516ab7ca480e3faf6c35f33acaed10ba0b4f 100644
--- a/src/widgets/dialogs/qmessagebox.cpp
+++ b/src/widgets/dialogs/qmessagebox.cpp
@@ -54,7 +54,7 @@
 #include <QtWidgets/qdesktopwidget.h>
 #include <QtWidgets/qpushbutton.h>
 #include <QtGui/qaccessible.h>
-#include <QtWidgets/qicon.h>
+#include <QtGui/qicon.h>
 #include <QtGui/qtextdocument.h>
 #include <QtWidgets/qapplication.h>
 #include <QtWidgets/qtextedit.h>
diff --git a/src/widgets/itemviews/qfileiconprovider.h b/src/widgets/itemviews/qfileiconprovider.h
index 85cbf32abc76a7cfa2e29ec736cfb3ef44a1e9b5..a78ccbeda2301a31dfe04c49ad9adbd0f9fc7c05 100644
--- a/src/widgets/itemviews/qfileiconprovider.h
+++ b/src/widgets/itemviews/qfileiconprovider.h
@@ -44,7 +44,7 @@
 
 #include <QtCore/qfileinfo.h>
 #include <QtCore/qscopedpointer.h>
-#include <QtWidgets/qicon.h>
+#include <QtGui/qicon.h>
 
 QT_BEGIN_HEADER
 
diff --git a/src/widgets/itemviews/qstandarditemmodel.h b/src/widgets/itemviews/qstandarditemmodel.h
index 767665fd945e2d6669e68db400e984e0769fe89e..2f449ab97a2bd198fd34399d0e83d21c433f7bc0 100644
--- a/src/widgets/itemviews/qstandarditemmodel.h
+++ b/src/widgets/itemviews/qstandarditemmodel.h
@@ -45,7 +45,7 @@
 #include <QtCore/qabstractitemmodel.h>
 #include <QtGui/qbrush.h>
 #include <QtGui/qfont.h>
-#include <QtWidgets/qicon.h>
+#include <QtGui/qicon.h>
 #ifndef QT_NO_DATASTREAM
 #include <QtCore/qdatastream.h>
 #endif
diff --git a/src/widgets/kernel/kernel.pri b/src/widgets/kernel/kernel.pri
index 9e3d82ea1229a7c1bff079f7ec3988b4f665afa4..c4853bd369c7298a67e319e0418531370a88d7cb 100644
--- a/src/widgets/kernel/kernel.pri
+++ b/src/widgets/kernel/kernel.pri
@@ -15,11 +15,6 @@ HEADERS += \
 	kernel/qdesktopwidget.h \
 	kernel/qformlayout.h \
 	kernel/qgridlayout.h \
-        kernel/qicon.h \
-        kernel/qicon_p.h \
-        kernel/qiconloader_p.h \
-        kernel/qiconengine.h \
-        kernel/qiconengineplugin.h \
         kernel/qlayout.h \
 	kernel/qlayout_p.h \
 	kernel/qlayoutengine_p.h \
@@ -52,10 +47,6 @@ SOURCES += \
         kernel/qboxlayout.cpp \
 	kernel/qformlayout.cpp \
 	kernel/qgridlayout.cpp \
-        kernel/qicon.cpp \
-        kernel/qiconloader.cpp \
-        kernel/qiconengine.cpp \
-        kernel/qiconengineplugin.cpp \
         kernel/qlayout.cpp \
 	kernel/qlayoutengine.cpp \
 	kernel/qlayoutitem.cpp \
diff --git a/src/widgets/kernel/qaction.h b/src/widgets/kernel/qaction.h
index 485b5928b0b926dab9a2139cd77258de9191ac1f..bb7de852c1187134af7c7fbc5c36697109478578 100644
--- a/src/widgets/kernel/qaction.h
+++ b/src/widgets/kernel/qaction.h
@@ -46,7 +46,7 @@
 #include <QtCore/qstring.h>
 #include <QtWidgets/qwidget.h>
 #include <QtCore/qvariant.h>
-#include <QtWidgets/qicon.h>
+#include <QtGui/qicon.h>
 
 QT_BEGIN_HEADER
 
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index fc6768efd067f557b32ea72aa8c5ae9da89c0deb..cfad6fb5f9ba57e919dc62e324ef27ff5efdda67 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -4510,6 +4510,14 @@ QGestureManager* QGestureManager::instance()
 }
 #endif // QT_NO_GESTURES
 
+QPixmap QApplicationPrivate::applyQIconStyleHelper(QIcon::Mode mode, const QPixmap& base) const
+{
+    Q_Q(const QApplication);
+    QStyleOption opt(0);
+    opt.palette = q->palette();
+    return q->style()->generatedIconPixmap(mode, base, &opt);
+}
+
 QT_END_NAMESPACE
 
 #include "moc_qapplication.cpp"
diff --git a/src/widgets/kernel/qapplication_p.h b/src/widgets/kernel/qapplication_p.h
index 63862269d6ea4d0e4b8ec29214e1a95eda6654af..891d71a7378acd25a582d8a3dd69f95997e0f622 100644
--- a/src/widgets/kernel/qapplication_p.h
+++ b/src/widgets/kernel/qapplication_p.h
@@ -374,6 +374,7 @@ public:
                                        ulong timestamp);
     static void translateTouchCancel(QTouchDevice *device, ulong timestamp);
 
+    QPixmap applyQIconStyleHelper(QIcon::Mode mode, const QPixmap& base) const;
 private:
 #ifdef Q_WS_QWS
     QHash<const QScreen*, QRect> maxWindowRects;
diff --git a/src/widgets/styles/qstyle.h b/src/widgets/styles/qstyle.h
index aebfea3620a60197900e6c47ca87b3fe020a0dde..f56919a37fad3e838bf405f5d3e010058faf8483 100644
--- a/src/widgets/styles/qstyle.h
+++ b/src/widgets/styles/qstyle.h
@@ -45,7 +45,7 @@
 #include <QtCore/qobject.h>
 #include <QtCore/qrect.h>
 #include <QtCore/qsize.h>
-#include <QtWidgets/qicon.h>
+#include <QtGui/qicon.h>
 #include <QtGui/qpixmap.h>
 #include <QtGui/qpalette.h>
 #include <QtWidgets/qsizepolicy.h>
diff --git a/src/widgets/styles/qstyleoption.h b/src/widgets/styles/qstyleoption.h
index 588898637f033f5a50d4cc8207c4a92beba46ff7..ea039fff198e177132cbcedffca8bc10e7ac30b8 100644
--- a/src/widgets/styles/qstyleoption.h
+++ b/src/widgets/styles/qstyleoption.h
@@ -44,7 +44,7 @@
 
 #include <QtCore/qvariant.h>
 #include <QtWidgets/qabstractspinbox.h>
-#include <QtWidgets/qicon.h>
+#include <QtGui/qicon.h>
 #include <QtGui/qmatrix.h>
 #include <QtWidgets/qslider.h>
 #include <QtWidgets/qstyle.h>
diff --git a/src/widgets/util/qsystemtrayicon.h b/src/widgets/util/qsystemtrayicon.h
index 96f9a1d2f4fc8649f44ec2e083828a9f660ff370..b2ca5f0a34e495f5d87e7a94a9185d86f7902f35 100644
--- a/src/widgets/util/qsystemtrayicon.h
+++ b/src/widgets/util/qsystemtrayicon.h
@@ -46,7 +46,7 @@
 
 #ifndef QT_NO_SYSTEMTRAYICON
 
-#include <QtWidgets/qicon.h>
+#include <QtGui/qicon.h>
 
 QT_BEGIN_HEADER
 
diff --git a/src/widgets/util/qundoview.cpp b/src/widgets/util/qundoview.cpp
index 2a88b509170b224ac34a28f09d9ce0df7201ade8..e169437af3ae88322160f439d3f14da903a35f83 100644
--- a/src/widgets/util/qundoview.cpp
+++ b/src/widgets/util/qundoview.cpp
@@ -47,7 +47,7 @@
 #include "qundogroup.h"
 #include <QtCore/qabstractitemmodel.h>
 #include <QtCore/qpointer.h>
-#include <QtWidgets/qicon.h>
+#include <QtGui/qicon.h>
 #include <private/qlistview_p.h>
 
 QT_BEGIN_NAMESPACE
diff --git a/src/widgets/widgets/qabstractbutton.h b/src/widgets/widgets/qabstractbutton.h
index 37a37f6de4ad389d913d9321e904e174ac30974e..5be27a2ecbb388133ddfa17a7ed54222735ae624 100644
--- a/src/widgets/widgets/qabstractbutton.h
+++ b/src/widgets/widgets/qabstractbutton.h
@@ -42,7 +42,7 @@
 #ifndef QABSTRACTBUTTON_H
 #define QABSTRACTBUTTON_H
 
-#include <QtWidgets/qicon.h>
+#include <QtGui/qicon.h>
 #include <QtGui/qkeysequence.h>
 #include <QtWidgets/qwidget.h>
 
diff --git a/src/widgets/widgets/qmenu.h b/src/widgets/widgets/qmenu.h
index e98df595d11dcc7dab1c4228a3407eaed3a0fb1d..5f4b2138221e72f71894dbb8957c1148cb7a8e08 100644
--- a/src/widgets/widgets/qmenu.h
+++ b/src/widgets/widgets/qmenu.h
@@ -44,7 +44,7 @@
 
 #include <QtWidgets/qwidget.h>
 #include <QtCore/qstring.h>
-#include <QtWidgets/qicon.h>
+#include <QtGui/qicon.h>
 #include <QtWidgets/qaction.h>
 
 #ifdef Q_OS_WINCE
diff --git a/src/widgets/widgets/qtabwidget.h b/src/widgets/widgets/qtabwidget.h
index 4e8d4d4583a92548284a43e225fcf781d423fe51..8fc3bfa05d425d3101c92748b8590cdaddc168dc 100644
--- a/src/widgets/widgets/qtabwidget.h
+++ b/src/widgets/widgets/qtabwidget.h
@@ -43,7 +43,7 @@
 #define QTABWIDGET_H
 
 #include <QtWidgets/qwidget.h>
-#include <QtWidgets/qicon.h>
+#include <QtGui/qicon.h>
 
 QT_BEGIN_HEADER
 
diff --git a/src/widgets/widgets/qtoolbox.h b/src/widgets/widgets/qtoolbox.h
index 5732668b8f1746ccfba089dfb0bc00ee4d803bb2..42f8b01f7b328de80842b47f3f31f665944a2f27 100644
--- a/src/widgets/widgets/qtoolbox.h
+++ b/src/widgets/widgets/qtoolbox.h
@@ -43,7 +43,7 @@
 #define QTOOLBOX_H
 
 #include <QtWidgets/qframe.h>
-#include <QtWidgets/qicon.h>
+#include <QtGui/qicon.h>
 
 QT_BEGIN_HEADER
 
diff --git a/tests/auto/gui/image/image.pro b/tests/auto/gui/image/image.pro
index 5a03063f47cb398d6ee4ee542fe10097b2369fec..1ef52df4ba01133278058bf60feb1778bfe86c96 100644
--- a/tests/auto/gui/image/image.pro
+++ b/tests/auto/gui/image/image.pro
@@ -9,6 +9,7 @@ SUBDIRS=\
    qimagewriter \
    qmovie \
    qpicture \
+   qicon \
 
 !contains(QT_CONFIG, private_tests): SUBDIRS -= \
            qpixmapcache \
diff --git a/tests/auto/widgets/kernel/qicon/.gitignore b/tests/auto/gui/image/qicon/.gitignore
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/.gitignore
rename to tests/auto/gui/image/qicon/.gitignore
diff --git a/tests/auto/widgets/kernel/qicon/icons/testtheme/16x16/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/testtheme/16x16/actions/appointment-new.png
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/icons/testtheme/16x16/actions/appointment-new.png
rename to tests/auto/gui/image/qicon/icons/testtheme/16x16/actions/appointment-new.png
diff --git a/tests/auto/widgets/kernel/qicon/icons/testtheme/22x22/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/testtheme/22x22/actions/appointment-new.png
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/icons/testtheme/22x22/actions/appointment-new.png
rename to tests/auto/gui/image/qicon/icons/testtheme/22x22/actions/appointment-new.png
diff --git a/tests/auto/widgets/kernel/qicon/icons/testtheme/32x32/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/testtheme/32x32/actions/appointment-new.png
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/icons/testtheme/32x32/actions/appointment-new.png
rename to tests/auto/gui/image/qicon/icons/testtheme/32x32/actions/appointment-new.png
diff --git a/tests/auto/widgets/kernel/qicon/icons/testtheme/index.theme b/tests/auto/gui/image/qicon/icons/testtheme/index.theme
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/icons/testtheme/index.theme
rename to tests/auto/gui/image/qicon/icons/testtheme/index.theme
diff --git a/tests/auto/widgets/kernel/qicon/icons/testtheme/scalable/actions/svg-only.svg b/tests/auto/gui/image/qicon/icons/testtheme/scalable/actions/svg-only.svg
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/icons/testtheme/scalable/actions/svg-only.svg
rename to tests/auto/gui/image/qicon/icons/testtheme/scalable/actions/svg-only.svg
diff --git a/tests/auto/widgets/kernel/qicon/icons/themeparent/16x16/actions/address-book-new.png b/tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/address-book-new.png
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/icons/themeparent/16x16/actions/address-book-new.png
rename to tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/address-book-new.png
diff --git a/tests/auto/widgets/kernel/qicon/icons/themeparent/16x16/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/appointment-new.png
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/icons/themeparent/16x16/actions/appointment-new.png
rename to tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/appointment-new.png
diff --git a/tests/auto/widgets/kernel/qicon/icons/themeparent/22x22/actions/address-book-new.png b/tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/address-book-new.png
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/icons/themeparent/22x22/actions/address-book-new.png
rename to tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/address-book-new.png
diff --git a/tests/auto/widgets/kernel/qicon/icons/themeparent/22x22/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/appointment-new.png
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/icons/themeparent/22x22/actions/appointment-new.png
rename to tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/appointment-new.png
diff --git a/tests/auto/widgets/kernel/qicon/icons/themeparent/32x32/actions/address-book-new.png b/tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/address-book-new.png
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/icons/themeparent/32x32/actions/address-book-new.png
rename to tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/address-book-new.png
diff --git a/tests/auto/widgets/kernel/qicon/icons/themeparent/32x32/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/appointment-new.png
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/icons/themeparent/32x32/actions/appointment-new.png
rename to tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/appointment-new.png
diff --git a/tests/auto/widgets/kernel/qicon/icons/themeparent/index.theme b/tests/auto/gui/image/qicon/icons/themeparent/index.theme
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/icons/themeparent/index.theme
rename to tests/auto/gui/image/qicon/icons/themeparent/index.theme
diff --git a/tests/auto/widgets/kernel/qicon/icons/themeparent/scalable/actions/address-book-new.svg b/tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/address-book-new.svg
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/icons/themeparent/scalable/actions/address-book-new.svg
rename to tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/address-book-new.svg
diff --git a/tests/auto/widgets/kernel/qicon/icons/themeparent/scalable/actions/appointment-new.svg b/tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/appointment-new.svg
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/icons/themeparent/scalable/actions/appointment-new.svg
rename to tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/appointment-new.svg
diff --git a/tests/auto/widgets/kernel/qicon/image.png b/tests/auto/gui/image/qicon/image.png
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/image.png
rename to tests/auto/gui/image/qicon/image.png
diff --git a/tests/auto/widgets/kernel/qicon/qicon.pro b/tests/auto/gui/image/qicon/qicon.pro
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/qicon.pro
rename to tests/auto/gui/image/qicon/qicon.pro
diff --git a/tests/auto/widgets/kernel/qicon/rect.png b/tests/auto/gui/image/qicon/rect.png
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/rect.png
rename to tests/auto/gui/image/qicon/rect.png
diff --git a/tests/auto/widgets/kernel/qicon/tst_qicon.cpp b/tests/auto/gui/image/qicon/tst_qicon.cpp
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/tst_qicon.cpp
rename to tests/auto/gui/image/qicon/tst_qicon.cpp
diff --git a/tests/auto/widgets/kernel/qicon/tst_qicon.qrc b/tests/auto/gui/image/qicon/tst_qicon.qrc
similarity index 100%
rename from tests/auto/widgets/kernel/qicon/tst_qicon.qrc
rename to tests/auto/gui/image/qicon/tst_qicon.qrc
diff --git a/tests/auto/widgets/kernel/kernel.pro b/tests/auto/widgets/kernel/kernel.pro
index e1c245d9d10daeb3e9da27fb365a630178bcfe73..c2540ec2294b40b85713c16306ff45fd11ce0d26 100644
--- a/tests/auto/widgets/kernel/kernel.pro
+++ b/tests/auto/widgets/kernel/kernel.pro
@@ -13,7 +13,6 @@ SUBDIRS=\
    qwidget \
    qwidget_window \
    qwidgetaction \
-   qicon \
    qshortcut \
 
 SUBDIRS -= qsound