diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorGroupBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorGroupBox.qml
index 01dad4142ed4171d92dd1fb1cf58fa1abc542ca6..51e4a529cda96bad0e2e08d5c7d2f7b573ed3006 100644
--- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorGroupBox.qml
+++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorGroupBox.qml
@@ -69,6 +69,7 @@ QExtGroupBox {
             layout: HorizontalLayout {
 
                 ColorBox {
+                    id: colorControl;
                     color: colorGroupBox.backendColor.value;
                     onColorChanged: {
                         colorGroupBox.backendColor.value = color;
@@ -97,8 +98,12 @@ QExtGroupBox {
                                     text: "H"
                                     fixedWidth: 15
                                 }
-                                QSpinBox {
 
+                                QSpinBox {
+                                    maximum: 360
+                                    value: colorControl.hue*360;
+                                    onValueChanged: if (colorControl.hue*360 !=value)
+                                        colorControl.hue=value/360.0;
                                 }
 
                             }
@@ -111,7 +116,10 @@ QExtGroupBox {
                                     fixedWidth: 15
                                 }
                                 QSpinBox {
-
+                                    maximum: 255
+                                    value: colorControl.saturation*255;
+                                    onValueChanged: if (colorControl.saturation*255 !=value)
+                                        colorControl.saturation=value/255.0;
                                 }
                             }
 
@@ -123,14 +131,17 @@ QExtGroupBox {
                                     fixedWidth: 15
                                 }
                                 QSpinBox {
-
+                                    maximum: 255
+                                    value: colorControl.value*255;
+                                    onValueChanged: if (colorControl.value*255 !=value)
+                                        colorControl.value=value/255.0;
                                 }
 
                             }
                         }
-						
-						QWidget {
-						}
+
+//                        QWidget {
+//                        }
                     }
                 }
             }
diff --git a/src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp b/src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp
index c4b12b7e25f218243ee3fd81e0f96b5b6739638e..ac95339856c2845120d2e5403b0360d581cdd0fa 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp
@@ -86,13 +86,11 @@ namespace QmlDesigner {
 
     void HueControl::setCurrent(int y)
     {
-        QColor oldColor(m_colorString);
-        oldColor.toHsv();
-        QColor newColor;
-        newColor.setHsvF(qreal(y) / 120.0, oldColor.hsvSaturationF(), oldColor.valueF());
-
-        QString newColorStr = QVariant(newColor).toString();
-        setColor(newColorStr);
+        QColor color(m_colorString);
+        if (y<0) y=0;
+        if (y>119) y=119;
+        color.setHsvF(qreal(y) / 120.0, color.hsvSaturationF(), color.valueF());
+        setColor(color.name());
         setHue(qreal(y) / 120.0);
     }
 
@@ -134,10 +132,11 @@ namespace QmlDesigner {
 
     void ColorBox::setCurrent(int x, int y)
     {
-
-        QColor oldColor(m_colorString);
-        oldColor.toHsv();
         QColor newColor;
+        if (x<0) x=0;
+        if (x>120) x=120;
+        if (y<0) y=0;
+        if (y>120) y=120;
         newColor.setHsvF(hue(), qreal(x) / 120, 1.0 - qreal(y) / 120);
 
         QString newColorStr = QVariant(newColor).toString();
@@ -155,8 +154,6 @@ namespace QmlDesigner {
             m_lastHue = m_hue;
             m_cache = QPixmap(120, 120);
 
-            color.toHsv();
-
             int height = 120;
             int width = 120;
 
diff --git a/src/plugins/qmldesigner/components/propertyeditor/colorwidget.h b/src/plugins/qmldesigner/components/propertyeditor/colorwidget.h
index 01e2721559e7a39b9bf02500d5ada5f3672e8b21..48bdb2526a9403d4d9017bc79773013d842b4805 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/colorwidget.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/colorwidget.h
@@ -88,6 +88,8 @@ Q_OBJECT
 
 Q_PROPERTY(QString color READ color WRITE setColor NOTIFY colorChanged)
 Q_PROPERTY(qreal hue READ hue WRITE setHue NOTIFY hueChanged)
+Q_PROPERTY(qreal saturation READ saturation WRITE setSaturation NOTIFY saturationChanged)
+Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
 
 public:
 
@@ -117,11 +119,15 @@ void setColor(const QString &colorStr)
     if (m_colorString == colorStr)
         return;
 
+    qreal oldsaturation = saturation();
+    qreal oldvalue = value();
     m_colorString = colorStr;
     update();
     qreal newHue = QColor(m_colorString).hsvHueF();
     if (newHue >= 0)
         setHue(newHue);
+    if (oldsaturation != saturation()) emit saturationChanged();
+    if (oldvalue != value()) emit valueChanged();
     emit colorChanged();
 }
 
@@ -130,9 +136,38 @@ QString color() const
     return m_colorString;
 }
 
+
+qreal saturation() const
+{
+  return QColor(m_colorString).hsvSaturationF();
+}
+
+qreal setSaturation(qreal newsaturation)
+{
+    QColor color(m_colorString);
+    color.setHsvF(color.hsvHueF(),newsaturation,color.valueF());
+    m_colorString=color.name();
+    emit saturationChanged();
+}
+
+qreal value() const
+{
+  return QColor(m_colorString).valueF();
+}
+
+qreal setValue(qreal newvalue)
+{
+    QColor color(m_colorString);
+    color.setHsvF(color.hsvHueF(),color.hsvSaturationF(),newvalue);
+    m_colorString=color.name();
+    emit valueChanged();
+}
+
 signals:
     void colorChanged();
     void hueChanged();
+    void saturationChanged();
+    void valueChanged();
 
 protected:
     void paintEvent(QPaintEvent *event);
@@ -191,7 +226,6 @@ void setHue(qreal newHue)
 
     m_hue = newHue;
     QColor color(m_colorString);
-    color.toHsv();
     color.setHsvF(newHue, color.hsvSaturationF(), color.valueF());
     m_colorString = color.name();
     update();
@@ -209,8 +243,7 @@ void setColor(const QString &colorStr)
         return;
 
     m_colorString = colorStr;
-    QColor color(m_colorString);
-    m_hue = color.hueF();
+    m_hue = QColor(m_colorString).hsvHueF();
     update();
     emit colorChanged();
 }