diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp
index abde784b36c03f9425e3dafae10bfbfa69dbcbf6..956ec267e74bbc9e1b3f3229ac3ddb9599adbd79 100644
--- a/src/libs/cplusplus/LookupContext.cpp
+++ b/src/libs/cplusplus/LookupContext.cpp
@@ -41,7 +41,7 @@
 
 #include <QtDebug>
 
-#define CPLUSPLUS_NO_LAZY_LOOKUP
+//#define CPLUSPLUS_NO_LAZY_LOOKUP
 
 using namespace CPlusPlus;
 
@@ -229,7 +229,7 @@ QList<Symbol *> LookupContext::lookup(const Name *name, Scope *scope) const
 }
 
 ClassOrNamespace::ClassOrNamespace(CreateBindings *factory, ClassOrNamespace *parent)
-    : _factory(factory), _parent(parent), _flushing(false)
+    : _factory(factory), _parent(parent)
 {
 }
 
@@ -483,13 +483,12 @@ ClassOrNamespace *ClassOrNamespace::nestedClassOrNamespace(const QByteArray &nam
 void ClassOrNamespace::flush()
 {
 #ifndef CPLUSPLUS_NO_LAZY_LOOKUP
-    if (! _flushing) {
-        _flushing = true;
+    if (! _todo.isEmpty()) {
+        const QList<Symbol *> todo = _todo;
+        _todo.clear();
 
-        while (! _todo.isEmpty()) {
-            Symbol *member = _todo.takeFirst();
+        foreach (Symbol *member, todo)
             _factory->process(member, this);
-        }
     }
 #endif
 }
diff --git a/src/libs/cplusplus/LookupContext.h b/src/libs/cplusplus/LookupContext.h
index 0937e86a0b7232041aa01bd83b68e2228edd9aa4..242b353cb7dcf261624d8e7841d5a986bed47194 100644
--- a/src/libs/cplusplus/LookupContext.h
+++ b/src/libs/cplusplus/LookupContext.h
@@ -92,7 +92,6 @@ private:
     QHash<QByteArray, ClassOrNamespace *> _classOrNamespaces;
     QList<Enum *> _enums;
     QList<Symbol *> _todo;
-    bool _flushing;
 
     friend class CreateBindings;
 };
diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp
index 1825de4381116093faf2fae30dae4d50c2d4a219..3f1a72eced73956e3f04da3e6d8613c1244148c9 100644
--- a/src/libs/cplusplus/ResolveExpression.cpp
+++ b/src/libs/cplusplus/ResolveExpression.cpp
@@ -590,7 +590,7 @@ ResolveExpression::resolveBaseExpression(const QList<LookupItem> &baseResults, i
         if (NamedType *namedTy = ty->asNamedType()) {
             const Name *arrowAccessOp = control()->operatorNameId(OperatorNameId::ArrowOp);
 
-            if (ClassOrNamespace *b = _context.classOrNamespace(namedTy->name(), result.lastVisibleSymbol()->scope())) {
+            if (ClassOrNamespace *b = _context.classOrNamespace(namedTy->name(), result.lastVisibleSymbol())) {
                 foreach (Symbol *overload, b->lookup(arrowAccessOp)) {
                     if (Function *funTy = overload->type()->asFunctionType()) {
                         FullySpecifiedType f = instantiate(namedTy->name(), funTy);
@@ -667,7 +667,7 @@ ResolveExpression::resolveMemberExpression(const QList<LookupItem> &baseResults,
             results += resolveMember(memberName, klass);
 
         else if (NamedType *namedTy = ty->asNamedType()) {
-            if (ClassOrNamespace *b = _context.classOrNamespace(namedTy->name(), r.lastVisibleSymbol()->scope())) {
+            if (ClassOrNamespace *b = _context.classOrNamespace(namedTy->name(), r.lastVisibleSymbol())) {
                 foreach (Symbol *c, b->lookup(memberName))
                     results.append(LookupItem(instantiate(namedTy->name(), c), c));
             }