diff --git a/share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp b/share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp
index b885c7d9930f799241b96f05d8d2f24ec092b4d3..efb173e817a1278db79223c3dcd8f2b131040caa 100644
--- a/share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp
+++ b/share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp
@@ -38,11 +38,11 @@ InstanceContainer::InstanceContainer()
 {
 }
 
-InstanceContainer::InstanceContainer(qint32 instanceId, const QString &type, int majorNumber, int minorNumber, const QString &componentPath, const QString &nodeSource, NodeSourceType nodeSourceType,NodeMetaType metaType)
+InstanceContainer::InstanceContainer(qint32 instanceId, const TypeName &type, int majorNumber, int minorNumber, const QString &componentPath, const QString &nodeSource, NodeSourceType nodeSourceType, NodeMetaType metaType)
     : m_instanceId(instanceId), m_type(type), m_majorNumber(majorNumber), m_minorNumber(minorNumber), m_componentPath(componentPath),
       m_nodeSource(nodeSource), m_nodeSourceType(nodeSourceType), m_metaType(metaType)
 {
-    m_type.replace(QLatin1Char('.'), QLatin1Char('/'));
+    m_type.replace('.', '/');
 }
 
 qint32 InstanceContainer::instanceId() const
@@ -50,7 +50,7 @@ qint32 InstanceContainer::instanceId() const
     return m_instanceId;
 }
 
-QString InstanceContainer::type() const
+TypeName InstanceContainer::type() const
 {
     return m_type;
 }
diff --git a/share/qtcreator/qml/qmlpuppet/container/instancecontainer.h b/share/qtcreator/qml/qmlpuppet/container/instancecontainer.h
index 6c32cb243e22c6527593cba6a7dfa2b0ee6d5cc7..7be7d0983e623548e44617ce6887148852bd523d 100644
--- a/share/qtcreator/qml/qmlpuppet/container/instancecontainer.h
+++ b/share/qtcreator/qml/qmlpuppet/container/instancecontainer.h
@@ -34,6 +34,8 @@
 #include <QString>
 #include <QDataStream>
 
+#include "nodeinstanceglobal.h"
+
 namespace QmlDesigner {
 
 class InstanceContainer;
@@ -58,10 +60,10 @@ public:
     };
 
     InstanceContainer();
-    InstanceContainer(qint32 instanceId, const QString &type, int majorNumber, int minorNumber, const QString &componentPath, const QString &nodeSource, NodeSourceType nodeSourceType, NodeMetaType metaType);
+    InstanceContainer(qint32 instanceId, const TypeName &type, int majorNumber, int minorNumber, const QString &componentPath, const QString &nodeSource, NodeSourceType nodeSourceType, NodeMetaType metaType);
 
     qint32 instanceId() const;
-    QString type() const;
+    TypeName type() const;
     int majorNumber() const;
     int minorNumber() const;
     QString componentPath() const;
@@ -71,7 +73,7 @@ public:
 
 private:
     qint32 m_instanceId;
-    QString m_type;
+    TypeName m_type;
     qint32 m_majorNumber;
     qint32 m_minorNumber;
     QString m_componentPath;
diff --git a/share/qtcreator/qml/qmlpuppet/container/propertyabstractcontainer.cpp b/share/qtcreator/qml/qmlpuppet/container/propertyabstractcontainer.cpp
index 28066ade099b8f10aabf632ac08b4d21f3e7fe9d..2ba89213eb19df7b813f4d82fbce3e8155ec5d70 100644
--- a/share/qtcreator/qml/qmlpuppet/container/propertyabstractcontainer.cpp
+++ b/share/qtcreator/qml/qmlpuppet/container/propertyabstractcontainer.cpp
@@ -36,7 +36,7 @@ PropertyAbstractContainer::PropertyAbstractContainer()
 {
 }
 
-PropertyAbstractContainer::PropertyAbstractContainer(qint32 instanceId, const QString &name, const QString &dynamicTypeName)
+PropertyAbstractContainer::PropertyAbstractContainer(qint32 instanceId, const PropertyName &name, const QString &dynamicTypeName)
     : m_instanceId(instanceId),
     m_name(name),
     m_dynamicTypeName(dynamicTypeName)
@@ -48,7 +48,7 @@ qint32 PropertyAbstractContainer::instanceId() const
     return m_instanceId;
 }
 
-QString PropertyAbstractContainer::name() const
+PropertyName PropertyAbstractContainer::name() const
 {
     return m_name;
 }
diff --git a/share/qtcreator/qml/qmlpuppet/container/propertyabstractcontainer.h b/share/qtcreator/qml/qmlpuppet/container/propertyabstractcontainer.h
index 242ef66e6dbb63741e7fab08dc84aaabdcffc188..ba468b4b53b0c7351c35a27867abb764f3b3313a 100644
--- a/share/qtcreator/qml/qmlpuppet/container/propertyabstractcontainer.h
+++ b/share/qtcreator/qml/qmlpuppet/container/propertyabstractcontainer.h
@@ -34,6 +34,7 @@
 #include <qmetatype.h>
 #include <QString>
 
+#include "nodeinstanceglobal.h"
 
 namespace QmlDesigner {
 
@@ -49,16 +50,16 @@ class PropertyAbstractContainer
     friend QDataStream &operator>>(QDataStream &in, PropertyAbstractContainer &container);
 public:
     PropertyAbstractContainer();
-    PropertyAbstractContainer(qint32 instanceId, const QString &name, const QString &dynamicTypeName);
+    PropertyAbstractContainer(qint32 instanceId, const PropertyName &name, const QString &dynamicTypeName);
 
     qint32 instanceId() const;
-    QString name() const;
+    PropertyName name() const;
     bool isDynamic() const;
     QString dynamicTypeName() const;
 
 private:
     qint32 m_instanceId;
-    QString m_name;
+    PropertyName m_name;
     QString m_dynamicTypeName;
 };
 
diff --git a/share/qtcreator/qml/qmlpuppet/container/propertybindingcontainer.cpp b/share/qtcreator/qml/qmlpuppet/container/propertybindingcontainer.cpp
index b0f5dd1aa9cc8f227d6669684a256a5c8216f067..f9602a7eb4df5c54e5ba8474898d47ef44c5d515 100644
--- a/share/qtcreator/qml/qmlpuppet/container/propertybindingcontainer.cpp
+++ b/share/qtcreator/qml/qmlpuppet/container/propertybindingcontainer.cpp
@@ -37,7 +37,7 @@ PropertyBindingContainer::PropertyBindingContainer()
 {
 }
 
-PropertyBindingContainer::PropertyBindingContainer(qint32 instanceId, const QString &name, const QString &expression, const QString &dynamicTypeName)
+PropertyBindingContainer::PropertyBindingContainer(qint32 instanceId, const PropertyName &name, const QString &expression, const TypeName &dynamicTypeName)
     : m_instanceId(instanceId),
     m_name(name),
     m_expression(expression),
@@ -50,7 +50,7 @@ qint32 PropertyBindingContainer::instanceId() const
     return m_instanceId;
 }
 
-QString PropertyBindingContainer::name() const
+PropertyName PropertyBindingContainer::name() const
 {
     return m_name;
 }
@@ -65,7 +65,7 @@ bool PropertyBindingContainer::isDynamic() const
     return !m_dynamicTypeName.isEmpty();
 }
 
-QString PropertyBindingContainer::dynamicTypeName() const
+TypeName PropertyBindingContainer::dynamicTypeName() const
 {
     return m_dynamicTypeName;
 }
diff --git a/share/qtcreator/qml/qmlpuppet/container/propertybindingcontainer.h b/share/qtcreator/qml/qmlpuppet/container/propertybindingcontainer.h
index 439f16b2c979031a9c4cf1632b18b2e25b37ce22..f285320cab0d2180e78e9e70cea712163f80c7eb 100644
--- a/share/qtcreator/qml/qmlpuppet/container/propertybindingcontainer.h
+++ b/share/qtcreator/qml/qmlpuppet/container/propertybindingcontainer.h
@@ -34,6 +34,7 @@
 #include <qmetatype.h>
 #include <QString>
 
+#include "nodeinstanceglobal.h"
 
 namespace QmlDesigner {
 
@@ -43,19 +44,19 @@ class PropertyBindingContainer
 
 public:
     PropertyBindingContainer();
-    PropertyBindingContainer(qint32 instanceId, const QString &name, const QString &expression, const QString &dynamicTypeName);
+    PropertyBindingContainer(qint32 instanceId, const PropertyName &name, const QString &expression, const TypeName &dynamicTypeName);
 
     qint32 instanceId() const;
-    QString name() const;
+    PropertyName name() const;
     QString expression() const;
     bool isDynamic() const;
-    QString dynamicTypeName() const;
+    TypeName dynamicTypeName() const;
 
 private:
     qint32 m_instanceId;
-    QString m_name;
+    PropertyName m_name;
     QString m_expression;
-    QString m_dynamicTypeName;
+    TypeName m_dynamicTypeName;
 };
 
 QDataStream &operator<<(QDataStream &out, const PropertyBindingContainer &container);
diff --git a/share/qtcreator/qml/qmlpuppet/container/propertyvaluecontainer.cpp b/share/qtcreator/qml/qmlpuppet/container/propertyvaluecontainer.cpp
index 66974c88889bf55cb6c2ed9a8f9af79df7502867..894b90e47d8b2c1da30cc19964b31daae403b3b7 100644
--- a/share/qtcreator/qml/qmlpuppet/container/propertyvaluecontainer.cpp
+++ b/share/qtcreator/qml/qmlpuppet/container/propertyvaluecontainer.cpp
@@ -36,7 +36,7 @@ PropertyValueContainer::PropertyValueContainer()
 {
 }
 
-PropertyValueContainer::PropertyValueContainer(qint32 instanceId, const QString &name, const QVariant &value, const QString &dynamicTypeName)
+PropertyValueContainer::PropertyValueContainer(qint32 instanceId, const PropertyName &name, const QVariant &value, const TypeName &dynamicTypeName)
     : m_instanceId(instanceId),
     m_name(name),
     m_value(value),
@@ -49,7 +49,7 @@ qint32 PropertyValueContainer::instanceId() const
     return m_instanceId;
 }
 
-QString PropertyValueContainer::name() const
+PropertyName PropertyValueContainer::name() const
 {
     return m_name;
 }
@@ -64,7 +64,7 @@ bool PropertyValueContainer::isDynamic() const
     return !m_dynamicTypeName.isEmpty();
 }
 
-QString PropertyValueContainer::dynamicTypeName() const
+TypeName PropertyValueContainer::dynamicTypeName() const
 {
     return m_dynamicTypeName;
 }
diff --git a/share/qtcreator/qml/qmlpuppet/container/propertyvaluecontainer.h b/share/qtcreator/qml/qmlpuppet/container/propertyvaluecontainer.h
index c967a69834e6040fba07159d37e382e38bb0dc6f..a13e7cb9eaa4d02155e2b5abe0a38d1b237756b1 100644
--- a/share/qtcreator/qml/qmlpuppet/container/propertyvaluecontainer.h
+++ b/share/qtcreator/qml/qmlpuppet/container/propertyvaluecontainer.h
@@ -35,8 +35,9 @@
 #include <QVariant>
 #include <QString>
 
-namespace QmlDesigner {
+#include "nodeinstanceglobal.h"
 
+namespace QmlDesigner {
 
 class PropertyValueContainer
 {
@@ -44,19 +45,19 @@ class PropertyValueContainer
 
 public:
     PropertyValueContainer();
-    PropertyValueContainer(qint32 instanceId, const QString &name, const QVariant &value, const QString &dynamicTypeName);
+    PropertyValueContainer(qint32 instanceId, const PropertyName &name, const QVariant &value, const TypeName &dynamicTypeName);
 
     qint32 instanceId() const;
-    QString name() const;
+    PropertyName name() const;
     QVariant value() const;
     bool isDynamic() const;
-    QString dynamicTypeName() const;
+    TypeName dynamicTypeName() const;
 
 private:
     qint32 m_instanceId;
-    QString m_name;
+    PropertyName m_name;
     QVariant m_value;
-    QString m_dynamicTypeName;
+    TypeName m_dynamicTypeName;
 };
 
 QDataStream &operator<<(QDataStream &out, const PropertyValueContainer &container);
diff --git a/share/qtcreator/qml/qmlpuppet/container/reparentcontainer.cpp b/share/qtcreator/qml/qmlpuppet/container/reparentcontainer.cpp
index 711b0dc79334d299e7c3a89df723f2d9f955e268..a313a411b85f18fbc6e987bf01a244ca18a60cc0 100644
--- a/share/qtcreator/qml/qmlpuppet/container/reparentcontainer.cpp
+++ b/share/qtcreator/qml/qmlpuppet/container/reparentcontainer.cpp
@@ -42,9 +42,9 @@ ReparentContainer::ReparentContainer()
 
 ReparentContainer::ReparentContainer(qint32 instanceId,
                   qint32 oldParentInstanceId,
-                  const QString &oldParentProperty,
+                  const PropertyName &oldParentProperty,
                   qint32 newParentInstanceId,
-                  const QString &newParentProperty)
+                  const PropertyName &newParentProperty)
     : m_instanceId(instanceId),
     m_oldParentInstanceId(oldParentInstanceId),
     m_oldParentProperty(oldParentProperty),
@@ -63,7 +63,7 @@ qint32 ReparentContainer::oldParentInstanceId() const
     return m_oldParentInstanceId;
 }
 
-QString ReparentContainer::oldParentProperty() const
+PropertyName ReparentContainer::oldParentProperty() const
 {
     return m_oldParentProperty;
 }
@@ -73,7 +73,7 @@ qint32 ReparentContainer::newParentInstanceId() const
     return m_newParentInstanceId;
 }
 
-QString ReparentContainer::newParentProperty() const
+PropertyName ReparentContainer::newParentProperty() const
 {
     return m_newParentProperty;
 }
diff --git a/share/qtcreator/qml/qmlpuppet/container/reparentcontainer.h b/share/qtcreator/qml/qmlpuppet/container/reparentcontainer.h
index db2e1872cd0abf3646c6f6fa6087d704b2e13c0a..94c3b56a2278c75c8fa7e1a738d88c1e5e183d54 100644
--- a/share/qtcreator/qml/qmlpuppet/container/reparentcontainer.h
+++ b/share/qtcreator/qml/qmlpuppet/container/reparentcontainer.h
@@ -34,6 +34,8 @@
 #include <QString>
 #include <QDataStream>
 
+#include "nodeinstanceglobal.h"
+
 namespace QmlDesigner {
 
 class ReparentContainer
@@ -43,22 +45,22 @@ public:
     ReparentContainer();
     ReparentContainer(qint32 instanceId,
                       qint32 oldParentInstanceId,
-                      const QString &oldParentProperty,
+                      const PropertyName &oldParentProperty,
                       qint32 newParentInstanceId,
-                      const QString &newParentProperty);
+                      const PropertyName &newParentProperty);
 
     qint32 instanceId() const;
     qint32 oldParentInstanceId() const;
-    QString oldParentProperty() const;
+    PropertyName oldParentProperty() const;
     qint32 newParentInstanceId() const;
-    QString newParentProperty() const;
+    PropertyName newParentProperty() const;
 
 private:
     qint32 m_instanceId;
     qint32 m_oldParentInstanceId;
-    QString m_oldParentProperty;
+    PropertyName m_oldParentProperty;
     qint32 m_newParentInstanceId;
-    QString m_newParentProperty;
+    PropertyName m_newParentProperty;
 };
 
 QDataStream &operator<<(QDataStream &out, const ReparentContainer &container);
diff --git a/share/qtcreator/qml/qmlpuppet/interfaces/interfaces.pri b/share/qtcreator/qml/qmlpuppet/interfaces/interfaces.pri
index 4e642000295503938e4a56cdcf43e2f4e2bcecdb..76a778cc5115820d989d92c5876a8da2fd8d7ec1 100644
--- a/share/qtcreator/qml/qmlpuppet/interfaces/interfaces.pri
+++ b/share/qtcreator/qml/qmlpuppet/interfaces/interfaces.pri
@@ -1,6 +1,7 @@
 INCLUDEPATH += $$PWD/
 
 HEADERS += $$PWD/nodeinstanceclientinterface.h
+HEADERS += $$PWD/interfaces/nodeinstanceglobal.h
 HEADERS += $$PWD/nodeinstanceserverinterface.h
 HEADERS += $$PWD/commondefines.h
 
diff --git a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceglobal.h b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceglobal.h
new file mode 100644
index 0000000000000000000000000000000000000000..02c45362ba6c42b8755cffbe6219e5216bcf484b
--- /dev/null
+++ b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceglobal.h
@@ -0,0 +1,11 @@
+#ifndef NODEINSTANCEGLOBAL_H
+#define NODEINSTANCEGLOBAL_H
+
+namespace QmlDesigner {
+
+typedef QByteArray PropertyName;
+typedef QList<PropertyName> PropertyNameList;
+typedef QByteArray TypeName;
+}
+
+#endif // NODEINSTANCEGLOBAL_H
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/behaviornodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/behaviornodeinstance.cpp
index 63b148cff46e8d80c905b6f004f172c3d9a35c50..e973fa95137123508d56bfc92dd5352a6e304ead 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/behaviornodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/behaviornodeinstance.cpp
@@ -55,7 +55,7 @@ BehaviorNodeInstance::Pointer BehaviorNodeInstance::create(QObject *object)
     return instance;
 }
 
-void BehaviorNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void BehaviorNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     if (name == "enabled")
         return;
@@ -63,7 +63,7 @@ void BehaviorNodeInstance::setPropertyVariant(const QString &name, const QVarian
     ObjectNodeInstance::setPropertyVariant(name, value);
 }
 
-void BehaviorNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+void BehaviorNodeInstance::setPropertyBinding(const PropertyName &name, const QString &expression)
 {
     if (name == "enabled")
         return;
@@ -71,7 +71,7 @@ void BehaviorNodeInstance::setPropertyBinding(const QString &name, const QString
     ObjectNodeInstance::setPropertyBinding(name, expression);
 }
 
-QVariant BehaviorNodeInstance::property(const QString &name) const
+QVariant BehaviorNodeInstance::property(const PropertyName &name) const
 {
     if (name == "enabled")
         return QVariant::fromValue(m_isEnabled);
@@ -79,7 +79,7 @@ QVariant BehaviorNodeInstance::property(const QString &name) const
     return ObjectNodeInstance::property(name);
 }
 
-void BehaviorNodeInstance::resetProperty(const QString &name)
+void BehaviorNodeInstance::resetProperty(const PropertyName &name)
 {
     if (name == "enabled")
         m_isEnabled = true;
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/behaviornodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/behaviornodeinstance.h
index 91dc0cef70097488b2d2a3d4b900c3acbf8b321a..0cc6d68891c9d190313b68e149cc61a3c5fb1f1c 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/behaviornodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/behaviornodeinstance.h
@@ -45,12 +45,12 @@ public:
 
     static Pointer create(QObject *objectToBeWrapped);
 
-    void setPropertyVariant(const QString &name, const QVariant &value);
-    void setPropertyBinding(const QString &name, const QString &expression);
+    void setPropertyVariant(const PropertyName &name, const QVariant &value);
+    void setPropertyBinding(const PropertyName &name, const QString &expression);
 
 
-    QVariant property(const QString &name) const;
-    void resetProperty(const QString &name);
+    QVariant property(const PropertyName &name) const;
+    void resetProperty(const PropertyName &name);
 
 private:
     bool m_isEnabled;
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancemetaobject.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancemetaobject.cpp
index 4c6fd525884dba8e9865b2472e37be9d3640eb4c..f4697830e1257febf7d034f2c251a15a2cb2fb73 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancemetaobject.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancemetaobject.cpp
@@ -120,7 +120,7 @@ NodeInstanceMetaObject *NodeInstanceMetaObject::createNodeInstanceMetaObject(con
     return new NodeInstanceMetaObject(nodeInstance, engine);
 }
 
-NodeInstanceMetaObject *NodeInstanceMetaObject::createNodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix, QQmlEngine *engine)
+NodeInstanceMetaObject *NodeInstanceMetaObject::createNodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const PropertyName &prefix, QQmlEngine *engine)
 {
     //Avoid setting up multiple NodeInstanceMetaObjects on the same QObject
     QObjectPrivate *op = QObjectPrivate::get(nodeInstance->object());
@@ -175,7 +175,7 @@ NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstance::Pointer
 
 }
 
-NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix, QQmlEngine *engine)
+NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const PropertyName &prefix, QQmlEngine *engine)
     : QQmlVMEMetaObject(object, cacheForObject(object, engine), vMEMetaDataForObject(object)),
       m_nodeInstance(nodeInstance),
       m_prefix(prefix),
@@ -199,7 +199,7 @@ NodeInstanceMetaObject::~NodeInstanceMetaObject()
 
 void NodeInstanceMetaObject::createNewProperty(const QString &name)
 {
-    int id = createProperty(name.toLatin1(), 0);
+    int id = createProperty(name.toUtf8(), 0);
     setValue(id, QVariant());
     Q_ASSERT(id >= 0);
     Q_UNUSED(id);
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancemetaobject.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancemetaobject.h
index 4c55688365a0b2b0a1671efb164785b9c873cca5..7be3f6b39d7932934db3d4ef1453649eedccf2bb 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancemetaobject.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancemetaobject.h
@@ -35,7 +35,10 @@
 #include <private/qqmlopenmetaobject_p.h>
 #include <private/qqmlvmemetaobject_p.h>
 
+#include "nodeinstanceglobal.h"
+
 namespace QmlDesigner {
+
 namespace Internal {
 
 class ObjectNodeInstance;
@@ -48,13 +51,13 @@ class NodeInstanceMetaObject : public QQmlVMEMetaObject
 {
 public:
     static NodeInstanceMetaObject *createNodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QQmlEngine *engine);
-    static NodeInstanceMetaObject *createNodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix, QQmlEngine *engine);
+    static NodeInstanceMetaObject *createNodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const PropertyName &prefix, QQmlEngine *engine);
     ~NodeInstanceMetaObject();
     void createNewProperty(const QString &name);
 
 protected:
     NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QQmlEngine *engine);
-    NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix, QQmlEngine *engine);
+    NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const PropertyName &prefix, QQmlEngine *engine);
 
     int openMetaCall(QMetaObject::Call _c, int _id, void **_a);
     int metaCall(QMetaObject::Call _c, int _id, void **_a);
@@ -93,7 +96,7 @@ private:
     void init(QObject *, QQmlEngine *engine);
 
     ObjectNodeInstanceWeakPointer m_nodeInstance;
-    QString m_prefix;
+    PropertyName m_prefix;
     QPointer<QQmlContext>  m_context;
     QQmlOpenMetaObjectType *m_type;
     QScopedPointer<MetaPropertyData> m_data;
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp
index 794f46a495b1b4fab558ae7239f93dc635c3facd..fe4ba6848792c99b70f4e9a91dfb7ba2dc875732 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp
@@ -661,7 +661,7 @@ Internal::ChildrenChangeEventFilter *NodeInstanceServer::childrenChangeEventFilt
     return m_childrenChangeEventFilter.data();
 }
 
-void NodeInstanceServer::addFilePropertyToFileSystemWatcher(QObject *object, const QString &propertyName, const QString &path)
+void NodeInstanceServer::addFilePropertyToFileSystemWatcher(QObject *object, const PropertyName &propertyName, const QString &path)
 {
     if (!m_fileSystemWatcherHash.contains(path)) {
         m_fileSystemWatcherHash.insert(path, ObjectPropertyPair(object, propertyName));
@@ -669,7 +669,7 @@ void NodeInstanceServer::addFilePropertyToFileSystemWatcher(QObject *object, con
     }
 }
 
-void NodeInstanceServer::removeFilePropertyFromFileSystemWatcher(QObject *object, const QString &propertyName, const QString &path)
+void NodeInstanceServer::removeFilePropertyFromFileSystemWatcher(QObject *object, const PropertyName &propertyName, const QString &path)
 {
     if (m_fileSystemWatcherHash.contains(path)) {
         fileSystemWatcher()->removePath(path);
@@ -682,7 +682,7 @@ void NodeInstanceServer::refreshLocalFileProperty(const QString &path)
     if (m_fileSystemWatcherHash.contains(path)) {
         foreach (const ObjectPropertyPair &objectPropertyPair, m_fileSystemWatcherHash) {
             QObject *object = objectPropertyPair.first.data();
-            QString propertyName = objectPropertyPair.second;
+            PropertyName propertyName = objectPropertyPair.second;
 
             if (hasInstanceForObject(object)) {
                 instanceForObject(object).refreshProperty(propertyName);
@@ -734,7 +734,7 @@ void NodeInstanceServer::resetInstanceProperty(const PropertyAbstractContainer &
         ServerNodeInstance instance = instanceForId(propertyContainer.instanceId());
         Q_ASSERT(instance.isValid());
 
-        const QString name = propertyContainer.name();
+        const PropertyName name = propertyContainer.name();
 
         if (activeStateInstance().isValid() && !instance.isSubclassOf("QtQuick/PropertyChanges")) {
             bool statePropertyWasReseted = activeStateInstance().resetStateProperty(instance, name, instance.resetVariant(name));
@@ -755,7 +755,7 @@ void NodeInstanceServer::setInstancePropertyBinding(const PropertyBindingContain
     if (hasInstanceForId(bindingContainer.instanceId())) {
         ServerNodeInstance instance = instanceForId(bindingContainer.instanceId());
 
-        const QString name = bindingContainer.name();
+        const PropertyName name = bindingContainer.name();
         const QString expression = bindingContainer.expression();
 
 
@@ -789,7 +789,7 @@ void NodeInstanceServer::setInstancePropertyVariant(const PropertyValueContainer
         ServerNodeInstance instance = instanceForId(valueContainer.instanceId());
 
 
-        const QString name = valueContainer.name();
+        const PropertyName name = valueContainer.name();
         const QVariant value = valueContainer.value();
 
 
@@ -816,8 +816,8 @@ void NodeInstanceServer::setInstancePropertyVariant(const PropertyValueContainer
 void NodeInstanceServer::setInstanceAuxiliaryData(const PropertyValueContainer &auxiliaryContainer)
 {
     //instanceId() == 0: the item is root
-    if (auxiliaryContainer.instanceId() == 0 && (auxiliaryContainer.name() == QLatin1String("width") ||
-                                        auxiliaryContainer.name() == QLatin1String("height"))) {
+    if (auxiliaryContainer.instanceId() == 0 && (auxiliaryContainer.name() == "width" ||
+                                        auxiliaryContainer.name() == "height")) {
 
         if (!auxiliaryContainer.value().isNull()) {
             setInstancePropertyVariant(auxiliaryContainer);
@@ -825,8 +825,8 @@ void NodeInstanceServer::setInstanceAuxiliaryData(const PropertyValueContainer &
             rootNodeInstance().resetProperty(auxiliaryContainer.name());
         }
     }
-    if (auxiliaryContainer.name().endsWith(QLatin1String("@NodeInstance"))) {
-        QString propertyName = auxiliaryContainer.name().leftRef(auxiliaryContainer.name().count() - 12).toString();
+    if (auxiliaryContainer.name().endsWith("@NodeInstance")) {
+        PropertyName propertyName = auxiliaryContainer.name().left(auxiliaryContainer.name().count() - 12);
         if (!auxiliaryContainer.value().isNull()) {
             setInstancePropertyVariant(PropertyValueContainer(auxiliaryContainer.instanceId(),
                                                               propertyName,
@@ -897,51 +897,51 @@ static QVector<InformationContainer> createInformationVector(const QList<ServerN
         informationVector.append(InformationContainer(instance.instanceId(), IsAnchoredByChildren, instance.isAnchoredByChildren()));
         informationVector.append(InformationContainer(instance.instanceId(), IsAnchoredBySibling, instance.isAnchoredBySibling()));
 
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.fill"), instance.hasAnchor("anchors.fill")));
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.centerIn"), instance.hasAnchor("anchors.centerIn")));
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.right"), instance.hasAnchor("anchors.right")));
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.top"), instance.hasAnchor("anchors.top")));
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.left"), instance.hasAnchor("anchors.left")));
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.bottom"), instance.hasAnchor("anchors.bottom")));
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.horizontalCenter"), instance.hasAnchor("anchors.horizontalCenter")));
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.verticalCenter"), instance.hasAnchor("anchors.verticalCenter")));
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.baseline"), instance.hasAnchor("anchors.baseline")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.fill"), instance.hasAnchor("anchors.fill")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.centerIn"), instance.hasAnchor("anchors.centerIn")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.right"), instance.hasAnchor("anchors.right")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.top"), instance.hasAnchor("anchors.top")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.left"), instance.hasAnchor("anchors.left")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.bottom"), instance.hasAnchor("anchors.bottom")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.horizontalCenter"), instance.hasAnchor("anchors.horizontalCenter")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.verticalCenter"), instance.hasAnchor("anchors.verticalCenter")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.baseline"), instance.hasAnchor("anchors.baseline")));
 
-        QPair<QString, ServerNodeInstance> anchorPair = instance.anchor("anchors.fill");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.fill"), anchorPair.first, anchorPair.second.instanceId()));
+        QPair<PropertyName, ServerNodeInstance> anchorPair = instance.anchor("anchors.fill");
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.fill"), anchorPair.first, anchorPair.second.instanceId()));
 
         anchorPair = instance.anchor("anchors.centerIn");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.centerIn"), anchorPair.first, anchorPair.second.instanceId()));
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.centerIn"), anchorPair.first, anchorPair.second.instanceId()));
 
         anchorPair = instance.anchor("anchors.right");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.right"), anchorPair.first, anchorPair.second.instanceId()));
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.right"), anchorPair.first, anchorPair.second.instanceId()));
 
         anchorPair = instance.anchor("anchors.top");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.top"), anchorPair.first, anchorPair.second.instanceId()));
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.top"), anchorPair.first, anchorPair.second.instanceId()));
 
         anchorPair = instance.anchor("anchors.left");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.left"), anchorPair.first, anchorPair.second.instanceId()));
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.left"), anchorPair.first, anchorPair.second.instanceId()));
 
         anchorPair = instance.anchor("anchors.bottom");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.bottom"), anchorPair.first, anchorPair.second.instanceId()));
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.bottom"), anchorPair.first, anchorPair.second.instanceId()));
 
         anchorPair = instance.anchor("anchors.horizontalCenter");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.horizontalCenter"), anchorPair.first, anchorPair.second.instanceId()));
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.horizontalCenter"), anchorPair.first, anchorPair.second.instanceId()));
 
         anchorPair = instance.anchor("anchors.verticalCenter");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.verticalCenter"), anchorPair.first, anchorPair.second.instanceId()));
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.verticalCenter"), anchorPair.first, anchorPair.second.instanceId()));
 
         anchorPair = instance.anchor("anchors.baseline");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.baseline"), anchorPair.first, anchorPair.second.instanceId()));
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.baseline"), anchorPair.first, anchorPair.second.instanceId()));
 
-        QStringList propertyNames = instance.propertyNames();
+        PropertyNameList propertyNames = instance.propertyNames();
 
         if (initial) {
-            foreach (const QString &propertyName,propertyNames)
+            foreach (const PropertyName &propertyName,propertyNames)
                 informationVector.append(InformationContainer(instance.instanceId(), InstanceTypeForProperty, propertyName, instance.instanceType(propertyName)));
         }
 
-        foreach (const QString &propertyName,instance.propertyNames()) {
+        foreach (const PropertyName &propertyName,instance.propertyNames()) {
             bool hasChanged = false;
             bool hasBinding = instance.hasBindingForProperty(propertyName, &hasChanged);
             if (hasChanged)
@@ -979,10 +979,10 @@ ValuesChangedCommand NodeInstanceServer::createValuesChangedCommand(const QList<
     QVector<PropertyValueContainer> valueVector;
 
     foreach (const ServerNodeInstance &instance, instanceList) {
-        foreach (const QString &propertyName, instance.propertyNames()) {
+        foreach (const PropertyName &propertyName, instance.propertyNames()) {
             QVariant propertyValue = instance.property(propertyName);
             if (supportedVariantType(propertyValue.userType()))
-                valueVector.append(PropertyValueContainer(instance.instanceId(), propertyName, propertyValue, QString()));
+                valueVector.append(PropertyValueContainer(instance.instanceId(), propertyName, propertyValue, PropertyName()));
         }
     }
 
@@ -1005,13 +1005,13 @@ ValuesChangedCommand NodeInstanceServer::createValuesChangedCommand(const QVecto
     QVector<PropertyValueContainer> valueVector;
 
     foreach (const InstancePropertyPair &property, propertyList) {
-        const QString propertyName = property.second;
+        const PropertyName propertyName = property.second;
         const ServerNodeInstance instance = property.first;
 
         if (instance.isValid()) {
             QVariant propertyValue = instance.property(propertyName);
             if (QMetaType::isRegistered(propertyValue.userType()) && supportedVariantType(propertyValue.type())) {
-                valueVector.append(PropertyValueContainer(instance.instanceId(), propertyName, propertyValue, QString()));
+                valueVector.append(PropertyValueContainer(instance.instanceId(), propertyName, propertyValue, PropertyName()));
             }
         }
     }
@@ -1034,7 +1034,7 @@ QObject *NodeInstanceServer::dummyContextObject() const
     return m_dummyContextObject.data();
 }
 
-void NodeInstanceServer::notifyPropertyChange(qint32 instanceid, const QString &propertyName)
+void NodeInstanceServer::notifyPropertyChange(qint32 instanceid, const PropertyName &propertyName)
 {
     if (hasInstanceForId(instanceid))
         addChangedProperty(InstancePropertyPair(instanceForId(instanceid), propertyName));
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h
index b56da8dfa5d56ef308c7a8052d3a33b65748d694..82b1670e5001d0d69070154cf0cc601672db7715 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h
@@ -68,9 +68,9 @@ class NodeInstanceServer : public NodeInstanceServerInterface
 {
     Q_OBJECT
 public:
-    typedef QPair<QPointer<QObject>, QString>  ObjectPropertyPair;
+    typedef QPair<QPointer<QObject>, PropertyName>  ObjectPropertyPair;
     typedef QPair<qint32, QString>  IdPropertyPair;
-    typedef QPair<ServerNodeInstance, QString>  InstancePropertyPair;
+    typedef QPair<ServerNodeInstance, PropertyName>  InstancePropertyPair;
     typedef QPair<QString, QPointer<QObject> > DummyPair;
 
     explicit NodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient);
@@ -107,8 +107,8 @@ public:
     QFileSystemWatcher *fileSystemWatcher();
     QFileSystemWatcher *dummydataFileSystemWatcher();
     Internal::ChildrenChangeEventFilter *childrenChangeEventFilter() const;
-    void addFilePropertyToFileSystemWatcher(QObject *object, const QString &propertyName, const QString &path);
-    void removeFilePropertyFromFileSystemWatcher(QObject *object, const QString &propertyName, const QString &path);
+    void addFilePropertyToFileSystemWatcher(QObject *object, const PropertyName &propertyName, const QString &path);
+    void removeFilePropertyFromFileSystemWatcher(QObject *object, const PropertyName &propertyName, const QString &path);
 
     QUrl fileUrl() const;
 
@@ -118,7 +118,7 @@ public:
 
     ServerNodeInstance rootNodeInstance() const;
 
-    void notifyPropertyChange(qint32 instanceid, const QString &propertyName);
+    void notifyPropertyChange(qint32 instanceid, const PropertyName &propertyName);
 
     QStringList imports() const;
     QObject *dummyContextObject() const;
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancesignalspy.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancesignalspy.cpp
index 35c5c044d76e1c0bb4db1adf5f44278720ba2bb6..2dc2367cf04e5d6628b1612719f6ce580563b598 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancesignalspy.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancesignalspy.cpp
@@ -53,7 +53,7 @@ void NodeInstanceSignalSpy::setObjectNodeInstance(const ObjectNodeInstance::Poin
 
 }
 
-void NodeInstanceSignalSpy::registerObject(QObject *spiedObject, const QString &prefix)
+void NodeInstanceSignalSpy::registerObject(QObject *spiedObject, const PropertyName &prefix)
 {
     if (m_registeredObjectList.contains(spiedObject)) // prevent cycles
         return;
@@ -70,7 +70,7 @@ void NodeInstanceSignalSpy::registerObject(QObject *spiedObject, const QString &
                  && QQmlMetaType::isQObject(metaProperty.userType())) {
                   QObject *propertyObject = QQmlMetaType::toQObject(metaProperty.read(spiedObject));
                   if (propertyObject)
-                      registerObject(propertyObject, prefix + metaProperty.name() + QLatin1Char('.'));
+                      registerObject(propertyObject, prefix + metaProperty.name() + '.');
              } else if (metaProperty.hasNotifySignal()) {
                  QMetaMethod metaMethod = metaProperty.notifySignal();
                  bool isConnecting = QMetaObject::connect(spiedObject, metaMethod.methodIndex(), this, methodeOffset, Qt::DirectConnection);
@@ -86,7 +86,7 @@ void NodeInstanceSignalSpy::registerObject(QObject *spiedObject, const QString &
                  && QQmlMetaType::isQObject(metaProperty.userType())) {
                  QObject *propertyObject = QQmlMetaType::toQObject(metaProperty.read(spiedObject));
                  if (propertyObject)
-                     registerObject(propertyObject, prefix + metaProperty.name() + QLatin1Char('/'));
+                     registerObject(propertyObject, prefix + metaProperty.name() + '/');
              }
 
              // search recursive in objects list
@@ -99,7 +99,7 @@ void NodeInstanceSignalSpy::registerObject(QObject *spiedObject, const QString &
                      for (int i = 0; i < list.count(); i++) {
                          QObject *propertyObject = list.at(i);
                          if (propertyObject)
-                             registerObject(propertyObject, prefix + metaProperty.name() + QLatin1Char('/'));
+                             registerObject(propertyObject, prefix + metaProperty.name() + '/');
                      }
                  }
              }
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancesignalspy.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancesignalspy.h
index 6f8bdacdf86ae416ff575c2a29bb6e7dbe9019f5..8c1bb7c059b483ea121765e539178c4c94dcf4cc 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancesignalspy.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancesignalspy.h
@@ -34,7 +34,10 @@
 #include <QHash>
 #include <QSharedPointer>
 
+#include "nodeinstanceglobal.h"
+
 namespace QmlDesigner {
+
 namespace Internal {
 
 class ObjectNodeInstance;
@@ -51,11 +54,11 @@ public:
     virtual int qt_metacall(QMetaObject::Call, int, void **);
 
 protected:
-    void registerObject(QObject *spiedObject, const QString &prefix = QString());
+    void registerObject(QObject *spiedObject, const PropertyName &prefix = PropertyName());
 
 private:
     int methodeOffset;
-    QHash<int, QString> m_indexPropertyHash;
+    QHash<int, PropertyName> m_indexPropertyHash;
     QObjectList m_registeredObjectList;
     ObjectNodeInstanceWeakPointer m_objectNodeInstance;
 };
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp
index fea1a5199c0315837105b1b86afde2a14e8c686c..b4c54a7e7912eb17290f51a9166bc72eb3a54d1d 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp
@@ -79,7 +79,7 @@ void ObjectNodeInstance::destroy()
         if (object()) {
             setId(QString());
             if (m_instanceId >= 0) {
-                reparent(parentInstance(), m_parentProperty, ObjectNodeInstance::Pointer(), QString());
+                reparent(parentInstance(), m_parentProperty, ObjectNodeInstance::Pointer(), PropertyName());
             }
         }
 
@@ -235,7 +235,7 @@ double ObjectNodeInstance::opacity() const
     return 1.0;
 }
 
-bool ObjectNodeInstance::hasAnchor(const QString &/*name*/) const
+bool ObjectNodeInstance::hasAnchor(const PropertyName &/*name*/) const
 {
     return false;
 }
@@ -250,9 +250,9 @@ bool ObjectNodeInstance::isAnchoredByChildren() const
     return false;
 }
 
-QPair<QString, ServerNodeInstance> ObjectNodeInstance::anchor(const QString &/*name*/) const
+QPair<PropertyName, ServerNodeInstance> ObjectNodeInstance::anchor(const PropertyName &/*name*/) const
 {
-    return qMakePair(QString(), ServerNodeInstance());
+    return qMakePair(PropertyName(), ServerNodeInstance());
 }
 
 
@@ -280,7 +280,7 @@ static bool hasFullImplementedListInterface(const QQmlListReference &list)
 
 static void removeObjectFromList(const QQmlProperty &property, QObject *objectToBeRemoved, QQmlEngine * engine)
 {
-    QQmlListReference listReference(property.object(), property.name().toLatin1(), engine);
+    QQmlListReference listReference(property.object(), property.name().toUtf8(), engine);
 
     if (!hasFullImplementedListInterface(listReference)) {
         qWarning() << "Property list interface not fully implemented for Class " << property.property().typeName() << " in property " << property.name() << "!";
@@ -303,7 +303,7 @@ static void removeObjectFromList(const QQmlProperty &property, QObject *objectTo
         listReference.append(object);
 }
 
-void ObjectNodeInstance::removeFromOldProperty(QObject *object, QObject *oldParent, const QString &oldParentProperty)
+void ObjectNodeInstance::removeFromOldProperty(QObject *object, QObject *oldParent, const PropertyName &oldParentProperty)
 {
     QQmlProperty property(oldParent, oldParentProperty, context());
 
@@ -322,7 +322,7 @@ void ObjectNodeInstance::removeFromOldProperty(QObject *object, QObject *oldPare
         object->setParent(0);
 }
 
-void ObjectNodeInstance::addToNewProperty(QObject *object, QObject *newParent, const QString &newParentProperty)
+void ObjectNodeInstance::addToNewProperty(QObject *object, QObject *newParent, const PropertyName &newParentProperty)
 {
     QQmlProperty property(newParent, newParentProperty, context());
 
@@ -347,7 +347,7 @@ void ObjectNodeInstance::addToNewProperty(QObject *object, QObject *newParent, c
     Q_ASSERT(objectToVariant(object).isValid());
 }
 
-void ObjectNodeInstance::reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const QString &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const QString &newParentProperty)
+void ObjectNodeInstance::reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const PropertyName &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const PropertyName &newParentProperty)
 {
     if (oldParentInstance) {
         removeFromOldProperty(object(), oldParentInstance->object(), oldParentProperty);
@@ -422,7 +422,7 @@ QVariant ObjectNodeInstance::fixResourcePaths(const QVariant &value)
     return value;
 }
 
-void ObjectNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void ObjectNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     QQmlProperty property(object(), name, context());
 
@@ -457,7 +457,7 @@ void ObjectNodeInstance::setPropertyVariant(const QString &name, const QVariant
     }
 }
 
-void ObjectNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+void ObjectNodeInstance::setPropertyBinding(const PropertyName &name, const QString &expression)
 {
     QQmlProperty property(object(), name, context());
 
@@ -500,7 +500,7 @@ void ObjectNodeInstance::deleteObjectsInList(const QQmlProperty &property)
     list.clear();
 }
 
-void ObjectNodeInstance::resetProperty(const QString &name)
+void ObjectNodeInstance::resetProperty(const PropertyName &name)
 {
     doResetProperty(name);
 
@@ -511,7 +511,7 @@ void ObjectNodeInstance::resetProperty(const QString &name)
         doResetProperty("font.pixelSize");
 }
 
-void ObjectNodeInstance::refreshProperty(const QString &name)
+void ObjectNodeInstance::refreshProperty(const PropertyName &name)
 {
     QQmlProperty property(object(), name, context());
 
@@ -527,14 +527,14 @@ void ObjectNodeInstance::refreshProperty(const QString &name)
 
     if (oldValue.type() == QVariant::Url) {
         QByteArray key = oldValue.toUrl().toEncoded(QUrl::UrlFormattingOption(0x100));
-        QString pixmapKey = QString::fromLatin1(key.constData(), key.count());
+        QString pixmapKey = QString::fromUtf8(key.constData(), key.count());
         QPixmapCache::remove(pixmapKey);
     }
 
     property.write(oldValue);
 }
 
-bool ObjectNodeInstance::hasBindingForProperty(const QString &name, bool *hasChanged) const
+bool ObjectNodeInstance::hasBindingForProperty(const PropertyName &name, bool *hasChanged) const
 {
     QQmlProperty property(object(), name, context());
 
@@ -549,7 +549,7 @@ bool ObjectNodeInstance::hasBindingForProperty(const QString &name, bool *hasCha
     return QQmlPropertyPrivate::binding(property);
 }
 
-void ObjectNodeInstance::doResetProperty(const QString &propertyName)
+void ObjectNodeInstance::doResetProperty(const PropertyName &propertyName)
 {
     m_modelAbstractPropertyHash.remove(propertyName);
 
@@ -597,7 +597,7 @@ void ObjectNodeInstance::doResetProperty(const QString &propertyName)
     }
 }
 
-QVariant ObjectNodeInstance::property(const QString &name) const
+QVariant ObjectNodeInstance::property(const PropertyName &name) const
 {
     if (m_modelAbstractPropertyHash.contains(name))
         return QVariant::fromValue(m_modelAbstractPropertyHash.value(name));
@@ -624,9 +624,9 @@ QVariant ObjectNodeInstance::property(const QString &name) const
     return property.read();
 }
 
-QStringList allPropertyNames(QObject *object, const QString &baseName = QString(), QObjectList *inspectedObjects = new QObjectList)
+PropertyNameList allPropertyNames(QObject *object, const PropertyName &baseName = PropertyName(), QObjectList *inspectedObjects = new QObjectList)
 {
-    QStringList propertyNameList;
+    PropertyNameList propertyNameList;
 
 
     if (inspectedObjects== 0 || inspectedObjects->contains(object))
@@ -643,28 +643,28 @@ QStringList allPropertyNames(QObject *object, const QString &baseName = QString(
             if (declarativeProperty.name() != "parent") {
                 QObject *childObject = QQmlMetaType::toQObject(declarativeProperty.read());
                 if (childObject)
-                    propertyNameList.append(allPropertyNames(childObject, baseName +  QString::fromUtf8(metaProperty.name()) + '.', inspectedObjects));
+                    propertyNameList.append(allPropertyNames(childObject, baseName +  PropertyName(metaProperty.name()) + '.', inspectedObjects));
             }
         } else if (QQmlValueTypeFactory::valueType(metaProperty.userType())) {
             QQmlValueType *valueType = QQmlValueTypeFactory::valueType(metaProperty.userType());
             valueType->setValue(metaProperty.read(object));
-            propertyNameList.append(allPropertyNames(valueType, baseName +  QString::fromUtf8(metaProperty.name()) + '.', inspectedObjects));
+            propertyNameList.append(allPropertyNames(valueType, baseName +  PropertyName(metaProperty.name()) + '.', inspectedObjects));
         } else  {
-            propertyNameList.append(baseName + QString::fromUtf8(metaProperty.name()));
+            propertyNameList.append(baseName + PropertyName(metaProperty.name()));
         }
     }
 
     return propertyNameList;
 }
 
-QStringList ObjectNodeInstance::propertyNames() const
+PropertyNameList ObjectNodeInstance::propertyNames() const
 {
     if (isValid())
         return allPropertyNames(object());
-    return QStringList();
+    return PropertyNameList();
 }
 
-QString ObjectNodeInstance::instanceType(const QString &name) const
+QString ObjectNodeInstance::instanceType(const PropertyName &name) const
 {
     QQmlProperty property(object(), name, context());
     if (!property.isValid())
@@ -785,9 +785,9 @@ static void disableTiledBackingStore(QObject *object)
     Q_UNUSED(object);
 }
 
-QStringList propertyNameForWritableProperties(QObject *object, const QString &baseName = QString(), QObjectList *inspectedObjects = new QObjectList())
+PropertyNameList propertyNameForWritableProperties(QObject *object, const PropertyName &baseName = PropertyName(), QObjectList *inspectedObjects = new QObjectList())
 {
-    QStringList propertyNameList;
+    PropertyNameList propertyNameList;
 
     if (inspectedObjects == 0 || inspectedObjects->contains(object))
         return propertyNameList;
@@ -802,16 +802,16 @@ QStringList propertyNameForWritableProperties(QObject *object, const QString &ba
             if (declarativeProperty.name() != "parent") {
                 QObject *childObject = QQmlMetaType::toQObject(declarativeProperty.read());
                 if (childObject)
-                    propertyNameList.append(propertyNameForWritableProperties(childObject, baseName +  QString::fromUtf8(metaProperty.name()) + '.', inspectedObjects));
+                    propertyNameList.append(propertyNameForWritableProperties(childObject, baseName +  PropertyName(metaProperty.name()) + '.', inspectedObjects));
             }
         } else if (QQmlValueTypeFactory::valueType(metaProperty.userType())) {
             QQmlValueType *valueType = QQmlValueTypeFactory::valueType(metaProperty.userType());
             valueType->setValue(metaProperty.read(object));
-            propertyNameList.append(propertyNameForWritableProperties(valueType, baseName +  QString::fromUtf8(metaProperty.name()) + '.', inspectedObjects));
+            propertyNameList.append(propertyNameForWritableProperties(valueType, baseName +  PropertyName(metaProperty.name()) + '.', inspectedObjects));
         }
 
         if (metaProperty.isReadable() && metaProperty.isWritable()) {
-            propertyNameList.append(baseName + QString::fromUtf8(metaProperty.name()));
+            propertyNameList.append(baseName + PropertyName(metaProperty.name()));
         }
     }
 
@@ -823,9 +823,9 @@ static void fixResourcePathsForObject(QObject *object)
     if (qgetenv("QMLDESIGNER_RC_PATHS").isEmpty())
         return;
 
-    QStringList propertyNameList = propertyNameForWritableProperties(object);
+    PropertyNameList propertyNameList = propertyNameForWritableProperties(object);
 
-    foreach (const QString &propertyName, propertyNameList) {
+    foreach (const PropertyName &propertyName, propertyNameList) {
         QQmlProperty property(object, propertyName, QQmlEngine::contextForObject(object));
 
         const QVariant value  = property.read();
@@ -1039,9 +1039,9 @@ void ObjectNodeInstance::deactivateState()
 
 void ObjectNodeInstance::populateResetHashes()
 {
-    QStringList propertyNameList = propertyNameForWritableProperties(object());
+    PropertyNameList propertyNameList = propertyNameForWritableProperties(object());
 
-    foreach (const QString &propertyName, propertyNameList) {
+    foreach (const PropertyName &propertyName, propertyNameList) {
         QQmlProperty property(object(), propertyName, QQmlEngine::contextForObject(object()));
 
         QQmlAbstractBinding::Pointer binding = QQmlAbstractBinding::getPointer(QQmlPropertyPrivate::binding(property));
@@ -1053,22 +1053,22 @@ void ObjectNodeInstance::populateResetHashes()
     }
 }
 
-QQmlAbstractBinding *ObjectNodeInstance::resetBinding(const QString &propertyName) const
+QQmlAbstractBinding *ObjectNodeInstance::resetBinding(const PropertyName &propertyName) const
 {
     return m_resetBindingHash.value(propertyName).data();
 }
 
-bool ObjectNodeInstance::hasValidResetBinding(const QString &propertyName) const
+bool ObjectNodeInstance::hasValidResetBinding(const PropertyName &propertyName) const
 {
     return m_resetBindingHash.contains(propertyName) &&  m_resetBindingHash.value(propertyName).data();
 }
 
-QVariant ObjectNodeInstance::resetValue(const QString &propertyName) const
+QVariant ObjectNodeInstance::resetValue(const PropertyName &propertyName) const
 {
     return m_resetValueHash.value(propertyName);
 }
 
-void ObjectNodeInstance::setResetValue(const QString &propertyName, const QVariant &value)
+void ObjectNodeInstance::setResetValue(const PropertyName &propertyName, const QVariant &value)
 {
     m_resetValueHash.insert(propertyName, value);
 }
@@ -1145,17 +1145,17 @@ void ObjectNodeInstance::createDynamicProperty(const QString &name, const QStrin
     m_metaObject->createNewProperty(name);
 }
 
-bool ObjectNodeInstance::updateStateVariant(const ObjectNodeInstance::Pointer &/*target*/, const QString &/*propertyName*/, const QVariant &/*value*/)
+bool ObjectNodeInstance::updateStateVariant(const ObjectNodeInstance::Pointer &/*target*/, const PropertyName &/*propertyName*/, const QVariant &/*value*/)
 {
     return false;
 }
 
-bool ObjectNodeInstance::updateStateBinding(const ObjectNodeInstance::Pointer &/*target*/, const QString &/*propertyName*/, const QString &/*expression*/)
+bool ObjectNodeInstance::updateStateBinding(const ObjectNodeInstance::Pointer &/*target*/, const PropertyName &/*propertyName*/, const QString &/*expression*/)
 {
     return false;
 }
 
-bool ObjectNodeInstance::resetStateProperty(const ObjectNodeInstance::Pointer &/*target*/, const QString &/*propertyName*/, const QVariant &/*resetValue*/)
+bool ObjectNodeInstance::resetStateProperty(const ObjectNodeInstance::Pointer &/*target*/, const PropertyName &/*propertyName*/, const QVariant &/*resetValue*/)
 {
     return false;
 }
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h
index 08a4b1ca227ec34c14a10857d5c9f99b2f1f2f78..4feb35aaccc82883afbc713a2bc8c6b5119c8fa3 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h
@@ -90,7 +90,7 @@ public:
 
     Pointer parentInstance() const;
 
-    virtual void reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const QString &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const QString &newParentProperty);
+    virtual void reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const PropertyName &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const PropertyName &newParentProperty);
 
     virtual void setId(const QString &id);
     virtual QString id() const;
@@ -112,8 +112,8 @@ public:
 
     virtual int penWidth() const;
 
-    virtual bool hasAnchor(const QString &name) const;
-    virtual QPair<QString, ServerNodeInstance> anchor(const QString &name) const;
+    virtual bool hasAnchor(const PropertyName &name) const;
+    virtual QPair<PropertyName, ServerNodeInstance> anchor(const PropertyName &name) const;
     virtual bool isAnchoredBySibling() const;
     virtual bool isAnchoredByChildren() const;
 
@@ -123,17 +123,17 @@ public:
     virtual QPointF transformOriginPoint() const;
     virtual double zValue() const;
 
-    virtual void setPropertyVariant(const QString &name, const QVariant &value);
-    virtual void setPropertyBinding(const QString &name, const QString &expression);
-    virtual QVariant property(const QString &name) const;
-    virtual void resetProperty(const QString &name);
-    virtual void refreshProperty(const QString &name);
-    virtual QString instanceType(const QString &name) const;
-    QStringList propertyNames() const;
+    virtual void setPropertyVariant(const PropertyName &name, const QVariant &value);
+    virtual void setPropertyBinding(const PropertyName &name, const QString &expression);
+    virtual QVariant property(const PropertyName &name) const;
+    virtual void resetProperty(const PropertyName &name);
+    virtual void refreshProperty(const PropertyName &name);
+    virtual QString instanceType(const PropertyName &name) const;
+    PropertyNameList propertyNames() const;
 
     virtual QList<ServerNodeInstance> childItems() const;
 
-    void createDynamicProperty(const QString &name, const QString &typeName);
+    void createDynamicProperty(const QString &PropertyName, const QString &typeName);
     void setDeleteHeldInstance(bool deleteInstance);
     bool deleteHeldInstance() const;
 
@@ -144,10 +144,10 @@ public:
     virtual void deactivateState();
 
     void populateResetHashes();
-    bool hasValidResetBinding(const QString &propertyName) const;
-    QQmlAbstractBinding *resetBinding(const QString &propertyName) const;
-    QVariant resetValue(const QString &propertyName) const;
-    void setResetValue(const QString &propertyName, const QVariant &value);
+    bool hasValidResetBinding(const PropertyName &propertyName) const;
+    QQmlAbstractBinding *resetBinding(const PropertyName &propertyName) const;
+    QVariant resetValue(const PropertyName &propertyName) const;
+    void setResetValue(const PropertyName &propertyName, const QVariant &value);
 
     QObject *object() const;
 
@@ -158,14 +158,14 @@ public:
     void setInPositioner(bool isInPositioner);
     virtual void refreshPositioner();
 
-    bool hasBindingForProperty(const QString &name, bool *hasChanged = 0) const;
+    bool hasBindingForProperty(const PropertyName &name, bool *hasChanged = 0) const;
 
     QQmlContext *context() const;
     QQmlEngine *engine() const;
 
-    virtual bool updateStateVariant(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QVariant &value);
-    virtual bool updateStateBinding(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QString &expression);
-    virtual bool resetStateProperty(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QVariant &resetValue);
+    virtual bool updateStateVariant(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QVariant &value);
+    virtual bool updateStateBinding(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QString &expression);
+    virtual bool resetStateProperty(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QVariant &resetValue);
 
 
     bool isValid() const;
@@ -180,22 +180,22 @@ public:
     static QVariant fixResourcePaths(const QVariant &value);
 
 protected:
-    void doResetProperty(const QString &propertyName);
-    void removeFromOldProperty(QObject *object, QObject *oldParent, const QString &oldParentProperty);
-    void addToNewProperty(QObject *object, QObject *newParent, const QString &newParentProperty);
+    void doResetProperty(const PropertyName &propertyName);
+    void removeFromOldProperty(QObject *object, QObject *oldParent, const PropertyName &oldParentProperty);
+    void addToNewProperty(QObject *object, QObject *newParent, const PropertyName &newParentProperty);
     void deleteObjectsInList(const QQmlProperty &metaProperty);
     QVariant convertSpecialCharacter(const QVariant& value) const;
 
 private:
-    QHash<QString, QVariant> m_resetValueHash;
-    QHash<QString, QWeakPointer<QQmlAbstractBinding> > m_resetBindingHash;
-    QHash<QString, ServerNodeInstance> m_modelAbstractPropertyHash;
-    mutable QHash<QString, bool> m_hasBindingHash;
+    QHash<PropertyName, QVariant> m_resetValueHash;
+    QHash<PropertyName, QWeakPointer<QQmlAbstractBinding> > m_resetBindingHash;
+    QHash<PropertyName, ServerNodeInstance> m_modelAbstractPropertyHash;
+    mutable QHash<PropertyName, bool> m_hasBindingHash;
     qint32 m_instanceId;
     QString m_id;
 
     QPointer<NodeInstanceServer> m_nodeInstanceServer;
-    QString m_parentProperty;
+    PropertyName m_parentProperty;
     bool m_deleteHeldInstance;
     QPointer<QObject> m_object;
     NodeInstanceMetaObject *m_metaObject;
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.cpp
index 2a615f01bd761175d11d4078e2d1933364904851..83f20fb7e4245861453402235920a622d8f432a8 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.cpp
@@ -47,7 +47,7 @@ bool PositionerNodeInstance::isResizable() const
     return true;
 }
 
-void PositionerNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void PositionerNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     if (name == "move" || name == "add" || name == "populate")
         return;
@@ -55,7 +55,7 @@ void PositionerNodeInstance::setPropertyVariant(const QString &name, const QVari
     QuickItemNodeInstance::setPropertyVariant(name, value);
 }
 
-void PositionerNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+void PositionerNodeInstance::setPropertyBinding(const PropertyName &name, const QString &expression)
 {
     if (name == "move" || name == "add" || name == "populate")
         return;
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.h
index f2d1474d362aba4196d3485ffa5e15cf1db32c8d..1028af42d49f01b9767850434d5db40e09782377 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.h
@@ -47,8 +47,8 @@ public:
 
     static Pointer create(QObject *objectToBeWrapped);
 
-    void setPropertyVariant(const QString &name, const QVariant &value);
-    void setPropertyBinding(const QString &name, const QString &expression);
+    void setPropertyVariant(const PropertyName &name, const QVariant &value);
+    void setPropertyBinding(const PropertyName &name, const QString &expression);
 
     bool isPositioner() const;
 
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlpropertychangesnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlpropertychangesnodeinstance.cpp
index a22d3d5b44fdbec21eaacb0cbf2879c437baf3c1..e9a3557848311774570d2f3281cbfa09993304fe 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlpropertychangesnodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlpropertychangesnodeinstance.cpp
@@ -61,14 +61,14 @@ QmlPropertyChangesNodeInstance::Pointer QmlPropertyChangesNodeInstance::create(Q
     return instance;
 }
 
-void QmlPropertyChangesNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void QmlPropertyChangesNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     QMetaObject metaObject = QQuickPropertyChanges::staticMetaObject;
 
-    if (metaObject.indexOfProperty(name.toLatin1()) > 0) { // 'restoreEntryValues', 'explicit'
+    if (metaObject.indexOfProperty(name) > 0) { // 'restoreEntryValues', 'explicit'
         ObjectNodeInstance::setPropertyVariant(name, value);
     } else {
-        changesObject()->changeValue(name.toLatin1(), value);
+        changesObject()->changeValue(name, value);
         QObject *targetObject = changesObject()->object();
         if (targetObject && nodeInstanceServer()->activeStateInstance().isWrappingThisObject(changesObject()->state())) {
             ServerNodeInstance targetInstance = nodeInstanceServer()->instanceForObject(targetObject);
@@ -77,29 +77,29 @@ void QmlPropertyChangesNodeInstance::setPropertyVariant(const QString &name, con
     }
 }
 
-void QmlPropertyChangesNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+void QmlPropertyChangesNodeInstance::setPropertyBinding(const PropertyName &name, const QString &expression)
 {
     QMetaObject metaObject = QQuickPropertyChanges::staticMetaObject;
 
-    if (metaObject.indexOfProperty(name.toLatin1()) > 0) { // 'restoreEntryValues', 'explicit'
+    if (metaObject.indexOfProperty(name) > 0) { // 'restoreEntryValues', 'explicit'
         ObjectNodeInstance::setPropertyBinding(name, expression);
     } else {
-        changesObject()->changeExpression(name.toLatin1(), expression);
+        changesObject()->changeExpression(name, expression);
     }
 }
 
-QVariant QmlPropertyChangesNodeInstance::property(const QString &name) const
+QVariant QmlPropertyChangesNodeInstance::property(const PropertyName &name) const
 {
-    return changesObject()->property(name.toLatin1());
+    return changesObject()->property(name);
 }
 
-void QmlPropertyChangesNodeInstance::resetProperty(const QString &name)
+void QmlPropertyChangesNodeInstance::resetProperty(const PropertyName &name)
 {
-    changesObject()->removeProperty(name.toLatin1());
+    changesObject()->removeProperty(name);
 }
 
 
-void QmlPropertyChangesNodeInstance::reparent(const ServerNodeInstance &oldParentInstance, const QString &oldParentProperty, const ServerNodeInstance &newParentInstance, const QString &newParentProperty)
+void QmlPropertyChangesNodeInstance::reparent(const ServerNodeInstance &oldParentInstance, const PropertyName &oldParentProperty, const ServerNodeInstance &newParentInstance, const PropertyName &newParentProperty)
 {
     changesObject()->detachFromState();
 
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlpropertychangesnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlpropertychangesnodeinstance.h
index 7e38d1207152ea7b1d515dcbf0c05048392b94a8..30e2986827b01707121a386dd0402634bd69514b 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlpropertychangesnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlpropertychangesnodeinstance.h
@@ -54,13 +54,13 @@ public:
 
     static Pointer create(QObject *objectToBeWrapped);
 
-    virtual void setPropertyVariant(const QString &name, const QVariant &value);
-    virtual void setPropertyBinding(const QString &name, const QString &expression);
-    virtual QVariant property(const QString &name) const;
-    virtual void resetProperty(const QString &name);
+    virtual void setPropertyVariant(const PropertyName &name, const QVariant &value);
+    virtual void setPropertyBinding(const PropertyName &name, const QString &expression);
+    virtual QVariant property(const PropertyName &name) const;
+    virtual void resetProperty(const PropertyName &name);
 
     using ObjectNodeInstance::reparent; // keep the virtual reparent(...) method around
-    void reparent(const ServerNodeInstance &oldParentInstance, const QString &oldParentProperty, const ServerNodeInstance &newParentInstance, const QString &newParentProperty);
+    void reparent(const ServerNodeInstance &oldParentInstance, const PropertyName &oldParentProperty, const ServerNodeInstance &newParentInstance, const PropertyName &newParentProperty);
 
 protected:
     QmlPropertyChangesNodeInstance(QQuickPropertyChanges *object);
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.cpp
index 54b55d8e7124342c08a689e03d20439936214065..22b26ee17220392ebfa9a909b4bf4ec3e651f443 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.cpp
@@ -99,7 +99,7 @@ bool QmlStateNodeInstance::isStateActive() const
     return stateObject() && stateGroup() && stateGroup()->state() == property("name");
 }
 
-void QmlStateNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void QmlStateNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     bool hasParent = parent();
     bool isStateOfTheRootModelNode = parentInstance() && parentInstance()->isRootNodeInstance();
@@ -109,7 +109,7 @@ void QmlStateNodeInstance::setPropertyVariant(const QString &name, const QVarian
     ObjectNodeInstance::setPropertyVariant(name, value);
 }
 
-void QmlStateNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+void QmlStateNodeInstance::setPropertyBinding(const PropertyName &name, const QString &expression)
 {
     bool hasParent = parent();
     bool isStateOfTheRootModelNode = parentInstance() && parentInstance()->isRootNodeInstance();
@@ -119,19 +119,19 @@ void QmlStateNodeInstance::setPropertyBinding(const QString &name, const QString
     ObjectNodeInstance::setPropertyBinding(name, expression);
 }
 
-bool QmlStateNodeInstance::updateStateVariant(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QVariant &value)
+bool QmlStateNodeInstance::updateStateVariant(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QVariant &value)
 {
-    return stateObject()->changeValueInRevertList(target->object(), propertyName.toLatin1(), value);
+    return stateObject()->changeValueInRevertList(target->object(), QString::fromUtf8(propertyName), value);
 }
 
-bool QmlStateNodeInstance::updateStateBinding(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QString &expression)
+bool QmlStateNodeInstance::updateStateBinding(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QString &expression)
 {
-    return stateObject()->changeValueInRevertList(target->object(), propertyName.toLatin1(), expression);
+    return stateObject()->changeValueInRevertList(target->object(), QString::fromUtf8(propertyName), expression);
 }
 
-bool QmlStateNodeInstance::resetStateProperty(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QVariant & /* resetValue */)
+bool QmlStateNodeInstance::resetStateProperty(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QVariant & /* resetValue */)
 {
-    return stateObject()->removeEntryFromRevertList(target->object(), propertyName.toLatin1());
+    return stateObject()->removeEntryFromRevertList(target->object(), QString::fromUtf8(propertyName));
 }
 
 } // namespace Internal
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.h
index fe319431a9dc4b74e98384efe9d75e43f8cbad8e..78a759f1dfbe05d6975af496b64ad15842c11ccd 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.h
@@ -48,15 +48,15 @@ public:
 
     static Pointer create(QObject *objectToBeWrapped);
 
-    void setPropertyVariant(const QString &name, const QVariant &value);
-    void setPropertyBinding(const QString &name, const QString &expression);
+    void setPropertyVariant(const PropertyName &name, const QVariant &value);
+    void setPropertyBinding(const PropertyName &name, const QString &expression);
 
     void activateState();
     void deactivateState();
 
-    bool updateStateVariant(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QVariant &value);
-    bool updateStateBinding(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QString &expression);
-    bool resetStateProperty(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QVariant &resetValue);
+    bool updateStateVariant(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QVariant &value);
+    bool updateStateBinding(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QString &expression);
+    bool resetStateProperty(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QVariant &resetValue);
 
 
 protected:
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmltransitionnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmltransitionnodeinstance.cpp
index c945fcab7c337703a8527b42a70efde493834679..3243450e0e4df2199cedaefbe4c03bee4f04a3e9 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmltransitionnodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmltransitionnodeinstance.cpp
@@ -59,7 +59,7 @@ bool QmlTransitionNodeInstance::isTransition() const
     return true;
 }
 
-void QmlTransitionNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void QmlTransitionNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     if (name == "from" || name == "to")
         return;
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmltransitionnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmltransitionnodeinstance.h
index cbfc5956420f2d7c876db077cd29e3f35b1a5f07..d12e367abd086ad73a7c667fdb7253eaa55d8421 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmltransitionnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmltransitionnodeinstance.h
@@ -47,7 +47,7 @@ public:
 
     static Pointer create(QObject *objectToBeWrapped);
 
-    void setPropertyVariant(const QString &name, const QVariant &value);
+    void setPropertyVariant(const PropertyName &name, const QVariant &value);
 
     bool isTransition() const;
 
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp
index 2a3bbb540a9ee755be1150bff05ae2eb37270033..f4db8ed8fc708ad35df80bd14409f43ba06883a8 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp
@@ -353,7 +353,7 @@ QRectF QuickItemNodeInstance::boundingRect() const
     return QRectF();
 }
 
-void QuickItemNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void QuickItemNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     if (name == "state")
         return; // states are only set by us
@@ -390,7 +390,7 @@ void QuickItemNodeInstance::setPropertyVariant(const QString &name, const QVaria
         parentInstance()->refreshPositioner();
 }
 
-void QuickItemNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+void QuickItemNodeInstance::setPropertyBinding(const PropertyName &name, const QString &expression)
 {
     if (name == "state")
         return; // states are only set by us
@@ -405,7 +405,7 @@ void QuickItemNodeInstance::setPropertyBinding(const QString &name, const QStrin
         parentInstance()->refreshPositioner();
 }
 
-QVariant QuickItemNodeInstance::property(const QString &name) const
+QVariant QuickItemNodeInstance::property(const PropertyName &name) const
 {
     return ObjectNodeInstance::property(name);
 }
@@ -486,7 +486,7 @@ int QuickItemNodeInstance::penWidth() const
     return DesignerSupport::borderWidth(quickItem());
 }
 
-void QuickItemNodeInstance::resetProperty(const QString &name)
+void QuickItemNodeInstance::resetProperty(const PropertyName &name)
 {
     if (name == "height") {
         m_hasHeight = false;
@@ -536,7 +536,7 @@ void QuickItemNodeInstance::resetProperty(const QString &name)
         parentInstance()->refreshPositioner();
 }
 
-void QuickItemNodeInstance::reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const QString &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const QString &newParentProperty)
+void QuickItemNodeInstance::reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const PropertyName &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const PropertyName &newParentProperty)
 {
     if (oldParentInstance && oldParentInstance->isPositioner()) {
         setInPositioner(false);
@@ -565,9 +565,9 @@ void QuickItemNodeInstance::reparent(const ObjectNodeInstance::Pointer &oldParen
         parentInstance()->refreshPositioner();
 }
 
-static bool isValidAnchorName(const QString &name)
+static bool isValidAnchorName(const PropertyName &name)
 {
-    static QStringList anchorNameList(QStringList() << "anchors.top"
+    static PropertyNameList anchorNameList(PropertyNameList() << "anchors.top"
                                                     << "anchors.left"
                                                     << "anchors.right"
                                                     << "anchors.bottom"
@@ -580,12 +580,12 @@ static bool isValidAnchorName(const QString &name)
     return anchorNameList.contains(name);
 }
 
-bool QuickItemNodeInstance::hasAnchor(const QString &name) const
+bool QuickItemNodeInstance::hasAnchor(const PropertyName &name) const
 {
     return DesignerSupport::hasAnchor(quickItem(), name);
 }
 
-QPair<QString, ServerNodeInstance> QuickItemNodeInstance::anchor(const QString &name) const
+QPair<PropertyName, ServerNodeInstance> QuickItemNodeInstance::anchor(const PropertyName &name) const
 {
     if (!isValidAnchorName(name) || !DesignerSupport::hasAnchor(quickItem(), name))
         return ObjectNodeInstance::anchor(name);
@@ -593,7 +593,7 @@ QPair<QString, ServerNodeInstance> QuickItemNodeInstance::anchor(const QString &
     QPair<QString, QObject*> nameObjectPair = DesignerSupport::anchorLineTarget(quickItem(), name, context());
 
     QObject *targetObject = nameObjectPair.second;
-    QString targetName = nameObjectPair.first;
+    PropertyName targetName = nameObjectPair.first.toUtf8();
 
     if (targetObject && nodeInstanceServer()->hasInstanceForObject(targetObject)) {
         return qMakePair(targetName, nodeInstanceServer()->instanceForObject(targetObject));
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h
index ad2f4822e209e13b4d3ea6bcbbd8ebeb9e308b3d..7ac8a9f4ae62269bb1b30896bb32dfc929cff2be 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h
@@ -78,18 +78,18 @@ public:
     bool isMovable() const;
     void setMovable(bool movable);
 
-    void setPropertyVariant(const QString &name, const QVariant &value);
-    void setPropertyBinding(const QString &name, const QString &expression);
+    void setPropertyVariant(const PropertyName &name, const QVariant &value);
+    void setPropertyBinding(const PropertyName &name, const QString &expression);
 
-    QVariant property(const QString &name) const;
-    void resetProperty(const QString &name);
+    QVariant property(const PropertyName &name) const;
+    void resetProperty(const PropertyName &name);
 
-    void reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const QString &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const QString &newParentProperty);
+    void reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const PropertyName &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const PropertyName &newParentProperty);
 
     int penWidth() const;
 
-    bool hasAnchor(const QString &name) const;
-    QPair<QString, ServerNodeInstance> anchor(const QString &name) const;
+    bool hasAnchor(const PropertyName &name) const;
+    QPair<PropertyName, ServerNodeInstance> anchor(const PropertyName &name) const;
     bool isAnchoredBySibling() const;
     bool isAnchoredByChildren() const;
     void doComponentComplete();
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp
index daf76c31179e1a1d22424d5432618593080e7910..0250e77b1457d2f837693d32efbd1c307ee59107 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp
@@ -246,7 +246,7 @@ ServerNodeInstance ServerNodeInstance::create(NodeInstanceServer *nodeInstanceSe
     return instance;
 }
 
-void ServerNodeInstance::reparent(const ServerNodeInstance &oldParentInstance, const QString &oldParentProperty, const ServerNodeInstance &newParentInstance, const QString &newParentProperty)
+void ServerNodeInstance::reparent(const ServerNodeInstance &oldParentInstance, const PropertyName &oldParentProperty, const ServerNodeInstance &newParentInstance, const PropertyName &newParentProperty)
 {
     m_nodeInstance->reparent(oldParentInstance.m_nodeInstance, oldParentProperty, newParentInstance.m_nodeInstance, newParentProperty);
 }
@@ -303,35 +303,35 @@ QRectF ServerNodeInstance::boundingRect() const
     return boundingRect;
 }
 
-void ServerNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void ServerNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     m_nodeInstance->setPropertyVariant(name, value);
 
 }
 
-void ServerNodeInstance::setPropertyDynamicVariant(const QString &name, const QString &typeName, const QVariant &value)
+void ServerNodeInstance::setPropertyDynamicVariant(const PropertyName &name, const TypeName &typeName, const QVariant &value)
 {
     m_nodeInstance->createDynamicProperty(name, typeName);
     m_nodeInstance->setPropertyVariant(name, value);
 }
 
-void ServerNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+void ServerNodeInstance::setPropertyBinding(const PropertyName &name, const QString &expression)
 {
     m_nodeInstance->setPropertyBinding(name, expression);
 }
 
-void ServerNodeInstance::setPropertyDynamicBinding(const QString &name, const QString &typeName, const QString &expression)
+void ServerNodeInstance::setPropertyDynamicBinding(const PropertyName &name, const TypeName &typeName, const QString &expression)
 {
     m_nodeInstance->createDynamicProperty(name, typeName);
     m_nodeInstance->setPropertyBinding(name, expression);
 }
 
-void ServerNodeInstance::resetProperty(const QString &name)
+void ServerNodeInstance::resetProperty(const PropertyName &name)
 {
     m_nodeInstance->resetProperty(name);
 }
 
-void ServerNodeInstance::refreshProperty(const QString &name)
+void ServerNodeInstance::refreshProperty(const PropertyName &name)
 {
     m_nodeInstance->refreshProperty(name);
 }
@@ -345,17 +345,17 @@ void ServerNodeInstance::setId(const QString &id)
 \brief Returns the property value of the property of this NodeInstance.
 \returns QVariant value
 */
-QVariant ServerNodeInstance::property(const QString &name) const
+QVariant ServerNodeInstance::property(const PropertyName &name) const
 {
     return m_nodeInstance->property(name);
 }
 
-QStringList ServerNodeInstance::propertyNames() const
+PropertyNameList ServerNodeInstance::propertyNames() const
 {
     return m_nodeInstance->propertyNames();
 }
 
-bool ServerNodeInstance::hasBindingForProperty(const QString &name, bool *hasChanged) const
+bool ServerNodeInstance::hasBindingForProperty(const PropertyName &name, bool *hasChanged) const
 {
     return m_nodeInstance->hasBindingForProperty(name, hasChanged);
 }
@@ -364,7 +364,7 @@ bool ServerNodeInstance::hasBindingForProperty(const QString &name, bool *hasCha
 \brief Returns the property default value of the property of this NodeInstance.
 \returns QVariant default value which is the reset value to
 */
-QVariant ServerNodeInstance::defaultValue(const QString &name) const
+QVariant ServerNodeInstance::defaultValue(const PropertyName &name) const
 {
     return m_nodeInstance->resetValue(name);
 }
@@ -372,7 +372,7 @@ QVariant ServerNodeInstance::defaultValue(const QString &name) const
 /*!
 \brief Returns the type of the property of this NodeInstance.
 */
-QString ServerNodeInstance::instanceType(const QString &name) const
+QString ServerNodeInstance::instanceType(const PropertyName &name) const
 {
     return m_nodeInstance->instanceType(name);
 }
@@ -404,7 +404,7 @@ bool ServerNodeInstance::isInPositioner() const
     return m_nodeInstance->isInPositioner();
 }
 
-bool ServerNodeInstance::hasAnchor(const QString &name) const
+bool ServerNodeInstance::hasAnchor(const PropertyName &name) const
 {
     return m_nodeInstance->hasAnchor(name);
 }
@@ -424,7 +424,7 @@ bool ServerNodeInstance::isAnchoredByChildren() const
     return m_nodeInstance->isAnchoredByChildren();
 }
 
-QPair<QString, ServerNodeInstance> ServerNodeInstance::anchor(const QString &name) const
+QPair<PropertyName, ServerNodeInstance> ServerNodeInstance::anchor(const PropertyName &name) const
 {
     return m_nodeInstance->anchor(name);
 }
@@ -569,22 +569,22 @@ void ServerNodeInstance::deactivateState()
     m_nodeInstance->deactivateState();
 }
 
-bool ServerNodeInstance::updateStateVariant(const ServerNodeInstance &target, const QString &propertyName, const QVariant &value)
+bool ServerNodeInstance::updateStateVariant(const ServerNodeInstance &target, const PropertyName &propertyName, const QVariant &value)
 {
     return m_nodeInstance->updateStateVariant(target.internalInstance(), propertyName, value);
 }
 
-bool ServerNodeInstance::updateStateBinding(const ServerNodeInstance &target, const QString &propertyName, const QString &expression)
+bool ServerNodeInstance::updateStateBinding(const ServerNodeInstance &target, const PropertyName &propertyName, const QString &expression)
 {
     return m_nodeInstance->updateStateBinding(target.internalInstance(), propertyName, expression);
 }
 
-QVariant ServerNodeInstance::resetVariant(const QString &propertyName) const
+QVariant ServerNodeInstance::resetVariant(const PropertyName &propertyName) const
 {
     return m_nodeInstance->resetValue(propertyName);
 }
 
-bool ServerNodeInstance::resetStateProperty(const ServerNodeInstance &target, const QString &propertyName, const QVariant &resetValue)
+bool ServerNodeInstance::resetStateProperty(const ServerNodeInstance &target, const PropertyName &propertyName, const QVariant &resetValue)
 {
     return m_nodeInstance->resetStateProperty(target.internalInstance(), propertyName, resetValue);
 }
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.h
index 85307a94a720f2f2ccb99202a9e1cedec485eb92..a230e6f1d963a021eec400b07993aad418a9d5f9 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.h
@@ -117,13 +117,13 @@ public:
     double zValue() const;
 
     double opacity() const;
-    QVariant property(const QString &name) const;
-    QVariant defaultValue(const QString &name) const;
-    QString instanceType(const QString &name) const;
-    QStringList propertyNames() const;
+    QVariant property(const PropertyName &name) const;
+    QVariant defaultValue(const PropertyName &name) const;
+    QString instanceType(const PropertyName &name) const;
+    PropertyNameList propertyNames() const;
 
 
-    bool hasBindingForProperty(const QString &name, bool *hasChanged = 0) const;
+    bool hasBindingForProperty(const PropertyName &name, bool *hasChanged = 0) const;
 
     bool isValid() const;
     void makeInvalid();
@@ -137,12 +137,12 @@ public:
 
     bool isWrappingThisObject(QObject *object) const;
 
-    QVariant resetVariant(const QString &name) const;
+    QVariant resetVariant(const PropertyName &name) const;
 
-    bool hasAnchor(const QString &name) const;
+    bool hasAnchor(const PropertyName &name) const;
     bool isAnchoredBySibling() const;
     bool isAnchoredByChildren() const;
-    QPair<QString, ServerNodeInstance> anchor(const QString &name) const;
+    QPair<PropertyName, ServerNodeInstance> anchor(const PropertyName &name) const;
 
     int penWidth() const;
 
@@ -163,27 +163,27 @@ public:
 private: // functions
     ServerNodeInstance(const QSharedPointer<Internal::ObjectNodeInstance> &abstractInstance);
 
-    void setPropertyVariant(const QString &name, const QVariant &value);
-    void setPropertyDynamicVariant(const QString &name, const QString &typeName, const QVariant &value);
+    void setPropertyVariant(const PropertyName &name, const QVariant &value);
+    void setPropertyDynamicVariant(const PropertyName &name, const TypeName &typeName, const QVariant &value);
 
-    void setPropertyBinding(const QString &name, const QString &expression);
-    void setPropertyDynamicBinding(const QString &name, const QString &typeName, const QString &expression);
+    void setPropertyBinding(const PropertyName &name, const QString &expression);
+    void setPropertyDynamicBinding(const PropertyName &name, const TypeName &typeName, const QString &expression);
 
-    void resetProperty(const QString &name);
-    void refreshProperty(const QString &name);
+    void resetProperty(const PropertyName &name);
+    void refreshProperty(const PropertyName &name);
 
     void activateState();
     void deactivateState();
     void refreshState();
 
-    bool updateStateVariant(const ServerNodeInstance &target, const QString &propertyName, const QVariant &value);
-    bool updateStateBinding(const ServerNodeInstance &target, const QString &propertyName, const QString &expression);
-    bool resetStateProperty(const ServerNodeInstance &target, const QString &propertyName, const QVariant &resetValue);
+    bool updateStateVariant(const ServerNodeInstance &target, const PropertyName &propertyName, const QVariant &value);
+    bool updateStateBinding(const ServerNodeInstance &target, const PropertyName &propertyName, const QString &expression);
+    bool resetStateProperty(const ServerNodeInstance &target, const PropertyName &propertyName, const QVariant &resetValue);
 
     static ServerNodeInstance create(NodeInstanceServer *nodeInstanceServer, const InstanceContainer &instanceContainer, ComponentWrap componentWrap);
 
     void setDeleteHeldInstance(bool deleteInstance);
-    void reparent(const ServerNodeInstance &oldParentInstance, const QString &oldParentProperty, const ServerNodeInstance &newParentInstance, const QString &newParentProperty);
+    void reparent(const ServerNodeInstance &oldParentInstance, const PropertyName &oldParentProperty, const ServerNodeInstance &newParentInstance, const PropertyName &newParentProperty);
 
 
     void setId(const QString &id);
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/behaviornodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/behaviornodeinstance.cpp
index f8274db062b73852acb05d8f17ddf36055fb5fce..3e4927ffd4683cfbee2e2318b4a254c83de93a8e 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/behaviornodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/behaviornodeinstance.cpp
@@ -55,7 +55,7 @@ BehaviorNodeInstance::Pointer BehaviorNodeInstance::create(QObject *object)
     return instance;
 }
 
-void BehaviorNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void BehaviorNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     if (name == "enabled")
         return;
@@ -63,7 +63,7 @@ void BehaviorNodeInstance::setPropertyVariant(const QString &name, const QVarian
     ObjectNodeInstance::setPropertyVariant(name, value);
 }
 
-void BehaviorNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+void BehaviorNodeInstance::setPropertyBinding(const PropertyName &name, const QString &expression)
 {
     if (name == "enabled")
         return;
@@ -71,7 +71,7 @@ void BehaviorNodeInstance::setPropertyBinding(const QString &name, const QString
     ObjectNodeInstance::setPropertyBinding(name, expression);
 }
 
-QVariant BehaviorNodeInstance::property(const QString &name) const
+QVariant BehaviorNodeInstance::property(const PropertyName &name) const
 {
     if (name == "enabled")
         return QVariant::fromValue(m_isEnabled);
@@ -79,7 +79,7 @@ QVariant BehaviorNodeInstance::property(const QString &name) const
     return ObjectNodeInstance::property(name);
 }
 
-void BehaviorNodeInstance::resetProperty(const QString &name)
+void BehaviorNodeInstance::resetProperty(const PropertyName &name)
 {
     if (name == "enabled")
         m_isEnabled = true;
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/behaviornodeinstance.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/behaviornodeinstance.h
index 91dc0cef70097488b2d2a3d4b900c3acbf8b321a..0cc6d68891c9d190313b68e149cc61a3c5fb1f1c 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/behaviornodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/behaviornodeinstance.h
@@ -45,12 +45,12 @@ public:
 
     static Pointer create(QObject *objectToBeWrapped);
 
-    void setPropertyVariant(const QString &name, const QVariant &value);
-    void setPropertyBinding(const QString &name, const QString &expression);
+    void setPropertyVariant(const PropertyName &name, const QVariant &value);
+    void setPropertyBinding(const PropertyName &name, const QString &expression);
 
 
-    QVariant property(const QString &name) const;
-    void resetProperty(const QString &name);
+    QVariant property(const PropertyName &name) const;
+    void resetProperty(const PropertyName &name);
 
 private:
     bool m_isEnabled;
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp
index 062187e196404e7b58d3f84f4e6b1a08845808de..ba61b13bb94a2cf9a7c2a6f1d5167747d1eef910 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp
@@ -237,17 +237,17 @@ bool GraphicsObjectNodeInstance::isGraphicsObject() const
     return true;
 }
 
-void GraphicsObjectNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void GraphicsObjectNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     ObjectNodeInstance::setPropertyVariant(name, value);
 }
 
-void GraphicsObjectNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+void GraphicsObjectNodeInstance::setPropertyBinding(const PropertyName &name, const QString &expression)
 {
     ObjectNodeInstance::setPropertyBinding(name, expression);
 }
 
-QVariant GraphicsObjectNodeInstance::property(const QString &name) const
+QVariant GraphicsObjectNodeInstance::property(const PropertyName &name) const
 {
     return ObjectNodeInstance::property(name);
 }
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.h
index 4edf2baafd4335a49880635a7e0367f5fb3427e4..8350bc961217beaee753011a1a57c16fa0e1151f 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.h
@@ -65,9 +65,9 @@ public:
 
     bool equalGraphicsItem(QGraphicsItem *item) const;
 
-    void setPropertyVariant(const QString &name, const QVariant &value);
-    void setPropertyBinding(const QString &name, const QString &expression);
-    QVariant property(const QString &name) const;
+    void setPropertyVariant(const PropertyName &name, const QVariant &value);
+    void setPropertyBinding(const PropertyName &name, const QString &expression);
+    QVariant property(const PropertyName &name) const;
 
     bool hasContent() const;
 
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstancemetaobject.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstancemetaobject.cpp
index 2c7f1dd6f67723a9ac4966495913ce26e125f82c..101281d7de5c05a51c67496e44bc1c796816c09f 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstancemetaobject.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstancemetaobject.cpp
@@ -46,7 +46,7 @@ NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstance::Pointer
     setCached(true);
 }
 
-NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix, QDeclarativeEngine *engine)
+NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const PropertyName &prefix, QDeclarativeEngine *engine)
     : QDeclarativeOpenMetaObject(object, new QDeclarativeOpenMetaObjectType(object->metaObject(), engine), true),
     m_nodeInstance(nodeInstance),
     m_prefix(prefix)
@@ -56,7 +56,7 @@ NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstancePointer &
 
 void NodeInstanceMetaObject::createNewProperty(const QString &name)
 {
-    int id = createProperty(name.toLatin1(), 0);
+    int id = createProperty(name.toUtf8(), 0);
     setValue(id, QVariant());
     Q_ASSERT(id >= 0);
     Q_UNUSED(id)
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstancemetaobject.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstancemetaobject.h
index 502117f0a01b55b6800849372274352425ae27fc..1dbec0bd0e7c52e850d8e4e6bbfd9ade18fef9b7 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstancemetaobject.h
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstancemetaobject.h
@@ -33,7 +33,10 @@
 #include <QDeclarativeContext>
 #include <private/qdeclarativeopenmetaobject_p.h>
 
+#include "nodeinstanceglobal.h"
+
 namespace QmlDesigner {
+
 namespace Internal {
 
 class ObjectNodeInstance;
@@ -44,7 +47,7 @@ class NodeInstanceMetaObject : public QDeclarativeOpenMetaObject
 {
 public:
     NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QDeclarativeEngine *engine);
-    NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix, QDeclarativeEngine *engine);
+    NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const PropertyName &prefix, QDeclarativeEngine *engine);
     void createNewProperty(const QString &name);
 
 protected:
@@ -53,7 +56,7 @@ protected:
 
 private:
     ObjectNodeInstanceWeakPointer m_nodeInstance;
-    QString m_prefix;
+    PropertyName m_prefix;
     QWeakPointer<QDeclarativeContext> m_context;
 };
 
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstanceserver.cpp
index fa7167b037838ebc06b40ac83e33d0098d8dfa04..2f74cef389513c7ec8ef536554cc0e16649dacad 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstanceserver.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstanceserver.cpp
@@ -655,7 +655,7 @@ Internal::ChildrenChangeEventFilter *NodeInstanceServer::childrenChangeEventFilt
     return m_childrenChangeEventFilter.data();
 }
 
-void NodeInstanceServer::addFilePropertyToFileSystemWatcher(QObject *object, const QString &propertyName, const QString &path)
+void NodeInstanceServer::addFilePropertyToFileSystemWatcher(QObject *object, const PropertyName &propertyName, const QString &path)
 {
     if (!m_fileSystemWatcherHash.contains(path)) {
         m_fileSystemWatcherHash.insert(path, ObjectPropertyPair(object, propertyName));
@@ -663,7 +663,7 @@ void NodeInstanceServer::addFilePropertyToFileSystemWatcher(QObject *object, con
     }
 }
 
-void NodeInstanceServer::removeFilePropertyFromFileSystemWatcher(QObject *object, const QString &propertyName, const QString &path)
+void NodeInstanceServer::removeFilePropertyFromFileSystemWatcher(QObject *object, const PropertyName &propertyName, const QString &path)
 {
     if (m_fileSystemWatcherHash.contains(path)) {
         fileSystemWatcher()->removePath(path);
@@ -676,7 +676,7 @@ void NodeInstanceServer::refreshLocalFileProperty(const QString &path)
     if (m_fileSystemWatcherHash.contains(path)) {
         foreach (const ObjectPropertyPair &objectPropertyPair, m_fileSystemWatcherHash) {
             QObject *object = objectPropertyPair.first.data();
-            QString propertyName = objectPropertyPair.second;
+            PropertyName propertyName = objectPropertyPair.second;
 
             if (hasInstanceForObject(object)) {
                 instanceForObject(object).refreshProperty(propertyName);
@@ -728,7 +728,7 @@ void NodeInstanceServer::resetInstanceProperty(const PropertyAbstractContainer &
         ServerNodeInstance instance = instanceForId(propertyContainer.instanceId());
         Q_ASSERT(instance.isValid());
 
-        const QString name = propertyContainer.name();
+        const PropertyName name = propertyContainer.name();
 
         if (activeStateInstance().isValid() && !instance.isSubclassOf("QtQuick/PropertyChanges")) {
             bool statePropertyWasReseted = activeStateInstance().resetStateProperty(instance, name, instance.resetVariant(name));
@@ -749,7 +749,7 @@ void NodeInstanceServer::setInstancePropertyBinding(const PropertyBindingContain
     if (hasInstanceForId(bindingContainer.instanceId())) {
         ServerNodeInstance instance = instanceForId(bindingContainer.instanceId());
 
-        const QString name = bindingContainer.name();
+        const PropertyName name = bindingContainer.name();
         const QString expression = bindingContainer.expression();
 
 
@@ -783,7 +783,7 @@ void NodeInstanceServer::setInstancePropertyVariant(const PropertyValueContainer
         ServerNodeInstance instance = instanceForId(valueContainer.instanceId());
 
 
-        const QString name = valueContainer.name();
+        const PropertyName name = valueContainer.name();
         const QVariant value = valueContainer.value();
 
 
@@ -810,8 +810,8 @@ void NodeInstanceServer::setInstancePropertyVariant(const PropertyValueContainer
 void NodeInstanceServer::setInstanceAuxiliaryData(const PropertyValueContainer &auxiliaryContainer)
 {
     //instanceId() == 0: the item is root
-    if (auxiliaryContainer.instanceId() == 0 && (auxiliaryContainer.name() == QLatin1String("width") ||
-                                        auxiliaryContainer.name() == QLatin1String("height"))) {
+    if (auxiliaryContainer.instanceId() == 0 && (auxiliaryContainer.name() == "width" ||
+                                        auxiliaryContainer.name() == "height")) {
 
         if (!auxiliaryContainer.value().isNull()) {
             setInstancePropertyVariant(auxiliaryContainer);
@@ -819,8 +819,8 @@ void NodeInstanceServer::setInstanceAuxiliaryData(const PropertyValueContainer &
             rootNodeInstance().resetProperty(auxiliaryContainer.name());
         }
     }
-    if (auxiliaryContainer.name().endsWith(QLatin1String("@NodeInstance"))) {
-        QString propertyName = auxiliaryContainer.name().leftRef(auxiliaryContainer.name().count() - 12).toString();
+    if (auxiliaryContainer.name().endsWith("@NodeInstance")) {
+        PropertyName propertyName = auxiliaryContainer.name().left(auxiliaryContainer.name().count() - 12);
         if (!auxiliaryContainer.value().isNull()) {
             setInstancePropertyVariant(PropertyValueContainer(auxiliaryContainer.instanceId(),
                                                               propertyName,
@@ -891,51 +891,51 @@ static QVector<InformationContainer> createInformationVector(const QList<ServerN
         informationVector.append(InformationContainer(instance.instanceId(), IsAnchoredByChildren, instance.isAnchoredByChildren()));
         informationVector.append(InformationContainer(instance.instanceId(), IsAnchoredBySibling, instance.isAnchoredBySibling()));
 
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.fill"), instance.hasAnchor("anchors.fill")));
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.centerIn"), instance.hasAnchor("anchors.centerIn")));
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.right"), instance.hasAnchor("anchors.right")));
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.top"), instance.hasAnchor("anchors.top")));
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.left"), instance.hasAnchor("anchors.left")));
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.bottom"), instance.hasAnchor("anchors.bottom")));
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.horizontalCenter"), instance.hasAnchor("anchors.horizontalCenter")));
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.verticalCenter"), instance.hasAnchor("anchors.verticalCenter")));
-        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, QString("anchors.baseline"), instance.hasAnchor("anchors.baseline")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.fill"), instance.hasAnchor("anchors.fill")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.centerIn"), instance.hasAnchor("anchors.centerIn")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.right"), instance.hasAnchor("anchors.right")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.top"), instance.hasAnchor("anchors.top")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.left"), instance.hasAnchor("anchors.left")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.bottom"), instance.hasAnchor("anchors.bottom")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.horizontalCenter"), instance.hasAnchor("anchors.horizontalCenter")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.verticalCenter"), instance.hasAnchor("anchors.verticalCenter")));
+        informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.baseline"), instance.hasAnchor("anchors.baseline")));
 
-        QPair<QString, ServerNodeInstance> anchorPair = instance.anchor("anchors.fill");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.fill"), anchorPair.first, anchorPair.second.instanceId()));
+        QPair<PropertyName, ServerNodeInstance> anchorPair = instance.anchor("anchors.fill");
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.fill"), anchorPair.first, anchorPair.second.instanceId()));
 
         anchorPair = instance.anchor("anchors.centerIn");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.centerIn"), anchorPair.first, anchorPair.second.instanceId()));
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.centerIn"), anchorPair.first, anchorPair.second.instanceId()));
 
         anchorPair = instance.anchor("anchors.right");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.right"), anchorPair.first, anchorPair.second.instanceId()));
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.right"), anchorPair.first, anchorPair.second.instanceId()));
 
         anchorPair = instance.anchor("anchors.top");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.top"), anchorPair.first, anchorPair.second.instanceId()));
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.top"), anchorPair.first, anchorPair.second.instanceId()));
 
         anchorPair = instance.anchor("anchors.left");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.left"), anchorPair.first, anchorPair.second.instanceId()));
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.left"), anchorPair.first, anchorPair.second.instanceId()));
 
         anchorPair = instance.anchor("anchors.bottom");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.bottom"), anchorPair.first, anchorPair.second.instanceId()));
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.bottom"), anchorPair.first, anchorPair.second.instanceId()));
 
         anchorPair = instance.anchor("anchors.horizontalCenter");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.horizontalCenter"), anchorPair.first, anchorPair.second.instanceId()));
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.horizontalCenter"), anchorPair.first, anchorPair.second.instanceId()));
 
         anchorPair = instance.anchor("anchors.verticalCenter");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.verticalCenter"), anchorPair.first, anchorPair.second.instanceId()));
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.verticalCenter"), anchorPair.first, anchorPair.second.instanceId()));
 
         anchorPair = instance.anchor("anchors.baseline");
-        informationVector.append(InformationContainer(instance.instanceId(), Anchor, QString("anchors.baseline"), anchorPair.first, anchorPair.second.instanceId()));
+        informationVector.append(InformationContainer(instance.instanceId(), Anchor, PropertyName("anchors.baseline"), anchorPair.first, anchorPair.second.instanceId()));
 
-        QStringList propertyNames = instance.propertyNames();
+        PropertyNameList propertyNames = instance.propertyNames();
 
         if (initial) {
-            foreach (const QString &propertyName,propertyNames)
+            foreach (const PropertyName &propertyName, propertyNames)
                 informationVector.append(InformationContainer(instance.instanceId(), InstanceTypeForProperty, propertyName, instance.instanceType(propertyName)));
         }
 
-        foreach (const QString &propertyName,instance.propertyNames()) {
+        foreach (const PropertyName &propertyName, instance.propertyNames()) {
             bool hasChanged = false;
             bool hasBinding = instance.hasBindingForProperty(propertyName, &hasChanged);
             if (hasChanged)
@@ -973,10 +973,10 @@ ValuesChangedCommand NodeInstanceServer::createValuesChangedCommand(const QList<
     QVector<PropertyValueContainer> valueVector;
 
     foreach (const ServerNodeInstance &instance, instanceList) {
-        foreach (const QString &propertyName, instance.propertyNames()) {
+        foreach (const PropertyName &propertyName, instance.propertyNames()) {
             QVariant propertyValue = instance.property(propertyName);
             if (supportedVariantType(propertyValue.type()))
-                valueVector.append(PropertyValueContainer(instance.instanceId(), propertyName, propertyValue, QString()));
+                valueVector.append(PropertyValueContainer(instance.instanceId(), propertyName, propertyValue, TypeName()));
         }
     }
 
@@ -999,13 +999,13 @@ ValuesChangedCommand NodeInstanceServer::createValuesChangedCommand(const QVecto
     QVector<PropertyValueContainer> valueVector;
 
     foreach (const InstancePropertyPair &property, propertyList) {
-        const QString propertyName = property.second;
+        const PropertyName propertyName = property.second;
         const ServerNodeInstance instance = property.first;
 
         if ( instance.isValid()) {
             QVariant propertyValue = instance.property(propertyName);
             if (supportedVariantType(propertyValue.type()))
-                valueVector.append(PropertyValueContainer(instance.instanceId(), propertyName, propertyValue, QString()));
+                valueVector.append(PropertyValueContainer(instance.instanceId(), propertyName, propertyValue, TypeName()));
         }
     }
 
@@ -1033,7 +1033,7 @@ void NodeInstanceServer::sendDebugOutput(DebugOutputCommand::Type type, const QS
     nodeInstanceClient()->debugOutput(command);
 }
 
-void NodeInstanceServer::notifyPropertyChange(qint32 instanceid, const QString &propertyName)
+void NodeInstanceServer::notifyPropertyChange(qint32 instanceid, const PropertyName &propertyName)
 {
     if (hasInstanceForId(instanceid))
         addChangedProperty(InstancePropertyPair(instanceForId(instanceid), propertyName));
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstanceserver.h
index 8701c3eb181bb1e0c7bcb00e6b86a84223b69d97..67da5a69f17b47248cabcb9409370a921ebdc43e 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstanceserver.h
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstanceserver.h
@@ -69,9 +69,9 @@ class NodeInstanceServer : public NodeInstanceServerInterface
 {
     Q_OBJECT
 public:
-    typedef QPair<QWeakPointer<QObject>, QString>  ObjectPropertyPair;
+    typedef QPair<QWeakPointer<QObject>, PropertyName>  ObjectPropertyPair;
     typedef QPair<qint32, QString>  IdPropertyPair;
-    typedef QPair<ServerNodeInstance, QString>  InstancePropertyPair;
+    typedef QPair<ServerNodeInstance, PropertyName>  InstancePropertyPair;
     typedef QPair<QString, QWeakPointer<QObject> > DummyPair;
 
     explicit NodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient);
@@ -108,8 +108,8 @@ public:
     QFileSystemWatcher *fileSystemWatcher();
     QFileSystemWatcher *dummydataFileSystemWatcher();
     Internal::ChildrenChangeEventFilter *childrenChangeEventFilter() const;
-    void addFilePropertyToFileSystemWatcher(QObject *object, const QString &propertyName, const QString &path);
-    void removeFilePropertyFromFileSystemWatcher(QObject *object, const QString &propertyName, const QString &path);
+    void addFilePropertyToFileSystemWatcher(QObject *object, const PropertyName &propertyName, const QString &path);
+    void removeFilePropertyFromFileSystemWatcher(QObject *object, const PropertyName &propertyName, const QString &path);
 
     QUrl fileUrl() const;
 
@@ -119,7 +119,7 @@ public:
 
     ServerNodeInstance rootNodeInstance() const;
 
-    void notifyPropertyChange(qint32 instanceid, const QString &propertyName);
+    void notifyPropertyChange(qint32 instanceid, const PropertyName &propertyName);
 
     QStringList imports() const;
     QObject *dummyContextObject() const;
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstancesignalspy.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstancesignalspy.cpp
index d9382c785069ce46c58599f35d728e2c2bf84594..28b1d37b4c525bba2a1858f20f461ce0dddfa237 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstancesignalspy.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstancesignalspy.cpp
@@ -53,7 +53,7 @@ void NodeInstanceSignalSpy::setObjectNodeInstance(const ObjectNodeInstance::Poin
 
 }
 
-void NodeInstanceSignalSpy::registerObject(QObject *spiedObject, const QString &prefix)
+void NodeInstanceSignalSpy::registerObject(QObject *spiedObject, const PropertyName &prefix)
 {
     if (m_registeredObjectList.contains(spiedObject)) // prevent cycles
         return;
@@ -70,7 +70,7 @@ void NodeInstanceSignalSpy::registerObject(QObject *spiedObject, const QString &
                  && QDeclarativeMetaType::isQObject(metaProperty.userType())) {
                   QObject *propertyObject = QDeclarativeMetaType::toQObject(metaProperty.read(spiedObject));
                   if (propertyObject)
-                      registerObject(propertyObject, prefix + metaProperty.name() + QLatin1Char('.'));
+                      registerObject(propertyObject, prefix + metaProperty.name() + '.');
              } else if (metaProperty.hasNotifySignal()) {
                  QMetaMethod metaMethod = metaProperty.notifySignal();
                  bool isConnecting = QMetaObject::connect(spiedObject, metaMethod.methodIndex(), this, methodeOffset, Qt::DirectConnection);
@@ -86,7 +86,7 @@ void NodeInstanceSignalSpy::registerObject(QObject *spiedObject, const QString &
                  && QDeclarativeMetaType::isQObject(metaProperty.userType())) {
                  QObject *propertyObject = QDeclarativeMetaType::toQObject(metaProperty.read(spiedObject));
                  if (propertyObject)
-                     registerObject(propertyObject, prefix + metaProperty.name() + QLatin1Char('/'));
+                     registerObject(propertyObject, prefix + metaProperty.name() + '/');
              }
 
              // search recursive in objects list
@@ -97,7 +97,7 @@ void NodeInstanceSignalSpy::registerObject(QObject *spiedObject, const QString &
                      for (int i = 0; i < list.count(); i++) {
                          QObject *propertyObject = list.at(i);
                          if (propertyObject)
-                             registerObject(propertyObject, prefix + metaProperty.name() + QLatin1Char('/'));
+                             registerObject(propertyObject, prefix + metaProperty.name() + '/');
                      }
                  }
              }
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstancesignalspy.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstancesignalspy.h
index 6f8bdacdf86ae416ff575c2a29bb6e7dbe9019f5..8c1bb7c059b483ea121765e539178c4c94dcf4cc 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstancesignalspy.h
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/nodeinstancesignalspy.h
@@ -34,7 +34,10 @@
 #include <QHash>
 #include <QSharedPointer>
 
+#include "nodeinstanceglobal.h"
+
 namespace QmlDesigner {
+
 namespace Internal {
 
 class ObjectNodeInstance;
@@ -51,11 +54,11 @@ public:
     virtual int qt_metacall(QMetaObject::Call, int, void **);
 
 protected:
-    void registerObject(QObject *spiedObject, const QString &prefix = QString());
+    void registerObject(QObject *spiedObject, const PropertyName &prefix = PropertyName());
 
 private:
     int methodeOffset;
-    QHash<int, QString> m_indexPropertyHash;
+    QHash<int, PropertyName> m_indexPropertyHash;
     QObjectList m_registeredObjectList;
     ObjectNodeInstanceWeakPointer m_objectNodeInstance;
 };
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/objectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/objectnodeinstance.cpp
index 47eab50199983fa9843ff66c7a94bd08f800aa7c..c32bdda19c70ee2ee6a4323d99941aa1b67a6adf 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/objectnodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/objectnodeinstance.cpp
@@ -82,7 +82,7 @@ void ObjectNodeInstance::destroy()
         if (object()) {
             setId(QString());
             if (m_instanceId >= 0) {
-                reparent(parentInstance(), m_parentProperty, ObjectNodeInstance::Pointer(), QString());
+                reparent(parentInstance(), m_parentProperty, ObjectNodeInstance::Pointer(), PropertyName());
             }
         }
 
@@ -246,7 +246,7 @@ double ObjectNodeInstance::opacity() const
     return 1.0;
 }
 
-bool ObjectNodeInstance::hasAnchor(const QString &/*name*/) const
+bool ObjectNodeInstance::hasAnchor(const PropertyName &/*name*/) const
 {
     return false;
 }
@@ -261,9 +261,9 @@ bool ObjectNodeInstance::isAnchoredByChildren() const
     return false;
 }
 
-QPair<QString, ServerNodeInstance> ObjectNodeInstance::anchor(const QString &/*name*/) const
+QPair<PropertyName, ServerNodeInstance> ObjectNodeInstance::anchor(const PropertyName &/*name*/) const
 {
-    return qMakePair(QString(), ServerNodeInstance());
+    return qMakePair(PropertyName(), ServerNodeInstance());
 }
 
 
@@ -292,7 +292,7 @@ static bool hasFullImplementedListInterface(const QDeclarativeListReference &lis
 
 static void removeObjectFromList(const QDeclarativeProperty &property, QObject *objectToBeRemoved, QDeclarativeEngine * engine)
 {
-    QDeclarativeListReference listReference(property.object(), property.name().toLatin1(), engine);
+    QDeclarativeListReference listReference(property.object(), property.name().toUtf8(), engine);
 
     if (!hasFullImplementedListInterface(listReference)) {
         qWarning() << "Property list interface not fully implemented for Class " << property.property().typeName() << " in property " << property.name() << "!";
@@ -315,7 +315,7 @@ static void removeObjectFromList(const QDeclarativeProperty &property, QObject *
         listReference.append(object);
 }
 
-void ObjectNodeInstance::removeFromOldProperty(QObject *object, QObject *oldParent, const QString &oldParentProperty)
+void ObjectNodeInstance::removeFromOldProperty(QObject *object, QObject *oldParent, const PropertyName &oldParentProperty)
 {
     QDeclarativeProperty property(oldParent, oldParentProperty, context());
 
@@ -334,7 +334,7 @@ void ObjectNodeInstance::removeFromOldProperty(QObject *object, QObject *oldPare
         object->setParent(0);
 }
 
-void ObjectNodeInstance::addToNewProperty(QObject *object, QObject *newParent, const QString &newParentProperty)
+void ObjectNodeInstance::addToNewProperty(QObject *object, QObject *newParent, const PropertyName &newParentProperty)
 {
     QDeclarativeProperty property(newParent, newParentProperty, context());
 
@@ -359,7 +359,7 @@ void ObjectNodeInstance::addToNewProperty(QObject *object, QObject *newParent, c
     Q_ASSERT(objectToVariant(object).isValid());
 }
 
-void ObjectNodeInstance::reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const QString &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const QString &newParentProperty)
+void ObjectNodeInstance::reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const PropertyName &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const PropertyName &newParentProperty)
 {
     if (oldParentInstance) {
         removeFromOldProperty(object(), oldParentInstance->object(), oldParentProperty);
@@ -434,7 +434,7 @@ QVariant ObjectNodeInstance::fixResourcePaths(const QVariant &value)
     return value;
 }
 
-void ObjectNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void ObjectNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     QDeclarativeProperty property(object(), name, context());
 
@@ -469,7 +469,7 @@ void ObjectNodeInstance::setPropertyVariant(const QString &name, const QVariant
     }
 }
 
-void ObjectNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+void ObjectNodeInstance::setPropertyBinding(const PropertyName &name, const QString &expression)
 {
     QDeclarativeProperty property(object(), name, context());
 
@@ -512,7 +512,7 @@ void ObjectNodeInstance::deleteObjectsInList(const QDeclarativeProperty &propert
     list.clear();
 }
 
-void ObjectNodeInstance::resetProperty(const QString &name)
+void ObjectNodeInstance::resetProperty(const PropertyName &name)
 {
     doResetProperty(name);
 
@@ -523,7 +523,7 @@ void ObjectNodeInstance::resetProperty(const QString &name)
         doResetProperty("font.pixelSize");
 }
 
-void ObjectNodeInstance::refreshProperty(const QString &name)
+void ObjectNodeInstance::refreshProperty(const PropertyName &name)
 {
     QDeclarativeProperty property(object(), name, context());
 
@@ -543,14 +543,14 @@ void ObjectNodeInstance::refreshProperty(const QString &name)
 #else
         QByteArray key = oldValue.toUrl().toEncoded(QUrl::FormattingOption(0x100));
 #endif
-        QString pixmapKey = QString::fromLatin1(key.constData(), key.count());
+        QString pixmapKey = QString::fromUtf8(key.constData(), key.count());
         QPixmapCache::remove(pixmapKey);
     }
 
     property.write(oldValue);
 }
 
-bool ObjectNodeInstance::hasBindingForProperty(const QString &name, bool *hasChanged) const
+bool ObjectNodeInstance::hasBindingForProperty(const PropertyName &name, bool *hasChanged) const
 {
     QDeclarativeProperty property(object(), name, context());
 
@@ -565,7 +565,7 @@ bool ObjectNodeInstance::hasBindingForProperty(const QString &name, bool *hasCha
     return QDeclarativePropertyPrivate::binding(property);
 }
 
-void ObjectNodeInstance::doResetProperty(const QString &propertyName)
+void ObjectNodeInstance::doResetProperty(const PropertyName &propertyName)
 {
     m_modelAbstractPropertyHash.remove(propertyName);
 
@@ -613,7 +613,7 @@ void ObjectNodeInstance::doResetProperty(const QString &propertyName)
     }
 }
 
-QVariant ObjectNodeInstance::property(const QString &name) const
+QVariant ObjectNodeInstance::property(const PropertyName &name) const
 {
     if (m_modelAbstractPropertyHash.contains(name))
         return QVariant::fromValue(m_modelAbstractPropertyHash.value(name));
@@ -640,9 +640,9 @@ QVariant ObjectNodeInstance::property(const QString &name) const
     return property.read();
 }
 
-QStringList allPropertyNames(QObject *object, const QString &baseName = QString(), QObjectList *inspectedObjects = new QObjectList)
+PropertyNameList allPropertyNames(QObject *object, const PropertyName &baseName = PropertyName(), QObjectList *inspectedObjects = new QObjectList)
 {
-    QStringList propertyNameList;
+    PropertyNameList propertyNameList;
 
 
     if (inspectedObjects== 0 || inspectedObjects->contains(object))
@@ -659,28 +659,28 @@ QStringList allPropertyNames(QObject *object, const QString &baseName = QString(
             if (declarativeProperty.name() != "parent") {
                 QObject *childObject = QDeclarativeMetaType::toQObject(declarativeProperty.read());
                 if (childObject)
-                    propertyNameList.append(allPropertyNames(childObject, baseName +  QString::fromUtf8(metaProperty.name()) + '.', inspectedObjects));
+                    propertyNameList.append(allPropertyNames(childObject, baseName +  PropertyName(metaProperty.name()) + '.', inspectedObjects));
             }
         } else if (QDeclarativeValueTypeFactory::valueType(metaProperty.userType())) {
             QDeclarativeValueType *valueType = QDeclarativeValueTypeFactory::valueType(metaProperty.userType());
             valueType->setValue(metaProperty.read(object));
-            propertyNameList.append(allPropertyNames(valueType, baseName +  QString::fromUtf8(metaProperty.name()) + '.', inspectedObjects));
+            propertyNameList.append(allPropertyNames(valueType, baseName +  PropertyName(metaProperty.name()) + '.', inspectedObjects));
         } else  {
-            propertyNameList.append(baseName + QString::fromUtf8(metaProperty.name()));
+            propertyNameList.append(baseName + metaProperty.name());
         }
     }
 
     return propertyNameList;
 }
 
-QStringList ObjectNodeInstance::propertyNames() const
+PropertyNameList ObjectNodeInstance::propertyNames() const
 {
     if (isValid())
         return allPropertyNames(object());
-    return QStringList();
+    return PropertyNameList();
 }
 
-QString ObjectNodeInstance::instanceType(const QString &name) const
+QString ObjectNodeInstance::instanceType(const PropertyName &name) const
 {
     QDeclarativeProperty property(object(), name, context());
     if (!property.isValid())
@@ -809,9 +809,9 @@ static void disableTiledBackingStore(QObject *object)
 #endif
 }
 
-QStringList propertyNameForWritableProperties(QObject *object, const QString &baseName = QString(), QObjectList *inspectedObjects = new QObjectList())
+PropertyNameList propertyNameForWritableProperties(QObject *object, const PropertyName &baseName = PropertyName(), QObjectList *inspectedObjects = new QObjectList())
 {
-    QStringList propertyNameList;
+    PropertyNameList propertyNameList;
 
     if (inspectedObjects == 0 || inspectedObjects->contains(object))
         return propertyNameList;
@@ -826,14 +826,14 @@ QStringList propertyNameForWritableProperties(QObject *object, const QString &ba
             if (declarativeProperty.name() != "parent") {
                 QObject *childObject = QDeclarativeMetaType::toQObject(declarativeProperty.read());
                 if (childObject)
-                    propertyNameList.append(propertyNameForWritableProperties(childObject, baseName +  QString::fromUtf8(metaProperty.name()) + '.', inspectedObjects));
+                    propertyNameList.append(propertyNameForWritableProperties(childObject, baseName +  PropertyName(metaProperty.name()) + '.', inspectedObjects));
             }
         } else if (QDeclarativeValueTypeFactory::valueType(metaProperty.userType())) {
             QDeclarativeValueType *valueType = QDeclarativeValueTypeFactory::valueType(metaProperty.userType());
             valueType->setValue(metaProperty.read(object));
-            propertyNameList.append(propertyNameForWritableProperties(valueType, baseName +  QString::fromUtf8(metaProperty.name()) + '.', inspectedObjects));
+            propertyNameList.append(propertyNameForWritableProperties(valueType, baseName +  PropertyName(metaProperty.name()) + '.', inspectedObjects));
         } else if (metaProperty.isReadable() && metaProperty.isWritable()) {
-            propertyNameList.append(baseName + QString::fromUtf8(metaProperty.name()));
+            propertyNameList.append(baseName + PropertyName(metaProperty.name()));
         }
     }
 
@@ -845,9 +845,9 @@ static void fixResourcePathsForObject(QObject *object)
     if (qgetenv("QMLDESIGNER_RC_PATHS").isEmpty())
         return;
 
-    QStringList propertyNameList = propertyNameForWritableProperties(object);
+    PropertyNameList propertyNameList = propertyNameForWritableProperties(object);
 
-    foreach (const QString &propertyName, propertyNameList) {
+    foreach (const PropertyName &propertyName, propertyNameList) {
         QDeclarativeProperty property(object, propertyName, QDeclarativeEngine::contextForObject(object));
 
         const QVariant value  = property.read();
@@ -1061,9 +1061,9 @@ void ObjectNodeInstance::deactivateState()
 
 void ObjectNodeInstance::populateResetHashes()
 {
-    QStringList propertyNameList = propertyNameForWritableProperties(object());
+    PropertyNameList propertyNameList = propertyNameForWritableProperties(object());
 
-    foreach(const QString &propertyName, propertyNameList) {
+    foreach (const PropertyName &propertyName, propertyNameList) {
         QDeclarativeProperty property(object(), propertyName, QDeclarativeEngine::contextForObject(object()));
 
         QDeclarativeAbstractBinding::Pointer binding = QDeclarativeAbstractBinding::getPointer(QDeclarativePropertyPrivate::binding(property));
@@ -1075,22 +1075,22 @@ void ObjectNodeInstance::populateResetHashes()
     }
 }
 
-QDeclarativeAbstractBinding *ObjectNodeInstance::resetBinding(const QString &propertyName) const
+QDeclarativeAbstractBinding *ObjectNodeInstance::resetBinding(const PropertyName &propertyName) const
 {
     return m_resetBindingHash.value(propertyName).data();
 }
 
-bool ObjectNodeInstance::hasValidResetBinding(const QString &propertyName) const
+bool ObjectNodeInstance::hasValidResetBinding(const PropertyName &propertyName) const
 {
     return m_resetBindingHash.contains(propertyName) &&  m_resetBindingHash.value(propertyName).data();
 }
 
-QVariant ObjectNodeInstance::resetValue(const QString &propertyName) const
+QVariant ObjectNodeInstance::resetValue(const PropertyName &propertyName) const
 {
     return m_resetValueHash.value(propertyName);
 }
 
-void ObjectNodeInstance::setResetValue(const QString &propertyName, const QVariant &value)
+void ObjectNodeInstance::setResetValue(const PropertyName &propertyName, const QVariant &value)
 {
     m_resetValueHash.insert(propertyName, value);
 }
@@ -1157,7 +1157,7 @@ int ObjectNodeInstance::penWidth() const
     return 0;
 }
 
-void ObjectNodeInstance::createDynamicProperty(const QString &name, const QString &/*typeName*/)
+void ObjectNodeInstance::createDynamicProperty(const PropertyName &name, const QString &/*typeName*/)
 {
     if (m_metaObject == 0) {
         qWarning() << "ObjectNodeInstance.createDynamicProperty: No Metaobject.";
@@ -1167,17 +1167,17 @@ void ObjectNodeInstance::createDynamicProperty(const QString &name, const QStrin
     m_metaObject->createNewProperty(name);
 }
 
-bool ObjectNodeInstance::updateStateVariant(const ObjectNodeInstance::Pointer &/*target*/, const QString &/*propertyName*/, const QVariant &/*value*/)
+bool ObjectNodeInstance::updateStateVariant(const ObjectNodeInstance::Pointer &/*target*/, const PropertyName &/*propertyName*/, const QVariant &/*value*/)
 {
     return false;
 }
 
-bool ObjectNodeInstance::updateStateBinding(const ObjectNodeInstance::Pointer &/*target*/, const QString &/*propertyName*/, const QString &/*expression*/)
+bool ObjectNodeInstance::updateStateBinding(const ObjectNodeInstance::Pointer &/*target*/, const PropertyName &/*propertyName*/, const QString &/*expression*/)
 {
     return false;
 }
 
-bool ObjectNodeInstance::resetStateProperty(const ObjectNodeInstance::Pointer &/*target*/, const QString &/*propertyName*/, const QVariant &/*resetValue*/)
+bool ObjectNodeInstance::resetStateProperty(const ObjectNodeInstance::Pointer &/*target*/, const PropertyName &/*propertyName*/, const QVariant &/*resetValue*/)
 {
     return false;
 }
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/objectnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/objectnodeinstance.h
index 3e022089faa1f098e79d3e7dc3c96899a6c63cd3..64ff48f0e3574c98900bc47d4b0530d652f164e5 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/objectnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/objectnodeinstance.h
@@ -90,7 +90,7 @@ public:
 
     Pointer parentInstance() const;
 
-    virtual void reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const QString &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const QString &newParentProperty);
+    virtual void reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const PropertyName &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const PropertyName &newParentProperty);
 
     virtual void setId(const QString &id);
     virtual QString id() const;
@@ -114,8 +114,8 @@ public:
 
     virtual int penWidth() const;
 
-    virtual bool hasAnchor(const QString &name) const;
-    virtual QPair<QString, ServerNodeInstance> anchor(const QString &name) const;
+    virtual bool hasAnchor(const PropertyName &name) const;
+    virtual QPair<PropertyName, ServerNodeInstance> anchor(const PropertyName &name) const;
     virtual bool isAnchoredBySibling() const;
     virtual bool isAnchoredByChildren() const;
 
@@ -125,17 +125,17 @@ public:
     virtual QPointF transformOriginPoint() const;
     virtual double zValue() const;
 
-    virtual void setPropertyVariant(const QString &name, const QVariant &value);
-    virtual void setPropertyBinding(const QString &name, const QString &expression);
-    virtual QVariant property(const QString &name) const;
-    virtual void resetProperty(const QString &name);
-    virtual void refreshProperty(const QString &name);
-    virtual QString instanceType(const QString &name) const;
-    QStringList propertyNames() const;
+    virtual void setPropertyVariant(const PropertyName &name, const QVariant &value);
+    virtual void setPropertyBinding(const PropertyName &name, const QString &expression);
+    virtual QVariant property(const PropertyName &name) const;
+    virtual void resetProperty(const PropertyName &name);
+    virtual void refreshProperty(const PropertyName &name);
+    virtual QString instanceType(const PropertyName &name) const;
+    PropertyNameList propertyNames() const;
 
     virtual QList<ServerNodeInstance> childItems() const;
 
-    void createDynamicProperty(const QString &name, const QString &typeName);
+    void createDynamicProperty(const PropertyName &name, const QString &typeName);
     void setDeleteHeldInstance(bool deleteInstance);
     bool deleteHeldInstance() const;
 
@@ -146,10 +146,10 @@ public:
     virtual void deactivateState();
 
     void populateResetHashes();
-    bool hasValidResetBinding(const QString &propertyName) const;
-    QDeclarativeAbstractBinding *resetBinding(const QString &propertyName) const;
-    QVariant resetValue(const QString &propertyName) const;
-    void setResetValue(const QString &propertyName, const QVariant &value);
+    bool hasValidResetBinding(const PropertyName &propertyName) const;
+    QDeclarativeAbstractBinding *resetBinding(const PropertyName &propertyName) const;
+    QVariant resetValue(const PropertyName &propertyName) const;
+    void setResetValue(const PropertyName &propertyName, const QVariant &value);
 
     QObject *object() const;
 
@@ -160,14 +160,14 @@ public:
     void setInPositioner(bool isInPositioner);
     virtual void refreshPositioner();
 
-    bool hasBindingForProperty(const QString &name, bool *hasChanged = 0) const;
+    bool hasBindingForProperty(const PropertyName &name, bool *hasChanged = 0) const;
 
     QDeclarativeContext *context() const;
     QDeclarativeEngine *engine() const;
 
-    virtual bool updateStateVariant(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QVariant &value);
-    virtual bool updateStateBinding(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QString &expression);
-    virtual bool resetStateProperty(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QVariant &resetValue);
+    virtual bool updateStateVariant(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QVariant &value);
+    virtual bool updateStateBinding(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QString &expression);
+    virtual bool resetStateProperty(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QVariant &resetValue);
 
 
     bool isValid() const;
@@ -182,22 +182,22 @@ public:
     static QVariant fixResourcePaths(const QVariant &value);
 
 protected:
-    void doResetProperty(const QString &propertyName);
-    void removeFromOldProperty(QObject *object, QObject *oldParent, const QString &oldParentProperty);
-    void addToNewProperty(QObject *object, QObject *newParent, const QString &newParentProperty);
+    void doResetProperty(const PropertyName &propertyName);
+    void removeFromOldProperty(QObject *object, QObject *oldParent, const PropertyName &oldParentProperty);
+    void addToNewProperty(QObject *object, QObject *newParent, const PropertyName &newParentProperty);
     void deleteObjectsInList(const QDeclarativeProperty &metaProperty);
     QVariant convertSpecialCharacter(const QVariant& value) const;
 
 private:
-    QHash<QString, QVariant> m_resetValueHash;
-    QHash<QString, QWeakPointer<QDeclarativeAbstractBinding> > m_resetBindingHash;
-    QHash<QString, ServerNodeInstance> m_modelAbstractPropertyHash;
-    mutable QHash<QString, bool> m_hasBindingHash;
+    QHash<PropertyName, QVariant> m_resetValueHash;
+    QHash<PropertyName, QWeakPointer<QDeclarativeAbstractBinding> > m_resetBindingHash;
+    QHash<PropertyName, ServerNodeInstance> m_modelAbstractPropertyHash;
+    mutable QHash<PropertyName, bool> m_hasBindingHash;
     qint32 m_instanceId;
     QString m_id;
 
     QWeakPointer<NodeInstanceServer> m_nodeInstanceServer;
-    QString m_parentProperty;
+    PropertyName m_parentProperty;
     bool m_deleteHeldInstance;
     QWeakPointer<QObject> m_object;
     NodeInstanceMetaObject *m_metaObject;
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp
index daf675b19347b2149a05b7a7dc8cabc6f76382e5..4246429155d3275e3a15b653ef80ab6b1a8e7774 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp
@@ -48,7 +48,7 @@ bool PositionerNodeInstance::isResizable() const
     return true;
 }
 
-void PositionerNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void PositionerNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     if (name == "move" || name == "add")
         return;
@@ -56,7 +56,7 @@ void PositionerNodeInstance::setPropertyVariant(const QString &name, const QVari
     QmlGraphicsItemNodeInstance::setPropertyVariant(name, value);
 }
 
-void PositionerNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+void PositionerNodeInstance::setPropertyBinding(const PropertyName &name, const QString &expression)
 {
     if (name == "move" || name == "add")
         return;
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.h
index 60060008b1f7a42416021151f8b989fe7e34c614..a789375d242c73e4d1640de386467dbe92755b14 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.h
@@ -47,8 +47,8 @@ public:
 
     static Pointer create(QObject *objectToBeWrapped);
 
-    void setPropertyVariant(const QString &name, const QVariant &value);
-    void setPropertyBinding(const QString &name, const QString &expression);
+    void setPropertyVariant(const PropertyName &name, const QVariant &value);
+    void setPropertyBinding(const PropertyName &name, const QString &expression);
 
     bool isPositioner() const;
 
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp
index 185ad484452bd7af67cbc2d8cca31783c53174ec..b0647a72b4e2f50f95a2c5d3f01f1dd27c3f98a4 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp
@@ -121,7 +121,7 @@ QSizeF QmlGraphicsItemNodeInstance::size() const
     return QSizeF(width, height);
 }
 
-void QmlGraphicsItemNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void QmlGraphicsItemNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     if (name == "state")
         return; // states are only set by us
@@ -155,7 +155,7 @@ void QmlGraphicsItemNodeInstance::setPropertyVariant(const QString &name, const
         parentInstance()->refreshPositioner();
 }
 
-void QmlGraphicsItemNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+void QmlGraphicsItemNodeInstance::setPropertyBinding(const PropertyName &name, const QString &expression)
 {
     if (name == "state")
         return; // states are only set by us
@@ -163,7 +163,7 @@ void QmlGraphicsItemNodeInstance::setPropertyBinding(const QString &name, const
     GraphicsObjectNodeInstance::setPropertyBinding(name, expression);
 }
 
-QVariant QmlGraphicsItemNodeInstance::property(const QString &name) const
+QVariant QmlGraphicsItemNodeInstance::property(const PropertyName &name) const
 {
     return GraphicsObjectNodeInstance::property(name);
 }
@@ -273,7 +273,7 @@ bool QmlGraphicsItemNodeInstance::isVisible() const
     return qmlGraphicsItem()->isVisible();
 }
 
-void QmlGraphicsItemNodeInstance::resetProperty(const QString &name)
+void QmlGraphicsItemNodeInstance::resetProperty(const PropertyName &name)
 {
     if (name == "height") {
         m_hasHeight = false;
@@ -329,7 +329,7 @@ void QmlGraphicsItemNodeInstance::resetProperty(const QString &name)
         parentInstance()->refreshPositioner();
 }
 
-void QmlGraphicsItemNodeInstance::reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const QString &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const QString &newParentProperty)
+void QmlGraphicsItemNodeInstance::reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const PropertyName &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const PropertyName &newParentProperty)
 {
     if (oldParentInstance && oldParentInstance->isPositioner()) {
         setInPositioner(false);
@@ -359,7 +359,7 @@ void QmlGraphicsItemNodeInstance::reparent(const ObjectNodeInstance::Pointer &ol
         parentInstance()->refreshPositioner();
 }
 
-QDeclarativeAnchors::Anchor anchorLineFlagForName(const QString &name)
+QDeclarativeAnchors::Anchor anchorLineFlagForName(const PropertyName &name)
 {
     if (name == "anchors.top")
         return QDeclarativeAnchors::TopAnchor;
@@ -387,7 +387,7 @@ QDeclarativeAnchors::Anchor anchorLineFlagForName(const QString &name)
     return QDeclarativeAnchors::LeftAnchor;
 }
 
-QString propertyNameForAnchorLine(const QDeclarativeAnchorLine::AnchorLine &anchorLine)
+PropertyName propertyNameForAnchorLine(const QDeclarativeAnchorLine::AnchorLine &anchorLine)
 {
     switch(anchorLine) {
         case QDeclarativeAnchorLine::Left: return "left";
@@ -398,13 +398,13 @@ QString propertyNameForAnchorLine(const QDeclarativeAnchorLine::AnchorLine &anch
         case QDeclarativeAnchorLine::VCenter: return "verticalCenter";
         case QDeclarativeAnchorLine::Baseline: return "baseline";
         case QDeclarativeAnchorLine::Invalid:
-        default: return QString();
+        default: return PropertyName();
     }
 }
 
-static bool isValidAnchorName(const QString &name)
+static bool isValidAnchorName(const PropertyName &name)
 {
-    static QStringList anchorNameList(QStringList() << "anchors.top"
+    static PropertyNameList anchorNameList(PropertyNameList() << "anchors.top"
                                                     << "anchors.left"
                                                     << "anchors.right"
                                                     << "anchors.bottom"
@@ -417,13 +417,13 @@ static bool isValidAnchorName(const QString &name)
     return anchorNameList.contains(name);
 }
 
-QPair<QString, ServerNodeInstance> QmlGraphicsItemNodeInstance::anchor(const QString &name) const
+QPair<PropertyName, ServerNodeInstance> QmlGraphicsItemNodeInstance::anchor(const PropertyName &name) const
 {
     if (!isValidAnchorName(name) || !hasAnchor(name))
         return GraphicsObjectNodeInstance::anchor(name);
 
     QObject *targetObject = 0;
-    QString targetName;
+    PropertyName targetName;
 
     if (name == "anchors.fill") {
         targetObject = anchors()->fill();
@@ -462,7 +462,7 @@ QList<ServerNodeInstance> QmlGraphicsItemNodeInstance::stateInstances() const
     return instanceList;
 }
 
-bool QmlGraphicsItemNodeInstance::hasAnchor(const QString &name) const
+bool QmlGraphicsItemNodeInstance::hasAnchor(const PropertyName &name) const
 {
     if (!isValidAnchorName(name))
         return false;
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.h
index ffa08a75a607074b849713511b02418703487bf6..89be53582d72ab64fabe41fa9ff2db7c9828a731 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.h
@@ -53,18 +53,18 @@ public:
     QSizeF size() const;
 //    void updateAnchors();
 
-    void setPropertyVariant(const QString &name, const QVariant &value);
-    void setPropertyBinding(const QString &name, const QString &expression);
+    void setPropertyVariant(const PropertyName &name, const QVariant &value);
+    void setPropertyBinding(const PropertyName &name, const QString &expression);
 
-    QVariant property(const QString &name) const;
-    void resetProperty(const QString &name);
+    QVariant property(const PropertyName &name) const;
+    void resetProperty(const PropertyName &name);
 
-    void reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const QString &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const QString &newParentProperty);
+    void reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const PropertyName &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const PropertyName &newParentProperty);
 
     int penWidth() const;
 
-    bool hasAnchor(const QString &name) const;
-    QPair<QString, ServerNodeInstance> anchor(const QString &name) const;
+    bool hasAnchor(const PropertyName &name) const;
+    QPair<PropertyName, ServerNodeInstance> anchor(const PropertyName &name) const;
     bool isAnchoredBySibling() const;
     bool isAnchoredByChildren() const;
     void doComponentComplete();
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlpropertychangesnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlpropertychangesnodeinstance.cpp
index 28227b8e8e2934244fc67e25ba89563577167e50..41c11b92c129d4ed603659e9de2abe81520fa6e5 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlpropertychangesnodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlpropertychangesnodeinstance.cpp
@@ -61,14 +61,14 @@ QmlPropertyChangesNodeInstance::Pointer QmlPropertyChangesNodeInstance::create(Q
     return instance;
 }
 
-void QmlPropertyChangesNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void QmlPropertyChangesNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     QMetaObject metaObject = QDeclarativePropertyChanges::staticMetaObject;
 
-    if (metaObject.indexOfProperty(name.toLatin1()) > 0) { // 'restoreEntryValues', 'explicit'
+    if (metaObject.indexOfProperty(name) > 0) { // 'restoreEntryValues', 'explicit'
         ObjectNodeInstance::setPropertyVariant(name, value);
     } else {
-        changesObject()->changeValue(name.toLatin1(), value);
+        changesObject()->changeValue(name, value);
         QObject *targetObject = changesObject()->object();
         if (targetObject && nodeInstanceServer()->activeStateInstance().isWrappingThisObject(changesObject()->state())) {
             ServerNodeInstance targetInstance = nodeInstanceServer()->instanceForObject(targetObject);
@@ -77,29 +77,29 @@ void QmlPropertyChangesNodeInstance::setPropertyVariant(const QString &name, con
     }
 }
 
-void QmlPropertyChangesNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+void QmlPropertyChangesNodeInstance::setPropertyBinding(const PropertyName &name, const QString &expression)
 {
     QMetaObject metaObject = QDeclarativePropertyChanges::staticMetaObject;
 
-    if (metaObject.indexOfProperty(name.toLatin1()) > 0) { // 'restoreEntryValues', 'explicit'
+    if (metaObject.indexOfProperty(name) > 0) { // 'restoreEntryValues', 'explicit'
         ObjectNodeInstance::setPropertyBinding(name, expression);
     } else {
-        changesObject()->changeExpression(name.toLatin1(), expression);
+        changesObject()->changeExpression(name, expression);
     }
 }
 
-QVariant QmlPropertyChangesNodeInstance::property(const QString &name) const
+QVariant QmlPropertyChangesNodeInstance::property(const PropertyName &name) const
 {
-    return changesObject()->property(name.toLatin1());
+    return changesObject()->property(name);
 }
 
-void QmlPropertyChangesNodeInstance::resetProperty(const QString &name)
+void QmlPropertyChangesNodeInstance::resetProperty(const PropertyName &name)
 {
-    changesObject()->removeProperty(name.toLatin1());
+    changesObject()->removeProperty(name);
 }
 
 
-void QmlPropertyChangesNodeInstance::reparent(const ServerNodeInstance &oldParentInstance, const QString &oldParentProperty, const ServerNodeInstance &newParentInstance, const QString &newParentProperty)
+void QmlPropertyChangesNodeInstance::reparent(const ServerNodeInstance &oldParentInstance, const PropertyName &oldParentProperty, const ServerNodeInstance &newParentInstance, const PropertyName &newParentProperty)
 {
     changesObject()->detachFromState();
 
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlpropertychangesnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlpropertychangesnodeinstance.h
index 6f1b1c417ee34c35e2ad62b3cecbb8430a373fff..f0229f008f955bc83381464894aa775bef9665f6 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlpropertychangesnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlpropertychangesnodeinstance.h
@@ -55,13 +55,13 @@ public:
 
     static Pointer create(QObject *objectToBeWrapped);
 
-    virtual void setPropertyVariant(const QString &name, const QVariant &value);
-    virtual void setPropertyBinding(const QString &name, const QString &expression);
-    virtual QVariant property(const QString &name) const;
-    virtual void resetProperty(const QString &name);
+    virtual void setPropertyVariant(const PropertyName &name, const QVariant &value);
+    virtual void setPropertyBinding(const PropertyName &name, const QString &expression);
+    virtual QVariant property(const PropertyName &name) const;
+    virtual void resetProperty(const PropertyName &name);
 
     using ObjectNodeInstance::reparent; // keep the virtual reparent(...) method around
-    void reparent(const ServerNodeInstance &oldParentInstance, const QString &oldParentProperty, const ServerNodeInstance &newParentInstance, const QString &newParentProperty);
+    void reparent(const ServerNodeInstance &oldParentInstance, const PropertyName &oldParentProperty, const ServerNodeInstance &newParentInstance, const PropertyName &newParentProperty);
 
 protected:
     QmlPropertyChangesNodeInstance(QDeclarativePropertyChanges *object);
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlstatenodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlstatenodeinstance.cpp
index d9ffb55590498c53ac481320839fb77f1dbae49e..0848e582323c798d58ad5da88d184d79480517b1 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlstatenodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlstatenodeinstance.cpp
@@ -99,7 +99,7 @@ bool QmlStateNodeInstance::isStateActive() const
     return stateObject() && stateGroup() && stateGroup()->state() == property("name");
 }
 
-void QmlStateNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void QmlStateNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     bool hasParent = parent();
     bool isStateOfTheRootModelNode = parentInstance() && parentInstance()->isRootNodeInstance();
@@ -109,7 +109,7 @@ void QmlStateNodeInstance::setPropertyVariant(const QString &name, const QVarian
     ObjectNodeInstance::setPropertyVariant(name, value);
 }
 
-void QmlStateNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+void QmlStateNodeInstance::setPropertyBinding(const PropertyName &name, const QString &expression)
 {
     bool hasParent = parent();
     bool isStateOfTheRootModelNode = parentInstance() && parentInstance()->isRootNodeInstance();
@@ -119,19 +119,19 @@ void QmlStateNodeInstance::setPropertyBinding(const QString &name, const QString
     ObjectNodeInstance::setPropertyBinding(name, expression);
 }
 
-bool QmlStateNodeInstance::updateStateVariant(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QVariant &value)
+bool QmlStateNodeInstance::updateStateVariant(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QVariant &value)
 {
-    return stateObject()->changeValueInRevertList(target->object(), propertyName.toLatin1(), value);
+    return stateObject()->changeValueInRevertList(target->object(), propertyName, value);
 }
 
-bool QmlStateNodeInstance::updateStateBinding(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QString &expression)
+bool QmlStateNodeInstance::updateStateBinding(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QString &expression)
 {
-    return stateObject()->changeValueInRevertList(target->object(), propertyName.toLatin1(), expression);
+    return stateObject()->changeValueInRevertList(target->object(), propertyName, expression);
 }
 
-bool QmlStateNodeInstance::resetStateProperty(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QVariant & /* resetValue */)
+bool QmlStateNodeInstance::resetStateProperty(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QVariant & /* resetValue */)
 {
-    return stateObject()->removeEntryFromRevertList(target->object(), propertyName.toLatin1());
+    return stateObject()->removeEntryFromRevertList(target->object(), propertyName);
 }
 
 } // namespace Internal
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlstatenodeinstance.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlstatenodeinstance.h
index d37d5b993c90335948e63a6a08f69e0ceb043e7c..990f245eef950cf576731756cc37b490994a8d78 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlstatenodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlstatenodeinstance.h
@@ -49,15 +49,15 @@ public:
 
     static Pointer create(QObject *objectToBeWrapped);
 
-    void setPropertyVariant(const QString &name, const QVariant &value);
-    void setPropertyBinding(const QString &name, const QString &expression);
+    void setPropertyVariant(const PropertyName &name, const QVariant &value);
+    void setPropertyBinding(const PropertyName &name, const QString &expression);
 
     void activateState();
     void deactivateState();
 
-    bool updateStateVariant(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QVariant &value);
-    bool updateStateBinding(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QString &expression);
-    bool resetStateProperty(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QVariant &resetValue);
+    bool updateStateVariant(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QVariant &value);
+    bool updateStateBinding(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QString &expression);
+    bool resetStateProperty(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QVariant &resetValue);
 
 
 protected:
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmltransitionnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmltransitionnodeinstance.cpp
index 79e2aa6b9beba3d96efc637ff10aa04451c9df7f..26cf4f42d7ccca63e6ed12cbbdf94c5907e0e9aa 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmltransitionnodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmltransitionnodeinstance.cpp
@@ -59,7 +59,7 @@ bool QmlTransitionNodeInstance::isTransition() const
     return true;
 }
 
-void QmlTransitionNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void QmlTransitionNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     if (name == "from" || name == "to")
         return;
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmltransitionnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmltransitionnodeinstance.h
index fc14f14321ea43fdf7b3aab5a74fe9f3dffdeb1b..b7a7e6e27c88e8cbf59b5476e2227faddee3d2e3 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmltransitionnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmltransitionnodeinstance.h
@@ -47,7 +47,7 @@ public:
 
     static Pointer create(QObject *objectToBeWrapped);
 
-    void setPropertyVariant(const QString &name, const QVariant &value);
+    void setPropertyVariant(const PropertyName &name, const QVariant &value);
 
     bool isTransition() const;
 
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/servernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/servernodeinstance.cpp
index 3120179c0d814b3f032d0a2ff6718733e4ac9a0b..33abe3306483a73436612a29ff3a9762a08ad41f 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/servernodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/servernodeinstance.cpp
@@ -226,7 +226,7 @@ ServerNodeInstance ServerNodeInstance::create(NodeInstanceServer *nodeInstanceSe
     return instance;
 }
 
-void ServerNodeInstance::reparent(const ServerNodeInstance &oldParentInstance, const QString &oldParentProperty, const ServerNodeInstance &newParentInstance, const QString &newParentProperty)
+void ServerNodeInstance::reparent(const ServerNodeInstance &oldParentInstance, const PropertyName &oldParentProperty, const ServerNodeInstance &newParentInstance, const PropertyName &newParentProperty)
 {
     m_nodeInstance->reparent(oldParentInstance.m_nodeInstance, oldParentProperty, newParentInstance.m_nodeInstance, newParentProperty);
 }
@@ -283,35 +283,35 @@ QRectF ServerNodeInstance::boundingRect() const
     return boundingRect;
 }
 
-void ServerNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+void ServerNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
 {
     m_nodeInstance->setPropertyVariant(name, value);
 
 }
 
-void ServerNodeInstance::setPropertyDynamicVariant(const QString &name, const QString &typeName, const QVariant &value)
+void ServerNodeInstance::setPropertyDynamicVariant(const PropertyName &name, const TypeName &typeName, const QVariant &value)
 {
     m_nodeInstance->createDynamicProperty(name, typeName);
     m_nodeInstance->setPropertyVariant(name, value);
 }
 
-void ServerNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+void ServerNodeInstance::setPropertyBinding(const PropertyName &name, const QString &expression)
 {
     m_nodeInstance->setPropertyBinding(name, expression);
 }
 
-void ServerNodeInstance::setPropertyDynamicBinding(const QString &name, const QString &typeName, const QString &expression)
+void ServerNodeInstance::setPropertyDynamicBinding(const PropertyName &name, const TypeName &typeName, const QString &expression)
 {
     m_nodeInstance->createDynamicProperty(name, typeName);
     m_nodeInstance->setPropertyBinding(name, expression);
 }
 
-void ServerNodeInstance::resetProperty(const QString &name)
+void ServerNodeInstance::resetProperty(const PropertyName &name)
 {
     m_nodeInstance->resetProperty(name);
 }
 
-void ServerNodeInstance::refreshProperty(const QString &name)
+void ServerNodeInstance::refreshProperty(const PropertyName &name)
 {
     m_nodeInstance->refreshProperty(name);
 }
@@ -325,17 +325,17 @@ void ServerNodeInstance::setId(const QString &id)
 \brief Returns the property value of the property of this NodeInstance.
 \returns QVariant value
 */
-QVariant ServerNodeInstance::property(const QString &name) const
+QVariant ServerNodeInstance::property(const PropertyName &name) const
 {
     return m_nodeInstance->property(name);
 }
 
-QStringList ServerNodeInstance::propertyNames() const
+PropertyNameList ServerNodeInstance::propertyNames() const
 {
     return m_nodeInstance->propertyNames();
 }
 
-bool ServerNodeInstance::hasBindingForProperty(const QString &name, bool *hasChanged) const
+bool ServerNodeInstance::hasBindingForProperty(const PropertyName &name, bool *hasChanged) const
 {
     return m_nodeInstance->hasBindingForProperty(name, hasChanged);
 }
@@ -344,7 +344,7 @@ bool ServerNodeInstance::hasBindingForProperty(const QString &name, bool *hasCha
 \brief Returns the property default value of the property of this NodeInstance.
 \returns QVariant default value which is the reset value to
 */
-QVariant ServerNodeInstance::defaultValue(const QString &name) const
+QVariant ServerNodeInstance::defaultValue(const PropertyName &name) const
 {
     return m_nodeInstance->resetValue(name);
 }
@@ -352,7 +352,7 @@ QVariant ServerNodeInstance::defaultValue(const QString &name) const
 /*!
 \brief Returns the type of the property of this NodeInstance.
 */
-QString ServerNodeInstance::instanceType(const QString &name) const
+QString ServerNodeInstance::instanceType(const PropertyName &name) const
 {
     return m_nodeInstance->instanceType(name);
 }
@@ -384,7 +384,7 @@ bool ServerNodeInstance::isInPositioner() const
     return m_nodeInstance->isInPositioner();
 }
 
-bool ServerNodeInstance::hasAnchor(const QString &name) const
+bool ServerNodeInstance::hasAnchor(const PropertyName &name) const
 {
     return m_nodeInstance->hasAnchor(name);
 }
@@ -404,7 +404,7 @@ bool ServerNodeInstance::isAnchoredByChildren() const
     return m_nodeInstance->isAnchoredByChildren();
 }
 
-QPair<QString, ServerNodeInstance> ServerNodeInstance::anchor(const QString &name) const
+QPair<PropertyName, ServerNodeInstance> ServerNodeInstance::anchor(const PropertyName &name) const
 {
     return m_nodeInstance->anchor(name);
 }
@@ -542,22 +542,22 @@ void ServerNodeInstance::deactivateState()
     m_nodeInstance->deactivateState();
 }
 
-bool ServerNodeInstance::updateStateVariant(const ServerNodeInstance &target, const QString &propertyName, const QVariant &value)
+bool ServerNodeInstance::updateStateVariant(const ServerNodeInstance &target, const PropertyName &propertyName, const QVariant &value)
 {
     return m_nodeInstance->updateStateVariant(target.internalInstance(), propertyName, value);
 }
 
-bool ServerNodeInstance::updateStateBinding(const ServerNodeInstance &target, const QString &propertyName, const QString &expression)
+bool ServerNodeInstance::updateStateBinding(const ServerNodeInstance &target, const PropertyName &propertyName, const QString &expression)
 {
     return m_nodeInstance->updateStateBinding(target.internalInstance(), propertyName, expression);
 }
 
-QVariant ServerNodeInstance::resetVariant(const QString &propertyName) const
+QVariant ServerNodeInstance::resetVariant(const PropertyName &propertyName) const
 {
     return m_nodeInstance->resetValue(propertyName);
 }
 
-bool ServerNodeInstance::resetStateProperty(const ServerNodeInstance &target, const QString &propertyName, const QVariant &resetValue)
+bool ServerNodeInstance::resetStateProperty(const ServerNodeInstance &target, const PropertyName &propertyName, const QVariant &resetValue)
 {
     return m_nodeInstance->resetStateProperty(target.internalInstance(), propertyName, resetValue);
 }
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/servernodeinstance.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/servernodeinstance.h
index 20a1880554280c984ee045f1aee2233bb5cf11c8..9f49fd76acc868172a43e432a02f96c16d8f56ed 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/servernodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/servernodeinstance.h
@@ -114,13 +114,13 @@ public:
     double zValue() const;
 
     double opacity() const;
-    QVariant property(const QString &name) const;
-    QVariant defaultValue(const QString &name) const;
-    QString instanceType(const QString &name) const;
-    QStringList propertyNames() const;
+    QVariant property(const PropertyName &name) const;
+    QVariant defaultValue(const PropertyName &name) const;
+    QString instanceType(const PropertyName &name) const;
+    PropertyNameList propertyNames() const;
 
 
-    bool hasBindingForProperty(const QString &name, bool *hasChanged = 0) const;
+    bool hasBindingForProperty(const PropertyName &name, bool *hasChanged = 0) const;
 
     bool isValid() const;
     void makeInvalid();
@@ -134,12 +134,12 @@ public:
 
     bool isWrappingThisObject(QObject *object) const;
 
-    QVariant resetVariant(const QString &name) const;
+    QVariant resetVariant(const PropertyName &name) const;
 
-    bool hasAnchor(const QString &name) const;
+    bool hasAnchor(const PropertyName &name) const;
     bool isAnchoredBySibling() const;
     bool isAnchoredByChildren() const;
-    QPair<QString, ServerNodeInstance> anchor(const QString &name) const;
+    QPair<PropertyName, ServerNodeInstance> anchor(const PropertyName &name) const;
 
     int penWidth() const;
 
@@ -160,27 +160,27 @@ public:
 private: // functions
     ServerNodeInstance(const QSharedPointer<Internal::ObjectNodeInstance> &abstractInstance);
 
-    void setPropertyVariant(const QString &name, const QVariant &value);
-    void setPropertyDynamicVariant(const QString &name, const QString &typeName, const QVariant &value);
+    void setPropertyVariant(const PropertyName &name, const QVariant &value);
+    void setPropertyDynamicVariant(const PropertyName &name, const TypeName &typeName, const QVariant &value);
 
-    void setPropertyBinding(const QString &name, const QString &expression);
-    void setPropertyDynamicBinding(const QString &name, const QString &typeName, const QString &expression);
+    void setPropertyBinding(const PropertyName &name, const QString &expression);
+    void setPropertyDynamicBinding(const PropertyName &name, const TypeName &typeName, const QString &expression);
 
-    void resetProperty(const QString &name);
-    void refreshProperty(const QString &name);
+    void resetProperty(const PropertyName &name);
+    void refreshProperty(const PropertyName &name);
 
     void activateState();
     void deactivateState();
     void refreshState();
 
-    bool updateStateVariant(const ServerNodeInstance &target, const QString &propertyName, const QVariant &value);
-    bool updateStateBinding(const ServerNodeInstance &target, const QString &propertyName, const QString &expression);
-    bool resetStateProperty(const ServerNodeInstance &target, const QString &propertyName, const QVariant &resetValue);
+    bool updateStateVariant(const ServerNodeInstance &target, const PropertyName &propertyName, const QVariant &value);
+    bool updateStateBinding(const ServerNodeInstance &target, const PropertyName &propertyName, const QString &expression);
+    bool resetStateProperty(const ServerNodeInstance &target, const PropertyName &propertyName, const QVariant &resetValue);
 
     static ServerNodeInstance create(NodeInstanceServer *nodeInstanceServer, const InstanceContainer &instanceContainer, ComponentWrap componentWrap);
 
     void setDeleteHeldInstance(bool deleteInstance);
-    void reparent(const ServerNodeInstance &oldParentInstance, const QString &oldParentProperty, const ServerNodeInstance &newParentInstance, const QString &newParentProperty);
+    void reparent(const ServerNodeInstance &oldParentInstance, const PropertyName &oldParentProperty, const ServerNodeInstance &newParentInstance, const PropertyName &newParentProperty);
 
 
     void setId(const QString &id);
diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
index b171840736ae6c20600d07206879404be11a2e72..a199c22c204d87d1fb8fb15eab5723386d602634 100644
--- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
@@ -120,7 +120,7 @@ public:
         setupContext();
     }
 
-    virtual void instancePropertyChange(const QList<QPair<ModelNode, QString> > &)
+    virtual void instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &)
     {}
 
     virtual void instancesCompleted(const QVector<ModelNode> &)
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.cpp
index f2a94ea5e7611416ee474057228cf1c4134887d8..675f8b8b134b5ff5925d11d98e383f47e7f271b0 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.cpp
@@ -52,49 +52,49 @@ static inline bool checkIfNodeIsAView(const ModelNode &node)
              node.metaInfo().isSubclassOf("QtQuick.PathView", -1, -1));
 }
 
-static inline void getProperties(const ModelNode node, QHash<QString, QVariant> &propertyHash)
+static inline void getProperties(const ModelNode node, QHash<PropertyName, QVariant> &propertyHash)
 {
     if (QmlObjectNode(node).isValid()) {
-        foreach (const QString &propertyName, node.propertyNames()) {
+        foreach (const PropertyName &propertyName, node.propertyNames()) {
             if (node.property(propertyName).isVariantProperty() ||
                     (node.property(propertyName).isBindingProperty() &&
-                     !propertyName.contains(QLatin1String("anchors.")))) {
+                     !propertyName.contains("anchors."))) {
                 propertyHash.insert(propertyName, QmlObjectNode(node).instanceValue(propertyName));
             }
         }
     }
     QmlItemNode itemNode(node);
     if (itemNode.isValid()) {
-        propertyHash.insert(QLatin1String("width"), itemNode.instanceValue(QLatin1String("width")));
-        propertyHash.insert(QLatin1String("height"), itemNode.instanceValue(QLatin1String("height")));
-        propertyHash.remove(QLatin1String("x"));
-        propertyHash.remove(QLatin1String("y"));
-        propertyHash.remove(QLatin1String("rotation"));
-        propertyHash.remove(QLatin1String("opacity"));
+        propertyHash.insert("width", itemNode.instanceValue("width"));
+        propertyHash.insert("height", itemNode.instanceValue("height"));
+        propertyHash.remove("x");
+        propertyHash.remove("y");
+        propertyHash.remove("rotation");
+        propertyHash.remove("opacity");
     }
 }
 
-static inline void applyProperties(ModelNode &node, const QHash<QString, QVariant> &propertyHash)
+static inline void applyProperties(ModelNode &node, const QHash<PropertyName, QVariant> &propertyHash)
 {
-    QHash<QString, QVariant> auxiliaryData  = node.auxiliaryData();
-    foreach (const QString propertyName, auxiliaryData.keys()) {
+    QHash<PropertyName, QVariant> auxiliaryData  = node.auxiliaryData();
+    foreach (const PropertyName propertyName, auxiliaryData.keys()) {
         node.setAuxiliaryData(propertyName, QVariant());
     }
 
-    QHashIterator<QString, QVariant> propertyIterator(propertyHash);
+    QHashIterator<PropertyName, QVariant> propertyIterator(propertyHash);
     while (propertyIterator.hasNext()) {
         propertyIterator.next();
-        const QString propertyName = propertyIterator.key();
-        if (propertyName == QLatin1String("width") || propertyName == QLatin1String("height")) {
+        const PropertyName propertyName = propertyIterator.key();
+        if (propertyName == "width" || propertyName == "height") {
             node.setAuxiliaryData(propertyIterator.key(), propertyIterator.value());
         } else if (node.property(propertyIterator.key()).isDynamic() &&
-                   node.property(propertyIterator.key()).dynamicTypeName() == QLatin1String("alias") &&
+                   node.property(propertyIterator.key()).dynamicTypeName() == "alias" &&
                    node.property(propertyIterator.key()).isBindingProperty()) {
             AbstractProperty targetProperty = node.bindingProperty(propertyIterator.key()).resolveToProperty();
             if (targetProperty.isValid())
-                targetProperty.parentModelNode().setAuxiliaryData(targetProperty.name() + QLatin1String("@NodeInstance"), propertyIterator.value());
+                targetProperty.parentModelNode().setAuxiliaryData(targetProperty.name() + "@NodeInstance", propertyIterator.value());
         } else {
-            node.setAuxiliaryData(propertyIterator.key() + QLatin1String("@NodeInstance"), propertyIterator.value());
+            node.setAuxiliaryData(propertyIterator.key() + "@NodeInstance", propertyIterator.value());
         }
     }
 }
@@ -175,7 +175,7 @@ static inline void openFileForComponent(const ModelNode &node)
 
     //int width = 0;
     //int height = 0;
-    QHash<QString, QVariant> propertyHash;
+    QHash<PropertyName, QVariant> propertyHash;
     if (node.metaInfo().isFileComponent()) {
         //getWidthHeight(node, width, height);
         getProperties(node, propertyHash);
@@ -202,7 +202,7 @@ static inline void openInlineComponent(const ModelNode &node)
     if (!currentDesignDocument())
         return;
 
-    QHash<QString, QVariant> propertyHash;
+    QHash<PropertyName, QVariant> propertyHash;
 
     if (node.nodeSourceType() == ModelNode::NodeWithComponentSource) {
         //getWidthHeight(node, width, height);
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h
index 6a115ee966af771f7ca2eccf5a74d08bfb1a7a68..3589943ba49338447ce0d91f1f9fd4cbf2137a2d 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h
@@ -77,7 +77,7 @@ inline bool singleSelectionNotRoot(const SelectionContext &selectionState)
 inline bool selectionHasProperty(const SelectionContext &selectionState, const char *property)
 {
     foreach (const ModelNode &modelNode, selectionState.selectedModelNodes())
-        if (modelNode.hasProperty(QLatin1String(property)))
+        if (modelNode.hasProperty(PropertyName(property)))
             return true;
     return false;
 }
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
index 82982b66765d755d339cd59d47f4183d6a096ebc..1ca3d332647eba42e58c0631af9960771751e815 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
@@ -49,7 +49,7 @@
 
 namespace QmlDesigner {
 
-const QString auxDataString = QLatin1String("anchors_");
+const PropertyName auxDataString("anchors_");
 
 static inline bool isItem(const ModelNode &node)
 {
@@ -103,7 +103,7 @@ static inline void getWidthHeight(const ModelNode &node, int &width, int &height
     }
 }
 
-static inline bool modelNodesHaveProperty(const QList<ModelNode> &modelNodeList, const QString &propertyName)
+static inline bool modelNodesHaveProperty(const QList<ModelNode> &modelNodeList, const PropertyName &propertyName)
 {
     foreach (const ModelNode &modelNode, modelNodeList)
         if (modelNode.hasProperty(propertyName))
@@ -304,7 +304,7 @@ void resetZ(const SelectionContext &selectionState)
     }
 }
 
-static inline void backupPropertyAndRemove(ModelNode node, const QString &propertyName)
+static inline void backupPropertyAndRemove(ModelNode node, const PropertyName &propertyName)
 {
     if (node.hasVariantProperty(propertyName)) {
         node.setAuxiliaryData(auxDataString + propertyName, node.variantProperty(propertyName).value());
@@ -318,7 +318,7 @@ static inline void backupPropertyAndRemove(ModelNode node, const QString &proper
 }
 
 
-static inline void restoreProperty(ModelNode node, const QString &propertyName)
+static inline void restoreProperty(ModelNode node, const PropertyName &propertyName)
 {
     if (node.hasAuxiliaryData(auxDataString + propertyName))
         node.variantProperty(propertyName) = node.auxiliaryData(auxDataString + propertyName);
@@ -336,10 +336,10 @@ void anchorsFill(const SelectionContext &selectionState)
     QmlItemNode node = modelNode;
     if (node.isValid()) {
         node.anchors().fill();
-        backupPropertyAndRemove(modelNode, QLatin1String("x"));
-        backupPropertyAndRemove(modelNode, QLatin1String("y"));
-        backupPropertyAndRemove(modelNode, QLatin1String("width"));
-        backupPropertyAndRemove(modelNode, QLatin1String("height"));
+        backupPropertyAndRemove(modelNode, "x");
+        backupPropertyAndRemove(modelNode, "y");
+        backupPropertyAndRemove(modelNode, "width");
+        backupPropertyAndRemove(modelNode, "height");
     }
 }
 
@@ -372,7 +372,7 @@ static inline void reparentTo(const ModelNode &node, const QmlItemNode &parent)
         if (parent.hasDefaultProperty())
             parentProperty = parent.nodeAbstractProperty(parent.defaultProperty());
         else
-            parentProperty = parent.nodeAbstractProperty(QLatin1String("data"));
+            parentProperty = parent.nodeAbstractProperty("data");
 
         parentProperty.reparentHere(node);
     }
@@ -431,7 +431,7 @@ void layoutRow(const SelectionContext &selectionState)
     if (!selectionState.view())
         return;
 
-    NodeMetaInfo rowMetaInfo = selectionState.view()->model()->metaInfo(QLatin1String("QtQuick.Row"));
+    NodeMetaInfo rowMetaInfo = selectionState.view()->model()->metaInfo("QtQuick.Row");
 
     if (!rowMetaInfo.isValid())
         return;
@@ -448,7 +448,7 @@ void layoutRow(const SelectionContext &selectionState)
 
         qDebug() << parent.modelNode().majorQtQuickVersion();
 
-        row = selectionState.view()->createModelNode(QLatin1String("QtQuick.Row"), rowMetaInfo.majorVersion(), rowMetaInfo.minorVersion());
+        row = selectionState.view()->createModelNode("QtQuick.Row", rowMetaInfo.majorVersion(), rowMetaInfo.minorVersion());
 
         reparentTo(row, parent);
     }
@@ -457,16 +457,16 @@ void layoutRow(const SelectionContext &selectionState)
         RewriterTransaction transaction(selectionState.view());
 
         QPoint pos = getUpperLeftPosition(modelNodeList);
-        row.variantProperty(QLatin1String("x")) = pos.x();
-        row.variantProperty(QLatin1String("y")) = pos.y();
+        row.variantProperty("x") = pos.x();
+        row.variantProperty("y") = pos.y();
 
         QList<ModelNode> sortedList = modelNodeList;
         qSort(sortedList.begin(), sortedList.end(), compareByX);
 
         foreach (ModelNode modelNode, sortedList) {
             reparentTo(modelNode, row);
-            modelNode.removeProperty(QLatin1String("x"));
-            modelNode.removeProperty(QLatin1String("y"));
+            modelNode.removeProperty("x");
+            modelNode.removeProperty("y");
         }
     }
 }
@@ -476,7 +476,7 @@ void layoutColumn(const SelectionContext &selectionState)
     if (!selectionState.view())
         return;
 
-    NodeMetaInfo columnMetaInfo = selectionState.view()->model()->metaInfo(QLatin1String("QtQuick.Column"));
+    NodeMetaInfo columnMetaInfo = selectionState.view()->model()->metaInfo("QtQuick.Column");
 
     if (!columnMetaInfo.isValid())
         return;
@@ -491,7 +491,7 @@ void layoutColumn(const SelectionContext &selectionState)
         if (!parent.isValid())
             return;
 
-        column = selectionState.view()->createModelNode(QLatin1String("QtQuick.Column"), columnMetaInfo.majorVersion(), columnMetaInfo.minorVersion());
+        column = selectionState.view()->createModelNode("QtQuick.Column", columnMetaInfo.majorVersion(), columnMetaInfo.minorVersion());
 
         reparentTo(column, parent);
     }
@@ -500,16 +500,16 @@ void layoutColumn(const SelectionContext &selectionState)
         RewriterTransaction transaction(selectionState.view());
 
         QPoint pos = getUpperLeftPosition(modelNodeList);
-        column.variantProperty(QLatin1String("x")) = pos.x();
-        column.variantProperty(QLatin1String("y")) = pos.y();
+        column.variantProperty("x") = pos.x();
+        column.variantProperty("y") = pos.y();
 
         QList<ModelNode> sortedList = modelNodeList;
         qSort(sortedList.begin(), sortedList.end(), compareByY);
 
         foreach (ModelNode modelNode, sortedList) {
             reparentTo(modelNode, column);
-            modelNode.removeProperty(QLatin1String("x"));
-            modelNode.removeProperty(QLatin1String("y"));
+            modelNode.removeProperty("x");
+            modelNode.removeProperty("y");
         }
     }
 }
@@ -519,7 +519,7 @@ void layoutGrid(const SelectionContext &selectionState)
     if (!selectionState.view())
         return;
 
-    NodeMetaInfo gridMetaInfo = selectionState.view()->model()->metaInfo(QLatin1String("QtQuick.Grid"));
+    NodeMetaInfo gridMetaInfo = selectionState.view()->model()->metaInfo("QtQuick.Grid");
 
     if (!gridMetaInfo.isValid())
         return;
@@ -534,8 +534,8 @@ void layoutGrid(const SelectionContext &selectionState)
         if (!parent.isValid())
             return;
 
-        grid = selectionState.view()->createModelNode(QLatin1String("QtQuick.Grid"), gridMetaInfo.majorVersion(), gridMetaInfo.minorVersion());
-        grid.variantProperty(QLatin1String("columns")) = int(sqrt(double(modelNodeList.count())));
+        grid = selectionState.view()->createModelNode("QtQuick.Grid", gridMetaInfo.majorVersion(), gridMetaInfo.minorVersion());
+        grid.variantProperty("columns") = int(sqrt(double(modelNodeList.count())));
 
         reparentTo(grid, parent);
     }
@@ -544,16 +544,16 @@ void layoutGrid(const SelectionContext &selectionState)
         RewriterTransaction transaction(selectionState.view());
 
         QPoint pos = getUpperLeftPosition(modelNodeList);
-        grid.variantProperty(QLatin1String("x")) = pos.x();
-        grid.variantProperty(QLatin1String("y")) = pos.y();
+        grid.variantProperty("x") = pos.x();
+        grid.variantProperty("y") = pos.y();
 
         QList<ModelNode> sortedList = modelNodeList;
         qSort(sortedList.begin(), sortedList.end(), compareByGrid);
 
         foreach (ModelNode modelNode, sortedList) {
             reparentTo(modelNode, grid);
-            modelNode.removeProperty(QLatin1String("x"));
-            modelNode.removeProperty(QLatin1String("y"));
+            modelNode.removeProperty("x");
+            modelNode.removeProperty("y");
         }
     }
 }
@@ -563,7 +563,7 @@ void layoutFlow(const SelectionContext &selectionState)
     if (!selectionState.view())
         return;
 
-    NodeMetaInfo flowMetaInfo = selectionState.view()->model()->metaInfo(QLatin1String("QtQuick.Flow"));
+    NodeMetaInfo flowMetaInfo = selectionState.view()->model()->metaInfo("QtQuick.Flow");
 
     if (!flowMetaInfo.isValid())
         return;
@@ -578,7 +578,7 @@ void layoutFlow(const SelectionContext &selectionState)
         if (!parent.isValid())
             return;
 
-        flow = selectionState.view()->createModelNode(QLatin1String("QtQuick.Flow"), flowMetaInfo.majorVersion(), flowMetaInfo.minorVersion());
+        flow = selectionState.view()->createModelNode("QtQuick.Flow", flowMetaInfo.majorVersion(), flowMetaInfo.minorVersion());
 
         reparentTo(flow, parent);
     }
@@ -587,16 +587,16 @@ void layoutFlow(const SelectionContext &selectionState)
         RewriterTransaction transaction(selectionState.view());
 
         QPoint pos = getUpperLeftPosition(modelNodeList);
-        flow.variantProperty(QLatin1String("x")) = pos.x();
-        flow.variantProperty(QLatin1String("y")) = pos.y();
+        flow.variantProperty("x") = pos.x();
+        flow.variantProperty("y") = pos.y();
 
         QList<ModelNode> sortedList = modelNodeList;
         qSort(sortedList.begin(), sortedList.end(), compareByGrid);
 
         foreach (ModelNode modelNode, sortedList) {
             reparentTo(modelNode, flow);
-            modelNode.removeProperty(QLatin1String("x"));
-            modelNode.removeProperty(QLatin1String("y"));
+            modelNode.removeProperty("x");
+            modelNode.removeProperty("y");
         }
     }
 }
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
index 23c6db69651c4174d22462ad35eea4705501d201..467340315c38ae0ee8d9570240c7115977295bb6 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
@@ -548,14 +548,14 @@ QmlItemNode findRecursiveQmlItemNode(const QmlObjectNode &firstQmlObjectNode)
     return QmlItemNode();
 }
 
-void FormEditorView::instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList)
+void FormEditorView::instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList)
 {
-    typedef QPair<ModelNode, QString> NodePropertyPair;
+    typedef QPair<ModelNode, PropertyName> NodePropertyPair;
     foreach (const NodePropertyPair &nodePropertyPair, propertyList) {
         const QmlItemNode itemNode(nodePropertyPair.first);
-        const QString propertyName = nodePropertyPair.second;
+        const PropertyName propertyName = nodePropertyPair.second;
         if (itemNode.isValid() && scene()->hasItemForQmlItemNode(itemNode)) {
-            static QStringList skipList = QStringList() << "x" << "y" << "width" << "height";
+            static PropertyNameList skipList = PropertyNameList() << "x" << "y" << "width" << "height";
             if (!skipList.contains(propertyName)) {
                 m_scene->synchronizeOtherProperty(itemNode, propertyName);
                 m_currentTool->formEditorItemsChanged(QList<FormEditorItem*>() << m_scene->itemForQmlItemNode(itemNode));
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h
index b40040efdcf060a044e5ef8a0a76f9ca3f3ee0d3..c4e2f97d67bf4e11a4121ec02637db23a0dd0b82 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h
@@ -106,7 +106,7 @@ public:
     void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
     void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
     void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
-    void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
+    void instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList);
     void instancesToken(const QString &tokenName, int tokenNumber, const QVector<ModelNode> &nodeVector);
 
     void rewriterBeginTransaction();
diff --git a/src/plugins/qmldesigner/components/integration/componentview.cpp b/src/plugins/qmldesigner/components/integration/componentview.cpp
index 583c1910255805a4d2e23e5426c8d75b1e99d2d1..b0bd1f81f482de7bbbf562915e57bd6e677a282f 100644
--- a/src/plugins/qmldesigner/components/integration/componentview.cpp
+++ b/src/plugins/qmldesigner/components/integration/componentview.cpp
@@ -195,7 +195,7 @@ void ComponentView::variantPropertiesChanged(const QList<VariantProperty>& /*pro
 void ComponentView::bindingPropertiesChanged(const QList<BindingProperty>& /*propertyList*/, PropertyChangeFlags /*propertyChange*/) {}
 void ComponentView::rootNodeTypeChanged(const QString &/*type*/, int /*majorVersion*/, int /*minorVersion*/) {}
 void ComponentView::scriptFunctionsChanged(const ModelNode &/*node*/, const QStringList &/*scriptFunctionList*/) {}
-void ComponentView::instancePropertyChange(const QList<QPair<ModelNode, QString> > &/*propertyList*/) {}
+void ComponentView::instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &/*propertyList*/) {}
 void ComponentView::instancesCompleted(const QVector<ModelNode> &/*completedNodeList*/) {}
 void ComponentView::instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &/*informationChangeHash*/) {}
 void ComponentView::instancesRenderImageChanged(const QVector<ModelNode> &/*nodeList*/) {}
diff --git a/src/plugins/qmldesigner/components/integration/componentview.h b/src/plugins/qmldesigner/components/integration/componentview.h
index a3e7777453d5e0f5a96c9baa71b292fd9f873459..09edd7a07d8a800e9f8b4d5e9385576b47ca64f8 100644
--- a/src/plugins/qmldesigner/components/integration/componentview.h
+++ b/src/plugins/qmldesigner/components/integration/componentview.h
@@ -73,7 +73,7 @@ public:
     void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange);
     void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion);
     void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList);
-    void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
+    void instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList);
     void instancesCompleted(const QVector<ModelNode> &completedNodeList);
     void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &/*informationChangeHash*/);
     void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
diff --git a/src/plugins/qmldesigner/components/integration/designdocument.cpp b/src/plugins/qmldesigner/components/integration/designdocument.cpp
index a9aac865944f49104d3f60e3f4f4c60671ba3c75..a1c7db09729a17cd8244ffcf5d3923647a2baa8a 100644
--- a/src/plugins/qmldesigner/components/integration/designdocument.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocument.cpp
@@ -567,7 +567,7 @@ void DesignDocument::paste()
             int offset = double(qrand()) / RAND_MAX * 20 - 10;
 
             foreach (const ModelNode &node, selectedNodes) {
-                QString defaultProperty(targetNode.metaInfo().defaultPropertyName());
+                PropertyName defaultProperty(targetNode.metaInfo().defaultPropertyName());
                 ModelNode pastedNode(view.insertModel(node));
                 pastedNodeList.append(pastedNode);
                 scatterItem(pastedNode, targetNode, offset);
@@ -600,7 +600,7 @@ void DesignDocument::paste()
 
                 targetNode = targetNode.parentProperty().parentModelNode();
 
-            QString defaultProperty(targetNode.metaInfo().defaultPropertyName());
+            PropertyName defaultProperty(targetNode.metaInfo().defaultPropertyName());
 
             scatterItem(pastedNode, targetNode);
             if (targetNode.nodeListProperty(defaultProperty).isValid())
diff --git a/src/plugins/qmldesigner/components/integration/designdocumentview.cpp b/src/plugins/qmldesigner/components/integration/designdocumentview.cpp
index f82e7f5c8ab445b3db157602d4284849e1feb325..ccebc4239ad0f8876d818802893cc153328f88c4 100644
--- a/src/plugins/qmldesigner/components/integration/designdocumentview.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocumentview.cpp
@@ -70,7 +70,7 @@ void DesignDocumentView::scriptFunctionsChanged(const ModelNode &/*node*/, const
 {
 }
 
-void DesignDocumentView::instancePropertyChange(const QList<QPair<ModelNode, QString> > &/*propertyList*/)
+void DesignDocumentView::instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &/*propertyList*/)
 {
 }
 
@@ -128,7 +128,7 @@ void DesignDocumentView::importsChanged(const QList<Import> &/*addedImports*/, c
 
 static QStringList arrayToStringList(const QByteArray &byteArray)
 {
-    QString str(QString::fromLatin1(byteArray));
+    QString str(QString::fromUtf8(byteArray));
     return str.split('\n');
 }
 
@@ -137,7 +137,7 @@ static QByteArray stringListToArray(const QStringList &stringList)
     QString str;
     foreach (const QString &subString, stringList)
         str += subString + '\n';
-    return str.toLatin1();
+    return str.toUtf8();
 }
 
 void DesignDocumentView::toClipboard() const
diff --git a/src/plugins/qmldesigner/components/integration/designdocumentview.h b/src/plugins/qmldesigner/components/integration/designdocumentview.h
index 1739907b9e3b7773b592f39dac54cd50ecf67929..1555543e7abfd0314b1ff881620f2ff7afb11de3 100644
--- a/src/plugins/qmldesigner/components/integration/designdocumentview.h
+++ b/src/plugins/qmldesigner/components/integration/designdocumentview.h
@@ -59,7 +59,7 @@ public:
 
     virtual void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex);
     virtual void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList);
-    void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
+    void instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList);
     void instancesCompleted(const QVector<ModelNode> &completedNodeList);
     void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
     void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp
index 5ab95e98a123a85da4291f3cfa024bda41e002b3..e3182b613dd5dcf3e5a6c62c775791b3c60fe671 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp
@@ -519,7 +519,7 @@ int ItemLibraryModel::getWidth(const ItemLibraryEntry &itemLibraryEntry)
 {
     foreach (const ItemLibraryEntry::Property &property, itemLibraryEntry.properties())
     {
-        if (property.name() == QLatin1String("width"))
+        if (property.name() == "width")
             return property.value().toInt();
     }
     return 64;
@@ -529,7 +529,7 @@ int ItemLibraryModel::getHeight(const ItemLibraryEntry &itemLibraryEntry)
 {
     foreach (const ItemLibraryEntry::Property &property, itemLibraryEntry.properties())
     {
-        if (property.name() == QLatin1String("height"))
+        if (property.name() == "height")
             return property.value().toInt();
     }
     return 64;
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp
index a2098102f8644c861807457c49ee71ce4af45531..f12dc793488d7b61becc55e06af6e69ad714cf8a 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp
@@ -145,7 +145,7 @@ void ItemLibraryView::scriptFunctionsChanged(const ModelNode &, const QStringLis
 
 }
 
-void ItemLibraryView::instancePropertyChange(const QList<QPair<ModelNode, QString> > &)
+void ItemLibraryView::instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &)
 {
 
 }
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h
index 2b1245693d98e42682219b97c1c65b4bebe2cabc..a432c129fc13b3cd4e90d9a9af0a445b67e402bd 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h
@@ -75,7 +75,7 @@ public:
                                       const QList<ModelNode> &lastSelectedNodeList);
     void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data);
     void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList);
-    void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
+    void instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList);
     void instancesCompleted(const QVector<ModelNode> &completedNodeList);
     void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
     void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp
index 5d7d801f296ae5f26845e5e8dbeda24a8f355030..15fdadeb52f5c11310c4ba298a15dad89db8d2f7 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp
@@ -236,7 +236,7 @@ void ItemLibraryWidget::setSearchFilter(const QString &searchFilter)
             nameFilterList.append(QString("*%1*").arg(searchFilter));
         } else {
             foreach (const QByteArray &extension, QImageReader::supportedImageFormats()) {
-                nameFilterList.append(QString("*%1*.%2").arg(searchFilter, QString::fromLatin1(extension)));
+                nameFilterList.append(QString("*%1*.%2").arg(searchFilter, QString::fromUtf8(extension)));
             }
         }
 
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
index a4576b12c18a78bef343fe13f461e798783d88e9..957b02a9e6ffc361efe24333f23e69d700b876d7 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
@@ -52,8 +52,8 @@ static inline void setScenePos(const QmlDesigner::ModelNode &modelNode,const QPo
     QmlDesigner::QmlItemNode parentNode = modelNode.parentProperty().parentQmlObjectNode().toQmlItemNode();
     if (parentNode.isValid()) {
         QPointF localPos = parentNode.instanceSceneTransform().inverted().map(pos);
-        modelNode.variantProperty(QLatin1String("x")) = localPos.toPoint().x();
-        modelNode.variantProperty(QLatin1String("y")) = localPos.toPoint().y();
+        modelNode.variantProperty("x") = localPos.toPoint().x();
+        modelNode.variantProperty("y") = localPos.toPoint().y();
     }
 }
 
@@ -138,7 +138,7 @@ bool NavigatorTreeModel::dropMimeData(const QMimeData *data,
         return false;
 
     QModelIndex parentIndex, parentItemIndex;
-    QString parentPropertyName;
+    PropertyName parentPropertyName;
     int targetIndex;
 
     parentIndex = dropIndex.sibling(dropIndex.row(), 0);
@@ -154,7 +154,7 @@ bool NavigatorTreeModel::dropMimeData(const QMimeData *data,
     }
     else {
         parentItemIndex = parentIndex.parent();
-        parentPropertyName = parentIndex.data(Qt::DisplayRole).toString();
+        parentPropertyName = parentIndex.data(Qt::DisplayRole).toByteArray();
     }
 
     // Disallow dropping items between properties, which are listed first.
@@ -509,7 +509,7 @@ void NavigatorTreeModel::removeSubTree(const ModelNode &node)
 void NavigatorTreeModel::moveNodesInteractive(NodeAbstractProperty parentProperty, const QList<ModelNode> &modelNodes, int targetIndex)
 {
     try {
-        QString propertyQmlType = qmlTypeInQtContainer(parentProperty.parentModelNode().metaInfo().propertyTypeName(parentProperty.name()));
+        TypeName propertyQmlType = qmlTypeInQtContainer(parentProperty.parentModelNode().metaInfo().propertyTypeName(parentProperty.name()));
 
         RewriterTransaction transaction = m_view->beginRewriterTransaction();
         foreach (const ModelNode &node, modelNodes) {
@@ -577,14 +577,14 @@ void NavigatorTreeModel::moveNodesInteractive(NodeAbstractProperty parentPropert
 QList<ModelNode> NavigatorTreeModel::modelNodeChildren(const ModelNode &parentNode)
 {
     QList<ModelNode> children;
-    QStringList properties;
+    PropertyNameList properties;
 
     if (parentNode.metaInfo().hasDefaultProperty())
         properties << parentNode.metaInfo().defaultPropertyName();
 
     properties << visibleProperties(parentNode);
 
-    foreach (const QString &propertyName, properties) {
+    foreach (const PropertyName &propertyName, properties) {
         AbstractProperty property(parentNode.property(propertyName));
         if (property.isNodeProperty())
             children << property.toNodeProperty().modelNode();
@@ -595,9 +595,9 @@ QList<ModelNode> NavigatorTreeModel::modelNodeChildren(const ModelNode &parentNo
     return children;
 }
 
-QString NavigatorTreeModel::qmlTypeInQtContainer(const QString &qtContainerType) const
+TypeName NavigatorTreeModel::qmlTypeInQtContainer(const TypeName &qtContainerType) const
 {
-    QString typeName(qtContainerType);
+    TypeName typeName(qtContainerType);
     if (typeName.startsWith("QDeclarativeListProperty<") &&
         typeName.endsWith('>')) {
         typeName.remove(0, 25);
@@ -610,17 +610,17 @@ QString NavigatorTreeModel::qmlTypeInQtContainer(const QString &qtContainerType)
 }
 
 
-QStringList NavigatorTreeModel::visibleProperties(const ModelNode &node) const
+PropertyNameList NavigatorTreeModel::visibleProperties(const ModelNode &node) const
 {
-    QStringList propertyList;
+    PropertyNameList propertyList;
 
-    foreach (const QString &propertyName, node.metaInfo().propertyNames()) {
+    foreach (const PropertyName &propertyName, node.metaInfo().propertyNames()) {
         if (!propertyName.contains('.') && //do not show any dot properties, since they are tricky and unlikely to make sense
             node.metaInfo().propertyIsWritable(propertyName) && !m_hiddenProperties.contains(propertyName) &&
             !node.metaInfo().propertyIsEnumType(propertyName) && //Some enums have the same name as Qml types (e. g. Flow)
             propertyName != node.metaInfo().defaultPropertyName()) { // TODO: ask the node instances
 
-            QString qmlType = qmlTypeInQtContainer(node.metaInfo().propertyTypeName(propertyName));
+            TypeName qmlType = qmlTypeInQtContainer(node.metaInfo().propertyTypeName(propertyName));
             if (node.model()->metaInfo(qmlType).isValid() &&
                 node.model()->metaInfo(qmlType).isSubclassOf("QtQuick.Item", -1, -1)) {
                 propertyList.append(propertyName);
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h
index 417188089d0bbc4b9949e80a59b72109dd3aede9..3d833f0084be11430d113e3ec0ba81a5e5844bf6 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h
@@ -132,8 +132,8 @@ private:
 
     QList<ModelNode> modelNodeChildren(const ModelNode &parentNode);
 
-    QString qmlTypeInQtContainer(const QString &qtContainerType) const;
-    QStringList visibleProperties(const ModelNode &node) const;
+    TypeName qmlTypeInQtContainer(const TypeName &qtContainerType) const;
+    PropertyNameList visibleProperties(const ModelNode &node) const;
 
     bool blockItemChangedSignal(bool block);
 
diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
index 1f7daf805ee86bb90ffe0a5eb832dbd9accffdeb..c91b154e3edbe586cdf313c77ff0d7a19336916c 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
@@ -44,8 +44,8 @@ static inline void setScenePos(const QmlDesigner::ModelNode &modelNode,const QPo
     QmlDesigner::QmlItemNode parentNode = modelNode.parentProperty().parentQmlObjectNode().toQmlItemNode();
     if (parentNode.isValid()) {
         QPointF localPos = parentNode.instanceSceneTransform().inverted().map(pos);
-        modelNode.variantProperty(QLatin1String("x")) = localPos.toPoint().x();
-        modelNode.variantProperty(QLatin1String("y")) = localPos.toPoint().y();
+        modelNode.variantProperty("x") = localPos.toPoint().x();
+        modelNode.variantProperty("y") = localPos.toPoint().y();
     }
 }
 
@@ -218,7 +218,7 @@ void NavigatorView::scriptFunctionsChanged(const ModelNode &/*node*/, const QStr
 {
 }
 
-void NavigatorView::instancePropertyChange(const QList<QPair<ModelNode, QString> > &/*propertyList*/)
+void NavigatorView::instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &/*propertyList*/)
 {
 }
 
diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.h b/src/plugins/qmldesigner/components/navigator/navigatorview.h
index 316eeff34895119477952fa47122df549cccf30f..c0184a40cdcf8f3eee75659b47f2804651e82fac 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatorview.h
+++ b/src/plugins/qmldesigner/components/navigator/navigatorview.h
@@ -83,7 +83,7 @@ public:
                                       const QList<ModelNode> &lastSelectedNodeList);
     void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data);
     void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList);
-    void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
+    void instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList);
     void instancesCompleted(const QVector<ModelNode> &completedNodeList);
     void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
     void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
diff --git a/src/plugins/qmldesigner/components/pluginmanager/pluginpath.cpp b/src/plugins/qmldesigner/components/pluginmanager/pluginpath.cpp
index b3ead86bc65de7d5f873fce95cbd1585cf07c4c3..2d7398336711f1aebdde817ccb2f5f043ec503a2 100644
--- a/src/plugins/qmldesigner/components/pluginmanager/pluginpath.cpp
+++ b/src/plugins/qmldesigner/components/pluginmanager/pluginpath.cpp
@@ -175,7 +175,7 @@ QStandardItem *PluginPath::createModelItem()
     for (PluginDataList::iterator it = m_plugins.begin(); it != end; ++it) {
         QStandardItem *pluginItem = new QStandardItem(QFileInfo(it->path).fileName());
         if (instance(*it)) {
-            pluginItem->appendRow(new QStandardItem(QString::fromLatin1(it->instanceGuard->metaObject()->className())));
+            pluginItem->appendRow(new QStandardItem(QString::fromUtf8(it->instanceGuard->metaObject()->className())));
             pathItem->appendRow(pluginItem);
         } else {
             pluginItem->setToolTip(it->errorMessage);
diff --git a/src/plugins/qmldesigner/components/propertyeditor/basicwidgets.cpp b/src/plugins/qmldesigner/components/propertyeditor/basicwidgets.cpp
index b5a3376e936490eb1c22e301b78b670c68173360..0b4e1ad60c9784328838deaa9e901519be26f036 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/basicwidgets.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/basicwidgets.cpp
@@ -438,9 +438,9 @@ public:
             fileName = (_styleSheetFile.toLocalFile());
         Utils::FileReader reader;
         if (reader.fetch(fileName))
-            q->setStyleSheet(QString::fromLatin1(reader.data()));
+            q->setStyleSheet(QString::fromUtf8(reader.data()));
         else
-            qWarning() << QString::fromLatin1("setStyleSheetFile: %1").arg(reader.errorString());
+            qWarning() << QString::fromUtf8("setStyleSheetFile: %1").arg(reader.errorString());
 
     }
 
@@ -630,7 +630,7 @@ private:
                 qWarning() << "setIconFromFile: failed to load" << path;
             pb->setIcon(pixmap);
         } else {
-            qWarning() << QString::fromLatin1("setIconFromFile: %1: %2").arg(path, file.errorString());
+            qWarning() << QString::fromUtf8("setIconFromFile: %1: %2").arg(path, file.errorString());
         }
 
     }
@@ -694,7 +694,7 @@ private:
                 qWarning() << "setIconFromFile: failed to load" << path;
             lb->setPixmap(pixmap);
         } else {
-            qWarning() << QString::fromLatin1("setIconFromFile: %1: %2").arg(path, file.errorString());
+            qWarning() << QString::fromUtf8("setIconFromFile: %1: %2").arg(path, file.errorString());
         }
 
     }
@@ -765,7 +765,7 @@ private:
                 qWarning() << "setIconFromFile: failed to load" << path;
             pb->setIcon(pixmap);
         } else {
-            qWarning() << QString::fromLatin1("setIconFromFile: %1: %2").arg(path, file.errorString());
+            qWarning() << QString::fromUtf8("setIconFromFile: %1: %2").arg(path, file.errorString());
         }
 
     }
@@ -1008,7 +1008,7 @@ void WidgetLoader::setQmlData(const QString &data)
         m_widget->show();
     } else {
         m_component = new QDeclarativeComponent(qmlEngine(this), this);
-        m_component->setData (m_qmlData.toLatin1(), m_baseUrl);
+        m_component->setData (m_qmlData.toUtf8(), m_baseUrl);
         if (m_component) {
             emit sourceChanged();
             emit widgetChanged();
diff --git a/src/plugins/qmldesigner/components/propertyeditor/behaviordialog.cpp b/src/plugins/qmldesigner/components/propertyeditor/behaviordialog.cpp
index 864d86fe5233c6a746a4cf75d2273acbd2eebf20..b85e7958c23e16b3211c65f136e168d853b1ba8e 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/behaviordialog.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/behaviordialog.cpp
@@ -88,7 +88,7 @@ BehaviorDialog::BehaviorDialog(QWidget *parent) : QDialog(parent), m_ui(new Inte
     setModal(true);
 }
 
- void BehaviorDialog::setup(const ModelNode &node, const QString propertyName)
+ void BehaviorDialog::setup(const ModelNode &node, const PropertyName propertyName)
 {
         m_modelNode = node;
         m_ui->duration->setValue(100);
diff --git a/src/plugins/qmldesigner/components/propertyeditor/behaviordialog.h b/src/plugins/qmldesigner/components/propertyeditor/behaviordialog.h
index 655d9ae768db99ec1a33d2699c243271fe35f6d1..35b9f8eeac699889e4901547e757647c6e8eaa77 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/behaviordialog.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/behaviordialog.h
@@ -55,7 +55,7 @@ public:
     explicit BehaviorWidget(QWidget *parent = 0);
 
     ModelNode modelNode() const {return m_modelNode; }
-    QString propertyName() const {return m_propertyName; }
+    PropertyName propertyName() const {return m_propertyName; }
 
     PropertyEditorNodeWrapper* complexNode() const;
     void setComplexNode(PropertyEditorNodeWrapper* complexNode);
@@ -65,7 +65,7 @@ public slots:
 
 private:
     ModelNode m_modelNode;
-    QString m_propertyName;
+    PropertyName m_propertyName;
     PropertyEditorNodeWrapper* m_complexNode;
     QScopedPointer<BehaviorDialog> m_BehaviorDialog;
 };
@@ -75,7 +75,7 @@ class BehaviorDialog : public QDialog
     Q_OBJECT
 public:
     explicit BehaviorDialog(QWidget *parent = 0);
-    void setup(const ModelNode &node, const QString propertyName);
+    void setup(const ModelNode &node, const PropertyName propertyName);
 
 public slots:
     virtual void accept();
@@ -85,7 +85,7 @@ public slots:
 
 private:
     ModelNode m_modelNode;
-    QString m_propertyName;
+    PropertyName m_propertyName;
     QScopedPointer<Internal::Ui::BehaviorDialog> m_ui;
 };
 
diff --git a/src/plugins/qmldesigner/components/propertyeditor/gradientlineqmladaptor.cpp b/src/plugins/qmldesigner/components/propertyeditor/gradientlineqmladaptor.cpp
index cf4edfe84f48d04779997ecaf6efe71c565b3827..b2a9f180d76064b27979f19a0c78ce8e07713d2e 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/gradientlineqmladaptor.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/gradientlineqmladaptor.cpp
@@ -82,12 +82,12 @@ void GradientLineQmlAdaptor::setupGradient()
     if (!modelNode.isValid())
         return;
 
-    if (modelNode.hasBindingProperty(gradientName()))
+    if (modelNode.hasBindingProperty(gradientName().toUtf8()))
         return;
 
-    if (modelNode.hasProperty(gradientName())) { //gradient exists
+    if (modelNode.hasProperty(gradientName().toUtf8())) { //gradient exists
 
-        ModelNode gradientNode = modelNode.nodeProperty(gradientName()).modelNode();
+        ModelNode gradientNode = modelNode.nodeProperty(gradientName().toUtf8()).modelNode();
         QList<ModelNode> stopList = gradientNode.nodeListProperty("stops").toModelNodeList();
 
         foreach (const ModelNode &stopNode, stopList) {
@@ -115,7 +115,7 @@ void GradientLineQmlAdaptor::writeGradient()
     if (!m_itemNode.isValid())
         return;
 
-    if (!m_itemNode.modelNode().metaInfo().hasProperty(gradientName()))
+    if (!m_itemNode.modelNode().metaInfo().hasProperty(gradientName().toUtf8()))
         return;
     try {
         ModelNode modelNode = m_itemNode.modelNode();
@@ -123,13 +123,13 @@ void GradientLineQmlAdaptor::writeGradient()
         QString oldId;
         QVector<QGradientStop> stops = gradient().stops();
         if (m_itemNode.isInBaseState()) {
-            if (modelNode.hasProperty(gradientName())) {
-                oldId = modelNode.nodeProperty(gradientName()).modelNode().id();
-                modelNode.removeProperty(gradientName());
+            if (modelNode.hasProperty(gradientName().toUtf8())) {
+                oldId = modelNode.nodeProperty(gradientName().toUtf8()).modelNode().id();
+                modelNode.removeProperty(gradientName().toUtf8());
             }
 
             ModelNode gradientNode= modelNode.view()->createModelNode("QtQuick.Gradient", modelNode.majorQtQuickVersion(), 0);
-            modelNode.nodeProperty(gradientName()).reparentHere(gradientNode);
+            modelNode.nodeProperty(gradientName().toUtf8()).reparentHere(gradientNode);
 
             RewriterTransaction transaction = m_itemNode.modelNode().view()->beginRewriterTransaction();
 
@@ -143,11 +143,11 @@ void GradientLineQmlAdaptor::writeGradient()
                 gradientNode.nodeListProperty("stops").reparentHere(gradientStopNode);
             }
         } else { //state
-            if  (!modelNode.hasProperty(gradientName())) {
+            if (!modelNode.hasProperty(gradientName().toUtf8())) {
                 qWarning(" GradientLine::updateGradient: no gradient in state");
                 return;
             }
-            ModelNode gradientNode = modelNode.nodeProperty(gradientName()).modelNode();
+            ModelNode gradientNode = modelNode.nodeProperty(gradientName().toUtf8()).modelNode();
             QList<ModelNode> stopList = gradientNode.nodeListProperty("stops").toModelNodeList();
             for (int i = 0;i < stops.size(); i++) {
                 QmlObjectNode stopObjectNode = stopList.at(i);
@@ -166,15 +166,15 @@ void GradientLineQmlAdaptor::deleteGradient()
     if (!m_itemNode.isValid())
         return;
 
-    if (!m_itemNode.modelNode().metaInfo().hasProperty(gradientName()))
+    if (!m_itemNode.modelNode().metaInfo().hasProperty(gradientName().toUtf8()))
         return;
 
     ModelNode modelNode = m_itemNode.modelNode();
 
     if (m_itemNode.isInBaseState()) {
-        if (modelNode.hasProperty(gradientName())) {
+        if (modelNode.hasProperty(gradientName().toUtf8())) {
             RewriterTransaction transaction = m_itemNode.modelNode().view()->beginRewriterTransaction();
-            ModelNode gradientNode = modelNode.nodeProperty(gradientName()).modelNode();
+            ModelNode gradientNode = modelNode.nodeProperty(gradientName().toUtf8()).modelNode();
             if (QmlObjectNode(gradientNode).isValid())
                 QmlObjectNode(gradientNode).destroy();
         }
diff --git a/src/plugins/qmldesigner/components/propertyeditor/layoutwidget.cpp b/src/plugins/qmldesigner/components/propertyeditor/layoutwidget.cpp
index fa6a789bc6e74a5fc6abbd14ad632541a45234e7..163ff72bcd3ea69be1813ef85f9a20691c90986e 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/layoutwidget.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/layoutwidget.cpp
@@ -95,7 +95,7 @@ LayoutWidget::~LayoutWidget()
                 QPixmap pixmap(url.toLocalFile());
                 button->setIcon(pixmap);
             } else {
-                qWarning() << QString::fromLatin1("setIconFromFile: %1: %2").arg(
+                qWarning() << QString::fromUtf8("setIconFromFile: %1: %2").arg(
                                   file.fileName(), file.errorString());
             }
         }
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
index 5a6acd7e7e481348df67bf9c3a3e6f193c775f86..891a598e46bcb06c8a65b65d1784dcd05dc5d0eb 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
@@ -172,16 +172,16 @@ PropertyEditor::NodeType::~NodeType()
 {
 }
 
-void setupPropertyEditorValue(const QString &name, QDeclarativePropertyMap *propertyMap, PropertyEditor *propertyEditor, const QString &type)
+void setupPropertyEditorValue(const PropertyName &name, QDeclarativePropertyMap *propertyMap, PropertyEditor *propertyEditor, const QString &type)
 {
-    QString propertyName(name);
-    propertyName.replace(QLatin1Char('.'), QLatin1Char('_'));
+    QmlDesigner::PropertyName propertyName(name);
+    propertyName.replace('.', '_');
     PropertyEditorValue *valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(propertyMap->value(propertyName)));
     if (!valueObject) {
         valueObject = new PropertyEditorValue(propertyMap);
         QObject::connect(valueObject, SIGNAL(valueChanged(QString,QVariant)), propertyMap, SIGNAL(valueChanged(QString,QVariant)));
         QObject::connect(valueObject, SIGNAL(expressionChanged(QString)), propertyEditor, SLOT(changeExpression(QString)));
-        propertyMap->insert(propertyName, QVariant::fromValue(valueObject));
+        propertyMap->insert(QString::fromUtf8(propertyName), QVariant::fromValue(valueObject));
     }
     valueObject->setName(propertyName);
     if (type == "QColor")
@@ -191,16 +191,16 @@ void setupPropertyEditorValue(const QString &name, QDeclarativePropertyMap *prop
 
 }
 
-void createPropertyEditorValue(const QmlObjectNode &fxObjectNode, const QString &name, const QVariant &value, QDeclarativePropertyMap *propertyMap, PropertyEditor *propertyEditor)
+void createPropertyEditorValue(const QmlObjectNode &fxObjectNode, const PropertyName &name, const QVariant &value, QDeclarativePropertyMap *propertyMap, PropertyEditor *propertyEditor)
 {
-    QString propertyName(name);
-    propertyName.replace(QLatin1Char('.'), QLatin1Char('_'));
+    PropertyName propertyName(name);
+    propertyName.replace('.', '_');
     PropertyEditorValue *valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(propertyMap->value(propertyName)));
     if (!valueObject) {
         valueObject = new PropertyEditorValue(propertyMap);
         QObject::connect(valueObject, SIGNAL(valueChanged(QString,QVariant)), propertyMap, SIGNAL(valueChanged(QString,QVariant)));
         QObject::connect(valueObject, SIGNAL(expressionChanged(QString)), propertyEditor, SLOT(changeExpression(QString)));
-        propertyMap->insert(propertyName, QVariant::fromValue(valueObject));
+        propertyMap->insert(QString::fromUtf8(propertyName), QVariant::fromValue(valueObject));
     }
     valueObject->setName(name);
     valueObject->setModelNode(fxObjectNode);
@@ -211,7 +211,7 @@ void createPropertyEditorValue(const QmlObjectNode &fxObjectNode, const QString
     else
         valueObject->setValue(value);
 
-    if (propertyName != QLatin1String("id") &&
+    if (propertyName != "id" &&
         fxObjectNode.currentState().isBaseState() &&
         fxObjectNode.modelNode().property(propertyName).isBindingProperty()) {
         valueObject->setExpression(fxObjectNode.modelNode().bindingProperty(propertyName).expression());
@@ -220,10 +220,10 @@ void createPropertyEditorValue(const QmlObjectNode &fxObjectNode, const QString
     }
 }
 
-void PropertyEditor::NodeType::setValue(const QmlObjectNode & fxObjectNode, const QString &name, const QVariant &value)
+void PropertyEditor::NodeType::setValue(const QmlObjectNode & fxObjectNode, const PropertyName &name, const QVariant &value)
 {
-    QString propertyName = name;
-    propertyName.replace(QLatin1Char('.'), QLatin1Char('_'));
+    PropertyName propertyName = name;
+    propertyName.replace('.', '_');
     PropertyEditorValue *propertyValue = qobject_cast<PropertyEditorValue*>(variantToQObject(m_backendValuesPropertyMap.value(propertyName)));
     if (propertyValue) {
         propertyValue->setValue(value);
@@ -242,7 +242,7 @@ void PropertyEditor::NodeType::setup(const QmlObjectNode &fxObjectNode, const QS
     QDeclarativeContext *ctxt = m_view->rootContext();
 
     if (fxObjectNode.isValid()) {
-        foreach (const QString &propertyName, fxObjectNode.modelNode().metaInfo().propertyNames())
+        foreach (const PropertyName &propertyName, fxObjectNode.modelNode().metaInfo().propertyNames())
             createPropertyEditorValue(fxObjectNode, propertyName, fxObjectNode.instanceValue(propertyName), &m_backendValuesPropertyMap, propertyEditor);
 
         // className
@@ -298,13 +298,13 @@ void PropertyEditor::NodeType::setup(const QmlObjectNode &fxObjectNode, const QS
     }
 }
 
-void PropertyEditor::NodeType::initialSetup(const QString &typeName, const QUrl &qmlSpecificsFile, PropertyEditor *propertyEditor)
+void PropertyEditor::NodeType::initialSetup(const TypeName &typeName, const QUrl &qmlSpecificsFile, PropertyEditor *propertyEditor)
 {
     QDeclarativeContext *ctxt = m_view->rootContext();
 
     NodeMetaInfo metaInfo = propertyEditor->model()->metaInfo(typeName, 4, 7);
 
-    foreach (const QString &propertyName, metaInfo.propertyNames())
+    foreach (const PropertyName &propertyName, metaInfo.propertyNames())
         setupPropertyEditorValue(propertyName, &m_backendValuesPropertyMap, propertyEditor, metaInfo.propertyTypeName(propertyName));
 
     PropertyEditorValue *valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(m_backendValuesPropertyMap.value("className")));
@@ -393,7 +393,7 @@ static inline QString fixTypeNameForPanes(const QString &typeName)
     return fixedTypeName;
 }
 
-void PropertyEditor::setupPane(const QString &typeName)
+void PropertyEditor::setupPane(const TypeName &typeName)
 {
     NodeMetaInfo metaInfo = model()->metaInfo(typeName);
 
@@ -423,8 +423,10 @@ void PropertyEditor::setupPane(const QString &typeName)
     }
 }
 
-void PropertyEditor::changeValue(const QString &propertyName)
+void PropertyEditor::changeValue(const QString &name)
 {
+    PropertyName propertyName = name.toUtf8();
+
     if (propertyName.isNull())
         return;
 
@@ -471,8 +473,8 @@ void PropertyEditor::changeValue(const QString &propertyName)
     }
 
     //.replace(QLatin1Char('.'), QLatin1Char('_'))
-    QString underscoreName(propertyName);
-    underscoreName.replace(QLatin1Char('.'), QLatin1Char('_'));
+    PropertyName underscoreName(propertyName);
+    underscoreName.replace('.', '_');
     PropertyEditorValue *value = qobject_cast<PropertyEditorValue*>(variantToQObject(m_currentType->m_backendValuesPropertyMap.value(underscoreName)));
 
     if (value ==0)
@@ -495,8 +497,8 @@ void PropertyEditor::changeValue(const QString &propertyName)
     }
 
     if (fxObjectNode.modelNode().metaInfo().isValid() && fxObjectNode.modelNode().metaInfo().hasProperty(propertyName))
-        if (fxObjectNode.modelNode().metaInfo().propertyTypeName(propertyName) == QLatin1String("QUrl")
-                || fxObjectNode.modelNode().metaInfo().propertyTypeName(propertyName) == QLatin1String("url")) { //turn absolute local file paths into relative paths
+        if (fxObjectNode.modelNode().metaInfo().propertyTypeName(propertyName) == "QUrl"
+                || fxObjectNode.modelNode().metaInfo().propertyTypeName(propertyName) == "url") { //turn absolute local file paths into relative paths
             QString filePath = castedValue.toUrl().toString();
         if (QFileInfo(filePath).exists() && QFileInfo(filePath).isAbsolute()) {
             QDir fileDir(QFileInfo(model()->fileUrl().toLocalFile()).absolutePath());
@@ -527,8 +529,10 @@ void PropertyEditor::changeValue(const QString &propertyName)
         }
 }
 
-void PropertyEditor::changeExpression(const QString &name)
+void PropertyEditor::changeExpression(const QString &propertyName)
 {
+    PropertyName name = propertyName.toUtf8();
+
     if (name.isNull())
         return;
 
@@ -538,20 +542,20 @@ void PropertyEditor::changeExpression(const QString &name)
     RewriterTransaction transaction = beginRewriterTransaction();
 
     try {
-        QString underscoreName(name);
-        underscoreName.replace(QLatin1Char('.'), QLatin1Char('_'));
+        PropertyName underscoreName(name);
+        underscoreName.replace('.', '_');
 
         QmlObjectNode fxObjectNode(m_selectedNode);
         PropertyEditorValue *value = qobject_cast<PropertyEditorValue*>(variantToQObject(m_currentType->m_backendValuesPropertyMap.value(underscoreName)));
 
         if (fxObjectNode.modelNode().metaInfo().isValid() && fxObjectNode.modelNode().metaInfo().hasProperty(name)) {
-            if (fxObjectNode.modelNode().metaInfo().propertyTypeName(name) == QLatin1String("QColor")) {
+            if (fxObjectNode.modelNode().metaInfo().propertyTypeName(name) == "QColor") {
                 if (QColor(value->expression().remove('"')).isValid()) {
                     fxObjectNode.setVariantProperty(name, QColor(value->expression().remove('"')));
                     transaction.commit(); //committing in the try block
                     return;
                 }
-            } else if (fxObjectNode.modelNode().metaInfo().propertyTypeName(name) == QLatin1String("bool")) {
+            } else if (fxObjectNode.modelNode().metaInfo().propertyTypeName(name) == "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);
@@ -560,7 +564,7 @@ void PropertyEditor::changeExpression(const QString &name)
                     transaction.commit(); //committing in the try block
                     return;
                 }
-            } else if (fxObjectNode.modelNode().metaInfo().propertyTypeName(name) == QLatin1String("int")) {
+            } else if (fxObjectNode.modelNode().metaInfo().propertyTypeName(name) == "int") {
                 bool ok;
                 int intValue = value->expression().toInt(&ok);
                 if (ok) {
@@ -568,7 +572,7 @@ void PropertyEditor::changeExpression(const QString &name)
                     transaction.commit(); //committing in the try block
                     return;
                 }
-            } else if (fxObjectNode.modelNode().metaInfo().propertyTypeName(name) == QLatin1String("qreal")) {
+            } else if (fxObjectNode.modelNode().metaInfo().propertyTypeName(name) == "qreal") {
                 bool ok;
                 qreal realValue = value->expression().toFloat(&ok);
                 if (ok) {
@@ -617,46 +621,6 @@ void PropertyEditor::setupPanes()
     QApplication::restoreOverrideCursor();
 }
 
-void PropertyEditor::otherPropertyChanged(const QmlObjectNode &fxObjectNode, const QString &propertyName)
-{
-    QmlModelView::otherPropertyChanged(fxObjectNode, propertyName);
-
-    if (!m_selectedNode.isValid())
-        return;
-
-    m_locked = true;
-
-    if (fxObjectNode.isValid() && m_currentType && fxObjectNode == m_selectedNode && fxObjectNode.currentState().isValid()) {
-        AbstractProperty property = fxObjectNode.modelNode().property(propertyName);
-        if (fxObjectNode == m_selectedNode || QmlObjectNode(m_selectedNode).propertyChangeForCurrentState() == fxObjectNode) {
-            if ( !m_selectedNode.hasProperty(propertyName) || m_selectedNode.property(property.name()).isBindingProperty() )
-                setValue(m_selectedNode, property.name(), QmlObjectNode(m_selectedNode).instanceValue(property.name()));
-            else
-                setValue(m_selectedNode, property.name(), QmlObjectNode(m_selectedNode).modelValue(property.name()));
-        }
-    }
-
-    m_locked = false;
-}
-
-void PropertyEditor::transformChanged(const QmlObjectNode &fxObjectNode, const QString &propertyName)
-{
-    QmlModelView::transformChanged(fxObjectNode, propertyName);
-
-    if (!m_selectedNode.isValid())
-        return;
-
-    if (fxObjectNode.isValid() && m_currentType && fxObjectNode == m_selectedNode && fxObjectNode.currentState().isValid()) {
-        AbstractProperty property = fxObjectNode.modelNode().property(propertyName);
-        if (fxObjectNode == m_selectedNode || QmlObjectNode(m_selectedNode).propertyChangeForCurrentState() == fxObjectNode) {
-            if ( m_selectedNode.property(property.name()).isBindingProperty() || !m_selectedNode.hasProperty(propertyName))
-                setValue(m_selectedNode, property.name(), QmlObjectNode(m_selectedNode).instanceValue(property.name()));
-            else
-                setValue(m_selectedNode, property.name(), QmlObjectNode(m_selectedNode).modelValue(property.name()));
-        }
-    }
-}
-
 void PropertyEditor::setQmlDir(const QString &qmlDir)
 {
     m_qmlDir = qmlDir;
@@ -688,20 +652,19 @@ QString templateGeneration(NodeMetaInfo type, NodeMetaInfo superType, const QmlO
 
     QString qmlTemplate = imports.join(QLatin1String("\n")) + QLatin1Char('\n');
     qmlTemplate += QLatin1String("GroupBox {\n");
-    qmlTemplate += QString(QLatin1String("caption: \"%1\"\n")).arg(objectNode.modelNode().simplifiedTypeName());
+    qmlTemplate += QString(QLatin1String("caption: \"%1\"\n")).arg(QString::fromUtf8(objectNode.modelNode().simplifiedTypeName()));
     qmlTemplate += QLatin1String("layout: VerticalLayout {\n");
 
-    QList<QString> orderedList;
-    orderedList = type.propertyNames();
+    QList<PropertyName> orderedList = type.propertyNames();
     qSort(orderedList);
 
     bool emptyTemplate = true;
 
-    foreach (const QString &name, orderedList) {
+    foreach (const PropertyName &name, orderedList) {
 
-        if (name.startsWith(QLatin1String("__")))
+        if (name.startsWith("__"))
             continue; //private API
-        QString properName = name;
+        PropertyName properName = name;
 
         properName.replace('.', '_');
 
@@ -710,7 +673,7 @@ QString templateGeneration(NodeMetaInfo type, NodeMetaInfo superType, const QmlO
         if (typeName == QLatin1String("alias") && objectNode.isValid())
             typeName = objectNode.instanceType(name);
 
-        if (!superType.hasProperty(name) && type.propertyIsWritable(name) && !name.contains(QLatin1String("."))) {
+        if (!superType.hasProperty(name) && type.propertyIsWritable(name) && !name.contains(".")) {
             foreach (const QmlJS::SimpleReaderNode::Ptr &node, templateConfiguration()->children())
                 if (variantToStringList(node->property(QLatin1String("typeNames"))).contains(typeName)) {
                     const QString fileName = propertyTemplatesPath() + node->property(QLatin1String("sourceFile")).toString();
@@ -718,7 +681,7 @@ QString templateGeneration(NodeMetaInfo type, NodeMetaInfo superType, const QmlO
                     if (file.open(QIODevice::ReadOnly)) {
                         QString source = file.readAll();
                         file.close();
-                        qmlTemplate += source.arg(name).arg(properName);
+                        qmlTemplate += source.arg(QString::fromUtf8(name)).arg(QString::fromUtf8(properName));
                         emptyTemplate = false;
                     } else {
                         qWarning().nospace() << "template definition source file not found:" << fileName;
@@ -751,11 +714,11 @@ void PropertyEditor::resetView()
     if (m_selectedNode.isValid() && model() != m_selectedNode.model())
         m_selectedNode = ModelNode();
 
-    QString specificsClassName;
+    TypeName specificsClassName;
     QUrl qmlFile(qmlForNode(m_selectedNode, specificsClassName));
     QUrl qmlSpecificsFile;
 
-    QString diffClassName;
+    TypeName diffClassName;
     if (m_selectedNode.isValid()) {
         diffClassName = m_selectedNode.metaInfo().typeName();
         QList<NodeMetaInfo> hierarchy;
@@ -804,16 +767,16 @@ void PropertyEditor::resetView()
         type->m_view->setSource(qmlFile);
         ctxt->setContextProperty("finishedNotify", QVariant(true));
     } else {
-        QmlObjectNode fxObjectNode;
+        QmlObjectNode qmlObjectNode;
         if (m_selectedNode.isValid())
-            fxObjectNode = QmlObjectNode(m_selectedNode);
+            qmlObjectNode = QmlObjectNode(m_selectedNode);
         QDeclarativeContext *ctxt = type->m_view->rootContext();
 
         ctxt->setContextProperty("finishedNotify", QVariant(false));
         if (specificQmlData.isEmpty())
             type->m_contextObject->setSpecificQmlData(specificQmlData);
         QString currentStateName = currentState().isValid() ? currentState().name() : QLatin1String("invalid state");
-        type->setup(fxObjectNode, currentStateName, qmlSpecificsFile, this);
+        type->setup(qmlObjectNode, currentStateName, qmlSpecificsFile, this);
         type->m_contextObject->setGlobalBaseUrl(qmlFile);
         type->m_contextObject->setSpecificQmlData(specificQmlData);
     }
@@ -899,7 +862,7 @@ void PropertyEditor::propertiesRemoved(const QList<AbstractProperty>& propertyLi
         ModelNode node(property.parentModelNode());
         if (node == m_selectedNode || QmlObjectNode(m_selectedNode).propertyChangeForCurrentState() == node) {
             setValue(m_selectedNode, property.name(), QmlObjectNode(m_selectedNode).instanceValue(property.name()));
-            if (property.name().contains("anchor", Qt::CaseInsensitive))
+            if (property.name().contains("anchor"))
                 m_currentType->m_backendAnchorBinding.invalidate(m_selectedNode);
         }
     }
@@ -943,7 +906,7 @@ void PropertyEditor::bindingPropertiesChanged(const QList<BindingProperty>& prop
         ModelNode node(property.parentModelNode());
 
         if (node == m_selectedNode || QmlObjectNode(m_selectedNode).propertyChangeForCurrentState() == node) {
-            if (property.name().contains("anchor", Qt::CaseInsensitive))
+            if (property.name().contains("anchor"))
                 m_currentType->m_backendAnchorBinding.invalidate(m_selectedNode);
             if ( QmlObjectNode(m_selectedNode).modelNode().property(property.name()).isBindingProperty())
                 setValue(m_selectedNode, property.name(), QmlObjectNode(m_selectedNode).instanceValue(property.name()));
@@ -1014,7 +977,35 @@ void PropertyEditor::actualStateChanged(const ModelNode &node)
     delayedResetView();
 }
 
-void PropertyEditor::setValue(const QmlObjectNode &fxObjectNode, const QString &name, const QVariant &value)
+void PropertyEditor::instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList)
+{
+    if (!m_selectedNode.isValid())
+        return;
+    m_locked = true;
+
+    typedef QPair<ModelNode, PropertyName> ModelNodePropertyPair;
+    foreach (const ModelNodePropertyPair &propertyPair, propertyList) {
+        const ModelNode modelNode = propertyPair.first;
+        const QmlObjectNode qmlObjectNode(modelNode);
+        const PropertyName propertyName = propertyPair.second;
+
+        if (qmlObjectNode.isValid() && m_currentType && modelNode == m_selectedNode && qmlObjectNode.currentState().isValid()) {
+            const AbstractProperty property = modelNode.property(propertyName);
+            if (modelNode == m_selectedNode || qmlObjectNode.propertyChangeForCurrentState() == qmlObjectNode) {
+                if ( !modelNode.hasProperty(propertyName) || modelNode.property(property.name()).isBindingProperty() )
+                    setValue(modelNode, property.name(), qmlObjectNode.instanceValue(property.name()));
+                else
+                    setValue(modelNode, property.name(), qmlObjectNode.modelValue(property.name()));
+            }
+        }
+
+    }
+
+    m_locked = false;
+
+}
+
+void PropertyEditor::setValue(const QmlObjectNode &fxObjectNode, const PropertyName &name, const QVariant &value)
 {
     m_locked = true;
     m_currentType->setValue(fxObjectNode, name, value);
@@ -1069,12 +1060,12 @@ QString PropertyEditor::fileFromUrl(const QUrl &url) const
     return url.toLocalFile();
 }
 
-QUrl PropertyEditor::qmlForNode(const ModelNode &modelNode, QString &className) const
+QUrl PropertyEditor::qmlForNode(const ModelNode &modelNode, TypeName &className) const
 {
     if (modelNode.isValid()) {
         QList<NodeMetaInfo> hierarchy;
-        hierarchy << modelNode.metaInfo();
-        hierarchy << modelNode.metaInfo().superClasses();
+        hierarchy.append(modelNode.metaInfo());
+        hierarchy.append(modelNode.metaInfo().superClasses());
 
         foreach (const NodeMetaInfo &info, hierarchy) {
             QUrl fileUrl = fileToUrl(locateQmlFile(info, qmlFileName(info)));
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h
index 8e30ed28e35d41fd8b51a6d385d2ba3e7100d902..24df1fabd05e065579cda27651f493ff8b7517c1 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h
@@ -66,8 +66,8 @@ class PropertyEditor: public QmlModelView
         ~NodeType();
 
         void setup(const QmlObjectNode &fxObjectNode, const QString &stateName, const QUrl &qmlSpecificsFile, PropertyEditor *propertyEditor);
-        void initialSetup(const QString &typeName, const QUrl &qmlSpecificsFile, PropertyEditor *propertyEditor);
-        void setValue(const QmlObjectNode &fxObjectNode, const QString &name, const QVariant &value);
+        void initialSetup(const TypeName &typeName, const QUrl &qmlSpecificsFile, PropertyEditor *propertyEditor);
+        void setValue(const QmlObjectNode &fxObjectNode, const PropertyName &name, const QVariant &value);
 
         DeclarativeWidgetView *m_view;
         Internal::QmlAnchorBindingProxy m_backendAnchorBinding;
@@ -109,14 +109,12 @@ public:
 
     void resetView();
     void actualStateChanged(const ModelNode &node);
+    void instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList);
 
 protected:
     void timerEvent(QTimerEvent *event);
-    void otherPropertyChanged(const QmlObjectNode &, const QString &propertyName);
-    void transformChanged(const QmlObjectNode &qmlObjectNode, const QString &propertyName);
-
-    void setupPane(const QString &typeName);
-    void setValue(const QmlObjectNode &fxObjectNode, const QString &name, const QVariant &value);
+    void setupPane(const TypeName &typeName);
+    void setValue(const QmlObjectNode &fxObjectNode, const PropertyName &name, const QVariant &value);
 
 private slots:
     void reloadQml();
@@ -129,7 +127,7 @@ private: //functions
     QString qmlFileName(const NodeMetaInfo &nodeInfo) const;
     QUrl fileToUrl(const QString &filePath) const;
     QString fileFromUrl(const QUrl &url) const;
-    QUrl qmlForNode(const ModelNode &modelNode, QString &className) const;
+    QUrl qmlForNode(const ModelNode &modelNode, TypeName &className) const;
     QString locateQmlFile(const NodeMetaInfo &info, const QString &relativePath) const;
     void select(const ModelNode& node);
 
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp
index 81f8e7a99e0b551c91d8d9fe57e5dd34645d0941..92d9fe1b617efc24b7ac3f61049fcf59c939006d 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp
@@ -55,7 +55,7 @@ QVariant PropertyEditorValue::value() const
 {
     QVariant returnValue = m_value;
     if (modelNode().isValid() && modelNode().metaInfo().isValid() && modelNode().metaInfo().hasProperty(name()))
-        if (modelNode().metaInfo().propertyTypeName(name()) == QLatin1String("QUrl"))
+        if (modelNode().metaInfo().propertyTypeName(name()) == "QUrl")
         returnValue = returnValue.toUrl().toString();
     return returnValue;
 }
@@ -93,7 +93,7 @@ static bool cleverColorCompare(QVariant value1, QVariant value2)
 
 /* "red" is the same color as "#ff0000"
   To simplify editing we convert all explicit color names in the hash format */
-static void fixAmbigousColorNames(const QmlDesigner::ModelNode &modelNode, const QString &name, QVariant *value)
+static void fixAmbigousColorNames(const QmlDesigner::ModelNode &modelNode, const QmlDesigner::PropertyName &name, QVariant *value)
 {
     if (modelNode.isValid() && modelNode.metaInfo().isValid()
             && (modelNode.metaInfo().propertyTypeName(name) == "QColor"
@@ -110,7 +110,7 @@ static void fixAmbigousColorNames(const QmlDesigner::ModelNode &modelNode, const
     }
 }
 
-static void fixUrl(const QmlDesigner::ModelNode &modelNode, const QString &name, QVariant *value)
+static void fixUrl(const QmlDesigner::ModelNode &modelNode, const QmlDesigner::PropertyName &name, QVariant *value)
 {
     if (modelNode.isValid() && modelNode.metaInfo().isValid()
             && (modelNode.metaInfo().propertyTypeName(name) == "QUrl"
@@ -125,7 +125,7 @@ void PropertyEditorValue::setValueWithEmit(const QVariant &value)
     if (m_value != value || isBound()) {
         QVariant newValue = value;
         if (modelNode().isValid() && modelNode().metaInfo().isValid() && modelNode().metaInfo().hasProperty(name()))
-            if (modelNode().metaInfo().propertyTypeName(name()) == QLatin1String("QUrl"))
+            if (modelNode().metaInfo().propertyTypeName(name()) == "QUrl")
             newValue = QUrl(newValue.toString());
 
         if (cleverDoubleCompare(newValue, m_value))
@@ -201,12 +201,12 @@ bool PropertyEditorValue::isInModel() const
     return modelNode().isValid() && modelNode().hasProperty(name());
 }
 
-QString PropertyEditorValue::name() const
+QmlDesigner::PropertyName PropertyEditorValue::name() const
 {
     return m_name;
 }
 
-void PropertyEditorValue::setName(const QString &name)
+void PropertyEditorValue::setName(const QmlDesigner::PropertyName &name)
 {
     m_name = name;
 }
@@ -225,7 +225,7 @@ void PropertyEditorValue::setIsValid(bool valid)
 bool PropertyEditorValue::isTranslated() const
 {
     if (modelNode().isValid() && modelNode().metaInfo().isValid() && modelNode().metaInfo().hasProperty(name()))
-        if (modelNode().metaInfo().propertyTypeName(name()) == QLatin1String("QString") || modelNode().metaInfo().propertyTypeName(name()) == QLatin1String("string")) {
+        if (modelNode().metaInfo().propertyTypeName(name()) == "QString" || modelNode().metaInfo().propertyTypeName(name()) == "string") {
             const QmlDesigner::QmlObjectNode objectNode(modelNode());
             if (objectNode.isValid() && objectNode.hasBindingProperty(name())) {
                 //qsTr()
@@ -296,7 +296,7 @@ QString PropertyEditorNodeWrapper::type()
     if (!(m_modelNode.isValid()))
         return QString();
 
-    return m_modelNode.simplifiedTypeName();
+    return QString::fromUtf8(m_modelNode.simplifiedTypeName());
 
 }
 
@@ -305,7 +305,7 @@ QmlDesigner::ModelNode PropertyEditorNodeWrapper::parentModelNode() const
     return  m_editorValue->modelNode();
 }
 
-QString PropertyEditorNodeWrapper::propertyName() const
+QmlDesigner::PropertyName PropertyEditorNodeWrapper::propertyName() const
 {
     return m_editorValue->name();
 }
@@ -317,8 +317,7 @@ QDeclarativePropertyMap* PropertyEditorNodeWrapper::properties()
 
 void PropertyEditorNodeWrapper::add(const QString &type)
 {
-
-    QString propertyType = type;
+    QmlDesigner::TypeName propertyType = type.toUtf8();
 
     if ((m_editorValue && m_editorValue->modelNode().isValid())) {
         if (propertyType.isEmpty())
@@ -354,8 +353,10 @@ void PropertyEditorNodeWrapper::remove()
     emit existsChanged();
 }
 
-void PropertyEditorNodeWrapper::changeValue(const QString &name)
+void PropertyEditorNodeWrapper::changeValue(const QString &propertyName)
 {
+    const QmlDesigner::PropertyName name = propertyName.toUtf8();
+
     if (name.isNull())
         return;
     if (m_modelNode.isValid()) {
@@ -381,7 +382,7 @@ void PropertyEditorNodeWrapper::setup()
         foreach (QObject *object, m_valuesPropertyMap.children())
             delete object;
 
-        foreach (const QString &propertyName, m_modelNode.metaInfo().propertyNames()) {
+        foreach (const QmlDesigner::PropertyName &propertyName, m_modelNode.metaInfo().propertyNames()) {
             if (fxObjectNode.isValid()) {
                 PropertyEditorValue *valueObject = new PropertyEditorValue(&m_valuesPropertyMap);
                 valueObject->setName(propertyName);
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.h
index 918de7bc8a6f53a2f45c37ff2782655325116e53..64e84a8fd89be0340b461603a9e2d4c9dbc568ab 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.h
@@ -30,6 +30,8 @@
 #ifndef PROPERTYEDITORVALUE_H
 #define PROPERTYEDITORVALUE_H
 
+#include <qmldesignercorelib_global.h>
+
 #include <QObject>
 #include <QDeclarativePropertyMap>
 #include <qdeclarative.h>
@@ -53,12 +55,12 @@ public:
     QString type();
     QDeclarativePropertyMap* properties();
     QmlDesigner::ModelNode parentModelNode() const;
-    QString propertyName() const;
+    QmlDesigner::PropertyName propertyName() const;
 
 public slots:
     void add(const QString &type = QString());
     void remove();
-    void changeValue(const QString &name);
+    void changeValue(const QString &propertyName);
     void update();
 
 signals:
@@ -113,8 +115,8 @@ public:
 
     bool isTranslated() const;
 
-    QString name() const;
-    void setName(const QString &name);
+    QmlDesigner::PropertyName name() const;
+    void setName(const QmlDesigner::PropertyName &name);
 
     QmlDesigner::ModelNode modelNode() const;
     void setModelNode(const QmlDesigner::ModelNode &modelNode);
@@ -142,7 +144,7 @@ private: //variables
     QmlDesigner::ModelNode m_modelNode;
     QVariant m_value;
     QString m_expression;
-    QString m_name;
+    QmlDesigner::PropertyName m_name;
     bool m_isInSubState;
     bool m_isInModel;
     bool m_isBound;
diff --git a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
index 32af375c7734522b19b27f79579ca4c98671840e..c94026ff04beefd5f99688e5cf1c2ae1ef0c0a00 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
@@ -40,9 +40,9 @@ namespace QmlDesigner {
 class ModelNode;
 class NodeState;
 
-const QString auxDataString = QLatin1String("anchors_");
+const PropertyName auxDataString("anchors_");
 
-static inline void backupPropertyAndRemove(ModelNode node, const QString &propertyName)
+static inline void backupPropertyAndRemove(ModelNode node, const PropertyName &propertyName)
 {
     if (node.hasVariantProperty(propertyName)) {
         node.setAuxiliaryData(auxDataString + propertyName, node.variantProperty(propertyName).value());
@@ -56,7 +56,7 @@ static inline void backupPropertyAndRemove(ModelNode node, const QString &proper
 }
 
 
-static inline void restoreProperty(ModelNode node, const QString &propertyName)
+static inline void restoreProperty(ModelNode node, const PropertyName &propertyName)
 {
     if (node.hasAuxiliaryData(auxDataString + propertyName))
         node.variantProperty(propertyName) = node.auxiliaryData(auxDataString + propertyName);
diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp
index 7e9002213c2350cabc6b402d358e3ee29f14aee2..7b9aff68292cb360f53273f5e989fad87db9821d 100644
--- a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp
+++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp
@@ -294,12 +294,6 @@ void StatesEditorView::nodeOrderChanged(const NodeListProperty &listProperty, co
         resetModel();
 }
 
-void StatesEditorView::nodeInstancePropertyChanged(const ModelNode &node, const QString &propertyName)
-{
-    // sets currentState() used in sceneChanged
-    QmlModelView::nodeInstancePropertyChanged(node, propertyName);
-}
-
 void StatesEditorView::actualStateChanged(const ModelNode &node)
 {
     QmlModelState newQmlModelState(node);
@@ -311,21 +305,6 @@ void StatesEditorView::actualStateChanged(const ModelNode &node)
     QmlModelView::actualStateChanged(node);
 }
 
-void StatesEditorView::transformChanged(const QmlObjectNode &qmlObjectNode, const QString &propertyName)
-{
-    QmlModelView::transformChanged(qmlObjectNode, propertyName);
-}
-
-void StatesEditorView::parentChanged(const QmlObjectNode &qmlObjectNode)
-{
-    QmlModelView::parentChanged(qmlObjectNode);
-}
-
-void StatesEditorView::otherPropertyChanged(const QmlObjectNode &qmlObjectNode, const QString &propertyName)
-{
-    QmlModelView::otherPropertyChanged(qmlObjectNode, propertyName);
-}
-
 void StatesEditorView::instancesPreviewImageChanged(const QVector<ModelNode> &nodeList)
 {
     int minimumIndex = 10000;
diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h
index 794bd1ce6a85c73cfa1cb6a608e0782b8749b347..ac8dcfa00609f2f396be065ded375869b7b7ca5d 100644
--- a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h
+++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h
@@ -48,8 +48,6 @@ public:
     bool validStateName(const QString &name) const;
     QString currentStateName() const;
 
-    void nodeInstancePropertyChanged(const ModelNode &node, const QString &propertyName);
-
     // AbstractView
     void modelAttached(Model *model);
     void modelAboutToBeDetached(Model *model);
diff --git a/src/plugins/qmldesigner/designercore/exceptions/exception.cpp b/src/plugins/qmldesigner/designercore/exceptions/exception.cpp
index 9b5a5cac8c8fa89fb6f380a107ac0c272e784afd..505f4be898a63c1fecd9e551520e05950df3c53f 100644
--- a/src/plugins/qmldesigner/designercore/exceptions/exception.cpp
+++ b/src/plugins/qmldesigner/designercore/exceptions/exception.cpp
@@ -111,7 +111,7 @@ Exception::Exception(int line,
 #endif
 
 if (s_shouldAssert)
-    Q_ASSERT_X(false, function.toLatin1(), QString("%1:%2 - %3").arg(file).arg(line).arg(function).toLatin1());
+    Q_ASSERT_X(false, function.toUtf8(), QString("%1:%2 - %3").arg(file).arg(line).arg(function).toUtf8());
 }
 
 Exception::~Exception()
diff --git a/src/plugins/qmldesigner/designercore/filemanager/addobjectvisitor.cpp b/src/plugins/qmldesigner/designercore/filemanager/addobjectvisitor.cpp
index 254c87b636481309aae402e91d49049fd93d3d45..2fce3907baab44b7b347e74034949cfcb14042ff 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/addobjectvisitor.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/addobjectvisitor.cpp
@@ -40,7 +40,7 @@ using namespace QmlJS::AST;
 AddObjectVisitor::AddObjectVisitor(QmlDesigner::TextModifier &modifier,
                                    quint32 parentLocation,
                                    const QString &content,
-                                   const QStringList &propertyOrder):
+                                   const PropertyNameList &propertyOrder):
     QMLRewriter(modifier),
     m_parentLocation(parentLocation),
     m_content(content),
diff --git a/src/plugins/qmldesigner/designercore/filemanager/addobjectvisitor.h b/src/plugins/qmldesigner/designercore/filemanager/addobjectvisitor.h
index fd05edaf26f6b8710ad634b68422babd4cf32597..8caa8dd31d001dbdd6e7353eb118c309f9e9bce0 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/addobjectvisitor.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/addobjectvisitor.h
@@ -41,7 +41,7 @@ public:
     AddObjectVisitor(QmlDesigner::TextModifier &modifier,
                      quint32 parentLocation,
                      const QString &content,
-                     const QStringList &propertyOrder);
+                     const PropertyNameList &propertyOrder);
 
 protected:
     virtual bool visit(QmlJS::AST::UiObjectBinding *ast);
@@ -53,7 +53,7 @@ private:
 private:
     quint32 m_parentLocation;
     QString m_content;
-    QStringList m_propertyOrder;
+    PropertyNameList m_propertyOrder;
 };
 
 } // namespace Internal
diff --git a/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.cpp b/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.cpp
index 786e00810ce876671ef9b9736fb9bc2d1d19edfa..df647e181f9cdf19f1c1c4a75647db323c420e5f 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.cpp
@@ -39,10 +39,10 @@ using namespace QmlJS::AST;
 
 AddPropertyVisitor::AddPropertyVisitor(QmlDesigner::TextModifier &modifier,
                                        quint32 parentLocation,
-                                       const QString &name,
+                                       const QmlDesigner::PropertyName &name,
                                        const QString &value,
                                        QmlRefactoring::PropertyType propertyType,
-                                       const QStringList &propertyOrder):
+                                       const PropertyNameList &propertyOrder):
     QMLRewriter(modifier),
     m_parentLocation(parentLocation),
     m_name(name),
diff --git a/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.h b/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.h
index 197d0f9879a9965b2472f6f5dcb33e1a75c14cde..c5da91fbaa9bb817f8166da2a222e669cacbd605 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.h
@@ -42,10 +42,10 @@ public:
 public:
     AddPropertyVisitor(QmlDesigner::TextModifier &modifier,
                        quint32 parentLocation,
-                       const QString &name,
+                       const QmlDesigner::PropertyName &name,
                        const QString &value,
                        QmlDesigner::QmlRefactoring::PropertyType propertyType,
-                       const QStringList &propertyOrder);
+                       const PropertyNameList &propertyOrder);
 
 protected:
     virtual bool visit(QmlJS::AST::UiObjectDefinition *ast);
@@ -56,10 +56,10 @@ private:
 
 private:
     quint32 m_parentLocation;
-    QString m_name;
+    PropertyName m_name;
     QString m_value;
     QmlRefactoring::PropertyType m_propertyType;
-    QStringList m_propertyOrder;
+    PropertyNameList m_propertyOrder;
 };
 
 } // namespace Internal
diff --git a/src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.cpp b/src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.cpp
index 08d8bce4916a69b8ce51056739c50761020ebf38..ce2393c5a819a125ca24a0e1cfa75f6ef6099b57 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.cpp
@@ -45,10 +45,10 @@ class Inserter: public QMLRewriter
 public:
     Inserter(QmlDesigner::TextModifier &modifier,
              quint32 targetParentObjectLocation,
-             const QString &targetPropertyName,
+             const QmlDesigner::PropertyName &targetPropertyName,
              bool targetIsArrayBinding,
              TextModifier::MoveInfo moveInfo,
-             const QStringList &propertyOrder):
+             const PropertyNameList &propertyOrder):
         QMLRewriter(modifier),
         targetParentObjectLocation(targetParentObjectLocation),
         targetPropertyName(targetPropertyName),
@@ -151,18 +151,18 @@ private:
 
 private:
     quint32 targetParentObjectLocation;
-    QString targetPropertyName;
+    QmlDesigner::PropertyName targetPropertyName;
     bool targetIsArrayBinding;
     TextModifier::MoveInfo moveInfo;
-    QStringList propertyOrder;
+    PropertyNameList propertyOrder;
 };
 
 MoveObjectVisitor::MoveObjectVisitor(QmlDesigner::TextModifier &modifier,
                                      quint32 objectLocation,
-                                     const QString &targetPropertyName,
+                                     const QmlDesigner::PropertyName &targetPropertyName,
                                      bool targetIsArrayBinding,
                                      quint32 targetParentObjectLocation,
-                                     const QStringList &propertyOrder):
+                                     const PropertyNameList &propertyOrder):
     QMLRewriter(modifier),
     objectLocation(objectLocation),
     targetPropertyName(targetPropertyName),
diff --git a/src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.h b/src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.h
index 390fb4329e59698082814e6abba40a0bfc52852f..79122ab489192e0454a2ab0d72d6072e11f4c7ca 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.h
@@ -40,10 +40,10 @@ class MoveObjectVisitor: public QMLRewriter
 public:
     MoveObjectVisitor(QmlDesigner::TextModifier &modifier,
                       quint32 objectLocation,
-                      const QString &targetPropertyName,
+                      const QmlDesigner::PropertyName &targetPropertyName,
                       bool targetIsArrayBinding,
                       quint32 targetParentObjectLocation,
-                      const QStringList &propertyOrder);
+                      const PropertyNameList &propertyOrder);
 
     bool operator ()(QmlJS::AST::UiProgram *ast);
 
@@ -58,10 +58,10 @@ private:
 private:
     QList<QmlJS::AST::Node *> parents;
     quint32 objectLocation;
-    QString targetPropertyName;
+    PropertyName targetPropertyName;
     bool targetIsArrayBinding;
     quint32 targetParentObjectLocation;
-    QStringList propertyOrder;
+    PropertyNameList propertyOrder;
 
     QmlJS::AST::UiProgram *program;
 };
diff --git a/src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.cpp b/src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.cpp
index d1afd11f40f5abf19317537d0c8e52302cd28cf5..0c35d008d9a6ea5c0de82fc82869415fac5d06ce 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.cpp
@@ -45,7 +45,7 @@ using namespace QmlJS;
 using namespace QmlDesigner;
 using namespace QmlDesigner::Internal;
 
-QmlRefactoring::QmlRefactoring(const Document::Ptr &doc, TextModifier &modifier, const QStringList &propertyOrder):
+QmlRefactoring::QmlRefactoring(const Document::Ptr &doc, TextModifier &modifier, const PropertyNameList &propertyOrder):
         qmlDocument(doc),
         textModifier(&modifier),
         m_propertyOrder(propertyOrder)
@@ -83,7 +83,7 @@ bool QmlRefactoring::removeImport(const Import &import)
     return visitor.remove(qmlDocument->qmlProgram(), import);
 }
 
-bool QmlRefactoring::addToArrayMemberList(int parentLocation, const QString &propertyName, const QString &content)
+bool QmlRefactoring::addToArrayMemberList(int parentLocation, const PropertyName &propertyName, const QString &content)
 {
     if (parentLocation < 0)
         return false;
@@ -102,7 +102,7 @@ bool QmlRefactoring::addToObjectMemberList(int parentLocation, const QString &co
     return visit(qmlDocument->qmlProgram());
 }
 
-bool QmlRefactoring::addProperty(int parentLocation, const QString &name, const QString &value, PropertyType propertyType)
+bool QmlRefactoring::addProperty(int parentLocation, const PropertyName &name, const QString &value, PropertyType propertyType)
 {
     if (parentLocation < 0)
         return false;
@@ -111,7 +111,7 @@ bool QmlRefactoring::addProperty(int parentLocation, const QString &name, const
     return visit(qmlDocument->qmlProgram());
 }
 
-bool QmlRefactoring::changeProperty(int parentLocation, const QString &name, const QString &value, PropertyType propertyType)
+bool QmlRefactoring::changeProperty(int parentLocation, const PropertyName &name, const QString &value, PropertyType propertyType)
 {
     if (parentLocation < 0)
         return false;
@@ -129,7 +129,7 @@ bool QmlRefactoring::changeObjectType(int nodeLocation, const QString &newType)
     return visit(qmlDocument->qmlProgram());
 }
 
-bool QmlRefactoring::moveObject(int objectLocation, const QString &targetPropertyName, bool targetIsArrayBinding, int targetParentObjectLocation)
+bool QmlRefactoring::moveObject(int objectLocation, const PropertyName &targetPropertyName, bool targetIsArrayBinding, int targetParentObjectLocation)
 {
     if (objectLocation < 0 || targetParentObjectLocation < 0)
         return false;
@@ -162,7 +162,7 @@ bool QmlRefactoring::removeObject(int nodeLocation)
     return visit(qmlDocument->qmlProgram());
 }
 
-bool QmlRefactoring::removeProperty(int parentLocation, const QString &name)
+bool QmlRefactoring::removeProperty(int parentLocation, const PropertyName &name)
 {
     if (parentLocation < 0 || name.isEmpty())
         return false;
diff --git a/src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.h b/src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.h
index f833d878081ef4d13f0360256a8280b20c9d7ee8..62359333791fe6de3cce3822c6486936037e1a6f 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.h
@@ -51,29 +51,29 @@ public:
     };
 
 public:
-    QmlRefactoring(const QmlJS::Document::Ptr &doc, QmlDesigner::TextModifier &modifier, const QStringList &propertyOrder);
+    QmlRefactoring(const QmlJS::Document::Ptr &doc, QmlDesigner::TextModifier &modifier, const PropertyNameList &propertyOrder);
 
     bool reparseDocument();
 
     bool addImport(const Import &import);
     bool removeImport(const Import &import);
 
-    bool addToArrayMemberList(int parentLocation, const QString &propertyName, const QString &content);
+    bool addToArrayMemberList(int parentLocation, const PropertyName &propertyName, const QString &content);
     bool addToObjectMemberList(int parentLocation, const QString &content);
-    bool addProperty(int parentLocation, const QString &name, const QString &value, PropertyType propertyType);
-    bool changeProperty(int parentLocation, const QString &name, const QString &value, PropertyType propertyType);
+    bool addProperty(int parentLocation, const PropertyName &name, const QString &value, PropertyType propertyType);
+    bool changeProperty(int parentLocation, const PropertyName &name, const QString &value, PropertyType propertyType);
     bool changeObjectType(int nodeLocation, const QString &newType);
 
-    bool moveObject(int objectLocation, const QString &targetPropertyName, bool targetIsArray, int targetParentObjectLocation);
+    bool moveObject(int objectLocation, const PropertyName &targetPropertyName, bool targetIsArray, int targetParentObjectLocation);
     bool moveObjectBeforeObject(int movingObjectLocation, int beforeObjectLocation, bool inDefaultProperty);
 
     bool removeObject(int nodeLocation);
-    bool removeProperty(int parentLocation, const QString &name);
+    bool removeProperty(int parentLocation, const PropertyName &name);
 
 private:
     QmlJS::Document::Ptr qmlDocument;
     TextModifier *textModifier;
-    QStringList m_propertyOrder;
+    PropertyNameList m_propertyOrder;
 };
 
 } // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp b/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp
index c0a93fd2f4f9ab10a823a094b81651c7b43729d1..7dbdeb9ca40403684e648eba13f11d4095b1826a 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp
@@ -262,9 +262,9 @@ void QMLRewriter::includeLeadingEmptyLine(int &start) const
 }
 
 // FIXME: duplicate code in the QmlJS::Rewriter class, remove this
-UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(UiObjectMemberList *members, const QStringList &propertyOrder)
+UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(UiObjectMemberList *members, const QmlDesigner::PropertyNameList &propertyOrder)
 {
-    const int objectDefinitionInsertionPoint = propertyOrder.indexOf(QString());
+    const int objectDefinitionInsertionPoint = propertyOrder.indexOf(PropertyName()); // XXX ????
 
     UiObjectMemberList *lastObjectDef = 0;
     UiObjectMemberList *lastNonObjectDef = 0;
@@ -276,13 +276,13 @@ UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(UiObjectMemberList *m
         if (cast<UiObjectDefinition*>(member))
             lastObjectDef = iter;
         else if (UiArrayBinding *arrayBinding = cast<UiArrayBinding*>(member))
-            idx = propertyOrder.indexOf(toString(arrayBinding->qualifiedId));
+            idx = propertyOrder.indexOf(toString(arrayBinding->qualifiedId).toUtf8());
         else if (UiObjectBinding *objectBinding = cast<UiObjectBinding*>(member))
-            idx = propertyOrder.indexOf(toString(objectBinding->qualifiedId));
+            idx = propertyOrder.indexOf(toString(objectBinding->qualifiedId).toUtf8());
         else if (UiScriptBinding *scriptBinding = cast<UiScriptBinding*>(member))
-            idx = propertyOrder.indexOf(toString(scriptBinding->qualifiedId));
+            idx = propertyOrder.indexOf(toString(scriptBinding->qualifiedId).toUtf8());
         else if (cast<UiPublicMember*>(member))
-            idx = propertyOrder.indexOf(QLatin1String("property"));
+            idx = propertyOrder.indexOf("property");
 
         if (idx < objectDefinitionInsertionPoint)
             lastNonObjectDef = iter;
@@ -295,7 +295,7 @@ UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(UiObjectMemberList *m
 }
 
 // FIXME: duplicate code in the QmlJS::Rewriter class, remove this
-UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(UiObjectMemberList *members, const QString &propertyName, const QStringList &propertyOrder)
+UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(UiObjectMemberList *members, const QmlDesigner::PropertyName &propertyName, const QmlDesigner::PropertyNameList &propertyOrder)
 {
     if (!members)
         return 0; // empty members
@@ -319,7 +319,7 @@ UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(UiObjectMemberList *m
 
     int idx = propertyOrder.indexOf(propertyName);
     if (idx == -1)
-        idx = propertyOrder.indexOf(QString());
+        idx = propertyOrder.indexOf(PropertyName());
     if (idx == -1)
         idx = propertyOrder.size() - 1;
 
diff --git a/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h b/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h
index a11a79825cc470de4b33a09113654343cd6ab2d5..c3a48c215a8de3b775d12f2af4ea4e39299507e7 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h
@@ -79,8 +79,8 @@ protected:
     bool includeSurroundingWhitespace(int &start, int &end) const;
     void includeLeadingEmptyLine(int &start) const;
 
-    static QmlJS::AST::UiObjectMemberList *searchMemberToInsertAfter(QmlJS::AST::UiObjectMemberList *members, const QStringList &propertyOrder);
-    static QmlJS::AST::UiObjectMemberList *searchMemberToInsertAfter(QmlJS::AST::UiObjectMemberList *members, const QString &propertyName, const QStringList &propertyOrder);
+    static QmlJS::AST::UiObjectMemberList *searchMemberToInsertAfter(QmlJS::AST::UiObjectMemberList *members, const PropertyNameList &propertyOrder);
+    static QmlJS::AST::UiObjectMemberList *searchMemberToInsertAfter(QmlJS::AST::UiObjectMemberList *members, const QmlDesigner::PropertyName &propertyName, const PropertyNameList &propertyOrder);
 
 protected:
     bool didRewriting() const
diff --git a/src/plugins/qmldesigner/designercore/include/abstractproperty.h b/src/plugins/qmldesigner/designercore/include/abstractproperty.h
index 96b2a2d2e3cc2e8efa237aa25dc0da1ca2f66cca..b26f07e82997bc04c616817f4df2b0eae90e308b 100644
--- a/src/plugins/qmldesigner/designercore/include/abstractproperty.h
+++ b/src/plugins/qmldesigner/designercore/include/abstractproperty.h
@@ -81,7 +81,7 @@ public:
     AbstractProperty& operator=(const AbstractProperty &other);
     AbstractProperty(const AbstractProperty &property, AbstractView *view);
 
-    QString name() const;
+    PropertyName name() const;
 
     bool isValid() const;
     ModelNode parentModelNode() const;
@@ -101,17 +101,17 @@ public:
     bool isNodeProperty() const;
 
     bool isDynamic() const;
-    QString dynamicTypeName() const;
+    TypeName dynamicTypeName() const;
 
 protected:
-    AbstractProperty(const QString &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view);
+    AbstractProperty(const PropertyName &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view);
     AbstractProperty(const Internal::InternalPropertyPointer &property, Model* model, AbstractView *view);
     Internal::InternalNodePointer internalNode() const;
     Model *model() const;
     AbstractView *view() const;
 
 private:
-    QString m_propertyName;
+    PropertyName m_propertyName;
     Internal::InternalNodePointer m_internalNode;
     QWeakPointer<Model> m_model;
     QWeakPointer<AbstractView> m_view;
diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h
index f03b725454818cfdb45b4ff28f3e5b1709cd55e3..fc82e8e36d3a07d713b6f045aab5b727e9f447cb 100644
--- a/src/plugins/qmldesigner/designercore/include/abstractview.h
+++ b/src/plugins/qmldesigner/designercore/include/abstractview.h
@@ -81,7 +81,7 @@ public:
 
     RewriterTransaction beginRewriterTransaction();
 
-    ModelNode createModelNode(const QString &typeString,
+    ModelNode createModelNode(const TypeName &typeName,
                          int majorVersion,
                          int minorVersion,
                          const PropertyListType &propertyList = PropertyListType(),
@@ -111,7 +111,7 @@ public:
     void emitCustomNotification(const QString &identifier, const QList<ModelNode> &nodeList);
     void emitCustomNotification(const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data);
 
-    void emitInstancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
+    void emitInstancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList);
     void emitInstancesCompleted(const QVector<ModelNode> &nodeList);
     void emitInstanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
     void emitInstancesRenderImageChanged(const QVector<ModelNode> &nodeList);
@@ -138,7 +138,7 @@ public:
     virtual void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange) = 0;
     virtual void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion) = 0;
 
-    virtual void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList) = 0;
+    virtual void instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList) = 0;
     virtual void instancesCompleted(const QVector<ModelNode> &completedNodeList) = 0;
     virtual void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash) = 0;
     virtual void instancesRenderImageChanged(const QVector<ModelNode> &nodeList) = 0;
@@ -170,7 +170,7 @@ public:
 
     QmlModelView *toQmlModelView();
 
-    void changeRootNodeType(const QString &type, int majorVersion, int minorVersion);
+    void changeRootNodeType(const TypeName &type, int majorVersion, int minorVersion);
 
     NodeInstanceView *nodeInstanceView() const;
     RewriterView *rewriterView() const;
diff --git a/src/plugins/qmldesigner/designercore/include/bindingproperty.h b/src/plugins/qmldesigner/designercore/include/bindingproperty.h
index 6e59eab3ca9ecf6b253374f72a8b73af667b3b21..b6c8e6dbcd8ee50e89d1c6091a3d64a4d0d45831 100644
--- a/src/plugins/qmldesigner/designercore/include/bindingproperty.h
+++ b/src/plugins/qmldesigner/designercore/include/bindingproperty.h
@@ -49,8 +49,7 @@ public:
     BindingProperty();
     BindingProperty(const BindingProperty &property, AbstractView *view);
 
-    void setDynamicTypeNameAndExpression(const QString &type, const QString &expression);
-    BindingProperty& operator= (const QPair<QString, QString> &typeExpressionPair);
+    void setDynamicTypeNameAndExpression(const TypeName &type, const QString &expression);
 
     ModelNode resolveToModelNode() const;
     AbstractProperty resolveToProperty() const;
@@ -58,7 +57,7 @@ public:
     QList<ModelNode> resolveToModelNodeList() const;
 
 protected:
-    BindingProperty(const QString &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view);
+    BindingProperty(const PropertyName &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view);
 };
 
 } // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h b/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h
index 49fdaee31da707e9b708beb9714c648d123f1b26..5c692b0ade480c9dbc5e864437e8d92e0ee5ec6b 100644
--- a/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h
+++ b/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h
@@ -62,7 +62,7 @@ public:
     ~ItemLibraryEntry();
 
     QString name() const;
-    QString typeName() const;
+    TypeName typeName() const;
     QIcon icon() const;
     QString iconPath() const;
     int majorVersion() const;
@@ -80,11 +80,11 @@ public:
 
     QList<Property> properties() const;
 
-    void setType(const QString &typeName, int majorVersion, int minorVersion);
+    void setType(const TypeName &typeName, int majorVersion, int minorVersion);
     void setName(const QString &name);
     void setIconPath(const QString &iconPath);
     void addProperty(const Property &p);
-    void addProperty(QString &name, QString &type, QVariant &value);
+    void addProperty(PropertyName &name, QString &type, QVariant &value);
     void setDragIcon(const QIcon &icon);
     void setIcon(const QIcon &icon);
     void setCategory(const QString &category);
diff --git a/src/plugins/qmldesigner/designercore/include/metainforeader.h b/src/plugins/qmldesigner/designercore/include/metainforeader.h
index 5f165c98fdfbda12fd42772fc094436a2bdd5f62..e75f6cfbd99d074221c0dc8832e098011b9d977f 100644
--- a/src/plugins/qmldesigner/designercore/include/metainforeader.h
+++ b/src/plugins/qmldesigner/designercore/include/metainforeader.h
@@ -58,7 +58,7 @@ public:
 
     QStringList errors();
 
-    void setQualifcation(const QString &qualification);
+    void setQualifcation(const TypeName &qualification);
 
 protected:
     virtual void elementStart(const QString &name);
@@ -106,18 +106,18 @@ private:
     ParserSate m_parserState;
     MetaInfo m_metaInfo;
 
-    QString m_currentClassName;
+    TypeName m_currentClassName;
     QString m_currentIcon;
     QString m_currentSource;
     ItemLibraryEntry m_currentEntry;
 
-    QString m_currentPropertyName;
+    PropertyName m_currentPropertyName;
     QString m_currentPropertyType;
     QVariant m_currentPropertyValue;
 
     bool m_overwriteDuplicates;
 
-    QString m_qualication;
+    TypeName m_qualication;
 };
 
 }
diff --git a/src/plugins/qmldesigner/designercore/include/model.h b/src/plugins/qmldesigner/designercore/include/model.h
index ce91e46c965746cfc6ec5501efa9e778383a87f1..84fb9982fd9e3c72ca0ff53f7538343e445ebba7 100644
--- a/src/plugins/qmldesigner/designercore/include/model.h
+++ b/src/plugins/qmldesigner/designercore/include/model.h
@@ -60,7 +60,7 @@ class AbstractProperty;
 class RewriterView;
 class NodeInstanceView;
 
-typedef QList<QPair<QString, QVariant> > PropertyListType;
+typedef QList<QPair<PropertyName, QVariant> > PropertyListType;
 
 class QMLDESIGNERCORE_EXPORT Model : public QObject
 {
@@ -79,15 +79,15 @@ public:
 
     virtual ~Model();
 
-    static Model *create(QString type, int major = 1, int minor = 1, Model *metaInfoPropxyModel = 0);
+    static Model *create(TypeName type, int major = 1, int minor = 1, Model *metaInfoPropxyModel = 0);
 
     QUrl fileUrl() const;
     void setFileUrl(const QUrl &url);
 
     const MetaInfo metaInfo() const;
     MetaInfo metaInfo();
-    NodeMetaInfo metaInfo(const QString &typeName, int majorVersion = -1, int minorVersion = -1);
-    bool hasNodeMetaInfo(const QString &typeName, int majorVersion = -1, int minorVersion = -1);
+    NodeMetaInfo metaInfo(const TypeName &typeName, int majorVersion = -1, int minorVersion = -1);
+    bool hasNodeMetaInfo(const TypeName &typeName, int majorVersion = -1, int minorVersion = -1);
 
     void attachView(AbstractView *view);
     void detachView(AbstractView *view, ViewNotification emitDetachNotify = NotifyView);
diff --git a/src/plugins/qmldesigner/designercore/include/modelnode.h b/src/plugins/qmldesigner/designercore/include/modelnode.h
index ad1927ba62e1009ed005602daf750428e8b5083f..a2a3ff645e0cde5da5f6c14671b8c828c70c0d87 100644
--- a/src/plugins/qmldesigner/designercore/include/modelnode.h
+++ b/src/plugins/qmldesigner/designercore/include/modelnode.h
@@ -65,7 +65,7 @@ class ModelNode;
 
 QMLDESIGNERCORE_EXPORT QList<Internal::InternalNodePointer> toInternalNodeList(const QList<ModelNode> &nodeList);
 
-typedef QList<QPair<QString, QVariant> > PropertyListType;
+typedef QList<QPair<PropertyName, QVariant> > PropertyListType;
 
 class QMLDESIGNERCORE_EXPORT  ModelNode
 {
@@ -96,8 +96,8 @@ public:
     ~ModelNode();
 
     ModelNode& operator=(const ModelNode &other);
-    QString type() const;
-    QString simplifiedTypeName() const;
+    TypeName type() const;
+    TypeName simplifiedTypeName() const;
     int minorVersion() const;
     int majorVersion() const;
     int majorQtQuickVersion() const;
@@ -108,7 +108,7 @@ public:
 
     NodeAbstractProperty parentProperty() const;
     void setParentProperty(NodeAbstractProperty parent);
-    void setParentProperty(const ModelNode &newParentNode, const QString &propertyName);
+    void setParentProperty(const ModelNode &newParentNode, const PropertyName &propertyName);
     bool hasParentProperty() const;
 
     const QList<ModelNode> allDirectSubModelNodes() const;
@@ -117,29 +117,29 @@ public:
 
     //###
 
-    AbstractProperty property(const QString &name) const;
-    VariantProperty variantProperty(const QString &name) const;
-    BindingProperty bindingProperty(const QString &name) const;
-    NodeListProperty nodeListProperty(const QString &name) const;
-    NodeProperty nodeProperty(const QString &name) const;
-    NodeAbstractProperty nodeAbstractProperty(const QString &name) const;
+    AbstractProperty property(const PropertyName &name) const;
+    VariantProperty variantProperty(const PropertyName &name) const;
+    BindingProperty bindingProperty(const PropertyName &name) const;
+    NodeListProperty nodeListProperty(const PropertyName &name) const;
+    NodeProperty nodeProperty(const PropertyName &name) const;
+    NodeAbstractProperty nodeAbstractProperty(const PropertyName &name) const;
 
-    void removeProperty(const QString &name); //### also implement in AbstractProperty
+    void removeProperty(const PropertyName &name); //### also implement in AbstractProperty
     QList<AbstractProperty> properties() const;
     QList<VariantProperty> variantProperties() const;
     QList<NodeAbstractProperty> nodeAbstractProperties() const;
     QList<NodeProperty> nodeProperties() const;
     QList<NodeListProperty> nodeListProperties() const;
     QList<BindingProperty> bindingProperties() const;
-    QStringList propertyNames() const;
+    PropertyNameList propertyNames() const;
 
     bool hasProperties() const;
-    bool hasProperty(const QString &name) const;
-    bool hasVariantProperty(const QString &name) const;
-    bool hasBindingProperty(const QString &name) const;
-    bool hasNodeAbstracProperty(const QString &name) const;
-    bool hasNodeProperty(const QString &name) const;
-    bool hasNodeListProperty(const QString &name) const;
+    bool hasProperty(const PropertyName &name) const;
+    bool hasVariantProperty(const PropertyName &name) const;
+    bool hasBindingProperty(const PropertyName &name) const;
+    bool hasNodeAbstracProperty(const PropertyName &name) const;
+    bool hasNodeProperty(const PropertyName &name) const;
+    bool hasNodeListProperty(const PropertyName &name) const;
 
 
     void setScriptFunctions(const QStringList &scriptFunctionList);
@@ -168,10 +168,10 @@ public:
     static int variantUserType();
     QVariant toVariant() const;
 
-    QVariant auxiliaryData(const QString &name) const;
-    void setAuxiliaryData(const QString &name, const QVariant &data) const;
-    bool hasAuxiliaryData(const QString &name) const;
-    QHash<QString, QVariant> auxiliaryData() const;
+    QVariant auxiliaryData(const PropertyName &name) const;
+    void setAuxiliaryData(const PropertyName &name, const QVariant &data) const;
+    bool hasAuxiliaryData(const PropertyName &name) const;
+    QHash<PropertyName, QVariant> auxiliaryData() const;
 
     qint32 internalId() const;
 
diff --git a/src/plugins/qmldesigner/designercore/include/nodeabstractproperty.h b/src/plugins/qmldesigner/designercore/include/nodeabstractproperty.h
index 02c5f432bf3784efeb62c8dcc4a688fdca3d2f6d..4d67a2e2aff198309af04d261a00e8674d4bb2a3 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeabstractproperty.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeabstractproperty.h
@@ -60,7 +60,7 @@ public:
     QList<ModelNode> allSubNodes();
 
 protected:
-    NodeAbstractProperty(const QString &propertyName, const Internal::InternalNodePointer &internalNode, Model *model, AbstractView *view);
+    NodeAbstractProperty(const PropertyName &propertyName, const Internal::InternalNodePointer &internalNode, Model *model, AbstractView *view);
     NodeAbstractProperty(const Internal::InternalNodeAbstractPropertyPointer &property, Model *model, AbstractView *view);
     void reparentHere(const ModelNode &modelNode, bool isNodeList);
 };
diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstance.h b/src/plugins/qmldesigner/designercore/include/nodeinstance.h
index 1560bdf323201a0a07cbc80982b7022f80809e57..5c5eafd9d5bbfa7d07e5e4dc19b6480af479c521 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeinstance.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeinstance.h
@@ -37,6 +37,7 @@
 #include <QPair>
 
 #include "commondefines.h"
+#include "nodeinstanceglobal.h"
 
 namespace QmlDesigner {
 
@@ -71,11 +72,11 @@ public:
     int penWidth() const;
     void paint(QPainter *painter);
 
-    QVariant property(const QString &name) const;
-    bool hasBindingForProperty(const QString &name) const;
-    QPair<QString, qint32> anchor(const QString &name) const;
-    bool hasAnchor(const QString &name) const;
-    QString instanceType(const QString &name) const;
+    QVariant property(const PropertyName &name) const;
+    bool hasBindingForProperty(const PropertyName &name) const;
+    QPair<PropertyName, qint32> anchor(const PropertyName &name) const;
+    bool hasAnchor(const PropertyName &name) const;
+    TypeName instanceType(const PropertyName &name) const;
 
     qint32 parentId() const;
     qint32 instanceId() const;
@@ -83,7 +84,7 @@ public:
     QPixmap renderPixmap() const;
 
 protected:
-    void setProperty(const QString &name, const QVariant &value);
+    void setProperty(const PropertyName &name, const QVariant &value);
     InformationName setInformation(InformationName name,
                         const QVariant &information,
                         const QVariant &secondInformation,
@@ -101,10 +102,10 @@ protected:
     InformationName setInformationIsAnchoredByChildren(bool isAnchoredByChildren);
     InformationName setInformationIsAnchoredBySibling(bool isAnchoredBySibling);
     InformationName setInformationHasContent(bool hasContent);
-    InformationName setInformationHasAnchor(const QString &sourceAnchorLine, bool hasAnchor);
-    InformationName setInformationAnchor(const QString &sourceAnchorLine, const QString &targetAnchorLine, qint32 targetInstanceId);
-    InformationName setInformationInstanceTypeForProperty(const QString &property, const QString &type);
-    InformationName setInformationHasBindingForProperty(const QString &property, bool hasProperty);
+    InformationName setInformationHasAnchor(const PropertyName &sourceAnchorLine, bool hasAnchor);
+    InformationName setInformationAnchor(const PropertyName &sourceAnchorLine, const PropertyName &targetAnchorLine, qint32 targetInstanceId);
+    InformationName setInformationInstanceTypeForProperty(const PropertyName &property, const TypeName &type);
+    InformationName setInformationHasBindingForProperty(const PropertyName &property, bool hasProperty);
 
     void setParentId(qint32 instanceId);
     void setRenderPixmap(const QImage &image);
diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
index 798bbd60007fc86b88d07b66efd3109fb8fdee06..0b9e725f78836c148d5a4bdc7b089795f2878763 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
@@ -99,7 +99,7 @@ public:
     void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex);
     void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList);
     void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList);
-    void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
+    void instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList);
     void instancesCompleted(const QVector<ModelNode> &completedNodeList);
     void importsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports);
     void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
@@ -107,7 +107,7 @@ public:
     void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
     void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
     void instancesToken(const QString &tokenName, int tokenNumber, const QVector<ModelNode> &nodeVector);
-    void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data);
+    void auxiliaryDataChanged(const ModelNode &node, const PropertyName &name, const QVariant &data);
     void customNotification(const AbstractView *view, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data);
     void nodeSourceChanged(const ModelNode &modelNode, const QString &newNodeSource);
 
diff --git a/src/plugins/qmldesigner/designercore/include/nodelistproperty.h b/src/plugins/qmldesigner/designercore/include/nodelistproperty.h
index 5a9efc1a085370c6ef15353fd1b11e8a0da60d31..b410484e9c34179cc5e819ad64010abc5340fed9 100644
--- a/src/plugins/qmldesigner/designercore/include/nodelistproperty.h
+++ b/src/plugins/qmldesigner/designercore/include/nodelistproperty.h
@@ -62,7 +62,7 @@ public:
     ModelNode at(int index) const;
 
 protected:
-    NodeListProperty(const QString &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view);
+    NodeListProperty(const PropertyName &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view);
     NodeListProperty(const Internal::InternalNodeListPropertyPointer &internalNodeListProperty, Model* model, AbstractView *view);
 };
 }
diff --git a/src/plugins/qmldesigner/designercore/include/nodemetainfo.h b/src/plugins/qmldesigner/designercore/include/nodemetainfo.h
index d03c93fb6e4dac3c76ee7f5ac9b19d10c7ee4a18..54f86ca67da641ce399e446da1c80230903b4d7d 100644
--- a/src/plugins/qmldesigner/designercore/include/nodemetainfo.h
+++ b/src/plugins/qmldesigner/designercore/include/nodemetainfo.h
@@ -60,7 +60,7 @@ class QMLDESIGNERCORE_EXPORT NodeMetaInfo
 {
 public:
     NodeMetaInfo();
-    NodeMetaInfo(Model *model, QString type, int maj, int min);
+    NodeMetaInfo(Model *model, TypeName type, int maj, int min);
 
     ~NodeMetaInfo();
 
@@ -69,23 +69,23 @@ public:
 
     bool isValid() const;
     bool isFileComponent() const;
-    bool hasProperty(const QString &propertyName) const;
-    QStringList propertyNames() const;
-    QStringList directPropertyNames() const;
-    QString defaultPropertyName() const;
+    bool hasProperty(const PropertyName &propertyName) const;
+    PropertyNameList propertyNames() const;
+    PropertyNameList directPropertyNames() const;
+    PropertyName defaultPropertyName() const;
     bool hasDefaultProperty() const;
-    QString propertyTypeName(const QString &propertyName) const;
-    bool propertyIsWritable(const QString &propertyName) const;
-    bool propertyIsListProperty(const QString &propertyName) const;
-    bool propertyIsEnumType(const QString &propertyName) const;
-    QString propertyEnumScope(const QString &propertyName) const;
-    QStringList propertyKeysForEnum(const QString &propertyName) const;
-    QVariant propertyCastedValue(const QString &propertyName, const QVariant &value) const;
+    TypeName propertyTypeName(const PropertyName &propertyName) const;
+    bool propertyIsWritable(const PropertyName &propertyName) const;
+    bool propertyIsListProperty(const PropertyName &propertyName) const;
+    bool propertyIsEnumType(const PropertyName &propertyName) const;
+    QString propertyEnumScope(const PropertyName &propertyName) const;
+    QStringList propertyKeysForEnum(const PropertyName &propertyName) const;
+    QVariant propertyCastedValue(const PropertyName &propertyName, const QVariant &value) const;
 
     QList<NodeMetaInfo> superClasses() const;
     NodeMetaInfo directSuperClass() const;
 
-    QString typeName() const;
+    TypeName typeName() const;
     int majorVersion() const;
     int minorVersion() const;
 
@@ -95,7 +95,7 @@ public:
     bool hasCustomParser() const;
 
     bool availableInVersion(int majorVersion, int minorVersion) const;
-    bool isSubclassOf(const QString& type, int majorVersion, int minorVersio) const;
+    bool isSubclassOf(const TypeName &type, int majorVersion, int minorVersio) const;
 
     bool isPositioner() const;
 
diff --git a/src/plugins/qmldesigner/designercore/include/nodeproperty.h b/src/plugins/qmldesigner/designercore/include/nodeproperty.h
index 6c4d6089a964354eeda61a61301f18bcf0a81ad0..191594b5af11a11f553cf224a2286ce15d50a7e6 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeproperty.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeproperty.h
@@ -54,7 +54,7 @@ public:
 
     NodeProperty();
 protected:
-    NodeProperty(const QString &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view);
+    NodeProperty(const PropertyName &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view);
 };
 
 } // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/include/propertycontainer.h b/src/plugins/qmldesigner/designercore/include/propertycontainer.h
index 67f9aec6f6186fc87f66b3e1e01de59a5e3b6d01..7d6452ef347120770051479cb0df18c5cf1a9492 100644
--- a/src/plugins/qmldesigner/designercore/include/propertycontainer.h
+++ b/src/plugins/qmldesigner/designercore/include/propertycontainer.h
@@ -53,21 +53,21 @@ class QMLDESIGNERCORE_EXPORT PropertyContainer
 
 public:
     PropertyContainer();
-    PropertyContainer(const QString &name, const QString &type, const QVariant &value);
+    PropertyContainer(const PropertyName &name, const QString &type, const QVariant &value);
 
     bool isValid() const;
 
-    QString name() const;
+    PropertyName name() const;
     QVariant value() const;
     QString type() const;
 
 
     void setValue(const QVariant &value);
-    void set(const QString &name, const QString &type, const QVariant &value);
+    void set(const PropertyName &name, const QString &type, const QVariant &value);
 
 
 private:
-    QString m_name;
+    PropertyName m_name;
     QString m_type;
     mutable QVariant m_value;
 };
diff --git a/src/plugins/qmldesigner/designercore/include/qmlchangeset.h b/src/plugins/qmldesigner/designercore/include/qmlchangeset.h
index 11042559b2ad31ac2959961bd4ccaf38920cb00e..9ba55974f9487f68fc7aa5665f831ee83c549264 100644
--- a/src/plugins/qmldesigner/designercore/include/qmlchangeset.h
+++ b/src/plugins/qmldesigner/designercore/include/qmlchangeset.h
@@ -53,7 +53,7 @@ public:
     QmlPropertyChanges() : QmlModelStateOperation() {}
     QmlPropertyChanges(const ModelNode &modelNode) : QmlModelStateOperation(modelNode) {}
     bool isValid() const;
-    void removeProperty(const QString &name);
+    void removeProperty(const PropertyName &name);
 };
 
 } //QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/include/qmldesignercorelib_global.h b/src/plugins/qmldesigner/designercore/include/qmldesignercorelib_global.h
index 449691b05469ad79c3901527a251414ac3b98381..091c85903aaaca24975841c28600063a829525be 100644
--- a/src/plugins/qmldesigner/designercore/include/qmldesignercorelib_global.h
+++ b/src/plugins/qmldesigner/designercore/include/qmldesignercorelib_global.h
@@ -30,6 +30,9 @@
 #ifndef CORELIB_GLOBAL_H
 #define CORELIB_GLOBAL_H
 
+#include <QtGlobal>
+#include <QList>
+
 // Unnecessary since core isn't a dll any more.
 
 #define TEST_CORESHARED_EXPORT
@@ -39,7 +42,12 @@
 #else
 #  define QMLDESIGNERCORE_EXPORT Q_DECL_IMPORT
 #endif
-
+namespace QmlDesigner {
+typedef QByteArray PropertyName;
+typedef QList<PropertyName> PropertyNameList;
+typedef QByteArray TypeName;
+typedef QByteArray IdName;
+}
 //#if defined(TEST_EXPORTS)
 //#if defined(CORE_LIBRARY)
 //#  define TEST_CORESHARED_EXPORT Q_DECL_EXPORT
diff --git a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h
index 56a5783d9476fa4c8c4b83eae51481c2e4cef581..0411ba77c4bcc4ad98bed4e9453087f08694b7c2 100644
--- a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h
+++ b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h
@@ -90,7 +90,7 @@ public:
     void deselectNode();
     bool isSelected() const;
 
-    QString simplifiedTypeName() const;
+    TypeName simplifiedTypeName() const;
 
     const QList<QmlItemNode> allDirectSubModelNodes() const;
     const QList<QmlItemNode> allSubModelNodes() const;
diff --git a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h
index dc0e47e4dfc7b92d0b033b6a95386d8784e20795..07077bdd0147cde35d607d861be38dde6beecd27 100644
--- a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h
+++ b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h
@@ -57,12 +57,12 @@ public:
     QmlModelState baseState() const;
     QmlModelStateGroup rootStateGroup() const;
 
-    QmlObjectNode createQmlObjectNode(const QString &typeString,
+    QmlObjectNode createQmlObjectNode(const TypeName &typeString,
                                       int majorVersion,
                                       int minorVersion,
                                       const PropertyListType &propertyList = PropertyListType());
 
-    QmlItemNode createQmlItemNode(const QString &typeString,
+    QmlItemNode createQmlItemNode(const TypeName &typeString,
                                     int majorVersion,
                                     int minorVersion,
                                     const PropertyListType &propertyList = PropertyListType());
@@ -89,9 +89,7 @@ public:
     void modelAttached(Model *model);
     void modelAboutToBeDetached(Model *model);
 
-    virtual void nodeInstancePropertyChanged(const ModelNode &node, const QString &propertyName);
-
-    void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
+    void instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList);
     void instancesCompleted(const QVector<ModelNode> &completedNodeList);
     void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
     void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
@@ -125,9 +123,6 @@ public:
 protected:
     NodeInstance instanceForModelNode(const ModelNode &modelNode);
     bool hasInstanceForModelNode(const ModelNode &modelNode);
-    virtual void transformChanged(const QmlObjectNode &qmlObjectNode, const QString &propertyName) ;
-    virtual void parentChanged(const QmlObjectNode &qmlObjectNode);
-    virtual void otherPropertyChanged(const QmlObjectNode &qmlObjectNode, const QString &propertyName);
 
     void activateState(const QmlModelState &state);
 
diff --git a/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h b/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h
index c0a6545f36e0e48a44333be825a4f26984b7f45b..694e91eb0381d2731ac705a2497b889529973647 100644
--- a/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h
+++ b/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h
@@ -58,21 +58,21 @@ public:
     QString validId();
 
     QmlModelState currentState() const;
-    void setVariantProperty(const QString &name, const QVariant &value);
-    void setBindingProperty(const QString &name, const QString &expression);
-    NodeAbstractProperty nodeAbstractProperty(const QString &name) const;
-    NodeProperty nodeProperty(const QString &name) const;
-    NodeListProperty nodeListProperty(const QString &name) const;
-
-    QVariant instanceValue(const QString &name) const;
-    QString instanceType(const QString &name) const;
-
-    bool hasProperty(const QString &name) const;
-    bool hasBindingProperty(const QString &name) const;
-    bool instanceHasBinding(const QString &name) const;
-    bool propertyAffectedByCurrentState(const QString &name) const;
-    QVariant modelValue(const QString &name) const;
-    QString expression(const QString &name) const;
+    void setVariantProperty(const PropertyName &name, const QVariant &value);
+    void setBindingProperty(const PropertyName &name, const QString &expression);
+    NodeAbstractProperty nodeAbstractProperty(const PropertyName &name) const;
+    NodeProperty nodeProperty(const PropertyName &name) const;
+    NodeListProperty nodeListProperty(const PropertyName &name) const;
+
+    QVariant instanceValue(const PropertyName &name) const;
+    TypeName instanceType(const PropertyName &name) const;
+
+    bool hasProperty(const PropertyName &name) const;
+    bool hasBindingProperty(const PropertyName &name) const;
+    bool instanceHasBinding(const PropertyName &name) const;
+    bool propertyAffectedByCurrentState(const PropertyName &name) const;
+    QVariant modelValue(const PropertyName &name) const;
+    QString expression(const PropertyName &name) const;
     bool isInBaseState() const;
     QmlPropertyChanges propertyChangeForCurrentState() const;
 
@@ -85,7 +85,7 @@ public:
     QList<QmlModelState> allAffectingStates() const;
     QList<QmlModelStateOperation> allAffectingStatesOperations() const;
 
-    void removeVariantProperty(const QString &name);
+    void removeVariantProperty(const PropertyName &name);
 
     void setParent(QmlObjectNode newParent);
 
@@ -94,9 +94,9 @@ public:
     bool isAncestorOf(const QmlObjectNode &objectNode) const;
 
     bool hasDefaultProperty() const;
-    QString defaultProperty() const;
+    PropertyName defaultProperty() const;
 
-    static  QVariant instanceValue(const ModelNode &modelNode, const QString &name);
+    static  QVariant instanceValue(const ModelNode &modelNode, const PropertyName &name);
 
 protected:
     NodeInstance nodeInstance() const;
diff --git a/src/plugins/qmldesigner/designercore/include/rewriterview.h b/src/plugins/qmldesigner/designercore/include/rewriterview.h
index 805763fc27edf8b4e7ffcd005c3e6bb66545af63..664ea6f3c158bfcff44bad35c45c96af29f818b5 100644
--- a/src/plugins/qmldesigner/designercore/include/rewriterview.h
+++ b/src/plugins/qmldesigner/designercore/include/rewriterview.h
@@ -136,7 +136,7 @@ public:
     void customNotification(const AbstractView *view, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data);
     void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList);
 
-    void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
+    void instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList);
     void instancesCompleted(const QVector<ModelNode> &completedNodeList);
     void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
     void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
diff --git a/src/plugins/qmldesigner/designercore/include/subcomponentmanager.h b/src/plugins/qmldesigner/designercore/include/subcomponentmanager.h
index 55bf886ca30077551de1d1321ef8b6729e79e5cf..42832ddb90d1093a9b7960ff38b9d330274f8ab9 100644
--- a/src/plugins/qmldesigner/designercore/include/subcomponentmanager.h
+++ b/src/plugins/qmldesigner/designercore/include/subcomponentmanager.h
@@ -57,7 +57,7 @@ public:
     QStringList directories() const;
 
 private slots:
-    void parseDirectory(const QString &canonicalDirPath,  bool addToLibrary = true, const QString& qualification = QString());
+    void parseDirectory(const QString &canonicalDirPath,  bool addToLibrary = true, const TypeName &qualification = TypeName());
     void parseFile(const QString &canonicalFilePath,  bool addToLibrary, const QString&);
     void parseFile(const QString &canonicalFilePath);
 
diff --git a/src/plugins/qmldesigner/designercore/include/variantproperty.h b/src/plugins/qmldesigner/designercore/include/variantproperty.h
index 54bc3df1c0f80de6c2d5e225be253690149af490..72d115c4edf69a88da6e397c9bf49217da8403e9 100644
--- a/src/plugins/qmldesigner/designercore/include/variantproperty.h
+++ b/src/plugins/qmldesigner/designercore/include/variantproperty.h
@@ -56,13 +56,12 @@ public:
     QVariant value() const;
     VariantProperty& operator= (const QVariant &value);
 
-    void setDynamicTypeNameAndValue(const QString &type, const QVariant &value);
-    Q_DECL_DEPRECATED VariantProperty& operator= (const QPair<QString, QVariant> &typeValuePair);
+    void setDynamicTypeNameAndValue(const TypeName &type, const QVariant &value);
 
     VariantProperty();
     VariantProperty(const VariantProperty &property, AbstractView *view);
 protected:
-    VariantProperty(const QString &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view);
+    VariantProperty(const PropertyName &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view);
 };
 
 QMLDESIGNERCORE_EXPORT QTextStream& operator<<(QTextStream &stream, const VariantProperty &property);
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
index 7381ed2e42cd20c3bbacfda50f781c4ca8c046be..2216b1f6fa20247e24639d1f966ba0631ad592bf 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
@@ -67,13 +67,13 @@ public:
     bool isInPositioner;
 
 
-    QHash<QString, QVariant> propertyValues;
-    QHash<QString, bool> hasBindingForProperty;
-    QHash<QString, bool> hasAnchors;
-    QHash<QString, QString> instanceTypes;
+    QHash<PropertyName, QVariant> propertyValues;
+    QHash<PropertyName, bool> hasBindingForProperty;
+    QHash<PropertyName, bool> hasAnchors;
+    QHash<PropertyName, TypeName> instanceTypes;
 
     QPixmap renderPixmap;
-    QHash<QString, QPair<QString, qint32> > anchors;
+    QHash<PropertyName, QPair<PropertyName, qint32> > anchors;
 };
 
 NodeInstance::NodeInstance()
@@ -236,7 +236,7 @@ void NodeInstance::paint(QPainter *painter)
         painter->drawPixmap(boundingRect().topLeft(), d->renderPixmap);
 }
 
-QVariant NodeInstance::property(const QString &name) const
+QVariant NodeInstance::property(const PropertyName &name) const
 {
     if (isValid())
         return d->propertyValues.value(name);
@@ -244,7 +244,7 @@ QVariant NodeInstance::property(const QString &name) const
     return QVariant();
 }
 
-bool NodeInstance::hasBindingForProperty(const QString &name) const
+bool NodeInstance::hasBindingForProperty(const PropertyName &name) const
 {
     if (isValid())
         return d->hasBindingForProperty.value(name, false);
@@ -252,12 +252,12 @@ bool NodeInstance::hasBindingForProperty(const QString &name) const
     return false;
 }
 
-QString NodeInstance::instanceType(const QString &name) const
+TypeName NodeInstance::instanceType(const PropertyName &name) const
 {
     if (isValid())
         return d->instanceTypes.value(name);
 
-    return QString();
+    return TypeName();
 }
 
 qint32 NodeInstance::parentId() const
@@ -268,7 +268,7 @@ qint32 NodeInstance::parentId() const
         return false;
 }
 
-bool NodeInstance::hasAnchor(const QString &name) const
+bool NodeInstance::hasAnchor(const PropertyName &name) const
 {
     if (isValid())
         return d->hasAnchors.value(name, false);
@@ -276,15 +276,15 @@ bool NodeInstance::hasAnchor(const QString &name) const
     return false;
 }
 
-QPair<QString, qint32> NodeInstance::anchor(const QString &name) const
+QPair<PropertyName, qint32> NodeInstance::anchor(const PropertyName &name) const
 {
     if (isValid())
-        return d->anchors.value(name, QPair<QString, qint32>(QString(), qint32(-1)));
+        return d->anchors.value(name, QPair<PropertyName, qint32>(PropertyName(), qint32(-1)));
 
-    return QPair<QString, qint32>(QString(), -1);
+    return QPair<PropertyName, qint32>(PropertyName(), -1);
 }
 
-void NodeInstance::setProperty(const QString &name, const QVariant &value)
+void NodeInstance::setProperty(const PropertyName &name, const QVariant &value)
 {
     d->propertyValues.insert(name, value);
 }
@@ -425,7 +425,7 @@ InformationName NodeInstance::setInformationHasContent(bool hasContent)
     return NoInformationChange;
 }
 
-InformationName NodeInstance::setInformationHasAnchor(const QString &sourceAnchorLine, bool hasAnchor)
+InformationName NodeInstance::setInformationHasAnchor(const PropertyName &sourceAnchorLine, bool hasAnchor)
 {
     if (d->hasAnchors.value(sourceAnchorLine) != hasAnchor) {
         d->hasAnchors.insert(sourceAnchorLine, hasAnchor);
@@ -435,9 +435,9 @@ InformationName NodeInstance::setInformationHasAnchor(const QString &sourceAncho
     return NoInformationChange;
 }
 
-InformationName NodeInstance::setInformationAnchor(const QString &sourceAnchorLine, const QString &targetAnchorLine, qint32 targetInstanceId)
+InformationName NodeInstance::setInformationAnchor(const PropertyName &sourceAnchorLine, const PropertyName &targetAnchorLine, qint32 targetInstanceId)
 {
-    QPair<QString, qint32>  anchorPair = QPair<QString, qint32>(targetAnchorLine, targetInstanceId);
+    QPair<PropertyName, qint32>  anchorPair = QPair<PropertyName, qint32>(targetAnchorLine, targetInstanceId);
     if (d->anchors.value(sourceAnchorLine) != anchorPair) {
         d->anchors.insert(sourceAnchorLine, anchorPair);
         return Anchor;
@@ -446,7 +446,7 @@ InformationName NodeInstance::setInformationAnchor(const QString &sourceAnchorLi
     return NoInformationChange;
 }
 
-InformationName NodeInstance::setInformationInstanceTypeForProperty(const QString &property, const QString &type)
+InformationName NodeInstance::setInformationInstanceTypeForProperty(const PropertyName &property, const TypeName &type)
 {
     if (d->instanceTypes.value(property) != type) {
         d->instanceTypes.insert(property, type);
@@ -456,7 +456,7 @@ InformationName NodeInstance::setInformationInstanceTypeForProperty(const QStrin
     return NoInformationChange;
 }
 
-InformationName NodeInstance::setInformationHasBindingForProperty(const QString &property, bool hasProperty)
+InformationName NodeInstance::setInformationHasBindingForProperty(const PropertyName &property, bool hasProperty)
 {
     if (d->hasBindingForProperty.value(property) != hasProperty) {
         d->hasBindingForProperty.insert(property, hasProperty);
@@ -481,10 +481,10 @@ InformationName NodeInstance::setInformation(InformationName name, const QVarian
     case IsAnchoredByChildren: return setInformationIsAnchoredByChildren(information.toBool()); break;
     case IsAnchoredBySibling: return setInformationIsAnchoredBySibling(information.toBool()); break;
     case HasContent: return setInformationHasContent(information.toBool()); break;
-    case HasAnchor: return setInformationHasAnchor(information.toString(), secondInformation.toBool());break;
-    case Anchor: return setInformationAnchor(information.toString(), secondInformation.toString(), thirdInformation.value<qint32>()); break;
-    case InstanceTypeForProperty: return setInformationInstanceTypeForProperty(information.toString(), secondInformation.toString()); break;
-    case HasBindingForProperty: return setInformationHasBindingForProperty(information.toString(), secondInformation.toBool()); break;
+    case HasAnchor: return setInformationHasAnchor(information.toByteArray(), secondInformation.toBool());break;
+    case Anchor: return setInformationAnchor(information.toByteArray(), secondInformation.toByteArray(), thirdInformation.value<qint32>()); break;
+    case InstanceTypeForProperty: return setInformationInstanceTypeForProperty(information.toByteArray(), secondInformation.toByteArray()); break;
+    case HasBindingForProperty: return setInformationHasBindingForProperty(information.toByteArray(), secondInformation.toBool()); break;
     case NoName:
     default: break;
     }
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
index b8b4908ba4862fb15143c1ab8ad9e32105ad9bde..301e1759c9215ead5017ac9de190fecdab989115 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
@@ -431,7 +431,7 @@ void NodeInstanceView::nodeOrderChanged(const NodeListProperty & listProperty,
                                         const ModelNode & /*movedNode*/, int /*oldIndex*/)
 {
     QVector<ReparentContainer> containerList;
-    QString propertyName = listProperty.name();
+    PropertyName propertyName = listProperty.name();
     qint32 containerInstanceId = -1;
     ModelNode containerNode = listProperty.parentModelNode();
     if (hasInstanceForNode(containerNode))
@@ -468,7 +468,7 @@ void NodeInstanceView::scriptFunctionsChanged(const ModelNode &/*node*/, const Q
 
 }
 
-void NodeInstanceView::instancePropertyChange(const QList<QPair<ModelNode, QString> > &/*propertyList*/)
+void NodeInstanceView::instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &/*propertyList*/)
 {
 
 }
@@ -507,23 +507,23 @@ void NodeInstanceView::instancesToken(const QString &/*tokenName*/, int /*tokenN
 
 }
 
-void NodeInstanceView::auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data)
+void NodeInstanceView::auxiliaryDataChanged(const ModelNode &node, const PropertyName &name, const QVariant &data)
 {
-    if ((node.isRootNode() && (name == "width" || name == "height")) || name.endsWith(QLatin1String("@NodeInstance"))) {
+    if ((node.isRootNode() && (name == "width" || name == "height")) || name.endsWith(PropertyName("@NodeInstance"))) {
         if (hasInstanceForNode(node)) {
             NodeInstance instance = instanceForNode(node);
             QVariant value = data;
             if (value.isValid()) {
-                PropertyValueContainer container(instance.instanceId(), name, value, QString());
+                PropertyValueContainer container(instance.instanceId(), name, value, TypeName());
                 ChangeAuxiliaryCommand changeAuxiliaryCommand(QVector<PropertyValueContainer>() << container);
                 nodeInstanceServer()->changeAuxiliaryValues(changeAuxiliaryCommand);
             } else {
                 if (node.hasVariantProperty(name)) {
-                    PropertyValueContainer container(instance.instanceId(), name, node.variantProperty(name).value(), QString());
+                    PropertyValueContainer container(instance.instanceId(), name, node.variantProperty(name).value(), TypeName());
                     ChangeValuesCommand changeValueCommand(QVector<PropertyValueContainer>() << container);
                     nodeInstanceServer()->changePropertyValues(changeValueCommand);
                 } else if (node.hasBindingProperty(name)) {
-                    PropertyBindingContainer container(instance.instanceId(), name, node.bindingProperty(name).expression(), QString());
+                    PropertyBindingContainer container(instance.instanceId(), name, node.bindingProperty(name).expression(), TypeName());
                     ChangeBindingsCommand changeValueCommand(QVector<PropertyBindingContainer>() << container);
                     nodeInstanceServer()->changePropertyBindings(changeValueCommand);
                 }
@@ -778,10 +778,10 @@ CreateSceneCommand NodeInstanceView::createCreateSceneCommand()
         bindingPropertyList.append(node.bindingProperties());
         if (node.isValid() && hasInstanceForNode(node)) {
             NodeInstance instance = instanceForNode(node);
-            QHashIterator<QString, QVariant> auxiliaryIterator(node.auxiliaryData());
+            QHashIterator<PropertyName, QVariant> auxiliaryIterator(node.auxiliaryData());
             while (auxiliaryIterator.hasNext()) {
                 auxiliaryIterator.next();
-                PropertyValueContainer container(instance.instanceId(), auxiliaryIterator.key(), auxiliaryIterator.value(), QString());
+                PropertyValueContainer container(instance.instanceId(), auxiliaryIterator.key(), auxiliaryIterator.value(), TypeName());
                 auxiliaryContainerVector.append(container);
             }
         }
@@ -813,7 +813,7 @@ CreateSceneCommand NodeInstanceView::createCreateSceneCommand()
     foreach (const NodeInstance &instance, instanceList) {
         if (instance.modelNode().hasParentProperty()) {
             NodeAbstractProperty parentProperty = instance.modelNode().parentProperty();
-            ReparentContainer container(instance.instanceId(), -1, QString(), instanceForNode(parentProperty.parentModelNode()).instanceId(), parentProperty.name());
+            ReparentContainer container(instance.instanceId(), -1, PropertyName(), instanceForNode(parentProperty.parentModelNode()).instanceId(), parentProperty.name());
             reparentContainerList.append(container);
         }
     }
@@ -912,7 +912,7 @@ ReparentInstancesCommand NodeInstanceView::createReparentInstancesCommand(const
     foreach (const NodeInstance &instance, instanceList) {
         if (instance.modelNode().hasParentProperty()) {
             NodeAbstractProperty parentProperty = instance.modelNode().parentProperty();
-            ReparentContainer container(instance.instanceId(), -1, QString(), instanceForNode(parentProperty.parentModelNode()).instanceId(), parentProperty.name());
+            ReparentContainer container(instance.instanceId(), -1, PropertyName(), instanceForNode(parentProperty.parentModelNode()).instanceId(), parentProperty.name());
             containerList.append(container);
         }
     }
@@ -1059,7 +1059,7 @@ void NodeInstanceView::valuesChanged(const ValuesChangedCommand &command)
     if (!model())
         return;
 
-    QList<QPair<ModelNode, QString> > valuePropertyChangeList;
+    QList<QPair<ModelNode, PropertyName> > valuePropertyChangeList;
 
     foreach (const PropertyValueContainer &container, command.valueChanges()) {
         if (hasInstanceForId(container.instanceId())) {
diff --git a/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp
index 0063a1377da350422322d3499638f71d7a163e0b..e137f6f3d653bf8465ab28756f9e76a83d6ea5cb 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp
@@ -42,7 +42,7 @@ public:
     ItemLibraryEntryData() : majorVersion(-1), minorVersion(-1)
     { }
     QString name;
-    QString typeName;
+    TypeName typeName;
     QString category;
     int majorVersion;
     int minorVersion;
@@ -113,7 +113,7 @@ QString ItemLibraryEntry::name() const
     return m_data->name;
 }
 
-QString ItemLibraryEntry::typeName() const
+TypeName ItemLibraryEntry::typeName() const
 {
     return m_data->typeName;
 }
@@ -168,7 +168,7 @@ void ItemLibraryEntry::setName(const QString &name)
      m_data->name = name;
 }
 
-void ItemLibraryEntry::setType(const QString &typeName, int majorVersion, int minorVersion)
+void ItemLibraryEntry::setType(const TypeName &typeName, int majorVersion, int minorVersion)
 {
     m_data->typeName = typeName;
     m_data->majorVersion = majorVersion;
@@ -195,7 +195,7 @@ void ItemLibraryEntry::setForceImport(bool b)
     m_data->forceImport = b;
 }
 
-void ItemLibraryEntry::addProperty(QString &name, QString &type, QVariant &value)
+void ItemLibraryEntry::addProperty(PropertyName &name, QString &type, QVariant &value)
 {
     Property property;
     property.set(name, type, value);
diff --git a/src/plugins/qmldesigner/designercore/metainfo/metainforeader.cpp b/src/plugins/qmldesigner/designercore/metainfo/metainforeader.cpp
index 1885723dfee965c846144338a42cbc4ba781bbd9..77fc504bb2192c05dcc870812b4d48374793d139 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/metainforeader.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/metainforeader.cpp
@@ -83,7 +83,7 @@ QStringList MetaInfoReader::errors()
     return QmlJS::SimpleAbstractStreamReader::errors();
 }
 
-void MetaInfoReader::setQualifcation(const QString &qualification)
+void MetaInfoReader::setQualifcation(const TypeName &qualification)
 {
     m_qualication = qualification;
 }
@@ -142,7 +142,7 @@ void MetaInfoReader::propertyDefinition(const QString &name, const QVariant &val
 MetaInfoReader::ParserSate MetaInfoReader::readDocument(const QString &name)
 {
     if (name == QLatin1String(rootElementName)) {
-        m_currentClassName = QString();
+        m_currentClassName.clear();
         m_currentIcon = QString();
         return ParsingMetaInfo;
     } else {
@@ -154,7 +154,7 @@ MetaInfoReader::ParserSate MetaInfoReader::readDocument(const QString &name)
 MetaInfoReader::ParserSate MetaInfoReader::readMetaInfoRootElement(const QString &name)
 {
     if (name == QLatin1String(typeElementName)) {
-        m_currentClassName = QString();
+        m_currentClassName .clear();
         m_currentIcon = QString();
         return ParsingType;
     } else {
@@ -182,7 +182,7 @@ MetaInfoReader::ParserSate MetaInfoReader::readItemLibraryEntryElement(const QSt
     if (name == QmlSourceElementName) {
         return ParsingQmlSource;
     } else if (name == PropertyElementName) {
-        m_currentPropertyName = QString();
+        m_currentPropertyName = PropertyName();
         m_currentPropertyType = QString();
         m_currentPropertyValue = QVariant();
         return ParsingProperty;
@@ -207,9 +207,9 @@ MetaInfoReader::ParserSate MetaInfoReader::readQmlSourceElement(const QString &n
 void MetaInfoReader::readTypeProperty(const QString &name, const QVariant &value)
 {
     if (name == QLatin1String("name")) {
-        m_currentClassName = value.toString();
+        m_currentClassName = value.toString().toUtf8();
         if (!m_qualication.isEmpty()) //prepend qualification
-            m_currentClassName = m_qualication + QLatin1String(".") + m_currentClassName;
+            m_currentClassName = m_qualication + "." + m_currentClassName;
     } else if (name == QLatin1String("icon")) {
         m_currentIcon = absoluteFilePathForDocument(value.toString());
     } else {
@@ -241,7 +241,7 @@ void MetaInfoReader::readItemLibraryEntryProperty(const QString &name, const QVa
 void MetaInfoReader::readPropertyProperty(const QString &name, const QVariant &value)
 {
     if (name == QLatin1String("name")) {
-       m_currentPropertyName = value.toString();
+       m_currentPropertyName = value.toByteArray();
     } else if (name == QLatin1String("type")) {
         m_currentPropertyType = value.toString();
     } else if (name == QLatin1String("value")) {
@@ -264,7 +264,7 @@ void MetaInfoReader::readQmlSourceProperty(const QString &name, const QVariant &
 
 void MetaInfoReader::setVersion(const QString &versionNumber)
 {
-    const QString typeName = m_currentEntry.typeName();
+    const TypeName typeName = m_currentEntry.typeName();
     int major = 1;
     int minor = 0;
 
diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
index 4069d3677b05067f45a1babc3a3aec4f06093ec6..9d6a23e21d3c3580b07e167d8df34e3ff56d75b4 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
@@ -55,7 +55,7 @@ namespace Internal {
 
 struct TypeDescription
 {
-    QString className;
+    TypeName className;
     int minorVersion;
     int majorVersion;
 };
@@ -83,18 +83,18 @@ namespace Internal {
 
 using namespace QmlJS;
 
-typedef QPair<QString, QString> PropertyInfo;
+typedef QPair<PropertyName, TypeName> PropertyInfo;
 
 QList<PropertyInfo> getObjectTypes(const ObjectValue *ov, const ContextPtr &context, bool local = false);
 
-static QString resolveTypeName(const ASTPropertyReference *ref, const ContextPtr &context,  QList<PropertyInfo> &dotProperties)
+static TypeName resolveTypeName(const ASTPropertyReference *ref, const ContextPtr &context,  QList<PropertyInfo> &dotProperties)
 {
-    QString type = QLatin1String("unknown");
+    TypeName type = "unknown";
 
     if (!ref->ast()->memberType.isEmpty()) {
-        type = ref->ast()->memberType.toString();
+        type = ref->ast()->memberType.toUtf8();
 
-        if (type == QLatin1String("alias")) {
+        if (type == "alias") {
             const Value *value = context->lookupReference(ref);
 
             if (!value)
@@ -102,22 +102,22 @@ static QString resolveTypeName(const ASTPropertyReference *ref, const ContextPtr
 
             if (const ASTObjectValue * astObjectValue = value->asAstObjectValue()) {
                 if (astObjectValue->typeName())
-                    type = astObjectValue->typeName()->name.toString();
+                    type = astObjectValue->typeName()->name.toUtf8();
             } else if (const ObjectValue * objectValue = value->asObjectValue()) {
-                type = objectValue->className();
+                type = objectValue->className().toUtf8();
                 dotProperties = getObjectTypes(objectValue, context);
             } else if (value->asColorValue()) {
-                type = QLatin1String("color");
+                type = "color";
             } else if (value->asUrlValue()) {
-                type = QLatin1String("url");
+                type = "url";
             } else if (value->asStringValue()) {
-                type = QLatin1String("string");
+                type = "string";
             } else if (value->asRealValue()) {
-                type = QLatin1String("real");
+                type = "real";
             } else if (value->asIntValue()) {
-                type = QLatin1String("int");
+                type = "int";
             } else if (value->asBooleanValue()) {
-                type = QLatin1String("boolean");
+                type = "boolean";
             }
         }
     }
@@ -130,35 +130,36 @@ class PropertyMemberProcessor : public MemberProcessor
 public:
     PropertyMemberProcessor(const ContextPtr &context) : m_context(context)
     {}
-    virtual bool processProperty(const QString &name, const Value *value)
+    bool processProperty(const QString &name, const Value *value)
     {
+        PropertyName propertyName = name.toUtf8();
         const ASTPropertyReference *ref = value_cast<ASTPropertyReference>(value);
         if (ref) {
             QList<PropertyInfo> dotProperties;
-            const QString type = resolveTypeName(ref, m_context, dotProperties);
-            m_properties.append(qMakePair(name, type));
+            const TypeName type = resolveTypeName(ref, m_context, dotProperties);
+            m_properties.append(qMakePair(propertyName, type));
             if (!dotProperties.isEmpty()) {
                 foreach (const PropertyInfo &propertyInfo, dotProperties) {
-                    QString dotName = propertyInfo.first;
-                    QString type = propertyInfo.second;
-                    dotName = name + '.' + dotName;
+                    PropertyName dotName = propertyInfo.first;
+                    TypeName type = propertyInfo.second;
+                    dotName = propertyName + '.' + dotName;
                     m_properties.append(qMakePair(dotName, type));
                 }
             }
         } else {
-            if (const CppComponentValue * ov = value_cast<CppComponentValue>(value)) {
-                QString qualifiedTypeName = ov->moduleName().isEmpty() ? ov->className() : ov->moduleName() + '.' + ov->className();
-                m_properties.append(qMakePair(name, qualifiedTypeName));
+            if (const CppComponentValue * cppComponentValue = value_cast<CppComponentValue>(value)) {
+                TypeName qualifiedTypeName = cppComponentValue->moduleName().isEmpty() ? cppComponentValue->className().toUtf8() : cppComponentValue->moduleName().toUtf8() + '.' + cppComponentValue->className().toUtf8();
+                m_properties.append(qMakePair(propertyName, qualifiedTypeName));
             } else {
                 TypeId typeId;
-                QString typeName = typeId(value);
-                if (typeName == QLatin1String("number")) {
+                TypeName typeName = typeId(value).toUtf8();
+                if (typeName == "number") {
                     if (value->asRealValue())
                         typeName = "real";
                     else
                         typeName = "int";
                 }
-                m_properties.append(qMakePair(name, typeName));
+                m_properties.append(qMakePair(propertyName, typeName));
             }
         }
         return true;
@@ -217,108 +218,110 @@ QStringList prototypes(const ObjectValue *ov, const ContextPtr &context, bool ve
     return list;
 }
 
-QList<PropertyInfo> getQmlTypes(const CppComponentValue *ov, const ContextPtr &context, bool local = false)
+QList<PropertyInfo> getQmlTypes(const CppComponentValue *objectValue, const ContextPtr &context, bool local = false)
 {
-    QList<PropertyInfo> list;
-    if (!ov)
-        return list;
-    if (ov->className().isEmpty())
-        return list;
+    QList<PropertyInfo> propertyList;
+
+    if (!objectValue)
+        return propertyList;
+    if (objectValue->className().isEmpty())
+        return propertyList;
 
     PropertyMemberProcessor processor(context);
-    ov->processMembers(&processor);
+    objectValue->processMembers(&processor);
 
     QList<PropertyInfo> newList = processor.properties();
 
     foreach (PropertyInfo property, newList) {
-        QString name = property.first;
-        if (!ov->isWritable(name) && ov->isPointer(name)) {
+        PropertyName name = property.first;
+        if (!objectValue->isWritable(name) && objectValue->isPointer(name)) {
             //dot property
-            const CppComponentValue * qmlValue = value_cast<CppComponentValue>(ov->lookupMember(name, context));
+            const CppComponentValue * qmlValue = value_cast<CppComponentValue>(objectValue->lookupMember(name, context));
             if (qmlValue) {
                 QList<PropertyInfo> dotProperties = getQmlTypes(qmlValue, context);
                 foreach (const PropertyInfo &propertyInfo, dotProperties) {
-                    QString dotName = propertyInfo.first;
-                    QString type = propertyInfo.second;
+                    PropertyName dotName = propertyInfo.first;
+                    TypeName type = propertyInfo.second;
                     dotName = name + '.' + dotName;
-                    list.append(qMakePair(dotName, type));
+                    propertyList.append(qMakePair(dotName, type));
                 }
             }
         }
-        if (isValueType(ov->propertyType(name))) {
-            const ObjectValue *dotObjectValue = value_cast<ObjectValue>(ov->lookupMember(name, context));
+        if (isValueType(objectValue->propertyType(name))) {
+            const ObjectValue *dotObjectValue = value_cast<ObjectValue>(objectValue->lookupMember(name, context));
             if (dotObjectValue) {
                 QList<PropertyInfo> dotProperties = getObjectTypes(dotObjectValue, context);
                 foreach (const PropertyInfo &propertyInfo, dotProperties) {
-                    QString dotName = propertyInfo.first;
-                    QString type = propertyInfo.second;
+                    PropertyName dotName = propertyInfo.first;
+                    TypeName type = propertyInfo.second;
                     dotName = name + '.' + dotName;
-                    list.append(qMakePair(dotName, type));
+                    propertyList.append(qMakePair(dotName, type));
                 }
             }
         }
-        QString type = property.second;
-        if (!ov->isPointer(name) && !ov->isListProperty(name))
-            type = ov->propertyType(name);
-        list.append(qMakePair(name, type));
+        TypeName type = property.second;
+        if (!objectValue->isPointer(name) && !objectValue->isListProperty(name))
+            type = objectValue->propertyType(name).toUtf8();
+        propertyList.append(qMakePair(name, type));
     }
 
     if (!local) {
-        const ObjectValue* prototype = ov->prototype(context);
+        const ObjectValue* prototype = objectValue->prototype(context);
 
         const CppComponentValue * qmlObjectValue = value_cast<CppComponentValue>(prototype);
 
         if (qmlObjectValue)
-            list << getQmlTypes(qmlObjectValue, context);
+            propertyList.append(getQmlTypes(qmlObjectValue, context));
         else
-            list << getObjectTypes(prototype, context);
+            propertyList.append(getObjectTypes(prototype, context));
     }
 
-    return list;
+    return propertyList;
 }
 
-QList<PropertyInfo> getTypes(const ObjectValue *ov, const ContextPtr &context, bool local = false)
+QList<PropertyInfo> getTypes(const ObjectValue *objectValue, const ContextPtr &context, bool local = false)
 {
-    QList<PropertyInfo> list;
+    QList<PropertyInfo> propertyList;
 
-    const CppComponentValue * qmlObjectValue = value_cast<CppComponentValue>(ov);
+    const CppComponentValue * qmlObjectValue = value_cast<CppComponentValue>(objectValue);
 
     if (qmlObjectValue)
-        list << getQmlTypes(qmlObjectValue, context, local);
+        propertyList.append(getQmlTypes(qmlObjectValue, context, local));
     else
-        list << getObjectTypes(ov, context, local);
+        propertyList.append(getObjectTypes(objectValue, context, local));
 
-    return list;
+    return propertyList;
 }
 
-QList<PropertyInfo> getObjectTypes(const ObjectValue *ov, const ContextPtr &context, bool local)
+QList<PropertyInfo> getObjectTypes(const ObjectValue *objectValue, const ContextPtr &context, bool local)
 {
-    QList<PropertyInfo> list;
-    if (!ov)
-        return list;
-    if (ov->className().isEmpty())
-        return list;
+    QList<PropertyInfo> propertyList;
+
+    if (!objectValue)
+        return propertyList;
+    if (objectValue->className().isEmpty())
+        return propertyList;
 
     PropertyMemberProcessor processor(context);
-    ov->processMembers(&processor);
+    objectValue->processMembers(&processor);
 
-    list << processor.properties();
+    propertyList.append(processor.properties());
 
     if (!local) {
-        const ObjectValue* prototype = ov->prototype(context);
+        const ObjectValue* prototype = objectValue->prototype(context);
 
-        if (prototype == ov)
-            return list;
+        if (prototype == objectValue)
+            return propertyList;
 
         const CppComponentValue * qmlObjectValue = value_cast<CppComponentValue>(prototype);
 
         if (qmlObjectValue)
-            list << getQmlTypes(qmlObjectValue, context);
+            propertyList.append(getQmlTypes(qmlObjectValue, context));
         else
-            list << getObjectTypes(prototype, context);
+            propertyList.append(getObjectTypes(prototype, context));
     }
 
-    return list;
+    return propertyList;
 }
 
 class NodeMetaInfoPrivate
@@ -330,26 +333,26 @@ public:
 
     bool isValid() const;
     bool isFileComponent() const;
-    QStringList properties() const;
-    QStringList localProperties() const;
-    QString defaultPropertyName() const;
-    QString propertyType(const QString &propertyName) const;
+    PropertyNameList properties() const;
+    PropertyNameList localProperties() const;
+    PropertyName defaultPropertyName() const;
+    TypeName propertyType(const PropertyName &propertyName) const;
 
     void setupPrototypes();
     QList<TypeDescription> prototypes() const;
 
-    bool isPropertyWritable(const QString &propertyName) const;
-    bool isPropertyPointer(const QString &propertyName) const;
-    bool isPropertyList(const QString &propertyName) const;
-    bool isPropertyEnum(const QString &propertyName) const;
-    QString propertyEnumScope(const QString &propertyName) const;
+    bool isPropertyWritable(const PropertyName &propertyName) const;
+    bool isPropertyPointer(const PropertyName &propertyName) const;
+    bool isPropertyList(const PropertyName &propertyName) const;
+    bool isPropertyEnum(const PropertyName &propertyName) const;
+    QString propertyEnumScope(const PropertyName &propertyName) const;
     QStringList keysForEnum(const QString &enumName) const;
     bool cleverCheckType(const QString &otherType) const;
-    QVariant::Type variantTypeId(const QString &properyName) const;
+    QVariant::Type variantTypeId(const PropertyName &properyName) const;
 
     int majorVersion() const;
     int minorVersion() const;
-    QString qualfiedTypeName() const;
+    TypeName qualfiedTypeName() const;
     Model *model() const;
 
     QString cppPackageName() const;
@@ -358,7 +361,7 @@ public:
     QString componentFileName() const;
     QString importDirectoryPath() const;
 
-    static Pointer create(Model *model, const QString &type, int maj = -1, int min = -1);
+    static Pointer create(Model *model, const TypeName &type, int maj = -1, int min = -1);
 
     QSet<QString> &prototypeCachePositives();
     QSet<QString> &prototypeCacheNegatives();
@@ -367,7 +370,7 @@ public:
 
 
 private:
-    NodeMetaInfoPrivate(Model *model, QString type, int maj = -1, int min = -1);
+    NodeMetaInfoPrivate(Model *model, TypeName type, int maj = -1, int min = -1);
 
     const QmlJS::CppComponentValue *getCppComponentValue() const;
     const QmlJS::ObjectValue *getObjectValue() const;
@@ -378,15 +381,15 @@ private:
     const QmlJS::CppComponentValue *getNearestCppComponentValue() const;
     QString fullQualifiedImportAliasType() const;
 
-    QString m_qualfiedTypeName;
+    TypeName m_qualfiedTypeName;
     int m_majorVersion;
     int m_minorVersion;
     bool m_isValid;
     bool m_isFileComponent;
-    QStringList m_properties;
-    QStringList m_propertyTypes;
-    QStringList m_localProperties;
-    QString m_defaultPropertyName;
+    PropertyNameList m_properties;
+    QList<TypeName> m_propertyTypes;
+    PropertyNameList m_localProperties;
+    PropertyName m_defaultPropertyName;
     QList<TypeDescription> m_prototypes;
     QSet<QString> m_prototypeCachePositives;
     QSet<QString> m_prototypeCacheNegatives;
@@ -406,12 +409,12 @@ bool NodeMetaInfoPrivate::isFileComponent() const
     return m_isFileComponent;
 }
 
-QStringList NodeMetaInfoPrivate::properties() const
+PropertyNameList NodeMetaInfoPrivate::properties() const
 {
     return m_properties;
 }
 
-QStringList NodeMetaInfoPrivate::localProperties() const
+PropertyNameList NodeMetaInfoPrivate::localProperties() const
 {
     return m_localProperties;
 }
@@ -431,11 +434,11 @@ void NodeMetaInfoPrivate::clearCache()
     m_nodeMetaInfoCache.clear();
 }
 
-QString NodeMetaInfoPrivate::defaultPropertyName() const
+PropertyName NodeMetaInfoPrivate::defaultPropertyName() const
 {
     if (!m_defaultPropertyName.isEmpty())
         return m_defaultPropertyName;
-    return QLatin1String("data");
+    return PropertyName("data");
 }
 
 static inline QString stringIdentifier( const QString &type, int maj, int min)
@@ -443,19 +446,19 @@ static inline QString stringIdentifier( const QString &type, int maj, int min)
     return type + QString::number(maj) + '_' + QString::number(min);
 }
 
-NodeMetaInfoPrivate::Pointer NodeMetaInfoPrivate::create(Model *model, const QString &type, int maj, int min)
+NodeMetaInfoPrivate::Pointer NodeMetaInfoPrivate::create(Model *model, const TypeName &type, int major, int minor)
 {
-    if (m_nodeMetaInfoCache.contains(stringIdentifier(type, maj, min))) {
-        const Pointer &info = m_nodeMetaInfoCache.value(stringIdentifier(type, maj, min));
+    if (m_nodeMetaInfoCache.contains(stringIdentifier(type, major, minor))) {
+        const Pointer &info = m_nodeMetaInfoCache.value(stringIdentifier(type, major, minor));
         if (info->model() == model)
             return info;
         else
             m_nodeMetaInfoCache.clear();
     }
 
-    Pointer newData(new NodeMetaInfoPrivate(model, type, maj, min));
+    Pointer newData(new NodeMetaInfoPrivate(model, type, major, minor));
     if (newData->isValid())
-        m_nodeMetaInfoCache.insert(stringIdentifier(type, maj, min), newData);
+        m_nodeMetaInfoCache.insert(stringIdentifier(type, major, minor), newData);
     return newData;
 }
 
@@ -464,13 +467,14 @@ NodeMetaInfoPrivate::NodeMetaInfoPrivate() : m_isValid(false)
 
 }
 
-NodeMetaInfoPrivate::NodeMetaInfoPrivate(Model *model, QString type, int maj, int min) :
+NodeMetaInfoPrivate::NodeMetaInfoPrivate(Model *model, TypeName type, int maj, int min) :
                                         m_qualfiedTypeName(type), m_majorVersion(maj),
                                         m_minorVersion(min), m_isValid(false), m_isFileComponent(false),
                                         m_model(model)
 {
     if (context()) {
         const CppComponentValue *objectValue = getCppComponentValue();
+
         if (objectValue) {
             if (m_majorVersion == -1 && m_minorVersion == -1) {
                 m_majorVersion = objectValue->componentVersion().majorVersion();
@@ -478,7 +482,7 @@ NodeMetaInfoPrivate::NodeMetaInfoPrivate(Model *model, QString type, int maj, in
             }
             setupPropertyInfo(getTypes(objectValue, context()));
             setupLocalPropertyInfo(getTypes(objectValue, context(), true));
-            m_defaultPropertyName = objectValue->defaultPropertyName();
+            m_defaultPropertyName = objectValue->defaultPropertyName().toUtf8();
             m_isValid = true;
             setupPrototypes();
         } else {
@@ -489,9 +493,9 @@ NodeMetaInfoPrivate::NodeMetaInfoPrivate(Model *model, QString type, int maj, in
                     if (m_majorVersion == -1 && m_minorVersion == -1) {
                         m_majorVersion = qmlValue->componentVersion().majorVersion();
                         m_minorVersion = qmlValue->componentVersion().minorVersion();
-                        m_qualfiedTypeName = qmlValue->moduleName() + '.' + qmlValue->className();
+                        m_qualfiedTypeName = qmlValue->moduleName().toUtf8() + '.' + qmlValue->className().toUtf8();
                     } else if (m_majorVersion == qmlValue->componentVersion().majorVersion() && m_minorVersion == qmlValue->componentVersion().minorVersion()) {
-                        m_qualfiedTypeName = qmlValue->moduleName() + '.' + qmlValue->className();
+                        m_qualfiedTypeName = qmlValue->moduleName().toUtf8() + '.' + qmlValue->className().toUtf8();
                     } else {
                         return;
                     }
@@ -506,7 +510,7 @@ NodeMetaInfoPrivate::NodeMetaInfoPrivate(Model *model, QString type, int maj, in
                 }
                 setupPropertyInfo(getTypes(objectValue, context()));
                 setupLocalPropertyInfo(getTypes(objectValue, context(), true));
-                m_defaultPropertyName = context()->defaultPropertyName(objectValue);
+                m_defaultPropertyName = context()->defaultPropertyName(objectValue).toUtf8();
                 m_isValid = true;
                 setupPrototypes();
             }
@@ -516,28 +520,28 @@ NodeMetaInfoPrivate::NodeMetaInfoPrivate(Model *model, QString type, int maj, in
 
 const QmlJS::CppComponentValue *NodeMetaInfoPrivate::getCppComponentValue() const
 {
-    const QStringList nameComponents = m_qualfiedTypeName.split('.');
+    const QList<TypeName> nameComponents = m_qualfiedTypeName.split('.');
     if (nameComponents.size() < 2)
         return 0;
-    const QString type = nameComponents.last();
+    const TypeName type = nameComponents.last();
 
     // maybe 'type' is a cpp name
     const QmlJS::CppComponentValue *value = context()->valueOwner()->cppQmlTypes().objectByCppName(type);
     if (value)
         return value;
 
-    QString module;
+    TypeName module;
     for (int i = 0; i < nameComponents.size() - 1; ++i) {
         if (i != 0)
-            module += QLatin1Char('/');
+            module += '/';
         module += nameComponents.at(i);
     }
 
     // otherwise get the qml object value that's available in the document
     foreach (const QmlJS::Import &import, context()->imports(document())->all()) {
-        if (import.info.path() != module)
+        if (import.info.path() != QString::fromUtf8(module))
             continue;
-        const Value *lookupResult = import.object->lookupMember(type, context());
+        const Value *lookupResult = import.object->lookupMember(QString::fromUtf8(type), context());
         const CppComponentValue *cppValue = value_cast<CppComponentValue>(lookupResult);
         if (cppValue
                 && (m_majorVersion == -1 || m_majorVersion == cppValue->componentVersion().majorVersion())
@@ -583,21 +587,21 @@ void NodeMetaInfoPrivate::setupPropertyInfo(QList<PropertyInfo> propertyInfos)
     }
 }
 
-bool NodeMetaInfoPrivate::isPropertyWritable(const QString &propertyName) const
+bool NodeMetaInfoPrivate::isPropertyWritable(const PropertyName &propertyName) const
 {
     if (!isValid())
         return false;
 
     if (propertyName.contains('.')) {
-        const QStringList parts = propertyName.split('.');
-        const QString objectName = parts.first();
-        const QString rawPropertyName = parts.last();
+        const PropertyNameList parts = propertyName.split('.');
+        const PropertyName objectName = parts.first();
+        const PropertyName rawPropertyName = parts.last();
         const QString objectType = propertyType(objectName);
 
         if (isValueType(objectType))
             return true;
 
-        QSharedPointer<NodeMetaInfoPrivate> objectInfo(create(m_model, objectType));
+        QSharedPointer<NodeMetaInfoPrivate> objectInfo(create(m_model, objectType.toUtf8()));
         if (objectInfo->isValid())
             return objectInfo->isPropertyWritable(rawPropertyName);
         else
@@ -614,21 +618,21 @@ bool NodeMetaInfoPrivate::isPropertyWritable(const QString &propertyName) const
 }
 
 
-bool NodeMetaInfoPrivate::isPropertyList(const QString &propertyName) const
+bool NodeMetaInfoPrivate::isPropertyList(const PropertyName &propertyName) const
 {
     if (!isValid())
         return false;
 
     if (propertyName.contains('.')) {
-        const QStringList parts = propertyName.split('.');
-        const QString objectName = parts.first();
-        const QString rawPropertyName = parts.last();
+        const PropertyNameList parts = propertyName.split('.');
+        const PropertyName objectName = parts.first();
+        const PropertyName rawPropertyName = parts.last();
         const QString objectType = propertyType(objectName);
 
         if (isValueType(objectType))
             return false;
 
-        QSharedPointer<NodeMetaInfoPrivate> objectInfo(create(m_model, objectType));
+        QSharedPointer<NodeMetaInfoPrivate> objectInfo(create(m_model, objectType.toUtf8()));
         if (objectInfo->isValid())
             return objectInfo->isPropertyList(rawPropertyName);
         else
@@ -641,21 +645,21 @@ bool NodeMetaInfoPrivate::isPropertyList(const QString &propertyName) const
     return qmlObjectValue->isListProperty(propertyName);
 }
 
-bool NodeMetaInfoPrivate::isPropertyPointer(const QString &propertyName) const
+bool NodeMetaInfoPrivate::isPropertyPointer(const PropertyName &propertyName) const
 {
     if (!isValid())
         return false;
 
     if (propertyName.contains('.')) {
-        const QStringList parts = propertyName.split('.');
-        const QString objectName = parts.first();
-        const QString rawPropertyName = parts.last();
+        const PropertyNameList parts = propertyName.split('.');
+        const PropertyName objectName = parts.first();
+        const PropertyName rawPropertyName = parts.last();
         const QString objectType = propertyType(objectName);
 
         if (isValueType(objectType))
             return false;
 
-        QSharedPointer<NodeMetaInfoPrivate> objectInfo(create(m_model, objectType));
+        QSharedPointer<NodeMetaInfoPrivate> objectInfo(create(m_model, objectType.toUtf8()));
         if (objectInfo->isValid())
             return objectInfo->isPropertyPointer(rawPropertyName);
         else
@@ -668,21 +672,21 @@ bool NodeMetaInfoPrivate::isPropertyPointer(const QString &propertyName) const
     return qmlObjectValue->isPointer(propertyName);
 }
 
-bool NodeMetaInfoPrivate::isPropertyEnum(const QString &propertyName) const
+bool NodeMetaInfoPrivate::isPropertyEnum(const PropertyName &propertyName) const
 {
     if (!isValid())
         return false;
 
     if (propertyName.contains('.')) {
-        const QStringList parts = propertyName.split('.');
-        const QString objectName = parts.first();
-        const QString rawPropertyName = parts.last();
+        const PropertyNameList parts = propertyName.split('.');
+        const PropertyName objectName = parts.first();
+        const PropertyName rawPropertyName = parts.last();
         const QString objectType = propertyType(objectName);
 
         if (isValueType(objectType))
             return false;
 
-        QSharedPointer<NodeMetaInfoPrivate> objectInfo(create(m_model, objectType));
+        QSharedPointer<NodeMetaInfoPrivate> objectInfo(create(m_model, objectType.toUtf8()));
         if (objectInfo->isValid())
             return objectInfo->isPropertyEnum(rawPropertyName);
         else
@@ -695,21 +699,21 @@ bool NodeMetaInfoPrivate::isPropertyEnum(const QString &propertyName) const
     return qmlObjectValue->getEnum(propertyType(propertyName)).isValid();
 }
 
-QString NodeMetaInfoPrivate::propertyEnumScope(const QString &propertyName) const
+QString NodeMetaInfoPrivate::propertyEnumScope(const PropertyName &propertyName) const
 {
     if (!isValid())
         return QString();
 
     if (propertyName.contains('.')) {
-        const QStringList parts = propertyName.split('.');
-        const QString objectName = parts.first();
-        const QString rawPropertyName = parts.last();
+        const PropertyNameList parts = propertyName.split('.');
+        const PropertyName objectName = parts.first();
+        const PropertyName rawPropertyName = parts.last();
         const QString objectType = propertyType(objectName);
 
         if (isValueType(objectType))
             return QString();
 
-        QSharedPointer<NodeMetaInfoPrivate> objectInfo(create(m_model, objectType));
+        QSharedPointer<NodeMetaInfoPrivate> objectInfo(create(m_model, objectType.toUtf8()));
         if (objectInfo->isValid())
             return objectInfo->propertyEnumScope(rawPropertyName);
         else
@@ -766,7 +770,7 @@ bool NodeMetaInfoPrivate::cleverCheckType(const QString &otherType) const
     return typeName == convertedName;
 }
 
-QVariant::Type NodeMetaInfoPrivate::variantTypeId(const QString &properyName) const
+QVariant::Type NodeMetaInfoPrivate::variantTypeId(const PropertyName &properyName) const
 {
     QString typeName = propertyType(properyName);
     if (typeName == "string")
@@ -799,7 +803,7 @@ QVariant::Type NodeMetaInfoPrivate::variantTypeId(const QString &properyName) co
     if (typeName == "var")
         return QVariant::UserType;
 
-    return QVariant::nameToType(typeName.toLatin1().data());
+    return QVariant::nameToType(typeName.toUtf8().data());
 }
 
 int NodeMetaInfoPrivate::majorVersion() const
@@ -812,7 +816,7 @@ int NodeMetaInfoPrivate::minorVersion() const
     return m_minorVersion;
 }
 
-QString NodeMetaInfoPrivate::qualfiedTypeName() const
+TypeName NodeMetaInfoPrivate::qualfiedTypeName() const
 {
     return m_qualfiedTypeName;
 }
@@ -895,10 +899,10 @@ QString NodeMetaInfoPrivate::importDirectoryPath() const
 
 QString NodeMetaInfoPrivate::lookupName() const
 {
-    QString className = m_qualfiedTypeName;
+    QString className = QString::fromUtf8(m_qualfiedTypeName);
     QString packageName;
 
-    QStringList packageClassName = m_qualfiedTypeName.split(QLatin1Char('.'));
+    QStringList packageClassName = className.split(QLatin1Char('.'));
     if (packageClassName.size() > 1) {
         className = packageClassName.takeLast();
         packageName = packageClassName.join(QLatin1String("."));
@@ -922,10 +926,10 @@ bool NodeMetaInfoPrivate::isValid() const
     return m_isValid && context() && document();
 }
 
-QString NodeMetaInfoPrivate::propertyType(const QString &propertyName) const
+TypeName NodeMetaInfoPrivate::propertyType(const PropertyName &propertyName) const
 {
     if (!m_properties.contains(propertyName))
-        return QLatin1String("Property does not exist...");
+        return TypeName("Property does not exist...");
     return m_propertyTypes.at(m_properties.indexOf(propertyName));
 }
 
@@ -951,7 +955,7 @@ void NodeMetaInfoPrivate::setupPrototypes()
 
     foreach (const ObjectValue *ov, objects) {
         TypeDescription description;
-        description.className = ov->className();
+        description.className = ov->className().toUtf8();
         description.minorVersion = -1;
         description.majorVersion = -1;
         if (const CppComponentValue * qmlValue = value_cast<CppComponentValue>(ov)) {
@@ -960,11 +964,11 @@ void NodeMetaInfoPrivate::setupPrototypes()
             LanguageUtils::FakeMetaObject::Export qtquickExport = qmlValue->metaObject()->exportInPackage("QtQuick");
             LanguageUtils::FakeMetaObject::Export cppExport = qmlValue->metaObject()->exportInPackage("<cpp>");
             if (qtquickExport.isValid())
-                description.className = qtquickExport.package + '.' + qtquickExport.type;
+                description.className = qtquickExport.package.toUtf8() + '.' + qtquickExport.type.toUtf8();
             else if (qmlValue->moduleName().isEmpty() && cppExport.isValid())
-                description.className = cppExport.package + '.' + cppExport.type;
+                description.className = cppExport.package.toUtf8() + '.' + cppExport.type.toUtf8();
             else if (!qmlValue->moduleName().isEmpty())
-                description.className = qmlValue->moduleName() + '.' + description.className;
+                description.className = qmlValue->moduleName().toUtf8() + '.' + description.className;
             m_prototypes.append(description);
         } else {
             if (context()->lookupType(document(), QStringList() << ov->className()))
@@ -1000,7 +1004,7 @@ NodeMetaInfo::NodeMetaInfo() : m_privateData(new Internal::NodeMetaInfoPrivate()
 
 }
 
-NodeMetaInfo::NodeMetaInfo(Model *model, QString type, int maj, int min) : m_privateData(Internal::NodeMetaInfoPrivate::create(model, type, maj, min))
+NodeMetaInfo::NodeMetaInfo(Model *model, TypeName type, int maj, int min) : m_privateData(Internal::NodeMetaInfoPrivate::create(model, type, maj, min))
 {
 
 }
@@ -1032,22 +1036,22 @@ bool NodeMetaInfo::isFileComponent() const
     return m_privateData->isFileComponent();
 }
 
-bool NodeMetaInfo::hasProperty(const QString &propertyName) const
+bool NodeMetaInfo::hasProperty(const PropertyName &propertyName) const
 {
     return propertyNames().contains(propertyName);
 }
 
-QStringList NodeMetaInfo::propertyNames() const
+PropertyNameList NodeMetaInfo::propertyNames() const
 {
     return m_privateData->properties();
 }
 
-QStringList NodeMetaInfo::directPropertyNames() const
+PropertyNameList NodeMetaInfo::directPropertyNames() const
 {
     return m_privateData->localProperties();
 }
 
-QString NodeMetaInfo::defaultPropertyName() const
+PropertyName NodeMetaInfo::defaultPropertyName() const
 {
     return m_privateData->defaultPropertyName();
 }
@@ -1057,37 +1061,37 @@ bool NodeMetaInfo::hasDefaultProperty() const
     return !defaultPropertyName().isEmpty();
 }
 
-QString NodeMetaInfo::propertyTypeName(const QString &propertyName) const
+TypeName NodeMetaInfo::propertyTypeName(const PropertyName &propertyName) const
 {
     return m_privateData->propertyType(propertyName);
 }
 
-bool NodeMetaInfo::propertyIsWritable(const QString &propertyName) const
+bool NodeMetaInfo::propertyIsWritable(const PropertyName &propertyName) const
 {
     return m_privateData->isPropertyWritable(propertyName);
 }
 
-bool NodeMetaInfo::propertyIsListProperty(const QString &propertyName) const
+bool NodeMetaInfo::propertyIsListProperty(const PropertyName &propertyName) const
 {
     return m_privateData->isPropertyList(propertyName);
 }
 
-bool NodeMetaInfo::propertyIsEnumType(const QString &propertyName) const
+bool NodeMetaInfo::propertyIsEnumType(const PropertyName &propertyName) const
 {
     return m_privateData->isPropertyEnum(propertyName);
 }
 
-QString NodeMetaInfo::propertyEnumScope(const QString &propertyName) const
+QString NodeMetaInfo::propertyEnumScope(const PropertyName &propertyName) const
 {
     return m_privateData->propertyEnumScope(propertyName);
 }
 
-QStringList NodeMetaInfo::propertyKeysForEnum(const QString &propertyName) const
+QStringList NodeMetaInfo::propertyKeysForEnum(const PropertyName &propertyName) const
 {
     return m_privateData->keysForEnum(propertyTypeName(propertyName));
 }
 
-QVariant NodeMetaInfo::propertyCastedValue(const QString &propertyName, const QVariant &value) const
+QVariant NodeMetaInfo::propertyCastedValue(const PropertyName &propertyName, const QVariant &value) const
 {
 
     QVariant variant = value;
@@ -1139,7 +1143,7 @@ NodeMetaInfo NodeMetaInfo::directSuperClass() const
     return NodeMetaInfo();
 }
 
-QString NodeMetaInfo::typeName() const
+TypeName NodeMetaInfo::typeName() const
 {
     return m_privateData->qualfiedTypeName();
 }
@@ -1181,7 +1185,7 @@ bool NodeMetaInfo::availableInVersion(int majorVersion, int minorVersion) const
         || (majorVersion == m_privateData->majorVersion() && m_privateData->minorVersion() >= minorVersion);
 }
 
-bool NodeMetaInfo::isSubclassOf(const QString &type, int majorVersion, int minorVersion) const
+bool NodeMetaInfo::isSubclassOf(const TypeName &type, int majorVersion, int minorVersion) const
 {
     if (!isValid()) {
         qWarning() << "NodeMetaInfo is invalid";
diff --git a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp
index 2d4ca4c4950b089940146f837364721ecdb52818..c82fa8f1df9256a4fbf3900734ea54423e5132b7 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp
@@ -70,7 +70,7 @@ static inline QStringList importPaths() {
     // env import paths
     QByteArray envImportPath = qgetenv("QML_IMPORT_PATH");
     if (!envImportPath.isEmpty()) {
-        paths = QString::fromLatin1(envImportPath)
+        paths = QString::fromUtf8(envImportPath)
                 .split(Utils::HostOsInfo::pathListSeparator(), QString::SkipEmptyParts);
     }
 
@@ -153,7 +153,7 @@ SubComponentManager::SubComponentManager(Model *model, QObject *parent)
 void SubComponentManager::addImport(int pos, const Import &import)
 {
     if (debug)
-        qDebug() << Q_FUNC_INFO << pos << import.file().toLatin1();
+        qDebug() << Q_FUNC_INFO << pos << import.file().toUtf8();
 
     if (import.isFileImport()) {
         QFileInfo dirInfo = QFileInfo(m_filePath.resolved(import.file()).toLocalFile());
@@ -213,7 +213,7 @@ void SubComponentManager::parseDirectories()
             parseDirectory(dirInfo.canonicalFilePath());
 
         foreach (const QString subDir, QDir(QFileInfo(file).path()).entryList(QDir::Dirs | QDir::NoDot | QDir::NoDotDot)) {
-            parseDirectory(dirInfo.canonicalFilePath() + "/" + subDir, true, subDir);
+            parseDirectory(dirInfo.canonicalFilePath() + "/" + subDir, true, subDir.toUtf8());
         }
     }
 
@@ -221,7 +221,7 @@ void SubComponentManager::parseDirectories()
         if (import.isFileImport()) {
             QFileInfo dirInfo = QFileInfo(m_filePath.resolved(import.file()).toLocalFile());
             if (dirInfo.exists() && dirInfo.isDir())
-                parseDirectory(dirInfo.canonicalFilePath(), true, dirInfo.baseName());
+                parseDirectory(dirInfo.canonicalFilePath(), true, dirInfo.baseName().toUtf8());
         } else {
             QString url = import.url();
             foreach (const QString &path, importPaths()) {
@@ -237,7 +237,7 @@ void SubComponentManager::parseDirectories()
     }
 }
 
-void SubComponentManager::parseDirectory(const QString &canonicalDirPath, bool addToLibrary, const QString& qualification)
+void SubComponentManager::parseDirectory(const QString &canonicalDirPath, bool addToLibrary, const TypeName& qualification)
 {
 
     QDir designerDir(canonicalDirPath + Constants::QML_DESIGNER_SUBFOLDER);
@@ -406,7 +406,7 @@ void SubComponentManager::registerQmlFile(const QFileInfo &fileInfo, const QStri
     if (addToLibrary) {
         // Add file components to the library
         ItemLibraryEntry itemLibraryEntry;
-        itemLibraryEntry.setType(componentName, -1, -1);
+        itemLibraryEntry.setType(componentName.toUtf8(), -1, -1);
         itemLibraryEntry.setName(baseComponentName);
         itemLibraryEntry.setCategory("QML Components");
         if (!qualifier.isEmpty()) {
diff --git a/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp b/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
index 785655578c7408c55e67f5608fe5ed7a2ab52552..dd86adcb312167a3e274617398baba6a001fb0fa 100644
--- a/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
@@ -56,7 +56,7 @@ AbstractProperty::AbstractProperty():
 {
 }
 
-AbstractProperty::AbstractProperty(const QString &propertyName, const Internal::InternalNodePointer  &internalNode, Model* model,  AbstractView *view)
+AbstractProperty::AbstractProperty(const PropertyName &propertyName, const Internal::InternalNodePointer  &internalNode, Model* model,  AbstractView *view)
     : m_propertyName(propertyName),
     m_internalNode(internalNode),
     m_model(model),
@@ -126,7 +126,7 @@ AbstractView *AbstractProperty::view() const
 
  The QVariant is null if the property doesn't exists.
 */
-QString AbstractProperty::name() const
+PropertyName AbstractProperty::name() const
 {
     if (m_propertyName == "id") { // the ID for a node is independent of the state, so it has to be set with ModelNode::setId
         Q_ASSERT_X(0, Q_FUNC_INFO, "id is not a property in the model");
@@ -367,7 +367,7 @@ bool AbstractProperty::isDynamic() const
     return !dynamicTypeName().isEmpty();
 }
 
-QString AbstractProperty::dynamicTypeName() const
+TypeName AbstractProperty::dynamicTypeName() const
 {
     if (!isValid())
         throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, m_propertyName);
@@ -375,7 +375,7 @@ QString AbstractProperty::dynamicTypeName() const
     if (internalNode()->hasProperty(name()))
         return internalNode()->property(name())->dynamicTypeName();
 
-    return QString();
+    return TypeName();
 }
 
 /*!
@@ -405,7 +405,7 @@ uint qHash(const AbstractProperty &property)
 
 QDebug operator<<(QDebug debug, const AbstractProperty &property)
 {
-    return debug.nospace() << "AbstractProperty(" << (property.isValid() ? property.name() : QLatin1String("invalid")) << ')';
+    return debug.nospace() << "AbstractProperty(" << (property.isValid() ? property.name() : PropertyName("invalid")) << ')';
 }
 
 QTextStream& operator<<(QTextStream &stream, const AbstractProperty &property)
diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp
index e3061992434fefbdc223dbbbf1b2762769041f54..35fcec9fb75c91eb36f79ddd0f9286a975d01ddd 100644
--- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp
@@ -74,15 +74,15 @@ RewriterTransaction AbstractView::beginRewriterTransaction()
     return RewriterTransaction(this);
 }
 
-ModelNode AbstractView::createModelNode(const QString &typeString,
+ModelNode AbstractView::createModelNode(const TypeName &typeName,
                             int majorVersion,
                             int minorVersion,
-                            const QList<QPair<QString, QVariant> > &propertyList,
-                            const QList<QPair<QString, QVariant> > &auxPropertyList,
+                            const QList<QPair<PropertyName, QVariant> > &propertyList,
+                            const QList<QPair<PropertyName, QVariant> > &auxPropertyList,
                             const QString &nodeSource,
                             ModelNode::NodeSourceType nodeSourceType)
 {
-    return ModelNode(model()->d->createNode(typeString, majorVersion, minorVersion, propertyList, auxPropertyList, nodeSource, nodeSourceType), model(), this);
+    return ModelNode(model()->d->createNode(typeName, majorVersion, minorVersion, propertyList, auxPropertyList, nodeSource, nodeSourceType), model(), this);
 }
 
 
@@ -387,7 +387,7 @@ void AbstractView::emitCustomNotification(const QString &identifier, const QList
     model()->d->notifyCustomNotification(this, identifier, nodeList, data);
 }
 
-void AbstractView::emitInstancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList)
+void AbstractView::emitInstancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList)
 {
     if (model() && nodeInstanceView() == this)
         model()->d->notifyInstancePropertyChange(propertyList);
@@ -454,7 +454,7 @@ void AbstractView::setAcutalStateNode(const ModelNode &node)
         model()->d->notifyActualStateChanged(node);
 }
 
-void AbstractView::changeRootNodeType(const QString &type, int majorVersion, int minorVersion)
+void AbstractView::changeRootNodeType(const TypeName &type, int majorVersion, int minorVersion)
 {
     Internal::WriteLocker locker(m_model.data());
 
diff --git a/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp b/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
index 9acb0bbc2e16cb8b9cec240738f3793442200aea..482a3e45d27073b61a05bdc22e71cd1d7bfc0d5d 100644
--- a/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
@@ -50,7 +50,7 @@ BindingProperty::BindingProperty(const BindingProperty &property, AbstractView *
 }
 
 
-BindingProperty::BindingProperty(const QString &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view)
+BindingProperty::BindingProperty(const PropertyName &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view)
     : AbstractProperty(propertyName, internalNode, model, view)
 {
 }
@@ -110,9 +110,9 @@ static ModelNode resolveBinding(const QString &binding, ModelNode currentNode, A
                 currentNode = currentNode.parentProperty().toNodeAbstractProperty().parentModelNode();
             else
                 return ModelNode(); //binding not valid
-        } else if (currentNode.hasProperty(element)) {
-            if (currentNode.property(element).isNodeProperty()) {
-                currentNode = currentNode.nodeProperty(element).modelNode();
+        } else if (currentNode.hasProperty(element.toUtf8())) {
+            if (currentNode.property(element.toUtf8()).isNodeProperty()) {
+                currentNode = currentNode.nodeProperty(element.toUtf8()).modelNode();
             } else {
                 currentNode = view->modelNodeForId(element); //id
                 if (!currentNode.isValid())
@@ -167,7 +167,7 @@ AbstractProperty BindingProperty::resolveToProperty() const
     }
 
     if (node.isValid())
-        return node.property(element);
+        return node.property(element.toUtf8());
     else
         return AbstractProperty();
 }
@@ -199,7 +199,7 @@ QList<ModelNode> BindingProperty::resolveToModelNodeList() const
     return returnList;
 }
 
-void BindingProperty::setDynamicTypeNameAndExpression(const QString &typeName, const QString &expression)
+void BindingProperty::setDynamicTypeNameAndExpression(const TypeName &typeName, const QString &expression)
 {
     Internal::WriteLocker locker(model());
     if (!isValid())
@@ -230,11 +230,4 @@ void BindingProperty::setDynamicTypeNameAndExpression(const QString &typeName, c
      model()->d->setDynamicBindingProperty(internalNode(), name(), typeName, expression);
 }
 
-BindingProperty& BindingProperty::operator= (const QPair<QString, QString> &typeExpressionPair)
-{
-   setDynamicTypeNameAndExpression(typeExpressionPair.first, typeExpressionPair.second);
-
-   return *this;
-}
-
 } // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/model/internalbindingproperty.cpp b/src/plugins/qmldesigner/designercore/model/internalbindingproperty.cpp
index c08212f351a5e4ecc4ebfa7a5b3d6248f469ca4c..c599a78ff89d0c7e28d63bdc230d754397e21bf6 100644
--- a/src/plugins/qmldesigner/designercore/model/internalbindingproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalbindingproperty.cpp
@@ -32,13 +32,13 @@
 namespace QmlDesigner {
 namespace Internal {
 
-InternalBindingProperty::InternalBindingProperty(const QString &name, const InternalNodePointer &propertyOwner)
+InternalBindingProperty::InternalBindingProperty(const PropertyName &name, const InternalNodePointer &propertyOwner)
     : InternalProperty(name, propertyOwner)
 {
 }
 
 
-InternalBindingProperty::Pointer InternalBindingProperty::create(const QString &name, const InternalNodePointer &propertyOwner)
+InternalBindingProperty::Pointer InternalBindingProperty::create(const PropertyName &name, const InternalNodePointer &propertyOwner)
 {
     InternalBindingProperty *newPointer(new InternalBindingProperty(name, propertyOwner));
     InternalBindingProperty::Pointer smartPointer(newPointer);
@@ -67,7 +67,7 @@ bool InternalBindingProperty::isBindingProperty() const
     return true;
 }
 
-void InternalBindingProperty::setDynamicExpression(const QString &type, const QString &expression)
+void InternalBindingProperty::setDynamicExpression(const TypeName &type, const QString &expression)
 {
     setExpression(expression);
     setDynamicTypeName(type);
diff --git a/src/plugins/qmldesigner/designercore/model/internalbindingproperty.h b/src/plugins/qmldesigner/designercore/model/internalbindingproperty.h
index b834a8b6170ae4552552819ee657a4f54e66e3f3..247fc691bfed27f150d399865ddd1a5061673b37 100644
--- a/src/plugins/qmldesigner/designercore/model/internalbindingproperty.h
+++ b/src/plugins/qmldesigner/designercore/model/internalbindingproperty.h
@@ -40,20 +40,20 @@ class InternalBindingProperty : public InternalProperty
 public:
     typedef QSharedPointer<InternalBindingProperty> Pointer;
 
-    static Pointer create(const QString &name, const InternalNodePointer &propertyOwner);
+    static Pointer create(const PropertyName &name, const InternalNodePointer &propertyOwner);
 
     bool isValid() const;
 
     QString expression() const;
     void setExpression(const QString &expression);
 
-    void setDynamicExpression(const QString &type, const QString &expression);
+    void setDynamicExpression(const TypeName &type, const QString &expression);
 
 
     bool isBindingProperty() const;
 
 protected:
-    InternalBindingProperty(const QString &name, const InternalNodePointer &propertyOwner);
+    InternalBindingProperty(const PropertyName &name, const InternalNodePointer &propertyOwner);
 
 private:
     QString m_expression;
diff --git a/src/plugins/qmldesigner/designercore/model/internalnode.cpp b/src/plugins/qmldesigner/designercore/model/internalnode.cpp
index a981757864dd022354a0e6f37fd6489c736c2881..f73d210d8c4440698851964393c52c0864907172 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalnode.cpp
@@ -55,7 +55,7 @@ InternalNode::InternalNode() :
 {
 }
 
-InternalNode::InternalNode(const QString &typeName,int majorVersion, int minorVersion, qint32 internalId):
+InternalNode::InternalNode(const TypeName &typeName,int majorVersion, int minorVersion, qint32 internalId):
         m_typeName(typeName),
         m_majorVersion(majorVersion),
         m_minorVersion(minorVersion),
@@ -65,7 +65,7 @@ InternalNode::InternalNode(const QString &typeName,int majorVersion, int minorVe
 
 }
 
-InternalNode::Pointer InternalNode::create(const QString &type,int majorVersion, int minorVersion, qint32 internalId)
+InternalNode::Pointer InternalNode::create(const TypeName &type,int majorVersion, int minorVersion, qint32 internalId)
 {
     InternalNode *newPointer(new InternalNode(type, majorVersion, minorVersion, internalId));
     InternalNode::Pointer smartPointer(newPointer);
@@ -84,12 +84,12 @@ void InternalNode::setInternalWeakPointer(const Pointer &pointer)
     m_internalPointer = pointer;
 }
 
-QString InternalNode::type() const
+TypeName InternalNode::type() const
 {
     return m_typeName;
 }
 
-void InternalNode::setType(const QString &newType)
+void InternalNode::setType(const TypeName &newType)
 {
     m_typeName = newType;
 }
@@ -166,32 +166,32 @@ uint qHash(const InternalNodePointer& node)
     return ::qHash(node->internalId());
 }
 
-QVariant InternalNode::auxiliaryData(const QString &name) const
+QVariant InternalNode::auxiliaryData(const PropertyName &name) const
 {
     return m_auxiliaryDataHash.value(name);
 }
 
-void InternalNode::setAuxiliaryData(const QString &name, const QVariant &data)
+void InternalNode::setAuxiliaryData(const PropertyName &name, const QVariant &data)
 {
     m_auxiliaryDataHash.insert(name, data);
 }
 
-bool InternalNode::hasAuxiliaryData(const QString &name) const
+bool InternalNode::hasAuxiliaryData(const PropertyName &name) const
 {
     return m_auxiliaryDataHash.contains(name);
 }
 
-QHash<QString, QVariant> InternalNode::auxiliaryData() const
+QHash<PropertyName, QVariant> InternalNode::auxiliaryData() const
 {
     return m_auxiliaryDataHash;
 }
 
-InternalProperty::Pointer InternalNode::property(const QString &name) const
+InternalProperty::Pointer InternalNode::property(const PropertyName &name) const
 {
     return m_namePropertyHash.value(name);
 }
 
-InternalBindingProperty::Pointer InternalNode::bindingProperty(const QString &name) const
+InternalBindingProperty::Pointer InternalNode::bindingProperty(const PropertyName &name) const
 {
     InternalProperty::Pointer property =  m_namePropertyHash.value(name);
     if (property->isBindingProperty())
@@ -200,7 +200,7 @@ InternalBindingProperty::Pointer InternalNode::bindingProperty(const QString &na
     return InternalBindingProperty::Pointer();
 }
 
-InternalVariantProperty::Pointer InternalNode::variantProperty(const QString &name) const
+InternalVariantProperty::Pointer InternalNode::variantProperty(const PropertyName &name) const
 {
     InternalProperty::Pointer property =  m_namePropertyHash.value(name);
     if (property->isVariantProperty())
@@ -209,13 +209,13 @@ InternalVariantProperty::Pointer InternalNode::variantProperty(const QString &na
     return InternalVariantProperty::Pointer();
 }
 
-void InternalNode::addBindingProperty(const QString &name)
+void InternalNode::addBindingProperty(const PropertyName &name)
 {
     InternalProperty::Pointer newProperty(InternalBindingProperty::create(name, internalPointer()));
     m_namePropertyHash.insert(name, newProperty);
 }
 
-InternalNodeListProperty::Pointer InternalNode::nodeListProperty(const QString &name) const
+InternalNodeListProperty::Pointer InternalNode::nodeListProperty(const PropertyName &name) const
 {
     InternalProperty::Pointer property =  m_namePropertyHash.value(name);
     if (property && property->isNodeListProperty())
@@ -224,7 +224,7 @@ InternalNodeListProperty::Pointer InternalNode::nodeListProperty(const QString &
     return InternalNodeListProperty::Pointer();
 }
 
-InternalNodeAbstractProperty::Pointer InternalNode::nodeAbstractProperty(const QString &name) const
+InternalNodeAbstractProperty::Pointer InternalNode::nodeAbstractProperty(const PropertyName &name) const
 {
     InternalProperty::Pointer property =  m_namePropertyHash.value(name);
     if (property && property->isNodeAbstractProperty())
@@ -233,7 +233,7 @@ InternalNodeAbstractProperty::Pointer InternalNode::nodeAbstractProperty(const Q
     return InternalNodeProperty::Pointer();
 }
 
-InternalNodeProperty::Pointer InternalNode::nodeProperty(const QString &name) const
+InternalNodeProperty::Pointer InternalNode::nodeProperty(const PropertyName &name) const
 {
     InternalProperty::Pointer property =  m_namePropertyHash.value(name);
     if (property->isNodeProperty())
@@ -242,31 +242,31 @@ InternalNodeProperty::Pointer InternalNode::nodeProperty(const QString &name) co
     return InternalNodeProperty::Pointer();
 }
 
-void InternalNode::addVariantProperty(const QString &name)
+void InternalNode::addVariantProperty(const PropertyName &name)
 {
     InternalProperty::Pointer newProperty(InternalVariantProperty::create(name, internalPointer()));
     m_namePropertyHash.insert(name, newProperty);
 }
 
-void InternalNode::addNodeProperty(const QString &name)
+void InternalNode::addNodeProperty(const PropertyName &name)
 {
     InternalProperty::Pointer newProperty(InternalNodeProperty::create(name, internalPointer()));
     m_namePropertyHash.insert(name, newProperty);
 }
 
-void InternalNode::addNodeListProperty(const QString &name)
+void InternalNode::addNodeListProperty(const PropertyName &name)
 {
     InternalProperty::Pointer newProperty(InternalNodeListProperty::create(name, internalPointer()));
     m_namePropertyHash.insert(name, newProperty);
 }
 
-void InternalNode::removeProperty(const QString &name)
+void InternalNode::removeProperty(const PropertyName &name)
 {
     InternalProperty::Pointer property = m_namePropertyHash.take(name);
     Q_ASSERT(!property.isNull());
 }
 
-QList<QString> InternalNode::propertyNameList() const
+PropertyNameList InternalNode::propertyNameList() const
 {
     return m_namePropertyHash.keys();
 }
@@ -276,7 +276,7 @@ bool InternalNode::hasProperties() const
     return !m_namePropertyHash.isEmpty();
 }
 
-bool InternalNode::hasProperty(const QString &name) const
+bool InternalNode::hasProperty(const PropertyName &name) const
 {
     return m_namePropertyHash.contains(name);
 }
diff --git a/src/plugins/qmldesigner/designercore/model/internalnode_p.h b/src/plugins/qmldesigner/designercore/model/internalnode_p.h
index e4a7e7ac4690f2e3325be7f5d3006db4a87e0ddb..b1edde9d94960402bf25a711cc736c9d8b8983a3 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnode_p.h
+++ b/src/plugins/qmldesigner/designercore/model/internalnode_p.h
@@ -64,10 +64,10 @@ public:
 
     explicit InternalNode();
 
-    static Pointer create(const QString &typeName, int majorVersion, int minorVersion, qint32 internalId);
+    static Pointer create(const TypeName &typeName, int majorVersion, int minorVersion, qint32 internalId);
 
-    QString type() const;
-    void setType(const QString &newType);
+    TypeName type() const;
+    void setType(const TypeName &newType);
 
     int minorVersion() const;
     int majorVersion() const;
@@ -86,28 +86,28 @@ public:
     QString id() const;
     void setId(const QString& id);
 
-    QVariant auxiliaryData(const QString &name) const;
-    void setAuxiliaryData(const QString &name, const QVariant &data);
-    bool hasAuxiliaryData(const QString &name) const;
-    QHash<QString, QVariant> auxiliaryData() const;
+    QVariant auxiliaryData(const PropertyName &name) const;
+    void setAuxiliaryData(const PropertyName &name, const QVariant &data);
+    bool hasAuxiliaryData(const PropertyName &name) const;
+    QHash<PropertyName, QVariant> auxiliaryData() const;
 
-    InternalProperty::Pointer property(const QString &name) const;
-    InternalBindingProperty::Pointer bindingProperty(const QString &name) const;
-    InternalVariantProperty::Pointer variantProperty(const QString &name) const;
-    InternalNodeListProperty::Pointer nodeListProperty(const QString &name) const;
-    InternalNodeAbstractProperty::Pointer nodeAbstractProperty(const QString &name) const;
-    InternalNodeProperty::Pointer nodeProperty(const QString &name) const;
+    InternalProperty::Pointer property(const PropertyName &name) const;
+    InternalBindingProperty::Pointer bindingProperty(const PropertyName &name) const;
+    InternalVariantProperty::Pointer variantProperty(const PropertyName &name) const;
+    InternalNodeListProperty::Pointer nodeListProperty(const PropertyName &name) const;
+    InternalNodeAbstractProperty::Pointer nodeAbstractProperty(const PropertyName &name) const;
+    InternalNodeProperty::Pointer nodeProperty(const PropertyName &name) const;
 
-    void addBindingProperty(const QString &name);
-    void addNodeListProperty(const QString &name);
-    void addVariantProperty(const QString &name);
-    void addNodeProperty(const QString &name);
+    void addBindingProperty(const PropertyName &name);
+    void addNodeListProperty(const PropertyName &name);
+    void addVariantProperty(const PropertyName &name);
+    void addNodeProperty(const PropertyName &name);
 
 
-    QList<QString> propertyNameList() const;
+    PropertyNameList propertyNameList() const;
 
     bool hasProperties() const;
-    bool hasProperty(const QString &name) const;
+    bool hasProperty(const PropertyName &name) const;
 
     QList<InternalProperty::Pointer> propertyList() const;
     QList<InternalNodeAbstractProperty::Pointer> nodeAbstractPropertyList() const;
@@ -128,14 +128,14 @@ public:
 protected:
     Pointer internalPointer() const;
     void setInternalWeakPointer(const Pointer &pointer);
-    void removeProperty(const QString &name);
-    explicit InternalNode(const QString &type, int majorVersion, int minorVersion, qint32 internalId);
+    void removeProperty(const PropertyName &name);
+    explicit InternalNode(const TypeName &type, int majorVersion, int minorVersion, qint32 internalId);
 
 private:
-    QString m_typeName;
+    TypeName m_typeName;
     QString m_id;
 
-    QHash<QString, QVariant> m_auxiliaryDataHash;
+    QHash<PropertyName, QVariant> m_auxiliaryDataHash;
 
     InternalNodeAbstractProperty::WeakPointer m_parentProperty;
     WeakPointer m_internalPointer;
@@ -146,7 +146,7 @@ private:
     bool m_valid;
     qint32 m_internalId;
 
-    QHash<QString, InternalPropertyPointer> m_namePropertyHash;
+    QHash<PropertyName, InternalPropertyPointer> m_namePropertyHash;
     QStringList m_scriptFunctionList;
 
     QString m_nodeSource;
diff --git a/src/plugins/qmldesigner/designercore/model/internalnodeabstractproperty.cpp b/src/plugins/qmldesigner/designercore/model/internalnodeabstractproperty.cpp
index 0eeaa2dc8700d2498a0fe57e4e09c7f6ebedbdf9..68a437583c8e2813dc47c277079eeaccb277f46d 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnodeabstractproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalnodeabstractproperty.cpp
@@ -33,7 +33,7 @@
 namespace QmlDesigner {
 namespace Internal {
 
-InternalNodeAbstractProperty::InternalNodeAbstractProperty(const QString &name, const InternalNode::Pointer &propertyOwner)
+InternalNodeAbstractProperty::InternalNodeAbstractProperty(const PropertyName &name, const InternalNode::Pointer &propertyOwner)
     : InternalProperty(name, propertyOwner)
 {
 }
diff --git a/src/plugins/qmldesigner/designercore/model/internalnodeabstractproperty.h b/src/plugins/qmldesigner/designercore/model/internalnodeabstractproperty.h
index bd3fb63fd0f74dcc1de59f72d14f71993bac4d07..0ac4c77a4a6030b0d0b9a4c77c240d89c2dad409 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnodeabstractproperty.h
+++ b/src/plugins/qmldesigner/designercore/model/internalnodeabstractproperty.h
@@ -58,7 +58,7 @@ public:
     using InternalProperty::remove; // keep the virtual remove(...) method around
 
 protected:
-    InternalNodeAbstractProperty(const QString &name, const InternalNodePointer &propertyOwner);
+    InternalNodeAbstractProperty(const PropertyName &name, const InternalNodePointer &propertyOwner);
     virtual void remove(const InternalNodePointer &node) = 0;
     virtual void add(const InternalNodePointer &node) = 0;
 };
diff --git a/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.cpp b/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.cpp
index 10f08167dd1407d155cdcb1033aa7dfb1877a871..6911e085805d9d7ec295ca763c67c35995df2067 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.cpp
@@ -34,12 +34,12 @@
 namespace QmlDesigner {
 namespace Internal {
 
-InternalNodeListProperty::InternalNodeListProperty(const QString &name, const InternalNodePointer &propertyOwner)
+InternalNodeListProperty::InternalNodeListProperty(const PropertyName &name, const InternalNodePointer &propertyOwner)
         : InternalNodeAbstractProperty(name, propertyOwner)
 {
 }
 
-InternalNodeListProperty::Pointer InternalNodeListProperty::create(const QString &name, const InternalNodePointer &propertyOwner)
+InternalNodeListProperty::Pointer InternalNodeListProperty::create(const PropertyName &name, const InternalNodePointer &propertyOwner)
 {
     InternalNodeListProperty *newPointer(new InternalNodeListProperty(name, propertyOwner));
     InternalProperty::Pointer smartPointer(newPointer);
diff --git a/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.h b/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.h
index 6034dae8c6b5e245a936903e1a3baf4df0b1c002..025d131746c88893b355de5ddd0560a32df16ab7 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.h
+++ b/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.h
@@ -43,7 +43,7 @@ class InternalNodeListProperty : public InternalNodeAbstractProperty
 public:
     typedef QSharedPointer<InternalNodeListProperty> Pointer;
 
-    static Pointer create(const QString &name, const InternalNodePointer &propertyOwner);
+    static Pointer create(const PropertyName &name, const InternalNodePointer &propertyOwner);
 
     bool isValid() const;
 
@@ -60,7 +60,7 @@ public:
     void slide(int from, int to);
 
 protected:
-    InternalNodeListProperty(const QString &name, const InternalNodePointer &propertyOwner);
+    InternalNodeListProperty(const PropertyName &name, const InternalNodePointer &propertyOwner);
     void add(const InternalNodePointer &node);
     void remove(const InternalNodePointer &node);
 
diff --git a/src/plugins/qmldesigner/designercore/model/internalnodeproperty.cpp b/src/plugins/qmldesigner/designercore/model/internalnodeproperty.cpp
index 63209ead49bcbf73ce402523a3e752e0544818df..1e97caae010898082c2feec0500b6a42a5f4822d 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnodeproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalnodeproperty.cpp
@@ -33,12 +33,12 @@
 namespace QmlDesigner {
 namespace Internal {
 
-InternalNodeProperty::InternalNodeProperty(const QString &name, const InternalNode::Pointer &propertyOwner)
+InternalNodeProperty::InternalNodeProperty(const PropertyName &name, const InternalNode::Pointer &propertyOwner)
     : InternalNodeAbstractProperty(name, propertyOwner)
 {
 }
 
-InternalNodeProperty::Pointer InternalNodeProperty::create(const QString &name, const InternalNode::Pointer &propertyOwner)
+InternalNodeProperty::Pointer InternalNodeProperty::create(const PropertyName &name, const InternalNode::Pointer &propertyOwner)
 {
     InternalNodeProperty *newPointer = new InternalNodeProperty(name, propertyOwner);
     InternalNodeProperty::Pointer smartPointer(newPointer);
diff --git a/src/plugins/qmldesigner/designercore/model/internalnodeproperty.h b/src/plugins/qmldesigner/designercore/model/internalnodeproperty.h
index 7f25a84021c89bdcf624b8b69e27bc1ec0cbcf2e..dbd195ff27a11af3b6bf940bce9012aac245fafc 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnodeproperty.h
+++ b/src/plugins/qmldesigner/designercore/model/internalnodeproperty.h
@@ -40,7 +40,7 @@ class InternalNodeProperty : public InternalNodeAbstractProperty
 public:
     typedef QSharedPointer<InternalNodeProperty> Pointer;
 
-    static Pointer create(const QString &name, const InternalNodePointer &propertyOwner);
+    static Pointer create(const PropertyName &name, const InternalNodePointer &propertyOwner);
 
     bool isValid() const;
     bool isEmpty() const;
@@ -55,7 +55,7 @@ public:
 
 
 protected:
-    InternalNodeProperty(const QString &name, const InternalNodePointer &node);
+    InternalNodeProperty(const PropertyName &name, const InternalNodePointer &node);
     void add(const InternalNodePointer &node);
     void remove(const InternalNodePointer &node);
 
diff --git a/src/plugins/qmldesigner/designercore/model/internalproperty.cpp b/src/plugins/qmldesigner/designercore/model/internalproperty.cpp
index 7bd64a0cafb1a3c584d79676fbeb5d34bd9f862e..c5fc9e3438b72eb0e92d24204b2d3dee9a9ec18b 100644
--- a/src/plugins/qmldesigner/designercore/model/internalproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalproperty.cpp
@@ -54,7 +54,7 @@ InternalProperty::~InternalProperty()
 {
 }
 
-InternalProperty::InternalProperty(const QString &name, const InternalNode::Pointer &propertyOwner)
+InternalProperty::InternalProperty(const PropertyName &name, const InternalNode::Pointer &propertyOwner)
      : m_name(name),
      m_propertyOwner(propertyOwner)
 {
@@ -79,7 +79,7 @@ bool InternalProperty::isValid() const
     return m_propertyOwner && !m_name.isEmpty();
 }
 
-QString InternalProperty::name() const
+PropertyName InternalProperty::name() const
 {
     return m_name;
 }
@@ -152,12 +152,12 @@ void InternalProperty::remove()
     m_propertyOwner.clear();
 }
 
-QString InternalProperty::dynamicTypeName() const
+TypeName InternalProperty::dynamicTypeName() const
 {
     return m_dynamicType;
 }
 
-void InternalProperty::setDynamicTypeName(const QString &name)
+void InternalProperty::setDynamicTypeName(const TypeName &name)
 {
     m_dynamicType = name;
 }
diff --git a/src/plugins/qmldesigner/designercore/model/internalproperty.h b/src/plugins/qmldesigner/designercore/model/internalproperty.h
index 2fbb6e1c69d537c93789d9ee05efe2f949dbe134..8aabd3fe65b09bcad088774986f0aa4837b68d0a 100644
--- a/src/plugins/qmldesigner/designercore/model/internalproperty.h
+++ b/src/plugins/qmldesigner/designercore/model/internalproperty.h
@@ -67,7 +67,7 @@ public:
 
     virtual bool isValid() const;
 
-    QString name() const;
+    PropertyName name() const;
 
     virtual bool isBindingProperty() const;
     virtual bool isVariantProperty() const;
@@ -85,19 +85,19 @@ public:
 
     virtual void remove();
 
-    QString dynamicTypeName() const;
+    TypeName dynamicTypeName() const;
 
     void resetDynamicTypeName();
 
 protected: // functions
-    InternalProperty(const QString &name, const InternalNodePointer &propertyOwner);
+    InternalProperty(const PropertyName &name, const InternalNodePointer &propertyOwner);
     Pointer internalPointer() const;
     void setInternalWeakPointer(const Pointer &pointer);
-    void setDynamicTypeName(const QString &name);
+    void setDynamicTypeName(const TypeName &name);
 private:
     WeakPointer m_internalPointer;
-    QString m_name;
-    QString m_dynamicType;
+    PropertyName m_name;
+    TypeName m_dynamicType;
     InternalNodeWeakPointer m_propertyOwner;
 
 };
diff --git a/src/plugins/qmldesigner/designercore/model/internalvariantproperty.cpp b/src/plugins/qmldesigner/designercore/model/internalvariantproperty.cpp
index f01d6c470b565768ff40a5fda54118488c1f31d5..085b0daa9e330b8de33c7301a288649cfd99c7be 100644
--- a/src/plugins/qmldesigner/designercore/model/internalvariantproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalvariantproperty.cpp
@@ -32,12 +32,12 @@
 namespace QmlDesigner {
 namespace Internal {
 
-InternalVariantProperty::InternalVariantProperty(const QString &name, const InternalNodePointer &node)
+InternalVariantProperty::InternalVariantProperty(const PropertyName &name, const InternalNodePointer &node)
         : InternalProperty(name, node)
 {
 }
 
-InternalVariantProperty::Pointer InternalVariantProperty::create(const QString &name, const InternalNodePointer &propertyOwner)
+InternalVariantProperty::Pointer InternalVariantProperty::create(const PropertyName &name, const InternalNodePointer &propertyOwner)
 {
     InternalVariantProperty *newPointer(new InternalVariantProperty(name, propertyOwner));
     InternalVariantProperty::Pointer smartPointer(newPointer);
@@ -62,7 +62,7 @@ bool InternalVariantProperty::isVariantProperty() const
     return true;
 }
 
-void InternalVariantProperty::setDynamicValue(const QString &type, const QVariant &value)
+void InternalVariantProperty::setDynamicValue(const TypeName &type, const QVariant &value)
 {
      setValue(value);
      setDynamicTypeName(type);
diff --git a/src/plugins/qmldesigner/designercore/model/internalvariantproperty.h b/src/plugins/qmldesigner/designercore/model/internalvariantproperty.h
index afd07c529ba82c35c8f8b372982c417f15e1572c..8aad7caf80dcd34ccc00ea2f694f5d018c24445e 100644
--- a/src/plugins/qmldesigner/designercore/model/internalvariantproperty.h
+++ b/src/plugins/qmldesigner/designercore/model/internalvariantproperty.h
@@ -40,19 +40,19 @@ class InternalVariantProperty : public InternalProperty
 public:
     typedef QSharedPointer<InternalVariantProperty> Pointer;
 
-    static Pointer create(const QString &name, const InternalNodePointer &propertyOwner);
+    static Pointer create(const PropertyName &name, const InternalNodePointer &propertyOwner);
 
     bool isValid() const;
 
     QVariant value() const;
     void setValue(const QVariant &value);
 
-    void setDynamicValue(const QString &type, const QVariant &value);
+    void setDynamicValue(const TypeName &type, const QVariant &value);
 
     bool isVariantProperty() const;
 
 protected:
-    InternalVariantProperty(const QString &name, const InternalNodePointer &propertyOwner);
+    InternalVariantProperty(const PropertyName &name, const InternalNodePointer &propertyOwner);
 
 private:
     QVariant m_value;
diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp
index ccec9fd6b110f16ca40056dbcacdb798ad3f874d..3f2c6047dbb53c36a22a528d3dff82360583bf0f 100644
--- a/src/plugins/qmldesigner/designercore/model/model.cpp
+++ b/src/plugins/qmldesigner/designercore/model/model.cpp
@@ -118,7 +118,7 @@ void ModelPrivate::detachAllViews()
     }
 }
 
-Model *ModelPrivate::create(QString type, int major, int minor, Model *metaInfoPropxyModel)
+Model *ModelPrivate::create(const TypeName &type, int major, int minor, Model *metaInfoPropxyModel)
 {
     Model *model = new Model;
 
@@ -194,16 +194,16 @@ void ModelPrivate::setFileUrl(const QUrl &fileUrl)
     }
 }
 
-InternalNode::Pointer ModelPrivate::createNode(const QString &typeString,
+InternalNode::Pointer ModelPrivate::createNode(const TypeName &typeName,
                                                int majorVersion,
                                                int minorVersion,
-                                               const QList<QPair<QString, QVariant> > &propertyList,
-                                               const QList<QPair<QString, QVariant> > &auxPropertyList,
+                                               const QList<QPair<PropertyName, QVariant> > &propertyList,
+                                               const QList<QPair<PropertyName, QVariant> > &auxPropertyList,
                                                const QString &nodeSource,
                                                ModelNode::NodeSourceType nodeSourceType,
                                                bool isRootNode)
 {
-    if (typeString.isEmpty())
+    if (typeName.isEmpty())
         throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, tr("invalid type"));
 
     qint32 internalId = 0;
@@ -211,10 +211,10 @@ InternalNode::Pointer ModelPrivate::createNode(const QString &typeString,
     if (!isRootNode)
         internalId = m_internalIdCounter++;
 
-    InternalNode::Pointer newInternalNodePointer = InternalNode::create(typeString, majorVersion, minorVersion, internalId);
+    InternalNode::Pointer newInternalNodePointer = InternalNode::create(typeName, majorVersion, minorVersion, internalId);
     newInternalNodePointer->setNodeSourceType(nodeSourceType);
 
-    typedef QPair<QString, QVariant> PropertyPair;
+    typedef QPair<PropertyName, QVariant> PropertyPair;
 
     foreach (const PropertyPair &propertyPair, propertyList) {
         newInternalNodePointer->addVariantProperty(propertyPair.first);
@@ -270,7 +270,7 @@ void ModelPrivate::removeNode(const InternalNode::Pointer &node)
     removeNodeFromModel(node);
 
     InternalNode::Pointer parentNode;
-    QString parentPropertyName;
+    PropertyName parentPropertyName;
     if (oldParentProperty) {
         parentNode = oldParentProperty->propertyOwner();
         parentPropertyName = oldParentProperty->name();
@@ -330,7 +330,7 @@ void ModelPrivate::checkPropertyName(const QString &propertyName)
     }
 }
 
-void ModelPrivate::notifyAuxiliaryDataChanged(const InternalNodePointer &internalNode, const QString &name, const QVariant &data)
+void ModelPrivate::notifyAuxiliaryDataChanged(const InternalNodePointer &internalNode, const PropertyName &name, const QVariant &data)
 {
     bool resetModel = false;
     QString description;
@@ -418,15 +418,15 @@ void ModelPrivate::notifyRootNodeTypeChanged(const QString &type, int majorVersi
         resetModelByRewriter(description);
 }
 
-void ModelPrivate::notifyInstancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyPairList)
+void ModelPrivate::notifyInstancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyPairList)
 {
     // no need to notify the rewriter or the instance view
 
-    typedef QPair<ModelNode, QString> ModelNodePropertyPair;
+    typedef QPair<ModelNode, PropertyName> ModelNodePropertyPair;
     foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
         Q_ASSERT(view != 0);
 
-        QList<QPair<ModelNode, QString> > adaptedPropertyList;
+        QList<QPair<ModelNode, PropertyName> > adaptedPropertyList;
         foreach (const ModelNodePropertyPair &propertyPair, propertyPairList) {
             ModelNodePropertyPair newPair(ModelNode(propertyPair.first.internalNode(), model(), view.data()), propertyPair.second);
             adaptedPropertyList.append(newPair);
@@ -811,7 +811,7 @@ void ModelPrivate::notifyPropertiesAboutToBeRemoved(const QList<InternalProperty
         resetModelByRewriter(description);
 }
 
-void ModelPrivate::setAuxiliaryData(const InternalNode::Pointer& node, const QString &name, const QVariant &data)
+void ModelPrivate::setAuxiliaryData(const InternalNode::Pointer& node, const PropertyName &name, const QVariant &data)
 {
     node->setAuxiliaryData(name, data);
     notifyAuxiliaryDataChanged(node, name,data);
@@ -905,7 +905,7 @@ void ModelPrivate::notifyNodeAboutToBeRemoved(const InternalNode::Pointer &nodeP
         resetModelByRewriter(description);
 }
 
-void ModelPrivate::notifyNodeRemoved(const InternalNodePointer &nodePointer, const InternalNodePointer &parentNodePointer, const QString &parentPropertyName, AbstractView::PropertyChangeFlags propertyChange)
+void ModelPrivate::notifyNodeRemoved(const InternalNodePointer &nodePointer, const InternalNodePointer &parentNodePointer, const PropertyName &parentPropertyName, AbstractView::PropertyChangeFlags propertyChange)
 {
     bool resetModel = false;
     QString description;
@@ -1042,7 +1042,7 @@ void ModelPrivate::notifyScriptFunctionsChanged(const InternalNodePointer &inter
 }
 
 
-void ModelPrivate::notifyVariantPropertiesChanged(const InternalNodePointer &internalNodePointer, const QStringList& propertyNameList, AbstractView::PropertyChangeFlags propertyChange)
+void ModelPrivate::notifyVariantPropertiesChanged(const InternalNodePointer &internalNodePointer, const PropertyNameList &propertyNameList, AbstractView::PropertyChangeFlags propertyChange)
 {
     bool resetModel = false;
     QString description;
@@ -1050,9 +1050,7 @@ void ModelPrivate::notifyVariantPropertiesChanged(const InternalNodePointer &int
     try {
         if (rewriterView()) {
             QList<VariantProperty> propertyList;
-            foreach (const QString &propertyName, propertyNameList) {
-                Q_ASSERT(internalNodePointer->hasProperty(propertyName));
-                Q_ASSERT(internalNodePointer->property(propertyName)->isVariantProperty());
+            foreach (const PropertyName &propertyName, propertyNameList) {
                 VariantProperty property(propertyName, internalNodePointer, model(), rewriterView());
                 propertyList.append(property);
             }
@@ -1069,9 +1067,7 @@ void ModelPrivate::notifyVariantPropertiesChanged(const InternalNodePointer &int
     foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
         QList<VariantProperty> propertyList;
         Q_ASSERT(view != 0);
-        foreach (const QString &propertyName, propertyNameList) {
-            Q_ASSERT(internalNodePointer->hasProperty(propertyName));
-            Q_ASSERT(internalNodePointer->property(propertyName)->isVariantProperty());
+        foreach (const PropertyName &propertyName, propertyNameList) {
             VariantProperty property(propertyName, internalNodePointer, model(), view.data());
             propertyList.append(property);
         }
@@ -1082,7 +1078,7 @@ void ModelPrivate::notifyVariantPropertiesChanged(const InternalNodePointer &int
 
     if (nodeInstanceView()) {
         QList<VariantProperty> propertyList;
-        foreach (const QString &propertyName, propertyNameList) {
+        foreach (const PropertyName &propertyName, propertyNameList) {
             Q_ASSERT(internalNodePointer->hasProperty(propertyName));
             Q_ASSERT(internalNodePointer->property(propertyName)->isVariantProperty());
             VariantProperty property(propertyName, internalNodePointer, model(), nodeInstanceView());
@@ -1097,7 +1093,7 @@ void ModelPrivate::notifyVariantPropertiesChanged(const InternalNodePointer &int
         resetModelByRewriter(description);
 }
 
-void ModelPrivate::notifyNodeAboutToBeReparent(const InternalNodePointer &internalNodePointer, const InternalNodeAbstractPropertyPointer &newPropertyParent, const InternalNodePointer &oldParent, const QString &oldPropertyName, AbstractView::PropertyChangeFlags propertyChange)
+void ModelPrivate::notifyNodeAboutToBeReparent(const InternalNodePointer &internalNodePointer, const InternalNodeAbstractPropertyPointer &newPropertyParent, const InternalNodePointer &oldParent, const PropertyName &oldPropertyName, AbstractView::PropertyChangeFlags propertyChange)
 {
     bool resetModel = false;
     QString description;
@@ -1154,7 +1150,7 @@ void ModelPrivate::notifyNodeAboutToBeReparent(const InternalNodePointer &intern
 }
 
 
-void ModelPrivate::notifyNodeReparent(const InternalNode::Pointer &internalNodePointer, const InternalNodeAbstractProperty::Pointer &newPropertyParent, const InternalNodePointer &oldParent, const QString &oldPropertyName, AbstractView::PropertyChangeFlags propertyChange)
+void ModelPrivate::notifyNodeReparent(const InternalNode::Pointer &internalNodePointer, const InternalNodeAbstractProperty::Pointer &newPropertyParent, const InternalNodePointer &oldParent, const PropertyName &oldPropertyName, AbstractView::PropertyChangeFlags propertyChange)
 {
     bool resetModel = false;
     QString description;
@@ -1383,7 +1379,7 @@ void ModelPrivate::removeProperty(const InternalProperty::Pointer &property)
     notifyPropertiesRemoved(propertyPairList);
 }
 
-void ModelPrivate::setBindingProperty(const InternalNode::Pointer &internalNode, const QString &name, const QString &expression)
+void ModelPrivate::setBindingProperty(const InternalNode::Pointer &internalNode, const PropertyName &name, const QString &expression)
 {
     AbstractView::PropertyChangeFlags propertyChange = AbstractView::NoAdditionalChanges;
     if (!internalNode->hasProperty(name)) {
@@ -1396,7 +1392,7 @@ void ModelPrivate::setBindingProperty(const InternalNode::Pointer &internalNode,
     notifyBindingPropertiesChanged(QList<InternalBindingPropertyPointer>() << bindingProperty, propertyChange);
 }
 
-void ModelPrivate::setVariantProperty(const InternalNode::Pointer &internalNode, const QString &name, const QVariant &value)
+void ModelPrivate::setVariantProperty(const InternalNode::Pointer &internalNode, const PropertyName &name, const QVariant &value)
 {
     AbstractView::PropertyChangeFlags propertyChange = AbstractView::NoAdditionalChanges;
     if (!internalNode->hasProperty(name)) {
@@ -1406,10 +1402,10 @@ void ModelPrivate::setVariantProperty(const InternalNode::Pointer &internalNode,
 
     internalNode->variantProperty(name)->setValue(value);
     internalNode->variantProperty(name)->resetDynamicTypeName();
-    notifyVariantPropertiesChanged(internalNode, QStringList() << name, propertyChange);
+    notifyVariantPropertiesChanged(internalNode, PropertyNameList() << name, propertyChange);
 }
 
-void ModelPrivate::setDynamicVariantProperty(const InternalNodePointer &internalNode, const QString &name, const QString &dynamicPropertyType, const QVariant &value)
+void ModelPrivate::setDynamicVariantProperty(const InternalNodePointer &internalNode, const PropertyName &name, const TypeName &dynamicPropertyType, const QVariant &value)
 {
     AbstractView::PropertyChangeFlags propertyChange = AbstractView::NoAdditionalChanges;
     if (!internalNode->hasProperty(name)) {
@@ -1418,10 +1414,10 @@ void ModelPrivate::setDynamicVariantProperty(const InternalNodePointer &internal
     }
 
     internalNode->variantProperty(name)->setDynamicValue(dynamicPropertyType, value);
-    notifyVariantPropertiesChanged(internalNode, QStringList() << name, propertyChange);
+    notifyVariantPropertiesChanged(internalNode, PropertyNameList() << name, propertyChange);
 }
 
-void ModelPrivate::setDynamicBindingProperty(const InternalNodePointer &internalNode, const QString &name, const QString &dynamicPropertyType, const QString &expression)
+void ModelPrivate::setDynamicBindingProperty(const InternalNodePointer &internalNode, const PropertyName &name, const TypeName &dynamicPropertyType, const QString &expression)
 {
     AbstractView::PropertyChangeFlags propertyChange = AbstractView::NoAdditionalChanges;
     if (!internalNode->hasProperty(name)) {
@@ -1434,7 +1430,7 @@ void ModelPrivate::setDynamicBindingProperty(const InternalNodePointer &internal
     notifyBindingPropertiesChanged(QList<InternalBindingPropertyPointer>() << bindingProperty, propertyChange);
 }
 
-void ModelPrivate::reparentNode(const InternalNode::Pointer &newParentNode, const QString &name, const InternalNode::Pointer &node, bool list)
+void ModelPrivate::reparentNode(const InternalNode::Pointer &newParentNode, const PropertyName &name, const InternalNode::Pointer &node, bool list)
 {
     AbstractView::PropertyChangeFlags propertyChange = AbstractView::NoAdditionalChanges;
     if (!newParentNode->hasProperty(name)) {
@@ -1447,7 +1443,7 @@ void ModelPrivate::reparentNode(const InternalNode::Pointer &newParentNode, cons
 
     InternalNodeAbstractProperty::Pointer oldParentProperty(node->parentProperty());
     InternalNode::Pointer oldParentNode;
-    QString oldParentPropertyName;
+    PropertyName oldParentPropertyName;
     if (oldParentProperty && oldParentProperty->isValid()) {
         oldParentNode = node->parentProperty()->propertyOwner();
         oldParentPropertyName = node->parentProperty()->name();
@@ -1476,7 +1472,7 @@ void ModelPrivate::clearParent(const InternalNodePointer &node)
 
     InternalNodeAbstractProperty::Pointer oldParentProperty(node->parentProperty());
     InternalNode::Pointer oldParentNode;
-    QString oldParentPropertyName;
+    PropertyName oldParentPropertyName;
     if (oldParentProperty->isValid()) {
         oldParentNode = node->parentProperty()->propertyOwner();
         oldParentPropertyName = node->parentProperty()->name();
@@ -1486,7 +1482,7 @@ void ModelPrivate::clearParent(const InternalNodePointer &node)
     notifyNodeReparent(node, InternalNodeAbstractProperty::Pointer(), oldParentNode, oldParentPropertyName, AbstractView::NoAdditionalChanges);
 }
 
-void ModelPrivate::changeRootNodeType(const QString &type, int majorVersion, int minorVersion)
+void ModelPrivate::changeRootNodeType(const TypeName &type, int majorVersion, int minorVersion)
 {
     Q_ASSERT(!rootNode().isNull());
     rootNode()->setType(type);
@@ -1508,7 +1504,7 @@ void ModelPrivate::setNodeSource(const InternalNodePointer &internalNode, const
     notifyNodeSourceChanged(internalNode, nodeSource);
 }
 
-void ModelPrivate::changeNodeOrder(const InternalNode::Pointer &internalParentNode, const QString &listPropertyName, int from, int to)
+void ModelPrivate::changeNodeOrder(const InternalNode::Pointer &internalParentNode, const PropertyName &listPropertyName, int from, int to)
 {
     InternalNodeListProperty::Pointer nodeList(internalParentNode->nodeListProperty(listPropertyName));
     Q_ASSERT(!nodeList.isNull());
@@ -1653,7 +1649,7 @@ Model::~Model()
 }
 
 
-Model *Model::create(QString type, int major, int minor, Model *metaInfoPropxyModel)
+Model *Model::create(TypeName type, int major, int minor, Model *metaInfoPropxyModel)
 {
     return Internal::ModelPrivate::create(type, major, minor, metaInfoPropxyModel);
 }
@@ -1798,12 +1794,12 @@ const MetaInfo Model::metaInfo() const
     return d->metaInfo();
 }
 
-bool Model::hasNodeMetaInfo(const QString &typeName, int majorVersion, int minorVersion)
+bool Model::hasNodeMetaInfo(const TypeName &typeName, int majorVersion, int minorVersion)
 {
     return NodeMetaInfo(metaInfoProxyModel(), typeName, majorVersion, minorVersion).isValid();
 }
 
-NodeMetaInfo Model::metaInfo(const QString &typeName, int majorVersion, int minorVersion)
+NodeMetaInfo Model::metaInfo(const TypeName &typeName, int majorVersion, int minorVersion)
 {
     return NodeMetaInfo(metaInfoProxyModel(), typeName, majorVersion, minorVersion);
 }
diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h
index 27605e35c9fd62bbe6f1943a9266c9844142fa03..57ff11e4da8ce3b2da363581f0bd3998881bc497 100644
--- a/src/plugins/qmldesigner/designercore/model/model_p.h
+++ b/src/plugins/qmldesigner/designercore/model/model_p.h
@@ -66,7 +66,7 @@ typedef QSharedPointer<InternalBindingProperty> InternalBindingPropertyPointer;
 typedef QSharedPointer<InternalVariantProperty> InternalVariantPropertyPointer;
 typedef QSharedPointer<InternalNodeAbstractProperty> InternalNodeAbstractPropertyPointer;
 typedef QSharedPointer<InternalNodeListProperty> InternalNodeListPropertyPointer;
-typedef QPair<InternalNodePointer, QString> PropertyPair;
+typedef QPair<InternalNodePointer, PropertyName> PropertyPair;
 
 
 class ModelPrivate;
@@ -93,16 +93,16 @@ public:
      ModelPrivate(Model *model);
     ~ModelPrivate();
 
-    static Model *create(QString type, int major, int minor, Model *metaInfoPropxyModel);
+    static Model *create(const TypeName &type, int major, int minor, Model *metaInfoPropxyModel);
 
     QUrl fileUrl() const;
     void setFileUrl(const QUrl &url);
 
-    InternalNodePointer createNode(const QString &typeString,
+    InternalNodePointer createNode(const TypeName &typeName,
                                      int majorVersion,
                                      int minorVersion,
-                                     const QList<QPair<QString, QVariant> > &propertyList,
-                                     const QList<QPair<QString, QVariant> > &auxPropertyList,
+                                     const QList<QPair<PropertyName, QVariant> > &propertyList,
+                                     const QList<QPair<PropertyName, QVariant> > &auxPropertyList,
                                      const QString &nodeSource,
                                      ModelNode::NodeSourceType nodeSourceType,
                                      bool isRootNode = false);
@@ -128,26 +128,26 @@ public:
     void setModel(Model *q) { m_q = q; }
 
     void notifyNodeCreated(const InternalNodePointer &newInternalNodePointer);
-    void notifyNodeAboutToBeReparent(const InternalNodePointer &internalNodePointer, const InternalNodeAbstractPropertyPointer &newPropertyParent, const InternalNodePointer &oldParent, const QString &oldPropertyName, AbstractView::PropertyChangeFlags propertyChange);
-    void notifyNodeReparent(const InternalNodePointer &internalNodePointer, const InternalNodeAbstractPropertyPointer &newPropertyParent, const InternalNodePointer &oldParent, const QString &oldPropertyName, AbstractView::PropertyChangeFlags propertyChange);
+    void notifyNodeAboutToBeReparent(const InternalNodePointer &internalNodePointer, const InternalNodeAbstractPropertyPointer &newPropertyParent, const InternalNodePointer &oldParent, const PropertyName &oldPropertyName, AbstractView::PropertyChangeFlags propertyChange);
+    void notifyNodeReparent(const InternalNodePointer &internalNodePointer, const InternalNodeAbstractPropertyPointer &newPropertyParent, const InternalNodePointer &oldParent, const PropertyName &oldPropertyName, AbstractView::PropertyChangeFlags propertyChange);
     void notifyNodeAboutToBeRemoved(const InternalNodePointer &nodePointer);
-    void notifyNodeRemoved(const InternalNodePointer &nodePointer, const InternalNodePointer &parentNodePointer, const QString &parentPropertyName, AbstractView::PropertyChangeFlags propertyChange);
+    void notifyNodeRemoved(const InternalNodePointer &nodePointer, const InternalNodePointer &parentNodePointer, const PropertyName &parentPropertyName, AbstractView::PropertyChangeFlags propertyChange);
     void notifyNodeIdChanged(const InternalNodePointer& nodePointer, const QString& newId, const QString& oldId);
 
     void notifyPropertiesRemoved(const QList<PropertyPair> &propertyList);
     void notifyPropertiesAboutToBeRemoved(const QList<InternalPropertyPointer> &propertyList);
     void notifyBindingPropertiesChanged(const QList<InternalBindingPropertyPointer> &propertyList, AbstractView::PropertyChangeFlags propertyChange);
-    void notifyVariantPropertiesChanged(const InternalNodePointer &internalNodePointer, const QStringList& propertyNameList, AbstractView::PropertyChangeFlags propertyChange);
+    void notifyVariantPropertiesChanged(const InternalNodePointer &internalNodePointer, const PropertyNameList &propertyNameList, AbstractView::PropertyChangeFlags propertyChange);
     void notifyScriptFunctionsChanged(const InternalNodePointer &internalNodePointer, const QStringList &scriptFunctionList);
 
     void notifyNodeOrderChanged(const InternalNodeListPropertyPointer &internalListPropertyPointer, const InternalNodePointer &internalNodePointer, int oldIndex);
-    void notifyAuxiliaryDataChanged(const InternalNodePointer &internalNode, const QString &name, const QVariant &data);
+    void notifyAuxiliaryDataChanged(const InternalNodePointer &internalNode, const PropertyName &name, const QVariant &data);
     void notifyNodeSourceChanged(const InternalNodePointer &internalNode, const QString &newNodeSource);
 
     void notifyRootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion);
 
     void notifyCustomNotification(const AbstractView *senderView, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data);
-    void notifyInstancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
+    void notifyInstancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList);
     void notifyInstancesCompleted(const QVector<ModelNode> &nodeList);
     void notifyInstancesInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
     void notifyInstancesRenderImageChanged(const QVector<ModelNode> &nodeList);
@@ -168,7 +168,7 @@ public:
     void changeSelectedNodes(const QList<InternalNodePointer> &newSelectedsNodeList,
                              const QList<InternalNodePointer> &oldSelectedsNodeList);
 
-    void setAuxiliaryData(const InternalNodePointer& node, const QString &name, const QVariant &data);
+    void setAuxiliaryData(const InternalNodePointer& node, const PropertyName &name, const QVariant &data);
     void resetModelByRewriter(const QString &description);
 
 
@@ -182,19 +182,19 @@ public:
 
     //node state property manipulation
 
-    void addProperty(const InternalNodePointer &node, const QString &name);
-    void setPropertyValue(const InternalNodePointer &node,const QString &name, const QVariant &value);
+    void addProperty(const InternalNodePointer &node, const PropertyName &name);
+    void setPropertyValue(const InternalNodePointer &node,const PropertyName &name, const QVariant &value);
     void removeProperty(const InternalPropertyPointer &property);
 
-    void setBindingProperty(const InternalNodePointer &internalNode, const QString &name, const QString &expression);
-    void setVariantProperty(const InternalNodePointer &internalNode, const QString &name, const QVariant &value);
-    void setDynamicVariantProperty(const InternalNodePointer &internalNode, const QString &name, const QString &propertyType, const QVariant &value);
-    void setDynamicBindingProperty(const InternalNodePointer &internalNode, const QString &name, const QString &dynamicPropertyType, const QString &expression);
-    void reparentNode(const InternalNodePointer &internalNode, const QString &name, const InternalNodePointer &internalNodeToBeAppended, bool list = true);
-    void changeNodeOrder(const InternalNodePointer &internalParentNode, const QString &listPropertyName, int from, int to);
+    void setBindingProperty(const InternalNodePointer &internalNode, const PropertyName &name, const QString &expression);
+    void setVariantProperty(const InternalNodePointer &internalNode, const PropertyName &name, const QVariant &value);
+    void setDynamicVariantProperty(const InternalNodePointer &internalNode, const PropertyName &name, const TypeName &propertyType, const QVariant &value);
+    void setDynamicBindingProperty(const InternalNodePointer &internalNode, const PropertyName &name, const TypeName &dynamicPropertyType, const QString &expression);
+    void reparentNode(const InternalNodePointer &internalNode, const PropertyName &name, const InternalNodePointer &internalNodeToBeAppended, bool list = true);
+    void changeNodeOrder(const InternalNodePointer &internalParentNode, const PropertyName &listPropertyName, int from, int to);
     void checkPropertyName(const QString &propertyName);
     void clearParent(const InternalNodePointer &internalNode);
-    void changeRootNodeType(const QString &type, int majorVersion, int minorVersion);
+    void changeRootNodeType(const TypeName &type, int majorVersion, int minorVersion);
     void setScriptFunctions(const InternalNodePointer &internalNode, const QStringList &scriptFunctionList);
     void setNodeSource(const InternalNodePointer &internalNode, const QString &nodeSource);
 
diff --git a/src/plugins/qmldesigner/designercore/model/modelmerger.cpp b/src/plugins/qmldesigner/designercore/model/modelmerger.cpp
index 122977fbe01695f89a435da1872d8b7d9f29a67f..c72a330f77cf19cad1ccd9f3d6328a45f9f8ef9b 100644
--- a/src/plugins/qmldesigner/designercore/model/modelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelmerger.cpp
@@ -140,10 +140,10 @@ static void syncNodeListProperties(ModelNode &outputNode, const ModelNode &input
 
 static ModelNode createNodeFromNode(const ModelNode &modelNode,const QHash<QString, QString> &idRenamingHash, AbstractView *view)
 {
-    QList<QPair<QString, QVariant> > propertyList;
-    QList<QPair<QString, QVariant> > variantPropertyList;
+    QList<QPair<PropertyName, QVariant> > propertyList;
+    QList<QPair<PropertyName, QVariant> > variantPropertyList;
     foreach (const VariantProperty &variantProperty, modelNode.variantProperties()) {
-        propertyList.append(QPair<QString, QVariant>(variantProperty.name(), variantProperty.value()));
+        propertyList.append(QPair<PropertyName, QVariant>(variantProperty.name(), variantProperty.value()));
     }
     NodeMetaInfo nodeMetaInfo = view->model()->metaInfo(modelNode.type());
     ModelNode newNode(view->createModelNode(modelNode.type(), nodeMetaInfo.majorVersion(), nodeMetaInfo.minorVersion(),
@@ -187,7 +187,7 @@ void ModelMerger::replaceModel(const ModelNode &modelNode)
 
         ModelNode rootNode(view()->rootModelNode());
 
-        foreach (const QString &propertyName, rootNode.propertyNames())
+        foreach (const PropertyName &propertyName, rootNode.propertyNames())
             rootNode.removeProperty(propertyName);
 
         QHash<QString, QString> idRenamingHash;
diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
index dbce22d4f06c3d004a6f91d07cc7754486930f84..b79f4ec26a70379c6c7fb4cfa450fe57223ef1e2 100644
--- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
@@ -132,11 +132,11 @@ ModelNode::~ModelNode()
 QString ModelNode::generateNewId() const
 {
     int counter = 1;
-    QString newId = QString("%1%2").arg(simplifiedTypeName().toLower()).arg(counter);
+    QString newId = QString("%1%2").arg(QString::fromUtf8(simplifiedTypeName()).toLower()).arg(counter);
 
     while (view()->hasId(newId)) {
         counter += 1;
-        newId = QString("%1%2").arg(simplifiedTypeName().toLower()).arg(counter);
+        newId = QString("%1%2").arg(QString::fromUtf8(simplifiedTypeName()).toLower()).arg(counter);
     }
 
     return newId;
@@ -203,7 +203,7 @@ void ModelNode::setId(const QString& id)
 /*! \brief the fully-qualified type name of the node is represented as string
 \return type of the node as a string
 */
-QString ModelNode::type() const
+TypeName ModelNode::type() const
 {
     if (!isValid()) {
         Q_ASSERT_X(isValid(), Q_FUNC_INFO, "model node is invalid");
@@ -263,14 +263,14 @@ int ModelNode::majorQtQuickVersion() const
 
 
 /*! \return the short-hand type name of the node. */
-QString ModelNode::simplifiedTypeName() const
+TypeName ModelNode::simplifiedTypeName() const
 {
     if (!isValid()) {
         Q_ASSERT_X(isValid(), Q_FUNC_INFO, "model node is invalid");
         throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
     }
 
-    return type().split(QLatin1Char('.')).last();
+    return type().split('.').last();
 }
 
 /*! \brief Returns whether the node is valid
@@ -366,7 +366,7 @@ void ModelNode::setParentProperty(NodeAbstractProperty parent)
     parent.reparentHere(*this);
 }
 
-void ModelNode::setParentProperty(const ModelNode &newParentNode, const QString &propertyName)
+void ModelNode::setParentProperty(const ModelNode &newParentNode, const PropertyName &propertyName)
 {
     setParentProperty(newParentNode.nodeAbstractProperty(propertyName));
 }
@@ -398,7 +398,7 @@ bool ModelNode::hasParentProperty() const
   \return BindingProperty named name
   */
 
-BindingProperty ModelNode::bindingProperty(const QString &name) const
+BindingProperty ModelNode::bindingProperty(const PropertyName &name) const
 {
     if (!isValid())
         throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -417,7 +417,7 @@ BindingProperty ModelNode::bindingProperty(const QString &name) const
   \return NodeProperty named name
   */
 
-NodeProperty ModelNode::nodeProperty(const QString &name) const
+NodeProperty ModelNode::nodeProperty(const PropertyName &name) const
 {
       if (!isValid())
         throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -436,7 +436,7 @@ NodeProperty ModelNode::nodeProperty(const QString &name) const
   \return NodeListProperty named name
   */
 
-NodeListProperty ModelNode::nodeListProperty(const QString &name) const
+NodeListProperty ModelNode::nodeListProperty(const PropertyName &name) const
 {
     if (!isValid())
         throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -444,7 +444,7 @@ NodeListProperty ModelNode::nodeListProperty(const QString &name) const
     return NodeListProperty(name, m_internalNode, model(), view());
 }
 
-NodeAbstractProperty ModelNode::nodeAbstractProperty(const QString &name) const
+NodeAbstractProperty ModelNode::nodeAbstractProperty(const PropertyName &name) const
 {
      if (!isValid())
         throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -463,7 +463,7 @@ NodeAbstractProperty ModelNode::nodeAbstractProperty(const QString &name) const
   \return VariantProperty named name
   */
 
-VariantProperty ModelNode::variantProperty(const QString &name) const
+VariantProperty ModelNode::variantProperty(const PropertyName &name) const
 {
     if (!isValid())
         throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -471,7 +471,7 @@ VariantProperty ModelNode::variantProperty(const QString &name) const
     return VariantProperty(name, m_internalNode, model(), view());
 }
 
-AbstractProperty ModelNode::property(const QString &name) const
+AbstractProperty ModelNode::property(const PropertyName &name) const
 {
     if (!isValid())
         throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -501,7 +501,7 @@ QList<AbstractProperty> ModelNode::properties() const
 
     QList<AbstractProperty> propertyList;
 
-    foreach (const QString &propertyName, internalNode()->propertyNameList()) {
+    foreach (const PropertyName &propertyName, internalNode()->propertyNameList()) {
         AbstractProperty property(propertyName, internalNode(), model(), view());
         propertyList.append(property);
     }
@@ -581,7 +581,7 @@ Does nothing if the node state does not set this property.
 
 \see addProperty property  properties hasProperties
 */
-void ModelNode::removeProperty(const QString &name)
+void ModelNode::removeProperty(const PropertyName &name)
 {
     if (!isValid())
         throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -790,7 +790,7 @@ The list of properties set in this state.
 
 \see addProperty property changePropertyValue removeProperty hasProperties
 */
-QStringList ModelNode::propertyNames() const
+PropertyNameList ModelNode::propertyNames() const
 {
     if (!isValid())
         throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -800,7 +800,7 @@ QStringList ModelNode::propertyNames() const
 /*! \brief test a if a property is set for this node
 \return true if property a property ins this or a ancestor state exists
 */
-bool ModelNode::hasProperty(const QString &name) const
+bool ModelNode::hasProperty(const PropertyName &name) const
 {
     if (!isValid())
         throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -808,27 +808,27 @@ bool ModelNode::hasProperty(const QString &name) const
     return internalNode()->hasProperty(name);
 }
 
-bool ModelNode::hasVariantProperty(const QString &name) const
+bool ModelNode::hasVariantProperty(const PropertyName &name) const
 {
     return hasProperty(name) && internalNode()->property(name)->isVariantProperty();
 }
 
-bool ModelNode::hasBindingProperty(const QString &name) const
+bool ModelNode::hasBindingProperty(const PropertyName &name) const
 {
     return hasProperty(name) && internalNode()->property(name)->isBindingProperty();
 }
 
-bool ModelNode::hasNodeAbstracProperty(const QString &name) const
+bool ModelNode::hasNodeAbstracProperty(const PropertyName &name) const
 {
     return hasProperty(name) && internalNode()->property(name)->isNodeAbstractProperty();
 }
 
-bool ModelNode::hasNodeProperty(const QString &name) const
+bool ModelNode::hasNodeProperty(const PropertyName &name) const
 {
     return hasProperty(name) && internalNode()->property(name)->isNodeProperty();
 }
 
-bool ModelNode::hasNodeListProperty(const QString &name) const
+bool ModelNode::hasNodeListProperty(const PropertyName &name) const
 {
     return hasProperty(name) && internalNode()->property(name)->isNodeListProperty();
 }
@@ -908,7 +908,7 @@ QVariant ModelNode::toVariant() const
     return QVariant::fromValue(*this);
 }
 
-QVariant ModelNode::auxiliaryData(const QString &name) const
+QVariant ModelNode::auxiliaryData(const PropertyName &name) const
 {
     if (!isValid())
         throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -916,13 +916,13 @@ QVariant ModelNode::auxiliaryData(const QString &name) const
     return internalNode()->auxiliaryData(name);
 }
 
-void ModelNode::setAuxiliaryData(const QString &name, const QVariant &data) const
+void ModelNode::setAuxiliaryData(const PropertyName &name, const QVariant &data) const
 {
     Internal::WriteLocker locker(m_model.data());
     m_model.data()->d->setAuxiliaryData(internalNode(), name, data);
 }
 
-bool ModelNode::hasAuxiliaryData(const QString &name) const
+bool ModelNode::hasAuxiliaryData(const PropertyName &name) const
 {
     if (!isValid())
         throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -930,7 +930,7 @@ bool ModelNode::hasAuxiliaryData(const QString &name) const
     return internalNode()->hasAuxiliaryData(name);
 }
 
-QHash<QString, QVariant> ModelNode::auxiliaryData() const
+QHash<PropertyName, QVariant> ModelNode::auxiliaryData() const
 {
     if (!isValid())
         throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
diff --git a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
index 9e171dd1a6525689acb990f786843b793b1dce3e..8c97a2211e9ec2e98c572522118c3f55800cf7eb 100644
--- a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
@@ -335,27 +335,27 @@ QmlDesigner::QmlRefactoring::PropertyType ModelToTextMerger::propertyType(const
     return (QmlDesigner::QmlRefactoring::PropertyType) -1;
 }
 
-QStringList ModelToTextMerger::m_propertyOrder;
+PropertyNameList ModelToTextMerger::m_propertyOrder;
 
-QStringList ModelToTextMerger::getPropertyOrder()
+PropertyNameList ModelToTextMerger::getPropertyOrder()
 {
     if (m_propertyOrder.isEmpty()) {
         m_propertyOrder
-                << QLatin1String("id")
-                << QLatin1String("name")
-                << QLatin1String("target")
-                << QLatin1String("property")
-                << QLatin1String("x")
-                << QLatin1String("y")
-                << QLatin1String("width")
-                << QLatin1String("height")
-                << QLatin1String("position")
-                << QLatin1String("color")
-                << QLatin1String("radius")
-                << QLatin1String("text")
-                << QString::null
-                << QLatin1String("states")
-                << QLatin1String("transitions")
+                << PropertyName("id")
+                << PropertyName("name")
+                << PropertyName("target")
+                << PropertyName("property")
+                << PropertyName("x")
+                << PropertyName("y")
+                << PropertyName("width")
+                << PropertyName("height")
+                << PropertyName("position")
+                << PropertyName("color")
+                << PropertyName("radius")
+                << PropertyName("text")
+                << PropertyName()
+                << PropertyName("states")
+                << PropertyName("transitions")
                 ;
     }
 
diff --git a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.h b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.h
index d12481edb2a1bd4b4153cb02f45692bc4f0ef684..13955ad9f2b96faf020270d658140d3b88151546 100644
--- a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.h
+++ b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.h
@@ -53,7 +53,7 @@ namespace Internal {
 class ModelToTextMerger
 {
     typedef AbstractView::PropertyChangeFlags PropertyChangeFlags;
-    static QStringList m_propertyOrder;
+    static PropertyNameList m_propertyOrder;
 
 public:
     ModelToTextMerger(RewriterView *reWriterView);
@@ -90,7 +90,7 @@ protected:
     { return m_rewriteActions; }
 
     static QmlDesigner::QmlRefactoring::PropertyType propertyType(const AbstractProperty &property, const QString &textValue = QString());
-    static QStringList getPropertyOrder();
+    static PropertyNameList getPropertyOrder();
 
     static bool isInHierarchy(const AbstractProperty &property);
 
diff --git a/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp b/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp
index c48e4ade2416452cfdb54a690f5c1770e221bb89..c829a9ed86118829e9b6d02d6f021e9a1290c8f5 100644
--- a/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp
@@ -49,7 +49,7 @@ NodeAbstractProperty::NodeAbstractProperty(const NodeAbstractProperty &property,
 {
 }
 
-NodeAbstractProperty::NodeAbstractProperty(const QString &propertyName, const Internal::InternalNodePointer &internalNode, Model *model, AbstractView *view)
+NodeAbstractProperty::NodeAbstractProperty(const PropertyName &propertyName, const Internal::InternalNodePointer &internalNode, Model *model, AbstractView *view)
     : AbstractProperty(propertyName, internalNode, model, view)
 {
 }
@@ -161,7 +161,7 @@ uint qHash(const NodeAbstractProperty &property)
 
 QDebug operator<<(QDebug debug, const NodeAbstractProperty &property)
 {
-    return debug.nospace() << "NodeAbstractProperty(" << (property.isValid() ? property.name() : QLatin1String("invalid")) << ')';
+    return debug.nospace() << "NodeAbstractProperty(" << (property.isValid() ? property.name() : PropertyName("invalid")) << ')';
 }
 
 QTextStream& operator<<(QTextStream &stream, const NodeAbstractProperty &property)
diff --git a/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp b/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp
index 9916a186cef596af5b0846f8e4f8f04a622d51f6..1a325c71ff42aea2cb495a3ca38f3fd960286663 100644
--- a/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp
@@ -50,7 +50,7 @@ NodeListProperty::NodeListProperty(const NodeListProperty &property, AbstractVie
 
 }
 
-NodeListProperty::NodeListProperty(const QString &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view) :
+NodeListProperty::NodeListProperty(const PropertyName &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view) :
         NodeAbstractProperty(propertyName, internalNode, model, view)
 {
 }
diff --git a/src/plugins/qmldesigner/designercore/model/nodeproperty.cpp b/src/plugins/qmldesigner/designercore/model/nodeproperty.cpp
index 6bc08a65450a351b856dd5ba8d836a2548b97e7a..5340263d177e90e5b7dbb77fc0e431542fe22aa8 100644
--- a/src/plugins/qmldesigner/designercore/model/nodeproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/nodeproperty.cpp
@@ -42,7 +42,7 @@ NodeProperty::NodeProperty()
 {
 }
 
-NodeProperty::NodeProperty(const QString &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view)
+NodeProperty::NodeProperty(const PropertyName &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view)
     :  NodeAbstractProperty(propertyName, internalNode, model, view)
 {
 
diff --git a/src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp b/src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp
index 0a1112a0a5b813c82ea94efb1b45d7bc9a0b9f9a..5cf32b1a2ec6aa063bc33433a44bd488aab2aa49 100644
--- a/src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp
+++ b/src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp
@@ -60,7 +60,7 @@ PlainTextEditModifier::~PlainTextEditModifier()
 
 void PlainTextEditModifier::save(QIODevice *device)
 {
-    device->write(m_textEdit->toPlainText().toLatin1());
+    device->write(m_textEdit->toPlainText().toUtf8());
 }
 
 void PlainTextEditModifier::replace(int offset, int length, const QString &replacement)
diff --git a/src/plugins/qmldesigner/designercore/model/propertycontainer.cpp b/src/plugins/qmldesigner/designercore/model/propertycontainer.cpp
index 54750f79e57ba687f55ef7ead1ab5456406ea2b1..562f80c89588bf6d776dcf89550c39e3cb8bf92c 100644
--- a/src/plugins/qmldesigner/designercore/model/propertycontainer.cpp
+++ b/src/plugins/qmldesigner/designercore/model/propertycontainer.cpp
@@ -48,14 +48,14 @@ PropertyContainer::PropertyContainer()
 {
 }
 
-PropertyContainer::PropertyContainer(const QString &name, const QString &type, const QVariant &value)
+PropertyContainer::PropertyContainer(const PropertyName &name, const QString &type, const QVariant &value)
         : m_name(name), m_type(type), m_value(value)
 {
     Q_ASSERT_X(!name.isEmpty(), Q_FUNC_INFO, "Name of property cannot be empty");
     Q_ASSERT_X(!type.isEmpty(), Q_FUNC_INFO, "Type of property cannot be empty");
 }
 
-void PropertyContainer::set(const QString &name, const QString &type, const QVariant &value)
+void PropertyContainer::set(const PropertyName &name, const QString &type, const QVariant &value)
 {
     m_name = name;
     m_type = type;
@@ -67,7 +67,7 @@ bool PropertyContainer::isValid() const
     return !m_name.isEmpty() && m_value.isValid();
 }
 
-QString PropertyContainer::name() const
+PropertyName PropertyContainer::name() const
 {
     return m_name;
 }
diff --git a/src/plugins/qmldesigner/designercore/model/propertyparser.cpp b/src/plugins/qmldesigner/designercore/model/propertyparser.cpp
index c03f2440722cffbfb5c722ee083810bf5bcf0b31..b7cbaa6f23f449c75bc784a6d512b0498f5f07a9 100644
--- a/src/plugins/qmldesigner/designercore/model/propertyparser.cpp
+++ b/src/plugins/qmldesigner/designercore/model/propertyparser.cpp
@@ -191,7 +191,7 @@ QVariant read(const QString &typeStr, const QString &str, const MetaInfo &)
 
 QVariant read(const QString &typeStr, const QString &str)
 {
-    int type = QMetaType::type(typeStr.toLatin1().constData());
+    int type = QMetaType::type(typeStr.toUtf8().constData());
     if (type == 0) {
         qWarning() << "Type " << typeStr
                 << " is unknown to QMetaType system. Cannot create properly typed QVariant for value "
diff --git a/src/plugins/qmldesigner/designercore/model/qmlanchors.cpp b/src/plugins/qmldesigner/designercore/model/qmlanchors.cpp
index 6b2e3cc36258ac3de6c52022745a1fbbe91dec89..f73b1a7b34dfecd7dcdfa5c2c56303f8b4811b9c 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlanchors.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlanchors.cpp
@@ -39,21 +39,19 @@
 namespace QmlDesigner {
 
 
-static QString lineTypeToString(AnchorLine::Type lineType)
+static PropertyName lineTypeToString(AnchorLine::Type lineType)
 {
-    QString typeString;
-
     switch (lineType) {
-        case AnchorLine::Left:             return QLatin1String("left");
-        case AnchorLine::Top:              return QLatin1String("top");
-        case AnchorLine::Right:            return QLatin1String("right");
-        case AnchorLine::Bottom:           return QLatin1String("bottom");
-        case AnchorLine::HorizontalCenter: return QLatin1String("horizontalCenter");
-        case AnchorLine::VerticalCenter:   return QLatin1String("verticalCenter");
-        case AnchorLine::Baseline:         return QLatin1String("baseline");
-        case AnchorLine::Fill:             return QLatin1String("fill");
-        case AnchorLine::Center:           return QLatin1String("centerIn");
-        default:                           return QString();
+        case AnchorLine::Left:             return PropertyName("left");
+        case AnchorLine::Top:              return PropertyName("top");
+        case AnchorLine::Right:            return PropertyName("right");
+        case AnchorLine::Bottom:           return PropertyName("bottom");
+        case AnchorLine::HorizontalCenter: return PropertyName("horizontalCenter");
+        case AnchorLine::VerticalCenter:   return PropertyName("verticalCenter");
+        case AnchorLine::Baseline:         return PropertyName("baseline");
+        case AnchorLine::Fill:             return PropertyName("fill");
+        case AnchorLine::Center:           return PropertyName("centerIn");
+        default:                           return PropertyName();
     }
 }
 
@@ -91,27 +89,27 @@ static AnchorLine::Type propertyNameToLineType(const QString & string)
     return AnchorLine::Invalid;
 }
 
-static QString marginPropertyName(AnchorLine::Type lineType)
+static PropertyName marginPropertyName(AnchorLine::Type lineType)
 {
     switch (lineType) {
-        case AnchorLine::Left:             return QLatin1String("anchors.leftMargin");
-        case AnchorLine::Top:              return QLatin1String("anchors.topMargin");
-        case AnchorLine::Right:            return QLatin1String("anchors.rightMargin");
-        case AnchorLine::Bottom:           return QLatin1String("anchors.bottomMargin");
-        case AnchorLine::HorizontalCenter: return QLatin1String("anchors.horizontalCenterOffset");
-        case AnchorLine::VerticalCenter:   return QLatin1String("anchors.verticalCenterOffset");
-        default:                           return QString();
+        case AnchorLine::Left:             return PropertyName("anchors.leftMargin");
+        case AnchorLine::Top:              return PropertyName("anchors.topMargin");
+        case AnchorLine::Right:            return PropertyName("anchors.rightMargin");
+        case AnchorLine::Bottom:           return PropertyName("anchors.bottomMargin");
+        case AnchorLine::HorizontalCenter: return PropertyName("anchors.horizontalCenterOffset");
+        case AnchorLine::VerticalCenter:   return PropertyName("anchors.verticalCenterOffset");
+        default:                           return PropertyName();
     }
 }
 
-static QString anchorPropertyName(AnchorLine::Type lineType)
+static PropertyName anchorPropertyName(AnchorLine::Type lineType)
 {
-    const QString typeString = lineTypeToString(lineType);
+    const PropertyName typeString = lineTypeToString(lineType);
 
     if (typeString.isEmpty())
-        return QString();
+        return PropertyName();
     else
-        return QString("anchors.%1").arg(typeString);
+        return PropertyName("anchors.") + typeString;
 }
 
 
@@ -186,7 +184,7 @@ void QmlAnchors::setAnchor(AnchorLine::Type sourceAnchorLine,
             removeAnchor(sourceAnchorLine);
         }
 
-        const QString propertyName = anchorPropertyName(sourceAnchorLine);
+        const PropertyName propertyName = anchorPropertyName(sourceAnchorLine);
         QString targetExpression = targetQmlItemNode.modelNode().validId();
         if (targetQmlItemNode.modelNode() == qmlItemNode().modelNode().parentProperty().parentModelNode())
             targetExpression = "parent";
@@ -204,10 +202,10 @@ bool detectHorizontalCycle(const ModelNode &node, QList<ModelNode> knownNodeList
 
     knownNodeList.append(node);
 
-    static QStringList validAnchorLines(QStringList() << "right" << "left" << "horizontalCenter");
-    static QStringList anchorNames(QStringList() << "anchors.right" << "anchors.left" << "anchors.horizontalCenter");
+    static PropertyNameList validAnchorLines(PropertyNameList() << "right" << "left" << "horizontalCenter");
+    static PropertyNameList anchorNames(PropertyNameList() << "anchors.right" << "anchors.left" << "anchors.horizontalCenter");
 
-    foreach (const QString &anchorName, anchorNames) {
+    foreach (const PropertyName &anchorName, anchorNames) {
         if (node.hasBindingProperty(anchorName)) {
             AbstractProperty targetProperty = node.bindingProperty(anchorName).resolveToProperty();
             if (targetProperty.isValid()) {
@@ -221,8 +219,8 @@ bool detectHorizontalCycle(const ModelNode &node, QList<ModelNode> knownNodeList
 
     }
 
-    static QStringList anchorShortcutNames(QStringList() << "anchors.fill" << "anchors.centerIn");
-    foreach (const QString &anchorName, anchorShortcutNames) {
+    static PropertyNameList anchorShortcutNames(PropertyNameList() << "anchors.fill" << "anchors.centerIn");
+    foreach (const PropertyName &anchorName, anchorShortcutNames) {
         if (node.hasBindingProperty(anchorName)) {
             ModelNode targetNode = node.bindingProperty(anchorName).resolveToModelNode();
 
@@ -244,10 +242,10 @@ bool detectVerticalCycle(const ModelNode &node, QList<ModelNode> knownNodeList)
 
     knownNodeList.append(node);
 
-    static QStringList validAnchorLines(QStringList() << "top" << "bottom" << "verticalCenter" << "baseline");
-    static QStringList anchorNames(QStringList() << "anchors.top" << "anchors.bottom" << "anchors.verticalCenter" << "anchors.baseline");
+    static PropertyNameList validAnchorLines(PropertyNameList() << "top" << "bottom" << "verticalCenter" << "baseline");
+    static PropertyNameList anchorNames(PropertyNameList() << "anchors.top" << "anchors.bottom" << "anchors.verticalCenter" << "anchors.baseline");
 
-    foreach (const QString &anchorName, anchorNames) {
+    foreach (const PropertyName &anchorName, anchorNames) {
         if (node.hasBindingProperty(anchorName)) {
             AbstractProperty targetProperty = node.bindingProperty(anchorName).resolveToProperty();
             if (targetProperty.isValid()) {
@@ -261,8 +259,8 @@ bool detectVerticalCycle(const ModelNode &node, QList<ModelNode> knownNodeList)
 
     }
 
-    static QStringList anchorShortcutNames(QStringList() << "anchors.fill" << "anchors.centerIn");
-    foreach (const QString &anchorName, anchorShortcutNames) {
+    static PropertyNameList anchorShortcutNames(PropertyNameList() << "anchors.fill" << "anchors.centerIn");
+    foreach (const PropertyName &anchorName, anchorShortcutNames) {
         if (node.hasBindingProperty(anchorName)) {
             ModelNode targetNode = node.bindingProperty(anchorName).resolveToModelNode();
 
@@ -309,7 +307,7 @@ AnchorLine::Type QmlAnchors::possibleAnchorLines(AnchorLine::Type sourceAnchorLi
 
 AnchorLine QmlAnchors::instanceAnchor(AnchorLine::Type sourceAnchorLine) const
 {
-    QPair<QString, qint32> targetAnchorLinePair;
+    QPair<PropertyName, qint32> targetAnchorLinePair;
     if (qmlItemNode().nodeInstance().hasAnchor("anchors.fill") && (sourceAnchorLine & AnchorLine::Fill)) {
         targetAnchorLinePair = qmlItemNode().nodeInstance().anchor("anchors.fill");
         targetAnchorLinePair.first = lineTypeToString(sourceAnchorLine); // TODO: looks wrong
@@ -335,7 +333,7 @@ void QmlAnchors::removeAnchor(AnchorLine::Type sourceAnchorLine)
 {
    RewriterTransaction transaction = qmlItemNode().qmlModelView()->beginRewriterTransaction();
     if (qmlItemNode().isInBaseState()) {
-        const QString propertyName = anchorPropertyName(sourceAnchorLine);
+        const PropertyName propertyName = anchorPropertyName(sourceAnchorLine);
         if (qmlItemNode().nodeInstance().hasAnchor("anchors.fill") && (sourceAnchorLine & AnchorLine::Fill)) {
             qmlItemNode().modelNode().removeProperty("anchors.fill");
             qmlItemNode().modelNode().bindingProperty("anchors.top").setExpression("parent.top");
@@ -378,7 +376,7 @@ void QmlAnchors::removeAnchors()
 
 bool QmlAnchors::instanceHasAnchor(AnchorLine::Type sourceAnchorLine) const
 {
-    const QString propertyName = anchorPropertyName(sourceAnchorLine);
+    const PropertyName propertyName = anchorPropertyName(sourceAnchorLine);
 
     if (sourceAnchorLine & AnchorLine::Fill)
         return qmlItemNode().nodeInstance().hasAnchor(propertyName) || qmlItemNode().nodeInstance().hasAnchor("anchors.fill");
@@ -403,7 +401,7 @@ bool QmlAnchors::instanceHasAnchors() const
 
 void QmlAnchors::setMargin(AnchorLine::Type sourceAnchorLineType, double margin) const
 {
-    QString propertyName = marginPropertyName(sourceAnchorLineType);
+    PropertyName propertyName = marginPropertyName(sourceAnchorLineType);
     qmlItemNode().setVariantProperty(propertyName, qRound(margin));
 }
 
@@ -420,7 +418,7 @@ double QmlAnchors::instanceMargin(AnchorLine::Type sourceAnchorLineType) const
 void QmlAnchors::removeMargin(AnchorLine::Type sourceAnchorLineType)
 {
     if (qmlItemNode().isInBaseState()) {
-        QString propertyName = marginPropertyName(sourceAnchorLineType);
+        PropertyName propertyName = marginPropertyName(sourceAnchorLineType);
         qmlItemNode().modelNode().removeProperty(propertyName);
     }
 }
diff --git a/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp b/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp
index 3f2d7a91f4bf70d58f6f7440efa0a180ba219feb..aec42974ba09d9769e411111cfe3e43633fd9403 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp
@@ -60,7 +60,7 @@ bool QmlModelStateOperation::isValid() const
                 || modelNode().metaInfo().isSubclassOf("<cpp>.QQuickStateOperation", -1, -1));
 }
 
-void QmlPropertyChanges::removeProperty(const QString &name)
+void QmlPropertyChanges::removeProperty(const PropertyName &name)
 {
     RewriterTransaction transaction(qmlModelView()->beginRewriterTransaction());
     if (name == "name")
diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
index 3e41936cf90a7655e644ae51c9fae2ac20b901be..75dffde67f3c5db26499ccf91054d0b9baf4a732 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
@@ -308,7 +308,7 @@ QList<QmlModelState> QmlModelStateGroup::allStates() const
     return returnList;
 }
 
-QString QmlItemNode::simplifiedTypeName() const
+TypeName QmlItemNode::simplifiedTypeName() const
 {
     return modelNode().simplifiedTypeName();
 }
@@ -325,7 +325,7 @@ QmlModelState QmlModelStateGroup::addState(const QString &name)
 
 
     PropertyListType propertyList;
-    propertyList.append(qMakePair(QString("name"), QVariant(name)));
+    propertyList.append(qMakePair(PropertyName("name"), QVariant(name)));
 
     ModelNode newState = QmlObjectNode(modelNode()).qmlModelView()->createQmlState(propertyList);
     modelNode().nodeListProperty("states").reparentHere(newState);
diff --git a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp
index e0356c8be399a98f41814593b31963ddaedbfb8c..3a3d16c2c7ccb3eef55f7ed3cd7cb4892eb300e5 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp
@@ -83,7 +83,7 @@ QmlModelStateGroup QmlModelView::rootStateGroup() const
     return QmlModelStateGroup(rootModelNode());
 }
 
-QmlObjectNode QmlModelView::createQmlObjectNode(const QString &typeString,
+QmlObjectNode QmlModelView::createQmlObjectNode(const TypeName &typeString,
                      int majorVersion,
                      int minorVersion,
                      const PropertyListType &propertyList)
@@ -91,7 +91,7 @@ QmlObjectNode QmlModelView::createQmlObjectNode(const QString &typeString,
     return QmlObjectNode(createModelNode(typeString, majorVersion, minorVersion, propertyList));
 }
 
-QmlItemNode QmlModelView::createQmlItemNode(const QString &typeString,
+QmlItemNode QmlModelView::createQmlItemNode(const TypeName &typeString,
                                 int majorVersion,
                                 int minorVersion,
                                 const PropertyListType &propertyList)
@@ -127,9 +127,9 @@ QmlItemNode QmlModelView::createQmlItemNodeFromImage(const QString &imageName, c
         if (!model()->imports().contains(newImport))
             model()->changeImports(QList<Import>() << newImport, QList<Import>());
 
-        QList<QPair<QString, QVariant> > propertyPairList;
-        propertyPairList.append(qMakePair(QString("x"), QVariant( round(position.x(), 4))));
-        propertyPairList.append(qMakePair(QString("y"), QVariant( round(position.y(), 4))));
+        QList<QPair<PropertyName, QVariant> > propertyPairList;
+        propertyPairList.append(qMakePair(PropertyName("x"), QVariant( round(position.x(), 4))));
+        propertyPairList.append(qMakePair(PropertyName("y"), QVariant( round(position.y(), 4))));
 
         QString relativeImageName = imageName;
 
@@ -139,7 +139,7 @@ QmlItemNode QmlModelView::createQmlItemNodeFromImage(const QString &imageName, c
             relativeImageName = fileDir.relativeFilePath(imageName);
         }
 
-        propertyPairList.append(qMakePair(QString("source"), QVariant(relativeImageName)));
+        propertyPairList.append(qMakePair(PropertyName("source"), QVariant(relativeImageName)));
         newNode = createQmlItemNode("QtQuick.Image", -1, -1, propertyPairList);
         parentNode.nodeAbstractProperty("data").reparentHere(newNode);
 
@@ -213,9 +213,9 @@ QmlItemNode QmlModelView::createQmlItemNode(const ItemLibraryEntry &itemLibraryE
             }
         }
 
-        QList<QPair<QString, QVariant> > propertyPairList;
-        propertyPairList.append(qMakePair(QString("x"), QVariant(round(position.x(), 4))));
-        propertyPairList.append(qMakePair(QString("y"), QVariant(round(position.y(), 4))));
+        QList<QPair<PropertyName, QVariant> > propertyPairList;
+        propertyPairList.append(qMakePair(PropertyName("x"), QVariant(round(position.x(), 4))));
+        propertyPairList.append(qMakePair(PropertyName("y"), QVariant(round(position.y(), 4))));
 
         if (itemLibraryEntry.qml().isEmpty()) {
             foreach (const PropertyContainer &property, itemLibraryEntry.properties())
@@ -387,13 +387,7 @@ void QmlModelView::rootNodeTypeChanged(const QString &/*type*/, int, int /*minor
 void QmlModelView::scriptFunctionsChanged(const ModelNode &/*node*/, const QStringList &/*scriptFunctionList*/) {}
 void QmlModelView::selectedNodesChanged(const QList<ModelNode> &/*selectedNodeList*/, const QList<ModelNode> &/*lastSelectedNodeList*/) {}
 
-void QmlModelView::instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList)
-{
-    typedef QPair<ModelNode, QString> ModelNodePropertyPair;
-    foreach (const ModelNodePropertyPair &propertyPair, propertyList) {
-        nodeInstancePropertyChanged(propertyPair.first, propertyPair.second);
-    }
-}
+
 void QmlModelView::instancesCompleted(const QVector<ModelNode> &/*completedNodeList*/)
 {
 }
@@ -448,30 +442,7 @@ void QmlModelView::actualStateChanged(const ModelNode & /*node*/)
 
 }
 
-void QmlModelView::nodeInstancePropertyChanged(const ModelNode &node, const QString &propertyName)
-{
-    QmlObjectNode qmlObjectNode(node);
-
-    if (!qmlObjectNode.isValid())
-        return;
-
-    if (isTransformProperty(propertyName))
-        transformChanged(qmlObjectNode, propertyName);
-    else if (propertyName == "parent")
-        parentChanged(qmlObjectNode);
-    else
-        otherPropertyChanged(qmlObjectNode, propertyName);
-}
-
-void QmlModelView::transformChanged(const QmlObjectNode &/*qmlObjectNode*/, const QString &/*propertyName*/)
-{
-}
-
-void QmlModelView::parentChanged(const QmlObjectNode &/*qmlObjectNode*/)
-{
-}
-
-void QmlModelView::otherPropertyChanged(const QmlObjectNode &/*qmlObjectNode*/, const QString &/*propertyName*/)
+void QmlModelView::instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > & /*propertyList*/)
 {
 }
 
diff --git a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
index 3d0af0bb6a695d9c6ec7b276d007ba9a531c5889..d8259a5ef23a48f99e5efc4a84fd551b3a716a9e 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
@@ -43,7 +43,7 @@
 
 namespace QmlDesigner {
 
-void QmlObjectNode::setVariantProperty(const QString &name, const QVariant &value)
+void QmlObjectNode::setVariantProperty(const PropertyName &name, const QVariant &value)
 {
     if (!isValid())
         throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -59,7 +59,7 @@ void QmlObjectNode::setVariantProperty(const QString &name, const QVariant &valu
     }
 }
 
-void QmlObjectNode::setBindingProperty(const QString &name, const QString &expression)
+void QmlObjectNode::setBindingProperty(const PropertyName &name, const QString &expression)
 {
     if (!isValid())
         throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -95,13 +95,13 @@ instanciated instance of this object.
 \return the value of this property based on the instance
 
 */
-QVariant  QmlObjectNode::instanceValue(const QString &name) const
+QVariant  QmlObjectNode::instanceValue(const PropertyName &name) const
 {
     return nodeInstance().property(name);
 }
 
 
-bool QmlObjectNode::hasProperty(const QString &name) const
+bool QmlObjectNode::hasProperty(const PropertyName &name) const
 {
     if (!isValid())
         throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -115,7 +115,7 @@ bool QmlObjectNode::hasProperty(const QString &name) const
     return modelNode().hasProperty(name);
 }
 
-bool QmlObjectNode::hasBindingProperty(const QString &name) const
+bool QmlObjectNode::hasBindingProperty(const PropertyName &name) const
 {
     if (!isValid())
         throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -129,22 +129,22 @@ bool QmlObjectNode::hasBindingProperty(const QString &name) const
     return modelNode().hasBindingProperty(name);
 }
 
-NodeAbstractProperty QmlObjectNode::nodeAbstractProperty(const QString &name) const
+NodeAbstractProperty QmlObjectNode::nodeAbstractProperty(const PropertyName &name) const
 {
    return modelNode().nodeAbstractProperty(name);
 }
 
-NodeProperty QmlObjectNode::nodeProperty(const QString &name) const
+NodeProperty QmlObjectNode::nodeProperty(const PropertyName &name) const
 {
     return modelNode().nodeProperty(name);
 }
 
-NodeListProperty QmlObjectNode::nodeListProperty(const QString &name) const
+NodeListProperty QmlObjectNode::nodeListProperty(const PropertyName &name) const
 {
     return modelNode().nodeListProperty(name);
 }
 
-bool QmlObjectNode::propertyAffectedByCurrentState(const QString &name) const
+bool QmlObjectNode::propertyAffectedByCurrentState(const PropertyName &name) const
 {
     if (!isValid())
         throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -158,7 +158,7 @@ bool QmlObjectNode::propertyAffectedByCurrentState(const QString &name) const
     return currentState().propertyChanges(modelNode()).modelNode().hasProperty(name);
 }
 
-QVariant QmlObjectNode::modelValue(const QString &name) const
+QVariant QmlObjectNode::modelValue(const PropertyName &name) const
 {
     if (!isValid())
         throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -177,7 +177,7 @@ QVariant QmlObjectNode::modelValue(const QString &name) const
     return propertyChanges.modelNode().variantProperty(name).value();
 }
 
-QString QmlObjectNode::expression(const QString &name) const
+QString QmlObjectNode::expression(const PropertyName &name) const
 {
     if (!isValid())
         throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -338,7 +338,7 @@ QList<QmlModelState> QmlObjectNode::allDefinedStates() const
 
 */
 
-void  QmlObjectNode::removeVariantProperty(const QString &name)
+void  QmlObjectNode::removeVariantProperty(const PropertyName &name)
 {
     if (!isValid())
         throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
@@ -380,7 +380,7 @@ bool QmlObjectNode::isAncestorOf(const QmlObjectNode &objectNode) const
     return modelNode().isAncestorOf(objectNode.modelNode());
 }
 
-QVariant QmlObjectNode::instanceValue(const ModelNode &modelNode, const QString &name)
+QVariant QmlObjectNode::instanceValue(const ModelNode &modelNode, const PropertyName &name)
 {
     QmlModelView *modelView = qobject_cast<QmlModelView*>(modelNode.view());
     if (!modelView)
@@ -389,12 +389,12 @@ QVariant QmlObjectNode::instanceValue(const ModelNode &modelNode, const QString
     return modelView->instanceForModelNode(modelNode).property(name);
 }
 
-QString QmlObjectNode::instanceType(const QString &name) const
+TypeName QmlObjectNode::instanceType(const PropertyName &name) const
 {
     return nodeInstance().instanceType(name);
 }
 
-bool QmlObjectNode::instanceHasBinding(const QString &name) const
+bool QmlObjectNode::instanceHasBinding(const PropertyName &name) const
 {
     QmlModelView *modelView = qobject_cast<QmlModelView*>(modelNode().view());
     if (!modelView)
@@ -457,7 +457,7 @@ bool QmlObjectNode::hasDefaultProperty() const
     return modelNode().metaInfo().hasDefaultProperty();
 }
 
-QString QmlObjectNode::defaultProperty() const
+PropertyName QmlObjectNode::defaultProperty() const
 {
     return modelNode().metaInfo().defaultPropertyName();
 }
diff --git a/src/plugins/qmldesigner/designercore/model/qmlstate.cpp b/src/plugins/qmldesigner/designercore/model/qmlstate.cpp
index ba6ce14543e95227d6f4dce2d97c4c035250a4f7..21d343a95338aa2cb22cac404d0608fa89388d00 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlstate.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlstate.cpp
@@ -281,7 +281,7 @@ QmlModelState QmlModelState::duplicate(const QString &name) const
 
 //    QmlModelState newState(stateGroup().addState(name));
     PropertyListType propertyList;
-    propertyList.append(qMakePair(QString("name"), QVariant(name)));
+    propertyList.append(qMakePair(PropertyName("name"), QVariant(name)));
     QmlModelState newState ( qmlModelView()->createQmlState(propertyList) );
 
     foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) {
diff --git a/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp b/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp
index 5a6f0dbf2a24c9f97ad57b15769a25a4dde0bc44..12fb422844704d1beec61cf7bbc6ea8f526e03e7 100644
--- a/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp
@@ -63,7 +63,7 @@ inline static QString doubleToString(double d)
     return string;
 }
 
-QmlTextGenerator::QmlTextGenerator(const QStringList &propertyOrder, int indentDepth):
+QmlTextGenerator::QmlTextGenerator(const PropertyNameList &propertyOrder, int indentDepth):
         m_propertyOrder(propertyOrder),
         m_indentDepth(indentDepth)
 {
@@ -104,7 +104,7 @@ QString QmlTextGenerator::toQml(const AbstractProperty &property, int indentDept
         const QVariant value = variantProperty.value();
         const QString stringValue = value.toString();
 
-        if (property.name() == QLatin1String("id"))
+        if (property.name() == "id")
             return stringValue;
 
           if (false) {
@@ -186,11 +186,11 @@ QString QmlTextGenerator::propertiesToQml(const ModelNode &node, int indentDepth
     QString topPart;
     QString bottomPart;
 
-    QStringList nodePropertyNames = node.propertyNames();
+    PropertyNameList nodePropertyNames = node.propertyNames();
     bool addToTop = true;
 
-    foreach (const QString &propertyName, m_propertyOrder) {
-        if (QLatin1String("id") == propertyName) {
+    foreach (const PropertyName &propertyName, m_propertyOrder) {
+        if (propertyName == "id") {
             // the model handles the id property special, so:
             if (!node.id().isEmpty()) {
                 QString idLine(indentDepth, QLatin1Char(' '));
@@ -215,7 +215,7 @@ QString QmlTextGenerator::propertiesToQml(const ModelNode &node, int indentDepth
         }
     }
 
-    foreach (const QString &propertyName, nodePropertyNames) {
+    foreach (const PropertyName &propertyName, nodePropertyNames) {
         bottomPart.prepend(propertyToQml(node.property(propertyName), indentDepth));
     }
 
diff --git a/src/plugins/qmldesigner/designercore/model/qmltextgenerator.h b/src/plugins/qmldesigner/designercore/model/qmltextgenerator.h
index 99c3918c5024e8333434f20ec2a2ba80657f7d76..4f5ba555dcefd1ef4bcbe65d3fbcadc4f6964b91 100644
--- a/src/plugins/qmldesigner/designercore/model/qmltextgenerator.h
+++ b/src/plugins/qmldesigner/designercore/model/qmltextgenerator.h
@@ -42,7 +42,7 @@ namespace Internal {
 class QmlTextGenerator
 {
 public:
-    explicit QmlTextGenerator(const QStringList &propertyOrder, int indentDepth = 0);
+    explicit QmlTextGenerator(const PropertyNameList &propertyOrder, int indentDepth = 0);
 
     QString operator()(const AbstractProperty &property) const
     { return toQml(property, m_indentDepth); }
@@ -59,7 +59,7 @@ private:
     static QString escape(const QString &value);
 
 private:
-    QStringList m_propertyOrder;
+    PropertyNameList m_propertyOrder;
     int m_indentDepth;
 };
 
diff --git a/src/plugins/qmldesigner/designercore/model/rewriteaction.cpp b/src/plugins/qmldesigner/designercore/model/rewriteaction.cpp
index cb3e4a811365efd94eff9baf915e622a9e25970e..0bfff4195a8a30dff58ee102a4d623f31ef2f084 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriteaction.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriteaction.cpp
@@ -57,12 +57,12 @@ static inline QString toInfo(const Import &import)
     }
 
     if (import.hasVersion())
-        txt += QString::fromLatin1("with version \"%1\"").arg(import.version());
+        txt += QString::fromUtf8("with version \"%1\"").arg(import.version());
     else
         txt += QLatin1String("without version");
 
     if (import.hasAlias())
-        txt += QString::fromLatin1("aliassed as \"%1\"").arg(import.alias());
+        txt += QString::fromUtf8("aliassed as \"%1\"").arg(import.alias());
     else
         txt += QLatin1String("unaliassed");
 
@@ -129,7 +129,7 @@ QString AddPropertyRewriteAction::info() const
 bool ChangeIdRewriteAction::execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore)
 {
     const int nodeLocation = positionStore.nodeOffset(m_node);
-    static const QLatin1String idPropertyName("id");
+    static const PropertyName idPropertyName("id");
     bool result = false;
 
     if (m_oldId.isEmpty()) {
@@ -281,7 +281,7 @@ bool RemovePropertyRewriteAction::execute(QmlDesigner::QmlRefactoring &refactori
 
 QString RemovePropertyRewriteAction::info() const
 {
-    return QString("RemovePropertyRewriteAction for property \"%1\"").arg(m_property.name());
+    return QString("RemovePropertyRewriteAction for property \"%1\"").arg(QLatin1String(m_property.name()));
 }
 
 bool ReparentNodeRewriteAction::execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore)
@@ -291,7 +291,7 @@ bool ReparentNodeRewriteAction::execute(QmlDesigner::QmlRefactoring &refactoring
     const bool isArrayBinding = m_targetProperty.isNodeListProperty();
     bool result = false;
 
-    QString targetPropertyName;
+    PropertyName targetPropertyName;
     if (!m_targetProperty.isDefaultProperty())
         targetPropertyName = m_targetProperty.name();
 
diff --git a/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.h b/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.h
index e1495528a82547d12a284232dced625001770df3..938835c9a654e3e773bc957a1d479b1eb007ac1a 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.h
+++ b/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.h
@@ -40,7 +40,7 @@ namespace Internal {
 class RewriteActionCompressor
 {
 public:
-    RewriteActionCompressor(const QStringList &propertyOrder): m_propertyOrder(propertyOrder) {}
+    RewriteActionCompressor(const PropertyNameList &propertyOrder): m_propertyOrder(propertyOrder) {}
 
     void operator()(QList<RewriteAction *> &actions) const;
 
@@ -55,7 +55,7 @@ private:
     void compressAddReparentActions(QList<RewriteAction *> &actions) const;
 
 private:
-    QStringList m_propertyOrder;
+    PropertyNameList m_propertyOrder;
 };
 
 } // namespace Internal
diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
index 4014ffe549427154ccc9e03e89d7d867d1eecfc9..1b16be516b4d1901cabefac65337b37c1e0ea534 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
@@ -375,7 +375,7 @@ void RewriterView::scriptFunctionsChanged(const ModelNode & /*node*/, const QStr
 {
 }
 
-void RewriterView::instancePropertyChange(const QList<QPair<ModelNode, QString> > & /*propertyList*/)
+void RewriterView::instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > & /*propertyList*/)
 {
 }
 
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index a5d01cf947afa4e495b0d4ee5b7c238fec36c194..aac9de667c142c5313c7591cbf2073b79e0f39ea 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -41,6 +41,7 @@
 #include "rewriterview.h"
 #include "variantproperty.h"
 #include "nodemetainfo.h"
+#include "qmldesignercorelib_global.h"
 
 #include <languageutils/componentversion.h>
 #include <qmljs/qmljsevaluate.h>
@@ -243,9 +244,9 @@ static inline QVariant convertDynamicPropertyValueToVariant(const QString &astVa
     }
 }
 
-static bool isComponentType(const QString &type)
+static bool isComponentType(const QmlDesigner::TypeName &type)
 {
-    return  type == QLatin1String("Component") || type == QLatin1String("Qt.Component") || type == QLatin1String("QtQuick.Component");
+    return  type == "Component" || type == "Qt.Component" || type == "QtQuick.Component";
 }
 
 static bool isCustomParserType(const QString &type)
@@ -257,14 +258,14 @@ static bool isCustomParserType(const QString &type)
 }
 
 
-static bool isPropertyChangesType(const QString &type)
+static bool isPropertyChangesType(const QmlDesigner::TypeName &type)
 {
-    return  type == QLatin1String("PropertyChanges") || type == QLatin1String("QtQuick.PropertyChanges") || type == QLatin1String("Qt.PropertyChanges");
+    return  type == "PropertyChanges" || type == "QtQuick.PropertyChanges" || type == "Qt.PropertyChanges";
 }
 
-static bool propertyIsComponentType(const QmlDesigner::NodeAbstractProperty &property, const QString &type, QmlDesigner::Model *model)
+static bool propertyIsComponentType(const QmlDesigner::NodeAbstractProperty &property, const QmlDesigner::TypeName &type, QmlDesigner::Model *model)
 {
-    if (model->metaInfo(type, -1, -1).isSubclassOf(QLatin1String("QtQuick.Component"), -1, -1) && !isComponentType(type))
+    if (model->metaInfo(type, -1, -1).isSubclassOf("QtQuick.Component", -1, -1) && !isComponentType(type))
         return false; //If the type is already a subclass of Component keep it
 
     return property.parentModelNode().isValid() &&
@@ -855,10 +856,15 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
 
     m_rewriterView->positionStorage()->setNodeOffset(modelNode, astObjectType->identifierToken.offset);
 
-    QString typeName, defaultPropertyName;
+    QString typeNameString;
+    QString defaultPropertyNameString;
     int majorVersion;
     int minorVersion;
-    context->lookup(astObjectType, typeName, majorVersion, minorVersion, defaultPropertyName);
+    context->lookup(astObjectType, typeNameString, majorVersion, minorVersion, defaultPropertyNameString);
+
+    TypeName typeName = typeNameString.toUtf8();
+    PropertyName defaultPropertyName = defaultPropertyNameString.toUtf8();
+
     if (defaultPropertyName.isEmpty()) //fallback and use the meta system of the model
         defaultPropertyName = modelNode.metaInfo().defaultPropertyName();
 
@@ -898,9 +904,9 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
 
     context->enterScope(astNode);
 
-    QSet<QString> modelPropertyNames = QSet<QString>::fromList(modelNode.propertyNames());
+    QSet<PropertyName> modelPropertyNames = QSet<PropertyName>::fromList(modelNode.propertyNames());
     if (!modelNode.id().isEmpty())
-        modelPropertyNames.insert(QLatin1String("id"));
+        modelPropertyNames.insert("id");
     QList<UiObjectMember *> defaultPropertyItems;
 
     for (UiObjectMemberList *iter = astInitializer->members; iter; iter = iter->next) {
@@ -911,14 +917,14 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
         if (UiArrayBinding *array = cast<UiArrayBinding *>(member)) {
             const QString astPropertyName = toString(array->qualifiedId);
             if (isPropertyChangesType(typeName) || context->lookupProperty(QString(), array->qualifiedId)) {
-                AbstractProperty modelProperty = modelNode.property(astPropertyName);
+                AbstractProperty modelProperty = modelNode.property(astPropertyName.toUtf8());
                 QList<UiObjectMember *> arrayMembers;
                 for (UiArrayMemberList *iter = array->members; iter; iter = iter->next)
                     if (UiObjectMember *member = iter->member)
                         arrayMembers.append(member);
 
                 syncArrayProperty(modelProperty, arrayMembers, context, differenceHandler);
-                modelPropertyNames.remove(astPropertyName);
+                modelPropertyNames.remove(astPropertyName.toUtf8());
             } else {
                 qWarning() << "Skipping invalid array property" << astPropertyName
                            << "for node type" << modelNode.type();
@@ -932,7 +938,7 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
                                                           context,
                                                           differenceHandler);
                 foreach (const QString &prop, props)
-                    modelPropertyNames.remove(prop);
+                    modelPropertyNames.remove(prop.toUtf8());
             } else {
                 defaultPropertyItems.append(member);
             }
@@ -945,12 +951,12 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
                 const ObjectValue *containingObject = 0;
                 QString name;
                 if (context->lookupProperty(QString(), binding->qualifiedId, &propertyType, &containingObject, &name) || isPropertyChangesType(typeName)) {
-                    AbstractProperty modelProperty = modelNode.property(astPropertyName);
+                    AbstractProperty modelProperty = modelNode.property(astPropertyName.toUtf8());
                     if (context->isArrayProperty(propertyType, containingObject, name))
                         syncArrayProperty(modelProperty, QList<QmlJS::AST::UiObjectMember*>() << member, context, differenceHandler);
                     else
                         syncNodeProperty(modelProperty, binding, context, differenceHandler);
-                    modelPropertyNames.remove(astPropertyName);
+                    modelPropertyNames.remove(astPropertyName.toUtf8());
                 } else {
                     qWarning() << "Skipping invalid node property" << astPropertyName
                                << "for node type" << modelNode.type();
@@ -971,15 +977,15 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
                 astValue = textAt(context->doc(),
                                   property->statement->firstSourceLocation(),
                                   property->statement->lastSourceLocation());
-            const QString &astType = property->memberType.toString();
-            AbstractProperty modelProperty = modelNode.property(astName);
+            const TypeName &astType = property->memberType.toUtf8();
+            AbstractProperty modelProperty = modelNode.property(astName.toUtf8());
             if (!property->statement || isLiteralValue(property->statement)) {
                 const QVariant variantValue = convertDynamicPropertyValueToVariant(astValue, astType);
                 syncVariantProperty(modelProperty, variantValue, astType, differenceHandler);
             } else {
                 syncExpressionProperty(modelProperty, astValue, astType, differenceHandler);
             }
-            modelPropertyNames.remove(astName);
+            modelPropertyNames.remove(astName.toUtf8());
         } else {
             qWarning() << "Found an unknown QML value.";
         }
@@ -1005,11 +1011,11 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
         }
     }
 
-    foreach (const QString &modelPropertyName, modelPropertyNames) {
+    foreach (const PropertyName &modelPropertyName, modelPropertyNames) {
         AbstractProperty modelProperty = modelNode.property(modelPropertyName);
 
         // property deleted.
-        if (modelPropertyName == QLatin1String("id"))
+        if (modelPropertyName == "id")
             differenceHandler.idsDiffer(modelNode, QString());
         else
             differenceHandler.propertyAbsentFromQml(modelProperty);
@@ -1018,7 +1024,7 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
     context->leaveScope();
 }
 
-QString TextToModelMerger::syncScriptBinding(ModelNode &modelNode,
+QmlDesigner::PropertyName TextToModelMerger::syncScriptBinding(ModelNode &modelNode,
                                              const QString &prefix,
                                              UiScriptBinding *script,
                                              ReadingContext *context,
@@ -1041,46 +1047,46 @@ QString TextToModelMerger::syncScriptBinding(ModelNode &modelNode,
 
     if (astPropertyName == QLatin1String("id")) {
         syncNodeId(modelNode, astValue, differenceHandler);
-        return astPropertyName;
+        return astPropertyName.toUtf8();
     }
 
     if (isSignalPropertyName(astPropertyName))
-        return QString();
+        return PropertyName();
 
     if (isLiteralValue(script)) {
         if (isPropertyChangesType(modelNode.type())) {
-            AbstractProperty modelProperty = modelNode.property(astPropertyName);
+            AbstractProperty modelProperty = modelNode.property(astPropertyName.toUtf8());
             const QVariant variantValue(deEscape(stripQuotes(astValue)));
-            syncVariantProperty(modelProperty, variantValue, QString(), differenceHandler);
-            return astPropertyName;
+            syncVariantProperty(modelProperty, variantValue, TypeName(), differenceHandler);
+            return astPropertyName.toUtf8();
         } else {
             const QVariant variantValue = context->convertToVariant(astValue, prefix, script->qualifiedId);
             if (variantValue.isValid()) {
-                AbstractProperty modelProperty = modelNode.property(astPropertyName);
-                syncVariantProperty(modelProperty, variantValue, QString(), differenceHandler);
-                return astPropertyName;
+                AbstractProperty modelProperty = modelNode.property(astPropertyName.toUtf8());
+                syncVariantProperty(modelProperty, variantValue, TypeName(), differenceHandler);
+                return astPropertyName.toUtf8();
             } else {
                 qWarning() << "Skipping invalid variant property" << astPropertyName
                            << "for node type" << modelNode.type();
-                return QString();
+                return PropertyName();
             }
         }
     }
 
     const QVariant enumValue = context->convertToEnum(script->statement, prefix, script->qualifiedId);
     if (enumValue.isValid()) { // It is a qualified enum:
-        AbstractProperty modelProperty = modelNode.property(astPropertyName);
-        syncVariantProperty(modelProperty, enumValue, QString(), differenceHandler); // TODO: parse type
-        return astPropertyName;
+        AbstractProperty modelProperty = modelNode.property(astPropertyName.toUtf8());
+        syncVariantProperty(modelProperty, enumValue, TypeName(), differenceHandler); // TODO: parse type
+        return astPropertyName.toUtf8();
     } else { // Not an enum, so:
         if (isPropertyChangesType(modelNode.type()) || context->lookupProperty(prefix, script->qualifiedId)) {
-            AbstractProperty modelProperty = modelNode.property(astPropertyName);
-            syncExpressionProperty(modelProperty, astValue, QString(), differenceHandler); // TODO: parse type
-            return astPropertyName;
+            AbstractProperty modelProperty = modelNode.property(astPropertyName.toUtf8());
+            syncExpressionProperty(modelProperty, astValue, TypeName(), differenceHandler); // TODO: parse type
+            return astPropertyName.toUtf8();
         } else {
             qWarning() << "Skipping invalid expression property" << astPropertyName
                     << "for node type" << modelNode.type();
-            return QString();
+            return PropertyName();
         }
     }
 }
@@ -1110,10 +1116,13 @@ void TextToModelMerger::syncNodeProperty(AbstractProperty &modelProperty,
                                          ReadingContext *context,
                                          DifferenceHandler &differenceHandler)
 {
-    QString typeName, dummy;
+    QString typeNameString;
+    QString dummy;
     int majorVersion;
     int minorVersion;
-    context->lookup(binding->qualifiedTypeNameId, typeName, majorVersion, minorVersion, dummy);
+    context->lookup(binding->qualifiedTypeNameId, typeNameString, majorVersion, minorVersion, dummy);
+
+    TypeName typeName = typeNameString.toUtf8();
 
     if (typeName.isEmpty()) {
         qWarning() << "Skipping node with unknown type" << toString(binding->qualifiedTypeNameId);
@@ -1128,13 +1137,14 @@ void TextToModelMerger::syncNodeProperty(AbstractProperty &modelProperty,
                                                typeName,
                                                majorVersion,
                                                minorVersion,
-                                               binding, context);
+                                               binding,
+                                               context);
     }
 }
 
 void TextToModelMerger::syncExpressionProperty(AbstractProperty &modelProperty,
                                                const QString &javascript,
-                                               const QString &astType,
+                                               const TypeName &astType,
                                                DifferenceHandler &differenceHandler)
 {
     if (modelProperty.isBindingProperty()) {
@@ -1166,7 +1176,7 @@ void TextToModelMerger::syncArrayProperty(AbstractProperty &modelProperty,
 
 void TextToModelMerger::syncVariantProperty(AbstractProperty &modelProperty,
                                             const QVariant &astValue,
-                                            const QString &astType,
+                                            const TypeName &astType,
                                             DifferenceHandler &differenceHandler)
 {
     if (modelProperty.isVariantProperty()) {
@@ -1211,7 +1221,7 @@ void TextToModelMerger::syncNodeListProperty(NodeListProperty &modelListProperty
     }
 }
 
-ModelNode TextToModelMerger::createModelNode(const QString &typeName,
+ModelNode TextToModelMerger::createModelNode(const TypeName &typeName,
                                              int majorVersion,
                                              int minorVersion,
                                              bool isImplicitComponent,
@@ -1292,7 +1302,7 @@ void ModelValidator::importAbsentInQMl(const QmlDesigner::Import &import)
 
 void ModelValidator::bindingExpressionsDiffer(BindingProperty &modelProperty,
                                               const QString &javascript,
-                                              const QString &astType)
+                                              const TypeName &astType)
 {
     Q_UNUSED(modelProperty)
     Q_UNUSED(javascript)
@@ -1304,7 +1314,7 @@ void ModelValidator::bindingExpressionsDiffer(BindingProperty &modelProperty,
 
 void ModelValidator::shouldBeBindingProperty(AbstractProperty &modelProperty,
                                              const QString &/*javascript*/,
-                                             const QString &/*astType*/)
+                                             const TypeName &/*astType*/)
 {
     Q_UNUSED(modelProperty)
     Q_ASSERT(modelProperty.isBindingProperty());
@@ -1320,7 +1330,7 @@ void ModelValidator::shouldBeNodeListProperty(AbstractProperty &modelProperty,
     Q_ASSERT(0);
 }
 
-void ModelValidator::variantValuesDiffer(VariantProperty &modelProperty, const QVariant &qmlVariantValue, const QString &dynamicTypeName)
+void ModelValidator::variantValuesDiffer(VariantProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicTypeName)
 {
     Q_UNUSED(modelProperty)
     Q_UNUSED(qmlVariantValue)
@@ -1335,7 +1345,7 @@ void ModelValidator::variantValuesDiffer(VariantProperty &modelProperty, const Q
     Q_ASSERT(0);
 }
 
-void ModelValidator::shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &/*qmlVariantValue*/, const QString &/*dynamicTypeName*/)
+void ModelValidator::shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &/*qmlVariantValue*/, const TypeName &/*dynamicTypeName*/)
 {
     Q_UNUSED(modelProperty)
 
@@ -1344,7 +1354,7 @@ void ModelValidator::shouldBeVariantProperty(AbstractProperty &modelProperty, co
 }
 
 void ModelValidator::shouldBeNodeProperty(AbstractProperty &modelProperty,
-                                          const QString &/*typeName*/,
+                                          const TypeName &/*typeName*/,
                                           int /*majorVersion*/,
                                           int /*minorVersion*/,
                                           UiObjectMember * /*astNode*/,
@@ -1374,7 +1384,7 @@ ModelNode ModelValidator::listPropertyMissingModelNode(NodeListProperty &/*model
 
 void ModelValidator::typeDiffers(bool /*isRootNode*/,
                                  ModelNode &modelNode,
-                                 const QString &typeName,
+                                 const TypeName &typeName,
                                  int majorVersion,
                                  int minorVersion,
                                  QmlJS::AST::UiObjectMember * /*astNode*/,
@@ -1420,7 +1430,7 @@ void ModelAmender::importAbsentInQMl(const QmlDesigner::Import &import)
 
 void ModelAmender::bindingExpressionsDiffer(BindingProperty &modelProperty,
                                             const QString &javascript,
-                                            const QString &astType)
+                                            const TypeName &astType)
 {
     if (astType.isEmpty())
         modelProperty.setExpression(javascript);
@@ -1430,7 +1440,7 @@ void ModelAmender::bindingExpressionsDiffer(BindingProperty &modelProperty,
 
 void ModelAmender::shouldBeBindingProperty(AbstractProperty &modelProperty,
                                            const QString &javascript,
-                                           const QString &astType)
+                                           const TypeName &astType)
 {
     ModelNode theNode = modelProperty.parentModelNode();
     BindingProperty newModelProperty = theNode.bindingProperty(modelProperty.name());
@@ -1454,7 +1464,7 @@ void ModelAmender::shouldBeNodeListProperty(AbstractProperty &modelProperty,
 
 
 
-void ModelAmender::variantValuesDiffer(VariantProperty &modelProperty, const QVariant &qmlVariantValue, const QString &dynamicType)
+void ModelAmender::variantValuesDiffer(VariantProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicType)
 {
 //    qDebug()<< "ModelAmender::variantValuesDiffer for property"<<modelProperty.name()
 //            << "in node" << modelProperty.parentModelNode().id()
@@ -1467,7 +1477,7 @@ void ModelAmender::variantValuesDiffer(VariantProperty &modelProperty, const QVa
         modelProperty.setDynamicTypeNameAndValue(dynamicType, qmlVariantValue);
 }
 
-void ModelAmender::shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &qmlVariantValue, const QString &dynamicTypeName)
+void ModelAmender::shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicTypeName)
 {
     ModelNode theNode = modelProperty.parentModelNode();
     VariantProperty newModelProperty = theNode.variantProperty(modelProperty.name());
@@ -1479,7 +1489,7 @@ void ModelAmender::shouldBeVariantProperty(AbstractProperty &modelProperty, cons
 }
 
 void ModelAmender::shouldBeNodeProperty(AbstractProperty &modelProperty,
-                                        const QString &typeName,
+                                        const TypeName &typeName,
                                         int majorVersion,
                                         int minorVersion,
                                         UiObjectMember *astNode,
@@ -1527,10 +1537,14 @@ ModelNode ModelAmender::listPropertyMissingModelNode(NodeListProperty &modelProp
     if (!astObjectType || !astInitializer)
         return ModelNode();
 
-    QString typeName, fullTypeName, dummy;
+    QString typeNameString;
+    QString fullTypeName;
+    QString dummy;
     int majorVersion;
     int minorVersion;
-    context->lookup(astObjectType, typeName, majorVersion, minorVersion, dummy);
+    context->lookup(astObjectType, typeNameString, majorVersion, minorVersion, dummy);
+
+    TypeName typeName = typeNameString.toUtf8();
 
     if (typeName.isEmpty()) {
         qWarning() << "Skipping node with unknown type" << toString(astObjectType);
@@ -1567,7 +1581,7 @@ ModelNode ModelAmender::listPropertyMissingModelNode(NodeListProperty &modelProp
 
 void ModelAmender::typeDiffers(bool isRootNode,
                                ModelNode &modelNode,
-                               const QString &typeName,
+                               const TypeName &typeName,
                                int majorVersion,
                                int minorVersion,
                                QmlJS::AST::UiObjectMember *astNode,
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h
index 2299f8e9c6d45fb63263c4537a617bf9fc22a27b..81c4797d6f70be7d0ba7ac37a5385d4330bd5aaa 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h
@@ -79,7 +79,7 @@ public:
                   QmlJS::AST::UiObjectMember *astNode,
                   ReadingContext *context,
                   DifferenceHandler &differenceHandler);
-    QString syncScriptBinding(ModelNode &modelNode,
+    QmlDesigner::PropertyName syncScriptBinding(ModelNode &modelNode,
                               const QString &prefix,
                               QmlJS::AST::UiScriptBinding *script,
                               ReadingContext *context,
@@ -92,7 +92,7 @@ public:
                           DifferenceHandler &differenceHandler);
     void syncExpressionProperty(AbstractProperty &modelProperty,
                                 const QString &javascript,
-                                const QString &astType,
+                                const TypeName &astType,
                                 DifferenceHandler &differenceHandler);
     void syncArrayProperty(AbstractProperty &modelProperty,
                            const QList<QmlJS::AST::UiObjectMember *> &arrayMembers,
@@ -100,13 +100,13 @@ public:
                            DifferenceHandler &differenceHandler);
     void syncVariantProperty(AbstractProperty &modelProperty,
                              const QVariant &astValue,
-                             const QString &astType,
+                             const TypeName &astType,
                              DifferenceHandler &differenceHandler);
     void syncNodeListProperty(NodeListProperty &modelListProperty,
                               const QList<QmlJS::AST::UiObjectMember *> arrayMembers,
                               ReadingContext *context,
                               DifferenceHandler &differenceHandler);
-    ModelNode createModelNode(const QString &typeName,
+    ModelNode createModelNode(const TypeName &typeName,
                               int majorVersion,
                               int minorVersion,
                               bool isImplicitComponent,
@@ -157,17 +157,17 @@ public:
     virtual void importAbsentInQMl(const QmlDesigner::Import &import) = 0;
     virtual void bindingExpressionsDiffer(BindingProperty &modelProperty,
                                           const QString &javascript,
-                                          const QString &astType) = 0;
+                                          const TypeName &astType) = 0;
     virtual void shouldBeBindingProperty(AbstractProperty &modelProperty,
                                          const QString &javascript,
-                                         const QString &astType) = 0;
+                                         const TypeName &astType) = 0;
     virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty,
                                           const QList<QmlJS::AST::UiObjectMember *> arrayMembers,
                                           ReadingContext *context) = 0;
-    virtual void variantValuesDiffer(VariantProperty &modelProperty, const QVariant &qmlVariantValue, const QString &dynamicTypeName) = 0;
-    virtual void shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &qmlVariantValue, const QString &dynamicTypeName) = 0;
+    virtual void variantValuesDiffer(VariantProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicTypeName) = 0;
+    virtual void shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicTypeName) = 0;
     virtual void shouldBeNodeProperty(AbstractProperty &modelProperty,
-                                      const QString &typeName,
+                                      const TypeName &typeName,
                                       int majorVersion,
                                       int minorVersion,
                                       QmlJS::AST::UiObjectMember *astNode,
@@ -178,7 +178,7 @@ public:
                                                    QmlJS::AST::UiObjectMember *arrayMember) = 0;
     virtual void typeDiffers(bool isRootNode,
                              ModelNode &modelNode,
-                             const QString &typeName,
+                             const TypeName &typeName,
                              int majorVersion,
                              int minorVersion,
                              QmlJS::AST::UiObjectMember *astNode,
@@ -204,17 +204,17 @@ public:
     virtual void importAbsentInQMl(const QmlDesigner::Import &import);
     virtual void bindingExpressionsDiffer(BindingProperty &modelProperty,
                                           const QString &javascript,
-                                          const QString &astType);
+                                          const TypeName &astType);
     virtual void shouldBeBindingProperty(AbstractProperty &modelProperty,
                                          const QString &javascript,
-                                         const QString &astType);
+                                         const TypeName &astType);
     virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty,
                                           const QList<QmlJS::AST::UiObjectMember *> arrayMembers,
                                           ReadingContext *context);
-    virtual void variantValuesDiffer(VariantProperty &modelProperty, const QVariant &qmlVariantValue, const QString &dynamicTypeName);
-    virtual void shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &qmlVariantValue, const QString &dynamicTypeName);
+    virtual void variantValuesDiffer(VariantProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicTypeName);
+    virtual void shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicTypeName);
     virtual void shouldBeNodeProperty(AbstractProperty &modelProperty,
-                                      const QString &typeName,
+                                      const TypeName &typeName,
                                       int majorVersion,
                                       int minorVersion,
                                       QmlJS::AST::UiObjectMember *astNode,
@@ -225,7 +225,7 @@ public:
                                                    QmlJS::AST::UiObjectMember *arrayMember);
     virtual void typeDiffers(bool isRootNode,
                              ModelNode &modelNode,
-                             const QString &typeName,
+                             const TypeName &typeName,
                              int majorVersion,
                              int minorVersion,
                              QmlJS::AST::UiObjectMember *astNode,
@@ -248,17 +248,17 @@ public:
     virtual void importAbsentInQMl(const QmlDesigner::Import &import);
     virtual void bindingExpressionsDiffer(BindingProperty &modelProperty,
                                           const QString &javascript,
-                                          const QString &astType);
+                                          const TypeName &astType);
     virtual void shouldBeBindingProperty(AbstractProperty &modelProperty,
                                          const QString &javascript,
-                                         const QString &astType);
+                                         const TypeName &astType);
     virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty,
                                           const QList<QmlJS::AST::UiObjectMember *> arrayMembers,
                                           ReadingContext *context);
-    virtual void variantValuesDiffer(VariantProperty &modelProperty, const QVariant &qmlVariantValue, const QString &dynamicType);
-    virtual void shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &qmlVariantValue, const QString &dynamicTypeName);
+    virtual void variantValuesDiffer(VariantProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicType);
+    virtual void shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicTypeName);
     virtual void shouldBeNodeProperty(AbstractProperty &modelProperty,
-                                      const QString &typeName,
+                                      const TypeName &typeName,
                                       int majorVersion,
                                       int minorVersion,
                                       QmlJS::AST::UiObjectMember *astNode,
@@ -269,7 +269,7 @@ public:
                                                    QmlJS::AST::UiObjectMember *arrayMember);
     virtual void typeDiffers(bool isRootNode,
                              ModelNode &modelNode,
-                             const QString &typeName,
+                             const TypeName &typeName,
                              int majorVersion,
                              int minorVersion,
                              QmlJS::AST::UiObjectMember *astNode,
diff --git a/src/plugins/qmldesigner/designercore/model/variantproperty.cpp b/src/plugins/qmldesigner/designercore/model/variantproperty.cpp
index a8418b5e8fc169c74502cbe4adb5569336820bc5..17f661be87ebf2c2dcb3044a0b7560c30ca9d93f 100644
--- a/src/plugins/qmldesigner/designercore/model/variantproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/variantproperty.cpp
@@ -50,7 +50,7 @@ VariantProperty::VariantProperty(const VariantProperty &property, AbstractView *
 
 }
 
-VariantProperty::VariantProperty(const QString &propertyName, const Internal::InternalNodePointer &internalNode, Model* model,  AbstractView *view) :
+VariantProperty::VariantProperty(const PropertyName &propertyName, const Internal::InternalNodePointer &internalNode, Model* model,  AbstractView *view) :
         AbstractProperty(propertyName, internalNode, model, view)
 {
 }
@@ -95,7 +95,7 @@ VariantProperty& VariantProperty::operator= (const QVariant &value)
     return *this;
 }
 
-void VariantProperty::setDynamicTypeNameAndValue(const QString &type, const QVariant &value)
+void VariantProperty::setDynamicTypeNameAndValue(const TypeName &type, const QVariant &value)
 {
     Internal::WriteLocker locker(model());
     if (!isValid())
@@ -120,16 +120,6 @@ void VariantProperty::setDynamicTypeNameAndValue(const QString &type, const QVar
      model()->d->setDynamicVariantProperty(internalNode(), name(), type, value);
 }
 
-VariantProperty& VariantProperty::operator= (const QPair<QString, QVariant> &typeValuePair)
-{
-    setDynamicTypeNameAndValue(typeValuePair.first, typeValuePair.second);
-    return *this;
-}
-
-
-
-
-
 QDebug operator<<(QDebug debug, const VariantProperty &VariantProperty)
 {
     return debug.nospace() << "VariantProperty(" << VariantProperty.name() << ')';
diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp
index 584ff80b2e175757d4d968780efafbe8160412e1..8f0bc670f690bd8a37688bfe4b15511e525d4c72 100644
--- a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp
@@ -205,9 +205,9 @@ void ViewLogger::scriptFunctionsChanged(const ModelNode &node, const QStringList
     m_output << time() << indent("function scripts changed:") << node << endl;
 }
 
-void ViewLogger::instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList)
+void ViewLogger::instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList)
 {
-    typedef QPair<ModelNode, QString> PropertyPair;
+    typedef QPair<ModelNode, PropertyName> PropertyPair;
     m_output << time() << indent("instancePropertyChange:") << endl;
 
     foreach (const PropertyPair &propertyPair, propertyList)
diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.h b/src/plugins/qmldesigner/designercore/model/viewlogger.h
index 58ca0c167cdf7a9c5b9740931a6883e9d86ba3eb..4cfbbc2708513070cbf4890895ea899b1519e1ff 100644
--- a/src/plugins/qmldesigner/designercore/model/viewlogger.h
+++ b/src/plugins/qmldesigner/designercore/model/viewlogger.h
@@ -72,7 +72,7 @@ public:
 
     void customNotification(const AbstractView *view, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data);
     void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList);
-    void instancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyList);
+    void instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList);
     void instancesCompleted(const QVector<ModelNode> &completedNodeList);
     void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
     void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
diff --git a/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginpath.cpp b/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginpath.cpp
index bdd91667a2f742a3fc9db7541fe520afaec7648a..e161303884310ea6254f368b539e0714d5b55d08 100644
--- a/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginpath.cpp
+++ b/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginpath.cpp
@@ -196,7 +196,7 @@ QStandardItem *WidgetPluginPath::createModelItem()
     for (PluginDataList::iterator it = m_plugins.begin(); it != end; ++it) {
         QStandardItem *pluginItem = new QStandardItem(QFileInfo(it->path).fileName());
         if (instance(*it)) {
-            pluginItem->appendRow(new QStandardItem(QString::fromLatin1(it->instanceGuard->metaObject()->className())));
+            pluginItem->appendRow(new QStandardItem(QString::fromUtf8(it->instanceGuard->metaObject()->className())));
             pathItem->appendRow(pluginItem);
         } else {
             pluginItem->setToolTip(it->errorMessage);
diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp
index 3e7811f2e33335c2eba2a9c970ae916a8dc63439..46a9f778f4761b3d70b7dd2adf72e123887cf53c 100644
--- a/src/plugins/qmldesigner/designmodewidget.cpp
+++ b/src/plugins/qmldesigner/designmodewidget.cpp
@@ -345,7 +345,7 @@ void DesignModeWidget::setup()
             QByteArray sheet = Utils::FileReader::fetchQrc(":/qmldesigner/stylesheet.css");
             sheet += Utils::FileReader::fetchQrc(":/qmldesigner/scrollbar.css");
             sheet += "QLabel { background-color: #4f4f4f; }";
-            navigationView.widget->setStyleSheet(QString::fromLatin1(sheet));
+            navigationView.widget->setStyleSheet(QString::fromUtf8(sheet));
         }
     }
 
diff --git a/src/plugins/qmldesigner/styledoutputpaneplaceholder.cpp b/src/plugins/qmldesigner/styledoutputpaneplaceholder.cpp
index fcf1d3b1232f5479bbd7c70e7d896b6524771b35..89ca973e9b40bdccfd3c27bf0d886fb4163ea567 100644
--- a/src/plugins/qmldesigner/styledoutputpaneplaceholder.cpp
+++ b/src/plugins/qmldesigner/styledoutputpaneplaceholder.cpp
@@ -41,7 +41,7 @@ StyledOutputpanePlaceHolder::StyledOutputpanePlaceHolder(Core::IMode *mode, QSpl
 {
     QByteArray sheet = Utils::FileReader::fetchQrc(":/qmldesigner/outputpane-style.css");
     sheet += Utils::FileReader::fetchQrc(":/qmldesigner/scrollbar.css");
-    m_customStylesheet = QString::fromLatin1(sheet);
+    m_customStylesheet = QString::fromUtf8(sheet);
 }
 
 void StyledOutputpanePlaceHolder::childEvent(QChildEvent *event)