diff -Nur -x '*.orig' -x '*~' gnome-control-center-2.24.0.1/capplets/mouse/gnome-mouse-properties.c gnome-control-center-2.24.0.1.new/capplets/mouse/gnome-mouse-properties.c
--- gnome-control-center-2.24.0.1/capplets/mouse/gnome-mouse-properties.c	2008-10-10 09:50:11.000000000 +1100
+++ gnome-control-center-2.24.0.1.new/capplets/mouse/gnome-mouse-properties.c	2008-10-10 09:50:58.000000000 +1100
@@ -41,7 +41,9 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <dirent.h>
+#include <X11/Xatom.h>
 #include <X11/extensions/XInput.h>
+#include <X11/extensions/XIproto.h>
 
 #ifdef HAVE_XCURSOR
 #include <X11/Xcursor/Xcursor.h>
@@ -319,9 +321,31 @@
         int numdevices, i;      
         gboolean ret = FALSE;
         XDeviceInfo *devicelist = XListInputDevices (GDK_DISPLAY(), &numdevices);
+	Atom realtype, prop;
+	int realformat;
+	unsigned long nitems, bytes_after;
+	unsigned char *data;
+
+	prop = XInternAtom(GDK_DISPLAY(), "Synaptics Off", False);
+
         for (i = 0; i < numdevices; i++) {
-                if (strcmp (devicelist[i].name, "Synaptics Touchpad") == 0)
-                        ret = TRUE;
+		gdk_error_trap_push();
+		XDevice *device = XOpenDevice (GDK_DISPLAY(), 
+					       devicelist[i].id);
+		if (gdk_error_trap_pop())
+			continue;
+
+		gdk_error_trap_push();
+		if ((XGetDeviceProperty(GDK_DISPLAY(), device, prop, 0, 1, False,
+					XA_INTEGER, &realtype, &realformat, &nitems,
+					&bytes_after, &data) == Success) && (realtype != None))
+		{
+			XFree(data);
+			ret = TRUE;
+		}
+		gdk_error_trap_pop();
+
+		XCloseDevice (GDK_DISPLAY(), device);
         }
         
         XFreeDeviceList(devicelist);
