diff --git a/src/plugins/blackberry/common/windowgrabber.cpp b/src/plugins/blackberry/common/windowgrabber.cpp
index d02e022aa1870a6bb38672533dcefd98e84116e6..db070d8e5d2ca54603b76d47654499567663d7a9 100644
--- a/src/plugins/blackberry/common/windowgrabber.cpp
+++ b/src/plugins/blackberry/common/windowgrabber.cpp
@@ -87,6 +87,30 @@ void WindowGrabber::start()
 {
     int result = 0;
 
+#ifdef Q_OS_BLACKBERRY_TABLET
+
+    // HACK: On the Playbook, screen_read_window() will fail for invisible windows.
+    //       To workaround this, make the window visible again, but set a global
+    //       alpha of less than 255. The global alpha makes the window completely invisible
+    //       (due to a bug?), but screen_read_window() will work again.
+
+    errno = 0;
+    int val = 200; // anything less than 255
+    result = screen_set_window_property_iv(m_window, SCREEN_PROPERTY_GLOBAL_ALPHA, &val);
+    if (result != 0) {
+        qWarning() << "WindowGrabber: unable to set global alpha:" << strerror(errno);
+        return;
+    }
+
+    errno = 0;
+    val = 1;
+    result = screen_set_window_property_iv(m_window, SCREEN_PROPERTY_VISIBLE, &val);
+    if (result != 0) {
+        qWarning() << "WindowGrabber: unable to make window visible:" << strerror(errno);
+        return;
+    }
+#endif
+
     result = screen_create_context(&m_screenContext, SCREEN_APPLICATION_CONTEXT);
     if (result != 0) {
         qWarning() << "WindowGrabber: cannot create screen context:" << strerror(errno);