diff --git a/plugins/mouse/gsd-mouse-manager.c b/plugins/mouse/gsd-mouse-manager.c
index e8a4787..b0d1f88 100644
--- a/plugins/mouse/gsd-mouse-manager.c
+++ b/plugins/mouse/gsd-mouse-manager.c
@@ -28,6 +28,7 @@
 #include <string.h>
 #include <errno.h>
 #include <math.h>
+#include <sys/prctl.h>
 
 #include <locale.h>
 
@@ -502,6 +503,14 @@ set_middle_button (GsdMouseManager *manager,
         XCloseDevice (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), xdevice);
 }
 
+/* Ensure that syndaemon dies together with us, to avoid running several of
+ * them */
+static void
+setup_syndaemon(gpointer user_data)
+{
+    prctl (PR_SET_PDEATHSIG, SIGHUP);
+}
+
 static int
 set_disable_w_typing (GsdMouseManager *manager, gboolean state)
 {
@@ -522,13 +531,15 @@ set_disable_w_typing (GsdMouseManager *manager, gboolean state)
                 if (!g_find_program_in_path (args[0]))
                         return 0;
 
+                g_debug ("Starting syndaemon");
                 g_spawn_async (g_get_home_dir (), args, NULL,
-                                G_SPAWN_SEARCH_PATH, NULL, NULL,
+                                G_SPAWN_SEARCH_PATH, setup_syndaemon, NULL,
                                 &manager->priv->syndaemon_pid, &error);
 
                 manager->priv->syndaemon_spawned = (error == NULL);
 
                 if (error) {
+                        g_warning ("Failed to launch syndaemon: %s", error->message);
                         g_settings_set_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_DISABLE_W_TYPING, FALSE);
                         g_error_free (error);
                 }
