diff --git a/configure.ac b/configure.ac
index 6737f24..0ba85e3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,7 +20,7 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
 
 PKG_CHECK_MODULES(MUTTER_PLUGIN, gtk+-2.0 dbus-glib-1 metacity-plugins gjs-gi-1.0)
 PKG_CHECK_MODULES(TIDY, clutter-0.8)
-PKG_CHECK_MODULES(BIG, clutter-cairo-0.8 gtk+-2.0 librsvg-2.0)
+PKG_CHECK_MODULES(BIG, clutter-cairo-0.8 gtk+-2.0 librsvg-2.0 dbus-glib-1)
 PKG_CHECK_MODULES(GDMUSER, dbus-glib-1 gtk+-2.0)
 PKG_CHECK_MODULES(TRAY, gtk+-2.0)
 PKG_CHECK_MODULES(TASKPANEL, libwnck-1.0 dbus-glib-1)
diff --git a/src/big/box.c b/src/big/box.c
index 8587a36..269d62a 100644
--- a/src/big/box.c
+++ b/src/big/box.c
@@ -26,6 +26,7 @@
 #include <clutter/clutter-actor.h>
 #include <clutter/clutter-container.h>
 #include <cogl/cogl.h>
+#include <dbus/dbus-glib.h>
 
 #include <gdk-pixbuf/gdk-pixbuf.h>
 
@@ -114,7 +115,9 @@ struct _BigBoxPrivate
   BigBoxAlignment          background_x_align;
   BigBoxAlignment          background_y_align;
   ClutterActor            *background_rectangle;
-
+  DBusGProxy              *proxy;
+ 
+  gboolean                 draw;
   guint                    draw_rounded_corner : 1;
   guint                    debug               : 1;
 };
@@ -2199,7 +2202,8 @@ big_box_paint (ClutterActor *actor)
   ClutterGeometry bg_rect;
   int border_top, border_bottom, border_left, border_right;
   int padding_top, padding_bottom, padding_left, padding_right;
-
+  if (!self->priv->draw)
+    return;
   /* First, convert everything to pixels */
   border_top = CLUTTER_UNITS_TO_DEVICE (self->priv->border_top);
   border_bottom = CLUTTER_UNITS_TO_DEVICE (self->priv->border_bottom);
@@ -2723,10 +2727,31 @@ big_box_class_init (BigBoxClass *klass)
 }
 
 static void
+screensaver_change_state (DBusGProxy *object, gboolean state, BigBox *box)
+{
+  box->priv->draw = !state;
+}
+
+static void
 big_box_init (BigBox *box)
 {
+  DBusGConnection *connection;
+  GError *error = NULL;
+  connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+  if (connection == NULL) {
+    g_printerr ("Failed to open connection to bus: %s\n",
+                error->message);
+    g_error_free (error);
+    exit (1);
+  }
   box->priv = BIG_BOX_GET_PRIVATE (box);
 
+  box->priv->proxy = dbus_g_proxy_new_for_name_owner (connection, "org.gnome.ScreenSaver",
+                                                      "/org/gnome/ScreenSaver", "org.gnome.ScreenSaver", NULL);
+  dbus_g_proxy_add_signal (box->priv->proxy, "ActiveChanged", G_TYPE_BOOLEAN, G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal (box->priv->proxy, "ActiveChanged",
+                               G_CALLBACK (screensaver_change_state), box, NULL);
+
   box->priv->orientation = BIG_BOX_ORIENTATION_VERTICAL;
   box->priv->x_align = BIG_BOX_ALIGNMENT_FILL;
   box->priv->y_align = BIG_BOX_ALIGNMENT_FILL;
@@ -2747,7 +2772,7 @@ big_box_init (BigBox *box)
 
   box->priv->background_rectangle = NULL;
   box->priv->draw_rounded_corner = FALSE;
-
+  box->priv->draw = TRUE;
   /* both bg and border colors default to black and transparent (all bits 0) */
 }
 
