diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp
index f589e8703c1ce60d04977ca174973304fb1014d2..0bf12de806e53793034d66bc85747603092b0d76 100644
--- a/src/plugins/coreplugin/coreplugin.cpp
+++ b/src/plugins/coreplugin/coreplugin.cpp
@@ -85,6 +85,7 @@ bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage)
         EditorManager *editorManager = m_mainWindow->editorManager();
         m_editMode = new EditMode(editorManager);
         addObject(m_editMode);
+        m_mainWindow->modeManager()->activateMode(m_editMode->id());
 
         m_designMode = new DesignMode(editorManager);
         addObject(m_designMode);
@@ -95,6 +96,7 @@ bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage)
 void CorePlugin::extensionsInitialized()
 {
     m_mainWindow->extensionsInitialized();
+    m_mainWindow->modeManager()->switchToDefaultMode();
 }
 
 void CorePlugin::remoteCommand(const QStringList & /* options */, const QStringList &args)
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 20af0f8f3ee2923ca7ab994a2c23f1cedc94f289..c0e56ac3a8b97d7b3c2295fbe427fd12b015c467 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -971,12 +971,7 @@ Core::IEditor *EditorManager::activateEditor(Core::Internal::EditorView *view, C
     if (!(flags & NoActivate)) {
         setCurrentEditor(editor, (flags & IgnoreNavigationHistory));
         if (!(flags & NoModeSwitch)) {
-            const QString preferredMode = editor->preferredMode();
-            if (preferredMode.isEmpty() || preferredMode == Core::Constants::MODE_EDIT) {
-                ensureEditorManagerVisible();
-            } else {
-                ModeManager::instance()->activateMode(preferredMode);
-            }
+            switchToPreferedMode();
         }
         if (isVisible())
             editor->widget()->setFocus();
@@ -1255,10 +1250,22 @@ QStringList EditorManager::getOpenFileNames() const
                                                               QString(), &m_d->selectedFilter);
 }
 
-void EditorManager::ensureEditorManagerVisible()
+
+/// Empty mode == figure out the correct mode from the editor
+/// forcePrefered = true, switch to the mode even if the editor is visible in another mode
+/// forcePrefered = false, only switch if it is not visible
+void EditorManager::switchToPreferedMode()
 {
-    if (!isVisible())
-        m_d->m_core->modeManager()->activateMode(Constants::MODE_EDIT);
+    QString preferedMode;
+    // Figure out prefered mode for editor
+    if (m_d->m_currentEditor)
+        preferedMode = m_d->m_currentEditor->preferredMode();
+
+    if (preferedMode.isEmpty())
+        preferedMode = Constants::MODE_EDIT;
+
+    if (m_d->m_core->modeManager()->currentMode()->id() != preferedMode)
+        m_d->m_core->modeManager()->activateMode(preferedMode);
 }
 
 IEditor *EditorManager::openEditorWithContents(const QString &editorId,
@@ -1613,7 +1620,6 @@ void EditorManager::goBackInNavigationHistory()
 {
     currentEditorView()->goBackInNavigationHistory();
     updateActions();
-    ensureEditorManagerVisible();
     return;
 }
 
@@ -1621,7 +1627,6 @@ void EditorManager::goForwardInNavigationHistory()
 {
     currentEditorView()->goForwardInNavigationHistory();
     updateActions();
-    ensureEditorManagerVisible();
 }
 
 OpenEditorsWindow *EditorManager::windowPopup() const
@@ -1717,7 +1722,6 @@ bool EditorManager::restoreState(const QByteArray &state)
     m_d->m_splitter->restoreState(splitterstates);
 
     // splitting and stuff results in focus trouble, that's why we set the focus again after restoration
-    ensureEditorManagerVisible();
     if (m_d->m_currentEditor) {
         m_d->m_currentEditor->widget()->setFocus();
     } else if (Core::Internal::SplitterOrView *view = currentSplitterOrView()) {
diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h
index 0dae2ae0b954c59dfdea3e60b09e28b84aa1a481..0de53d38c63f351a3cc9344770d3567b1baa6980 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.h
+++ b/src/plugins/coreplugin/editormanager/editormanager.h
@@ -126,7 +126,7 @@ public:
     QStringList getOpenFileNames() const;
     QString getOpenWithEditorId(const QString &fileName, bool *isExternalEditor = 0) const;
 
-    void ensureEditorManagerVisible();
+    void switchToPreferedMode();
     bool hasEditor(const QString &fileName) const;
     QList<IEditor *> editorsForFileName(const QString &filename) const;
     QList<IEditor *> editorsForFile(IFile *file) const;
diff --git a/src/plugins/coreplugin/mimedatabase.cpp b/src/plugins/coreplugin/mimedatabase.cpp
index ea92354a357c23e18995316a1f16997cb8e0e412..b98f010d39fe2d22e97a43976c607e9d0edfafd5 100644
--- a/src/plugins/coreplugin/mimedatabase.cpp
+++ b/src/plugins/coreplugin/mimedatabase.cpp
@@ -455,7 +455,7 @@ bool MimeType::setPreferredSuffix(const QString &s)
     return true;
 }
 
-static QString formatFilterString(const QString &description, const QList<QRegExp> &globs)
+QString MimeType::formatFilterString(const QString &description, const QList<QRegExp> &globs)
 {
     QString rc;
     if (globs.empty())  // Binary files
diff --git a/src/plugins/coreplugin/mimedatabase.h b/src/plugins/coreplugin/mimedatabase.h
index 13a9d3a370f6090893a4d09ff2f25388794fb69d..751447f6d89ebf57cabf7d01e55a38a311ecae81 100644
--- a/src/plugins/coreplugin/mimedatabase.h
+++ b/src/plugins/coreplugin/mimedatabase.h
@@ -176,6 +176,8 @@ public:
 
     friend QDebug operator<<(QDebug d, const MimeType &mt);
 
+    static QString formatFilterString(const QString &description, const QList<QRegExp> &globs);
+
 private:
     explicit MimeType(const MimeTypeData &d);
     unsigned matchesFileBySuffix(Internal::FileMatchContext &c) const;
diff --git a/src/plugins/coreplugin/modemanager.cpp b/src/plugins/coreplugin/modemanager.cpp
index 091bcff4f4fcad49c306dc6997c97719fdc5758d..98c4222c8e580e3b5f5b8343018e4caa52023bac 100644
--- a/src/plugins/coreplugin/modemanager.cpp
+++ b/src/plugins/coreplugin/modemanager.cpp
@@ -73,6 +73,7 @@ struct ModeManagerPrivate
     QSignalMapper *m_signalMapper;
     Context m_addedContexts;
     int m_oldCurrent;
+    bool m_switchedToMode;
 };
 
 ModeManager *ModeManagerPrivate::m_instance = 0;
@@ -83,7 +84,8 @@ ModeManagerPrivate::ModeManagerPrivate(Internal::MainWindow *mainWindow,
     m_mainWindow(mainWindow),
     m_modeStack(modeStack),
     m_signalMapper(new QSignalMapper(q)),
-    m_oldCurrent(-1)
+    m_oldCurrent(-1),
+    m_switchedToMode(false)
 {
 }
 
@@ -151,6 +153,7 @@ IMode *ModeManager::mode(const QString &id) const
 
 void ModeManager::activateMode(const QString &id)
 {
+    d->m_switchedToMode = true;
     const int index = indexOf(id);
     if (index >= 0)
         d->m_modeStack->setCurrentIndex(index);
@@ -309,6 +312,12 @@ void ModeManager::setFocusToCurrentMode()
     }
 }
 
+void ModeManager::switchToDefaultMode()
+{
+    if (!d->m_switchedToMode)
+        d->m_modeStack->setCurrentIndex(0);
+}
+
 ModeManager *ModeManager::instance()
 {
     return ModeManagerPrivate::m_instance;
diff --git a/src/plugins/coreplugin/modemanager.h b/src/plugins/coreplugin/modemanager.h
index ea0fb71618805b9a80413db4f47ddc9053453a55..e92c927282804f215cad083aee599696df4788a1 100644
--- a/src/plugins/coreplugin/modemanager.h
+++ b/src/plugins/coreplugin/modemanager.h
@@ -66,6 +66,8 @@ public:
     void addProjectSelector(QAction *action);
     void addWidget(QWidget *widget);
 
+    void switchToDefaultMode();
+
 signals:
     void currentModeAboutToChange(Core::IMode *mode);
 
diff --git a/src/plugins/coreplugin/sidebar.cpp b/src/plugins/coreplugin/sidebar.cpp
index e7cf5f1222bc745f3b2b9978985beafa38d999a3..bd8429fc20643bc96c314a652f8c3e3698846b72 100644
--- a/src/plugins/coreplugin/sidebar.cpp
+++ b/src/plugins/coreplugin/sidebar.cpp
@@ -325,22 +325,21 @@ SideBarWidget::SideBarWidget(SideBar *sideBar, const QString &id)
     m_toolbar->setContentsMargins(0, 0, 0, 0);
     m_toolbar->addWidget(m_comboBox);
 
-    m_splitButton = new QToolButton;
-    m_splitButton->setIcon(QIcon(QLatin1String(Constants::ICON_SPLIT_HORIZONTAL)));
-    m_splitButton->setToolTip(tr("Split"));
-    connect(m_splitButton, SIGNAL(clicked(bool)), this, SIGNAL(splitMe()));
-
-    m_closeButton = new QToolButton;
-    m_closeButton->setIcon(QIcon(QLatin1String(Constants::ICON_CLOSE)));
-    m_closeButton->setToolTip(tr("Close"));
-
-    connect(m_closeButton, SIGNAL(clicked(bool)), this, SIGNAL(closeMe()));
-
     QWidget *spacerItem = new QWidget(this);
     spacerItem->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
     m_toolbar->addWidget(spacerItem);
-    m_splitAction = m_toolbar->addWidget(m_splitButton);
-    m_toolbar->addWidget(m_closeButton);
+
+    m_splitAction = new QAction(tr("Split"), m_toolbar);
+    m_splitAction->setToolTip(tr("Split"));
+    m_splitAction->setIcon(QIcon(QLatin1String(Constants::ICON_SPLIT_HORIZONTAL)));
+    connect(m_splitAction, SIGNAL(triggered()), this, SIGNAL(splitMe()));
+    m_toolbar->addAction(m_splitAction);
+
+    QAction *closeAction = new QAction(tr("Close"), m_toolbar);
+    closeAction->setToolTip(tr("Close"));
+    closeAction->setIcon(QIcon(QLatin1String(Constants::ICON_CLOSE)));
+    connect(closeAction, SIGNAL(triggered()), this, SIGNAL(closeMe()));
+    m_toolbar->addAction(closeAction);
 
     QVBoxLayout *lay = new QVBoxLayout();
     lay->setMargin(0);
@@ -427,7 +426,7 @@ void SideBarWidget::updateAvailableItems()
         idx = 0;
 
     m_comboBox->setCurrentIndex(idx);
-    m_splitButton->setEnabled(titleList.count() > 1);
+    m_splitAction->setEnabled(titleList.count() > 1);
     m_comboBox->blockSignals(blocked);
 }
 
diff --git a/src/plugins/coreplugin/sidebar.h b/src/plugins/coreplugin/sidebar.h
index 6ac82f8d403b8cf174a8dbabb634bb01b8556c01..e379f3cb6dbdcb7671f757ae0aacb7a61243b58f 100644
--- a/src/plugins/coreplugin/sidebar.h
+++ b/src/plugins/coreplugin/sidebar.h
@@ -179,8 +179,6 @@ private:
     QAction *m_splitAction;
     QList<QAction *> m_addedToolBarActions;
     SideBar *m_sideBar;
-    QToolButton *m_splitButton;
-    QToolButton *m_closeButton;
 };
 
 class ComboBox : public QComboBox
diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index c13b3da5f1bd27798050fb4335ed1f84a8d6b82a..40294cde5ea5ebc42cdd8af1fe3822c796d8fefc 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -375,6 +375,9 @@ struct CanonicalSymbol
 
 };
 
+
+int numberOfClosedEditors = 0;
+
 } // end of anonymous namespace
 
 CPPEditorEditable::CPPEditorEditable(CPPEditor *editor)
@@ -428,6 +431,12 @@ CPPEditor::~CPPEditor()
 
     m_semanticHighlighter->abort();
     m_semanticHighlighter->wait();
+
+    ++numberOfClosedEditors;
+    if (numberOfClosedEditors == 5) {
+        m_modelManager->GC();
+        numberOfClosedEditors = 0;
+    }
 }
 
 TextEditor::BaseTextEditorEditable *CPPEditor::createEditableInterface()
diff --git a/src/plugins/cpptools/cpplocatorfilter.cpp b/src/plugins/cpptools/cpplocatorfilter.cpp
index 34c696a15d8aa621b9da6d09e546e65dafdf5857..2b10afdce60f1518f0f4bab24cc39b95526f44b1 100644
--- a/src/plugins/cpptools/cpplocatorfilter.cpp
+++ b/src/plugins/cpptools/cpplocatorfilter.cpp
@@ -56,7 +56,7 @@ CppLocatorFilter::~CppLocatorFilter()
 
 void CppLocatorFilter::onDocumentUpdated(CPlusPlus::Document::Ptr doc)
 {
-    m_searchList[doc->fileName()] = Info(doc);
+    m_searchList[doc->fileName()] = search(doc);
 }
 
 void CppLocatorFilter::onAboutToRemoveFiles(const QStringList &files)
@@ -88,20 +88,12 @@ QList<Locator::FilterEntry> CppLocatorFilter::matchesFor(const QString &origEntr
         return goodEntries;
     bool hasWildcard = (entry.contains(asterisk) || entry.contains('?'));
 
-    QMutableMapIterator<QString, Info> it(m_searchList);
+    QHashIterator<QString, QList<ModelItemInfo> > it(m_searchList);
     while (it.hasNext()) {
         it.next();
 
-        Info info = it.value();
-        if (info.dirty) {
-            info.dirty = false;
-            info.items = search(info.doc);
-            it.setValue(info);
-        }
-
-        QList<ModelItemInfo> items = info.items;
-
-        foreach (ModelItemInfo info, items) {
+        const QList<ModelItemInfo> items = it.value();
+        foreach (const ModelItemInfo &info, items) {
             if ((hasWildcard && regexp.exactMatch(info.symbolName))
                     || (!hasWildcard && matcher.indexIn(info.symbolName) != -1)) {
 
diff --git a/src/plugins/cpptools/cpplocatorfilter.h b/src/plugins/cpptools/cpplocatorfilter.h
index 4c4df83a236f5ad17f990e3eaf69d095b8f06ced..7b13adc6c7fa83b66cf4cd47b4b63910be89678e 100644
--- a/src/plugins/cpptools/cpplocatorfilter.h
+++ b/src/plugins/cpptools/cpplocatorfilter.h
@@ -31,7 +31,6 @@
 #define CPPLOCATORFILTER_H
 
 #include "searchsymbols.h"
-
 #include <locator/ilocatorfilter.h>
 
 namespace CppTools {
@@ -63,16 +62,7 @@ private slots:
 private:
     CppModelManager *m_manager;
 
-    struct Info {
-        Info(): dirty(true) {}
-        Info(CPlusPlus::Document::Ptr doc): doc(doc), dirty(true) {}
-
-        CPlusPlus::Document::Ptr doc;
-        QList<ModelItemInfo> items;
-        bool dirty;
-    };
-
-    QMap<QString, Info> m_searchList;
+    QHash<QString, QList<ModelItemInfo> > m_searchList;
     QList<ModelItemInfo> m_previousResults;
     bool m_forceNewSearchList;
     QString m_previousEntry;
diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp
index 1595fd231cda234c4d39854f3e1e265ea0f73ad2..90d234560b629d390c7b235d343259d31560eb7d 100644
--- a/src/plugins/cpptools/cpptoolsplugin.cpp
+++ b/src/plugins/cpptools/cpptoolsplugin.cpp
@@ -170,10 +170,8 @@ void CppToolsPlugin::switchHeaderSource()
     Core::EditorManager *editorManager = Core::EditorManager::instance();
     Core::IEditor *editor = editorManager->currentEditor();
     QString otherFile = correspondingHeaderOrSource(editor->file()->fileName());
-    if (!otherFile.isEmpty()) {
+    if (!otherFile.isEmpty())
         editorManager->openEditor(otherFile);
-        editorManager->ensureEditorManagerVisible();
-    }
 }
 
 QFileInfo CppToolsPlugin::findFile(const QDir &dir, const QString &name,
diff --git a/src/plugins/cpptools/searchsymbols.cpp b/src/plugins/cpptools/searchsymbols.cpp
index 828f0ce2efb9378968e43f19826f7105bae784c8..01aecaa236ddec4cac2eb28670fdd9d0da56a634 100644
--- a/src/plugins/cpptools/searchsymbols.cpp
+++ b/src/plugins/cpptools/searchsymbols.cpp
@@ -67,6 +67,7 @@ QList<ModelItemInfo> SearchSymbols::operator()(Document::Ptr doc, const QString
         accept(doc->globalSymbolAt(i));
     }
     (void) switchScope(previousScope);
+    strings.clear();
     return items;
 }
 
@@ -216,10 +217,17 @@ void SearchSymbols::appendItem(const QString &name,
     QStringList fullyQualifiedName;
     foreach (const Name *name, LookupContext::fullyQualifiedName(symbol))
         fullyQualifiedName.append(overview.prettyName(name));
+
+    QString path = m_paths.value(symbol->fileId(), QString());
+    if (path.isEmpty()) {
+        path = QString::fromUtf8(symbol->fileName(), symbol->fileNameLength());
+        m_paths.insert(symbol->fileId(), path);
+    }
+
     const QIcon icon = icons.iconForSymbol(symbol);
     items.append(ModelItemInfo(name, info, type,
                                fullyQualifiedName,
-                               QString::fromUtf8(symbol->fileName(), symbol->fileNameLength()),
+                               path,
                                symbol->line(),
                                symbol->column() - 1, // 1-based vs 0-based column
                                icon));
diff --git a/src/plugins/cpptools/searchsymbols.h b/src/plugins/cpptools/searchsymbols.h
index 9a08b4dced29deed3704d8fbf81ae8d9cc113129..5b61fe783ba429d774a02642a22f8717491de675 100644
--- a/src/plugins/cpptools/searchsymbols.h
+++ b/src/plugins/cpptools/searchsymbols.h
@@ -40,6 +40,7 @@
 #include <QMetaType>
 #include <QString>
 #include <QSet>
+#include <QHash>
 
 #include <functional>
 
@@ -66,33 +67,33 @@ struct ModelItemInfo
                   const QIcon &icon)
         : symbolName(symbolName),
           symbolType(symbolType),
-          type(type),
           fullyQualifiedName(fullyQualifiedName),
           fileName(fileName),
+          icon(icon),
+          type(type),
           line(line),
-          column(column),
-          icon(icon)
+          column(column)
     { }
 
     ModelItemInfo(const ModelItemInfo &otherInfo)
         : symbolName(otherInfo.symbolName),
           symbolType(otherInfo.symbolType),
-          type(otherInfo.type),
           fullyQualifiedName(otherInfo.fullyQualifiedName),
           fileName(otherInfo.fileName),
+          icon(otherInfo.icon),
+          type(otherInfo.type),
           line(otherInfo.line),
-          column(otherInfo.column),
-          icon(otherInfo.icon)
+          column(otherInfo.column)
     {  }
 
     QString symbolName;
     QString symbolType;
-    ItemType type;
     QStringList fullyQualifiedName;
     QString fileName;
+    QIcon icon;
+    ItemType type;
     int line;
     int column;
-    QIcon icon;
 };
 
 class SearchSymbols: public std::unary_function<CPlusPlus::Document::Ptr, QList<ModelItemInfo> >,
@@ -152,6 +153,7 @@ private:
     CPlusPlus::Icons icons;
     QList<ModelItemInfo> items;
     SymbolTypes symbolsToSearchFor;
+    QHash<const CPlusPlus::StringLiteral *, QString> m_paths;
     bool separateScope;
 };
 
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 4bca46849aea47f88d7141cf0635599e9cb72b3c..61dcdf2b9459aa4080b28c060cc2667bd02c0939 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -111,6 +111,7 @@ DebuggerStartParameters::DebuggerStartParameters()
     breakAtMain(false),
     qmlServerAddress("127.0.0.1"),
     qmlServerPort(0),
+    useServerStartScript(false),
     toolChainType(ToolChain::UNKNOWN),
     startMode(NoStartMode),
     executableUid(0)
@@ -144,6 +145,7 @@ QDebug operator<<(QDebug str, const DebuggerStartParameters &sp)
             << " remoteChannel=" << sp.remoteChannel
             << " remoteArchitecture=" << sp.remoteArchitecture
             << " symbolFileName=" << sp.symbolFileName
+            << " useServerStartScript=" << sp.useServerStartScript
             << " serverStartScript=" << sp.serverStartScript
             << " toolchain=" << sp.toolChainType << '\n';
     return str;
diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h
index 551c5daf46b6ced8aaddf268198ca8ab2fd22399..bc6a57498e82d922391e5d28ebe2830fc5ffa871 100644
--- a/src/plugins/debugger/debuggerengine.h
+++ b/src/plugins/debugger/debuggerengine.h
@@ -85,6 +85,7 @@ public:
     QString remoteChannel;
     QString remoteArchitecture;
     QString symbolFileName;
+    bool useServerStartScript;
     QString serverStartScript;
     QString sysRoot;
     QByteArray remoteDumperLib;
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 2a27a8a96225429437429c1d24f5623f2609dff1..e72e48090c97b49c60296538815589a1ceeb3809 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -1764,7 +1764,7 @@ void DebuggerPluginPrivate::attachExternalApplication
     sp.displayName = tr("Process %1").arg(pid);
     sp.executable = binary;
     sp.crashParameter = crashParameter;
-    sp.startMode = crashParameter.isEmpty() ? AttachExternal:AttachCrashedExternal;
+    sp.startMode = crashParameter.isEmpty() ? AttachExternal : AttachCrashedExternal;
     DebuggerRunControl *rc = createDebugger(sp);
     startDebugger(rc);
 }
@@ -1844,8 +1844,8 @@ void DebuggerPluginPrivate::startRemoteApplication()
     if (!sp.debuggerCommand.isEmpty())
         sp.toolChainType = ToolChain::INVALID;
     sp.startMode = AttachToRemote;
-    if (dlg.useServerStartScript())
-        sp.serverStartScript = dlg.serverStartScript();
+    sp.useServerStartScript = dlg.useServerStartScript();
+    sp.serverStartScript = dlg.serverStartScript();
     sp.sysRoot = dlg.sysRoot();
     startDebugger(createDebugger(sp));
 }
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 942ccf713b9e162fbfde1141cf125420b4297475..19890fc0acc061a3c7409b14dfda3f88641851da 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -802,7 +802,15 @@ void GdbEngine::flushCommand(const GdbCommand &cmd0)
 
     m_gdbAdapter->write(cmd.command + "\r\n");
 
-    m_commandTimer->start();
+    // Start Watchdog.
+    if (m_commandTimer->interval() <= 20000)
+        m_commandTimer->setInterval(commandTimeoutTime());
+    // The process can die for external reason between the "-gdb-exit" was
+    // sent and a response could be retrieved. We don't want the watchdog
+    // to bark in that case since the only possible outcome is a dead
+    // process anyway.
+    if (cmd.command != "-gdb-exit")
+        m_commandTimer->start();
 
     //if (cmd.flags & LosesChild)
     //    setState(InferiorShutdownRequested);
@@ -4012,15 +4020,12 @@ bool GdbEngine::startGdb(const QStringList &args, const QString &gdb, const QStr
     gdbProc()->start(m_gdb, gdbArgs);
 
     if (!gdbProc()->waitForStarted()) {
-        const QString msg = tr("Unable to start gdb '%1': %2")
-            .arg(m_gdb, gdbProc()->errorString());
+        const QString msg = errorMessage(QProcess::FailedToStart);
         handleAdapterStartFailed(msg, settingsIdHint);
         return false;
     }
 
     showMessage(_("GDB STARTED, INITIALIZING IT"));
-    m_commandTimer->setInterval(commandTimeoutTime());
-
     postCommand("show version", CB(handleShowVersion));
 
     //postCommand("-enable-timings");
@@ -4128,19 +4133,23 @@ bool GdbEngine::checkDebuggingHelpers()
 
 void GdbEngine::handleGdbError(QProcess::ProcessError error)
 {
-    showMessage(_("HANDLE GDB ERROR: ") + errorMessage(error));
+    const QString msg = errorMessage(error);
+    showMessage(_("HANDLE GDB ERROR: ") + msg);
+    // Show a message box for asynchroneously reported issues.
     switch (error) {
+    case QProcess::FailedToStart:
+        // This should be handled by the code trying to start the process.
+        break;
     case QProcess::Crashed:
-        break; // will get a processExited() as well
-    // impossible case QProcess::FailedToStart:
+        // This will get a processExited() as well.
+        break;
     case QProcess::ReadError:
     case QProcess::WriteError:
     case QProcess::Timedout:
     default:
         //gdbProc()->kill();
         //setState(EngineShutdownRequested, true);
-        showMessageBox(QMessageBox::Critical, tr("Gdb I/O Error"),
-                       errorMessage(error));
+        showMessageBox(QMessageBox::Critical, tr("Gdb I/O Error"), msg);
         break;
     }
 }
diff --git a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
index 0d5f73140392438eeb3dd9a835988ecc19bc2005..824b5e78db808ffb7b361b1bcc8333bb123e1900 100644
--- a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
+++ b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
@@ -88,6 +88,10 @@ void RemoteGdbServerAdapter::startAdapter()
 {
     QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
     showMessage(_("TRYING TO START ADAPTER"));
+    if (!startParameters().useServerStartScript) {
+        handleSetupDone();
+        return;
+    }
     if (startParameters().serverStartScript.isEmpty()) {
         showMessage(_("No server start script given. "), StatusBar);
         emit requestSetup();
@@ -160,6 +164,11 @@ void RemoteGdbServerAdapter::setupInferior()
 {
     QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state());
 
+    QString fileName;
+    if (!startParameters().executable.isEmpty()) {
+        QFileInfo fi(startParameters().executable);
+        fileName = fi.absoluteFilePath();
+    }
     m_engine->postCommand("set architecture "
         + startParameters().remoteArchitecture.toLatin1());
     m_engine->postCommand("set sysroot "
@@ -173,8 +182,13 @@ void RemoteGdbServerAdapter::setupInferior()
     }
 
     m_engine->postCommand("set target-async on", CB(handleSetTargetAsync));
-    QFileInfo fi(startParameters().executable);
-    QString fileName = fi.absoluteFilePath();
+
+    if (fileName.isEmpty()) {
+        showMessage(tr("No symbol file given."), StatusBar);
+        callTargetRemote();
+        return;
+    }
+
     m_engine->postCommand("-file-exec-and-symbols \""
         + fileName.toLocal8Bit() + '"',
         CB(handleFileExecAndSymbols));
@@ -191,22 +205,27 @@ void RemoteGdbServerAdapter::handleFileExecAndSymbols(const GdbResponse &respons
 {
     QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state());
     if (response.resultClass == GdbResultDone) {
-        //m_breakHandler->clearBreakMarkers();
-
-        // "target remote" does three things:
-        //     (1) connects to the gdb server
-        //     (2) starts the remote application
-        //     (3) stops the remote application (early, e.g. in the dynamic linker)
-        QString channel = startParameters().remoteChannel;
-        m_engine->postCommand("target remote " + channel.toLatin1(),
-            CB(handleTargetRemote));
+        callTargetRemote();
     } else {
-        QString msg = tr("Starting remote executable failed:\n");
+        QString msg = tr("Reading debug information failed:\n");
         msg += QString::fromLocal8Bit(response.data.findChild("msg").data());
         m_engine->notifyInferiorSetupFailed(msg);
     }
 }
 
+void RemoteGdbServerAdapter::callTargetRemote()
+{
+    //m_breakHandler->clearBreakMarkers();
+
+    // "target remote" does three things:
+    //     (1) connects to the gdb server
+    //     (2) starts the remote application
+    //     (3) stops the remote application (early, e.g. in the dynamic linker)
+    QString channel = startParameters().remoteChannel;
+    m_engine->postCommand("target remote " + channel.toLatin1(),
+        CB(handleTargetRemote));
+}
+
 void RemoteGdbServerAdapter::handleTargetRemote(const GdbResponse &record)
 {
     QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state());
diff --git a/src/plugins/debugger/gdb/remotegdbserveradapter.h b/src/plugins/debugger/gdb/remotegdbserveradapter.h
index fa4f8c6d2de7b747a787bd93a1cd86b5e5741b92..7eb89200c795eba3bb2c21693ad4c4d261d3c059 100644
--- a/src/plugins/debugger/gdb/remotegdbserveradapter.h
+++ b/src/plugins/debugger/gdb/remotegdbserveradapter.h
@@ -75,6 +75,7 @@ private:
 
     void handleSetTargetAsync(const GdbResponse &response);
     void handleFileExecAndSymbols(const GdbResponse &response);
+    void callTargetRemote();
     void handleTargetRemote(const GdbResponse &response);
 
     const int m_toolChainType;
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index e549e6d48328a43f0f3e44228d7e031043e0f62f..bf881a97292c97e15ca55f490aafd51a51948d51 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -679,7 +679,6 @@ Core::IEditor *GitPlugin::openSubmitEditor(const QString &fileName, const Commit
     Core::IEditor *editor = m_core->editorManager()->openEditor(fileName, QLatin1String(Constants::GITSUBMITEDITOR_ID));
     if (Git::Constants::debug)
         qDebug() << Q_FUNC_INFO << fileName << editor;
-    m_core->editorManager()->ensureEditorManagerVisible();
     GitSubmitEditor *submitEditor = qobject_cast<GitSubmitEditor*>(editor);
     QTC_ASSERT(submitEditor, return 0);
     // The actions are for some reason enabled by the context switching
diff --git a/src/plugins/helloworld/HelloWorld.pluginspec b/src/plugins/helloworld/HelloWorld.pluginspec
index 7a120286ce23a7014e12c990ff629f1392520614..8910b999d8df3f06244784c0a521cd7aa2720fb2 100644
--- a/src/plugins/helloworld/HelloWorld.pluginspec
+++ b/src/plugins/helloworld/HelloWorld.pluginspec
@@ -1,4 +1,4 @@
-<plugin name="HelloWorld" version="2.0.90" compatVersion="2.0.90">
+<plugin name="HelloWorld" version="2.0.90" compatVersion="2.0.90" experimental="true">
     <vendor>Nokia Corporation</vendor>
     <copyright>(C) 2010 Nokia Corporation</copyright>
     <license>
diff --git a/src/plugins/helloworld/helloworldplugin.cpp b/src/plugins/helloworld/helloworldplugin.cpp
index 18485ada40440a5c9841e810308c315f2125e79d..14ca96b67b144cfe0a5bd0353571d9e90a8ffc37 100644
--- a/src/plugins/helloworld/helloworldplugin.cpp
+++ b/src/plugins/helloworld/helloworldplugin.cpp
@@ -30,6 +30,7 @@
 #include "helloworldplugin.h"
 
 #include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/actionmanager/actioncontainer.h>
 #include <coreplugin/basemode.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/icore.h>
@@ -77,9 +78,7 @@ bool HelloWorldPlugin::initialize(const QStringList &arguments, QString *error_m
 
     // Create a unique context id for our own view, that will be used for the
     // menu entry later.
-    QList<int> context = QList<int>()
-        << core->uniqueIDManager()->uniqueIdentifier(
-                QLatin1String("HelloWorld.MainView"));
+    Core::Context context("HelloWorld.MainView");
 
     // Create an action to be triggered by a menu entry
     QAction *helloWorldAction = new QAction(tr("Say \"&Hello World!\""), this);
diff --git a/src/plugins/locator/filesystemfilter.cpp b/src/plugins/locator/filesystemfilter.cpp
index 6c2d5c8422c689a1e6854ac7dbc3b63096b366a6..6ef07bdbaec0cbc784b6fe685dd74ea340dc0425 100644
--- a/src/plugins/locator/filesystemfilter.cpp
+++ b/src/plugins/locator/filesystemfilter.cpp
@@ -103,7 +103,6 @@ void FileSystemFilter::accept(FilterEntry selection) const
         return;
     }
     m_editorManager->openEditor(selection.internalData.toString());
-    m_editorManager->ensureEditorManagerVisible();
 }
 
 bool FileSystemFilter::openConfigDialog(QWidget *parent, bool &needsRefresh)
diff --git a/src/plugins/locator/locatorwidget.cpp b/src/plugins/locator/locatorwidget.cpp
index 8f29bbba7a19b94c1645c5ce6a6a13eae3924325..0ee99048ea07d7ef59c0aba86b14fda438a6fa22 100644
--- a/src/plugins/locator/locatorwidget.cpp
+++ b/src/plugins/locator/locatorwidget.cpp
@@ -439,7 +439,6 @@ static void filter_helper(QFutureInterface<FilterEntry> &entries, QList<ILocator
         foreach (const FilterEntry &entry, filter->matchesFor(searchText)) {
             if (checkDuplicates && alreadyAdded.contains(entry))
                 continue;
-            //entries.append(entry);
             entries.reportResult(entry);
             if (checkDuplicates)
                 alreadyAdded.insert(entry);
@@ -457,7 +456,6 @@ void LocatorWidget::updateCompletionList(const QString &text)
 
     QFuture<FilterEntry> future = QtConcurrent::run(filter_helper, filters, searchText);
     m_entriesWatcher->setFuture(future);
-    future.waitForFinished();
 }
 
 void LocatorWidget::updateEntries()
diff --git a/src/plugins/locator/opendocumentsfilter.cpp b/src/plugins/locator/opendocumentsfilter.cpp
index 4102d8e0d179a1280b796f560b28610527a056ec..535d670e4703a053011e189d255aa7b725c9e098 100644
--- a/src/plugins/locator/opendocumentsfilter.cpp
+++ b/src/plugins/locator/opendocumentsfilter.cpp
@@ -103,5 +103,4 @@ void OpenDocumentsFilter::accept(FilterEntry selection) const
         return;
     }
     m_editorManager->openEditor(selection.internalData.toString());
-    m_editorManager->ensureEditorManagerVisible();
 }
diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp
index 63a8ac4292ca9a28474e242750beca081710f2e6..1b21bece0906d141da2761a31e28f761e253c44b 100644
--- a/src/plugins/mercurial/mercurialplugin.cpp
+++ b/src/plugins/mercurial/mercurialplugin.cpp
@@ -599,8 +599,6 @@ void MercurialPlugin::showCommitWidget(const QList<QPair<QString, QString> > &st
         return;
     }
 
-    core->editorManager()->ensureEditorManagerVisible();
-
     CommitEditor *commitEditor = qobject_cast<CommitEditor *>(editor);
 
     if (!commitEditor) {
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index c338cdd59df6b280733f095f7bf725e12b9758eb..35067f4bda8ac0628e8b1b11902350d80edeb9b3 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -674,7 +674,6 @@ Core::IEditor *PerforcePlugin::openPerforceSubmitEditor(const QString &fileName,
 {
     Core::EditorManager *editorManager = Core::EditorManager::instance();
     Core::IEditor *editor = editorManager->openEditor(fileName, Constants::PERFORCE_SUBMIT_EDITOR_ID);
-    editorManager->ensureEditorManagerVisible();
     PerforceSubmitEditor *submitEditor = static_cast<PerforceSubmitEditor*>(editor);
     submitEditor->restrictToProjectFiles(depotFileNames);
     submitEditor->registerActions(m_undoAction, m_redoAction, m_submitCurrentLogAction, m_diffSelectedFiles);
diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
index 312c25941c93a3845cf36d6e60dcbde4badb2151..b42033881bb78e847009fb7d5bd6b90981648d96 100644
--- a/src/plugins/plugins.pro
+++ b/src/plugins/plugins.pro
@@ -23,7 +23,7 @@ SUBDIRS   = plugin_coreplugin \
             plugin_locator \
             plugin_debugger \
 #            plugin_qtestlib \ # this seems to be dead
-#            plugin_helloworld \ # sample plugin
+            plugin_helloworld \ # sample plugin
             plugin_help \
 #            plugin_regexp \ # don't know what to do with this
             plugin_cpaster \
diff --git a/src/plugins/projectexplorer/customwizard/customwizard.cpp b/src/plugins/projectexplorer/customwizard/customwizard.cpp
index 7ab2a611be17fb6ecb8a1ea5704ab47414cc25fe..7f4c5107b6169044a4e6b7d573f83837eba988a4 100644
--- a/src/plugins/projectexplorer/customwizard/customwizard.cpp
+++ b/src/plugins/projectexplorer/customwizard/customwizard.cpp
@@ -189,7 +189,7 @@ Core::GeneratedFiles CustomWizard::generateFiles(const QWizard *dialog, QString
     QTC_ASSERT(cwp, return Core::GeneratedFiles())
 
     CustomWizardContextPtr ctx = context();
-    ctx->targetPath = cwp->path();
+    ctx->path = ctx->targetPath = cwp->path();
     ctx->replacements = replacementMap(dialog);
     if (CustomWizardPrivate::verbose) {
         QString logText;
@@ -493,19 +493,14 @@ Core::GeneratedFiles CustomProjectWizard::generateFiles(const QWizard *w, QStrin
     QTC_ASSERT(dialog, return Core::GeneratedFiles())
     // Add project name as macro. Path is here under project directory
     CustomWizardContextPtr ctx = context();
-    ctx->targetPath = dialog->path() + QLatin1Char('/') + dialog->projectName();
+    ctx->path = dialog->path();
+    ctx->targetPath = ctx->path + QLatin1Char('/') + dialog->projectName();
     FieldReplacementMap fieldReplacementMap = replacementMap(dialog);
     fieldReplacementMap.insert(QLatin1String("ProjectName"), dialog->projectName());
     ctx->replacements = fieldReplacementMap;
     if (CustomWizardPrivate::verbose)
         qDebug() << "CustomProjectWizard::generateFiles" << dialog << ctx->targetPath << ctx->replacements;
     const Core::GeneratedFiles generatedFiles = generateWizardFiles(errorMessage);
-    // Find the project file and store in context
-    foreach(const Core::GeneratedFile &f, generatedFiles)
-        if (f.attributes() & Core::GeneratedFile::OpenProjectAttribute) {
-            ctx->projectFilePath = f.path();
-            break;
-        }
     return generatedFiles;
 }
 
diff --git a/src/plugins/projectexplorer/customwizard/customwizardparameters.cpp b/src/plugins/projectexplorer/customwizard/customwizardparameters.cpp
index f3d8fe9591f80a79a28a57721a11a2e6aa6bbf53..6efcd8d6ec2f21780d9c788727f646054e692bbb 100644
--- a/src/plugins/projectexplorer/customwizard/customwizardparameters.cpp
+++ b/src/plugins/projectexplorer/customwizard/customwizardparameters.cpp
@@ -791,8 +791,8 @@ void CustomWizardContext::reset()
     baseReplacements.insert(QLatin1String("CppHeaderSuffix"),
                             mdb->preferredSuffixByType(QLatin1String(CppTools::Constants::CPP_HEADER_MIMETYPE)));
     replacements.clear();
+    path.clear();
     targetPath.clear();
-    projectFilePath.clear();
 }
 
 QString CustomWizardContext::processFile(const FieldReplacementMap &fm, QString in)
diff --git a/src/plugins/projectexplorer/customwizard/customwizardparameters.h b/src/plugins/projectexplorer/customwizard/customwizardparameters.h
index 5c757e2b835f31ff458620057677c6d008507c4d..59ee8599cccd0d5bb762cca94ea2b76885978e3b 100644
--- a/src/plugins/projectexplorer/customwizard/customwizardparameters.h
+++ b/src/plugins/projectexplorer/customwizard/customwizardparameters.h
@@ -143,10 +143,11 @@ struct CustomWizardContext {
 
     FieldReplacementMap baseReplacements;
     FieldReplacementMap replacements;
-    // Where files should be created, that is, choosen path for simple wizards
-    // or "path/project" for project wizards.
+
+    QString path;
+    // Where files should be created, that is, 'path' for simple wizards
+    // or "path + project" for project wizards.
     QString targetPath;
-    QString projectFilePath;
 };
 
 extern const char customWizardFileOpenEditorAttributeC[];
diff --git a/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.h b/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.h
index 6010a97e1b01a40d7653202a34ba56564f60e850..a3feb6b0b5d95307fcde1f2f6b71e42a86e13592 100644
--- a/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.h
+++ b/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.h
@@ -48,11 +48,11 @@ struct GeneratorScriptArgument;
  * attribute of the <files> element) which actually creates files.
  * The command line of the script must follow the convention
  *
- * script [--dry-run] [Field1=Value1 [Field2=Value2] [Field3:Filename3]]]...
+ * script [--dry-run] [options]
+ *
+ * Options containing field placeholders are configured in the XML files
+ * and will be passed with them replaced by their values.
  *
- * Multiline texts will be passed on as temporary files using the colon
- * separator.
- * The parameters are the field values from the UI.
  * As Qt Creator needs to know the file names before actually creates them to
  * do overwrite checking etc., this is  2-step process:
  * 1) Determine file names and attributes: The script is called with the
diff --git a/src/plugins/projectexplorer/gccparser.cpp b/src/plugins/projectexplorer/gccparser.cpp
index ddcf7b9d79d1ce4fb8cc83dd6f47264754f4b599..953a39a822d2fe3aeaed67c002c3b838545f5c09 100644
--- a/src/plugins/projectexplorer/gccparser.cpp
+++ b/src/plugins/projectexplorer/gccparser.cpp
@@ -36,7 +36,7 @@ using namespace ProjectExplorer;
 
 namespace {
     // opt. drive letter + filename: (2 brackets)
-    const char * const FILE_PATTERN = "(([A-Za-z]:)?[^:]+\\.[^:]+):";
+    const char * const FILE_PATTERN = "(<command line>|([A-Za-z]:)?[^:]+\\.[^:]+):";
     const char * const COMMAND_PATTERN = "^(.*[\\\\/])?([a-z0-9]+-[a-z0-9]+-[a-z0-9]+-)?(gcc|g\\+\\+)(-[0-9\\.]+)?(\\.exe)?: ";
 }
 
@@ -584,6 +584,28 @@ void ProjectExplorerPlugin::testGccOutputParsers_data()
                          QLatin1String("../../../src/XmlUg/targetdelete.c"), -1,
                          Constants::TASK_CATEGORY_COMPILE))
             << QString();
+
+    QTest::newRow("GCCE 4: commandline, includes")
+            << QString::fromLatin1("In file included from /Symbian/SDK/EPOC32/INCLUDE/GCCE/GCCE.h:15,\n"
+                                   "                 from <command line>:26:\n"
+                                   "/Symbian/SDK/epoc32/include/variant/Symbian_OS.hrh:1134:26: warning: no newline at end of file")
+            << OutputParserTester::STDERR
+            << QString() << QString()
+            << ( QList<ProjectExplorer::Task>()
+                 << Task(Task::Unknown,
+                         QLatin1String("In file included from /Symbian/SDK/EPOC32/INCLUDE/GCCE/GCCE.h:15,"),
+                         QLatin1String("/Symbian/SDK/EPOC32/INCLUDE/GCCE/GCCE.h"), 15,
+                         Constants::TASK_CATEGORY_COMPILE)
+                << Task(Task::Unknown,
+                        QLatin1String("from <command line>:26:"),
+                        QLatin1String("<command line>"), 26,
+                        Constants::TASK_CATEGORY_COMPILE)
+                << Task(Task::Warning,
+                        QLatin1String("no newline at end of file"),
+                        QLatin1String("/Symbian/SDK/epoc32/include/variant/Symbian_OS.hrh"), 1134,
+                        Constants::TASK_CATEGORY_COMPILE))
+            << QString();
+
 }
 
 void ProjectExplorerPlugin::testGccOutputParsers()
diff --git a/src/plugins/projectexplorer/pluginfilefactory.cpp b/src/plugins/projectexplorer/pluginfilefactory.cpp
index a6c5961e819165548069c66225bbe91136e0eac5..c8bfe397ca64e07dc1cb2e59fb8211c35de863b2 100644
--- a/src/plugins/projectexplorer/pluginfilefactory.cpp
+++ b/src/plugins/projectexplorer/pluginfilefactory.cpp
@@ -87,6 +87,8 @@ QList<ProjectFileFactory *> ProjectFileFactory::createFactories(QString *filterS
     QList<IProjectManager*> projectManagers =
         ExtensionSystem::PluginManager::instance()->getObjects<IProjectManager>();
 
+    QList<QRegExp> allGlobPatterns;
+
     const QString filterSeparator = QLatin1String(";;");
     filterString->clear();
     foreach (IProjectManager *manager, projectManagers) {
@@ -94,8 +96,13 @@ QList<ProjectFileFactory *> ProjectFileFactory::createFactories(QString *filterS
         if (!filterString->isEmpty())
             *filterString += filterSeparator;
         const QString mimeType = manager->mimeType();
-        const QString pFilterString = Core::ICore::instance()->mimeDatabase()->findByType(mimeType).filterString();
+        Core::MimeType mime = Core::ICore::instance()->mimeDatabase()->findByType(mimeType);
+        const QString pFilterString = mime.filterString();
+        allGlobPatterns.append(mime.globPatterns());
         *filterString += pFilterString;
     }
+    QString allProjectFilter = Core::MimeType::formatFilterString(tr("All Projects"), allGlobPatterns);
+    allProjectFilter.append(filterSeparator);
+    filterString->prepend(allProjectFilter);
     return rc;
 }
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index d7a9daab089dca2559e53c5e4f157b6e56a816c8..bb552c765a4e0882768ab1e55cee53cd4bfe413a 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -135,9 +135,7 @@ struct ProjectExplorerPluginPrivate {
     QMultiMap<int, QObject*> m_actionMap;
     QAction *m_sessionManagerAction;
     QAction *m_newAction;
-#if 0
     QAction *m_loadAction;
-#endif
     Utils::ParameterAction *m_unloadAction;
     QAction *m_clearSession;
     QAction *m_buildProjectOnlyAction;
@@ -491,14 +489,11 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
     cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+N")));
     msessionContextMenu->addAction(cmd, Constants::G_SESSION_FILES);
 
-#if 0
     // open action
     d->m_loadAction = new QAction(tr("Load Project..."), this);
     cmd = am->registerAction(d->m_loadAction, Constants::LOAD, globalcontext);
     cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+O")));
-    mfile->addAction(cmd, Core::Constants::G_FILE_PROJECT);
     msessionContextMenu->addAction(cmd, Constants::G_SESSION_FILES);
-#endif
 
     // Default open action
     d->m_openFileAction = new QAction(tr("Open File"), this);
@@ -807,9 +802,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
 
     connect(d->m_sessionManagerAction, SIGNAL(triggered()), this, SLOT(showSessionManager()));
     connect(d->m_newAction, SIGNAL(triggered()), this, SLOT(newProject()));
-#if 0
     connect(d->m_loadAction, SIGNAL(triggered()), this, SLOT(loadAction()));
-#endif
     connect(d->m_buildProjectOnlyAction, SIGNAL(triggered()), this, SLOT(buildProjectOnly()));
     connect(d->m_buildAction, SIGNAL(triggered()), this, SLOT(buildProject()));
     connect(d->m_buildActionContextMenu, SIGNAL(triggered()), this, SLOT(buildProjectContextMenu()));
@@ -2116,7 +2109,6 @@ void ProjectExplorerPlugin::openFile()
     QTC_ASSERT(d->m_currentNode, return)
     Core::EditorManager *em = Core::EditorManager::instance();
     em->openEditor(d->m_currentNode->path());
-    em->ensureEditorManagerVisible();
 }
 
 void ProjectExplorerPlugin::showInGraphicalShell()
@@ -2312,7 +2304,6 @@ void ProjectExplorerPlugin::openEditorFromAction(QAction *action, const QString
         }
 
         em->openEditor(fileName, factory->id());
-        em->ensureEditorManagerVisible();
         return;
     }
     if (qVariantCanConvert<Core::IExternalEditor *>(data)) {
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
index 2cfd22ac6d44b1e0900df79092e362a1a065240d..64ad5c9d3b14f8d18ef4b26bcc598ff8d6f378e1 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
@@ -256,7 +256,7 @@ void RunSettingsWidget::removeRunConfiguration()
 {
     RunConfiguration *rc = m_target->activeRunConfiguration();
     QMessageBox msgBox(QMessageBox::Question, tr("Remove Run Configuration?"),
-                       tr("Do you really want to delete deploy configuration <b>%1</b>.").arg(rc->displayName()),
+                       tr("Do you really want to delete run configuration <b>%1</b>.").arg(rc->displayName()),
                        QMessageBox::Yes|QMessageBox::No, this);
     msgBox.setDefaultButton(QMessageBox::No);
     msgBox.setEscapeButton(QMessageBox::No);
diff --git a/src/plugins/projectexplorer/showineditortaskhandler.cpp b/src/plugins/projectexplorer/showineditortaskhandler.cpp
index 8783bcd7c0625ae68ffa6d3829579f253a151f2a..fce46a94c50681c81e397dca0840e173c51d4156 100644
--- a/src/plugins/projectexplorer/showineditortaskhandler.cpp
+++ b/src/plugins/projectexplorer/showineditortaskhandler.cpp
@@ -56,7 +56,6 @@ void ShowInEditorTaskHandler::handle(const ProjectExplorer::Task &task)
 {
     QFileInfo fi(task.file);
     TextEditor::BaseTextEditor::openEditorAt(fi.canonicalFilePath(), task.line);
-    Core::EditorManager::instance()->ensureEditorManagerVisible();
 }
 
 QAction *ShowInEditorTaskHandler::createAction(QObject *parent)
diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp
index f14efdb6e2db9e11df082b05010b3c66fc211692..4c708a2c0ab6e727415e2d1de5f4b4c34d2b479c 100644
--- a/src/plugins/qmldesigner/designmodewidget.cpp
+++ b/src/plugins/qmldesigner/designmodewidget.cpp
@@ -130,7 +130,7 @@ void DocumentWarningWidget::setError(const RewriterView::Error &error)
 void DocumentWarningWidget::goToError()
 {
     m_designModeWidget->textEditor()->gotoLine(m_error.line(), m_error.column());
-    Core::EditorManager::instance()->ensureEditorManagerVisible();
+    Core::ModeManager::instance()->activateMode(Core::Constants::MODE_EDIT);
 }
 
 // ---------- DesignModeWidget
diff --git a/src/plugins/texteditor/linenumberfilter.cpp b/src/plugins/texteditor/linenumberfilter.cpp
index ee73f4af877457b953ef476da6c20f9168ce2c12..961c03c9e44793d64fe2b1db497fcf4c6678decd 100644
--- a/src/plugins/texteditor/linenumberfilter.cpp
+++ b/src/plugins/texteditor/linenumberfilter.cpp
@@ -31,6 +31,8 @@
 #include "itexteditor.h"
 
 #include <coreplugin/editormanager/editormanager.h>
+#include <coreplugin/coreconstants.h>
+#include <coreplugin/modemanager.h>
 
 #include <QtCore/QVariant>
 
@@ -61,10 +63,10 @@ void LineNumberFilter::accept(FilterEntry selection) const
     ITextEditor *editor = currentTextEditor();
     if (editor) {
         Core::EditorManager *editorManager = Core::EditorManager::instance();
-        editorManager->ensureEditorManagerVisible();
         editorManager->addCurrentPositionToNavigationHistory();
         editor->gotoLine(selection.internalData.toInt());
         editor->widget()->setFocus();
+        Core::ModeManager::instance()->activateMode(Core::Constants::MODE_EDIT);
     }
 }
 
diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp
index 83f7d7938a87cc4071784fd0beda3847678af887..fc0281c5ba155e781374c8cf3e3d7f7b4c502810 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.cpp
+++ b/src/plugins/vcsbase/vcsbaseeditor.cpp
@@ -36,6 +36,8 @@
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/ifile.h>
 #include <coreplugin/iversioncontrol.h>
+#include <coreplugin/coreconstants.h>
+#include <coreplugin/modemanager.h>
 #include <extensionsystem/pluginmanager.h>
 #include <projectexplorer/editorconfiguration.h>
 #include <projectexplorer/projectexplorer.h>
@@ -634,7 +636,7 @@ void VCSBaseEditor::jumpToChangeFromDiff(QTextCursor cursor)
 
     Core::EditorManager *em = Core::EditorManager::instance();
     Core::IEditor *ed = em->openEditor(fileName);
-    em->ensureEditorManagerVisible();
+    Core::ModeManager::instance()->activateMode(Core::Constants::MODE_EDIT);
     if (TextEditor::ITextEditor *editor = qobject_cast<TextEditor::ITextEditor *>(ed))
         editor->gotoLine(chunkStart + lineCount);
 }
diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp
index 4ef9768394aa8092487f280877191d793800f9a1..46c59e871445fd2034522b081601b89ea32fe83e 100644
--- a/src/plugins/welcome/welcomeplugin.cpp
+++ b/src/plugins/welcome/welcomeplugin.cpp
@@ -76,7 +76,6 @@ bool WelcomePlugin::initialize(const QStringList & /* arguments */, QString * /*
 void WelcomePlugin::extensionsInitialized()
 {
     m_welcomeMode->initPlugins();
-    Core::ModeManager::instance()->activateMode(m_welcomeMode->id());
 }
 
 Q_EXPORT_PLUGIN(WelcomePlugin)