diff --git a/src/libs/cplusplus/ASTPath.cpp b/src/libs/cplusplus/ASTPath.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8e51390c524ff406740ac9c550ce09eecd156695
--- /dev/null
+++ b/src/libs/cplusplus/ASTPath.cpp
@@ -0,0 +1,81 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "ASTPath.h"
+
+#include <AST.h>
+#include <TranslationUnit.h>
+
+#ifdef DEBUG_AST_PATH
+#  include <QtCore/QDebug>
+#endif // DEBUG_AST_PATH
+
+using namespace CPlusPlus;
+
+QList<AST *> ASTPath::operator()(int line, int column)
+{
+    _nodes.clear();
+    _line = line + 1;
+    _column = column + 1;
+    accept(_doc->translationUnit()->ast());
+    return _nodes;
+}
+
+#ifdef DEBUG_AST_PATH
+void ASTPath::dump(const QList<AST *> nodes)
+{
+    qDebug() << "ASTPath dump," << nodes.size() << "nodes:";
+    for (int i = 0; i < nodes.size(); ++i)
+        qDebug() << qPrintable(QString(i + 1, QLatin1Char('-'))) << typeid(*nodes.at(i)).name();
+}
+#endif // DEBUG_AST_PATH
+
+bool ASTPath::preVisit(AST *ast)
+{
+    unsigned firstToken = ast->firstToken();
+    unsigned lastToken = ast->lastToken();
+
+    if (firstToken > 0 && lastToken > firstToken) {
+        unsigned startLine, startColumn;
+        getTokenStartPosition(firstToken, &startLine, &startColumn);
+
+        if (_line > startLine || (_line == startLine && _column >= startColumn)) {
+
+            unsigned endLine, endColumn;
+            getTokenEndPosition(lastToken - 1, &endLine, &endColumn);
+
+            if (_line < endLine || (_line == endLine && _column <= endColumn)) {
+                _nodes.append(ast);
+                return true;
+            }
+        }
+    }
+
+    return false;
+}
diff --git a/src/libs/cplusplus/ASTPath.h b/src/libs/cplusplus/ASTPath.h
new file mode 100644
index 0000000000000000000000000000000000000000..e4b83470535e166cb42eab5f8896cc27f14e61bf
--- /dev/null
+++ b/src/libs/cplusplus/ASTPath.h
@@ -0,0 +1,74 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef ASTPATH_H
+#define ASTPATH_H
+
+#include <ASTfwd.h>
+#include <ASTVisitor.h>
+
+#include <cplusplus/CppDocument.h>
+
+#include <QtCore/QList>
+#include <QtGui/QTextCursor>
+
+#define DEBUG_AST_PATH
+
+namespace CPlusPlus {
+
+class CPLUSPLUS_EXPORT ASTPath: public ASTVisitor
+{
+public:
+    ASTPath(Document::Ptr doc)
+        : ASTVisitor(doc->translationUnit()),
+          _doc(doc), _line(0), _column(0)
+    {}
+
+    QList<AST *> operator()(const QTextCursor &cursor)
+    { return this->operator()(cursor.blockNumber(), cursor.columnNumber()); }
+
+    QList<AST *> operator()(int line, int column);
+
+#ifdef DEBUG_AST_PATH
+    static void dump(const QList<AST *> nodes);
+#endif
+
+protected:
+    virtual bool preVisit(AST *ast);
+
+private:
+    Document::Ptr _doc;
+    unsigned _line;
+    unsigned _column;
+    QList<AST *> _nodes;
+};
+
+} // namespace CppTools
+
+#endif // ASTPATH_H
diff --git a/src/libs/cplusplus/cplusplus-lib.pri b/src/libs/cplusplus/cplusplus-lib.pri
index 6e079fe8de494d4f80cd8167f19ebd4d6b7e8d3b..3e883a4efdc7ba3fae644e593d750028e0d900d6 100644
--- a/src/libs/cplusplus/cplusplus-lib.pri
+++ b/src/libs/cplusplus/cplusplus-lib.pri
@@ -37,6 +37,7 @@ HEADERS += \
     $$PWD/LookupItem.h \
     $$PWD/LookupContext.h \
     $$PWD/ASTParent.h \
+    $$PWD/ASTPath.h \
     $$PWD/DeprecatedGenTemplateInstance.h \
     $$PWD/FindUsages.h \
     $$PWD/CheckUndefinedSymbols.h \
@@ -62,6 +63,7 @@ SOURCES += \
     $$PWD/LookupItem.cpp \
     $$PWD/LookupContext.cpp \
     $$PWD/ASTParent.cpp \
+    $$PWD/ASTPath.cpp \
     $$PWD/DeprecatedGenTemplateInstance.cpp \
     $$PWD/FindUsages.cpp \
     $$PWD/CheckUndefinedSymbols.cpp \
diff --git a/src/plugins/cppeditor/cppquickfix.cpp b/src/plugins/cppeditor/cppquickfix.cpp
index 41b9321a91f3aea5db986ec83914324fdc12c626..6d538f12192cda82b46204a779d213a26e5cfa3d 100644
--- a/src/plugins/cppeditor/cppquickfix.cpp
+++ b/src/plugins/cppeditor/cppquickfix.cpp
@@ -30,6 +30,7 @@
 #include "cppquickfix.h"
 #include "cppeditor.h"
 
+#include <cplusplus/ASTPath.h>
 #include <cplusplus/CppDocument.h>
 #include <cplusplus/ResolveExpression.h>
 
@@ -57,64 +58,6 @@ using namespace CPlusPlus;
 
 namespace {
 
-class ASTPath: public ASTVisitor
-{
-    Document::Ptr _doc;
-    unsigned _line;
-    unsigned _column;
-    QList<AST *> _nodes;
-
-public:
-    ASTPath(Document::Ptr doc)
-        : ASTVisitor(doc->translationUnit()),
-          _doc(doc), _line(0), _column(0)
-    {}
-
-    QList<AST *> operator()(const QTextCursor &cursor)
-    {
-        _nodes.clear();
-        _line = cursor.blockNumber() + 1;
-        _column = cursor.columnNumber() + 1;
-        accept(_doc->translationUnit()->ast());
-        return _nodes;
-    }
-
-#if 0
-    // Useful for debugging:
-    static void dump(const QList<AST *> nodes)
-    {
-        qDebug() << "ASTPath dump," << nodes.size() << "nodes:";
-        for (int i = 0; i < nodes.size(); ++i)
-            qDebug() << qPrintable(QString(i + 1, QLatin1Char('-'))) << typeid(*nodes.at(i)).name();
-    }
-#endif
-
-protected:
-    virtual bool preVisit(AST *ast)
-    {
-        unsigned firstToken = ast->firstToken();
-        unsigned lastToken = ast->lastToken();
-
-        if (firstToken > 0 && lastToken > firstToken) {
-            unsigned startLine, startColumn;
-            getTokenStartPosition(firstToken, &startLine, &startColumn);
-
-            if (_line > startLine || (_line == startLine && _column >= startColumn)) {
-
-                unsigned endLine, endColumn;
-                getTokenEndPosition(lastToken - 1, &endLine, &endColumn);
-
-                if (_line < endLine || (_line == endLine && _column <= endColumn)) {
-                    _nodes.append(ast);
-                    return true;
-                }
-            }
-        }
-
-        return false;
-    }
-};
-
 /*
     Rewrite
     a op b -> !(a invop b)