diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstance.h b/src/plugins/qmldesigner/designercore/include/nodeinstance.h
index a741f53b6932867c0cd574e31b2b13da834e363d..d0a6a9071b981c260a59dd7b68b9bc4d7d027bb8 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeinstance.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeinstance.h
@@ -120,6 +120,8 @@ public:
     QVariant defaultValue(const QString &name) const;
     QString instanceType(const QString &name) const;
 
+    bool hasBindingForProperty(const QString &name) const;
+
     bool isValid() const;
     void makeInvalid();
     bool hasContent() const;
diff --git a/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h b/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h
index e04c8fffff60e7a9f482e879f23073400cd315e3..93009814400e1b8ae826fc8716ad88905130de4b 100644
--- a/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h
+++ b/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h
@@ -67,6 +67,7 @@ public:
 
     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;
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
index 09a4ee7bc3fbd95e548dbdfff7a5c9945fc8ecb4..d65fb2feac7c83dff5f6ea9a8e521b7e6098521c 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
@@ -418,6 +418,11 @@ QVariant NodeInstance::property(const QString &name) const
     return m_nodeInstance->property(name);
 }
 
+bool NodeInstance::hasBindingForProperty(const QString &name) const
+{
+    return m_nodeInstance->hasBindingForProperty(name);
+}
+
 /*!
 \brief Returns the property default value of the property of this NodeInstance.
 \returns QVariant default value which is the reset value to
diff --git a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp
index fe43cdd5b97a65b36fe044fd851a3e981d456732..5326c7945064db2c68e0a8a6bd2b2528ec374162 100644
--- a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp
@@ -548,6 +548,13 @@ void ObjectNodeInstance::refreshProperty(const QString &name)
     property.write(oldValue);
 }
 
+bool ObjectNodeInstance::hasBindingForProperty(const QString &name) const
+{
+    QDeclarativeProperty property(object(), name, context());
+
+    return QDeclarativePropertyPrivate::binding(property);
+}
+
 void ObjectNodeInstance::doResetProperty(const QString &propertyName)
 {
     m_modelAbstractPropertyHash.remove(propertyName);
diff --git a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h
index 982292fb3cadb5adcf083147a583dad4342a52a2..aaa0d6a9ceb4f8db6b6a35acd6b4b3d8117218c7 100644
--- a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h
+++ b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h
@@ -163,6 +163,8 @@ public:
 
     virtual bool hasContent() const;
 
+    bool hasBindingForProperty(const QString &name) const;
+
     QDeclarativeContext *context() const;
 
     virtual bool updateStateVariant(const NodeInstance &target, const QString &propertyName, const QVariant &value);
diff --git a/src/plugins/qmldesigner/designercore/instances/qmlpropertychangesnodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/qmlpropertychangesnodeinstance.cpp
index a427a09c961fe85cfe4b6fe0925665aa322b0137..372a0cfd7d923c4d61d60f2ef6610429c1cfe2da 100644
--- a/src/plugins/qmldesigner/designercore/instances/qmlpropertychangesnodeinstance.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/qmlpropertychangesnodeinstance.cpp
@@ -229,7 +229,11 @@ void QmlPropertyChangesNodeInstance::resetProperty(const QString &name)
 
 void QmlPropertyChangesNodeInstance::reparent(const NodeInstance &oldParentInstance, const QString &oldParentProperty, const NodeInstance &newParentInstance, const QString &newParentProperty)
 {
+    changesObject()->detachFromState();
+
     ObjectNodeInstance::reparent(oldParentInstance, oldParentProperty, newParentInstance, newParentProperty);
+
+    changesObject()->attachToState();
 }
 
 //QDeclarativeState *QmlPropertyChangesObject::state() const
diff --git a/src/plugins/qmldesigner/designercore/instances/qmlstatenodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/qmlstatenodeinstance.cpp
index 2abb34501b7a4a8c553d09a9a19fa750ab83768c..5a6da6ff110b3de0321a06aada85e59afc38a1d7 100644
--- a/src/plugins/qmldesigner/designercore/instances/qmlstatenodeinstance.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/qmlstatenodeinstance.cpp
@@ -100,9 +100,7 @@ QDeclarativeStateGroup *QmlStateNodeInstance::stateGroup() const
 
 bool QmlStateNodeInstance::isStateActive() const
 {
-    Q_ASSERT(stateObject());
-    Q_ASSERT(stateGroup());
-    return (stateGroup()->state() == property("name"));
+    return stateObject() && stateGroup() && stateGroup()->state() == property("name");
 }
 
 void QmlStateNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
@@ -137,7 +135,7 @@ bool QmlStateNodeInstance::updateStateBinding(const NodeInstance &target, const
 
 bool QmlStateNodeInstance::resetStateProperty(const NodeInstance &target, const QString &propertyName, const QVariant &resetValue)
 {
-    return stateObject()->removeEntryInRevertList(target.internalObject(), propertyName.toLatin1());
+    return stateObject()->removeEntryFromRevertList(target.internalObject(), propertyName.toLatin1());
 }
 
 } // namespace Internal
diff --git a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
index 85127ce0823177d97de0621ebe83e618b6f142fa..41ff3507249fa6409ed3e6bb3d627d2800608fac 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
@@ -47,7 +47,7 @@ void QmlObjectNode::setVariantProperty(const QString &name, const QVariant &valu
         throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
 
     if (isInBaseState()) {
-        modelNode().variantProperty(name) = value; //basestate
+        modelNode().variantProperty(name).setValue(value); //basestate
     } else {
         modelNode().validId();
 
@@ -95,7 +95,7 @@ instanciated instance of this object.
 */
 QVariant  QmlObjectNode::instanceValue(const QString &name) const
 {    
-    return instanceValue(modelNode(), name);
+    return nodeInstance().property(name);
 }
 
 
@@ -392,6 +392,15 @@ QString QmlObjectNode::instanceType(const QString &name) const
     return nodeInstance().instanceType(name);
 }
 
+bool QmlObjectNode::instanceHasBinding(const QString &name) const
+{
+    QmlModelView *modelView = qobject_cast<QmlModelView*>(modelNode().view());
+    if (!modelView)
+        throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
+
+    return nodeInstance().hasBindingForProperty(name);
+}
+
 NodeInstance QmlObjectNode::nodeInstance() const
 {
     return qmlModelView()->nodeInstanceView()->instanceForNode(modelNode());
diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
index fa2ac1b7684e216ccdd05bed6890f066ab1cb3d5..c5e6905b1ecea3262caf5ee7a4f39ddd7ab22c31 100644
--- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
+++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
@@ -4794,6 +4794,7 @@ void tst_TestCore::testInstancesBindingsInStatesStress()
             }
 
             QmlItemNode(node3).setBindingProperty("width", "parent.x + 30");
+            QVERIFY(QmlItemNode(node3).instanceHasBinding("width"));
             QCOMPARE(QmlItemNode(node3).instanceValue("width").toInt(), 130);
 
             view->setCurrentState(view->baseState());