--- a/src/gui/styles/qplastiquestyle.cpp
+++ b/src/gui/styles/qplastiquestyle.cpp
@@ -2922,11 +2922,26 @@
                 painter->fillRect(option->rect, option->palette.background().color().lighter(103));
             }
 
+            const QStyleOption *opt = option;
+            const QStyleOptionMenuItem *menuitem = menuItem;
+
+            bool exclusive = menuItem->checkType & QStyleOptionMenuItem::Exclusive;
+            int indicatorWidth = proxy()->pixelMetric(exclusive ? PM_ExclusiveIndicatorWidth : PM_IndicatorWidth, option, widget);
+            int indicatorHeight = proxy()->pixelMetric(exclusive ? PM_ExclusiveIndicatorHeight : PM_IndicatorHeight, option, widget);
+
+            int checkcol = qMax(menuitem->maxIconWidth, indicatorWidth + 7);
+
+            QRect vCheckRect = visualRect(opt->direction, menuitem->rect,
+                                          QRect(menuitem->rect.x(), menuitem->rect.y(),
+                                                checkcol, menuitem->rect.height()));
+
             // Check
-            QRect checkRect(option->rect.left() + 7, option->rect.center().y() - 6, 13, 13);
-            checkRect = visualRect(menuItem->direction, menuItem->rect, checkRect);
             if (checkable) {
-                if ((menuItem->checkType & QStyleOptionMenuItem::Exclusive) && menuItem->icon.isNull()) {
+                if (exclusive && menuItem->icon.isNull()) {
+                    QRect checkRect(0, 0, indicatorWidth, indicatorHeight);
+                    checkRect.moveCenter(vCheckRect.center());
+                    checkRect = visualRect(menuItem->direction, menuItem->rect, checkRect);
+
                     QStyleOptionButton button;
                     button.rect = checkRect;
                     button.state = menuItem->state;
@@ -2936,6 +2951,10 @@
                     proxy()->drawPrimitive(PE_IndicatorRadioButton, &button, painter, widget);
                 } else {
                     if (menuItem->icon.isNull()) {
+                        QRect checkRect(0, 0, indicatorWidth, indicatorHeight);
+                        checkRect.moveCenter(vCheckRect.center());
+                        checkRect = visualRect(menuItem->direction, menuItem->rect, checkRect);
+
                         QStyleOptionButton button;
                         button.rect = checkRect;
                         button.state = menuItem->state;
@@ -2944,7 +2963,7 @@
                         button.palette = menuItem->palette;
                         proxy()->drawPrimitive(PE_IndicatorCheckBox, &button, painter, widget);
                     } else if (checked) {
-                        int iconSize = qMax(menuItem->maxIconWidth, 20);
+                        int iconSize = checkcol;
                         QRect sunkenRect(option->rect.left() + 1,
                                          option->rect.top() + (option->rect.height() - iconSize) / 2 + 1,
                                          iconSize, iconSize);
@@ -2961,13 +2980,9 @@
             // Text and icon, ripped from windows style
             bool dis = !(menuItem->state & State_Enabled);
             bool act = menuItem->state & State_Selected;
-            const QStyleOption *opt = option;
-            const QStyleOptionMenuItem *menuitem = menuItem;
-            int checkcol = qMax(menuitem->maxIconWidth, 20);
+
             QPainter *p = painter;
-            QRect vCheckRect = visualRect(opt->direction, menuitem->rect,
-                                          QRect(menuitem->rect.x(), menuitem->rect.y(),
-                                                checkcol, menuitem->rect.height()));
+
             if (!menuItem->icon.isNull()) {
                 QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal;
                 if (act && !dis)
@@ -5044,6 +5059,12 @@
         if (const QStyleOptionMenuItem *menuItem = qstyleoption_cast<const QStyleOptionMenuItem *>(option)) {
             if (menuItem->menuItemType == QStyleOptionMenuItem::Separator)
                 newSize.setHeight(menuItem->text.isEmpty() ? 2 : menuItem->fontMetrics.height());
+            else
+            {
+                bool exclusive = menuItem->checkType & QStyleOptionMenuItem::Exclusive;
+                int indicatorWidth = proxy()->pixelMetric(exclusive ? PM_ExclusiveIndicatorWidth : PM_IndicatorWidth, option, widget);
+                newSize.setWidth(newSize.width() + indicatorWidth - 12);
+            }
         }
         break;
     case CT_MenuBarItem:
