diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
index 2716ca01a78014d5444242ba37ebb305afbbcd74..fa2ac1b7684e216ccdd05bed6890f066ab1cb3d5 100644
--- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
+++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
@@ -4823,6 +4823,204 @@ void tst_TestCore::testInstancesBindingsInStatesStress()
     }
 }
 
+void tst_TestCore::testInstancesPropertyChangeTargets()
+{
+        //this tests checks if a change of the target of a CropertyChange 
+        //node is handled correctly
+
+        QScopedPointer<Model> model(Model::create("Qt/Rectangle", 4, 7));
+        QVERIFY(model.data());
+        QScopedPointer<TestView> view(new TestView);
+        QVERIFY(view.data());
+        model->attachView(view.data());
+
+        ModelNode node1 = view->createModelNode("Qt/Item", 4, 7);
+        node1.setId("node1");
+
+        view->rootModelNode().nodeListProperty("children").reparentHere(node1);
+
+        ModelNode node2 = view->createModelNode("Qt/Rectangle", 4, 7);
+        node2.setId("node2");
+
+        ModelNode node3 = view->createModelNode("Qt/Rectangle", 4, 7);
+        node3.setId("node3");
+
+        node1.nodeListProperty("children").reparentHere(node2);
+        node1.nodeListProperty("children").reparentHere(node3);
+
+        QmlItemNode(node1).states().addState("state1");
+        QmlItemNode(node1).states().addState("state2");
+
+        QmlItemNode(node1).setVariantProperty("x", 10);
+        QmlItemNode(node1).setVariantProperty("y", 10);
+
+        QCOMPARE(QmlItemNode(node1).instanceValue("x").toInt(), 10);
+        QCOMPARE(QmlItemNode(node1).instanceValue("y").toInt(), 10);
+
+        QmlItemNode(node2).setVariantProperty("x", 50);
+        QmlItemNode(node2).setVariantProperty("y", 50);
+
+        QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 50);
+        QCOMPARE(QmlItemNode(node2).instanceValue("y").toInt(), 50);
+
+        view->setCurrentState(QmlItemNode(node1).states().state("state1"));
+
+        QmlItemNode(node1).setVariantProperty("x", 20);
+        QmlItemNode(node1).setVariantProperty("y", 20);
+
+        QCOMPARE(QmlItemNode(node1).instanceValue("x").toInt(), 20);
+        QCOMPARE(QmlItemNode(node1).instanceValue("y").toInt(), 20);
+
+        view->setCurrentState(view->baseState());
+
+        QCOMPARE(QmlItemNode(node1).instanceValue("x").toInt(), 10);
+        QCOMPARE(QmlItemNode(node1).instanceValue("y").toInt(), 10);
+
+        view->setCurrentState(QmlItemNode(node1).states().state("state1"));
+
+        QCOMPARE(QmlItemNode(node1).instanceValue("x").toInt(), 20);
+        QCOMPARE(QmlItemNode(node1).instanceValue("y").toInt(), 20);
+
+        QmlPropertyChanges propertyChanges = QmlItemNode(node1).states().state("state1").propertyChanges(node1);
+        QVERIFY(propertyChanges.isValid());
+        QCOMPARE(propertyChanges.target().id(), QLatin1String("node1"));
+
+        view->setCurrentState(view->baseState()); //atm we only support this in the base state
+
+        propertyChanges.setTarget(node2);
+        QCOMPARE(propertyChanges.target().id(), QLatin1String("node2"));
+
+        view->setCurrentState(QmlItemNode(node1).states().state("state1"));
+
+        QCOMPARE(QmlItemNode(node1).instanceValue("x").toInt(), 10);
+        QCOMPARE(QmlItemNode(node1).instanceValue("y").toInt(), 10);
+
+        QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 20);
+        QCOMPARE(QmlItemNode(node2).instanceValue("y").toInt(), 20);
+        
+        QmlItemNode(node2).setBindingProperty("x", "node1.x + 20");
+        QmlItemNode(node2).setBindingProperty("y", "node1.y + 20");
+
+        QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 30);
+        QCOMPARE(QmlItemNode(node2).instanceValue("y").toInt(), 30);
+
+        view->setCurrentState(view->baseState());
+
+        QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 50);
+        QCOMPARE(QmlItemNode(node2).instanceValue("y").toInt(), 50);
+
+        view->setCurrentState(QmlItemNode(node1).states().state("state1"));
+
+        QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 30);
+        QCOMPARE(QmlItemNode(node2).instanceValue("y").toInt(), 30);
+
+        view->setCurrentState(view->baseState()); //atm we only support this in the base state
+
+        QCOMPARE(propertyChanges.target().id(), QLatin1String("node2"));
+
+        propertyChanges.setTarget(node3);
+        QCOMPARE(propertyChanges.target().id(), QLatin1String("node3"));
+
+        view->setCurrentState(QmlItemNode(node1).states().state("state1"));
+
+        //node3 is now the target of the PropertyChanges with the bindings
+
+        QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 50);
+        QCOMPARE(QmlItemNode(node2).instanceValue("y").toInt(), 50);
+
+        QCOMPARE(QmlItemNode(node3).instanceValue("x").toInt(), 30);
+        QCOMPARE(QmlItemNode(node3).instanceValue("y").toInt(), 30);
+}
+
+void tst_TestCore::testInstancesDeletePropertyChanges()
+{
+    QScopedPointer<Model> model(Model::create("Qt/Rectangle", 4, 7));
+        QVERIFY(model.data());
+        QScopedPointer<TestView> view(new TestView);
+        QVERIFY(view.data());
+        model->attachView(view.data());
+
+        ModelNode node1 = view->createModelNode("Qt/Item", 4, 7);
+        node1.setId("node1");
+
+        view->rootModelNode().nodeListProperty("children").reparentHere(node1);
+
+        ModelNode node2 = view->createModelNode("Qt/Rectangle", 4, 7);
+        node2.setId("node2");
+
+        ModelNode node3 = view->createModelNode("Qt/Rectangle", 4, 7);
+        node3.setId("node3");
+
+        node1.nodeListProperty("children").reparentHere(node2);
+        node1.nodeListProperty("children").reparentHere(node3);
+
+        QmlItemNode(node1).states().addState("state1");
+        QmlItemNode(node1).states().addState("state2");
+
+        QmlItemNode(node1).setVariantProperty("x", 10);
+        QmlItemNode(node1).setVariantProperty("y", 10);
+
+        QCOMPARE(QmlItemNode(node1).instanceValue("x").toInt(), 10);
+        QCOMPARE(QmlItemNode(node1).instanceValue("y").toInt(), 10);
+
+        QmlItemNode(node2).setVariantProperty("x", 50);
+        QmlItemNode(node2).setVariantProperty("y", 50);
+
+        QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 50);
+        QCOMPARE(QmlItemNode(node2).instanceValue("y").toInt(), 50);
+
+        view->setCurrentState(QmlItemNode(node1).states().state("state1"));
+
+        QmlItemNode(node1).setVariantProperty("x", 20);
+        QmlItemNode(node1).setVariantProperty("y", 20);
+
+        QCOMPARE(QmlItemNode(node1).instanceValue("x").toInt(), 20);
+        QCOMPARE(QmlItemNode(node1).instanceValue("y").toInt(), 20);
+
+        view->setCurrentState(view->baseState());
+
+        QCOMPARE(QmlItemNode(node1).instanceValue("x").toInt(), 10);
+        QCOMPARE(QmlItemNode(node1).instanceValue("y").toInt(), 10);
+
+        view->setCurrentState(QmlItemNode(node1).states().state("state1"));
+
+        QCOMPARE(QmlItemNode(node1).instanceValue("x").toInt(), 20);
+        QCOMPARE(QmlItemNode(node1).instanceValue("y").toInt(), 20);
+
+        QmlPropertyChanges propertyChanges = QmlItemNode(node1).states().state("state1").propertyChanges(node1);
+        QVERIFY(propertyChanges.isValid());
+        QCOMPARE(propertyChanges.target().id(), QLatin1String("node1"));
+
+        view->setCurrentState(view->baseState()); //atm we only support this in the base state
+
+        propertyChanges.modelNode().destroy();
+
+        view->setCurrentState(QmlItemNode(node1).states().state("state1"));
+
+        QCOMPARE(QmlItemNode(node1).instanceValue("x").toInt(), 10);
+        QCOMPARE(QmlItemNode(node1).instanceValue("y").toInt(), 10);
+
+        QmlItemNode(node2).setBindingProperty("x", "node1.x + 20");
+        QmlItemNode(node2).setBindingProperty("y", "node1.y + 20");
+
+        propertyChanges = QmlItemNode(node1).states().state("state1").propertyChanges(node2);
+        QVERIFY(propertyChanges.isValid());
+        QCOMPARE(propertyChanges.target().id(), QLatin1String("node2"));
+
+        QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 30);
+        QCOMPARE(QmlItemNode(node2).instanceValue("y").toInt(), 30);
+
+        view->setCurrentState(view->baseState()); //atm we only support this in the base state
+
+        propertyChanges.modelNode().destroy();
+
+        view->setCurrentState(QmlItemNode(node1).states().state("state1"));
+
+        QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 50);
+        QCOMPARE(QmlItemNode(node2).instanceValue("y").toInt(), 50);
+
+}
+
 void tst_TestCore::testQmlModelStatesInvalidForRemovedNodes()
 {
     QScopedPointer<Model> model(Model::create("Qt/Rectangle", 4, 7));
diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.h b/tests/auto/qml/qmldesigner/coretests/tst_testcore.h
index 3efacec9688a7c06ffc1ceb16ec9c11f26d7fe96..1904f7246eb39a80025284cb9db080d80bf97717 100644
--- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.h
+++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.h
@@ -150,6 +150,8 @@ private slots:
     void testInstancesIdResolution();
     void testInstancesNotInScene();
     void testInstancesBindingsInStatesStress();
+    void testInstancesPropertyChangeTargets();
+    void testInstancesDeletePropertyChanges();
 
     //
     // integration tests