diff --git a/src/plugins/cppeditor/cppquickfix.cpp b/src/plugins/cppeditor/cppquickfix.cpp
index ee18165ceab4e812aa83ad485836a65783d1d79a..9b84403a56d97d78fa86facafd9272fb9ecabed9 100644
--- a/src/plugins/cppeditor/cppquickfix.cpp
+++ b/src/plugins/cppeditor/cppquickfix.cpp
@@ -31,6 +31,7 @@
 #include "cppeditor.h"
 
 #include <cplusplus/CppDocument.h>
+#include <cplusplus/ResolveExpression.h>
 
 #include <TranslationUnit.h>
 #include <ASTVisitor.h>
@@ -843,7 +844,6 @@ Snapshot QuickFixOperation::snapshot() const
 void QuickFixOperation::setSnapshot(const CPlusPlus::Snapshot &snapshot)
 {
     _snapshot = snapshot;
-    _typeOfExpression.setSnapshot(snapshot);
 }
 
 CPPEditor *QuickFixOperation::editor() const
@@ -1063,14 +1063,16 @@ void QuickFixOperation::apply()
  *
  * NOTE: The fully specified types only stay valid until the next call to typeOf.
  */
-const QList<LookupItem> QuickFixOperation::typeOf(const CPlusPlus::ExpressionAST *ast)
+const QList<LookupItem> QuickFixOperation::typeOf(CPlusPlus::ExpressionAST *ast)
 {
     unsigned line, column;
     document()->translationUnit()->getTokenStartPosition(ast->firstToken(), &line, &column);
     Symbol *lastVisibleSymbol = document()->findSymbolAt(line, column);
 
-    return _typeOfExpression(textOf(ast), document(), lastVisibleSymbol,
-                             TypeOfExpression::Preprocess);
+    _lookupContext = LookupContext(lastVisibleSymbol, document(), document(), snapshot());
+
+    ResolveExpression resolveExpression(_lookupContext);
+    return resolveExpression(ast);
 }
 
 CPPQuickFixCollector::CPPQuickFixCollector()
diff --git a/src/plugins/cppeditor/cppquickfix.h b/src/plugins/cppeditor/cppquickfix.h
index 5281876053d5e8bf13e7857427cbe9802b036829..e7f2b1a8962f853cc015a1bddaf71037b24399a2 100644
--- a/src/plugins/cppeditor/cppquickfix.h
+++ b/src/plugins/cppeditor/cppquickfix.h
@@ -33,7 +33,7 @@
 #include <texteditor/icompletioncollector.h>
 
 #include <cplusplus/CppDocument.h>
-#include <cplusplus/TypeOfExpression.h>
+#include <cplusplus/LookupContext.h>
 #include <ASTfwd.h>
 
 #include <utils/changeset.h>
@@ -128,7 +128,7 @@ protected:
     Range createRange(CPlusPlus::AST *ast) const; // ### rename me
     void reindent(const Range &range);
 
-    const QList<CPlusPlus::LookupItem> typeOf(const CPlusPlus::ExpressionAST *ast);
+    const QList<CPlusPlus::LookupItem> typeOf(CPlusPlus::ExpressionAST *ast);
 
 private:
     CPlusPlus::Document::Ptr _document;
@@ -137,7 +137,7 @@ private:
     Utils::ChangeSet _changeSet;
     CPPEditor *_editor;
     CPlusPlus::AST *_topLevelNode;
-    CPlusPlus::TypeOfExpression _typeOfExpression;
+    CPlusPlus::LookupContext _lookupContext;
 };
 
 class CPPQuickFixCollector: public TextEditor::IQuickFixCollector