diff --git a/.gitignore b/.gitignore
index d1a0b48..29a3812 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,7 +32,9 @@ gnome-settings-daemon/gnome-settings-client.h
 gnome-settings-daemon/gnome-settings-daemon
 gnome-settings-daemon/gnome-settings-manager-glue.h
 data/*.pc
-data/*.schemas
+data/*.xml
+data/*.xml.in
+data/*.valid
 data/gnome-settings-daemon.desktop
 data/gnome-settings-daemon.desktop.in
 data/50-accessibility.xml
@@ -40,6 +42,10 @@ data/org.gnome.SettingsDaemon.service
 *.gnome-settings-plugin
 plugins/a11y-keyboard/test-a11y-preferences-dialog
 plugins/background/test-background
+plugins/datetime/gsd-datetime-mechanism
+plugins/datetime/gsd-datetime-mechanism-glue.h
+plugins/datetime/org.gnome.SettingsDaemon.DateTimeMechanism.service
+plugins/datetime/org.gnome.settingsdaemon.datetimemechanism.policy
 plugins/media-keys/gsd-marshal.c
 plugins/media-keys/gsd-marshal.h
 plugins/media-keys/gsd-media-keys-manager-glue.h
diff --git a/configure.ac b/configure.ac
index b1bd763..d3aa3a3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -62,9 +62,11 @@ PKG_CHECK_MODULES(SETTINGS_DAEMON,
         glib-2.0 >= $GLIB_REQUIRED_VERSION
         gtk+-3.0 >= $GTK_REQUIRED_VERSION
         gconf-2.0 >= $GCONF_REQUIRED_VERSION
+	gio-2.0 >= $GIO_REQUIRED_VERSION
         gmodule-2.0
         gthread-2.0
         dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION
+	gsettings-desktop-schemas
 )
 
 PKG_CHECK_MODULES(SETTINGS_PLUGIN,
@@ -88,6 +90,12 @@ AC_PATH_PROG(GCONFTOOL, gconftool-2)
 
 AM_GCONF_SOURCE_2
 
+dnl ================================================================
+dnl GSettings stuff
+dnl ================================================================
+
+GLIB_GSETTINGS
+
 dnl ---------------------------------------------------------------------------
 dnl - Check for gnome-desktop
 dnl ---------------------------------------------------------------------------
@@ -456,6 +464,11 @@ data/Makefile
 data/gnome-settings-daemon.desktop.in
 data/gnome-settings-daemon.pc
 data/gnome-settings-daemon-uninstalled.pc
+data/org.gnome.desktop.font-rendering.gschema.xml.in
+data/org.gnome.desktop.keybindings.gschema.xml.in
+data/org.gnome.desktop.peripherals.gschema.xml.in
+data/org.gnome.settings-daemon.plugins.housekeeping.gschema.xml.in
+data/org.gnome.settings-daemon.plugins.xrandr.gschema.xml.in
 po/Makefile.in
 ])
 
diff --git a/data/Makefile.am b/data/Makefile.am
index 21fbc11..e2c6f73 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -1,20 +1,18 @@
 NULL =
 
-@INTLTOOL_SCHEMAS_RULE@
+gsettings_SCHEMAS =							\
+	org.gnome.desktop.font-rendering.gschema.xml			\
+	org.gnome.desktop.keybindings.gschema.xml			\
+	org.gnome.desktop.peripherals.gschema.xml			\
+	org.gnome.settings-daemon.plugins.housekeeping.gschema.xml	\
+	org.gnome.settings-daemon.plugins.xrandr.gschema.xml
 
-schemasdir = $(GCONF_SCHEMA_FILE_DIR)
-schemas_in_files = 						\
-	gnome-settings-daemon.schemas.in			\
-	apps_gnome_settings_daemon_housekeeping.schemas.in	\
-	apps_gnome_settings_daemon_keybindings.schemas.in	\
-	desktop_gnome_font_rendering.schemas.in			\
-	desktop_gnome_keybindings.schemas.in			\
-	apps_gnome_settings_daemon_xrandr.schemas.in		\
-	desktop_gnome_peripherals_touchpad.schemas.in		\
-	desktop_gnome_peripherals_smartcard.schemas.in		\
-	$(NULL)
+@INTLTOOL_XML_NOMERGE_RULE@
 
-schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
+@GSETTINGS_RULES@
+
+convertdir = $(datadir)/GConf/gsettings
+convert_DATA = gnome-settings-daemon.convert
 
 @INTLTOOL_DESKTOP_RULE@
 desktopdir = $(sysconfdir)/xdg/autostart
@@ -37,16 +35,16 @@ xmldir = @GNOME_KEYBINDINGS_KEYSDIR@
 xml_in_files = 50-accessibility.xml.in
 xml_DATA = $(xml_in_files:.xml.in=.xml)
 
-EXTRA_DIST = 				\
-	$(schemas_in_files)		\
-	$(service_in_files)		\
-	$(desktop_in_files)		\
-	$(xml_in_files)			\
-	gnome-settings-daemon.pc.in	\
+EXTRA_DIST = 					\
+	$(gsettings_SCHEMAS:.xml=.xml.in.in	\
+	$(service_in_files)			\
+	$(desktop_in_files)			\
+	$(xml_in_files)				\
+	gnome-settings-daemon.pc.in		\
 	$(NULL)
 
 DISTCLEANFILES = 			\
-	$(schemas_DATA)			\
+	$(gsettings_SCHEMAS)		\
 	$(service_DATA)			\
 	$(desktop_DATA)			\
 	$(xml_DATA)			\
@@ -54,16 +52,5 @@ DISTCLEANFILES = 			\
 
 MAINTAINERCLEANFILES =			\
 	*~				\
-	Makefile.in
-
-if GCONF_SCHEMAS_INSTALL
-# don't do this if we are building in eg. rpm
-install-data-local: $(schemas_DATA)
-	if test -z "$(DESTDIR)" ; then \
-		for p in $(schemas_DATA) ; do \
-			GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(top_builddir)/data/$$p 2>&1 > /dev/null; \
-		done \
-	fi
-else
-install-data-local:
-endif
+	Makefile.in			\
+	$(gsettings_SCHEMAS:.xml=.valid)
diff --git a/data/apps_gnome_settings_daemon_housekeeping.schemas.in b/data/apps_gnome_settings_daemon_housekeeping.schemas.in
deleted file mode 100644
index 35dd118..0000000
--- a/data/apps_gnome_settings_daemon_housekeeping.schemas.in
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0"?>
-<gconfschemafile>
-    <schemalist>
-		<schema>
-		<key>/schemas/apps/gnome_settings_daemon/plugins/housekeeping/free_percent_notify</key>
-	    <applyto>/apps/gnome_settings_daemon/plugins/housekeeping/free_percent_notify</applyto>
-	    <type>float</type>
-	    <default>0.05</default>
-	    <locale name="C">
-	        <short>Free percentage notify threshold</short>
-		<long>Percentage free space threshold for initial warning of low disk space.
-				If the percentage free space drops below this, a warning will be shown.</long>
-	    </locale>
-		</schema>
-		
-		<schema>
-		<key>/schemas/apps/gnome_settings_daemon/plugins/housekeeping/free_percent_notify_again</key>
-	    <applyto>/apps/gnome_settings_daemon/plugins/housekeeping/free_percent_notify_again</applyto>
-	    <type>float</type>
-	    <default>0.01</default>
-	    <locale name="C">
-	        <short>Subsequent free percentage notify threshold</short>
-		<long>Specify the percentage that the free disk space should reduce by before issuing a subsequent warning.</long>
-	    </locale>
-		</schema>
-		
-		<schema>
-		<key>/schemas/apps/gnome_settings_daemon/plugins/housekeeping/free_size_gb_no_notify</key>
-	    <applyto>/apps/gnome_settings_daemon/plugins/housekeeping/free_size_gb_no_notify</applyto>
-	    <type>int</type>
-	    <default>2</default>
-	    <locale name="C">
-	        <short>Free space no notify threshold</short>
-		<long>Specify an amount in GB. If the amount of free space is more than this, no warning will be shown.</long>
-	    </locale>
-		</schema>
-		
-		<schema>
-		<key>/schemas/apps/gnome_settings_daemon/plugins/housekeeping/min_notify_period</key>
-	    <applyto>/apps/gnome_settings_daemon/plugins/housekeeping/min_notify_period</applyto>
-	    <type>int</type>
-	    <default>10</default>
-	    <locale name="C">
-	        <short>Minimum notify period for repeated warnings</short>
-		<long>Specify a time in minutes. Subsequent warnings for a volume will not appear more often than this period.</long>
-	    </locale>
-		</schema>
-		
-		<schema>
-		<key>/schemas/apps/gnome_settings_daemon/plugins/housekeeping/ignore_paths</key>
-	    <applyto>/apps/gnome_settings_daemon/plugins/housekeeping/ignore_paths</applyto>
-	    <type>list</type>
-	    <list_type>string</list_type>
-	    <default>[]</default>
-	    <locale name="C">
-	        <short>Mount paths to ignore</short>
-		<long>Specify a list of mount paths to ignore when they run low on space.</long>
-	    </locale>
-		</schema>
-    </schemalist>
-</gconfschemafile>
diff --git a/data/apps_gnome_settings_daemon_keybindings.schemas.in b/data/apps_gnome_settings_daemon_keybindings.schemas.in
deleted file mode 100644
index a41fc28..0000000
--- a/data/apps_gnome_settings_daemon_keybindings.schemas.in
+++ /dev/null
@@ -1,240 +0,0 @@
-<?xml version="1.0"?>
-<gconfschemafile>
-    <schemalist>
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/touchpad</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/touchpad</applyto>
-            <type>string</type>
-            <default>XF86TouchpadToggle</default>
-            <locale name="C">
-                <short>Toggle touchpad</short>
-                <long>Binding to enable or disable the touchpad.</long>
-            </locale>
-        </schema>
-
-        <schema>
-	    <key>/schemas/apps/gnome_settings_daemon/volume_step</key>
-	    <applyto>/apps/gnome_settings_daemon/volume_step</applyto>
-	    <type>int</type>
-	    <default>6</default>
-	    <locale name="C">
-	        <short>Volume step</short>
-		<long>Volume step as percentage of volume.</long>
-	    </locale>
-	</schema>
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/volume_mute</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/volume_mute</applyto>
-            <type>string</type>
-            <default>XF86AudioMute</default>
-            <locale name="C">
-                <short>Volume mute</short>
-                <long>Binding to mute the system volume.</long>
-            </locale>
-        </schema>
-
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/volume_down</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/volume_down</applyto>
-            <type>string</type>
-            <default>XF86AudioLowerVolume</default>
-            <locale name="C">
-                <short>Volume down</short>
-                <long>Binding to lower the system volume.</long>
-            </locale>
-        </schema>
-
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/volume_up</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/volume_up</applyto>
-            <type>string</type>
-            <default>XF86AudioRaiseVolume</default>
-            <locale name="C">
-                <short>Volume up</short>
-                <long>Binding to raise the system volume.</long>
-            </locale>
-        </schema>
-
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/power</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/power</applyto>
-            <type>string</type>
-            <default>&lt;Control&gt;&lt;Alt&gt;Delete</default>
-            <locale name="C">
-                <short>Log out</short>
-                <long>Binding to log out.</long>
-            </locale>
-        </schema>
-
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/eject</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/eject</applyto>
-            <type>string</type>
-            <default>XF86Eject</default>
-            <locale name="C">
-                <short>Eject</short>
-                <long>Binding to eject an optical disc.</long>
-            </locale>
-        </schema>
-
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/home</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/home</applyto>
-            <type>string</type>
-            <default>XF86Explorer</default>
-            <locale name="C">
-                <short>Home folder</short>
-                <long>Binding to open the Home folder.</long>
-            </locale>
-        </schema>
-
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/search</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/search</applyto>
-            <type>string</type>
-            <default>XF86Search</default>
-            <locale name="C">
-                <short>Search</short>
-                <long>Binding to launch the search tool.</long>
-            </locale>
-        </schema>
-
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/email</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/email</applyto>
-            <type>string</type>
-            <default>XF86Mail</default>
-            <locale name="C">
-                <short>Launch email client</short>
-                <long>Binding to launch the email client.</long>
-            </locale>
-        </schema>
-
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/screensaver</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/screensaver</applyto>
-            <type>string</type>
-            <default>&lt;Control&gt;&lt;Alt&gt;l</default>
-            <locale name="C">
-                <short>Lock screen</short>
-                <long>Binding to lock the screen.</long>
-            </locale>
-        </schema>
-
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/help</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/help</applyto>
-            <type>string</type>
-            <default></default>
-            <locale name="C">
-                <short>Launch help browser</short>
-                <long>Binding to launch the help browser.</long>
-            </locale>
-        </schema>
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/calculator</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/calculator</applyto>
-            <type>string</type>
-            <default>XF86Calculator</default>
-            <locale name="C">
-                <short>Launch calculator</short>
-                <long>Binding to launch the calculator.</long>
-            </locale>
-        </schema>
-
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/www</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/www</applyto>
-            <type>string</type>
-            <default>XF86WWW</default>
-            <locale name="C">
-                <short>Launch web browser</short>
-                <long>Binding to launch the web browser.</long>
-            </locale>
-        </schema>
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/media</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/media</applyto>
-            <type>string</type>
-            <default>XF86AudioMedia</default>
-            <locale name="C">
-                <short>Launch media player</short>
-                <long>Binding to launch the media player.</long>
-            </locale>
-        </schema>
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/play</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/play</applyto>
-            <type>string</type>
-            <default>XF86AudioPlay</default>
-            <locale name="C">
-                <short>Play (or play/pause)</short>
-                <long>Binding to start playback (or toggle play/pause).</long>
-            </locale>
-        </schema>
-
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/pause</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/pause</applyto>
-            <type>string</type>
-            <default>XF86AudioPause</default>
-            <locale name="C">
-                <short>Pause playback</short>
-                <long>Binding to pause playback.</long>
-            </locale>
-        </schema>
-
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/stop</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/stop</applyto>
-            <type>string</type>
-            <default>XF86AudioStop</default>
-            <locale name="C">
-                <short>Stop playback</short>
-                <long>Binding to stop playback.</long>
-            </locale>
-        </schema>
-
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/previous</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/previous</applyto>
-            <type>string</type>
-            <default>XF86AudioPrev</default>
-            <locale name="C">
-                <short>Previous track</short>
-                <long>Binding to skip to previous track.</long>
-            </locale>
-        </schema>
-
-
-        <schema>
-            <key>/schemas/apps/gnome_settings_daemon/keybindings/next</key>
-            <applyto>/apps/gnome_settings_daemon/keybindings/next</applyto>
-            <type>string</type>
-            <default>XF86AudioNext</default>
-            <locale name="C">
-                <short>Next track</short>
-                <long>Binding to skip to next track.</long>
-            </locale>
-        </schema>
-
-    </schemalist>
-</gconfschemafile>
diff --git a/data/apps_gnome_settings_daemon_xrandr.schemas.in b/data/apps_gnome_settings_daemon_xrandr.schemas.in
deleted file mode 100644
index d8442ae..0000000
--- a/data/apps_gnome_settings_daemon_xrandr.schemas.in
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<gconfschemafile>
-    <schemalist>
-	<schema>
-	    <key>/schemas/apps/gnome_settings_daemon/xrandr/show_notification_icon</key>
-	    <applyto>/apps/gnome_settings_daemon/xrandr/show_notification_icon</applyto>
-            <owner>gnome</owner>
-	    <type>bool</type>
-            <default>false</default>
-            <locale name="C">
-	        <short>Show Displays in Notification Area</short>
-                <long>Whether a notification icon with display-related things should be
-		    shown in the panel.
-		</long>
-            </locale>
-        </schema>
-	<schema>
-	    <key>/schemas/apps/gnome_settings_daemon/xrandr/turn_on_external_monitors_at_startup</key>
-	    <applyto>/apps/gnome_settings_daemon/xrandr/turn_on_external_monitors_at_startup</applyto>
-            <owner>gnome</owner>
-	    <type>bool</type>
-            <default>false</default>
-            <locale name="C">
-	        <short>Turn on external monitor after system boot</short>
-                <long>Turn on external monitor after system boot if user plugs in
-		external monitor on system boot.
-		</long>
-            </locale>
-        </schema>
-	<schema>
-	    <key>/schemas/apps/gnome_settings_daemon/xrandr/turn_on_laptop_monitor_at_startup</key>
-	    <applyto>/apps/gnome_settings_daemon/xrandr/turn_on_laptop_monitor_at_startup</applyto>
-            <owner>gnome</owner>
-	    <type>bool</type>
-            <default>true</default>
-            <locale name="C">
-	        <short>Turn on laptop monitor after system boot</short>
-                <long>Turn on laptop monitor after system boot if user plugs in
-		external monitor on system boot.
-		</long>
-            </locale>
-        </schema>
-	<schema>
-	    <key>/schemas/apps/gnome_settings_daemon/xrandr/default_configuration_file</key>
-	    <applyto>/apps/gnome_settings_daemon/xrandr/default_configuration_file</applyto>
-            <owner>gnome</owner>
-	    <type>string</type>
-            <default>/etc/gnome-settings-daemon/xrandr/monitors.xml</default>
-            <locale name="C">
-	        <short>File for default configuration for RandR</short>
-	        <long>The XRandR plugin will look for a default
-                configuration in the file specified by this key.  This
-                is similar to the ~/.config/monitors.xml that normally
-                gets stored in users' home directories.  If a user
-                does not have such a file, or has one that does not
-                match the user's setup of monitors, then the file
-                specified by this key will be used instead.
-	        </long>
-            </locale>
-        </schema>
-    </schemalist>
-</gconfschemafile>
diff --git a/data/desktop_gnome_font_rendering.schemas.in b/data/desktop_gnome_font_rendering.schemas.in
deleted file mode 100644
index 011df30..0000000
--- a/data/desktop_gnome_font_rendering.schemas.in
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-<gconfschemafile>
-    <schemalist>
-	<schema>
-	    <key>/schemas/desktop/gnome/font_rendering/dpi</key>
-	    <applyto>/desktop/gnome/font_rendering/dpi</applyto>
-            <owner>gnome</owner>
-	    <type>float</type>
-            <locale name="C">
-	        <short>DPI</short>
-                <long>
-	          The resolution used for converting font sizes to pixel sizes, 
-                  in dots per inch.
-		</long>
-            </locale>
-        </schema>
-	<schema>
-	    <key>/schemas/desktop/gnome/font_rendering/antialiasing</key>
-	    <applyto>/desktop/gnome/font_rendering/antialiasing</applyto>
-            <owner>gnome</owner>
-	    <type>string</type>
-            <default>grayscale</default>
-            <locale name="C">
-	        <short>Antialiasing</short>
-                <long>
-		  The type of antialiasing to use when rendering fonts.
-                  Possible values are: "none" for no antialiasing,
-                  "grayscale" for standard grayscale antialiasing, and
-                  "rgba" for subpixel antialiasing (LCD screens only).
-		</long>
-            </locale>
-        </schema>
-	<schema>
-	    <key>/schemas/desktop/gnome/font_rendering/hinting</key>
-	    <applyto>/desktop/gnome/font_rendering/hinting</applyto>
-            <owner>gnome</owner>
-	    <type>string</type>
-            <default>medium</default>
-            <locale name="C">
-	        <short>Hinting</short>
-                <long>
-		  The type of hinting to use when rendering fonts.
-                  Possible values are: "none" for no hinting, 
-		  "slight" for basic, "medium" for moderate, and
-                  "full" for maximum hinting (may cause
-                  distortion of letter forms).
-		</long>
-            </locale>
-        </schema>
-	<schema>
-	    <key>/schemas/desktop/gnome/font_rendering/rgba_order</key>
-	    <applyto>/desktop/gnome/font_rendering/rgba_order</applyto>
-            <owner>gnome</owner>
-	    <type>string</type>
-            <default>rgb</default>
-            <locale name="C">
-	        <short>RGBA order</short>
-                <long>
-                  The order of subpixel elements on an LCD
-                  screen; only used when antialiasing is set to "rgba".
-                  Possible values are: "rgb" for red on left (most common),
-                  "bgr" for blue on left, "vrgb" for red on top, "vbgr" for
-                  red on bottom.
-		</long>
-            </locale>
-        </schema>
-    </schemalist>
-</gconfschemafile>
diff --git a/data/desktop_gnome_keybindings.schemas.in b/data/desktop_gnome_keybindings.schemas.in
deleted file mode 100644
index cd048e2..0000000
--- a/data/desktop_gnome_keybindings.schemas.in
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<gconfschemafile>
-    <schemalist>
-	<schema>
-	    <key>/schemas/desktop/gnome/keybindings/allowed_keys</key>
-	    <applyto>/desktop/gnome/keybindings/allowed_keys</applyto>
-            <owner>gnome</owner>
-	    <type>list</type>
-	    <list_type>string</list_type>
-	    <default>[]</default>
-            <locale name="C">
-	        <short>Allowed keys</short>
-                <long>
-	          If non-empty, keybindings will be ignored unless their GConf 
-	          directory is in the list. This is useful for lockdown. 
-		</long>
-            </locale>
-        </schema>
-    </schemalist>
-</gconfschemafile>
diff --git a/data/desktop_gnome_peripherals_smartcard.schemas.in b/data/desktop_gnome_peripherals_smartcard.schemas.in
deleted file mode 100644
index 4b61433..0000000
--- a/data/desktop_gnome_peripherals_smartcard.schemas.in
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-<gconfschemafile>
-  <schemalist>
-    <schema>
-      <key>/schemas/desktop/gnome/peripherals/smartcard/removal_action</key>
-      <applyto>/desktop/gnome/peripherals/smartcard/removal_action</applyto>
-      <owner>gnome</owner>
-      <type>string</type>
-      <default>none</default>
-      <locale name="C">
-        <short>Smartcard removal action</short>
-        <long>Set this to one of "none", "lock_screen", or "force_logout".  The action will
-              get performed when the smartcard used for log in is removed.</long>
-      </locale>
-    </schema>
-  </schemalist>
-</gconfschemafile>
diff --git a/data/desktop_gnome_peripherals_touchpad.schemas.in b/data/desktop_gnome_peripherals_touchpad.schemas.in
deleted file mode 100644
index 7d41073..0000000
--- a/data/desktop_gnome_peripherals_touchpad.schemas.in
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0"?>
-<gconfschemafile>
-  <schemalist>
-
-    <schema>
-      <key>/schemas/desktop/gnome/peripherals/touchpad/disable_while_typing</key>
-      <applyto>/desktop/gnome/peripherals/touchpad/disable_while_typing</applyto>
-      <owner>gnome</owner>
-      <type>bool</type>
-      <default>FALSE</default>
-      <locale name="C">
-        <short>Disable touchpad while typing</short>
-        <long>Set this to TRUE if you have problems with accidentally hitting the touchpad while typing.</long>
-      </locale>
-    </schema>
-
-    <schema>
-      <key>/schemas/desktop/gnome/peripherals/touchpad/tap_to_click</key>
-      <applyto>/desktop/gnome/peripherals/touchpad/tap_to_click</applyto>
-      <owner>gnome</owner>
-      <type>bool</type>
-      <default>FALSE</default>
-      <locale name="C">
-        <short>Enable mouse clicks with touchpad</short>
-        <long>Set this to TRUE to be able to send mouse clicks by tapping on the touchpad.</long>
-      </locale>
-    </schema>
-
-    <schema>
-      <key>/schemas/desktop/gnome/peripherals/touchpad/scroll_method</key>
-      <applyto>/desktop/gnome/peripherals/touchpad/scroll_method</applyto>
-      <owner>gnome</owner>
-      <type>int</type>
-      <default>1</default>
-      <locale name="C">
-        <short>Select the touchpad scroll method</short>
-        <long>Select the touchpad scroll method. Supported values are: 0: disabled, 1: edge scrolling, and 2: two-finger scrolling</long>
-      </locale>
-    </schema>
-
-    <schema>
-      <key>/schemas/desktop/gnome/peripherals/touchpad/horiz_scroll_enabled</key>
-      <applyto>/desktop/gnome/peripherals/touchpad/horiz_scroll_enabled</applyto>
-      <owner>gnome</owner>
-      <type>bool</type>
-      <default>FALSE</default>
-      <locale name="C">
-        <short>Enable horizontal scrolling</short>
-        <long>Set this to TRUE to allow horizontal scrolling by the same method selected with the scroll_method key.</long>
-      </locale>
-    </schema>
-
-    <schema>
-      <key>/schemas/desktop/gnome/peripherals/touchpad/touchpad_enabled</key>
-      <applyto>/desktop/gnome/peripherals/touchpad/touchpad_enabled</applyto>
-      <owner>gnome</owner>
-      <type>bool</type>
-      <default>TRUE</default>
-      <locale name="C">
-        <short>Enable touchpad</short>
-        <long>Set this to TRUE to enable all touchpads.</long>
-      </locale>
-    </schema>
-  </schemalist>
-</gconfschemafile>
diff --git a/data/gnome-settings-daemon.convert b/data/gnome-settings-daemon.convert
new file mode 100644
index 0000000..e18a90e
--- /dev/null
+++ b/data/gnome-settings-daemon.convert
@@ -0,0 +1,50 @@
+[org.gnome.desktop.font-rendering]
+antialiasing = /desktop/gnome/font_rendering/antialiasing
+dpi = /desktop/gnome/font_rendering/dpi
+hinting = /desktop/gnome/font_rendering/hinting
+rgba-order = /desktop/gnome/font_rendering/rgba_order
+
+[org.gnome.desktop.keybindings]
+allowed-keys = /desktop/gnome/keybindings/allowed_keys
+calculator = /apps/gnome_settings_daemon/keybindings/calculator
+email = /apps/gnome_settings_daemon/keybindings/email
+eject = /apps/gnome_settings_daemon/keybindings/eject
+help = /apps/gnome_settings_daemon/keybindings/help
+home = /apps/gnome_settings_daemon/keybindings/home
+media = /apps/gnome_settings_daemon/keybindings/media
+next = /apps/gnome_settings_daemon/keybindings/next
+pause = /apps/gnome_settings_daemon/keybindings/pause
+play = /apps/gnome_settings_daemon/keybindings/play
+power = /apps/gnome_settings_daemon/keybindings/power
+previous = /apps/gnome_settings_daemon/keybindings/previous
+screensaver = /apps/gnome_settings_daemon/keybindings/screensaver
+search = /apps/gnome_settings_daemon/keybindings/search
+stop = /apps/gnome_settings_daemon/keybindings/stop
+touchpad = /apps/gnome_settings_daemon/keybindings/touchpad
+volume-down = /apps/gnome_settings_daemon/keybindings/volume_down
+volume-mute = /apps/gnome_settings_daemon/keybindings/volume_mute
+volume-up = /apps/gnome_settings_daemon/keybindings/volume_up
+www = /apps/gnome_settings_daemon/keybindings/www
+
+[org.gnome.desktop.peripherals.smartcard]
+removal-action = /desktop/gnome/peripherals/smartcard/removal_action
+
+[org.gnome.desktop.peripherals.touchpad]
+disable-while-typing = /desktop/gnome/peripherals/touchpad/disable_while_typing
+horiz-scroll-enabled = /desktop/gnome/peripherals/touchpad/horiz_scroll_enabled
+scroll-method = /desktop/gnome/peripherals/touchpad/scroll_method
+tap-to-click = /desktop/gnome/peripherals/touchpad/tap_to_click
+touchpad-enabled = /desktop/gnome/peripherals/touchpad/touchpad_enabled
+
+[org.gnome.settings-daemon.plugins.housekeeping]
+free-percent-notify = /apps/gnome_settings_daemon/plugins/housekeeping/free_percent_notify
+free-percent-notify-again = /apps/gnome_settings_daemon/plugins/housekeeping/free_percent_notify_again
+free-size-gb-no-notify = /apps/gnome_settings_daemon/plugins/housekeeping/free_size_gb_no_notify
+ignore-paths = /apps/gnome_settings_daemon/plugins/housekeeping/ignore_paths
+min-notify-period = /apps/gnome_settings_daemon/plugins/housekeeping/min_notify_period
+
+[org.gnome.settings-daemon.plugins.xrandr]
+default-configuration-file = /apps/gnome_settings_daemon/xrandr/default_configuration_file
+show-notification-icon = /apps/gnome_settings_daemon/xrandr/show_notification_icon
+turn-on-external-monitors-at-startup = /apps/gnome_settings_daemon/xrandr/turn_on_external_monitors_at_startup
+turn-on-laptop-monitor-at-startup = /apps/gnome_settings_daemon/xrandr/turn_on_laptop_monitor_at_startup
diff --git a/data/org.gnome.desktop.font-rendering.gschema.xml.in.in b/data/org.gnome.desktop.font-rendering.gschema.xml.in.in
new file mode 100644
index 0000000..8adbee2
--- /dev/null
+++ b/data/org.gnome.desktop.font-rendering.gschema.xml.in.in
@@ -0,0 +1,24 @@
+<schemalist>
+  <schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.desktop.font-rendering" path="/desktop/gnome/font-rendering">
+    <key name="antialiasing" type="s">
+      <default>grayscale</default>
+      <_summary>Antialiasing</_summary>
+      <_description>The type of antialiasing to use when rendering fonts. Possible values are: "none" for no antialiasing, "grayscale" for standard grayscale antialiasing, and "rgba" for subpixel antialiasing (LCD screens only).</_description>
+    </key>
+    <key name="dpi" type="f">
+      <default></default>
+      <_summary>DPI</_summary>
+      <_description>The resolution used for converting font sizes to pixel sizes, in dots per inch.</_description>
+    </key>
+    <key name="hinting" type="s">
+      <default>medium</default>
+      <_summary>Hinting</_summary>
+      <_description>The type of hinting to use when rendering fonts. Possible values are: "none" for no hinting, "slight" for basic, "medium" for moderate, and "full" for maximum hinting (may cause distortion of letter forms).</_description>
+    </key>
+    <key name="rgba-order" type="s">
+      <default>rgb</default>
+      <_summary>RGBA order</_summary>
+      <_description>The order of subpixel elements on an LCD screen; only used when antialiasing is set to "rgba". Possible values are: "rgb" for red on left (most common), "bgr" for blue on left, "vrgb" for red on top, "vbgr" for red on bottom.</_description>
+    </key>
+  </schema>
+</schemalist>
diff --git a/data/org.gnome.desktop.keybindings.gschema.xml.in.in b/data/org.gnome.desktop.keybindings.gschema.xml.in.in
new file mode 100644
index 0000000..c820107
--- /dev/null
+++ b/data/org.gnome.desktop.keybindings.gschema.xml.in.in
@@ -0,0 +1,104 @@
+<schemalist>
+  <schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.desktop.keybindings" path="/desktop/gnome/keybindings">
+    <key name="allowed-keys" type="as">
+      <default>[]</default>
+      <_summary>Allowed keys</_summary>
+      <_description>If non-empty, keybindings will be ignored unless their settings directory is in the list. This is useful for lockdown.</_description>
+    </key>
+    <key name="calculator" type="s">
+      <default>XF86Calculator</default>
+      <_summary>Launch calculator</_summary>
+      <_description>Binding to launch the calculator.</_description>
+    </key>
+    <key name="email" type="s">
+      <default>XF86Mail</default>
+      <_summary>Launch email client</_summary>
+      <_description>Binding to launch the email client.</_description>
+    </key>
+    <key name="eject" type="s">
+      <default>XF86Eject</default>
+      <_summary>Eject</_summary>
+      <_description>Binding to eject an optical disc.</_description>
+    </key>
+    <key name="help" type="s">
+      <default></default>
+      <_summary>Launch help browser</_summary>
+      <_description>Binding to launch the help browser.</_description>
+    </key>
+    <key name="home" type="s">
+      <default>XF86Explorer</default>
+      <_summary>Home folder</_summary>
+      <_description>Binding to open the Home folder.</_description>
+    </key>
+    <key name="media" type="s">
+      <default>XF86AudioMedia</default>
+      <_summary>Launch media player</_summary>
+      <_description>Binding to launch the media player.</_description>
+    </key>
+    <key name="next" type="s">
+      <default>XF86AudioNext</default>
+      <_summary>Next track</_summary>
+      <_description>Binding to skip to next track.</_description>
+    </key>
+    <key name="pause" type="s">
+      <default>XF86AudioPause</default>
+      <_summary>Pause playback</_summary>
+      <_description>Binding to pause playback.</_description>
+    </key>
+    <key name="play" type="s">
+      <default>XF86AudioPlay</default>
+      <_summary>Play (or play/pause)</_summary>
+      <_description>Binding to start playback (or toggle play/pause).</_description>
+    </key>
+    <key name="power" type="s">
+      <default>&lt;Control&gt;&lt;Alt&gt;Delete</default>
+      <_summary>Log out</_summary>
+      <_description>Binding to log out.</_description>
+    </key>
+    <key name="previous" type="s">
+      <default>XF86AudioPrev</default>
+      <_summary>Previous track</_summary>
+      <_description>Binding to skip to previous track.</_description>
+    </key>
+    <key name="screensaver" type="s">
+      <default>&lt;Control&gt;&lt;Alt&gt;l</default>
+      <_summary>Lock screen</_summary>
+      <_description>Binding to lock the screen.</_description>
+    </key>
+    <key name="search" type="s">
+      <default>XF86Search</default>
+      <_summary>Search</_summary>
+      <_description>Binding to launch the search tool.</_description>
+    </key>
+    <key name="stop" type="s">
+      <default>XF86AudioStop</default>
+      <_summary>Stop playback</_summary>
+      <_description>Binding to stop playback.</_description>
+    </key>
+    <key name="touchpad" type="s">
+      <default>XF86TouchpadToggle</default>
+      <_summary>Toggle touchpad</_summary>
+      <_description>Binding to enable or disable the touchpad.</_description>
+    </key>
+    <key name="volume-down" type="s">
+      <default>XF86AudioLowerVolume</default>
+      <_summary>Volume down</_summary>
+      <_description>Binding to lower the system volume.</_description>
+    </key>
+    <key name="volume-mute" type="s">
+      <default>XF86AudioMute</default>
+      <_summary>Volume mute</_summary>
+      <_description>Binding to mute the system volume.</_description>
+    </key>
+    <key name="volume-up" type="s">
+      <default>XF86AudioRaiseVolume</default>
+      <_summary>Volume up</_summary>
+      <_description>Binding to raise the system volume.</_description>
+    </key>
+    <key name="www" type="s">
+      <default>XF86WWW</default>
+      <_summary>Launch web browser</_summary>
+      <_description>Binding to launch the web browser.</_description>
+    </key>
+  </schema>
+</schemalist>
diff --git a/data/org.gnome.desktop.peripherals.gschema.xml.in.in b/data/org.gnome.desktop.peripherals.gschema.xml.in.in
new file mode 100644
index 0000000..fd4495c
--- /dev/null
+++ b/data/org.gnome.desktop.peripherals.gschema.xml.in.in
@@ -0,0 +1,40 @@
+<schemalist>
+  <schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.desktop.peripherals" path="/desktop/gnome/peripherals">
+    <child name="smartcard" schema="org.gnome.desktop.peripherals.smartcard"/>
+    <child name="touchpad" schema="org.gnome.desktop.peripherals.touchpad"/>
+  </schema>
+  <schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.desktop.peripherals.smartcard" path="/desktop/gnome/peripherals/smartcard">
+    <key name="removal-action" type="s">
+      <default>none</default>
+      <_summary>Smartcard removal action</_summary>
+      <_description>Set this to one of "none", "lock_screen", or "force_logout". The action will get performed when the smartcard used for log in is removed.</_description>
+    </key>
+  </schema>
+  <schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.desktop.peripherals.touchpad" path="/desktop/gnome/peripherals/touchpad">
+    <key name="disable-while-typing" type="b">
+      <default>false</default>
+      <_summary>Disable touchpad while typing</_summary>
+      <_description>Set this to TRUE if you have problems with accidentally hitting the touchpad while typing.</_description>
+    </key>
+    <key name="horiz-scroll-enabled" type="b">
+      <default>false</default>
+      <_summary>Enable horizontal scrolling</_summary>
+      <_description>Set this to TRUE to allow horizontal scrolling by the same method selected with the scroll_method key.</_description>
+    </key>
+    <key name="scroll-method" type="i">
+      <default>1</default>
+      <_summary>Select the touchpad scroll method</_summary>
+      <_description>Select the touchpad scroll method. Supported values are: 0: disabled, 1: edge scrolling, and 2: two-finger scrolling</_description>
+    </key>
+    <key name="tap-to-click" type="b">
+      <default>false</default>
+      <_summary>Enable mouse clicks with touchpad</_summary>
+      <_description>Set this to TRUE to be able to send mouse clicks by tapping on the touchpad.</_description>
+    </key>
+    <key name="touchpad-enabled" type="b">
+      <default>true</default>
+      <_summary>Enable touchpad</_summary>
+      <_description>Set this to TRUE to enable all touchpads.</_description>
+    </key>
+  </schema>
+</schemalist>
diff --git a/data/org.gnome.settings-daemon.plugins.housekeeping.gschema.xml.in.in b/data/org.gnome.settings-daemon.plugins.housekeeping.gschema.xml.in.in
new file mode 100644
index 0000000..c96bb17
--- /dev/null
+++ b/data/org.gnome.settings-daemon.plugins.housekeeping.gschema.xml.in.in
@@ -0,0 +1,29 @@
+<schemalist>
+  <schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.settings-daemon.plugins.housekeeping" path="/apps/gnome-settings-daemon/plugins/housekeeping">
+    <key name="free-percent-notify" type="f">
+      <default>0.05</default>
+      <_summary>Free percentage notify threshold</_summary>
+      <_description>Percentage free space threshold for initial warning of low disk space. If the percentage free space drops below this, a warning will be shown.</_description>
+    </key>
+    <key name="free-percent-notify-again" type="f">
+      <default>0.01</default>
+      <_summary>Subsequent free percentage notify threshold</_summary>
+      <_description>Specify the percentage that the free disk space should reduce by before issuing a subsequent warning.</_description>
+    </key>
+    <key name="free-size-gb-no-notify" type="i">
+      <default>2</default>
+      <_summary>Free space no notify threshold</_summary>
+      <_description>Specify an amount in GB. If the amount of free space is more than this, no warning will be shown.</_description>
+    </key>
+    <key name="min-notify-period" type="i">
+      <default>10</default>
+      <_summary>Minimum notify period for repeated warnings</_summary>
+      <_description>Specify a time in minutes. Subsequent warnings for a volume will not appear more often than this period.</_description>
+    </key>
+    <key name="ignore-paths" type="as">
+      <default>[]</default>
+      <_summary>Mount paths to ignore</_summary>
+      <_description>Specify a list of mount paths to ignore when they run low on space.</_description>
+    </key>
+  </schema>
+</schemalist>
diff --git a/data/org.gnome.settings-daemon.plugins.xrandr.gschema.xml.in.in b/data/org.gnome.settings-daemon.plugins.xrandr.gschema.xml.in.in
new file mode 100644
index 0000000..3b72ad0
--- /dev/null
+++ b/data/org.gnome.settings-daemon.plugins.xrandr.gschema.xml.in.in
@@ -0,0 +1,24 @@
+<schemalist>
+  <schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.settings-daemon.plugins.xrandr" path="/apps/gnome-settings-daemon/plugins/xrandr">
+    <key name="default-configuration-file" type="s">
+      <default>/etc/gnome-settings-daemon/xrandr/monitors.xml</default>
+      <_summary>File for default configuration for RandR</_summary>
+      <_description>The XRandR plugin will look for a default configuration in the file specified by this key. This is similar to the ~/.config/monitors.xml that normally gets stored in users' home directories.  If a user does not have such a file, or has one that does not match the user's setup of monitors, then the file specified by this key will be used instead.</_description>
+    </key>
+    <key name="show-notification-icon" type="b">
+      <default>false</default>
+      <_summary>Show display in Notification Area</_summary>
+      <_description>Whether a notification icon with display-related things should be shown in the panel.</_description>
+    </key>
+    <key name="turn-on-external-monitors-at-startup" type="b">
+      <default>false</default>
+      <_summary>Turn on external monitor after system boot</_summary>
+      <_description>Turn on external monitor after system boot if user plugs in external monitor on system boot.</_description>
+    </key>
+    <key name="turn-on-laptop-monitor-at-startup" type="b">
+      <default>true</default>
+      <_summary>Turn on laptop monitor after system boot</_summary>
+      <_description>Turn on laptop monitor after system boot if user plugs in external monitor on system boot.</_description>
+    </key>
+  </schema>
+</schemalist>
diff --git a/gnome-settings-daemon/gnome-settings-manager.c b/gnome-settings-daemon/gnome-settings-manager.c
index 0f89ee3..0869fc5 100644
--- a/gnome-settings-daemon/gnome-settings-manager.c
+++ b/gnome-settings-daemon/gnome-settings-manager.c
@@ -28,10 +28,10 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <glib-object.h>
+#include <gio/gio.h>
 #define DBUS_API_SUBJECT_TO_CHANGE
 #include <dbus/dbus-glib.h>
 #include <dbus/dbus-glib-lowlevel.h>
-#include <gconf/gconf-client.h>
 
 #include "gnome-settings-plugin-info.h"
 #include "gnome-settings-manager.h"
@@ -40,7 +40,7 @@
 
 #define GSD_MANAGER_DBUS_PATH "/org/gnome/SettingsDaemon"
 
-#define DEFAULT_SETTINGS_PREFIX "/apps/gnome_settings_daemon/plugins"
+#define DEFAULT_SETTINGS_PREFIX "org.gnome.settings-daemon"
 
 #define PLUGIN_EXT ".gnome-settings-plugin"
 
@@ -49,7 +49,7 @@
 struct GnomeSettingsManagerPrivate
 {
         DBusGConnection            *connection;
-        GConfClient                *gconf_client;
+        GSettings                  *settings;
         char                       *settings_prefix;
         GSList                     *plugins;
 };
@@ -159,7 +159,6 @@ _load_file (GnomeSettingsManager *manager,
         GnomeSettingsPluginInfo *info;
         char                    *key_name;
         int                      priority;
-        GError                  *error;
         GSList                  *l;
 
         g_debug ("Loading plugin: %s", filename);
@@ -185,24 +184,10 @@ _load_file (GnomeSettingsManager *manager,
         g_signal_connect (info, "deactivated",
                           G_CALLBACK (on_plugin_deactivated), manager);
 
-        key_name = g_strdup_printf ("%s/%s/active",
+        key_name = g_strdup_printf ("%s.plugins.%s",
                                     manager->priv->settings_prefix,
                                     gnome_settings_plugin_info_get_location (info));
-        gnome_settings_plugin_info_set_enabled_key_name (info, key_name);
-        g_free (key_name);
-
-        key_name = g_strdup_printf ("%s/%s/priority",
-                                    manager->priv->settings_prefix,
-                                    gnome_settings_plugin_info_get_location (info));
-        error = NULL;
-        priority = gconf_client_get_int (manager->priv->gconf_client, key_name, &error);
-        if (error == NULL) {
-                if (priority > 0) {
-                        gnome_settings_plugin_info_set_priority (info, priority);
-                }
-        } else {
-                g_error_free (error);
-        }
+        gnome_settings_plugin_info_set_settings_prefix (info, key_name);
         g_free (key_name);
 
  out:
@@ -337,16 +322,11 @@ gnome_settings_manager_start (GnomeSettingsManager *manager,
                 goto out;
         }
 
-        manager->priv->gconf_client = gconf_client_get_default ();
-
-        gnome_settings_profile_start ("preloading gconf keys");
-        gconf_client_add_dir (manager->priv->gconf_client,
-                              manager->priv->settings_prefix,
-                              GCONF_CLIENT_PRELOAD_RECURSIVE,
-                              NULL);
-        gnome_settings_profile_end ("preloading gconf keys");
+        gnome_settings_profile_start ("initializing plugins");
+        manager->priv->settings = g_settings_new (manager->priv->settings_prefix);
 
         _load_all (manager);
+        gnome_settings_profile_end ("initializing plugins");
 
         ret = TRUE;
  out:
@@ -381,11 +361,8 @@ gnome_settings_manager_stop (GnomeSettingsManager *manager)
 
         _unload_all (manager);
 
-        gconf_client_remove_dir (manager->priv->gconf_client,
-                                 manager->priv->settings_prefix,
-                                 NULL);
-        g_object_unref (manager->priv->gconf_client);
-        manager->priv->gconf_client = NULL;
+        g_object_unref (manager->priv->settings);
+        manager->priv->settings = NULL;
 }
 
 static void
diff --git a/gnome-settings-daemon/gnome-settings-plugin-info.c b/gnome-settings-daemon/gnome-settings-plugin-info.c
index a4a10a8..823530e 100644
--- a/gnome-settings-daemon/gnome-settings-plugin-info.c
+++ b/gnome-settings-daemon/gnome-settings-plugin-info.c
@@ -25,7 +25,7 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gmodule.h>
-#include <gconf/gconf-client.h>
+#include <gio/gio.h>
 
 #include "gnome-settings-plugin-info.h"
 #include "gnome-settings-module.h"
@@ -48,7 +48,7 @@ typedef enum
 struct GnomeSettingsPluginInfoPrivate
 {
         char                    *file;
-        GConfClient             *client;
+        GSettings               *settings;
 
         char                    *location;
         GnomeSettingsPluginLoader  loader;
@@ -70,8 +70,6 @@ struct GnomeSettingsPluginInfoPrivate
            when the interpreter has not been correctly initializated) */
         int                      available : 1;
 
-        guint                    enabled_notification_id;
-
         /* Priority determines the order in which plugins are started and
          * stopped. A lower number means higher priority. */
         guint                    priority;
@@ -117,14 +115,7 @@ gnome_settings_plugin_info_finalize (GObject *object)
         g_free (info->priv->copyright);
         g_strfreev (info->priv->authors);
 
-        if (info->priv->enabled_notification_id != 0) {
-                gconf_client_notify_remove (info->priv->client,
-                                            info->priv->enabled_notification_id);
-
-                info->priv->enabled_notification_id = 0;
-        }
-
-        g_object_unref (info->priv->client);
+        g_object_unref (info->priv->settings);
 
         G_OBJECT_CLASS (gnome_settings_plugin_info_parent_class)->finalize (object);
 }
@@ -164,7 +155,6 @@ static void
 gnome_settings_plugin_info_init (GnomeSettingsPluginInfo *info)
 {
         info->priv = GNOME_SETTINGS_PLUGIN_INFO_GET_PRIVATE (info);
-        info->priv->client = gconf_client_get_default ();
 }
 
 static void
@@ -295,33 +285,6 @@ gnome_settings_plugin_info_fill_from_file (GnomeSettingsPluginInfo *info,
         return ret;
 }
 
-static void
-plugin_enabled_cb (GConfClient             *client,
-                   guint                    cnxn_id,
-                   GConfEntry              *entry,
-                   GnomeSettingsPluginInfo *info)
-{
-        if (gconf_value_get_bool (entry->value)) {
-                gnome_settings_plugin_info_activate (info);
-        } else {
-                gnome_settings_plugin_info_deactivate (info);
-        }
-}
-
-void
-gnome_settings_plugin_info_set_enabled_key_name (GnomeSettingsPluginInfo *info,
-                                                 const char              *key_name)
-{
-        info->priv->enabled_notification_id = gconf_client_notify_add (info->priv->client,
-                                                                       key_name,
-                                                                       (GConfClientNotifyFunc)plugin_enabled_cb,
-                                                                       info,
-                                                                       NULL,
-                                                                       NULL);
-
-        info->priv->enabled = gconf_client_get_bool (info->priv->client, key_name, NULL);
-}
-
 GnomeSettingsPluginInfo *
 gnome_settings_plugin_info_new_from_file (const char *filename)
 {
@@ -340,6 +303,29 @@ gnome_settings_plugin_info_new_from_file (const char *filename)
 }
 
 static void
+plugin_enabled_cb (GSettings               *settings,
+                   const gchar             *key,
+                   GnomeSettingsPluginInfo *info)
+{
+        if (g_strcmp0 (key, "active") == 0) {
+                if (g_settings_get_boolean (settings, "active"))
+                        gnome_settings_plugin_info_activate (info);
+                else 
+                        gnome_settings_plugin_info_deactivate (info);
+        }
+}
+
+void
+gnome_settings_plugin_info_set_settings_prefix (GnomeSettingsPluginInfo *info,
+                                                const char              *settings_prefix)
+{
+        info->priv->settings = g_settings_new (settings_prefix);
+        info->priv->enabled = g_settings_get_boolean (info->priv->settings, "active");
+        g_signal_connect (G_OBJECT (info->priv->settings), "changed",
+                          G_CALLBACK (plugin_enabled_cb), info);
+}
+
+static void
 _deactivate_plugin (GnomeSettingsPluginInfo *info)
 {
         gnome_settings_plugin_deactivate (info->priv->plugin);
diff --git a/gnome-settings-daemon/gnome-settings-plugin-info.h b/gnome-settings-daemon/gnome-settings-plugin-info.h
index 9db32ce..d3fac9b 100644
--- a/gnome-settings-daemon/gnome-settings-plugin-info.h
+++ b/gnome-settings-daemon/gnome-settings-plugin-info.h
@@ -52,8 +52,7 @@ GType            gnome_settings_plugin_info_get_type           (void) G_GNUC_CON
 
 GnomeSettingsPluginInfo *gnome_settings_plugin_info_new_from_file (const char *filename);
 
-void             gnome_settings_plugin_info_set_enabled_key_name (GnomeSettingsPluginInfo *info,
-                                                                  const char              *key_name);
+void             gnome_settings_plugin_info_set_settings_prefix (GnomeSettingsPluginInfo *info, const char *settings_prefix);
 gboolean         gnome_settings_plugin_info_activate        (GnomeSettingsPluginInfo *info);
 gboolean         gnome_settings_plugin_info_deactivate      (GnomeSettingsPluginInfo *info);
 
diff --git a/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c b/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c
index f7ab052..8f0bc90 100644
--- a/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c
+++ b/plugins/a11y-keyboard/gsd-a11y-preferences-dialog.c
@@ -28,12 +28,13 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <glib-object.h>
+#include <gio/gio.h>
 #include <gtk/gtk.h>
 
-#include <dbus/dbus-glib.h>
-
 #include <gconf/gconf-client.h>
 
+#include <dbus/dbus-glib.h>
+
 #include "gsd-a11y-preferences-dialog.h"
 
 #define SM_DBUS_NAME      "org.gnome.SessionManager"
@@ -56,8 +57,8 @@
 #define KEY_AT_SCREEN_MAGNIFIER_ENABLED KEY_AT_DIR "/screen_magnifier_enabled"
 #define KEY_AT_SCREEN_READER_ENABLED    KEY_AT_DIR "/screen_reader_enabled"
 
-#define FONT_RENDER_DIR        "/desktop/gnome/font_rendering"
-#define KEY_FONT_DPI           FONT_RENDER_DIR "/dpi"
+#define FONT_RENDER_DIR        "org.gnome.desktop.font-rendering"
+#define KEY_FONT_DPI           "dpi"
 /* X servers sometimes lie about the screen's physical dimensions, so we cannot
  * compute an accurate DPI value.  When this happens, the user gets fonts that
  * are too huge or too tiny.  So, we see what the server returns:  if it reports
@@ -274,24 +275,15 @@ static gboolean
 config_get_large_print (gboolean *is_writable)
 {
         gboolean     ret;
-        GConfClient *client;
-        GConfValue  *value;
+        GSettings   *settings;
         gdouble      x_dpi;
         gdouble      u_dpi;
 
-        client = gconf_client_get_default ();
-        value = gconf_client_get_without_default (client, KEY_FONT_DPI, NULL);
-
-        if (value != NULL) {
-                u_dpi = gconf_value_get_float (value);
-                gconf_value_free (value);
-        } else {
-                u_dpi = DPI_DEFAULT;
-        }
-
+        settings = g_settings_new ("org.gnome.desktop.font-rendering");
+        u_dpi = g_settings_get_double (settings, KEY_FONT_DPI);
         x_dpi = get_dpi_from_x_server ();
 
-        g_object_unref (client);
+        g_object_unref (settings);
 
         g_debug ("GsdA11yPreferences: got x-dpi=%f user-dpi=%f", x_dpi, u_dpi);
 
@@ -303,9 +295,9 @@ config_get_large_print (gboolean *is_writable)
 static void
 config_set_large_print (gboolean enabled)
 {
-        GConfClient *client;
+        GSettings *settings;
 
-        client = gconf_client_get_default ();
+        settings = g_settings_new ("org.gnome.desktop.font-rendering");
 
         if (enabled) {
                 gdouble x_dpi;
@@ -316,12 +308,12 @@ config_set_large_print (gboolean enabled)
 
                 g_debug ("GsdA11yPreferences: setting x-dpi=%f user-dpi=%f", x_dpi, u_dpi);
 
-                gconf_client_set_float (client, KEY_FONT_DPI, u_dpi, NULL);
+                g_settings_set_double (settings, KEY_FONT_DPI, u_dpi);
         } else {
-                gconf_client_unset (client, KEY_FONT_DPI, NULL);
+                g_settings_reset (settings, KEY_FONT_DPI);
         }
 
-        g_object_unref (client);
+        g_object_unref (settings);
 }
 
 static gboolean
diff --git a/plugins/housekeeping/gsd-disk-space.c b/plugins/housekeeping/gsd-disk-space.c
index f474d96..e1385ea 100644
--- a/plugins/housekeeping/gsd-disk-space.c
+++ b/plugins/housekeeping/gsd-disk-space.c
@@ -35,7 +35,6 @@
 #include <gio/gunixmounts.h>
 #include <gio/gio.h>
 #include <gtk/gtk.h>
-#include <gconf/gconf-client.h>
 
 #include "gsd-disk-space.h"
 #include "gsd-ldsm-dialog.h"
@@ -48,12 +47,12 @@
 
 #define DISK_SPACE_ANALYZER        "baobab"
 
-#define GCONF_HOUSEKEEPING_DIR     "/apps/gnome_settings_daemon/plugins/housekeeping"
-#define GCONF_FREE_PC_NOTIFY_KEY   "free_percent_notify"
-#define GCONF_FREE_PC_NOTIFY_AGAIN_KEY "free_percent_notify_again"
-#define GCONF_FREE_SIZE_NO_NOTIFY  "free_size_gb_no_notify"
-#define GCONF_MIN_NOTIFY_PERIOD    "min_notify_period"
-#define GCONF_IGNORE_PATHS         "ignore_paths"
+#define SETTINGS_HOUSEKEEPING_DIR     "org.gnome.settings-daemon.plugins.housekeeping"
+#define SETTINGS_FREE_PC_NOTIFY_KEY   "free-percent-notify"
+#define SETTINGS_FREE_PC_NOTIFY_AGAIN_KEY "free-percent-notify-again"
+#define SETTINGS_FREE_SIZE_NO_NOTIFY  "free-size-gb-no-notify"
+#define SETTINGS_MIN_NOTIFY_PERIOD    "min-notify-period"
+#define SETTINGS_IGNORE_PATHS         "ignore-paths"
 
 typedef struct
 {
@@ -70,8 +69,7 @@ static double             free_percent_notify_again = 0.01;
 static unsigned int       free_size_gb_no_notify = 2;
 static unsigned int       min_notify_period = 10;
 static GSList            *ignore_paths = NULL;
-static unsigned int       gconf_notify_id;
-static GConfClient       *client = NULL;
+static GSettings         *settings = NULL;
 static GsdLdsmDialog     *dialog = NULL;
 static guint64           *time_read;
 
@@ -568,70 +566,50 @@ ldsm_is_hash_item_in_ignore_paths (gpointer key,
 static void
 gsd_ldsm_get_config ()
 {
-        GError *error = NULL;
-
-        free_percent_notify = gconf_client_get_float (client,
-                                                      GCONF_HOUSEKEEPING_DIR "/" GCONF_FREE_PC_NOTIFY_KEY,
-                                                      &error);
-        if (error != NULL) {
-                g_warning ("Error reading configuration from GConf: %s", error->message ? error->message : "Unknown error");
-                g_clear_error (&error);
-        }
+        gchar **settings_list;
+
+        free_percent_notify = g_settings_get_double (settings, SETTINGS_FREE_PC_NOTIFY_KEY);
         if (free_percent_notify >= 1 || free_percent_notify < 0) {
                 g_warning ("Invalid configuration of free_percent_notify: %f\n" \
                            "Using sensible default", free_percent_notify);
                 free_percent_notify = 0.05;
         }
 
-        free_percent_notify_again = gconf_client_get_float (client,
-                                                            GCONF_HOUSEKEEPING_DIR "/" GCONF_FREE_PC_NOTIFY_AGAIN_KEY,
-                                                            &error);
-        if (error != NULL) {
-                g_warning ("Error reading configuration from GConf: %s", error->message ? error->message : "Unknown error");
-                g_clear_error (&error);
-        }
+        free_percent_notify_again = g_settings_get_double (settings, SETTINGS_FREE_PC_NOTIFY_AGAIN_KEY);
         if (free_percent_notify_again >= 1 || free_percent_notify_again < 0) {
                 g_warning ("Invalid configuration of free_percent_notify_again: %f\n" \
                            "Using sensible default\n", free_percent_notify_again);
                 free_percent_notify_again = 0.01;
         }
 
-        free_size_gb_no_notify = gconf_client_get_int (client,
-                                                       GCONF_HOUSEKEEPING_DIR "/" GCONF_FREE_SIZE_NO_NOTIFY,
-                                                       &error);
-        if (error != NULL) {
-                g_warning ("Error reading configuration from GConf: %s", error->message ? error->message : "Unknown error");
-                g_clear_error (&error);
-        }
-         min_notify_period = gconf_client_get_int (client,
-                                                   GCONF_HOUSEKEEPING_DIR "/" GCONF_MIN_NOTIFY_PERIOD,
-                                                   &error);
-         if (error != NULL) {
-                 g_warning ("Error reading configuration from GConf: %s", error->message ? error->message : "Unkown error");
-                 g_clear_error (&error);
-         }
-
-         if (ignore_paths != NULL) {
+        free_size_gb_no_notify = g_settings_get_int (settings, SETTINGS_FREE_SIZE_NO_NOTIFY);
+        min_notify_period = g_settings_get_int (settings, SETTINGS_MIN_NOTIFY_PERIOD);
+
+        if (ignore_paths != NULL) {
                 g_slist_foreach (ignore_paths, (GFunc) g_free, NULL);
                 g_slist_free (ignore_paths);
-         }
-         ignore_paths = gconf_client_get_list (client,
-                                               GCONF_HOUSEKEEPING_DIR "/" GCONF_IGNORE_PATHS,
-                                               GCONF_VALUE_STRING, &error);
-         if (error != NULL) {
-                 g_warning ("Error reading configuration from GConf: %s", error->message ? error->message : "Unkown error");
-                 g_clear_error (&error);
-         } else {
+        }
+
+        settings_list = g_settings_get_strv (settings, SETTINGS_IGNORE_PATHS);
+        if (settings_list != NULL) {
+                gint i;
+
+                for (i = 0; i < G_N_ELEMENTS (settings_list); i++) {
+                        if (settings_list[i] != NULL)
+                                ignore_paths = g_slist_append (ignore_paths, settings_list[i]);
+                }
+
                 /* Make sure we dont leave stale entries in ldsm_notified_hash */
-                 g_hash_table_foreach_remove (ldsm_notified_hash,
-                                              ldsm_is_hash_item_in_ignore_paths, NULL);
-         }
+                g_hash_table_foreach_remove (ldsm_notified_hash,
+                                             ldsm_is_hash_item_in_ignore_paths, NULL);
+
+                g_strfreev (settings_list);
+        }
 }
 
 static void
-gsd_ldsm_update_config (GConfClient *client,
-                        guint cnxn_id,
-                        GConfEntry *entry,
+gsd_ldsm_update_config (GSettings *settings,
+                        const gchar *key,
                         gpointer user_data)
 {
         gsd_ldsm_get_config ();
@@ -640,8 +618,6 @@ gsd_ldsm_update_config (GConfClient *client,
 void
 gsd_ldsm_setup (gboolean check_now)
 {
-        GError          *error = NULL;
-
         if (ldsm_notified_hash || ldsm_timeout_id || ldsm_monitor) {
                 g_warning ("Low disk space monitor already initialized.");
                 return;
@@ -651,20 +627,10 @@ gsd_ldsm_setup (gboolean check_now)
                                                     g_free,
                                                     ldsm_free_mount_info);
 
-        client = gconf_client_get_default ();
-        if (client != NULL) {
-                gsd_ldsm_get_config ();
-                gconf_notify_id = gconf_client_notify_add (client,
-                                                           GCONF_HOUSEKEEPING_DIR,
-                                                           (GConfClientNotifyFunc) gsd_ldsm_update_config,
-                                                           NULL, NULL, &error);
-                if (error != NULL) {
-                        g_warning ("Cannot register callback for GConf notification");
-                        g_clear_error (&error);
-                }
-        } else {
-                g_warning ("Failed to get default client");
-        }
+        settings = g_settings_new (SETTINGS_HOUSEKEEPING_DIR);
+        gsd_ldsm_get_config ();
+        g_signal_connect (G_OBJECT (settings), "changed",
+                          G_CALLBACK (gsd_ldsm_update_config), NULL);
 
         ldsm_monitor = g_unix_mount_monitor_new ();
         g_unix_mount_monitor_set_rate_limit (ldsm_monitor, 1000);
@@ -694,9 +660,8 @@ gsd_ldsm_clean (void)
                 g_object_unref (ldsm_monitor);
         ldsm_monitor = NULL;
 
-        if (client) {
-                gconf_client_notify_remove (client, gconf_notify_id);
-                g_object_unref (client);
+        if (settings != NULL) {
+                g_object_unref (settings);
         }
 
         if (dialog) {
diff --git a/plugins/housekeeping/gsd-ldsm-dialog.c b/plugins/housekeeping/gsd-ldsm-dialog.c
index c02352c..1c26898 100644
--- a/plugins/housekeeping/gsd-ldsm-dialog.c
+++ b/plugins/housekeeping/gsd-ldsm-dialog.c
@@ -18,11 +18,11 @@
  */
 
 #include <glib/gi18n.h>
-#include <gconf/gconf-client.h>
+#include <gio/gio.h>
 
 #include "gsd-ldsm-dialog.h"
 
-#define GCONF_CLIENT_IGNORE_PATHS "/apps/gnome_settings_daemon/plugins/housekeeping/ignore_paths"
+#define SETTINGS_HOUSEKEEPING_DIR     "org.gnome.settings-daemon.plugins.housekeeping"
 
 enum
 {
@@ -149,44 +149,46 @@ ignore_check_button_toggled_cb (GtkToggleButton *button,
                                 gpointer user_data)
 {
         GsdLdsmDialog *dialog = (GsdLdsmDialog *)user_data;
-        GConfClient *client;
-        GSList *ignore_paths;
-        GError *error = NULL;
-        gboolean ignore, ret, updated;
+        GSettings *settings;
+        gchar **settings_list;
+        gboolean ignore, updated;
         
-        client = gconf_client_get_default ();
-        if (client != NULL) {
-                ignore_paths = gconf_client_get_list (client,
-                                                      GCONF_CLIENT_IGNORE_PATHS,
-                                                      GCONF_VALUE_STRING, &error);
-                if (error != NULL) {
-                        g_warning ("Cannot change ignore preference - failed to read existing configuration: %s",
-                                   error->message ? error->message : "Unkown error");
-                        g_clear_error (&error);
-                        return;
-                } else {
-                        ignore = gtk_toggle_button_get_active (button);
-                        updated = update_ignore_paths (&ignore_paths, dialog->priv->mount_path, ignore); 
+        settings = g_settings_new (SETTINGS_HOUSEKEEPING_DIR);
+        if (settings != NULL) {
+                gint i;
+                GSList *ignore_paths = NULL;
+
+                settings_list = g_settings_get_strv (settings, "ignore-paths");
+
+                for (i = 0; i < G_N_ELEMENTS (settings_list); i++) {
+                        if (settings_list[i] != NULL)
+                                ignore_paths = g_slist_append (ignore_paths, g_strdup (settings_list[i]));
                 }
+
+                ignore = gtk_toggle_button_get_active (button);
+                updated = update_ignore_paths (&ignore_paths, dialog->priv->mount_path, ignore);
+
+                g_strfreev (settings_list);
                 
-                if (!updated)
-                        return;
-                
-                ret = gconf_client_set_list (client,
-                                             GCONF_CLIENT_IGNORE_PATHS,
-                                             GCONF_VALUE_STRING,
-                                             ignore_paths, &error);
-                if (!ret || error != NULL) {
-                        g_warning ("Cannot change ignore preference - failed to commit changes: %s",
-                                   error->message ? error->message : "Unkown error");
-                        g_clear_error (&error);
+                if (updated) {
+                        GSList *l;
+                        GPtrArray *array = g_ptr_array_new ();
+
+                        for (l = ignore_paths; l != NULL; l = l->next)
+                                g_ptr_array_add (array, l->data);
+
+                        if (!g_settings_set_strv (settings, "ignore-paths", (const gchar **) array->pdata)) {
+                                g_warning ("Cannot change ignore preference - failed to commit changes");
+                        }
+
+                        g_ptr_array_free (array, FALSE);
                 }
-                
+
                 g_slist_foreach (ignore_paths, (GFunc) g_free, NULL);
                 g_slist_free (ignore_paths);
-                g_object_unref (client);
+                g_object_unref (settings);
         } else {
-                g_warning ("Cannot change ignore preference - failed to get GConfClient");
+                g_warning ("Cannot change ignore preference - failed to get settings client");
         }     
 }
 
@@ -228,7 +230,7 @@ gsd_ldsm_dialog_init (GsdLdsmDialog *dialog)
         /* Create the check button to ignore future warnings */
         dialog->priv->ignore_check_button = gtk_check_button_new ();
         /* The button should be inactive if the dialog was just called.
-         * I suppose it could be possible for the user to manually edit the GConf key between
+         * I suppose it could be possible for the user to manually edit the GSettings key between
          * the mount being checked and the dialog appearing, but I don't think it matters
          * too much */
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->ignore_check_button), FALSE);
diff --git a/plugins/media-keys/acme.h b/plugins/media-keys/acme.h
index 8ceae21..e696d7c 100644
--- a/plugins/media-keys/acme.h
+++ b/plugins/media-keys/acme.h
@@ -23,8 +23,7 @@
 
 #include "gsd-keygrab.h"
 
-#define GCONF_BINDING_DIR "/apps/gnome_settings_daemon/keybindings"
-#define GCONF_MISC_DIR "/apps/gnome_settings_daemon"
+#define SETTINGS_BINDING_DIR "org.gnome.desktop.keybindings"
 
 enum {
         TOUCHPAD_KEY,
@@ -51,28 +50,28 @@ enum {
 
 static struct {
         int key_type;
-        const char *gconf_key;
+        const char *settings_key;
         Key *key;
 } keys[HANDLED_KEYS] = {
-        { TOUCHPAD_KEY, GCONF_BINDING_DIR "/touchpad", NULL },
-        { MUTE_KEY, GCONF_BINDING_DIR "/volume_mute",NULL },
-        { VOLUME_DOWN_KEY, GCONF_BINDING_DIR "/volume_down", NULL },
-        { VOLUME_UP_KEY, GCONF_BINDING_DIR "/volume_up", NULL },
-        { POWER_KEY, GCONF_BINDING_DIR "/power", NULL },
-        { EJECT_KEY, GCONF_BINDING_DIR "/eject", NULL },
-        { HOME_KEY, GCONF_BINDING_DIR "/home", NULL },
-        { MEDIA_KEY, GCONF_BINDING_DIR "/media", NULL },
-        { CALCULATOR_KEY, GCONF_BINDING_DIR "/calculator", NULL },
-        { SEARCH_KEY, GCONF_BINDING_DIR "/search", NULL },
-        { EMAIL_KEY, GCONF_BINDING_DIR "/email", NULL },
-        { SCREENSAVER_KEY, GCONF_BINDING_DIR "/screensaver", NULL },
-        { HELP_KEY, GCONF_BINDING_DIR "/help", NULL },
-        { WWW_KEY, GCONF_BINDING_DIR "/www", NULL },
-        { PLAY_KEY, GCONF_BINDING_DIR "/play", NULL },
-        { PAUSE_KEY, GCONF_BINDING_DIR "/pause", NULL },
-        { STOP_KEY, GCONF_BINDING_DIR "/stop", NULL },
-        { PREVIOUS_KEY, GCONF_BINDING_DIR "/previous", NULL },
-        { NEXT_KEY, GCONF_BINDING_DIR "/next", NULL },
+        { TOUCHPAD_KEY, "touchpad", NULL },
+        { MUTE_KEY, "volume-mute",NULL },
+        { VOLUME_DOWN_KEY, "volume-down", NULL },
+        { VOLUME_UP_KEY, "volume-up", NULL },
+        { POWER_KEY, "power", NULL },
+        { EJECT_KEY, "eject", NULL },
+        { HOME_KEY, "home", NULL },
+        { MEDIA_KEY, "media", NULL },
+        { CALCULATOR_KEY, "calculator", NULL },
+        { SEARCH_KEY, "search", NULL },
+        { EMAIL_KEY, "email", NULL },
+        { SCREENSAVER_KEY, "screensaver", NULL },
+        { HELP_KEY, "help", NULL },
+        { WWW_KEY, "www", NULL },
+        { PLAY_KEY, "play", NULL },
+        { PAUSE_KEY, "pause", NULL },
+        { STOP_KEY, "stop", NULL },
+        { PREVIOUS_KEY, "previous", NULL },
+        { NEXT_KEY, "next", NULL },
 };
 
 #endif /* __ACME_H__ */
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index b563f73..fbad5e1 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -33,10 +33,10 @@
 
 #include <glib.h>
 #include <glib/gi18n.h>
+#include <gio/gio.h>
 #include <gdk/gdk.h>
 #include <gdk/gdkx.h>
 #include <gtk/gtk.h>
-#include <gconf/gconf-client.h>
 
 #include <dbus/dbus-glib.h>
 #include <dbus/dbus-glib-lowlevel.h>
@@ -60,7 +60,7 @@
 #define GSD_MEDIA_KEYS_DBUS_PATH GSD_DBUS_PATH "/MediaKeys"
 #define GSD_MEDIA_KEYS_DBUS_NAME GSD_DBUS_NAME ".MediaKeys"
 
-#define TOUCHPAD_ENABLED_KEY "/desktop/gnome/peripherals/touchpad/touchpad_enabled"
+#define TOUCHPAD_ENABLED_KEY "touchpad-enabled"
 
 #define VOLUME_STEP 6           /* percents for one volume button press */
 #define MAX_VOLUME 65536.0
@@ -80,7 +80,7 @@ struct GsdMediaKeysManagerPrivate
         GvcMixerStream  *stream;
 #endif /* HAVE_PULSE */
         GtkWidget       *dialog;
-        GConfClient     *conf_client;
+        GSettings       *settings;
         GVolumeMonitor  *volume_monitor;
 
         /* Multihead stuff */
@@ -90,7 +90,6 @@ struct GsdMediaKeysManagerPrivate
         GList           *media_players;
 
         DBusGConnection *connection;
-        guint            notify[HANDLED_KEYS];
 };
 
 enum {
@@ -152,25 +151,25 @@ acme_error (char * msg)
 static char *
 get_term_command (GsdMediaKeysManager *manager)
 {
-        char *cmd_term;
+        char *cmd_term, *cmd_args;;
         char *cmd = NULL;
+        GSettings *settings;
 
-        cmd_term = gconf_client_get_string (manager->priv->conf_client,
-                                            "/desktop/gnome/applications/terminal/exec", NULL);
-        if ((cmd_term != NULL) && (strcmp (cmd_term, "") != 0)) {
-                char *cmd_args;
-                cmd_args = gconf_client_get_string (manager->priv->conf_client,
-                                                    "/desktop/gnome/applications/terminal/exec_arg", NULL);
-                if ((cmd_args != NULL) && (strcmp (cmd_term, "") != 0)) {
-                        cmd = g_strdup_printf ("%s %s -e", cmd_term, cmd_args);
-                } else {
-                        cmd = g_strdup_printf ("%s -e", cmd_term);
-                }
+        settings = g_settings_new ("org.gnome.desktop.applications.terminal");
+        cmd_term = g_settings_get_string (settings, "exec");
+        if (strcmp (cmd_term, "") == 0)
+                cmd_term = g_strdup ("gnome-terminal");
 
-                g_free (cmd_args);
+        cmd_args = g_settings_get_string (settings, "exec-arg");
+        if (strcmp (cmd_term, "") != 0) {
+                cmd = g_strdup_printf ("%s %s -e", cmd_term, cmd_args);
+        } else {
+                cmd = g_strdup_printf ("%s -e", cmd_term);
         }
 
+        g_free (cmd_args);
         g_free (cmd_term);
+        g_object_unref (settings);
 
         return cmd;
 }
@@ -270,21 +269,20 @@ is_valid_shortcut (const char *string)
 }
 
 static void
-update_kbd_cb (GConfClient         *client,
-               guint                id,
-               GConfEntry          *entry,
+update_kbd_cb (GSettings           *settings,
+               const gchar         *key,
                GsdMediaKeysManager *manager)
 {
         int      i;
         gboolean need_flush = TRUE;
 
-        g_return_if_fail (entry->key != NULL);
+        g_return_if_fail (key != NULL);
 
         gdk_error_trap_push ();
 
         /* Find the key that was modified */
         for (i = 0; i < HANDLED_KEYS; i++) {
-                if (strcmp (entry->key, keys[i].gconf_key) == 0) {
+                if (strcmp (key, keys[i].settings_key) == 0) {
                         char *tmp;
                         Key  *key;
 
@@ -296,9 +294,7 @@ update_kbd_cb (GConfClient         *client,
                         g_free (keys[i].key);
                         keys[i].key = NULL;
 
-                        tmp = gconf_client_get_string (manager->priv->conf_client,
-                                                       keys[i].gconf_key, NULL);
-
+                        tmp = g_settings_get_string (manager->priv->settings, keys[i].settings_key);
                         if (is_valid_shortcut (tmp) == FALSE) {
                                 g_free (tmp);
                                 break;
@@ -341,18 +337,7 @@ init_kbd (GsdMediaKeysManager *manager)
                 char *tmp;
                 Key  *key;
 
-                manager->priv->notify[i] =
-                        gconf_client_notify_add (manager->priv->conf_client,
-                                                 keys[i].gconf_key,
-                                                 (GConfClientNotifyFunc) update_kbd_cb,
-                                                 manager,
-                                                 NULL,
-                                                 NULL);
-
-                tmp = gconf_client_get_string (manager->priv->conf_client,
-                                               keys[i].gconf_key,
-                                               NULL);
-
+                tmp = g_settings_get_string (manager->priv->settings, keys[i].settings_key);
                 if (!is_valid_shortcut (tmp)) {
                         g_debug ("Not a valid shortcut: '%s'", tmp);
                         g_free (tmp);
@@ -452,115 +437,43 @@ dialog_show (GsdMediaKeysManager *manager)
 }
 
 static void
-do_unknown_action (GsdMediaKeysManager *manager,
-                   const char          *url)
-{
-        char *string;
-
-        g_return_if_fail (url != NULL);
-
-        string = gconf_client_get_string (manager->priv->conf_client,
-                                          "/desktop/gnome/url-handlers/unknown/command",
-                                          NULL);
-
-        if ((string != NULL) && (strcmp (string, "") != 0)) {
-                char *cmd;
-                cmd = g_strdup_printf (string, url);
-                execute (manager, cmd, FALSE, FALSE);
-                g_free (cmd);
-        }
-        g_free (string);
-}
-
-static void
-do_help_action (GsdMediaKeysManager *manager)
+do_url_action (GsdMediaKeysManager *manager,
+               const char          *scheme)
 {
-        char *string;
+        GAppInfo *app_info;
 
-        string = gconf_client_get_string (manager->priv->conf_client,
-                                          "/desktop/gnome/url-handlers/ghelp/command",
-                                          NULL);
+        app_info = g_app_info_get_default_for_uri_scheme (scheme);
+        if (app_info != NULL) {
+                GError *error = NULL;
 
-        if ((string != NULL) && (strcmp (string, "") != 0)) {
-                char *cmd;
-                cmd = g_strdup_printf (string, "");
-                execute (manager, cmd, FALSE, FALSE);
-                g_free (cmd);
+                if (!g_app_info_launch (app_info, NULL, NULL, &error)) {
+                        g_warning ("Could not launch '%s': %s",
+                                   g_app_info_get_commandline (app_info),
+                                   error->message);
+                        g_error_free (error);
+                }
         } else {
-                do_unknown_action (manager, "ghelp:");
+                g_warning ("Could not find default application for '%s' scheme", scheme);
         }
-
-        g_free (string);
-}
-
-static void
-do_mail_action (GsdMediaKeysManager *manager)
-{
-        char *string;
-
-        string = gconf_client_get_string (manager->priv->conf_client,
-                                          "/desktop/gnome/url-handlers/mailto/command",
-                                          NULL);
-
-        if ((string != NULL) && (strcmp (string, "") != 0)) {
-                char *cmd;
-                cmd = g_strdup_printf (string, "");
-                execute (manager,
-                         cmd,
-                         FALSE,
-                         gconf_client_get_bool (manager->priv->conf_client,
-                                                "/desktop/gnome/url-handlers/mailto/needs_terminal", NULL));
-                g_free (cmd);
-        }
-        g_free (string);
 }
 
 static void
 do_media_action (GsdMediaKeysManager *manager)
 {
         char *command;
+        GSettings *settings;
 
-        command = gconf_client_get_string (manager->priv->conf_client,
-                                           "/desktop/gnome/applications/media/exec", NULL);
+        settings = g_settings_new ("org.gnome.desktop.applications.media");
+        command = g_settings_get_string (settings, "exec");
         if ((command != NULL) && (strcmp (command, "") != 0)) {
                 execute (manager,
                          command,
                          FALSE,
-                         gconf_client_get_bool (manager->priv->conf_client,
-                                                "/desktop/gnome/applications/media/needs_term", NULL));
+                         g_settings_get_boolean (settings, "needs-terminal"));
         }
-        g_free (command);
-}
-
-static void
-do_www_action (GsdMediaKeysManager *manager,
-               const char          *url)
-{
-        char *string;
-
-        string = gconf_client_get_string (manager->priv->conf_client,
-                                          "/desktop/gnome/url-handlers/http/command",
-                                          NULL);
-
-        if ((string != NULL) && (strcmp (string, "") != 0)) {
-                gchar *cmd;
-
-                if (url == NULL) {
-                        cmd = g_strdup_printf (string, "");
-                } else {
-                        cmd = g_strdup_printf (string, url);
-                }
 
-                execute (manager,
-                         cmd,
-                         FALSE,
-                         gconf_client_get_bool (manager->priv->conf_client,
-                                                "/desktop/gnome/url-handlers/http/needs_terminal", NULL));
-                g_free (cmd);
-        } else {
-                do_unknown_action (manager, url ? url : "");
-        }
-        g_free (string);
+        g_free (command);
+        g_object_unref (settings);
 }
 
 static void
@@ -638,8 +551,11 @@ do_eject_action (GsdMediaKeysManager *manager)
 static void
 do_touchpad_action (GsdMediaKeysManager *manager)
 {
-        GConfClient *client = manager->priv->conf_client;
-        gboolean state = gconf_client_get_bool (client, TOUCHPAD_ENABLED_KEY, NULL);
+        GSettings *settings;
+        gboolean state;
+
+        settings = g_settings_new ("org.gnome.desktop.peripherals.touchpad");
+        state = g_settings_get_boolean (settings, TOUCHPAD_ENABLED_KEY);
 
         dialog_init (manager);
         gsd_media_keys_window_set_action_custom (GSD_MEDIA_KEYS_WINDOW (manager->priv->dialog),
@@ -647,7 +563,8 @@ do_touchpad_action (GsdMediaKeysManager *manager)
                                                  FALSE);
         dialog_show (manager);
 
-        gconf_client_set_bool (client, TOUCHPAD_ENABLED_KEY, !state, NULL);
+        g_settings_set_boolean (settings, TOUCHPAD_ENABLED_KEY, !state);
+        g_object_unref (settings);
 }
 
 #ifdef HAVE_PULSE
@@ -688,12 +605,7 @@ do_sound_action (GsdMediaKeysManager *manager,
         if (manager->priv->stream == NULL)
                 return;
 
-        vol_step = gconf_client_get_int (manager->priv->conf_client,
-                                         GCONF_MISC_DIR "/volume_step",
-                                         NULL);
-
-        if (vol_step <= 0 || vol_step > 100)
-                vol_step = VOLUME_STEP;
+        vol_step = VOLUME_STEP;
 
         norm_vol_step = PA_VOLUME_NORM * vol_step / 100;
 
@@ -948,7 +860,7 @@ do_action (GsdMediaKeysManager *manager,
                 g_free (cmd);
                 break;
         case EMAIL_KEY:
-                do_mail_action (manager);
+                do_url_action (manager, "mailto");
                 break;
         case SCREENSAVER_KEY:
                 if ((cmd = g_find_program_in_path ("gnome-screensaver-command"))) {
@@ -960,10 +872,10 @@ do_action (GsdMediaKeysManager *manager,
                 g_free (cmd);
                 break;
         case HELP_KEY:
-                do_help_action (manager);
+                do_url_action (manager, "ghelp");
                 break;
         case WWW_KEY:
-                do_www_action (manager, NULL);
+                do_url_action (manager, "http");
                 break;
         case MEDIA_KEY:
                 do_media_action (manager);
@@ -1065,12 +977,9 @@ start_media_keys_idle_cb (GsdMediaKeysManager *manager)
         g_debug ("Starting media_keys manager");
         gnome_settings_profile_start (NULL);
         manager->priv->volume_monitor = g_volume_monitor_get ();
-        manager->priv->conf_client = gconf_client_get_default ();
-
-        gconf_client_add_dir (manager->priv->conf_client,
-                              GCONF_BINDING_DIR,
-                              GCONF_CLIENT_PRELOAD_ONELEVEL,
-                              NULL);
+        manager->priv->settings = g_settings_new (SETTINGS_BINDING_DIR);
+        g_signal_connect (G_OBJECT (manager->priv->settings), "changed",
+                          G_CALLBACK (update_kbd_cb), manager);
 
         init_screens (manager);
         init_kbd (manager);
@@ -1147,20 +1056,9 @@ gsd_media_keys_manager_stop (GsdMediaKeysManager *manager)
                                           manager);
         }
 
-        if (priv->conf_client) {
-                gconf_client_remove_dir (priv->conf_client,
-                                         GCONF_BINDING_DIR,
-                                         NULL);
-
-                for (i = 0; i < HANDLED_KEYS; ++i) {
-                        if (priv->notify[i] != 0) {
-                                gconf_client_notify_remove (priv->conf_client, priv->notify[i]);
-                                priv->notify[i] = 0;
-                        }
-                }
-
-                g_object_unref (priv->conf_client);
-                priv->conf_client = NULL;
+        if (priv->settings) {
+                g_object_unref (priv->settings);
+                priv->settings = NULL;
         }
 
         if (priv->volume_monitor != NULL) {
diff --git a/plugins/mouse/gsd-mouse-manager.c b/plugins/mouse/gsd-mouse-manager.c
index 740805f..a0853c6 100644
--- a/plugins/mouse/gsd-mouse-manager.c
+++ b/plugins/mouse/gsd-mouse-manager.c
@@ -33,6 +33,7 @@
 
 #include <glib.h>
 #include <glib/gi18n.h>
+#include <gio/gio.h>
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
 #include <gdk/gdkx.h>
@@ -54,7 +55,7 @@
 
 #define GCONF_MOUSE_DIR         "/desktop/gnome/peripherals/mouse"
 #define GCONF_MOUSE_A11Y_DIR    "/desktop/gnome/accessibility/mouse"
-#define GCONF_TOUCHPAD_DIR      "/desktop/gnome/peripherals/touchpad"
+#define SETTINGS_TOUCHPAD_DIR      "org.gnome.desktop.peripherals.touchpad"
 
 #define KEY_LEFT_HANDED         GCONF_MOUSE_DIR "/left_handed"
 #define KEY_MOTION_ACCELERATION GCONF_MOUSE_DIR "/motion_acceleration"
@@ -62,19 +63,19 @@
 #define KEY_LOCATE_POINTER      GCONF_MOUSE_DIR "/locate_pointer"
 #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_W_TYPING    "disable_while_typing"
 #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"
-#define KEY_PAD_HORIZ_SCROLL    GCONF_TOUCHPAD_DIR "/horiz_scroll_enabled"
-#define KEY_TOUCHPAD_ENABLED    GCONF_TOUCHPAD_DIR "/touchpad_enabled"
+#define KEY_TAP_TO_CLICK        "tap_to_click"
+#define KEY_SCROLL_METHOD       "scroll_method"
+#define KEY_PAD_HORIZ_SCROLL    "horiz_scroll_enabled"
+#define KEY_TOUCHPAD_ENABLED    "touchpad_enabled"
 #endif
 
 struct GsdMouseManagerPrivate
 {
+        GSettings *touchpad_settings;
         guint notify;
         guint notify_a11y;
-        guint notify_touchpad;
 
         gboolean mousetweaks_daemon_running;
         gboolean syndaemon_spawned;
@@ -297,7 +298,7 @@ touchpad_has_single_button (XDevice *device)
 
 
 static void
-set_xinput_devices_left_handed (gboolean left_handed)
+set_xinput_devices_left_handed (GsdMouseManager *manager, gboolean left_handed)
 {
         XDeviceInfo *device_info;
         gint n_devices;
@@ -327,7 +328,7 @@ set_xinput_devices_left_handed (gboolean left_handed)
                 device = device_is_touchpad (device_info[i]);
                 if (device != NULL) {
                         GConfClient *client = gconf_client_get_default ();
-                        gboolean tap = gconf_client_get_bool (client, KEY_TAP_TO_CLICK, NULL);
+                        gboolean tap = g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TAP_TO_CLICK);
                         gboolean single_button = touchpad_has_single_button (device);
 
                         if (tap && !single_button)
@@ -429,7 +430,7 @@ set_left_handed (GsdMouseManager *manager,
                 /* When XInput support is available, never set the
                  * button ordering on the core pointer as that would
                  * revert the changes we make on the devices themselves */
-                set_xinput_devices_left_handed (left_handed);
+                set_xinput_devices_left_handed (manager, left_handed);
                 return;
         }
 #endif
@@ -572,7 +573,7 @@ set_disable_w_typing (GsdMouseManager *manager, gboolean state)
                 if (error) {
                         GConfClient *client;
                         client = gconf_client_get_default ();
-                        gconf_client_set_bool (client, KEY_TOUCHPAD_DISABLE_W_TYPING, FALSE, NULL);
+                        g_settings_set_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_DISABLE_W_TYPING, FALSE);
                         g_object_unref (client);
                         g_error_free (error);
                 }
@@ -906,12 +907,12 @@ 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, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_DISABLE_W_TYPING));
 #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));
-        set_horiz_scroll (gconf_client_get_bool (client, KEY_PAD_HORIZ_SCROLL, NULL));
-        set_touchpad_enabled (gconf_client_get_bool (client, KEY_TOUCHPAD_ENABLED, NULL));
+        set_tap_to_click (g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TAP_TO_CLICK), left_handed);
+        set_edge_scroll (g_settings_get_int (manager->priv->touchpad_settings, KEY_SCROLL_METHOD));
+        set_horiz_scroll (g_settings_get_boolean (manager->priv->touchpad_settings, KEY_PAD_HORIZ_SCROLL));
+        set_touchpad_enabled (g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_ENABLED));
 #endif
 
         g_object_unref (client);
@@ -935,34 +936,10 @@ mouse_callback (GConfClient        *client,
                 if (entry->value->type == GCONF_VALUE_INT) {
                         set_motion_threshold (manager, gconf_value_get_int (entry->value));
                 }
-        } 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
-        } 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),
-                                          gconf_client_get_bool (client, KEY_LEFT_HANDED, NULL));
-                }
-        } else if (! strcmp (entry->key, KEY_SCROLL_METHOD)) {
-                if (entry->value->type == GCONF_VALUE_INT) {
-                        set_edge_scroll (gconf_value_get_int (entry->value));
-                        set_horiz_scroll (gconf_client_get_bool (client, KEY_PAD_HORIZ_SCROLL, NULL));
-                }
-        } else if (! strcmp (entry->key, KEY_PAD_HORIZ_SCROLL)) {
-                if (entry->value->type == GCONF_VALUE_BOOL)
-                        set_horiz_scroll (gconf_value_get_bool (entry->value));
-#endif
         } else if (! strcmp (entry->key, KEY_LOCATE_POINTER)) {
                 if (entry->value->type == GCONF_VALUE_BOOL) {
                         set_locate_pointer (manager, gconf_value_get_bool (entry->value));
                 }
-#ifdef HAVE_X11_EXTENSIONS_XINPUT_H
-        } else if (! strcmp (entry->key, KEY_TOUCHPAD_ENABLED)) {
-                if (entry->value->type == GCONF_VALUE_BOOL) {
-                    set_touchpad_enabled (gconf_value_get_bool (entry->value));
-                }
-#endif
         } else if (! strcmp (entry->key, KEY_DWELL_ENABLE)) {
                 if (entry->value->type == GCONF_VALUE_BOOL) {
                         set_mousetweaks_daemon (manager,
@@ -978,6 +955,33 @@ mouse_callback (GConfClient        *client,
         }
 }
 
+static void
+touchpad_callback (GSettings       *settings,
+                   const gchar     *key,
+                   GsdMouseManager *manager)
+{
+        GConfClient *client = gconf_client_get_default ();
+
+        if (! strcmp (key, KEY_TOUCHPAD_DISABLE_W_TYPING)) {
+                set_disable_w_typing (manager, g_settings_get_boolean (manager->priv->touchpad_settings, key));
+#ifdef HAVE_X11_EXTENSIONS_XINPUT_H
+        } else if (! strcmp (key, KEY_TAP_TO_CLICK)) {
+                set_tap_to_click (g_settings_get_boolean (settings, key),
+                                  gconf_client_get_bool (client, KEY_LEFT_HANDED, NULL));
+        } else if (! strcmp (key, KEY_SCROLL_METHOD)) {
+                set_edge_scroll (g_settings_get_int (settings, key));
+                set_horiz_scroll (g_settings_get_boolean (settings, KEY_PAD_HORIZ_SCROLL));
+        } else if (! strcmp (key, KEY_PAD_HORIZ_SCROLL)) {
+                set_horiz_scroll (g_settings_get_boolean (settings, key));
+        } else if (! strcmp (key, KEY_TOUCHPAD_ENABLED)) {
+                set_touchpad_enabled (g_settings_get_boolean (settings, key));
+        }
+#endif
+
+        g_object_unref (client);
+                
+}
+
 static guint
 register_config_callback (GsdMouseManager         *manager,
                           GConfClient             *client,
@@ -1013,11 +1017,11 @@ gsd_mouse_manager_idle_cb (GsdMouseManager *manager)
                                           client,
                                           GCONF_MOUSE_A11Y_DIR,
                                           (GConfClientNotifyFunc) mouse_callback);
-        manager->priv->notify_touchpad =
-                register_config_callback (manager,
-                                          client,
-                                          GCONF_TOUCHPAD_DIR,
-                                          (GConfClientNotifyFunc) mouse_callback);
+
+        manager->priv->touchpad_settings = g_settings_new (SETTINGS_TOUCHPAD_DIR);
+        g_signal_connect (manager->priv->touchpad_settings, "changed",
+                          G_CALLBACK (touchpad_callback), manager);
+
         manager->priv->syndaemon_spawned = FALSE;
 
 #ifdef HAVE_X11_EXTENSIONS_XINPUT_H
@@ -1029,13 +1033,13 @@ 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, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_DISABLE_W_TYPING));
 #ifdef HAVE_X11_EXTENSIONS_XINPUT_H
-        set_tap_to_click (gconf_client_get_bool (client, KEY_TAP_TO_CLICK, NULL),
+        set_tap_to_click (g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TAP_TO_CLICK),
                           gconf_client_get_bool (client, KEY_LEFT_HANDED, NULL));
-        set_edge_scroll (gconf_client_get_int (client, KEY_SCROLL_METHOD, NULL));
-        set_horiz_scroll (gconf_client_get_bool (client, KEY_PAD_HORIZ_SCROLL, NULL));
-        set_touchpad_enabled (gconf_client_get_bool (client, KEY_TOUCHPAD_ENABLED, NULL));
+        set_edge_scroll (g_settings_get_int (manager->priv->touchpad_settings, KEY_SCROLL_METHOD));
+        set_horiz_scroll (g_settings_get_boolean (manager->priv->touchpad_settings, KEY_PAD_HORIZ_SCROLL));
+        set_touchpad_enabled (g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_ENABLED));
 #endif
 
         g_object_unref (client);
@@ -1080,13 +1084,8 @@ gsd_mouse_manager_stop (GsdMouseManager *manager)
                 p->notify_a11y = 0;
         }
 
-        if (p->notify_touchpad != 0) {
-                gconf_client_remove_dir (client, GCONF_TOUCHPAD_DIR, NULL);
-                gconf_client_notify_remove (client, p->notify_touchpad);
-                p->notify_touchpad = 0;
-        }
-
         g_object_unref (client);
+        g_object_unref (manager->priv->touchpad_settings);
 
         set_locate_pointer (manager, FALSE);
 
@@ -1107,6 +1106,11 @@ gsd_mouse_manager_finalize (GObject *object)
 
         g_return_if_fail (mouse_manager->priv != NULL);
 
+        if (mouse_manager->priv->touchpad_settings != NULL)
+                g_object_unref (mouse_manager->priv->touchpad_settings);
+
+        g_free (mouse_manager->priv);
+
         G_OBJECT_CLASS (gsd_mouse_manager_parent_class)->finalize (object);
 }
 
diff --git a/plugins/smartcard/gsd-smartcard-plugin.c b/plugins/smartcard/gsd-smartcard-plugin.c
index 56136f0..1beda23 100644
--- a/plugins/smartcard/gsd-smartcard-plugin.c
+++ b/plugins/smartcard/gsd-smartcard-plugin.c
@@ -25,11 +25,10 @@
 
 #include <glib.h>
 #include <glib-object.h>
+#include <gio/gio.h>
 
 #include <dbus/dbus-glib.h>
 
-#include <gconf/gconf-client.h>
-
 #include "gnome-settings-plugin.h"
 #include "gsd-smartcard-plugin.h"
 #include "gsd-smartcard-manager.h"
@@ -57,8 +56,7 @@ typedef enum
 #define SM_DBUS_INTERFACE "org.gnome.SessionManager"
 #define SM_LOGOUT_MODE_FORCE 2
 
-#define GSD_SMARTCARD_KEY "/desktop/gnome/peripherals/smartcard"
-#define KEY_REMOVE_ACTION GSD_SMARTCARD_KEY "/removal_action"
+#define KEY_REMOVE_ACTION "removal_action"
 
 #define GSD_SMARTCARD_PLUGIN_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), GSD_TYPE_SMARTCARD_PLUGIN, GsdSmartcardPluginPrivate))
 
@@ -182,13 +180,12 @@ user_logged_in_with_smartcard (void)
 static GsdSmartcardRemoveAction
 get_configured_remove_action (GsdSmartcardPlugin *plugin)
 {
-        GConfClient *client;
+        GSettings *settings;
         char *remove_action_string;
         GsdSmartcardRemoveAction remove_action;
 
-        client = gconf_client_get_default ();
-        remove_action_string = gconf_client_get_string (client,
-                                                        KEY_REMOVE_ACTION, NULL);
+        settings = g_settings_new ("org.gnome.desktop.peripherals.smartcard");
+        remove_action_string = g_settings_get_string (settings, KEY_REMOVE_ACTION);
 
         if (remove_action_string == NULL) {
                 g_warning ("GsdSmartcardPlugin unable to get smartcard remove action");
@@ -204,7 +201,7 @@ get_configured_remove_action (GsdSmartcardPlugin *plugin)
                 remove_action = GSD_SMARTCARD_REMOVE_ACTION_NONE;
         }
 
-        g_object_unref (client);
+        g_object_unref (settings);
 
         return remove_action;
 }
diff --git a/plugins/xrandr/gsd-xrandr-manager.c b/plugins/xrandr/gsd-xrandr-manager.c
index 0aef5de..1d6f6bb 100644
--- a/plugins/xrandr/gsd-xrandr-manager.c
+++ b/plugins/xrandr/gsd-xrandr-manager.c
@@ -34,10 +34,10 @@
 
 #include <glib.h>
 #include <glib/gi18n.h>
+#include <gio/gio.h>
 #include <gdk/gdk.h>
 #include <gdk/gdkx.h>
 #include <gtk/gtk.h>
-#include <gconf/gconf-client.h>
 #include <dbus/dbus-glib.h>
 
 #define GNOME_DESKTOP_USE_UNSTABLE_API
@@ -59,11 +59,11 @@
 
 #define GSD_XRANDR_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_XRANDR_MANAGER, GsdXrandrManagerPrivate))
 
-#define CONF_DIR "/apps/gnome_settings_daemon/xrandr"
-#define CONF_KEY_SHOW_NOTIFICATION_ICON (CONF_DIR "/show_notification_icon")
-#define CONF_KEY_TURN_ON_EXTERNAL_MONITORS_AT_STARTUP	(CONF_DIR "/turn_on_external_monitors_at_startup")
-#define CONF_KEY_TURN_ON_LAPTOP_MONITOR_AT_STARTUP	(CONF_DIR "/turn_on_laptop_monitor_at_startup")
-#define CONF_KEY_DEFAULT_CONFIGURATION_FILE             (CONF_DIR "/default_configuration_file")
+#define CONF_DIR "org.gnome.settings-daemon.plugins.xrandr"
+#define CONF_KEY_SHOW_NOTIFICATION_ICON ("show-notification-icon")
+#define CONF_KEY_TURN_ON_EXTERNAL_MONITORS_AT_STARTUP	("turn-on-external-monitors-at-startup")
+#define CONF_KEY_TURN_ON_LAPTOP_MONITOR_AT_STARTUP	("turn-on-laptop-monitor-at-startup")
+#define CONF_KEY_DEFAULT_CONFIGURATION_FILE             ("default-configuration-file")
 
 #define VIDEO_KEYSYM    "XF86Display"
 #define ROTATE_KEYSYM   "XF86RotateWindows"
@@ -101,8 +101,7 @@ struct GsdXrandrManagerPrivate
         GtkWidget *popup_menu;
         GnomeRRConfig *configuration;
         GnomeRRLabeler *labeler;
-        GConfClient *client;
-        int notify_id;
+        GSettings *settings;
 
         /* fn-F7 status */
         int             current_fn_f7_config;             /* -1 if no configs */
@@ -2143,21 +2142,19 @@ status_icon_stop (GsdXrandrManager *manager)
 static void
 start_or_stop_icon (GsdXrandrManager *manager)
 {
-        if (gconf_client_get_bool (manager->priv->client, CONF_KEY_SHOW_NOTIFICATION_ICON, NULL)) {
+        if (g_settings_get_boolean (manager->priv->settings, CONF_KEY_SHOW_NOTIFICATION_ICON)) {
                 status_icon_start (manager);
-        }
-        else {
+        } else {
                 status_icon_stop (manager);
         }
 }
 
 static void
-on_config_changed (GConfClient          *client,
-                   guint                 cnxn_id,
-                   GConfEntry           *entry,
+on_config_changed (GSettings            *settings,
+                   const gchar          *key,
                    GsdXrandrManager *manager)
 {
-        if (strcmp (entry->key, CONF_KEY_SHOW_NOTIFICATION_ICON) == 0)
+        if (strcmp (key, CONF_KEY_SHOW_NOTIFICATION_ICON) == 0)
                 start_or_stop_icon (manager);
 }
 
@@ -2190,9 +2187,9 @@ apply_default_boot_configuration (GsdXrandrManager *mgr, guint32 timestamp)
    	gboolean turn_on_external, turn_on_laptop;
 
         turn_on_external =
-                gconf_client_get_bool (mgr->priv->client, CONF_KEY_TURN_ON_EXTERNAL_MONITORS_AT_STARTUP, NULL);
+                g_settings_get_boolean (mgr->priv->settings, CONF_KEY_TURN_ON_EXTERNAL_MONITORS_AT_STARTUP);
         turn_on_laptop =
-                gconf_client_get_bool (mgr->priv->client, CONF_KEY_TURN_ON_LAPTOP_MONITOR_AT_STARTUP, NULL);
+                g_settings_get_boolean (mgr->priv->settings, CONF_KEY_TURN_ON_LAPTOP_MONITOR_AT_STARTUP);
 
 	if (turn_on_external && turn_on_laptop)
 		config = make_clone_setup (screen);
@@ -2273,7 +2270,7 @@ apply_default_configuration_from_file (GsdXrandrManager *manager, guint32 timest
         char *default_config_filename;
         gboolean result;
 
-        default_config_filename = gconf_client_get_string (priv->client, CONF_KEY_DEFAULT_CONFIGURATION_FILE, NULL);
+        default_config_filename = g_settings_get_string (priv->settings, CONF_KEY_DEFAULT_CONFIGURATION_FILE);
         if (!default_config_filename)
                 return FALSE;
 
@@ -2308,19 +2305,9 @@ gsd_xrandr_manager_start (GsdXrandrManager *manager,
         log_screen (manager->priv->rw_screen);
 
         manager->priv->running = TRUE;
-        manager->priv->client = gconf_client_get_default ();
-
-        g_assert (manager->priv->notify_id == 0);
-
-        gconf_client_add_dir (manager->priv->client, CONF_DIR,
-                              GCONF_CLIENT_PRELOAD_ONELEVEL,
-                              NULL);
-
-        manager->priv->notify_id =
-                gconf_client_notify_add (
-                        manager->priv->client, CONF_DIR,
-                        (GConfClientNotifyFunc)on_config_changed,
-                        manager, NULL, NULL);
+        manager->priv->settings = g_settings_new (CONF_DIR);
+        g_signal_connect (manager->priv->settings, "changed",
+                          G_CALLBACK (on_config_changed), manager);
 
         if (manager->priv->switch_video_mode_keycode) {
                 gdk_error_trap_push ();
@@ -2398,17 +2385,9 @@ gsd_xrandr_manager_stop (GsdXrandrManager *manager)
                                   (GdkFilterFunc) event_filter,
                                   manager);
 
-        if (manager->priv->notify_id != 0) {
-                gconf_client_remove_dir (manager->priv->client,
-                                         CONF_DIR, NULL);
-                gconf_client_notify_remove (manager->priv->client,
-                                            manager->priv->notify_id);
-                manager->priv->notify_id = 0;
-        }
-
-        if (manager->priv->client != NULL) {
-                g_object_unref (manager->priv->client);
-                manager->priv->client = NULL;
+        if (manager->priv->settings != NULL) {
+                g_object_unref (manager->priv->settings);
+                manager->priv->settings = NULL;
         }
 
         if (manager->priv->rw_screen != NULL) {
diff --git a/plugins/xsettings/gsd-xsettings-manager.c b/plugins/xsettings/gsd-xsettings-manager.c
index 40c2651..6f74d58 100644
--- a/plugins/xsettings/gsd-xsettings-manager.c
+++ b/plugins/xsettings/gsd-xsettings-manager.c
@@ -56,11 +56,11 @@
 #define GTK_MODULES_DIR        "/apps/gnome_settings_daemon/gtk-modules"
 
 #ifdef HAVE_FONTCONFIG
-#define FONT_RENDER_DIR "/desktop/gnome/font_rendering"
-#define FONT_ANTIALIASING_KEY FONT_RENDER_DIR "/antialiasing"
-#define FONT_HINTING_KEY      FONT_RENDER_DIR "/hinting"
-#define FONT_RGBA_ORDER_KEY   FONT_RENDER_DIR "/rgba_order"
-#define FONT_DPI_KEY          FONT_RENDER_DIR "/dpi"
+#define FONT_RENDER_DIR "org.gnome.desktop.font-rendering"
+#define FONT_ANTIALIASING_KEY "antialiasing"
+#define FONT_HINTING_KEY      "hinting"
+#define FONT_RGBA_ORDER_KEY   "rgba_order"
+#define FONT_DPI_KEY          "dpi"
 
 /* X servers sometimes lie about the screen's physical dimensions, so we cannot
  * compute an accurate DPI value.  When this happens, the user gets fonts that
@@ -95,6 +95,7 @@ struct GnomeXSettingsManagerPrivate
 {
         XSettingsManager **managers;
         guint              notify[6];
+        GSettings         *font_settings;
 #ifdef HAVE_FONTCONFIG
         fontconfig_monitor_handle_t *fontconfig_handle;
 #endif /* HAVE_FONTCONFIG */
@@ -265,25 +266,11 @@ get_dpi_from_x_server (void)
 }
 
 static double
-get_dpi_from_gconf_or_x_server (GConfClient *client)
+get_dpi_from_gconf_or_x_server (GnomeXSettingsManager *manager)
 {
-        GConfValue *value;
         double      dpi;
 
-        value = gconf_client_get_without_default (client, FONT_DPI_KEY, NULL);
-
-        /* If the user has ever set the DPI preference in GConf, we use that.
-         * Otherwise, we see if the X server reports a reasonable DPI value:  some X
-         * servers report completely bogus values, and the user gets huge or tiny
-         * fonts which are unusable.
-         */
-
-        if (value != NULL) {
-                dpi = gconf_value_get_float (value);
-                gconf_value_free (value);
-        } else {
-                dpi = get_dpi_from_x_server ();
-        }
+        dpi = g_settings_get_double (manager->priv->font_settings, FONT_DPI_KEY);
 
         return dpi;
 }
@@ -303,18 +290,18 @@ static const char *rgba_types[] = { "rgb", "bgr", "vbgr", "vrgb" };
  * This probably could be done a bit more cleanly with gconf_string_to_enum
  */
 static void
-xft_settings_get (GConfClient      *client,
-                  GnomeXftSettings *settings)
+xft_settings_get (GnomeXSettingsManager *manager,
+                  GnomeXftSettings      *settings)
 {
         char  *antialiasing;
         char  *hinting;
         char  *rgba_order;
         double dpi;
 
-        antialiasing = gconf_client_get_string (client, FONT_ANTIALIASING_KEY, NULL);
-        hinting = gconf_client_get_string (client, FONT_HINTING_KEY, NULL);
-        rgba_order = gconf_client_get_string (client, FONT_RGBA_ORDER_KEY, NULL);
-        dpi = get_dpi_from_gconf_or_x_server (client);
+        antialiasing = g_settings_get_string (manager->priv->font_settings, FONT_ANTIALIASING_KEY);
+        hinting = g_settings_get_string (manager->priv->font_settings, FONT_HINTING_KEY);
+        rgba_order = g_settings_get_string (manager->priv->font_settings, FONT_RGBA_ORDER_KEY);
+        dpi = get_dpi_from_gconf_or_x_server (manager);
 
         settings->antialias = TRUE;
         settings->hinting = TRUE;
@@ -461,7 +448,7 @@ xft_settings_set_xresources (GnomeXftSettings *settings)
 
         /* Set the new X property */
         XChangeProperty(dpy, RootWindow (dpy, 0),
-                XA_RESOURCE_MANAGER, XA_STRING, 8, PropModeReplace, add_string->str, add_string->len);
+                        XA_RESOURCE_MANAGER, XA_STRING, 8, PropModeReplace, add_string->str, add_string->len);
         XCloseDisplay (dpy);
 
         g_string_free (add_string, TRUE);
@@ -473,14 +460,13 @@ xft_settings_set_xresources (GnomeXftSettings *settings)
  * X resources
  */
 static void
-update_xft_settings (GnomeXSettingsManager *manager,
-                     GConfClient           *client)
+update_xft_settings (GnomeXSettingsManager *manager)
 {
         GnomeXftSettings settings;
 
         gnome_settings_profile_start (NULL);
 
-        xft_settings_get (client, &settings);
+        xft_settings_get (manager, &settings);
         xft_settings_set_xsettings (manager, &settings);
         xft_settings_set_xresources (&settings);
 
@@ -488,14 +474,13 @@ update_xft_settings (GnomeXSettingsManager *manager,
 }
 
 static void
-xft_callback (GConfClient           *client,
-              guint                  cnxn_id,
-              GConfEntry            *entry,
+xft_callback (GSettings             *settings,
+              const gchar           *key,
               GnomeXSettingsManager *manager)
 {
         int i;
 
-        update_xft_settings (manager, client);
+        update_xft_settings (manager);
 
         for (i = 0; manager->priv->managers [i]; i++) {
                 xsettings_manager_notify (manager->priv->managers [i]);
@@ -808,6 +793,7 @@ gnome_xsettings_manager_start (GnomeXSettingsManager *manager,
                 return FALSE;
         }
 
+        manager->priv->font_settings = g_settings_new (FONT_RENDER_DIR);
         client = gconf_client_get_default ();
 
         gconf_client_add_dir (client, MOUSE_SETTINGS_DIR, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
@@ -815,7 +801,6 @@ gnome_xsettings_manager_start (GnomeXSettingsManager *manager,
         gconf_client_add_dir (client, INTERFACE_SETTINGS_DIR, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
         gconf_client_add_dir (client, SOUND_SETTINGS_DIR, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
         gconf_client_add_dir (client, GTK_MODULES_DIR, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
-        gconf_client_add_dir (client, FONT_RENDER_DIR, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
 
         for (i = 0; i < G_N_ELEMENTS (translations); i++) {
                 GConfValue *val;
@@ -863,11 +848,9 @@ gnome_xsettings_manager_start (GnomeXSettingsManager *manager,
         gtk_modules_callback (client, 0, NULL, manager);
 
 #ifdef HAVE_FONTCONFIG
-        manager->priv->notify[5] =
-                register_config_callback (manager, client,
-                                          FONT_RENDER_DIR,
-                                          (GConfClientNotifyFunc) xft_callback);
-        update_xft_settings (manager, client);
+        g_signal_connect (manager->priv->font_settings, "changed",
+                          G_CALLBACK (xft_callback), manager);
+        update_xft_settings (manager);
 
         start_fontconfig_monitor (manager);
 #endif /* HAVE_FONTCONFIG */
@@ -914,7 +897,6 @@ gnome_xsettings_manager_stop (GnomeXSettingsManager *manager)
         gconf_client_remove_dir (client, SOUND_SETTINGS_DIR, NULL);
         gconf_client_remove_dir (client, GTK_MODULES_DIR, NULL);
 #ifdef HAVE_FONTCONFIG
-        gconf_client_remove_dir (client, FONT_RENDER_DIR, NULL);
 
         stop_fontconfig_monitor (manager);
 #endif /* HAVE_FONTCONFIG */
@@ -927,6 +909,7 @@ gnome_xsettings_manager_stop (GnomeXSettingsManager *manager)
         }
 
         g_object_unref (client);
+        g_object_unref (manager->priv->font_settings);
 }
 
 static void
