diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index 7e3f04bc38105d9db08a1ab09f4ef4e5f4da86de..eb90a18678619030df2ff9cb29da4d6e4b244bf3 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -77,7 +77,8 @@ public:
               _doc(doc),
               _snapshot(snapshot),
               _source(_doc->source()),
-              _sem(doc->control())
+              _sem(doc->control()),
+              _inSimpleDeclaration(0)
     {
         _snapshot.insert(_doc);
     }
@@ -435,8 +436,8 @@ protected:
             for (PtrOperatorAST *ptr_op = declarator->ptr_operators; ptr_op; ptr_op = ptr_op->next)
                 accept(ptr_op);
 
-            // ### TODO: well, not exactly. We need to look at qualified-name-ids and nested-declarators.
-            // accept(declarator->core_declarator);
+            if (! _inSimpleDeclaration) // visit the core declarator only if we are not in simple-declaration.
+                accept(declarator->core_declarator);
 
             for (PostfixDeclaratorAST *fx_op = declarator->postfix_declarators; fx_op; fx_op = fx_op->next)
                 accept(fx_op);
@@ -469,6 +470,15 @@ protected:
         return false;
     }
 
+    virtual bool visit(SimpleDeclarationAST *)
+    {
+        ++_inSimpleDeclaration;
+        return true;
+    }
+
+    virtual void endVisit(SimpleDeclarationAST *)
+    { --_inSimpleDeclaration; }
+
 private:
     QFutureInterface<Utils::FileSearchResult> *_future;
     Identifier *_id; // ### remove me
@@ -482,6 +492,7 @@ private:
     QList<PostfixExpressionAST *> _postfixExpressionStack;
     QList<QualifiedNameAST *> _qualifiedNameStack;
     QList<int> _references;
+    int _inSimpleDeclaration;
 };
 
 } // end of anonymous namespace