diff --git a/src/plugins/help/generalsettingspage.cpp b/src/plugins/help/generalsettingspage.cpp
index 85d6caef942e821ddb41b0c8463a0241abca2638..04eccbc02bf538eff8393424009c1c039632fa4e 100644
--- a/src/plugins/help/generalsettingspage.cpp
+++ b/src/plugins/help/generalsettingspage.cpp
@@ -137,6 +137,11 @@ QWidget *GeneralSettingsPage::createPage(QWidget *parent)
            << ' ' << m_ui.bookmarkGroupBox->title();
         m_searchKeywords.remove(QLatin1Char('&'));
     }
+
+    m_returnOnClose = manager->customValue(QLatin1String("ReturnOnClose"),
+        false).toBool();
+    m_ui.m_returnOnClose->setChecked(m_returnOnClose);
+
     return widget;
 }
 
@@ -195,6 +200,13 @@ void GeneralSettingsPage::apply()
 
         emit contextHelpOptionChanged();
     }
+
+    const bool close = m_ui.m_returnOnClose->isChecked();
+    if (m_returnOnClose != close) {
+        m_returnOnClose = close;
+        manager->setCustomValue(QLatin1String("ReturnOnClose"), close);
+        emit returnOnCloseChanged();
+    }
 }
 
 void GeneralSettingsPage::setCurrentPage()
diff --git a/src/plugins/help/generalsettingspage.h b/src/plugins/help/generalsettingspage.h
index c35c350e5fceec8562b7f35cbf9f9b52b11034b5..87a93b5b130f42cedb3c99dbbb044f0b88be7314 100644
--- a/src/plugins/help/generalsettingspage.h
+++ b/src/plugins/help/generalsettingspage.h
@@ -59,6 +59,7 @@ public:
 signals:
     void fontChanged();
     void startOptionChanged();
+    void returnOnCloseChanged();
     void contextHelpOptionChanged();
 
 private slots:
@@ -81,6 +82,8 @@ private:
     QString m_homePage;
     int m_contextOption;
 
+    bool m_returnOnClose;
+
     QString m_searchKeywords;
     Ui::GeneralSettingsPage m_ui;
 };
diff --git a/src/plugins/help/generalsettingspage.ui b/src/plugins/help/generalsettingspage.ui
index 40c9c70703860464cc3790f6a20a3481ecbc7d8c..e317495c0d20e60b9a379d006eb0ee4aefa17d25 100644
--- a/src/plugins/help/generalsettingspage.ui
+++ b/src/plugins/help/generalsettingspage.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>498</width>
-    <height>304</height>
+    <width>491</width>
+    <height>360</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -356,6 +356,25 @@
      </layout>
     </widget>
    </item>
+   <item>
+    <widget class="QGroupBox" name="behaviourGroupBox">
+     <property name="title">
+      <string>Behaviour</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_4">
+      <item>
+       <widget class="QCheckBox" name="m_returnOnClose">
+        <property name="toolTip">
+         <string>Switch to editor context after last help page is closed.</string>
+        </property>
+        <property name="text">
+         <string>Return to editor on close last page</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
    <item>
     <spacer name="verticalSpacer">
      <property name="orientation">
diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index 902885b2b0d40601850d157832572d572c0f6cfe..ca218cc68e8889608cd69ff7bcdf86f66f3a308a 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -164,6 +164,8 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
         SLOT(fontChanged()));
     connect(m_generalSettingsPage, SIGNAL(contextHelpOptionChanged()), this,
         SLOT(contextHelpOptionChanged()));
+    connect(m_generalSettingsPage, SIGNAL(returnOnCloseChanged()), this,
+        SLOT(updateCloseButton()));
     connect(Core::HelpManager::instance(), SIGNAL(helpRequested(QUrl)), this,
         SLOT(handleHelpRequest(QUrl)));
 
@@ -670,7 +672,11 @@ void HelpPlugin::updateSideBarSource(const QUrl &newUrl)
 
 void HelpPlugin::updateCloseButton()
 {
-    m_closeButton->setEnabled(OpenPagesManager::instance().pageCount() > 1);
+    Core::HelpManager *manager = Core::HelpManager::instance();
+    const bool closeOnReturn = manager->customValue(QLatin1String("ReturnOnClose"),
+        false).toBool();
+    m_closeButton->setEnabled((OpenPagesManager::instance().pageCount() > 1)
+        | closeOnReturn);
 }
 
 void HelpPlugin::fontChanged()
diff --git a/src/plugins/help/openpagesmanager.cpp b/src/plugins/help/openpagesmanager.cpp
index 98ee8d3c29bbb5760688dbcf5cb06bce0178c4f7..7d6efefed117b0bc69e52b630e4bea0875f065d1 100644
--- a/src/plugins/help/openpagesmanager.cpp
+++ b/src/plugins/help/openpagesmanager.cpp
@@ -45,6 +45,10 @@
 
 #include <QtHelp/QHelpEngine>
 
+#include <coreplugin/coreconstants.h>
+#include <coreplugin/helpmanager.h>
+#include <coreplugin/modemanager.h>
+
 using namespace Help::Internal;
 
 OpenPagesManager *OpenPagesManager::m_instance = 0;
@@ -226,11 +230,22 @@ void OpenPagesManager::closeCurrentPage()
 {
     if (!m_openPagesWidget)
         return;
+
     QModelIndexList indexes = m_openPagesWidget->selectionModel()->selectedRows();
     if (indexes.isEmpty())
         return;
-    Q_ASSERT(indexes.count() == 1);
-    removePage(indexes.first().row());
+
+    Core::HelpManager *manager = Core::HelpManager::instance();
+    const bool closeOnReturn = manager->customValue(QLatin1String("ReturnOnClose"),
+        false).toBool();
+
+    if (m_model->rowCount() == 1 && closeOnReturn) {
+        Core::ModeManager *modeManager = Core::ModeManager::instance();
+        modeManager->activateMode(Core::Constants::MODE_EDIT);
+    } else {
+        Q_ASSERT(indexes.count() == 1);
+        removePage(indexes.first().row());
+    }
 }
 
 void OpenPagesManager::closePage(const QModelIndex &index)