diff --git a/src/libs/utils/fancymainwindow.cpp b/src/libs/utils/fancymainwindow.cpp
index 26499f33fc66482accd5d4ef90fe43e9e99a8d61..2bb28ff7b143598c919438c12a97ec43562d412a 100644
--- a/src/libs/utils/fancymainwindow.cpp
+++ b/src/libs/utils/fancymainwindow.cpp
@@ -39,7 +39,7 @@
 
 static const char lockedKeyC[] = "Locked";
 static const char stateKeyC[] = "State";
-static const int settingsVersion = 1;
+static const int settingsVersion = 2;
 
 namespace Utils {
 
@@ -55,6 +55,7 @@ struct FancyMainWindowPrivate {
     QAction *m_toggleLockedAction;
     QAction *m_menuSeparator2;
     QAction *m_resetLayoutAction;
+    QDockWidget *m_toolBarDockWidget;
 };
 
 FancyMainWindowPrivate::FancyMainWindowPrivate(FancyMainWindow *q) :
@@ -62,7 +63,8 @@ FancyMainWindowPrivate::FancyMainWindowPrivate(FancyMainWindow *q) :
     m_menuSeparator1(new QAction(q)),
     m_toggleLockedAction(new QAction(FancyMainWindow::tr("Locked"), q)),
     m_menuSeparator2(new QAction(q)),
-    m_resetLayoutAction(new QAction(FancyMainWindow::tr("Reset to Default Layout") ,q))
+    m_resetLayoutAction(new QAction(FancyMainWindow::tr("Reset to Default Layout") ,q)),
+    m_toolBarDockWidget(0)
 {
     m_toggleLockedAction->setCheckable(true);
     m_toggleLockedAction->setChecked(m_locked);
@@ -283,4 +285,14 @@ void FancyMainWindow::setDockActionsVisible(bool v)
     d->m_resetLayoutAction->setVisible(v);
 }
 
+QDockWidget *FancyMainWindow::toolBarDockWidget() const
+{
+    return d->m_toolBarDockWidget;
+}
+
+void FancyMainWindow::setToolBarDockWidget(QDockWidget *dock)
+{
+    d->m_toolBarDockWidget = dock;
+}
+
 } // namespace Utils
diff --git a/src/libs/utils/fancymainwindow.h b/src/libs/utils/fancymainwindow.h
index a9079fa2e88bc08aac68119b9e12a87ba53fd71e..2b0927a058f5df94e4aaee29af59ce821e7c719b 100644
--- a/src/libs/utils/fancymainwindow.h
+++ b/src/libs/utils/fancymainwindow.h
@@ -76,6 +76,10 @@ public:
     // Overwritten to add locked/reset.
     virtual QMenu *createPopupMenu();
 
+
+    QDockWidget *toolBarDockWidget() const;
+    void setToolBarDockWidget(QDockWidget *dock);
+
 signals:
     // Emitted by resetLayoutAction(). Connect to a slot
     // restoring the default layout.
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 4b44d16adc18ca7eee49528fa372d23a7833beb5..579e60aa97960a3afe6275fcbe966fdd115242bb 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -1524,9 +1524,6 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments, QString *er
     // UI Switcher
     connect(m_uiSwitcher, SIGNAL(languageChanged(QString)),
         this, SLOT(languageChanged(QString)));
-    m_uiSwitcher->initialize();
-    m_watchersWindow->setVisible(false);
-    m_returnWindow->setVisible(false);
 
     disconnectEngine();
     return true;
@@ -1961,6 +1958,8 @@ void DebuggerPluginPrivate::setSimpleDockWidgetArrangement(const QString &active
             }
         }
 
+        mw->splitDockWidget(mw->toolBarDockWidget(), m_stackDock, Qt::Vertical);
+        mw->splitDockWidget(m_stackDock, m_watchDock, Qt::Horizontal);
         mw->tabifyDockWidget(m_watchDock, m_breakDock);
         mw->tabifyDockWidget(m_watchDock, m_modulesDock);
         mw->tabifyDockWidget(m_watchDock, m_registerDock);
@@ -2464,6 +2463,10 @@ void DebuggerPlugin::remoteCommand(const QStringList &options, const QStringList
 
 void DebuggerPlugin::extensionsInitialized()
 {
+    d->m_uiSwitcher->initialize();
+    d->m_watchersWindow->setVisible(false);
+    d->m_returnWindow->setVisible(false);
+
     // time gdb -i mi -ex 'debuggerplugin.cpp:800' -ex r -ex q bin/qtcreator.bin
     const QByteArray env = qgetenv("QTC_DEBUGGER_TEST");
     //qDebug() << "EXTENSIONS INITIALIZED:" << env;
@@ -2472,11 +2475,6 @@ void DebuggerPlugin::extensionsInitialized()
     if (d->m_attachRemoteParameters.attachPid
             || !d->m_attachRemoteParameters.attachCore.isEmpty())
         QTimer::singleShot(0, d, SLOT(attachCmdLine()));
-
-    //qDebug() << "EXTENSIONS INITIALIZED";
-    // Already done in initialize(). FIXME: Move stuff to here?
-    //readSettings();
-    //d->m_uiSwitcher->initialize();
 }
 
 QWidget *DebuggerPlugin::mainWindow() const
diff --git a/src/plugins/debugger/debuggeruiswitcher.cpp b/src/plugins/debugger/debuggeruiswitcher.cpp
index 1e9a89ae1960162f0b85416b8acff263744f41b0..4c14a8af18df929ada838717c60d38cc12430859 100644
--- a/src/plugins/debugger/debuggeruiswitcher.cpp
+++ b/src/plugins/debugger/debuggeruiswitcher.cpp
@@ -332,6 +332,7 @@ QWidget *DebuggerUISwitcher::createMainWindow(Core::BaseMode *mode)
 {
     d->m_mainWindow = new DebuggerMainWindow(this);
     d->m_mainWindow->setDocumentMode(true);
+    d->m_mainWindow->setDockNestingEnabled(true);
     connect(d->m_mainWindow, SIGNAL(resetLayout()),
             this, SLOT(resetDebuggerLayout()));
 
@@ -359,6 +360,15 @@ QWidget *DebuggerUISwitcher::createMainWindow(Core::BaseMode *mode)
     debugToolBarLayout->addStretch();
     debugToolBarLayout->addWidget(new Utils::StyledSeparator);
 
+    QDockWidget *dock = new QDockWidget(tr("Debugger Toolbar"));
+    dock->setObjectName(QLatin1String("Debugger Toolbar"));
+    dock->setWidget(debugToolBar);
+    dock->setFeatures(QDockWidget::NoDockWidgetFeatures);
+    dock->setAllowedAreas(Qt::BottomDockWidgetArea);
+    dock->setTitleBarWidget(new QWidget(dock));
+    d->m_mainWindow->addDockWidget(Qt::BottomDockWidgetArea, dock);
+    d->m_mainWindow->setToolBarDockWidget(dock);
+
     QWidget *centralWidget = new QWidget;
     d->m_mainWindow->setCentralWidget(centralWidget);
 
@@ -367,7 +377,6 @@ QWidget *DebuggerUISwitcher::createMainWindow(Core::BaseMode *mode)
     centralLayout->setMargin(0);
     centralLayout->setSpacing(0);
     centralLayout->addWidget(documentAndRightPane);
-    centralLayout->addWidget(debugToolBar);
     centralLayout->setStretch(0, 1);
     centralLayout->setStretch(1, 0);
 
@@ -473,9 +482,12 @@ void DebuggerUISwitcher::initialize()
     emit dockArranged(QString());
     readSettings();
 
-    if (d->m_activeLanguage == -1) {
-        changeDebuggerUI(d->m_languages.first());
-    }
+    const QString &activeLang = (d->m_activeLanguage != -1
+                                 ? d->m_languages.at(d->m_activeLanguage)
+                                     : d->m_languages.first());
+    d->m_activeLanguage = -1; // enforce refresh
+    changeDebuggerUI(activeLang);
+
     hideInactiveWidgets();
     d->m_mainWindow->setDockActionsVisible(false);
 }
diff --git a/src/plugins/qmlinspector/qmlinspector.cpp b/src/plugins/qmlinspector/qmlinspector.cpp
index a6adafb72f8cf4539238c320d259550489ca7f4c..e251194ea2a217d4f7e5bfba7564d981c39c445b 100644
--- a/src/plugins/qmlinspector/qmlinspector.cpp
+++ b/src/plugins/qmlinspector/qmlinspector.cpp
@@ -770,6 +770,7 @@ void QmlInspector::setSimpleDockWidgetArrangement()
             dockWidget->show();
         }
     }
+    mainWindow->splitDockWidget(mainWindow->toolBarDockWidget(), m_propertyWatcherDock, Qt::Vertical);
     //mainWindow->tabifyDockWidget(m_frameRateDock, m_propertyWatcherDock);
     mainWindow->tabifyDockWidget(m_propertyWatcherDock, m_expressionQueryDock);
     mainWindow->tabifyDockWidget(m_propertyWatcherDock, m_inspectorOutputDock);