diff --git a/data/desktop_gnome_peripherals_touchpad.schemas.in b/data/desktop_gnome_peripherals_touchpad.schemas.in
index 78734e7..62b555f 100644
--- a/data/desktop_gnome_peripherals_touchpad.schemas.in
+++ b/data/desktop_gnome_peripherals_touchpad.schemas.in
@@ -51,6 +51,18 @@
     </schema>
 
     <schema>
+	<key>/schemas/desktop/gnome/peripherals/touchpad/touchpad_delay</key>
+	<applyto>/desktop/gnome/peripherals/touchpad/touchpad_delay</applyto>
+	<owner>gnome</owner>
+	<type>float</type>
+	<default>1.2</default>
+	<locale name="C">
+		<short>Time disabled while typing</short>
+		<long>Time in seconds that the touchpad will spend disabled after the last key was pressed.</long>
+	</locale>
+    </schema>
+
+    <schema>
       <key>/schemas/desktop/gnome/peripherals/touchpad/touchpad_enabled</key>
       <applyto>/desktop/gnome/peripherals/touchpad/touchpad_enabled</applyto>
       <owner>gnome</owner>
diff --git a/plugins/mouse/gsd-mouse-manager.c b/plugins/mouse/gsd-mouse-manager.c
index 6d26c4f..1b273ba 100644
--- a/plugins/mouse/gsd-mouse-manager.c
+++ b/plugins/mouse/gsd-mouse-manager.c
@@ -63,6 +63,7 @@
 #define KEY_DWELL_ENABLE        GCONF_MOUSE_A11Y_DIR "/dwell_enable"
 #define KEY_DELAY_ENABLE        GCONF_MOUSE_A11Y_DIR "/delay_enable"
 #define KEY_TOUCHPAD_DISABLE_W_TYPING    GCONF_TOUCHPAD_DIR "/disable_while_typing"
+#define KEY_TOUCHPAD_DISABLE_DELAY       GCONF_TOUCHPAD_DIR "/touchpad_delay"
 #ifdef HAVE_X11_EXTENSIONS_XINPUT_H
 #define KEY_TAP_TO_CLICK        GCONF_TOUCHPAD_DIR "/tap_to_click"
 #define KEY_SCROLL_METHOD       GCONF_TOUCHPAD_DIR "/scroll_method"
@@ -543,19 +544,26 @@ device_is_touchpad (XDeviceInfo deviceinfo)
 #endif
 
 static int
-set_disable_w_typing (GsdMouseManager *manager, gboolean state)
-{
+set_disable_w_typing (GsdMouseManager *manager, gboolean state, 
+						gfloat touchpad_delay)
+{ 
 
         if (state) {
                 GError *error = NULL;
                 char *args[5];
-
-                if (manager->priv->syndaemon_spawned)
-                        return 0;
-
+		char delay_str[20];
+		
+		if (manager->priv->syndaemon_spawned)
+		{
+			kill (manager->priv->syndaemon_pid, SIGHUP);
+			g_spawn_close_pid (manager->priv->syndaemon_pid);
+			manager->priv->syndaemon_spawned = FALSE;
+		}
+ 
                 args[0] = "syndaemon";
                 args[1] = "-i";
-                args[2] = "0.5";
+		sprintf(delay_str,"%f",touchpad_delay);
+		args[2] = delay_str;
                 args[3] = "-k";
                 args[4] = NULL;
 
@@ -905,7 +913,7 @@ set_mouse_settings (GsdMouseManager *manager)
         set_motion_acceleration (manager, gconf_client_get_float (client, KEY_MOTION_ACCELERATION , NULL));
         set_motion_threshold (manager, gconf_client_get_int (client, KEY_MOTION_THRESHOLD, NULL));
 
-        set_disable_w_typing (manager, gconf_client_get_bool (client, KEY_TOUCHPAD_DISABLE_W_TYPING, NULL));
+        set_disable_w_typing (manager, gconf_client_get_bool (client, KEY_TOUCHPAD_DISABLE_W_TYPING, NULL), gconf_client_get_float (client, KEY_TOUCHPAD_DISABLE_DELAY, NULL));
 #ifdef HAVE_X11_EXTENSIONS_XINPUT_H
         set_tap_to_click (gconf_client_get_bool (client, KEY_TAP_TO_CLICK, NULL), left_handed);
         set_edge_scroll (gconf_client_get_int (client, KEY_SCROLL_METHOD, NULL));
@@ -936,8 +944,11 @@ mouse_callback (GConfClient        *client,
                 }
         } else if (! strcmp (entry->key, KEY_TOUCHPAD_DISABLE_W_TYPING)) {
                 if (entry->value->type == GCONF_VALUE_BOOL)
-                        set_disable_w_typing (manager, gconf_value_get_bool (entry->value));
-#ifdef HAVE_X11_EXTENSIONS_XINPUT_H
+                        set_disable_w_typing (manager, gconf_value_get_bool (entry->value), gconf_client_get_float (client, KEY_TOUCHPAD_DISABLE_DELAY,NULL));
+        } else if (! strcmp (entry->key, KEY_TOUCHPAD_DISABLE_DELAY)) {
+		if (entry->value->type == GCONF_VALUE_FLOAT)
+			set_disable_w_typing ( manager, gconf_client_get_bool (client, KEY_TOUCHPAD_DISABLE_W_TYPING,NULL), gconf_value_get_float (entry->value));
+ #ifdef HAVE_X11_EXTENSIONS_XINPUT_H
         } else if (! strcmp (entry->key, KEY_TAP_TO_CLICK)) {
                 if (entry->value->type == GCONF_VALUE_BOOL) {
                         set_tap_to_click (gconf_value_get_bool (entry->value),
@@ -1028,7 +1039,7 @@ gsd_mouse_manager_idle_cb (GsdMouseManager *manager)
                                 gconf_client_get_bool (client, KEY_DWELL_ENABLE, NULL),
                                 gconf_client_get_bool (client, KEY_DELAY_ENABLE, NULL));
 
-        set_disable_w_typing (manager, gconf_client_get_bool (client, KEY_TOUCHPAD_DISABLE_W_TYPING, NULL));
+        set_disable_w_typing (manager, gconf_client_get_bool (client, KEY_TOUCHPAD_DISABLE_W_TYPING, NULL), gconf_client_get_float (client, KEY_TOUCHPAD_DISABLE_DELAY, NULL));
 #ifdef HAVE_X11_EXTENSIONS_XINPUT_H
         set_tap_to_click (gconf_client_get_bool (client, KEY_TAP_TO_CLICK, NULL),
                           gconf_client_get_bool (client, KEY_LEFT_HANDED, NULL));
