diff --git a/src/plugins/coreplugin/mainwindow.h b/src/plugins/coreplugin/mainwindow.h
index 57bea2133a51e66fdb6ebbfcf4449915db464502..433479a40d42eacdf302785578ff1186f3ff82c6 100644
--- a/src/plugins/coreplugin/mainwindow.h
+++ b/src/plugins/coreplugin/mainwindow.h
@@ -60,6 +60,7 @@ class MessageManager;
 class MimeDatabase;
 class ModeManager;
 class ProgressManager;
+class NavigationWidget;
 class RightPaneWidget;
 class ScriptManager;
 class SettingsDatabase;
@@ -73,7 +74,6 @@ class ActionManagerPrivate;
 class CoreImpl;
 class FancyTabWidget;
 class GeneralSettings;
-class NavigationWidget;
 class ProgressManagerPrivate;
 class ShortcutSettings;
 class StatusBarManager;
diff --git a/src/plugins/coreplugin/navigationwidget.cpp b/src/plugins/coreplugin/navigationwidget.cpp
index 0bfb62aea684845a509ae45193a3376bf1173311..709757c3893938938284a19e6c7c1f7cf1ea618c 100644
--- a/src/plugins/coreplugin/navigationwidget.cpp
+++ b/src/plugins/coreplugin/navigationwidget.cpp
@@ -233,18 +233,22 @@ NavigationSubWidget *NavigationWidget::insertSubItem(int position,int index)
 
 void NavigationWidget::activateSubWidget()
 {
-    setShown(true);
     QShortcut *original = qobject_cast<QShortcut *>(sender());
     QString id = m_shortcutMap[original];
+    activateSubWidget(id);
+}
 
+void NavigationWidget::activateSubWidget(const QString &factoryId)
+{
+    setShown(true);
     foreach (NavigationSubWidget *subWidget, m_subWidgets) {
-        if (subWidget->factory()->id() == id) {
+        if (subWidget->factory()->id() == factoryId) {
             subWidget->setFocusWidget();
             return;
         }
     }
 
-    int index = factoryIndex(id);
+    int index = factoryIndex(factoryId);
     if (index >= 0) {
         m_subWidgets.first()->setFactoryIndex(index);
         m_subWidgets.first()->setFocusWidget();
diff --git a/src/plugins/coreplugin/navigationwidget.h b/src/plugins/coreplugin/navigationwidget.h
index 1c4834aeb0fab54004db53b48340ace53d297245..e609e54239240ed3e49c6abfec32364a0b522bac 100644
--- a/src/plugins/coreplugin/navigationwidget.h
+++ b/src/plugins/coreplugin/navigationwidget.h
@@ -49,14 +49,11 @@ namespace Core {
 class INavigationWidgetFactory;
 class IMode;
 class Command;
-
-namespace Internal {
 class NavigationWidget;
-}
 
 class CORE_EXPORT NavigationWidgetPlaceHolder : public QWidget
 {
-    friend class Core::Internal::NavigationWidget;
+    friend class Core::NavigationWidget;
     Q_OBJECT
 public:
     NavigationWidgetPlaceHolder(Core::IMode *mode, QWidget *parent = 0);
@@ -71,10 +68,10 @@ private:
 };
 
 namespace Internal {
-
 class NavigationSubWidget;
+}
 
-class NavigationWidget : public MiniSplitter
+class CORE_EXPORT NavigationWidget : public MiniSplitter
 {
     Q_OBJECT
 public:
@@ -92,6 +89,7 @@ public:
     void saveSettings(QSettings *settings);
     void restoreSettings(QSettings *settings);
 
+    void activateSubWidget(const QString &factoryId);
     void closeSubWidgets();
 
     bool isShown() const;
@@ -120,10 +118,10 @@ private slots:
 
 private:
     void updateToggleText();
-    NavigationSubWidget *insertSubItem(int position, int index);
+    Internal::NavigationSubWidget *insertSubItem(int position, int index);
     int factoryIndex(const QString &id);
 
-    QList<NavigationSubWidget *> m_subWidgets;
+    QList<Internal::NavigationSubWidget *> m_subWidgets;
     QHash<QShortcut *, QString> m_shortcutMap;
     QHash<QString, Core::Command*> m_commandMap;
     QStandardItemModel *m_factoryModel;
@@ -135,6 +133,8 @@ private:
     QAction *m_toggleSideBarAction;
 };
 
+namespace Internal {
+
 class NavigationSubWidget : public QWidget
 {
     Q_OBJECT