diff --git a/src/plugins/coreplugin/navigationwidget.cpp b/src/plugins/coreplugin/navigationwidget.cpp
index 7b45ec137a30953a00f2afe1ac6fc51c5289fe8e..c551c98ea3dd282da55c10b583d135b9a3afa75b 100644
--- a/src/plugins/coreplugin/navigationwidget.cpp
+++ b/src/plugins/coreplugin/navigationwidget.cpp
@@ -218,6 +218,10 @@ QAbstractItemModel *NavigationWidget::factoryModel() const
 
 void NavigationWidget::updateToggleText()
 {
+    bool haveData = d->m_factoryModel->rowCount();
+    d->m_toggleSideBarAction->setVisible(haveData);
+    d->m_toggleSideBarAction->setEnabled(haveData);
+
     if (isShown())
         d->m_toggleSideBarAction->setToolTip(tr("Hide Sidebar"));
     else
@@ -312,6 +316,12 @@ void NavigationWidget::saveSettings(QSettings *settings)
 
 void NavigationWidget::restoreSettings(QSettings *settings)
 {
+    if (!d->m_factoryModel->rowCount()) {
+        // We have no widgets to show!
+        setShown(false);
+        return;
+    }
+
     int version = settings->value(QLatin1String("Navigation/Version"), 1).toInt();
     QStringList viewIds = settings->value(QLatin1String("Navigation/Views"),
                                           QStringList("Projects")).toStringList();
@@ -375,10 +385,11 @@ void NavigationWidget::setShown(bool b)
 {
     if (d->m_shown == b)
         return;
+    bool haveData = d->m_factoryModel->rowCount();
     d->m_shown = b;
     if (NavigationWidgetPlaceHolder::m_current) {
-        NavigationWidgetPlaceHolder::m_current->setVisible(d->m_shown && !d->m_suppressed);
-        d->m_toggleSideBarAction->setChecked(d->m_shown);
+        NavigationWidgetPlaceHolder::m_current->setVisible(d->m_shown && !d->m_suppressed && haveData);
+        d->m_toggleSideBarAction->setChecked(d->m_shown && !d->m_suppressed && haveData);
     } else {
         d->m_toggleSideBarAction->setChecked(false);
     }
@@ -420,4 +431,3 @@ QHash<QString, Core::Command*> NavigationWidget::commandMap() const
 }
 
 } // namespace Core
-