--- gnome-screensaver-2.28.0/src/gs-listener-dbus.c	2009-08-19 19:19:14.000000000 -0400
+++ hacked/src/gs-listener-dbus.c	2009-11-02 17:51:10.266864817 -0500
@@ -985,47 +985,37 @@
 }
 
 static gboolean
-listener_ref_entry_has_connection (gpointer key,
-                                   gpointer value,
-                                   gpointer user_data)
-{
-        GSListenerRefEntry *entry;
-        const char         *connection;
-        gboolean            matches;
-
-        entry = (GSListenerRefEntry *)value;
-        connection = (const char *) user_data;
-
-        matches = FALSE;
-        if (connection != NULL && entry->connection != NULL) {
-                matches = (strcmp (connection, entry->connection) == 0);
-                if (matches) {
-                        gs_debug ("removing %s from %s for reason '%s' on connection %s",
-                                  get_name_for_entry_type (entry->entry_type),
-                                  entry->application,
-                                  entry->reason,
-                                  entry->connection);
-                }
-        }
-
-        return matches;
-}
-
-static gboolean
 listener_ref_entry_remove_for_connection (GSListener  *listener,
                                           int          entry_type,
                                           const char  *connection)
 {
         gboolean    removed;
-        guint       n_removed;
         GHashTable *hash;
+        GHashTableIter iter;
+        GSListenerRefEntry *entry;
 
         hash = get_hash_for_entry_type (listener, entry_type);
 
         removed = FALSE;
-        n_removed = g_hash_table_foreach_remove (hash, listener_ref_entry_has_connection, (gpointer)connection);
-
-        removed = (n_removed > 0);
+        g_hash_table_iter_init (&iter, hash);
+        while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&entry)) {
+                if (connection != NULL && entry->connection != NULL) {
+                        if ((strcmp (connection, entry->connection) == 0)) {
+                                gs_debug ("removing %s from %s for reason '%s' on connection %s",
+                                          get_name_for_entry_type (entry->entry_type),
+                                          entry->application,
+                                          entry->reason,
+                                          entry->connection);
+
+                                if (entry->entry_type == REF_ENTRY_TYPE_INHIBIT) {
+                                        /* remove inhibit from gnome session */
+                                        remove_session_inhibit (listener, entry);
+                                }
+                                g_hash_table_iter_remove (&iter);
+                                removed = TRUE;
+                        }
+                }
+        }
 
         return removed;
 }
