diff --git a/src/Makefile.am b/src/Makefile.am
index 2ba0ba7..30231fe 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -163,6 +163,8 @@ gs-marshal.h: gs-marshal.list
 	@GLIB_GENMARSHAL@ $< --prefix=gs_marshal --header > $@
 
 gnome_screensaver_SOURCES =	\
+	eggaccelerators.c   \
+	eggaccelerators.h   \
 	gnome-screensaver.c	\
 	gnome-screensaver.h	\
 	gs-monitor.c		\
diff --git a/src/gs-manager.c b/src/gs-manager.c
index a46c0cc..d017201 100644
--- a/src/gs-manager.c
+++ b/src/gs-manager.c
@@ -25,6 +25,8 @@
 #include <time.h>
 #include <gdk/gdk.h>
 
+#include <gconf/gconf-client.h>
+
 #include "gs-prefs.h"        /* for GSSaverMode */
 
 #include "gs-manager.h"
@@ -35,6 +37,8 @@
 #include "gs-fade.h"
 #include "gs-debug.h"
 
+#include "eggaccelerators.h"
+
 static void gs_manager_class_init (GSManagerClass *klass);
 static void gs_manager_init       (GSManager      *manager);
 static void gs_manager_finalize   (GObject        *object);
@@ -109,10 +113,16 @@ enum {
 
 #define FADE_TIMEOUT 1000
 
+#define MEDIAKEY_PATH "/apps/gnome_settings_daemon/keybindings/"
+
 static guint         signals [LAST_SIGNAL] = { 0, };
 
 G_DEFINE_TYPE (GSManager, gs_manager, G_TYPE_OBJECT)
 
+static gboolean window_xxx (GSWindow           *window,
+            GdkEventKey    *event,
+            GSManager      *manager);
+
 static void
 manager_add_job_for_window (GSManager *manager,
                             GSWindow  *window,
@@ -1172,6 +1182,55 @@ window_grab_broken_cb (GSWindow           *window,
 }
 
 static gboolean
+window_xxx (GSWindow           *window,
+            GdkEventKey        *event,
+            GSManager          *manager)
+{
+	/* Multimedia keys */
+	const gchar *keys[] = { 
+		"volume_mute", "volume_up", "volume_down",
+		"play", "pause", "stop", 
+		"previous", "next", 
+		"eject", "media",
+		NULL };
+	int i;
+	GConfClient *client;
+    gs_debug ("KEYPRESS EVENT!");
+
+	printf ("keycode: %d\n", event->keyval);
+	printf ("string : %s\n", event->string);
+	printf ("hw key : %d\n", event->hardware_keycode);
+
+	if ((client = gconf_client_get_default ()) != NULL) {
+		GConfValue *value;
+		/* Iterate through a list of multimedia keymappings */
+		for (i = 0; keys[i] != NULL; i++) {
+			gchar *path = g_strdup_printf (MEDIAKEY_PATH "%s", keys[i]);
+			if ((value = gconf_client_get (client, path, NULL))) {
+				guint key, code;
+				if (egg_accelerator_parse_virtual (gconf_value_get_string (value), &key, &code, NULL)) {
+					if (!key && !code) {
+						printf ("%s is unset\n", keys[i]);
+						continue;
+					}
+					/* FIXME: XXX: TODO ;) 
+					 * Do the comparison... *get *
+					 * ...and bypass the keycode to the desktop... *
+					 * dbus? emit keycode? how??? */
+					printf ("g: keycode: %d\n", key);
+					printf ("g: string : %s\n", gconf_value_get_string (value));
+					printf ("g: hw key : %d\n", code);
+					gconf_value_free (value);
+				}
+			}
+			g_free (path);
+		}
+		g_object_unref (client);
+	}
+   	return FALSE;
+}
+
+static gboolean
 unfade_idle (GSManager *manager)
 {
         gs_debug ("resetting fade");
@@ -1313,6 +1372,7 @@ disconnect_window_signals (GSManager *manager,
         g_signal_handlers_disconnect_by_func (window, window_obscured_cb, manager);
         g_signal_handlers_disconnect_by_func (window, window_unmap_cb, manager);
         g_signal_handlers_disconnect_by_func (window, window_grab_broken_cb, manager);
+        g_signal_handlers_disconnect_by_func (window, window_xxx, manager);
 }
 
 static void
@@ -1348,6 +1408,8 @@ connect_window_signals (GSManager *manager,
                                  G_CALLBACK (window_unmap_cb), manager, G_CONNECT_AFTER);
         g_signal_connect_object (window, "grab_broken_event",
                                  G_CALLBACK (window_grab_broken_cb), manager, G_CONNECT_AFTER);
+		g_signal_connect_object (window, "key-press-event",
+                                 G_CALLBACK (window_xxx), manager, 0);
 }
 
 static void
diff --git a/src/gs-window-x11.c b/src/gs-window-x11.c
index b37f09e..fd08a7e 100644
--- a/src/gs-window-x11.c
+++ b/src/gs-window-x11.c
@@ -882,7 +882,6 @@ spawn_on_window (GSWindow *window,
         int         standard_error;
         int         child_pid;
         int         id;
-        int         i;
 
         error = NULL;
         if (! g_shell_parse_argv (command, &argc, &argv, &error)) {
