diff --git a/src/platformsupport/fbconvenience/qfbbackingstore.cpp b/src/platformsupport/fbconvenience/qfbbackingstore.cpp
index 2a481835e2384685d18d4a2860c95d8a4c3dfcad..b378434ef21af655a436ce53c0c0ea9e74c1233e 100644
--- a/src/platformsupport/fbconvenience/qfbbackingstore.cpp
+++ b/src/platformsupport/fbconvenience/qfbbackingstore.cpp
@@ -51,7 +51,10 @@ QT_BEGIN_NAMESPACE
 QFbBackingStore::QFbBackingStore(QWindow *window)
     : QPlatformBackingStore(window)
 {
-    (static_cast<QFbWindow *>(window->handle()))->setBackingStore(this);
+    if (window->handle())
+        (static_cast<QFbWindow *>(window->handle()))->setBackingStore(this);
+    else
+        (static_cast<QFbScreen *>(window->screen()->handle()))->addBackingStore(this);
 }
 
 QFbBackingStore::~QFbBackingStore()
diff --git a/src/platformsupport/fbconvenience/qfbscreen.cpp b/src/platformsupport/fbconvenience/qfbscreen.cpp
index 6427b62972c086a34c1d12a670ddba519aecb075..e5b9f09c1462aff412590622a5a41c7146fb36a6 100644
--- a/src/platformsupport/fbconvenience/qfbscreen.cpp
+++ b/src/platformsupport/fbconvenience/qfbscreen.cpp
@@ -71,6 +71,19 @@ void QFbScreen::initializeCompositor()
 void QFbScreen::addWindow(QFbWindow *window)
 {
     mWindowStack.prepend(window);
+    if (!mBackingStores.isEmpty()) {
+        //check if we have a backing store for this window
+        for (int i = 0; i < mBackingStores.size(); ++i) {
+            QFbBackingStore *bs = mBackingStores.at(i);
+            // this gets called during QWindow::create() at a point where the
+            // invariant (window->handle()->window() == window) is broken
+            if (bs->window() == window->window()) {
+                window->setBackingStore(bs);
+                mBackingStores.removeAt(i);
+                break;
+            }
+        }
+    }
     invalidateRectCache();
     setDirty(window->geometry());
     QWindow *w = topWindow();
diff --git a/src/platformsupport/fbconvenience/qfbscreen_p.h b/src/platformsupport/fbconvenience/qfbscreen_p.h
index c7106358d9e3cee3d7dc68fbf4c1443ebbe5b59b..01a352e96a15211f71564c36b08c65f200c9f094 100644
--- a/src/platformsupport/fbconvenience/qfbscreen_p.h
+++ b/src/platformsupport/fbconvenience/qfbscreen_p.h
@@ -51,6 +51,7 @@ QT_BEGIN_NAMESPACE
 class QFbWindow;
 class QFbCursor;
 class QPainter;
+class QFbBackingStore;
 
 class QFbScreen : public QObject, public QPlatformScreen
 {
@@ -74,6 +75,8 @@ public:
     virtual void lower(QFbWindow *window);
     virtual void topWindowChanged(QWindow *) {}
 
+    void addBackingStore(QFbBackingStore *bs) {mBackingStores << bs;}
+
 public slots:
     virtual void setDirty(const QRect &rect);
     void setPhysicalSize(const QSize &size);
@@ -102,6 +105,7 @@ private:
 
     QPainter *mCompositePainter;
     QList<QPair<QRect, int> > mCachedRects;
+    QList <QFbBackingStore*> mBackingStores;
 
     friend class QFbWindow;
     bool mIsUpToDate;