diff --git a/src/plugins/designer/formwindowfile.cpp b/src/plugins/designer/formwindowfile.cpp
index e95e4b92be2263b330fd56e6b6fdf39909d63c69..a130cc9d6804b78ebad659a45dc28f259eb66e9c 100644
--- a/src/plugins/designer/formwindowfile.cpp
+++ b/src/plugins/designer/formwindowfile.cpp
@@ -35,6 +35,7 @@
 #include <utils/qtcassert.h>
 
 #include <QtDesigner/QDesignerFormWindowInterface>
+#include <QtDesigner/QDesignerFormWindowManagerInterface>
 #include <QtDesigner/QDesignerFormEditorInterface>
 
 #include <QtGui/QMessageBox>
@@ -53,6 +54,8 @@ FormWindowFile::FormWindowFile(QDesignerFormWindowInterface *form, QObject *pare
     m_mimeType(QLatin1String(Designer::Constants::FORM_MIMETYPE)),
     m_formWindow(form)
 {
+    connect(m_formWindow->core()->formWindowManager(), SIGNAL(formWindowRemoved(QDesignerFormWindowInterface*)),
+            this, SLOT(slotFormWindowRemoved(QDesignerFormWindowInterface*)));
 }
 
 bool FormWindowFile::save(const QString &name /*= QString()*/)
@@ -192,5 +195,14 @@ QDesignerFormWindowInterface *FormWindowFile::formWindow() const
     return m_formWindow;
 }
 
+void FormWindowFile::slotFormWindowRemoved(QDesignerFormWindowInterface *w)
+{
+    // Release formwindow as soon as the FormWindowManager removes
+    // as calls to isDirty() are triggered at arbitrary times
+    // while building.
+    if (w == m_formWindow)
+        m_formWindow = 0;
+}
+
 } // namespace Internal
 } // namespace Designer
diff --git a/src/plugins/designer/formwindowfile.h b/src/plugins/designer/formwindowfile.h
index 5ac62ac4f04157eb77375b0ddf2014d1bbce9037..92dbc236950d89400b7434039e5cb107f08b25e6 100644
--- a/src/plugins/designer/formwindowfile.h
+++ b/src/plugins/designer/formwindowfile.h
@@ -78,6 +78,9 @@ signals:
 public slots:
     void setFileName(const QString &);
 
+private slots:
+    void slotFormWindowRemoved(QDesignerFormWindowInterface *w);
+
 private:
     const QString m_mimeType;