diff --git a/src/plugins/qmldesigner/core/instances/qmlpropertychangesnodeinstance.cpp b/src/plugins/qmldesigner/core/instances/qmlpropertychangesnodeinstance.cpp
index 517dfb48435bed5e6acfc692b2ef44bd1a177a8f..ea2ea618217377635c46ba070c98ef4ac0a66c02 100644
--- a/src/plugins/qmldesigner/core/instances/qmlpropertychangesnodeinstance.cpp
+++ b/src/plugins/qmldesigner/core/instances/qmlpropertychangesnodeinstance.cpp
@@ -85,24 +85,33 @@ QObject *QmlPropertyChangesObject::targetObject() const
 
 void QmlPropertyChangesObject::setTargetObject(QObject *object)
 {
+    QMutableListIterator<QDeclarativeAction> actionIterator(m_qmlActionList);
+    while (actionIterator.hasNext()) {
+         QDeclarativeAction &qmlAction = actionIterator.next();
+         if (m_expressionHash.contains(qmlAction.specifiedProperty) && m_expressionHash[qmlAction.specifiedProperty].second) {
+             if (isActive()) {
+                 QDeclarativePropertyPrivate::setBinding(qmlAction.property, 0, QDeclarativePropertyPrivate::DontRemoveBinding| QDeclarativePropertyPrivate::BypassInterceptor);
+                 qmlAction.property.write(qmlAction.fromValue);
+             }
+
+             m_expressionHash[qmlAction.specifiedProperty].second.data()->destroy();
+             qmlAction.toBinding = 0;
+         }
+
+         if (isActive() && targetObject()) {
+             updateRevertValueAndBinding(qmlAction.specifiedProperty);
+         }
+    }
+
     m_targetObject = object;
 
-    QMutableListIterator<QDeclarativeAction> actionIterator(m_qmlActionList);
+    actionIterator.toFront();
     while (actionIterator.hasNext()) {
         QDeclarativeAction &qmlAction = actionIterator.next();
         qmlAction.specifiedObject = object;
         qmlAction.property = createMetaProperty(qmlAction.specifiedProperty);
         qmlAction.fromValue = qmlAction.property.read();
         qmlAction.fromBinding = QDeclarativePropertyPrivate::binding(qmlAction.property);
-        if (m_expressionHash.contains(qmlAction.specifiedProperty) && m_expressionHash[qmlAction.specifiedProperty].second) {
-            if (isActive()) {
-                QDeclarativePropertyPrivate::setBinding(qmlAction.property, 0, QDeclarativePropertyPrivate::DontRemoveBinding| QDeclarativePropertyPrivate::BypassInterceptor);
-                qmlAction.property.write(qmlAction.fromValue);
-            }
-
-            m_expressionHash[qmlAction.specifiedProperty].second.data()->destroy();
-            qmlAction.toBinding = 0;
-        }
 
         if (m_expressionHash.contains(qmlAction.specifiedProperty) && targetObject()) {
             QDeclarativeBinding *binding = new QDeclarativeBinding(m_expressionHash[qmlAction.specifiedProperty].first ,targetObject(), QDeclarativeEngine::contextForObject(targetObject()));
@@ -443,6 +452,7 @@ void QmlPropertyChangesObject::setExpression(const QString &name, const QString
         if (QDeclarativePropertyPrivate::binding(metaProperty) == m_expressionHash[name].second.data())
             QDeclarativePropertyPrivate::setBinding(metaProperty, 0,  QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding);
         m_expressionHash.take(name).second->destroy();
+        qmlAction.toBinding = 0;
     }
 
 
@@ -457,7 +467,7 @@ void QmlPropertyChangesObject::setExpression(const QString &name, const QString
     }
 
     updateRevertValueAndBinding(name);
-    if (isActive())
+    if (isActive() && binding)
         QDeclarativePropertyPrivate::setBinding(metaProperty, binding,  QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding);
 }