diff --git a/src/libs/cplusplus/TokenCache.cpp b/src/libs/cplusplus/TokenCache.cpp
index 0be110100df8d82debfb11050ce5d6d9f1276f4a..cadf7201cf5020e7e396da9585d43bb8ab41d046 100644
--- a/src/libs/cplusplus/TokenCache.cpp
+++ b/src/libs/cplusplus/TokenCache.cpp
@@ -3,8 +3,8 @@
 
 using namespace CPlusPlus;
 
-TokenCache::TokenCache()
-    : m_doc(0)
+TokenCache::TokenCache(QTextDocument *doc)
+    : m_doc(doc)
     , m_revision(-1)
 {}
 
diff --git a/src/libs/cplusplus/TokenCache.h b/src/libs/cplusplus/TokenCache.h
index 49fec04ca1e52d5dc5865760e8f560c460a51a32..cff748100b070aa975d9fc1c84486634a076c112 100644
--- a/src/libs/cplusplus/TokenCache.h
+++ b/src/libs/cplusplus/TokenCache.h
@@ -17,7 +17,7 @@ namespace CPlusPlus {
 class CPLUSPLUS_EXPORT TokenCache
 {
 public:
-    TokenCache();
+    TokenCache(QTextDocument *doc = 0);
 
     void setDocument(QTextDocument *doc);
 
diff --git a/tests/auto/cplusplus/findusages/tst_findusages.cpp b/tests/auto/cplusplus/findusages/tst_findusages.cpp
index ef5ea22b82d406e5d423aec19c664501c88d7f92..4faccfa67bc9891451404a2d7e8c0bfbd0dea9b5 100644
--- a/tests/auto/cplusplus/findusages/tst_findusages.cpp
+++ b/tests/auto/cplusplus/findusages/tst_findusages.cpp
@@ -6,7 +6,6 @@
 #include <AST.h>
 #include <ASTVisitor.h>
 #include <TranslationUnit.h>
-#include <CppBindings.h>
 #include <CppDocument.h>
 #include <FindUsages.h>
 #include <Literals.h>
@@ -90,7 +89,6 @@ void tst_FindUsages::inlineMethod()
     QCOMPARE(arg->identifier()->chars(), "arg");
 
     FindUsages findUsages(doc, snapshot);
-    findUsages.setGlobalNamespaceBinding(bind(doc, snapshot));
     findUsages(arg);
     QCOMPARE(findUsages.usages().size(), 2);
     QCOMPARE(findUsages.references().size(), 2);
@@ -150,7 +148,6 @@ void tst_FindUsages::objc_args()
     QCOMPARE(arg->identifier()->chars(), "arg");
 
     FindUsages findUsages(doc, snapshot);
-    findUsages.setGlobalNamespaceBinding(bind(doc, snapshot));
     findUsages(arg);
     QCOMPARE(findUsages.usages().size(), 2);
     QCOMPARE(findUsages.references().size(), 2);
@@ -189,7 +186,6 @@ void tst_FindUsages::qproperty_1()
     QCOMPARE(setX_method->argumentCount(), 1U);
 
     FindUsages findUsages(doc, snapshot);
-    findUsages.setGlobalNamespaceBinding(bind(doc, snapshot));
     findUsages(setX_method);
     QCOMPARE(findUsages.usages().size(), 2);
     QCOMPARE(findUsages.references().size(), 2);
diff --git a/tests/auto/cplusplus/semantic/tst_semantic.cpp b/tests/auto/cplusplus/semantic/tst_semantic.cpp
index 85e7004eb7201f5d6e1d888e531a612f10968130..8f13f57e8ac996a0e73bc20c471e2c53c8b46657 100644
--- a/tests/auto/cplusplus/semantic/tst_semantic.cpp
+++ b/tests/auto/cplusplus/semantic/tst_semantic.cpp
@@ -11,6 +11,7 @@
 #include <Semantic.h>
 #include <Scope.h>
 #include <Symbols.h>
+#include <TokenCache.h>
 #include <CoreTypes.h>
 #include <Names.h>
 #include <Literals.h>
@@ -26,19 +27,20 @@ class tst_Semantic: public QObject
 {
     Q_OBJECT
 
-    Control control;
+    QSharedPointer<Control> control;
 
 public:
     tst_Semantic()
-    { control.setDiagnosticClient(&diag); }
+        : control(new Control)
+    { control->setDiagnosticClient(&diag); }
 
     TranslationUnit *parse(const QByteArray &source,
                            TranslationUnit::ParseMode mode,
                            bool enableObjc,
                            bool qtMocRun)
     {
-        const StringLiteral *fileId = control.findOrInsertStringLiteral("<stdin>");
-        TranslationUnit *unit = new TranslationUnit(&control, fileId);
+        const StringLiteral *fileId = control->findOrInsertStringLiteral("<stdin>");
+        TranslationUnit *unit = new TranslationUnit(control.data(), fileId);
         unit->setSource(source.constData(), source.length());
         unit->setObjCEnabled(enableObjc);
         unit->setQtMocRunEnabled(qtMocRun);
@@ -433,10 +435,10 @@ void tst_Semantic::template_instance_1()
     Declaration *decl = doc->globals->symbolAt(0)->asClass()->memberAt(0)->asDeclaration();
     QVERIFY(decl);
 
-    FullySpecifiedType templArgs[] = { control.integerType(IntegerType::Int) };
-    const Name *templId = control.templateNameId(control.findOrInsertIdentifier("QList"), templArgs, 1);
+    FullySpecifiedType templArgs[] = { control->integerType(IntegerType::Int) };
+    const Name *templId = control->templateNameId(control->findOrInsertIdentifier("QList"), templArgs, 1);
 
-    FullySpecifiedType genTy = DeprecatedGenTemplateInstance::instantiate(templId, decl, &control);
+    FullySpecifiedType genTy = DeprecatedGenTemplateInstance::instantiate(templId, decl, control);
 
     Overview oo;
     oo.setShowReturnTypes(true);
@@ -455,7 +457,8 @@ void tst_Semantic::expression_under_cursor_1()
     QTextCursor tc(&textDocument);
     tc.movePosition(QTextCursor::End);
 
-    ExpressionUnderCursor expressionUnderCursor;
+    TokenCache cache(&textDocument);
+    ExpressionUnderCursor expressionUnderCursor(&cache);
     const QString expression = expressionUnderCursor(tc);
 
     QCOMPARE(expression, QString("bar"));
@@ -471,7 +474,8 @@ void tst_Semantic::bracketed_expression_under_cursor_1()
     QTextCursor tc(&textDocument);
     tc.movePosition(QTextCursor::End);
 
-    ExpressionUnderCursor expressionUnderCursor;
+    TokenCache cache(&textDocument);
+    ExpressionUnderCursor expressionUnderCursor(&cache);
     const QString expression = expressionUnderCursor(tc);
 
     QCOMPARE(expression, QString("i"));
@@ -487,7 +491,8 @@ void tst_Semantic::bracketed_expression_under_cursor_2()
     QTextCursor tc(&textDocument);
     tc.movePosition(QTextCursor::End);
 
-    ExpressionUnderCursor expressionUnderCursor;
+    TokenCache cache(&textDocument);
+    ExpressionUnderCursor expressionUnderCursor(&cache);
     const QString expression = expressionUnderCursor(tc);
 
     QCOMPARE(expression, plainText);
@@ -503,7 +508,8 @@ void tst_Semantic::bracketed_expression_under_cursor_3()
     QTextCursor tc(&textDocument);
     tc.movePosition(QTextCursor::End);
 
-    ExpressionUnderCursor expressionUnderCursor;
+    TokenCache cache(&textDocument);
+    ExpressionUnderCursor expressionUnderCursor(&cache);
     const QString expression = expressionUnderCursor(tc);
 
     QCOMPARE(expression, plainText);
@@ -519,7 +525,8 @@ void tst_Semantic::bracketed_expression_under_cursor_4()
     QTextCursor tc(&textDocument);
     tc.movePosition(QTextCursor::End);
 
-    ExpressionUnderCursor expressionUnderCursor;
+    TokenCache cache(&textDocument);
+    ExpressionUnderCursor expressionUnderCursor(&cache);
     const QString expression = expressionUnderCursor(tc);
 
     QCOMPARE(expression, plainText);
@@ -535,7 +542,8 @@ void tst_Semantic::bracketed_expression_under_cursor_5()
     QTextCursor tc(&textDocument);
     tc.movePosition(QTextCursor::End);
 
-    ExpressionUnderCursor expressionUnderCursor;
+    TokenCache cache(&textDocument);
+    ExpressionUnderCursor expressionUnderCursor(&cache);
     const QString expression = expressionUnderCursor(tc);
 
     QCOMPARE(expression, QString("[receiver message"));
@@ -551,7 +559,8 @@ void tst_Semantic::bracketed_expression_under_cursor_6()
     QTextCursor tc(&textDocument);
     tc.movePosition(QTextCursor::End);
 
-    ExpressionUnderCursor expressionUnderCursor;
+    TokenCache cache(&textDocument);
+    ExpressionUnderCursor expressionUnderCursor(&cache);
     const QString expression = expressionUnderCursor(tc);
 
     QCOMPARE(expression, QString("[receiver msgParam1:1 + i[1] msgParam2"));
@@ -567,7 +576,8 @@ void tst_Semantic::bracketed_expression_under_cursor_7()
     QTextCursor tc(&textDocument);
     tc.movePosition(QTextCursor::End);
 
-    ExpressionUnderCursor expressionUnderCursor;
+    TokenCache cache(&textDocument);
+    ExpressionUnderCursor expressionUnderCursor(&cache);
     const QString expression = expressionUnderCursor(tc);
 
     QCOMPARE(expression, QString("i"));
@@ -583,7 +593,8 @@ void tst_Semantic::bracketed_expression_under_cursor_8()
     QTextCursor tc(&textDocument);
     tc.movePosition(QTextCursor::End);
 
-    ExpressionUnderCursor expressionUnderCursor;
+    TokenCache cache(&textDocument);
+    ExpressionUnderCursor expressionUnderCursor(&cache);
     const QString expression = expressionUnderCursor(tc);
 
     QCOMPARE(expression, plainText);