diff --git a/src/libs/cplusplus/CppBindings.cpp b/src/libs/cplusplus/CppBindings.cpp
index acbeb6f6fd114a5a2a965d4cbc4c9d4945fe3ca6..c916ab4b8b15640397e77d47516f76a6ee4817af 100644
--- a/src/libs/cplusplus/CppBindings.cpp
+++ b/src/libs/cplusplus/CppBindings.cpp
@@ -152,6 +152,25 @@ ClassBinding *NamespaceBinding::findClassBinding(Name *name, QSet<Binding *> *pr
     if (processed->contains(this))
         return 0;
 
+    if (const QualifiedNameId *q = name->asQualifiedNameId()) {
+        Binding *current = this;
+
+        for (unsigned i = 0; i < q->nameCount(); ++i) {
+            Identifier *nameId = q->nameAt(i)->identifier();
+            if (! nameId)
+                return 0;
+
+            QSet<Binding *> visited;
+            Binding *binding = current->findClassOrNamespaceBinding(nameId, &visited); // ### TODO: check recursion.
+            if (! binding)
+                return 0;
+
+            current = binding;
+        }
+
+        return current->asClassBinding();
+    }
+
     processed->insert(this);
 
     Identifier *id = name->identifier();