diff --git a/src/qtdesktop/qtaction.cpp b/src/qtdesktop/qtaction.cpp
index a1a93d9cbc578679ffe97e6636b0b269da7a61a4..744e1cd2eabf7a9ca3fc5763aac96cba950e1453 100644
--- a/src/qtdesktop/qtaction.cpp
+++ b/src/qtdesktop/qtaction.cpp
@@ -180,15 +180,25 @@ void QtAction::setIconSource(const QUrl &iconSource)
         return;
 
     m_iconSource = iconSource;
+    QString iconName = m_icon.name();
+    m_icon = QIcon(m_iconSource.toLocalFile());
+    if (!iconName.isEmpty())
+        m_icon = QIcon::fromTheme(iconName, m_icon);
+
     emit iconSourceChanged();
 }
 
+QString QtAction::iconName() const
+{
+    return m_icon.name();
+}
+
 void QtAction::setIconName(const QString &iconName)
 {
-    if (iconName == m_iconName)
+    if (iconName == m_icon.name())
         return;
 
-    m_iconName = iconName;
+    m_icon = QIcon::fromTheme(iconName, QIcon(m_iconSource.toLocalFile()));
     emit iconNameChanged();
 }
 
diff --git a/src/qtdesktop/qtaction_p.h b/src/qtdesktop/qtaction_p.h
index d4578367c417725690cf0aad1a00e278c82c78ef..d4db7b2e6cdd790c63ac092076dcc289fd01422f 100644
--- a/src/qtdesktop/qtaction_p.h
+++ b/src/qtdesktop/qtaction_p.h
@@ -81,7 +81,7 @@ public:
     QString mnemonic() const;
     void setMnemonic(const QString &mnemonic);
 
-    QString iconName() const { return m_iconName; }
+    QString iconName() const;
     void setIconName(const QString &iconName);
 
     QUrl iconSource() const { return m_iconSource; }
@@ -102,6 +102,9 @@ public:
     QtExclusiveGroup *exclusiveGroup() const { return m_exclusiveGroup; }
     void setExclusiveGroup(QtExclusiveGroup * arg);
 
+    QIcon icon() const { return m_icon; }
+    void setIcon(QIcon icon) { m_icon = icon; }
+
     bool event(QEvent *e);
 
 public Q_SLOTS:
@@ -126,7 +129,7 @@ Q_SIGNALS:
 private:
     QString m_text;
     QUrl m_iconSource;
-    QString m_iconName;
+    QIcon m_icon;
     bool m_enabled;
     bool m_checkable;
     bool m_checked;
diff --git a/src/qtdesktop/qtexclusivegroup_p.h b/src/qtdesktop/qtexclusivegroup_p.h
index 94db2c0a2d41f858a2bd57b0217b29d6e5d0946b..7d980bd0dfb6d2f8784468685b5dd75d5f2ce826 100644
--- a/src/qtdesktop/qtexclusivegroup_p.h
+++ b/src/qtdesktop/qtexclusivegroup_p.h
@@ -41,8 +41,8 @@
 #ifndef QTEXCLUSIVEGROUP_H
 #define QTEXCLUSIVEGROUP_H
 
-#include <QObject>
-#include <QtQml/QtQml>
+#include <QtCore/QObject>
+#include <QtCore/QMetaMethod>
 
 QT_BEGIN_NAMESPACE
 
diff --git a/src/qtdesktop/qtmenuitem.cpp b/src/qtdesktop/qtmenuitem.cpp
index dc19f72d80ef395dd1b1d201d7547748c1129bcd..592c6bf6bec3c4f6a09b4aff3bad6a20fa1e8548 100644
--- a/src/qtdesktop/qtmenuitem.cpp
+++ b/src/qtdesktop/qtmenuitem.cpp
@@ -390,12 +390,8 @@ void QtMenuItem::setIconSource(const QUrl &iconSource)
 
 void QtMenuItem::updateIconSource()
 {
-    QIcon icon = QIcon(iconSource().toLocalFile());
-    if (!iconName().isEmpty())
-        icon = QIcon::fromTheme(iconName(), icon);
-
     if (platformItem()) {
-        platformItem()->setIcon(icon);
+        platformItem()->setIcon(m_action->icon());
         syncWithPlatformMenu();
     }
     emit iconSourceChanged();
@@ -413,10 +409,8 @@ void QtMenuItem::setIconName(const QString &iconName)
 
 void QtMenuItem::updateIconName()
 {
-    QIcon icon = QIcon::fromTheme(iconName(), QIcon(iconSource().toLocalFile()));
-
     if (platformItem()) {
-        platformItem()->setIcon(icon);
+        platformItem()->setIcon(m_action->icon());
         syncWithPlatformMenu();
     }
     emit iconNameChanged();