diff --git a/src/controls/ComboBox.qml b/src/controls/ComboBox.qml
index f34f49f5e411dc5fb49ab5ee4f9bd2cf67855ffa..e09e276b4f5f3a6b03e3d47d2f317084a0ddecb1 100644
--- a/src/controls/ComboBox.qml
+++ b/src/controls/ComboBox.qml
@@ -93,6 +93,8 @@ Control {
     readonly property bool __pressed: mouseArea.pressed && mouseArea.containsMouse || popup.__popupVisible
     /*! \internal */
     property alias __containsMouse: mouseArea.containsMouse
+    /*! \internal */
+    property var __popup: popup
 
     style: Qt.createComponent(Settings.theme() + "/ComboBoxStyle.qml", comboBox)
 
@@ -114,9 +116,6 @@ Control {
     Component.onCompleted: {
         if (currentIndex === -1)
             currentIndex = 0
-        if (Qt.platform.os === "mac") {
-            popup.y += 6
-        }
 
         popup.ready = true
         popup.resolveTextValue(textRole)
@@ -136,11 +135,9 @@ Control {
         property bool ready: false
         property bool isPopup: __panel ? __panel.popup : false
 
-        property int x: 0
         property int y: isPopup ? (comboBox.__panel.height - comboBox.__panel.implicitHeight) / 2.0 : comboBox.__panel.height
         __minimumWidth: comboBox.width
         __visualItem: comboBox
-        __font: __panel.font
 
         property ExclusiveGroup eg: ExclusiveGroup { id: eg }
 
@@ -199,7 +196,7 @@ Control {
             if (items[__selectedIndex])
                 items[__selectedIndex].checked = true
             __currentIndex = comboBox.currentIndex
-            __popup(x, y, isPopup ? __selectedIndex : 0)
+            __popup(0, y, isPopup ? __selectedIndex : 0)
         }
     }
 
diff --git a/src/controls/qquickmenu.cpp b/src/controls/qquickmenu.cpp
index 6ec15e23cba0f9e8aff3aab07e508ecd7cb3d0cc..088e6ad5accf0018b9338fcf3b0d6e95502a5036 100644
--- a/src/controls/qquickmenu.cpp
+++ b/src/controls/qquickmenu.cpp
@@ -243,7 +243,9 @@ QQuickMenu::QQuickMenu(QObject *parent)
       m_popupWindow(0),
       m_menuContentItem(0),
       m_popupVisible(false),
-      m_containersCount(0)
+      m_containersCount(0),
+      m_xOffset(0),
+      m_yOffset(0)
 {
     connect(this, SIGNAL(__textChanged()), this, SIGNAL(titleChanged()));
 
@@ -290,6 +292,16 @@ void QQuickMenu::setFont(const QFont &arg)
         m_platformMenu->setFont(arg);
 }
 
+void QQuickMenu::setXOffset(qreal x)
+{
+    m_xOffset = x;
+}
+
+void QQuickMenu::setYOffset(qreal y)
+{
+    m_yOffset = y;
+}
+
 void QQuickMenu::setSelectedIndex(int index)
 {
     if (m_selectedIndex == index)
@@ -349,7 +361,7 @@ void QQuickMenu::__popup(qreal x, qreal y, int atItemIndex)
     QQuickWindow *parentWindow = findParentWindow();
 
     if (m_platformMenu) {
-        QPointF screenPosition(x, y);
+        QPointF screenPosition(x + m_xOffset, y + m_yOffset);
         if (visualItem())
             screenPosition = visualItem()->mapToScene(screenPosition);
         m_platformMenu->showPopup(parentWindow, screenPosition.toPoint(), atItem ? atItem->platformItem() : 0);
@@ -364,7 +376,7 @@ void QQuickMenu::__popup(qreal x, qreal y, int atItemIndex)
 
         connect(m_popupWindow, SIGNAL(visibleChanged(bool)), this, SLOT(windowVisibleChanged(bool)));
 
-        m_popupWindow->setPosition(x, y);
+        m_popupWindow->setPosition(x + m_xOffset, y + m_yOffset);
         m_popupWindow->show();
     }
 }
diff --git a/src/controls/qquickmenu_p.h b/src/controls/qquickmenu_p.h
index d2017d451daa6ab1dd6212f2b1232bf791137cd1..d57de12668b9fb6d86c9b0badf95e63ce77430f0 100644
--- a/src/controls/qquickmenu_p.h
+++ b/src/controls/qquickmenu_p.h
@@ -70,6 +70,8 @@ class QQuickMenu : public QQuickMenuText
     Q_PROPERTY(QQuickItem *__contentItem READ menuContentItem WRITE setMenuContentItem)
     Q_PROPERTY(int __minimumWidth READ minimumWidth WRITE setMinimumWidth)
     Q_PROPERTY(QFont __font WRITE setFont)
+    Q_PROPERTY(qreal __xOffset READ xOffset WRITE setXOffset)
+    Q_PROPERTY(qreal __yOffset READ yOffset WRITE setYOffset)
 
 public:
     Q_INVOKABLE void popup();
@@ -115,6 +117,11 @@ public:
 
     void setFont(const QFont &font);
 
+    qreal xOffset() const { return m_xOffset; }
+    void setXOffset(qreal);
+    qreal yOffset() const { return m_yOffset; }
+    void setYOffset(qreal);
+
     QQuickItem *menuContentItem() const { return m_menuContentItem; }
     bool popupVisible() const { return m_popupVisible; }
 
@@ -162,6 +169,8 @@ private:
     QQuickItem * m_menuContentItem;
     bool m_popupVisible;
     int m_containersCount;
+    qreal m_xOffset;
+    qreal m_yOffset;
 };
 
 QT_END_NAMESPACE
diff --git a/src/private/qquickstyleitem.cpp b/src/private/qquickstyleitem.cpp
index aafacead5b45e900459900cdc56ad8d861947362..4cc0d42a9af9d45892ebb4e7a92c7ebf90512cbb 100644
--- a/src/private/qquickstyleitem.cpp
+++ b/src/private/qquickstyleitem.cpp
@@ -440,10 +440,19 @@ void QQuickStyleItem::initStyleOption()
         if (!m_styleoption)
             m_styleoption = new QStyleOptionComboBox();
         QStyleOptionComboBox *opt = qstyleoption_cast<QStyleOptionComboBox*>(m_styleoption);
-        if (const QFont *font = QGuiApplicationPrivate::platformTheme()->font(QPlatformTheme::PushButtonFont))
+        const QFont *font = QGuiApplicationPrivate::platformTheme()->font(QPlatformTheme::PushButtonFont);
+        if (font)
             opt->fontMetrics = QFontMetrics(*font);
         opt->currentText = text();
         opt->editable = false;
+#ifdef Q_OS_MAC
+        if (m_properties["popup"].canConvert<QObject *>() && style() == "mac") {
+            QObject *popup = m_properties["popup"].value<QObject *>();
+            popup->setProperty("__yOffset", 6);
+            if (font)
+                popup->setProperty("__font", *font);
+        }
+#endif
     }
         break;
     case SpinBox: {
diff --git a/src/styles/Desktop/ComboBoxStyle.qml b/src/styles/Desktop/ComboBoxStyle.qml
index 720b659f753560fcf2223f02238d6e881ad23383..83215a13d092dccf7a8714eb2f75067e9df9052c 100644
--- a/src/styles/Desktop/ComboBoxStyle.qml
+++ b/src/styles/Desktop/ComboBoxStyle.qml
@@ -44,12 +44,6 @@ import QtQuick.Controls.Private 1.0
 Style {
     property Component panel: Item {
         property int popup: styleItem.styleHint("comboboxpopup")
-        property font font: itemstyle.font
-        StyleItem {
-            id: itemstyle
-            elementType: "comboboxitem"
-            visible: false
-        }
 
         implicitWidth: 115
         implicitHeight: styleItem.implicitHeight
@@ -72,6 +66,10 @@ Style {
             hasFocus: control.activeFocus
             // contentHeight as in QComboBox
             contentHeight: Math.max(Math.ceil(textHeight("")), 14) + 2
+
+            properties: {
+                "popup": control.__popup
+            }
         }
     }