--- a/src/plugins/styles/plastique/qplastiquestyle.cpp
+++ b/src/plugins/styles/plastique/qplastiquestyle.cpp
@@ -1475,6 +1475,69 @@
         break;
     }
 #endif // QT_NO_TOOLBAR
+#ifndef QT_NO_SPINBOX
+    case PE_IndicatorSpinPlus:
+    case PE_IndicatorSpinMinus: {
+        QRect r = option->rect;
+        int w = (r.width() - 3) / 2;
+        int step = (w + 4) / 9;
+        w -= (w - step) % 2;
+
+        QRect br(0, 0, w, w);
+        br.moveCenter(r.center());
+
+        int offset = (option->state & State_Sunken) ? 1 : 0;
+
+        painter->fillRect(br.x() + offset, br.y() + offset + br.height() / 2 - step / 2,
+                    br.width(), step,
+                    option->palette.buttonText());
+        if (element == PE_IndicatorSpinPlus)
+            painter->fillRect(br.x() + br.width() / 2 - step / 2 + offset, br.y() + offset,
+                        step, br.height(),
+                        option->palette.buttonText());
+
+        break; }
+    case PE_IndicatorSpinUp:
+    case PE_IndicatorSpinDown: {
+        QRect r = option->rect;
+        int w = (r.width() - 1) / 2;
+        QRect arrowRect(0, 0, w, w);
+        arrowRect.moveCenter(r.center());
+
+        int border = w / 5;
+        int sqsize = 2*(w/2);
+
+        QPolygon a;
+        if (element == PE_IndicatorSpinDown)
+            a.setPoints(3, border, sqsize/2,  sqsize/2, sqsize - border,  sqsize - border, sqsize/2);
+        else
+            a.setPoints(3, border, sqsize/2,  sqsize/2, border,  sqsize - border, sqsize/2);
+
+        QRect bounds = a.boundingRect();
+        int bsx = sqsize / 2 - bounds.center().x() - 1;
+        int bsy = sqsize / 2 - bounds.center().y() - 1;
+
+        int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, option, widget);
+        if (element == PE_IndicatorSpinUp && fw)
+            --bsy;
+
+        if (option->state & State_Sunken) {
+            bsx += proxy()->pixelMetric(PM_ButtonShiftHorizontal);
+            bsy += proxy()->pixelMetric(PM_ButtonShiftVertical);
+        }
+
+        int sx = arrowRect.x();
+        int sy = arrowRect.y();
+
+        painter->save();
+        painter->translate(sx + bsx, sy + bsy);
+        painter->setPen(option->palette.buttonText().color());
+        painter->setBrush(option->palette.buttonText());
+        painter->setRenderHint(QPainter::Qt4CompatiblePainting);
+        painter->drawPolygon(a);
+        painter->restore();
+        break; }
+#endif // QT_NO_SPINBOX
     case PE_PanelButtonCommand:
         if (const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton *>(option)) {
             bool sunken = (button->state & State_Sunken) || (button->state & State_On);
@@ -4150,78 +4213,38 @@
                                   downRect.right() - 1, downRect.bottom() - 1);
             }
 
-            QBrush indicatorBrush = qMapBrushToRect(option->palette.buttonText(), buttonRect);
-            painter->setPen(QPen(indicatorBrush, 0));
-            if (spinBox->buttonSymbols == QAbstractSpinBox::PlusMinus) {
-                QPoint center;
-                if (spinBox->subControls & SC_SpinBoxUp) {
-                    // .......
-                    // ...X...
-                    // ...X...
-                    // .XXXXX.
-                    // ...X...
-                    // ...X...
-                    // .......
-                    center = upRect.center();
-                    if (upSunken) {
-                        ++center.rx();
-                        ++center.ry();
-                    }
-                    painter->drawLine(center.x(), center.y() - 2, center.x(), center.y() + 2);
-                    painter->drawLine(center.x() - 2, center.y(), center.x() + 2, center.y());
-                }
-                if (spinBox->subControls & SC_SpinBoxDown) {
-                    // .......
-                    // .......
-                    // .......
-                    // .XXXXX.
-                    // .......
-                    // .......
-                    // .......
-                    center = downRect.center();
-                    if (downSunken) {
-                        ++center.rx();
-                        ++center.ry();
-                    }
-                    painter->drawLine(center.x() - 2, center.y(), center.x() + 2, center.y());
-                }
-            } else {
-                int offset;
-                int centerX;
-                if (spinBox->subControls & SC_SpinBoxUp) {
-                    // ...........
-                    // .....X.....
-                    // ....XXX....
-                    // ...XXXXX...
-                    // ..XXXXXXX..
-                    // ...........
-                    offset = upSunken ? 1 : 0;
-                    QRect upArrowRect(upRect.center().x() - 3 + offset, upRect.center().y() - 2 + offset, 7, 4);
-                    centerX = upArrowRect.center().x();
-                    painter->drawPoint(centerX, upArrowRect.top());
-                    const QLine lines[3] = {
-                        QLine(centerX - 1, upArrowRect.top() + 1, centerX + 1, upArrowRect.top() + 1),
-                        QLine(centerX - 2, upArrowRect.top() + 2, centerX + 2, upArrowRect.top() + 2),
-                        QLine(centerX - 3, upArrowRect.top() + 3, centerX + 3, upArrowRect.top() + 3) };
-                    painter->drawLines(lines, 3);
-                }
-                if (spinBox->subControls & SC_SpinBoxDown) {
-                    // ...........
-                    // ..XXXXXXX..
-                    // ...XXXXX...
-                    // ....XXX....
-                    // .....X.....
-                    // ...........
-                    offset = downSunken ? 1 : 0;
-                    QRect downArrowRect(downRect.center().x() - 3 + offset, downRect.center().y() - 2 + offset + 1, 7, 4);
-                    centerX = downArrowRect.center().x();
-                    const QLine lines[3] = {
-                        QLine(centerX - 3, downArrowRect.top(), centerX + 3, downArrowRect.top()),
-                        QLine(centerX - 2, downArrowRect.top() + 1, centerX + 2, downArrowRect.top() + 1),
-                        QLine(centerX - 1, downArrowRect.top() + 2, centerX + 1, downArrowRect.top() + 2) };
-                    painter->drawLines(lines, 3);
-                    painter->drawPoint(centerX, downArrowRect.top() + 3);
-                }
+            QStyleOptionSpinBox indicatorOption = *spinBox;
+            if (spinBox->subControls & SC_SpinBoxUp) {
+                // ........... .......
+                // .....X..... ...X...
+                // ....XXX.... ...X...
+                // ...XXXXX... .XXXXX.
+                // ..XXXXXXX.. ...X...
+                // ........... ...X...
+
+                bool enabled = (indicatorOption.state & QStyle::State_Enabled) && (spinBox->stepEnabled & QAbstractSpinBox::StepUpEnabled);
+                indicatorOption.palette.setCurrentColorGroup(enabled ? QPalette::Active : QPalette::Disabled);
+                indicatorOption.rect = upRect;
+                indicatorOption.state &= upSunken ? ~State_None : ~State_Sunken;
+                indicatorOption.state |= upSunken ? State_Sunken : State_None;
+                proxy()->drawPrimitive(spinBox->buttonSymbols == QAbstractSpinBox::PlusMinus ? PE_IndicatorSpinPlus : PE_IndicatorSpinUp,
+                                       &indicatorOption, painter, widget);
+            }
+            if (spinBox->subControls & SC_SpinBoxDown) {
+                // ........... .......
+                // ..XXXXXXX.. .......
+                // ...XXXXX... .......
+                // ....XXX.... .XXXXX.
+                // .....X..... .......
+                // ........... .......
+
+                bool enabled = (indicatorOption.state & QStyle::State_Enabled) && (spinBox->stepEnabled & QAbstractSpinBox::StepDownEnabled);
+                indicatorOption.palette.setCurrentColorGroup(enabled ? QPalette::Active : QPalette::Disabled);
+                indicatorOption.rect = downRect;
+                indicatorOption.state &= downSunken ? ~State_None : ~State_Sunken;
+                indicatorOption.state |= downSunken ? State_Sunken : State_None;
+                proxy()->drawPrimitive(spinBox->buttonSymbols == QAbstractSpinBox::PlusMinus ? PE_IndicatorSpinMinus : PE_IndicatorSpinDown,
+                                       &indicatorOption, painter, widget);
             }
             painter->restore();
         }
