diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 947bea8f6f7081c9c6bea567de52c2183854331e..ab389d0a3b311c8fcc45ed5d15fdc8615753bcc5 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -513,7 +513,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
             if (m_completionOperator == T_LPAREN && completeFunction(exprTy, resolvedTypes, context)) {
                 return m_startPosition;
             } if ((m_completionOperator == T_DOT || m_completionOperator == T_ARROW) &&
-                      completeMember(exprTy, resolvedTypes, context)) {
+                      completeMember(resolvedTypes, context)) {
                 return m_startPosition;
             } else if (m_completionOperator == T_COLON_COLON && completeScope(resolvedTypes, context)) {
                 return m_startPosition;
@@ -575,8 +575,7 @@ bool CppCodeCompletion::completeFunction(FullySpecifiedType exprTy,
     return ! m_completions.isEmpty();
 }
 
-bool CppCodeCompletion::completeMember(FullySpecifiedType,
-                                       const QList<TypeOfExpression::Result> &results,
+bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &results,
                                        const LookupContext &context)
 {
     if (results.isEmpty())
@@ -593,10 +592,10 @@ bool CppCodeCompletion::completeMember(FullySpecifiedType,
 
         if (NamedType *namedTy = ty->asNamedType()) {
             ResolveExpression resolveExpression(context);
+            SymbolsForDotAccess symbolsForDotAccess;
 
-            Name *className = namedTy->name();
-            const QList<Symbol *> candidates =
-                    context.resolveClass(className, context.visibleScopes(p));
+            const QList<Symbol *> candidates = symbolsForDotAccess(namedTy, p,
+                                                                   context);
 
             foreach (Symbol *classObject, candidates) {
                 const QList<TypeOfExpression::Result> overloads =
@@ -617,8 +616,7 @@ bool CppCodeCompletion::completeMember(FullySpecifiedType,
                     if (PointerType *ptrTy = ty->asPointerType()) {
                         if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) {
                             const QList<Symbol *> classes =
-                                    context.resolveClass(namedTy->name(),
-                                                         context.visibleScopes(p));
+                                    symbolsForDotAccess(namedTy, p, context);
 
                             foreach (Symbol *c, classes) {
                                 if (! classObjectCandidates.contains(c))
@@ -630,9 +628,10 @@ bool CppCodeCompletion::completeMember(FullySpecifiedType,
             }
         } else if (PointerType *ptrTy = ty->asPointerType()) {
             if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) {
-                const QList<Symbol *> classes =
-                        context.resolveClass(namedTy->name(),
-                                             context.visibleScopes(p));
+                SymbolsForDotAccess symbolsForDotAccess;
+
+                const QList<Symbol *> classes = symbolsForDotAccess(namedTy, p,
+                                                                    context);
 
                 foreach (Symbol *c, classes) {
                     if (! classObjectCandidates.contains(c))
@@ -652,7 +651,7 @@ bool CppCodeCompletion::completeMember(FullySpecifiedType,
             int length = m_editor->position() - m_startPosition + 1;
             m_editor->setCurPos(m_startPosition - 1);
             m_editor->replace(length, QLatin1String("->"));
-            m_startPosition++;
+            ++m_startPosition;
             namedTy = ptrTy->elementType()->asNamedType();
         } else {
             namedTy = ty->asNamedType();
diff --git a/src/plugins/cpptools/cppcodecompletion.h b/src/plugins/cpptools/cppcodecompletion.h
index faaaec3570bf7a3c9d9825f174e9d63c0604782d..5720adbbc513473e90ee9de973b615c08297514f 100644
--- a/src/plugins/cpptools/cppcodecompletion.h
+++ b/src/plugins/cpptools/cppcodecompletion.h
@@ -96,8 +96,7 @@ private:
                           const QList<CPlusPlus::TypeOfExpression::Result> &,
                           const CPlusPlus::LookupContext &context);
 
-    bool completeMember(CPlusPlus::FullySpecifiedType exprTy,
-                        const QList<CPlusPlus::TypeOfExpression::Result> &,
+    bool completeMember(const QList<CPlusPlus::TypeOfExpression::Result> &,
                         const CPlusPlus::LookupContext &context);
 
     bool completeScope(const QList<CPlusPlus::TypeOfExpression::Result> &,