diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp
index b88ef2175cf9068853f890ee0c1d8036bdffa8fe..32b6ca9edfb3cc11834c2aa2eb175dcc715394ee 100644
--- a/src/plugins/projectexplorer/projecttreewidget.cpp
+++ b/src/plugins/projectexplorer/projecttreewidget.cpp
@@ -119,6 +119,13 @@ ProjectTreeWidget::ProjectTreeWidget(QWidget *parent)
           m_autoSync(false)
 {
     m_model = new FlatModel(m_explorer->session()->sessionNode(), this);
+    NodesWatcher *watcher = new NodesWatcher(this);
+    m_explorer->session()->sessionNode()->registerWatcher(watcher);
+
+    connect(watcher, SIGNAL(foldersAboutToBeRemoved(FolderNode *, const QList<FolderNode*> &)),
+            this, SLOT(foldersAboutToBeRemoved(FolderNode *, const QList<FolderNode*> &)));
+    connect(watcher, SIGNAL(filesAboutToBeRemoved(FolderNode *, const QList<FileNode*> &)),
+            this, SLOT(filesAboutToBeRemoved(FolderNode *, const QList<FileNode*> &)));
 
     m_view = new ProjectTreeView;
     m_view->setModel(m_model);
@@ -165,6 +172,29 @@ ProjectTreeWidget::ProjectTreeWidget(QWidget *parent)
     setAutoSynchronization(true);
 }
 
+void ProjectTreeWidget::foldersAboutToBeRemoved(FolderNode *, const QList<FolderNode*> &list)
+{
+    Node *n = m_explorer->currentNode();
+    while(n) {
+        if (FolderNode *fn = qobject_cast<FolderNode *>(n)) {
+            if (list.contains(fn)) {
+                m_explorer->setCurrentNode(n->projectNode());
+                break;
+            }
+        }
+        n = n->parentFolderNode();
+    }
+}
+
+void ProjectTreeWidget::filesAboutToBeRemoved(FolderNode *, const QList<FileNode*> &list)
+{
+    if (FileNode *fileNode = qobject_cast<FileNode *>(m_explorer->currentNode())) {
+        if (list.contains(fileNode)) {
+            m_explorer->setCurrentNode(fileNode->projectNode());
+        }
+    }
+}
+
 QToolButton *ProjectTreeWidget::toggleSync()
 {
     return m_toggleSync;
diff --git a/src/plugins/projectexplorer/projecttreewidget.h b/src/plugins/projectexplorer/projecttreewidget.h
index f723bfaff65d834efd4c78aaf4aa6e3f225a662f..4b536f1cff1506e7c0c827f4c686e9d95362f21a 100644
--- a/src/plugins/projectexplorer/projecttreewidget.h
+++ b/src/plugins/projectexplorer/projecttreewidget.h
@@ -40,6 +40,8 @@ namespace ProjectExplorer {
 class ProjectExplorerPlugin;
 class Project;
 class Node;
+class FolderNode;
+class FileNode;
 
 namespace Internal {
 
@@ -73,6 +75,9 @@ private slots:
     void startupProjectChanged(ProjectExplorer::Project *project);
     void initView();
 
+    void foldersAboutToBeRemoved(FolderNode *, const QList<FolderNode*> &);
+    void filesAboutToBeRemoved(FolderNode *, const QList<FileNode*> &);
+
 private:
     ProjectExplorerPlugin *m_explorer;
     QTreeView *m_view;