diff --git a/src/libs/cplusplus/LookupContext.h b/src/libs/cplusplus/LookupContext.h
index 014d1be2c91e931c99b5a866cfb48ed6842b1805..f4e418843430976e8f24d6ac7666e54a028858a5 100644
--- a/src/libs/cplusplus/LookupContext.h
+++ b/src/libs/cplusplus/LookupContext.h
@@ -34,7 +34,7 @@
 #ifndef CPLUSPLUS_LOOKUPCONTEXT_H
 #define CPLUSPLUS_LOOKUPCONTEXT_H
 
-#include <cplusplus/CppDocument.h>
+#include "CppDocument.h"
 #include <QPair>
 
 namespace CPlusPlus {
diff --git a/src/libs/cplusplus/TypeOfExpression.cpp b/src/libs/cplusplus/TypeOfExpression.cpp
index 90ec7837a738589ae39c683a67d9d4d57ba0a5e9..fe9a664d18e6d85c93813abf77af16927dc8473b 100644
--- a/src/libs/cplusplus/TypeOfExpression.cpp
+++ b/src/libs/cplusplus/TypeOfExpression.cpp
@@ -32,12 +32,12 @@
 ***************************************************************************/
 
 #include "TypeOfExpression.h"
+#include <TranslationUnit.h>
+#include "LookupContext.h"
+#include "ResolveExpression.h"
+#include "pp.h"
 
 #include <AST.h>
-#include <TranslationUnit.h>
-#include <cplusplus/LookupContext.h>
-#include <cplusplus/ResolveExpression.h>
-#include <cplusplus/pp.h>
 #include <QSet>
 
 using namespace CPlusPlus;
diff --git a/src/libs/cplusplus/TypeOfExpression.h b/src/libs/cplusplus/TypeOfExpression.h
index 78af0346347b329379ad7d9f89320604ae94830b..4b057ce292b8f9718f8d9ec578b12d6f948d5fde 100644
--- a/src/libs/cplusplus/TypeOfExpression.h
+++ b/src/libs/cplusplus/TypeOfExpression.h
@@ -33,10 +33,10 @@
 #ifndef CPLUSPLUS_TYPEOFEXPRESSION_H
 #define CPLUSPLUS_TYPEOFEXPRESSION_H
 
-#include <ASTfwd.h>
-#include <cplusplus/CppDocument.h>
-#include <cplusplus/LookupContext.h>
+#include "CppDocument.h"
+#include "LookupContext.h"
 
+#include <ASTfwd.h>
 #include <QtCore/QMap>
 #include <QtCore/QObject>
 #include <QtCore/QString>
diff --git a/src/libs/cplusplus/cplusplus-lib.pri b/src/libs/cplusplus/cplusplus-lib.pri
new file mode 100644
index 0000000000000000000000000000000000000000..d3053228fc31e4285f603498c7abca622f30f4e8
--- /dev/null
+++ b/src/libs/cplusplus/cplusplus-lib.pri
@@ -0,0 +1,48 @@
+DEFINES += HAVE_QT CPLUSPLUS_WITH_NAMESPACE CPLUSPLUS_BUILD_LIB
+INCLUDEPATH += $$PWD
+
+include(../../shared/cplusplus/cplusplus.pri)
+
+HEADERS += \
+    $$PWD/SimpleLexer.h \
+    $$PWD/ExpressionUnderCursor.h \
+    $$PWD/TokenUnderCursor.h \
+    $$PWD/CppDocument.h \
+    $$PWD/Icons.h \
+    $$PWD/Overview.h \
+    $$PWD/OverviewModel.h \
+    $$PWD/NamePrettyPrinter.h \
+    $$PWD/TypeOfExpression.h \
+    $$PWD/TypePrettyPrinter.h \
+    $$PWD/ResolveExpression.h \
+    $$PWD/LookupContext.h \
+    $$PWD/PreprocessorClient.h \
+    $$PWD/PreprocessorEnvironment.h \
+    $$PWD/Macro.h \
+    $$PWD/pp.h \
+    $$PWD/pp-cctype.h \
+    $$PWD/pp-engine.h \
+    $$PWD/pp-macro-expander.h \
+    $$PWD/pp-scanner.h
+
+SOURCES += \
+    $$PWD/SimpleLexer.cpp \
+    $$PWD/ExpressionUnderCursor.cpp \
+    $$PWD/TokenUnderCursor.cpp \
+    $$PWD/CppDocument.cpp \
+    $$PWD/Icons.cpp \
+    $$PWD/Overview.cpp \
+    $$PWD/OverviewModel.cpp \
+    $$PWD/NamePrettyPrinter.cpp \
+    $$PWD/TypeOfExpression.cpp \
+    $$PWD/TypePrettyPrinter.cpp \
+    $$PWD/ResolveExpression.cpp \
+    $$PWD/LookupContext.cpp \
+    $$PWD/PreprocessorClient.cpp \
+    $$PWD/PreprocessorEnvironment.cpp \
+    $$PWD/Macro.cpp \
+    $$PWD/pp-engine.cpp \
+    $$PWD/pp-macro-expander.cpp \
+    $$PWD/pp-scanner.cpp
+
+RESOURCES += $$PWD/cplusplus.qrc
diff --git a/src/libs/cplusplus/cplusplus.pro b/src/libs/cplusplus/cplusplus.pro
index ccc38abb49023ab063c150c86923eb72431f68e2..f13ef15fa2a0082dc8be83bc0bc38253d99dcaab 100644
--- a/src/libs/cplusplus/cplusplus.pro
+++ b/src/libs/cplusplus/cplusplus.pro
@@ -2,53 +2,8 @@ TEMPLATE = lib
 
 TARGET = CPlusPlus
 
-DEFINES += HAVE_QT CPLUSPLUS_WITH_NAMESPACE CPLUSPLUS_BUILD_LIB
 DEFINES += NDEBUG
 unix:QMAKE_CXXFLAGS_DEBUG += -O3
 
 include(../../qworkbenchlibrary.pri)
-include(../../shared/cplusplus/cplusplus.pri)
-
-HEADERS += \
-    SimpleLexer.h \
-    ExpressionUnderCursor.h \
-    TokenUnderCursor.h \
-    CppDocument.h \
-    Icons.h \
-    Overview.h \
-    OverviewModel.h \
-    NamePrettyPrinter.h \
-    TypeOfExpression.h \
-    TypePrettyPrinter.h \
-    ResolveExpression.h \
-    LookupContext.h \
-    PreprocessorClient.h \
-    PreprocessorEnvironment.h \
-    Macro.h \
-    pp.h \
-    pp-cctype.h \
-    pp-engine.h \
-    pp-macro-expander.h \
-    pp-scanner.h
-
-SOURCES += \
-    SimpleLexer.cpp \
-    ExpressionUnderCursor.cpp \
-    TokenUnderCursor.cpp \
-    CppDocument.cpp \
-    Icons.cpp \
-    Overview.cpp \
-    OverviewModel.cpp \
-    NamePrettyPrinter.cpp \
-    TypeOfExpression.cpp \
-    TypePrettyPrinter.cpp \
-    ResolveExpression.cpp \
-    LookupContext.cpp \
-    PreprocessorClient.cpp \
-    PreprocessorEnvironment.cpp \
-    Macro.cpp \
-    pp-engine.cpp \
-    pp-macro-expander.cpp \
-    pp-scanner.cpp
-
-RESOURCES += cplusplus.qrc
+include(cplusplus-lib.pri)
diff --git a/tests/auto/cplusplus/cplusplus.pro b/tests/auto/cplusplus/cplusplus.pro
index 55e6cd83f0e906d29efcadc9ea2340cc12f5d214..af3bc066700dceeb021c73d1bea58bd48200ab22 100644
--- a/tests/auto/cplusplus/cplusplus.pro
+++ b/tests/auto/cplusplus/cplusplus.pro
@@ -1,3 +1,3 @@
 TEMPLATE = subdirs
-SUBDIRS = shared ast semantic
+SUBDIRS = shared ast semantic lookup
 CONFIG += ordered
diff --git a/tests/auto/cplusplus/lookup/lookup.pro b/tests/auto/cplusplus/lookup/lookup.pro
new file mode 100644
index 0000000000000000000000000000000000000000..5b68c169a8f4f22d9e93d70ae3196e3569cb8165
--- /dev/null
+++ b/tests/auto/cplusplus/lookup/lookup.pro
@@ -0,0 +1,4 @@
+load(qttest_p4)
+include(../../../../src/libs/cplusplus/cplusplus-lib.pri)
+
+SOURCES += tst_lookup.cpp
diff --git a/tests/auto/cplusplus/lookup/tst_lookup.cpp b/tests/auto/cplusplus/lookup/tst_lookup.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..12b1d1b6dfab24d2068ab0e65c6b928e086cf4ed
--- /dev/null
+++ b/tests/auto/cplusplus/lookup/tst_lookup.cpp
@@ -0,0 +1,56 @@
+
+#include <QtTest>
+#include <QObject>
+#include <CppDocument.h>
+#include <LookupContext.h>
+#include <Symbols.h>
+#include <Overview.h>
+
+CPLUSPLUS_USE_NAMESPACE
+
+class tst_Lookup: public QObject
+{
+    Q_OBJECT
+
+private Q_SLOTS:
+    void base_class_defined_1();
+};
+
+void tst_Lookup::base_class_defined_1()
+{
+    Overview overview;
+
+    const QByteArray source = "\n"
+        "class base {};\n"
+        "class derived: public base {};\n";
+
+    Document::Ptr doc = Document::create("base_class_defined_1");
+    doc->setSource(source);
+    doc->parse();
+    doc->check();
+
+    QVERIFY(doc->diagnosticMessages().isEmpty());
+    QCOMPARE(doc->globalSymbolCount(), 2U);
+
+    Snapshot snapshot;
+    snapshot.insert(doc->fileName(), doc);
+
+    Document::Ptr emptyDoc = Document::create("empty");
+
+    Class *baseClass = doc->globalSymbolAt(0)->asClass();
+    QVERIFY(baseClass);
+
+    Class *derivedClass = doc->globalSymbolAt(1)->asClass();
+    QVERIFY(derivedClass);
+
+    LookupContext ctx(derivedClass, emptyDoc, doc, snapshot);
+
+    const QList<Symbol *> candidates =
+        ctx.resolveClass(derivedClass->baseClassAt(0)->name());
+
+    QCOMPARE(candidates.size(), 1);
+    QCOMPARE(candidates.at(0), baseClass);
+}
+
+QTEST_APPLESS_MAIN(tst_Lookup)
+#include "tst_lookup.moc"