diff --git a/src/libs/utils/fancymainwindow.cpp b/src/libs/utils/fancymainwindow.cpp
index 910170ebf26927f469da35b17151d6c1512e5031..f58f8332ca02df32f553845c4e300f998c01f631 100644
--- a/src/libs/utils/fancymainwindow.cpp
+++ b/src/libs/utils/fancymainwindow.cpp
@@ -142,20 +142,41 @@ void FancyMainWindow::handleVisibilityChanged(bool visible)
 
 void FancyMainWindow::saveSettings(QSettings *settings) const
 {
-    settings->setValue("State", saveState());
-    settings->setValue("Locked", m_locked);
-    for (int i = 0; i < m_dockWidgetActiveState.count(); ++i) {
-        settings->setValue(m_dockWidgets.at(i)->objectName(),
-                           m_dockWidgetActiveState.at(i));
+    QHash<QString, QVariant> hash = saveSettings();
+    QHashIterator<QString, QVariant> it(hash);
+    while (it.hasNext()) {
+        it.next();
+        settings->setValue(it.key(), it.value());
     }
 }
 
 void FancyMainWindow::restoreSettings(QSettings *settings)
 {
-    QByteArray ba = settings->value("State", QByteArray()).toByteArray();
+    QHash<QString, QVariant> hash;
+    foreach (const QString &key, settings->childKeys()) {
+        hash.insert(key, settings->value(key));
+    }
+    restoreSettings(hash);
+}
+
+QHash<QString, QVariant> FancyMainWindow::saveSettings() const
+{
+    QHash<QString, QVariant> settings;
+    settings["State"] = saveState();
+    settings["Locked"] = m_locked;
+    for (int i = 0; i < m_dockWidgetActiveState.count(); ++i) {
+        settings[m_dockWidgets.at(i)->objectName()] =
+                           m_dockWidgetActiveState.at(i);
+    }
+    return settings;
+}
+
+void FancyMainWindow::restoreSettings(const QHash<QString, QVariant> &settings)
+{
+    QByteArray ba = settings.value("State", QByteArray()).toByteArray();
     restoreState(ba);
-    m_locked = settings->value("Locked", true).toBool();
+    m_locked = settings.value("Locked", true).toBool();
     for (int i = 0; i < m_dockWidgetActiveState.count(); ++i) {
-        m_dockWidgetActiveState[i] = settings->value(m_dockWidgets.at(i)->objectName(), false).toBool();
+        m_dockWidgetActiveState[i] = settings.value(m_dockWidgets.at(i)->objectName(), false).toBool();
     }
 }
diff --git a/src/libs/utils/fancymainwindow.h b/src/libs/utils/fancymainwindow.h
index f3367e448431ad0803b10631f4419a60ffb4e7af..7d6591134412ba207dd1477d29d89190cc6683c7 100644
--- a/src/libs/utils/fancymainwindow.h
+++ b/src/libs/utils/fancymainwindow.h
@@ -33,6 +33,7 @@
 #include "utils_global.h"
 
 #include <QtCore/QList>
+#include <QtCore/QHash>
 #include <QtCore/QSettings>
 #include <QtGui/QMainWindow>
 #include <QtGui/QDockWidget>
@@ -56,6 +57,8 @@ public:
 
     void saveSettings(QSettings *settings) const;
     void restoreSettings(QSettings *settings);
+    QHash<QString, QVariant> saveSettings() const;
+    void restoreSettings(const QHash<QString, QVariant> &settings);
 
 public slots:
     void setLocked(bool locked);