diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp
index 7c04426e41d7d4d48ab9adbbb592601f68e84153..8e0298439446bb87eaf5e044576bc09e8dca4281 100644
--- a/src/plugins/projectexplorer/projectnodes.cpp
+++ b/src/plugins/projectexplorer/projectnodes.cpp
@@ -73,6 +73,16 @@ Node::Node(NodeType nodeType,
 
 }
 
+/*!
+ * \brief The path of the file representing this node.
+ *
+ * This method does not emit any signals, that has to be done by the calling class!
+ */
+void Node::setPath(const QString &path)
+{
+    m_path = path;
+}
+
 NodeType Node::nodeType() const
 {
     return m_nodeType;
@@ -102,6 +112,11 @@ QString Node::path() const
     return m_path;
 }
 
+int Node::line() const
+{
+    return -1;
+}
+
 QString Node::displayName() const
 {
     return QFileInfo(path()).fileName();
@@ -241,6 +256,24 @@ void FolderNode::setIcon(const QIcon &icon)
     m_icon = icon;
 }
 
+FileNode *FolderNode::findFile(const QString &path)
+{
+    foreach (FileNode *n, fileNodes()) {
+        if (n->path() == path)
+            return n;
+    }
+    return 0;
+}
+
+FolderNode *FolderNode::findSubFolder(const QString &path)
+{
+    foreach (FolderNode *n, subFolderNodes()) {
+        if (n->path() == path)
+            return n;
+    }
+    return 0;
+}
+
 /*!
   \class ProjectExplorer::VirtualFolderNode
 
diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h
index 749dda036800c301664efca6f8be40b56b190905..c5e62a8b7c8f633dfbe3a30f440fc7197697b252 100644
--- a/src/plugins/projectexplorer/projectnodes.h
+++ b/src/plugins/projectexplorer/projectnodes.h
@@ -85,11 +85,15 @@ public:
     ProjectNode *projectNode() const;     // managing project
     FolderNode *parentFolderNode() const; // parent folder or project
     QString path() const;                 // file system path
+    virtual int line() const;
     virtual QString displayName() const;
     virtual QString vcsTopic() const;
     virtual QString tooltip() const;
     virtual bool isEnabled() const;
 
+    void setPath(const QString &path); // this does not call emitNodeUpdated!
+    void emitNodeUpdated();
+
 protected:
     Node(NodeType nodeType, const QString &path);
 
@@ -97,8 +101,6 @@ protected:
     void setProjectNode(ProjectNode *project);
     void setParentFolderNode(FolderNode *parentFolder);
 
-    void emitNodeUpdated();
-
 private:
     NodeType m_nodeType;
     ProjectNode *m_projectNode;
@@ -140,6 +142,9 @@ public:
     void setDisplayName(const QString &name);
     void setIcon(const QIcon &icon);
 
+    FileNode *findFile(const QString &path);
+    FolderNode *findSubFolder(const QString &path);
+
 protected:
     QList<FolderNode*> m_subFolderNodes;
     QList<FileNode*> m_fileNodes;
@@ -331,7 +336,6 @@ private:
     friend class Node;
 };
 
-
 } // namespace ProjectExplorer
 
 // HACK: THERE SHOULD BE ONE PLACE TO MAKE THE FILE ENDING->FILE TYPE ASSOCIATION
diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp
index ab8fe7ec205ec135b6da619f7b681440159f2550..b1edc28f5b6ad5d3cd191efa9aeb21f5c7d9493a 100644
--- a/src/plugins/projectexplorer/projecttreewidget.cpp
+++ b/src/plugins/projectexplorer/projecttreewidget.cpp
@@ -40,6 +40,7 @@
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/editormanager/editormanager.h>
+#include <coreplugin/editormanager/ieditor.h>
 #include <coreplugin/icontext.h>
 
 #include <utils/qtcassert.h>
@@ -374,8 +375,11 @@ void ProjectTreeWidget::initView()
 void ProjectTreeWidget::openItem(const QModelIndex &mainIndex)
 {
     Node *node = m_model->nodeForIndex(mainIndex);
-    if (node->nodeType() == FileNodeType)
-        EditorManager::openEditor(node->path(), Id(), EditorManager::ModeSwitch);
+    if (node->nodeType() != FileNodeType)
+        return;
+    IEditor *editor = EditorManager::openEditor(node->path(), Id(), EditorManager::ModeSwitch);
+    if (node->line() >= 0)
+        editor->gotoLine(node->line());
 }
 
 void ProjectTreeWidget::setProjectFilter(bool filter)