diff --git a/src/plugins/designer/editorwidget.cpp b/src/plugins/designer/editorwidget.cpp
index 7a1b60ee3d985342c19ce1d7d7f12090a498d913..f937bcf181e63e2d9499212d1b81cc4b8ced6e76 100644
--- a/src/plugins/designer/editorwidget.cpp
+++ b/src/plugins/designer/editorwidget.cpp
@@ -80,7 +80,8 @@ SharedSubWindow::~SharedSubWindow()
 QHash<QString, QVariant> EditorWidget::m_globalState = QHash<QString, QVariant>();
 
 EditorWidget::EditorWidget(QWidget *formWindow)
-    : m_mainWindow(new Core::Utils::FancyMainWindow)
+    : m_mainWindow(new Core::Utils::FancyMainWindow),
+    m_initialized(false)
 {
     QVBoxLayout *layout = new QVBoxLayout;
     layout->setMargin(0);
@@ -125,7 +126,6 @@ void EditorWidget::setDefaultLayout()
     }
 
     m_mainWindow->setTrackingEnabled(true);
-    m_globalState = m_mainWindow->saveSettings();
 }
 
 void EditorWidget::activate()
@@ -133,10 +133,21 @@ void EditorWidget::activate()
     for (int i=0; i < DesignerSubWindowCount; i++)
         m_designerSubWindows[i]->activate();
 
+    if (!m_initialized) {
+        // set a default layout, so if something goes wrong with
+        // restoring the settings below, there is a fallback
+        // (otherwise we end up with a broken mainwindow layout)
+        // we can't do it in the constructor, because the sub windows
+        // don't have their widgets yet there
+        setDefaultLayout();
+        m_initialized = true;
+    }
+
     if (!m_globalState.isEmpty())
         m_mainWindow->restoreSettings(m_globalState);
-    else
-        setDefaultLayout();
+    else {
+        m_globalState = m_mainWindow->saveSettings();
+    }
 }
 
 void EditorWidget::hideEvent(QHideEvent *)
diff --git a/src/plugins/designer/editorwidget.h b/src/plugins/designer/editorwidget.h
index ca3965a812da2866f9a7f05918fc0fe7e919cb49..a18e86166ac8ed2212c94a35368b0775e5cfe291 100644
--- a/src/plugins/designer/editorwidget.h
+++ b/src/plugins/designer/editorwidget.h
@@ -93,6 +93,7 @@ private:
     SharedSubWindow* m_designerSubWindows[Designer::Constants::DesignerSubWindowCount];
     QDockWidget *m_designerDockWidgets[Designer::Constants::DesignerSubWindowCount];
     Core::Utils::FancyMainWindow *m_mainWindow;
+    bool m_initialized;
 
     static QHash<QString, QVariant> m_globalState;
 };