diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index c9e1c528331c78f8e66ca18972669dde9e3216da..b3f11d2b20bf3d55cbb663050078676b4f339adc 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -2114,9 +2114,11 @@ void CppQmlTypes::setPrototypes(QmlObjectValue *object)
     FakeMetaObject::ConstPtr fmo = object->metaObject();
 
     // resolve attached type
-    if (!fmo->attachedTypeName().isEmpty()) {
+    // don't do it if the attached type name is the object itself (happens for QDeclarativeKeysAttached)
+    if (!fmo->attachedTypeName().isEmpty()
+            && fmo->className() != fmo->attachedTypeName()) {
         QmlObjectValue *attachedObject = typeByCppName(fmo->attachedTypeName());
-        if (attachedObject)
+        if (attachedObject && attachedObject != object)
             object->setAttachedType(attachedObject);
     }