diff --git a/src/plugins/cppeditor/cppinsertdecldef.cpp b/src/plugins/cppeditor/cppinsertdecldef.cpp
index 9a8e20c52008c272eda88401c3165c0920d91095..c6aad18336b4ec38a9b280c3159f588cd72ccb10 100644
--- a/src/plugins/cppeditor/cppinsertdecldef.cpp
+++ b/src/plugins/cppeditor/cppinsertdecldef.cpp
@@ -116,10 +116,22 @@ QList<CppQuickFixOperation::Ptr> DeclFromDef::match(const CppQuickFixState &stat
     int idx = 0;
     for (; idx < path.size(); ++idx) {
         AST *node = path.at(idx);
-        if (FunctionDefinitionAST *candidate = node->asFunctionDefinition()) {
-            if (!funDef && file.isCursorOn(candidate) && !file.isCursorOn(candidate->function_body))
-                funDef = candidate;
-        } else if (node->asClassSpecifier()) {
+        if (idx > 1) {
+            if (DeclaratorIdAST *declId = node->asDeclaratorId()) {
+                if (file.isCursorOn(declId)) {
+                    if (FunctionDefinitionAST *candidate = path.at(idx - 2)->asFunctionDefinition()) {
+                        if (funDef) {
+                            return noResult();
+                        } else {
+                            funDef = candidate;
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+
+        if (node->asClassSpecifier()) {
             return noResult();
         }
     }
@@ -156,7 +168,7 @@ QList<CppQuickFixOperation::Ptr> DeclFromDef::match(const CppQuickFixState &stat
                                                           InsertionPointLocator::PrivateSlot,
                                                           decl)));
                 return results;
-            } //! \todo support insertion into namespaces
+            } //! \todo support insertion of non-methods into namespaces
         }
     }