diff --git a/src/gpm-idle.c b/src/gpm-idle.c
index 04225fc..3b42a79 100644
--- a/src/gpm-idle.c
+++ b/src/gpm-idle.c
@@ -59,6 +59,7 @@ struct GpmIdlePrivate
 	guint			 timeout_blank_id;
 	guint			 timeout_sleep_id;
 	gboolean		 x_idle;
+	guint			 session_status;
 };
 
 enum {
@@ -152,20 +153,7 @@ typedef enum {
 static gboolean
 gpm_idle_is_session_idle (GpmIdle *idle)
 {
-	gboolean ret = FALSE;
-	GVariant *result;
-	guint status;
-
-	/* get the session status */
-	result = g_dbus_proxy_get_cached_property (idle->priv->proxy_presence, "status");
-	if (result == NULL)
-		goto out;
-
-	g_variant_get (result, "u", &status);
-	ret = (status == GPM_IDLE_STATUS_ENUM_IDLE);
-	g_variant_unref (result);
-out:
-	return ret;
+	return (idle->priv->session_status == GPM_IDLE_STATUS_ENUM_IDLE);
 }
 
 typedef enum {
@@ -424,6 +412,7 @@ gpm_idle_dbus_signal_cb (GDBusProxy *proxy, const gchar *sender_name, const gcha
 		return;
 	}
 	if (g_strcmp0 (signal_name, "StatusChanged") == 0) {
+		g_variant_get(parameters,"(u)",&idle->priv->session_status);
 		g_debug ("Received gnome session status change");
 		gpm_idle_evaluate (idle);
 		return;
@@ -496,6 +485,7 @@ gpm_idle_init (GpmIdle *idle)
 {
 	GDBusConnection *connection;
 	GError *error = NULL;
+	GVariant * result;
 
 	idle->priv = GPM_IDLE_GET_PRIVATE (idle);
 
@@ -505,6 +495,7 @@ gpm_idle_init (GpmIdle *idle)
 	idle->priv->timeout_blank_id = 0;
 	idle->priv->timeout_sleep_id = 0;
 	idle->priv->x_idle = FALSE;
+	idle->priv->session_status = GPM_IDLE_STATUS_ENUM_AVAILABLE;
 
 	idle->priv->idletime = gpm_idletime_new ();
 	g_signal_connect (idle->priv->idletime, "reset", G_CALLBACK (gpm_idle_idletime_reset_cb), idle);
@@ -548,6 +539,11 @@ gpm_idle_init (GpmIdle *idle)
 	}
 	g_signal_connect (idle->priv->proxy_presence, "g-signal", G_CALLBACK (gpm_idle_dbus_signal_cb), idle);
 
+	result = g_dbus_proxy_get_cached_property (idle->priv->proxy_presence, "status");
+	if (result!=NULL) {
+		g_variant_get (result, "u", &idle->priv->session_status);
+		g_variant_unref (result);
+	}
 	gpm_idle_evaluate (idle);
 }
 

