diff --git a/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp b/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp
index 0d21a6101a5c78040b4df2c78cee72c5d4fd9dcb..0fcfd8108ac62e0465d18641ec28daba67f522b7 100644
--- a/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp
+++ b/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp
@@ -149,20 +149,20 @@ public:
 
 QList<QmlJSQuickFixOperation::Ptr> ComponentFromObjectDef::match(const QmlJSQuickFixState &state)
 {
-    QList<QmlJSQuickFixOperation::Ptr> result;
     const int pos = state.currentFile().cursor().position();
 
     QList<Node *> path = state.semanticInfo().astPath(pos);
     for (int i = path.size() - 1; i >= 0; --i) {
         Node *node = path.at(i);
         if (UiObjectDefinition *objDef = cast<UiObjectDefinition *>(node)) {
+            if (!state.currentFile().isCursorOn(objDef->qualifiedTypeNameId))
+                return noResult();
              // check that the node is not the root node
             if (i > 0 && !cast<UiProgram*>(path.at(i - 1))) {
-                result.append(QmlJSQuickFixOperation::Ptr(new Operation(state, objDef)));
-                return result;
+                return singleResult(new Operation(state, objDef));
             }
         }
     }
 
-    return result;
+    return noResult();
 }
diff --git a/src/plugins/qmljseditor/qmljsquickfix.cpp b/src/plugins/qmljseditor/qmljsquickfix.cpp
index 3b5ce360f98b7de8fd9a0cb343977c04ab746c5b..018442cd8bc1b93235b22d2fb8e04489b9a4a8f7 100644
--- a/src/plugins/qmljseditor/qmljsquickfix.cpp
+++ b/src/plugins/qmljseditor/qmljsquickfix.cpp
@@ -117,6 +117,17 @@ QList<QuickFixOperation::Ptr> QmlJSQuickFixFactory::matchingOperations(QuickFixS
         return QList<TextEditor::QuickFixOperation::Ptr>();
 }
 
+QList<QmlJSQuickFixOperation::Ptr> QmlJSQuickFixFactory::noResult()
+{
+    return QList<QmlJSQuickFixOperation::Ptr>();
+}
+
+QList<QmlJSQuickFixOperation::Ptr> QmlJSQuickFixFactory::singleResult(QmlJSQuickFixOperation *operation)
+{
+    QList<QmlJSQuickFixOperation::Ptr> result;
+    result.append(QmlJSQuickFixOperation::Ptr(operation));
+    return result;
+}
 
 QmlJSQuickFixCollector::QmlJSQuickFixCollector()
 {
diff --git a/src/plugins/qmljseditor/qmljsquickfix.h b/src/plugins/qmljseditor/qmljsquickfix.h
index 419cc73b9020124135e35ae0ff1ad4b0c602fb88..57e6b2521f6868ed357d1551267520fd440d62f6 100644
--- a/src/plugins/qmljseditor/qmljsquickfix.h
+++ b/src/plugins/qmljseditor/qmljsquickfix.h
@@ -132,6 +132,9 @@ public:
         QmlJSQuickFixOperation objects.
      */
     virtual QList<QmlJSQuickFixOperation::Ptr> match(const QmlJSQuickFixState &state) = 0;
+
+    static QList<QmlJSQuickFixOperation::Ptr> noResult();
+    static QList<QmlJSQuickFixOperation::Ptr> singleResult(QmlJSQuickFixOperation *operation);
 };
 
 namespace Internal {
diff --git a/src/plugins/qmljseditor/qmljsquickfixes.cpp b/src/plugins/qmljseditor/qmljsquickfixes.cpp
index 145bcee52275e627fa60c16d062d628ed0b7719b..006ce4b457ecd7dc6fb7f1539a0eb994ea5f55ea 100644
--- a/src/plugins/qmljseditor/qmljsquickfixes.cpp
+++ b/src/plugins/qmljseditor/qmljsquickfixes.cpp
@@ -52,8 +52,6 @@ class SplitInitializerOp: public QmlJSQuickFixFactory
 public:
     virtual QList<QmlJSQuickFixOperation::Ptr> match(const QmlJSQuickFixState &state)
     {
-        QList<QmlJSQuickFixOperation::Ptr> result;
-
         UiObjectInitializer *objectInitializer = 0;
 
         const int pos = state.currentFile().cursor().position();
@@ -70,8 +68,9 @@ public:
         }
 
         if (objectInitializer)
-            result.append(QSharedPointer<QmlJSQuickFixOperation>(new Operation(state, objectInitializer)));
-        return result;
+            return singleResult(new Operation(state, objectInitializer));
+        else
+            return noResult();
     }
 
 private:
diff --git a/src/plugins/qmljseditor/qmljsrefactoringchanges.cpp b/src/plugins/qmljseditor/qmljsrefactoringchanges.cpp
index a612b070cdfdbd442e786f92e834c9f52cb698b2..bf7ed2018c0b5d895e48d7c1eb89641a87e0a267 100644
--- a/src/plugins/qmljseditor/qmljsrefactoringchanges.cpp
+++ b/src/plugins/qmljseditor/qmljsrefactoringchanges.cpp
@@ -30,6 +30,7 @@
 #include "qmljsrefactoringchanges.h"
 #include "qmljseditorcodeformatter.h"
 
+#include <qmljs/parser/qmljsast_p.h>
 #include <qmljs/qmljsmodelmanagerinterface.h>
 #include <texteditor/texteditorsettings.h>
 #include <texteditor/tabsettings.h>
@@ -109,11 +110,33 @@ Document::Ptr QmlJSRefactoringFile::qmljsDocument() const
     return m_qmljsDocument;
 }
 
-unsigned QmlJSRefactoringFile::startOf(const QmlJS::AST::SourceLocation &loc) const
+unsigned QmlJSRefactoringFile::startOf(const AST::SourceLocation &loc) const
 {
     return position(loc.startLine, loc.startColumn);
 }
 
+bool QmlJSRefactoringFile::isCursorOn(AST::UiObjectMember *ast) const
+{
+    const unsigned pos = cursor().position();
+
+    return ast->firstSourceLocation().begin() <= pos
+            && pos <= ast->lastSourceLocation().end();
+}
+
+bool QmlJSRefactoringFile::isCursorOn(AST::UiQualifiedId *ast) const
+{
+    const unsigned pos = cursor().position();
+
+    if (ast->identifierToken.begin() > pos)
+        return false;
+
+    AST::UiQualifiedId *last = ast;
+    while (last->next)
+        last = last->next;
+
+    return pos <= ast->identifierToken.end();
+}
+
 QmlJSRefactoringChanges *QmlJSRefactoringFile::refactoringChanges() const
 {
     return static_cast<QmlJSRefactoringChanges *>(m_refactoringChanges);
diff --git a/src/plugins/qmljseditor/qmljsrefactoringchanges.h b/src/plugins/qmljseditor/qmljsrefactoringchanges.h
index 993012e9c8cb1332696ff6ae142f6441d9751317..b1ba3d4e466557192212363c714c9a4015e4a04a 100644
--- a/src/plugins/qmljseditor/qmljsrefactoringchanges.h
+++ b/src/plugins/qmljseditor/qmljsrefactoringchanges.h
@@ -57,6 +57,9 @@ public:
      */
     unsigned startOf(const QmlJS::AST::SourceLocation &loc) const;
 
+    bool isCursorOn(QmlJS::AST::UiObjectMember *ast) const;
+    bool isCursorOn(QmlJS::AST::UiQualifiedId *ast) const;
+
 private:
     QmlJSRefactoringChanges *refactoringChanges() const;