Index: kcontrol/access/kcmaccess.cpp
===================================================================
--- kcontrol/access/kcmaccess.cpp.orig
+++ kcontrol/access/kcmaccess.cpp
@@ -103,10 +103,57 @@ void ExtendedIntNumInput::slotSliderValu
 
 static bool needToRunKAccessDaemon( KConfig *config )
 {
-	// We always start the KAccess Daemon, if it is not needed,
-	// it will terminate itself after configuring the AccessX
-	// features.
-	return true;
+     KConfigGroup bell( config, "Bell" );
+     
+     if (!bell.readBoolEntry("SystemBell", true))
+         return true;
+     if (bell.readBoolEntry("ArtsBell", false))
+         return true;
+     if (bell.readBoolEntry("VisibleBell", false))
+         return true;
+     
+   KConfigGroup keyboard( config, "Keyboard" );
+ 
+   if (keyboard.readBoolEntry("StickyKeys", false))
+         return true;
+   if (keyboard.readBoolEntry("SlowKeys", false))
+         return true;
+   if (keyboard.readBoolEntry("BounceKeys", false))
+         return true;
+   if (keyboard.readBoolEntry("Gestures", true))
+         return true;
+   // Find out whether the gestures are activated by default in the X configuration or not.
+   int major = XkbMajorVersion;
+   int minor = XkbMinorVersion;
+   if (XkbLibraryVersion(&major, &minor))
+     {
+     int opcode_rtrn;
+     int error_rtrn;
+     int xkb_opcode;
+     if (XkbQueryExtension(qt_xdisplay(), &opcode_rtrn, &xkb_opcode, &error_rtrn,
+ 			 &major, &minor))
+       {
+       if(XkbDescPtr xkbdesc = XkbGetMap(qt_xdisplay(), 0, XkbUseCoreKbd))
+         {
+         if(XkbGetControls(qt_xdisplay(), XkbAllControlsMask/*XkbAccessXKeysMask*/, xkbdesc ) == Success )
+           {
+           if(xkbdesc->ctrls->enabled_ctrls & XkbAccessXKeysMask)
+             {
+             XkbFreeClientMap(xkbdesc,0,True);
+             return true;
+             }
+           }
+         XkbFreeClientMap(xkbdesc,0,True);
+         }
+       }
+     }
+ 
+   KConfigGroup mouse( config, "Mouse" );
+   
+   if (mouse.readBoolEntry("MouseKeys", false))
+         return true;
+ 
+     return false; // don't need it
 }
 
 QString mouseKeysShortcut (Display *display) {