diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
index 16f6a568d7d1a603fe4cefd5c305ab9d239438ae..20051e13e9b1c819118593919321972643430f0d 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
@@ -387,6 +387,22 @@ void PropertyEditor::changeExpression(const QString &name)
     QmlObjectNode fxObjectNode(m_selectedNode);
     PropertyEditorValue *value = qobject_cast<PropertyEditorValue*>(QDeclarativeMetaType::toQObject(m_currentType->m_backendValuesPropertyMap.value(underscoreName)));
 
+    if (fxObjectNode.modelNode().metaInfo().isValid() && fxObjectNode.modelNode().metaInfo().property(name).isValid())
+        if (fxObjectNode.modelNode().metaInfo().property(name).type() == QLatin1String("QColor")) {
+            if (QColor(value->expression().remove('"')).isValid()) {
+                fxObjectNode.setVariantProperty(name, QColor(value->expression().remove('"')));
+                return;
+            }
+        } else if (fxObjectNode.modelNode().metaInfo().property(name).type() == QLatin1String("bool")) {
+            if (value->expression().compare("false", Qt::CaseInsensitive) == 0 || value->expression().compare("true", Qt::CaseInsensitive) == 0) {
+                if (value->expression().compare("true", Qt::CaseInsensitive) == 0)
+                    fxObjectNode.setVariantProperty(name, true);
+                else
+                    fxObjectNode.setVariantProperty(name, false);
+                return;
+            }
+        }
+
     if (!value) {
         qWarning() << "PropertyEditor::changeExpression no value for " << underscoreName;
         return;