diff --git a/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.cpp b/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.cpp
index a99742dc7788111dfda68b0a561118e4152235c2..befbc524eeafc75916e39bb65585bdc90ae103fb 100644
--- a/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.cpp
+++ b/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.cpp
@@ -8,18 +8,20 @@
 namespace QmlDesigner {
 namespace Internal {
 
-NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstance::Pointer &nodeInstance)
-    : QDeclarativeOpenMetaObject(nodeInstance->object()),
+NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstance::Pointer &nodeInstance, QDeclarativeEngine *engine)
+    : QDeclarativeOpenMetaObject(nodeInstance->object(), new QDeclarativeOpenMetaObjectType(nodeInstance->object()->metaObject(), engine)),
     m_nodeInstance(nodeInstance),
     m_context(nodeInstance->modelNode().isRootNode() ? nodeInstance->context() : 0)
 {
+    setCached(true);
 }
 
-NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix)
-    : QDeclarativeOpenMetaObject(object),
+NodeInstanceMetaObject::NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix, QDeclarativeEngine *engine)
+    : QDeclarativeOpenMetaObject(object, new QDeclarativeOpenMetaObjectType(object->metaObject(), engine)),
     m_nodeInstance(nodeInstance),
     m_prefix(prefix)
 {
+    setCached(true);
 }
 
 void NodeInstanceMetaObject::createNewProperty(const QString &name)
diff --git a/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.h b/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.h
index 9a877f2322bcc24190301e556a4fafa286cf7fd6..795c51718960d3b443bff24c3f0c47141c7e7a76 100644
--- a/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.h
+++ b/src/plugins/qmldesigner/core/instances/nodeinstancemetaobject.h
@@ -14,8 +14,8 @@ typedef QWeakPointer<ObjectNodeInstance> ObjectNodeInstanceWeakPointer;
 class NodeInstanceMetaObject : public QDeclarativeOpenMetaObject
 {
 public:
-    NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance);
-    NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix);
+    NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QDeclarativeEngine *engine);
+    NodeInstanceMetaObject(const ObjectNodeInstancePointer &nodeInstance, QObject *object, const QString &prefix, QDeclarativeEngine *engine);
     void createNewProperty(const QString &name);
 
 protected:
diff --git a/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp b/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp
index 4dc99587e721ab16fc22d51eae533876fbd12125..446be865f6c287dc2b194d1ffdf1de515bfcf506 100644
--- a/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp
+++ b/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp
@@ -176,12 +176,12 @@ void ObjectNodeInstance::initializePropertyWatcher(const ObjectNodeInstance::Poi
 {
     if (!objectNodeInstance->modelNode().metaInfo().isComponent()) { // TODO: this is a nasty workaround which needs to be removed
         const QMetaObject *metaObject = objectNodeInstance->object()->metaObject();
-        m_metaObject = new NodeInstanceMetaObject(objectNodeInstance);
+        m_metaObject = new NodeInstanceMetaObject(objectNodeInstance, nodeInstanceView()->engine());
         for(int propertyIndex = QObject::staticMetaObject.propertyCount(); propertyIndex < metaObject->propertyCount(); propertyIndex++) {
             if (QDeclarativeMetaType::isQObject(metaObject->property(propertyIndex).userType())) {
                 QObject *propertyObject = QDeclarativeMetaType::toQObject(metaObject->property(propertyIndex).read(objectNodeInstance->object()));
                 if (propertyObject && hasPropertiesWitoutNotifications(propertyObject->metaObject())) {
-                    new NodeInstanceMetaObject(objectNodeInstance, propertyObject, metaObject->property(propertyIndex).name());
+                    new NodeInstanceMetaObject(objectNodeInstance, propertyObject, metaObject->property(propertyIndex).name(), nodeInstanceView()->engine());
                 }
             }
         }