diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
index 09e3d0e6b8f5f877d953d68256eb940e963d4074..dc2193224896aafc5a76f57e2e504b66bba92746 100644
--- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
+++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
@@ -4720,7 +4720,110 @@ void tst_TestCore::testInstancesNotInScene()
     node1.destroy();
 }
 
-void tst_TestCore::testQmlModelStatesInvalidForRemovedNodes()
+void TestCore::testInstancesBindingsInStatesStress()
+{
+    //This is a stress test to provoke a crash
+    for (int j=0;j<20;j++) {
+        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", "100");
+        QmlItemNode(node1).setVariantProperty("y", "100");
+
+
+        for (int i=0;i<4;i++) {
+            view->setCurrentState(view->baseState());
+
+            QmlItemNode(node2).setBindingProperty("x", "parent.x + 10");
+            QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 110);
+            view->setCurrentState(QmlItemNode(node1).states().state("state1"));
+            QmlItemNode(node2).setBindingProperty("x", "parent.x + 20");
+            QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 120);
+            QmlItemNode(node2).setBindingProperty("y", "parent.x + 20");
+            QCOMPARE(QmlItemNode(node2).instanceValue("y").toInt(), 120);
+
+            view->setCurrentState(QmlItemNode(node1).states().state("state2"));
+            QmlItemNode(node2).setBindingProperty("x", "parent.x + 30");
+            QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 130);
+            QmlItemNode(node2).setBindingProperty("y", "parent.x + 30");
+            QCOMPARE(QmlItemNode(node2).instanceValue("y").toInt(), 130);
+            QmlItemNode(node2).setBindingProperty("height", "this.is.no.proper.expression / 12 + 4");
+            QmlItemNode(node2).setVariantProperty("height", 0);
+
+
+            for (int c=0;c<10;c++) {
+                view->setCurrentState(QmlItemNode(node1).states().state("state1"));
+                QmlItemNode(node2).setBindingProperty("x", "parent.x + 20");
+                QmlItemNode(node2).setVariantProperty("x", "90");
+                QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 90);
+                QmlItemNode(node2).setBindingProperty("y", "parent.x + 20");
+                QmlItemNode(node2).setVariantProperty("y", "90");
+                view->setCurrentState(QmlItemNode(node1).states().state("state2"));
+                view->setCurrentState(view->baseState());
+                view->setCurrentState(QmlItemNode(node1).states().state("state1"));
+                QCOMPARE(QmlItemNode(node2).instanceValue("y").toInt(), 90);
+                QmlItemNode(node2).setBindingProperty("width", "parent.x + 30");
+                QCOMPARE(QmlItemNode(node2).instanceValue("width").toInt(), 130);
+                QmlItemNode(node2).setVariantProperty("width", "0");
+                view->setCurrentState(QmlItemNode(node1).states().state("state2"));
+                view->setCurrentState(view->baseState());
+                QmlItemNode(node1).setVariantProperty("x", "80");
+                QmlItemNode(node1).setVariantProperty("y", "80");
+                QmlItemNode(node1).setVariantProperty("x", "100");
+                QmlItemNode(node1).setVariantProperty("y", "100");
+            }
+
+            QmlItemNode(node3).setBindingProperty("width", "parent.x + 30");
+            QCOMPARE(QmlItemNode(node3).instanceValue("width").toInt(), 130);
+
+            view->setCurrentState(view->baseState());
+            QmlItemNode(node1).setVariantProperty("x", "80");
+            QmlItemNode(node1).setVariantProperty("y", "80");
+
+            view->setCurrentState(QmlItemNode(node1).states().state("state2"));
+
+            view->setCurrentState(QmlItemNode(node1).states().state("state1"));
+            QmlItemNode(node3).setVariantProperty("width", "90");
+
+            view->setCurrentState(QmlItemNode(node1).states().state(""));
+            view->setCurrentState(view->baseState());
+            QVERIFY(view->currentState().isBaseState());
+
+            QmlItemNode(node1).setVariantProperty("x", "100");
+            QmlItemNode(node1).setVariantProperty("y", "100");
+
+            QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 110);
+            QmlItemNode(node2).setBindingProperty("x", "parent.x + 20");
+            QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 120);
+            QmlItemNode(node2).setVariantProperty("x", "80");
+            QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 80);
+            view->setCurrentState(QmlItemNode(node1).states().state("state1"));
+            QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 90);
+        }
+    }
+}
+
+void TestCore::testQmlModelStatesInvalidForRemovedNodes()
 {
     QScopedPointer<Model> model(Model::create("Qt/Rectangle", 4, 7));
     QVERIFY(model.data());
diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.h b/tests/auto/qml/qmldesigner/coretests/tst_testcore.h
index 1ee76cd497346ac82254fe96628652def66281b9..6ed6091e189a23678e8ebe9de31a0a0a59f1a527 100644
--- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.h
+++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.h
@@ -149,6 +149,7 @@ private slots:
     void testInstancesStates();
     void testInstancesIdResolution();
     void testInstancesNotInScene();
+    void testInstancesBindingsInStates();
 
     //
     // integration tests